onejs-sl 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.0
4
+
5
+ A program can read what it drew the frame before, and count frames (`Specs/SL_NEXT.md` 4). Every existing program keeps its hash and its shader; one that reads the new names is IR 5. A host has to forward the new `reads` to draw such a program, which makes this a minor.
6
+
7
+ - `previous`, the frame this program drew last, read as `tex2D(previous, uv)`; `previous.sample(uv)` in `sl.program`
8
+ - `frame`, an int counting frames since `previous` was last cleared, and `deltaTime`, the seconds since the frame before
9
+ - A file that already used one of the three names keeps its own
10
+ - `readsOf(program)` and `compile(p).reads` say which of the three a host has to keep between frames
11
+ - `BodyTarget` takes `inputs.frame`, `inputs.deltaTime` and `previous(uv)`, all optional; `emitBody` names the one a program needs and a target lacks
12
+ - The Unity shader reads the step from `_Res.zw` and the previous frame from `_Prev`; the web frame from `sl_Res.w`, `sl_Opt.z` and its own binding
13
+ - IR 5: `SAMPLE_PREVIOUS` and the two inputs
14
+ - `fromGLSL` turns `iFrame` and `iTimeDelta` into `frame` and `deltaTime`
15
+ - The goldens step the programs that read the three, and hold the history to the bit
16
+ - The web emitters refuse an input they have no mapping for
17
+ - The shipped source is typechecked against ES2020 with no Node types, which found the parser's `Array.prototype.at`
18
+
3
19
  ## 0.6.0
4
20
 
5
21
  An int uniform says it is one, and uint constants fold as int ones do. A `.sl` program whose uint constants now fold gets a new hash and shader, which a build regenerates; every other program keeps its hash and its shader, and a program built in code keeps both, since the fold is the `.sl` file's. That hash change and `sl.uniform.int` make this a minor.
