@tsparticles/path-simplex-noise 3.0.0-alpha.0 → 3.0.0-beta.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/README.md +15 -11
- package/browser/SimplexNoiseGenerator.js +42 -45
- package/browser/index.js +2 -2
- package/browser/simplex.js +120 -152
- package/cjs/SimplexNoiseGenerator.js +42 -45
- package/cjs/index.js +2 -2
- package/cjs/simplex.js +120 -152
- package/esm/SimplexNoiseGenerator.js +42 -45
- package/esm/index.js +2 -2
- package/esm/simplex.js +120 -152
- package/package.json +11 -6
- package/report.html +4 -4
- package/tsparticles.path.simplex.noise.js +98 -98
- package/tsparticles.path.simplex.noise.min.js +1 -1
- package/tsparticles.path.simplex.noise.min.js.LICENSE.txt +1 -8
- package/types/SimplexNoiseGenerator.d.ts +5 -6
- package/types/index.d.ts +1 -1
- package/umd/SimplexNoiseGenerator.js +43 -46
- package/umd/index.js +2 -2
- package/umd/simplex.js +120 -152
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
# tsParticles Simplex Noise Path
|
|
4
4
|
|
|
5
|
-
[](https://www.jsdelivr.com/package/npm/@tsparticles/path-simplex-noise)
|
|
6
|
+
[](https://www.npmjs.com/package/@tsparticles/path-simplex-noise)
|
|
7
|
+
[](https://www.npmjs.com/package/@tsparticles/path-simplex-noise) [](https://github.com/sponsors/matteobruni)
|
|
8
8
|
|
|
9
9
|
[tsParticles](https://github.com/matteobruni/tsparticles) path plugin for simplex noise movement.
|
|
10
10
|
|
|
@@ -42,29 +42,33 @@ Once the scripts are loaded you can set up `tsParticles` and the path plugin lik
|
|
|
42
42
|
This package is compatible also with ES or CommonJS modules, firstly this needs to be installed, like this:
|
|
43
43
|
|
|
44
44
|
```shell
|
|
45
|
-
$ npm install tsparticles
|
|
45
|
+
$ npm install @tsparticles/path-simplex-noise
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
or
|
|
49
49
|
|
|
50
50
|
```shell
|
|
51
|
-
$ yarn add tsparticles
|
|
51
|
+
$ yarn add @tsparticles/path-simplex-noise
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
Then you need to import it in the app, like this:
|
|
55
55
|
|
|
56
56
|
```javascript
|
|
57
|
-
const { tsParticles } = require("tsparticles
|
|
58
|
-
const { loadSimplexNoisePath } = require("tsparticles
|
|
57
|
+
const { tsParticles } = require("@tsparticles/engine");
|
|
58
|
+
const { loadSimplexNoisePath } = require("@tsparticles/path-simplex-noise");
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
(async () => {
|
|
61
|
+
await loadSimplexNoisePath(tsParticles);
|
|
62
|
+
})();
|
|
61
63
|
```
|
|
62
64
|
|
|
63
65
|
or
|
|
64
66
|
|
|
65
67
|
```javascript
|
|
66
|
-
import { tsParticles } from "tsparticles
|
|
67
|
-
import { loadSimplexNoisePath } from "tsparticles
|
|
68
|
+
import { tsParticles } from "@tsparticles/engine";
|
|
69
|
+
import { loadSimplexNoisePath } from "@tsparticles/path-simplex-noise";
|
|
68
70
|
|
|
69
|
-
|
|
71
|
+
(async () => {
|
|
72
|
+
await loadSimplexNoisePath(tsParticles);
|
|
73
|
+
})();
|
|
70
74
|
```
|
|
@@ -1,8 +1,46 @@
|
|
|
1
|
-
import { Vector } from "@tsparticles/engine";
|
|
2
|
-
import { getRandom } from "@tsparticles/engine";
|
|
1
|
+
import { Vector, getRandom } from "@tsparticles/engine";
|
|
3
2
|
import { makeNoise4D } from "./simplex";
|
|
4
3
|
export class SimplexNoiseGenerator {
|
|
5
4
|
constructor() {
|
|
5
|
+
this._calculateField = () => {
|
|
6
|
+
for (let x = 0; x < this.options.columns; x++) {
|
|
7
|
+
for (let y = 0; y < this.options.rows; y++) {
|
|
8
|
+
for (let z = 0; z < this.options.layers; z++) {
|
|
9
|
+
this.field[x][y][z][0] = this.noiseFunc(x / 50, y / 50, z / 50, this.noiseW) * Math.PI * 2;
|
|
10
|
+
this.field[x][y][z][1] = this.noiseFunc(x / 100 + 40000, y / 100 + 40000, z / 100 + 40000, this.noiseW);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
this._initField = () => {
|
|
16
|
+
this.field = new Array(this.options.columns);
|
|
17
|
+
for (let x = 0; x < this.options.columns; x++) {
|
|
18
|
+
this.field[x] = new Array(this.options.rows);
|
|
19
|
+
for (let y = 0; y < this.options.rows; y++) {
|
|
20
|
+
this.field[x][y] = new Array(this.options.layers);
|
|
21
|
+
for (let z = 0; z < this.options.layers; z++) {
|
|
22
|
+
this.field[x][y][z] = [0, 0];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
this._resetField = (container) => {
|
|
28
|
+
const sourceOptions = container.actualOptions.particles.move.path.options;
|
|
29
|
+
this.options.size = sourceOptions.size > 0 ? sourceOptions.size : 20;
|
|
30
|
+
this.options.increment = sourceOptions.increment > 0 ? sourceOptions.increment : 0.004;
|
|
31
|
+
this.options.width = container.canvas.size.width;
|
|
32
|
+
this.options.height = container.canvas.size.height;
|
|
33
|
+
this.noiseFunc = makeNoise4D(sourceOptions.seed ?? getRandom());
|
|
34
|
+
this.options.columns = Math.floor(this.options.width / this.options.size) + 1;
|
|
35
|
+
this.options.rows = Math.floor(this.options.height / this.options.size) + 1;
|
|
36
|
+
this.options.layers = Math.floor(container.zLayers / this.options.size) + 1;
|
|
37
|
+
this._initField();
|
|
38
|
+
};
|
|
39
|
+
this._setup = (container) => {
|
|
40
|
+
this.noiseW = 0;
|
|
41
|
+
this._resetField(container);
|
|
42
|
+
addEventListener("resize", () => this._resetField(container));
|
|
43
|
+
};
|
|
6
44
|
this.field = [];
|
|
7
45
|
this.noiseFunc = makeNoise4D(getRandom());
|
|
8
46
|
this.noiseW = 0;
|
|
@@ -34,7 +72,7 @@ export class SimplexNoiseGenerator {
|
|
|
34
72
|
}
|
|
35
73
|
init(container) {
|
|
36
74
|
this.container = container;
|
|
37
|
-
this.
|
|
75
|
+
this._setup(this.container);
|
|
38
76
|
}
|
|
39
77
|
reset() {
|
|
40
78
|
}
|
|
@@ -42,48 +80,7 @@ export class SimplexNoiseGenerator {
|
|
|
42
80
|
if (!this.container) {
|
|
43
81
|
return;
|
|
44
82
|
}
|
|
45
|
-
this.
|
|
83
|
+
this._calculateField();
|
|
46
84
|
this.noiseW += this.options.increment;
|
|
47
85
|
}
|
|
48
|
-
calculateField() {
|
|
49
|
-
for (let x = 0; x < this.options.columns; x++) {
|
|
50
|
-
for (let y = 0; y < this.options.rows; y++) {
|
|
51
|
-
for (let z = 0; z < this.options.layers; z++) {
|
|
52
|
-
const angle = this.noiseFunc(x / 50, y / 50, z / 50, this.noiseW) * Math.PI * 2, length = this.noiseFunc(x / 100 + 40000, y / 100 + 40000, z / 100 + 40000, this.noiseW);
|
|
53
|
-
this.field[x][y][z][0] = angle;
|
|
54
|
-
this.field[x][y][z][1] = length;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
initField() {
|
|
60
|
-
this.field = new Array(this.options.columns);
|
|
61
|
-
for (let x = 0; x < this.options.columns; x++) {
|
|
62
|
-
this.field[x] = new Array(this.options.rows);
|
|
63
|
-
for (let y = 0; y < this.options.rows; y++) {
|
|
64
|
-
this.field[x][y] = new Array(this.options.layers);
|
|
65
|
-
for (let z = 0; z < this.options.layers; z++) {
|
|
66
|
-
this.field[x][y][z] = [0, 0];
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
resetField(container) {
|
|
72
|
-
var _a;
|
|
73
|
-
const sourceOptions = container.actualOptions.particles.move.path.options;
|
|
74
|
-
this.options.size = sourceOptions.size > 0 ? sourceOptions.size : 20;
|
|
75
|
-
this.options.increment = sourceOptions.increment > 0 ? sourceOptions.increment : 0.004;
|
|
76
|
-
this.options.width = container.canvas.size.width;
|
|
77
|
-
this.options.height = container.canvas.size.height;
|
|
78
|
-
this.noiseFunc = makeNoise4D((_a = sourceOptions.seed) !== null && _a !== void 0 ? _a : getRandom());
|
|
79
|
-
this.options.columns = Math.floor(this.options.width / this.options.size) + 1;
|
|
80
|
-
this.options.rows = Math.floor(this.options.height / this.options.size) + 1;
|
|
81
|
-
this.options.layers = Math.floor(container.zLayers / this.options.size) + 1;
|
|
82
|
-
this.initField();
|
|
83
|
-
}
|
|
84
|
-
setup(container) {
|
|
85
|
-
this.noiseW = 0;
|
|
86
|
-
this.resetField(container);
|
|
87
|
-
addEventListener("resize", () => this.resetField(container));
|
|
88
|
-
}
|
|
89
86
|
}
|
package/browser/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SimplexNoiseGenerator } from "./SimplexNoiseGenerator";
|
|
2
2
|
export const simplexNoisePathName = "simplexNoise";
|
|
3
|
-
export function loadSimplexNoisePath(engine) {
|
|
4
|
-
engine.addPathGenerator(simplexNoisePathName, new SimplexNoiseGenerator());
|
|
3
|
+
export async function loadSimplexNoisePath(engine, refresh = true) {
|
|
4
|
+
await engine.addPathGenerator(simplexNoisePathName, new SimplexNoiseGenerator(), refresh);
|
|
5
5
|
}
|
package/browser/simplex.js
CHANGED
|
@@ -3,9 +3,7 @@ export default function shuffleSeed(seed) {
|
|
|
3
3
|
newSeed[0] = seed[0] * 1664525 + 1013904223;
|
|
4
4
|
return newSeed;
|
|
5
5
|
}
|
|
6
|
-
const NORM_4D = 1.0 / 30.0;
|
|
7
|
-
const SQUISH_4D = (Math.sqrt(4 + 1) - 1) / 4;
|
|
8
|
-
const STRETCH_4D = (1 / Math.sqrt(4 + 1) - 1) / 4;
|
|
6
|
+
const NORM_4D = 1.0 / 30.0, SQUISH_4D = (Math.sqrt(4 + 1) - 1) / 4, STRETCH_4D = (1 / Math.sqrt(4 + 1) - 1) / 4;
|
|
9
7
|
function contribution4D(multiplier, xsb, ysb, zsb, wsb) {
|
|
10
8
|
return {
|
|
11
9
|
dx: -xsb - multiplier * SQUISH_4D,
|
|
@@ -22,8 +20,7 @@ export function makeNoise4D(clientSeed) {
|
|
|
22
20
|
const contributions = [];
|
|
23
21
|
for (let i = 0; i < p4D.length; i += 16) {
|
|
24
22
|
const baseSet = base4D[p4D[i]];
|
|
25
|
-
let previous = null;
|
|
26
|
-
let current = null;
|
|
23
|
+
let previous = null, current = null;
|
|
27
24
|
for (let k = 0; k < baseSet.length; k += 5) {
|
|
28
25
|
current = contribution4D(baseSet[k], baseSet[k + 1], baseSet[k + 2], baseSet[k + 3], baseSet[k + 4]);
|
|
29
26
|
if (previous === null) {
|
|
@@ -44,11 +41,10 @@ export function makeNoise4D(clientSeed) {
|
|
|
44
41
|
for (let i = 0; i < lookupPairs4D.length; i += 2) {
|
|
45
42
|
lookup[lookupPairs4D[i]] = contributions[lookupPairs4D[i + 1]];
|
|
46
43
|
}
|
|
47
|
-
const perm = new Uint8Array(256);
|
|
48
|
-
|
|
49
|
-
const source = new Uint8Array(256);
|
|
50
|
-
for (let i = 0; i < 256; i++)
|
|
44
|
+
const perm = new Uint8Array(256), perm4D = new Uint8Array(256), source = new Uint8Array(256);
|
|
45
|
+
for (let i = 0; i < 256; i++) {
|
|
51
46
|
source[i] = i;
|
|
47
|
+
}
|
|
52
48
|
let seed = new Uint32Array(1);
|
|
53
49
|
seed[0] = clientSeed;
|
|
54
50
|
seed = shuffleSeed(shuffleSeed(shuffleSeed(seed)));
|
|
@@ -56,33 +52,15 @@ export function makeNoise4D(clientSeed) {
|
|
|
56
52
|
seed = shuffleSeed(seed);
|
|
57
53
|
const r = new Uint32Array(1);
|
|
58
54
|
r[0] = (seed[0] + 31) % (i + 1);
|
|
59
|
-
if (r[0] < 0)
|
|
55
|
+
if (r[0] < 0) {
|
|
60
56
|
r[0] += i + 1;
|
|
57
|
+
}
|
|
61
58
|
perm[i] = source[r[0]];
|
|
62
59
|
perm4D[i] = perm[i] & 0xfc;
|
|
63
60
|
source[r[0]] = source[i];
|
|
64
61
|
}
|
|
65
62
|
return (x, y, z, w) => {
|
|
66
|
-
const stretchOffset = (x + y + z + w) * STRETCH_4D
|
|
67
|
-
const xs = x + stretchOffset;
|
|
68
|
-
const ys = y + stretchOffset;
|
|
69
|
-
const zs = z + stretchOffset;
|
|
70
|
-
const ws = w + stretchOffset;
|
|
71
|
-
const xsb = Math.floor(xs);
|
|
72
|
-
const ysb = Math.floor(ys);
|
|
73
|
-
const zsb = Math.floor(zs);
|
|
74
|
-
const wsb = Math.floor(ws);
|
|
75
|
-
const squishOffset = (xsb + ysb + zsb + wsb) * SQUISH_4D;
|
|
76
|
-
const dx0 = x - (xsb + squishOffset);
|
|
77
|
-
const dy0 = y - (ysb + squishOffset);
|
|
78
|
-
const dz0 = z - (zsb + squishOffset);
|
|
79
|
-
const dw0 = w - (wsb + squishOffset);
|
|
80
|
-
const xins = xs - xsb;
|
|
81
|
-
const yins = ys - ysb;
|
|
82
|
-
const zins = zs - zsb;
|
|
83
|
-
const wins = ws - wsb;
|
|
84
|
-
const inSum = xins + yins + zins + wins;
|
|
85
|
-
const hash = (zins - wins + 1) |
|
|
63
|
+
const stretchOffset = (x + y + z + w) * STRETCH_4D, xs = x + stretchOffset, ys = y + stretchOffset, zs = z + stretchOffset, ws = w + stretchOffset, xsb = Math.floor(xs), ysb = Math.floor(ys), zsb = Math.floor(zs), wsb = Math.floor(ws), squishOffset = (xsb + ysb + zsb + wsb) * SQUISH_4D, dx0 = x - (xsb + squishOffset), dy0 = y - (ysb + squishOffset), dz0 = z - (zsb + squishOffset), dw0 = w - (wsb + squishOffset), xins = xs - xsb, yins = ys - ysb, zins = zs - zsb, wins = ws - wsb, inSum = xins + yins + zins + wins, hash = (zins - wins + 1) |
|
|
86
64
|
((yins - zins + 1) << 1) |
|
|
87
65
|
((yins - wins + 1) << 2) |
|
|
88
66
|
((xins - yins + 1) << 3) |
|
|
@@ -95,21 +73,9 @@ export function makeNoise4D(clientSeed) {
|
|
|
95
73
|
((inSum + xins) << 17);
|
|
96
74
|
let value = 0;
|
|
97
75
|
for (let c = lookup[hash]; c !== undefined; c = c.next) {
|
|
98
|
-
const dx = dx0 + c.dx;
|
|
99
|
-
const dy = dy0 + c.dy;
|
|
100
|
-
const dz = dz0 + c.dz;
|
|
101
|
-
const dw = dw0 + c.dw;
|
|
102
|
-
const attn = 2 - dx * dx - dy * dy - dz * dz - dw * dw;
|
|
76
|
+
const dx = dx0 + c.dx, dy = dy0 + c.dy, dz = dz0 + c.dz, dw = dw0 + c.dw, attn = 2 - dx * dx - dy * dy - dz * dz - dw * dw;
|
|
103
77
|
if (attn > 0) {
|
|
104
|
-
const px = xsb + c.xsb
|
|
105
|
-
const py = ysb + c.ysb;
|
|
106
|
-
const pz = zsb + c.zsb;
|
|
107
|
-
const pw = wsb + c.wsb;
|
|
108
|
-
const indexPartA = perm[px & 0xff];
|
|
109
|
-
const indexPartB = perm[(indexPartA + py) & 0xff];
|
|
110
|
-
const indexPartC = perm[(indexPartB + pz) & 0xff];
|
|
111
|
-
const index = perm4D[(indexPartC + pw) & 0xff];
|
|
112
|
-
const valuePart = gradients4D[index] * dx +
|
|
78
|
+
const px = xsb + c.xsb, py = ysb + c.ysb, pz = zsb + c.zsb, pw = wsb + c.wsb, indexPartA = perm[px & 0xff], indexPartB = perm[(indexPartA + py) & 0xff], indexPartC = perm[(indexPartB + pz) & 0xff], index = perm4D[(indexPartC + pw) & 0xff], valuePart = gradients4D[index] * dx +
|
|
113
79
|
gradients4D[index + 1] * dy +
|
|
114
80
|
gradients4D[index + 2] * dz +
|
|
115
81
|
gradients4D[index + 3] * dw;
|
|
@@ -123,115 +89,117 @@ const base4D = [
|
|
|
123
89
|
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1],
|
|
124
90
|
[3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 4, 1, 1, 1, 1],
|
|
125
91
|
[
|
|
126
|
-
1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2,
|
|
127
|
-
1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1,
|
|
92
|
+
1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2,
|
|
93
|
+
0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1,
|
|
128
94
|
],
|
|
129
95
|
[
|
|
130
|
-
3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2,
|
|
131
|
-
1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1,
|
|
96
|
+
3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2,
|
|
97
|
+
0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1,
|
|
132
98
|
],
|
|
133
|
-
]
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
1, 1, 1, -3, 1, 1, 1, -1, 3, -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, 3,
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-1, 1,
|
|
141
|
-
-1, 1,
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
466130, 18, 466134, 18, 467909, 16, 467911, 16, 467941, 16, 467943, 16, 468160, 13, 468161, 13, 468162, 13,
|
|
192
|
-
13, 468164, 13, 468165, 13, 468166, 13, 468167, 13, 580568, 17, 580570, 17, 580585, 15, 580589, 15,
|
|
193
|
-
580599, 14, 580600, 17, 580601, 15, 580602, 17, 580605, 15, 580606, 14, 580607, 14, 580824, 17,
|
|
194
|
-
17, 580858, 17, 582633, 15, 582637, 15, 582649, 15, 582653, 15, 582856, 12, 582857, 12,
|
|
195
|
-
582888, 12, 582889, 12, 582904, 12, 582905, 12, 596982, 14, 596983, 14, 596990, 14,
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, -1,
|
|
204
|
-
1, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0, 1,
|
|
205
|
-
-1, 0, 1, 1, 1, 0, -1, 0, 2, 1, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 2, 0, 1, 1, 0, 1, -1, 1, 1, 0,
|
|
206
|
-
1, -1, 0, 2, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 2, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1,
|
|
207
|
-
0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 1, 4, 2, 1, 1, 0, 4, 1, 2, 1, 0, 4, 1, 1, 2, 0, 1, 4, 2, 1,
|
|
208
|
-
0, 1, 4, 1, 1, 0, 2, 1, 4, 2, 0, 1, 1, 4, 1, 0, 2, 1, 4, 1, 0, 1, 2, 1, 4, 0, 2, 1, 1, 4, 0, 1,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
2,
|
|
216
|
-
0, 0, 0, 2, 2, 3,
|
|
217
|
-
1,
|
|
218
|
-
1, 0,
|
|
219
|
-
0, 0, 0, 0,
|
|
220
|
-
1, 1, -1,
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
2,
|
|
226
|
-
1, 0,
|
|
227
|
-
|
|
228
|
-
-1, 1, 1, 3, 1, 0,
|
|
229
|
-
|
|
230
|
-
2, 0,
|
|
231
|
-
3, 3, 0, 2,
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
99
|
+
], gradients4D = [
|
|
100
|
+
3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3, 3, -1, 1, 1,
|
|
101
|
+
1, -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, 3, 1, -1, 1, 1,
|
|
102
|
+
3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, 3, -1, -1, 1, 1, -3,
|
|
103
|
+
-1, 1, 1, -1, -3, 1, 1, -1, -1, 3, -3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, 3, 1, 1, -1, 1,
|
|
104
|
+
3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3, -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, 3, -1, 1, -1, 1, -3,
|
|
105
|
+
1, -1, 1, -1, 3, -1, 1, -1, 1, -3, -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, 3, 1, -1, -1, 1,
|
|
106
|
+
3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, 3, -1, -1,
|
|
107
|
+
-1, 1, -3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3,
|
|
108
|
+
], lookupPairs4D = [
|
|
109
|
+
0, 3, 1, 2, 2, 3, 5, 2, 6, 1, 7, 1, 8, 3, 9, 2, 10, 3, 13, 2, 16, 3, 18, 3, 22, 1, 23, 1, 24, 3, 26, 3, 33, 2,
|
|
110
|
+
37, 2, 38, 1, 39, 1, 41, 2, 45, 2, 54, 1, 55, 1, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 256, 3,
|
|
111
|
+
258, 3, 264, 3, 266, 3, 272, 3, 274, 3, 280, 3, 282, 3, 2049, 2, 2053, 2, 2057, 2, 2061, 2, 2081, 2, 2085, 2,
|
|
112
|
+
2089, 2, 2093, 2, 2304, 9, 2305, 9, 2312, 9, 2313, 9, 16390, 1, 16391, 1, 16406, 1, 16407, 1, 16422, 1, 16423,
|
|
113
|
+
1, 16438, 1, 16439, 1, 16642, 8, 16646, 8, 16658, 8, 16662, 8, 18437, 6, 18439, 6, 18469, 6, 18471, 6, 18688, 9,
|
|
114
|
+
18689, 9, 18690, 8, 18693, 6, 18694, 8, 18695, 6, 18696, 9, 18697, 9, 18706, 8, 18710, 8, 18725, 6, 18727, 6,
|
|
115
|
+
131128, 0, 131129, 0, 131130, 0, 131131, 0, 131132, 0, 131133, 0, 131134, 0, 131135, 0, 131352, 7, 131354, 7,
|
|
116
|
+
131384, 7, 131386, 7, 133161, 5, 133165, 5, 133177, 5, 133181, 5, 133376, 9, 133377, 9, 133384, 9, 133385, 9,
|
|
117
|
+
133400, 7, 133402, 7, 133417, 5, 133421, 5, 133432, 7, 133433, 5, 133434, 7, 133437, 5, 147510, 4, 147511, 4,
|
|
118
|
+
147518, 4, 147519, 4, 147714, 8, 147718, 8, 147730, 8, 147734, 8, 147736, 7, 147738, 7, 147766, 4, 147767, 4,
|
|
119
|
+
147768, 7, 147770, 7, 147774, 4, 147775, 4, 149509, 6, 149511, 6, 149541, 6, 149543, 6, 149545, 5, 149549, 5,
|
|
120
|
+
149558, 4, 149559, 4, 149561, 5, 149565, 5, 149566, 4, 149567, 4, 149760, 9, 149761, 9, 149762, 8, 149765, 6,
|
|
121
|
+
149766, 8, 149767, 6, 149768, 9, 149769, 9, 149778, 8, 149782, 8, 149784, 7, 149786, 7, 149797, 6, 149799, 6,
|
|
122
|
+
149801, 5, 149805, 5, 149814, 4, 149815, 4, 149816, 7, 149817, 5, 149818, 7, 149821, 5, 149822, 4, 149823, 4,
|
|
123
|
+
149824, 37, 149825, 37, 149826, 36, 149829, 34, 149830, 36, 149831, 34, 149832, 37, 149833, 37, 149842, 36,
|
|
124
|
+
149846, 36, 149848, 35, 149850, 35, 149861, 34, 149863, 34, 149865, 33, 149869, 33, 149878, 32, 149879, 32,
|
|
125
|
+
149880, 35, 149881, 33, 149882, 35, 149885, 33, 149886, 32, 149887, 32, 150080, 49, 150082, 48, 150088, 49,
|
|
126
|
+
150098, 48, 150104, 47, 150106, 47, 151873, 46, 151877, 45, 151881, 46, 151909, 45, 151913, 44, 151917, 44,
|
|
127
|
+
152128, 49, 152129, 46, 152136, 49, 152137, 46, 166214, 43, 166215, 42, 166230, 43, 166247, 42, 166262, 41,
|
|
128
|
+
166263, 41, 166466, 48, 166470, 43, 166482, 48, 166486, 43, 168261, 45, 168263, 42, 168293, 45, 168295, 42,
|
|
129
|
+
168512, 31, 168513, 28, 168514, 31, 168517, 28, 168518, 25, 168519, 25, 280952, 40, 280953, 39, 280954, 40,
|
|
130
|
+
280957, 39, 280958, 38, 280959, 38, 281176, 47, 281178, 47, 281208, 40, 281210, 40, 282985, 44, 282989, 44,
|
|
131
|
+
283001, 39, 283005, 39, 283208, 30, 283209, 27, 283224, 30, 283241, 27, 283256, 22, 283257, 22, 297334, 41,
|
|
132
|
+
297335, 41, 297342, 38, 297343, 38, 297554, 29, 297558, 24, 297562, 29, 297590, 24, 297594, 21, 297598, 21,
|
|
133
|
+
299365, 26, 299367, 23, 299373, 26, 299383, 23, 299389, 20, 299391, 20, 299584, 31, 299585, 28, 299586, 31,
|
|
134
|
+
299589, 28, 299590, 25, 299591, 25, 299592, 30, 299593, 27, 299602, 29, 299606, 24, 299608, 30, 299610, 29,
|
|
135
|
+
299621, 26, 299623, 23, 299625, 27, 299629, 26, 299638, 24, 299639, 23, 299640, 22, 299641, 22, 299642, 21,
|
|
136
|
+
299645, 20, 299646, 21, 299647, 20, 299648, 61, 299649, 60, 299650, 61, 299653, 60, 299654, 59, 299655, 59,
|
|
137
|
+
299656, 58, 299657, 57, 299666, 55, 299670, 54, 299672, 58, 299674, 55, 299685, 52, 299687, 51, 299689, 57,
|
|
138
|
+
299693, 52, 299702, 54, 299703, 51, 299704, 56, 299705, 56, 299706, 53, 299709, 50, 299710, 53, 299711, 50,
|
|
139
|
+
299904, 61, 299906, 61, 299912, 58, 299922, 55, 299928, 58, 299930, 55, 301697, 60, 301701, 60, 301705, 57,
|
|
140
|
+
301733, 52, 301737, 57, 301741, 52, 301952, 79, 301953, 79, 301960, 76, 301961, 76, 316038, 59, 316039, 59,
|
|
141
|
+
316054, 54, 316071, 51, 316086, 54, 316087, 51, 316290, 78, 316294, 78, 316306, 73, 316310, 73, 318085, 77,
|
|
142
|
+
318087, 77, 318117, 70, 318119, 70, 318336, 79, 318337, 79, 318338, 78, 318341, 77, 318342, 78, 318343, 77,
|
|
143
|
+
430776, 56, 430777, 56, 430778, 53, 430781, 50, 430782, 53, 430783, 50, 431000, 75, 431002, 72, 431032, 75,
|
|
144
|
+
431034, 72, 432809, 74, 432813, 69, 432825, 74, 432829, 69, 433032, 76, 433033, 76, 433048, 75, 433065, 74,
|
|
145
|
+
433080, 75, 433081, 74, 447158, 71, 447159, 68, 447166, 71, 447167, 68, 447378, 73, 447382, 73, 447386, 72,
|
|
146
|
+
447414, 71, 447418, 72, 447422, 71, 449189, 70, 449191, 70, 449197, 69, 449207, 68, 449213, 69, 449215, 68,
|
|
147
|
+
449408, 67, 449409, 67, 449410, 66, 449413, 64, 449414, 66, 449415, 64, 449416, 67, 449417, 67, 449426, 66,
|
|
148
|
+
449430, 66, 449432, 65, 449434, 65, 449445, 64, 449447, 64, 449449, 63, 449453, 63, 449462, 62, 449463, 62,
|
|
149
|
+
449464, 65, 449465, 63, 449466, 65, 449469, 63, 449470, 62, 449471, 62, 449472, 19, 449473, 19, 449474, 18,
|
|
150
|
+
449477, 16, 449478, 18, 449479, 16, 449480, 19, 449481, 19, 449490, 18, 449494, 18, 449496, 17, 449498, 17,
|
|
151
|
+
449509, 16, 449511, 16, 449513, 15, 449517, 15, 449526, 14, 449527, 14, 449528, 17, 449529, 15, 449530, 17,
|
|
152
|
+
449533, 15, 449534, 14, 449535, 14, 449728, 19, 449729, 19, 449730, 18, 449734, 18, 449736, 19, 449737, 19,
|
|
153
|
+
449746, 18, 449750, 18, 449752, 17, 449754, 17, 449784, 17, 449786, 17, 451520, 19, 451521, 19, 451525, 16,
|
|
154
|
+
451527, 16, 451528, 19, 451529, 19, 451557, 16, 451559, 16, 451561, 15, 451565, 15, 451577, 15, 451581, 15,
|
|
155
|
+
451776, 19, 451777, 19, 451784, 19, 451785, 19, 465858, 18, 465861, 16, 465862, 18, 465863, 16, 465874, 18,
|
|
156
|
+
465878, 18, 465893, 16, 465895, 16, 465910, 14, 465911, 14, 465918, 14, 465919, 14, 466114, 18, 466118, 18,
|
|
157
|
+
466130, 18, 466134, 18, 467909, 16, 467911, 16, 467941, 16, 467943, 16, 468160, 13, 468161, 13, 468162, 13,
|
|
158
|
+
468163, 13, 468164, 13, 468165, 13, 468166, 13, 468167, 13, 580568, 17, 580570, 17, 580585, 15, 580589, 15,
|
|
159
|
+
580598, 14, 580599, 14, 580600, 17, 580601, 15, 580602, 17, 580605, 15, 580606, 14, 580607, 14, 580824, 17,
|
|
160
|
+
580826, 17, 580856, 17, 580858, 17, 582633, 15, 582637, 15, 582649, 15, 582653, 15, 582856, 12, 582857, 12,
|
|
161
|
+
582872, 12, 582873, 12, 582888, 12, 582889, 12, 582904, 12, 582905, 12, 596982, 14, 596983, 14, 596990, 14,
|
|
162
|
+
596991, 14, 597202, 11, 597206, 11, 597210, 11, 597214, 11, 597234, 11, 597238, 11, 597242, 11, 597246, 11,
|
|
163
|
+
599013, 10, 599015, 10, 599021, 10, 599023, 10, 599029, 10, 599031, 10, 599037, 10, 599039, 10, 599232, 13,
|
|
164
|
+
599233, 13, 599234, 13, 599235, 13, 599236, 13, 599237, 13, 599238, 13, 599239, 13, 599240, 12, 599241, 12,
|
|
165
|
+
599250, 11, 599254, 11, 599256, 12, 599257, 12, 599258, 11, 599262, 11, 599269, 10, 599271, 10, 599272, 12,
|
|
166
|
+
599273, 12, 599277, 10, 599279, 10, 599282, 11, 599285, 10, 599286, 11, 599287, 10, 599288, 12, 599289, 12,
|
|
167
|
+
599290, 11, 599293, 10, 599294, 11, 599295, 10,
|
|
168
|
+
], p4D = [
|
|
169
|
+
0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, -1,
|
|
170
|
+
0, 1, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0, 1,
|
|
171
|
+
1, 1, -1, 0, 1, 1, 1, 0, -1, 0, 2, 1, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 2, 0, 1, 1, 0, 1, -1, 1, 1, 0,
|
|
172
|
+
1, 0, 1, 1, -1, 0, 2, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 2, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1,
|
|
173
|
+
1, 0, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 1, 4, 2, 1, 1, 0, 4, 1, 2, 1, 0, 4, 1, 1, 2, 0, 1, 4, 2, 1,
|
|
174
|
+
0, 1, 4, 1, 2, 0, 1, 4, 1, 1, 0, 2, 1, 4, 2, 0, 1, 1, 4, 1, 0, 2, 1, 4, 1, 0, 1, 2, 1, 4, 0, 2, 1, 1, 4, 0, 1,
|
|
175
|
+
2, 1, 4, 0, 1, 1, 2, 1, 2, 1, 1, 0, 0, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 1, 2, 1, 0, 1, 0, 3, 2, 0, 1, 0, 3, 1, 0,
|
|
176
|
+
2, 0, 1, 2, 0, 1, 1, 0, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 1, 2, 1, 0, 0, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 1, 2, 0,
|
|
177
|
+
1, 0, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 1, 2, 0, 0, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 3, 1, 1, 1, 0, 2, 1,
|
|
178
|
+
1, 1, -1, 2, 2, 0, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2,
|
|
179
|
+
2, 0, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 2, 0, 0, 2,
|
|
180
|
+
3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 2, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 0, 2, 0, 2, 3, 1, 0, 1, 1,
|
|
181
|
+
2, 1, -1, 1, 1, 2, 0, 0, 2, 0, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 2, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1,
|
|
182
|
+
1, 2, 0, 0, 0, 2, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 0, 2, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 0,
|
|
183
|
+
2, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 0, 0, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 0, 0, 0, 0, 2, 1, -1,
|
|
184
|
+
1, 1, 0, 1, 0, 1, 1, -1, 0, 0, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 0, 0, 0, 0, 2, 1, -1, 1, 0, 1, 1,
|
|
185
|
+
0, 1, -1, 1, 0, 0, 0, 0, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 0, 0, 0, 0, 0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1,
|
|
186
|
+
2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0,
|
|
187
|
+
0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 2, 0, 0, 2, 1, -1,
|
|
188
|
+
1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 0, 1,
|
|
189
|
+
0, 1, 1, -1, 2, 0, 0, 2, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 2, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1,
|
|
190
|
+
2, 0, 0, 0, 2, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 0, 0, 2, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 0,
|
|
191
|
+
2, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 3, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 3, 1, 0, 0,
|
|
192
|
+
1, 0, 2, 0, 0, 2, 0, 2, 1, 1, 1, -1, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 3, 1, 0, 1, 0, 0, 2, 0, 2,
|
|
193
|
+
0, 0, 2, 1, 1, -1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, -1, 1, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1,
|
|
194
|
+
-1, 1, 1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 3,
|
|
195
|
+
1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 3, 1, 0, 0, 0, 1,
|
|
196
|
+
2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 4, 1, 1, 1, 1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0,
|
|
197
|
+
4, 1, 1, 1, 1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 4, 1, 1, 1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 4, 1, 1, 1, 1,
|
|
198
|
+
3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 4, 1, 1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 4, 1, 1, 1, 1, 3, 3, 2, 1, 0,
|
|
199
|
+
0, 3, 1, 2, 0, 0, 2, 1, 1, 1, -1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, 1, 1, -1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2,
|
|
200
|
+
0, 2, 1, 1, 1, -1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, -1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, 1,
|
|
201
|
+
-1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, -1, 1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, -1, 1, 1, 3, 3,
|
|
202
|
+
2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, -1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, -1, 1, 1, 3, 3, 0, 2, 1, 0, 3,
|
|
203
|
+
0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2,
|
|
204
|
+
-1, 1, 1, 1,
|
|
237
205
|
];
|