From 9e08f697bf3f0b62c4370bae2a6052a60e513dd7 Mon Sep 17 00:00:00 2001
From: Jake Read <jake.read@cba.mit.edu>
Date: Fri, 18 Oct 2019 15:55:44 -0400
Subject: [PATCH] stash at dex
---
README.md | 11 +-
hunks/adhoc/2x_linechart.js | 138 +++
hunks/adhoc/open-4411-csv.js | 58 +
hunks/adhoc/open-dex-json.js | 57 +
hunks/data/linechart.js | 2 -
hunks/data/save.js | 4 +-
hunks/incomplete/opencsv.js | 128 +++
libs/csv.js | 358 ++++++
save/systems/chart-adhoc-compare.json | 103 ++
test_files/Specimen_RawData_4.csv | 1522 +++++++++++++++++++++++++
test_files/dex-test-03.json | 614 ++++++++++
11 files changed, 2989 insertions(+), 6 deletions(-)
create mode 100644 hunks/adhoc/2x_linechart.js
create mode 100644 hunks/adhoc/open-4411-csv.js
create mode 100644 hunks/adhoc/open-dex-json.js
create mode 100644 hunks/incomplete/opencsv.js
create mode 100644 libs/csv.js
create mode 100644 save/systems/chart-adhoc-compare.json
create mode 100644 test_files/Specimen_RawData_4.csv
create mode 100644 test_files/dex-test-03.json
diff --git a/README.md b/README.md
index 55e452a..11e894b 100644
--- a/README.md
+++ b/README.md
@@ -203,4 +203,13 @@ You can now run Cuttlefish by doing:
It should then report an IP and port. One is your local address, if the browser you are using is on the same machine as the node process, and the other is the machine's outward facing IP. You should be able to point the browser to one of these IPs, and you're off and cuttling.
-...
+# Dev Golf
+
+```
+- assign meaning to charts and graphs (date / location / etc)
+ - this should be generic json-object making, yeah? / csv
+- save tests as .json objects (optionally) develop program for reading
+ - overlay multiples, save images
+ - read-in csv as well, polymorphic for outputs
+- generic wrap / unwrap data objects ...
+```
diff --git a/hunks/adhoc/2x_linechart.js b/hunks/adhoc/2x_linechart.js
new file mode 100644
index 0000000..d1b1faa
--- /dev/null
+++ b/hunks/adhoc/2x_linechart.js
@@ -0,0 +1,138 @@
+/*
+
+simple line chart, talking to array reference
+
+minuteman hack for displaying instron data w/ dex data ... jake is tired
+this should expand to generalize against any # of inputs (state, polymorphic)
+and should have labels, and wrap with some generalized system understanding of data sets ? md ?
+paired / matched sets of array data ?
+
+*/
+
+// using https://bl.ocks.org/d3noob/402dd382a51a4f6eea487f9a35566de0
+
+import {
+ Hunkify,
+ Input,
+ Output,
+ State
+} from '../hunks.js'
+
+function LineChart() {
+ Hunkify(this)
+ //
+ let dtRef0 = new Input('reference', 'array', this)
+ let dtRef1 = new Input('reference', 'array', this)
+ this.inputs.push(dtRef0, dtRef1)
+ // how many to keep
+ let displayNum = new State('number', 'displayCount', 50)
+ this.states.push(displayNum)
+
+ // some global items,
+ var datas = [
+ [
+ [0, 0],
+ [1, 1]
+ ],
+ [
+ [0, 0],
+ [2, 2]
+ ]
+ ]
+ let uniqueDivId = ''
+
+ // to claim some space in the DOM, we make a handle for ourselv
+ this.dom = {}
+
+ this.init = () => {
+ console.log('INIT linechart')
+ // make a unique id, we use a flat d3 search to find and update this ...
+ uniqueDivId = 'linechart_div_' + Math.round(Math.random() * 1000)
+ this.dom = $('<div>').attr('id', uniqueDivId).get(0)
+ }
+
+ this.onload = () => {
+ // our vars,
+ var margin = {
+ top: 20,
+ right: 20,
+ bottom: 30,
+ left: 90
+ },
+ width = 960 - margin.left - margin.right,
+ height = 500 - margin.top - margin.bottom;
+ var x = d3.scaleLinear().range([0, width])
+ var y = d3.scaleLinear().range([height, 0])
+ var thesvg = null
+ // make ah function
+ this.reloadDatas = () => {
+ var valueline = d3.line()
+ .x(function(d) {
+ return x(d[0])
+ })
+ .y(function(d) {
+ return y(d[1])
+ })
+ // scale
+ x.domain([0, d3.max(datas[0], function(d) {
+ return d[0];
+ })])
+ y.domain([d3.min(datas[0], function(d) {
+ return d[1]
+ }), d3.max(datas[0], function(d) {
+ return d[1];
+ })])
+ if (thesvg) {
+ d3.select(`#${uniqueDivId}`).selectAll("*").remove()
+ }
+ thesvg = d3.select(`#${uniqueDivId}`).append("svg")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .append("g")
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+ // write it?
+ thesvg.append("path")
+ .data([datas[0]])
+ .attr("class", "line")
+ .attr("d", valueline)
+ thesvg.append("path")
+ .data([datas[1]])
+ .attr("class", "line")
+ .attr("d", valueline)
+ // write the x axis
+ thesvg.append("g")
+ .attr("transform", "translate(0," + height + ")")
+ .call(d3.axisBottom(x))
+ // the y axis
+ thesvg.append("g")
+ .call(d3.axisLeft(y))
+ }
+ // so then
+ this.requestResize(1000, 520)
+ // startup
+ this.reloadDatas()
+ }
+
+ this.onresize = () => {
+ console.log(this.dom.clientHeight, this.dom.clientWidth)
+ }
+
+ // hmmm
+ this.loop = () => {
+ // pull and append
+ if (dtRef0.io()) {
+ // WARN to others... the -1 is here bc is it a useful hack for jake
+ // at the moment ! apologies
+ datas[0] = dtRef0.get()
+ this.reloadDatas()
+ }
+ if (dtRef1.io()) {
+ // WARN to others... the -1 is here bc is it a useful hack for jake
+ // at the moment ! apologies
+ datas[1] = dtRef1.get()
+ this.reloadDatas()
+ }
+ }
+}
+
+export default LineChart
diff --git a/hunks/adhoc/open-4411-csv.js b/hunks/adhoc/open-4411-csv.js
new file mode 100644
index 0000000..e656b5e
--- /dev/null
+++ b/hunks/adhoc/open-4411-csv.js
@@ -0,0 +1,58 @@
+/*
+
+open csv, setup outputs for fields (?)
+
+*/
+
+import {
+ Hunkify,
+ Input,
+ Output,
+ State
+} from '../hunks.js'
+
+import { CSV } from '../../libs/csv.js'
+
+export default function OpenCSV() {
+ Hunkify(this)
+
+ let outref = new Output('reference', 'data', this)
+ this.outputs.push(outref)
+
+ let readCsv = (file) => {
+ let reader = new FileReader()
+ reader.onload = (evt) => {
+ let parsed = CSV.parse(evt.target.result)
+ // wrip headers off
+ let records = parsed.slice(2)
+ let zc = records.findIndex((elem) => {
+ return elem[1] > 0
+ })
+ console.log('zc', zc)
+ records = records.slice(zc)
+ let adjusted = []
+ for(let item of records){
+ adjusted.push([item[1], item[2]])
+ }
+ // now we can write outputs
+ outref.put(adjusted)
+ }
+ reader.readAsText(file)
+ }
+
+ this.init = () => {
+ this.dom = $('<div>').get(0)
+ }
+
+ this.onload = () => {
+ let btn = $('<input type="file" accept=".csv">').get(0)
+ $(btn).on('change', (evt) => {
+ readCsv(evt.target.files[0])
+ })
+ $(this.dom).append(btn)
+ }
+
+ this.loop = () => {
+ }
+
+}
diff --git a/hunks/adhoc/open-dex-json.js b/hunks/adhoc/open-dex-json.js
new file mode 100644
index 0000000..c71751e
--- /dev/null
+++ b/hunks/adhoc/open-dex-json.js
@@ -0,0 +1,57 @@
+/*
+
+open csv, setup outputs for fields (?)
+
+*/
+
+import {
+ Hunkify,
+ Input,
+ Output,
+ State
+} from '../hunks.js'
+
+
+export default function OpenJSON() {
+ Hunkify(this)
+
+ let outref = new Output('reference', 'data', this)
+ this.outputs.push(outref)
+
+ let readJSON = (file) => {
+ let reader = new FileReader()
+ reader.onload = (evt) => {
+ let parsed = JSON.parse(evt.target.result)
+ // put zeroes together
+ let zc = parsed.findIndex((elem) => {
+ return elem[1] > 0
+ })
+ console.log(zc)
+ parsed = parsed.slice(zc)
+ console.log('json', parsed)
+ for(let pt of parsed){
+ pt[0] = pt[0]*0.001
+ pt[1] = pt[1]*0.0098
+ }
+ outref.put(parsed)
+ // outref.put(adjusted)
+ }
+ reader.readAsText(file)
+ }
+
+ this.init = () => {
+ this.dom = $('<div>').get(0)
+ }
+
+ this.onload = () => {
+ let btn = $('<input type="file" accept=".json">').get(0)
+ $(btn).on('change', (evt) => {
+ readJSON(evt.target.files[0])
+ })
+ $(this.dom).append(btn)
+ }
+
+ this.loop = () => {
+ }
+
+}
diff --git a/hunks/data/linechart.js b/hunks/data/linechart.js
index d189377..1b103f6 100644
--- a/hunks/data/linechart.js
+++ b/hunks/data/linechart.js
@@ -40,7 +40,6 @@ function LineChart() {
}
this.onload = () => {
- console.log('DOMLOAD linechart')
// our vars,
var margin = {
top: 20,
@@ -53,7 +52,6 @@ function LineChart() {
var x = d3.scaleLinear().range([0, width])
var y = d3.scaleLinear().range([height, 0])
var thesvg = null
- console.log("svg", thesvg)
// make ah function
this.reloadDatas = () => {
var valueline = d3.line()
diff --git a/hunks/data/save.js b/hunks/data/save.js
index 2b4e2ba..78e666d 100644
--- a/hunks/data/save.js
+++ b/hunks/data/save.js
@@ -11,7 +11,7 @@ import {
State
} from '../hunks.js'
-function Save(){
+export default function Save(){
Hunkify(this)
let inobj = new Input("reference", "object", this)
@@ -54,5 +54,3 @@ function Save(){
}
}
}
-
-export default Save
diff --git a/hunks/incomplete/opencsv.js b/hunks/incomplete/opencsv.js
new file mode 100644
index 0000000..5906681
--- /dev/null
+++ b/hunks/incomplete/opencsv.js
@@ -0,0 +1,128 @@
+/*
+
+open csv, setup outputs for fields (?)
+
+INCOMPLETE: have to fix 'replaceDef' in the view ... scuttles the HTML, but should only update the
+inputs / outputs ...
+in general: hunk polymorphism is tough ?
+
+*/
+
+import {
+ Hunkify,
+ Input,
+ Output,
+ State
+} from '../hunks.js'
+
+import { CSV } from '../../libs/csv.js'
+
+export default function OpenCSV() {
+ Hunkify(this)
+
+ let names = []
+ let records = []
+ let updates = []
+ let headerCount = new State('number', 'header rows', 2)
+ let syncOption = new State('boolean', 'synchronous', true)
+ let releaseData = new State('boolean', 'release', false)
+ this.states.push(headerCount, syncOption, releaseData)
+ releaseData.onChange = (value) => {
+ for (let i in updates) {
+ updates[i] = true
+ }
+ }
+
+ // trouble with this method: on restore program, no outputs will exist...
+ let writeOutputs = () => {
+ console.log('records', records)
+ // ensure our list is this long:
+ this.outputs.length = records[0].length
+ // and sweep,
+ for (let i in records[0]) {
+ // if we have it already, and it's the same type, maintain connections...
+ if (this.outputs[i] && this.outputs[i].type === typeof records[i][0]) {
+ this.outputs[i].name = names[i]
+ continue
+ } else {
+ this.outputs[i] = new Output(typeof records[i][0], names[i], this)
+ }
+ }
+ // and reset
+ this.mgr.evaluateHunk(this)
+ }
+
+ let readCsv = (file) => {
+ let reader = new FileReader()
+ reader.onload = (evt) => {
+ let parsed = CSV.parse(evt.target.result)
+ console.log('parsed', parsed)
+ // ok,
+ if (headerCount.value) {
+ for (let i = 0; i < parsed[0].length; i++) {
+ names[i] = ''
+ for (let j = 0; j < headerCount.value; j++) {
+ names[i] += `${parsed[j][i]}`
+ }
+ }
+ // make header names by this row, otherwise do by types
+ } else {
+ for (let i = 0; i < parsed[0].length; i++) {
+ names[i] = typeof parsed[0][i]
+ }
+ }
+ // have names,
+ console.log('names', names)
+ // records, less headers
+ records = parsed.slice(headerCount.value)
+ // all should ship:
+ updates.length = 0
+ for (let i in parsed[0]) {
+ updates.push(true)
+ }
+ // now we can write outputs:
+ writeOutputs()
+ }
+ reader.readAsText(file)
+ }
+
+ this.init = () => {
+ this.dom = $('<div>').get(0)
+ }
+
+ this.onload = () => {
+ let btn = $('<input type="file" accept=".csv">').get(0)
+ $(btn).on('change', (evt) => {
+ readCsv(evt.target.files[0])
+ })
+ $(this.dom).append(btn)
+ }
+
+ this.loop = () => {
+ // flow behaviour: if 'sync', check all clear and all updated, then ship all
+ // if not sync, ship any that are updated & clear
+ if(this.outputs.length < 1) return
+ // continue...
+ if(syncOption.value){
+ // synchronous shipments
+ let clear = true
+ for(let o in this.outputs){
+ if(this.outputs[o].io()) clear = false
+ if(!updates[o]) clear = false
+ }
+ if(clear){
+ for(let o in this.outputs){
+ this.outputs[o].put(records[o])
+ }
+ }
+ } else {
+ // spaghetti shipments
+ for(let o in this.outputs){
+ if(updates[o] && !this.outputs[o].io()){
+ this.outputs[o].put(records[o])
+ }
+ }
+ }
+ }
+
+}
diff --git a/libs/csv.js b/libs/csv.js
new file mode 100644
index 0000000..363fedd
--- /dev/null
+++ b/libs/csv.js
@@ -0,0 +1,358 @@
+// from https://github.com/okfn/csv.js
+
+/* global jQuery, _ */
+var CSV = {};
+
+// Note that provision of jQuery is optional (it is **only** needed if you use fetch on a remote file)
+(function(my) {
+ "use strict";
+ my.__type__ = "csv";
+
+ // use either jQuery or Underscore Deferred depending on what is available
+ var Deferred =
+ (typeof jQuery !== "undefined" && jQuery.Deferred) ||
+ (typeof _ !== "undefined" && _.Deferred) ||
+ function() {
+ var resolve, reject;
+ var promise = new Promise(function(res, rej) {
+ resolve = res;
+ reject = rej;
+ });
+ return {
+ resolve: resolve,
+ reject: reject,
+ promise: function() {
+ return promise;
+ }
+ };
+ };
+
+ my.fetch = function(dataset) {
+ var dfd = new Deferred();
+ if (dataset.file) {
+ var reader = new FileReader();
+ var encoding = dataset.encoding || "UTF-8";
+ reader.onload = function(e) {
+ var out = my.extractFields(my.parse(e.target.result, dataset), dataset);
+ out.useMemoryStore = true;
+ out.metadata = {
+ filename: dataset.file.name
+ };
+ dfd.resolve(out);
+ };
+ reader.onerror = function(e) {
+ dfd.reject({
+ error: {
+ message: "Failed to load file. Code: " + e.target.error.code
+ }
+ });
+ };
+ reader.readAsText(dataset.file, encoding);
+ } else if (dataset.data) {
+ var out = my.extractFields(my.parse(dataset.data, dataset), dataset);
+ out.useMemoryStore = true;
+ dfd.resolve(out);
+ } else if (dataset.url) {
+ var fetch =
+ window.fetch ||
+ function(url) {
+ var jq = jQuery.get(url);
+
+ var promiseResult = {
+ then: function(res) {
+ jq.done(res);
+ return promiseResult;
+ },
+ catch: function(rej) {
+ jq.fail(rej);
+ return promiseResult;
+ }
+ };
+ return promiseResult;
+ };
+ fetch(dataset.url)
+ .then(function(response) {
+ if (response.text) {
+ return response.text();
+ } else {
+ return response;
+ }
+ })
+ .then(function(data) {
+ var out = my.extractFields(my.parse(data, dataset), dataset);
+ out.useMemoryStore = true;
+ dfd.resolve(out);
+ })
+ .catch(function(req, status) {
+ dfd.reject({
+ error: {
+ message: "Failed to load file. " +
+ req.statusText +
+ ". Code: " +
+ req.status,
+ request: req
+ }
+ });
+ });
+ }
+ return dfd.promise();
+ };
+
+ // Convert array of rows in { records: [ ...] , fields: [ ... ] }
+ // @param {Boolean} noHeaderRow If true assume that first row is not a header (i.e. list of fields but is data.
+ my.extractFields = function(rows, noFields) {
+ if (noFields.noHeaderRow !== true && rows.length > 0) {
+ return {
+ fields: rows[0],
+ records: rows.slice(1)
+ };
+ } else {
+ return {
+ records: rows
+ };
+ }
+ };
+
+ my.normalizeDialectOptions = function(options) {
+ // note lower case compared to CSV DDF
+ var out = {
+ delimiter: ",",
+ doublequote: true,
+ lineterminator: "\n",
+ quotechar: '"',
+ skipinitialspace: true,
+ skipinitialrows: 0
+ };
+ for (var key in options) {
+ if (key === "trim") {
+ out["skipinitialspace"] = options.trim;
+ } else {
+ out[key.toLowerCase()] = options[key];
+ }
+ }
+ return out;
+ };
+
+ // ## parse
+ //
+ // For docs see the README
+ //
+ // Heavily based on uselesscode's JS CSV parser (MIT Licensed):
+ // http://www.uselesscode.org/javascript/csv/
+ my.parse = function(s, dialect) {
+ // When line terminator is not provided then we try to guess it
+ // and normalize it across the file.
+ if (!dialect || (dialect && !dialect.lineterminator)) {
+ s = my.normalizeLineTerminator(s, dialect);
+ }
+
+ // Get rid of any trailing \n
+ var options = my.normalizeDialectOptions(dialect);
+ s = chomp(s, options.lineterminator);
+
+ var cur = "", // The character we are currently processing.
+ inQuote = false,
+ fieldQuoted = false,
+ field = "", // Buffer for building up the current field
+ row = [],
+ out = [],
+ i,
+ processField;
+
+ processField = function(field) {
+ if (fieldQuoted !== true) {
+ // If field is empty set to null
+ if (field === "") {
+ field = null;
+ // If the field was not quoted and we are trimming fields, trim it
+ } else if (options.skipinitialspace === true) {
+ field = trim(field);
+ }
+
+ // Convert unquoted numbers to their appropriate types
+ if (rxIsInt.test(field)) {
+ field = parseInt(field, 10);
+ } else if (rxIsFloat.test(field)) {
+ field = parseFloat(field, 10);
+ }
+ }
+ return field;
+ };
+
+ for (i = 0; i < s.length; i += 1) {
+ cur = s.charAt(i);
+
+ // If we are at a EOF or EOR
+ if (
+ inQuote === false &&
+ (cur === options.delimiter || cur === options.lineterminator)
+ ) {
+ field = processField(field);
+ // Add the current field to the current row
+ row.push(field);
+ // If this is EOR append row to output and flush row
+ if (cur === options.lineterminator) {
+ out.push(row);
+ row = [];
+ }
+ // Flush the field buffer
+ field = "";
+ fieldQuoted = false;
+ } else {
+ // If it's not a quotechar, add it to the field buffer
+ if (cur !== options.quotechar) {
+ field += cur;
+ } else {
+ if (!inQuote) {
+ // We are not in a quote, start a quote
+ inQuote = true;
+ fieldQuoted = true;
+ } else {
+ // Next char is quotechar, this is an escaped quotechar
+ if (s.charAt(i + 1) === options.quotechar) {
+ field += options.quotechar;
+ // Skip the next char
+ i += 1;
+ } else {
+ // It's not escaping, so end quote
+ inQuote = false;
+ }
+ }
+ }
+ }
+ }
+
+ // Add the last field
+ field = processField(field);
+ row.push(field);
+ out.push(row);
+
+ // Expose the ability to discard initial rows
+ if (options.skipinitialrows) out = out.slice(options.skipinitialrows);
+
+ return out;
+ };
+
+ my.normalizeLineTerminator = function(csvString, dialect) {
+ dialect = dialect || {};
+
+ // Try to guess line terminator if it's not provided.
+ if (!dialect.lineterminator) {
+ return csvString.replace(/(\r\n|\n|\r)/gm, "\n");
+ }
+ // if not return the string untouched.
+ return csvString;
+ };
+
+ my.objectToArray = function(dataToSerialize) {
+ var a = [];
+ var fieldNames = [];
+ for (var ii = 0; ii < dataToSerialize.fields.length; ii++) {
+ fieldNames.push(dataToSerialize.fields[ii].id);
+ }
+ a.push(fieldNames);
+ for (var ii = 0; ii < dataToSerialize.records.length; ii++) {
+ var tmp = [];
+ var record = dataToSerialize.records[ii];
+ for (var jj = 0; jj < fieldNames.length; jj++) {
+ tmp.push(record[fieldNames[jj]]);
+ }
+ a.push(tmp);
+ }
+ return a;
+ };
+
+ // ## serialize
+ //
+ // See README for docs
+ //
+ // Heavily based on uselesscode's JS CSV serializer (MIT Licensed):
+ // http://www.uselesscode.org/javascript/csv/
+ my.serialize = function(dataToSerialize, dialect) {
+ var a = null;
+ if (dataToSerialize instanceof Array) {
+ a = dataToSerialize;
+ } else {
+ a = my.objectToArray(dataToSerialize);
+ }
+ var options = my.normalizeDialectOptions(dialect);
+
+ var cur = "", // The character we are currently processing.
+ field = "", // Buffer for building up the current field
+ row = "",
+ out = "",
+ i,
+ j,
+ processField;
+
+ processField = function(field) {
+ if (field === null) {
+ // If field is null set to empty string
+ field = "";
+ } else if (typeof field === "string" && rxNeedsQuoting.test(field)) {
+ if (options.doublequote) {
+ field = field.replace(/"/g, '""');
+ }
+ // Convert string to delimited string
+ field = options.quotechar + field + options.quotechar;
+ } else if (typeof field === "number") {
+ // Convert number to string
+ field = field.toString(10);
+ }
+
+ return field;
+ };
+
+ for (i = 0; i < a.length; i += 1) {
+ cur = a[i];
+
+ for (j = 0; j < cur.length; j += 1) {
+ field = processField(cur[j]);
+ // If this is EOR append row to output and flush row
+ if (j === cur.length - 1) {
+ row += field;
+ out += row + options.lineterminator;
+ row = "";
+ } else {
+ // Add the current field to the current row
+ row += field + options.delimiter;
+ }
+ // Flush the field buffer
+ field = "";
+ }
+ }
+
+ return out;
+ };
+
+ var rxIsInt = /^\d+$/,
+ rxIsFloat = /^\d*\.\d+$|^\d+\.\d*$/,
+ // If a string has leading or trailing space,
+ // contains a comma double quote or a newline
+ // it needs to be quoted in CSV output
+ rxNeedsQuoting = /^\s|\s$|,|"|\n/,
+ trim = (function() {
+ // Fx 3.1 has a native trim function, it's about 10x faster, use it if it exists
+ if (String.prototype.trim) {
+ return function(s) {
+ return s.trim();
+ };
+ } else {
+ return function(s) {
+ return s.replace(/^\s*/, "").replace(/\s*$/, "");
+ };
+ }
+ })();
+
+ function chomp(s, lineterminator) {
+ if (s.charAt(s.length - lineterminator.length) !== lineterminator) {
+ // Does not end with \n, just return string
+ return s;
+ } else {
+ // Remove the \n
+ return s.substring(0, s.length - lineterminator.length);
+ }
+ }
+})(CSV);
+
+export { CSV }
diff --git a/save/systems/chart-adhoc-compare.json b/save/systems/chart-adhoc-compare.json
new file mode 100644
index 0000000..b16ba9b
--- /dev/null
+++ b/save/systems/chart-adhoc-compare.json
@@ -0,0 +1,103 @@
+{
+ "interpreterName": "cuttlefish",
+ "interpreterVersion": "v0.1",
+ "hunks": [
+ {
+ "type": "manager",
+ "name": "nrol",
+ "inputs": [
+ {
+ "name": "msgs",
+ "type": "byteArray"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "msgs",
+ "type": "byteArray",
+ "connections": [
+ {
+ "inHunkIndex": "1",
+ "inHunkInput": "0"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "view",
+ "name": "tlview",
+ "inputs": [
+ {
+ "name": "msgs",
+ "type": "byteArray"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "msgs",
+ "type": "byteArray",
+ "connections": [
+ {
+ "inHunkIndex": "0",
+ "inHunkInput": "0"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "adhoc/open-dex-json",
+ "name": "adhoc/open-dex-json_5",
+ "outputs": [
+ {
+ "name": "data",
+ "type": "reference",
+ "connections": [
+ {
+ "inHunkIndex": "4",
+ "inHunkInput": "0"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "adhoc/open-4411-csv",
+ "name": "adhoc/open-4411-csv_5",
+ "outputs": [
+ {
+ "name": "data",
+ "type": "reference",
+ "connections": [
+ {
+ "inHunkIndex": "4",
+ "inHunkInput": "1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "adhoc/2x_linechart",
+ "name": "adhoc/2x_linechart_5",
+ "inputs": [
+ {
+ "name": "array",
+ "type": "reference"
+ },
+ {
+ "name": "array",
+ "type": "reference"
+ }
+ ],
+ "states": [
+ {
+ "name": "displayCount",
+ "type": "number",
+ "value": "50"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test_files/Specimen_RawData_4.csv b/test_files/Specimen_RawData_4.csv
new file mode 100644
index 0000000..a4b2362
--- /dev/null
+++ b/test_files/Specimen_RawData_4.csv
@@ -0,0 +1,1522 @@
+Time,Extension,Load
+(sec),(mm),(N)
+0.00000,0.00000,-9.06038
+0.10000,0.00100,-9.06038
+0.20000,0.00270,-9.06038
+0.30000,0.00430,-9.06038
+0.40000,0.00600,-9.06038
+0.50000,0.00770,-9.06038
+0.60000,0.00930,-9.03354
+0.70000,0.01100,-8.97985
+0.80000,0.01270,-8.92616
+0.90000,0.01430,-8.85904
+1.00000,0.01600,-8.79193
+1.10000,0.01770,-8.69797
+1.20000,0.01930,-8.59059
+1.30000,0.02100,-8.48320
+1.40000,0.02270,-8.34898
+1.50000,0.02430,-8.21475
+1.60000,0.02600,-8.05368
+1.70000,0.02770,-7.87918
+1.80000,0.02930,-7.67784
+1.90000,0.03100,-7.44965
+2.00000,0.03270,-7.23489
+2.10000,0.03430,-6.97985
+2.20000,0.03600,-6.68455
+2.30000,0.03770,-6.37583
+2.40000,0.03930,-6.08053
+2.50000,0.04100,-5.78523
+2.60000,0.04270,-5.47650
+2.70000,0.04430,-5.14093
+2.80000,0.04600,-4.81878
+2.90000,0.04770,-4.45637
+3.00000,0.04930,-4.06711
+3.10000,0.05100,-3.70469
+3.20000,0.05270,-3.35570
+3.30000,0.05430,-3.02013
+3.40000,0.05600,-2.65772
+3.50000,0.05770,-2.30872
+3.60000,0.05930,-1.94631
+3.70000,0.06100,-1.58389
+3.80000,0.06270,-1.19463
+3.90000,0.06430,-0.83222
+4.00000,0.06600,-0.48323
+4.10000,0.06770,-0.13423
+4.20000,0.06930,0.26845
+4.30000,0.07100,0.63087
+4.40000,0.07270,0.97986
+4.50000,0.07430,1.35570
+4.60000,0.07600,1.75838
+4.70000,0.07770,2.09395
+4.80000,0.07930,2.46979
+4.90000,0.08100,2.80536
+5.00000,0.08270,3.16777
+5.10000,0.08430,3.50334
+5.20000,0.08600,3.86576
+5.30000,0.08770,4.24159
+5.40000,0.08930,4.65770
+5.50000,0.09100,5.00669
+5.60000,0.09270,5.38253
+5.70000,0.09430,5.71810
+5.80000,0.09600,6.05367
+5.90000,0.09770,6.40266
+6.00000,0.09930,6.75166
+6.10000,0.10100,7.12749
+6.20000,0.10270,7.50333
+6.30000,0.10430,7.85232
+6.40000,0.10600,8.20132
+6.50000,0.10770,8.55031
+6.60000,0.10930,8.88588
+6.70000,0.11100,9.23487
+6.80000,0.11270,9.58386
+6.90000,0.11430,9.94628
+7.00000,0.11600,10.34896
+7.10000,0.11770,10.71138
+7.20000,0.11930,11.08721
+7.30000,0.12100,11.42278
+7.40000,0.12270,11.77178
+7.50000,0.12430,12.10735
+7.60000,0.12600,12.49661
+7.70000,0.12770,12.87245
+7.80000,0.12930,13.26171
+7.90000,0.13100,13.61070
+8.00000,0.13260,13.97311
+8.10000,0.13430,14.29526
+8.20000,0.13600,14.64425
+8.30000,0.13760,14.99325
+8.40000,0.13930,15.34224
+8.50000,0.14100,15.70465
+8.60000,0.14260,16.08049
+8.70000,0.14430,16.42948
+8.80000,0.14600,16.76505
+8.90000,0.14760,17.10062
+9.00000,0.14930,17.42277
+9.10000,0.15100,17.75834
+9.20000,0.15260,18.12075
+9.30000,0.15430,18.48317
+9.40000,0.15600,18.84558
+9.50000,0.15760,19.19458
+9.60000,0.15930,19.54357
+9.70000,0.16100,19.86572
+9.80000,0.16260,20.21471
+9.90000,0.16430,20.56370
+10.00000,0.16600,20.88585
+10.10000,0.16760,21.22142
+10.20000,0.16930,21.61068
+10.30000,0.17100,21.97309
+10.40000,0.17260,22.28182
+10.50000,0.17430,22.60396
+10.60000,0.17600,22.93953
+10.70000,0.17760,23.28853
+10.80000,0.17930,23.62410
+10.90000,0.18100,23.95967
+11.00000,0.18260,24.32208
+11.10000,0.18430,24.67107
+11.20000,0.18600,25.02007
+11.30000,0.18760,25.34221
+11.40000,0.18930,25.70463
+11.50000,0.19100,26.06704
+11.60000,0.19260,26.38919
+11.70000,0.19430,26.75160
+11.80000,0.19600,27.14087
+11.90000,0.19760,27.47643
+12.00000,0.19930,27.82543
+12.10000,0.20100,28.14757
+12.20000,0.20260,28.52341
+12.30000,0.20430,28.84556
+12.40000,0.20600,29.20797
+12.50000,0.20760,29.54354
+12.60000,0.20930,29.90596
+12.70000,0.21100,30.22811
+12.80000,0.21260,30.55025
+12.90000,0.21430,30.87240
+13.00000,0.21600,31.22139
+13.10000,0.21760,31.54354
+13.20000,0.21930,31.87911
+13.30000,0.22100,32.22810
+13.40000,0.22260,32.59052
+13.50000,0.22430,32.92609
+13.60000,0.22600,33.26165
+13.70000,0.22760,33.58380
+13.80000,0.22930,33.91937
+13.90000,0.23100,34.25494
+14.00000,0.23260,34.59051
+14.10000,0.23430,34.93950
+14.20000,0.23600,35.30192
+14.30000,0.23760,35.65091
+14.40000,0.23930,35.98648
+14.50000,0.24100,36.29520
+14.60000,0.24260,36.61735
+14.70000,0.24430,36.96634
+14.80000,0.24600,37.28849
+14.90000,0.24760,37.65091
+15.00000,0.24930,38.01332
+15.10000,0.25100,38.33547
+15.20000,0.25260,38.67104
+15.30000,0.25430,38.97976
+15.40000,0.25600,39.30191
+15.50000,0.25760,39.63748
+15.60000,0.25930,39.99989
+15.70000,0.26100,40.36231
+15.80000,0.26260,40.72472
+15.90000,0.26430,41.06029
+16.00000,0.26600,41.39586
+16.10000,0.26760,41.69116
+16.20000,0.26930,42.02673
+16.30000,0.27100,42.33546
+16.40000,0.27260,42.67103
+16.50000,0.27430,43.03344
+16.60000,0.27600,43.38243
+16.70000,0.27760,43.71800
+16.80000,0.27930,44.04015
+16.90000,0.28100,44.32203
+17.00000,0.28260,44.67102
+17.10000,0.28430,44.97975
+17.20000,0.28600,45.31532
+17.30000,0.28760,45.66431
+17.40000,0.28930,45.99988
+17.50000,0.29100,46.32202
+17.60000,0.29260,46.63075
+17.70000,0.29430,46.92605
+17.80000,0.29600,47.24820
+17.90000,0.29760,47.57034
+18.00000,0.29930,47.91934
+18.10000,0.30100,48.24148
+18.20000,0.30260,48.61732
+18.30000,0.30430,48.91262
+18.40000,0.30600,49.26161
+18.50000,0.30760,49.55692
+18.60000,0.30930,49.90591
+18.70000,0.31100,50.20121
+18.80000,0.31260,50.55020
+18.90000,0.31430,50.87235
+19.00000,0.31600,51.22134
+19.10000,0.31760,51.51664
+19.20000,0.31930,51.83879
+19.30000,0.32100,52.16094
+19.40000,0.32260,52.48308
+19.50000,0.32430,52.77838
+19.60000,0.32600,53.12738
+19.70000,0.32760,53.44952
+19.80000,0.32930,53.79851
+19.90000,0.33100,54.09382
+20.00000,0.33260,54.44281
+20.10000,0.33430,54.73811
+20.20000,0.33600,55.08710
+20.30000,0.33760,55.40925
+20.40000,0.33930,55.73140
+20.50000,0.34100,56.05354
+20.60000,0.34260,56.37569
+20.70000,0.34430,56.72468
+20.80000,0.34600,57.01998
+20.90000,0.34760,57.31528
+21.00000,0.34930,57.61059
+21.10000,0.35100,57.90589
+21.20000,0.35260,58.28172
+21.30000,0.35430,58.63072
+21.40000,0.35600,58.92602
+21.50000,0.35760,59.22132
+21.60000,0.35930,59.51662
+21.70000,0.36100,59.83877
+21.80000,0.36260,60.13407
+21.90000,0.36430,60.42937
+22.00000,0.36600,60.75152
+22.10000,0.36760,61.10051
+22.20000,0.36930,61.42266
+22.30000,0.37100,61.74480
+22.40000,0.37260,62.06695
+22.50000,0.37430,62.33541
+22.60000,0.37600,62.63071
+22.70000,0.37760,62.95285
+22.80000,0.37930,63.27500
+22.90000,0.38100,63.59715
+23.00000,0.38260,63.91929
+23.10000,0.38430,64.21460
+23.20000,0.38600,64.50990
+23.30000,0.38760,64.80520
+23.40000,0.38930,65.10050
+23.50000,0.39100,65.42265
+23.60000,0.39260,65.71795
+23.70000,0.39430,66.06694
+23.80000,0.39600,66.38909
+23.90000,0.39760,66.71123
+24.00000,0.39930,67.00653
+24.10000,0.40100,67.30184
+24.20000,0.40260,67.59714
+24.30000,0.40430,67.91928
+24.40000,0.40600,68.21459
+24.50000,0.40760,68.56358
+24.60000,0.40930,68.83203
+24.70000,0.41100,69.15418
+24.80000,0.41260,69.42264
+24.90000,0.41430,69.71794
+25.00000,0.41600,70.01324
+25.10000,0.41760,70.30854
+25.20000,0.41930,70.60384
+25.30000,0.42100,70.92599
+25.40000,0.42260,71.22129
+25.50000,0.42430,71.54344
+25.60000,0.42600,71.81189
+25.70000,0.42760,72.10719
+25.80000,0.42930,72.40249
+25.90000,0.43100,72.69780
+26.00000,0.43260,72.99310
+26.10000,0.43430,73.28840
+26.20000,0.43600,73.58370
+26.30000,0.43760,73.87900
+26.40000,0.43930,74.14746
+26.50000,0.44100,74.44276
+26.60000,0.44260,74.73806
+26.70000,0.44430,75.00651
+26.80000,0.44600,75.30182
+26.90000,0.44760,75.59712
+27.00000,0.44930,75.89242
+27.10000,0.45100,76.18772
+27.20000,0.45260,76.42933
+27.30000,0.45430,76.72463
+27.40000,0.45600,77.01993
+27.50000,0.45760,77.28839
+27.60000,0.45930,77.58369
+27.70000,0.46100,77.90584
+27.80000,0.46260,78.17429
+27.90000,0.46430,78.46959
+28.00000,0.46600,78.76489
+28.10000,0.46760,79.06020
+28.20000,0.46930,79.35550
+28.30000,0.47100,79.62395
+28.40000,0.47260,79.91925
+28.50000,0.47430,80.24140
+28.60000,0.47600,80.53670
+28.70000,0.47760,80.80516
+28.80000,0.47930,81.07361
+28.90000,0.48100,81.34207
+29.00000,0.48260,81.63737
+29.10000,0.48430,81.93267
+29.20000,0.48600,82.22797
+29.30000,0.48760,82.52327
+29.40000,0.48930,82.79173
+29.50000,0.49100,83.08703
+29.60000,0.49260,83.32864
+29.70000,0.49430,83.62394
+29.80000,0.49600,83.89240
+29.90000,0.49760,84.16085
+30.00000,0.49930,84.45615
+30.10000,0.50100,84.75146
+30.20000,0.50260,84.99307
+30.30000,0.50430,85.26152
+30.40000,0.50600,85.52998
+30.50000,0.50760,85.79843
+30.60000,0.50930,86.06689
+30.70000,0.51100,86.33534
+30.80000,0.51260,86.63065
+30.90000,0.51430,86.92595
+31.00000,0.51600,87.19440
+31.10000,0.51760,87.46286
+31.20000,0.51930,87.70447
+31.30000,0.52100,87.97292
+31.40000,0.52260,88.24138
+31.50000,0.52430,88.50984
+31.60000,0.52600,88.77829
+31.70000,0.52760,89.07359
+31.80000,0.52930,89.34205
+31.90000,0.53100,89.58366
+32.00000,0.53260,89.82527
+32.10000,0.53430,90.09372
+32.20000,0.53600,90.33533
+32.30000,0.53760,90.63064
+32.40000,0.53930,90.89909
+32.50000,0.54100,91.19439
+32.60000,0.54260,91.46285
+32.70000,0.54430,91.73130
+32.80000,0.54600,91.97291
+32.90000,0.54760,92.24137
+33.00000,0.54930,92.45613
+33.10000,0.55100,92.72459
+33.20000,0.55260,92.99305
+33.30000,0.55430,93.28835
+33.40000,0.55600,93.52996
+33.50000,0.55760,93.77157
+33.60000,0.55930,93.98633
+33.70000,0.56100,94.25479
+33.80000,0.56260,94.46955
+33.90000,0.56430,94.73801
+34.00000,0.56600,95.00646
+34.10000,0.56760,95.30176
+34.20000,0.56930,95.57022
+34.30000,0.57100,95.77156
+34.40000,0.57260,95.97290
+34.50000,0.57430,96.24136
+34.60000,0.57600,96.50982
+34.70000,0.57760,96.71116
+34.80000,0.57930,96.97961
+34.90000,0.58100,97.24807
+35.00000,0.58260,97.44941
+35.10000,0.58430,97.71787
+35.20000,0.58600,97.91921
+35.30000,0.58760,98.18766
+35.40000,0.58930,98.38900
+35.50000,0.59100,98.59035
+35.60000,0.59260,98.85880
+35.70000,0.59430,99.12726
+35.80000,0.59600,99.32860
+35.90000,0.59760,99.59706
+36.00000,0.59930,99.79840
+36.10000,0.60100,99.99974
+36.20000,0.60260,100.26819
+36.30000,0.60430,100.53665
+36.40000,0.60600,100.73799
+36.50000,0.60760,101.00645
+36.60000,0.60930,101.20779
+36.70000,0.61100,101.47625
+36.80000,0.61260,101.67759
+36.90000,0.61430,101.94604
+37.00000,0.61600,102.14738
+37.10000,0.61760,102.34873
+37.20000,0.61930,102.61718
+37.30000,0.62100,102.81852
+37.40000,0.62260,103.01987
+37.50000,0.62430,103.28832
+37.60000,0.62600,103.48966
+37.70000,0.62760,103.69100
+37.80000,0.62930,103.89235
+37.90000,0.63100,104.09369
+38.00000,0.63260,104.36214
+38.10000,0.63430,104.56349
+38.20000,0.63600,104.76483
+38.30000,0.63760,104.96617
+38.40000,0.63930,105.16751
+38.50000,0.64100,105.36885
+38.60000,0.64260,105.57019
+38.70000,0.64430,105.77154
+38.80000,0.64600,106.03999
+38.90000,0.64760,106.24133
+39.00000,0.64930,106.44268
+39.10000,0.65100,106.64402
+39.20000,0.65260,106.77825
+39.30000,0.65430,106.97959
+39.40000,0.65590,107.24804
+39.50000,0.65760,107.44938
+39.60000,0.65930,107.65073
+39.70000,0.66090,107.78495
+39.80000,0.66260,107.98630
+39.90000,0.66430,108.18764
+40.00000,0.66590,108.38898
+40.10000,0.66760,108.52321
+40.20000,0.66930,108.72455
+40.30000,0.67090,108.92589
+40.40000,0.67260,109.12723
+40.50000,0.67430,109.26146
+40.60000,0.67590,109.46280
+40.70000,0.67760,109.59703
+40.80000,0.67930,109.79837
+40.90000,0.68090,109.93260
+41.00000,0.68260,110.13394
+41.10000,0.68430,110.26817
+41.20000,0.68590,110.46951
+41.30000,0.68760,110.60374
+41.40000,0.68930,110.80508
+41.50000,0.69090,110.93931
+41.60000,0.69260,111.07354
+41.70000,0.69430,111.20776
+41.80000,0.69590,111.34199
+41.90000,0.69760,111.54333
+42.00000,0.69930,111.67756
+42.10000,0.70090,111.81179
+42.20000,0.70260,111.94602
+42.30000,0.70430,112.08024
+42.40000,0.70590,112.21447
+42.50000,0.70760,112.34870
+42.60000,0.70930,112.48293
+42.70000,0.71090,112.61716
+42.80000,0.71260,112.75138
+42.90000,0.71430,112.88561
+43.00000,0.71590,112.95273
+43.10000,0.71760,113.08695
+43.20000,0.71930,113.22118
+43.30000,0.72090,113.28830
+43.40000,0.72260,113.42252
+43.50000,0.72430,113.48964
+43.60000,0.72590,113.62387
+43.70000,0.72760,113.75809
+43.80000,0.72930,113.82521
+43.90000,0.73090,113.89232
+44.00000,0.73260,113.95943
+44.10000,0.73430,114.02655
+44.20000,0.73590,114.16078
+44.30000,0.73760,114.22789
+44.40000,0.73930,114.29500
+44.50000,0.74090,114.42923
+44.60000,0.74260,114.49635
+44.70000,0.74430,114.56346
+44.80000,0.74590,114.63057
+44.90000,0.74760,114.69769
+45.00000,0.74930,114.76480
+45.10000,0.75090,114.83192
+45.20000,0.75260,114.89903
+45.30000,0.75430,114.96614
+45.40000,0.75590,114.96614
+45.50000,0.75760,115.03326
+45.60000,0.75930,115.03326
+45.70000,0.76090,115.10037
+45.80000,0.76260,115.16749
+45.90000,0.76430,115.16749
+46.00000,0.76590,115.23460
+46.10000,0.76760,115.23460
+46.20000,0.76930,115.23460
+46.30000,0.77090,115.30171
+46.40000,0.77260,115.30171
+46.50000,0.77430,115.30171
+46.60000,0.77590,115.36883
+46.70000,0.77760,115.36883
+46.80000,0.77930,115.36883
+46.90000,0.78090,115.36883
+47.00000,0.78260,115.36883
+47.10000,0.78430,115.30171
+47.20000,0.78590,115.36883
+47.30000,0.78760,115.30171
+47.40000,0.78930,115.30171
+47.50000,0.79090,115.36883
+47.60000,0.79260,115.36883
+47.70000,0.79430,115.30171
+47.80000,0.79590,115.30171
+47.90000,0.79760,115.23460
+48.00000,0.79930,115.23460
+48.10000,0.80090,115.16749
+48.20000,0.80260,115.16749
+48.30000,0.80430,115.16749
+48.40000,0.80590,115.10037
+48.50000,0.80760,115.03326
+48.60000,0.80930,115.03326
+48.70000,0.81090,114.96614
+48.80000,0.81260,114.89903
+48.90000,0.81430,114.83192
+49.00000,0.81590,114.83192
+49.10000,0.81760,114.76480
+49.20000,0.81930,114.69769
+49.30000,0.82090,114.69769
+49.40000,0.82260,114.63057
+49.50000,0.82430,114.49635
+49.60000,0.82590,114.42923
+49.70000,0.82760,114.36212
+49.80000,0.82930,114.29500
+49.90000,0.83090,114.29500
+50.00000,0.83260,114.22789
+50.10000,0.83430,114.16078
+50.20000,0.83590,114.09366
+50.30000,0.83760,113.95943
+50.40000,0.83930,113.89232
+50.50000,0.84090,113.82521
+50.60000,0.84260,113.75809
+50.70000,0.84430,113.69098
+50.80000,0.84590,113.62387
+50.90000,0.84760,113.55675
+51.00000,0.84930,113.42252
+51.10000,0.85090,113.35541
+51.20000,0.85260,113.28830
+51.30000,0.85430,113.22118
+51.40000,0.85590,113.15407
+51.50000,0.85760,113.08695
+51.60000,0.85930,113.01984
+51.70000,0.86090,112.95273
+51.80000,0.86260,112.81850
+51.90000,0.86430,112.75138
+52.00000,0.86590,112.68427
+52.10000,0.86760,112.61716
+52.20000,0.86930,112.48293
+52.30000,0.87090,112.48293
+52.40000,0.87260,112.34870
+52.50000,0.87430,112.28159
+52.60000,0.87590,112.21447
+52.70000,0.87760,112.14736
+52.80000,0.87930,112.08024
+52.90000,0.88090,112.01313
+53.00000,0.88260,111.94602
+53.10000,0.88430,111.87890
+53.20000,0.88590,111.81179
+53.30000,0.88760,111.74468
+53.40000,0.88930,111.61045
+53.50000,0.89090,111.61045
+53.60000,0.89260,111.54333
+53.70000,0.89430,111.40911
+53.80000,0.89590,111.34199
+53.90000,0.89760,111.34199
+54.00000,0.89930,111.27488
+54.10000,0.90090,111.20776
+54.20000,0.90260,111.07354
+54.30000,0.90430,111.00642
+54.40000,0.90590,110.93931
+54.50000,0.90760,110.87219
+54.60000,0.90930,110.87219
+54.70000,0.91090,110.80508
+54.80000,0.91260,110.73797
+54.90000,0.91430,110.67085
+55.00000,0.91590,110.60374
+55.10000,0.91760,110.53662
+55.20000,0.91930,110.46951
+55.30000,0.92090,110.40240
+55.40000,0.92260,110.33528
+55.50000,0.92430,110.33528
+55.60000,0.92590,110.26817
+55.70000,0.92760,110.26817
+55.80000,0.92930,110.13394
+55.90000,0.93090,110.13394
+56.00000,0.93260,109.99971
+56.10000,0.93430,109.99971
+56.20000,0.93590,109.93260
+56.30000,0.93760,109.93260
+56.40000,0.93930,109.86549
+56.50000,0.94090,109.79837
+56.60000,0.94260,109.73126
+56.70000,0.94430,109.66414
+56.80000,0.94590,109.59703
+56.90000,0.94760,109.59703
+57.00000,0.94930,109.52992
+57.10000,0.95090,109.52992
+57.20000,0.95260,109.46280
+57.30000,0.95430,109.46280
+57.40000,0.95590,109.32857
+57.50000,0.95760,109.32857
+57.60000,0.95930,109.26146
+57.70000,0.96090,109.26146
+57.80000,0.96260,109.19435
+57.90000,0.96430,109.12723
+58.00000,0.96590,109.12723
+58.10000,0.96760,109.06012
+58.20000,0.96930,108.99300
+58.30000,0.97090,108.92589
+58.40000,0.97260,108.85878
+58.50000,0.97430,108.85878
+58.60000,0.97590,108.79166
+58.70000,0.97760,108.79166
+58.80000,0.97930,108.72455
+58.90000,0.98090,108.65743
+59.00000,0.98260,108.59032
+59.10000,0.98430,108.52321
+59.20000,0.98590,108.52321
+59.30000,0.98760,108.45609
+59.40000,0.98930,108.45609
+59.50000,0.99090,108.38898
+59.60000,0.99260,108.32187
+59.70000,0.99430,108.32187
+59.80000,0.99590,108.25475
+59.90000,0.99760,108.18764
+60.00000,0.99930,108.18764
+60.10000,1.00090,108.12052
+60.20000,1.00260,108.05341
+60.30000,1.00430,108.05341
+60.40000,1.00590,107.98630
+60.50000,1.00760,107.91918
+60.60000,1.00930,107.85207
+60.70000,1.01090,107.85207
+60.80000,1.01260,107.78495
+60.90000,1.01430,107.71784
+61.00000,1.01590,107.71784
+61.10000,1.01760,107.65073
+61.20000,1.01930,107.58361
+61.30000,1.02090,107.51650
+61.40000,1.02260,107.51650
+61.50000,1.02430,107.44938
+61.60000,1.02590,107.38227
+61.70000,1.02760,107.38227
+61.80000,1.02930,107.31516
+61.90000,1.03090,107.31516
+62.00000,1.03260,107.24804
+62.10000,1.03430,107.18093
+62.20000,1.03590,107.11381
+62.30000,1.03760,107.04670
+62.40000,1.03930,107.04670
+62.50000,1.04090,106.97959
+62.60000,1.04260,106.91247
+62.70000,1.04430,106.84536
+62.80000,1.04590,106.84536
+62.90000,1.04760,106.77825
+63.00000,1.04930,106.71113
+63.10000,1.05090,106.64402
+63.20000,1.05260,106.57690
+63.30000,1.05430,106.50979
+63.40000,1.05590,106.44268
+63.50000,1.05760,106.37556
+63.60000,1.05930,106.30845
+63.70000,1.06090,106.30845
+63.80000,1.06260,106.24133
+63.90000,1.06430,106.17422
+64.00000,1.06590,106.10711
+64.10001,1.06760,106.03999
+64.20000,1.06930,105.97288
+64.30000,1.07090,105.97288
+64.40000,1.07260,105.90576
+64.50000,1.07430,105.83865
+64.60001,1.07590,105.77154
+64.70000,1.07760,105.70442
+64.80000,1.07930,105.63731
+64.90000,1.08090,105.57019
+65.00000,1.08260,105.50308
+65.10001,1.08430,105.43597
+65.20000,1.08590,105.36885
+65.30000,1.08760,105.30174
+65.40000,1.08930,105.23462
+65.50000,1.09090,105.16751
+65.60001,1.09260,105.10040
+65.70001,1.09430,105.03328
+65.80000,1.09590,105.03328
+65.90000,1.09760,104.96617
+66.00000,1.09930,104.89906
+66.10001,1.10090,104.76483
+66.20001,1.10260,104.69771
+66.30000,1.10430,104.63060
+66.40000,1.10590,104.49637
+66.50000,1.10760,104.42926
+66.60001,1.10930,104.36214
+66.70001,1.11090,104.29503
+66.80000,1.11260,104.22792
+66.90000,1.11430,104.16080
+67.00000,1.11590,104.02657
+67.10001,1.11760,103.95946
+67.20001,1.11930,103.82523
+67.30000,1.12090,103.75812
+67.40000,1.12260,103.69100
+67.50000,1.12430,103.62389
+67.60001,1.12590,103.48966
+67.70001,1.12760,103.35544
+67.80000,1.12930,103.22121
+67.90000,1.13090,103.15409
+68.00000,1.13260,103.01987
+68.10001,1.13430,102.88564
+68.20001,1.13590,102.81852
+68.30000,1.13760,102.68430
+68.40000,1.13930,102.55007
+68.50000,1.14090,102.41584
+68.60001,1.14260,102.28161
+68.70001,1.14430,102.14738
+68.80000,1.14590,101.94604
+68.90000,1.14760,101.81181
+69.00000,1.14930,101.67759
+69.10001,1.15090,101.47625
+69.20001,1.15260,101.27490
+69.30000,1.15430,101.07356
+69.40000,1.15590,100.87222
+69.50000,1.15760,100.67088
+69.60001,1.15930,100.40242
+69.70001,1.16090,100.20108
+69.80000,1.16260,99.93263
+69.90000,1.16430,99.66417
+70.00000,1.16590,99.32860
+70.10001,1.16760,98.92592
+70.20001,1.16930,98.59035
+70.30000,1.17090,98.12055
+70.40000,1.17260,97.65075
+70.50000,1.17420,97.18095
+70.60001,1.17590,96.64404
+70.70001,1.17760,96.04002
+70.80000,1.17920,95.43599
+70.90000,1.18090,94.76485
+71.00000,1.18260,94.09371
+71.10001,1.18420,93.42257
+71.20001,1.18590,92.68432
+71.30000,1.18760,92.01318
+71.40000,1.18920,91.27493
+71.50000,1.19090,90.53668
+71.60001,1.19260,89.73131
+71.70001,1.19420,88.92594
+71.80000,1.19590,88.18769
+71.90000,1.19760,87.38232
+72.00000,1.19920,86.57695
+72.10001,1.20090,85.83870
+72.20001,1.20260,85.03333
+72.30000,1.20420,84.22797
+72.40000,1.20590,83.42260
+72.50000,1.20760,82.55012
+72.60001,1.20920,81.71791
+72.70001,1.21090,80.88569
+72.80000,1.21260,80.08033
+72.90000,1.21420,79.30181
+73.00000,1.21590,78.52328
+73.10001,1.21760,77.74476
+73.20001,1.21920,76.99309
+73.30000,1.22090,76.26826
+73.40000,1.22260,75.57027
+73.50000,1.22420,74.87229
+73.60001,1.22590,74.25484
+73.70001,1.22760,73.69108
+73.80000,1.22920,73.12732
+73.90000,1.23090,72.59041
+74.00000,1.23260,72.08035
+74.10001,1.23420,71.57028
+74.20001,1.23590,71.14075
+74.30000,1.23760,70.73807
+74.40000,1.23920,70.33539
+74.50000,1.24090,70.01324
+74.60001,1.24260,69.63740
+74.70001,1.24420,69.34210
+74.80000,1.24590,68.99311
+74.90000,1.24760,68.72465
+75.00000,1.24920,68.45620
+75.10001,1.25090,68.21459
+75.20001,1.25260,67.99982
+75.30000,1.25420,67.81190
+75.40000,1.25590,67.62398
+75.50000,1.25760,67.43606
+75.60001,1.25920,67.22130
+75.70001,1.26090,67.06023
+75.80000,1.26260,66.89915
+75.90000,1.26420,66.76492
+76.00000,1.26590,66.63070
+76.10001,1.26760,66.55016
+76.20001,1.26920,66.44278
+76.30000,1.27090,66.33540
+76.40000,1.27260,66.22801
+76.50000,1.27420,66.12063
+76.60001,1.27590,66.04009
+76.70001,1.27760,65.95956
+76.80000,1.27920,65.90587
+76.90000,1.28090,65.85218
+77.00000,1.28260,65.77164
+77.10001,1.28420,65.69110
+77.20001,1.28590,65.63741
+77.30000,1.28760,65.55687
+77.40000,1.28920,65.53003
+77.50000,1.29090,65.44949
+77.60001,1.29260,65.42265
+77.70001,1.29420,65.39580
+77.80000,1.29590,65.36896
+77.90000,1.29760,65.34211
+78.00000,1.29920,65.28842
+78.10001,1.30090,65.26157
+78.20001,1.30260,65.23473
+78.30000,1.30420,65.18104
+78.40000,1.30590,65.18104
+78.50000,1.30760,65.18104
+78.60001,1.30920,65.15419
+78.70001,1.31090,65.10050
+78.80000,1.31260,65.04681
+78.90000,1.31420,65.04681
+79.00000,1.31590,64.99312
+79.10001,1.31760,64.96627
+79.20001,1.31920,64.93943
+79.30000,1.32090,64.93943
+79.40000,1.32260,64.91258
+79.50000,1.32420,64.85889
+79.60001,1.32590,64.83204
+79.70001,1.32760,64.80520
+79.80000,1.32920,64.77835
+79.90000,1.33090,64.77835
+80.00000,1.33260,64.75151
+80.10001,1.33420,64.72466
+80.20001,1.33590,64.69782
+80.30000,1.33760,64.67097
+80.40000,1.33920,64.64412
+80.50001,1.34090,64.61728
+80.60001,1.34260,64.59043
+80.70001,1.34420,64.56359
+80.80000,1.34590,64.56359
+80.90000,1.34760,64.56359
+81.00001,1.34920,64.56359
+81.10001,1.35090,64.50990
+81.20001,1.35260,64.45621
+81.30000,1.35420,64.42936
+81.40000,1.35590,64.42936
+81.50001,1.35760,64.40251
+81.60001,1.35920,64.40251
+81.70001,1.36090,64.37567
+81.80000,1.36260,64.34882
+81.90000,1.36420,64.32198
+82.00001,1.36590,64.29513
+82.10001,1.36760,64.26829
+82.20001,1.36920,64.24144
+82.30000,1.37090,64.24144
+82.40000,1.37260,64.26829
+82.50001,1.37420,64.29513
+82.60001,1.37590,64.29513
+82.70001,1.37760,64.26829
+82.80000,1.37920,64.24144
+82.90000,1.38090,64.21460
+83.00001,1.38260,64.18775
+83.10001,1.38420,64.16090
+83.20001,1.38590,64.16090
+83.30000,1.38760,64.16090
+83.40000,1.38920,64.16090
+83.50001,1.39090,64.16090
+83.60001,1.39260,64.10721
+83.70001,1.39420,64.10721
+83.80000,1.39590,64.08037
+83.90000,1.39760,64.08037
+84.00001,1.39920,64.10721
+84.10001,1.40090,64.08037
+84.20001,1.40260,64.05352
+84.30000,1.40420,64.02668
+84.40000,1.40590,63.97299
+84.50001,1.40760,63.97299
+84.60001,1.40920,63.97299
+84.70001,1.41090,63.97299
+84.80000,1.41260,63.97299
+84.90000,1.41420,63.99983
+85.00001,1.41590,63.97299
+85.10001,1.41760,63.94614
+85.20001,1.41920,63.94614
+85.30000,1.42090,63.91929
+85.40000,1.42260,63.89245
+85.50001,1.42420,63.89245
+85.60001,1.42590,63.89245
+85.70001,1.42760,63.89245
+85.80000,1.42920,63.89245
+85.90000,1.43090,63.86560
+86.00001,1.43260,63.86560
+86.10001,1.43420,63.86560
+86.20001,1.43590,63.83876
+86.30000,1.43760,63.86560
+86.40000,1.43920,63.86560
+86.50001,1.44090,63.86560
+86.60001,1.44260,63.83876
+86.70001,1.44420,63.86560
+86.80000,1.44590,63.83876
+86.90000,1.44760,63.83876
+87.00001,1.44920,63.81191
+87.10001,1.45090,63.81191
+87.20001,1.45260,63.83876
+87.30000,1.45420,63.83876
+87.40000,1.45590,63.81191
+87.50001,1.45760,63.78507
+87.60001,1.45920,63.78507
+87.70001,1.46090,63.78507
+87.80000,1.46260,63.78507
+87.90000,1.46420,63.75822
+88.00001,1.46590,63.78507
+88.10001,1.46760,63.75822
+88.20001,1.46920,63.75822
+88.30000,1.47090,63.73138
+88.40000,1.47260,63.70453
+88.50001,1.47420,63.67768
+88.60001,1.47590,63.67768
+88.70001,1.47760,63.67768
+88.80000,1.47920,63.70453
+88.90000,1.48090,63.67768
+89.00001,1.48260,63.67768
+89.10001,1.48420,63.65084
+89.20001,1.48590,63.65084
+89.30000,1.48760,63.62399
+89.40000,1.48920,63.62399
+89.50001,1.49090,63.62399
+89.60001,1.49260,63.62399
+89.70001,1.49420,63.59715
+89.80000,1.49590,63.57030
+89.90000,1.49760,63.54346
+90.00001,1.49920,63.51661
+90.10001,1.50090,63.48977
+90.20001,1.50260,63.48977
+90.30000,1.50420,63.46292
+90.40000,1.50590,63.48977
+90.50001,1.50760,63.48977
+90.60001,1.50920,63.46292
+90.70001,1.51090,63.46292
+90.80000,1.51260,63.43607
+90.90000,1.51420,63.40923
+91.00001,1.51590,63.40923
+91.10001,1.51760,63.38238
+91.20001,1.51920,63.40923
+91.30000,1.52090,63.38238
+91.40000,1.52260,63.35554
+91.50001,1.52420,63.32869
+91.60001,1.52590,63.30185
+91.70001,1.52760,63.27500
+91.80000,1.52920,63.27500
+91.90000,1.53090,63.24816
+92.00001,1.53260,63.24816
+92.10001,1.53420,63.22131
+92.20001,1.53590,63.16762
+92.30000,1.53760,63.08708
+92.40000,1.53920,63.03339
+92.50001,1.54090,62.97970
+92.60001,1.54260,62.95285
+92.70001,1.54420,62.92601
+92.80000,1.54590,62.89916
+92.90000,1.54760,62.87232
+93.00001,1.54920,62.81863
+93.10001,1.55090,62.73809
+93.20001,1.55260,62.71124
+93.30000,1.55420,62.65755
+93.40000,1.55590,62.63071
+93.50001,1.55760,62.60386
+93.60001,1.55920,62.60386
+93.70001,1.56090,62.55017
+93.80000,1.56260,62.49648
+93.90000,1.56420,62.44279
+94.00001,1.56590,62.41594
+94.10001,1.56760,62.38910
+94.20001,1.56920,62.36225
+94.30000,1.57090,62.30856
+94.40000,1.57260,62.28171
+94.50001,1.57420,62.25487
+94.60001,1.57590,62.22802
+94.70001,1.57760,62.17433
+94.80000,1.57920,62.17433
+94.90000,1.58090,62.12064
+95.00001,1.58260,62.12064
+95.10001,1.58420,62.09380
+95.20001,1.58590,62.09380
+95.30000,1.58760,62.06695
+95.40000,1.58920,62.04010
+95.50001,1.59090,62.01326
+95.60001,1.59260,61.98641
+95.70001,1.59420,61.95957
+95.80000,1.59590,61.93272
+95.90000,1.59760,61.90588
+96.00001,1.59920,61.90588
+96.10001,1.60090,61.87903
+96.20001,1.60260,61.85219
+96.30000,1.60420,61.82534
+96.40000,1.60590,61.82534
+96.50001,1.60760,61.82534
+96.60001,1.60920,61.82534
+96.70001,1.61090,61.82534
+96.80000,1.61260,61.85219
+96.90000,1.61420,61.82534
+97.00001,1.61590,61.79849
+97.10001,1.61760,61.77165
+97.20001,1.61920,61.77165
+97.30000,1.62090,61.74480
+97.40000,1.62260,61.74480
+97.50001,1.62420,61.74480
+97.60001,1.62590,61.77165
+97.70001,1.62760,61.77165
+97.80000,1.62920,61.77165
+97.90000,1.63090,61.71796
+98.00001,1.63260,61.71796
+98.10001,1.63420,61.69111
+98.20001,1.63590,61.69111
+98.30000,1.63760,61.69111
+98.40000,1.63920,61.69111
+98.50001,1.64090,61.69111
+98.60001,1.64260,61.66427
+98.70001,1.64420,61.63742
+98.80000,1.64590,61.66427
+98.90000,1.64760,61.63742
+99.00001,1.64920,61.63742
+99.10001,1.65090,61.66427
+99.20001,1.65260,61.69111
+99.30000,1.65420,61.69111
+99.40000,1.65590,61.69111
+99.50001,1.65760,61.66427
+99.60001,1.65920,61.66427
+99.70001,1.66090,61.63742
+99.80000,1.66260,61.63742
+99.90000,1.66420,61.63742
+100.00001,1.66590,61.66427
+100.10001,1.66760,61.63742
+100.20001,1.66920,61.63742
+100.30000,1.67090,61.61058
+100.40000,1.67260,61.61058
+100.50001,1.67420,61.58373
+100.60001,1.67590,61.58373
+100.70001,1.67760,61.58373
+100.80000,1.67920,61.55688
+100.90000,1.68090,61.53004
+101.00001,1.68260,61.47635
+101.10001,1.68420,61.42266
+101.20001,1.68590,61.39581
+101.30000,1.68760,61.36897
+101.40000,1.68920,61.36897
+101.50001,1.69090,61.34212
+101.60001,1.69260,61.34212
+101.70001,1.69420,61.31527
+101.80000,1.69590,61.26158
+101.90000,1.69750,61.26158
+102.00001,1.69920,61.23474
+102.10001,1.70090,61.20789
+102.20001,1.70250,61.18105
+102.30000,1.70420,61.18105
+102.40000,1.70590,61.18105
+102.50001,1.70750,61.15420
+102.60001,1.70920,61.12736
+102.70001,1.71090,61.10051
+102.80000,1.71250,61.07366
+102.90000,1.71420,61.04682
+103.00001,1.71590,61.04682
+103.10001,1.71750,61.07366
+103.20001,1.71920,61.04682
+103.30000,1.72090,61.04682
+103.40000,1.72250,61.01997
+103.50001,1.72420,61.01997
+103.60001,1.72590,61.01997
+103.70001,1.72750,60.99313
+103.80000,1.72920,60.99313
+103.90000,1.73090,60.99313
+104.00001,1.73250,60.99313
+104.10001,1.73420,60.96628
+104.20001,1.73590,60.93944
+104.30000,1.73750,60.93944
+104.40000,1.73920,60.88575
+104.50001,1.74090,60.88575
+104.60001,1.74250,60.88575
+104.70001,1.74420,60.88575
+104.80000,1.74590,60.85890
+104.90000,1.74750,60.83205
+105.00001,1.74920,60.80521
+105.10001,1.75090,60.77836
+105.20001,1.75250,60.72467
+105.30000,1.75420,60.72467
+105.40000,1.75590,60.72467
+105.50001,1.75750,60.72467
+105.60001,1.75920,60.69783
+105.70001,1.76090,60.69783
+105.80000,1.76250,60.64414
+105.90000,1.76420,60.61729
+106.00001,1.76590,60.59044
+106.10001,1.76750,60.59044
+106.20001,1.76920,60.59044
+106.30000,1.77090,60.59044
+106.40000,1.77250,60.53675
+106.50001,1.77420,60.50991
+106.60001,1.77590,60.45622
+106.70001,1.77750,60.45622
+106.80000,1.77920,60.40252
+106.90000,1.78090,60.37568
+107.00001,1.78250,60.37568
+107.10001,1.78420,60.34883
+107.20001,1.78590,60.32199
+107.30000,1.78750,60.29514
+107.40000,1.78920,60.21461
+107.50001,1.79090,60.18776
+107.60001,1.79250,60.13407
+107.70001,1.79420,60.10722
+107.80000,1.79590,60.02669
+107.90000,1.79750,59.91930
+108.00001,1.79920,59.78508
+108.10001,1.80090,59.67769
+108.20001,1.80250,59.57031
+108.30000,1.80420,59.46293
+108.40000,1.80590,59.35555
+108.50001,1.80750,59.19447
+108.60001,1.80920,59.11394
+108.70001,1.81090,59.03340
+108.80000,1.81250,58.92602
+108.90000,1.81420,58.81864
+109.00001,1.81590,58.71125
+109.10001,1.81750,58.63072
+109.20001,1.81920,58.55018
+109.30000,1.82090,58.46964
+109.40000,1.82250,58.41595
+109.50001,1.82420,58.36226
+109.60001,1.82590,58.28172
+109.70001,1.82750,58.22803
+109.80000,1.82920,58.14750
+109.90000,1.83090,58.09381
+110.00001,1.83250,58.01327
+110.10001,1.83420,57.95958
+110.20001,1.83590,57.93273
+110.30000,1.83750,57.87904
+110.40000,1.83920,57.82535
+110.50001,1.84090,57.77166
+110.60001,1.84250,57.69112
+110.70001,1.84420,57.66428
+110.80000,1.84590,57.61059
+110.90000,1.84750,57.58374
+111.00001,1.84920,57.53005
+111.10001,1.85090,57.50320
+111.20001,1.85250,57.44951
+111.30000,1.85420,57.42267
+111.40000,1.85590,57.42267
+111.50001,1.85750,57.39582
+111.60001,1.85920,57.34213
+111.70001,1.86090,57.31528
+111.80000,1.86250,57.31528
+111.90000,1.86420,57.28844
+112.00001,1.86590,57.26159
+112.10001,1.86750,57.20790
+112.20001,1.86920,57.15421
+112.30000,1.87090,57.12737
+112.40000,1.87250,57.07367
+112.50001,1.87420,57.01998
+112.60001,1.87590,56.99314
+112.70001,1.87750,56.96629
+112.80000,1.87920,56.93945
+112.90001,1.88090,56.88576
+113.00001,1.88250,56.88576
+113.10001,1.88420,56.83206
+113.20001,1.88590,56.80522
+113.30000,1.88750,56.80522
+113.40001,1.88920,56.77837
+113.50001,1.89090,56.72468
+113.60001,1.89250,56.69784
+113.70001,1.89420,56.67099
+113.80000,1.89590,56.61730
+113.90001,1.89750,56.59045
+114.00001,1.89920,56.53676
+114.10001,1.90090,56.50992
+114.20001,1.90250,56.48307
+114.30000,1.90420,56.42938
+114.40001,1.90590,56.37569
+114.50001,1.90750,56.29515
+114.60001,1.90920,56.21462
+114.70001,1.91090,56.10723
+114.80000,1.91250,55.99985
+114.90001,1.91420,55.89247
+115.00001,1.91590,55.78509
+115.10001,1.91750,55.65086
+115.20001,1.91920,55.54348
+115.30000,1.92090,55.40925
+115.40001,1.92250,55.30187
+115.50001,1.92420,55.19448
+115.60001,1.92590,55.08710
+115.70001,1.92750,55.03341
+115.80000,1.92920,54.95287
+115.90001,1.93090,54.84549
+116.00001,1.93250,54.76496
+116.10001,1.93420,54.63073
+116.20001,1.93590,54.52335
+116.30000,1.93750,54.41596
+116.40001,1.93920,54.30858
+116.50001,1.94090,54.22804
+116.60001,1.94250,54.14751
+116.70001,1.94420,54.04013
+116.80000,1.94590,53.93274
+116.90001,1.94750,53.82536
+117.00001,1.94920,53.71798
+117.10001,1.95090,53.58375
+117.20001,1.95250,53.47637
+117.30000,1.95420,53.28845
+117.40001,1.95590,53.18107
+117.50001,1.95750,53.04684
+117.60001,1.95920,52.91261
+117.70001,1.96090,52.77838
+117.80000,1.96250,52.69785
+117.90001,1.96420,52.56362
+118.00001,1.96590,52.48308
+118.10001,1.96750,52.42939
+118.20001,1.96920,52.37570
+118.30000,1.97090,52.29516
+118.40001,1.97250,52.18778
+118.50001,1.97420,52.10724
+118.60001,1.97590,52.05355
+118.70001,1.97750,51.97302
+118.80000,1.97920,51.89248
+118.90001,1.98090,51.81194
+119.00001,1.98250,51.78510
+119.10001,1.98420,51.70456
+119.20001,1.98590,51.62402
+119.30000,1.98750,51.51664
+119.40001,1.98920,51.43610
+119.50001,1.99090,51.32872
+119.60001,1.99250,51.27503
+119.70001,1.99420,51.22134
+119.80000,1.99590,51.16765
+119.90001,1.99750,51.11396
+120.00001,1.99920,51.06027
+120.10001,2.00090,50.97973
+120.20001,2.00250,50.95288
+120.30000,2.00420,50.89919
+120.40001,2.00590,50.87235
+120.50001,2.00750,50.84550
+120.60001,2.00920,50.79181
+120.70001,2.01090,50.76497
+120.80000,2.01250,50.71127
+120.90001,2.01420,50.65758
+121.00001,2.01590,50.63074
+121.10001,2.01750,50.57705
+121.20001,2.01920,50.57705
+121.30000,2.02090,50.60389
+121.40001,2.02250,50.55020
+121.50001,2.02420,50.52336
+121.60001,2.02590,50.46966
+121.70001,2.02750,50.44282
+121.80000,2.02920,50.41597
+121.90001,2.03090,50.38913
+122.00001,2.03250,50.38913
+122.10001,2.03420,50.38913
+122.20001,2.03590,50.36228
+122.30000,2.03750,50.36228
+122.40001,2.03920,50.33544
+122.50001,2.04090,50.30859
+122.60001,2.04250,50.28175
+122.70001,2.04420,50.25490
+122.80000,2.04590,50.28175
+122.90001,2.04750,50.25490
+123.00001,2.04920,50.25490
+123.10001,2.05090,50.22805
+123.20001,2.05250,50.22805
+123.30000,2.05420,50.17436
+123.40001,2.05590,50.17436
+123.50001,2.05750,50.14752
+123.60001,2.05920,50.14752
+123.70001,2.06090,50.17436
+123.80000,2.06250,50.20121
+123.90001,2.06420,50.20121
+124.00001,2.06590,50.17436
+124.10001,2.06750,50.14752
+124.20001,2.06920,50.14752
+124.30000,2.07090,50.14752
+124.40001,2.07250,50.14752
+124.50001,2.07420,50.14752
+124.60001,2.07590,50.14752
+124.70001,2.07750,50.12067
+124.80000,2.07920,50.09383
+124.90001,2.08090,50.09383
+125.00001,2.08250,50.09383
+125.10001,2.08420,50.06698
+125.20001,2.08590,50.06698
+125.30000,2.08750,50.09383
+125.40001,2.08920,50.06698
+125.50001,2.09090,50.06698
+125.60001,2.09250,50.01329
+125.70001,2.09420,50.01329
+125.80000,2.09590,49.98644
+125.90001,2.09750,49.98644
+126.00001,2.09920,49.98644
+126.10001,2.10090,49.98644
+126.20001,2.10250,49.95960
+126.30000,2.10420,49.95960
+126.40001,2.10590,49.90591
+126.50001,2.10750,49.90591
+126.60001,2.10920,49.87906
+126.70001,2.11090,49.85222
+126.80000,2.11250,49.85222
+126.90001,2.11420,49.85222
+127.00001,2.11590,49.82537
+127.10001,2.11750,49.77168
+127.20001,2.11920,49.71799
+127.30000,2.12090,49.69114
+127.40001,2.12250,49.66430
+127.50001,2.12420,49.63745
+127.60001,2.12590,49.61061
+127.70001,2.12750,49.58376
+127.80000,2.12920,49.53007
+127.90001,2.13090,49.50322
+128.00000,2.13250,49.44953
+128.10001,2.13420,49.42269
+128.20002,2.13590,49.36900
+128.30000,2.13750,49.31530
+128.40001,2.13920,49.26161
+128.50000,2.14090,49.23477
+128.60001,2.14250,49.15423
+128.70002,2.14420,49.07369
+128.80000,2.14590,48.96631
+128.90001,2.14750,48.85893
+129.00000,2.14920,48.72470
+129.10001,2.15090,48.61732
+129.20002,2.15250,48.42940
+129.30000,2.15420,47.99987
+129.40001,2.15590,47.30189
+129.50000,2.15750,46.79182
+129.60001,2.15920,46.01330
+129.70002,2.16090,45.55693
+129.80000,2.16250,45.18109
+129.90001,2.16420,44.83209
+130.00000,2.16590,44.53679
+130.10001,2.16750,44.13411
+130.20002,2.16920,43.83881
+130.30000,2.17090,43.59720
+130.40001,2.17250,43.38243
+130.50000,2.17420,43.19452
+130.60001,2.17590,43.00660
+130.70002,2.17750,42.87237
+130.80000,2.17920,42.73814
+130.90001,2.18090,42.60391
+131.00000,2.18250,42.48311
+131.10000,2.18420,42.34888
+131.20002,2.18590,42.21465
+131.30000,2.18750,42.10727
+131.40002,2.18920,42.01331
+131.50000,2.19090,41.91935
+131.60000,2.19250,41.83881
+131.70002,2.19420,41.75828
+131.80000,2.19590,41.65090
+131.90002,2.19750,41.57036
+132.00000,2.19920,41.48982
+132.10000,2.20090,41.44955
+132.20002,2.20250,41.38244
+132.30000,2.20420,41.35559
+132.40002,2.20590,41.32875
+132.50000,2.20750,41.31533
+132.60000,2.20920,41.27506
+132.70002,2.21090,41.24821
+132.80000,2.21250,41.19452
+132.90002,2.21420,41.16767
+133.00000,2.21580,41.11398
+133.10000,2.21750,41.10056
+133.20002,2.21920,41.10056
+133.30000,2.22080,41.08714
+133.40002,2.22250,41.07372
+133.50000,2.22420,41.04687
+133.60000,2.22580,41.02002
+133.70002,2.22750,41.02002
+133.80000,2.22920,41.00660
+133.90002,2.23080,41.02002
+134.00000,2.23250,41.00660
+134.10000,2.23420,41.02002
+134.20002,2.23580,41.00660
+134.30000,2.23750,41.00660
+134.40002,2.23920,40.97976
+134.50000,2.24080,40.97976
+134.60000,2.24250,40.96633
+134.70002,2.24420,40.97976
+134.80000,2.24580,41.00660
+134.90002,2.24750,41.02002
+135.00000,2.24920,41.02002
+135.10000,2.25080,41.00660
+135.20002,2.25250,40.99318
+135.30000,2.25420,41.00660
+135.40002,2.25580,40.99318
+135.50000,2.25750,41.00660
+135.60000,2.25920,41.00660
+135.70002,2.26080,41.02002
+135.80000,2.26250,41.02002
+135.90002,2.26420,41.02002
+136.00000,2.26580,41.03345
+136.10000,2.26750,41.04687
+136.20002,2.26920,41.03345
+136.30000,2.27080,41.06029
+136.40002,2.27250,41.07372
+136.50000,2.27420,41.11398
+136.60000,2.27580,41.10056
+136.70002,2.27750,41.11398
+136.80000,2.27920,41.11398
+136.90002,2.28080,41.12741
+137.00000,2.28250,41.12741
+137.10000,2.28420,41.14083
+137.20002,2.28580,41.16767
+137.30000,2.28750,41.18110
+137.40002,2.28920,41.19452
+137.50000,2.29080,41.16767
+137.60000,2.29250,41.16767
+137.70002,2.29420,41.16767
+137.80000,2.29580,41.16767
+137.90002,2.29750,41.19452
+138.00000,2.29920,41.22137
+138.10000,2.30080,41.22137
+138.20002,2.30250,41.22137
+138.30000,2.30420,41.20794
+138.40002,2.30580,41.20794
+138.50000,2.30750,41.19452
+138.60000,2.30920,41.19452
+138.70002,2.31080,41.20794
+138.80000,2.31250,41.23479
+138.90002,2.31420,41.24821
+139.00000,2.31580,41.26163
+139.10000,2.31750,41.24821
+139.20002,2.31920,41.24821
+139.30000,2.32080,41.24821
+139.40002,2.32250,41.26163
+139.50000,2.32420,41.26163
+139.60000,2.32580,41.28848
+139.70002,2.32750,41.27506
+139.80000,2.32920,41.27506
+139.90002,2.33080,41.27506
+140.00000,2.33250,41.27506
+140.10000,2.33420,41.26163
+140.20002,2.33580,41.27506
+140.30000,2.33750,41.28848
+140.40002,2.33920,41.30190
+140.50000,2.34080,41.31533
+140.60000,2.34250,41.32875
+140.70002,2.34420,41.31533
+140.80000,2.34580,41.32875
+140.90002,2.34750,41.31533
+141.00000,2.34920,41.32875
+141.10000,2.35080,41.34217
+141.20002,2.35250,41.35559
+141.30000,2.35420,41.34217
+141.40002,2.35580,41.34217
+141.50000,2.35750,41.34217
+141.60000,2.35920,41.32875
+141.70002,2.36080,41.31533
+141.80000,2.36250,41.32875
+141.90002,2.36420,41.32875
+142.00000,2.36580,41.35559
+142.10000,2.36750,41.35559
+142.20002,2.36920,41.34217
+142.30000,2.37080,41.31533
+142.40002,2.37250,41.31533
+142.50000,2.37420,41.31533
+142.60000,2.37580,41.32875
+142.70002,2.37750,41.32875
+142.80000,2.37920,41.34217
+142.90002,2.38080,41.34217
+143.00000,2.38250,41.35559
+143.10000,2.38420,41.32875
+143.20002,2.38580,41.35559
+143.30000,2.38750,41.34217
+143.40002,2.38920,41.34217
+143.50000,2.39080,41.34217
+143.60000,2.39250,41.35559
+143.70002,2.39420,41.35559
+143.80000,2.39580,41.35559
+143.90002,2.39750,41.32875
+144.00000,2.39920,41.31533
+144.10000,2.40080,41.31533
+144.20002,2.40250,41.31533
+144.30000,2.40420,41.31533
+144.40002,2.40580,41.32875
+144.50000,2.40750,41.32875
+144.60000,2.40920,41.32875
+144.70002,2.41080,41.32875
+144.80000,2.41250,41.35559
+144.90002,2.41420,41.34217
+145.00000,2.41580,41.34217
+145.10000,2.41750,41.35559
+145.20002,2.41920,41.38244
+145.30000,2.42080,41.39586
+145.40002,2.42250,41.39586
+145.50000,2.42420,41.38244
+145.60000,2.42580,41.39586
+145.70002,2.42750,41.36902
+145.80000,2.42920,41.36902
+145.90002,2.43080,41.36902
+146.00000,2.43250,41.38244
+146.10000,2.43420,41.38244
+146.20002,2.43580,41.38244
+146.30000,2.43750,41.35559
+146.40002,2.43920,41.36902
+146.50000,2.44080,41.35559
+146.60000,2.44250,41.36902
+146.70002,2.44420,41.38244
+146.80000,2.44580,41.36902
+146.90002,2.44750,41.36902
+147.00000,2.44920,41.36902
+147.10000,2.45080,41.36902
+147.20002,2.45250,41.38244
+147.30000,2.45420,41.35559
+147.40002,2.45580,41.36902
+147.50000,2.45750,41.38244
+147.60000,2.45920,41.40928
+147.70002,2.46080,41.39586
+147.80000,2.46250,41.39586
+147.90002,2.46420,41.36902
+148.00000,2.46580,41.38244
+148.10000,2.46750,41.36902
+148.20002,2.46920,41.38244
+148.30000,2.47080,41.38244
+148.40002,2.47250,41.39586
+148.50000,2.47420,41.38244
+148.60000,2.47580,41.38244
+148.70002,2.47750,41.36902
+148.80000,2.47920,41.38244
+148.90002,2.48080,41.36902
+149.00000,2.48250,41.39586
+149.10000,2.48420,41.40928
+149.20002,2.48580,41.43613
+149.30000,2.48750,41.44955
+149.40002,2.48920,41.43613
+149.50000,2.49080,41.42271
+149.60000,2.49250,41.42271
+149.70002,2.49420,41.40928
+149.80000,2.49580,41.42271
+149.90002,2.49750,41.43613
+150.00000,2.49920,41.43613
+150.10000,2.50080,41.44955
+150.20002,2.50250,41.42271
+150.30000,2.50420,41.40928
+150.40002,2.50580,41.42271
+150.50000,2.50750,41.42271
+150.60000,2.50920,41.42271
+150.70002,2.51080,41.44955
+150.80000,2.51250,41.44955
+150.90002,2.51420,41.43613
+151.00000,2.51580,41.40928
+151.10000,2.51750,41.39586
+151.20002,2.51920,41.40928
+151.30000,2.52080,41.39586
+151.40002,2.52250,41.40928
+151.50000,2.52420,41.42271
+151.60000,2.52580,41.43613
+151.70002,2.52750,41.42271
+151.80000,2.52920,41.40928
+151.85000,2.53000,41.40928
diff --git a/test_files/dex-test-03.json b/test_files/dex-test-03.json
new file mode 100644
index 0000000..f31b536
--- /dev/null
+++ b/test_files/dex-test-03.json
@@ -0,0 +1,614 @@
+[
+ [
+ 16.93548,
+ -1255.0539375550534
+ ],
+ [
+ 33.87096,
+ -1120.031798942332
+ ],
+ [
+ 50.806439999999995,
+ -969.0317479580142
+ ],
+ [
+ 67.74192,
+ -783.1112469003554
+ ],
+ [
+ 84.67739999999999,
+ -603.5589501395755
+ ],
+ [
+ 101.61287999999999,
+ -457.4076485562746
+ ],
+ [
+ 118.54835999999999,
+ -319.3601064175704
+ ],
+ [
+ 135.48384,
+ -132.7980577372143
+ ],
+ [
+ 152.41931999999997,
+ 54.074635055184714
+ ],
+ [
+ 169.35479999999998,
+ 222.085827740285
+ ],
+ [
+ 186.29028,
+ 366.21794259530714
+ ],
+ [
+ 203.22575999999998,
+ 543.541705508823
+ ],
+ [
+ 220.16123999999996,
+ 728.4492366359075
+ ],
+ [
+ 237.09671999999998,
+ 883.1027325031641
+ ],
+ [
+ 254.0322,
+ 1026.87693131605
+ ],
+ [
+ 270.96768,
+ 1205.8687180485788
+ ],
+ [
+ 287.90315999999996,
+ 1387.217348152911
+ ],
+ [
+ 304.83863999999994,
+ 1545.7741548193153
+ ],
+ [
+ 321.77412,
+ 1687.1374851974335
+ ],
+ [
+ 338.70959999999997,
+ 1874.982629123184
+ ],
+ [
+ 355.64507999999995,
+ 2053.245077505699
+ ],
+ [
+ 372.58056,
+ 2193.1699905824016
+ ],
+ [
+ 389.51604,
+ 2306.852229324352
+ ],
+ [
+ 406.45151999999996,
+ 2467.4147164532937
+ ],
+ [
+ 423.38699999999994,
+ 2646.6766285006424
+ ],
+ [
+ 440.3224799999999,
+ 2786.317909996784
+ ],
+ [
+ 457.25795999999997,
+ 2904.6733166851177
+ ],
+ [
+ 474.19343999999995,
+ 3058.3070894889297
+ ],
+ [
+ 491.12891999999994,
+ 3221.307457584121
+ ],
+ [
+ 508.0644,
+ 3353.675614978737
+ ],
+ [
+ 524.99988,
+ 3457.572564191337
+ ],
+ [
+ 541.93536,
+ 3594.5666176022432
+ ],
+ [
+ 558.8708399999999,
+ 3746.1744505449055
+ ],
+ [
+ 575.8063199999999,
+ 3871.701684341708
+ ],
+ [
+ 592.7417999999999,
+ 3977.6178202825863
+ ],
+ [
+ 609.6772799999999,
+ 4101.990268358533
+ ],
+ [
+ 626.61276,
+ 4254.3814647141735
+ ],
+ [
+ 643.54824,
+ 4356.205202135531
+ ],
+ [
+ 660.48372,
+ 4439.761715142193
+ ],
+ [
+ 677.4191999999999,
+ 4558.002318571729
+ ],
+ [
+ 694.3546799999999,
+ 4707.942127695379
+ ],
+ [
+ 711.2901599999999,
+ 4811.737779914921
+ ],
+ [
+ 728.2256399999999,
+ 4896.9082916776315
+ ],
+ [
+ 745.16112,
+ 5012.413876294616
+ ],
+ [
+ 762.0966,
+ 5144.680736696175
+ ],
+ [
+ 779.03208,
+ 5251.711139560685
+ ],
+ [
+ 795.9675599999999,
+ 5329.588267823259
+ ],
+ [
+ 812.9030399999999,
+ 5450.124936428764
+ ],
+ [
+ 829.8385199999999,
+ 5571.49224037734
+ ],
+ [
+ 846.7739999999999,
+ 5687.625866351281
+ ],
+ [
+ 863.7094799999999,
+ 5770.635375595432
+ ],
+ [
+ 880.6449599999999,
+ 5882.480762196607
+ ],
+ [
+ 897.58044,
+ 6009.8988731971485
+ ],
+ [
+ 914.5159199999999,
+ 6112.911162003713
+ ],
+ [
+ 931.4513999999999,
+ 6193.307208826983
+ ],
+ [
+ 948.3868799999999,
+ 6294.577189352959
+ ],
+ [
+ 965.3223599999999,
+ 6429.74114375596
+ ],
+ [
+ 982.2578399999999,
+ 6552.702187061974
+ ],
+ [
+ 999.1933199999999,
+ 6638.62229657331
+ ],
+ [
+ 1016.1288,
+ 6750.197557859665
+ ],
+ [
+ 1033.0642799999998,
+ 6888.940672684031
+ ],
+ [
+ 1049.99976,
+ 7000.630737229184
+ ],
+ [
+ 1066.9352399999998,
+ 7079.21694444316
+ ],
+ [
+ 1083.87072,
+ 7195.742252123589
+ ],
+ [
+ 1100.8062,
+ 7323.626329292196
+ ],
+ [
+ 1117.7416799999999,
+ 7447.384242276928
+ ],
+ [
+ 1134.67716,
+ 7547.810081194091
+ ],
+ [
+ 1151.6126399999998,
+ 7657.548490339672
+ ],
+ [
+ 1168.54812,
+ 7790.071969790309
+ ],
+ [
+ 1185.4835999999998,
+ 7907.542716072608
+ ],
+ [
+ 1202.41908,
+ 7997.183801795588
+ ],
+ [
+ 1219.3545599999998,
+ 8090.559369995953
+ ],
+ [
+ 1236.2900399999999,
+ 8223.78517526512
+ ],
+ [
+ 1253.22552,
+ 8356.349173512981
+ ],
+ [
+ 1270.1609999999998,
+ 8436.650676476063
+ ],
+ [
+ 1287.09648,
+ 8544.700802404019
+ ],
+ [
+ 1304.0319599999998,
+ 8675.738592623147
+ ],
+ [
+ 1320.96744,
+ 8789.44784389658
+ ],
+ [
+ 1337.9029199999998,
+ 8880.932534893205
+ ],
+ [
+ 1354.8383999999999,
+ 8980.088784830716
+ ],
+ [
+ 1371.77388,
+ 9100.632206569091
+ ],
+ [
+ 1388.7093599999998,
+ 9220.581352614863
+ ],
+ [
+ 1405.64484,
+ 9314.64574036802
+ ],
+ [
+ 1422.5803199999998,
+ 9424.032986604332
+ ],
+ [
+ 1439.5158,
+ 9550.769031184955
+ ],
+ [
+ 1456.4512799999998,
+ 9653.193797431786
+ ],
+ [
+ 1473.3867599999999,
+ 9741.53828164363
+ ],
+ [
+ 1490.32224,
+ 9821.164471319662
+ ],
+ [
+ 1507.2577199999998,
+ 9939.661693798278
+ ],
+ [
+ 1524.1932,
+ 10056.49089245788
+ ],
+ [
+ 1541.1286799999998,
+ 10146.158990712342
+ ],
+ [
+ 1558.06416,
+ 10237.66394110758
+ ],
+ [
+ 1574.9996399999998,
+ 10350.076590869876
+ ],
+ [
+ 1591.9351199999999,
+ 10468.519788285526
+ ],
+ [
+ 1608.8705999999997,
+ 10550.104386494002
+ ],
+ [
+ 1625.8060799999998,
+ 10639.941313070227
+ ],
+ [
+ 1642.74156,
+ 10739.354182056817
+ ],
+ [
+ 1659.6770399999998,
+ 10860.242013571587
+ ],
+ [
+ 1676.61252,
+ 10942.738284717581
+ ],
+ [
+ 1693.5479999999998,
+ 11032.23755465028
+ ],
+ [
+ 1710.4834799999999,
+ 11126.261423606215
+ ],
+ [
+ 1727.4189599999997,
+ 11224.911188578437
+ ],
+ [
+ 1744.3544399999998,
+ 11293.9552190464
+ ],
+ [
+ 1761.2899199999997,
+ 11351.161007592384
+ ],
+ [
+ 1778.2253999999998,
+ 11422.69694408956
+ ],
+ [
+ 1795.16088,
+ 11506.989548579106
+ ],
+ [
+ 1812.0963599999998,
+ 11536.939692859762
+ ],
+ [
+ 1829.0318399999999,
+ 11548.575340795627
+ ],
+ [
+ 1845.9673199999997,
+ 11566.484649168187
+ ],
+ [
+ 1862.9027999999998,
+ 11563.783396019988
+ ],
+ [
+ 1879.8382799999997,
+ 11508.39420021617
+ ],
+ [
+ 1896.7737599999998,
+ 11438.019802572719
+ ],
+ [
+ 1913.70924,
+ 11389.01907046439
+ ],
+ [
+ 1930.6447199999998,
+ 11352.545399830835
+ ],
+ [
+ 1947.5801999999999,
+ 11280.192334256328
+ ],
+ [
+ 1964.5156799999997,
+ 11227.180241222924
+ ],
+ [
+ 1981.4511599999998,
+ 11186.040155775856
+ ],
+ [
+ 1998.3866399999997,
+ 11159.432812266097
+ ],
+ [
+ 2015.3221199999998,
+ 11097.081136472796
+ ],
+ [
+ 2032.2576,
+ 11038.774587268923
+ ],
+ [
+ 2049.19308,
+ 11013.06541043094
+ ],
+ [
+ 2066.1285599999997,
+ 11008.31795802298
+ ],
+ [
+ 2083.0640399999997,
+ 10957.433101843784
+ ],
+ [
+ 2099.99952,
+ 10914.624992577701
+ ],
+ [
+ 2116.935,
+ 10899.9301754515
+ ],
+ [
+ 2133.8704799999996,
+ 10892.4679636296
+ ],
+ [
+ 2150.8059599999997,
+ 10851.564237833
+ ],
+ [
+ 2167.74144,
+ 10820.736186279179
+ ],
+ [
+ 2184.67692,
+ 10808.168606007184
+ ],
+ [
+ 2201.6124,
+ 10803.853354102936
+ ],
+ [
+ 2218.5478799999996,
+ 10760.673822528977
+ ],
+ [
+ 2235.4833599999997,
+ 10743.379049247633
+ ],
+ [
+ 2252.41884,
+ 10732.384948934463
+ ],
+ [
+ 2269.35432,
+ 10707.979126740487
+ ],
+ [
+ 2286.2897999999996,
+ 10666.818781894806
+ ],
+ [
+ 2303.2252799999997,
+ 10631.749762898315
+ ],
+ [
+ 2320.1607599999998,
+ 10617.318317954061
+ ],
+ [
+ 2337.09624,
+ 10603.785039681585
+ ],
+ [
+ 2354.03172,
+ 10561.550946709496
+ ],
+ [
+ 2370.9671999999996,
+ 10518.850887569342
+ ],
+ [
+ 2387.9026799999997,
+ 10500.131203252324
+ ],
+ [
+ 2404.83816,
+ 10477.312367282913
+ ],
+ [
+ 2421.77364,
+ 10402.149998434279
+ ],
+ [
+ 2438.7091199999995,
+ 9331.92025425075
+ ],
+ [
+ 2455.6445999999996,
+ 5.924797688539551
+ ],
+ [
+ 2472.5800799999997,
+ 0.06983148981846293
+ ],
+ [
+ 2489.51556,
+ 0.1373628185234351
+ ],
+ [
+ 2506.45104,
+ 0.20489414722840726
+ ],
+ [
+ 2523.3865199999996,
+ 0.44800693056630714
+ ],
+ [
+ 2540.3219999999997,
+ 0.2994380074153683
+ ],
+ [
+ 2557.2574799999998,
+ 0.22515354583989894
+ ],
+ [
+ 2574.19296,
+ 0.3332036717678544
+ ],
+ [
+ 2591.12844,
+ 0.36021620324984327
+ ]
+]
\ No newline at end of file
--
GitLab