├── .gitignore ├── LICENSE ├── README.md ├── color.js ├── debug.js ├── docco-modified.css ├── fileops.js ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff ├── img ├── bg-track.png ├── handle.png ├── logo.png ├── splatter-teaser.png └── usa-map.png ├── index.html ├── libs ├── bootstrap.css ├── bootstrap.js ├── bootstrap.min.css ├── bootstrap.min.js ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf ├── glyphicons-halflings-regular.woff ├── hashable.js ├── jq-fileupload-include │ ├── UploadHandler.php │ ├── files │ │ ├── .htaccess │ │ ├── venn1-150k.txt │ │ ├── venn1-500.txt │ │ ├── venn2-500.txt │ │ ├── venn2.txt │ │ ├── venn3-150k.txt │ │ ├── venn3-500.txt │ │ ├── venn4-500.txt │ │ ├── venn4.txt │ │ ├── venn5-250k.txt │ │ └── venn5-25k.txt │ └── index.php ├── jquery-ui-1.10.4.custom.css ├── jquery-ui-1.10.4.custom.min.js ├── jquery.fileupload.css ├── jquery.fileupload.js ├── jquery.iframe-transport.js ├── jquery.mousewheel.js ├── kdTree-min.js ├── lightgl-min.js ├── lightgl.js └── webgl-utils.js ├── shaders ├── background.fs ├── background.vs ├── blend.fs ├── blur.fs ├── blur.vs ├── debugmax.fs ├── debugoutliers.fs ├── densitytest.fs ├── jfa.fs ├── jfadebug.fs ├── jfainit.fs ├── maxtexture.fs ├── outliercombine.fs ├── outliers.fs ├── outliers.vs ├── plot.fs ├── plot.vs ├── shade.fs ├── testblur.fs ├── testblur.vs ├── testblur128.fs ├── testblur16.fs ├── testblur256.fs ├── testblur32.fs ├── testblur64.fs ├── testfloat.fs ├── testlgl.fs ├── testlgl.vs ├── testmax.fs ├── testpt.fs └── testpt.vs ├── splatterplot.js └── style.css /.gitignore: -------------------------------------------------------------------------------- 1 | # hg-specific files 2 | .hg/ 3 | .hgignore 4 | 5 | # project-specific files 6 | splatter-perf/ 7 | *~ 8 | 9 | # OS generated files # 10 | ###################### 11 | .DS_Store 12 | .DS_Store? 13 | ._* 14 | .Spotlight-V100 15 | .Trashes 16 | ehthumbs.db 17 | Thumbs.db 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 University of Wisconsin---Madison Graphics Lab 4 | (http://graphics.cs.wisc.edu) 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SplatterJs 2 | 3 | This project is a JavaScript implementation of the Splatterplot interface described by [Adrian Mayorga](http://cs.wisc.edu/~adrm) and [Michael Gleicher](http://cs.wisc.edu/~gleicher) in their TVCG submission entitled [**Splatterplots: Overcoming Overdraw in Scatter Plots**](http://graphics.cs.wisc.edu/Papers/2013/MG13/). A short demonstration of the architecture of this project was presented at the [Data Systems for Interactive Analysis](http://interactive-analysis.org) workshop at IEEE VIS 2015, and details can be found in our workshop paper titled [Using WebGL as an Interactive Visualization Medium: Our Experience Developing SplatterJs](http://graphics.cs.wisc.edu/Papers/2015/SG15/). 4 | 5 | ![SplatterJs rendering a 5-set gaussian dataset](https://raw.githubusercontent.com/uwgraphics/splatterjs/master/img/splatter-teaser.png) 6 | 7 | The JavaScript implementation utilizes WebGL to bring Splatterplots to the web browser. When deployed on a server, the interface allows for analysts to upload their data files, select the dimensions to display on the splatterplot, and plot the data. The analyst then has the ability to pan and zoom around the data-space to find clusters and correlations between different data series. 8 | 9 | ### Demo 10 | 11 | An assorted collection of example datasets loaded into SplatterJs. Please be aware that the URI may change in the future as SplatterJs finds a more permanent home. You are also welcome to upload your own text-based, comma-separated value files to the visualization; the *Load File* dialog allows for picking the relevant dimensions and a label column to group series together. 12 | 13 | * [Two Gaussians](http://graphics.cs.wisc.edu/Projects/SplatterJs/?#venn2.txt/2/0/1/2) -- The same dataset as is shown in the teaser figure above 14 | * [Five Gaussians](http://graphics.cs.wisc.edu/Projects/SplatterJs/?#venn5-250k.txt/2/0/1/2) -- Showing five Gaussian distributions comprising 250,000 2D points (50k per group) 15 | * [FARS 2012 data](http://graphics.cs.wisc.edu/Projects/SplatterJs/?#fars-2012.csv/2/1/0/-1) -- Showing the FARS ([Fatality Analysis Reporting System](http://www.nhtsa.gov/FARS)) data for the 2011 year. By clicking on the 'hide grid' and 'show background' checkboxes, a map of the United States is displayed 16 | 17 | ### Documentation 18 | 19 | The main `splatterplot.js` file is loosely documented with Markdown syntax. Please use [docco](http://jashkenas.github.io/docco/) to generate a side-by-side of code with comments. The following command works well: `docco -c docco-modified.css splatterplot.js`. 20 | 21 | ### Limitations 22 | 23 | Since SplatterJs depends on using WebGL, only browsers that support WebGL are supported. To get the necessary precision, the `OES_texture_float` WebGL extension is required. RenderingPipeline.com has a good script to determine [which WebGL extensions your browser and computer support](http://renderingpipeline.com/webgl-extension-viewer/). 24 | 25 | In its current implementation, SplatterJs manages 9 textures per data series, with nearly 20 texture writes per data series (density map, blurring, GPGPU-based max value, threshold distance calculation [jump flooding], drawing of outliers, shading), as well as the final compositing operation. This entire rendering process is repeated on pan and zoom. It is therefore suggested that the client computer have a modern GPU. A nVidia GeForce 250 or equivalent is the minimum suggested GPU (achieves 3-4 fps); GPUs on the order of an nVidia 770 achieve nearly interactive rates. 26 | 27 | ### Libraries used 28 | 29 | SplatterJs uses a multitude of libraries to help it go. Below is a list of the libraries used, their licenses, and how they are used in the system. 30 | 31 | * [**Bootstrap**](http://getbootstrap.com) (MIT) -- Used to style and organize UI components on the page, including modal windows. 32 | * [**jQuery**](http://jquery.com) (MIT) -- Used to support Bootstrap and provide event listeners for mouse 33 | * [**jQuery UI**](http://jqueryui.com/) (MIT) -- Supports the operation of sliders 34 | * [**jquery-mousewheel**](https://github.com/brandonaaron/jquery-mousewheel) (MIT) -- Adds normalized support for mousewheel events (zooming on canvas) 35 | * [**jQuery-File-Upload**](https://github.com/blueimp/jQuery-File-Upload) (MIT) -- Adds ajax-y support for uploading data files 36 | * [**Hashable.js**](https://github.com/shawnbot/hashable) (none?) -- Adds support for parsing/updating the URL hash to save current viewing state 37 | * [**lightgl.js**](https://github.com/evanw/lightgl.js/) (MIT?) -- Provides a nice abstraction layer for doing low-level WebGL commands (e.g. drawing to texture, managing shaders, binding textures) 38 | * [**kd-tree-javascript**](https://github.com/ubilabs/kd-tree-javascript) (MIT) -- Provides an implementation of k-d trees to answer the question "what points are here?" 39 | 40 | ### Contact 41 | 42 | Please contact [Alper Sarikaya](http://cs.wisc.edu/~sarikaya) with any comments or questions, or feel free to open an issue or pull request. 43 | -------------------------------------------------------------------------------- /color.js: -------------------------------------------------------------------------------- 1 | function dot(left, right) { 2 | return left[0] * right[0] + left[1] * right[1] + left[2] * right[2]; 3 | } 4 | 5 | function clamp(vec3, lo, hi) { 6 | var ret = vec3.slice(); 7 | for (var i = 0; i < 3; i++) 8 | ret[i] = ret[i] < lo ? lo : ret[i] > hi ? hi : ret[i]; 9 | return ret; 10 | } 11 | 12 | function f(n, eps, k) { 13 | if (n > eps) { 14 | return Math.pow(n, 1.0 / 3.0); 15 | } else { 16 | return (k * n + 16.0) / 116.0; 17 | } 18 | } 19 | 20 | function xyzToRgb(xyz, clamp) { 21 | var m0 = [ 3.2404542, -1.5371385, -0.4985314]; 22 | var m1 = [-0.9692660, 1.8760108, 0.0415560]; 23 | var m2 = [ 0.0556434, -0.2040259, 1.0572252]; 24 | 25 | var rgb = [dot(xyz, m0), dot(xyz, m1), dot(xyz, m2)]; 26 | 27 | if (clamp) 28 | return clamp(rgb, 0.0, 1.0); 29 | else 30 | return rgb; 31 | } 32 | 33 | function labToXyz(lab) { 34 | var Xr = 0.95047; 35 | var Yr = 1.0; 36 | var Zr = 1.08883; 37 | 38 | var eps = 216.0 / 24389.0; 39 | var k = 24389.0 / 27.0; 40 | 41 | var l = lab[0]; 42 | var a = lab[1]; 43 | var b = lab[2]; 44 | 45 | var fy = (l + 16.0) / 116.0; 46 | var fx = a / 500.0 + fy; 47 | var fz = -b / 200.0 + fy; 48 | 49 | var xr = (fx * fx * fx > eps) ? fx * fx * fx : (116.0 * fx - 16.0) / k; 50 | var lt = (l + 16.0) / 116.0; 51 | var yr = (l > k * eps) ? lt * lt * lt : l / k; 52 | var zr = (fz * fz * fz > eps) ? fz * fz * fz : (116.0 * fz - 16.0) / k; 53 | 54 | var x = xr * Xr; 55 | var y = yr * Yr; 56 | var z = zr * Zr; 57 | 58 | return [x, y, z]; 59 | } 60 | 61 | function lchToLab(lch) { 62 | return [lch[0], lch[1] * Math.cos(lch[2]), lch[1] * Math.sin(lch[2])]; 63 | } 64 | 65 | function labToRgb(lab) { 66 | return labToRgb(lab, true); 67 | } 68 | 69 | function labToRgb(lab, clamp) { 70 | return xyzToRgb(labToXyz(lab), clamp); 71 | } 72 | 73 | function lchToRgb(lch) { 74 | return xyzToRgb(labToXyz(lchToLab(lch)), true); 75 | } 76 | 77 | function getColors(lightness, chroma, numGroups) { 78 | var pi = 3.14159265358979323846264; 79 | var hueStep = 2.0 * pi / numGroups; 80 | var ret = []; 81 | for (var i = 0; i < numGroups; i++) { 82 | ret.push(lchToRgb([lightness, chroma, hueStep * i])); 83 | } 84 | 85 | return ret; 86 | } 87 | 88 | function lchInRange(lch) { 89 | var rgb = labToRgb(lchToLab(lch), false); 90 | return rgb[0] >= 0.0 && rgb[0] <= 1.0 && 91 | rgb[1] >= 0.0 && rgb[1] <= 1.0 && 92 | rgb[2] >= 0.0 && rgb[1] <= 1.0; 93 | } 94 | 95 | function findMaxC(L, h) { 96 | var lch1 = [L, 0, h]; 97 | var lch2 = [L, 150, h]; 98 | 99 | var inv = 0, outv = 100, mid = 0; 100 | for (var i = 0; i < 10; i++) { 101 | mid = (inv + outv) / 2; 102 | tmp = [L, mid, h]; 103 | if (lchInRange(tmp)) 104 | inv = mid; 105 | else 106 | outv = mid; 107 | } 108 | 109 | return inv; 110 | } 111 | 112 | function getColorsNew(L, numGroups) { 113 | var pi = 3.14159265358979323846264; 114 | 115 | var angle = 0.5; 116 | var angleOffset = pi; 117 | var spacing = (angleOffset * 2) / numGroups; 118 | 119 | var ret = []; 120 | 121 | for (var i = 0; i < numGroups; i++) { 122 | var h = spacing * i + angle - angleOffset; 123 | var c = findMaxC(L, h); 124 | 125 | var a = c * Math.cos(h); 126 | var b = c * Math.sin(h); 127 | ret.push(labToRgb([L, a, b])); 128 | } 129 | 130 | return ret; 131 | } 132 | -------------------------------------------------------------------------------- /debug.js: -------------------------------------------------------------------------------- 1 | // ## DEBUG.JS 2 | // 3 | // Holds utility methods necessary to help in debugging textures or other aspects 4 | // of WebGL. 5 | 6 | // ### debugTexture(GL.texture, x, y, w, h, opt_nodebug); 7 | // 8 | // Given a texture, start texel position, and a width and height, print out the values 9 | // stored in the texture. Does not work for float textures 10 | var debugTexture = function(tex, x, y, w, h, nodebug) { 11 | // Be a little lenient with texture, allow passing in GL.Texture (lightgl). 12 | if (Object.prototype.toString.call(tex).indexOf("WebGLTexture") == -1) 13 | tex = tex.id; 14 | 15 | w = w || 2; 16 | h = h || 2; 17 | ds.fbo = ds.fbo || gl.createFramebuffer(); 18 | gl.bindFramebuffer(gl.FRAMEBUFFER, ds.fbo); 19 | gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0); 20 | 21 | var pixels = new Uint8Array(w * h * 4); 22 | if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE) { 23 | gl.readPixels(x, y, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels); 24 | if (!nodebug) { 25 | console.log("Reading from texture coords (" + x + ", " + y + ") to (" + (x+w) + ", " + (y+h) + "):"); 26 | console.log(pixels); 27 | } 28 | } 29 | 30 | gl.bindFramebuffer(gl.FRAMEBUFFER, null); 31 | return pixels; 32 | }; 33 | 34 | // ### debugFloatTexture(GL.texture, x, y, w, h); 35 | // 36 | // Debug function for reading values from faux-float textures (e.g. storing 0xff 37 | // in each unsigned byte channel). 38 | var debugFloatTexture = function(tex, x, y, w, h) { 39 | // default width and height to two pixels for easy printing 40 | w = w || 2; 41 | h = h || 2; 42 | var pixels = debugTexture(tex, x, y, w, h); 43 | 44 | // parse each component 45 | var output = []; 46 | for (var i = 0; i < pixels.length; i = i + 4) { 47 | output.push(threeChanToFloat(pixels[i]/255, pixels[i+1]/255, pixels[i+2]/255)); 48 | output.push(pixels[i+3]); 49 | } 50 | 51 | console.log("Reading floats from texture coords (" + x + ", " + y + ") to (" + (x+w) + ", " + (y+h) + "):"); 52 | console.log(output); 53 | return output; 54 | }; 55 | 56 | // ### debug2FloatTexture(GL.Texture, x, y, w, h); 57 | // 58 | // Debug function for reading two float values from faux-float textures (e.g. storing 59 | // 0xffff in each pair of unsigned byte channels). 60 | var debug2FloatTexture = function(tex, x, y, w, h) { 61 | // default width and height to two pixels for easy printing 62 | w = w || 2; 63 | h = h || 2; 64 | var pixels = debugTexture(tex, x, y, w, h); 65 | 66 | // parse each component 67 | var output = []; 68 | for (var i = 0; i < pixels.length; i = i + 2) { 69 | output.push(twoChanToFloat(pixels[i]/255, pixels[i+1]/255)); 70 | } 71 | 72 | console.log("Reading floats from texture coords (" + x + ", " + y + ") to (" + (x+w) + ", " + (y+h) + "):"); 73 | console.log(output); 74 | return output; 75 | }; 76 | 77 | var debugMax = function() { 78 | if (!shaders['maxdebug']) { 79 | if (!timer) 80 | timer = setTimeout("gl.ondraw()", 300); 81 | return; 82 | } 83 | 84 | var grp = ds.groups[0]; 85 | grp.textures[maxTexName].bind(0); 86 | shaders['maxdebug'].uniforms({ 87 | maxTex: 0, 88 | delta: [1.0 / gl.canvas.width, 1.0 / gl.canvas.height], 89 | maxVal: 5 90 | }).draw(plane); 91 | grp.textures[maxTexName].unbind(0); 92 | }; 93 | 94 | // ### debugJfa(); 95 | // 96 | // 97 | var debugJfa = function() { 98 | if (!shaders['jfadebug']) { 99 | if (!timer) 100 | timer = setTimeout("gl.ondraw()", 300); 101 | return; 102 | } 103 | 104 | gl.disable(gl.DEPTH_TEST); 105 | gl.clearColor(0.0,0.0,0.0,1.0); 106 | 107 | // only do the first group 108 | grp = ds.groups[0]; 109 | grp.textures['dist0'].bind(0); 110 | shaders['jfadebug'].uniforms({ 111 | texture: 0, 112 | maxDist: 700 113 | }).draw(plane); 114 | 115 | grp.textures['dist0'].unbind(0); 116 | }; 117 | 118 | var debugDensity = function() { 119 | if (!shaders['densitydebug']) { 120 | if (!timer) 121 | timer = setTimeout("gl.ondraw()", 300); 122 | return; 123 | } 124 | 125 | gl.disable(gl.DEPTH_TEST); 126 | gl.enable(gl.BLEND); 127 | gl.clearColor(0.0, 0.0, 0.0, 1.0); 128 | //gl.clearColor(0.87451, 0.90196, 0.81569, 1.0); 129 | gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT); 130 | 131 | // only do the first group 132 | for (var i = 0; i < 5; i++) 133 | ds.groups[i].textures['freq0'].bind(i); 134 | 135 | getMaxTexture(ds.groups[0]).bind(5); 136 | shaders['densitydebug'].uniforms({ 137 | texture1: 0, 138 | texture2: 1, 139 | texture3: 2, 140 | texture4: 3, 141 | texture5: 4, 142 | maxTex: 5 143 | }).draw(plane); 144 | 145 | for (var i = 0; i < 5; i++) 146 | ds.groups[i].textures['freq0'].unbind(i); 147 | 148 | getMaxTexture(ds.groups[0]).unbind(5); 149 | }; 150 | 151 | 152 | var debugOutliers = function() { 153 | if (!shaders['outlierdebug']) { 154 | if (!timer) 155 | timer = setTimeout("gl.ondraw()", 300) 156 | return; 157 | } 158 | 159 | gl.clearColor(0.0, 0.0, 0.0, 1.0); 160 | //gl.clearColor(0.87451, 0.90196, 0.81569, 1.0); 161 | gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT); 162 | 163 | // gather all the textures and bind them 164 | for (var i = 0; i < 5; i++) { 165 | ds.groups[i].textures['outlierpts'].bind(i); 166 | } 167 | 168 | shaders['outlierdebug'].uniforms({ 169 | texture1: 0, 170 | texture2: 1, 171 | texture3: 2, 172 | texture4: 3, 173 | texture5: 4, 174 | rgb1: ds.colors[0], 175 | rgb2: ds.colors[1], 176 | rgb3: ds.colors[2], 177 | rgb4: ds.colors[3], 178 | rgb5: ds.colors[4] 179 | }).draw(plane); 180 | 181 | for (var i = 0; i < 5; i++) { 182 | ds.groups[i].textures['outlierpts'].unbind(i); 183 | } 184 | 185 | }; 186 | 187 | var threeChanToFloat = function(r,g,b) { 188 | return r * 255 / 256 + g * 255 / (256*256) + b * 255 / (256*256*256); 189 | }; 190 | 191 | var floatToThreeChan = function(f) { 192 | f *= 256; 193 | var r = Math.floor(f); 194 | f -= r; 195 | f *= 256; 196 | var g = Math.floor(f); 197 | f -= g; 198 | f *= 256; 199 | var b = Math.floor(f); 200 | return [r / 255, g / 255, b / 255]; 201 | }; 202 | 203 | var twoChanToFloat = function(x,y) { 204 | return x * 255 / 256 + y * 255 / (256 * 256); 205 | }; 206 | 207 | var floatToTwoChan = function(f) { 208 | f *= 256; 209 | var x = Math.floor(f); 210 | f -= x; 211 | f *= 256; 212 | var y = Math.floor(f); 213 | return [x / 255, y / 255]; 214 | }; 215 | -------------------------------------------------------------------------------- /docco-modified.css: -------------------------------------------------------------------------------- 1 | /*--------------------- Typography ----------------------------*/ 2 | 3 | @font-face { 4 | font-family: 'aller-light'; 5 | src: url('public/fonts/aller-light.eot'); 6 | src: url('public/fonts/aller-light.eot?#iefix') format('embedded-opentype'), 7 | url('public/fonts/aller-light.woff') format('woff'), 8 | url('public/fonts/aller-light.ttf') format('truetype'); 9 | font-weight: normal; 10 | font-style: normal; 11 | } 12 | 13 | @font-face { 14 | font-family: 'aller-bold'; 15 | src: url('public/fonts/aller-bold.eot'); 16 | src: url('public/fonts/aller-bold.eot?#iefix') format('embedded-opentype'), 17 | url('public/fonts/aller-bold.woff') format('woff'), 18 | url('public/fonts/aller-bold.ttf') format('truetype'); 19 | font-weight: normal; 20 | font-style: normal; 21 | } 22 | 23 | @font-face { 24 | font-family: 'novecento-bold'; 25 | src: url('public/fonts/novecento-bold.eot'); 26 | src: url('public/fonts/novecento-bold.eot?#iefix') format('embedded-opentype'), 27 | url('public/fonts/novecento-bold.woff') format('woff'), 28 | url('public/fonts/novecento-bold.ttf') format('truetype'); 29 | font-weight: normal; 30 | font-style: normal; 31 | } 32 | 33 | /*--------------------- Layout ----------------------------*/ 34 | html { height: 100%; } 35 | body { 36 | font-family: "aller-light"; 37 | font-size: 14px; 38 | line-height: 18px; 39 | color: #30404f; 40 | margin: 0; padding: 0; 41 | height:100%; 42 | } 43 | #container { min-height: 100%; } 44 | 45 | a { 46 | color: #000; 47 | } 48 | 49 | b, strong { 50 | font-weight: normal; 51 | font-family: "aller-bold"; 52 | } 53 | 54 | p { 55 | margin: 15px 0 0px; 56 | } 57 | .annotation ul, .annotation ol { 58 | margin: 25px 0; 59 | } 60 | .annotation ul li, .annotation ol li { 61 | font-size: 14px; 62 | line-height: 18px; 63 | margin: 10px 0; 64 | } 65 | 66 | h1, h2, h3, h4, h5, h6 { 67 | color: #112233; 68 | line-height: 1em; 69 | font-weight: normal; 70 | font-family: "novecento-bold"; 71 | text-transform: uppercase; 72 | margin: 30px 0 15px 0; 73 | } 74 | 75 | h3 { 76 | font-family: "aller-bold"; 77 | text-transform: none; 78 | } 79 | 80 | h1 { 81 | margin-top: 40px; 82 | } 83 | 84 | hr { 85 | border: 0; 86 | background: 1px #ddd; 87 | height: 1px; 88 | margin: 20px 0; 89 | } 90 | 91 | pre, tt, code { 92 | font-size: 12px; line-height: 16px; 93 | font-family: Menlo, Monaco, Consolas, "Lucida Console", monospace; 94 | margin: 0; padding: 0; 95 | } 96 | .annotation pre { 97 | display: block; 98 | margin: 0; 99 | padding: 7px 10px; 100 | background: #fcfcfc; 101 | -moz-box-shadow: inset 0 0 10px rgba(0,0,0,0.1); 102 | -webkit-box-shadow: inset 0 0 10px rgba(0,0,0,0.1); 103 | box-shadow: inset 0 0 10px rgba(0,0,0,0.1); 104 | overflow-x: auto; 105 | } 106 | .annotation pre code { 107 | border: 0; 108 | padding: 0; 109 | background: transparent; 110 | } 111 | 112 | 113 | blockquote { 114 | border-left: 5px solid #ccc; 115 | margin: 0; 116 | padding: 1px 0 1px 1em; 117 | } 118 | .sections blockquote p { 119 | font-family: Menlo, Consolas, Monaco, monospace; 120 | font-size: 12px; line-height: 16px; 121 | color: #999; 122 | margin: 10px 0 0; 123 | white-space: pre-wrap; 124 | } 125 | 126 | ul.sections { 127 | list-style: none; 128 | padding:0 0 5px 0;; 129 | margin:0; 130 | } 131 | 132 | /* 133 | Force border-box so that % widths fit the parent 134 | container without overlap because of margin/padding. 135 | 136 | More Info : http://www.quirksmode.org/css/box.html 137 | */ 138 | ul.sections > li > div { 139 | -moz-box-sizing: border-box; /* firefox */ 140 | -ms-box-sizing: border-box; /* ie */ 141 | -webkit-box-sizing: border-box; /* webkit */ 142 | -khtml-box-sizing: border-box; /* konqueror */ 143 | box-sizing: border-box; /* css3 */ 144 | } 145 | 146 | 147 | /*---------------------- Jump Page -----------------------------*/ 148 | #jump_to, #jump_page { 149 | margin: 0; 150 | background: white; 151 | -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777; 152 | -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; 153 | font: 16px Arial; 154 | cursor: pointer; 155 | text-align: right; 156 | list-style: none; 157 | } 158 | 159 | #jump_to a { 160 | text-decoration: none; 161 | } 162 | 163 | #jump_to a.large { 164 | display: none; 165 | } 166 | #jump_to a.small { 167 | font-size: 22px; 168 | font-weight: bold; 169 | color: #676767; 170 | } 171 | 172 | #jump_to, #jump_wrapper { 173 | position: fixed; 174 | right: 0; top: 0; 175 | padding: 10px 15px; 176 | margin:0; 177 | } 178 | 179 | #jump_wrapper { 180 | display: none; 181 | padding:0; 182 | } 183 | 184 | #jump_to:hover #jump_wrapper { 185 | display: block; 186 | } 187 | 188 | #jump_page { 189 | padding: 5px 0 3px; 190 | margin: 0 0 25px 25px; 191 | } 192 | 193 | #jump_page .source { 194 | display: block; 195 | padding: 15px; 196 | text-decoration: none; 197 | border-top: 1px solid #eee; 198 | } 199 | 200 | #jump_page .source:hover { 201 | background: #f5f5ff; 202 | } 203 | 204 | #jump_page .source:first-child { 205 | } 206 | 207 | /*---------------------- Low resolutions (> 320px) ---------------------*/ 208 | @media only screen and (min-width: 320px) { 209 | .pilwrap { display: none; } 210 | 211 | ul.sections > li > div { 212 | display: block; 213 | padding:5px 10px 0 10px; 214 | } 215 | 216 | ul.sections > li > div.annotation ul, ul.sections > li > div.annotation ol { 217 | padding-left: 30px; 218 | } 219 | 220 | ul.sections > li > div.content { 221 | overflow-x:auto; 222 | -webkit-box-shadow: inset 0 0 5px #e5e5ee; 223 | box-shadow: inset 0 0 5px #e5e5ee; 224 | border: 1px solid #dedede; 225 | margin:5px 10px 5px 10px; 226 | padding-bottom: 5px; 227 | } 228 | 229 | ul.sections > li > div.annotation pre { 230 | margin: 7px 0 7px; 231 | padding-left: 15px; 232 | } 233 | 234 | ul.sections > li > div.annotation p tt, .annotation code { 235 | background: #f8f8ff; 236 | border: 1px solid #dedede; 237 | font-size: 12px; 238 | padding: 0 0.2em; 239 | } 240 | } 241 | 242 | /*---------------------- (> 481px) ---------------------*/ 243 | @media only screen and (min-width: 481px) { 244 | #container { 245 | position: relative; 246 | } 247 | body { 248 | background-color: #F5F5FF; 249 | font-size: 15px; 250 | line-height: 21px; 251 | } 252 | pre, tt, code { 253 | line-height: 18px; 254 | } 255 | p, ul, ol { 256 | margin: 0 0 15px; 257 | } 258 | 259 | 260 | #jump_to { 261 | padding: 5px 10px; 262 | } 263 | #jump_wrapper { 264 | padding: 0; 265 | } 266 | #jump_to, #jump_page { 267 | font: 10px Arial; 268 | text-transform: uppercase; 269 | } 270 | #jump_page .source { 271 | padding: 5px 10px; 272 | } 273 | #jump_to a.large { 274 | display: inline-block; 275 | } 276 | #jump_to a.small { 277 | display: none; 278 | } 279 | 280 | 281 | 282 | #background { 283 | position: absolute; 284 | top: 0; bottom: 0; 285 | width: 350px; 286 | background: #fff; 287 | border-right: 1px solid #e5e5ee; 288 | z-index: -1; 289 | } 290 | 291 | ul.sections > li > div.annotation ul, ul.sections > li > div.annotation ol { 292 | padding-left: 40px; 293 | } 294 | 295 | ul.sections > li { 296 | white-space: nowrap; 297 | } 298 | 299 | ul.sections > li > div { 300 | display: inline-block; 301 | } 302 | 303 | ul.sections > li > div.annotation { 304 | max-width: 350px; 305 | min-width: 350px; 306 | min-height: 5px; 307 | padding: 13px; 308 | overflow-x: hidden; 309 | white-space: normal; 310 | vertical-align: top; 311 | text-align: left; 312 | } 313 | ul.sections > li > div.annotation pre { 314 | margin: 15px 0 15px; 315 | padding-left: 15px; 316 | } 317 | 318 | ul.sections > li > div.content { 319 | padding: 13px; 320 | vertical-align: top; 321 | border: none; 322 | -webkit-box-shadow: none; 323 | box-shadow: none; 324 | } 325 | 326 | .pilwrap { 327 | position: relative; 328 | display: inline; 329 | } 330 | 331 | .pilcrow { 332 | font: 12px Arial; 333 | text-decoration: none; 334 | color: #454545; 335 | position: absolute; 336 | top: 3px; left: -20px; 337 | padding: 1px 2px; 338 | opacity: 0; 339 | -webkit-transition: opacity 0.2s linear; 340 | } 341 | .for-h1 .pilcrow { 342 | top: 47px; 343 | } 344 | .for-h2 .pilcrow, .for-h3 .pilcrow, .for-h4 .pilcrow { 345 | top: 35px; 346 | } 347 | 348 | ul.sections > li > div.annotation:hover .pilcrow { 349 | opacity: 1; 350 | } 351 | } 352 | 353 | /*---------------------- (> 1025px) ---------------------*/ 354 | @media only screen and (min-width: 1025px) { 355 | 356 | body { 357 | font-size: 16px; 358 | line-height: 24px; 359 | } 360 | 361 | #background { 362 | width: 525px; 363 | } 364 | ul.sections > li > div.annotation { 365 | max-width: 525px; 366 | min-width: 525px; 367 | padding: 10px 25px 1px 50px; 368 | } 369 | ul.sections > li > div.content { 370 | padding: 9px 15px 16px 25px; 371 | } 372 | } 373 | 374 | /*---------------------- Syntax Highlighting -----------------------------*/ 375 | 376 | td.linenos { background-color: #f0f0f0; padding-right: 10px; } 377 | span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; } 378 | /* 379 | 380 | github.com style (c) Vasily Polovnyov 381 | 382 | */ 383 | 384 | pre code { 385 | display: block; padding: 0.5em; 386 | color: #000; 387 | background: #f8f8ff 388 | } 389 | 390 | pre .hljs-comment, 391 | pre .hljs-template_comment, 392 | pre .hljs-diff .hljs-header, 393 | pre .hljs-javadoc { 394 | color: #408080; 395 | font-style: italic 396 | } 397 | 398 | pre .hljs-keyword, 399 | pre .hljs-assignment, 400 | pre .hljs-literal, 401 | pre .hljs-css .hljs-rule .hljs-keyword, 402 | pre .hljs-winutils, 403 | pre .hljs-javascript .hljs-title, 404 | pre .hljs-lisp .hljs-title, 405 | pre .hljs-subst { 406 | color: #954121; 407 | /*font-weight: bold*/ 408 | } 409 | 410 | pre .hljs-number, 411 | pre .hljs-hexcolor { 412 | color: #40a070 413 | } 414 | 415 | pre .hljs-string, 416 | pre .hljs-tag .hljs-value, 417 | pre .hljs-phpdoc, 418 | pre .hljs-tex .hljs-formula { 419 | color: #219161; 420 | } 421 | 422 | pre .hljs-title, 423 | pre .hljs-id { 424 | color: #19469D; 425 | } 426 | pre .hljs-params { 427 | color: #00F; 428 | } 429 | 430 | pre .hljs-javascript .hljs-title, 431 | pre .hljs-lisp .hljs-title, 432 | pre .hljs-subst { 433 | font-weight: normal 434 | } 435 | 436 | pre .hljs-class .hljs-title, 437 | pre .hljs-haskell .hljs-label, 438 | pre .hljs-tex .hljs-command { 439 | color: #458; 440 | font-weight: bold 441 | } 442 | 443 | pre .hljs-tag, 444 | pre .hljs-tag .hljs-title, 445 | pre .hljs-rules .hljs-property, 446 | pre .hljs-django .hljs-tag .hljs-keyword { 447 | color: #000080; 448 | font-weight: normal 449 | } 450 | 451 | pre .hljs-attribute, 452 | pre .hljs-variable, 453 | pre .hljs-instancevar, 454 | pre .hljs-lisp .hljs-body { 455 | color: #008080 456 | } 457 | 458 | pre .hljs-regexp { 459 | color: #B68 460 | } 461 | 462 | pre .hljs-class { 463 | color: #458; 464 | font-weight: bold 465 | } 466 | 467 | pre .hljs-symbol, 468 | pre .hljs-ruby .hljs-symbol .hljs-string, 469 | pre .hljs-ruby .hljs-symbol .hljs-keyword, 470 | pre .hljs-ruby .hljs-symbol .hljs-keymethods, 471 | pre .hljs-lisp .hljs-keyword, 472 | pre .hljs-tex .hljs-special, 473 | pre .hljs-input_number { 474 | color: #990073 475 | } 476 | 477 | pre .hljs-builtin, 478 | pre .hljs-constructor, 479 | pre .hljs-built_in, 480 | pre .hljs-lisp .hljs-title { 481 | color: #0086b3 482 | } 483 | 484 | pre .hljs-preprocessor, 485 | pre .hljs-pi, 486 | pre .hljs-doctype, 487 | pre .hljs-shebang, 488 | pre .hljs-cdata { 489 | color: #999; 490 | font-weight: bold 491 | } 492 | 493 | pre .hljs-deletion { 494 | background: #fdd 495 | } 496 | 497 | pre .hljs-addition { 498 | background: #dfd 499 | } 500 | 501 | pre .hljs-diff .hljs-change { 502 | background: #0086b3 503 | } 504 | 505 | pre .hljs-chunk { 506 | color: #aaa 507 | } 508 | 509 | pre .hljs-tex .hljs-formula { 510 | opacity: 0.5; 511 | } 512 | -------------------------------------------------------------------------------- /fileops.js: -------------------------------------------------------------------------------- 1 | // ## FILEOPS.js 2 | // 3 | // Methods to make loading files easier 4 | 5 | // ### loadFile(text, dataStart, xCol, yCol) 6 | // 7 | // Given the full-text of a file, the row number the data starts at, the column numbers 8 | // of the x- and y-axis, parse the data and store it in the GPU. All column and row 9 | // numbers are 0-indexed. Will clear all previously-loaded data out of the GPU. 10 | 11 | var loadFile = function(text, dataStart, xCol, yCol, grpCol) { 12 | dataReady = false; 13 | 14 | // if data has been previously loaded, delete any buffers 15 | ds.groups.forEach(function(v,i) { 16 | v.buf.delete(); 17 | delete v.buf; 18 | }); 19 | 20 | // Leave the old data to the garbage collector, and create new groups 21 | // (see for discussion). 22 | ds.groups = []; 23 | ds.groupNames = []; 24 | 25 | ds.groupCol = grpCol; 26 | var delimiter = ","; 27 | 28 | var lines = text.trim().split("\n").map(function(d) { return d.trim(); }); 29 | for (var i = 0; i < lines.length; i++) { 30 | lines[i] = lines[i].split(delimiter); 31 | } 32 | 33 | ds.numCols = lines[dataStart].length; 34 | ds.numRows = lines.length; 35 | ds.data = []; 36 | 37 | // Set the initial bounds. 38 | for (var i = 0; i < 2; i++) { 39 | bounds[i] = [Infinity, -Infinity]; 40 | } 41 | 42 | // Parse values into arrays, splitting on unique groupBy elements. 43 | var numGroups = 0; 44 | for (var i = dataStart; i < ds.numRows; i++) { 45 | // If group-by was not selected (-1), force everything into the first group. 46 | // Otherwise, slice data by the group-by column. 47 | var thisGroup = 0; 48 | if (grpCol != -1) { 49 | var thisGroupName = lines[i][ds.groupCol] 50 | if (ds.groupNames.indexOf(thisGroupName) == -1) 51 | ds.groupNames.push(thisGroupName); 52 | 53 | thisGroup = ds.groupNames.indexOf(thisGroupName); 54 | } else { 55 | ds.groupNames = ["unnamed"]; 56 | } 57 | 58 | if (!ds.groups[thisGroup]) { 59 | ds.groups[thisGroup] = {}; 60 | ds.groups[thisGroup].data = []; 61 | numGroups++; 62 | } 63 | 64 | // Iterate through all columns of the data, pulling out the relevant columns (xCol, yCol) 65 | var thisRow = []; 66 | for (var j = 0; j < ds.numCols; j++) { 67 | if (j == xCol) { 68 | thisRow[0] = lines[i][j]; 69 | 70 | bounds[0][0] = Math.min(lines[i][j], bounds[0][0]); 71 | bounds[0][1] = Math.max(lines[i][j], bounds[0][1]); 72 | } 73 | 74 | // No `else`; user might have selected identity relation. 75 | if (j == yCol) { 76 | thisRow[1] = lines[i][j]; 77 | 78 | bounds[1][0] = Math.min(lines[i][j], bounds[1][0]); 79 | bounds[1][1] = Math.max(lines[i][j], bounds[1][1]); 80 | } 81 | } 82 | 83 | // add arbitrary z- coordinate to help select particular points as outliers to show 84 | thisRow.push(Math.random()); 85 | 86 | // push to master dataset in particular group 87 | ds.groups[thisGroup].data.push(thisRow); 88 | 89 | } 90 | 91 | // GL.Buffer (lightgl.js implementation) expects data in lists of lists, so 92 | // allocate buffers for each group. 93 | ds.groups.forEach(function(v,i) { 94 | v.buf = new GL.Buffer(gl.ARRAY_BUFFER, Float32Array); 95 | v.buf.data = v.data; 96 | v.buf.compile(gl.STATIC_DRAW); 97 | v.textures = v.textures || []; 98 | }); 99 | 100 | // get colors for all the groups 101 | ds.colors = getColorsNew(74, numGroups); 102 | 103 | // construct the legend for all found groups 104 | $("#legend-items").html(""); 105 | ds.groupNames.forEach(function(grpName, i) { 106 | var color = ds.colors[i]; 107 | var cssColor = color.map(function(c) { return Math.round(c * 255); }).join(","); 108 | $("#legend-items").append('\ 109 |
  • \ 110 |
    ' + grpName + '\ 111 |
  • '); 112 | }); 113 | 114 | // start constructing the kd-tree to support user queries ("what is here?") 115 | console.time("constructing kd-tree"); 116 | var points = ds.groups.map(function(grp, i) { 117 | return grp.data.map(function(d) { 118 | return { 119 | 'x': +d[0], 120 | 'y': +d[1], 121 | 'grp': ds.groupNames[i] 122 | }; 123 | }); 124 | }).reduce(function(a, b) { 125 | return a.concat(b); 126 | }, []); 127 | 128 | var euclidDist = function(a,b) { 129 | var dx = a.x - b.x; 130 | var dy = a.y - b.y; 131 | return dx * dx + dy * dy; 132 | }; 133 | 134 | pointTree = new kdTree(points, euclidDist, ['x', 'y']); 135 | console.timeEnd("constructing kd-tree"); 136 | 137 | // Set flag to allow rendering to continue. 138 | dataReady = true; 139 | }; 140 | 141 | // ### loadFileOld(text); 142 | // 143 | // Legacy function to load a datafile; currently hard-coded grouping column to the third column. 144 | var loadFileOld = function(text) { 145 | dataReady = false; 146 | 147 | // The group column `groupCol` and `hasHeader` should be dynamically-/user-set 148 | ds.groupCol = 2; 149 | var hasHeader = true; 150 | 151 | // Split lines into arrays based on commas. 152 | var delimiter = ","; 153 | var lines = text.trim("\r").split("\n"); 154 | for (var i = 0; i < lines.length; i++) { 155 | lines[i] = lines[i].split(delimiter); 156 | } 157 | 158 | // Parse the header rows. 159 | var header; 160 | if (lines.length > 0 && lines[0].length > 0) { 161 | if (hasHeader || !$.isNumeric(lines[0][0])) { 162 | header = lines[0]; 163 | lines[0] = lines[lines.length - 1]; 164 | lines.pop(); 165 | } 166 | } 167 | 168 | // If no header exists, give arbitrary names to the columns. 169 | if (!header) { 170 | header = []; 171 | for (var i = 0; i < lines[0].length; i++) 172 | header[i] = "Column" + i; 173 | } 174 | 175 | ds.colNames = header; 176 | ds.numCols = header.length; 177 | ds.numRows = lines.length; 178 | ds.data = []; 179 | 180 | // Set the initial bounds. 181 | for (var i = 0; i < ds.numCols; i++) { 182 | if (i == ds.groupCol) 183 | continue; 184 | 185 | bounds[i] = [Infinity, -Infinity]; 186 | } 187 | 188 | // Parse values into arrays, splitting on unique groupBy elements. 189 | var numGroups = 0; 190 | for (var i = 0; i < ds.numRows; i++) { 191 | // Remove the grouping column from the data. 192 | var thisGroup = lines[i][ds.groupCol]; 193 | if (!ds.groups[thisGroup]) { 194 | ds.groups[thisGroup] = {}; 195 | ds.groups[thisGroup].data = []; 196 | numGroups++; 197 | } 198 | 199 | lines[i].splice(ds.groupCol, 1); 200 | // add arbitrary z- coordinate to help select particular points as outliers to show 201 | lines[i].push(Math.random()); 202 | ds.groups[thisGroup].data.push(lines[i]); 203 | 204 | // calculate global bounds for the viewport 205 | for (var j = 0; j < ds.numCols; j++) { 206 | if (j == ds.groupCol) 207 | continue; 208 | 209 | bounds[j][0] = Math.min(lines[i][j], bounds[j][0]); 210 | bounds[j][1] = Math.max(lines[i][j], bounds[j][1]); 211 | } 212 | } 213 | 214 | // GL.Buffer (lightgl.js implementation) expects data in lists of lists, so 215 | // allocate buffers for each group. 216 | ds.groups.forEach(function(v,i) { 217 | v.buf = new GL.Buffer(gl.ARRAY_BUFFER, Float32Array); 218 | v.buf.data = v.data; 219 | v.buf.compile(gl.STATIC_DRAW); 220 | v.textures = []; 221 | }); 222 | 223 | // get colors for all the groups 224 | ds.colors = getColorsNew(74, numGroups); 225 | 226 | // Set flag to allow rendering to continue. 227 | dataReady = true; 228 | }; -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /img/bg-track.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/img/bg-track.png -------------------------------------------------------------------------------- /img/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/img/handle.png -------------------------------------------------------------------------------- /img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/img/logo.png -------------------------------------------------------------------------------- /img/splatter-teaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/img/splatter-teaser.png -------------------------------------------------------------------------------- /img/usa-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/img/usa-map.png -------------------------------------------------------------------------------- /libs/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/libs/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /libs/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/libs/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /libs/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwgraphics/splatterjs/482903d8adb425e3da4c3f83824de9b6ba6eeef7/libs/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /libs/hashable.js: -------------------------------------------------------------------------------- 1 | (function(hashable) { 2 | "use strict"; 3 | /* jshint -W014 */ 4 | 5 | hashable.version = "1.5.5"; 6 | 7 | hashable.hash = function(loc) { 8 | if (!loc) loc = window.location; 9 | 10 | var hash = {}, 11 | data = null, 12 | current, 13 | format = hashable.format.path(), 14 | parse = format.parse, 15 | onchange = function() { return; }, 16 | def = hashable.functor(null), 17 | valid = hashable.functor(false), 18 | writing = false; 19 | 20 | hash.data = function(d) { 21 | if (!arguments.length) return data; 22 | data = d; 23 | return hash; 24 | }; 25 | 26 | hash.set = function(d) { 27 | if (typeof d === "string") { 28 | loc.hash = d; 29 | return hash; 30 | } else { 31 | return hash.data(d).write(); 32 | } 33 | }; 34 | 35 | hash.update = function(d) { 36 | hashable.extend(data, d); 37 | return hash; 38 | }; 39 | 40 | hash.write = function(silent) { 41 | if (silent) writing = true; 42 | loc.hash = format(data); 43 | if (silent) writing = false; 44 | return hash; 45 | }; 46 | 47 | hash.read = function() { 48 | change(); 49 | return hash; 50 | }; 51 | 52 | hash.format = function(fmt) { 53 | if (!arguments.length) return format; 54 | if (typeof fmt === "string") { 55 | fmt = hashable.format(fmt); 56 | } 57 | format = fmt; 58 | if (typeof format.parse === "function") { 59 | parse = format.parse; 60 | } 61 | return hash; 62 | }; 63 | 64 | hash.parse = function(fn) { 65 | if (!arguments.length) return parse; 66 | parse = fn; 67 | return hash; 68 | }; 69 | 70 | hash.url = function(d, merge) { 71 | if (!arguments.length) d = data; 72 | if (merge) d = hashable.extend({}, data, d); 73 | return "#" + format(d); 74 | }; 75 | 76 | hash.enable = function() { 77 | window.addEventListener("hashchange", change); 78 | return hash; 79 | }; 80 | 81 | hash.disable = function() { 82 | window.removeEventListener("hashchange", change); 83 | return hash; 84 | }; 85 | 86 | hash.change = function(callback) { 87 | if (!arguments.length) return onchange; 88 | onchange = callback; 89 | return hash; 90 | }; 91 | 92 | hash.valid = function(f) { 93 | if (!arguments.length) return valid; 94 | valid = hashable.functor(f); 95 | return hash; 96 | }; 97 | 98 | hash.href = function(selection) { 99 | selection.on("click.hashable", function(d) { 100 | this.href = hash.url(d); 101 | }); 102 | }; 103 | 104 | hash.href.merge = function(selection) { 105 | selection.on("click.hashable", function(d) { 106 | this.href = hash.url(d, true); 107 | }); 108 | }; 109 | 110 | hash.href.parse = function(d) { 111 | return parse(this.getAttribute("href").substr(1)); 112 | }; 113 | 114 | hash.check = function() { 115 | if (loc.hash) { 116 | // console.log("reading:", loc.hash); 117 | return hash.read(); 118 | } else { 119 | // console.log("updating..."); 120 | } 121 | onchange.call(hash, { 122 | previous: null, 123 | data: data || (data = def.call(hash)), 124 | diff: hashable.diff({}, data) 125 | }); 126 | return hash.write(); 127 | }; 128 | 129 | hash.default = function(d) { 130 | if (!arguments.length) return def; 131 | def = hashable.functor(d); 132 | return hash; 133 | }; 134 | 135 | function change() { 136 | // prevent recursive change callbacks 137 | if (writing) return; 138 | 139 | // console.log("change():", current, "->", loc.hash); 140 | var url = loc.hash.substr(1); 141 | if (url != current) { 142 | var previous = data; 143 | data = parse.call(hash, url); 144 | if (!data && valid.call(format, url)) { 145 | // console.warn("valid:", url); 146 | } else if (!data && def) { 147 | data = def.call(hash, previous); 148 | hash.write(true); 149 | url = loc.hash.substr(1); 150 | } 151 | var diff = hashable.diff(previous, data); 152 | onchange.call(hash, { 153 | url: url, 154 | data: data, 155 | previous: previous, 156 | diff: diff 157 | }); 158 | current = url; 159 | } 160 | } 161 | 162 | return hash; 163 | }; 164 | 165 | hashable.validFragment = function(fragment) { 166 | return !!document.getElementById(fragment); 167 | }; 168 | 169 | hashable.format = function(fmt) { 170 | var query = false; 171 | if (!fmt) fmt = ""; 172 | else if (fmt.charAt(fmt.length - 1) === "?") { 173 | query = true; 174 | fmt = fmt.substr(0, fmt.length - 1); 175 | } 176 | 177 | var keys = [], 178 | word = "([-\\w\\.\\%]+)", 179 | wordPattern = new RegExp("{" + word + "}", "g"), 180 | pattern = new RegExp("^" + fmt.replace(wordPattern, function(_, key) { 181 | keys.push(key); 182 | return word; 183 | }) + "$"); 184 | 185 | // console.log("pattern:", pattern, "keys:", keys); 186 | 187 | var format = function(data) { 188 | if (!data) data = {}; 189 | 190 | var used = [], 191 | str = fmt.replace(wordPattern, function(_, key) { 192 | return data[key]; 193 | }); 194 | 195 | if (!query) return str; 196 | 197 | var qkeys = Object.keys(data) 198 | .filter(function(key) { 199 | return keys.indexOf(key) === -1; 200 | }); 201 | return qkeys.length 202 | ? [str, hashable.qs.format(hashable.copy(data, qkeys))].join("?") 203 | : str; 204 | }; 205 | 206 | format.match = function(str) { 207 | if (query) { 208 | str = str.split("?", 2)[0]; 209 | } 210 | return str.match(pattern); 211 | }; 212 | 213 | format.parse = function(str) { 214 | var qdata; 215 | if (query) { 216 | var bits = str.split("?", 2); 217 | str = bits[0]; 218 | qdata = hashable.qs.parse(bits[1]); 219 | if (qdata) { 220 | if (Array.isArray(query)) { 221 | qdata = hashable.copy(qdata, query); 222 | } else { 223 | // copy only the keys that aren't in the format 224 | var qkeys = Object.keys(qdata) 225 | .filter(function(key) { 226 | return keys.indexOf(key) === -1; 227 | }); 228 | qdata = hashable.copy(qdata, qkeys); 229 | } 230 | } 231 | } 232 | var match = format.match(str); 233 | if (match) { 234 | var data = {}; 235 | keys.forEach(function(key, i) { 236 | data[key] = match[i + 1]; 237 | }); 238 | if (qdata) hashable.extend(data, qdata); 239 | return data; 240 | } 241 | return null; 242 | }; 243 | 244 | format.query = function(q) { 245 | if (!arguments.length) return query; 246 | query = q; 247 | return format; 248 | }; 249 | 250 | format.toString = function() { 251 | return fmt; 252 | }; 253 | 254 | return format; 255 | }; 256 | 257 | /* 258 | * path + query string formatter, creates data in the form: 259 | * 260 | * {path: "bit/after/hash", } 261 | * 262 | * e.g.: 263 | * 264 | * "#foo/bar?qux=1" -> {path: "foo/bar", qux: 1} 265 | */ 266 | hashable.format.path = function() { 267 | 268 | var format = function(data) { 269 | data = hashable.extend({}, data); 270 | var path = data.path || ""; 271 | delete data.path; 272 | var query = hashable.qs.format(data); 273 | return query 274 | ? [path, query].join("?") 275 | : path; 276 | }; 277 | 278 | format.match = function(str) { 279 | return true; 280 | }; 281 | 282 | format.parse = function(str) { 283 | var bits = str.split("?", 2), 284 | data = {path: bits[0]}; 285 | if (bits.length > 1) { 286 | var query = hashable.qs.parse(bits[1]); 287 | if (query) { 288 | return hashable.extend(data, query); 289 | } 290 | } 291 | return data; 292 | }; 293 | 294 | return format; 295 | }; 296 | 297 | hashable.format.map = function(f) { 298 | var fmt = hashable.format(f || "{z}/{y}/{x}") 299 | .query(true), 300 | precision = function(z) { 301 | return Math.max(0, Math.ceil(Math.log(z) / Math.LN2)); 302 | }; 303 | 304 | var format = function(data) { 305 | if (data && !hashable.empty(data.z)) { 306 | var p = precision(+data.z); 307 | data.x = (+data.x).toFixed(p); 308 | data.y = (+data.y).toFixed(p); 309 | } 310 | return fmt(data); 311 | }; 312 | 313 | format.match = function(str) { 314 | return fmt.match(str); 315 | }; 316 | 317 | format.parse = function(str) { 318 | var parsed = fmt.parse(str); 319 | if (parsed) { 320 | parsed.z = +parsed.z; 321 | parsed.x = +parsed.x; 322 | parsed.y = +parsed.y; 323 | if (isNaN(parsed.z) || isNaN(parsed.x) || isNaN(parsed.y)) { 324 | return null; 325 | } 326 | } 327 | return parsed; 328 | }; 329 | 330 | format.query = function(q) { 331 | if (!arguments.length) return fmt.query(); 332 | fmt.query(q); 333 | return fmt; 334 | }; 335 | 336 | format.precision = function(p) { 337 | if (!arguments.length) return precision; 338 | precision = hashable.functor(p); 339 | return format; 340 | }; 341 | 342 | return format; 343 | }; 344 | 345 | /* 346 | * query string parse & format 347 | */ 348 | hashable.qs = (function() { 349 | var qs = { 350 | separator: "&", 351 | }; 352 | 353 | var replacements = qs.replacements = { 354 | "%20": "+", 355 | "%2C": "," 356 | }; 357 | 358 | qs.parse = function(str) { 359 | if (!str || str === "?") return null; 360 | if (str.charAt(0) === "?") str = str.substr(1); 361 | var data = {}; 362 | str.split(qs.separator) 363 | .forEach(function(bit) { 364 | var parts = bit.split("="), 365 | key = decode(parts[0]), 366 | val = bit.substr(key.length + 1); 367 | if (parts.length === 1 || val === "true") { 368 | data[key] = true; 369 | } else if (val === "false") { 370 | data[key] = false; 371 | } else { 372 | data[key] = decode(val); 373 | } 374 | }); 375 | return data; 376 | }; 377 | 378 | qs.format = function(data, sortKeys) { 379 | if (typeof data === "string") return data; 380 | else if (data === null || typeof data === "undefined") return ""; 381 | 382 | var keys = Object.keys(data) 383 | .filter(function(key) { 384 | return !hashable.empty(data[key]); 385 | }); 386 | if (sortKeys) { 387 | keys = keys.sort(function(a, b) { 388 | return a > b ? 1 : a < b ? -1 : 0; 389 | }); 390 | } 391 | var bits = keys.map(function(key) { 392 | return (data[key] === true) 393 | ? key 394 | : [key, encode(data[key])].join("="); 395 | }); 396 | return bits.length 397 | ? bits.join(qs.separator) 398 | : ""; 399 | }; 400 | 401 | function encode(d) { 402 | return encodeURIComponent(d) 403 | .replace(/(\%[A-F0-9]{2})/g, function(_, hex) { 404 | return hex in replacements 405 | ? replacements[hex] 406 | : hex; 407 | }); 408 | } 409 | 410 | function decode(str) { 411 | return decodeURIComponent(str.replace(/\+/g, " ")); 412 | } 413 | 414 | return qs; 415 | })(); 416 | 417 | /* 418 | * extend an object with one or more other objects' keys 419 | */ 420 | hashable.extend = function(a, b, etc) { 421 | [].slice.call(arguments, 1).forEach(function(o) { 422 | if (!o) return; 423 | for (var key in o) { 424 | a[key] = o[key]; 425 | } 426 | }); 427 | return a; 428 | }; 429 | 430 | /* 431 | * find the difference (non-recursive) between two objects, 432 | * returned as an array of objects like: 433 | * 434 | * {op: "remove", value: } 435 | * a key was set in the first object, but not set in the second. 436 | * 437 | * {op: "change", value: [, ]} 438 | * a key was changed between the first and second object. value[0] is the 439 | * original, and value[1] is the changed value. 440 | * 441 | * {op: "add", value: } 442 | * a key was set in the second object but not the first. 443 | */ 444 | hashable.diff = function(a, b) { 445 | var ak = Object.keys(a || {}), 446 | bk = Object.keys(b || {}), 447 | diff = {}, 448 | key, i; 449 | while (ak.length) { 450 | key = ak.shift(); 451 | i = bk.indexOf(key); 452 | if (i === -1) { 453 | diff[key] = {op: "remove", value: a[key]}; 454 | } else if (b[key] != a[key]) { 455 | diff[key] = {op: "change", value: [a[key], b[key]]}; 456 | bk.splice(i, 1); 457 | } else { 458 | bk.splice(i, 1); 459 | } 460 | } 461 | while (bk.length) { 462 | key = bk.shift(); 463 | diff[key] = {op: "add", value: b[key]}; 464 | } 465 | return (Object.keys(diff).length > 0) 466 | ? diff 467 | : null; 468 | }; 469 | 470 | hashable.copy = function(obj, keys) { 471 | var copy = {}; 472 | keys.forEach(function(key) { 473 | if (key in obj) copy[key] = obj[key]; 474 | }); 475 | return copy; 476 | }; 477 | 478 | hashable.empty = function(d) { 479 | return (d === null) 480 | || (typeof d === "undefined") 481 | || d.length === 0; 482 | }; 483 | 484 | hashable.functor = function(d) { 485 | return (typeof d === "function") 486 | ? d 487 | : function() { return d; }; 488 | }; 489 | 490 | 491 | /** 492 | * Leaflet plugin support 493 | */ 494 | if (typeof L === "object") { 495 | L.Hash = L.hash = function() { 496 | var hash = hashable.hash() 497 | .format(hashable.format.map()) 498 | .enable(); 499 | 500 | var moveend, zoomend, viewreset, 501 | changed = false; 502 | 503 | hash.onAdd = function(map) { 504 | hash.change(function(e) { 505 | var view = e.data; 506 | if (view) { 507 | // console.log("view:", view); 508 | map.setView([view.y, view.x], view.z, 509 | changed ? null : {animate: false}); 510 | changed = true; 511 | map.fireEvent("hashchange", e); 512 | } 513 | }) 514 | .default(function() { 515 | return { 516 | z: map.getZoom(), 517 | x: map.getCenter().lng, 518 | y: map.getCenter().lat 519 | }; 520 | }) 521 | .enable(); 522 | 523 | map 524 | .on("moveend", moveend = function() { 525 | var c = map.getCenter(); 526 | hash.update({x: c.lng, y: c.lat}) 527 | .write(); 528 | }) 529 | .on("zoomend", zoomend = function() { 530 | var z = map.getZoom(); 531 | hash.update({z: z}) 532 | .write(); 533 | }) 534 | .on("viewreset", viewreset = function() { 535 | var c = map.getCenter(), 536 | z = map.getZoom(); 537 | hash.update({x: c.lng, y: c.lat, z: z}) 538 | .write(); 539 | }); 540 | }; 541 | 542 | hash.onRemove = function(map) { 543 | hash.change(null).disable(); 544 | map 545 | .off("moveend", moveend) 546 | .off("zoomend", zoomend) 547 | .off("viewreset", viewreset); 548 | }; 549 | 550 | hash.addTo = function(map) { 551 | map.addLayer(hash); 552 | return hash; 553 | }; 554 | 555 | return hash; 556 | }; 557 | 558 | } // end Leaflet support 559 | 560 | })(typeof module === "object" ? module.exports : this.hashable = {}); 561 | -------------------------------------------------------------------------------- /libs/jq-fileupload-include/files/.htaccess: -------------------------------------------------------------------------------- 1 | ForceType application/octet-stream 2 | Header set Content-Disposition attachment 3 | 4 | ForceType none 5 | Header unset Content-Disposition 6 | 7 | Header set X-Content-Type-Options nosniff -------------------------------------------------------------------------------- /libs/jq-fileupload-include/files/venn1-500.txt: -------------------------------------------------------------------------------- 1 | 0,1,G 2 | 0.169745249882991,2.03877293204422,0 3 | 5.79888662646666,1.29125170433729,0 4 | 0.454720338424126,-2.28436143456391,0 5 | 1.54372153923677,-2.28322640445433,0 6 | 1.35059922283917,-0.314112497529232,0 7 | 0.367477446653823,2.43800050381564,0 8 | 4.41377396000875,0.438728414554519,0 9 | 2.83757630304935,-1.39421026644251,0 10 | -2.09069171355612,-1.05238851467005,0 11 | 4.41514250016105,2.24162199200322,0 12 | 3.858878088091,0.245839158333591,0 13 | -0.172661997149994,-1.03108633245099,0 14 | 3.47288288449431,1.40149427318724,0 15 | 3.37639355066151,-1.19609440895331,0 16 | 1.28018409793876,-1.6844936263954,0 17 | 3.03076330392172,2.60180704099352,0 18 | 2.43676802311008,0.558004778663971,0 19 | 2.67351688778977,1.85273096415606,0 20 | 3.96116912952014,0.540681394926045,0 21 | 1.66446821407785,0.280053917957494,0 22 | -0.314131524052923,2.00772928359542,0 23 | 2.20813502743188,2.85125869614732,0 24 | 2.76584964772001,2.03875477916729,0 25 | 3.88722388759385,-2.09431471320935,0 26 | 3.15456225864725,1.48806075057858,0 27 | 0.794171201042414,1.77228715404296,0 28 | 3.94648419185602,-0.726556449175371,0 29 | 1.92693745134174,1.01691992481873,0 30 | 2.65209224432651,0.217237824781639,0 31 | 1.03280940278223,0.220557390596178,0 32 | 4.5466637759831,-2.05244710130397,0 33 | 1.20057455603711,-1.91699899158005,0 34 | 3.14354556450525,-0.545964641975403,0 35 | -1.23205332701719,-2.39732042016963,0 36 | -0.51612051445889,-1.15508240514703,0 37 | 4.85986935037545,-0.578347177166975,0 38 | 0.644128504964202,-3.03869208027792,0 39 | 3.74275328932292,-1.02090104517953,0 40 | 0.7244253420898,0.260465743746101,0 41 | 0.413361671182074,0.158895439359558,0 42 | 2.23330569550252,-1.17265145936223,0 43 | 0.112133465219241,0.420813773477714,0 44 | 1.6166443187158,0.327523748220551,0 45 | 3.57955319116266,-0.645186153013165,0 46 | 1.01706782049909,1.47764050202445,0 47 | 1.58259602133404,2.99028574290299,0 48 | 1.03070956011809,1.30838900829902,0 49 | 2.58913400845475,-3.01521783584862,0 50 | 3.24017796934585,2.21829021212524,0 51 | 1.62169852965364,0.643719175253192,0 52 | 1.7629430563763,-0.681252951807441,0 53 | 1.70400527037727,-3.30596886052497,0 54 | 1.4236653372841,1.4410240692759,0 55 | 3.93383256971681,0.210912088294982,0 56 | 0.43857010577216,3.51784070352826,0 57 | 1.10776185504142,1.96092347832737,0 58 | 1.13322762824623,-0.217849841941357,0 59 | 2.43881983584654,-2.15929008310739,0 60 | 2.19265415313254,-3.30242163617825,0 61 | -0.234855482317944,-1.65579915606183,0 62 | 1.9552905481855,-0.796398901048483,0 63 | 1.50894063136032,0.765877005346846,0 64 | 1.58967371012599,-0.666607304958076,0 65 | 0.841128252724236,0.128750927409023,0 66 | 5.42597233614821,-0.456521226472734,0 67 | 2.21235201218505,0.475015595750148,0 68 | 4.4965742029784,1.17426100171935,0 69 | 3.71233316771723,-0.0559865270818342,0 70 | 4.6860196100565,-3.0792297257462,0 71 | 3.57001027624764,0.828120742540329,0 72 | 0.0307474352780495,0.855871352814572,0 73 | -0.0551720336898267,-3.10359759511255,0 74 | 2.58958595378185,-1.57433502380491,0 75 | 1.0953662136399,1.05848647780136,0 76 | 1.56536234804937,0.819653457897469,0 77 | -0.786609725169987,0.958068019203499,0 78 | 5.03112213076992,-0.389571964254125,0 79 | 1.99027499347173,-0.450286989039859,0 80 | 1.81690800884299,0.0685016000495406,0 81 | 0.800338819306109,-0.00535585859775634,0 82 | 2.10513975466434,-1.44813417316057,0 83 | 2.32298587277625,0.429656717064575,0 84 | 1.67593680138235,-1.57567673943032,0 85 | 0.563070674410632,-1.24870426221163,0 86 | 3.12445374270373,0.54666602239017,0 87 | 1.34244600707329,0.943567574509921,0 88 | 1.73971635302441,0.680172185426957,0 89 | 0.899392980558335,2.55115992367633,0 90 | 0.565881792773178,-0.201894109245254,0 91 | 3.10745340300939,0.287738094058174,0 92 | -0.796147900450605,0.578680330085599,0 93 | -0.676826120175429,0.778859803687812,0 94 | 2.91741789184897,2.0017463466502,0 95 | 2.09573327996384,1.12263428391718,0 96 | 4.58242497774285,-1.27363464561719,0 97 | 3.00112748358694,0.19003573681545,0 98 | 3.11818287190121,0.304822915288009,0 99 | 0.188378352307464,-1.0575474399412,0 100 | 4.60326040549946,0.235001016132523,0 101 | 2.63550243509815,-1.17327182977917,0 102 | 3.13241206510573,-0.585420508526508,0 103 | 2.62383595311517,-2.31084477314885,0 104 | -0.222223995470496,0.529619872909638,0 105 | 2.74290770510814,0.5087044828895,0 106 | 1.88616899395462,-2.06348960462814,0 107 | 3.13646511231483,1.53844445617609,0 108 | 2.9302639759621,-0.241264751172157,0 109 | -0.195645984828565,-1.11427781855134,0 110 | 1.55202122643166,-1.80421108182908,0 111 | 0.483538338673837,0.231826624903347,0 112 | 1.86166762548687,2.00157367175653,0 113 | 2.22059920916296,0.899362365228975,0 114 | 2.99738339440052,1.02532526792941,0 115 | 3.82782086166395,-0.443373394836568,0 116 | 1.7494002768225,0.195489257021314,0 117 | 2.59613275897261,1.72640253735724,0 118 | 4.15091602100137,-0.530673463985001,0 119 | 3.71494359541294,1.42876831188237,0 120 | 1.17632382885199,3.39344959552742,0 121 | 0.130527218599816,-0.122300857464932,0 122 | 0.0206539722441912,-1.19626351530984,0 123 | 2.76058117641442,-1.02941688738424,0 124 | 3.26398563301939,-1.37964632395237,0 125 | 2.36877983242816,-0.585788967884459,0 126 | 0.633952837967501,0.490914874727007,0 127 | 1.25230549093294,1.25158573289493,0 128 | 1.63172375427088,0.658257962457286,0 129 | 2.42890551558874,2.96187467901954,0 130 | 2.53206466093362,1.19919264611863,0 131 | 1.20763021860772,1.69076469016436,0 132 | 2.46795719405592,0.465304363172204,0 133 | 3.68274987932955,-0.623094215200665,0 134 | 2.12066540408248,2.19518287158356,0 135 | -1.70645382766854,-1.5369484489671,0 136 | 2.13838838587477,-0.269229502880928,0 137 | 2.16597910135842,0.351229362535929,0 138 | 1.73661435365826,-2.44672675310835,0 139 | 3.95770420084382,0.0514415362644131,0 140 | 1.44963944666041,2.13367438151275,0 141 | 2.11776422763299,-1.88409215117367,0 142 | 1.58449759290928,-2.23298537291824,0 143 | 4.65861210764723,1.31038279504879,0 144 | 1.48238492892045,0.299285603530094,0 145 | 3.72396492815775,-0.0341115815921654,0 146 | 1.09814277234264,-0.448335053002563,0 147 | -0.321486081676096,-1.35776740031187,0 148 | 3.20975014345764,-0.24699503072815,0 149 | 1.90975162513139,-0.308523601351293,0 150 | 3.29136721325931,1.46708002661565,0 151 | 0.0258576977186609,1.11071559185022,0 152 | 2.62091519917322,-0.66279649315042,0 153 | 0.989784360027114,-1.98831640608943,0 154 | 0.278058797350007,1.41613569181516,0 155 | 3.84833596423819,0.451156742480418,0 156 | 1.50606629026891,0.563103992422398,0 157 | 3.89430190910631,0.485425339765441,0 158 | 1.76247609083048,-1.26131501657802,0 159 | 1.62995219343632,-0.564349410375148,0 160 | 0.666247486278648,1.12802707267141,0 161 | 3.80908528236982,-3.04010332211046,0 162 | 3.56416468996321,-0.934444417927872,0 163 | 1.79254499259318,-1.96651384143756,0 164 | 4.98956145050319,-0.0142131234662467,0 165 | 0.586081505726855,-1.55919818343992,0 166 | 3.31581172776007,2.39678037226085,0 167 | 3.59213489945641,-1.28914838066632,0 168 | 2.77039619421675,0.375534758779385,0 169 | 3.08498248420755,2.5124766453084,0 170 | 2.97343009370561,-2.00457113617851,0 171 | 3.76530491746579,0.776819367837473,0 172 | 1.65339881528806,-0.0831062641648469,0 173 | 2.1471767780338,2.16898544515826,0 174 | 1.20659989283689,0.0670749293835789,0 175 | 0.737092706517824,1.6161954127713,0 176 | 3.11538925619242,-0.814431919750796,0 177 | -0.439501655976231,-2.01625603273174,0 178 | 2.19832870497605,-0.0150490631992801,0 179 | 0.9757758352404,-0.683791379827702,0 180 | 0.4266942490085,-2.29748388376634,0 181 | 5.28347223777525,-1.64040606712002,0 182 | 2.44739747492509,-1.76124969548162,0 183 | 2.972971625901,0.81935605617546,0 184 | 2.88110786938246,-0.668349160434512,0 185 | 1.95644999264422,1.17654126712162,0 186 | 1.07713972221864,-0.193677989390732,0 187 | 2.85231315328148,0.150219885033206,0 188 | 2.36742906788684,-1.467374546609,0 189 | 1.20849546529708,1.30466757420614,0 190 | 1.23330979829367,-0.234266946627429,0 191 | 1.79204495012535,0.0768519721731868,0 192 | 1.77593134863927,-1.21984943929998,0 193 | 2.83329572661515,1.98389850676226,0 194 | 4.5503279421182,0.422273044095459,0 195 | 1.21934964528849,0.561309481393158,0 196 | 3.90224070621322,2.05343346144868,0 197 | 2.55424513257507,2.07152406454443,0 198 | 3.73515162665239,-1.56344982160981,0 199 | 1.16577278694269,0.644442117131974,0 200 | 2.37544484913226,-0.433898074825043,0 201 | 6.43871025708328,-3.46638192503827,0 202 | 3.28759615111177,-2.48882532229459,0 203 | 2.5908174229346,-1.73028074095685,0 204 | 4.96702388590765,-1.26284066712741,0 205 | 0.408653472182521,-0.208003093897185,0 206 | 2.04393926371,-0.860850998110858,0 207 | 4.90187207999166,-0.988089721448543,0 208 | 1.53419820145169,-1.55767281419229,0 209 | 2.11304916374446,-0.00315273474859283,0 210 | 1.73452002594001,-0.526987152148934,0 211 | 1.96270910493001,1.49204483517233,0 212 | 2.37065567536691,-2.35930730948795,0 213 | 1.71042001739923,0.777913113218218,0 214 | 0.0845102838421208,0.605804557880122,0 215 | 3.63883547934575,0.575972630477417,0 216 | -0.838635164252615,1.04002001124087,0 217 | 3.25480610860201,-0.662788283519231,0 218 | 1.58324858120106,-0.344825042909836,0 219 | 3.40216824799464,-1.87227601322255,0 220 | 2.89520837977634,-1.03136982455652,0 221 | 3.60830991416386,-0.675403946889244,0 222 | 0.716611481304463,-2.44025000520666,0 223 | 3.16750450110261,-1.21139888429096,0 224 | 2.27842357066945,1.37416717190407,0 225 | 2.72073766340127,-0.53410276382051,0 226 | 1.26959242220479,1.40688891372087,0 227 | 2.23737736086446,-0.252973535757965,0 228 | 3.07989429397285,-2.14615417228123,0 229 | 0.342496837273392,0.888016962501524,0 230 | 2.93124281955397,-1.20812432522404,0 231 | 3.77460823032944,-2.81542594585369,0 232 | 4.37407208038117,1.83077166606659,0 233 | 0.923257624953391,-0.16337568178469,0 234 | 2.60202421106992,-0.29551060463227,0 235 | -0.253054604903093,0.0709836496840923,0 236 | 4.1916314870327,0.576560862839801,0 237 | 0.775090113904084,-1.570418818243,0 238 | 1.64110486011137,1.58765269779408,0 239 | -0.899436104521225,-0.323751046475475,0 240 | 1.99639419639749,0.33521979078128,0 241 | -1.93596242769645,2.26241512879587,0 242 | 2.15176830145544,0.397007503580496,0 243 | 5.12061588670385,1.55873289551535,0 244 | 0.796314725278785,-0.894169805280175,0 245 | 2.51246750695749,2.15404862180025,0 246 | -0.610629793118259,0.539669574639106,0 247 | 1.06112715188811,0.117936652604457,0 248 | 2.95638246997546,-0.123085972496408,0 249 | 3.1412475204715,-0.811580217562637,0 250 | 0.62150942540253,0.424144304461353,0 251 | 1.79198071893518,-1.59658475771586,0 252 | 1.19824915421848,0.896526383997531,0 253 | 3.33609679878655,0.022103295585538,0 254 | 2.12627094356186,0.267256631487079,0 255 | 2.67269269132578,-0.271001097284483,0 256 | 3.84967882851075,0.639405687150377,0 257 | 3.3578081690394,0.448495046539794,0 258 | 1.38456044397767,0.68322921091294,0 259 | 0.777564288714229,0.0528205087765579,0 260 | 3.36076407043113,2.34413365651525,0 261 | 3.0327921805012,-1.35177175757728,0 262 | 0.881557260145366,0.173117717635966,0 263 | 1.725379109929,0.617565087243386,0 264 | 3.31213207558879,-1.91289002822158,0 265 | 1.95445230250193,1.66573528528639,0 266 | 2.5671200775501,1.77847303146696,0 267 | 2.39317226502836,0.639176516550079,0 268 | 1.1737241604281,0.264948989090307,0 269 | -0.173789200162139,-0.313014296792324,0 270 | 3.44633861954343,-1.07077473061844,0 271 | 1.3359351674201,-0.677387446151762,0 272 | 0.633956161813621,-3.79090739938289,0 273 | 2.13488125964596,2.20502297153724,0 274 | 2.46503679859582,-0.240092856049493,0 275 | 3.43623024146265,0.445040579382442,0 276 | 2.55278257137691,1.26956639464078,0 277 | 0.282043037270434,-1.41729578777183,0 278 | 3.12298549664956,0.0266076893165685,0 279 | 2.36936880561421,-1.80242675890614,0 280 | 0.923486553057395,0.911647934156336,0 281 | 3.40578651035883,1.08959371916135,0 282 | 0.786418058520531,0.27720653731592,0 283 | 2.90835278371918,-1.08821671359022,0 284 | 4.40661294215741,0.0988051443327878,0 285 | 0.866655166692742,-0.512493246442825,0 286 | 1.84417560244627,1.94475657842854,0 287 | 0.623114205421748,2.51891686482128,0 288 | 2.50106270365595,1.32498387274225,0 289 | 1.92614100351633,-0.802019818543196,0 290 | 3.23320707662339,1.47634795936065,0 291 | 4.83542201091349,-2.0798130884683,0 292 | 3.3315646476318,-1.35505230973259,0 293 | 4.02941291406596,0.225840173566595,0 294 | 1.90331251479981,-0.122818975937677,0 295 | 0.903974305470564,-0.508159021015026,0 296 | 2.66639371516396,-0.786165653191767,0 297 | 1.26060761945979,-1.64944921130454,0 298 | 3.55041940258541,2.2531738017429,0 299 | 2.45800164114586,0.559768177350624,0 300 | 1.99404510501593,0.740272367185413,0 301 | 0.864135958407005,0.553825189965743,0 302 | 3.93404772101934,3.5477113740247,0 303 | 3.79241605537393,0.424389263261065,0 304 | 3.82896893939279,0.685617506087135,0 305 | 0.125730612128,0.929854024330865,0 306 | 2.36173634225662,-2.0954277936525,0 307 | 0.800785688099817,-1.03195140303953,0 308 | 2.27020521731731,-2.15269017361802,0 309 | 4.26735614266445,0.749590104668828,0 310 | -0.13053510720603,-0.85447811506687,0 311 | 1.72529531145318,0.8389369470763,0 312 | 0.330628355463246,-0.574703086658558,0 313 | 2.05589883406623,0.907067958859596,0 314 | 0.682394781466537,-1.59029649046777,0 315 | 3.40625642205195,2.92152901208981,0 316 | 1.21290095283603,-2.09438835536526,0 317 | 2.52975619820675,-2.17372976649564,0 318 | -0.263362495111287,-0.463504189645477,0 319 | 0.428537038859094,-0.375289406461743,0 320 | 2.74879398097726,1.4024522976114,0 321 | 0.671583131278662,-0.397582509530091,0 322 | 2.79182219990351,1.80642277313212,0 323 | 1.67098045093223,-0.898832032593411,0 324 | 2.92627310043743,-4.19031238087397,0 325 | 1.52783505894741,-1.45502653743083,0 326 | 1.4136072166672,0.922117741506056,0 327 | 2.54068583580493,-0.953460882819793,0 328 | 0.705927870404113,-0.447213253423169,0 329 | 4.25925351054982,0.733824001762829,0 330 | 1.79423440261837,-1.79478626739232,0 331 | 1.29675902291396,-0.0294245123023128,0 332 | 0.419112417330536,-0.881417311728453,0 333 | 3.51422658875849,0.707377206716882,0 334 | 0.908834409665089,0.38393255644671,0 335 | 3.37850130243881,1.70620953589324,0 336 | 2.30946691586438,0.685372798554108,0 337 | -0.276781602334682,1.2662452337618,0 338 | 1.60847404001173,0.775455851008446,0 339 | 2.97538194205266,0.505062195927582,0 340 | -0.869471551706611,-2.53278390883451,0 341 | 2.71477905178381,-1.37258930920882,0 342 | 2.24676643306964,1.04142515012738,0 343 | 1.7793293445033,-1.7454754553383,0 344 | 2.2003959152136,-0.236018165855348,0 345 | 4.09164179920473,0.504049984919546,0 346 | 1.8020659541429,0.722628597454598,0 347 | 2.64468886806297,1.27222390242156,0 348 | 1.70505329425551,-0.613598604693122,0 349 | 0.813643325424113,0.383674347163067,0 350 | 3.17795516141221,-1.36744677815724,0 351 | 2.36636785193449,-3.17941997103454,0 352 | -0.372345328058278,0.810633549778259,0 353 | 0.38318480054535,0.61807078834411,0 354 | 3.98805890711393,0.902304094810286,0 355 | 2.56571790963159,0.158462931772025,0 356 | 2.15339878459864,-0.61232759477618,0 357 | 2.75629369260017,-0.243226926953768,0 358 | 1.75960096531394,1.66001988643881,0 359 | 2.81794052358379,-0.971395362890948,0 360 | 1.21698700424012,0.519085328029988,0 361 | 4.65166456484579,-3.30597057611045,0 362 | 2.00063113783261,0.123500140214049,0 363 | 2.2883723640452,1.36253559434748,0 364 | 0.903788065045229,-2.11669736254654,0 365 | 0.287931256104409,-0.105338861362511,0 366 | 3.29404236019564,-1.18836401731845,0 367 | 0.0636391883041918,0.748135873831683,0 368 | 0.807433996728958,-0.0444144744440391,0 369 | -1.05373346600136,-0.122280432770776,0 370 | 2.46528558344598,2.4401075763579,0 371 | 1.00808283612095,1.06027647431735,0 372 | 1.94906761389771,-2.48937682890511,0 373 | 2.96688622593449,0.508522411424311,0 374 | 2.7210685788821,-2.35278999259315,0 375 | 0.974276539798046,-0.879348624562078,0 376 | 1.13190516767673,-0.124959027258645,0 377 | 2.64437118097752,3.11201067376149,0 378 | 3.33263526941078,-3.6886942085829,0 379 | 4.67109296732809,-2.22897492985123,0 380 | 1.80278399587503,-0.710737669371672,0 381 | 0.508179344387176,0.59842547945492,0 382 | 1.02544614859413,-2.16205560337673,0 383 | 2.42255303015084,-0.560953744981179,0 384 | 4.83607199263639,1.01060084040637,0 385 | 4.94116533848917,-0.080486226294081,0 386 | 2.24412744897038,0.322604419331787,0 387 | 3.15122613981497,0.128426351564265,0 388 | 3.08362832661006,-4.81419969570313,0 389 | 4.08561732562712,-0.795616856450986,0 390 | 3.19062457986504,2.60359397747898,0 391 | 2.77414743964824,-1.31303330534677,0 392 | 0.834947284797052,0.312590697378748,0 393 | 5.09423448040123,-2.18668092724784,0 394 | 4.18103733714789,-1.68822136821976,0 395 | 1.14999485446257,0.761558147373035,0 396 | 1.77731352012902,1.34246361472972,0 397 | -0.731856791554639,-2.31796402829175,0 398 | 3.28087751626158,-0.409452340170081,0 399 | 0.481364515232405,-0.999997715101745,0 400 | 1.20029489061501,-0.387838630666627,0 401 | 1.64296490259693,-0.494179418504938,0 402 | 1.16623422527744,-1.32285700054164,0 403 | 1.64386193687881,0.686778045510427,0 404 | 0.416306142680319,2.63659390420524,0 405 | 3.3060114617182,0.561675370726351,0 406 | 4.34233624595712,2.69984165129005,0 407 | 1.57049971240212,-0.534873521028754,0 408 | 2.70415113501436,-0.659003976102713,0 409 | -1.30012084896102,-0.0448454664947811,0 410 | 4.4887350308436,-1.6109387210171,0 411 | 2.42631038496385,-0.619737044494548,0 412 | 1.71893200880414,1.61687105444777,0 413 | 1.21458794597712,0.504799297215767,0 414 | 0.289399770134965,0.209340759829332,0 415 | 3.08615157066382,0.0957872643776566,0 416 | 1.07921023424855,0.708854959138936,0 417 | 4.023097909312,-0.116253217884195,0 418 | 1.06543937396551,-0.310357141916483,0 419 | -0.954969530211423,0.100304872721258,0 420 | 3.02484137431907,-1.50761324619147,0 421 | 3.25163483198502,-1.12392991039756,0 422 | 0.743496699932046,1.6663761192138,0 423 | 0.42815256937324,1.64981165411616,0 424 | 1.9168746144333,0.110292659358931,0 425 | 2.15944762072234,-1.94397801214463,0 426 | 4.14235824889017,1.34779713987745,0 427 | -0.418664337331903,0.390574753631466,0 428 | 2.59881926002647,-0.21348870318442,0 429 | -0.808548521855663,-1.54297342434402,0 430 | 0.995012181539442,-1.95882510081702,0 431 | 2.30560055926246,0.654602781595587,0 432 | 4.47833287585861,0.627522827570072,0 433 | 0.361167904359029,-1.29758359890454,0 434 | 4.81308325256061,-0.583922472053105,0 435 | 0.348723207227618,-2.42560493001266,0 436 | 3.92863090369318,0.457934192474071,0 437 | 0.346990609810919,-0.260333731106764,0 438 | 2.77891691416502,0.363365894004292,0 439 | -1.8253382018673,-2.7183590416681,0 440 | -0.167442876638446,0.875303216827676,0 441 | 2.89116313905383,-2.78658414172662,0 442 | 3.52848673218402,0.469792700461051,0 443 | 2.31174740236142,1.19339293620703,0 444 | 2.044462796325,-0.579855759872932,0 445 | 2.94854374221661,-1.47339145937286,0 446 | 2.25619500293898,-0.0269336860305078,0 447 | 1.9233709495234,0.356360070916174,0 448 | 2.26397017134894,0.182714144661184,0 449 | 3.40686894204342,0.326181284338172,0 450 | 2.5946407598579,1.88116346724691,0 451 | 2.9888517036168,-0.168827090616527,0 452 | 2.3260269098433,-1.76998421761246,0 453 | 1.37769833030505,0.737351726309715,0 454 | 3.67974717466412,-1.77271026522509,0 455 | 1.62939622696921,-0.00799614490994104,0 456 | 1.82953277003681,-0.732748016673391,0 457 | 2.78091583559687,-2.27437329628086,0 458 | 2.44263969241505,2.92095093308389,0 459 | 1.02907279709048,0.883809189100641,0 460 | 6.1069751577655,0.668571994837482,0 461 | 1.63022037620991,1.45509295533573,0 462 | 3.23081393703159,0.785666282926247,0 463 | -0.111728884508457,1.2511507502996,0 464 | 3.34625306028584,-1.87472137192636,0 465 | 2.64277232164919,-2.80909321496415,0 466 | 0.943997771324802,-0.3273824300813,0 467 | 2.74614688768201,-1.3638787288152,0 468 | 2.80738654028799,-0.495333633128957,0 469 | 2.47146269408084,-0.374123140282028,0 470 | 2.64836734042377,2.34431710752978,0 471 | 3.09905518157675,-0.248677433087679,0 472 | 1.81409534726817,0.0966978129194077,0 473 | 4.87110356334584,-1.44893910532997,0 474 | 2.71364775619272,-1.22532682078223,0 475 | 0.273049113089704,0.707898023294901,0 476 | -1.08633642592176,-0.704107734649072,0 477 | 2.83615095881535,1.05468960622534,0 478 | 0.998101534933198,-0.226192837174858,0 479 | 1.96703267173071,-1.56260188508352,0 480 | 2.79603639618915,-2.188108814127,0 481 | 1.50823054254749,0.136527622389688,0 482 | -0.744909652831669,-2.05021282339103,0 483 | 2.73809234760548,-1.66989511856031,0 484 | 1.71027535397087,2.26670039513707,0 485 | 3.79513647217777,-1.74969583706068,0 486 | 4.66889332571199,0.130983030005693,0 487 | 2.55172642550516,0.00342037242047442,0 488 | 2.70588860664616,-1.50288908931123,0 489 | 0.022946943426797,0.719075711608172,0 490 | 2.10874240512024,0.00131344259326593,0 491 | 1.46241139310488,0.599700335761274,0 492 | 0.231438068280339,0.143267517923319,0 493 | 1.68135747265655,0.783407335163845,0 494 | 3.19402701700987,0.0195224191509049,0 495 | 1.89025286215572,-1.8905162931625,0 496 | 1.72496653404917,0.527313599370054,0 497 | 2.39977932488735,-0.074757083626774,0 498 | 2.52416679851905,-2.08492840744266,0 499 | 2.78704577313375,0.396758765774145,0 500 | 2.22986548533367,1.02355411640237,0 501 | 2.02713271351531,0.861951723387452,0 502 | -------------------------------------------------------------------------------- /libs/jq-fileupload-include/files/venn2-500.txt: -------------------------------------------------------------------------------- 1 | 0,1,G 2 | 2.03487754482696,1.77333746422665,0 3 | 3.72432813349238,0.92678429843897,0 4 | -0.244678590647871,-1.23312952578981,0 5 | 1.11250676142184,0.686139224374836,0 6 | 1.11887011373967,0.373648677663125,0 7 | 1.07572286052122,-1.65597150277962,0 8 | 2.94760446793842,-1.83404700198879,0 9 | 1.94156360255742,-2.05323108384641,0 10 | 2.59765801020179,2.14381249825892,0 11 | 2.51952742596437,3.65908498928256,0 12 | -0.650080616191977,-0.0741106035642554,0 13 | 3.95270213932199,0.257724814107342,0 14 | 2.43799231981518,2.31640074681095,0 15 | 0.530763860719874,2.10031562408419,0 16 | 3.19062560485546,-1.66659328504586,0 17 | 1.18277799304891,0.270403359881825,0 18 | 2.78541766738294,-1.19291417077371,0 19 | 3.98912076948653,0.371228475059308,0 20 | 0.336001067097774,-0.0588355706438352,0 21 | 1.171171987393,-1.76104179028061,0 22 | 3.25000253070378,-2.10081348706207,0 23 | 2.87956822887452,1.25867428030913,0 24 | 3.11138237148045,0.894223890887212,0 25 | 1.86112218917023,-0.97571086889357,0 26 | 2.92143179378344,-0.552737043314841,0 27 | 3.20181668518048,-1.50596822482022,0 28 | 1.0234100070873,-1.32092382959263,0 29 | 1.87639959800402,-1.04993030522111,0 30 | 2.31127342869334,1.13043255661194,0 31 | 2.03151619681382,1.41471820835773,0 32 | 2.80806141836565,2.50878146101016,0 33 | 2.93214852771333,-0.601930604714353,0 34 | 1.9344990781524,-4.11696450069044,0 35 | 2.43796158238135,-0.402757872377461,0 36 | 1.32084033693363,2.08128661473237,0 37 | -0.121805853928247,0.310332326168774,0 38 | 1.2042579825084,0.14125893300304,0 39 | 0.714272626439592,2.66461919066359,0 40 | -0.490662986358536,-2.19171263672535,0 41 | 2.29418587118508,0.605178277790548,0 42 | 1.84879134155721,0.281656061879435,0 43 | 5.22334452101007,0.565074174768267,0 44 | 3.2713746954979,1.07440759923696,0 45 | -0.0385058692482274,2.40684838539148,0 46 | 3.06982111628779,1.64910425381583,0 47 | 2.08951798271606,0.988182954768496,0 48 | 4.64616334385325,1.6834352995763,0 49 | 3.53654476095011,-3.40086224409454,0 50 | 3.95062898073902,2.14961177702614,0 51 | 0.889163050077665,1.02056132811107,0 52 | 2.9551746686944,0.402495759559194,0 53 | 2.6088524621258,3.0379236120141,0 54 | 2.71861320168722,-0.744296039812805,0 55 | 0.85300587637946,-0.303438489460171,0 56 | 1.92497050808018,-0.294260427127547,0 57 | 0.568382642086435,-0.199661707514339,0 58 | 2.1336744705518,2.23145920243776,0 59 | 1.68523741724481,-0.684597633616035,0 60 | 2.04380697165492,3.14800879219337,0 61 | 2.90961814867073,-1.9704785089046,0 62 | 2.70602268294285,1.20007624377453,0 63 | 0.953744383317687,0.0812926031821362,0 64 | 2.7971360675176,2.51234195752897,0 65 | 1.95039966367636,0.583927275975699,0 66 | 1.37360139584118,-0.922540962857232,0 67 | -0.0462328220669166,1.27208420073501,0 68 | 0.114122091048822,1.40292926500269,0 69 | 0.417632181649401,0.861702655118383,0 70 | 2.53505615844437,1.32167879551292,0 71 | 2.38259535877944,-0.243096386584227,0 72 | 1.92743031873312,-1.22208917907745,0 73 | -0.594741050750821,-1.00329308855336,0 74 | -1.01195640716673,3.84691111739441,0 75 | 1.32211593571857,0.534323478281064,0 76 | 3.48538719594604,-0.876542083871254,0 77 | 1.07032567834296,-0.127378391967778,0 78 | 1.63711424206349,0.935613545817589,0 79 | 3.95847295672298,-1.19283138894628,0 80 | 2.71056826932704,-1.91100141398937,0 81 | 1.87523198073135,0.996799846384943,0 82 | 0.9089414296702,-0.293296174377254,0 83 | 1.59497543052202,0.532026154959301,0 84 | 0.500157434966475,0.617328364468828,0 85 | 2.51680653670534,0.194862568229548,0 86 | 0.270117748363451,-0.0941359902511474,0 87 | 3.23720280331091,0.793281552838332,0 88 | 0.416189659890208,-0.244443121973729,0 89 | 4.61769679164145,0.4558168101838,0 90 | 2.4286530101182,0.712437181757626,0 91 | 4.49075087269946,-1.53799176201966,0 92 | 4.33425102705532,-0.310948245570163,0 93 | 1.58196282894326,1.24165333029159,0 94 | 3.24371367804672,2.20264093608862,0 95 | 1.17631142075862,-0.63631010238064,0 96 | 4.22884885925887,0.634522422928152,0 97 | 0.1965916957727,0.588843291573255,0 98 | 2.52345590341807,0.156330585328749,0 99 | 0.250168410247388,0.387695843117289,0 100 | 6.02624817501073,0.234942074983414,0 101 | 4.06165280261247,0.674016010784248,0 102 | 4.58284686515504,-0.810578355436419,0 103 | 1.4720758197263,0.820718442553332,0 104 | 1.86347307583559,0.588562451962813,0 105 | 2.014832146795,0.0405030725677915,0 106 | 1.92799814776637,-2.33968946551494,0 107 | 2.38551025191961,1.46464657410055,0 108 | 0.504338977293097,-0.601729130050688,0 109 | 2.53511837887318,3.32814598397607,0 110 | 2.41843084159717,-1.80409529326157,0 111 | 1.15297503424408,1.61645420141104,0 112 | 2.73041353526283,0.785108284926625,0 113 | 1.77236949749079,-0.461334728220559,0 114 | 3.18925626733933,-0.284482567265034,0 115 | 3.96467797638809,-0.916401012826595,0 116 | -0.897758912009656,0.121270269303482,0 117 | 0.609440770597337,1.4575942698084,0 118 | 5.0251419609969,-1.04946199518766,0 119 | 1.29628428645555,0.915213295130457,0 120 | 0.747442076797838,-1.37004812520449,0 121 | 4.27754201898716,1.73316782367449,0 122 | -1.28370528499081,-2.37567348580885,0 123 | 1.60524277006508,1.94484607189792,0 124 | 1.156265658272,0.0285561165960384,0 125 | 1.67244599874233,1.46506079979494,0 126 | 1.70657671765888,-2.8053524296958,0 127 | 1.99197439538187,1.1671453406281,0 128 | 3.02037296707257,-2.08895713327588,0 129 | 2.6084930590054,0.93952078270581,0 130 | -0.15572122144965,0.318659535894057,0 131 | 2.48386553019478,0.642181165562481,0 132 | 0.608877040014904,-1.22208603479345,0 133 | 2.27030908274229,-1.34055236525943,0 134 | 0.999535597329347,-2.29284421307326,0 135 | 1.59571232729535,2.11680767874855,0 136 | 0.862592552807252,-0.997164679702818,0 137 | 3.14578322868485,-0.205951842424405,0 138 | 1.81327424468285,1.17081897749932,0 139 | 0.51862846056824,0.80577062467892,0 140 | 2.71482273232654,-1.81691471635686,0 141 | 2.61099843622567,1.76643761399288,0 142 | 0.80641375337856,0.513763275235614,0 143 | 1.27486676024673,0.758750820278944,0 144 | 1.8279764204538,1.91328075044021,0 145 | 5.81555949863981,0.391486454195286,0 146 | -0.960641213691824,-0.777820971633542,0 147 | 2.93580169476537,2.66283826945013,0 148 | 1.15117840328473,-0.033523534978349,0 149 | -0.907931041007653,-0.212646600386043,0 150 | 2.3557109930219,-2.34382885859583,0 151 | 0.937717737229642,3.5224421749292,0 152 | 1.39455491857334,5.985097253569,0 153 | 0.663547147249878,-1.22173656668458,0 154 | 2.67234291364392,-0.711494966225415,0 155 | 2.47307047946931,0.582844369588966,0 156 | 4.77681117172868,1.43429944881365,0 157 | 3.29339320344204,-1.63948474961419,0 158 | 2.21342883353291,0.00670021896066554,0 159 | 0.756155550489216,-0.654110166255906,0 160 | 3.64079438503244,-1.08746554058143,0 161 | 2.54557508370609,1.35895598760221,0 162 | 1.0731214005504,-1.27833298685481,0 163 | 2.60860269584149,0.373029851114364,0 164 | 2.54706559152919,-0.538561921262615,0 165 | 0.438069093639842,2.80110768885669,0 166 | -0.45194529794584,0.668212694512426,0 167 | -0.829295291335042,0.428957488449911,0 168 | 3.25214841750272,2.29553004219662,0 169 | 2.3153500061068,0.390171211743942,0 170 | 2.60472690417534,-3.95586213844674,0 171 | 2.98164556488663,0.691715616301431,0 172 | 1.91398550014797,-1.4126744902461,0 173 | 1.01016461405673,-1.03879253132831,0 174 | 0.746275441030925,-0.65951018982448,0 175 | 2.69710018873919,2.40380042103152,0 176 | -0.185946408795542,1.44431438946491,0 177 | 2.97535233528983,-0.442433483835097,0 178 | 1.9473860730863,1.92003230006187,0 179 | 2.08486558290834,-1.9310999295254,0 180 | 2.84866500087336,-0.810758303407282,0 181 | 2.38879283716304,-0.51156043666098,0 182 | 3.84160057378691,-0.685681204697272,0 183 | 2.07922698567318,1.66312861411601,0 184 | 4.2340656401483,2.19139447581493,0 185 | 1.27650285665116,-0.0576041177409344,0 186 | 1.45763030155856,1.57471483881536,0 187 | 4.08512499946494,0.481685708738958,0 188 | 3.06210166466924,-1.57237378637568,0 189 | 1.77501719475404,1.68940928913199,0 190 | 1.60304404402509,-2.06823020976722,0 191 | 4.00198772677422,1.61619645042554,0 192 | 1.89373184672603,-0.851721194508793,0 193 | 0.879649299083675,-1.38014032519115,0 194 | 2.9757550970606,-0.300020403852483,0 195 | 3.09356793917415,-1.44074001832525,0 196 | 0.263996555142204,0.906224957082514,0 197 | 0.911093095925245,0.151765782953994,0 198 | 0.324797171221201,3.16214198567488,0 199 | 2.34337147958411,-1.11411126511669,0 200 | 0.535778435887422,-1.34062459188249,0 201 | 1.27073426925325,-1.10317718635031,0 202 | 2.6646578893505,-1.05139559824586,0 203 | 2.38186211094298,0.464997011432865,0 204 | 1.56065992490624,1.19403595180578,0 205 | 1.44299326344247,-0.70766831594701,0 206 | 4.40659460796919,1.77906741217612,0 207 | 3.77144314027945,-0.485788796735742,0 208 | 3.56006460910401,-1.79170847743211,0 209 | 0.745206003637827,-0.505082412717856,0 210 | 0.439405535884991,-1.37462891792707,0 211 | -0.60318477861645,1.69839059742728,0 212 | 3.16583105743856,1.76248779562002,0 213 | 1.65705873138392,2.95052827339039,0 214 | 3.65587517071758,0.462079429257133,0 215 | 2.93947239348193,-1.35450767458997,0 216 | 1.88151351562838,0.351287749739844,0 217 | -0.776213171213863,-1.44271607363052,0 218 | 2.10207499256513,0.981868386598306,0 219 | 1.90017337784152,-0.759976823385907,0 220 | 1.52194070606691,-2.47040250622329,0 221 | 1.04178001168613,-2.44551843210966,0 222 | 3.43663817957227,1.91595548108968,0 223 | 1.83068488407025,-1.18919857802989,0 224 | 3.53537522266226,1.24645502424146,0 225 | 3.92041709713435,-1.31261992060841,0 226 | 1.84552633474708,-0.0345364987202879,0 227 | 2.01428085628973,1.16017411377316,0 228 | 2.16313045964874,2.45829124576848,0 229 | 2.12196236338128,-1.826613596528,0 230 | 1.02851711375219,2.6720706370467,0 231 | 2.87275398587251,-0.825675153405866,0 232 | 4.07970258118785,1.67653774300093,0 233 | 4.03673791088371,2.49172552667163,0 234 | 0.197813541606222,0.212255302664837,0 235 | 0.43501627497662,-0.136505378565924,0 236 | 3.65423687170292,-0.73186229611137,0 237 | 0.202669067705624,0.907599397049876,0 238 | 3.88988778975911,1.1174963930237,0 239 | 3.81219267994198,1.334094279882,0 240 | 4.23061690821074,0.887556821338706,0 241 | -1.48791229615045,0.123561218668496,0 242 | 0.807759103509996,-0.674351581747936,0 243 | 4.39317641238409,2.29202100530775,0 244 | 2.00507289335857,2.60504872270747,0 245 | 3.61748434916565,-2.12224049807893,0 246 | 4.52939256585155,1.43746956771225,0 247 | 1.52069699680146,-0.519869892402549,0 248 | 2.48738645293558,-1.03229223032214,0 249 | 2.50178023719903,-0.921941466347861,0 250 | 3.43608780701748,-1.24326413026347,0 251 | 2.25463037003134,-0.885139598813327,0 252 | 1.11249274671309,-2.24900255826982,1 253 | -0.773758978141927,-1.30289941827585,1 254 | 3.65274535190572,-0.121020623212132,1 255 | 1.02414659293382,-0.963474081711445,1 256 | 1.51147712375719,1.20397391769861,1 257 | -1.6125036199554,0.954524054437289,1 258 | 0.0178569675178361,1.65231753616805,1 259 | 1.99106247198698,1.09260932576162,1 260 | -0.968441686829536,0.830522327374905,1 261 | 0.844954195628406,0.0969086532338805,1 262 | -0.405082592386944,0.188143446066919,1 263 | -0.00599898849804678,-2.48268764138905,1 264 | 0.741956072438874,-1.37618463753191,1 265 | 2.55931818986786,-0.711068043251324,1 266 | 1.51916130862144,0.557328237851283,1 267 | -0.877511660339965,1.13013036884495,1 268 | -0.860385087291666,1.41264433649801,1 269 | 0.732093481866402,1.53495914402627,1 270 | 2.39711787927894,2.07760289119261,1 271 | 0.669747446441632,-0.61701972519612,1 272 | 1.3449065123217,-1.93710167900909,1 273 | 0.186874045350741,-0.373215296975423,1 274 | 0.142573600696211,1.16083400999245,1 275 | -1.01565785586564,-1.07386411080441,1 276 | -0.463718082656805,-0.47471173575394,1 277 | -0.329112482927548,1.23995027424923,1 278 | -0.00678949493472935,-0.730114441405429,1 279 | 0.94441216995769,-0.811489545188793,1 280 | -0.709726195108975,-1.42970232464136,1 281 | 1.01596103449394,-2.94984435743845,1 282 | 2.0280912803313,-1.17386582923501,1 283 | -0.626807372471348,0.515895213642101,1 284 | 0.375478249802794,0.701740769867753,1 285 | 0.854209577812174,0.870506244667749,1 286 | -0.932142108199182,-1.04226336766272,1 287 | -2.43416641406149,0.26025122255447,1 288 | -2.30100733252019,-2.06955957658558,1 289 | 0.0965940412051601,1.00758628161541,1 290 | 1.54434170973015,-0.0728514855890797,1 291 | 1.29851193452418,0.387000560596947,1 292 | -1.46604320630262,1.44408441838647,1 293 | -0.112141853748443,-0.539638034993307,1 294 | -2.45610816539761,1.14064149510356,1 295 | -0.917483452912977,-0.971505833999025,1 296 | -1.67359066437683,-1.71102178121565,1 297 | 1.60939171094874,-0.75876008053774,1 298 | 0.606486889019644,0.579259888075148,1 299 | 1.59260519733339,-1.62219837712623,1 300 | -0.145160054285501,-1.30064541503097,1 301 | 1.62393720574917,-2.19773164357562,1 302 | 0.570612638703629,-0.464204366195354,1 303 | -0.395811605772368,2.00735633377633,1 304 | -0.0602948094132161,-0.0871403984870398,1 305 | -1.08101925257121,0.302813653896844,1 306 | -2.63354142749947,-1.93271153849043,1 307 | 1.8235707342577,-0.248298722561245,1 308 | -0.431825547199388,-1.54330148429778,1 309 | -0.448110358478411,1.39358800521362,1 310 | 0.547861184979583,0.154837014548381,1 311 | -0.43563563265402,-0.942260311456039,1 312 | 2.08520432560438,1.83917377531523,1 313 | 0.427972646725144,-2.08083078926044,1 314 | -1.18425391290225,-0.153819237448651,1 315 | 2.22486705600312,0.885645883752628,1 316 | 1.68248362743968,2.67789589814294,1 317 | 2.63621407156453,-1.72462429613247,1 318 | -0.844331175608482,-1.94750668450336,1 319 | 1.88688702479078,-2.37770658206283,1 320 | -1.39410171240529,3.77360312562018,1 321 | 0.824602755248819,0.539727992589203,1 322 | -0.766538990348746,0.966278196631314,1 323 | 1.15281239603256,2.43065945617697,1 324 | 0.183399993016116,-1.15448413107182,1 325 | 0.861351679875875,-2.06250512761498,1 326 | 0.114830755496994,-0.656363966930031,1 327 | -1.57547919786458,0.383183097238161,1 328 | -1.6931467160609,-1.01722458256124,1 329 | -0.127831381066439,-0.945839242140042,1 330 | -0.989570020796132,1.72165953413509,1 331 | 0.492209431251816,-1.80804735166883,1 332 | -1.6449340459403,3.31175355705814,1 333 | -0.251737443275698,1.54622090788992,1 334 | -0.655442313402322,3.2547975524854,1 335 | -0.277418204232782,1.54745311484046,1 336 | -2.05047608951236,1.06520778124774,1 337 | -3.61670489052215,1.90894068552334,1 338 | -0.0745573609663875,-0.880590668801146,1 339 | -1.42572761006819,-0.359705256620048,1 340 | 1.39479528987781,-0.693065133879039,1 341 | 0.129385299749533,-3.88431694824495,1 342 | 1.3408032496483,-0.061537982935681,1 343 | 0.458376310436167,-1.30643205298716,1 344 | 2.81813427692389,0.88259748742554,1 345 | 1.11213006140243,-0.649091581352939,1 346 | -0.689127886287389,0.497113076393916,1 347 | 2.41244070558607,0.823889683680848,1 348 | 1.68539680501438,0.552421544895947,1 349 | -1.0726751901963,-0.951337658182968,1 350 | 0.825958568113009,0.623532188400821,1 351 | -0.376694973437191,2.33170238835286,1 352 | -0.526144502670131,0.336873389999953,1 353 | -5.4836905817096,-0.0654576895850613,1 354 | -2.24840064180871,-0.975019483383434,1 355 | 0.316335177662224,-0.979935059732575,1 356 | -0.336980239219425,-3.1683190807562,1 357 | -2.48525724691498,-2.07960797460767,1 358 | -3.71945150464209,2.06066857498784,1 359 | 0.644535363532109,-0.0130091726681609,1 360 | -0.238092486578273,-1.04139838134783,1 361 | -1.07479126579965,-2.61886248196964,1 362 | 0.0421535442221599,0.0833306896308545,1 363 | -2.84446008482269,-0.178192354246069,1 364 | -1.34990423722178,0.190687475978108,1 365 | -0.268956747063754,0.73462443812188,1 366 | 3.42625011220993,-0.819871415039605,1 367 | -0.93949991233545,0.885635669205956,1 368 | 0.857188639321317,1.16711717471583,1 369 | 1.91323321863189,0.394980104247692,1 370 | 0.660318899726799,0.64437962107801,1 371 | 0.0484144236590865,-0.039917383856914,1 372 | -1.47375921889274,-1.12863552342149,1 373 | 1.40920551270291,-0.725586010843573,1 374 | -0.774894155346923,-1.21006778340256,1 375 | 1.89648771638373,3.94067079613079,1 376 | 1.78250064922748,-1.43951722987287,1 377 | 2.88961937285892,0.529185125941911,1 378 | -0.131544169293649,-3.72778614335511,1 379 | 2.99205363281123,-2.82283403102248,1 380 | -0.946335679305347,-1.36442189242625,1 381 | -0.816300538752368,0.576965198635555,1 382 | -0.959500071249585,-0.343672343711248,1 383 | 1.44769180399551,0.806429863421412,1 384 | 3.47536604033528,1.83950269812178,1 385 | -1.26390711461528,-0.695605988737975,1 386 | -0.35226353599143,-0.613784500619958,1 387 | -2.12420804258002,0.70001647241031,1 388 | 2.39179376451579,0.93639524330189,1 389 | 1.06303358223079,0.310717303350569,1 390 | 3.78657568390285,-2.53880429814778,1 391 | 0.140255720727758,0.857559950286665,1 392 | 0.54774967489078,0.11130468383383,1 393 | -0.961631169943907,-0.390641467100514,1 394 | -0.66742968399505,0.0910376282074414,1 395 | -0.148029814967656,1.33518197527142,1 396 | 1.55561062187747,1.52404046521753,1 397 | -1.88287493603117,0.831357937558801,1 398 | -0.0408706895669578,0.87661205634333,1 399 | 0.0908791579982633,-1.48654096384801,1 400 | 2.48624535614739,-1.69316295147821,1 401 | 0.777125258948314,-0.561766360219589,1 402 | -1.16013946350988,1.49874204361777,1 403 | -1.60274435555892,0.431264353460703,1 404 | -0.539222696772019,0.91292701896669,1 405 | 0.651150654384781,0.755635759561319,1 406 | -1.27283628961672,-0.664891752478876,1 407 | 0.532922411926193,-0.740140497193975,1 408 | -1.07970037348675,3.29995243740603,1 409 | 1.93239949150799,-1.85847379580748,1 410 | -1.43041884975386,1.42123902894284,1 411 | -0.116869976105539,0.963832354697223,1 412 | 0.934259194409997,0.0825451005167269,1 413 | 2.03060793317326,-1.21191731030972,1 414 | -1.28975142860896,1.22203628316857,1 415 | 1.48234680038203,-1.44176852622265,1 416 | 0.470298314718239,0.717736847546426,1 417 | -0.437543716279948,-2.25273990816136,1 418 | -1.44606785357879,-3.10118471055496,1 419 | 0.500779335052828,0.431624013613635,1 420 | 4.20985497739483,0.0603245633960007,1 421 | -0.340386973186156,1.06957813147613,1 422 | -1.7873874635136,4.12223877031879,1 423 | 2.01180263404926,1.60033414340161,1 424 | 0.18595618228425,1.34475708449684,1 425 | -1.55466826962804,2.25696703422792,1 426 | 0.612214281049907,1.94822649104228,1 427 | 0.48739663885371,0.670664727071498,1 428 | -0.204276640326053,-0.591890148191203,1 429 | -2.10944616224746,0.506936034575781,1 430 | 0.9859286729011,1.29337676942042,1 431 | -1.67851784626079,-0.321061606280325,1 432 | 0.0161493486267075,0.0254262082203317,1 433 | -1.98262763178124,-0.670392647797364,1 434 | 1.49908935927856,1.38070606812628,1 435 | -1.10219068426777,0.246353739494122,1 436 | 0.592479569964589,-0.691465841618704,1 437 | 1.30066548757463,0.681067259954364,1 438 | -1.09581817024536,2.27912249973611,1 439 | -1.21641352749946,0.680293614297288,1 440 | -0.488340684175844,0.0909238364890629,1 441 | -1.70148172807751,-0.00116039564798653,1 442 | 2.6221936184473,-1.18942783486771,1 443 | 0.233090963497086,-0.448015665056634,1 444 | 0.617554754083595,1.67052428782953,1 445 | -2.64882910114655,-0.154905473746983,1 446 | 0.956826547278215,-0.853398868366674,1 447 | 4.62828195785114,1.09160911112626,1 448 | -0.847114822986949,0.883286561644555,1 449 | 0.278971135274418,-1.92621040321753,1 450 | -1.43666952739683,-1.05140188289561,1 451 | -0.101845842531311,-2.93898984806216,1 452 | -1.46021682496831,-0.285116421083354,1 453 | 1.65899637086825,1.93797091893759,1 454 | -2.53296344953707,2.13754300661302,1 455 | 1.20520724588841,0.0422458778327623,1 456 | -1.03288026031981,3.66600986892603,1 457 | -0.303739369332209,2.00116654488406,1 458 | 0.390607588472872,-0.503177115657976,1 459 | 0.690881674927189,0.894889537370782,1 460 | 0.517718424454379,1.27748039097467,1 461 | -0.767667612597559,-1.52384643414154,1 462 | -0.959306116122738,-0.614045740424939,1 463 | -1.75430105534964,2.58882151951434,1 464 | 0.740560534483263,1.43784730464617,1 465 | -1.19448925588764,0.396633389027966,1 466 | -3.9998068228574,0.0221371120118422,1 467 | 0.514795071916657,-3.72819714976016,1 468 | -0.568776323783561,-0.851913871917755,1 469 | -0.843168027628917,1.06943709198862,1 470 | -1.24466777246295,-1.71101281400301,1 471 | 1.04027596724073,-0.2850953658526,1 472 | -0.746197428402743,-0.362505377270366,1 473 | 0.618647486758664,1.25918189514292,1 474 | 0.297704988043789,0.0871960999850953,1 475 | 0.764178899114674,-0.240287472730394,1 476 | 0.0142525684795469,1.05266452146773,1 477 | -1.67374099062588,1.8336628286658,1 478 | 2.11460683299811,0.731560932546942,1 479 | -2.69484097199277,-0.806652541275129,1 480 | 1.27163164134011,-1.01725359876632,1 481 | 2.07681683997769,1.36649763971954,1 482 | -1.43771093099238,-0.288571536891763,1 483 | 0.515422291744797,-0.321621299052415,1 484 | 0.294235373277134,1.06769675813404,1 485 | -0.490207193141536,0.344165265162453,1 486 | 0.00339448958197956,0.0684568949303888,1 487 | -3.07751691739771,1.8629262695528,1 488 | 2.05521918862084,1.93747475847955,1 489 | 0.746705284432626,0.0766673219686105,1 490 | -1.94701195008642,0.706297199455847,1 491 | -2.02257395090474,-0.685179137791328,1 492 | -1.74531528551386,-1.16438252351201,1 493 | -0.631553155024024,-0.907850155220667,1 494 | 3.29105835216949,0.784111740373865,1 495 | 0.762215330400342,-2.8965321935599,1 496 | 1.52981344695475,-3.01432224764639,1 497 | -1.42594940242312,-0.156558353710012,1 498 | -1.58920321961111,-0.153823241562173,1 499 | 0.942569808040606,0.154591729941795,1 500 | -0.256915690279531,-0.0784409889918233,1 501 | 0.89247739506723,0.994096902184173,1 502 | -------------------------------------------------------------------------------- /libs/jq-fileupload-include/files/venn3-500.txt: -------------------------------------------------------------------------------- 1 | 0,1,G 2 | 2.89381037390902,-2.02737866820419,0 3 | 0.377088237634081,-0.578164343994797,0 4 | 1.42127645915028,0.207662590744675,0 5 | 0.390174926064213,-0.988577178973621,0 6 | -1.57866798885608,-0.075358387488061,0 7 | 3.64023662867851,0.278695556596024,0 8 | 0.867808249356493,-3.23875921390642,0 9 | 2.88636793827438,-0.950062432788226,0 10 | 1.54565866557221,0.995120874336913,0 11 | 2.72601602341751,2.59066581821923,0 12 | 2.04090582359133,1.09007557593774,0 13 | 1.59361644049009,0.572426217779334,0 14 | 2.87038342737725,-1.74450208576998,0 15 | 0.423398115780236,1.23826750973864,0 16 | -0.805527405700989,-2.39951776733488,0 17 | 1.34249195068712,0.954132341383598,0 18 | 2.17467432725359,0.658147725102335,0 19 | 0.96545355068573,-1.29392769526971,0 20 | 2.21255091705622,0.77066841790657,0 21 | 3.75213763363335,-1.25575319894996,0 22 | 1.86005859312129,-2.18420861091356,0 23 | -0.258100884402293,2.33978799341517,0 24 | 3.65272888842974,-2.77983246276982,0 25 | 1.13307990485989,-0.485247040402748,0 26 | 1.13072146250164,3.05958324228293,0 27 | 0.585106828108415,1.66058500792402,0 28 | 5.01756052513042,-0.11218719725438,0 29 | 1.33627511761413,-1.06383908073262,0 30 | 1.76865141045441,3.81452723894896,0 31 | 0.117923250247075,-1.57386671084971,0 32 | 0.840196548769395,-1.05105764270743,0 33 | 2.29996306714245,-0.781039019132487,0 34 | 2.25969562201737,-2.55784612530684,0 35 | 1.11530140787548,-0.479778027079619,0 36 | 6.18627026135909,0.918882754960368,0 37 | 2.20634008771214,0.0912748066557157,0 38 | 1.41159495736829,-0.362443614170568,0 39 | 0.82928135567994,-0.596312754767943,0 40 | 2.42137725511075,-1.16345008022177,0 41 | 1.06076110423695,-1.42990880769304,0 42 | 2.74276655570476,-0.721406128801604,0 43 | 2.43880502781251,-0.21660877832212,0 44 | -0.107958297526779,-1.12974816060098,0 45 | 4.57129052288276,-3.76454153233342,0 46 | 0.995048063189477,1.61731676855004,0 47 | -0.00685761607092106,-1.72701493308047,0 48 | 1.20743462820849,-1.77906975190798,0 49 | 4.52351232518828,-2.64329273366318,0 50 | 3.80607212141012,-0.604009476755217,0 51 | 2.21283331584964,0.140611045019485,0 52 | 4.94913133417383,0.202983747671867,0 53 | -1.09485152052257,0.345242392085944,0 54 | 2.89647055572971,2.01412678780148,0 55 | 2.55224949726848,0.0720610944912213,0 56 | 4.02304679433645,-1.2786213421128,0 57 | 3.14648936078795,-0.291827733536318,0 58 | 2.39264184210917,1.00752186594505,0 59 | 0.00121863642379183,-0.744116476413353,0 60 | 1.28963312674225,1.358789327888,0 61 | -1.94131693935736,-1.73348291592815,0 62 | 0.418702347720576,-0.087183403356753,0 63 | 1.3901586205745,0.706208977381304,0 64 | 0.878103646288015,0.706147611666817,0 65 | 2.34617196953841,0.921602188611314,0 66 | 3.93444544082593,-0.511581029591689,0 67 | 4.98207865707035,1.22319439856818,0 68 | 2.21859618208618,-0.351356954023431,0 69 | 0.592943609815478,1.42822748816857,0 70 | 2.16665333031425,-1.31876056913121,0 71 | 0.970370938712493,-1.73897164225663,0 72 | 2.33127637553838,-3.00188574317369,0 73 | 2.12692645446732,-1.97270191671584,0 74 | 3.48024694937664,0.513668164056718,0 75 | 4.96201710760993,1.46489152776661,0 76 | 1.72455614833751,-2.38144080583826,0 77 | 2.1755493347537,-0.354497781475965,0 78 | -0.113456631550337,1.10101174321602,0 79 | 2.75023072255286,0.486848118394119,0 80 | 3.89668805672697,-1.66697430971609,0 81 | 4.74728327766839,-1.05843684902213,0 82 | 1.69156064953043,0.169424644431011,0 83 | 0.884472917585499,2.44784517651817,0 84 | 2.23291306671943,-2.05461335431274,0 85 | 1.35469270019162,3.09604798742885,0 86 | -2.18788346621567,0.767049390602305,0 87 | -0.288920998309028,-1.87630929672442,0 88 | 2.56986218041091,0.333472873651062,0 89 | 2.8283015099501,-2.24426153930124,0 90 | 2.11065411833484,0.664967676150572,0 91 | -0.216288317859438,-0.377540710253771,0 92 | 2.0110206024521,-1.28250723290796,0 93 | 2.02916336136513,-0.274413205015654,0 94 | 0.107280104250751,-2.17902662962903,0 95 | 2.41874433777929,1.65108241399836,0 96 | 2.48359708131612,-1.8785687041018,0 97 | 1.93290840266422,-0.779928919903376,0 98 | 3.12411805099549,-1.35679815081442,0 99 | -0.0404014196247644,-1.90520192856319,0 100 | 0.100530052480644,0.848451101381973,0 101 | 3.57418736258275,-1.67793135292716,0 102 | 2.56331759418793,-0.591685156029915,0 103 | 1.30648385983462,0.255134829530892,0 104 | -1.51627894440881,0.650655496608091,0 105 | 0.333727683139499,4.634340819829,0 106 | 6.03046296381784,0.237085806769287,0 107 | 0.0594071154682185,0.151631813331908,0 108 | -0.415618596379007,0.140456450996103,0 109 | 1.47419812175628,-0.323398812985289,0 110 | 2.58870243629098,2.85885373063733,0 111 | 4.93492090888628,0.841123562504354,0 112 | 2.91630723752613,-2.07347596047541,0 113 | 1.39504537817631,0.996592579340677,0 114 | -0.00222630681447722,-0.746729526398511,0 115 | 2.76118566234421,-1.43311261226078,0 116 | 2.48439215854642,-3.24091531144088,0 117 | 3.02405731064943,0.661657762458872,0 118 | 1.35731466827071,1.23688204362439,0 119 | 1.18579901789583,-1.26171724138642,0 120 | 2.9619105628405,-2.1737755714327,0 121 | 0.522302372363922,-0.581115644091755,0 122 | 3.68376886560163,0.515954434074699,0 123 | 1.49687920814279,-1.84924873817315,0 124 | 4.39352300046269,0.9694996820869,0 125 | 0.984369750166618,-0.657159437119702,0 126 | 1.79344589195261,0.321837548582884,0 127 | 2.36692079295155,0.770118969640785,0 128 | 1.1461023449244,1.28044796907597,0 129 | 0.632262646546784,-0.812930895724151,0 130 | 2.46923960373863,-1.11376832466663,0 131 | -0.795930556665214,-2.69157422879187,0 132 | 1.30579250516451,0.784252013218103,0 133 | 2.21831478397008,1.08078626064444,0 134 | 2.52598006761661,0.459153286823074,0 135 | 0.0759285570457586,-0.666731340927739,0 136 | 4.7057210640081,0.903608067418738,0 137 | 1.34436684323795,-4.75130300454565,0 138 | 2.45633993432948,1.42645073033656,0 139 | 0.537417591748799,0.858368242173471,0 140 | 0.739468474875946,-0.139117836035657,0 141 | 0.48107736941582,3.89892459371051,0 142 | 0.57758515418125,-1.61841880084276,0 143 | 0.800366227836495,0.285652568918966,0 144 | -1.2359233393096,-3.88478021663228,0 145 | 1.02798332288098,0.383964420366922,0 146 | 1.94510427543888,-1.43459316598802,0 147 | 2.03275739268689,1.68836666038752,0 148 | 2.34882191766158,1.26442313963148,0 149 | 0.733255239137241,1.59573748599125,0 150 | 3.07455244678516,-0.0638802491528517,0 151 | 2.46881901035658,-1.55630236568585,0 152 | 1.79961123816322,0.438160214117526,0 153 | 1.80102719138649,-0.297249844410196,0 154 | 3.96563421382305,0.400811939148341,0 155 | 1.25997200405851,1.37481219400135,0 156 | -0.585525983025678,1.54464175599783,0 157 | 0.801021065373153,0.415191204750117,0 158 | 3.22387699414487,0.287551085877783,0 159 | 1.64687860390624,0.448476488111902,0 160 | 2.85543783520061,-0.921051272294567,0 161 | 3.07219050060834,-0.956777583580582,0 162 | 0.513529017812029,0.28123579511797,0 163 | -0.432923873558504,2.81985347743973,0 164 | 2.41136603763891,-0.9745677464115,0 165 | -0.674136278136106,0.707598303941658,0 166 | 4.19544153774479,0.0422296134518184,0 167 | 1.30126927487132,-0.619800980076439,0 168 | 3.63419530380823,-0.998054341792029,1 169 | -0.741402632435743,-1.10053988940489,1 170 | 0.0557615007615105,0.0629727743465668,1 171 | -0.482141054734548,-0.54498449997455,1 172 | 0.0377326645417996,2.26924493823792,1 173 | 1.61350794238373,1.5236809551037,1 174 | -0.707414894610593,0.557435091450354,1 175 | 1.75440873739124,0.928082015596199,1 176 | -0.810581799932877,-0.325228658848678,1 177 | -0.497793119357307,0.365337083303524,1 178 | -1.11417480517612,1.82842653248071,1 179 | -1.46296426101378,0.315691388667259,1 180 | -0.620842298102548,-0.419773111650364,1 181 | 2.01259397803237,2.78302412699483,1 182 | 1.6175164822547,-1.45783592757812,1 183 | 0.135087521728561,1.36900913753956,1 184 | 1.15127775548171,0.530591162475438,1 185 | -0.0777736127398991,0.734682052661926,1 186 | -1.64140453726326,-1.71268509613233,1 187 | 2.19803364385229,0.034535692240928,1 188 | 2.3040332052069,-0.577664313824899,1 189 | 1.12649582198302,-1.08160879865583,1 190 | 0.818491072391653,0.55441039543444,1 191 | 3.38688556865817,1.561603555492,1 192 | -1.62560016146843,-1.0479535695918,1 193 | -0.968827842903036,1.80071240673893,1 194 | 2.47875119109838,-0.469607173142123,1 195 | -1.73922204888341,1.85722577194318,1 196 | 1.60219904076099,0.732822341197547,1 197 | 0.139599699988531,-0.651993758240555,1 198 | 0.952206391897126,0.989010393402491,1 199 | -0.0720192986408328,0.0664954857657327,1 200 | 0.622770282759138,-1.09030732737984,1 201 | -0.249494904291507,-0.627378659691766,1 202 | -0.281113806159173,1.40886326560662,1 203 | -0.816603487041808,-3.62847213510277,1 204 | 0.692566833320311,-0.790506025848437,1 205 | 3.79037066193166,1.17459898577109,1 206 | 0.46112874348109,0.551379610468994,1 207 | -1.96555561972489,-1.36935409953252,1 208 | 3.023417111149,1.45472642266593,1 209 | 1.07715713994432,-1.77334161684427,1 210 | 0.265960501208906,-1.91381762251502,1 211 | 0.283868730693985,-0.354892514542955,1 212 | -0.0416664759135869,-0.538676541167143,1 213 | -1.96482844402756,-2.10189307448842,1 214 | 3.4767758861062,0.219844734351109,1 215 | 0.266031042569459,0.984194341458444,1 216 | 1.50151800428486,-0.278106249888065,1 217 | 0.754275629460462,-2.05402000084367,1 218 | -0.965973441933118,-1.31977679716447,1 219 | -0.438183675123888,-2.0907121046396,1 220 | 0.55152518187434,-2.62960056830329,1 221 | -0.51117768519312,0.0799676656196628,1 222 | 0.824852660686255,2.07542057187424,1 223 | -2.25258214036591,-0.15854039898298,1 224 | -0.201335422953941,0.809562360461663,1 225 | -2.10791343379615,-2.28883833451807,1 226 | -1.18416785274316,-0.872455224456012,1 227 | 1.91378532181053,2.21721835730857,1 228 | -0.728581864673521,1.76856617108135,1 229 | 2.10386841043955,-0.0556077720905,1 230 | -3.51511287603586,-0.578120915854911,1 231 | -0.656950466240727,-0.303020168343818,1 232 | 0.0569036640388034,-1.45828365935036,1 233 | 0.507797021219522,1.12333611825154,1 234 | -0.212107616044078,-0.407526319255579,1 235 | -0.695181886625073,-1.9559556876579,1 236 | -2.0465209707692,-1.71072494596741,1 237 | -0.323104548095547,-4.24906171279028,1 238 | -0.266170886931684,1.55696665567841,1 239 | 0.824629850579894,0.278162691238425,1 240 | -2.59133131988241,-0.0463045109561573,1 241 | -3.50630424180472,-0.296494188009377,1 242 | -0.199042436707441,1.07666320997961,1 243 | 1.08961148660338,2.19530862637343,1 244 | -1.34641487195784,-0.0751203351987669,1 245 | -2.64372750591292,-3.03547283550682,1 246 | -0.393841399464603,0.715908696423948,1 247 | 2.81096478172893,0.965984272242746,1 248 | 1.36374682429787,-1.99464266629363,1 249 | -0.618903584204346,1.08168094626685,1 250 | -0.139371557883298,0.972415224679821,1 251 | -1.41785664785479,-2.00027431821428,1 252 | -0.68381507628015,-0.809815004410979,1 253 | -1.03646889358513,-2.58291716042963,1 254 | 1.30546917033775,1.35543257614768,1 255 | 0.0036658584873235,-0.620625099347069,1 256 | -1.6368938729249,-2.2543456191028,1 257 | 0.906423621802466,-1.8152128412483,1 258 | 1.35342554753231,-0.138388465860848,1 259 | 4.36716761237115,1.08554811599719,1 260 | 1.26248399508335,-1.09488980169332,1 261 | -0.00638815999834316,-0.650352255254969,1 262 | -1.77995230452861,-0.861292039981144,1 263 | 2.18555291457323,0.257504493638947,1 264 | -1.84172818216482,0.103959505623429,1 265 | -0.941907069100135,-0.881573049435476,1 266 | 0.950456083173766,0.508991753544226,1 267 | 1.35942257627812,-0.277421298242653,1 268 | -2.05667973119759,-0.486813301435665,1 269 | 0.0217432506676693,-0.882100668584022,1 270 | 0.593606933564936,-3.44692550454544,1 271 | -0.682167044964811,-0.864004985606305,1 272 | 0.828372296984318,3.91470522618728,1 273 | 0.368761794841809,-1.25768196125951,1 274 | 0.334997051387005,1.39202922102223,1 275 | -1.75461879630742,-1.4729621439442,1 276 | -1.04868832650061,-0.299844187765504,1 277 | -0.592447181866847,-1.33811426753522,1 278 | -0.770476499064142,-1.07954884418735,1 279 | 1.47993271647287,3.18803565382522,1 280 | 0.513989737178592,-1.5041672229256,1 281 | 0.728202422292395,0.139287997438856,1 282 | -3.41909555070023,-2.76461326032874,1 283 | 2.17429083286757,1.42572506019741,1 284 | -3.28384041459296,-0.968041440686525,1 285 | 1.23424794116497,1.07967179633837,1 286 | -3.5015746699846,-2.85995247873523,1 287 | 1.64196056720626,-1.57766677904163,1 288 | 1.33080307818428,0.553701411288793,1 289 | 0.193589743787485,0.0480386503270993,1 290 | -2.34838009583285,-1.75438589290089,1 291 | -1.03051044560016,2.14591922774479,1 292 | 2.42263751594602,2.20665997673425,1 293 | 3.84691734804242,0.356713153519433,1 294 | 0.217090298011412,3.34743589430459,1 295 | -0.200416413179609,0.373294915710915,1 296 | -0.321112203193112,-1.05762510269546,1 297 | 0.0474304420529238,-0.588733055519483,1 298 | 0.192777871062335,4.43323379903815,1 299 | 2.35052678234156,1.23123198253774,1 300 | -0.738713599036314,-0.534149209928496,1 301 | -0.429109447191572,0.126031009617991,1 302 | -0.0854614705724031,-0.362140321730712,1 303 | 0.768355013717978,-2.05093709659967,1 304 | -2.23940475240566,-1.10082617645783,1 305 | -1.66868031074535,1.2504305561662,1 306 | -0.488471122911373,0.713727218406298,1 307 | -1.04117320365328,0.727038666563345,1 308 | -0.795613418873514,1.84878774668102,1 309 | -2.54549301819546,-0.299011215919522,1 310 | -0.250284134674305,-1.07453909073188,1 311 | 0.522645203838453,0.955159555253918,1 312 | -0.615468209278278,0.489279645387493,1 313 | 0.00447399214199018,0.572993695090683,1 314 | -0.554306081850477,0.853456768353535,1 315 | 2.20122816542663,0.340750281897397,1 316 | -1.45966355605544,-0.986921789783475,1 317 | 1.59998243536964,1.82157245542387,1 318 | 0.472981618819688,-1.49366707515184,1 319 | 1.93674971688035,1.04324113266072,1 320 | -0.00357143248498222,0.781512126689471,1 321 | -0.482193264002181,2.69952470251074,1 322 | 0.271756069206497,-1.66070656564289,1 323 | -0.497071333204749,-0.0728614622447221,1 324 | -3.38823069818327,0.760418908201993,1 325 | 1.0455615744131,0.0947696521150252,1 326 | -0.00294305270483642,1.1351624499645,1 327 | -1.28410387544133,0.193270983071711,1 328 | 0.591190987703396,-1.27346980938565,1 329 | -0.226573332808174,-0.988466495832531,1 330 | 2.1345820278078,0.704315780413216,1 331 | -2.92198345220713,-1.74887584692579,1 332 | 0.20148904413826,-0.875924268347078,1 333 | -0.0932363751314567,-0.0257722989629692,1 334 | -1.35289714671641,0.440095148512631,2 335 | -0.317806879413722,2.26911289149594,2 336 | 1.20995096164979,1.02266487419959,2 337 | 1.85353174615861,-0.235988594601952,2 338 | 0.253338247286041,3.08578693549383,2 339 | 2.15422975905616,2.79396695968907,2 340 | 0.515090452621589,-0.124572578789231,2 341 | -0.522626683874652,-1.93248431609336,2 342 | 1.29188361293491,-0.570990807890604,2 343 | -1.53853535546646,3.570748520832,2 344 | 1.96604608719174,-1.27584602326122,2 345 | 1.15510717208418,1.39917852650086,2 346 | 1.46068075267687,0.417589166666875,2 347 | 2.47493490020357,1.11803321629677,2 348 | 0.275748515403293,-0.657988481059244,2 349 | 0.189387768445079,1.78979077635699,2 350 | 2.63995259327872,-0.496159147477822,2 351 | 0.576323443247261,3.50525315343816,2 352 | -0.826517589868938,4.27302966422136,2 353 | 0.392265671150502,1.85199947149572,2 354 | 0.678954066582647,1.24084452503755,2 355 | 1.74667890766511,0.76981772771512,2 356 | -1.52248524015035,-2.83926410435992,2 357 | 1.07402101887816,1.40962981990521,2 358 | 0.590883480140943,1.30537075404319,2 359 | -0.353677291473876,-0.312578238617662,2 360 | 3.16698902656566,1.58456899788,2 361 | 2.90467404267809,1.08741176713964,2 362 | -0.121839506071958,1.00846917012044,2 363 | 1.49441169669001,1.84028310563462,2 364 | 1.10698422962792,1.01167990398873,2 365 | 0.904477071868542,1.61910306099037,2 366 | 0.980063456223913,0.60584836876494,2 367 | -1.44052483946545,3.96511259933925,2 368 | 2.70948363735739,3.0617776007994,2 369 | -1.10117751059453,-0.825175589696491,2 370 | -0.303165471665272,1.70848962222544,2 371 | 2.43895668951987,1.7683213484547,2 372 | 0.054267716121752,0.683040634559346,2 373 | -0.447603513878978,0.679335685670466,2 374 | 4.81998463061238,1.72074521233697,2 375 | -1.91454489180594,-0.147968282988998,2 376 | 0.502151480746586,4.09377577821539,2 377 | 3.47543110430879,-0.746876326030874,2 378 | -0.322270326000287,1.74420311800067,2 379 | 0.829924471897701,-0.60664463531034,2 380 | -0.218530789367566,-2.16190058901751,2 381 | 2.11880525426326,-1.48490184835504,2 382 | 2.06562365336585,0.978662714040402,2 383 | 0.517415959567921,1.75916211150514,2 384 | 0.904104994955814,1.56179822684505,2 385 | 1.68937638191069,-1.17067251222395,2 386 | 0.463670334339966,2.21296341631838,2 387 | 5.76882497333889,2.54415432592705,2 388 | -0.27493664556993,0.0793537141694527,2 389 | -1.07637360198609,-2.04322486741095,2 390 | 2.98962834553707,2.1993088138979,2 391 | 1.20967394678476,-1.85740156946415,2 392 | 2.46647325231254,0.0178799435922667,2 393 | 2.92726473273657,1.94426130388947,2 394 | 1.23367170082928,1.21721823498987,2 395 | 2.4694910595974,0.828922250619571,2 396 | 0.202883262244402,-0.471573839788648,2 397 | 1.4654327588082,-0.413437620244336,2 398 | 1.11050897913155,2.27232274094306,2 399 | 0.803249223883721,2.49094675766273,2 400 | 2.80799369605032,0.753638444606832,2 401 | 2.95040268738642,1.00877273117824,2 402 | 0.488629048681443,-0.546317675846371,2 403 | -1.47582287346437,1.98640052398382,2 404 | 1.11891010820856,-0.905396335582446,2 405 | 2.20394850432475,1.29708214563797,2 406 | -0.968333540876218,2.97034311665188,2 407 | 2.30121997617341,0.515047888657679,2 408 | 1.88191684165869,0.749287183672074,2 409 | 2.18589293555478,2.24438657068798,2 410 | 0.922622249522152,3.07163309010486,2 411 | 3.34746254789085,1.98411161043802,2 412 | 4.45157211890204,0.754676885945802,2 413 | 1.16754445848063,1.77751302020726,2 414 | 2.16874805361543,2.80101591779434,2 415 | 2.45952645332124,1.58887849423672,2 416 | 0.496600657674514,0.601866848822337,2 417 | 0.84268947648894,4.288975707727,2 418 | 1.94704848692467,0.493227761102179,2 419 | -0.0105101897307693,2.51658771785227,2 420 | -0.153730323627147,2.17119084557096,2 421 | 1.7599803046493,1.15909623447918,2 422 | 0.149897983393572,3.14706219853996,2 423 | 1.58980233729528,-0.245756036271664,2 424 | -1.00300142807156,1.00792235948662,2 425 | 3.06695977363895,0.503095963698116,2 426 | 1.18328607627002,2.20986440875542,2 427 | 0.0947031269213818,0.994379447822461,2 428 | 0.274924425648795,2.1210005185233,2 429 | 0.908166404066577,1.62636576300161,2 430 | 0.617046822352395,-0.815744201340511,2 431 | 2.04442128771633,-0.078094325153204,2 432 | -0.0207146378318557,3.27561639637832,2 433 | 5.16675300622123,-0.283970179873604,2 434 | -1.64503703209849,-0.0865665552999331,2 435 | 1.19196737496844,-0.624590791348215,2 436 | 0.937147489331537,3.49579685071042,2 437 | 0.680310626154717,3.1001229346905,2 438 | -1.42695438109504,3.67453524846468,2 439 | 0.211261158724403,2.19180080963398,2 440 | 1.38286890407517,1.40742516546002,2 441 | 2.01999953724428,1.4754735635397,2 442 | 0.506286741526426,1.96598765876216,2 443 | 1.50251497244063,3.4246369630188,2 444 | 0.649243297493722,0.247867060646593,2 445 | 2.28128591481982,0.222490279398721,2 446 | 0.349353048625975,-0.367320316715515,2 447 | -1.48681910599839,1.00155766686456,2 448 | 2.33680530263372,-0.662963813247978,2 449 | 2.28727334085481,2.00361412634869,2 450 | -1.31392062843718,-0.998662900161662,2 451 | 1.00334401312874,-0.628873272276755,2 452 | 0.0929987851615988,0.521394080004284,2 453 | 4.32023009057998,3.29204748937094,2 454 | 2.25474362147264,-0.0337568432478736,2 455 | 1.47285789900046,1.53984193876215,2 456 | 2.41839943491317,0.645024220081019,2 457 | 0.834287919667728,1.50499645522167,2 458 | 1.77741884967989,2.4235223898428,2 459 | 2.32725155459133,4.11810523486664,2 460 | 0.345673217098385,3.89413201736998,2 461 | -0.925348217047837,1.4487035599899,2 462 | 0.228855546273914,3.66780361726062,2 463 | 1.02624911272102,1.35027903681416,2 464 | 1.33006575306215,1.86930204285828,2 465 | 0.354317289872612,0.312910922980845,2 466 | 0.288877903990257,3.41612575699326,2 467 | 0.563501236913378,0.629602085578548,2 468 | 0.0163826336594286,0.800590758174431,2 469 | -0.110277810173434,1.07321250725617,2 470 | 1.20099073635782,2.03677301964087,2 471 | 0.273313648799885,4.46828898804421,2 472 | 1.05259992870253,2.22466750686045,2 473 | 0.16589047790598,1.52280413597756,2 474 | -0.709162488834484,0.804601363114184,2 475 | 0.876390495727598,2.140684724653,2 476 | 3.11272210865606,0.74260523195261,2 477 | 2.67732964911918,0.849061043840486,2 478 | 2.02382925465471,1.2623611153348,2 479 | 0.305801384206366,0.634880083534783,2 480 | 1.07707902090248,-0.0941086921277146,2 481 | -0.595940668212757,1.63474086707101,2 482 | -1.24393565599207,1.92148886958644,2 483 | 0.878211069614115,2.62664742784459,2 484 | 2.02224985142806,-1.58433855612851,2 485 | -1.17825375835224,0.324360042245832,2 486 | 2.721763510674,0.630710091942542,2 487 | -1.86706549305292,1.99526048237495,2 488 | 3.11260476357008,0.134353574651286,2 489 | -1.9428037839807,2.11092981852364,2 490 | 1.49838999237299,-0.594276766005061,2 491 | 2.03619509184423,2.94607206573358,2 492 | 1.05907483030499,0.474615833148632,2 493 | 0.483030763518381,-1.94351249171722,2 494 | -0.0874203107075511,0.132672547942591,2 495 | 3.76237993561004,-2.18744412993254,2 496 | 1.68644227397857,0.801896362375885,2 497 | 2.49320632212857,-0.73207604850541,2 498 | 4.24570913302199,-2.82747612986185,2 499 | 2.43253493100879,3.73777193703636,2 500 | -------------------------------------------------------------------------------- /libs/jq-fileupload-include/files/venn4-500.txt: -------------------------------------------------------------------------------- 1 | 0,1,G 2 | 2.37891369132446,1.27209352226474,0 3 | 3.58061343445164,-1.66943641088039,0 4 | 2.02416922404629,2.50579194471146,0 5 | 1.42330198666951,-1.63671162208397,0 6 | 0.699866370261464,3.1490049317391,0 7 | 3.68464181097731,-0.392197264901646,0 8 | 1.31990708001214,0.226314877945979,0 9 | 2.34612289863246,-0.384628472359226,0 10 | 2.90680858313104,2.81455295774653,0 11 | 4.44709348231708,-0.226980548824964,0 12 | 3.59219318930115,-1.63469442240859,0 13 | 0.819295102996734,-1.36383772592906,0 14 | 0.387542051236162,-2.15402981572255,0 15 | 3.27586329421904,3.34238067804385,0 16 | 3.65003098126223,1.49688779966689,0 17 | -0.394759298158877,-2.44190855604046,0 18 | 3.21461362030788,4.79182849523644,0 19 | 1.79434120887899,-0.939442311541206,0 20 | 3.88287038774886,-1.5980724977343,0 21 | 2.56147373056786,1.36418994737208,0 22 | 1.01816307174593,3.12388396516696,0 23 | 1.41961127593418,0.722963234168863,0 24 | 0.258052603512242,1.28887059578905,0 25 | 1.49686348608335,-0.911350141257607,0 26 | 0.989845444294877,-1.14468203949915,0 27 | 1.01151479146982,1.70964155490671,0 28 | 2.94973650070627,0.82768432114612,0 29 | 3.88435061226225,1.59660937578504,0 30 | 1.95751471541802,-0.436842614851609,0 31 | 3.28124208426008,3.92727698110024,0 32 | 0.778100169467282,-0.61194732520493,0 33 | 2.01263077367427,0.664547621139646,0 34 | 2.14298539092708,-1.65359446225676,0 35 | 1.33064021083467,0.481869551961242,0 36 | 0.133684382481365,-0.645957549825207,0 37 | 2.57427622799486,1.09737629522749,0 38 | 2.39153929791992,-2.10697267780216,0 39 | 4.29072203280983,-1.685333027354,0 40 | 0.399700860008159,-0.840480994906484,0 41 | 1.77123861745126,1.10905645820014,0 42 | 1.56340091620162,0.873342639930152,0 43 | 4.57964173222994,0.512957874129537,0 44 | 0.924722611249901,-2.1511633401208,0 45 | 4.37056296955503,-1.0638578406819,0 46 | 4.46199064423418,0.226443295543139,0 47 | 4.29094672094197,-1.25961769395681,0 48 | 2.01346511576229,-0.333924555289429,0 49 | 1.58607878305854,0.074290069684146,0 50 | 1.68193330273849,-1.45320571776802,0 51 | 4.21965020030433,-2.25918558253118,0 52 | -0.134101703464803,-0.635290890776501,0 53 | 2.17605613515704,-1.35645739551686,0 54 | 2.20824988632028,-0.490226118597343,0 55 | 3.91344494477072,0.357017039727425,0 56 | 2.13899109857816,-2.21579366075735,0 57 | 2.31498338784392,0.931774910658615,0 58 | 2.3724961767566,-0.0233141005195073,0 59 | 4.32231650100722,-1.43546824263334,0 60 | -0.270322939618926,1.1715155102786,0 61 | 0.434231335650941,-0.500189930177384,0 62 | 1.84491905221002,0.633878367173412,0 63 | 1.8496283766271,1.84330463707307,0 64 | 0.55373447517633,-0.196167945641035,0 65 | 5.30845949907978,-0.0957719109073749,0 66 | 4.26263860909333,-1.64784832816243,0 67 | 1.28757039876154,-2.58669633631914,0 68 | 4.16935167916311,0.272978099778713,0 69 | 3.32370865621151,-0.815226278966701,0 70 | 1.23030214462249,-1.1484138471877,0 71 | 5.00202249635658,-1.57304127591521,0 72 | 1.57740211724039,-0.889395875161535,0 73 | 3.01204355941437,1.03872379463157,0 74 | 4.71268882333695,-0.990872166695929,0 75 | 1.86241769172996,-0.37946760582938,0 76 | 2.80411311212767,-3.37273177695597,0 77 | 2.3138452834343,1.5438420660414,0 78 | 1.66023452747562,-2.46477358195041,0 79 | 2.03933176497719,-0.561685756028921,0 80 | 1.99363508277669,-0.984424923087293,0 81 | 1.8514853218918,0.854049909421921,0 82 | 3.167867592809,0.1678375163052,0 83 | 3.17350464499066,-1.53435233519394,0 84 | 0.491625619567389,1.70154324117223,0 85 | 0.788709735730276,0.552614641070738,0 86 | 3.30420654865643,2.02747054793986,0 87 | 1.87950463434753,2.89564295457581,0 88 | 2.14574335643724,-1.74138931903094,0 89 | 3.26275950915473,-1.29515720655377,0 90 | 2.85124113580037,0.456126567972728,0 91 | 1.33468876019985,1.49064529007189,0 92 | 2.32114318617916,2.07185505308776,0 93 | 2.28052305018511,1.47743990567595,0 94 | -0.0362822725772363,0.629433986625523,0 95 | 3.61872228825244,0.844986564453116,0 96 | 1.83228847594249,-0.933010892803502,0 97 | -1.29680973034791,-0.487898465537037,0 98 | 2.18341271621799,-1.47075019679668,0 99 | 1.12195513478224,-1.95539901764304,0 100 | 0.510541406320499,-1.82069897844983,0 101 | 3.86554870828102,-0.428232122217024,0 102 | -0.210879508265324,-2.82584525380292,0 103 | 0.38698268324523,-1.62191052279144,0 104 | -0.394129382709106,-0.954567407140954,0 105 | 2.33111692072732,0.780818970623922,0 106 | 0.793944419004502,1.25788907050812,0 107 | 4.10265644383424,0.309840522183921,0 108 | 1.67063764105884,2.10468552914547,0 109 | 1.85992831290207,2.91919041514037,0 110 | 2.12075287991901,-0.492211179372085,0 111 | 0.585877102768654,-2.32559196762132,0 112 | 2.2434517285359,-0.811624356614338,0 113 | 1.79993562297889,-0.220601296979994,0 114 | 2.37037646120319,-0.75466552816392,0 115 | 1.02260077402107,-0.37545595908484,0 116 | 1.803356073346,-2.28160438074377,0 117 | 0.187063020349848,2.21402124753059,0 118 | 5.26435939753772,-0.86399261040353,0 119 | 1.24363977122598,0.308219050218871,0 120 | 1.67005131807602,0.121229002225042,0 121 | 3.16899290794743,-1.52549661827787,0 122 | 4.05356677465156,0.384822192987192,0 123 | 1.99803936003747,0.535837115720634,0 124 | 3.47474071726408,-0.144019369329372,0 125 | 2.89990494150822,-1.7196119204448,0 126 | 2.44201387536819,-0.727799747075107,0 127 | -0.74036381925898,1.07678723102005,1 128 | -0.667452322513859,0.426842613763047,1 129 | 0.22856305748595,-0.662635071730252,1 130 | -1.71606644017633,-0.399294273506193,1 131 | -2.15752810548903,0.0533893072492045,1 132 | -1.20057393123871,0.400974249376458,1 133 | -1.85508515273351,1.24724403177418,1 134 | -0.524034643226727,-2.27019692465134,1 135 | 1.10013297537929,-0.557492535337795,1 136 | -2.77437859145419,1.34335498146952,1 137 | -0.364498371834058,-0.204318358814217,1 138 | 0.625314368831727,0.32087345742719,1 139 | 0.514577503727395,1.5360903379935,1 140 | 3.04062426906595,-1.22627761532532,1 141 | -1.19311873926185,0.0254242802653683,1 142 | -0.057086869137815,-0.708347862047713,1 143 | -1.43409038203139,-1.01200956028347,1 144 | -0.328390635324706,2.97502410205624,1 145 | -1.25089912534253,-1.81435077377724,1 146 | 0.363175130857308,0.316744590149428,1 147 | -1.51162234185528,-0.552561412834465,1 148 | 3.90858229423189,-1.00578150687456,1 149 | -0.606812970847723,-1.34715972669712,1 150 | -0.316980490241275,-1.88857088238881,1 151 | 1.04967431155471,-0.675319012018892,1 152 | -2.6767367303955,-0.462193676694427,1 153 | -0.122499043573845,0.151299135362385,1 154 | -3.24907609990385,-0.807278564846642,1 155 | 0.0231351582209546,-0.732472754081947,1 156 | -0.235885348850124,-0.540649457531011,1 157 | -0.6518571669411,-0.444761616150053,1 158 | 2.69712401580671,-3.0798550178573,1 159 | 0.154919786098108,-0.407364284431376,1 160 | -0.630640743915545,-0.487303656377788,1 161 | -0.942225607829635,-0.219612550445393,1 162 | 0.0446757266788018,-1.51842665482654,1 163 | -0.3036735023366,-0.262018247963151,1 164 | 0.226220813055717,-1.81317084033565,1 165 | -1.1422093259316,0.00126088924379994,1 166 | -0.2260024856221,-0.608239806068661,1 167 | 0.780181565511479,-3.29485231895348,1 168 | -1.34760678637155,-0.494605755940844,1 169 | -1.52005588403938,-0.247094542438083,1 170 | -0.500855474567999,1.62377116284348,1 171 | 1.36448165113546,-1.30261608308895,1 172 | -1.02554902022835,-1.20381360013467,1 173 | -0.89796036787709,-2.01756881887073,1 174 | 0.772569022344749,-0.668113284801102,1 175 | -2.43538127883178,1.13682684403112,1 176 | -0.00272890610841219,0.271817255497438,1 177 | -3.48299823121644,-0.65337318971776,1 178 | -0.869288050425065,1.09419877781996,1 179 | 1.67082975299916,-0.688609036169542,1 180 | 1.26375575746875,-3.0013779144511,1 181 | 2.82099351153885,-1.06329276958251,1 182 | 1.16386103147739,0.214920077166386,1 183 | 0.035359871994249,-3.34968213568182,1 184 | -0.111914208867763,0.849739945573046,1 185 | 0.920092582477483,3.16773678741973,1 186 | -0.682732237299055,-0.000136600862020315,1 187 | 1.13638866308395,0.464948796312118,1 188 | -1.69333649062782,-2.80018709027632,1 189 | 0.101138692491266,-0.295054499765407,1 190 | -1.53313431838232,-0.0186117177522783,1 191 | -0.709421178029087,0.0845876897034818,1 192 | 2.44306871392381,-0.34064634645289,1 193 | 0.882198899670048,-0.932487054541375,1 194 | 1.5765672734606,0.471152960348171,1 195 | 1.10916356533382,-0.500060163727829,1 196 | -0.535158186159794,1.00135202213099,1 197 | -0.397101256510634,-0.644027624943012,1 198 | -0.701050922021343,2.11495935879414,1 199 | -1.69318351045606,0.425243197759267,1 200 | -0.686610988754948,2.65294918455015,1 201 | -1.94815535912304,-0.835158690656153,1 202 | 0.107437741117295,-0.901374985490593,1 203 | -2.39233293021067,-2.96624581441045,1 204 | -1.92313590912805,1.21576380375587,1 205 | -0.483410152484,0.297458916173314,1 206 | -1.32401183852744,-0.264763569780153,1 207 | 1.5088809231159,-0.363799799430209,1 208 | -0.217288767495365,0.552571573764765,1 209 | 2.32426344687391,1.55135081816727,1 210 | -0.259513890638286,0.109885384095673,1 211 | -1.55711435684595,3.10477829889479,1 212 | -0.677608362777026,-0.00780160590819021,1 213 | -0.32650355758345,-0.998688517662492,1 214 | -2.03540438006239,1.04742939842414,1 215 | 0.0657208509763637,2.99914942173379,1 216 | 2.66780714516499,-1.36539099577873,1 217 | 1.82702282505024,0.841332510102064,1 218 | 0.528384755738677,-2.16017004445317,1 219 | 1.94098763949308,0.58986729926581,1 220 | -0.408140937112074,3.02858858200766,1 221 | -0.796936882934661,-1.54732139358161,1 222 | 0.144580960796922,0.375149904776031,1 223 | 0.300717779538048,0.0291607403946225,1 224 | -1.84802148845351,-4.07583241611123,1 225 | 1.8359811867296,0.0504406905215806,1 226 | -0.270128583180177,-0.490402538376945,1 227 | 0.689371816729405,-5.30142034412043,1 228 | 0.783477027312969,0.775008522919255,1 229 | 0.195041262104165,1.32318323108016,1 230 | -2.14970933988019,0.678501819480894,1 231 | -1.48680649072465,-1.79654555204652,1 232 | 1.24910885022929,1.25700361338177,1 233 | -2.501403583759,-1.16576577733161,1 234 | 0.945615379370685,0.786266562794908,1 235 | 2.83875241329341,-0.284905113420086,1 236 | 2.41154189230639,-1.26020099272065,1 237 | -1.36701338936985,1.3133895717934,1 238 | 1.78435811223351,-0.632246228682795,1 239 | -0.884543733777869,0.727226695613371,1 240 | -0.666983478374847,0.143376458856041,1 241 | -0.619837664147948,0.385908264525211,1 242 | 2.9094014987491,-1.56771975968739,1 243 | -0.498917719926931,0.100491147080047,1 244 | 1.3608915164162,-0.899697667655355,1 245 | 1.48772738453479,1.40595318325275,1 246 | 0.342788191462366,0.474190684315658,1 247 | -0.533839752667263,-0.739740050071898,1 248 | -1.0584351987572,-1.15051599264401,1 249 | 0.222397382888298,0.390556830994535,1 250 | 1.23678286378909,0.999120840168611,1 251 | -0.545265026462406,-0.297952853665549,1 252 | 0.605493634396864,0.366836538739598,2 253 | 1.86832661989642,1.9147291711197,2 254 | 1.39676421346504,1.93557638698357,2 255 | 1.97038485337515,1.72708797827156,2 256 | 2.12543736757541,2.33780206441111,2 257 | 2.23830673173161,-0.78099652153076,2 258 | 0.0237904015412262,-2.79710500722639,2 259 | 0.431980992617851,1.55097958241409,2 260 | 2.02901616419177,1.37221528728381,2 261 | 2.53158931539799,1.92553368255221,2 262 | 0.22657786837543,1.83359537204053,2 263 | 0.10960792222225,3.07414982121883,2 264 | 1.04372115900332,2.13206389471958,2 265 | 0.8455714380786,2.09462132202154,2 266 | 1.27351558152535,2.01754787808448,2 267 | 2.64068800809646,0.307880753817281,2 268 | 2.35433508345334,0.453943194581639,2 269 | -1.39478238328012,0.463296765959459,2 270 | 1.43904947085832,2.55504965085474,2 271 | -2.13382704408804,0.243374708607871,2 272 | 1.68428363772429,0.719043201172786,2 273 | -0.860010555534569,2.30383399026025,2 274 | 2.42152282654506,0.47216621917534,2 275 | 1.20149909171435,2.01911087850676,2 276 | 1.50627096567011,1.83639954500092,2 277 | 1.08198717703744,1.11215719576525,2 278 | 1.89376255681549,2.04236929230614,2 279 | 0.835531623547302,1.30946671984311,2 280 | -0.58672567049098,-1.78501433893172,2 281 | 0.871668240627766,2.86635073782589,2 282 | 0.0731323567126452,3.13199517155724,2 283 | -1.06168848834019,-0.82327239871456,2 284 | 3.96177751320856,2.28443692752366,2 285 | 2.62589699198737,1.19343231738483,2 286 | -2.26936865855391,3.52589416261816,2 287 | 0.695087562092947,1.07228114849854,2 288 | 0.0333337713228667,-0.0378042117978059,2 289 | 1.02189593833016,1.30345333749103,2 290 | 0.586361080591155,0.990784120995002,2 291 | 1.08378669906146,0.785545250966769,2 292 | -1.99620324066384,-0.335066423190193,2 293 | 1.55184242926958,1.56555749725546,2 294 | -1.80831118930772,0.207014339873229,2 295 | -0.639786164718667,2.00918087336351,2 296 | -1.09340493864637,2.56638900191026,2 297 | 3.08427844017003,0.420237154848589,2 298 | 2.68496104786619,1.66367660357094,2 299 | -0.0452231266440704,-0.273883779283917,2 300 | 1.19412371713467,1.09844439205082,2 301 | 1.57860111698798,2.22847318220383,2 302 | 2.81710084495958,1.03142348747051,2 303 | 0.12597082699347,0.404149081397774,2 304 | 2.1291555161053,-0.512664130329628,2 305 | 2.61754160428019,1.43246320084441,2 306 | 0.531976810264936,0.391543466991938,2 307 | 1.08182140266127,3.85242952445352,2 308 | 2.37148854294016,-0.449833753828533,2 309 | -2.32189454366967,3.71494482074036,2 310 | 1.02842624073572,-1.31204954675055,2 311 | -0.326346405469315,0.0560203783675964,2 312 | -0.147187328622096,-0.526553367626573,2 313 | 2.35315785861802,-1.12807419044656,2 314 | 2.9647487642244,0.822991345788967,2 315 | -1.17893690722663,0.0746011078212764,2 316 | -0.0877431663249117,-0.980033168021569,2 317 | 0.261230471558479,0.414227219549501,2 318 | -1.17338219491891,1.7349772053989,2 319 | -0.517331009354392,1.02185803498202,2 320 | 0.654886490609113,0.274189667582743,2 321 | 4.1561323612087,-0.777326931058015,2 322 | 2.56087566567167,0.630464619677642,2 323 | 1.55704302153827,1.05108954538762,2 324 | -0.661051882752882,1.1711050964553,2 325 | 2.31739681677926,0.353659244750111,2 326 | -1.61963700336937,2.64469069949472,2 327 | 0.921126270699395,3.48025407661771,2 328 | 1.03618812490005,-0.834279596028366,2 329 | 1.74879940266004,2.64732425400124,2 330 | 0.868204456065999,0.910343759376098,2 331 | -0.779539678777402,-0.54129241989015,2 332 | -1.92160196013773,1.55331978032562,2 333 | 1.85951187552556,2.91617204537756,2 334 | 0.763484519104416,1.8446715242193,2 335 | 1.6835765079366,1.23060599819121,2 336 | 3.67777942721632,0.654185394373924,2 337 | 0.561585120239632,0.999985623712168,2 338 | 2.91246651297797,-1.17130902076494,2 339 | 0.837265126988721,0.895896695217298,2 340 | 2.70908892331906,0.570872034934402,2 341 | 2.15612726953028,-1.5722512485498,2 342 | 1.5532920767068,1.591489419706,2 343 | 1.55183672810243,3.47302892737639,2 344 | 2.22631810928856,-1.1169059660998,2 345 | -0.49617958824849,1.37395481547949,2 346 | 2.19973686397599,0.703767013562979,2 347 | 1.10868226051495,2.91632135838279,2 348 | 1.98937852857081,0.3876973896616,2 349 | -1.01061221868445,0.69140881556052,2 350 | 3.20770631953866,-0.812509148616263,2 351 | 1.3621260644745,2.68330303318123,2 352 | 1.58422107190685,2.12190290773954,2 353 | -0.624060876875489,1.58993743117984,2 354 | 0.347762052815745,0.576986450137064,2 355 | -1.66249130502619,0.370634077427655,2 356 | -0.449285083669553,1.18292017208434,2 357 | 0.548513214454477,1.93219930576455,2 358 | 3.43885421727579,0.362089828081157,2 359 | 0.513334394239314,2.4393397332648,2 360 | 2.94936305291512,1.39638034153318,2 361 | 1.34107473268842,-3.15309564597464,2 362 | 0.0534262477639134,1.22824269712037,2 363 | 5.30649275826975,-1.65332781662343,2 364 | -0.437632320081833,-1.422317954968,2 365 | 2.72093817828355,0.734487111305111,2 366 | 1.65690506509476,1.11094532657429,2 367 | 0.18504854540019,2.0746698687644,2 368 | 0.907593506027657,0.276600537877597,2 369 | 3.64781095585219,0.93452075534587,2 370 | 0.406213028468071,2.43318256196893,2 371 | -1.00943005721901,-0.370646286719174,2 372 | -0.940042417202609,0.780969498840643,2 373 | 0.186947759562312,1.89970275039807,2 374 | 2.98946752498638,1.53951853381563,2 375 | 1.22538993793018,-4.16600367064785,2 376 | 3.33772855377815,3.65161905394644,2 377 | 0.876002486103534,-0.347574381013126,3 378 | 0.835766144132339,-0.00231316278932425,3 379 | 0.592490027162869,-2.77242854305047,3 380 | 0.795143348297377,-1.19594177286607,3 381 | 0.28726058552979,-2.81866811332032,3 382 | 1.18841104577202,-0.374698810812052,3 383 | -1.82819895771572,0.509688382013697,3 384 | -0.38189589922855,1.65287227610151,3 385 | 2.6574375501845,-0.125694540719546,3 386 | -0.780819419023689,-4.92404911485202,3 387 | 1.11604743579963,-0.478136868748217,3 388 | 0.902545151596598,3.16185197443689,3 389 | 1.10532363616957,-3.86978802670274,3 390 | -0.635125324173717,-1.67770101246033,3 391 | 4.17325333379375,-0.753608055263575,3 392 | 2.45215607741528,-0.854247859434182,3 393 | 2.24768442620762,-2.20335450203903,3 394 | 1.3293998194777,-1.24049951682133,3 395 | 2.83117394481106,-2.55717334111555,3 396 | 1.94768126953982,-1.58932255622194,3 397 | 1.32721662409336,-2.07458967376269,3 398 | 3.0361435395935,-2.05037583287022,3 399 | 0.97488441293377,1.66074895511629,3 400 | 1.6001866266569,-3.5329459279123,3 401 | -0.310005226763644,-2.07170141470333,3 402 | 2.5444768180384,0.647727580180232,3 403 | 3.80317144252304,-0.761289281182642,3 404 | 1.8716725319767,-2.53800546250966,3 405 | -0.927454680895862,0.505106742317325,3 406 | 0.662058744018439,-2.15995796596517,3 407 | 0.815205909414808,2.44384928564517,3 408 | 3.03742620177615,0.79759255125729,3 409 | -0.566979642829585,-1.30839878098819,3 410 | 2.87640495337719,-0.74452352258688,3 411 | 0.70887555236236,0.605060623927556,3 412 | 2.56912050717938,0.895369660814453,3 413 | -0.792198311808856,-1.43847037436488,3 414 | 0.852051412803555,-4.58954264438086,3 415 | 0.578057114977026,-1.56074059801811,3 416 | 1.27289725826469,-0.451938158654968,3 417 | -1.92240139503878,-1.48738648054757,3 418 | 0.013998592578603,0.418382569923378,3 419 | 0.0647142617886242,-0.240525277228506,3 420 | 0.0242878648261622,-3.80723310697659,3 421 | 3.23283050768204,-0.32797052316061,3 422 | 2.48591983797401,-2.42702644585521,3 423 | 2.37635926256791,0.705674456056133,3 424 | 2.91350693135368,-0.537020216738647,3 425 | 3.59308609874198,-0.793113424606429,3 426 | 0.896041207312091,0.538281913519858,3 427 | 0.774168806925395,-2.02519567689338,3 428 | -1.2010277689715,-2.24249369001494,3 429 | -0.316588422388994,-1.33618701682837,3 430 | 1.35043692208324,-0.393449054717746,3 431 | 2.10109100114346,-1.31145282254075,3 432 | 1.15495898483023,1.76849141809076,3 433 | 2.00014936389787,-2.03958055728692,3 434 | 2.62858114278253,-0.829779549400361,3 435 | 1.29080433001854,-2.97459995111838,3 436 | 1.11299993851424,-2.74696604421192,3 437 | 4.54418196701846,-0.987177306470152,3 438 | 4.41867057299537,-1.65285284998156,3 439 | 0.0698688616280214,-0.653335843882242,3 440 | 3.34789735903062,-0.516531700437556,3 441 | -0.998735397032983,3.22497183245138,3 442 | -1.71428093800562,-2.28151160359456,3 443 | 1.93099000532222,-2.89256062537399,3 444 | -0.290086838459426,-0.0777108258603139,3 445 | 0.920344402300869,-0.939771407875454,3 446 | 1.88069529136357,1.84500023003999,3 447 | 1.2890850077482,-5.67536263682315,3 448 | 4.37141803216214,-0.205986486101813,3 449 | 0.782484563951293,-2.89025837151352,3 450 | 0.71453686856681,-3.1596535794779,3 451 | -0.216623409110367,1.98371707212773,3 452 | 4.99230805055453,-2.59821943329966,3 453 | -2.25615232244201,-1.57535201425099,3 454 | 0.743393644449467,0.315905807699935,3 455 | 1.10000046293395,0.0406352779930248,3 456 | -0.273575546121066,-0.694246794884552,3 457 | -0.398509446938111,1.08748739763116,3 458 | 1.56623658908198,-0.524851228302537,3 459 | 2.42461059425018,0.0403284466379239,3 460 | 0.422137222688629,-3.47279109731205,3 461 | 1.07482766929778,0.233091580288875,3 462 | 2.65283888250953,-1.46511709239088,3 463 | 0.619664144716343,-0.32471733627235,3 464 | 1.98203946556052,-2.73043340726625,3 465 | 0.92955206274806,-0.0963399588843527,3 466 | -0.987425753093385,2.08386757030939,3 467 | 1.42770930981765,1.58512716094128,3 468 | -0.528382985270198,-1.58879434750007,3 469 | 0.340088993790442,-1.11764147518566,3 470 | -1.10587948532177,-0.755426389321906,3 471 | 2.54069193544028,-5.7037235005645,3 472 | -1.275990617772,-0.766199716430801,3 473 | 1.854037639188,-3.92768769816056,3 474 | 1.62793297137494,-2.20728724029125,3 475 | 1.53229731835939,2.30269370119359,3 476 | 1.96634906466926,-1.3233367614799,3 477 | 1.76577967427267,-0.118993215242771,3 478 | 1.84202860251382,-3.52530488499189,3 479 | -0.833876716574588,-1.32439806661387,3 480 | 1.27286455692372,-1.74652133411772,3 481 | 1.94013992514482,-0.0714657485765859,3 482 | -0.484883218643132,0.059697062620891,3 483 | 0.0395953114057174,0.0280032929370129,3 484 | 3.06305693779196,-2.96599247957158,3 485 | 1.09518876765644,2.12577702621737,3 486 | 2.17683787455123,-1.50315101054021,3 487 | -1.21825486658407,-0.445592894174933,3 488 | -0.127001106992049,-0.393998417857586,3 489 | 0.522726929600539,-3.14013192698726,3 490 | -1.15786805309825,-0.486794556804442,3 491 | 0.289820740639792,-0.16225965485131,3 492 | -0.744382238261111,-1.39683492796636,3 493 | 0.676072586175219,-0.455397198403504,3 494 | -0.177110894398986,-0.0734634822759244,3 495 | -0.78892616603279,0.351432430755952,3 496 | -0.100875256922997,-1.06046754861032,3 497 | 2.84792268452063,-1.16801858341136,3 498 | 2.4276228345187,-1.47173822898811,3 499 | 2.38323875211918,-0.480834006751753,3 500 | 2.37071605124607,-1.01764457868705,3 501 | 1.63362177795035,-0.968343143204339,3 502 | -------------------------------------------------------------------------------- /libs/jq-fileupload-include/index.php: -------------------------------------------------------------------------------- 1 | '); 52 | form.attr('accept-charset', options.formAcceptCharset); 53 | addParamChar = /\?/.test(options.url) ? '&' : '?'; 54 | // XDomainRequest only supports GET and POST: 55 | if (options.type === 'DELETE') { 56 | options.url = options.url + addParamChar + '_method=DELETE'; 57 | options.type = 'POST'; 58 | } else if (options.type === 'PUT') { 59 | options.url = options.url + addParamChar + '_method=PUT'; 60 | options.type = 'POST'; 61 | } else if (options.type === 'PATCH') { 62 | options.url = options.url + addParamChar + '_method=PATCH'; 63 | options.type = 'POST'; 64 | } 65 | // IE versions below IE8 cannot set the name property of 66 | // elements that have already been added to the DOM, 67 | // so we set the name along with the iframe HTML markup: 68 | counter += 1; 69 | iframe = $( 70 | '' 72 | ).bind('load', function () { 73 | var fileInputClones, 74 | paramNames = $.isArray(options.paramName) ? 75 | options.paramName : [options.paramName]; 76 | iframe 77 | .unbind('load') 78 | .bind('load', function () { 79 | var response; 80 | // Wrap in a try/catch block to catch exceptions thrown 81 | // when trying to access cross-domain iframe contents: 82 | try { 83 | response = iframe.contents(); 84 | // Google Chrome and Firefox do not throw an 85 | // exception when calling iframe.contents() on 86 | // cross-domain requests, so we unify the response: 87 | if (!response.length || !response[0].firstChild) { 88 | throw new Error(); 89 | } 90 | } catch (e) { 91 | response = undefined; 92 | } 93 | // The complete callback returns the 94 | // iframe content document as response object: 95 | completeCallback( 96 | 200, 97 | 'success', 98 | {'iframe': response} 99 | ); 100 | // Fix for IE endless progress bar activity bug 101 | // (happens on form submits to iframe targets): 102 | $('') 103 | .appendTo(form); 104 | window.setTimeout(function () { 105 | // Removing the form in a setTimeout call 106 | // allows Chrome's developer tools to display 107 | // the response result 108 | form.remove(); 109 | }, 0); 110 | }); 111 | form 112 | .prop('target', iframe.prop('name')) 113 | .prop('action', options.url) 114 | .prop('method', options.type); 115 | if (options.formData) { 116 | $.each(options.formData, function (index, field) { 117 | $('') 118 | .prop('name', field.name) 119 | .val(field.value) 120 | .appendTo(form); 121 | }); 122 | } 123 | if (options.fileInput && options.fileInput.length && 124 | options.type === 'POST') { 125 | fileInputClones = options.fileInput.clone(); 126 | // Insert a clone for each file input field: 127 | options.fileInput.after(function (index) { 128 | return fileInputClones[index]; 129 | }); 130 | if (options.paramName) { 131 | options.fileInput.each(function (index) { 132 | $(this).prop( 133 | 'name', 134 | paramNames[index] || options.paramName 135 | ); 136 | }); 137 | } 138 | // Appending the file input fields to the hidden form 139 | // removes them from their original location: 140 | form 141 | .append(options.fileInput) 142 | .prop('enctype', 'multipart/form-data') 143 | // enctype must be set as encoding for IE: 144 | .prop('encoding', 'multipart/form-data'); 145 | // Remove the HTML5 form attribute from the input(s): 146 | options.fileInput.removeAttr('form'); 147 | } 148 | form.submit(); 149 | // Insert the file input fields at their original location 150 | // by replacing the clones with the originals: 151 | if (fileInputClones && fileInputClones.length) { 152 | options.fileInput.each(function (index, input) { 153 | var clone = $(fileInputClones[index]); 154 | // Restore the original name and form properties: 155 | $(input) 156 | .prop('name', clone.prop('name')) 157 | .attr('form', clone.attr('form')); 158 | clone.replaceWith(input); 159 | }); 160 | } 161 | }); 162 | form.append(iframe).appendTo(document.body); 163 | }, 164 | abort: function () { 165 | if (iframe) { 166 | // javascript:false as iframe src aborts the request 167 | // and prevents warning popups on HTTPS in IE6. 168 | // concat is used to avoid the "Script URL" JSLint error: 169 | iframe 170 | .unbind('load') 171 | .prop('src', initialIframeSrc); 172 | } 173 | if (form) { 174 | form.remove(); 175 | } 176 | } 177 | }; 178 | } 179 | }); 180 | 181 | // The iframe transport returns the iframe content document as response. 182 | // The following adds converters from iframe to text, json, html, xml 183 | // and script. 184 | // Please note that the Content-Type for JSON responses has to be text/plain 185 | // or text/html, if the browser doesn't include application/json in the 186 | // Accept header, else IE will show a download dialog. 187 | // The Content-Type for XML responses on the other hand has to be always 188 | // application/xml or text/xml, so IE properly parses the XML response. 189 | // See also 190 | // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation 191 | $.ajaxSetup({ 192 | converters: { 193 | 'iframe text': function (iframe) { 194 | return iframe && $(iframe[0].body).text(); 195 | }, 196 | 'iframe json': function (iframe) { 197 | return iframe && $.parseJSON($(iframe[0].body).text()); 198 | }, 199 | 'iframe html': function (iframe) { 200 | return iframe && $(iframe[0].body).html(); 201 | }, 202 | 'iframe xml': function (iframe) { 203 | var xmlDoc = iframe && iframe[0]; 204 | return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : 205 | $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) || 206 | $(xmlDoc.body).html()); 207 | }, 208 | 'iframe script': function (iframe) { 209 | return iframe && $.globalEval($(iframe[0].body).text()); 210 | } 211 | } 212 | }); 213 | 214 | })); 215 | -------------------------------------------------------------------------------- /libs/jquery.mousewheel.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) 2 | * Licensed under the MIT License (LICENSE.txt). 3 | * 4 | * Version: 3.1.9 5 | * 6 | * Requires: jQuery 1.2.2+ 7 | */ 8 | 9 | (function (factory) { 10 | if ( typeof define === 'function' && define.amd ) { 11 | // AMD. Register as an anonymous module. 12 | define(['jquery'], factory); 13 | } else if (typeof exports === 'object') { 14 | // Node/CommonJS style for Browserify 15 | module.exports = factory; 16 | } else { 17 | // Browser globals 18 | factory(jQuery); 19 | } 20 | }(function ($) { 21 | 22 | var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'], 23 | toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ? 24 | ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'], 25 | slice = Array.prototype.slice, 26 | nullLowestDeltaTimeout, lowestDelta; 27 | 28 | if ( $.event.fixHooks ) { 29 | for ( var i = toFix.length; i; ) { 30 | $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; 31 | } 32 | } 33 | 34 | var special = $.event.special.mousewheel = { 35 | version: '3.1.9', 36 | 37 | setup: function() { 38 | if ( this.addEventListener ) { 39 | for ( var i = toBind.length; i; ) { 40 | this.addEventListener( toBind[--i], handler, false ); 41 | } 42 | } else { 43 | this.onmousewheel = handler; 44 | } 45 | // Store the line height and page height for this particular element 46 | $.data(this, 'mousewheel-line-height', special.getLineHeight(this)); 47 | $.data(this, 'mousewheel-page-height', special.getPageHeight(this)); 48 | }, 49 | 50 | teardown: function() { 51 | if ( this.removeEventListener ) { 52 | for ( var i = toBind.length; i; ) { 53 | this.removeEventListener( toBind[--i], handler, false ); 54 | } 55 | } else { 56 | this.onmousewheel = null; 57 | } 58 | }, 59 | 60 | getLineHeight: function(elem) { 61 | return parseInt($(elem)['offsetParent' in $.fn ? 'offsetParent' : 'parent']().css('fontSize'), 10); 62 | }, 63 | 64 | getPageHeight: function(elem) { 65 | return $(elem).height(); 66 | }, 67 | 68 | settings: { 69 | adjustOldDeltas: true 70 | } 71 | }; 72 | 73 | $.fn.extend({ 74 | mousewheel: function(fn) { 75 | return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel'); 76 | }, 77 | 78 | unmousewheel: function(fn) { 79 | return this.unbind('mousewheel', fn); 80 | } 81 | }); 82 | 83 | 84 | function handler(event) { 85 | var orgEvent = event || window.event, 86 | args = slice.call(arguments, 1), 87 | delta = 0, 88 | deltaX = 0, 89 | deltaY = 0, 90 | absDelta = 0; 91 | event = $.event.fix(orgEvent); 92 | event.type = 'mousewheel'; 93 | 94 | // Old school scrollwheel delta 95 | if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; } 96 | if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; } 97 | if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; } 98 | if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; } 99 | 100 | // Firefox < 17 horizontal scrolling related to DOMMouseScroll event 101 | if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { 102 | deltaX = deltaY * -1; 103 | deltaY = 0; 104 | } 105 | 106 | // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy 107 | delta = deltaY === 0 ? deltaX : deltaY; 108 | 109 | // New school wheel delta (wheel event) 110 | if ( 'deltaY' in orgEvent ) { 111 | deltaY = orgEvent.deltaY * -1; 112 | delta = deltaY; 113 | } 114 | if ( 'deltaX' in orgEvent ) { 115 | deltaX = orgEvent.deltaX; 116 | if ( deltaY === 0 ) { delta = deltaX * -1; } 117 | } 118 | 119 | // No change actually happened, no reason to go any further 120 | if ( deltaY === 0 && deltaX === 0 ) { return; } 121 | 122 | // Need to convert lines and pages to pixels if we aren't already in pixels 123 | // There are three delta modes: 124 | // * deltaMode 0 is by pixels, nothing to do 125 | // * deltaMode 1 is by lines 126 | // * deltaMode 2 is by pages 127 | if ( orgEvent.deltaMode === 1 ) { 128 | var lineHeight = $.data(this, 'mousewheel-line-height'); 129 | delta *= lineHeight; 130 | deltaY *= lineHeight; 131 | deltaX *= lineHeight; 132 | } else if ( orgEvent.deltaMode === 2 ) { 133 | var pageHeight = $.data(this, 'mousewheel-page-height'); 134 | delta *= pageHeight; 135 | deltaY *= pageHeight; 136 | deltaX *= pageHeight; 137 | } 138 | 139 | // Store lowest absolute delta to normalize the delta values 140 | absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); 141 | 142 | if ( !lowestDelta || absDelta < lowestDelta ) { 143 | lowestDelta = absDelta; 144 | 145 | // Adjust older deltas if necessary 146 | if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { 147 | lowestDelta /= 40; 148 | } 149 | } 150 | 151 | // Adjust older deltas if necessary 152 | if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { 153 | // Divide all the things by 40! 154 | delta /= 40; 155 | deltaX /= 40; 156 | deltaY /= 40; 157 | } 158 | 159 | // Get a whole, normalized value for the deltas 160 | delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta); 161 | deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta); 162 | deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta); 163 | 164 | // Add information to the event object 165 | event.deltaX = deltaX; 166 | event.deltaY = deltaY; 167 | event.deltaFactor = lowestDelta; 168 | // Go ahead and set deltaMode to 0 since we converted to pixels 169 | // Although this is a little odd since we overwrite the deltaX/Y 170 | // properties with normalized deltas. 171 | event.deltaMode = 0; 172 | 173 | // Add event and delta to the front of the arguments 174 | args.unshift(event, delta, deltaX, deltaY); 175 | 176 | // Clearout lowestDelta after sometime to better 177 | // handle multiple device types that give different 178 | // a different lowestDelta 179 | // Ex: trackpad = 3 and mouse wheel = 120 180 | if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); } 181 | nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200); 182 | 183 | return ($.event.dispatch || $.event.handle).apply(this, args); 184 | } 185 | 186 | function nullLowestDelta() { 187 | lowestDelta = null; 188 | } 189 | 190 | function shouldAdjustOldDeltas(orgEvent, absDelta) { 191 | // If this is an older event and the delta is divisable by 120, 192 | // then we are assuming that the browser is treating this as an 193 | // older mouse wheel event and that we should divide the deltas 194 | // by 40 to try and get a more usable deltaFactor. 195 | // Side note, this actually impacts the reported scroll distance 196 | // in older browsers and can cause scrolling to be slower than native. 197 | // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false. 198 | return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0; 199 | } 200 | 201 | })); 202 | -------------------------------------------------------------------------------- /libs/kdTree-min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * k-d Tree JavaScript - V 1.01 3 | * 4 | * https://github.com/ubilabs/kd-tree-javascript 5 | * 6 | * @author Mircea Pricop , 2012 7 | * @author Martin Kleppe , 2012 8 | * @author Ubilabs http://ubilabs.net, 2012 9 | * @license MIT License 10 | */(function(e,t){if(typeof define==="function"&&define.amd){define(["exports"],t)}else if(typeof exports==="object"){t(exports)}else{t(e.commonJsStrict={})}})(this,function(e){function t(e,t,n){this.obj=e;this.left=null;this.right=null;this.parent=n;this.dimension=t}function n(e,n,i){function o(e,n,r){var s=n%i.length,u,a;if(e.length===0){return null}if(e.length===1){return new t(e[0],s,r)}e.sort(function(e,t){return e[i[s]]-t[i[s]]});u=Math.floor(e.length/2);a=new t(e[u],s,r);a.left=o(e.slice(0,u),n+1,a);a.right=o(e.slice(u+1),n+1,a);return a}function u(e){function t(e){if(e.left){e.left.parent=e;t(e.left)}if(e.right){e.right.parent=e;t(e.right)}}s.root=e;t(s.root)}var s=this;if(!Array.isArray(e))u(e,n,i);else this.root=o(e,0,null);this.toJSON=function(e){if(!e)e=this.root;var n=new t(e.obj,e.dimension,null);if(e.left)n.left=s.toJSON(e.left);if(e.right)n.right=s.toJSON(e.right);return n};this.insert=function(e){function n(t,r){if(t===null){return r}var s=i[t.dimension];if(e[s]r){a=s}if(o!==null&&o.obj[n]>a.obj[n]){a=o}return a}function a(e,t){var n,r,s,o,u;if(e===null){return null}n=i[t];if(e.dimension===t){if(e.left!==null){return a(e.left,t)}return e}r=e.obj[n];s=a(e.left,t);o=a(e.right,t);u=e;if(s!==null&&s.obj[n]t){f.pop()}}var s,o=i[r.dimension],u=n(e,r.obj),a={},c,h,p;for(p=0;p0){this.content[0]=t;this.sinkDown(0)}return e},peek:function(){return this.content[0]},remove:function(e){var t=this.content.length;for(var n=0;n0){var n=Math.floor((e+1)/2)-1,r=this.content[n];if(this.scoreFunction(t)' + 102 | '' + 103 | '
    ' + 104 | '
    ' + msg + '
    ' + 105 | '
    ' + 106 | ''; 107 | }; 108 | 109 | /** 110 | * Mesasge for getting a webgl browser 111 | * @type {string} 112 | */ 113 | var GET_A_WEBGL_BROWSER = '' + 114 | 'This page requires a browser that supports WebGL.
    ' + 115 | 'Click here to upgrade your browser.'; 116 | 117 | /** 118 | * Mesasge for need better hardware 119 | * @type {string} 120 | */ 121 | var OTHER_PROBLEM = '' + 122 | "It doesn't appear your computer can support WebGL.
    " + 123 | 'Click here for more information.'; 124 | 125 | /** 126 | * Creates a webgl context. If creation fails it will 127 | * change the contents of the container of the 128 | * tag to an error message with the correct links for WebGL. 129 | * @param {Element} canvas. The canvas element to create a 130 | * context from. 131 | * @param {WebGLContextCreationAttirbutes} opt_attribs Any 132 | * creation attributes you want to pass in. 133 | * @return {WebGLRenderingContext} The created context. 134 | */ 135 | var setupWebGL = function(canvas, opt_attribs) { 136 | function showLink(str) { 137 | var container = canvas.parentNode; 138 | if (container) { 139 | container.innerHTML = makeFailHTML(str); 140 | } 141 | }; 142 | 143 | if (!window.WebGLRenderingContext) { 144 | showLink(GET_A_WEBGL_BROWSER); 145 | return null; 146 | } 147 | 148 | var context = create3DContext(canvas, opt_attribs); 149 | if (!context) { 150 | showLink(OTHER_PROBLEM); 151 | } 152 | return context; 153 | }; 154 | 155 | /** 156 | * Creates a webgl context. 157 | * @param {!Canvas} canvas The canvas tag to get context 158 | * from. If one is not passed in one will be created. 159 | * @return {!WebGLContext} The created context. 160 | */ 161 | var create3DContext = function(canvas, opt_attribs) { 162 | var names = ["webgl", "experimental-webgl"]; 163 | var context = null; 164 | for (var ii = 0; ii < names.length; ++ii) { 165 | try { 166 | context = canvas.getContext(names[ii], opt_attribs); 167 | } catch(e) {} 168 | if (context) { 169 | break; 170 | } 171 | } 172 | return context; 173 | } 174 | 175 | var updateCSSIfInIFrame = function() { 176 | if (isInIFrame()) { 177 | document.body.className = "iframe"; 178 | } 179 | }; 180 | 181 | /** 182 | * Gets a WebGL context. 183 | * makes its backing store the size it is displayed. 184 | */ 185 | var getWebGLContext = function(canvas, opt_attribs) { 186 | if (isInIFrame()) { 187 | updateCSSIfInIFrame(); 188 | 189 | // make the canvas backing store the size it's displayed. 190 | canvas.width = canvas.clientWidth; 191 | canvas.height = canvas.clientHeight; 192 | } else { 193 | var title = document.title; 194 | var h1 = document.createElement("h1"); 195 | h1.innerText = title; 196 | document.body.insertBefore(h1, document.body.children[0]); 197 | } 198 | 199 | var gl = setupWebGL(canvas, opt_attribs); 200 | return gl; 201 | }; 202 | 203 | /** 204 | * Loads a shader. 205 | * @param {!WebGLContext} gl The WebGLContext to use. 206 | * @param {string} shaderSource The shader source. 207 | * @param {number} shaderType The type of shader. 208 | * @param {function(string): void) opt_errorCallback callback for errors. 209 | * @return {!WebGLShader} The created shader. 210 | */ 211 | var loadShader = function(gl, shaderSource, shaderType, opt_errorCallback) { 212 | var errFn = opt_errorCallback || error; 213 | // Create the shader object 214 | var shader = gl.createShader(shaderType); 215 | 216 | // Load the shader source 217 | gl.shaderSource(shader, shaderSource); 218 | 219 | // Compile the shader 220 | gl.compileShader(shader); 221 | 222 | // Check the compile status 223 | var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); 224 | if (!compiled) { 225 | // Something went wrong during compilation; get the error 226 | lastError = gl.getShaderInfoLog(shader); 227 | errFn("*** Error compiling shader '" + shader + "':" + lastError); 228 | gl.deleteShader(shader); 229 | return null; 230 | } 231 | 232 | return shader; 233 | } 234 | 235 | /** 236 | * Creates a program, attaches shaders, binds attrib locations, links the 237 | * program and calls useProgram. 238 | * @param {!Array.} shaders The shaders to attach 239 | * @param {!Array.} opt_attribs The attribs names. 240 | * @param {!Array.} opt_locations The locations for the attribs. 241 | * @param {function(string): void) opt_errorCallback callback for errors. 242 | */ 243 | var loadProgram = function( 244 | gl, shaders, opt_attribs, opt_locations, opt_errorCallback) { 245 | var errFn = opt_errorCallback || error; 246 | var program = gl.createProgram(); 247 | for (var ii = 0; ii < shaders.length; ++ii) { 248 | gl.attachShader(program, shaders[ii]); 249 | } 250 | if (opt_attribs) { 251 | for (var ii = 0; ii < opt_attribs.length; ++ii) { 252 | gl.bindAttribLocation( 253 | program, 254 | opt_locations ? opt_locations[ii] : ii, 255 | opt_attribs[ii]); 256 | } 257 | } 258 | gl.linkProgram(program); 259 | 260 | // Check the link status 261 | var linked = gl.getProgramParameter(program, gl.LINK_STATUS); 262 | if (!linked) { 263 | // something went wrong with the link 264 | lastError = gl.getProgramInfoLog (program); 265 | errFn("Error in program linking:" + lastError); 266 | 267 | gl.deleteProgram(program); 268 | return null; 269 | } 270 | return program; 271 | }; 272 | 273 | /** 274 | * Loads a shader from a script tag. 275 | * @param {!WebGLContext} gl The WebGLContext to use. 276 | * @param {string} scriptId The id of the script tag. 277 | * @param {number} opt_shaderType The type of shader. If not passed in it will 278 | * be derived from the type of the script tag. 279 | * @param {function(string): void) opt_errorCallback callback for errors. 280 | * @return {!WebGLShader} The created shader. 281 | */ 282 | var createShaderFromScript = function( 283 | gl, scriptId, opt_shaderType, opt_errorCallback) { 284 | var shaderSource = ""; 285 | var shaderType; 286 | var shaderScript = document.getElementById(scriptId); 287 | if (!shaderScript) { 288 | throw("*** Error: unknown script element" + scriptId); 289 | } 290 | shaderSource = shaderScript.text; 291 | 292 | if (!opt_shaderType) { 293 | if (shaderScript.type == "x-shader/x-vertex") { 294 | shaderType = gl.VERTEX_SHADER; 295 | } else if (shaderScript.type == "x-shader/x-fragment") { 296 | shaderType = gl.FRAGMENT_SHADER; 297 | } else if (shaderType != gl.VERTEX_SHADER && shaderType != gl.FRAGMENT_SHADER) { 298 | throw("*** Error: unknown shader type"); 299 | return null; 300 | } 301 | } 302 | 303 | return loadShader( 304 | gl, shaderSource, opt_shaderType ? opt_shaderType : shaderType, 305 | opt_errorCallback); 306 | }; 307 | 308 | var defaultShaderType = [ 309 | "VERTEX_SHADER", 310 | "FRAGMENT_SHADER" 311 | ]; 312 | 313 | /** 314 | * Creates a program from 2 script tags. 315 | * 316 | * @param {!WebGLContext} gl The WebGLContext to use. 317 | * @param {!Array.} shaderScriptIds Array of ids of the 318 | * script tags for the shaders. The first is assumed to 319 | * be the vertex shader, the second the fragment shader. 320 | * @param {!Array.} opt_attribs The attribs names. 321 | * @param {!Array.} opt_locations The locations for the attribs. 322 | * @param {function(string): void) opt_errorCallback callback for errors. 323 | * @return {!WebGLProgram} The created program. 324 | */ 325 | var createProgramFromScripts = function( 326 | gl, shaderScriptIds, opt_attribs, opt_locations, opt_errorCallback) { 327 | var shaders = []; 328 | for (var ii = 0; ii < shaderScriptIds.length; ++ii) { 329 | shaders.push(createShaderFromScript( 330 | gl, shaderScriptIds[ii], gl[defaultShaderType[ii]], opt_errorCallback)); 331 | } 332 | return loadProgram(gl, shaders, opt_attribs, opt_locations, opt_errorCallback); 333 | }; 334 | 335 | 336 | // Add your prefix here. 337 | var browserPrefixes = [ 338 | "", 339 | "MOZ_", 340 | "OP_", 341 | "WEBKIT_" 342 | ]; 343 | 344 | /** 345 | * Given an extension name like WEBGL_compressed_texture_s3tc 346 | * returns the supported version extension, like 347 | * WEBKIT_WEBGL_compressed_teture_s3tc 348 | * @param {string} name Name of extension to look for 349 | * @return {WebGLExtension} The extension or undefined if not 350 | * found. 351 | */ 352 | var getExtensionWithKnownPrefixes = function(gl, name) { 353 | for (var ii = 0; ii < browserPrefixes.length; ++ii) { 354 | var prefixedName = browserPrefixes[ii] + name; 355 | var ext = gl.getExtension(prefixedName); 356 | if (ext) { 357 | return ext; 358 | } 359 | } 360 | }; 361 | 362 | 363 | /** 364 | * Resize a canvas to match the size it's displayed. 365 | * @param {!Canvas} canvas The canvas to resize. 366 | */ 367 | var resizeCanvasToDisplaySize = function(canvas) { 368 | if (canvas.width != canvas.clientWidth || 369 | canvas.height != canvas.clientHeight) { 370 | canvas.width = canvas.clientWidth; 371 | canvas.height = canvas.clientHeight; 372 | } 373 | } 374 | 375 | /* export functions */ 376 | this.loadShader = loadShader; 377 | this.createProgram = loadProgram; 378 | this.createProgramFromScripts = createProgramFromScripts; 379 | this.createShaderFromScriptElement = createShaderFromScript; 380 | this.getWebGLContext = getWebGLContext; 381 | this.updateCSSIfInIFrame = updateCSSIfInIFrame; 382 | this.getExtensionWithKnownPrefixes = getExtensionWithKnownPrefixes; 383 | this.resizeCanvasToDisplaySize = resizeCanvasToDisplaySize; 384 | 385 | /** 386 | * Provides requestAnimationFrame in a cross browser way. 387 | */ 388 | this.requestAnimFrame = (function() { 389 | return window.requestAnimationFrame || 390 | window.webkitRequestAnimationFrame || 391 | window.mozRequestAnimationFrame || 392 | window.oRequestAnimationFrame || 393 | window.msRequestAnimationFrame || 394 | function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) { 395 | return window.setTimeout(callback, 1000/60); 396 | }; 397 | })(); 398 | 399 | /** 400 | * Provides cancelRequestAnimationFrame in a cross browser way. 401 | */ 402 | this.cancelRequestAnimFrame = (function() { 403 | return window.cancelCancelRequestAnimationFrame || 404 | window.webkitCancelRequestAnimationFrame || 405 | window.mozCancelRequestAnimationFrame || 406 | window.oCancelRequestAnimationFrame || 407 | window.msCancelRequestAnimationFrame || 408 | window.clearTimeout; 409 | })(); 410 | 411 | 412 | 413 | }()); 414 | 415 | -------------------------------------------------------------------------------- /shaders/background.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D background; 2 | 3 | varying vec2 coord; 4 | 5 | void main() { 6 | gl_FragColor = texture2D(background, coord); 7 | } 8 | -------------------------------------------------------------------------------- /shaders/background.vs: -------------------------------------------------------------------------------- 1 | uniform vec4 bounds; 2 | 3 | varying vec2 coord; 4 | 5 | void main() { 6 | gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.xy, 0.0, 1.0); 7 | 8 | coord = (gl_Vertex.xy - bounds.xz) / (bounds.yw - bounds.xz); 9 | } 10 | -------------------------------------------------------------------------------- /shaders/blend.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture0; 2 | uniform sampler2D texture1; 3 | uniform sampler2D texture2; 4 | uniform sampler2D texture3; 5 | uniform sampler2D texture4; 6 | uniform sampler2D texture5; 7 | uniform sampler2D texture6; 8 | uniform sampler2D texture7; 9 | 10 | uniform int N; 11 | uniform float lf; 12 | uniform float cf; 13 | 14 | varying vec2 coord; 15 | 16 | float f(float n, float eps, float k){ 17 | if(n > eps){ 18 | return pow(n, 1.0/3.0); 19 | }else{ 20 | return (k * n + 16.0) / 116.0; 21 | } 22 | } 23 | vec3 XYZtoLRGB(vec3 xyz, bool clamp){ 24 | vec3 M0 = vec3( 3.2404542, -1.5371385, -0.4985314); 25 | vec3 M1 = vec3(-0.9692660, 1.8760108, 0.0415560); 26 | vec3 M2 = vec3( 0.0556434, -0.2040259, 1.0572252); 27 | 28 | float r = dot(xyz, M0); 29 | float g = dot(xyz, M1); 30 | float b = dot(xyz, M2); 31 | 32 | if(clamp){ 33 | r = min(max(r, 0.0), 1.0); 34 | g = min(max(g, 0.0), 1.0); 35 | b = min(max(b, 0.0), 1.0); 36 | } 37 | 38 | return vec3(r,g,b); 39 | } 40 | vec3 LRGBtoXYZ(vec3 lrgb){ 41 | vec3 M0 = vec3(0.4124564, 0.3575761, 0.1804375); 42 | vec3 M1 = vec3(0.2126729, 0.7151522, 0.0721750); 43 | vec3 M2 = vec3(0.0193339, 0.1191920, 0.9503041); 44 | 45 | return vec3(dot(lrgb, M0), dot(lrgb, M1), dot(lrgb, M2)); 46 | } 47 | vec3 XYZtoLAB(vec3 xyz){ 48 | float Xr = 0.95047; 49 | float Yr = 1.0; 50 | float Zr = 1.08883; 51 | 52 | float eps = 216.0 / 24389.0; 53 | float k = 24389.0 / 27.0; 54 | 55 | float xr = xyz.x / Xr; 56 | float yr = xyz.y / Yr; 57 | float zr = xyz.z / Zr; 58 | 59 | xr = f(xr, eps, k); 60 | yr = f(yr, eps, k); 61 | zr = f(zr, eps, k); 62 | 63 | float L = 116.0 * yr - 16.0; 64 | float a = 500.0 * (xr - yr); 65 | float b = 200.0 * (yr - zr); 66 | 67 | return vec3(L,a,b); 68 | } 69 | vec3 LABtoXYZ(vec3 lab){ 70 | float Xr = 0.95047; 71 | float Yr = 1.0; 72 | float Zr = 1.08883; 73 | 74 | float eps = 216.0 / 24389.0; 75 | float k = 24389.0 / 27.0; 76 | 77 | float L = lab.x; 78 | float a = lab.y; 79 | float b = lab.z; 80 | 81 | float fy = (L + 16.0) / 116.0; 82 | float fx = a / 500.0 + fy; 83 | float fz = -b / 200.0 + fy; 84 | 85 | float xr = ((pow(fx, 3.0) > eps) ? pow(fx, 3.0) : (116.0 * fx - 16.0) / k); 86 | float yr = ((L > (k * eps)) ? pow(((L + 16.0) / 116.0), 3.0) : L / k); 87 | float zr = ((pow(fz, 3.0) > eps) ? pow(fz, 3.0) : (116.0 * fz - 16.0) / k); 88 | 89 | float X = xr * Xr; 90 | float Y = yr * Yr; 91 | float Z = zr * Zr; 92 | 93 | return vec3(X,Y,Z); 94 | } 95 | vec3 LABtoLCH(vec3 lab){ 96 | float l = lab.x; 97 | float a = lab.y; 98 | float b = lab.z; 99 | 100 | float C = sqrt(a*a + b*b); 101 | float H = atan(b,a); 102 | 103 | return vec3(l,C,H); 104 | } 105 | vec3 LCHtoLAB(vec3 lch){ 106 | float l = lch.x; 107 | float c = lch.y; 108 | float h = lch.z; 109 | 110 | return vec3(l, c*cos(h), c*sin(h)); 111 | } 112 | vec3 RGBtoLAB(vec3 rgb){ 113 | return XYZtoLAB(LRGBtoXYZ(rgb)); 114 | } 115 | vec3 LABtoRGB(vec3 lab, bool clamp){ 116 | return XYZtoLRGB(LABtoXYZ(lab), clamp); 117 | } 118 | 119 | void main() 120 | { 121 | if(N==0){ 122 | gl_FragColor = texture2D(texture0, coord); 123 | }else{ 124 | vec4 colors[8]; 125 | colors[0] = texture2D(texture0, coord); 126 | colors[1] = texture2D(texture1, coord); 127 | colors[2] = texture2D(texture2, coord); 128 | colors[3] = texture2D(texture3, coord); 129 | colors[4] = texture2D(texture4, coord); 130 | colors[5] = texture2D(texture5, coord); 131 | colors[6] = texture2D(texture6, coord); 132 | colors[7] = texture2D(texture7, coord); 133 | 134 | float x = 0.0; 135 | float y = 0.0; 136 | float z = 0.0; 137 | 138 | float Nf = 0.0; 139 | float Npf = 0.0; 140 | bool inshape = false; 141 | 142 | for (int i = 0; i < 8; i++) { 143 | if (i >= N) break; 144 | 145 | vec3 lab = RGBtoLAB(colors[i].xyz); 146 | if(!inshape) { 147 | if(colors[i].w >= 1.0) { 148 | inshape = true; 149 | x = lab.x * colors[i].w; 150 | y = lab.y * colors[i].w; 151 | z = lab.z * colors[i].w; 152 | Nf = colors[i].w; 153 | Npf = min(1.0, colors[i].w); 154 | } else { 155 | x += lab.x * colors[i].w; 156 | y += lab.y * colors[i].w; 157 | z += lab.z * colors[i].w; 158 | Nf += colors[i].w; 159 | Npf += min(1.0, colors[i].w); 160 | } 161 | } else { 162 | if(colors[i].w >= 1.0) { 163 | x += lab.x * colors[i].w; 164 | y += lab.y * colors[i].w; 165 | z += lab.z * colors[i].w; 166 | Nf += colors[i].w; 167 | Npf += min(1.0, colors[i].w); 168 | } 169 | } 170 | } 171 | float pf = max(Npf-1.0, 0.0); 172 | float Cdec = pow(cf, pf); 173 | float Ldec = pow(lf, pf); 174 | if(Nf > float(N)) { 175 | Cdec = 1.0; 176 | Ldec = 1.0; 177 | } 178 | if(Nf <= 0.0) { 179 | gl_FragColor = vec4(1.0, 1.0, 1.0, 0.0); 180 | } else { 181 | vec3 newLab = vec3(x/Nf, y/Nf, z/Nf); 182 | vec3 newLch = LABtoLCH(newLab); 183 | newLch.y = newLch.y * Cdec; 184 | newLch.x = newLch.x * Ldec; 185 | 186 | vec3 ret = LABtoRGB(LCHtoLAB(newLch), true); 187 | gl_FragColor = vec4(ret.x,ret.y,ret.z,min(1.0, Nf)); 188 | } 189 | } 190 | } -------------------------------------------------------------------------------- /shaders/blur.fs: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision highp float; 3 | #endif 4 | 5 | uniform sampler2D texture; 6 | uniform int kWindow; 7 | uniform float sigma; 8 | uniform vec2 offset; 9 | 10 | void main() 11 | { 12 | vec4 color = vec4(0.0,0.0,0.0,1.0); 13 | float sum = 0.0; 14 | float gW = 0.0; 15 | float xOff = 0.0; 16 | float yOff = 0.0; 17 | for( int i = -kWindow; i <= kWindow; i++ ) 18 | { 19 | gW = exp(-(float(i*i))/(2.0*sigma*sigma)); 20 | sum += gW; 21 | xOff = offset.x*float(i); 22 | yOff = offset.y*float(i); 23 | 24 | color += texelFetch( texture, ivec2(gl_FragCoord.x + xOff, gl_FragCoord.y + yOff),0)*gW; 25 | } 26 | color/=sum; 27 | color.a = 1.0; 28 | gl_FragColor = color; 29 | } 30 | -------------------------------------------------------------------------------- /shaders/blur.vs: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision highp float; 3 | #endif 4 | 5 | attribute vec2 a_position; 6 | 7 | uniform mat3 u_xform; 8 | uniform float u_ptsize; 9 | 10 | void main() { 11 | vec3 transformedCoords = u_xform * vec3(a_position, 1.0); 12 | gl_Position = vec4(transformedCoords.xy, 0.0, 1.0); 13 | } -------------------------------------------------------------------------------- /shaders/debugmax.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D maxTex; 2 | uniform vec2 delta; 3 | uniform float maxVal; 4 | 5 | varying vec2 coord; 6 | 7 | void main() { 8 | float val = 0.0; 9 | 10 | val = texture2D(maxTex, floor(coord * 2.0)).r; 11 | 12 | gl_FragColor = vec4(vec3(val / maxVal), 1.0); 13 | } 14 | -------------------------------------------------------------------------------- /shaders/debugoutliers.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture1; 2 | uniform sampler2D texture2; 3 | uniform sampler2D texture3; 4 | uniform sampler2D texture4; 5 | uniform sampler2D texture5; 6 | 7 | uniform vec3 rgb1; 8 | uniform vec3 rgb2; 9 | uniform vec3 rgb3; 10 | uniform vec3 rgb4; 11 | uniform vec3 rgb5; 12 | 13 | varying vec2 coord; 14 | 15 | void main(void) { 16 | if (texture2D(texture1, coord).r > 0.0) 17 | gl_FragColor = vec4(rgb1, 1.0); 18 | else if (texture2D(texture2, coord).r > 0.0) 19 | gl_FragColor = vec4(rgb2, 1.0); 20 | else if (texture2D(texture3, coord).r > 0.0) 21 | gl_FragColor = vec4(rgb3, 1.0); 22 | else if (texture2D(texture4, coord).r > 0.0) 23 | gl_FragColor = vec4(rgb4, 1.0); 24 | else if (texture2D(texture5, coord).r > 0.0) 25 | gl_FragColor = vec4(rgb5, 1.0); 26 | else 27 | gl_FragColor = vec4(0.0); 28 | } 29 | -------------------------------------------------------------------------------- /shaders/densitytest.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture1; 2 | uniform sampler2D texture2; 3 | uniform sampler2D texture3; 4 | uniform sampler2D texture4; 5 | uniform sampler2D texture5; 6 | 7 | uniform sampler2D maxTex; 8 | 9 | varying vec2 coord; 10 | 11 | void main() { 12 | float val1 = texture2D(texture1, coord).r; 13 | float val2 = texture2D(texture2, coord).r; 14 | float val3 = texture2D(texture3, coord).r; 15 | float val4 = texture2D(texture4, coord).r; 16 | float val5 = texture2D(texture5, coord).r; 17 | 18 | float maxVal = texture2D(maxTex, vec2(0.0)).r; 19 | 20 | float val = max(val1, max(val2, max(val3, max(val4, val5)))); 21 | val = val/maxVal; 22 | 23 | val = 1.0 - val; 24 | 25 | gl_FragColor = vec4(val, val, val, 1.0 - val); 26 | } 27 | -------------------------------------------------------------------------------- /shaders/jfa.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform float kStep; 3 | uniform vec2 delta; 4 | 5 | varying vec2 coord; 6 | 7 | vec3 calcMin(vec3 curMin, vec2 coordsToQuery) { 8 | // do a check for out-of-bounds queries 9 | if (coordsToQuery.x < 0.0 || coordsToQuery.x > 1.0 || coordsToQuery.y < 0.0 || coordsToQuery.y > 1.0) { 10 | return curMin; 11 | } 12 | 13 | vec3 query = texture2D(texture, coordsToQuery).xyz; 14 | 15 | // do a check for out-of-bounds queries 16 | if (query.y < 0.0 || query.y > 1.0 || query.z < 0.0 || query.z > 1.0) { 17 | return curMin; 18 | } 19 | 20 | float dist = distance(coord / delta, query.yz / delta); 21 | if (dist < curMin.x) { 22 | return vec3(dist, query.yz); 23 | } else { 24 | return curMin; 25 | } 26 | } 27 | 28 | void main() { 29 | vec3 minVal = texture2D(texture, coord).xyz; 30 | 31 | minVal = calcMin(minVal, vec2(coord.x + kStep * delta.x, coord.y + kStep * delta.y)); 32 | minVal = calcMin(minVal, vec2(coord.x + kStep * delta.x, coord.y - kStep * delta.y)); 33 | minVal = calcMin(minVal, vec2(coord.x - kStep * delta.x, coord.y + kStep * delta.y)); 34 | minVal = calcMin(minVal, vec2(coord.x - kStep * delta.x, coord.y - kStep * delta.y)); 35 | minVal = calcMin(minVal, vec2(coord.x, coord.y + kStep * delta.y)); 36 | minVal = calcMin(minVal, vec2(coord.x, coord.y - kStep * delta.y)); 37 | minVal = calcMin(minVal, vec2(coord.x + kStep * delta.x, coord.y )); 38 | minVal = calcMin(minVal, vec2(coord.x - kStep * delta.x, coord.y )); 39 | 40 | vec4 color = vec4(minVal.xyz, 1.0); 41 | gl_FragColor = color; 42 | } -------------------------------------------------------------------------------- /shaders/jfadebug.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform float maxDist; 3 | 4 | varying vec2 coord; 5 | 6 | void main() { 7 | float color = texture2D(texture, coord).r / maxDist; 8 | gl_FragColor = vec4(vec3(color), 1.0); 9 | } -------------------------------------------------------------------------------- /shaders/jfainit.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform sampler2D maxTex; 3 | 4 | uniform float upperLimit; 5 | 6 | varying vec2 coord; 7 | 8 | void main() { 9 | float val = texture2D(texture, coord).r; 10 | vec4 color = vec4(0, coord.x, coord.y, 1); 11 | 12 | float maxVal = texture2D(maxTex, vec2(0.0)).r; 13 | val = val/maxVal; 14 | 15 | if (val < upperLimit) { 16 | color.r = 1000.0; 17 | color.g = 1000.0; 18 | color.b = 1000.0; 19 | } 20 | 21 | gl_FragColor = color; 22 | } 23 | -------------------------------------------------------------------------------- /shaders/maxtexture.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D max1; 2 | uniform sampler2D max2; 3 | 4 | varying vec2 coord; 5 | 6 | void main(void) { 7 | float maxVal = max(texture2D(max1, coord).r, texture2D(max2, coord).r); 8 | 9 | gl_FragColor = vec4(maxVal, 0.0, 0.0, 1.0); 10 | } 11 | -------------------------------------------------------------------------------- /shaders/outliercombine.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D grid; 2 | 3 | uniform float gridSize; 4 | uniform float pointRadius; 5 | uniform vec2 resolution; 6 | uniform vec2 offset; 7 | 8 | varying vec2 coord; 9 | 10 | float getDist(vec2 lookahead) { 11 | vec2 gridPos = floor((coord + offset) * resolution / gridSize); 12 | gridPos = (gridPos + lookahead) / resolution; 13 | vec4 data = texture2D(grid, gridPos); 14 | 15 | if (data.a > 0.0) { 16 | return distance(data.xy * resolution, coord * resolution); 17 | } else { 18 | return 10000.0; 19 | } 20 | } 21 | 22 | void main() { 23 | float ret = 10000.0; 24 | for (int i = -1; i <= 1; i++) { 25 | for (int j = -1; j <= 1; j++) { 26 | ret = min(ret, getDist(vec2(float(i), float(j)))); 27 | } 28 | } 29 | 30 | if (ret < pointRadius) { 31 | gl_FragColor = vec4(1.0); 32 | } else { 33 | gl_FragColor = vec4(0.0); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /shaders/outliers.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D jfa; 2 | 3 | varying vec2 coord; 4 | varying float zcoord; 5 | 6 | void main() { 7 | float dist = texture2D(jfa, coord).r; 8 | //gl_FragColor = vec4(vColor.r * dist / 500.0, vColor.gba); 9 | 10 | // set a lower bound 11 | float a = 1.0; 12 | if (dist <= 1.0) { 13 | discard; 14 | } 15 | 16 | float attenuation = 1.0 - (1.0 * dist / 200.0); 17 | if (zcoord > attenuation) { 18 | discard; 19 | } 20 | 21 | gl_FragColor = vec4(vec3(zcoord), a); 22 | } -------------------------------------------------------------------------------- /shaders/outliers.vs: -------------------------------------------------------------------------------- 1 | uniform sampler2D jfa; 2 | uniform float gridSize; 3 | uniform vec2 resolution; 4 | uniform vec2 offset; 5 | 6 | attribute vec3 position; 7 | 8 | varying vec4 vColor; 9 | 10 | void main() { 11 | vec4 thisPos = gl_ModelViewProjectionMatrix * vec4(position.xy, 0.0, 1.0); 12 | vec2 coord = thisPos.xy * 0.5 + 0.5; 13 | 14 | // condition for discarding point 15 | // distance from the thresholded region (don't draw points within the thresholded region) 16 | float dist = texture2D(jfa, coord).r; 17 | float clip = dist < (gridSize / 2.0) ? 0.0 : 1.0; 18 | 19 | // get the grid coordinates of this particular point, and convert to clip-space coordinates 20 | vec2 c = floor((coord + offset) * resolution / gridSize); 21 | c = 2.0 * (c / resolution) - 1.0; 22 | 23 | gl_Position = vec4(c, mod(position.z, 1.0), clip); 24 | gl_PointSize = 1.0; 25 | vColor = vec4(coord, 0.0, 1.0); 26 | } 27 | -------------------------------------------------------------------------------- /shaders/plot.fs: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision highp float; 3 | #endif 4 | 5 | void main() { 6 | gl_FragColor = vec4(1,0,0,1); 7 | gl_FragColor.a = 1.0 - smoothstep(0.45, 0.5, distance(gl_PointCoord, vec2(0.5))); 8 | } -------------------------------------------------------------------------------- /shaders/plot.vs: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision highp float; 3 | #endif 4 | 5 | attribute vec2 a_position; 6 | 7 | uniform mat3 u_xform; 8 | uniform float u_ptsize; 9 | 10 | void main() { 11 | vec3 transformedCoords = u_xform * vec3(a_position, 1.0); 12 | gl_Position = vec4(transformedCoords.xy, 0.0, 1.0); 13 | gl_PointSize = u_ptsize; 14 | } -------------------------------------------------------------------------------- /shaders/shade.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform sampler2D distances; 3 | uniform sampler2D maxTex; 4 | uniform sampler2D outliers; 5 | uniform vec2 delta; 6 | uniform vec3 rgbColor; 7 | uniform float lowerLimit; 8 | uniform float upperLimit; 9 | 10 | varying vec2 coord; 11 | 12 | float f(float n, float eps, float k){ 13 | if(n > eps){ 14 | return pow(n, 1.0/3.0); 15 | }else{ 16 | return (k * n + 16.0) / 116.0; 17 | } 18 | } 19 | vec3 XYZtoLRGB(vec3 xyz, bool clamp){ 20 | vec3 M0 = vec3( 3.2404542, -1.5371385, -0.4985314); 21 | vec3 M1 = vec3(-0.9692660, 1.8760108, 0.0415560); 22 | vec3 M2 = vec3( 0.0556434, -0.2040259, 1.0572252); 23 | 24 | float r = dot(xyz, M0); 25 | float g = dot(xyz, M1); 26 | float b = dot(xyz, M2); 27 | 28 | if(clamp){ 29 | r = min(max(r, 0.0), 1.0); 30 | g = min(max(g, 0.0), 1.0); 31 | b = min(max(b, 0.0), 1.0); 32 | } 33 | 34 | return vec3(r,g,b); 35 | } 36 | vec3 LRGBtoXYZ(vec3 lrgb){ 37 | vec3 M0 = vec3(0.4124564, 0.3575761, 0.1804375); 38 | vec3 M1 = vec3(0.2126729, 0.7151522, 0.0721750); 39 | vec3 M2 = vec3(0.0193339, 0.1191920, 0.9503041); 40 | 41 | return vec3(dot(lrgb, M0), dot(lrgb, M1), dot(lrgb, M2)); 42 | } 43 | vec3 XYZtoLAB(vec3 xyz){ 44 | float Xr = 0.95047; 45 | float Yr = 1.0; 46 | float Zr = 1.08883; 47 | 48 | float eps = 216.0 / 24389.0; 49 | float k = 24389.0 / 27.0; 50 | 51 | float xr = xyz.x / Xr; 52 | float yr = xyz.y / Yr; 53 | float zr = xyz.z / Zr; 54 | 55 | xr = f(xr, eps, k); 56 | yr = f(yr, eps, k); 57 | zr = f(zr, eps, k); 58 | 59 | float L = 116.0 * yr - 16.0; 60 | float a = 500.0 * (xr - yr); 61 | float b = 200.0 * (yr - zr); 62 | 63 | return vec3(L,a,b); 64 | } 65 | vec3 LABtoXYZ(vec3 lab){ 66 | float Xr = 0.95047; 67 | float Yr = 1.0; 68 | float Zr = 1.08883; 69 | 70 | float eps = 216.0 / 24389.0; 71 | float k = 24389.0 / 27.0; 72 | 73 | float L = lab.x; 74 | float a = lab.y; 75 | float b = lab.z; 76 | 77 | float fy = (L + 16.0) / 116.0; 78 | float fx = a / 500.0 + fy; 79 | float fz = -b / 200.0 + fy; 80 | 81 | float xr = ((pow(fx, 3.0) > eps) ? pow(fx, 3.0) : (116.0 * fx - 16.0) / k); 82 | float yr = ((L > (k * eps)) ? pow(((L + 16.0) / 116.0), 3.0) : L / k); 83 | float zr = ((pow(fz, 3.0) > eps) ? pow(fz, 3.0) : (116.0 * fz - 16.0) / k); 84 | 85 | float X = xr * Xr; 86 | float Y = yr * Yr; 87 | float Z = zr * Zr; 88 | 89 | return vec3(X,Y,Z); 90 | } 91 | vec3 LABtoLCH(vec3 lab){ 92 | float l = lab.x; 93 | float a = lab.y; 94 | float b = lab.z; 95 | 96 | float C = sqrt(a*a + b*b); 97 | float H = atan(b,a); 98 | 99 | return vec3(l,C,H); 100 | } 101 | vec3 LCHtoLAB(vec3 lch){ 102 | float l = lch.x; 103 | float c = lch.y; 104 | float h = lch.z; 105 | 106 | return vec3(l, c*cos(h), c*sin(h)); 107 | } 108 | vec3 RGBtoLAB(vec3 rgb){ 109 | return XYZtoLAB(LRGBtoXYZ(rgb)); 110 | } 111 | vec3 LABtoRGB(vec3 lab, bool clamp){ 112 | return XYZtoLRGB(LABtoXYZ(lab),clamp); 113 | } 114 | 115 | void main() { 116 | // vec2 texCoords = coord + vec2(0.5) * delta; 117 | float w = texture2D(texture, coord).r; 118 | float dist = texture2D(distances, coord).r; 119 | 120 | float maxVal = texture2D(maxTex, vec2(0.0)).r; 121 | float wf = w / maxVal; 122 | float a = wf > lowerLimit ? wf : 0.0; 123 | 124 | vec3 lab = RGBtoLAB(rgbColor); 125 | vec3 lch = LABtoLCH(lab); 126 | 127 | // draw outlier points 128 | float outlier = texture2D(outliers, coord).r; 129 | if (outlier > 0.0) { 130 | a = 1000.0; 131 | } else if ((dist > 0.0) && (dist < 3.0)) { 132 | lch.x *= 0.95; 133 | lch.y *= 0.95; 134 | a = 1000.0; 135 | } else { 136 | if (wf >= upperLimit) { 137 | wf = 1.0; 138 | a = 1.0; 139 | } else { 140 | wf = wf/upperLimit; 141 | } 142 | 143 | lch.x = lch.x * wf + (1.0 - wf) * 100.0; 144 | lch.y = lch.y * wf; 145 | } 146 | 147 | 148 | vec3 ret = LABtoRGB(LCHtoLAB(lch), true); 149 | gl_FragColor = vec4(ret.xyz, a); 150 | } -------------------------------------------------------------------------------- /shaders/testblur.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 offset; 3 | uniform float sigma; 4 | uniform vec2 delta; 5 | 6 | varying vec2 coord; 7 | 8 | void main() { 9 | float sum = 0.0; 10 | float accum = 0.0; 11 | float sigma = 15.0; 12 | for (int i = -45; i <= 45; i++) { 13 | vec2 thisOffset = offset * vec2(float(i)) * delta; 14 | vec2 target = coord + thisOffset; 15 | 16 | float gW = exp(-float(i*i) / (2.0 * sigma * sigma)); 17 | 18 | if (target.x >= 0.0 && target.x <= 1.0 && target.y >= 0.0 && target.y <= 1.0) { 19 | sum += gW; 20 | accum += texture2D(texture, vec2(target)).r * gW; 21 | } 22 | } 23 | 24 | accum /= sum; 25 | gl_FragColor = vec4(accum, 0.0, 0.0, 1.0); 26 | } -------------------------------------------------------------------------------- /shaders/testblur.vs: -------------------------------------------------------------------------------- 1 | varying vec2 coord; 2 | 3 | void main() { 4 | coord = gl_Vertex.xy * 0.5 + 0.5; 5 | gl_Position = vec4(gl_Vertex.xyz, 1.0); 6 | } 7 | -------------------------------------------------------------------------------- /shaders/testblur128.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 offset; 3 | uniform float sigma; 4 | uniform vec2 delta; 5 | 6 | varying vec2 coord; 7 | 8 | void main() { 9 | float sum = 0.0; 10 | float accum = 0.0; 11 | for (int i = -128; i <= 128; i++) { 12 | vec2 thisOffset = offset * vec2(float(i)) * delta; 13 | vec2 target = coord + thisOffset; 14 | 15 | float gW = exp(-float(i*i) / (2.0 * sigma * sigma)); 16 | 17 | if (target.x >= 0.0 && target.x <= 1.0 && target.y >= 0.0 && target.y <= 1.0) { 18 | sum += gW; 19 | accum += texture2D(texture, vec2(target)).r * gW; 20 | } 21 | } 22 | 23 | accum /= sum; 24 | gl_FragColor = vec4(accum, 0.0, 0.0, 1.0); 25 | } -------------------------------------------------------------------------------- /shaders/testblur16.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 offset; 3 | uniform float sigma; 4 | uniform vec2 delta; 5 | 6 | varying vec2 coord; 7 | 8 | void main() { 9 | float sum = 0.0; 10 | float accum = 0.0; 11 | for (int i = -16; i <= 16; i++) { 12 | vec2 thisOffset = offset * vec2(float(i)) * delta; 13 | vec2 target = coord + thisOffset; 14 | 15 | float gW = exp(-float(i*i) / (2.0 * sigma * sigma)); 16 | 17 | if (target.x >= 0.0 && target.x <= 1.0 && target.y >= 0.0 && target.y <= 1.0) { 18 | sum += gW; 19 | accum += texture2D(texture, vec2(target)).r * gW; 20 | } 21 | } 22 | 23 | accum /= sum; 24 | gl_FragColor = vec4(accum, 0.0, 0.0, 1.0); 25 | } -------------------------------------------------------------------------------- /shaders/testblur256.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 offset; 3 | uniform float sigma; 4 | uniform vec2 delta; 5 | 6 | varying vec2 coord; 7 | 8 | void main() { 9 | float sum = 0.0; 10 | float accum = 0.0; 11 | for (int i = -256; i <= 256; i++) { 12 | vec2 thisOffset = offset * vec2(float(i)) * delta; 13 | vec2 target = coord + thisOffset; 14 | 15 | float gW = exp(-float(i*i) / (2.0 * sigma * sigma)); 16 | 17 | if (target.x >= 0.0 && target.x <= 1.0 && target.y >= 0.0 && target.y <= 1.0) { 18 | sum += gW; 19 | accum += texture2D(texture, vec2(target)).r * gW; 20 | } 21 | } 22 | 23 | accum /= sum; 24 | gl_FragColor = vec4(accum, 0.0, 0.0, 1.0); 25 | } -------------------------------------------------------------------------------- /shaders/testblur32.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 offset; 3 | uniform float sigma; 4 | uniform vec2 delta; 5 | 6 | varying vec2 coord; 7 | 8 | void main() { 9 | float sum = 0.0; 10 | float accum = 0.0; 11 | for (int i = -32; i <= 32; i++) { 12 | vec2 thisOffset = offset * vec2(float(i)) * delta; 13 | vec2 target = coord + thisOffset; 14 | 15 | float gW = exp(-float(i*i) / (2.0 * sigma * sigma)); 16 | 17 | if (target.x >= 0.0 && target.x <= 1.0 && target.y >= 0.0 && target.y <= 1.0) { 18 | sum += gW; 19 | accum += texture2D(texture, vec2(target)).r * gW; 20 | } 21 | } 22 | 23 | accum /= sum; 24 | gl_FragColor = vec4(accum, 0.0, 0.0, 1.0); 25 | } -------------------------------------------------------------------------------- /shaders/testblur64.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 offset; 3 | uniform float sigma; 4 | uniform vec2 delta; 5 | 6 | varying vec2 coord; 7 | 8 | void main() { 9 | float sum = 0.0; 10 | float accum = 0.0; 11 | for (int i = -64; i <= 64; i++) { 12 | vec2 thisOffset = offset * vec2(float(i)) * delta; 13 | vec2 target = coord + thisOffset; 14 | 15 | float gW = exp(-float(i*i) / (2.0 * sigma * sigma)); 16 | 17 | if (target.x >= 0.0 && target.x <= 1.0 && target.y >= 0.0 && target.y <= 1.0) { 18 | sum += gW; 19 | accum += texture2D(texture, vec2(target)).r * gW; 20 | } 21 | } 22 | 23 | accum /= sum; 24 | gl_FragColor = vec4(accum, 0.0, 0.0, 1.0); 25 | } -------------------------------------------------------------------------------- /shaders/testfloat.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 delta; 3 | 4 | varying vec2 coord; 5 | 6 | vec4 float2Color(float f) 7 | { 8 | f *= 256.0; 9 | float r = floor(f); 10 | f -= r; 11 | f *= 256.0; 12 | float g = floor(f); 13 | f -= g; 14 | f *= 256.0; 15 | float b = floor(f); 16 | return vec4(r / 255.0, g / 255.0, b / 255.0, 1.0); 17 | } 18 | 19 | float color2Float(vec4 c) 20 | { 21 | return c.r * 255.0 / 256.0 + c.g * 255.0 / (256.0 * 256.0) + c.b * 255.0 / (256.0 * 256.0 * 256.0); 22 | } 23 | 24 | void main() { 25 | gl_FragColor = float2Color(texture2D(texture, coord).r); 26 | } -------------------------------------------------------------------------------- /shaders/testlgl.fs: -------------------------------------------------------------------------------- 1 | varying vec3 vColor; 2 | 3 | void main() { 4 | gl_FragColor = vec4(vColor, 1.0); 5 | gl_FragColor.a = 1.0 - smoothstep(0.45, 0.5, distance(gl_PointCoord, vec2(0.5))); 6 | } -------------------------------------------------------------------------------- /shaders/testlgl.vs: -------------------------------------------------------------------------------- 1 | attribute vec2 position; 2 | 3 | uniform float pointSize; 4 | uniform vec3 color; 5 | 6 | varying vec3 vColor; 7 | 8 | void main() { 9 | gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 0.0, 1.0); 10 | gl_PointSize = pointSize; 11 | vColor = color; 12 | } -------------------------------------------------------------------------------- /shaders/testmax.fs: -------------------------------------------------------------------------------- 1 | uniform sampler2D texture; 2 | uniform vec2 delta; 3 | 4 | varying vec2 coord; 5 | 6 | void main(void) { 7 | float curMax = 0.0; 8 | 9 | for (int i = 0; i < 8; i++) { 10 | for (int j = 0; j < 8; j++) { 11 | vec2 thisPos = coord * 8.0 + vec2(float(i), float(j)) * delta; 12 | if (thisPos.x >= 0.0 && thisPos.x <= 1.0 && thisPos.y >= 0.0 && thisPos.y <= 1.0) { 13 | curMax = max(curMax, texture2D(texture, thisPos).r); 14 | } 15 | } 16 | } 17 | 18 | gl_FragColor = vec4(curMax, 0.0, 0.0, 1.0); 19 | } -------------------------------------------------------------------------------- /shaders/testpt.fs: -------------------------------------------------------------------------------- 1 | varying vec4 vColor; 2 | 3 | void main() { 4 | gl_FragColor = vColor; 5 | } -------------------------------------------------------------------------------- /shaders/testpt.vs: -------------------------------------------------------------------------------- 1 | attribute vec3 position; 2 | 3 | uniform float pointSize; 4 | 5 | varying vec4 vColor; 6 | 7 | void main() { 8 | gl_Position = gl_ModelViewProjectionMatrix * vec4(position.xy, 0.0, 1.0); 9 | gl_PointSize = pointSize; 10 | vColor = vec4(1.0); 11 | } 12 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | background-color: #aaa; 3 | font-family: sans-serif; 4 | } 5 | 6 | .navbar-brand img { 7 | margin: -12px 7px 0 0; 8 | } 9 | 10 | #splattercell { 11 | text-align: center; 12 | position: relative; 13 | } 14 | 15 | #splatters { 16 | height: 607px; 17 | display: inline-block; 18 | } 19 | 20 | .splatter-panel { 21 | background-color: #fff; 22 | border: 1px solid black; 23 | display: inline-block; 24 | width: 150px; 25 | position: absolute; 26 | margin-left: 10px; 27 | text-align: left; 28 | } 29 | 30 | #detail { 31 | bottom: -10px; 32 | } 33 | 34 | #legend li { 35 | display: block; 36 | margin-bottom: 7px; 37 | } 38 | 39 | .legend-swatch { 40 | display: inline-block; 41 | width: 15px; 42 | height: 15px; 43 | margin-right: 7px; 44 | border: none; 45 | } 46 | 47 | /* dunno why #2dcanvas doesn't work */ 48 | canvas:nth-child(2) { 49 | position: relative; 50 | top: -602px; 51 | z-index: 10; 52 | } 53 | 54 | canvas { 55 | margin: 0 auto; 56 | border: 1px solid black; 57 | display: block; 58 | } 59 | 60 | section { 61 | width: 150px; 62 | height: auto; 63 | margin: 100px auto 0; 64 | position: relative; 65 | } 66 | 67 | .clearcanvas { 68 | position: absolute; top: 610px; left: 6px; clear: both; 69 | } 70 | 71 | #controls { 72 | width: 800px; 73 | } 74 | 75 | .ui-slider { 76 | margin-top: 13px; 77 | width: 330px; 78 | float: left; 79 | } 80 | 81 | .slider-value { 82 | margin: 6px 0 0 20px; 83 | } 84 | 85 | .ui-slider-horizontal { 86 | background: #555 !important; 87 | border: 1px solid #000 !important; 88 | height: 8px !important; 89 | } 90 | 91 | .ui-slider-handle { 92 | background: url("img/handle.png") !important; 93 | border: none !important; 94 | width: 25px !important; 95 | height: 25px !important; 96 | outline: none; 97 | top: -9px !important; 98 | } 99 | 100 | /* uses colorbrewer2.org's 5-class Pastel2 */ 101 | #bandwidth > .ui-widget-header { 102 | background: #b3e2cd; 103 | } 104 | 105 | #threshold > .ui-widget-header { 106 | background: #fdcdac; 107 | } 108 | 109 | #clutter > .ui-widget-header { 110 | background: #cbd5e8; 111 | } 112 | 113 | #outlierSize > .ui-widget-header { 114 | background: #f4cae4; 115 | } 116 | 117 | #subsetpercent > .ui-widget-header { 118 | background: #e6f5c9; 119 | } 120 | 121 | /* FILE UPLOADING STYLES */ 122 | 123 | .lg-msg { 124 | padding: 15px; 125 | } --------------------------------------------------------------------------------