Repository 'charts'
hg clone https://toolshed.g2.bx.psu.edu/repos/iuc/charts

Changeset 0:a87a3773d8ed (2018-03-09)
Next changeset 1:344ac3ca7557 (2021-11-17)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/charts/ commit 87080d49913cfd40a77eda7e5834ac9c4bc30b0b
added:
boxplot.r
charts.r
charts.xml
heatmap.r
histogram.r
histogramdiscrete.r
test-data/boxplot.000.txt
test-data/boxplot.001.txt
test-data/heatmap.000.txt
test-data/histogram.000.txt
test-data/histogram.001.txt
test-data/histogram.002.txt
test-data/histogram.003.txt
test-data/histogramdiscrete.000.txt
test-data/tabular.txt
test-data/tabular_matrix.txt
test-data/tabular_single.txt
test-data/tabular_small.txt
b
diff -r 000000000000 -r a87a3773d8ed boxplot.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boxplot.r Fri Mar 09 08:23:08 2018 -0500
[
@@ -0,0 +1,21 @@
+wrapper <- function(table, columns, options) {
+
+    # initialize output list
+    l <- list()
+
+    # loop through all columns
+    for (key in names(columns)) {
+        # load column data
+        column <- as.numeric(columns[key])
+        column_data <- suppressWarnings(as.numeric(as.character(table[column][[1]])))
+    
+        # create hist data
+        data <- boxplot(column_data, plot=FALSE)
+        
+        # collect vectors in list
+        l <- append(l, list(data$stats))
+    }
+    
+    # return
+    return (l)
+}
b
diff -r 000000000000 -r a87a3773d8ed charts.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/charts.r Fri Mar 09 08:23:08 2018 -0500
[
@@ -0,0 +1,116 @@
+#!/usr/bin/Rscript
+
+# load getopt library
+library('getopt');
+
+# convert multi parameter string (i.e. key1: value, key2: value, ...) to object
+split <- function(argument){
+    # process parameter string
+    options <- list()
+    list <- gsub("\\s","", argument)
+    list <- strsplit(list, ",")
+    if (length(list) > 0) {
+        list <- list[[1]]
+        for (entry in list) {
+            pair <- strsplit(entry, ":")
+            if (length(pair) > 0) {
+                pair <- pair[[1]]
+                if (length(pair) == 2) {
+                    options[[pair[1]]] <- pair[2]
+                }
+            }
+        }
+    }
+    return(options)
+}
+
+# get options, using the spec as defined by the enclosed list.
+spec = matrix(c(
+    'workdir',  'w', 1, 'character', 'Work directory',
+    'module',   'm', 1, 'character', 'Module name',
+    'input',    'i', 1, 'character', 'Input tabular file',
+    'columns',  'c', 1, 'character', 'Columns string',
+    'settings', 's', 1, 'character', 'Settings string',
+    'output',   'o', 1, 'character', 'Output tabular file',
+    'help',     'h', 0, '',          'Help',
+    'verbose',  'v', 0, '',          'Verbose'
+), byrow=TRUE, ncol=5);
+opt = getopt(spec);
+
+# show help
+if ( !is.null(opt$help) ||
+    is.null(opt$module) ||
+    is.null(opt$input) ||
+    is.null(opt$columns) ||
+    is.null(opt$output)) {
+    cat(getopt(spec, usage=TRUE))
+    q(status=1);
+}
+
+# read columns/settings
+columns = split(opt$columns)
+settings = split(opt$settings)
+
+# read table
+table <- read.table(opt$input, comment.char='#', fill=TRUE)
+
+# identify module file
+module_file = paste(opt$workdir, opt$module, '.r', sep='')
+
+# source module
+source(module_file)
+
+# run module
+l = wrapper (table, columns, settings)
+
+# header
+header_title <- '# title - Chart Utilities (charts)'
+header_date <- paste('# date -', Sys.time(), sep=' ')
+header_module <- paste('# module -', opt$module, sep=' ')
+header_settings <- paste('# settings -', opt$settings, sep=' ')
+header_columns <- paste('# columns -', opt$columns, sep=' ')
+
+# check result
+if (length(l) > 0) {
+    # print details
+    if (!is.null(opt$verbose)) {
+        print ('Columns:')
+        print (columns)
+        print ('Settings:')
+        print (settings)
+        print ('Result:')
+        print (l)
+    }
+
+    # create output file
+    output <- file(opt$output, open='wt')
+    
+    # write header
+    writeLines('#', output)
+    writeLines(header_title, output)
+    writeLines(header_date, output)
+    writeLines(header_module, output)
+    writeLines(header_settings, output)
+    writeLines(header_columns, output)
+    writeLines('#', output)
+    
+    # pad columns
+    rows <- max(unlist(lapply(l, length)))
+    padded <- lapply(l, function(col) {
+        length(col) = rows;
+        col
+    })
+    
+    # write table
+    write.table(padded, file=output, row.names=FALSE, col.names = FALSE, quote=FALSE, sep='\t')
+    
+    # close file
+    close(output)
+} else {
+    # print details
+    print ('Columns:')
+    print (columns)
+    print ('Settings:')
+    print (settings)
+    print ('No output generated.')
+}
\ No newline at end of file
b
diff -r 000000000000 -r a87a3773d8ed charts.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/charts.xml Fri Mar 09 08:23:08 2018 -0500
[
@@ -0,0 +1,90 @@
+<tool id="charts" name="Charts" version="1.0.1" hidden="true">
+    <description>wrapper for R</description>
+    <requirements>
+        <requirement type="package" version="1.20.0">r-getopt</requirement>
+        <requirement type="package" version="1.2-12">r-matrix</requirement>
+    </requirements>
+    <command detect_errors="aggressive">
+<![CDATA[
+        Rscript '$__tool_directory__/charts.r'
+            -w '$__tool_directory__/'
+            -m ${module}
+            -i '${input}'
+            -c '${columns}'
+            -s '${settings}'
+            -o '${output}'
+]]>
+    </command>
+    <inputs>
+        <param name="input" type="data" label="Input dataset" format="tabular" />
+        <param name="module" type="select" label="R-script">
+            <option value="boxplot">boxplot</option>
+            <option value="heatmap">heatmap</option>
+            <option value="histogram">histogram</option>
+            <option value="histogramdiscrete">histogramdiscrete</option>
+        </param>
+        <param name="columns" type="text" area="true" label="Columns string (i.e key1: column, key2: column)" value=""/>
+        <param name="settings" type="text" area="true" label="Options string (i.e key1: value, key2: value)" value=""/>
+    </inputs>
+    <outputs>
+        <data name="output" format="tabular" />
+    </outputs>
+    <tests>
+        <test>
+            <param name="input" value="tabular.txt" />
+            <param name="module" value="histogram" />
+            <param name="columns" value="key1: 2" />
+            <param name="settings" value="" />
+            <output name="output" file="histogram.000.txt" lines_diff="2"/>
+        </test>
+        <test>
+            <param name="input" value="tabular.txt" />
+            <param name="module" value="histogram" />
+            <param name="columns" value="key1: 2, key2: 3, key3: 4" />
+            <param name="settings" value="" />
+            <output name="output" file="histogram.001.txt" lines_diff="2"/>
+        </test>
+        <test>
+            <param name="input" value="tabular.txt" />
+            <param name="module" value="histogram" />
+            <param name="columns" value="key1: 6" />
+            <param name="settings" value="" />
+            <output name="output" file="histogram.002.txt" lines_diff="2"/>
+        </test>
+        <test>
+            <param name="input" value="tabular_single.txt" />
+            <param name="module" value="histogram" />
+            <param name="columns" value="key1: 1" />
+            <param name="settings" value="" />
+            <output name="output" file="histogram.003.txt" lines_diff="2"/>
+        </test>
+        <test>
+            <param name="input" value="tabular.txt" />
+            <param name="module" value="boxplot" />
+            <param name="columns" value="key1: 2" />
+            <param name="settings" value="" />
+            <output name="output" file="boxplot.000.txt" lines_diff="2"/>
+        </test>
+        <test>
+            <param name="input" value="tabular.txt" />
+            <param name="module" value="boxplot" />
+            <param name="columns" value="key1: 2, key2: 3, key3: 4" />
+            <param name="settings" value="" />
+            <output name="output" file="boxplot.001.txt" lines_diff="2"/>
+        </test>
+        <test>
+            <param name="input" value="tabular_matrix.txt" />
+            <param name="module" value="histogramdiscrete" />
+            <param name="columns" value="key1: 1, key2: 2, key3: 3" />
+            <param name="settings" value="" />
+            <output name="output" file="histogramdiscrete.000.txt" lines_diff="2"/>
+        </test>
+        <test>
+            <param name="input" value="tabular_matrix.txt" ftype="tabular" />
+            <param name="module" value="heatmap" />
+            <param name="columns" value="key1: 1, key2: 2, key3: 3" />
+            <param name="settings" value="" />
+            <output name="output" file="heatmap.000.txt" lines_diff="2"/>
+        </test>
+    </tests>
+</tool>
b
diff -r 000000000000 -r a87a3773d8ed heatmap.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/heatmap.r Fri Mar 09 08:23:08 2018 -0500
[
@@ -0,0 +1,97 @@
+# load sparse matrix package
+suppressPackageStartupMessages(library('Matrix'))
+
+# access a numeric column
+get_numeric <- function(table, column_key) {
+    column <- as.numeric(column_key)
+    column_data <- suppressWarnings(as.numeric(as.character(table[column][[1]])))
+    return (c(column_data))
+}
+
+# access a label column
+get_label <- function(table, column_key) {
+    column <- as.numeric(column_key)
+    column_data <- as.character(table[column][[1]])
+    return (c(column_data))
+}
+
+# inflate three columns into matrix
+matrify <- function (data) {
+    if (ncol(data) != 3)
+        stop('Data frame must have three column format')
+    plt <- data[, 1]
+    spc <- data[, 2]
+    abu <- data[, 3]
+    plt.codes <- levels(factor(plt))
+    spc.codes <- levels(factor(spc))
+    taxa <- Matrix(0, nrow=length(plt.codes), ncol=length(spc.codes), sparse=TRUE)
+    row <- match(plt, plt.codes)
+    col <- match(spc, spc.codes)
+    for (i in 1:length(abu)) {
+        taxa[row[i], col[i]] <- abu[i]
+    }
+    colnames(taxa) <- spc.codes
+    rownames(taxa) <- plt.codes
+    taxa
+}
+
+# flatten data.frame into three column format
+flatten <- function(my_matrix) {
+    summ <-summary(my_matrix)
+    summ <- data.frame(i=rownames(my_matrix)[summ$i], j=colnames(my_matrix)[summ$j], x=summ$x)
+    summ
+}
+
+# wrapper
+wrapper <- function(table, columns, options) {
+
+    # initialize output list
+    l <- list()
+
+    # get number of columns
+    n = length(columns)
+    
+    # consistency check
+    if (n %% 3 != 0) {
+        print ('heatmap::wrapper() - Data not consistent (n mod 3 != 0)')
+        return (l)
+    }
+    
+    # create index sequence
+    index = seq(1, n, by=3)
+    
+    # get keys
+    keys = names(columns)
+    
+    # loop through blocks
+    for (i in index) {
+        # create columns
+        ci <- get_label(table, columns[keys[i]])
+        cj <- get_label(table, columns[keys[i+1]])
+        cx <- get_numeric(table, columns[keys[i+2]])
+        
+        # create a frame from columns
+        my_frame <- data.frame(ci=ci, cj=cj, cx=cx)
+        
+        # create matrix out of the frame
+        my_matrix <- matrify(my_frame)
+        
+        # create/cluster matrix
+        row_order <- hclust(dist(my_matrix))$order
+        col_order <- hclust(dist(t(my_matrix)))$order
+        
+        # reorder matrix
+        my_matrix <- my_matrix[row_order, col_order]
+        
+        # transform back to three columns
+        my_flatmatrix = flatten(my_matrix)
+        
+        # append to result list
+        l <- append(l, list(my_flatmatrix$i))
+        l <- append(l, list(my_flatmatrix$j))
+        l <- append(l, list(my_flatmatrix$x))
+    }
+    
+    # return
+    return (l)
+}
b
diff -r 000000000000 -r a87a3773d8ed histogram.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/histogram.r Fri Mar 09 08:23:08 2018 -0500
[
@@ -0,0 +1,45 @@
+# wrapper
+wrapper <- function(table, columns, options) {
+
+    # initialize output list
+    l <- list()
+
+    # loop through all columns
+    m <- list()
+    for (key in names(columns)) {
+        # load column data
+        column <- as.numeric(columns[key])
+        column_data <- suppressWarnings(as.numeric(as.character(table[column][[1]])))
+        
+        # collect vectors in list
+        m <- append(m, list(column_data))
+    }
+    
+    # identify optimal breaks
+    hist_data <- hist(unlist(m), plot=FALSE)
+    breaks <- hist_data$breaks;
+    
+    # add as first column
+    l <- append(l, list(breaks[2: length(breaks)]))
+    
+    # loop through all columns
+    for (key in seq(m)) {
+        # load column data
+        column_data <- m[[key]]
+        
+        # create hist data
+        hist_data <- hist(column_data, breaks=breaks, plot=FALSE)
+        
+        # normalize densities
+        count_sum <- sum(hist_data$counts)
+        if (count_sum > 0) {
+            hist_data$counts = hist_data$counts / count_sum
+        }
+        
+        # collect vectors in list
+        l <- append(l, list(hist_data$counts))
+    }
+    
+    # return
+    return (l)
+}
b
diff -r 000000000000 -r a87a3773d8ed histogramdiscrete.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/histogramdiscrete.r Fri Mar 09 08:23:08 2018 -0500
[
@@ -0,0 +1,54 @@
+# wrapper
+wrapper <- function(table, columns, options) {
+
+    # initialize output list
+    l <- list()
+
+    # loop through all columns
+    m <- list()
+    for (key in names(columns)) {
+        # load column data
+        column <- as.numeric(columns[key])
+        
+        # ensure string column
+        column_data <- as.character(table[column][[1]])
+    
+        # collect vectors in list
+        m <- append(m, list(column_data))
+    }
+    
+    # get alphabetically sorted bins
+    bins <- sort(unique(unlist(m)))
+    
+    # add first column
+    l <- append(l, list(bins))
+    
+    # loop through all columns
+    for (key in seq(m)) {
+        # reset bins
+        bins = sapply(bins, function(v) { 0 })
+        
+        # load column data
+        column_data <- m[[key]]
+        
+        # create hist data
+        table_data <- table(column_data)
+        
+        # transfer counts to bins
+        for (id in names(table_data)) {
+            bins[id] <- table_data[id]
+        }
+        
+        # normalize densities
+        total <- length(column_data)
+        if (total > 0) {
+            bins = bins / total
+        }
+        
+        # collect vectors in list
+        l <- append(l, list(bins))
+    }
+
+    # return
+    return (l)
+}
b
diff -r 000000000000 -r a87a3773d8ed test-data/boxplot.000.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/boxplot.000.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,12 @@
+#
+# title - Chart Utilities (charts)
+# date - 2014-04-25 19:44:41
+# module - boxplot
+# settings - 
+# columns - key1: 2
+#
+0
+24
+50
+75
+100
b
diff -r 000000000000 -r a87a3773d8ed test-data/boxplot.001.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/boxplot.001.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,12 @@
+#
+# title - Chart Utilities (charts)
+# date - 2014-04-25 19:45:09
+# module - boxplot
+# settings - 
+# columns - key1: 2, key2: 3, key3: 4
+#
+0 1 0
+24 20 17
+50 47.5 42.5
+75 74 69.5
+100 100 100
b
diff -r 000000000000 -r a87a3773d8ed test-data/heatmap.000.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/heatmap.000.txt Fri Mar 09 08:23:08 2018 -0500
b
b'@@ -0,0 +1,6000 @@\n+#\n+# title - Chart Utilities (charts)\n+# date - 2018-03-09 08:30:44\n+# module - heatmap\n+# settings - \n+# columns - key1: 1, key2: 2, key3: 3\n+#\n+b2517\tb3637\t0.76\n+b0528\tb3637\t0.76\n+b2696\tb3637\t0.76\n+b4172\tb3637\t0.76\n+b2007\tb3637\t0.76\n+b3162\tb3637\t0.76\n+b1086\tb3637\t0.89\n+b1269\tb3637\t0.77\n+b3006\tb3637\t0.75\n+b2032\tb3637\t0.75\n+b0119\tb3637\t0.75\n+b1452\tb3637\t0.75\n+b2830\tb3637\t0.75\n+b0877\tb3637\t0.75\n+b3295\tb3637\t0.77\n+b0200\tb3637\t0.75\n+b2581\tb3637\t0.79\n+b0127\tb3637\t0.76\n+b2922\tb3637\t0.75\n+b3650\tb3637\t0.75\n+b3704\tb3637\t0.75\n+b2294\tb3637\t0.75\n+b1686\tb3637\t0.76\n+b1913\tb3637\t0.75\n+b1919\tb3637\t0.75\n+b2620\tb3637\t0.75\n+b4059\tb3637\t0.75\n+b2584\tb3637\t0.76\n+b4187\tb3637\t0.76\n+b4191\tb3637\t0.76\n+b2217\tb3637\t0.76\n+b0180\tb3637\t0.75\n+b0924\tb3637\t0.76\n+b3560\tb3637\t0.75\n+b0406\tb3637\t0.75\n+b3318\tb3637\t0.82\n+b0967\tb3637\t0.76\n+b0214\tb3637\t0.75\n+b2892\tb3637\t0.75\n+b4259\tb3637\t0.76\n+b1099\tb3637\t0.75\n+b2729\tb3637\t0.75\n+b0098\tb3637\t0.78\n+b1872\tb3637\t0.75\n+b2742\tb3637\t0.75\n+b3982\tb3637\t0.76\n+b2728\tb3637\t0.75\n+b3067\tb3637\t0.75\n+b2351\tb3637\t0.75\n+b0736\tb3637\t0.75\n+b4234\tb3637\t0.76\n+b3440\tb3637\t0.75\n+b3602\tb3637\t0.76\n+b1322\tb3637\t0.75\n+b3522\tb3637\t0.75\n+b2520\tb3637\t0.75\n+b2994\tb3637\t0.75\n+b2439\tb3637\t0.75\n+b0543\tb3637\t0.75\n+b2343\tb3637\t0.76\n+b3956\tb3637\t0.75\n+b2206\tb3637\t0.75\n+b2063\tb3637\t0.75\n+b1846\tb3637\t0.75\n+b3197\tb3637\t0.75\n+b0072\tb3637\t0.75\n+b3822\tb3637\t0.75\n+b1792\tb3637\t0.75\n+b0208\tb3637\t0.75\n+b1494\tb3637\t0.75\n+b3148\tb3637\t0.75\n+b4218\tb3637\t0.75\n+b3428\tb3637\t0.75\n+b0077\tb3637\t0.75\n+b0436\tb3637\t0.77\n+b2331\tb3637\t0.75\n+b3356\tb3637\t0.75\n+b0004\tb3637\t0.75\n+b4017\tb3637\t0.75\n+b0228\tb3637\t0.75\n+b2531\tb3637\t0.75\n+b3054\tb3637\t0.75\n+b0830\tb3637\t0.76\n+b1290\tb3637\t0.75\n+b1817\tb3637\t0.76\n+b4387\tb3637\t0.75\n+b4039\tb3637\t0.75\n+b1430\tb3637\t0.75\n+b1046\tb3637\t0.75\n+b1398\tb3637\t0.75\n+b0712\tb3637\t0.75\n+b2494\tb3637\t0.75\n+b1258\tb3637\t0.75\n+b1591\tb3637\t0.75\n+b2712\tb3637\t0.75\n+b0819\tb3637\t0.76\n+b0783\tb3637\t0.75\n+b2443\tb3637\t0.75\n+b1399\tb3637\t0.75\n+b3999\tb3637\t0.75\n+b4097\tb3637\t0.75\n+b0714\tb3637\t0.75\n+b1279\tb3637\t0.75\n+b0954\tb3637\t0.76\n+b4149\tb3637\t0.75\n+b1014\tb3637\t0.75\n+b2517\tb3984\t1\n+b0528\tb3984\t0.99\n+b2696\tb3984\t0.95\n+b4172\tb3984\t0.97\n+b2007\tb3984\t0.99\n+b3162\tb3984\t1\n+b1086\tb3984\t0.99\n+b1269\tb3984\t1\n+b2032\tb3984\t0.75\n+b3396\tb3984\t0.75\n+b1452\tb3984\t0.82\n+b2830\tb3984\t0.97\n+b0660\tb3984\t0.96\n+b0877\tb3984\t0.97\n+b3590\tb3984\t0.76\n+b1084\tb3984\t0.97\n+b0880\tb3984\t0.98\n+b1823\tb3984\t0.99\n+b3295\tb3984\t0.97\n+b0200\tb3984\t0.75\n+b2581\tb3984\t1\n+b4179\tb3984\t1\n+b0127\tb3984\t0.76\n+b2922\tb3984\t0.84\n+b3650\tb3984\t0.94\n+b3704\tb3984\t0.97\n+b0710\tb3984\t0.76\n+b1686\tb3984\t0.75\n+b1913\tb3984\t0.84\n+b1919\tb3984\t0.99\n+b4187\tb3984\t0.83\n+b4191\tb3984\t0.88\n+b2217\tb3984\t0.9\n+b0453\tb3984\t0.75\n+b0180\tb3984\t0.99\n+b2610\tb3984\t0.94\n+b3179\tb3984\t0.89\n+b0421\tb3984\t0.96\n+b1413\tb3984\t0.91\n+b4377\tb3984\t0.93\n+b0179\tb3984\t0.89\n+b0406\tb3984\t0.91\n+b3318\tb3984\t1\n+b0967\tb3984\t0.76\n+b1676\tb3984\t0.78\n+b3164\tb3984\t0.93\n+b3780\tb3984\t0.76\n+b1215\tb3984\t0.77\n+b3071\tb3984\t0.75\n+b0171\tb3984\t0.89\n+b3030\tb3984\t0.97\n+b0623\tb3984\t0.97\n+b1000\tb3984\t0.99\n+b0184\tb3984\t0.76\n+b0215\tb3984\t0.92\n+b1099\tb3984\t0.92\n+b3417\tb3984\t0.9\n+b0439\tb3984\t0.9\n+b1961\tb3984\t0.75\n+b3067\tb3984\t0.99\n+b4234\tb3984\t0.77\n+b3440\tb3984\t0.75\n+b3602\tb3984\t0.79\n+b1435\tb3984\t0.99\n+b2465\tb3984\t0.75\n+b3522\tb3984\t0.75\n+b2576\tb3984\t0.9\n+b0454\tb3984\t0.75\n+b1244\tb3984\t0.75\n+b3198\tb3984\t0.75\n+b4327\tb3984\t0.75\n+b4029\tb3984\t0.75\n+b4178\tb3984\t0.75\n+b2887\tb3984\t0.87\n+b1719\tb3984\t0.84\n+b4061\tb3984\t0.75\n+b4177\tb3984\t0.77\n+b1792\tb3984\t0.75\n+b1494\tb3984\t0.77\n+b4218\tb3984\t0.75\n+b3524\tb3984\t0.75\n+b4354\tb3984\t0.75\n+b2494\tb3984\t0.75\n+b0948\tb3984\t0.98\n+b1678\tb3984\t0.76\n+b4018\tb3984\t0.75\n+b3319\tb3984\t0.76\n+b1279\tb3984\t0.75\n+b0954\tb3984\t0.95\n+b4149\tb3984\t0.75\n+b1014\tb3984\t0.77\n+b0049\tb3984\t0.75\n+b0394\tb3984\t0.75\n+b2517\tb3314\t1\n+b0528\tb3314\t1\n+b2696\tb3314\t0.99\n+b4172\tb3314\t0.97\n+b2007\tb3314\t0.96\n+b3162\tb3314\t1\n+b1086\tb3314\t0.98\n+b1269\tb3314\t1\n+b0854\tb3314\t0.93\n+b0119\tb3314\t0.75\n+b1452\tb3314\t0.76\n+b2830\tb3314\t0.8\n+b0660\tb3314\t0.8\n+b0877\tb3314\t0.98\n+b3590\tb3314\t0.76\n+b1084\tb3314\t0.98\n'..b'\t0.75\n+b1557\tb3986\t0.75\n+b3556\tb3986\t0.75\n+b3470\tb3986\t0.75\n+b0454\tb3986\t0.75\n+b0481\tb3986\t0.75\n+b3019\tb3986\t0.75\n+b1226\tb3986\t0.75\n+b1773\tb3986\t0.75\n+b3183\tb3986\t0.75\n+b0892\tb3986\t0.75\n+b0413\tb3986\t0.75\n+b2520\tb3986\t0.75\n+b2994\tb3986\t0.75\n+b4352\tb3986\t0.75\n+b3178\tb3986\t0.76\n+b0543\tb3986\t0.75\n+b0068\tb3986\t0.75\n+b3439\tb3986\t0.75\n+b4090\tb3986\t0.75\n+b0144\tb3986\t0.75\n+b3461\tb3986\t0.75\n+b1914\tb3986\t0.75\n+b0891\tb3986\t0.75\n+b2319\tb3986\t0.75\n+b1055\tb3986\t0.75\n+b3965\tb3986\t0.75\n+b2804\tb3986\t0.75\n+b3481\tb3986\t0.75\n+b3018\tb3986\t0.75\n+b2865\tb3986\t0.75\n+b1098\tb3986\t0.75\n+b0965\tb3986\t0.75\n+b0784\tb3986\t0.75\n+b0148\tb3986\t0.75\n+b0544\tb3986\t0.75\n+b2155\tb3986\t0.75\n+b3462\tb3986\t0.75\n+b4388\tb3986\t0.75\n+b2888\tb3986\t0.75\n+b0607\tb3986\t0.76\n+b1809\tb3986\t0.75\n+b3195\tb3986\t0.75\n+b1858\tb3986\t0.75\n+b1163\tb3986\t0.75\n+b2627\tb3986\t0.75\n+b3064\tb3986\t0.75\n+b3538\tb3986\t0.75\n+b3888\tb3986\t0.75\n+b1941\tb3986\t0.75\n+b4301\tb3986\t0.75\n+b4350\tb3986\t0.75\n+b1279\tb3986\t0.75\n+b2517\tb3307\t0.76\n+b0528\tb3307\t0.78\n+b2696\tb3307\t0.76\n+b2007\tb3307\t0.85\n+b3162\tb3307\t0.77\n+b1086\tb3307\t0.76\n+b1269\tb3307\t0.78\n+b3006\tb3307\t0.75\n+b2032\tb3307\t0.75\n+b3396\tb3307\t0.75\n+b0119\tb3307\t0.76\n+b1452\tb3307\t0.76\n+b0660\tb3307\t0.81\n+b3180\tb3307\t0.79\n+b0880\tb3307\t0.76\n+b1823\tb3307\t0.79\n+b1718\tb3307\t0.84\n+b3295\tb3307\t0.77\n+b0200\tb3307\t0.75\n+b2581\tb3307\t0.79\n+b4179\tb3307\t0.78\n+b0127\tb3307\t0.76\n+b2922\tb3307\t0.75\n+b3650\tb3307\t0.76\n+b3704\tb3307\t0.76\n+b2294\tb3307\t0.75\n+b1686\tb3307\t0.76\n+b1913\tb3307\t0.76\n+b1919\tb3307\t0.76\n+b2620\tb3307\t0.75\n+b2584\tb3307\t0.76\n+b4187\tb3307\t0.76\n+b4191\tb3307\t0.76\n+b0453\tb3307\t0.75\n+b2585\tb3307\t0.76\n+b3702\tb3307\t0.76\n+b0406\tb3307\t0.76\n+b0967\tb3307\t0.76\n+b1215\tb3307\t0.75\n+b3071\tb3307\t0.75\n+b0028\tb3307\t0.75\n+b0214\tb3307\t0.76\n+b0015\tb3307\t0.78\n+b0171\tb3307\t0.76\n+b4259\tb3307\t0.76\n+b1872\tb3307\t0.75\n+b2742\tb3307\t0.75\n+b0882\tb3307\t0.76\n+b3982\tb3307\t0.77\n+b3987\tb3307\t0.77\n+b3998\tb3307\t0.76\n+b1763\tb3307\t0.76\n+b1961\tb3307\t0.76\n+b3440\tb3307\t0.75\n+b3602\tb3307\t0.77\n+b1435\tb3307\t0.75\n+b0091\tb3307\t0.76\n+b3895\tb3307\t0.76\n+b2291\tb3307\t0.76\n+b2994\tb3307\t0.75\n+b2155\tb3307\t0.75\n+b2485\tb3307\t0.75\n+b3462\tb3307\t0.75\n+b4388\tb3307\t0.75\n+b2262\tb3307\t0.75\n+b2888\tb3307\t0.75\n+b1809\tb3307\t0.75\n+b2343\tb3307\t0.76\n+b3205\tb3307\t0.76\n+b4178\tb3307\t0.75\n+b3213\tb3307\t0.75\n+b1539\tb3307\t0.76\n+b0369\tb3307\t0.75\n+b1754\tb3307\t0.75\n+b2206\tb3307\t0.76\n+b3973\tb3307\t0.76\n+b1831\tb3307\t0.75\n+b1787\tb3307\t0.75\n+b0579\tb3307\t0.75\n+b0423\tb3307\t0.75\n+b1611\tb3307\t0.75\n+b0810\tb3307\t0.75\n+b2926\tb3307\t0.77\n+b0957\tb3307\t0.76\n+b2887\tb3307\t0.75\n+b0506\tb3307\t0.76\n+b3676\tb3307\t0.75\n+b2331\tb3307\t0.75\n+b0489\tb3307\t0.75\n+b1120\tb3307\t0.75\n+b1279\tb3307\t0.75\n+b0386\tb3307\t0.76\n+b2000\tb3307\t0.75\n+b4149\tb3307\t0.75\n+b0049\tb3307\t0.75\n+b2517\tb3321\t0.93\n+b2007\tb3321\t0.76\n+b3162\tb3321\t0.8\n+b1269\tb3321\t0.88\n+b3006\tb3321\t0.75\n+b0678\tb3321\t0.78\n+b3396\tb3321\t0.75\n+b0119\tb3321\t0.76\n+b3180\tb3321\t0.93\n+b1084\tb3321\t0.76\n+b0880\tb3321\t0.82\n+b1823\tb3321\t0.83\n+b1718\tb3321\t0.9\n+b3295\tb3321\t0.9\n+b0200\tb3321\t0.76\n+b2581\tb3321\t0.78\n+b0127\tb3321\t0.76\n+b3650\tb3321\t0.75\n+b3704\tb3321\t0.75\n+b2584\tb3321\t0.75\n+b0453\tb3321\t0.75\n+b3702\tb3321\t0.75\n+b0924\tb3321\t0.93\n+b4377\tb3321\t0.75\n+b0967\tb3321\t0.76\n+b0015\tb3321\t0.93\n+b0171\tb3321\t0.75\n+b0623\tb3321\t0.79\n+b3931\tb3321\t0.75\n+b0098\tb3321\t0.78\n+b1872\tb3321\t0.75\n+b2742\tb3321\t0.75\n+b0882\tb3321\t0.76\n+b3982\tb3321\t0.92\n+b3987\tb3321\t0.83\n+b2450\tb3321\t0.76\n+b1274\tb3321\t0.75\n+b0812\tb3321\t0.78\n+b2351\tb3321\t0.75\n+b0430\tb3321\t0.75\n+b0091\tb3321\t0.75\n+b1557\tb3321\t0.76\n+b3556\tb3321\t0.76\n+b0481\tb3321\t0.75\n+b1248\tb3321\t0.76\n+b1523\tb3321\t0.75\n+b0413\tb3321\t0.75\n+b2520\tb3321\t0.76\n+b2994\tb3321\t0.75\n+b2831\tb3321\t0.75\n+b0082\tb3321\t0.76\n+b0890\tb3321\t0.75\n+b2439\tb3321\t0.75\n+b2565\tb3321\t0.75\n+b0068\tb3321\t0.75\n+b1252\tb3321\t0.76\n+b3462\tb3321\t0.75\n+b4388\tb3321\t0.75\n+b0085\tb3321\t0.76\n+b2746\tb3321\t0.75\n+b2888\tb3321\t0.75\n+b4327\tb3321\t0.75\n+b0444\tb3321\t0.75\n+b3064\tb3321\t0.75\n+b0145\tb3321\t0.76\n+b0134\tb3321\t0.75\n+b2330\tb3321\t0.75\n+b0033\tb3321\t0.75\n+b4335\tb3321\t0.75\n+b3319\tb3321\t0.75\n+b2183\tb3321\t0.99\n+b1279\tb3321\t0.75\n+b0728\tb3321\t0.75\n+b0386\tb3321\t0.76\n+b4149\tb3321\t0.75\n'
b
diff -r 000000000000 -r a87a3773d8ed test-data/histogram.000.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/histogram.000.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,17 @@
+#
+# title - Chart Utilities (charts)
+# date - 2014-05-08 14:47:25
+# module - histogram
+# settings - 
+# columns - key1: 2
+#
+10 0.15
+20 0.06
+30 0.15
+40 0.07
+50 0.07
+60 0.09
+70 0.11
+80 0.1
+90 0.07
+100 0.13
b
diff -r 000000000000 -r a87a3773d8ed test-data/histogram.001.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/histogram.001.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,17 @@
+#
+# title - Chart Utilities (charts)
+# date - 2014-05-08 14:48:20
+# module - histogram
+# settings - 
+# columns - key1: 2, key2: 3, key3: 4
+#
+10 0.15 0.14 0.15
+20 0.06 0.12 0.19
+30 0.15 0.08 0.07
+40 0.07 0.09 0.08
+50 0.07 0.11 0.09
+60 0.09 0.08 0.12
+70 0.11 0.1 0.06
+80 0.1 0.09 0.06
+90 0.07 0.09 0.09
+100 0.13 0.1 0.09
b
diff -r 000000000000 -r a87a3773d8ed test-data/histogram.002.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/histogram.002.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,17 @@
+#
+# title - Chart Utilities (charts)
+# date - 2018-01-31 00:52:34
+# module - histogram
+# settings - 
+# columns - key1: 6
+#
+10 0.1
+20 0.13
+30 0.11
+40 0.11
+50 0.05
+60 0.1
+70 0.12
+80 0.13
+90 0.08
+100 0.07
b
diff -r 000000000000 -r a87a3773d8ed test-data/histogram.003.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/histogram.003.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,26 @@
+#
+# title - Chart Utilities (charts)
+# date - 2018-01-31 00:52:47
+# module - histogram
+# settings - 
+# columns - key1: 1
+#
+10 0.845934807043837
+20 0.126988884725865
+30 0.0208067940552017
+40 0.00467091295116773
+50 0.00104908205320345
+60 0.000274759585362808
+70 7.49344323716748e-05
+80 7.49344323716748e-05
+90 0
+100 2.49781441238916e-05
+110 2.49781441238916e-05
+120 4.99562882477832e-05
+130 0
+140 0
+150 0
+160 0
+170 0
+180 0
+190 2.49781441238916e-05
b
diff -r 000000000000 -r a87a3773d8ed test-data/histogramdiscrete.000.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/histogramdiscrete.000.txt Fri Mar 09 08:23:08 2018 -0500
b
b'@@ -0,0 +1,1790 @@\n+#\n+# title - Chart Utilities (charts)\n+# date - 2014-05-09 00:48:18\n+# module - histogramdiscrete\n+# settings - \n+# columns - key1: 1, key2: 2, key3: 3\n+#\n+0.75\t0\t0\t0.14366761221425\n+0.76\t0\t0\t0.180377106624395\n+0.77\t0\t0\t0.0921074587018188\n+0.78\t0\t0\t0.0755881862172535\n+0.79\t0\t0\t0.047054897380277\n+0.8\t0\t0\t0.0602369431002837\n+0.81\t0\t0\t0.0261972301017854\n+0.82\t0\t0\t0.0387118304688804\n+0.83\t0\t0\t0.00901051226430836\n+0.84\t0\t0\t0.0276989821458368\n+0.85\t0\t0\t0.0178541631903888\n+0.86\t0\t0\t0.00967795761722009\n+0.87\t0\t0\t0.0178541631903888\n+0.88\t0\t0\t0.00901051226430836\n+0.89\t0\t0\t0.00934423494076423\n+0.9\t0\t0\t0.0110128483230436\n+0.91\t0\t0\t0.0111797096612715\n+0.92\t0\t0\t0.0150175204405139\n+0.93\t0\t0\t0.0141832137493743\n+0.94\t0\t0\t0.0210245286167195\n+0.95\t0\t0\t0.0193559152344402\n+0.96\t0\t0\t0.0135157683964625\n+0.97\t0\t0\t0.0145169364258301\n+0.98\t0\t0\t0.0266978141164692\n+0.99\t0\t0\t0.0575671616886367\n+1\t0\t0\t0.0315367929250793\n+b0002\t0\t0.000333722676455865\t0\n+b0004\t0.000500584014683798\t0.000500584014683798\t0\n+b0006\t0\t0.000166861338227933\t0\n+b0008\t0.000166861338227933\t0.00166861338227933\t0\n+b0009\t0.000166861338227933\t0\t0\n+b0011\t0\t0.000166861338227933\t0\n+b0015\t0.00233605873519106\t0.00734189888202903\t0\n+b0023\t0\t0.0121808776906391\t0\n+b0025\t0.000333722676455865\t0.000166861338227933\t0\n+b0026\t0.00116802936759553\t0\t0\n+b0027\t0.000500584014683798\t0\t0\n+b0028\t0.00266978141164692\t0\t0\n+b0029\t0.000166861338227933\t0.000166861338227933\t0\n+b0030\t0\t0.000166861338227933\t0\n+b0031\t0\t0.000834306691139663\t0\n+b0032\t0.000166861338227933\t0.000166861338227933\t0\n+b0033\t0.00066744535291173\t0.000333722676455865\t0\n+b0037\t0\t0.000166861338227933\t0\n+b0040\t0\t0.000166861338227933\t0\n+b0042\t0.000333722676455865\t0\t0\n+b0046\t0\t0.000166861338227933\t0\n+b0047\t0\t0.000166861338227933\t0\n+b0048\t0.000834306691139663\t0\t0\n+b0049\t0.00417153345569831\t0.000166861338227933\t0\n+b0053\t0.000333722676455865\t0\t0\n+b0058\t0\t0.000166861338227933\t0\n+b0059\t0.000500584014683798\t0.0010011680293676\t0\n+b0067\t0.000166861338227933\t0\t0\n+b0068\t0.00066744535291173\t0\t0\n+b0071\t0.000500584014683798\t0.000500584014683798\t0\n+b0072\t0.00133489070582346\t0\t0\n+b0074\t0.000333722676455865\t0\t0\n+b0077\t0.00066744535291173\t0.000166861338227933\t0\n+b0078\t0.000166861338227933\t0\t0\n+b0080\t0.000333722676455865\t0.000333722676455865\t0\n+b0081\t0\t0.000166861338227933\t0\n+b0082\t0.000333722676455865\t0.000166861338227933\t0\n+b0083\t0.000333722676455865\t0\t0\n+b0084\t0\t0.000166861338227933\t0\n+b0085\t0.0010011680293676\t0.000834306691139663\t0\n+b0086\t0.0010011680293676\t0.00066744535291173\t0\n+b0088\t0.000333722676455865\t0.000166861338227933\t0\n+b0089\t0.000834306691139663\t0\t0\n+b0090\t0.0010011680293676\t0.000166861338227933\t0\n+b0091\t0.00250292007341899\t0.000333722676455865\t0\n+b0094\t0.000834306691139663\t0\t0\n+b0095\t0.00133489070582346\t0.00066744535291173\t0\n+b0096\t0.000166861338227933\t0.000166861338227933\t0\n+b0098\t0.00367094944101452\t0.00550642416152178\t0\n+b0099\t0\t0.000166861338227933\t0\n+b0101\t0.000500584014683798\t0\t0\n+b0103\t0.000333722676455865\t0.000166861338227933\t0\n+b0104\t0\t0.0010011680293676\t0\n+b0109\t0.00066744535291173\t0.00066744535291173\t0\n+b0111\t0\t0.000166861338227933\t0\n+b0118\t0.0010011680293676\t0.00066744535291173\t0\n+b0119\t0.0066744535291173\t0.000500584014683798\t0\n+b0120\t0.000333722676455865\t0.000500584014683798\t0\n+b0124\t0\t0.000500584014683798\t0\n+b0125\t0.000333722676455865\t0.00066744535291173\t0\n+b0126\t0.000166861338227933\t0\t0\n+b0127\t0.00634073085266144\t0.000166861338227933\t0\n+b0130\t0\t0.000166861338227933\t0\n+b0133\t0.000333722676455865\t0.000500584014683798\t0\n+b0134\t0.00133489070582346\t0\t0\n+b0135\t0\t0.000166861338227933\t0\n+b0139\t0\t0.000333722676455865\t0\n+b0140\t0\t0.000166861338227933\t0\n+b0143\t0.00216919739696312\t0.000333722676455865\t0\n+b0144\t0.00066744535291173\t0\t0\n+b0145\t0.000834306691139663\t0.000500584014683798\t0\n+b0146\t0\t0.000166861338227933\t0\n+b0148\t0.000166861338227933\t0.000166861338227933\t0\n+b0149\t0.00066744535291173\t0.000166861338227933\t0\n+b0153\t0\t0.000166861338227933\t0\n+b0156\t0\t0.000166861338227933\t0\n+b0160\t0\t0.000166861338227933\t0\n+b0161\t0\t0.00033372267645'..b'0\n+b4141\t0\t0.000166861338227933\t0\n+b4142\t0.00150175204405139\t0.0151843817787419\t0\n+b4143\t0.000834306691139663\t0.00750876022025697\t0\n+b4147\t0\t0.000500584014683798\t0\n+b4149\t0.00634073085266144\t0\t0\n+b4152\t0\t0.000166861338227933\t0\n+b4154\t0.000333722676455865\t0.000166861338227933\t0\n+b4161\t0.00266978141164692\t0\t0\n+b4167\t0.000166861338227933\t0.00066744535291173\t0\n+b4168\t0.00183547472050726\t0.000333722676455865\t0\n+b4170\t0.000166861338227933\t0\t0\n+b4172\t0.0071750375438011\t0.00150175204405139\t0\n+b4173\t0\t0.000166861338227933\t0\n+b4174\t0.000166861338227933\t0\t0\n+b4175\t0\t0.000166861338227933\t0\n+b4177\t0.000834306691139663\t0.0010011680293676\t0\n+b4178\t0.00166861338227933\t0\t0\n+b4179\t0.00517270148506591\t0.00350408810278658\t0\n+b4180\t0.00150175204405139\t0\t0\n+b4181\t0\t0.000166861338227933\t0\n+b4183\t0\t0.000166861338227933\t0\n+b4187\t0.00266978141164692\t0.00166861338227933\t0\n+b4188\t0\t0.000166861338227933\t0\n+b4191\t0.00400467211747038\t0.000333722676455865\t0\n+b4193\t0\t0.000166861338227933\t0\n+b4200\t0\t0.00967795761722009\t0\n+b4202\t0\t0.00450525613215418\t0\n+b4203\t0\t0.0101785416319039\t0\n+b4207\t0.000500584014683798\t0\t0\n+b4209\t0.000166861338227933\t0\t0\n+b4211\t0.000333722676455865\t0.000166861338227933\t0\n+b4213\t0\t0.000166861338227933\t0\n+b4218\t0.0010011680293676\t0\t0\n+b4221\t0.000166861338227933\t0\t0\n+b4224\t0\t0.000166861338227933\t0\n+b4226\t0.00216919739696312\t0.000500584014683798\t0\n+b4228\t0\t0.000166861338227933\t0\n+b4230\t0\t0.000166861338227933\t0\n+b4233\t0\t0.000166861338227933\t0\n+b4234\t0.00250292007341899\t0.000333722676455865\t0\n+b4235\t0.000166861338227933\t0.000166861338227933\t0\n+b4237\t0\t0.000166861338227933\t0\n+b4238\t0.00066744535291173\t0.000166861338227933\t0\n+b4239\t0\t0.000166861338227933\t0\n+b4242\t0\t0.000166861338227933\t0\n+b4243\t0.00150175204405139\t0.000166861338227933\t0\n+b4248\t0.000166861338227933\t0\t0\n+b4249\t0.000166861338227933\t0\t0\n+b4252\t0.000333722676455865\t0\t0\n+b4253\t0\t0.000333722676455865\t0\n+b4255\t0.00216919739696312\t0.00333722676455865\t0\n+b4258\t0\t0.000333722676455865\t0\n+b4259\t0.00367094944101452\t0.000500584014683798\t0\n+b4260\t0.000333722676455865\t0.000166861338227933\t0\n+b4263\t0.000166861338227933\t0.000166861338227933\t0\n+b4265\t0\t0.000166861338227933\t0\n+b4267\t0.000333722676455865\t0\t0\n+b4271\t0\t0.000166861338227933\t0\n+b4280\t0\t0.000166861338227933\t0\n+b4290\t0\t0.000333722676455865\t0\n+b4298\t0\t0.000166861338227933\t0\n+b4301\t0.000500584014683798\t0\t0\n+b4306\t0.0010011680293676\t0\t0\n+b4309\t0\t0.000166861338227933\t0\n+b4310\t0.0010011680293676\t0\t0\n+b4312\t0.00183547472050726\t0.000166861338227933\t0\n+b4314\t0\t0.00233605873519106\t0\n+b4315\t0\t0.000166861338227933\t0\n+b4317\t0\t0.000166861338227933\t0\n+b4322\t0\t0.000166861338227933\t0\n+b4323\t0\t0.000166861338227933\t0\n+b4325\t0\t0.000166861338227933\t0\n+b4327\t0.00066744535291173\t0.000166861338227933\t0\n+b4335\t0.00066744535291173\t0\t0\n+b4336\t0.00133489070582346\t0.000166861338227933\t0\n+b4346\t0.000166861338227933\t0.000333722676455865\t0\n+b4348\t0.00116802936759553\t0.000166861338227933\t0\n+b4349\t0.000834306691139663\t0.0010011680293676\t0\n+b4350\t0.000333722676455865\t0.000166861338227933\t0\n+b4352\t0.000834306691139663\t0\t0\n+b4354\t0.00066744535291173\t0\t0\n+b4355\t0\t0.000166861338227933\t0\n+b4356\t0\t0.000166861338227933\t0\n+b4359\t0\t0.000166861338227933\t0\n+b4361\t0\t0.000166861338227933\t0\n+b4362\t0.000333722676455865\t0\t0\n+b4367\t0.000166861338227933\t0\t0\n+b4371\t0\t0.000166861338227933\t0\n+b4372\t0.00166861338227933\t0.000834306691139663\t0\n+b4373\t0.00266978141164692\t0\t0\n+b4375\t0.000500584014683798\t0.000166861338227933\t0\n+b4376\t0\t0.00066744535291173\t0\n+b4377\t0.00500584014683798\t0.000333722676455865\t0\n+b4378\t0.000166861338227933\t0\t0\n+b4382\t0.00066744535291173\t0.00066744535291173\t0\n+b4383\t0\t0.000166861338227933\t0\n+b4384\t0\t0.000500584014683798\t0\n+b4386\t0.000333722676455865\t0\t0\n+b4387\t0.000166861338227933\t0\t0\n+b4388\t0.00183547472050726\t0\t0\n+b4389\t0\t0.000333722676455865\t0\n+b4391\t0.000834306691139663\t0.000166861338227933\t0\n+b4393\t0\t0.000166861338227933\t0\n+b4394\t0.000333722676455865\t0\t0\n+b4396\t0.00166861338227933\t0.000166861338227933\t0\n+b4399\t0\t0.000333722676455865\t0\n+b4401\t0\t0.000333722676455865\t0\n'
b
diff -r 000000000000 -r a87a3773d8ed test-data/tabular.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/tabular.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,1 @@
+label 9 1 58 69 63 19 44 26 0.43 0.084 label1 89 19 60 64 76 42 99 6 0.66 0.029 label2 1 65 15 75 68 100 96 58 0.65 0.019 label3 59 96 87 74 17 86 43 18 0.45 0.083 label 95 5 59 87 44 5 86 55 0.92 0.018 label 45 20 56 91 4 38 37 80 0.57 0.095 label1 63 68 4 16 94 25 75 34 0.56 0.08 label2 78 45 25 25 64 71 46 44 0.47 0.003 label3 64 78 44 93 26 4 50 15 0.27 0.045 label 10 58 35 32 53 12 51 20 0.44 0.008 label1 0 42 68 100 28 89 4 53 0.9 0.05 label2 42 15 18 87 89 76 57 23 0.95 0.022 label3 85 82 25 3 30 34 32 18 0.46 0.023 label 4 74 16 56 88 98 17 18 0.15 0.033 label1 61 79 19 71 81 69 16 32 0.83 0.088 label2 8 85 0 60 68 69 51 41 0.97 0.072 label3 20 12 67 88 24 37 3 51 0.6 0.049 label 100 10 97 70 63 76 46 59 0.97 0.081 label1 30 27 61 6 77 66 69 63 0.18 0.091 label2 30 40 43 85 94 31 6 20 0.77 0.072 label3 99 63 24 14 61 84 89 58 0.73 0.054 label 39 28 80 8 78 68 74 31 0.91 0.078 label1 40 11 51 83 30 55 3 21 0.43 0.045 label2 68 18 17 9 37 55 78 37 0.82 0.045 label3 28 86 89 26 6 49 86 8 0.89 0.012 label 80 36 12 46 35 38 83 0 0.13 0.095 label 4 2 4 85 11 92 94 13 1 0.032 label1 92 100 15 51 49 36 29 99 0.08 0.003 label2 25 29 2 49 48 6 29 27 0.73 0.047 label3 64 35 20 58 93 71 67 49 0.86 0.07 label 11 32 77 16 71 29 77 48 0.59 0.056 label1 47 76 10 94 84 63 74 75 0.51 0.067 label2 71 44 77 94 6 98 63 15 0.32 0.074 label3 76 8 1 71 15 58 59 31 0 0.025 label 42 70 17 56 13 50 100 17 0.15 0.027 label1 83 82 44 39 16 53 2 86 0.93 0.098 label2 87 71 54 84 39 29 87 47 0.68 0.1 label3 74 34 42 80 98 90 51 2 0.07 0.053 label 45 74 4 9 52 48 57 72 0.44 0.047 label1 15 70 25 35 67 50 12 18 0.24 0.1 label2 10 50 78 30 14 4 47 15 0.63 0.094 label 28 17 1 13 30 24 31 88 0.1 0.042 label1 95 45 39 61 31 82 41 31 0.55 0.095 label2 83 99 71 41 18 59 24 53 0.13 0.001 label3 21 47 38 42 89 99 86 89 0.48 0.1 label 24 16 70 69 16 37 10 54 0.14 0.038 label 51 98 30 14 53 96 18 17 0.36 0.081 label1 7 62 51 21 36 82 49 41 0.42 0.016 label2 37 33 38 32 28 84 7 18 0.51 0.036 label3 54 9 90 90 35 5 88 79 0.63 0.031 label 0 73 100 89 39 4 50 61 0.15 0.051 label1 57 80 46 95 54 54 42 21 0.98 0.054 label2 27 99 90 32 99 85 21 25 0.45 0.024 label3 71 86 22 16 23 7 89 64 0.18 0.014 label 91 78 43 11 80 5 25 56 0.21 0.068 label1 25 56 13 28 77 51 33 64 0.68 0.009 label2 97 100 51 97 20 30 47 99 0.13 0.086 label3 49 54 95 98 2 79 74 37 0.15 0.037 label 54 92 12 71 69 21 72 37 0.21 0.03 label1 82 7 100 89 79 95 68 47 0.86 0.078 label2 17 96 36 20 41 99 56 67 1 0.074 label 51 6 69 91 92 77 81 59 0.29 0.076 label1 0 8 31 69 72 9 48 96 0.05 0.006 label2 74 48 48 16 27 47 0 30 0.31 0.061 label3 23 39 19 55 79 36 67 96 0.59 0.079 label 94 50 38 13 69 45 81 97 0.2 0.005 label 98 26 18 51 66 89 48 99 0.92 0.006 label1 93 58 3 70 10 5 17 59 0.53 0.034 label2 71 8 26 92 9 30 77 60 0.19 0.013 label3 39 14 17 83 49 0 14 89 0.26 0.029 label 58 92 96 88 10 90 73 74 0.71 0.018 label1 70 4 49 97 1 97 40 42 0.07 0.064 label2 22 51 7 34 56 21 56 75 0.91 0.054 label3 76 30 18 71 16 7 46 22 0.7 0.087 label 66 22 91 98 88 97 41 3 0.05 0.093 label1 64 20 9 34 35 8 2 3 0.17 0.009 label2 63 97 58 35 86 76 83 32 0.63 0.067 label3 11 27 93 98 75 37 21 43 0.37 0.09 label 59 35 84 10 66 67 70 4 0.47 0.063 label1 31 4 32 93 56 37 31 97 0.61 0.06 label2 34 83 45 69 21 52 80 21 0.55 0.099 label3 89 63 20 37 60 80 79 99 0.97 0.081 label 4 90 58 47 7 54 4 67 0.86 0.067 label 2 41 55 22 76 48 1 85 0.88 0.007 label1 36 41 9 100 15 96 29 26 0.42 0.09 label2 0 60 63 12 33 10 69 53 0.34 0.087 label3 24 63 60 33 15 20 48 27 0.5 0.012 label 66 22 73 81 58 20 95 12 0.56 0.051 label1 62 35 18 68 32 61 84 45 0.39 0.098 label2 41 52 4 93 98 90 90 56 0.2 0 label3 97 52 6 8 74 53 3 60 0.95 0.018 label 8 17 98 72 66 88 52 29 0.89 0.05 label1 24 9 6 45 31 10 51 74 0.22 0.034 label2 25 3 11 67 25 67 6 22 0.91 0.097 label3 79 89 95 54 79 74 75 95 0.56 0.04 label 95 14 86 43 56 11 53 77 0.97 0.013 label1 60 68 85 62 4 71 95 0 0.64 0.015 label2 24 49 85 68 14 48 90 85 0.08 0.073 label 19 90 15 1 53 51 1 39 0.19 0.001 label 94 68 86 69 88 96 85 76 0.19 0.047
\ No newline at end of file
b
diff -r 000000000000 -r a87a3773d8ed test-data/tabular_matrix.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/tabular_matrix.txt Fri Mar 09 08:23:08 2018 -0500
b
b'@@ -0,0 +1,5993 @@\n+b3396\tb2609\t0.75\n+b4149\tb3636\t0.76\n+b4149\tb3301\t0.76\n+b2696\tb3701\t1.00\n+b4149\tb1779\t0.76\n+b1279\tb1779\t0.76\n+b1686\tb3349\t0.76\n+b0877\tb3312\t0.76\n+b0877\tb3636\t0.76\n+b0386\tb2609\t0.75\n+b1279\tb4202\t0.76\n+b0386\tb3983\t0.76\n+b0386\tb3307\t0.76\n+b0386\tb3985\t0.76\n+b0386\tb3308\t0.77\n+b0386\tb4255\t0.77\n+b4226\tb4255\t0.75\n+b0127\tb3306\t0.76\n+b0386\tb1779\t0.78\n+b0678\tb3308\t0.85\n+b4226\tb4143\t0.76\n+b4191\tb3186\t0.75\n+b0394\tb4203\t0.75\n+b0394\tb3984\t0.75\n+b3396\tb3313\t0.76\n+b0394\tb3304\t0.76\n+b0394\tb3301\t0.76\n+b0394\tb2779\t0.76\n+b3071\tb3340\t0.77\n+b0184\tb0911\t0.76\n+b0678\tb3305\t0.86\n+b1014\tb3294\t0.76\n+b0954\tb4202\t0.75\n+b0954\tb3186\t0.75\n+b0954\tb3314\t0.75\n+b3396\tb4000\t0.75\n+b0954\tb0903\t0.76\n+b0954\tb3983\t0.76\n+b0954\tb1779\t0.76\n+b0710\tb0178\t0.76\n+b0660\tb3636\t0.76\n+b0049\tb2606\t0.75\n+b0049\tb3307\t0.75\n+b0200\tb3637\t0.75\n+b3396\tb3984\t0.75\n+b0049\tb3985\t0.76\n+b0049\tb3306\t0.76\n+b0049\tb1779\t0.76\n+b4377\tb3230\t0.76\n+b1452\tb2231\t0.77\n+b0954\tb1493\t0.76\n+b4377\tb1493\t0.76\n+b4149\tb1493\t0.76\n+b2000\tb1493\t0.76\n+b2000\tb4142\t0.76\n+b0127\tb3230\t0.77\n+b2922\tb3637\t0.75\n+b0728\tb4203\t0.75\n+b1493\tb0127\t0.78\n+b0386\tb1493\t0.78\n+b0728\tb4202\t0.76\n+b2672\tb4255\t0.77\n+b0728\tb3316\t0.77\n+b0119\tb3349\t0.76\n+b1872\tb2779\t0.76\n+b3245\tb3316\t0.75\n+b1872\tb1237\t0.77\n+b0171\tb3301\t0.76\n+b1653\tb1493\t0.83\n+b0184\tb3701\t0.93\n+b3245\tb2579\t0.76\n+b1653\tb3308\t0.88\n+b3006\tb3637\t0.75\n+b1215\tb3307\t0.75\n+b0954\tb3317\t0.93\n+b0710\tb3813\t0.78\n+b3396\tb3983\t0.76\n+b1094\tb3298\t0.76\n+b0954\tb3298\t0.94\n+b0127\tb2779\t0.76\n+b2032\tb2609\t0.75\n+b0453\tb2606\t0.75\n+b0453\tb3307\t0.75\n+b3702\tb3313\t0.75\n+b3702\tb0023\t0.75\n+b0453\tb3313\t0.76\n+b0453\tb1493\t0.76\n+b4161\tb4142\t0.75\n+b3396\tb2606\t0.75\n+b0127\tb0023\t0.76\n+b1279\tb2609\t0.75\n+b1776\tb1779\t0.75\n+b4191\tb3342\t0.76\n+b0127\tb3342\t0.76\n+b0200\tb3342\t0.76\n+b1919\tb3342\t0.76\n+b4161\tb1779\t0.76\n+b0214\tb3230\t0.76\n+b0678\tb2890\t0.75\n+b1279\tb3313\t0.76\n+b0720\tb4255\t0.76\n+b1279\tb2779\t0.76\n+b1279\tb2579\t0.77\n+b1776\tb2779\t0.76\n+b4149\tb3313\t0.76\n+b0119\tb0720\t0.77\n+b3704\tb3312\t0.76\n+b3396\tb3298\t0.76\n+b0127\tb3313\t0.76\n+b4149\tb2779\t0.76\n+b3687\tb0903\t0.92\n+b4143\tb2614\t0.79\n+b1215\tb3308\t0.76\n+b1913\tb3637\t0.75\n+b0877\tb3637\t0.75\n+b1094\tb0185\t0.76\n+b2517\tb2890\t0.80\n+b3396\tb3316\t0.76\n+b2294\tb3312\t0.76\n+b1686\tb3312\t0.76\n+b4161\tb4143\t0.82\n+b3396\tb3296\t0.76\n+b3396\tb3301\t0.76\n+b0127\tb4142\t0.76\n+b4377\tb0023\t0.75\n+b3396\tb4142\t0.75\n+b4149\tb4142\t0.75\n+b2032\tb3313\t0.76\n+b1913\tb3316\t0.77\n+b4149\tb3305\t0.76\n+b2696\tb3312\t0.77\n+b0119\tb0607\t0.77\n+b3006\tb0911\t0.99\n+b0091\tb4203\t0.75\n+b2351\tb0911\t0.76\n+b2351\tb3306\t0.76\n+b1719\tb3298\t0.76\n+b2032\tb2779\t0.76\n+b1207\tb4143\t0.94\n+b0091\tb2579\t0.76\n+b0091\tb3985\t0.76\n+b4377\tb3304\t0.76\n+b1719\tb2606\t0.77\n+b0414\tb4143\t0.85\n+b0962\tb1779\t0.76\n+b3396\tb3304\t0.76\n+b4234\tb3313\t0.76\n+b0962\tb1493\t0.78\n+b0962\tb2926\t0.78\n+b0962\tb3168\t0.78\n+b1827\tb1712\t0.77\n+b4312\tb3186\t0.75\n+b4312\tb3231\t0.75\n+b4312\tb2606\t0.75\n+b4312\tb3309\t0.75\n+b4312\tb2609\t0.75\n+b4312\tb4200\t0.75\n+b2450\tb2231\t0.77\n+b2450\tb0185\t0.77\n+b2032\tb3305\t0.76\n+b3006\tb2779\t0.76\n+b0678\tb3340\t0.93\n+b4312\tb4202\t0.76\n+b4312\tb3306\t0.76\n+b0710\tb3349\t0.77\n+b0127\tb4202\t0.76\n+b3463\tb4143\t0.97\n+b0710\tb3984\t0.76\n+b0386\tb3306\t0.76\n+b2450\tb3297\t0.77\n+b3396\tb3297\t0.77\n+b0386\tb2779\t0.77\n+b3396\tb2779\t0.91\n+b1913\tb3306\t0.76\n+b3396\tb4203\t0.82\n+b2249\tb2316\t0.76\n+b0394\tb3298\t0.76\n+b0394\tb3312\t0.76\n+b4191\tb2606\t0.79\n+b0453\tb3732\t0.77\n+b1014\tb3637\t0.75\n+b0394\tb0023\t0.75\n+b3006\tb2609\t0.75\n+b4191\tb3316\t0.77\n+b0180\tb3316\t0.75\n+b0180\tb3637\t0.75\n+b0386\tb4000\t0.76\n+b4191\tb0023\t0.76\n+b0962\tb3732\t0.78\n+b1014\tb3313\t0.76\n+b1539\tb4255\t0.75\n+b1014\tb2579\t0.76\n+b3396\tb3317\t0.76\n+b3699\tb3030\t0.80\n+b1014\tb3304\t0.77\n+b2584\tb3313\t0.76\n+b3006\tb3307\t0.75\n+b3522\tb2779\t0.76\n+b3522\tb2579\t0.76\n+b0678\tb0903\t0.95\n+b3396\tb0911\t0.76\n+b0171\tb4143\t0.85\n+b0623\tb3701\t0.99\n+b1686\tb2050\t0.75\n+b2584\tb3294\t0.77\n+b2584\tb3301\t0.77\n+b0962\tb4143\t0.87\n+b0736\tb0023\t0.75\n+b2890\tb4129\t0.99\n+b0386\tb3980\t0.84\n+b1209\tb3349\t0.77\n+b0854\tb3340\t0.94\n+b0854\tb0903\t0.94\n+b0954\tb4200\t0.75\n+b3560\tb3186\t0.75\n+b3560\tb2609\t0.75\n+b3522\tb2050\t0.76\n+b1539\tb2050\t0.76\n+b0736\tb3313\t0.76\n+b0736\tb4202\t0.76\n+b0954\tb4000\t0.75\n+b'..b'87\n+b0780\tb4265\t0.87\n+b0239\tb0195\t0.87\n+b0088\tb3393\t0.87\n+b4079\tb3162\t0.77\n+b1475\tb3894\t0.76\n+b2830\tb1269\t0.95\n+b0214\tb2011\t0.78\n+b1269\tb1086\t1.00\n+b0470\tb4290\t0.79\n+b2728\tb2721\t0.99\n+b1832\tb3781\t0.80\n+b2700\tb1687\t0.80\n+b4097\tb4098\t0.85\n+b1667\tb3701\t0.89\n+b1784\tb1188\t0.89\n+b3807\tb3701\t0.89\n+b1718\tb0011\t0.89\n+b3465\tb3980\t0.89\n+b1279\tb3233\t0.89\n+b0215\tb4290\t0.82\n+b1269\tb3499\t1.00\n+b1285\tb3237\t0.81\n+b3011\tb0733\t0.90\n+b1746\tb2831\t0.90\n+b2717\tb0225\t0.90\n+b1589\tb1503\t0.90\n+b4349\tb0212\t0.90\n+b0352\tb0351\t0.90\n+b3190\tb2875\t0.90\n+b1955\tb3244\t0.90\n+b0197\tb0325\t0.90\n+b3452\tb3450\t0.90\n+b3058\tb3073\t0.90\n+b4267\tb1917\t0.90\n+b3856\tb0785\t0.90\n+b0454\tb1531\t0.90\n+b1683\tb1681\t1.00\n+b1250\tb2528\t0.91\n+b1887\tb3030\t0.91\n+b1285\tb4235\t1.00\n+b1086\tb1135\t0.84\n+b1269\tb1135\t0.80\n+b1687\tb1539\t0.86\n+b1432\tb3314\t0.92\n+b0525\tb2803\t0.92\n+b0461\tb0558\t0.92\n+b3400\tb1639\t0.92\n+b2881\tb2880\t0.92\n+b0078\tb3712\t0.92\n+b1651\tb3476\t0.92\n+b4135\tb0812\t0.88\n+b2878\tb1725\t0.91\n+b3802\tb3749\t0.93\n+b4394\tb3885\t0.93\n+b2827\tb1719\t0.93\n+b0886\tb0887\t0.93\n+b4235\tb3237\t0.88\n+b0959\tb1120\t0.87\n+b1466\tb1225\t0.98\n+b3251\tb4035\t0.81\n+b2763\tb0947\t0.99\n+b3197\tb1908\t0.94\n+b3149\tb0498\t0.94\n+b0197\tb0046\t0.94\n+b0009\tb2231\t0.94\n+b0197\tb0987\t0.94\n+b4349\tb3843\t0.94\n+b1155\tb2354\t0.94\n+b0891\tb2809\t0.94\n+b4059\tb3935\t0.94\n+b3781\tb3701\t0.91\n+b3802\tb4098\t0.96\n+b0174\tb1866\t0.95\n+b1882\tb3030\t0.95\n+b2887\tb0099\t0.95\n+b3345\tb3440\t0.95\n+b4248\tb2297\t0.95\n+b1654\tb0435\t0.95\n+b0885\tb2042\t0.95\n+b1171\tb0932\t0.95\n+b0585\tb0606\t0.95\n+b4059\tb2011\t0.99\n+b2730\tb0812\t0.91\n+b2068\tb4117\t0.96\n+b0785\tb0784\t0.96\n+b2016\tb3222\t0.96\n+b1318\tb0148\t0.96\n+b2607\tb0184\t0.78\n+b3891\tb3894\t0.95\n+b2607\tb4372\t0.85\n+b1182\tb2042\t0.97\n+b1685\tb3620\t0.97\n+b3003\tb3701\t0.97\n+b3052\tb1725\t0.99\n+b2892\tb2011\t0.93\n+b2729\tb2730\t0.95\n+b0827\tb3916\t0.98\n+b2055\tb1792\t0.98\n+b2607\tb4259\t0.94\n+b0923\tb0922\t0.99\n+b0924\tb0922\t0.99\n+b2607\tb0215\t0.96\n+b2324\tb2384\t0.99\n+b0209\tb4142\t0.99\n+b0186\tb4131\t0.99\n+b1002\tb0759\t0.99\n+b4052\tb4361\t0.99\n+b1282\tb1374\t0.99\n+b0866\tb3619\t0.99\n+b1495\tb1414\t0.99\n+b0252\tb4142\t0.99\n+b3203\tb3701\t0.99\n+b2907\tb3619\t0.99\n+b2607\tb1099\t0.99\n+b2249\tb1236\t0.99\n+b2042\tb1236\t0.99\n+b2990\tb2730\t1.00\n+b2260\tb2265\t1.00\n+b1279\tb3803\t1.00\n+b3461\tb4051\t1.00\n+b2831\tb0226\t1.00\n+b3845\tb1275\t1.00\n+b3158\tb3159\t1.00\n+b1547\tb1192\t1.00\n+b1518\tb1327\t1.00\n+b0959\tb1207\t1.00\n+b4352\tb3986\t0.75\n+b0965\tb3986\t0.75\n+b1226\tb3986\t0.75\n+b4301\tb3986\t0.75\n+b2728\tb3986\t0.75\n+b4372\tb3986\t0.75\n+b3064\tb3986\t0.75\n+b0660\tb3986\t0.75\n+b3998\tb3986\t0.76\n+b1914\tb3986\t0.75\n+b0784\tb3986\t0.75\n+b1941\tb3986\t0.75\n+b3318\tb3986\t0.82\n+b3538\tb3986\t0.75\n+b1084\tb3986\t0.76\n+b3704\tb3986\t0.75\n+b1858\tb3986\t0.75\n+b4388\tb3986\t0.75\n+b2627\tb3986\t0.75\n+b0184\tb3986\t0.75\n+b2742\tb3986\t0.75\n+b4161\tb3986\t0.75\n+b1773\tb3986\t0.75\n+b4168\tb3986\t0.75\n+b3649\tb3986\t0.76\n+b1086\tb3986\t0.76\n+b3183\tb3986\t0.75\n+b0215\tb3986\t0.75\n+b4259\tb3986\t0.75\n+b0543\tb3986\t0.75\n+b3019\tb3986\t0.75\n+b2585\tb3986\t0.75\n+b3982\tb3986\t0.78\n+b2804\tb3986\t0.75\n+b2517\tb3986\t0.75\n+b3178\tb3986\t0.76\n+b0892\tb3986\t0.75\n+b3702\tb3986\t0.75\n+b1842\tb3986\t0.76\n+b1055\tb3986\t0.75\n+b3650\tb3986\t0.75\n+b1094\tb3986\t0.76\n+b0098\tb3986\t0.77\n+b1557\tb3986\t0.75\n+b1215\tb3986\t0.75\n+b0068\tb3986\t0.75\n+b1163\tb3986\t0.75\n+b1872\tb3986\t0.75\n+b3965\tb3986\t0.75\n+b0413\tb3986\t0.75\n+b3590\tb3986\t0.76\n+b2994\tb3986\t0.75\n+b3005\tb3986\t0.75\n+b1809\tb3986\t0.75\n+b0127\tb3986\t0.75\n+b3556\tb3986\t0.75\n+b3018\tb3986\t0.75\n+b2888\tb3986\t0.75\n+b0882\tb3986\t0.75\n+b0481\tb3986\t0.75\n+b1322\tb3986\t0.75\n+b3470\tb3986\t0.75\n+b4090\tb3986\t0.75\n+b0148\tb3986\t0.75\n+b3462\tb3986\t0.75\n+b0607\tb3986\t0.76\n+b4172\tb3986\t0.77\n+b3439\tb3986\t0.75\n+b4059\tb3986\t0.77\n+b3067\tb3986\t0.76\n+b0962\tb3986\t0.75\n+b0891\tb3986\t0.75\n+b3071\tb3986\t0.75\n+b2520\tb3986\t0.75\n+b3987\tb3986\t0.76\n+b3295\tb3986\t0.77\n+b1435\tb3986\t0.75\n+b3180\tb3986\t0.77\n+b3195\tb3986\t0.75\n+b1279\tb3986\t0.75\n+b3931\tb3986\t0.75\n+b3888\tb3986\t0.75\n+b2319\tb3986\t0.75\n+b2155\tb3986\t0.75\n+b0406\tb3986\t0.75\n+b1098\tb3986\t0.75\n+b4191\tb3986\t0.75\n+b0144\tb3986\t0.75\n+b4350\tb3986\t0.75\n+b2865\tb3986\t0.75\n+b0454\tb3986\t0.75\n+b3481\tb3986\t0.75\n+b3461\tb3986\t0.75\n+b0877\tb3986\t0.75\n+b0544\tb3986\t0.75\n+b0924\tb3986\t0.75\n'
b
diff -r 000000000000 -r a87a3773d8ed test-data/tabular_single.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/tabular_single.txt Fri Mar 09 08:23:08 2018 -0500
b
b'@@ -0,0 +1,40035 @@\n+11\n+3\n+13\n+5\n+5\n+9\n+5\n+5\n+11\n+7\n+11\n+11\n+11\n+11\n+6\n+11\n+11\n+3\n+3\n+3\n+22\n+8\n+14\n+27\n+14\n+19\n+9\n+15\n+20\n+6\n+6\n+0\n+0\n+11\n+8\n+11\n+10\n+8\n+5\n+12\n+12\n+3\n+12\n+6\n+6\n+12\n+8\n+8\n+10\n+12\n+20\n+6\n+20\n+21\n+21\n+52\n+17\n+7\n+3\n+35\n+19\n+35\n+12\n+12\n+9\n+16\n+9\n+10\n+7\n+9\n+9\n+2\n+26\n+15\n+12\n+7\n+26\n+2\n+12\n+6\n+14\n+4\n+26\n+27\n+3\n+7\n+2\n+12\n+13\n+15\n+24\n+8\n+12\n+10\n+4\n+4\n+3\n+16\n+2\n+3\n+9\n+9\n+16\n+9\n+8\n+8\n+8\n+4\n+6\n+6\n+8\n+5\n+6\n+6\n+6\n+21\n+4\n+16\n+2\n+108\n+0\n+2\n+21\n+9\n+0\n+2\n+66\n+186\n+9\n+11\n+11\n+11\n+11\n+11\n+11\n+11\n+9\n+11\n+3\n+3\n+28\n+28\n+28\n+5\n+1\n+19\n+1\n+19\n+1\n+3\n+5\n+13\n+1\n+13\n+18\n+4\n+4\n+13\n+13\n+5\n+5\n+2\n+5\n+9\n+14\n+4\n+4\n+14\n+22\n+2\n+2\n+4\n+10\n+9\n+9\n+7\n+10\n+0\n+5\n+5\n+3\n+6\n+5\n+5\n+9\n+9\n+8\n+8\n+6\n+8\n+8\n+19\n+2\n+7\n+16\n+12\n+8\n+12\n+12\n+12\n+11\n+8\n+19\n+20\n+8\n+1\n+8\n+13\n+13\n+13\n+13\n+8\n+13\n+10\n+13\n+13\n+13\n+4\n+0\n+13\n+3\n+7\n+1\n+1\n+1\n+2\n+5\n+5\n+5\n+12\n+18\n+13\n+14\n+14\n+13\n+13\n+8\n+9\n+12\n+4\n+10\n+11\n+11\n+13\n+8\n+8\n+8\n+2\n+8\n+8\n+7\n+8\n+29\n+1\n+29\n+19\n+4\n+15\n+9\n+26\n+15\n+19\n+4\n+14\n+4\n+12\n+2\n+13\n+16\n+14\n+31\n+1\n+1\n+3\n+14\n+14\n+31\n+3\n+1\n+1\n+1\n+1\n+11\n+29\n+7\n+21\n+7\n+11\n+9\n+11\n+17\n+11\n+0\n+3\n+3\n+3\n+6\n+3\n+2\n+10\n+17\n+2\n+14\n+25\n+3\n+43\n+25\n+6\n+6\n+8\n+25\n+24\n+7\n+7\n+12\n+20\n+7\n+15\n+15\n+20\n+20\n+7\n+6\n+6\n+7\n+3\n+7\n+7\n+22\n+22\n+8\n+5\n+5\n+8\n+1\n+12\n+1\n+1\n+2\n+9\n+1\n+9\n+1\n+1\n+1\n+1\n+1\n+2\n+11\n+2\n+12\n+7\n+6\n+12\n+2\n+2\n+1\n+10\n+11\n+11\n+11\n+11\n+8\n+7\n+9\n+9\n+11\n+10\n+8\n+3\n+3\n+10\n+6\n+6\n+3\n+10\n+3\n+15\n+2\n+1\n+1\n+20\n+4\n+21\n+0\n+14\n+2\n+14\n+14\n+1\n+6\n+5\n+6\n+6\n+9\n+6\n+6\n+13\n+2\n+13\n+2\n+10\n+13\n+13\n+11\n+11\n+14\n+14\n+17\n+4\n+12\n+12\n+15\n+1\n+1\n+3\n+4\n+12\n+1\n+4\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+6\n+7\n+6\n+6\n+6\n+6\n+6\n+3\n+4\n+5\n+5\n+7\n+5\n+7\n+13\n+7\n+7\n+8\n+16\n+13\n+10\n+6\n+6\n+8\n+8\n+0\n+3\n+3\n+3\n+5\n+5\n+9\n+8\n+5\n+13\n+13\n+3\n+15\n+15\n+9\n+13\n+15\n+13\n+14\n+7\n+13\n+6\n+13\n+7\n+13\n+2\n+2\n+7\n+7\n+5\n+8\n+8\n+7\n+7\n+2\n+5\n+6\n+15\n+15\n+15\n+8\n+12\n+2\n+3\n+3\n+3\n+3\n+6\n+4\n+3\n+13\n+5\n+4\n+4\n+18\n+18\n+18\n+18\n+9\n+8\n+4\n+8\n+11\n+11\n+13\n+6\n+17\n+17\n+17\n+7\n+7\n+21\n+23\n+25\n+5\n+14\n+2\n+3\n+6\n+3\n+14\n+14\n+14\n+4\n+6\n+4\n+9\n+6\n+9\n+5\n+6\n+5\n+7\n+7\n+7\n+5\n+2\n+4\n+8\n+8\n+9\n+7\n+2\n+7\n+11\n+4\n+7\n+12\n+7\n+4\n+6\n+4\n+7\n+6\n+16\n+19\n+3\n+20\n+9\n+17\n+5\n+14\n+14\n+15\n+15\n+15\n+4\n+3\n+10\n+1\n+2\n+1\n+2\n+3\n+1\n+2\n+3\n+0\n+12\n+8\n+4\n+9\n+2\n+12\n+14\n+8\n+3\n+8\n+6\n+12\n+12\n+10\n+9\n+6\n+6\n+14\n+6\n+12\n+8\n+5\n+10\n+5\n+4\n+4\n+4\n+5\n+5\n+5\n+9\n+11\n+2\n+8\n+2\n+2\n+5\n+6\n+5\n+6\n+4\n+5\n+4\n+5\n+4\n+5\n+6\n+6\n+4\n+4\n+4\n+4\n+5\n+7\n+7\n+7\n+7\n+2\n+6\n+1\n+9\n+7\n+9\n+7\n+6\n+7\n+9\n+7\n+1\n+1\n+7\n+1\n+5\n+7\n+5\n+7\n+6\n+9\n+6\n+6\n+6\n+6\n+6\n+6\n+9\n+3\n+9\n+5\n+3\n+17\n+17\n+5\n+2\n+2\n+1\n+4\n+4\n+2\n+1\n+1\n+5\n+6\n+23\n+2\n+6\n+1\n+1\n+12\n+1\n+1\n+3\n+3\n+2\n+8\n+8\n+2\n+2\n+8\n+1\n+1\n+31\n+24\n+7\n+31\n+9\n+42\n+10\n+8\n+6\n+6\n+9\n+22\n+3\n+3\n+3\n+0\n+7\n+3\n+8\n+0\n+0\n+0\n+0\n+0\n+6\n+5\n+5\n+8\n+9\n+3\n+2\n+8\n+5\n+6\n+4\n+4\n+2\n+2\n+5\n+3\n+8\n+15\n+15\n+4\n+3\n+15\n+15\n+5\n+11\n+3\n+9\n+5\n+5\n+12\n+12\n+12\n+5\n+5\n+3\n+9\n+5\n+9\n+6\n+5\n+10\n+14\n+7\n+12\n+7\n+14\n+3\n+12\n+12\n+9\n+3\n+3\n+2\n+2\n+3\n+2\n+2\n+3\n+6\n+6\n+5\n+3\n+3\n+23\n+2\n+3\n+23\n+2\n+2\n+2\n+2\n+2\n+9\n+9\n+16\n+2\n+3\n+2\n+11\n+3\n+3\n+2\n+2\n+3\n+10\n+2\n+14\n+19\n+2\n+2\n+11\n+2\n+19\n+16\n+4\n+1\n+5\n+16\n+16\n+16\n+4\n+4\n+9\n+2\n+2\n+7\n+7\n+12\n+10\n+12\n+0\n+12\n+2\n+7\n+7\n+3\n+2\n+6\n+10\n+18\n+3\n+5\n+4\n+8\n+5\n+10\n+9\n+2\n+13\n+5\n+13\n+9\n+10\n+10\n+10\n+10\n+10\n+4\n+4\n+9\n+5\n+6\n+5\n+7\n+4\n+4\n+5\n+7\n+6\n+20\n+18\n+4\n+4\n+18\n+4\n+4\n+9\n+9\n+9\n+15\n+5\n+8\n+8\n+8\n+1\n+1\n+9\n+8\n+8\n+8\n+8\n+8\n+8\n+6\n+1\n+3\n+1\n+11\n+2\n+2\n+2\n+2\n+2\n+2\n+4\n+4\n+4\n+9\n+6\n+6\n+6\n+5\n+6\n+3\n+3\n+4\n+6\n+6\n+14\n+3\n+4\n+2\n+11\n+5\n+14\n+6\n+13\n+15\n+25\n+6\n+19\n+8\n+15\n+8\n+3\n+7\n+20\n+25\n+20\n+7\n+10\n+18\n+14\n+5\n+20\n+14\n+1\n+8\n+19\n+38\n+1\n+5\n+5\n+1\n+8\n+38\n+38\n+19\n+1\n+1\n+9\n+7\n+1\n+0\n+9\n+2\n+9\n+9\n+18\n+7\n+2\n+7\n+7\n+7\n+2\n+7\n+9\n+9\n+10\n+15\n+8\n+8\n+8\n+8\n+10\n+10\n+10\n+10\n+10\n+10\n+10\n+7\n+4\n+6\n+2\n+9\n+2\n+3\n+3\n+0\n+3\n+3\n+3\n+3\n+0\n+8\n+3\n+10\n+7\n+5\n+2\n+7\n+7\n+7\n+1\n+4\n+4\n+6\n+12\n+1\n+4\n+5\n+11\n+11\n+2\n+3\n+15\n+3\n+5\n+15\n+3\n+30\n+8\n+11\n+30\n+9\n+8\n+16\n+18\n+1\n+18\n+3\n+13\n+0\n+6\n+8\n+3\n+8\n+11\n+11\n+4\n+11\n+15\n+5\n+15\n+5\n+5\n+7\n+15\n+5\n+10\n+11\n+5\n+10\n+5\n+9\n+15\n+5\n+11\n+11\n+7\n+21\n+4\n+6\n+2\n+21\n+8\n+9\n+10\n+2\n+10\n+2\n+18\n+2\n+1\n+13\n+6\n+10\n+1\n+11\n+10\n+10\n+10\n+14\n+9\n+12\n+3\n+5\n+6\n+3\n+3\n+28\n+12\n+28\n+12\n+12\n+30\n+12\n+3\n+1\n+5\n+3\n+10\n+1\n+1\n+2\n+15\n+6\n+4\n+2\n+1\n+3\n+1\n+5\n+4\n+4\n+7\n+1\n+3\n+5\n+4\n+4\n+7\n+7\n+7\n+4\n+7\n+0\n+1\n+1\n+1\n+0\n+0\n+0\n+1\n+3\n+2\n+1\n+4\n+7\n+2\n+3\n+3\n+2\n+1\n+21\n+10\n+10\n+5\n+3\n+0\n+2\n+2\n+2\n+1\n+3\n+6\n+3\n+6\n+1\n+7\n+3\n+8\n+6\n+8\n+5\n+8\n+6\n+'..b'+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n+0\n'
b
diff -r 000000000000 -r a87a3773d8ed test-data/tabular_small.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/tabular_small.txt Fri Mar 09 08:23:08 2018 -0500
b
@@ -0,0 +1,1 @@
+label1 labela 43 14 75 95 85 57 62 80 94 57 label2 labela 33 100 32 20 17 50 24 85 0 33 label3 labela 5 60 46 54 34 89 44 43 54 86 label4 labela 35 73 40 58 21 23 38 45 1 2 label5 labele 45 3 36 35 5 15 49 20 80 31 label6 labelf 6 84 89 72 30 79 45 23 20 59 label7 labelg 26 36 69 84 38 14 11 33 23 1 label1 labelh 100 83 27 46 14 1 34 29 25 35 label9 labeli 53 28 22 95 65 45 47 38 18 55 label10 labelj 6 72 25 56 75 64 79 88 67 29 label1 labelk 78 12 98 12 7 5 83 29 22 50 label12 labell 18 37 77 86 37 80 71 77 12 40 label13 labelm 79 51 54 82 1 84 85 10 53 10 label14 labeln 97 98 63 57 6 52 68 17 78 86
\ No newline at end of file