package/README.md CHANGED
@@ -54,7 +54,11 @@ intrinsic at its exact type, since Metal overloads where HLSL converts). The `Bo
54
54
  for each input, the float4 holding a uniform slot, a texture sample and a
55
55
  sample at a mip level (`sampleLevel`, for `tex2Dlod`), whether
56
56
  `toLinear` is real (`colour: "linear"`) or the identity (`"gamma"`), and
57
- optionally a local to assign the result to. It returns the uniform and texture
57
+ optionally a local to assign the result to. A host that steps a program frame
58
+ by frame adds `frame` and `deltaTime` to its inputs and a `previous` read (below,
59
+ "What a program is given"); a target without one cannot draw a program that
60
+ reads it, and `emitBody` says which is missing rather than print a shader that
61
+ stands still. It returns the uniform and texture
58
62
  slots the body uses and the library functions it calls. The sample's contract
59
63
  is on `BodyTarget.sample`: straight alpha in and out, rgb in the space `colour`
60
64
  names (an sRGB texture decoded before filtering when it is `linear`), and
@@ -83,7 +87,8 @@ program reads it as one, so a host shows a whole number field; a float uniform
83
87
  has no `kind`. Neither mark is in the hash, since the reads' conversion already
84
88
  is. `inputsUsed`
85
89
  says which inputs the result depends on, dead nodes aside, so a host knows
86
- whether a program animates.
90
+ whether a program animates, and `readsOf` (also `compile(p).reads`) says which
91
+ of the previous frame, `frame` and `deltaTime` it needs kept between frames.
87
92
 
88
93
  ## The helper library: one source
89
94
 
@@ -144,6 +149,15 @@ stores as written), `texture.sl` (a texture's orientation and sRGB decode) and
144
149
  solid colours). `sdf-values.sl`, `fbm-values.sl` and `ramp-values.sl` are black unless a
145
150
  shape, a noise or a ramp draws differently with its parameters as values than
146
151
  as constants.
152
+ A fixture that reads the previous frame, `frame` or `deltaTime` is stepped
153
+ instead of drawn at times: eight frames at 1/30 of a second, into an
154
+ `rgba16float` history pair that starts clear, each frame then copied into the
155
+ target as an element shows it. goldens.json holds its samples at frames 0, 1
156
+ and 7, as shown and as the raw history. Three are anchors on the history, to
157
+ the bit: `counter.sl` (a step taken twice, a missed swap or 8 bit history),
158
+ `drift.sl` (the previous frame read upside down) and `frame-delta.sl` (`frame`
159
+ and `deltaTime` as a host hands them over); `trail.sl` is the fading trail the
160
+ docs show.
147
161
  The whole translated library must also compile on both backends, including
148
162
  the functions no fixture reaches. The file describes the sampling grid, the
149
163
  times and the texture every sampled slot gets. A host imports it as
@@ -156,7 +170,8 @@ bits per pixel, and `corpus/probe-hash.sl` does the same through a program;
156
170
  every pixel must match `goldens/reference.mjs`, which computes the hashes in
157
171
  JavaScript. goldens.json ships each probe under its name, as HLSL, WGSL and
158
172
  GLSL ES and with the bits it must draw, for a host to run on its own compiler,
159
- and marks the fixtures compared at 0/255 `exact`.
173
+ and marks the fixtures compared at 0/255 `exact`, and the stepped fixtures
174
+ whose history is compared to the bit `historyExact`.
160
175
 
161
176
  `npm run goldens -- --check` draws everything again and compares it with
162
177
  goldens.json instead of writing it: within 1/255, and exact fixtures and probes
@@ -170,9 +185,12 @@ hash fails there until the goldens are drawn again.
170
185
  The source reaches for no host API: no `fs`, `process`, `Buffer`,
171
186
  `TextEncoder`, `performance`, `structuredClone` or `Intl`. It runs in a
172
187
  browser (the Play editor's diagnostics), a Cloudflare worker (the Play build)
173
- and QuickJS (Magerie). Two checks hold it to that:
188
+ and QuickJS (Magerie). Three checks hold it to that:
174
189
 
175
190
  - lint refuses those globals and any Node module in `src/`;
191
+ - `npm run typecheck` also checks the shipped source alone against ES2020 with
192
+ no Node types (`tsconfig.lib.json`), since `@types/node` adds later methods
193
+ such as `Array.prototype.at`, which 0.5.0 used by mistake;
176
194
  - `npm run test:quickjs` bundles `quickjs/corpus.ts` as one ES2020 IIFE, the
177
195
  way Magerie bundles a script, runs it in QuickJS-ng and in a bare Node
178
196
  context, and fails unless the two results agree byte for byte. The corpus
@@ -350,7 +368,9 @@ number. `fromJSON` moves an older file's immediates to operands. IR 4 added
350
368
  control flow (the `if` and `loop` nodes, a loop's `param`s and each result's
351
369
  `proj`) and int, uint and bool values (a node's `kind`). A program that uses
352
370
  none of them is still IR 3 and keeps its hash; one with an `if` statement is
353
- IR 4, since the statement is now a real branch rather than a select.
371
+ IR 4, since the statement is now a real branch rather than a select. IR 5 added
372
+ the previous frame (`SAMPLE_PREVIOUS`) and the `frame` and `deltaTime` inputs;
373
+ a program that reads none of them keeps the version and the hash it had.
354
374
 
355
375
  ## Control flow
356
376
 
@@ -405,6 +425,25 @@ program that does not compiles to the bytes it always did, and a program with a
405
425
  `texel` of its own keeps it: a local, a parameter or a uniform of that name
406
426
  shadows the input.
407
427
 
428
+ Three are for a program drawn frame after frame, and a host hands them over
429
+ only to a program that reads them (`readsOf`):
430
+
431
+ - `previous`, a texture: what this program drew the frame before, read as
432
+ `tex2D(previous, uv)`. It is the program's result exactly, linear and
433
+ straight alpha, kept at 16 bits a channel, filtered bilinear and clamped at
434
+ the edges, with one level (so `tex2Dlod` refuses it). A read at a pixel's own
435
+ `uv` is that pixel.
436
+ - `frame`, an int: frames drawn since `previous` was last cleared, from 0.
437
+ - `deltaTime`: seconds since the frame before, 0 on the first.
438
+
439
+ A host advances a frame when it draws with `time` moved forward: the last
440
+ result becomes `previous`, `frame` goes up by one and `deltaTime` is the step.
441
+ A draw at the same time draws the same frame again. It clears (`previous`
442
+ transparent black, `frame` and `deltaTime` 0) on the first draw, a new size, a
443
+ new program, a seek and time going back, so `frame` is 0 exactly when
444
+ `previous` is clear. A file that already used one of the three names for its
445
+ own value, texture or function keeps it.
446
+
408
447
  Why `resolution` and `aspect` are the target's: a program is drawn with
409
448
  `Graphics.Blit` into the element's own render texture, and Unity sets `_ScreenParams` per camera and
410
449
  leaves it alone for a blit: reading it from a 64x256 target answers with the
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "generatedBy": "onejs-sl goldens/run.mjs",
3
- "package": "0.6.0",
4
- "ir": 4,
3
+ "package": "0.7.0",
4
+ "ir": 5,
5
5
  "target": "rgba8unorm-srgb: straight alpha, 8 bit, sRGB encoded, the stored bytes of a Linear OneJS game's element",
6
6
  "size": [
7
7
  64,
@@ -11,6 +11,13 @@
11
11
  0,
12
12
  1.25
13
13
  ],
14
+ "steps": "a fixture that reads previous, frame or deltaTime is stepped rather than drawn at times: 8 frames, frame k at time k / 30 with frame k and deltaTime 1 / 30 (0 on frame 0), each drawn raw into one half of an rgba16float history pair that starts clear, the other half its previous frame (bilinear, clamp to edge), then copied texel for texel into the target. frames holds the target's samples at frames 0, 1, 7, and history the same samples of the raw history, as floats",
15
+ "stepFrames": [
16
+ 0,
17
+ 1,
18
+ 7
19
+ ],
20
+ "historyExact": "a stepped fixture marked historyExact has to hold its history samples to the bit",
14
21
  "samples": "a 16 x 16 grid at x = 2 + 4i, y = 2 + 4j, rows from the top, i fastest, RGBA each",
15
22
  "texture": "every sampled slot: 8 x 8, rgba8 sRGB, linear filter, clamp to edge; texel (x, y) with y from the top = (32x + 16, 32y + 16, (x + y) even ? 200 : 40, 255); uv (0, 0) is the image's bottom left. Mip levels 1 to 3 (4 x 4, 2 x 2, 1 x 1) are each one colour, (224, 64, 32, 255), (32, 224, 64, 255), (64, 32, 224, 255), sampled nearest between levels",
16
23
  "uniforms": "each program's declared defaults; a colour uniform's default is sRGB as written",
@@ -19,6 +26,7 @@
19
26
  "webgl2": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4 Pro, Unspecified Version)"
20
27
  },
21
28
  "backendsAgreeWithin": 1,
29
+ "historiesAgreeWithin": 0,
22
30
  "exact": "a fixture marked exact has to draw its samples to the byte, not within 1/255",
23
31
  "fixtures": {
24
32
  "branch.sl": {
@@ -29,6 +37,21 @@
29
37
  "1.25": [189,94,45,255,200,99,48,255,205,102,49,255,217,108,53,255,206,102,49,255,203,101,49,255,214,107,52,255,217,108,53,255,206,102,49,255,208,103,50,255,213,106,52,255,207,103,50,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,200,99,48,255,196,97,47,255,206,103,50,255,213,106,52,255,208,103,50,255,209,104,50,255,216,108,52,255,210,105,51,255,195,96,46,255,191,94,45,255,204,101,49,255,201,100,48,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,200,99,48,255,208,104,50,255,214,106,52,255,218,108,53,255,215,107,52,255,212,106,51,255,220,110,54,255,210,104,51,255,184,91,43,255,173,85,40,255,186,92,44,255,185,91,44,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,213,106,51,255,213,106,52,255,218,109,53,255,224,112,55,255,225,113,55,255,216,108,52,255,213,106,52,255,206,102,50,255,187,92,44,255,187,92,44,255,183,90,43,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,228,114,56,255,222,111,54,255,220,110,54,255,230,115,57,255,222,111,54,255,215,107,52,255,205,102,49,255,200,99,48,255,192,95,46,255,199,99,48,255,196,97,47,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,224,112,55,255,232,116,57,255,224,112,55,255,225,112,55,255,222,111,54,255,210,104,51,255,195,96,46,255,192,95,46,255,186,92,44,255,189,93,45,255,197,98,47,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,210,104,51,255,213,106,52,255,222,111,54,255,218,109,53,255,211,105,51,255,200,99,48,255,185,91,43,255,171,84,40,255,163,80,37,255,181,89,42,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,184,91,43,255,197,98,47,255,211,105,51,255,202,100,48,255,203,101,49,255,188,93,44,255,174,85,40,255,150,73,34,255,147,71,33,255,163,80,37,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,169,83,39,255,186,92,44,255,195,96,46,255,199,99,48,255,199,99,48,255,180,89,42,255,164,80,37,255,145,70,32,255,145,70,32,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,151,73,34,255,166,81,38,255,181,89,43,255,196,97,47,255,200,99,48,255,189,93,45,255,158,77,36,255,150,73,33,255,148,72,33,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,128,61,27,255,133,64,29,255,161,78,37,255,178,87,41,255,185,91,43,255,185,91,44,255,170,83,39,255,153,74,34,255,146,71,32,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,137,66,30,255,138,66,30,255,146,70,32,255,156,76,35,255,172,84,40,255,181,89,42,255,176,86,41,255,173,85,40,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,181,89,43,255,168,82,39,255,164,80,37,255,159,78,36,255,172,85,40,255,176,87,41,255,185,91,44,255,191,94,45,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,207,103,50,255,189,93,45,255,185,91,43,255,179,88,42,255,173,85,40,255,186,92,44,255,192,95,46,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,199,99,48,255,194,96,46,255,191,94,45,255,188,93,45,255,180,89,42,255,171,84,40,255,167,82,38,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,194,96,46,255,189,93,45,255,188,93,44,255,182,90,43,255,165,81,38,255,157,77,36,255,158,77,36,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255,225,112,55,255]
30
38
  }
31
39
  },
40
+ "counter.sl": {
41
+ "hash": "dae26c70",
42
+ "historyExact": true,
43
+ "source": "// The previous frame plus 1/256 each frame (Specs/SL_NEXT.md 4). The history\n// starts clear, so frame N holds (N + 1) / 256 in red, green and blue exactly:\n// a missed swap, a step taken twice, or history kept at 8 bits all show.\nfloat4 main() {\n float4 last = tex2D(previous, uv);\n return float4(last.rgb + 1.0 / 256.0, 1);\n}\n",
44
+ "frames": {
45
+ "0": [13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255,13,13,13,255],
46
+ "1": [22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255,22,22,22,255],
47
+ "7": [49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255,49,49,49,255]
48
+ },
49
+ "history": {
50
+ "0": [0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1,0.00390625,0.00390625,0.00390625,1],
51
+ "1": [0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1,0.0078125,0.0078125,0.0078125,1],
52
+ "7": [0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1,0.03125,0.03125,0.03125,1]
53
+ }
54
+ },
32
55
  "cov-arith.sl": {
33
56
  "hash": "6af8b494",
34
57
  "source": "// + - * / pow, unary -, rcp, min, max and clamp over continuous inputs. The\n// stepwise ops are in step.sl: together they need more than the VM's eight\n// registers.\nfloat4 main() {\n float2 q = (uv - 0.5) * 6.0;\n float a = pow(abs(q.x) * 0.3, 1.7) + rcp(abs(q.y) + 1.0) - (-q.x) * 0.1;\n float c = q.y / (abs(q.x) + 2.0) + abs(q.y) * 0.1;\n return float4(saturate(a * 0.3), clamp(c * 0.5 + 0.5, 0.0, 1.0), min(max(a * 0.2, 0.1), 0.9), 1);\n}\n",
@@ -93,6 +116,21 @@
93
116
  "1.25": [98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255,98,74,46,255,108,81,51,255,121,92,58,255,138,105,67,255,161,123,80,255,187,143,93,255,214,165,108,255,223,171,113,255,230,177,117,255,237,182,120,255,242,187,123,255,246,190,125,255,248,191,126,255,248,191,126,255,248,191,126,255,248,191,126,255]
94
117
  }
95
118
  },
119
+ "drift.sl": {
120
+ "hash": "5eea1728",
121
+ "historyExact": true,
122
+ "source": "// What was drawn moves up a pixel each frame: frame 0 draws blocks, and every\n// frame after reads the previous one a pixel lower. The bottom row reads\n// itself, as the edge clamps. A previous frame read upside down moves it down.\nfloat4 main() {\n if (frame == 0) return float4(floor(fragCoord / 8) / 8, 0.5, 1);\n return tex2D(previous, uv - float2(0, texel.y));\n}\n",
123
+ "frames": {
124
+ "0": [0,240,188,255,0,240,188,255,99,240,188,255,99,240,188,255,137,240,188,255,137,240,188,255,165,240,188,255,165,240,188,255,188,240,188,255,188,240,188,255,207,240,188,255,207,240,188,255,225,240,188,255,225,240,188,255,240,240,188,255,240,240,188,255,0,240,188,255,0,240,188,255,99,240,188,255,99,240,188,255,137,240,188,255,137,240,188,255,165,240,188,255,165,240,188,255,188,240,188,255,188,240,188,255,207,240,188,255,207,240,188,255,225,240,188,255,225,240,188,255,240,240,188,255,240,240,188,255,0,225,188,255,0,225,188,255,99,225,188,255,99,225,188,255,137,225,188,255,137,225,188,255,165,225,188,255,165,225,188,255,188,225,188,255,188,225,188,255,207,225,188,255,207,225,188,255,225,225,188,255,225,225,188,255,240,225,188,255,240,225,188,255,0,225,188,255,0,225,188,255,99,225,188,255,99,225,188,255,137,225,188,255,137,225,188,255,165,225,188,255,165,225,188,255,188,225,188,255,188,225,188,255,207,225,188,255,207,225,188,255,225,225,188,255,225,225,188,255,240,225,188,255,240,225,188,255,0,207,188,255,0,207,188,255,99,207,188,255,99,207,188,255,137,207,188,255,137,207,188,255,165,207,188,255,165,207,188,255,188,207,188,255,188,207,188,255,207,207,188,255,207,207,188,255,225,207,188,255,225,207,188,255,240,207,188,255,240,207,188,255,0,207,188,255,0,207,188,255,99,207,188,255,99,207,188,255,137,207,188,255,137,207,188,255,165,207,188,255,165,207,188,255,188,207,188,255,188,207,188,255,207,207,188,255,207,207,188,255,225,207,188,255,225,207,188,255,240,207,188,255,240,207,188,255,0,188,188,255,0,188,188,255,99,188,188,255,99,188,188,255,137,188,188,255,137,188,188,255,165,188,188,255,165,188,188,255,188,188,188,255,188,188,188,255,207,188,188,255,207,188,188,255,225,188,188,255,225,188,188,255,240,188,188,255,240,188,188,255,0,188,188,255,0,188,188,255,99,188,188,255,99,188,188,255,137,188,188,255,137,188,188,255,165,188,188,255,165,188,188,255,188,188,188,255,188,188,188,255,207,188,188,255,207,188,188,255,225,188,188,255,225,188,188,255,240,188,188,255,240,188,188,255,0,165,188,255,0,165,188,255,99,165,188,255,99,165,188,255,137,165,188,255,137,165,188,255,165,165,188,255,165,165,188,255,188,165,188,255,188,165,188,255,207,165,188,255,207,165,188,255,225,165,188,255,225,165,188,255,240,165,188,255,240,165,188,255,0,165,188,255,0,165,188,255,99,165,188,255,99,165,188,255,137,165,188,255,137,165,188,255,165,165,188,255,165,165,188,255,188,165,188,255,188,165,188,255,207,165,188,255,207,165,188,255,225,165,188,255,225,165,188,255,240,165,188,255,240,165,188,255,0,137,188,255,0,137,188,255,99,137,188,255,99,137,188,255,137,137,188,255,137,137,188,255,165,137,188,255,165,137,188,255,188,137,188,255,188,137,188,255,207,137,188,255,207,137,188,255,225,137,188,255,225,137,188,255,240,137,188,255,240,137,188,255,0,137,188,255,0,137,188,255,99,137,188,255,99,137,188,255,137,137,188,255,137,137,188,255,165,137,188,255,165,137,188,255,188,137,188,255,188,137,188,255,207,137,188,255,207,137,188,255,225,137,188,255,225,137,188,255,240,137,188,255,240,137,188,255,0,99,188,255,0,99,188,255,99,99,188,255,99,99,188,255,137,99,188,255,137,99,188,255,165,99,188,255,165,99,188,255,188,99,188,255,188,99,188,255,207,99,188,255,207,99,188,255,225,99,188,255,225,99,188,255,240,99,188,255,240,99,188,255,0,99,188,255,0,99,188,255,99,99,188,255,99,99,188,255,137,99,188,255,137,99,188,255,165,99,188,255,165,99,188,255,188,99,188,255,188,99,188,255,207,99,188,255,207,99,188,255,225,99,188,255,225,99,188,255,240,99,188,255,240,99,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255],
125
+ "1": [0,240,188,255,0,240,188,255,99,240,188,255,99,240,188,255,137,240,188,255,137,240,188,255,165,240,188,255,165,240,188,255,188,240,188,255,188,240,188,255,207,240,188,255,207,240,188,255,225,240,188,255,225,240,188,255,240,240,188,255,240,240,188,255,0,240,188,255,0,240,188,255,99,240,188,255,99,240,188,255,137,240,188,255,137,240,188,255,165,240,188,255,165,240,188,255,188,240,188,255,188,240,188,255,207,240,188,255,207,240,188,255,225,240,188,255,225,240,188,255,240,240,188,255,240,240,188,255,0,225,188,255,0,225,188,255,99,225,188,255,99,225,188,255,137,225,188,255,137,225,188,255,165,225,188,255,165,225,188,255,188,225,188,255,188,225,188,255,207,225,188,255,207,225,188,255,225,225,188,255,225,225,188,255,240,225,188,255,240,225,188,255,0,225,188,255,0,225,188,255,99,225,188,255,99,225,188,255,137,225,188,255,137,225,188,255,165,225,188,255,165,225,188,255,188,225,188,255,188,225,188,255,207,225,188,255,207,225,188,255,225,225,188,255,225,225,188,255,240,225,188,255,240,225,188,255,0,207,188,255,0,207,188,255,99,207,188,255,99,207,188,255,137,207,188,255,137,207,188,255,165,207,188,255,165,207,188,255,188,207,188,255,188,207,188,255,207,207,188,255,207,207,188,255,225,207,188,255,225,207,188,255,240,207,188,255,240,207,188,255,0,207,188,255,0,207,188,255,99,207,188,255,99,207,188,255,137,207,188,255,137,207,188,255,165,207,188,255,165,207,188,255,188,207,188,255,188,207,188,255,207,207,188,255,207,207,188,255,225,207,188,255,225,207,188,255,240,207,188,255,240,207,188,255,0,188,188,255,0,188,188,255,99,188,188,255,99,188,188,255,137,188,188,255,137,188,188,255,165,188,188,255,165,188,188,255,188,188,188,255,188,188,188,255,207,188,188,255,207,188,188,255,225,188,188,255,225,188,188,255,240,188,188,255,240,188,188,255,0,188,188,255,0,188,188,255,99,188,188,255,99,188,188,255,137,188,188,255,137,188,188,255,165,188,188,255,165,188,188,255,188,188,188,255,188,188,188,255,207,188,188,255,207,188,188,255,225,188,188,255,225,188,188,255,240,188,188,255,240,188,188,255,0,165,188,255,0,165,188,255,99,165,188,255,99,165,188,255,137,165,188,255,137,165,188,255,165,165,188,255,165,165,188,255,188,165,188,255,188,165,188,255,207,165,188,255,207,165,188,255,225,165,188,255,225,165,188,255,240,165,188,255,240,165,188,255,0,165,188,255,0,165,188,255,99,165,188,255,99,165,188,255,137,165,188,255,137,165,188,255,165,165,188,255,165,165,188,255,188,165,188,255,188,165,188,255,207,165,188,255,207,165,188,255,225,165,188,255,225,165,188,255,240,165,188,255,240,165,188,255,0,137,188,255,0,137,188,255,99,137,188,255,99,137,188,255,137,137,188,255,137,137,188,255,165,137,188,255,165,137,188,255,188,137,188,255,188,137,188,255,207,137,188,255,207,137,188,255,225,137,188,255,225,137,188,255,240,137,188,255,240,137,188,255,0,137,188,255,0,137,188,255,99,137,188,255,99,137,188,255,137,137,188,255,137,137,188,255,165,137,188,255,165,137,188,255,188,137,188,255,188,137,188,255,207,137,188,255,207,137,188,255,225,137,188,255,225,137,188,255,240,137,188,255,240,137,188,255,0,99,188,255,0,99,188,255,99,99,188,255,99,99,188,255,137,99,188,255,137,99,188,255,165,99,188,255,165,99,188,255,188,99,188,255,188,99,188,255,207,99,188,255,207,99,188,255,225,99,188,255,225,99,188,255,240,99,188,255,240,99,188,255,0,99,188,255,0,99,188,255,99,99,188,255,99,99,188,255,137,99,188,255,137,99,188,255,165,99,188,255,165,99,188,255,188,99,188,255,188,99,188,255,207,99,188,255,207,99,188,255,225,99,188,255,225,99,188,255,240,99,188,255,240,99,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255],
126
+ "7": [0,225,188,255,0,225,188,255,99,225,188,255,99,225,188,255,137,225,188,255,137,225,188,255,165,225,188,255,165,225,188,255,188,225,188,255,188,225,188,255,207,225,188,255,207,225,188,255,225,225,188,255,225,225,188,255,240,225,188,255,240,225,188,255,0,225,188,255,0,225,188,255,99,225,188,255,99,225,188,255,137,225,188,255,137,225,188,255,165,225,188,255,165,225,188,255,188,225,188,255,188,225,188,255,207,225,188,255,207,225,188,255,225,225,188,255,225,225,188,255,240,225,188,255,240,225,188,255,0,207,188,255,0,207,188,255,99,207,188,255,99,207,188,255,137,207,188,255,137,207,188,255,165,207,188,255,165,207,188,255,188,207,188,255,188,207,188,255,207,207,188,255,207,207,188,255,225,207,188,255,225,207,188,255,240,207,188,255,240,207,188,255,0,207,188,255,0,207,188,255,99,207,188,255,99,207,188,255,137,207,188,255,137,207,188,255,165,207,188,255,165,207,188,255,188,207,188,255,188,207,188,255,207,207,188,255,207,207,188,255,225,207,188,255,225,207,188,255,240,207,188,255,240,207,188,255,0,188,188,255,0,188,188,255,99,188,188,255,99,188,188,255,137,188,188,255,137,188,188,255,165,188,188,255,165,188,188,255,188,188,188,255,188,188,188,255,207,188,188,255,207,188,188,255,225,188,188,255,225,188,188,255,240,188,188,255,240,188,188,255,0,188,188,255,0,188,188,255,99,188,188,255,99,188,188,255,137,188,188,255,137,188,188,255,165,188,188,255,165,188,188,255,188,188,188,255,188,188,188,255,207,188,188,255,207,188,188,255,225,188,188,255,225,188,188,255,240,188,188,255,240,188,188,255,0,165,188,255,0,165,188,255,99,165,188,255,99,165,188,255,137,165,188,255,137,165,188,255,165,165,188,255,165,165,188,255,188,165,188,255,188,165,188,255,207,165,188,255,207,165,188,255,225,165,188,255,225,165,188,255,240,165,188,255,240,165,188,255,0,165,188,255,0,165,188,255,99,165,188,255,99,165,188,255,137,165,188,255,137,165,188,255,165,165,188,255,165,165,188,255,188,165,188,255,188,165,188,255,207,165,188,255,207,165,188,255,225,165,188,255,225,165,188,255,240,165,188,255,240,165,188,255,0,137,188,255,0,137,188,255,99,137,188,255,99,137,188,255,137,137,188,255,137,137,188,255,165,137,188,255,165,137,188,255,188,137,188,255,188,137,188,255,207,137,188,255,207,137,188,255,225,137,188,255,225,137,188,255,240,137,188,255,240,137,188,255,0,137,188,255,0,137,188,255,99,137,188,255,99,137,188,255,137,137,188,255,137,137,188,255,165,137,188,255,165,137,188,255,188,137,188,255,188,137,188,255,207,137,188,255,207,137,188,255,225,137,188,255,225,137,188,255,240,137,188,255,240,137,188,255,0,99,188,255,0,99,188,255,99,99,188,255,99,99,188,255,137,99,188,255,137,99,188,255,165,99,188,255,165,99,188,255,188,99,188,255,188,99,188,255,207,99,188,255,207,99,188,255,225,99,188,255,225,99,188,255,240,99,188,255,240,99,188,255,0,99,188,255,0,99,188,255,99,99,188,255,99,99,188,255,137,99,188,255,137,99,188,255,165,99,188,255,165,99,188,255,188,99,188,255,188,99,188,255,207,99,188,255,207,99,188,255,225,99,188,255,225,99,188,255,240,99,188,255,240,99,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255,0,0,188,255,0,0,188,255,99,0,188,255,99,0,188,255,137,0,188,255,137,0,188,255,165,0,188,255,165,0,188,255,188,0,188,255,188,0,188,255,207,0,188,255,207,0,188,255,225,0,188,255,225,0,188,255,240,0,188,255,240,0,188,255]
127
+ },
128
+ "history": {
129
+ "0": [0,0.875,0.5,1,0,0.875,0.5,1,0.125,0.875,0.5,1,0.125,0.875,0.5,1,0.25,0.875,0.5,1,0.25,0.875,0.5,1,0.375,0.875,0.5,1,0.375,0.875,0.5,1,0.5,0.875,0.5,1,0.5,0.875,0.5,1,0.625,0.875,0.5,1,0.625,0.875,0.5,1,0.75,0.875,0.5,1,0.75,0.875,0.5,1,0.875,0.875,0.5,1,0.875,0.875,0.5,1,0,0.875,0.5,1,0,0.875,0.5,1,0.125,0.875,0.5,1,0.125,0.875,0.5,1,0.25,0.875,0.5,1,0.25,0.875,0.5,1,0.375,0.875,0.5,1,0.375,0.875,0.5,1,0.5,0.875,0.5,1,0.5,0.875,0.5,1,0.625,0.875,0.5,1,0.625,0.875,0.5,1,0.75,0.875,0.5,1,0.75,0.875,0.5,1,0.875,0.875,0.5,1,0.875,0.875,0.5,1,0,0.75,0.5,1,0,0.75,0.5,1,0.125,0.75,0.5,1,0.125,0.75,0.5,1,0.25,0.75,0.5,1,0.25,0.75,0.5,1,0.375,0.75,0.5,1,0.375,0.75,0.5,1,0.5,0.75,0.5,1,0.5,0.75,0.5,1,0.625,0.75,0.5,1,0.625,0.75,0.5,1,0.75,0.75,0.5,1,0.75,0.75,0.5,1,0.875,0.75,0.5,1,0.875,0.75,0.5,1,0,0.75,0.5,1,0,0.75,0.5,1,0.125,0.75,0.5,1,0.125,0.75,0.5,1,0.25,0.75,0.5,1,0.25,0.75,0.5,1,0.375,0.75,0.5,1,0.375,0.75,0.5,1,0.5,0.75,0.5,1,0.5,0.75,0.5,1,0.625,0.75,0.5,1,0.625,0.75,0.5,1,0.75,0.75,0.5,1,0.75,0.75,0.5,1,0.875,0.75,0.5,1,0.875,0.75,0.5,1,0,0.625,0.5,1,0,0.625,0.5,1,0.125,0.625,0.5,1,0.125,0.625,0.5,1,0.25,0.625,0.5,1,0.25,0.625,0.5,1,0.375,0.625,0.5,1,0.375,0.625,0.5,1,0.5,0.625,0.5,1,0.5,0.625,0.5,1,0.625,0.625,0.5,1,0.625,0.625,0.5,1,0.75,0.625,0.5,1,0.75,0.625,0.5,1,0.875,0.625,0.5,1,0.875,0.625,0.5,1,0,0.625,0.5,1,0,0.625,0.5,1,0.125,0.625,0.5,1,0.125,0.625,0.5,1,0.25,0.625,0.5,1,0.25,0.625,0.5,1,0.375,0.625,0.5,1,0.375,0.625,0.5,1,0.5,0.625,0.5,1,0.5,0.625,0.5,1,0.625,0.625,0.5,1,0.625,0.625,0.5,1,0.75,0.625,0.5,1,0.75,0.625,0.5,1,0.875,0.625,0.5,1,0.875,0.625,0.5,1,0,0.5,0.5,1,0,0.5,0.5,1,0.125,0.5,0.5,1,0.125,0.5,0.5,1,0.25,0.5,0.5,1,0.25,0.5,0.5,1,0.375,0.5,0.5,1,0.375,0.5,0.5,1,0.5,0.5,0.5,1,0.5,0.5,0.5,1,0.625,0.5,0.5,1,0.625,0.5,0.5,1,0.75,0.5,0.5,1,0.75,0.5,0.5,1,0.875,0.5,0.5,1,0.875,0.5,0.5,1,0,0.5,0.5,1,0,0.5,0.5,1,0.125,0.5,0.5,1,0.125,0.5,0.5,1,0.25,0.5,0.5,1,0.25,0.5,0.5,1,0.375,0.5,0.5,1,0.375,0.5,0.5,1,0.5,0.5,0.5,1,0.5,0.5,0.5,1,0.625,0.5,0.5,1,0.625,0.5,0.5,1,0.75,0.5,0.5,1,0.75,0.5,0.5,1,0.875,0.5,0.5,1,0.875,0.5,0.5,1,0,0.375,0.5,1,0,0.375,0.5,1,0.125,0.375,0.5,1,0.125,0.375,0.5,1,0.25,0.375,0.5,1,0.25,0.375,0.5,1,0.375,0.375,0.5,1,0.375,0.375,0.5,1,0.5,0.375,0.5,1,0.5,0.375,0.5,1,0.625,0.375,0.5,1,0.625,0.375,0.5,1,0.75,0.375,0.5,1,0.75,0.375,0.5,1,0.875,0.375,0.5,1,0.875,0.375,0.5,1,0,0.375,0.5,1,0,0.375,0.5,1,0.125,0.375,0.5,1,0.125,0.375,0.5,1,0.25,0.375,0.5,1,0.25,0.375,0.5,1,0.375,0.375,0.5,1,0.375,0.375,0.5,1,0.5,0.375,0.5,1,0.5,0.375,0.5,1,0.625,0.375,0.5,1,0.625,0.375,0.5,1,0.75,0.375,0.5,1,0.75,0.375,0.5,1,0.875,0.375,0.5,1,0.875,0.375,0.5,1,0,0.25,0.5,1,0,0.25,0.5,1,0.125,0.25,0.5,1,0.125,0.25,0.5,1,0.25,0.25,0.5,1,0.25,0.25,0.5,1,0.375,0.25,0.5,1,0.375,0.25,0.5,1,0.5,0.25,0.5,1,0.5,0.25,0.5,1,0.625,0.25,0.5,1,0.625,0.25,0.5,1,0.75,0.25,0.5,1,0.75,0.25,0.5,1,0.875,0.25,0.5,1,0.875,0.25,0.5,1,0,0.25,0.5,1,0,0.25,0.5,1,0.125,0.25,0.5,1,0.125,0.25,0.5,1,0.25,0.25,0.5,1,0.25,0.25,0.5,1,0.375,0.25,0.5,1,0.375,0.25,0.5,1,0.5,0.25,0.5,1,0.5,0.25,0.5,1,0.625,0.25,0.5,1,0.625,0.25,0.5,1,0.75,0.25,0.5,1,0.75,0.25,0.5,1,0.875,0.25,0.5,1,0.875,0.25,0.5,1,0,0.125,0.5,1,0,0.125,0.5,1,0.125,0.125,0.5,1,0.125,0.125,0.5,1,0.25,0.125,0.5,1,0.25,0.125,0.5,1,0.375,0.125,0.5,1,0.375,0.125,0.5,1,0.5,0.125,0.5,1,0.5,0.125,0.5,1,0.625,0.125,0.5,1,0.625,0.125,0.5,1,0.75,0.125,0.5,1,0.75,0.125,0.5,1,0.875,0.125,0.5,1,0.875,0.125,0.5,1,0,0.125,0.5,1,0,0.125,0.5,1,0.125,0.125,0.5,1,0.125,0.125,0.5,1,0.25,0.125,0.5,1,0.25,0.125,0.5,1,0.375,0.125,0.5,1,0.375,0.125,0.5,1,0.5,0.125,0.5,1,0.5,0.125,0.5,1,0.625,0.125,0.5,1,0.625,0.125,0.5,1,0.75,0.125,0.5,1,0.75,0.125,0.5,1,0.875,0.125,0.5,1,0.875,0.125,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1],
130
+ "1": [0,0.875,0.5,1,0,0.875,0.5,1,0.125,0.875,0.5,1,0.125,0.875,0.5,1,0.25,0.875,0.5,1,0.25,0.875,0.5,1,0.375,0.875,0.5,1,0.375,0.875,0.5,1,0.5,0.875,0.5,1,0.5,0.875,0.5,1,0.625,0.875,0.5,1,0.625,0.875,0.5,1,0.75,0.875,0.5,1,0.75,0.875,0.5,1,0.875,0.875,0.5,1,0.875,0.875,0.5,1,0,0.875,0.5,1,0,0.875,0.5,1,0.125,0.875,0.5,1,0.125,0.875,0.5,1,0.25,0.875,0.5,1,0.25,0.875,0.5,1,0.375,0.875,0.5,1,0.375,0.875,0.5,1,0.5,0.875,0.5,1,0.5,0.875,0.5,1,0.625,0.875,0.5,1,0.625,0.875,0.5,1,0.75,0.875,0.5,1,0.75,0.875,0.5,1,0.875,0.875,0.5,1,0.875,0.875,0.5,1,0,0.75,0.5,1,0,0.75,0.5,1,0.125,0.75,0.5,1,0.125,0.75,0.5,1,0.25,0.75,0.5,1,0.25,0.75,0.5,1,0.375,0.75,0.5,1,0.375,0.75,0.5,1,0.5,0.75,0.5,1,0.5,0.75,0.5,1,0.625,0.75,0.5,1,0.625,0.75,0.5,1,0.75,0.75,0.5,1,0.75,0.75,0.5,1,0.875,0.75,0.5,1,0.875,0.75,0.5,1,0,0.75,0.5,1,0,0.75,0.5,1,0.125,0.75,0.5,1,0.125,0.75,0.5,1,0.25,0.75,0.5,1,0.25,0.75,0.5,1,0.375,0.75,0.5,1,0.375,0.75,0.5,1,0.5,0.75,0.5,1,0.5,0.75,0.5,1,0.625,0.75,0.5,1,0.625,0.75,0.5,1,0.75,0.75,0.5,1,0.75,0.75,0.5,1,0.875,0.75,0.5,1,0.875,0.75,0.5,1,0,0.625,0.5,1,0,0.625,0.5,1,0.125,0.625,0.5,1,0.125,0.625,0.5,1,0.25,0.625,0.5,1,0.25,0.625,0.5,1,0.375,0.625,0.5,1,0.375,0.625,0.5,1,0.5,0.625,0.5,1,0.5,0.625,0.5,1,0.625,0.625,0.5,1,0.625,0.625,0.5,1,0.75,0.625,0.5,1,0.75,0.625,0.5,1,0.875,0.625,0.5,1,0.875,0.625,0.5,1,0,0.625,0.5,1,0,0.625,0.5,1,0.125,0.625,0.5,1,0.125,0.625,0.5,1,0.25,0.625,0.5,1,0.25,0.625,0.5,1,0.375,0.625,0.5,1,0.375,0.625,0.5,1,0.5,0.625,0.5,1,0.5,0.625,0.5,1,0.625,0.625,0.5,1,0.625,0.625,0.5,1,0.75,0.625,0.5,1,0.75,0.625,0.5,1,0.875,0.625,0.5,1,0.875,0.625,0.5,1,0,0.5,0.5,1,0,0.5,0.5,1,0.125,0.5,0.5,1,0.125,0.5,0.5,1,0.25,0.5,0.5,1,0.25,0.5,0.5,1,0.375,0.5,0.5,1,0.375,0.5,0.5,1,0.5,0.5,0.5,1,0.5,0.5,0.5,1,0.625,0.5,0.5,1,0.625,0.5,0.5,1,0.75,0.5,0.5,1,0.75,0.5,0.5,1,0.875,0.5,0.5,1,0.875,0.5,0.5,1,0,0.5,0.5,1,0,0.5,0.5,1,0.125,0.5,0.5,1,0.125,0.5,0.5,1,0.25,0.5,0.5,1,0.25,0.5,0.5,1,0.375,0.5,0.5,1,0.375,0.5,0.5,1,0.5,0.5,0.5,1,0.5,0.5,0.5,1,0.625,0.5,0.5,1,0.625,0.5,0.5,1,0.75,0.5,0.5,1,0.75,0.5,0.5,1,0.875,0.5,0.5,1,0.875,0.5,0.5,1,0,0.375,0.5,1,0,0.375,0.5,1,0.125,0.375,0.5,1,0.125,0.375,0.5,1,0.25,0.375,0.5,1,0.25,0.375,0.5,1,0.375,0.375,0.5,1,0.375,0.375,0.5,1,0.5,0.375,0.5,1,0.5,0.375,0.5,1,0.625,0.375,0.5,1,0.625,0.375,0.5,1,0.75,0.375,0.5,1,0.75,0.375,0.5,1,0.875,0.375,0.5,1,0.875,0.375,0.5,1,0,0.375,0.5,1,0,0.375,0.5,1,0.125,0.375,0.5,1,0.125,0.375,0.5,1,0.25,0.375,0.5,1,0.25,0.375,0.5,1,0.375,0.375,0.5,1,0.375,0.375,0.5,1,0.5,0.375,0.5,1,0.5,0.375,0.5,1,0.625,0.375,0.5,1,0.625,0.375,0.5,1,0.75,0.375,0.5,1,0.75,0.375,0.5,1,0.875,0.375,0.5,1,0.875,0.375,0.5,1,0,0.25,0.5,1,0,0.25,0.5,1,0.125,0.25,0.5,1,0.125,0.25,0.5,1,0.25,0.25,0.5,1,0.25,0.25,0.5,1,0.375,0.25,0.5,1,0.375,0.25,0.5,1,0.5,0.25,0.5,1,0.5,0.25,0.5,1,0.625,0.25,0.5,1,0.625,0.25,0.5,1,0.75,0.25,0.5,1,0.75,0.25,0.5,1,0.875,0.25,0.5,1,0.875,0.25,0.5,1,0,0.25,0.5,1,0,0.25,0.5,1,0.125,0.25,0.5,1,0.125,0.25,0.5,1,0.25,0.25,0.5,1,0.25,0.25,0.5,1,0.375,0.25,0.5,1,0.375,0.25,0.5,1,0.5,0.25,0.5,1,0.5,0.25,0.5,1,0.625,0.25,0.5,1,0.625,0.25,0.5,1,0.75,0.25,0.5,1,0.75,0.25,0.5,1,0.875,0.25,0.5,1,0.875,0.25,0.5,1,0,0.125,0.5,1,0,0.125,0.5,1,0.125,0.125,0.5,1,0.125,0.125,0.5,1,0.25,0.125,0.5,1,0.25,0.125,0.5,1,0.375,0.125,0.5,1,0.375,0.125,0.5,1,0.5,0.125,0.5,1,0.5,0.125,0.5,1,0.625,0.125,0.5,1,0.625,0.125,0.5,1,0.75,0.125,0.5,1,0.75,0.125,0.5,1,0.875,0.125,0.5,1,0.875,0.125,0.5,1,0,0.125,0.5,1,0,0.125,0.5,1,0.125,0.125,0.5,1,0.125,0.125,0.5,1,0.25,0.125,0.5,1,0.25,0.125,0.5,1,0.375,0.125,0.5,1,0.375,0.125,0.5,1,0.5,0.125,0.5,1,0.5,0.125,0.5,1,0.625,0.125,0.5,1,0.625,0.125,0.5,1,0.75,0.125,0.5,1,0.75,0.125,0.5,1,0.875,0.125,0.5,1,0.875,0.125,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1],
131
+ "7": [0,0.75,0.5,1,0,0.75,0.5,1,0.125,0.75,0.5,1,0.125,0.75,0.5,1,0.25,0.75,0.5,1,0.25,0.75,0.5,1,0.375,0.75,0.5,1,0.375,0.75,0.5,1,0.5,0.75,0.5,1,0.5,0.75,0.5,1,0.625,0.75,0.5,1,0.625,0.75,0.5,1,0.75,0.75,0.5,1,0.75,0.75,0.5,1,0.875,0.75,0.5,1,0.875,0.75,0.5,1,0,0.75,0.5,1,0,0.75,0.5,1,0.125,0.75,0.5,1,0.125,0.75,0.5,1,0.25,0.75,0.5,1,0.25,0.75,0.5,1,0.375,0.75,0.5,1,0.375,0.75,0.5,1,0.5,0.75,0.5,1,0.5,0.75,0.5,1,0.625,0.75,0.5,1,0.625,0.75,0.5,1,0.75,0.75,0.5,1,0.75,0.75,0.5,1,0.875,0.75,0.5,1,0.875,0.75,0.5,1,0,0.625,0.5,1,0,0.625,0.5,1,0.125,0.625,0.5,1,0.125,0.625,0.5,1,0.25,0.625,0.5,1,0.25,0.625,0.5,1,0.375,0.625,0.5,1,0.375,0.625,0.5,1,0.5,0.625,0.5,1,0.5,0.625,0.5,1,0.625,0.625,0.5,1,0.625,0.625,0.5,1,0.75,0.625,0.5,1,0.75,0.625,0.5,1,0.875,0.625,0.5,1,0.875,0.625,0.5,1,0,0.625,0.5,1,0,0.625,0.5,1,0.125,0.625,0.5,1,0.125,0.625,0.5,1,0.25,0.625,0.5,1,0.25,0.625,0.5,1,0.375,0.625,0.5,1,0.375,0.625,0.5,1,0.5,0.625,0.5,1,0.5,0.625,0.5,1,0.625,0.625,0.5,1,0.625,0.625,0.5,1,0.75,0.625,0.5,1,0.75,0.625,0.5,1,0.875,0.625,0.5,1,0.875,0.625,0.5,1,0,0.5,0.5,1,0,0.5,0.5,1,0.125,0.5,0.5,1,0.125,0.5,0.5,1,0.25,0.5,0.5,1,0.25,0.5,0.5,1,0.375,0.5,0.5,1,0.375,0.5,0.5,1,0.5,0.5,0.5,1,0.5,0.5,0.5,1,0.625,0.5,0.5,1,0.625,0.5,0.5,1,0.75,0.5,0.5,1,0.75,0.5,0.5,1,0.875,0.5,0.5,1,0.875,0.5,0.5,1,0,0.5,0.5,1,0,0.5,0.5,1,0.125,0.5,0.5,1,0.125,0.5,0.5,1,0.25,0.5,0.5,1,0.25,0.5,0.5,1,0.375,0.5,0.5,1,0.375,0.5,0.5,1,0.5,0.5,0.5,1,0.5,0.5,0.5,1,0.625,0.5,0.5,1,0.625,0.5,0.5,1,0.75,0.5,0.5,1,0.75,0.5,0.5,1,0.875,0.5,0.5,1,0.875,0.5,0.5,1,0,0.375,0.5,1,0,0.375,0.5,1,0.125,0.375,0.5,1,0.125,0.375,0.5,1,0.25,0.375,0.5,1,0.25,0.375,0.5,1,0.375,0.375,0.5,1,0.375,0.375,0.5,1,0.5,0.375,0.5,1,0.5,0.375,0.5,1,0.625,0.375,0.5,1,0.625,0.375,0.5,1,0.75,0.375,0.5,1,0.75,0.375,0.5,1,0.875,0.375,0.5,1,0.875,0.375,0.5,1,0,0.375,0.5,1,0,0.375,0.5,1,0.125,0.375,0.5,1,0.125,0.375,0.5,1,0.25,0.375,0.5,1,0.25,0.375,0.5,1,0.375,0.375,0.5,1,0.375,0.375,0.5,1,0.5,0.375,0.5,1,0.5,0.375,0.5,1,0.625,0.375,0.5,1,0.625,0.375,0.5,1,0.75,0.375,0.5,1,0.75,0.375,0.5,1,0.875,0.375,0.5,1,0.875,0.375,0.5,1,0,0.25,0.5,1,0,0.25,0.5,1,0.125,0.25,0.5,1,0.125,0.25,0.5,1,0.25,0.25,0.5,1,0.25,0.25,0.5,1,0.375,0.25,0.5,1,0.375,0.25,0.5,1,0.5,0.25,0.5,1,0.5,0.25,0.5,1,0.625,0.25,0.5,1,0.625,0.25,0.5,1,0.75,0.25,0.5,1,0.75,0.25,0.5,1,0.875,0.25,0.5,1,0.875,0.25,0.5,1,0,0.25,0.5,1,0,0.25,0.5,1,0.125,0.25,0.5,1,0.125,0.25,0.5,1,0.25,0.25,0.5,1,0.25,0.25,0.5,1,0.375,0.25,0.5,1,0.375,0.25,0.5,1,0.5,0.25,0.5,1,0.5,0.25,0.5,1,0.625,0.25,0.5,1,0.625,0.25,0.5,1,0.75,0.25,0.5,1,0.75,0.25,0.5,1,0.875,0.25,0.5,1,0.875,0.25,0.5,1,0,0.125,0.5,1,0,0.125,0.5,1,0.125,0.125,0.5,1,0.125,0.125,0.5,1,0.25,0.125,0.5,1,0.25,0.125,0.5,1,0.375,0.125,0.5,1,0.375,0.125,0.5,1,0.5,0.125,0.5,1,0.5,0.125,0.5,1,0.625,0.125,0.5,1,0.625,0.125,0.5,1,0.75,0.125,0.5,1,0.75,0.125,0.5,1,0.875,0.125,0.5,1,0.875,0.125,0.5,1,0,0.125,0.5,1,0,0.125,0.5,1,0.125,0.125,0.5,1,0.125,0.125,0.5,1,0.25,0.125,0.5,1,0.25,0.125,0.5,1,0.375,0.125,0.5,1,0.375,0.125,0.5,1,0.5,0.125,0.5,1,0.5,0.125,0.5,1,0.625,0.125,0.5,1,0.625,0.125,0.5,1,0.75,0.125,0.5,1,0.75,0.125,0.5,1,0.875,0.125,0.5,1,0.875,0.125,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1,0,0,0.5,1,0,0,0.5,1,0.125,0,0.5,1,0.125,0,0.5,1,0.25,0,0.5,1,0.25,0,0.5,1,0.375,0,0.5,1,0.375,0,0.5,1,0.5,0,0.5,1,0.5,0,0.5,1,0.625,0,0.5,1,0.625,0,0.5,1,0.75,0,0.5,1,0.75,0,0.5,1,0.875,0,0.5,1,0.875,0,0.5,1]
132
+ }
133
+ },
96
134
  "early-return.sl": {
97
135
  "hash": "36371b89",
98
136
  "source": "// A circular window that computes its plasma only inside (Specs/SL_NEXT.md 3a):\n// the early return puts the rest of main on the other side of one real branch,\n// and the texture read after it is in flow that differs per pixel, so every\n// backend samples it at level 0.\ntexture2D t;\nfloat4 main() {\n float2 p = uv - 0.5;\n if (length(p) > 0.45) return float4(0, 0, 0, 0);\n float v = fbm(p * 5 + time * 0.2, 4);\n float4 c = tex2D(t, uv);\n return float4(lerp(c.rgb, float3(v, v * 0.6, 1 - v), 0.5), 1);\n}\n",
@@ -118,6 +156,21 @@
118
156
  "1.25": [0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255]
119
157
  }
120
158
  },
159
+ "frame-delta.sl": {
160
+ "hash": "12de4ff1",
161
+ "historyExact": true,
162
+ "source": "// frame and deltaTime as colours. Red counts frames in 256ths; green is\n// deltaTime in 30ths of a second, 0 on the first frame and 1 after; blue is 1\n// where time is the sum of the steps taken, which a host keeps by construction.\nfloat4 main() {\n float summed = abs(time - float(frame) * deltaTime) < 0.0001 ? 1 : 0;\n return float4(float(frame) / 256.0, deltaTime * 30.0, summed, 1);\n}\n",
163
+ "frames": {
164
+ "0": [0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255],
165
+ "1": [13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255,13,255,255,255],
166
+ "7": [46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255,46,255,255,255]
167
+ },
168
+ "history": {
169
+ "0": [0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1],
170
+ "1": [0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1,0.00390625,1,1,1],
171
+ "7": [0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1,0.02734375,1,1,1]
172
+ }
173
+ },
121
174
  "hex.sl": {
122
175
  "hash": "5ab863c3",
123
176
  "exact": true,
@@ -243,6 +296,20 @@
243
296
  "1.25": [16,16,200,255,30,16,170,255,44,16,99,255,60,16,122,255,75,16,183,255,92,16,170,255,107,16,99,255,123,16,122,255,139,16,183,255,155,16,170,255,171,16,99,255,187,16,122,255,202,16,183,255,219,16,170,255,234,16,99,255,240,16,40,255,16,30,170,255,30,30,157,255,44,30,133,255,60,30,140,255,75,30,163,255,92,30,157,255,107,30,133,255,123,30,140,255,139,30,163,255,155,30,157,255,171,30,133,255,187,30,140,255,202,30,163,255,219,30,157,255,234,30,133,255,240,30,122,255,16,44,99,255,30,44,133,255,44,44,171,255,60,44,163,255,75,44,121,255,92,44,133,255,107,44,171,255,123,44,163,255,139,44,121,255,155,44,133,255,171,44,171,255,187,44,163,255,202,44,121,255,219,44,133,255,234,44,171,255,240,44,183,255,16,60,122,255,30,60,140,255,44,60,163,255,60,60,157,255,75,60,133,255,92,60,140,255,107,60,163,255,123,60,157,255,139,60,133,255,155,60,140,255,171,60,163,255,187,60,157,255,202,60,133,255,219,60,140,255,234,60,163,255,240,60,170,255,16,75,183,255,30,75,163,255,44,75,121,255,60,75,133,255,75,75,171,255,92,75,163,255,107,75,121,255,123,75,133,255,139,75,171,255,155,75,163,255,171,75,121,255,187,75,133,255,202,75,171,255,219,75,163,255,234,75,121,255,240,75,99,255,16,92,170,255,30,92,157,255,44,92,133,255,60,92,140,255,75,92,163,255,92,92,157,255,107,92,133,255,123,92,140,255,139,92,163,255,155,92,157,255,171,92,133,255,187,92,140,255,202,92,163,255,219,92,157,255,234,92,133,255,240,92,122,255,16,107,99,255,30,107,133,255,44,107,171,255,60,107,163,255,75,107,121,255,92,107,133,255,107,107,171,255,123,107,163,255,139,107,121,255,155,107,133,255,171,107,171,255,187,107,163,255,202,107,121,255,219,107,133,255,234,107,171,255,240,107,183,255,16,123,122,255,30,123,140,255,44,123,163,255,60,123,157,255,75,123,133,255,92,123,140,255,107,123,163,255,123,123,157,255,139,123,133,255,155,123,140,255,171,123,163,255,187,123,157,255,202,123,133,255,219,123,140,255,234,123,163,255,240,123,170,255,16,139,183,255,30,139,163,255,44,139,121,255,60,139,133,255,75,139,171,255,92,139,163,255,107,139,121,255,123,139,133,255,139,139,171,255,155,139,163,255,171,139,121,255,187,139,133,255,202,139,171,255,219,139,163,255,234,139,121,255,240,139,99,255,16,155,170,255,30,155,157,255,44,155,133,255,60,155,140,255,75,155,163,255,92,155,157,255,107,155,133,255,123,155,140,255,139,155,163,255,155,155,157,255,171,155,133,255,187,155,140,255,202,155,163,255,219,155,157,255,234,155,133,255,240,155,122,255,16,171,99,255,30,171,133,255,44,171,171,255,60,171,163,255,75,171,121,255,92,171,133,255,107,171,171,255,123,171,163,255,139,171,121,255,155,171,133,255,171,171,171,255,187,171,163,255,202,171,121,255,219,171,133,255,234,171,171,255,240,171,183,255,16,187,122,255,30,187,140,255,44,187,163,255,60,187,157,255,75,187,133,255,92,187,140,255,107,187,163,255,123,187,157,255,139,187,133,255,155,187,140,255,171,187,163,255,187,187,157,255,202,187,133,255,219,187,140,255,234,187,163,255,240,187,170,255,16,202,183,255,30,202,163,255,44,202,121,255,60,202,133,255,75,202,171,255,92,202,163,255,107,202,121,255,123,202,133,255,139,202,171,255,155,202,163,255,171,202,121,255,187,202,133,255,202,202,171,255,219,202,163,255,234,202,121,255,240,202,99,255,16,219,170,255,30,219,157,255,44,219,133,255,60,219,140,255,75,219,163,255,92,219,157,255,107,219,133,255,123,219,140,255,139,219,163,255,155,219,157,255,171,219,133,255,187,219,140,255,202,219,163,255,219,219,157,255,234,219,133,255,240,219,122,255,16,234,99,255,30,234,133,255,44,234,171,255,60,234,163,255,75,234,121,255,92,234,133,255,107,234,171,255,123,234,163,255,139,234,121,255,155,234,133,255,171,234,171,255,187,234,163,255,202,234,121,255,219,234,133,255,234,234,171,255,240,234,183,255,16,240,40,255,30,240,122,255,44,240,183,255,60,240,170,255,75,240,99,255,92,240,122,255,107,240,183,255,123,240,170,255,139,240,99,255,155,240,122,255,171,240,183,255,187,240,170,255,202,240,99,255,219,240,122,255,234,240,183,255,240,240,200,255]
244
297
  }
245
298
  },
299
+ "trail.sl": {
300
+ "hash": "839cfaaf",
301
+ "source": "// A fading trail: a spark circles, and what it leaves behind halves every third\n// of a second. Scaled by deltaTime, it fades the same at any frame rate.\nfloat4 main() {\n float4 last = tex2D(previous, uv);\n float2 at = 0.5 + 0.3 * float2(cos(time * 6), sin(time * 6));\n float spark = smoothstep(0.08, 0.02, length(uv - at));\n return max(last * pow(0.5, deltaTime * 3), float4(1, 0.6, 0.2, 1) * spark);\n}\n",
302
+ "frames": {
303
+ "0": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,13,5,2,252,201,122,248,157,124,73,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,222,176,106,186,112,88,50,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
304
+ "1": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,45,23,11,251,200,122,246,120,95,55,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,18,6,2,244,195,118,231,152,120,71,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,171,103,173,108,85,49,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
305
+ "7": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,217,173,104,177,151,120,71,79,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,9,3,1,253,201,122,250,247,197,120,238,240,191,116,222,122,96,56,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,63,34,21,205,163,98,157,233,185,112,207,129,101,59,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,218,174,105,180,205,163,98,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,99,57,52,209,166,100,162,99,77,44,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,13,4,2,203,161,97,152,125,99,57,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,141,84,114,89,69,39,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
306
+ },
307
+ "history": {
308
+ "0": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.006839752197265625,0.0041046142578125,0.0013685226440429688,0.006839752197265625,0.97314453125,0.58349609375,0.194580078125,0.97314453125,0.336669921875,0.2020263671875,0.06732177734375,0.336669921875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.72802734375,0.436767578125,0.1455078125,0.72802734375,0.162109375,0.09722900390625,0.03240966796875,0.162109375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
309
+ "1": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.04388427734375,0.0263214111328125,0.0087738037109375,0.04388427734375,0.96435546875,0.57861328125,0.19287109375,0.96435546875,0.1895751953125,0.11376953125,0.03790283203125,0.1895751953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00959014892578125,0.005756378173828125,0.001918792724609375,0.00959014892578125,0.90771484375,0.5439453125,0.1815185546875,0.90771484375,0.31396484375,0.1884765625,0.06280517578125,0.31396484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.67919921875,0.407470703125,0.1357421875,0.67919921875,0.1512451171875,0.0906982421875,0.0302276611328125,0.1512451171875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
310
+ "7": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6943359375,0.41650390625,0.1387939453125,0.6943359375,0.310791015625,0.1865234375,0.062164306640625,0.310791015625,0.0008101463317871094,0.0004856586456298828,0.00016188621520996094,0.0008101463317871094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.004413604736328125,0.0026493072509765625,0.0008831024169921875,0.004413604736328125,0.978515625,0.5869140625,0.1956787109375,0.978515625,0.9326171875,0.55908203125,0.1865234375,0.9326171875,0.869140625,0.52099609375,0.1737060546875,0.869140625,0.1956787109375,0.11737060546875,0.039154052734375,0.1956787109375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0819091796875,0.04913330078125,0.0163726806640625,0.0819091796875,0.61376953125,0.3681640625,0.12274169921875,0.61376953125,0.8115234375,0.486328125,0.1622314453125,0.8115234375,0.2183837890625,0.1309814453125,0.043701171875,0.2183837890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.7041015625,0.421875,0.1407470703125,0.7041015625,0.607421875,0.3642578125,0.12139892578125,0.607421875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.205810546875,0.12353515625,0.04119873046875,0.205810546875,0.63427734375,0.380859375,0.126953125,0.63427734375,0.12481689453125,0.07489013671875,0.02496337890625,0.12481689453125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.006313323974609375,0.0037899017333984375,0.0012636184692382812,0.006313323974609375,0.59765625,0.358154296875,0.11956787109375,0.59765625,0.2066650390625,0.1241455078125,0.0413818359375,0.2066650390625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.447021484375,0.268310546875,0.08941650390625,0.447021484375,0.099609375,0.059722900390625,0.0199127197265625,0.099609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
311
+ }
312
+ },
246
313
  "tuner.sl": {
247
314
  "hash": "afa338bb",
248
315
  "source": "// The whole shader, and nothing that is not the shader.\n//\n// No Properties block, no SubShader, no CGPROGRAM, no appdata or v2f, no\n// _Time.y: `uniform` declares both the slot and the name the sliders bind\n// against, and the file IS the fragment function.\nuniform float warp = 0.5;\nuniform float hue = 0.5;\nuniform float speed = 0.5;\n\nfloat4 main() {\n float t = time * (speed * 1.6 + 0.1);\n float2 p = (uv - 0.5) * (warp * 14 + 2);\n\n float v = sin(p.x + t)\n + sin(p.y - t * 0.8)\n + sin((p.x + p.y) * 0.7 + t * 1.3);\n\n float n = saturate(v * 0.22 + 0.5);\n float3 rgb = hsv2rgb(float3(frac(hue + n * 0.18), 0.75, n * 0.7 + 0.25));\n return float4(rgb, 1);\n}\n",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "onejs-sl",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "The OneJS shader language: a small typed language for per pixel programs, compiled to a portable IR and emitted as HLSL, WGSL or GLSL ES",
5
5
  "main": "src/index.ts",
6
6
  "types": "src/index.ts",
@@ -43,7 +43,7 @@
43
43
  "author": "Singtaa",
44
44
  "license": "MIT",
45
45
  "scripts": {
46
- "typecheck": "tsc --noEmit",
46
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.lib.json",
47
47
  "lint": "eslint .",
48
48
  "test": "vitest run && node quickjs/run.mjs",
49
49
  "test:quickjs": "node quickjs/run.mjs",
package/src/body.ts CHANGED
@@ -21,15 +21,24 @@
21
21
  * gives common subexpression elimination for free.
22
22
  */
23
23
 
24
- import { INT_BOUNDS, SLError, TYPE, valueAt, type InputName, type NodeRef, type Program, type SLKind, type SLType, type ValueNode } from "./ir"
24
+ import { INT_BOUNDS, SLError, TYPE, valueAt, type InputName, type NodeRef, type StepInputName, type Program, type SLKind, type SLType, type ValueNode } from "./ir"
25
25
  import { libClosure, LIB_FUNCTIONS } from "./lib"
26
26
  import { LIB_HLSL } from "./lib/hlsl"
27
27
  import { SLOP } from "./ops"
28
28
  import { inVaryingFlow, local, printBody, structure, type Syntax } from "./structure"
29
29
 
30
30
  export interface BodyTarget {
31
- /** An expression for each input, e.g. `{ uv: "SL_UV", time: "SL_TIME", ... }`. */
32
- inputs: Record<InputName, string>
31
+ /**
32
+ * An expression for each input, e.g. `{ uv: "SL_UV", time: "SL_TIME", ... }`.
33
+ *
34
+ * `frame` and `deltaTime` are for a host that steps a program frame by
35
+ * frame (`Specs/SL_NEXT.md` 4): `frame` a float holding the whole number
36
+ * of frames since the previous frame was last cleared, `deltaTime` the
37
+ * seconds since the frame before. A target without one cannot draw a
38
+ * program that reads it, and `emitBody` says so rather than print a
39
+ * shader that stands still. `readsOf(p)` says which a program reads.
40
+ */
41
+ inputs: Record<InputName, string> & Partial<Record<StepInputName, string>>
33
42
  /** The float4 holding a uniform slot. The body swizzles it down to the uniform's width. */
34
43
  uniform: (slot: number, name: string) => string
35
44
  /**
@@ -60,6 +69,24 @@ export interface BodyTarget {
60
69
  * `tex2Dlod(s, float4(uv, 0, lod))` and Metal's `sample(s, uv, level(lod))`.
61
70
  */
62
71
  sampleLevel: (slot: number, uv: string, lod: string) => string
72
+ /**
73
+ * A float4 of what this program drew the frame before, at `uv`, for a
74
+ * host that keeps it (`tex2D(previous, uv)`, `Specs/SL_NEXT.md` 4).
75
+ *
76
+ * - **Raw**: exactly what the program's result was, linear and straight
77
+ * alpha whatever `colour` says, with no decode on the way in. Kept at
78
+ * 16 bits a channel or more, so a slow fade does not stall on 8 bit
79
+ * steps.
80
+ * - **Bilinear and clamped**, with one level. Read it at that level
81
+ * wherever the call is (HLSL's `tex2Dlod`, not `tex2D`), so it needs no
82
+ * derivatives and reads the same inside a branch as outside one.
83
+ * - **Transparent black** on the first frame and after anything that
84
+ * clears it: a new size, a new program, a seek, time going back.
85
+ *
86
+ * Optional, and `emitBody` refuses a program that samples it when a
87
+ * target has none.
88
+ */
89
+ previous?: (uv: string) => string
63
90
  /**
64
91
  * `linear`: `toLinear` calls `sl_toLinear`, for a host whose target holds
65
92
  * linear light. `gamma`: `toLinear` is the identity, decided here, so hex
@@ -146,8 +173,11 @@ export function emitBody(p: Program, target: BodyTarget): Body {
146
173
  case "const":
147
174
  if (n.kind !== undefined) return n.type === 1 ? kindLit(n.kind, n.v[0]!) : `${typeName(n)}(${n.v.map((v) => kindLit(n.kind!, v)).join(", ")})`
148
175
  return ctor(n.type, n.v.map(lit))
149
- case "input":
150
- return target.inputs[n.name]
176
+ case "input": {
177
+ const v = target.inputs[n.name]
178
+ if (v === undefined) throw new SLError(`this target has no ${n.name} input, and the program reads it`)
179
+ return v
180
+ }
151
181
  case "uniform": {
152
182
  const u = p.uniforms[n.slot]
153
183
  if (u === undefined) throw new SLError(`a node reads uniform slot ${n.slot}, which is not declared`)
@@ -308,6 +338,9 @@ export function emitBody(p: Program, target: BodyTarget): Body {
308
338
  textures.add(slot)
309
339
  return target.sampleLevel(slot, a[0]!, a[1]!)
310
340
  }
341
+ case SLOP.SAMPLE_PREVIOUS:
342
+ if (target.previous === undefined) throw new SLError("this target keeps no previous frame, and the program samples it")
343
+ return target.previous(a[0]!)
311
344
 
312
345
  default:
313
346
  throw new SLError(
package/src/compile.ts CHANGED
@@ -11,7 +11,7 @@
11
11
  * are the only refusal (`checkCaps`).
12
12
  */
13
13
 
14
- import { checkCaps, type Program } from "./ir"
14
+ import { checkCaps, readsOf, type Program, type SLReads } from "./ir"
15
15
  import { emitShader } from "./hlsl"
16
16
  import { emitGLSL, emitWGSL } from "./web"
17
17
  import { uniformDefaults } from "./sl"
@@ -46,6 +46,15 @@ export interface Compiled {
46
46
  * Setting a material property called `grain` bound nothing, silently.
47
47
  */
48
48
  textures: string[]
49
+ /**
50
+ * What the program needs its host to keep from one frame to the next: the
51
+ * previous frame, the frame count, the step (`Specs/SL_NEXT.md` 4). A host
52
+ * keeps a history pair only for a program that reads `previous`, and one
53
+ * that cannot provide something here refuses the program rather than
54
+ * drawing it as if nothing came before. A host that carries a compiled
55
+ * program elsewhere, as OneJS's `.sl` import does, has to carry this too.
56
+ */
57
+ reads: SLReads
49
58
  /**
50
59
  * The program as HLSL, for a host that can compile it.
51
60
  *
@@ -76,6 +85,7 @@ export function compile(program: Program): Compiled {
76
85
  uniforms: program.uniforms.map((u) => u.name),
77
86
  defaults: uniformDefaults(program),
78
87
  textures: program.textures.map((t) => t.name),
88
+ reads: readsOf(program),
79
89
  } as Compiled
80
90
  let hlsl: string | undefined
81
91
  let wgsl: string | undefined