diff --git a/.npmignore b/.npmignore index e70af9e..ca97652 100644 --- a/.npmignore +++ b/.npmignore @@ -1,2 +1,4 @@ index.html preview.png +fixture +baseline diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..a7e0989 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,17 @@ +language: node_js +os: linux +sudo: required +dist: trusty +addons: + apt: + packages: + - libxi-dev + - mesa-utils + - xvfb + - libgl1-mesa-dri + - libglapi-mesa + - libosmesa6 +node_js: + - '10' +before_script: + - export DISPLAY=:99.0; sh -e /etc/init.d/xvfb start diff --git a/bundle.js b/bundle.js new file mode 100644 index 0000000..b18dceb --- /dev/null +++ b/bundle.js @@ -0,0 +1,968 @@ +'use strict'; + +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); +} + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); +} + +function _iterableToArrayLimit(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); +} + +var rgba = require('color-normalize'); + +var getBounds = require('array-bounds'); + +var colorId = require('color-id'); + +var cluster = require('point-cluster'); + +var extend = require('object-assign'); + +var glslify = require('glslify'); + +var pick = require('pick-by-alias'); + +var updateDiff = require('update-diff'); + +var flatten = require('flatten-vertex-data'); + +var ie = require('is-iexplorer'); + +var f32 = require('to-float32'); + +var parseRect = require('parse-rect'); + +var scatter = Scatter; + +function Scatter(regl, options) { + var _this = this; + + if (!(this instanceof Scatter)) return new Scatter(regl, options); + + if (typeof regl === 'function') { + if (!options) options = {}; + options.regl = regl; + } else { + options = regl; + regl = null; + } + + if (options && options.length) options.positions = options; + regl = options.regl; // persistent variables + + var gl = regl._gl, + paletteTexture, + palette = [], + paletteIds = {}, + // state + groups = [], + // textures for marker keys + markerTextures = [null], + markerCache = [null]; + var maxColors = 255, + maxSize = 100; // direct color buffer mode + // IE does not support palette anyways + + this.tooManyColors = ie; // texture with color palette + + paletteTexture = regl.texture({ + data: new Uint8Array(maxColors * 4), + width: maxColors, + height: 1, + type: 'uint8', + format: 'rgba', + wrapS: 'clamp', + wrapT: 'clamp', + mag: 'nearest', + min: 'nearest' + }); + extend(this, { + regl: regl, + gl: gl, + groups: groups, + markerCache: markerCache, + markerTextures: markerTextures, + palette: palette, + paletteIds: paletteIds, + paletteTexture: paletteTexture, + maxColors: maxColors, + maxSize: maxSize, + canvas: gl.canvas + }); + this.update(options); // common shader options + + var shaderOptions = { + uniforms: { + pixelRatio: regl.context('pixelRatio'), + palette: paletteTexture, + paletteSize: function paletteSize(ctx, prop) { + return [_this.tooManyColors ? 0 : maxColors, paletteTexture.height]; + }, + scale: regl.prop('scale'), + scaleFract: regl.prop('scaleFract'), + translate: regl.prop('translate'), + translateFract: regl.prop('translateFract'), + opacity: regl.prop('opacity'), + marker: regl.prop('markerTexture') + }, + attributes: { + // FIXME: optimize these parts + x: function x(ctx, prop) { + return prop.xAttr || { + buffer: prop.positionBuffer, + stride: 8, + offset: 0 + }; + }, + y: function y(ctx, prop) { + return prop.yAttr || { + buffer: prop.positionBuffer, + stride: 8, + offset: 4 + }; + }, + xFract: function xFract(ctx, prop) { + return prop.xAttr ? { + constant: [0, 0] + } : { + buffer: prop.positionFractBuffer, + stride: 8, + offset: 0 + }; + }, + yFract: function yFract(ctx, prop) { + return prop.yAttr ? { + constant: [0, 0] + } : { + buffer: prop.positionFractBuffer, + stride: 8, + offset: 4 + }; + }, + size: function size(ctx, prop) { + return prop.size.length ? { + buffer: prop.sizeBuffer, + stride: 2, + offset: 0 + } : { + constant: [Math.round(prop.size * 255 / _this.maxSize)] + }; + }, + borderSize: function borderSize(ctx, prop) { + return prop.borderSize.length ? { + buffer: prop.sizeBuffer, + stride: 2, + offset: 1 + } : { + constant: [Math.round(prop.borderSize * 255 / _this.maxSize)] + }; + }, + colorId: function colorId(ctx, prop) { + return prop.color.length ? { + buffer: prop.colorBuffer, + stride: _this.tooManyColors ? 8 : 4, + offset: 0 + } : { + constant: _this.tooManyColors ? palette.slice(prop.color * 4, prop.color * 4 + 4) : [prop.color] + }; + }, + borderColorId: function borderColorId(ctx, prop) { + return prop.borderColor.length ? { + buffer: prop.colorBuffer, + stride: _this.tooManyColors ? 8 : 4, + offset: _this.tooManyColors ? 4 : 2 + } : { + constant: _this.tooManyColors ? palette.slice(prop.borderColor * 4, prop.borderColor * 4 + 4) : [prop.borderColor] + }; + }, + isActive: function isActive(ctx, prop) { + return prop.activation === true ? { + constant: [1] + } : prop.activation ? prop.activation : { + constant: [0] + }; + } + }, + blend: { + enable: true, + color: [0, 0, 0, 1], + // photoshop blending + func: { + srcRGB: 'src alpha', + dstRGB: 'one minus src alpha', + srcAlpha: 'one minus dst alpha', + dstAlpha: 'one' + } + }, + scissor: { + enable: true, + box: regl.prop('viewport') + }, + viewport: regl.prop('viewport'), + stencil: { + enable: false + }, + depth: { + enable: false + }, + elements: regl.prop('elements'), + count: regl.prop('count'), + offset: regl.prop('offset'), + primitive: 'points' // draw sdf-marker + + }; + var markerOptions = extend({}, shaderOptions); + markerOptions.frag = glslify(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\n\nuniform sampler2D marker;\nuniform float pixelRatio, opacity;\n\nfloat smoothStep(float x, float y) {\n return 1.0 / (1.0 + exp(50.0*(x - y)));\n}\n\nvoid main() {\n float dist = texture2D(marker, gl_PointCoord).r, delta = fragWidth;\n\n // max-distance alpha\n if (dist < 0.003) discard;\n\n // null-border case\n if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\n float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\n gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\n }\n else {\n float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\n float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\n\n vec4 color = fragBorderColor;\n color.a *= borderColorAmt;\n color = mix(color, fragColor, colorAmt);\n color.a *= opacity;\n\n gl_FragColor = color;\n }\n\n}\n"]); + markerOptions.vert = glslify(["precision mediump float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\nuniform float pixelRatio;\nuniform sampler2D palette;\n\nconst float maxSize = 100.;\nconst float borderLevel = .5;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragPointSize, fragBorderRadius,\n fragWidth, fragBorderColorLevel, fragColorLevel;\n\nvec2 paletteCoord(float id) {\n return vec2(\n (mod(id, paletteSize.x) + .5) / paletteSize.x,\n (floor(id / paletteSize.x) + .5) / paletteSize.y\n );\n}\nvec2 paletteCoord(vec2 id) {\n return vec2(\n (id.x + .5) / paletteSize.x,\n (id.y + .5) / paletteSize.y\n );\n}\nvec4 getColor(vec4 id) {\n // zero-palette means we deal with direct buffer\n if (paletteSize.x == 0.) return id / 255.;\n return texture2D(palette, paletteCoord(id.xy));\n}\n\nvoid main() {\n if (isActive == 0.) return;\n\n vec2 position = vec2(x, y);\n vec2 positionFract = vec2(xFract, yFract);\n\n vec4 color = getColor(colorId);\n vec4 borderColor = getColor(borderColorId);\n\n float size = size * maxSize / 255.;\n float borderSize = borderSize * maxSize / 255.;\n\n gl_PointSize = 2. * size * pixelRatio;\n fragPointSize = size * pixelRatio;\n\n vec2 pos = (position + translate) * scale\n + (positionFract + translateFract) * scale\n + (position + translate) * scaleFract\n + (positionFract + translateFract) * scaleFract;\n\n gl_Position = vec4(pos * 2. - 1., 0, 1);\n\n fragColor = color;\n fragBorderColor = borderColor;\n fragWidth = 1. / gl_PointSize;\n\n fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\n fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\n}\n"]); + this.drawMarker = regl(markerOptions); // draw circle + + var circleOptions = extend({}, shaderOptions); + circleOptions.frag = glslify(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor, fragBorderColor;\n\nuniform float opacity;\nvarying float fragBorderRadius, fragWidth;\n\nfloat smoothStep(float edge0, float edge1, float x) {\n\tfloat t;\n\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n\treturn t * t * (3.0 - 2.0 * t);\n}\n\nvoid main() {\n\tfloat radius, alpha = 1.0, delta = fragWidth;\n\n\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\n\n\tif (radius > 1.0 + delta) {\n\t\tdiscard;\n\t}\n\n\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\n\n\tfloat borderRadius = fragBorderRadius;\n\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\n\tvec4 color = mix(fragColor, fragBorderColor, ratio);\n\tcolor.a *= alpha * opacity;\n\tgl_FragColor = color;\n}\n"]); + circleOptions.vert = glslify(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio;\nuniform sampler2D palette;\nuniform vec2 paletteSize;\n\nconst float maxSize = 100.;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragBorderRadius, fragWidth;\n\nvec2 paletteCoord(float id) {\n return vec2(\n (mod(id, paletteSize.x) + .5) / paletteSize.x,\n (floor(id / paletteSize.x) + .5) / paletteSize.y\n );\n}\nvec2 paletteCoord(vec2 id) {\n return vec2(\n (id.x + .5) / paletteSize.x,\n (id.y + .5) / paletteSize.y\n );\n}\n\nvec4 getColor(vec4 id) {\n // zero-palette means we deal with direct buffer\n if (paletteSize.x == 0.) return id / 255.;\n return texture2D(palette, paletteCoord(id.xy));\n}\n\nvoid main() {\n // ignore inactive points\n if (isActive == 0.) return;\n\n vec2 position = vec2(x, y);\n vec2 positionFract = vec2(xFract, yFract);\n\n vec4 color = getColor(colorId);\n vec4 borderColor = getColor(borderColorId);\n\n float size = size * maxSize / 255.;\n float borderSize = borderSize * maxSize / 255.;\n\n gl_PointSize = (size + borderSize) * pixelRatio;\n\n vec2 pos = (position + translate) * scale\n + (positionFract + translateFract) * scale\n + (position + translate) * scaleFract\n + (positionFract + translateFract) * scaleFract;\n\n gl_Position = vec4(pos * 2. - 1., 0, 1);\n\n fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\n fragColor = color;\n fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\n fragWidth = 1. / gl_PointSize;\n}\n"]); // polyfill IE + + if (ie) { + circleOptions.frag = circleOptions.frag.replace('smoothstep', 'smoothStep'); + markerOptions.frag = markerOptions.frag.replace('smoothstep', 'smoothStep'); + } + + this.drawCircle = regl(circleOptions); +} // single pass defaults + + +Scatter.defaults = { + color: 'black', + borderColor: 'transparent', + borderSize: 0, + size: 12, + opacity: 1, + marker: undefined, + viewport: null, + range: null, + pixelSize: null, + count: 0, + offset: 0, + bounds: null, + positions: [], + snap: 1e4 // update & redraw + +}; + +Scatter.prototype.render = function () { + if (arguments.length) { + this.update.apply(this, arguments); + } + + this.draw(); + return this; +}; // draw all groups or only indicated ones + + +Scatter.prototype.draw = function () { + var _this2 = this; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var groups = this.groups; // if directly array passed - treat as passes + + if (args.length === 1 && Array.isArray(args[0]) && (args[0][0] === null || Array.isArray(args[0][0]))) { + args = args[0]; + } // FIXME: remove once https://github.com/regl-project/regl/issues/474 resolved + + + this.regl._refresh(); + + if (args.length) { + for (var i = 0; i < args.length; i++) { + this.drawItem(i, args[i]); + } + } // draw all passes + else { + groups.forEach(function (group, i) { + _this2.drawItem(i); + }); + } + + return this; +}; // draw specific scatter group + + +Scatter.prototype.drawItem = function (id, els) { + var groups = this.groups; + var group = groups[id]; // debug viewport + // let { viewport } = group + // gl.enable(gl.SCISSOR_TEST); + // gl.scissor(viewport.x, viewport.y, viewport.width, viewport.height); + // gl.clearColor(0, 0, 0, .5); + // gl.clear(gl.COLOR_BUFFER_BIT); + + if (typeof els === 'number') { + id = els; + group = groups[els]; + els = null; + } + + if (!(group && group.count && group.opacity)) return; // draw circles + + if (group.activation[0]) { + // TODO: optimize this performance by making groups and regl.this props + this.drawCircle(this.getMarkerDrawOptions(0, group, els)); + } // draw all other available markers + + + var batch = []; + + for (var i = 1; i < group.activation.length; i++) { + if (!group.activation[i] || group.activation[i] !== true && !group.activation[i].data.length) continue; + batch.push.apply(batch, _toConsumableArray(this.getMarkerDrawOptions(i, group, els))); + } + + if (batch.length) { + this.drawMarker(batch); + } +}; // get options for the marker ids + + +Scatter.prototype.getMarkerDrawOptions = function (markerId, group, elements) { + var range = group.range, + tree = group.tree, + viewport = group.viewport, + activation = group.activation, + selectionBuffer = group.selectionBuffer, + count = group.count; + var regl = this.regl; // direct points + + if (!tree) { + // if elements array - draw unclustered points + if (elements) { + return [extend({}, group, { + markerTexture: this.markerTextures[markerId], + activation: activation[markerId], + count: elements.length, + elements: elements, + offset: 0 + })]; + } + + return [extend({}, group, { + markerTexture: this.markerTextures[markerId], + activation: activation[markerId], + offset: 0 + })]; + } // clustered points + + + var batch = []; + var lod = tree.range(range, { + lod: true, + px: [(range[2] - range[0]) / viewport.width, (range[3] - range[1]) / viewport.height] + }); // enable elements by using selection buffer + + if (elements) { + var markerActivation = activation[markerId]; + var mask = markerActivation.data; + var data = new Uint8Array(count); + + for (var i = 0; i < elements.length; i++) { + var id = elements[i]; + data[id] = mask ? mask[id] : 1; + } + + selectionBuffer.subdata(data); + } + + for (var l = lod.length; l--;) { + var _lod$l = _slicedToArray(lod[l], 2), + from = _lod$l[0], + to = _lod$l[1]; + + batch.push(extend({}, group, { + markerTexture: this.markerTextures[markerId], + activation: elements ? selectionBuffer : activation[markerId], + offset: from, + count: to - from + })); + } + + return batch; +}; // update groups options + + +Scatter.prototype.update = function () { + var _this3 = this; + + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + if (!args.length) return; // passes are as single array + + if (args.length === 1 && Array.isArray(args[0])) args = args[0]; + var groups = this.groups, + gl = this.gl, + regl = this.regl, + maxSize = this.maxSize, + maxColors = this.maxColors, + palette = this.palette; + this.groups = groups = args.map(function (options, i) { + var group = groups[i]; + if (options === undefined) return group; + if (options === null) options = { + positions: null + };else if (typeof options === 'function') options = { + ondraw: options + };else if (typeof options[0] === 'number') options = { + positions: options // copy options to avoid mutation & handle aliases + + }; + options = pick(options, { + positions: 'positions data points', + snap: 'snap cluster lod tree', + size: 'sizes size radius', + borderSize: 'borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline', + color: 'colors color fill fill-color fillColor', + borderColor: 'borderColors borderColor stroke stroke-color strokeColor', + marker: 'markers marker shape', + range: 'range dataBox databox', + viewport: 'viewport viewPort viewBox viewbox', + opacity: 'opacity alpha transparency', + bounds: 'bound bounds boundaries limits', + tooManyColors: 'tooManyColors palette paletteMode optimizePalette enablePalette' + }); + if (options.positions === null) options.positions = []; + if (options.tooManyColors != null) _this3.tooManyColors = options.tooManyColors; + + if (!group) { + groups[i] = group = { + id: i, + scale: null, + translate: null, + scaleFract: null, + translateFract: null, + // buffers for active markers + activation: [], + // buffer for filtered markers + selectionBuffer: regl.buffer({ + data: new Uint8Array(0), + usage: 'stream', + type: 'uint8' + }), + // buffers with data: it is faster to switch them per-pass + // than provide one congregate buffer + sizeBuffer: regl.buffer({ + data: new Uint8Array(0), + usage: 'dynamic', + type: 'uint8' + }), + colorBuffer: regl.buffer({ + data: new Uint8Array(0), + usage: 'dynamic', + type: 'uint8' + }), + positionBuffer: regl.buffer({ + data: new Uint8Array(0), + usage: 'dynamic', + type: 'float' + }), + positionFractBuffer: regl.buffer({ + data: new Uint8Array(0), + usage: 'dynamic', + type: 'float' + }) + }; + options = extend({}, Scatter.defaults, options); + } // force update triggers + + + if (options.positions && !('marker' in options)) { + options.marker = group.marker; + delete group.marker; + } // updating markers cause recalculating snapping + + + if (options.marker && !('positions' in options)) { + options.positions = group.positions; + delete group.positions; + } // global count of points + + + var hasSize = 0, + hasColor = 0; + updateDiff(group, options, [{ + snap: true, + size: function size(s, group) { + if (s == null) s = Scatter.defaults.size; + hasSize += s && s.length ? 1 : 0; + return s; + }, + borderSize: function borderSize(s, group) { + if (s == null) s = Scatter.defaults.borderSize; + hasSize += s && s.length ? 1 : 0; + return s; + }, + opacity: parseFloat, + // add colors to palette, save references + color: function color(c, group) { + if (c == null) c = Scatter.defaults.color; + c = _this3.updateColor(c); + hasColor++; + return c; + }, + borderColor: function borderColor(c, group) { + if (c == null) c = Scatter.defaults.borderColor; + c = _this3.updateColor(c); + hasColor++; + return c; + }, + bounds: function bounds(_bounds, group, options) { + if (!('range' in options)) options.range = null; + return _bounds; + }, + positions: function positions(_positions, group, options) { + var snap = group.snap; + var positionBuffer = group.positionBuffer, + positionFractBuffer = group.positionFractBuffer, + selectionBuffer = group.selectionBuffer; // separate buffers for x/y coordinates + + if (_positions.x || _positions.y) { + if (_positions.x.length) { + group.xAttr = { + buffer: regl.buffer(_positions.x), + offset: 0, + stride: 4, + count: _positions.x.length + }; + } else { + group.xAttr = { + buffer: _positions.x.buffer, + offset: _positions.x.offset * 4 || 0, + stride: (_positions.x.stride || 1) * 4, + count: _positions.x.count + }; + } + + if (_positions.y.length) { + group.yAttr = { + buffer: regl.buffer(_positions.y), + offset: 0, + stride: 4, + count: _positions.y.length + }; + } else { + group.yAttr = { + buffer: _positions.y.buffer, + offset: _positions.y.offset * 4 || 0, + stride: (_positions.y.stride || 1) * 4, + count: _positions.y.count + }; + } + + group.count = Math.max(group.xAttr.count, group.yAttr.count); + return _positions; + } + + _positions = flatten(_positions, 'float64'); + var count = group.count = Math.floor(_positions.length / 2); + var bounds = group.bounds = count ? getBounds(_positions, 2) : null; // if range is not provided updated - recalc it + + if (!options.range && !group.range) { + delete group.range; + options.range = bounds; + } // reset marker + + + if (!options.marker && !group.marker) { + delete group.marker; + options.marker = null; + } // build cluster tree if required + + + if (snap && (snap === true || count > snap)) { + group.tree = cluster(_positions, { + bounds: bounds + }); + } // existing tree instance + else if (snap && snap.length) { + group.tree = snap; + } + + if (group.tree) { + var opts = { + primitive: 'points', + usage: 'static', + data: group.tree, + type: 'uint32' + }; + if (group.elements) group.elements(opts);else group.elements = regl.elements(opts); + } // update position buffers + + + positionBuffer({ + data: f32.float(_positions), + usage: 'dynamic' + }); + positionFractBuffer({ + data: f32.fract(_positions), + usage: 'dynamic' + }); // expand selectionBuffer + + selectionBuffer({ + data: new Uint8Array(count), + type: 'uint8', + usage: 'stream' + }); + return _positions; + } + }, { + // create marker ids corresponding to known marker textures + marker: function marker(markers, group, options) { + var activation = group.activation; // reset marker elements + + activation.forEach(function (buffer) { + return buffer && buffer.destroy && buffer.destroy(); + }); + activation.length = 0; // single sdf marker + + if (!markers || typeof markers[0] === 'number') { + var id = _this3.addMarker(markers); + + activation[id] = true; + } // per-point markers use mask buffers to enable markers in vert shader + else { + var markerMasks = []; + + for (var _i = 0, l = Math.min(markers.length, group.count); _i < l; _i++) { + var _id = _this3.addMarker(markers[_i]); + + if (!markerMasks[_id]) markerMasks[_id] = new Uint8Array(group.count); // enable marker by default + + markerMasks[_id][_i] = 1; + } + + for (var _id2 = 0; _id2 < markerMasks.length; _id2++) { + if (!markerMasks[_id2]) continue; + var opts = { + data: markerMasks[_id2], + type: 'uint8', + usage: 'static' + }; + + if (!activation[_id2]) { + activation[_id2] = regl.buffer(opts); + } else { + activation[_id2](opts); + } + + activation[_id2].data = markerMasks[_id2]; + } + } + + return markers; + }, + range: function range(_range, group, options) { + var bounds = group.bounds; // FIXME: why do we need this? + + if (!bounds) return; + if (!_range) _range = bounds; + group.scale = [1 / (_range[2] - _range[0]), 1 / (_range[3] - _range[1])]; + group.translate = [-_range[0], -_range[1]]; + group.scaleFract = f32.fract(group.scale); + group.translateFract = f32.fract(group.translate); + return _range; + }, + viewport: function viewport(vp) { + var rect = parseRect(vp || [gl.drawingBufferWidth, gl.drawingBufferHeight]); // normalize viewport to the canvas coordinates + // rect.y = gl.drawingBufferHeight - rect.height - rect.y + + return rect; + } + }]); // update size buffer, if needed + + if (hasSize) { + var _group = group, + count = _group.count, + size = _group.size, + borderSize = _group.borderSize, + sizeBuffer = _group.sizeBuffer; + var sizes = new Uint8Array(count * 2); + + if (size.length || borderSize.length) { + for (var _i2 = 0; _i2 < count; _i2++) { + // we downscale size to allow for fractions + sizes[_i2 * 2] = Math.round((size[_i2] == null ? size : size[_i2]) * 255 / maxSize); + sizes[_i2 * 2 + 1] = Math.round((borderSize[_i2] == null ? borderSize : borderSize[_i2]) * 255 / maxSize); + } + } + + sizeBuffer({ + data: sizes, + usage: 'dynamic' + }); + } // update color buffer if needed + + + if (hasColor) { + var _group2 = group, + _count = _group2.count, + color = _group2.color, + borderColor = _group2.borderColor, + colorBuffer = _group2.colorBuffer; + var colors; // if too many colors - put colors to buffer directly + + if (_this3.tooManyColors) { + if (color.length || borderColor.length) { + colors = new Uint8Array(_count * 8); + + for (var _i3 = 0; _i3 < _count; _i3++) { + var _colorId = color[_i3]; + colors[_i3 * 8] = palette[_colorId * 4]; + colors[_i3 * 8 + 1] = palette[_colorId * 4 + 1]; + colors[_i3 * 8 + 2] = palette[_colorId * 4 + 2]; + colors[_i3 * 8 + 3] = palette[_colorId * 4 + 3]; + var borderColorId = borderColor[_i3]; + colors[_i3 * 8 + 4] = palette[borderColorId * 4]; + colors[_i3 * 8 + 5] = palette[borderColorId * 4 + 1]; + colors[_i3 * 8 + 6] = palette[borderColorId * 4 + 2]; + colors[_i3 * 8 + 7] = palette[borderColorId * 4 + 3]; + } + } + } // if limited amount of colors - keep palette color picking + // that saves significant memory + else { + if (color.length || borderColor.length) { + // we need slight data increase by 2 due to vec4 borderId in shader + colors = new Uint8Array(_count * 4 + 2); + + for (var _i4 = 0; _i4 < _count; _i4++) { + // put color coords in palette texture + if (color[_i4] != null) { + colors[_i4 * 4] = color[_i4] % maxColors; + colors[_i4 * 4 + 1] = Math.floor(color[_i4] / maxColors); + } + + if (borderColor[_i4] != null) { + colors[_i4 * 4 + 2] = borderColor[_i4] % maxColors; + colors[_i4 * 4 + 3] = Math.floor(borderColor[_i4] / maxColors); + } + } + } + } + + colorBuffer({ + data: colors || new Uint8Array(0), + type: 'uint8', + usage: 'dynamic' + }); + } + + return group; + }); +}; // get (and create) marker texture id + + +Scatter.prototype.addMarker = function (sdf) { + var markerTextures = this.markerTextures, + regl = this.regl, + markerCache = this.markerCache; + var pos = sdf == null ? 0 : markerCache.indexOf(sdf); + if (pos >= 0) return pos; // convert sdf to 0..255 range + + var distArr; + + if (sdf instanceof Uint8Array || sdf instanceof Uint8ClampedArray) { + distArr = sdf; + } else { + distArr = new Uint8Array(sdf.length); + + for (var i = 0, l = sdf.length; i < l; i++) { + distArr[i] = sdf[i] * 255; + } + } + + var radius = Math.floor(Math.sqrt(distArr.length)); + pos = markerTextures.length; + markerCache.push(sdf); + markerTextures.push(regl.texture({ + channels: 1, + data: distArr, + radius: radius, + mag: 'linear', + min: 'linear' + })); + return pos; +}; // register color to palette, return it's index or list of indexes + + +Scatter.prototype.updateColor = function (colors) { + var paletteIds = this.paletteIds, + palette = this.palette, + maxColors = this.maxColors; + + if (!Array.isArray(colors)) { + colors = [colors]; + } + + var idx = []; // if color groups - flatten them + + if (typeof colors[0] === 'number') { + var grouped = []; + + if (Array.isArray(colors)) { + for (var i = 0; i < colors.length; i += 4) { + grouped.push(colors.slice(i, i + 4)); + } + } else { + for (var _i5 = 0; _i5 < colors.length; _i5 += 4) { + grouped.push(colors.subarray(_i5, _i5 + 4)); + } + } + + colors = grouped; + } + + for (var _i6 = 0; _i6 < colors.length; _i6++) { + var color = colors[_i6]; + color = rgba(color, 'uint8'); + var id = colorId(color, false); // if new color - save it + + if (paletteIds[id] == null) { + var pos = palette.length; + paletteIds[id] = Math.floor(pos / 4); + palette[pos] = color[0]; + palette[pos + 1] = color[1]; + palette[pos + 2] = color[2]; + palette[pos + 3] = color[3]; + } + + idx[_i6] = paletteIds[id]; + } // detect if too many colors in palette + + + if (!this.tooManyColors && palette.length > maxColors * 4) this.tooManyColors = true; // limit max color + + this.updatePalette(palette); // keep static index for single-color property + + return idx.length === 1 ? idx[0] : idx; +}; + +Scatter.prototype.updatePalette = function (palette) { + if (this.tooManyColors) return; + var maxColors = this.maxColors, + paletteTexture = this.paletteTexture; + var requiredHeight = Math.ceil(palette.length * .25 / maxColors); // pad data + + if (requiredHeight > 1) { + palette = palette.slice(); + + for (var i = palette.length * .25 % maxColors; i < requiredHeight * maxColors; i++) { + palette.push(0, 0, 0, 0); + } + } // ensure height + + + if (paletteTexture.height < requiredHeight) { + paletteTexture.resize(maxColors, requiredHeight); + } // update full data + + + paletteTexture.subimage({ + width: Math.min(palette.length * .25, maxColors), + height: requiredHeight, + data: palette + }, 0, 0); +}; // remove unused stuff + + +Scatter.prototype.destroy = function () { + this.groups.forEach(function (group) { + group.sizeBuffer.destroy(); + group.positionBuffer.destroy(); + group.positionFractBuffer.destroy(); + group.colorBuffer.destroy(); + group.activation.forEach(function (b) { + return b && b.destroy && b.destroy(); + }); + group.selectionBuffer.destroy(); + if (group.elements) group.elements.destroy(); + }); + this.groups.length = 0; + this.paletteTexture.destroy(); + this.markerTextures.forEach(function (txt) { + return txt && txt.destroy && txt.destroy(); + }); + return this; +}; + +var extend$1 = require('object-assign'); + +var reglScatter2d = function reglScatter2d(regl, options) { + var scatter$$1 = new scatter(regl, options); + var render = scatter$$1.render.bind(scatter$$1); // expose API + + extend$1(render, { + render: render, + update: scatter$$1.update.bind(scatter$$1), + draw: scatter$$1.draw.bind(scatter$$1), + destroy: scatter$$1.destroy.bind(scatter$$1), + regl: scatter$$1.regl, + gl: scatter$$1.gl, + canvas: scatter$$1.gl.canvas, + groups: scatter$$1.groups, + markers: scatter$$1.markerCache, + palette: scatter$$1.palette + }); + return render; +}; + +module.exports = reglScatter2d; diff --git a/index.js b/index.js index 974fe7f..5c04b1f 100644 --- a/index.js +++ b/index.js @@ -1,12 +1,12 @@ 'use strict' -let Scatter = require('./scatter') -let extend = require('object-assign') +var Scatter = require('./scatter') +var extend = require('object-assign') module.exports = function (regl, options) { - let scatter = new Scatter(regl, options) + var scatter = new Scatter(regl, options) - let render = scatter.render.bind(scatter) + var render = scatter.render.bind(scatter) // expose API extend(render, { diff --git a/package.json b/package.json index 5f9f311..73a5475 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,12 @@ "name": "regl-scatter2d", "version": "3.0.6", "description": "Scatter2d plot built with regl", - "main": "./index.js", + "main": "./bundle.js", "scripts": { - "test": "budo test", - "build": "browserify test.js -g bubleify | indexhtmlify | metadataify | github-cornerify | mobilify > gh-pages/no-snapping.html" + "test": "node test", + "test-browser": "budo test -- -t glslify", + "prepublishOnly": "npm run build", + "build": "rollup -c rollup.config.js" }, "repository": { "type": "git", @@ -15,12 +17,7 @@ "regl", "plotly" ], - "browserify": { - "transform": [ - "glslify", - "bubleify" - ] - }, + "browserslist": "> 0.25%, not dead", "author": "Dima Yv ", "license": "MIT", "bugs": { @@ -30,12 +27,13 @@ "dependencies": { "array-range": "^1.0.1", "array-rearrange": "^2.2.2", - "bubleify": "^1.0.0", "clamp": "^1.0.1", "color-id": "^1.1.0", - "color-normalize": "^1.0.3", + "color-normalize": "^1.3.0", + "color-rgba": "^2.1.0", "flatten-vertex-data": "^1.0.0", - "glslify": "^6.1.1", + "glslify": "^7.0.0", + "image-palette": "^2.1.0", "is-iexplorer": "^1.0.0", "object-assign": "^4.1.1", "parse-rect": "^1.1.0", @@ -45,23 +43,23 @@ "update-diff": "^1.1.0" }, "devDependencies": { + "@babel/core": "^7.1.6", + "@babel/preset-env": "^7.1.6", "array-bounds": "^1.0.1", - "bitmap-sdf": "^1.0.1", - "canvas-fit": "^1.5.0", - "draw-svg-path": "^1.0.0", - "enable-mobile": "^1.0.7", "fps-indicator": "^1.1.2", - "gauss-random": "^1.0.1", - "mobilify": "^1.0.1", - "mouse-change": "^1.4.0", - "mouse-wheel": "^1.2.0", - "nanoraf": "^3.0.1", + "gl": "^4.1.1", + "image-equal": "^4.3.0", + "image-output": "^2.4.0", + "image-pixels": "^2.2.0", "next-pow-2": "^1.0.0", - "nice-color-palettes": "^2.0.0", - "normalize-svg-coords": "^1.0.7", - "pan-zoom": "^2.0.0", - "parse-svg-path": "^0.1.2", + "pxls": "^2.3.1", "regl": "^1.3.0", - "svg-path-bounds": "^1.0.1" + "rollup": "^0.67.1", + "rollup-plugin-babel": "^4.0.3", + "rollup-plugin-browserify-transform": "^1.0.1", + "rollup-plugin-commonjs": "^9.2.0", + "rollup-plugin-node-resolve": "^3.4.0", + "seed-random": "^2.2.0", + "tape": "^4.9.1" } } diff --git a/readme.md b/readme.md index 945e91c..98c55d7 100644 --- a/readme.md +++ b/readme.md @@ -1,12 +1,12 @@ -# regl-scatter2d [![unstable](https://img.shields.io/badge/stability-unstable-green.svg)](http://github.com/badges/stability-badges) +# regl-scatter2d [![unstable](https://img.shields.io/badge/stability-unstable-green.svg)](http://github.com/badges/stability-badges) [![Build Status](https://img.shields.io/travis/gl-vis/regl-scatter2d.svg)](https://travis-ci.org/gl-vis/regl-scatter2d) Fast and precise 2d scatter plot for lots of points. -![regl-scatter2d](https://github.com/dy/regl-scatter2d/blob/master/preview.png?raw=true) +![regl-scatter2d](https://github.com/gl-vis/regl-scatter2d/blob/master/preview.png?raw=true) Remake on [gl-scatter2d](https://github.com/gl-vis/gl-scatter2d), covering other scatter-related components. -[Demo](https://dy.github.io/regl-scatter2d). +[Demo](https://gl-vis.github.io/regl-scatter2d). ## Usage @@ -105,8 +105,8 @@ Dispose scatter instance and associated resources. ## Related -* [regl-line2d](https://github.com/dy/regl-line2d) -* [regl-error2d](https://github.com/dy/regl-error2d) +* [regl-line2d](https://github.com/gl-vis/regl-line2d) +* [regl-error2d](https://github.com/gl-vis/regl-error2d) ## Similar diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..968dff3 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,40 @@ +// rollup.config.js +import commonjs from 'rollup-plugin-commonjs' +import babel from 'rollup-plugin-babel' +import tr from 'rollup-plugin-browserify-transform' +import glslify from 'glslify' +import resolve from 'rollup-plugin-node-resolve' + +export default { + input: 'index.js', + output: { + file: 'bundle.js', + format: 'cjs' + }, + plugins: [ + tr(glslify), + resolve(), + commonjs({ + sourceMap: false, + include: ['index.js', 'scatter.js'], + ignore: [ + 'object-assign', + 'color-normalize', + 'array-bounds', + 'color-id', + 'point-cluster', + 'object-assign', + 'glslify', + 'pick-by-alias', + 'update-diff', + 'flatten-vertex-data', + 'is-iexplorer', + 'to-float32', + 'parse-rect' + ] + }), + babel({ + 'presets': ['@babel/preset-env'] + }) + ] +}; diff --git a/scatter.js b/scatter.js index 40d4052..c0ad6b4 100644 --- a/scatter.js +++ b/scatter.js @@ -382,11 +382,14 @@ Scatter.prototype.update = function (...args) { range: 'range dataBox databox', viewport: 'viewport viewPort viewBox viewbox', opacity: 'opacity alpha transparency', - bounds: 'bound bounds boundaries limits' + bounds: 'bound bounds boundaries limits', + tooManyColors: 'tooManyColors palette paletteMode optimizePalette enablePalette' }) if (options.positions === null) options.positions = [] + if (options.tooManyColors != null) this.tooManyColors = options.tooManyColors + if (!group) { groups[i] = group = { id: i, @@ -467,6 +470,7 @@ Scatter.prototype.update = function (...args) { hasColor++ return c }, + borderColor: (c, group) => { if (c == null) c = Scatter.defaults.borderColor c = this.updateColor(c) @@ -817,7 +821,7 @@ Scatter.prototype.updateColor = function (colors) { } // detect if too many colors in palette - if (!this.tooManyColors && palette.length > maxColors * maxColors * 4) this.tooManyColors = true + if (!this.tooManyColors && palette.length > maxColors * 4) this.tooManyColors = true // limit max color this.updatePalette(palette) diff --git a/test.js b/test.js deleted file mode 100644 index 523fd97..0000000 --- a/test.js +++ /dev/null @@ -1,317 +0,0 @@ -'use strict' - -require('enable-mobile') -const createScatter = require('./') -const panZoom = require('pan-zoom') -const fps = require('fps-indicator')({ css: `padding: 1.4rem` }) -const random = require('gauss-random') -const rgba = require('color-rgba') -const nanoraf = require('nanoraf') -const palettes = require('nice-color-palettes') -const sdf = require('bitmap-sdf') -const parsePath = require('parse-svg-path') -const drawPath = require('draw-svg-path') -const normalizePath = require('normalize-svg-coords') -const pathBounds = require('svg-path-bounds') -const isSvgPath = require('is-svg-path') -const t = require('tape') -const regl = require('regl')({ - extensions: ['OES_element_index_uint'] -}) - - -t('unsnapped elements render') -t('snapped elements render') -t('multimarker multipass render') -t('too many colors render') -t('palette colors render') -t('single color render') -t('precision') -t('1e6 points') -t('marker size') -t('circle size') -t('multipass rendering') -t('single point') -t('no-boundaries') -t('cluster with external buffer') - - -//create square test sdf image -let w = 200, h = 200 -let dist = new Array(w*h) -for (let i = 0; i < w; i++) { - for (let j = 0; j < h; j++) { - if (i > j) { - if (i < h - j) { - dist[j*w + i] = j/(h/2) - } - else { - dist[j*w + i] = 1 - (i-w/2)/(w/2) - } - } - else { - if (i < h - j) { - dist[j*w + i] = i/(w/2) - } - else { - dist[j*w + i] = 1 - (j-h/2)/(h/2) - } - } - } -} - -function show (arr) { - let dim = Math.sqrt(arr.length) - let cnv = document.body.appendChild(document.createElement('canvas')) - let ctx = cnv.getContext('2d') - let w = cnv.width = dim - let h = cnv.height = dim - let iData = new ImageData(w, h) - let data = iData.data - - for (let i = 0; i < w; i++) { - for (let j = 0; j < h; j++) { - data[i*w*4 + j*4 + 0] = arr[i*w + j] * 255 - data[i*w*4 + j*4 + 1] = arr[i*w + j] * 255 - data[i*w*4 + j*4 + 2] = arr[i*w + j] * 255 - data[i*w*4 + j*4 + 3] = 255 - } - } - - ctx.putImageData(iData, 0, 0) -} - - - -let N = 1e4 -let ratio = window.innerWidth / window.innerHeight -let range = [-10 * ratio, -10, 10 * ratio, 10] -let colors = palettes[Math.floor(Math.random() * palettes.length)] -// let markers = [ null , dist ] -let markers = [ dist ] -let passes = markers.length - -let scatter = createScatter(regl) - -console.time(1) -scatter.update(...Array(passes).fill(null).map((x, i) => { - var pos = generate(N) - // var pos = [ - // [0,0.75,0.5,0.85,1,0.75,1.25,null,1.5,0.85,1.75,null,2,0.75,2.5,0.85,3,0.75], - // [0,0.5,1,0.6,2,0.5,2.5,null,3,0.5] - // ][i] - return { - // positions: pos, - positions: [0,0, 1,1, 2,2, 3,3, 4,4, 5,5, 6,6, 7,7], - - // size: Array(pos.length).fill(15).map(x => Math.random() * x/2 + x/2), - // size: [2, 5, 9, 14, 20, 27, 35, 44, 54], - size: 12, - // opacity: .15, - - color: ['red', 'green', 'blue', 'black', 'red', 'black', 'red', 'gray'], - // color: Array(N).fill(0).map(() => colors[Math.floor(Math.random() * colors.length)]), - // color: 'rgba(0, 0, 255, .5)', - // color: Array(N * 4).fill(0).map(Math.random), - // borderColor: 'rgba(0, 255, 0, .5)', - - // marker: getCharSdf('©'), - marker: [null, null, null, null, dist, dist, dist, dist], - // marker: markers[i], - // marker: Array(N).fill(0).map(() => markers[Math.floor(Math.random() * markers.length)]), - - range: range, - // borderSize: 3, - // borderColor: Array(N).fill(0).map(() => colors[Math.floor(Math.random() * colors.length)]), - snap: false, - - // viewport: [0,100,300,300] - } -})) -scatter.draw() -// scatter.draw([[0, 2, 4, 6]]) -// scatter.draw([[1, 3, 5, 7]]) -console.timeEnd(1) - -// setTimeout(() => { -// scatter.regl.clear({color: true}) -// scatter.draw([[0], [0]]) -// }, 500) - - - -//interactions -let prev = null -var frame = nanoraf(passes => { - scatter(...passes) -}) - -let cnv = document.body.querySelectorAll('canvas')[1] - -panZoom(cnv, e => { - //FIXME: panzoom fails working right on ipad - let w = cnv.offsetWidth - let h = cnv.offsetHeight - - let rx = e.x / w - let ry = e.y / h - - let xrange = range[2] - range[0], - yrange = range[3] - range[1] - - if (e.dz) { - let dz = e.dz / w - range[0] -= rx * xrange * dz - range[2] += (1 - rx) * xrange * dz - - range[1] -= (1 - ry) * yrange * dz - range[3] += ry * yrange * dz - } - - range[0] -= xrange * e.dx / w - range[2] -= xrange * e.dx / w - range[1] += yrange * e.dy / h - range[3] += yrange * e.dy / h - - let state = Array(passes).fill({range}) - frame(state, prev) - prev = state -}) - - -function generate(N) { - var positions = new Float64Array(2 * N) - - for(var i=0; i<2*N; ++i) { - positions[i] = random() * 3 - } - - - // for (var i = 0; i < N; i++) { - // positions[i * 2] = i; - // positions[i * 2 + 1] = Math.random(); - // } - - return positions -} - - - -window.addEventListener('resize', scatter) - - - - - - -function getCharSdf(char, size) { - if (!size) size = 200 - - let cnv = document.createElement('canvas') - let ctx = cnv.getContext('2d') - - let w = cnv.width = size - let h = cnv.height = size - - ctx.fillStyle = 'black' - ctx.fillRect(0, 0, w, h) - ctx.textAlign = 'center' - ctx.textBaseline = 'middle' - ctx.font = size/2 + 'px sans-serif' - - ctx.fillStyle = 'white' - ctx.fillText(char, size/2, size/2) - - let data = sdf(ctx, { - cutoff: .48, - radius: size/2 - }) - - // show(data) - - return data -} - -//return bitmap sdf data from any argument -function getSDF(arg, markerSize) { - let size = markerSize * 2 - let w = canvas.width = size * 2 - let h = canvas.height = size * 2 - let cutoff = 1 - let radius = size/2 - let data - - //FIXME: replace with render-svg or rasterize-svg module or so - //svg path or utf character - if (typeof arg === 'string') { - arg = arg.trim() - - ctx.fillStyle = 'black' - ctx.fillRect(0, 0, w, h) - ctx.fillStyle = 'white' - ctx.strokeStyle = 'white' - ctx.lineWidth = 1 - - //svg path - if (isSvgPath(arg)) { - let path = normalizePath({ - path: arg, - viewBox: pathBounds(arg), - min: 0, - max: size - }) - - //FIXME: make this good - ctx.translate(size, size) - - //if canvas svg paths api is available - if (global.Path2D) { - let path2d = new Path2D(path) - ctx.fill(path2d) - ctx.stroke(path2d) - } - //fallback to bezier-curves - else { - let segments = parsePath(path) - drawPath(ctx, segments) - ctx.fill() - ctx.stroke() - } - - ctx.setTransform(1, 0, 0, 1, 0, 0); - } - - //plain character - else { - ctx.textAlign = 'center' - ctx.textBaseline = 'middle' - ctx.font = size + 'px sans-serif' - ctx.fillText(arg, size, size) - } - - data = sdf(ctx, { - cutoff: cutoff, - radius: radius - }) - } - - //direct sdf data - else if (Array.isArray(arg)) { - data = arg - } - - //image data, pixels, canvas, array - else { - data = sdf(arg, { - cutoff: cutoff, - radius: radius, - width: w, - height: h - }) - } - - // show(data, arg) - - return data -} - diff --git a/test/3232.json b/test/3232.json new file mode 100644 index 0000000..4b67838 --- /dev/null +++ b/test/3232.json @@ -0,0 +1,2006 @@ +[ +{"colors":[ +[0.0196078431372549,0.0392156862745098,0.6745098039215687,1], +[0.0196078431372549,0.0392156862745098,0.6745098039215687,1], +[0.0196078431372549,0.0392156862745098,0.6745098039215687,1], +[0.0196078431372549,0.0392156862745098,0.6745098039215687,1], +[0.0196078431372549,0.043137254901960784,0.6745098039215687,1], +[0.023529411764705882,0.043137254901960784,0.6745098039215687,1], +[0.023529411764705882,0.043137254901960784,0.6745098039215687,1], +[0.023529411764705882,0.043137254901960784,0.6745098039215687,1], +[0.023529411764705882,0.043137254901960784,0.6745098039215687,1], +[0.023529411764705882,0.043137254901960784,0.6745098039215687,1], +[0.023529411764705882,0.043137254901960784,0.6784313725490196,1], +[0.023529411764705882,0.047058823529411764,0.6784313725490196,1], +[0.023529411764705882,0.047058823529411764,0.6784313725490196,1], +[0.023529411764705882,0.047058823529411764,0.6784313725490196,1], +[0.023529411764705882,0.047058823529411764,0.6784313725490196,1], +[0.027450980392156862,0.047058823529411764,0.6784313725490196,1], +[0.027450980392156862,0.047058823529411764,0.6784313725490196,1], +[0.027450980392156862,0.047058823529411764,0.6784313725490196,1], +[0.027450980392156862,0.050980392156862744,0.6784313725490196,1], +[0.027450980392156862,0.050980392156862744,0.6784313725490196,1], +[0.027450980392156862,0.050980392156862744,0.6784313725490196,1], +[0.027450980392156862,0.050980392156862744,0.6784313725490196,1], +[0.027450980392156862,0.050980392156862744,0.6784313725490196,1], +[0.027450980392156862,0.050980392156862744,0.6784313725490196,1], +[0.027450980392156862,0.050980392156862744,0.6784313725490196,1], +[0.03137254901960784,0.054901960784313725,0.6784313725490196,1], +[0.03137254901960784,0.054901960784313725,0.6784313725490196,1], +[0.03137254901960784,0.054901960784313725,0.6784313725490196,1], +[0.03137254901960784,0.054901960784313725,0.6784313725490196,1], +[0.03137254901960784,0.054901960784313725,0.6784313725490196,1], +[0.03137254901960784,0.054901960784313725,0.6823529411764706,1], +[0.03137254901960784,0.054901960784313725,0.6823529411764706,1], +[0.03137254901960784,0.058823529411764705,0.6823529411764706,1], +[0.03137254901960784,0.058823529411764705,0.6823529411764706,1], +[0.03137254901960784,0.058823529411764705,0.6823529411764706,1], +[0.03529411764705882,0.058823529411764705,0.6823529411764706,1], +[0.03529411764705882,0.058823529411764705,0.6823529411764706,1], +[0.03529411764705882,0.058823529411764705,0.6823529411764706,1], +[0.03529411764705882,0.058823529411764705,0.6823529411764706,1], +[0.03529411764705882,0.06274509803921569,0.6823529411764706,1], +[0.03529411764705882,0.06274509803921569,0.6823529411764706,1], +[0.03529411764705882,0.06274509803921569,0.6823529411764706,1], +[0.03529411764705882,0.06274509803921569,0.6823529411764706,1], +[0.03529411764705882,0.06274509803921569,0.6823529411764706,1], +[0.03529411764705882,0.06274509803921569,0.6823529411764706,1], +[0.0392156862745098,0.06274509803921569,0.6823529411764706,1], +[0.0392156862745098,0.06666666666666667,0.6823529411764706,1], +[0.0392156862745098,0.06666666666666667,0.6823529411764706,1], +[0.0392156862745098,0.06666666666666667,0.6823529411764706,1], +[0.0392156862745098,0.06666666666666667,0.6862745098039216,1], +[0.0392156862745098,0.06666666666666667,0.6862745098039216,1], +[0.0392156862745098,0.06666666666666667,0.6862745098039216,1], +[0.0392156862745098,0.06666666666666667,0.6862745098039216,1], +[0.0392156862745098,0.07058823529411765,0.6862745098039216,1], +[0.0392156862745098,0.07058823529411765,0.6862745098039216,1], +[0.043137254901960784,0.07058823529411765,0.6862745098039216,1], +[0.043137254901960784,0.07058823529411765,0.6862745098039216,1], +[0.043137254901960784,0.07058823529411765,0.6862745098039216,1], +[0.043137254901960784,0.07058823529411765,0.6862745098039216,1], +[0.043137254901960784,0.07058823529411765,0.6862745098039216,1], +[0.043137254901960784,0.07450980392156863,0.6862745098039216,1], +[0.043137254901960784,0.07450980392156863,0.6862745098039216,1], +[0.043137254901960784,0.07450980392156863,0.6862745098039216,1], +[0.043137254901960784,0.07450980392156863,0.6862745098039216,1], +[0.043137254901960784,0.07450980392156863,0.6862745098039216,1], +[0.047058823529411764,0.07450980392156863,0.6862745098039216,1], +[0.047058823529411764,0.07450980392156863,0.6862745098039216,1], +[0.047058823529411764,0.0784313725490196,0.6862745098039216,1], +[0.047058823529411764,0.0784313725490196,0.6901960784313725,1], +[0.047058823529411764,0.0784313725490196,0.6901960784313725,1], +[0.047058823529411764,0.0784313725490196,0.6901960784313725,1], +[0.047058823529411764,0.0784313725490196,0.6901960784313725,1], +[0.047058823529411764,0.0784313725490196,0.6901960784313725,1], +[0.047058823529411764,0.0784313725490196,0.6901960784313725,1], +[0.047058823529411764,0.08235294117647059,0.6901960784313725,1], +[0.050980392156862744,0.08235294117647059,0.6901960784313725,1], +[0.050980392156862744,0.08235294117647059,0.6901960784313725,1], +[0.050980392156862744,0.08235294117647059,0.6901960784313725,1], +[0.050980392156862744,0.08235294117647059,0.6901960784313725,1], +[0.050980392156862744,0.08235294117647059,0.6901960784313725,1], +[0.050980392156862744,0.08235294117647059,0.6901960784313725,1], +[0.050980392156862744,0.08627450980392157,0.6901960784313725,1], +[0.050980392156862744,0.08627450980392157,0.6901960784313725,1], +[0.050980392156862744,0.08627450980392157,0.6901960784313725,1], +[0.050980392156862744,0.08627450980392157,0.6901960784313725,1], +[0.054901960784313725,0.08627450980392157,0.6901960784313725,1], +[0.054901960784313725,0.08627450980392157,0.6901960784313725,1], +[0.054901960784313725,0.08627450980392157,0.6901960784313725,1], +[0.054901960784313725,0.09019607843137255,0.6941176470588235,1], +[0.054901960784313725,0.09019607843137255,0.6941176470588235,1], +[0.054901960784313725,0.09019607843137255,0.6941176470588235,1], +[0.054901960784313725,0.09019607843137255,0.6941176470588235,1], +[0.054901960784313725,0.09019607843137255,0.6941176470588235,1], +[0.054901960784313725,0.09019607843137255,0.6941176470588235,1], +[0.054901960784313725,0.09019607843137255,0.6941176470588235,1], +[0.058823529411764705,0.09411764705882353,0.6941176470588235,1], +[0.058823529411764705,0.09411764705882353,0.6941176470588235,1], +[0.058823529411764705,0.09411764705882353,0.6941176470588235,1], +[0.058823529411764705,0.09411764705882353,0.6941176470588235,1], +[0.058823529411764705,0.09411764705882353,0.6941176470588235,1], +[0.058823529411764705,0.09411764705882353,0.6941176470588235,1], +[0.058823529411764705,0.09411764705882353,0.6941176470588235,1], +[0.058823529411764705,0.09803921568627451,0.6941176470588235,1], +[0.058823529411764705,0.09803921568627451,0.6941176470588235,1], +[0.058823529411764705,0.09803921568627451,0.6941176470588235,1], +[0.06274509803921569,0.09803921568627451,0.6941176470588235,1], +[0.06274509803921569,0.09803921568627451,0.6941176470588235,1], +[0.06274509803921569,0.09803921568627451,0.6980392156862745,1], +[0.06274509803921569,0.09803921568627451,0.6980392156862745,1], +[0.06274509803921569,0.10196078431372549,0.6980392156862745,1], +[0.06274509803921569,0.10196078431372549,0.6980392156862745,1], +[0.06274509803921569,0.10196078431372549,0.6980392156862745,1], +[0.06274509803921569,0.10196078431372549,0.6980392156862745,1], +[0.06274509803921569,0.10196078431372549,0.6980392156862745,1], +[0.06274509803921569,0.10196078431372549,0.6980392156862745,1], +[0.06666666666666667,0.10196078431372549,0.6980392156862745,1], +[0.06666666666666667,0.10588235294117647,0.6980392156862745,1], +[0.06666666666666667,0.10588235294117647,0.6980392156862745,1], +[0.06666666666666667,0.10588235294117647,0.6980392156862745,1], +[0.06666666666666667,0.10588235294117647,0.6980392156862745,1], +[0.06666666666666667,0.10588235294117647,0.6980392156862745,1], +[0.06666666666666667,0.10588235294117647,0.6980392156862745,1], +[0.06666666666666667,0.10588235294117647,0.6980392156862745,1], +[0.06666666666666667,0.10980392156862745,0.6980392156862745,1], +[0.06666666666666667,0.10980392156862745,0.6980392156862745,1], +[0.07058823529411765,0.10980392156862745,0.6980392156862745,1], +[0.07058823529411765,0.10980392156862745,0.6980392156862745,1], +[0.07058823529411765,0.10980392156862745,0.7019607843137254,1], +[0.07058823529411765,0.10980392156862745,0.7019607843137254,1], +[0.07058823529411765,0.10980392156862745,0.7019607843137254,1], +[0.07058823529411765,0.11372549019607843,0.7019607843137254,1], +[0.07058823529411765,0.11372549019607843,0.7019607843137254,1], +[0.07058823529411765,0.11372549019607843,0.7019607843137254,1], +[0.07058823529411765,0.11372549019607843,0.7019607843137254,1], +[0.07058823529411765,0.11372549019607843,0.7019607843137254,1], +[0.07450980392156863,0.11372549019607843,0.7019607843137254,1], +[0.07450980392156863,0.11372549019607843,0.7019607843137254,1], +[0.07450980392156863,0.11764705882352941,0.7019607843137254,1], +[0.07450980392156863,0.11764705882352941,0.7019607843137254,1], +[0.07450980392156863,0.11764705882352941,0.7019607843137254,1], +[0.07450980392156863,0.11764705882352941,0.7019607843137254,1], +[0.07450980392156863,0.11764705882352941,0.7019607843137254,1], +[0.07450980392156863,0.11764705882352941,0.7019607843137254,1], +[0.07450980392156863,0.11764705882352941,0.7019607843137254,1], +[0.07450980392156863,0.12156862745098039,0.7019607843137254,1], +[0.0784313725490196,0.12156862745098039,0.7019607843137254,1], +[0.0784313725490196,0.12156862745098039,0.7058823529411765,1], +[0.0784313725490196,0.12156862745098039,0.7058823529411765,1], +[0.0784313725490196,0.12156862745098039,0.7058823529411765,1], +[0.0784313725490196,0.12156862745098039,0.7058823529411765,1], +[0.0784313725490196,0.12156862745098039,0.7058823529411765,1], +[0.0784313725490196,0.12549019607843137,0.7058823529411765,1], +[0.0784313725490196,0.12549019607843137,0.7058823529411765,1], +[0.0784313725490196,0.12549019607843137,0.7058823529411765,1], +[0.0784313725490196,0.12549019607843137,0.7058823529411765,1], +[0.08235294117647059,0.12549019607843137,0.7058823529411765,1], +[0.08235294117647059,0.12549019607843137,0.7058823529411765,1], +[0.08235294117647059,0.12549019607843137,0.7058823529411765,1], +[0.08235294117647059,0.12941176470588237,0.7058823529411765,1], +[0.08235294117647059,0.12941176470588237,0.7058823529411765,1], +[0.08235294117647059,0.12941176470588237,0.7058823529411765,1], +[0.08235294117647059,0.12941176470588237,0.7058823529411765,1], +[0.08235294117647059,0.12941176470588237,0.7058823529411765,1], +[0.08235294117647059,0.12941176470588237,0.7058823529411765,1], +[0.08235294117647059,0.12941176470588237,0.7058823529411765,1], +[0.08627450980392157,0.13333333333333333,0.7058823529411765,1], +[0.08627450980392157,0.13333333333333333,0.7098039215686275,1], +[0.08627450980392157,0.13333333333333333,0.7098039215686275,1], +[0.08627450980392157,0.13333333333333333,0.7098039215686275,1], +[0.08627450980392157,0.13333333333333333,0.7098039215686275,1], +[0.08627450980392157,0.13333333333333333,0.7098039215686275,1], +[0.08627450980392157,0.13333333333333333,0.7098039215686275,1], +[0.08627450980392157,0.13725490196078433,0.7098039215686275,1], +[0.08627450980392157,0.13725490196078433,0.7098039215686275,1], +[0.08627450980392157,0.13725490196078433,0.7098039215686275,1], +[0.09019607843137255,0.13725490196078433,0.7098039215686275,1], +[0.09019607843137255,0.13725490196078433,0.7098039215686275,1], +[0.09019607843137255,0.13725490196078433,0.7098039215686275,1], +[0.09019607843137255,0.13725490196078433,0.7098039215686275,1], +[0.09019607843137255,0.1411764705882353,0.7098039215686275,1], +[0.09019607843137255,0.1411764705882353,0.7098039215686275,1], +[0.09019607843137255,0.1411764705882353,0.7098039215686275,1], +[0.09019607843137255,0.1411764705882353,0.7098039215686275,1], +[0.09019607843137255,0.1411764705882353,0.7098039215686275,1], +[0.09019607843137255,0.1411764705882353,0.7098039215686275,1], +[0.09411764705882353,0.1411764705882353,0.7137254901960784,1], +[0.09411764705882353,0.1450980392156863,0.7137254901960784,1], +[0.09411764705882353,0.1450980392156863,0.7137254901960784,1], +[0.09411764705882353,0.1450980392156863,0.7137254901960784,1], +[0.09411764705882353,0.1450980392156863,0.7137254901960784,1], +[0.09411764705882353,0.1450980392156863,0.7137254901960784,1], +[0.09411764705882353,0.1450980392156863,0.7137254901960784,1], +[0.09411764705882353,0.1450980392156863,0.7137254901960784,1], +[0.09411764705882353,0.14901960784313725,0.7137254901960784,1], +[0.09411764705882353,0.14901960784313725,0.7137254901960784,1], +[0.09803921568627451,0.14901960784313725,0.7137254901960784,1], +[0.09803921568627451,0.14901960784313725,0.7137254901960784,1], +[0.09803921568627451,0.14901960784313725,0.7137254901960784,1], +[0.09803921568627451,0.14901960784313725,0.7137254901960784,1], +[0.09803921568627451,0.14901960784313725,0.7137254901960784,1], +[0.09803921568627451,0.15294117647058825,0.7137254901960784,1], +[0.09803921568627451,0.15294117647058825,0.7137254901960784,1], +[0.09803921568627451,0.15294117647058825,0.7137254901960784,1], +[0.09803921568627451,0.15294117647058825,0.7137254901960784,1], +[0.09803921568627451,0.15294117647058825,0.7176470588235294,1], +[0.10196078431372549,0.15294117647058825,0.7176470588235294,1], +[0.10196078431372549,0.15294117647058825,0.7176470588235294,1], +[0.10196078431372549,0.1568627450980392,0.7176470588235294,1], +[0.10196078431372549,0.1568627450980392,0.7176470588235294,1], +[0.10196078431372549,0.1568627450980392,0.7176470588235294,1], +[0.10196078431372549,0.1568627450980392,0.7176470588235294,1], +[0.10196078431372549,0.1568627450980392,0.7176470588235294,1], +[0.10196078431372549,0.1568627450980392,0.7176470588235294,1], +[0.10196078431372549,0.1568627450980392,0.7176470588235294,1], +[0.10196078431372549,0.1607843137254902,0.7176470588235294,1], +[0.10588235294117647,0.1607843137254902,0.7176470588235294,1], +[0.10588235294117647,0.1607843137254902,0.7176470588235294,1], +[0.10588235294117647,0.1607843137254902,0.7176470588235294,1], +[0.10588235294117647,0.1607843137254902,0.7176470588235294,1], +[0.10588235294117647,0.1607843137254902,0.7176470588235294,1], +[0.10588235294117647,0.1607843137254902,0.7176470588235294,1], +[0.10588235294117647,0.16470588235294117,0.7176470588235294,1], +[0.10588235294117647,0.16470588235294117,0.7176470588235294,1], +[0.10588235294117647,0.16470588235294117,0.7176470588235294,1], +[0.10588235294117647,0.16470588235294117,0.7215686274509804,1], +[0.10980392156862745,0.16470588235294117,0.7215686274509804,1], +[0.10980392156862745,0.16470588235294117,0.7215686274509804,1], +[0.10980392156862745,0.16470588235294117,0.7215686274509804,1], +[0.10980392156862745,0.16862745098039217,0.7215686274509804,1], +[0.10980392156862745,0.16862745098039217,0.7215686274509804,1], +[0.10980392156862745,0.16862745098039217,0.7215686274509804,1], +[0.10980392156862745,0.16862745098039217,0.7215686274509804,1], +[0.10980392156862745,0.16862745098039217,0.7215686274509804,1], +[0.10980392156862745,0.16862745098039217,0.7215686274509804,1], +[0.10980392156862745,0.16862745098039217,0.7215686274509804,1], +[0.11372549019607843,0.17254901960784313,0.7215686274509804,1], +[0.11372549019607843,0.17254901960784313,0.7215686274509804,1], +[0.11372549019607843,0.17254901960784313,0.7215686274509804,1], +[0.11372549019607843,0.17254901960784313,0.7215686274509804,1], +[0.11372549019607843,0.17254901960784313,0.7215686274509804,1], +[0.11372549019607843,0.17254901960784313,0.7215686274509804,1], +[0.11372549019607843,0.17254901960784313,0.7215686274509804,1], +[0.11372549019607843,0.17647058823529413,0.7215686274509804,1], +[0.11372549019607843,0.17647058823529413,0.7254901960784313,1], +[0.11372549019607843,0.17647058823529413,0.7254901960784313,1], +[0.11764705882352941,0.17647058823529413,0.7254901960784313,1], +[0.11764705882352941,0.17647058823529413,0.7254901960784313,1], +[0.11764705882352941,0.17647058823529413,0.7254901960784313,1], +[0.11764705882352941,0.17647058823529413,0.7254901960784313,1], +[0.11764705882352941,0.1803921568627451,0.7254901960784313,1], +[0.11764705882352941,0.1803921568627451,0.7254901960784313,1], +[0.11764705882352941,0.1803921568627451,0.7254901960784313,1], +[0.11764705882352941,0.1803921568627451,0.7254901960784313,1], +[0.11764705882352941,0.1803921568627451,0.7254901960784313,1], +[0.11764705882352941,0.1803921568627451,0.7254901960784313,1], +[0.12156862745098039,0.1803921568627451,0.7254901960784313,1], +[0.12156862745098039,0.1843137254901961,0.7254901960784313,1], +[0.12156862745098039,0.1843137254901961,0.7254901960784313,1], +[0.12156862745098039,0.1843137254901961,0.7254901960784313,1], +[0.12156862745098039,0.1843137254901961,0.7254901960784313,1], +[0.12156862745098039,0.1843137254901961,0.7254901960784313,1], +[0.12156862745098039,0.1843137254901961,0.7254901960784313,1], +[0.12156862745098039,0.1843137254901961,0.7254901960784313,1], +[0.12156862745098039,0.18823529411764706,0.7294117647058823,1], +[0.12156862745098039,0.18823529411764706,0.7294117647058823,1], +[0.12549019607843137,0.18823529411764706,0.7294117647058823,1], +[0.12549019607843137,0.18823529411764706,0.7294117647058823,1], +[0.12549019607843137,0.18823529411764706,0.7294117647058823,1], +[0.12549019607843137,0.18823529411764706,0.7294117647058823,1], +[0.12549019607843137,0.18823529411764706,0.7294117647058823,1], +[0.12549019607843137,0.19215686274509805,0.7294117647058823,1], +[0.12549019607843137,0.19215686274509805,0.7294117647058823,1], +[0.12549019607843137,0.19215686274509805,0.7294117647058823,1], +[0.12549019607843137,0.19215686274509805,0.7294117647058823,1], +[0.12549019607843137,0.19215686274509805,0.7294117647058823,1], +[0.12941176470588237,0.19215686274509805,0.7294117647058823,1], +[0.12941176470588237,0.19215686274509805,0.7294117647058823,1], +[0.12941176470588237,0.19607843137254902,0.7294117647058823,1], +[0.12941176470588237,0.19607843137254902,0.7294117647058823,1], +[0.12941176470588237,0.19607843137254902,0.7294117647058823,1], +[0.12941176470588237,0.19607843137254902,0.7294117647058823,1], +[0.12941176470588237,0.19607843137254902,0.7294117647058823,1], +[0.12941176470588237,0.19607843137254902,0.7333333333333333,1], +[0.12941176470588237,0.19607843137254902,0.7333333333333333,1], +[0.12941176470588237,0.2,0.7333333333333333,1], +[0.13333333333333333,0.2,0.7333333333333333,1], +[0.13333333333333333,0.2,0.7333333333333333,1], +[0.13333333333333333,0.2,0.7333333333333333,1], +[0.13333333333333333,0.2,0.7333333333333333,1], +[0.13333333333333333,0.2,0.7333333333333333,1], +[0.13333333333333333,0.2,0.7333333333333333,1], +[0.13333333333333333,0.20392156862745098,0.7333333333333333,1], +[0.13333333333333333,0.20392156862745098,0.7333333333333333,1], +[0.13333333333333333,0.20392156862745098,0.7333333333333333,1], +[0.13333333333333333,0.20392156862745098,0.7333333333333333,1], +[0.13725490196078433,0.20392156862745098,0.7333333333333333,1], +[0.13725490196078433,0.20392156862745098,0.7333333333333333,1], +[0.13725490196078433,0.20392156862745098,0.7333333333333333,1], +[0.13725490196078433,0.20784313725490197,0.7333333333333333,1], +[0.13725490196078433,0.20784313725490197,0.7333333333333333,1], +[0.13725490196078433,0.20784313725490197,0.7333333333333333,1], +[0.13725490196078433,0.20784313725490197,0.7333333333333333,1], +[0.13725490196078433,0.20784313725490197,0.7372549019607844,1], +[0.13725490196078433,0.20784313725490197,0.7372549019607844,1], +[0.13725490196078433,0.20784313725490197,0.7372549019607844,1], +[0.1411764705882353,0.21176470588235294,0.7372549019607844,1], +[0.1411764705882353,0.21176470588235294,0.7372549019607844,1], +[0.1411764705882353,0.21176470588235294,0.7372549019607844,1], +[0.1411764705882353,0.21176470588235294,0.7372549019607844,1], +[0.1411764705882353,0.21176470588235294,0.7372549019607844,1], +[0.1411764705882353,0.21176470588235294,0.7372549019607844,1], +[0.1411764705882353,0.21176470588235294,0.7372549019607844,1], +[0.1411764705882353,0.21568627450980393,0.7372549019607844,1], +[0.1411764705882353,0.21568627450980393,0.7372549019607844,1], +[0.1411764705882353,0.21568627450980393,0.7372549019607844,1], +[0.1450980392156863,0.21568627450980393,0.7372549019607844,1], +[0.1450980392156863,0.21568627450980393,0.7372549019607844,1], +[0.1450980392156863,0.21568627450980393,0.7372549019607844,1], +[0.1450980392156863,0.21568627450980393,0.7372549019607844,1], +[0.1450980392156863,0.2196078431372549,0.7372549019607844,1], +[0.1450980392156863,0.2196078431372549,0.7372549019607844,1], +[0.1450980392156863,0.2196078431372549,0.7411764705882353,1], +[0.1450980392156863,0.2196078431372549,0.7411764705882353,1], +[0.1450980392156863,0.2196078431372549,0.7411764705882353,1], +[0.1450980392156863,0.2196078431372549,0.7411764705882353,1], +[0.14901960784313725,0.2196078431372549,0.7411764705882353,1], +[0.14901960784313725,0.2235294117647059,0.7411764705882353,1], +[0.14901960784313725,0.2235294117647059,0.7411764705882353,1], +[0.14901960784313725,0.2235294117647059,0.7411764705882353,1], +[0.14901960784313725,0.2235294117647059,0.7411764705882353,1], +[0.14901960784313725,0.2235294117647059,0.7411764705882353,1], +[0.14901960784313725,0.2235294117647059,0.7411764705882353,1], +[0.14901960784313725,0.2235294117647059,0.7411764705882353,1], +[0.14901960784313725,0.22745098039215686,0.7411764705882353,1], +[0.14901960784313725,0.22745098039215686,0.7411764705882353,1], +[0.15294117647058825,0.22745098039215686,0.7411764705882353,1], +[0.15294117647058825,0.22745098039215686,0.7411764705882353,1], +[0.15294117647058825,0.22745098039215686,0.7411764705882353,1], +[0.15294117647058825,0.22745098039215686,0.7411764705882353,1], +[0.15294117647058825,0.22745098039215686,0.7411764705882353,1], +[0.15294117647058825,0.23137254901960785,0.7450980392156863,1], +[0.15294117647058825,0.23137254901960785,0.7450980392156863,1], +[0.15294117647058825,0.23137254901960785,0.7450980392156863,1], +[0.15294117647058825,0.23137254901960785,0.7450980392156863,1], +[0.15294117647058825,0.23137254901960785,0.7450980392156863,1], +[0.1568627450980392,0.23137254901960785,0.7450980392156863,1], +[0.1568627450980392,0.23137254901960785,0.7450980392156863,1], +[0.1568627450980392,0.23529411764705882,0.7450980392156863,1], +[0.1568627450980392,0.23529411764705882,0.7450980392156863,1], +[0.1568627450980392,0.23529411764705882,0.7450980392156863,1], +[0.1568627450980392,0.23529411764705882,0.7450980392156863,1], +[0.1568627450980392,0.23529411764705882,0.7450980392156863,1], +[0.1568627450980392,0.23921568627450981,0.7490196078431373,1], +[0.1607843137254902,0.23921568627450981,0.7490196078431373,1], +[0.1607843137254902,0.23921568627450981,0.7529411764705882,1], +[0.1607843137254902,0.23921568627450981,0.7529411764705882,1], +[0.1607843137254902,0.24313725490196078,0.7529411764705882,1], +[0.1607843137254902,0.24313725490196078,0.7568627450980392,1], +[0.16470588235294117,0.24313725490196078,0.7568627450980392,1], +[0.16470588235294117,0.24313725490196078,0.7568627450980392,1], +[0.16470588235294117,0.24705882352941178,0.7607843137254902,1], +[0.16470588235294117,0.24705882352941178,0.7607843137254902,1], +[0.16470588235294117,0.24705882352941178,0.7647058823529411,1], +[0.16862745098039217,0.25098039215686274,0.7647058823529411,1], +[0.16862745098039217,0.25098039215686274,0.7647058823529411,1], +[0.16862745098039217,0.25098039215686274,0.7686274509803922,1], +[0.16862745098039217,0.25098039215686274,0.7686274509803922,1], +[0.16862745098039217,0.2549019607843137,0.7686274509803922,1], +[0.17254901960784313,0.2549019607843137,0.7725490196078432,1], +[0.17254901960784313,0.2549019607843137,0.7725490196078432,1], +[0.17254901960784313,0.2549019607843137,0.7725490196078432,1], +[0.17254901960784313,0.25882352941176473,0.7764705882352941,1], +[0.17254901960784313,0.25882352941176473,0.7764705882352941,1], +[0.17647058823529413,0.25882352941176473,0.7803921568627451,1], +[0.17647058823529413,0.25882352941176473,0.7803921568627451,1], +[0.17647058823529413,0.2627450980392157,0.7803921568627451,1], +[0.17647058823529413,0.2627450980392157,0.7843137254901961,1], +[0.17647058823529413,0.2627450980392157,0.7843137254901961,1], +[0.1803921568627451,0.26666666666666666,0.7843137254901961,1], +[0.1803921568627451,0.26666666666666666,0.788235294117647,1], +[0.1803921568627451,0.26666666666666666,0.788235294117647,1], +[0.1803921568627451,0.26666666666666666,0.792156862745098,1], +[0.1803921568627451,0.27058823529411763,0.792156862745098,1], +[0.1843137254901961,0.27058823529411763,0.792156862745098,1], +[0.1843137254901961,0.27058823529411763,0.796078431372549,1], +[0.1843137254901961,0.27058823529411763,0.796078431372549,1], +[0.1843137254901961,0.27450980392156865,0.796078431372549,1], +[0.1843137254901961,0.27450980392156865,0.8,1], +[0.18823529411764706,0.27450980392156865,0.8,1], +[0.18823529411764706,0.2784313725490196,0.8,1], +[0.18823529411764706,0.2784313725490196,0.803921568627451,1], +[0.18823529411764706,0.2784313725490196,0.803921568627451,1], +[0.18823529411764706,0.2784313725490196,0.807843137254902,1], +[0.19215686274509805,0.2823529411764706,0.807843137254902,1], +[0.19215686274509805,0.2823529411764706,0.807843137254902,1], +[0.19215686274509805,0.2823529411764706,0.8117647058823529,1], +[0.19215686274509805,0.2823529411764706,0.8117647058823529,1], +[0.19215686274509805,0.28627450980392155,0.8117647058823529,1], +[0.19607843137254902,0.28627450980392155,0.8156862745098039,1], +[0.19607843137254902,0.28627450980392155,0.8156862745098039,1], +[0.19607843137254902,0.28627450980392155,0.8156862745098039,1], +[0.19607843137254902,0.2901960784313726,0.8196078431372549,1], +[0.19607843137254902,0.2901960784313726,0.8196078431372549,1], +[0.2,0.2901960784313726,0.8235294117647058,1], +[0.2,0.29411764705882354,0.8235294117647058,1], +[0.2,0.29411764705882354,0.8235294117647058,1], +[0.2,0.29411764705882354,0.8274509803921568,1], +[0.2,0.29411764705882354,0.8274509803921568,1], +[0.20392156862745098,0.2980392156862745,0.8274509803921568,1], +[0.20392156862745098,0.2980392156862745,0.8313725490196079,1], +[0.20392156862745098,0.2980392156862745,0.8313725490196079,1], +[0.20392156862745098,0.2980392156862745,0.8352941176470589,1], +[0.20392156862745098,0.30196078431372547,0.8352941176470589,1], +[0.20784313725490197,0.30196078431372547,0.8352941176470589,1], +[0.20784313725490197,0.30196078431372547,0.8392156862745098,1], +[0.20784313725490197,0.30196078431372547,0.8392156862745098,1], +[0.20784313725490197,0.3058823529411765,0.8392156862745098,1], +[0.20784313725490197,0.3058823529411765,0.8431372549019608,1], +[0.21176470588235294,0.3058823529411765,0.8431372549019608,1], +[0.21176470588235294,0.30980392156862746,0.8431372549019608,1], +[0.21176470588235294,0.30980392156862746,0.8470588235294118,1], +[0.21176470588235294,0.30980392156862746,0.8470588235294118,1], +[0.21176470588235294,0.30980392156862746,0.8509803921568627,1], +[0.21568627450980393,0.3137254901960784,0.8509803921568627,1], +[0.21568627450980393,0.3137254901960784,0.8509803921568627,1], +[0.21568627450980393,0.3137254901960784,0.8549019607843137,1], +[0.21568627450980393,0.3137254901960784,0.8549019607843137,1], +[0.21568627450980393,0.3176470588235294,0.8549019607843137,1], +[0.2196078431372549,0.3176470588235294,0.8588235294117647,1], +[0.2196078431372549,0.3176470588235294,0.8588235294117647,1], +[0.2196078431372549,0.3176470588235294,0.8588235294117647,1], +[0.2196078431372549,0.3215686274509804,0.8627450980392157,1], +[0.2196078431372549,0.3215686274509804,0.8627450980392157,1], +[0.2235294117647059,0.3215686274509804,0.8666666666666667,1], +[0.2235294117647059,0.3254901960784314,0.8666666666666667,1], +[0.2235294117647059,0.3254901960784314,0.8666666666666667,1], +[0.2235294117647059,0.3254901960784314,0.8705882352941177,1], +[0.2235294117647059,0.3254901960784314,0.8705882352941177,1], +[0.22745098039215686,0.32941176470588235,0.8705882352941177,1], +[0.22745098039215686,0.32941176470588235,0.8745098039215686,1], +[0.22745098039215686,0.32941176470588235,0.8745098039215686,1], +[0.22745098039215686,0.32941176470588235,0.8784313725490196,1], +[0.22745098039215686,0.3333333333333333,0.8784313725490196,1], +[0.23137254901960785,0.3333333333333333,0.8784313725490196,1], +[0.23137254901960785,0.3333333333333333,0.8823529411764706,1], +[0.23137254901960785,0.3333333333333333,0.8823529411764706,1], +[0.23137254901960785,0.33725490196078434,0.8823529411764706,1], +[0.23137254901960785,0.33725490196078434,0.8862745098039215,1], +[0.23529411764705882,0.33725490196078434,0.8862745098039215,1], +[0.23529411764705882,0.3411764705882353,0.8862745098039215,1], +[0.23529411764705882,0.3411764705882353,0.8901960784313725,1], +[0.23529411764705882,0.3411764705882353,0.8901960784313725,1], +[0.23529411764705882,0.3411764705882353,0.8941176470588236,1], +[0.23921568627450981,0.34509803921568627,0.8941176470588236,1], +[0.23921568627450981,0.34509803921568627,0.8941176470588236,1], +[0.23921568627450981,0.34509803921568627,0.8980392156862745,1], +[0.23921568627450981,0.34509803921568627,0.8980392156862745,1], +[0.23921568627450981,0.34901960784313724,0.8980392156862745,1], +[0.24313725490196078,0.34901960784313724,0.9019607843137255,1], +[0.24313725490196078,0.34901960784313724,0.9019607843137255,1], +[0.24313725490196078,0.34901960784313724,0.9058823529411765,1], +[0.24313725490196078,0.35294117647058826,0.9058823529411765,1], +[0.24313725490196078,0.35294117647058826,0.9058823529411765,1], +[0.24705882352941178,0.35294117647058826,0.9098039215686274,1], +[0.24705882352941178,0.3568627450980392,0.9098039215686274,1], +[0.24705882352941178,0.3568627450980392,0.9098039215686274,1], +[0.24705882352941178,0.3568627450980392,0.9137254901960784,1], +[0.24705882352941178,0.3568627450980392,0.9137254901960784,1], +[0.25098039215686274,0.3607843137254902,0.9137254901960784,1], +[0.25098039215686274,0.3607843137254902,0.9176470588235294,1], +[0.25098039215686274,0.3607843137254902,0.9176470588235294,1], +[0.25098039215686274,0.3607843137254902,0.9215686274509803,1], +[0.25098039215686274,0.36470588235294116,0.9215686274509803,1], +[0.2549019607843137,0.36470588235294116,0.9215686274509803,1], +[0.2549019607843137,0.36470588235294116,0.9254901960784314,1], +[0.2549019607843137,0.36470588235294116,0.9254901960784314,1], +[0.2549019607843137,0.3686274509803922,0.9254901960784314,1], +[0.2549019607843137,0.3686274509803922,0.9294117647058824,1], +[0.25882352941176473,0.3686274509803922,0.9294117647058824,1], +[0.25882352941176473,0.37254901960784315,0.9294117647058824,1], +[0.25882352941176473,0.37254901960784315,0.9333333333333333,1], +[0.25882352941176473,0.37254901960784315,0.9333333333333333,1], +[0.25882352941176473,0.37254901960784315,0.9372549019607843,1], +[0.2627450980392157,0.3764705882352941,0.9372549019607843,1], +[0.2627450980392157,0.3764705882352941,0.9372549019607843,1], +[0.2627450980392157,0.3764705882352941,0.9411764705882353,1], +[0.2627450980392157,0.3764705882352941,0.9411764705882353,1], +[0.2627450980392157,0.3803921568627451,0.9411764705882353,1], +[0.26666666666666666,0.3803921568627451,0.9450980392156862,1], +[0.26666666666666666,0.3803921568627451,0.9450980392156862,1], +[0.26666666666666666,0.3803921568627451,0.9490196078431372,1], +[0.26666666666666666,0.3843137254901961,0.9490196078431372,1], +[0.26666666666666666,0.3843137254901961,0.9490196078431372,1], +[0.27058823529411763,0.3843137254901961,0.9529411764705882,1], +[0.27058823529411763,0.38823529411764707,0.9529411764705882,1], +[0.27058823529411763,0.38823529411764707,0.9529411764705882,1], +[0.27058823529411763,0.38823529411764707,0.9568627450980393,1], +[0.27058823529411763,0.38823529411764707,0.9568627450980393,1], +[0.27450980392156865,0.39215686274509803,0.9568627450980393,1], +[0.27450980392156865,0.39215686274509803,0.9607843137254902,1], +[0.27450980392156865,0.39215686274509803,0.9607843137254902,1], +[0.27450980392156865,0.39215686274509803,0.9607843137254902,1], +[0.2784313725490196,0.396078431372549,0.9607843137254902,1], +[0.2784313725490196,0.396078431372549,0.9607843137254902,1], +[0.2784313725490196,0.396078431372549,0.9607843137254902,1], +[0.2784313725490196,0.396078431372549,0.9607843137254902,1], +[0.2784313725490196,0.396078431372549,0.9607843137254902,1], +[0.2823529411764706,0.4,0.9607843137254902,1], +[0.2823529411764706,0.4,0.9607843137254902,1], +[0.2823529411764706,0.4,0.9607843137254902,1], +[0.2823529411764706,0.4,0.9607843137254902,1], +[0.2823529411764706,0.4,0.9607843137254902,1], +[0.28627450980392155,0.403921568627451,0.9607843137254902,1], +[0.28627450980392155,0.403921568627451,0.9607843137254902,1], +[0.28627450980392155,0.403921568627451,0.9607843137254902,1], +[0.28627450980392155,0.403921568627451,0.9607843137254902,1], +[0.28627450980392155,0.403921568627451,0.9607843137254902,1], +[0.2901960784313726,0.40784313725490196,0.9607843137254902,1], +[0.2901960784313726,0.40784313725490196,0.9607843137254902,1], +[0.2901960784313726,0.40784313725490196,0.9607843137254902,1], +[0.2901960784313726,0.40784313725490196,0.9607843137254902,1], +[0.2901960784313726,0.40784313725490196,0.9607843137254902,1], +[0.29411764705882354,0.4117647058823529,0.9607843137254902,1], +[0.29411764705882354,0.4117647058823529,0.9607843137254902,1], +[0.29411764705882354,0.4117647058823529,0.9607843137254902,1], +[0.29411764705882354,0.4117647058823529,0.9607843137254902,1], +[0.29411764705882354,0.4117647058823529,0.9607843137254902,1], +[0.2980392156862745,0.41568627450980394,0.9607843137254902,1], +[0.2980392156862745,0.41568627450980394,0.9607843137254902,1], +[0.2980392156862745,0.41568627450980394,0.9607843137254902,1], +[0.2980392156862745,0.41568627450980394,0.9607843137254902,1], +[0.2980392156862745,0.41568627450980394,0.9607843137254902,1], +[0.30196078431372547,0.4196078431372549,0.9607843137254902,1], +[0.30196078431372547,0.4196078431372549,0.9607843137254902,1], +[0.30196078431372547,0.4196078431372549,0.9607843137254902,1], +[0.30196078431372547,0.4196078431372549,0.9607843137254902,1], +[0.30196078431372547,0.4196078431372549,0.9607843137254902,1], +[0.3058823529411765,0.4235294117647059,0.9607843137254902,1], +[0.3058823529411765,0.4235294117647059,0.9607843137254902,1], +[0.3058823529411765,0.4235294117647059,0.9607843137254902,1], +[0.3058823529411765,0.4235294117647059,0.9607843137254902,1], +[0.3058823529411765,0.4235294117647059,0.9607843137254902,1], +[0.30980392156862746,0.42745098039215684,0.9607843137254902,1], +[0.30980392156862746,0.42745098039215684,0.9607843137254902,1], +[0.30980392156862746,0.42745098039215684,0.9607843137254902,1], +[0.30980392156862746,0.42745098039215684,0.9607843137254902,1], +[0.30980392156862746,0.42745098039215684,0.9607843137254902,1], +[0.3137254901960784,0.43137254901960786,0.9607843137254902,1], +[0.3137254901960784,0.43137254901960786,0.9607843137254902,1], +[0.3137254901960784,0.43137254901960786,0.9607843137254902,1], +[0.3137254901960784,0.43137254901960786,0.9607843137254902,1], +[0.3137254901960784,0.43137254901960786,0.9607843137254902,1], +[0.3176470588235294,0.43529411764705883,0.9607843137254902,1], +[0.3176470588235294,0.43529411764705883,0.9607843137254902,1], +[0.3176470588235294,0.43529411764705883,0.9607843137254902,1], +[0.3176470588235294,0.43529411764705883,0.9607843137254902,1], +[0.3176470588235294,0.43529411764705883,0.9607843137254902,1], +[0.3215686274509804,0.4392156862745098,0.9607843137254902,1], +[0.3215686274509804,0.4392156862745098,0.9607843137254902,1], +[0.3215686274509804,0.4392156862745098,0.9607843137254902,1], +[0.3215686274509804,0.4392156862745098,0.9607843137254902,1], +[0.3215686274509804,0.4392156862745098,0.9607843137254902,1], +[0.3254901960784314,0.44313725490196076,0.9607843137254902,1], +[0.3254901960784314,0.44313725490196076,0.9607843137254902,1], +[0.3254901960784314,0.44313725490196076,0.9607843137254902,1], +[0.3254901960784314,0.44313725490196076,0.9607843137254902,1], +[0.3254901960784314,0.44313725490196076,0.9607843137254902,1], +[0.32941176470588235,0.4470588235294118,0.9607843137254902,1], +[0.32941176470588235,0.4470588235294118,0.9607843137254902,1], +[0.32941176470588235,0.4470588235294118,0.9607843137254902,1], +[0.32941176470588235,0.4470588235294118,0.9607843137254902,1], +[0.32941176470588235,0.4470588235294118,0.9607843137254902,1], +[0.3333333333333333,0.45098039215686275,0.9607843137254902,1], +[0.3333333333333333,0.45098039215686275,0.9607843137254902,1], +[0.3333333333333333,0.45098039215686275,0.9607843137254902,1], +[0.3333333333333333,0.45098039215686275,0.9607843137254902,1], +[0.3333333333333333,0.45098039215686275,0.9607843137254902,1], +[0.33725490196078434,0.4549019607843137,0.9607843137254902,1], +[0.33725490196078434,0.4549019607843137,0.9607843137254902,1], +[0.33725490196078434,0.4549019607843137,0.9607843137254902,1], +[0.33725490196078434,0.4549019607843137,0.9607843137254902,1], +[0.33725490196078434,0.4549019607843137,0.9607843137254902,1], +[0.3411764705882353,0.4588235294117647,0.9607843137254902,1], +[0.3411764705882353,0.4588235294117647,0.9607843137254902,1], +[0.3411764705882353,0.4588235294117647,0.9607843137254902,1], +[0.3411764705882353,0.4588235294117647,0.9607843137254902,1], +[0.3411764705882353,0.4588235294117647,0.9607843137254902,1], +[0.34509803921568627,0.4627450980392157,0.9607843137254902,1], +[0.34509803921568627,0.4627450980392157,0.9607843137254902,1], +[0.34509803921568627,0.4627450980392157,0.9607843137254902,1], +[0.34509803921568627,0.4627450980392157,0.9607843137254902,1], +[0.34509803921568627,0.4627450980392157,0.9607843137254902,1], +[0.34901960784313724,0.4666666666666667,0.9607843137254902,1], +[0.34901960784313724,0.4666666666666667,0.9607843137254902,1], +[0.34901960784313724,0.4666666666666667,0.9607843137254902,1], +[0.34901960784313724,0.4666666666666667,0.9607843137254902,1], +[0.34901960784313724,0.4666666666666667,0.9607843137254902,1], +[0.35294117647058826,0.47058823529411764,0.9607843137254902,1], +[0.35294117647058826,0.47058823529411764,0.9607843137254902,1], +[0.35294117647058826,0.47058823529411764,0.9607843137254902,1], +[0.35294117647058826,0.47058823529411764,0.9607843137254902,1], +[0.35294117647058826,0.47058823529411764,0.9607843137254902,1], +[0.35294117647058826,0.47058823529411764,0.9607843137254902,1], +[0.3568627450980392,0.4745098039215686,0.9607843137254902,1], +[0.3568627450980392,0.4745098039215686,0.9607843137254902,1], +[0.3568627450980392,0.4745098039215686,0.9607843137254902,1], +[0.3568627450980392,0.4745098039215686,0.9607843137254902,1], +[0.3568627450980392,0.4745098039215686,0.9607843137254902,1], +[0.3568627450980392,0.4745098039215686,0.9607843137254902,1], +[0.3607843137254902,0.47843137254901963,0.9607843137254902,1], +[0.3607843137254902,0.47843137254901963,0.9607843137254902,1], +[0.3607843137254902,0.47843137254901963,0.9607843137254902,1], +[0.3607843137254902,0.47843137254901963,0.9607843137254902,1], +[0.3607843137254902,0.47843137254901963,0.9607843137254902,1], +[0.3607843137254902,0.47843137254901963,0.9607843137254902,1], +[0.3607843137254902,0.4823529411764706,0.9607843137254902,1], +[0.36470588235294116,0.4823529411764706,0.9607843137254902,1], +[0.36470588235294116,0.4823529411764706,0.9607843137254902,1], +[0.36470588235294116,0.4823529411764706,0.9607843137254902,1], +[0.36470588235294116,0.4823529411764706,0.9607843137254902,1], +[0.36470588235294116,0.48627450980392156,0.9607843137254902,1], +[0.36470588235294116,0.48627450980392156,0.9607843137254902,1], +[0.3686274509803922,0.48627450980392156,0.9607843137254902,1], +[0.3686274509803922,0.48627450980392156,0.9607843137254902,1], +[0.3686274509803922,0.48627450980392156,0.9607843137254902,1], +[0.3686274509803922,0.48627450980392156,0.9647058823529412,1], +[0.3686274509803922,0.49019607843137253,0.9647058823529412,1], +[0.3686274509803922,0.49019607843137253,0.9647058823529412,1], +[0.37254901960784315,0.49019607843137253,0.9647058823529412,1], +[0.37254901960784315,0.49019607843137253,0.9647058823529412,1], +[0.37254901960784315,0.49019607843137253,0.9647058823529412,1], +[0.37254901960784315,0.49019607843137253,0.9647058823529412,1], +[0.37254901960784315,0.49411764705882355,0.9647058823529412,1], +[0.37254901960784315,0.49411764705882355,0.9647058823529412,1], +[0.3764705882352941,0.49411764705882355,0.9647058823529412,1], +[0.3764705882352941,0.49411764705882355,0.9647058823529412,1], +[0.3764705882352941,0.49411764705882355,0.9647058823529412,1], +[0.3764705882352941,0.49411764705882355,0.9647058823529412,1], +[0.3764705882352941,0.4980392156862745,0.9647058823529412,1], +[0.3764705882352941,0.4980392156862745,0.9647058823529412,1], +[0.3803921568627451,0.4980392156862745,0.9647058823529412,1], +[0.3803921568627451,0.4980392156862745,0.9647058823529412,1], +[0.3803921568627451,0.4980392156862745,0.9647058823529412,1], +[0.3803921568627451,0.4980392156862745,0.9647058823529412,1], +[0.3803921568627451,0.5019607843137255,0.9647058823529412,1], +[0.3803921568627451,0.5019607843137255,0.9647058823529412,1], +[0.3803921568627451,0.5019607843137255,0.9647058823529412,1], +[0.3843137254901961,0.5019607843137255,0.9647058823529412,1], +[0.3843137254901961,0.5019607843137255,0.9647058823529412,1], +[0.3843137254901961,0.5019607843137255,0.9647058823529412,1], +[0.3843137254901961,0.5058823529411764,0.9647058823529412,1], +[0.3843137254901961,0.5058823529411764,0.9647058823529412,1], +[0.3843137254901961,0.5058823529411764,0.9647058823529412,1], +[0.38823529411764707,0.5058823529411764,0.9647058823529412,1], +[0.38823529411764707,0.5058823529411764,0.9647058823529412,1], +[0.38823529411764707,0.5058823529411764,0.9647058823529412,1], +[0.38823529411764707,0.5098039215686274,0.9647058823529412,1], +[0.38823529411764707,0.5098039215686274,0.9647058823529412,1], +[0.38823529411764707,0.5098039215686274,0.9647058823529412,1], +[0.39215686274509803,0.5098039215686274,0.9647058823529412,1], +[0.39215686274509803,0.5098039215686274,0.9647058823529412,1], +[0.39215686274509803,0.5098039215686274,0.9647058823529412,1], +[0.39215686274509803,0.5137254901960784,0.9647058823529412,1], +[0.39215686274509803,0.5137254901960784,0.9647058823529412,1], +[0.39215686274509803,0.5137254901960784,0.9647058823529412,1], +[0.396078431372549,0.5137254901960784,0.9647058823529412,1], +[0.396078431372549,0.5137254901960784,0.9647058823529412,1], +[0.396078431372549,0.5176470588235295,0.9647058823529412,1], +[0.396078431372549,0.5176470588235295,0.9647058823529412,1], +[0.396078431372549,0.5176470588235295,0.9647058823529412,1], +[0.396078431372549,0.5176470588235295,0.9647058823529412,1], +[0.396078431372549,0.5176470588235295,0.9647058823529412,1], +[0.4,0.5176470588235295,0.9647058823529412,1], +[0.4,0.5215686274509804,0.9647058823529412,1], +[0.4,0.5215686274509804,0.9647058823529412,1], +[0.4,0.5215686274509804,0.9686274509803922,1], +[0.4,0.5215686274509804,0.9686274509803922,1], +[0.4,0.5215686274509804,0.9686274509803922,1], +[0.403921568627451,0.5215686274509804,0.9686274509803922,1], +[0.403921568627451,0.5254901960784314,0.9686274509803922,1], +[0.403921568627451,0.5254901960784314,0.9686274509803922,1], +[0.403921568627451,0.5254901960784314,0.9686274509803922,1], +[0.403921568627451,0.5254901960784314,0.9686274509803922,1], +[0.403921568627451,0.5254901960784314,0.9686274509803922,1], +[0.40784313725490196,0.5254901960784314,0.9686274509803922,1], +[0.40784313725490196,0.5294117647058824,0.9686274509803922,1], +[0.40784313725490196,0.5294117647058824,0.9686274509803922,1], +[0.40784313725490196,0.5294117647058824,0.9686274509803922,1], +[0.40784313725490196,0.5294117647058824,0.9686274509803922,1], +[0.40784313725490196,0.5294117647058824,0.9686274509803922,1], +[0.4117647058823529,0.5294117647058824,0.9686274509803922,1], +[0.4117647058823529,0.5333333333333333,0.9686274509803922,1], +[0.4117647058823529,0.5333333333333333,0.9686274509803922,1], +[0.4117647058823529,0.5333333333333333,0.9686274509803922,1], +[0.4117647058823529,0.5333333333333333,0.9686274509803922,1], +[0.4117647058823529,0.5333333333333333,0.9686274509803922,1], +[0.4117647058823529,0.5333333333333333,0.9686274509803922,1], +[0.41568627450980394,0.5372549019607843,0.9686274509803922,1], +[0.41568627450980394,0.5372549019607843,0.9686274509803922,1], +[0.41568627450980394,0.5372549019607843,0.9686274509803922,1], +[0.41568627450980394,0.5372549019607843,0.9686274509803922,1], +[0.4196078431372549,0.5372549019607843,0.9686274509803922,1], +[0.4196078431372549,0.5411764705882353,0.9686274509803922,1], +[0.4196078431372549,0.5411764705882353,0.9686274509803922,1], +[0.4235294117647059,0.5411764705882353,0.9686274509803922,1], +[0.4235294117647059,0.5450980392156862,0.9647058823529412,1], +[0.42745098039215684,0.5450980392156862,0.9647058823529412,1], +[0.42745098039215684,0.5450980392156862,0.9647058823529412,1], +[0.42745098039215684,0.5450980392156862,0.9647058823529412,1], +[0.43137254901960786,0.5490196078431373,0.9647058823529412,1], +[0.43137254901960786,0.5490196078431373,0.9647058823529412,1], +[0.43137254901960786,0.5490196078431373,0.9647058823529412,1], +[0.43529411764705883,0.5529411764705883,0.9647058823529412,1], +[0.43529411764705883,0.5529411764705883,0.9647058823529412,1], +[0.4392156862745098,0.5529411764705883,0.9647058823529412,1], +[0.4392156862745098,0.5529411764705883,0.9647058823529412,1], +[0.4392156862745098,0.5568627450980392,0.9607843137254902,1], +[0.44313725490196076,0.5568627450980392,0.9607843137254902,1], +[0.44313725490196076,0.5568627450980392,0.9607843137254902,1], +[0.44313725490196076,0.5568627450980392,0.9607843137254902,1], +[0.4470588235294118,0.5607843137254902,0.9607843137254902,1], +[0.4470588235294118,0.5607843137254902,0.9607843137254902,1], +[0.45098039215686275,0.5607843137254902,0.9607843137254902,1], +[0.45098039215686275,0.5647058823529412,0.9607843137254902,1], +[0.45098039215686275,0.5647058823529412,0.9607843137254902,1], +[0.4549019607843137,0.5647058823529412,0.9607843137254902,1], +[0.4549019607843137,0.5647058823529412,0.9607843137254902,1], +[0.4588235294117647,0.5686274509803921,0.9607843137254902,1], +[0.4588235294117647,0.5686274509803921,0.9568627450980393,1], +[0.4588235294117647,0.5686274509803921,0.9568627450980393,1], +[0.4627450980392157,0.5725490196078431,0.9568627450980393,1], +[0.4627450980392157,0.5725490196078431,0.9568627450980393,1], +[0.4627450980392157,0.5725490196078431,0.9568627450980393,1], +[0.4666666666666667,0.5725490196078431,0.9568627450980393,1], +[0.4666666666666667,0.5764705882352941,0.9568627450980393,1], +[0.47058823529411764,0.5764705882352941,0.9568627450980393,1], +[0.47058823529411764,0.5764705882352941,0.9568627450980393,1], +[0.47058823529411764,0.5764705882352941,0.9568627450980393,1], +[0.4745098039215686,0.5803921568627451,0.9568627450980393,1], +[0.4745098039215686,0.5803921568627451,0.9529411764705882,1], +[0.4745098039215686,0.5803921568627451,0.9529411764705882,1], +[0.47843137254901963,0.5843137254901961,0.9529411764705882,1], +[0.47843137254901963,0.5843137254901961,0.9529411764705882,1], +[0.4823529411764706,0.5843137254901961,0.9529411764705882,1], +[0.4823529411764706,0.5843137254901961,0.9529411764705882,1], +[0.4823529411764706,0.5882352941176471,0.9529411764705882,1], +[0.48627450980392156,0.5882352941176471,0.9529411764705882,1], +[0.48627450980392156,0.5882352941176471,0.9529411764705882,1], +[0.49019607843137253,0.5882352941176471,0.9529411764705882,1], +[0.49019607843137253,0.592156862745098,0.9529411764705882,1], +[0.49019607843137253,0.592156862745098,0.9490196078431372,1], +[0.49411764705882355,0.592156862745098,0.9490196078431372,1], +[0.49411764705882355,0.596078431372549,0.9490196078431372,1], +[0.49411764705882355,0.596078431372549,0.9490196078431372,1], +[0.4980392156862745,0.596078431372549,0.9490196078431372,1], +[0.4980392156862745,0.596078431372549,0.9490196078431372,1], +[0.5019607843137255,0.6,0.9490196078431372,1], +[0.5019607843137255,0.6,0.9490196078431372,1], +[0.5019607843137255,0.6,0.9490196078431372,1], +[0.5058823529411764,0.6039215686274509,0.9490196078431372,1], +[0.5058823529411764,0.6039215686274509,0.9490196078431372,1], +[0.5058823529411764,0.6039215686274509,0.9450980392156862,1], +[0.5098039215686274,0.6039215686274509,0.9450980392156862,1], +[0.5098039215686274,0.6078431372549019,0.9450980392156862,1], +[0.5137254901960784,0.6078431372549019,0.9450980392156862,1], +[0.5137254901960784,0.6078431372549019,0.9450980392156862,1], +[0.5137254901960784,0.6078431372549019,0.9450980392156862,1], +[0.5176470588235295,0.611764705882353,0.9450980392156862,1], +[0.5176470588235295,0.611764705882353,0.9450980392156862,1], +[0.5215686274509804,0.611764705882353,0.9450980392156862,1], +[0.5215686274509804,0.615686274509804,0.9450980392156862,1], +[0.5215686274509804,0.615686274509804,0.9450980392156862,1], +[0.5254901960784314,0.615686274509804,0.9411764705882353,1], +[0.5254901960784314,0.615686274509804,0.9411764705882353,1], +[0.5254901960784314,0.6196078431372549,0.9411764705882353,1], +[0.5294117647058824,0.6196078431372549,0.9411764705882353,1], +[0.5294117647058824,0.6196078431372549,0.9411764705882353,1], +[0.5333333333333333,0.6235294117647059,0.9411764705882353,1], +[0.5333333333333333,0.6235294117647059,0.9411764705882353,1], +[0.5333333333333333,0.6235294117647059,0.9411764705882353,1], +[0.5372549019607843,0.6235294117647059,0.9411764705882353,1], +[0.5372549019607843,0.6274509803921569,0.9411764705882353,1], +[0.5372549019607843,0.6274509803921569,0.9411764705882353,1], +[0.5411764705882353,0.6274509803921569,0.9372549019607843,1], +[0.5411764705882353,0.6274509803921569,0.9372549019607843,1], +[0.5450980392156862,0.6313725490196078,0.9372549019607843,1], +[0.5450980392156862,0.6313725490196078,0.9372549019607843,1], +[0.5450980392156862,0.6313725490196078,0.9372549019607843,1], +[0.5490196078431373,0.6352941176470588,0.9372549019607843,1], +[0.5490196078431373,0.6352941176470588,0.9372549019607843,1], +[0.5529411764705883,0.6352941176470588,0.9372549019607843,1], +[0.5529411764705883,0.6352941176470588,0.9372549019607843,1], +[0.5529411764705883,0.6392156862745098,0.9372549019607843,1], +[0.5568627450980392,0.6392156862745098,0.9372549019607843,1], +[0.5568627450980392,0.6392156862745098,0.9333333333333333,1], +[0.5568627450980392,0.6431372549019608,0.9333333333333333,1], +[0.5607843137254902,0.6431372549019608,0.9333333333333333,1], +[0.5607843137254902,0.6431372549019608,0.9333333333333333,1], +[0.5647058823529412,0.6431372549019608,0.9333333333333333,1], +[0.5647058823529412,0.6470588235294118,0.9333333333333333,1], +[0.5647058823529412,0.6470588235294118,0.9333333333333333,1], +[0.5686274509803921,0.6470588235294118,0.9333333333333333,1], +[0.5686274509803921,0.6470588235294118,0.9333333333333333,1], +[0.5686274509803921,0.6509803921568628,0.9333333333333333,1], +[0.5725490196078431,0.6509803921568628,0.9333333333333333,1], +[0.5725490196078431,0.6509803921568628,0.9294117647058824,1], +[0.5764705882352941,0.6549019607843137,0.9294117647058824,1], +[0.5764705882352941,0.6549019607843137,0.9294117647058824,1], +[0.5764705882352941,0.6549019607843137,0.9294117647058824,1], +[0.5803921568627451,0.6549019607843137,0.9294117647058824,1], +[0.5803921568627451,0.6588235294117647,0.9294117647058824,1], +[0.5803921568627451,0.6588235294117647,0.9294117647058824,1], +[0.5843137254901961,0.6588235294117647,0.9294117647058824,1], +[0.5843137254901961,0.6588235294117647,0.9294117647058824,1], +[0.5882352941176471,0.6627450980392157,0.9294117647058824,1], +[0.5882352941176471,0.6627450980392157,0.9294117647058824,1], +[0.5882352941176471,0.6627450980392157,0.9254901960784314,1], +[0.592156862745098,0.6666666666666666,0.9254901960784314,1], +[0.592156862745098,0.6666666666666666,0.9254901960784314,1], +[0.596078431372549,0.6666666666666666,0.9254901960784314,1], +[0.596078431372549,0.6666666666666666,0.9254901960784314,1], +[0.596078431372549,0.6705882352941176,0.9254901960784314,1], +[0.6,0.6705882352941176,0.9254901960784314,1], +[0.6,0.6705882352941176,0.9254901960784314,1], +[0.6,0.6745098039215687,0.9254901960784314,1], +[0.6039215686274509,0.6745098039215687,0.9254901960784314,1], +[0.6039215686274509,0.6745098039215687,0.9254901960784314,1], +[0.6078431372549019,0.6745098039215687,0.9215686274509803,1], +[0.6078431372549019,0.6784313725490196,0.9215686274509803,1], +[0.6078431372549019,0.6784313725490196,0.9215686274509803,1], +[0.611764705882353,0.6784313725490196,0.9215686274509803,1], +[0.611764705882353,0.6784313725490196,0.9215686274509803,1], +[0.611764705882353,0.6823529411764706,0.9215686274509803,1], +[0.615686274509804,0.6823529411764706,0.9215686274509803,1], +[0.615686274509804,0.6823529411764706,0.9215686274509803,1], +[0.6196078431372549,0.6862745098039216,0.9215686274509803,1], +[0.6196078431372549,0.6862745098039216,0.9215686274509803,1], +[0.6196078431372549,0.6862745098039216,0.9215686274509803,1], +[0.6235294117647059,0.6862745098039216,0.9215686274509803,1], +[0.6235294117647059,0.6901960784313725,0.9176470588235294,1], +[0.6274509803921569,0.6901960784313725,0.9176470588235294,1], +[0.6274509803921569,0.6901960784313725,0.9176470588235294,1], +[0.6274509803921569,0.6941176470588235,0.9176470588235294,1], +[0.6313725490196078,0.6941176470588235,0.9176470588235294,1], +[0.6313725490196078,0.6941176470588235,0.9176470588235294,1], +[0.6313725490196078,0.6941176470588235,0.9176470588235294,1], +[0.6352941176470588,0.6980392156862745,0.9176470588235294,1], +[0.6352941176470588,0.6980392156862745,0.9176470588235294,1], +[0.6392156862745098,0.6980392156862745,0.9176470588235294,1], +[0.6392156862745098,0.6980392156862745,0.9176470588235294,1], +[0.6392156862745098,0.7019607843137254,0.9137254901960784,1], +[0.6431372549019608,0.7019607843137254,0.9137254901960784,1], +[0.6431372549019608,0.7019607843137254,0.9137254901960784,1], +[0.6431372549019608,0.7058823529411765,0.9137254901960784,1], +[0.6470588235294118,0.7058823529411765,0.9137254901960784,1], +[0.6470588235294118,0.7058823529411765,0.9137254901960784,1], +[0.6509803921568628,0.7058823529411765,0.9137254901960784,1], +[0.6509803921568628,0.7098039215686275,0.9137254901960784,1], +[0.6509803921568628,0.7098039215686275,0.9137254901960784,1], +[0.6549019607843137,0.7098039215686275,0.9137254901960784,1], +[0.6549019607843137,0.7137254901960784,0.9137254901960784,1], +[0.6588235294117647,0.7137254901960784,0.9098039215686274,1], +[0.6588235294117647,0.7137254901960784,0.9098039215686274,1], +[0.6588235294117647,0.7137254901960784,0.9098039215686274,1], +[0.6627450980392157,0.7176470588235294,0.9098039215686274,1], +[0.6627450980392157,0.7176470588235294,0.9098039215686274,1], +[0.6627450980392157,0.7176470588235294,0.9098039215686274,1], +[0.6666666666666666,0.7176470588235294,0.9098039215686274,1], +[0.6666666666666666,0.7215686274509804,0.9098039215686274,1], +[0.6705882352941176,0.7215686274509804,0.9098039215686274,1], +[0.6705882352941176,0.7215686274509804,0.9098039215686274,1], +[0.6705882352941176,0.7254901960784313,0.9098039215686274,1], +[0.6745098039215687,0.7254901960784313,0.9058823529411765,1], +[0.6745098039215687,0.7254901960784313,0.9058823529411765,1], +[0.6745098039215687,0.7254901960784313,0.9058823529411765,1], +[0.6784313725490196,0.7294117647058823,0.9058823529411765,1], +[0.6784313725490196,0.7294117647058823,0.9058823529411765,1], +[0.6823529411764706,0.7294117647058823,0.9058823529411765,1], +[0.6823529411764706,0.7294117647058823,0.9058823529411765,1], +[0.6823529411764706,0.7333333333333333,0.9058823529411765,1], +[0.6862745098039216,0.7333333333333333,0.9058823529411765,1], +[0.6862745098039216,0.7333333333333333,0.9058823529411765,1], +[0.6862745098039216,0.7372549019607844,0.9058823529411765,1], +[0.6901960784313725,0.7372549019607844,0.9019607843137255,1], +[0.6901960784313725,0.7372549019607844,0.9019607843137255,1], +[0.6941176470588235,0.7372549019607844,0.9019607843137255,1], +[0.6941176470588235,0.7411764705882353,0.9019607843137255,1], +[0.6941176470588235,0.7411764705882353,0.9019607843137255,1], +[0.6980392156862745,0.7411764705882353,0.9019607843137255,1], +[0.6980392156862745,0.7450980392156863,0.9019607843137255,1], +[0.7019607843137254,0.7450980392156863,0.9019607843137255,1], +[0.7019607843137254,0.7450980392156863,0.9019607843137255,1], +[0.7019607843137254,0.7450980392156863,0.9019607843137255,1], +[0.7058823529411765,0.7490196078431373,0.9019607843137255,1], +[0.7058823529411765,0.7490196078431373,0.8980392156862745,1], +[0.7058823529411765,0.7490196078431373,0.8980392156862745,1], +[0.7098039215686275,0.7490196078431373,0.8980392156862745,1], +[0.7098039215686275,0.7529411764705882,0.8980392156862745,1], +[0.7137254901960784,0.7529411764705882,0.8980392156862745,1], +[0.7137254901960784,0.7529411764705882,0.8980392156862745,1], +[0.7137254901960784,0.7568627450980392,0.8980392156862745,1], +[0.7176470588235294,0.7568627450980392,0.8980392156862745,1], +[0.7176470588235294,0.7568627450980392,0.8980392156862745,1], +[0.7176470588235294,0.7568627450980392,0.8980392156862745,1], +[0.7215686274509804,0.7607843137254902,0.8980392156862745,1], +[0.7215686274509804,0.7607843137254902,0.8941176470588236,1], +[0.7254901960784313,0.7607843137254902,0.8941176470588236,1], +[0.7254901960784313,0.7647058823529411,0.8941176470588236,1], +[0.7254901960784313,0.7647058823529411,0.8941176470588236,1], +[0.7294117647058823,0.7647058823529411,0.8941176470588236,1], +[0.7294117647058823,0.7647058823529411,0.8941176470588236,1], +[0.7333333333333333,0.7686274509803922,0.8941176470588236,1], +[0.7333333333333333,0.7686274509803922,0.8941176470588236,1], +[0.7333333333333333,0.7686274509803922,0.8941176470588236,1], +[0.7372549019607844,0.7686274509803922,0.8941176470588236,1], +[0.7372549019607844,0.7725490196078432,0.8941176470588236,1], +[0.7372549019607844,0.7725490196078432,0.8901960784313725,1], +[0.7411764705882353,0.7725490196078432,0.8901960784313725,1], +[0.7411764705882353,0.7764705882352941,0.8901960784313725,1], +[0.7450980392156863,0.7764705882352941,0.8901960784313725,1], +[0.7450980392156863,0.7764705882352941,0.8901960784313725,1], +[0.7450980392156863,0.7764705882352941,0.8901960784313725,1], +[0.7490196078431373,0.7803921568627451,0.8901960784313725,1], +[0.7490196078431373,0.7803921568627451,0.8901960784313725,1], +[0.7490196078431373,0.7803921568627451,0.8901960784313725,1], +[0.7529411764705882,0.7843137254901961,0.8901960784313725,1], +[0.7529411764705882,0.7843137254901961,0.8901960784313725,1], +[0.7568627450980392,0.7843137254901961,0.8862745098039215,1], +[0.7568627450980392,0.7843137254901961,0.8862745098039215,1], +[0.7568627450980392,0.788235294117647,0.8862745098039215,1], +[0.7607843137254902,0.788235294117647,0.8862745098039215,1], +[0.7607843137254902,0.788235294117647,0.8862745098039215,1], +[0.7647058823529411,0.788235294117647,0.8862745098039215,1], +[0.7647058823529411,0.792156862745098,0.8862745098039215,1], +[0.7647058823529411,0.792156862745098,0.8862745098039215,1], +[0.7686274509803922,0.792156862745098,0.8862745098039215,1], +[0.7686274509803922,0.796078431372549,0.8862745098039215,1], +[0.7686274509803922,0.796078431372549,0.8862745098039215,1], +[0.7725490196078432,0.796078431372549,0.8823529411764706,1], +[0.7725490196078432,0.796078431372549,0.8823529411764706,1], +[0.7764705882352941,0.8,0.8823529411764706,1], +[0.7764705882352941,0.8,0.8823529411764706,1], +[0.7764705882352941,0.8,0.8823529411764706,1], +[0.7803921568627451,0.8,0.8823529411764706,1], +[0.7803921568627451,0.803921568627451,0.8823529411764706,1], +[0.7803921568627451,0.803921568627451,0.8823529411764706,1], +[0.7843137254901961,0.803921568627451,0.8823529411764706,1], +[0.7843137254901961,0.807843137254902,0.8823529411764706,1], +[0.788235294117647,0.807843137254902,0.8823529411764706,1], +[0.788235294117647,0.807843137254902,0.8823529411764706,1], +[0.788235294117647,0.807843137254902,0.8784313725490196,1], +[0.792156862745098,0.8117647058823529,0.8784313725490196,1], +[0.792156862745098,0.8117647058823529,0.8784313725490196,1], +[0.796078431372549,0.8117647058823529,0.8784313725490196,1], +[0.796078431372549,0.8156862745098039,0.8784313725490196,1], +[0.796078431372549,0.8156862745098039,0.8784313725490196,1], +[0.8,0.8156862745098039,0.8784313725490196,1], +[0.8,0.8156862745098039,0.8784313725490196,1], +[0.8,0.8196078431372549,0.8784313725490196,1], +[0.803921568627451,0.8196078431372549,0.8784313725490196,1], +[0.803921568627451,0.8196078431372549,0.8784313725490196,1], +[0.807843137254902,0.8196078431372549,0.8745098039215686,1], +[0.807843137254902,0.8235294117647058,0.8745098039215686,1], +[0.807843137254902,0.8235294117647058,0.8745098039215686,1], +[0.8117647058823529,0.8235294117647058,0.8745098039215686,1], +[0.8117647058823529,0.8274509803921568,0.8745098039215686,1], +[0.8117647058823529,0.8274509803921568,0.8745098039215686,1], +[0.8156862745098039,0.8274509803921568,0.8745098039215686,1], +[0.8156862745098039,0.8274509803921568,0.8745098039215686,1], +[0.8196078431372549,0.8313725490196079,0.8745098039215686,1], +[0.8196078431372549,0.8313725490196079,0.8745098039215686,1], +[0.8196078431372549,0.8313725490196079,0.8745098039215686,1], +[0.8235294117647058,0.8352941176470589,0.8705882352941177,1], +[0.8235294117647058,0.8352941176470589,0.8705882352941177,1], +[0.8235294117647058,0.8352941176470589,0.8705882352941177,1], +[0.8274509803921568,0.8352941176470589,0.8705882352941177,1], +[0.8274509803921568,0.8392156862745098,0.8705882352941177,1], +[0.8313725490196079,0.8392156862745098,0.8705882352941177,1], +[0.8313725490196079,0.8392156862745098,0.8705882352941177,1], +[0.8313725490196079,0.8392156862745098,0.8705882352941177,1], +[0.8352941176470589,0.8431372549019608,0.8705882352941177,1], +[0.8352941176470589,0.8431372549019608,0.8705882352941177,1], +[0.8392156862745098,0.8431372549019608,0.8705882352941177,1], +[0.8392156862745098,0.8470588235294118,0.8666666666666667,1], +[0.8392156862745098,0.8470588235294118,0.8666666666666667,1], +[0.8431372549019608,0.8470588235294118,0.8666666666666667,1], +[0.8431372549019608,0.8470588235294118,0.8666666666666667,1], +[0.8431372549019608,0.8509803921568627,0.8666666666666667,1], +[0.8470588235294118,0.8509803921568627,0.8666666666666667,1], +[0.8470588235294118,0.8509803921568627,0.8666666666666667,1], +[0.8509803921568627,0.8549019607843137,0.8666666666666667,1], +[0.8509803921568627,0.8549019607843137,0.8666666666666667,1], +[0.8509803921568627,0.8549019607843137,0.8666666666666667,1], +[0.8549019607843137,0.8549019607843137,0.8666666666666667,1], +[0.8549019607843137,0.8588235294117647,0.8627450980392157,1], +[0.8549019607843137,0.8588235294117647,0.8627450980392157,1], +[0.8588235294117647,0.8588235294117647,0.8627450980392157,1], +[0.8588235294117647,0.8588235294117647,0.8627450980392157,1], +[0.8627450980392157,0.8627450980392157,0.8627450980392157,1], +[0.8627450980392157,0.8627450980392157,0.8627450980392157,1]],"borderColors":[[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1], +[0.26666666666666666,0.26666666666666666,0.26666666666666666,1]], +"opacity":1, +"marker":null,"size":3,"borderSizes":0, +"positions":[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63,64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,128,129,129,130,130,131,131,132,132,133,133,134,134,135,135,136,136,137,137,138,138,139,139,140,140,141,141,142,142,143,143,144,144,145,145,146,146,147,147,148,148,149,149,150,150,151,151,152,152,153,153,154,154,155,155,156,156,157,157,158,158,159,159,160,160,161,161,162,162,163,163,164,164,165,165,166,166,167,167,168,168,169,169,170,170,171,171,172,172,173,173,174,174,175,175,176,176,177,177,178,178,179,179,180,180,181,181,182,182,183,183,184,184,185,185,186,186,187,187,188,188,189,189,190,190,191,191,192,192,193,193,194,194,195,195,196,196,197,197,198,198,199,199,200,200,201,201,202,202,203,203,204,204,205,205,206,206,207,207,208,208,209,209,210,210,211,211,212,212,213,213,214,214,215,215,216,216,217,217,218,218,219,219,220,220,221,221,222,222,223,223,224,224,225,225,226,226,227,227,228,228,229,229,230,230,231,231,232,232,233,233,234,234,235,235,236,236,237,237,238,238,239,239,240,240,241,241,242,242,243,243,244,244,245,245,246,246,247,247,248,248,249,249,250,250,251,251,252,252,253,253,254,254,255,255,256,256,257,257,258,258,259,259,260,260,261,261,262,262,263,263,264,264,265,265,266,266,267,267,268,268,269,269,270,270,271,271,272,272,273,273,274,274,275,275,276,276,277,277,278,278,279,279,280,280,281,281,282,282,283,283,284,284,285,285,286,286,287,287,288,288,289,289,290,290,291,291,292,292,293,293,294,294,295,295,296,296,297,297,298,298,299,299,300,300,301,301,302,302,303,303,304,304,305,305,306,306,307,307,308,308,309,309,310,310,311,311,312,312,313,313,314,314,315,315,316,316,317,317,318,318,319,319,320,320,321,321,322,322,323,323,324,324,325,325,326,326,327,327,328,328,329,329,330,330,331,331,332,332,333,333,334,334,335,335,336,336,337,337,338,338,339,339,340,340,341,341,342,342,343,343,344,344,345,345,346,346,347,347,348,348,349,349,350,350,351,351,352,352,353,353,354,354,355,355,356,356,357,357,358,358,359,359,360,360,361,361,362,362,363,363,364,364,365,365,366,366,367,367,368,368,369,369,370,370,371,371,372,372,373,373,374,374,375,375,376,376,377,377,378,378,379,379,380,380,381,381,382,382,383,383,384,384,385,385,386,386,387,387,388,388,389,389,390,390,391,391,392,392,393,393,394,394,395,395,396,396,397,397,398,398,399,399,400,400,401,401,402,402,403,403,404,404,405,405,406,406,407,407,408,408,409,409,410,410,411,411,412,412,413,413,414,414,415,415,416,416,417,417,418,418,419,419,420,420,421,421,422,422,423,423,424,424,425,425,426,426,427,427,428,428,429,429,430,430,431,431,432,432,433,433,434,434,435,435,436,436,437,437,438,438,439,439,440,440,441,441,442,442,443,443,444,444,445,445,446,446,447,447,448,448,449,449,450,450,451,451,452,452,453,453,454,454,455,455,456,456,457,457,458,458,459,459,460,460,461,461,462,462,463,463,464,464,465,465,466,466,467,467,468,468,469,469,470,470,471,471,472,472,473,473,474,474,475,475,476,476,477,477,478,478,479,479,480,480,481,481,482,482,483,483,484,484,485,485,486,486,487,487,488,488,489,489,490,490,491,491,492,492,493,493,494,494,495,495,496,496,497,497,498,498,499,499,500,500,501,501,502,502,503,503,504,504,505,505,506,506,507,507,508,508,509,509,510,510,511,511,512,512,513,513,514,514,515,515,516,516,517,517,518,518,519,519,520,520,521,521,522,522,523,523,524,524,525,525,526,526,527,527,528,528,529,529,530,530,531,531,532,532,533,533,534,534,535,535,536,536,537,537,538,538,539,539,540,540,541,541,542,542,543,543,544,544,545,545,546,546,547,547,548,548,549,549,550,550,551,551,552,552,553,553,554,554,555,555,556,556,557,557,558,558,559,559,560,560,561,561,562,562,563,563,564,564,565,565,566,566,567,567,568,568,569,569,570,570,571,571,572,572,573,573,574,574,575,575,576,576,577,577,578,578,579,579,580,580,581,581,582,582,583,583,584,584,585,585,586,586,587,587,588,588,589,589,590,590,591,591,592,592,593,593,594,594,595,595,596,596,597,597,598,598,599,599,600,600,601,601,602,602,603,603,604,604,605,605,606,606,607,607,608,608,609,609,610,610,611,611,612,612,613,613,614,614,615,615,616,616,617,617,618,618,619,619,620,620,621,621,622,622,623,623,624,624,625,625,626,626,627,627,628,628,629,629,630,630,631,631,632,632,633,633,634,634,635,635,636,636,637,637,638,638,639,639,640,640,641,641,642,642,643,643,644,644,645,645,646,646,647,647,648,648,649,649,650,650,651,651,652,652,653,653,654,654,655,655,656,656,657,657,658,658,659,659,660,660,661,661,662,662,663,663,664,664,665,665,666,666,667,667,668,668,669,669,670,670,671,671,672,672,673,673,674,674,675,675,676,676,677,677,678,678,679,679,680,680,681,681,682,682,683,683,684,684,685,685,686,686,687,687,688,688,689,689,690,690,691,691,692,692,693,693,694,694,695,695,696,696,697,697,698,698,699,699,700,700,701,701,702,702,703,703,704,704,705,705,706,706,707,707,708,708,709,709,710,710,711,711,712,712,713,713,714,714,715,715,716,716,717,717,718,718,719,719,720,720,721,721,722,722,723,723,724,724,725,725,726,726,727,727,728,728,729,729,730,730,731,731,732,732,733,733,734,734,735,735,736,736,737,737,738,738,739,739,740,740,741,741,742,742,743,743,744,744,745,745,746,746,747,747,748,748,749,749,750,750,751,751,752,752,753,753,754,754,755,755,756,756,757,757,758,758,759,759,760,760,761,761,762,762,763,763,764,764,765,765,766,766,767,767,768,768,769,769,770,770,771,771,772,772,773,773,774,774,775,775,776,776,777,777,778,778,779,779,780,780,781,781,782,782,783,783,784,784,785,785,786,786,787,787,788,788,789,789,790,790,791,791,792,792,793,793,794,794,795,795,796,796,797,797,798,798,799,799,800,800,801,801,802,802,803,803,804,804,805,805,806,806,807,807,808,808,809,809,810,810,811,811,812,812,813,813,814,814,815,815,816,816,817,817,818,818,819,819,820,820,821,821,822,822,823,823,824,824,825,825,826,826,827,827,828,828,829,829,830,830,831,831,832,832,833,833,834,834,835,835,836,836,837,837,838,838,839,839,840,840,841,841,842,842,843,843,844,844,845,845,846,846,847,847,848,848,849,849,850,850,851,851,852,852,853,853,854,854,855,855,856,856,857,857,858,858,859,859,860,860,861,861,862,862,863,863,864,864,865,865,866,866,867,867,868,868,869,869,870,870,871,871,872,872,873,873,874,874,875,875,876,876,877,877,878,878,879,879,880,880,881,881,882,882,883,883,884,884,885,885,886,886,887,887,888,888,889,889,890,890,891,891,892,892,893,893,894,894,895,895,896,896,897,897,898,898,899,899,900,900,901,901,902,902,903,903,904,904,905,905,906,906,907,907,908,908,909,909,910,910,911,911,912,912,913,913,914,914,915,915,916,916,917,917,918,918,919,919,920,920,921,921,922,922,923,923,924,924,925,925,926,926,927,927,928,928,929,929,930,930,931,931,932,932,933,933,934,934,935,935,936,936,937,937,938,938,939,939,940,940,941,941,942,942,943,943,944,944,945,945,946,946,947,947,948,948,949,949,950,950,951,951,952,952,953,953,954,954,955,955,956,956,957,957,958,958,959,959,960,960,961,961,962,962,963,963,964,964,965,965,966,966,967,967,968,968,969,969,970,970,971,971,972,972,973,973,974,974,975,975,976,976,977,977,978,978,979,979,980,980,981,981,982,982,983,983,984,984,985,985,986,986,987,987,988,988,989,989,990,990,991,991,992,992,993,993,994,994,995,995,996,996,997,997,998,998,999,999]},{"color":{"0":255,"1":127,"2":14,"3":255},"borderColor":{"0":68,"1":68,"2":68,"3":255},"opacity":1,"marker":null,"size":15,"borderSizes":0,"positions":[100,200]} + +] diff --git a/test/img/1e6.png b/test/img/1e6.png new file mode 100644 index 0000000..f27e804 Binary files /dev/null and b/test/img/1e6.png differ diff --git a/test/img/3232.png b/test/img/3232.png new file mode 100644 index 0000000..42d9ed8 Binary files /dev/null and b/test/img/3232.png differ diff --git a/test/img/mixed-markers-colors.png b/test/img/mixed-markers-colors.png new file mode 100644 index 0000000..3d9ffca Binary files /dev/null and b/test/img/mixed-markers-colors.png differ diff --git a/test/index.js b/test/index.js new file mode 100644 index 0000000..2f3f683 --- /dev/null +++ b/test/index.js @@ -0,0 +1,128 @@ +'use strict' + +const createScatter = require('../index') +const t = require('tape') +const load = require('image-pixels') +const eq = require('image-equal') +const out = require('image-output') +const seed = require('seed-random') +const regl = require('regl')({ + gl: require('gl')(200, 200), + attributes: {preserveDrawingBuffer: true}, + extensions: ['OES_element_index_uint'] +}) + + +t('colors/shapes', async t => { + //create square test sdf image + let w = 200, h = 200 + let dist = new Array(w*h) + for (let i = 0; i < w; i++) { + for (let j = 0; j < h; j++) { + if (i > j) { + if (i < h - j) { + dist[j*w + i] = j/(h/2) + } + else { + dist[j*w + i] = 1 - (i-w/2)/(w/2) + } + } + else { + if (i < h - j) { + dist[j*w + i] = i/(w/2) + } + else { + dist[j*w + i] = 1 - (j-h/2)/(h/2) + } + } + } + } + + var scatter = createScatter(regl) + scatter.update({ + positions: [0,0, 1,1, 2,2, 3,3, 4,4, 5,5, 6,6, 7,7], + size: 12, + color: ['red', 'green', 'blue', 'black', 'red', 'black', 'red', 'gray'], + marker: [null, null, null, null, dist, dist, dist, dist], + range: [-2,-2,10,10], + snap: false + }) + scatter.draw() + + t.ok(eq(await load('./test/img/mixed-markers-colors.png'), scatter.gl, .05)) + + regl.clear({color: [0,0,0,0]}) + + t.end() +}) + +t('1e6 points', async t => { + var random = seed('1e6') + var N = 1e6 + var positions = new Float64Array(2 * N) + + for(var i=0; i<2*N; ++i) { + positions[i] = random() + } + + var scatter = createScatter(regl) + scatter.update({ + positions: positions, + size: 4, + color: [0,0,0,.1], + range: [-.1,-.1,1.1,1.1] + }) + scatter.draw() + + t.ok(eq(scatter.gl, await load('./test/img/1e6.png'), .1)) + regl.clear({color: [0,0,0,0]}) + + t.end() +}) + +t('Color palette interference (#3232)', async t => { + var passes = require('./3232.json') + passes[1].color.length = 4 + passes[1].color = new Uint8Array(Array.from(passes[1].color)) + passes[1].borderColor.length = 4 + passes[1].borderColor = new Uint8Array(Array.from(passes[1].borderColor)) + + var scatter = createScatter(regl) + + passes[1].range = [0,0,300,300] + + scatter.update(passes) + scatter.render() + t.ok(eq(scatter, await load('./test/img/3232.png'), {threshold: .1})) + + regl.clear({color: [0,0,0,0]}) + t.end() +}) + +t('unsnapped elements render') + +t('snapped elements render') + +t('multimarker multipass render') + +t('too many colors render') + +t('palette colors render') + +t('single color render') + +t('precision') + +t('marker size') + +t('circle size') + +t('multipass rendering') + +t('single point') + +t('no-boundaries') + +t('cluster with external buffer') + +