summaryrefslogtreecommitdiff
path: root/dma
diff options
context:
space:
mode:
Diffstat (limited to 'dma')
-rw-r--r--dma/.gitignore4
-rw-r--r--dma/Makefile38
-rwxr-xr-xdma/analyze_bw.py345
-rwxr-xr-xdma/analyze_time.py332
-rw-r--r--dma/bw_VANILLA.csv1348
-rw-r--r--dma/bw_all.CSV4
-rwxr-xr-xdma/combine.py169
-rwxr-xr-xdma/doca_dma_host_recvbin0 -> 30544 bytes
-rw-r--r--dma/host_recv.c251
-rwxr-xr-xdma/run.sh219
-rwxr-xr-xdma/sum.sh22
-rw-r--r--dma/times_VANILLA.csv1348
-rw-r--r--dma/times_all.CSV1348
13 files changed, 5428 insertions, 0 deletions
diff --git a/dma/.gitignore b/dma/.gitignore
new file mode 100644
index 0000000..5d94054
--- /dev/null
+++ b/dma/.gitignore
@@ -0,0 +1,4 @@
+bins/
+logs/
+summary/
+*.png
diff --git a/dma/Makefile b/dma/Makefile
new file mode 100644
index 0000000..7400791
--- /dev/null
+++ b/dma/Makefile
@@ -0,0 +1,38 @@
+CC ?= gcc
+
+TARGET := doca_dma_host_recv
+SRCS := host_recv.c
+
+CFLAGS += -O2 -g -Wall -Wextra -std=gnu11
+CFLAGS += -Wno-deprecated-declarations
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+
+# Prefer pkg-config from the upgraded DOCA installation.
+PKGCONFIG_PKGS := doca-common doca-dma
+
+PKG_CFLAGS := $(shell pkg-config --cflags $(PKGCONFIG_PKGS) 2>/dev/null)
+PKG_LIBS := $(shell pkg-config --libs $(PKGCONFIG_PKGS) 2>/dev/null)
+
+# Fallback for common DOCA 2.9 host install paths.
+ifeq ($(strip $(PKG_CFLAGS)),)
+CFLAGS += -I/opt/mellanox/doca/include
+else
+CFLAGS += $(PKG_CFLAGS)
+endif
+
+ifeq ($(strip $(PKG_LIBS)),)
+LDFLAGS += -L/opt/mellanox/doca/lib/x86_64-linux-gnu
+LDLIBS += -ldoca_dma -ldoca_common
+else
+LDLIBS += $(PKG_LIBS)
+endif
+
+LDLIBS += -lpthread -lrt
+
+all: $(TARGET)
+
+$(TARGET): $(SRCS)
+ $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS)
+
+clean:
+ rm -f $(TARGET) descriptor.bin buffer.json
diff --git a/dma/analyze_bw.py b/dma/analyze_bw.py
new file mode 100755
index 0000000..e4fab84
--- /dev/null
+++ b/dma/analyze_bw.py
@@ -0,0 +1,345 @@
+#!/usr/bin/env python3
+
+import argparse
+import csv
+import sys
+from collections import defaultdict
+from pathlib import Path
+
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+KIBPS_TO_UNIT = {
+ "KiBps": 1.0,
+ "MiBps": 1.0 / 1024.0,
+ "GiBps": 1.0 / (1024.0 * 1024.0),
+}
+
+
+UNIT_DISPLAY = {
+ "KiBps": "KiB/s",
+ "MiBps": "MiB/s",
+ "GiBps": "GiB/s",
+}
+
+
+def format_bytes(n) -> str:
+ """
+ Format size using the largest readable unit.
+
+ Examples:
+ 246132K -> 246M
+ 2097148K -> 2.0G
+
+ Notes:
+ - CSV normally gives integer bytes.
+ - This also accepts strings like "246132K" if needed.
+ - M is shown as rounded whole MB.
+ - G/T are shown with one decimal place.
+ """
+ if isinstance(n, str):
+ s = n.strip()
+ suffix = s[-1].upper()
+
+ if suffix in {"K", "M", "G", "T"}:
+ value = float(s[:-1])
+ # Interpret suffix input as decimal-style units.
+ scale = {
+ "K": 1_000,
+ "M": 1_000_000,
+ "G": 1_000_000_000,
+ "T": 1_000_000_000_000,
+ }[suffix]
+ n = int(value * scale)
+ else:
+ n = int(s)
+
+ n = int(n)
+
+ # Use G/T when the value is large enough.
+ if n >= 1024 ** 4:
+ return f"{n / (1024 ** 4):.2f}T"
+
+ if n >= 1024 ** 3:
+ return f"{n / (1024 ** 3):.2f}G"
+
+ if n >= 1_000_000:
+ return f"{round(n / 1_000_000)}M"
+
+ if n >= 1_000:
+ return f"{round(n / 1_000)}K"
+
+ return f"{n}B"
+
+def experiment_label(path: str) -> str:
+ name = Path(path).name
+
+ if name.startswith("bw_") and name.endswith(".csv"):
+ return name[len("bw_") : -len(".csv")]
+
+ if name.startswith("bandwidth_") and name.endswith(".csv"):
+ return name[len("bandwidth_") : -len(".csv")]
+
+ return Path(path).stem
+
+
+def percentile(values, p: float) -> float:
+ return float(np.percentile(np.array(values, dtype=float), p))
+
+
+def read_bw_csv(path: str, unit: str):
+ grouped = defaultdict(list)
+
+ with open(path, newline="") as f:
+ reader = csv.DictReader(f)
+
+ if reader.fieldnames is None:
+ raise ValueError(f"{path}: empty CSV or missing header")
+
+ fieldnames = [name.strip() for name in reader.fieldnames]
+ if fieldnames != ["bytes", "bw_KiBps"]:
+ raise ValueError(
+ f"{path}: expected header 'bytes,bw_KiBps', got: {','.join(fieldnames)}"
+ )
+
+ for line_no, row in enumerate(reader, start=2):
+ try:
+ nbytes = int(row["bytes"].strip())
+ bw_kibps = float(row["bw_KiBps"].strip())
+ except Exception as e:
+ raise ValueError(f"{path}: invalid row at line {line_no}: {row} ({e})")
+
+ grouped[nbytes].append(bw_kibps * KIBPS_TO_UNIT[unit])
+
+ return grouped
+
+
+def main() -> int:
+ parser = argparse.ArgumentParser(
+ description="Create grouped bandwidth bar graph from bw_*.csv files."
+ )
+ parser.add_argument(
+ "inputs",
+ nargs="+",
+ help="Input CSV files with header: bytes,bw_KiBps. Recommended naming: bw_<label>.csv",
+ )
+ parser.add_argument(
+ "--unit",
+ default="GiBps",
+ choices=sorted(KIBPS_TO_UNIT.keys()),
+ help="Output bandwidth unit. Input is always bw_KiBps. Default: GiBps",
+ )
+ parser.add_argument(
+ "--out",
+ default="bandwidth_bar.png",
+ help="Output bar graph filename. Default: bandwidth_bar.png",
+ )
+ parser.add_argument(
+ "--no-errorbar",
+ action="store_true",
+ help="Disable standard-deviation error bars.",
+ )
+ parser.add_argument(
+ "--legend-outside",
+ action="store_true",
+ help="Place legend outside the plot.",
+ )
+
+ args = parser.parse_args()
+
+ output_unit = UNIT_DISPLAY[args.unit]
+ all_data = []
+
+ for path in args.inputs:
+ try:
+ grouped = read_bw_csv(path, args.unit)
+ except ValueError as e:
+ print(f"ERROR: {e}", file=sys.stderr)
+ return 1
+
+ if not grouped:
+ print(f"ERROR: {path}: no data rows", file=sys.stderr)
+ return 1
+
+ all_data.append(
+ {
+ "path": path,
+ "label": experiment_label(path),
+ "grouped": grouped,
+ }
+ )
+
+ print("Bandwidth summary")
+ print("=================")
+ print(f"input_files: {len(all_data)}")
+ print(f"input_unit: KiB/s")
+ print(f"output_unit: {output_unit}")
+ print()
+
+ print(
+ f"{'file_label':>18} {'bytes':>14} {'size':>8} {'n':>8} "
+ f"{'min':>12} {'avg':>12} {'std':>12} "
+ f"{'p1':>12} {'p5':>12} {'p10':>12} {'p50':>12} "
+ f"{'p90':>12} {'p99':>12} {'max':>12}"
+ )
+
+ # stats[label][nbytes] = dict(...)
+ stats = defaultdict(dict)
+ all_sizes = set()
+
+ for item in all_data:
+ file_label = item["label"]
+ grouped = item["grouped"]
+
+ for nbytes in sorted(grouped.keys()):
+ bws = np.array(grouped[nbytes], dtype=float)
+ all_sizes.add(nbytes)
+
+ min_v = float(np.min(bws))
+ avg = float(np.mean(bws))
+ std = float(np.std(bws))
+ p1 = percentile(bws, 1)
+ p5 = percentile(bws, 5)
+ p10 = percentile(bws, 10)
+ p50 = percentile(bws, 50)
+ p90 = percentile(bws, 90)
+ p99 = percentile(bws, 99)
+ max_v = float(np.max(bws))
+
+ size_label = format_bytes(nbytes)
+
+ print(
+ f"{file_label:>18} {nbytes:14d} {size_label:>8} {len(bws):8d} "
+ f"{min_v:12.6f} {avg:12.6f} {std:12.6f} "
+ f"{p1:12.6f} {p5:12.6f} {p10:12.6f} {p50:12.6f} "
+ f"{p90:12.6f} {p99:12.6f} {max_v:12.6f}"
+ )
+
+ stats[file_label][nbytes] = {
+ "n": len(bws),
+ "avg": avg,
+ "std": std,
+ "min": min_v,
+ "max": max_v,
+ "p50": p50,
+ "p90": p90,
+ "p99": p99,
+ }
+
+ sizes = sorted(all_sizes)
+ size_labels = [format_bytes(s) for s in sizes]
+ experiment_labels = [item["label"] for item in all_data]
+
+ x = np.arange(len(sizes))
+ num_experiments = len(experiment_labels)
+
+ # Bar width shrinks as the number of experiments grows.
+ total_group_width = 0.82
+ bar_width = total_group_width / max(1, num_experiments)
+
+ fig_width = max(9, len(sizes) * 1.4)
+ fig, ax = plt.subplots(figsize=(fig_width, 6))
+
+ for idx, label in enumerate(experiment_labels):
+ offsets = x - total_group_width / 2 + bar_width / 2 + idx * bar_width
+
+ means = []
+ errors = []
+
+ for nbytes in sizes:
+ if nbytes in stats[label]:
+ means.append(stats[label][nbytes]["avg"])
+ errors.append(stats[label][nbytes]["std"])
+ else:
+ means.append(np.nan)
+ errors.append(0.0)
+
+ if args.no_errorbar:
+ ax.bar(
+ offsets,
+ means,
+ width=bar_width,
+ label=label,
+ )
+ else:
+ ax.bar(
+ offsets,
+ means,
+ width=bar_width,
+ yerr=errors,
+ capsize=3,
+ label=label,
+ )
+
+ # Automatically cut off the bottom of the y-axis to make bar differences visible.
+ # This intentionally truncates the y-axis.
+ all_bar_values = []
+ all_error_values = []
+
+ for label in experiment_labels:
+ for nbytes in sizes:
+ if nbytes in stats[label]:
+ all_bar_values.append(stats[label][nbytes]["avg"])
+ all_error_values.append(stats[label][nbytes]["std"])
+
+ if all_bar_values:
+ values = np.array(all_bar_values, dtype=float)
+ errors = np.array(all_error_values, dtype=float)
+
+ if args.no_errorbar:
+ low = float(np.nanmin(values))
+ high = float(np.nanmax(values))
+ else:
+ low = float(np.nanmin(values - errors))
+ high = float(np.nanmax(values + errors))
+
+ span = max(high - low, 1e-9)
+
+ # Leave 10% padding below the lowest visible bar/error.
+ auto_bottom = low - 0.10 * span
+
+ # Avoid negative y-axis for bandwidth.
+ auto_bottom = max(0.0, auto_bottom)
+
+ ax.set_ylim(bottom=auto_bottom)
+
+ ax.text(
+ 0.01,
+ 0.98,
+ "Y-axis truncated",
+ transform=ax.transAxes,
+ va="top",
+ fontsize=9,
+ )
+
+ ax.set_xlabel("Transfer size")
+ ax.set_ylabel(f"Bandwidth ({output_unit})")
+ ax.set_title("DMA Bandwidth by Transfer Size")
+ ax.set_xticks(x)
+ ax.set_xticklabels(size_labels)
+ ax.grid(axis="y", linestyle="--", alpha=0.6)
+
+ if args.legend_outside:
+ ax.legend(
+ title="Experiment",
+ fontsize=8,
+ loc="center left",
+ bbox_to_anchor=(1.02, 0.5),
+ )
+ fig.tight_layout(rect=[0, 0, 0.80, 1])
+ else:
+ ax.legend(title="Experiment", fontsize=8)
+ fig.tight_layout()
+
+ fig.savefig(args.out, dpi=200)
+ plt.close(fig)
+
+ print()
+ print(f"Wrote bar graph: {args.out}")
+
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/dma/analyze_time.py b/dma/analyze_time.py
new file mode 100755
index 0000000..8f467e4
--- /dev/null
+++ b/dma/analyze_time.py
@@ -0,0 +1,332 @@
+#!/usr/bin/env python3
+
+import argparse
+import csv
+import sys
+from collections import defaultdict
+from pathlib import Path
+
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+USEC_TO_UNIT = {
+ "sec": 1.0 / 1_000_000.0,
+ "msec": 1.0 / 1_000.0,
+ "usec": 1.0,
+ "nsec": 1_000.0,
+}
+
+
+LINESTYLES = ["-", "--", "-.", ":"]
+MARKERS = ["o", "s", "^", "D", "v", "P", "X", "*"]
+
+def format_bytes(n) -> str:
+ """
+ Format size using the largest readable unit.
+
+ Examples:
+ 246132K -> 246M
+ 2097148K -> 2.0G
+
+ Notes:
+ - CSV normally gives integer bytes.
+ - This also accepts strings like "246132K" if needed.
+ - M is shown as rounded whole MB.
+ - G/T are shown with one decimal place.
+ """
+ if isinstance(n, str):
+ s = n.strip()
+ suffix = s[-1].upper()
+
+ if suffix in {"K", "M", "G", "T"}:
+ value = float(s[:-1])
+ # Interpret suffix input as decimal-style units.
+ scale = {
+ "K": 1_000,
+ "M": 1_000_000,
+ "G": 1_000_000_000,
+ "T": 1_000_000_000_000,
+ }[suffix]
+ n = int(value * scale)
+ else:
+ n = int(s)
+
+ n = int(n)
+
+ # Use G/T when the value is large enough.
+ if n >= 1024 ** 4:
+ return f"{n / (1024 ** 4):.2f}T"
+
+ if n >= 1024 ** 3:
+ return f"{n / (1024 ** 3):.2f}G"
+
+ if n >= 1_000_000:
+ return f"{round(n / 1_000_000)}M"
+
+ if n >= 1_000:
+ return f"{round(n / 1_000)}K"
+
+ return f"{n}B"
+
+def experiment_label(path: str) -> str:
+ name = Path(path).name
+
+ if name.startswith("times_") and name.endswith(".csv"):
+ return name[len("times_") : -len(".csv")]
+
+ return Path(path).stem
+
+
+def percentile(values, p: float) -> float:
+ return float(np.percentile(np.array(values, dtype=float), p))
+
+
+def read_times_csv(path: str, unit: str):
+ grouped = defaultdict(list)
+
+ with open(path, newline="") as f:
+ reader = csv.DictReader(f)
+
+ if reader.fieldnames is None:
+ raise ValueError(f"{path}: empty CSV or missing header")
+
+ fieldnames = [name.strip() for name in reader.fieldnames]
+ if fieldnames != ["bytes", "time_usec"]:
+ raise ValueError(
+ f"{path}: expected header 'bytes,time_usec', got: {','.join(fieldnames)}"
+ )
+
+ for line_no, row in enumerate(reader, start=2):
+ try:
+ nbytes = int(row["bytes"].strip())
+ time_usec = float(row["time_usec"].strip())
+ except Exception as e:
+ raise ValueError(f"{path}: invalid row at line {line_no}: {row} ({e})")
+
+ grouped[nbytes].append(time_usec * USEC_TO_UNIT[unit])
+
+ return grouped
+
+
+def add_legend_and_save(fig, ax, out_path: Path, legend_title: str, legend_outside: bool):
+ if legend_outside:
+ ax.legend(
+ title=legend_title,
+ fontsize=8,
+ loc="center left",
+ bbox_to_anchor=(1.02, 0.5),
+ )
+ fig.tight_layout(rect=[0, 0, 0.78, 1])
+ else:
+ ax.legend(title=legend_title, fontsize=8)
+ fig.tight_layout()
+
+ fig.savefig(out_path, dpi=200)
+ plt.close(fig)
+
+
+def plot_size_graph(
+ nbytes: int,
+ series,
+ unit: str,
+ out_path: Path,
+ markers_mode: str,
+ line_markers: bool,
+ legend_outside: bool,
+):
+ size_label = format_bytes(nbytes)
+ fig, ax = plt.subplots(figsize=(10, 6))
+
+ for item in series:
+ x = item["x"]
+ y = item["y"]
+ marker = item["marker"] if line_markers else None
+
+ ax.plot(
+ x,
+ y,
+ linestyle=item["linestyle"],
+ marker=marker,
+ markersize=3,
+ markevery=max(1, len(x) // 25),
+ linewidth=1.8,
+ label=f"{item['file_label']} (n={item['n']})",
+ )
+
+ if markers_mode == "tail":
+ ax.scatter([item["p90"]], [0.90], marker="x", s=70, zorder=5)
+ ax.scatter([item["p99"]], [0.99], marker="*", s=100, zorder=5)
+
+ ax.annotate(
+ "P90",
+ xy=(item["p90"], 0.90),
+ xytext=(5, 5),
+ textcoords="offset points",
+ fontsize=8,
+ )
+ ax.annotate(
+ "P99",
+ xy=(item["p99"], 0.99),
+ xytext=(5, 5),
+ textcoords="offset points",
+ fontsize=8,
+ )
+
+ ax.set_xlabel(f"Latency ({unit})")
+ ax.set_ylabel("CDF")
+ ax.set_title(f"DMA Latency CDF - {size_label}")
+ ax.grid(True)
+
+ add_legend_and_save(
+ fig,
+ ax,
+ out_path,
+ "Experiment",
+ legend_outside,
+ )
+
+
+def main() -> int:
+ parser = argparse.ArgumentParser(
+ description="Create separate latency CDF graphs per byte count from times_*.csv files."
+ )
+ parser.add_argument(
+ "inputs",
+ nargs="+",
+ help="Input CSV files with header: bytes,time_usec. Recommended naming: times_<label>.csv",
+ )
+ parser.add_argument(
+ "--unit",
+ default="usec",
+ choices=sorted(USEC_TO_UNIT.keys()),
+ help="Output time unit. Input is always time_usec. Default: usec",
+ )
+ parser.add_argument(
+ "--out",
+ default="latency_cdf.png",
+ help="Output base filename. Per-size graphs are generated from this name.",
+ )
+ parser.add_argument(
+ "--markers",
+ default="none",
+ choices=["none", "tail"],
+ help="Marker mode. 'none' disables percentile markers; 'tail' shows P90 and P99 markers. Default: none",
+ )
+ parser.add_argument(
+ "--legend-outside",
+ action="store_true",
+ help="Place legend outside the plot.",
+ )
+ parser.add_argument(
+ "--line-markers",
+ action="store_true",
+ help="Show point markers on CDF lines. Default: no line markers.",
+ )
+
+ args = parser.parse_args()
+
+ all_data = []
+
+ for path in args.inputs:
+ try:
+ grouped = read_times_csv(path, args.unit)
+ except ValueError as e:
+ print(f"ERROR: {e}", file=sys.stderr)
+ return 1
+
+ if not grouped:
+ print(f"ERROR: {path}: no data rows", file=sys.stderr)
+ return 1
+
+ all_data.append(
+ {
+ "path": path,
+ "label": experiment_label(path),
+ "grouped": grouped,
+ }
+ )
+
+ print("Latency summary")
+ print("================")
+ print(f"input_files: {len(all_data)}")
+ print(f"input_unit: usec")
+ print(f"output_unit: {args.unit}")
+ print()
+
+ print(
+ f"{'file_label':>18} {'bytes':>14} {'size':>8} {'n':>8} "
+ f"{'min':>12} {'avg':>12} {'std':>12} "
+ f"{'p50':>12} {'p90':>12} {'p99':>12} {'max':>12}"
+ )
+
+ series_by_size = defaultdict(list)
+
+ for file_idx, item in enumerate(all_data):
+ file_label = item["label"]
+ grouped = item["grouped"]
+ linestyle = LINESTYLES[file_idx % len(LINESTYLES)]
+
+ for size_idx, nbytes in enumerate(sorted(grouped.keys())):
+ times = np.array(grouped[nbytes], dtype=float)
+ sorted_times = np.sort(times)
+ cdf = np.arange(1, len(sorted_times) + 1) / len(sorted_times)
+
+ min_v = float(np.min(times))
+ avg = float(np.mean(times))
+ std = float(np.std(times))
+ p50 = percentile(times, 50)
+ p90 = percentile(times, 90)
+ p99 = percentile(times, 99)
+ max_v = float(np.max(times))
+
+ size_label = format_bytes(nbytes)
+
+ print(
+ f"{file_label:>18} {nbytes:14d} {size_label:>8} {len(times):8d} "
+ f"{min_v:12.6f} {avg:12.6f} {std:12.6f} "
+ f"{p50:12.6f} {p90:12.6f} {p99:12.6f} {max_v:12.6f}"
+ )
+
+ series_by_size[nbytes].append(
+ {
+ "file_label": file_label,
+ "nbytes": nbytes,
+ "size_label": size_label,
+ "x": sorted_times,
+ "y": cdf,
+ "n": len(times),
+ "p90": p90,
+ "p99": p99,
+ "linestyle": linestyle,
+ "marker": MARKERS[size_idx % len(MARKERS)],
+ }
+ )
+
+ out_base = Path(args.out)
+ stem = out_base.stem
+ suffix = out_base.suffix or ".png"
+
+ print()
+
+ for nbytes in sorted(series_by_size.keys()):
+ size_label = format_bytes(nbytes)
+ out_path = out_base.with_name(f"{stem}_{size_label}{suffix}")
+
+ plot_size_graph(
+ nbytes=nbytes,
+ series=series_by_size[nbytes],
+ unit=args.unit,
+ out_path=out_path,
+ markers_mode=args.markers,
+ line_markers=args.line_markers,
+ legend_outside=args.legend_outside,
+ )
+
+ print(f"Wrote CDF graph: {out_path}")
+
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/dma/bw_VANILLA.csv b/dma/bw_VANILLA.csv
new file mode 100644
index 0000000..f22505c
--- /dev/null
+++ b/dma/bw_VANILLA.csv
@@ -0,0 +1,1348 @@
+bytes,bw_KiBps
+536870912,8257831.042
+536870912,8324090.175
+536870912,8360060.467
+536870912,8314351.529
+536870912,8326655.816
+536870912,8341155.367
+536870912,8368521.941
+536870912,8312152.950
+536870912,8377241.223
+536870912,8304275.491
+536870912,8318322.698
+536870912,8364311.615
+536870912,8356575.042
+536870912,8347991.216
+536870912,8355967.319
+536870912,8255221.063
+536870912,8362123.349
+536870912,8379997.653
+536870912,8390937.190
+536870912,8370275.089
+536870912,8362438.651
+536870912,8418439.177
+536870912,8351669.834
+536870912,8348329.381
+536870912,8336122.704
+536870912,8376701.290
+536870912,8382815.273
+536870912,8400686.709
+536870912,8364877.312
+536870912,8394622.445
+536870912,8319344.862
+536870912,8346046.501
+536870912,8340120.541
+536870912,8376577.492
+536870912,8383012.038
+536870912,8354220.558
+536870912,8384682.359
+536870912,8428112.925
+536870912,8370655.288
+536870912,8352115.669
+536870912,8404573.462
+536870912,8355693.120
+536870912,8362073.202
+536870912,8314402.820
+536870912,8330648.016
+536870912,8369029.559
+536870912,8318552.082
+536870912,8364983.146
+536870912,8338038.530
+536870912,8324324.239
+536870912,8298267.352
+536870912,8355023.612
+536870912,8315627.789
+536870912,8352084.136
+536870912,8357312.339
+536870912,8378850.058
+536870912,8242566.989
+536870912,8379995.376
+536870912,8341113.433
+536870912,8327395.779
+536870912,8400024.238
+536870912,8414188.344
+536870912,8350410.284
+536870912,8363149.502
+536870912,8399987.362
+536870912,8396447.595
+536870912,8357981.947
+536870912,8391470.901
+536870912,8380716.851
+536870912,8364449.729
+536870912,8371968.545
+536870912,8379919.967
+536870912,8358402.605
+536870912,8412983.712
+536870912,8329295.288
+536870912,8350437.416
+536870912,8319960.340
+536870912,8358098.133
+536870912,8422333.043
+536870912,8422126.987
+536870912,8412045.844
+536870912,8397655.163
+536870912,8263298.841
+536870912,8374916.151
+536870912,8414252.217
+536870912,8310675.801
+536870912,8377365.174
+536870912,8350365.198
+536870912,8373457.267
+536870912,8382275.560
+536870912,8366550.159
+536870912,8347588.352
+536870912,8375883.090
+536870912,8374086.530
+536870912,8382372.856
+536870912,8361793.668
+536870912,8299831.935
+536870912,8348445.831
+536870912,8344539.618
+536870912,8354680.778
+536870912,8380529.840
+536870912,8404366.254
+536870912,8411030.596
+536870912,8367598.900
+536870912,8392297.523
+536870912,8378429.883
+536870912,8334894.208
+536870912,8396829.638
+536870912,8337279.837
+536870912,8360287.359
+536870912,8329722.327
+536870912,8418495.950
+536870912,8348249.756
+536870912,8369935.544
+536870912,8385466.201
+536870912,8391547.727
+536870912,8340218.055
+536870912,8373278.470
+536870912,8432395.473
+536870912,8379994.037
+536870912,8420860.164
+536870912,8319162.295
+536870912,8408295.115
+536870912,8323622.747
+536870912,8359972.619
+536870912,8338512.883
+536870912,8374087.065
+536870912,8382192.605
+536870912,8345185.928
+536870912,8317876.637
+536870912,8375973.146
+536870912,8397669.018
+536870912,8378831.178
+536870912,8334130.390
+536870912,8378805.870
+536870912,8374248.776
+536870912,8249858.189
+536870912,8354606.356
+536870912,8352538.797
+536870912,8394292.615
+536870912,8311283.541
+536870912,8378482.905
+536870912,8356724.888
+536870912,8386034.494
+536870912,8297776.555
+536870912,8386735.007
+536870912,8370139.455
+536870912,8369730.040
+536870912,8388756.984
+536870912,8344130.049
+536870912,8351192.254
+536870912,8388136.922
+536870912,8347594.199
+536870912,8356126.866
+536870912,8401569.538
+536870912,8362957.538
+536870912,8300171.860
+536870912,8411138.007
+536870912,8304405.185
+536870912,8381946.565
+536870912,8317394.073
+536870912,8384244.437
+536870912,8376253.763
+536870912,8349032.118
+536870912,8354956.241
+536870912,8380743.510
+536870912,8331140.062
+536870912,8350979.555
+536870912,8418193.438
+536870912,8382958.557
+536870912,8386416.931
+536870912,8395410.432
+536870912,8378136.134
+536870912,8318918.886
+536870912,8410978.376
+536870912,8333427.112
+536870912,8221319.409
+536870912,8364432.915
+536870912,8345958.417
+536870912,8363286.911
+536870912,8332156.506
+536870912,8382230.531
+536870912,8346052.613
+536870912,8410250.468
+536870912,8353757.727
+536870912,8404916.766
+536870912,8416947.661
+536870912,8376978.208
+536870912,8371691.424
+536870912,8396704.976
+536870912,8414777.959
+536870912,8353244.373
+536870912,8318754.025
+536870912,8331911.277
+536870912,8382953.195
+536870912,8338860.360
+536870912,8319379.185
+536870912,8398750.062
+536870912,8330268.928
+536870912,8370850.680
+536870912,8361069.313
+536870912,8365935.779
+536870912,8364960.057
+536870912,8377522.059
+536870912,8353447.870
+536870912,8375182.649
+536870912,8321782.093
+536870912,8350677.486
+536870912,8263340.387
+536870912,8332756.665
+536870912,8417697.272
+536870912,8393538.297
+536870912,8347900.432
+536870912,8363735.188
+536870912,8324503.463
+536870912,8304934.391
+536870912,8299269.616
+536870912,8402484.468
+536870912,8347844.208
+536870912,8296357.548
+536870912,8396377.672
+536870912,8377041.517
+536870912,8313785.527
+536870912,8371716.956
+536870912,8378795.157
+536870912,8340748.783
+536870912,8360697.317
+536870912,8364660.846
+536870912,8391967.338
+536870912,8350317.851
+536870912,8350243.774
+536870912,8439313.420
+536870912,8377839.059
+536870912,8399200.938
+536870912,8379663.882
+536870912,8379824.067
+536870912,8367443.188
+536870912,8392166.950
+536870912,8357897.607
+536870912,8324951.161
+536870912,8365745.555
+536870912,8357349.640
+536870912,8364057.284
+536870912,8398727.593
+536870912,8425546.675
+536870912,8382572.414
+536870912,8374361.937
+536870912,8348691.105
+536870912,8373834.011
+536870912,8391275.889
+536870912,8391399.718
+536870912,8392276.969
+536870912,8417686.190
+536870912,8352077.882
+1073741824,8138089.354
+1073741824,8177392.302
+1073741824,8169099.589
+1073741824,8105907.473
+1073741824,8194548.953
+1073741824,8139123.611
+1073741824,8126474.963
+1073741824,8162121.788
+1073741824,8163171.251
+1073741824,8171121.062
+1073741824,8186016.661
+1073741824,8165725.057
+1073741824,8063273.306
+1073741824,8178658.117
+1073741824,8202737.897
+1073741824,8148178.333
+1073741824,8162500.532
+1073741824,8193645.835
+1073741824,8167616.538
+1073741824,8186603.110
+1073741824,8169359.004
+1073741824,8186279.965
+1073741824,8155635.043
+1073741824,8140700.738
+1073741824,8165438.021
+1073741824,8176268.030
+1073741824,8181085.154
+1073741824,8180478.244
+1073741824,8165952.907
+1073741824,8168923.620
+1073741824,8192217.414
+1073741824,8132915.134
+1073741824,8173146.021
+1073741824,8164068.362
+1073741824,8134432.873
+1073741824,8171028.226
+1073741824,8152795.182
+1073741824,8193753.719
+1073741824,8163280.686
+1073741824,8194031.608
+1073741824,8144737.425
+1073741824,8145727.179
+1073741824,8144849.909
+1073741824,8165100.459
+1073741824,8094435.680
+1073741824,8089804.034
+1073741824,8168444.440
+1073741824,8192444.184
+1073741824,8130694.059
+1073741824,8160305.628
+1073741824,8136433.941
+1073741824,8186404.081
+1073741824,8184251.560
+1073741824,8130386.723
+1073741824,8210161.262
+1073741824,8185030.255
+1073741824,8141485.327
+1073741824,8178298.028
+1073741824,8174079.416
+1073741824,8167512.076
+1073741824,8074632.442
+1073741824,8148020.993
+1073741824,8163035.827
+1073741824,8169272.764
+1073741824,8171761.611
+1073741824,8159402.359
+1073741824,8173463.224
+1073741824,8169373.580
+1073741824,8140830.176
+1073741824,8183192.583
+1073741824,8170229.721
+1073741824,8154262.899
+1073741824,8170541.350
+1073741824,8168825.107
+1073741824,8173503.362
+1073741824,8157012.915
+1073741824,8172080.426
+1073741824,8153071.758
+1073741824,8223132.523
+1073741824,8136738.703
+1073741824,8162757.495
+1073741824,8163236.009
+1073741824,8184380.917
+1073741824,8142153.798
+1073741824,8166037.805
+1073741824,8160535.906
+1073741824,8079963.292
+1073741824,8143988.642
+1073741824,8166006.262
+1073741824,8164743.980
+1073741824,8192553.573
+1073741824,8156989.056
+1073741824,8179597.940
+1073741824,8163754.811
+1073741824,8146153.195
+1073741824,8146235.531
+1073741824,8186722.954
+1073741824,8197497.639
+1073741824,8160476.081
+1073741824,8176191.780
+1073741824,8144256.017
+1073741824,8138055.879
+1073741824,8146826.167
+1073741824,8165232.264
+1073741824,8162361.318
+1073741824,8186293.833
+1073741824,8173794.278
+1073741824,8194762.275
+1073741824,8152014.750
+1073741824,8166369.339
+1073741824,8176738.373
+1073741824,8160695.381
+1073741824,8152224.089
+1073741824,8196125.020
+1073741824,8180352.201
+1073741824,8194009.837
+1073741824,8170316.554
+1073741824,8139935.699
+1073741824,8112386.622
+1073741824,8185530.361
+1073741824,8159146.115
+1073741824,8155273.744
+1073741824,8188250.357
+1073741824,8210284.560
+1073741824,8134979.577
+1073741824,8157042.294
+1073741824,8184451.698
+1073741824,8154047.052
+1073741824,8167067.538
+1073741824,8149645.211
+1073741824,8150179.582
+1073741824,8190519.052
+1073741824,8168482.810
+1073741824,8147487.095
+1073741824,8184329.237
+1073741824,8172219.526
+1073741824,8156156.877
+1073741824,8154281.479
+1073741824,8180832.780
+1073741824,8175322.597
+1073741824,8193515.288
+1073741824,8177347.216
+1073741824,8151470.000
+1073741824,8090985.750
+1073741824,8170389.766
+1073741824,8192601.516
+1073741824,8159940.550
+1073741824,8171842.682
+1073741824,8150169.763
+1073741824,8195149.691
+1073741824,8187631.771
+1073741824,8165567.484
+1073741824,8068700.672
+1073741824,8162788.123
+1073741824,8172207.870
+1073741824,8153421.386
+1073741824,8175524.466
+1073741824,8119439.739
+1073741824,8186656.288
+1073741824,8188370.888
+1073741824,8161583.500
+1073741824,8203275.659
+1073741824,8173708.517
+1073741824,8164901.712
+1073741824,8167985.230
+1073741824,8172547.294
+1073741824,8158827.673
+1073741824,8171398.309
+1073741824,8161545.258
+1073741824,8164635.141
+1073741824,8161946.819
+1073741824,8121607.804
+1073741824,8186283.799
+1073741824,8199395.342
+1073741824,8191861.890
+1073741824,8150369.948
+1073741824,8160413.462
+1073741824,8155358.484
+1073741824,8189579.084
+1073741824,8205448.923
+1073741824,8169094.434
+1073741824,8082447.476
+1073741824,8170517.794
+1073741824,8161082.504
+1073741824,8159377.407
+1073741824,8156415.915
+1073741824,8181151.282
+1073741824,8136103.696
+1073741824,8170048.802
+1073741824,8184267.082
+1073741824,8061340.037
+1073741824,8146205.849
+1073741824,8151415.123
+1073741824,8175034.759
+1073741824,8196191.776
+1073741824,8174195.134
+1073741824,8178864.424
+1073741824,8159067.010
+1073741824,8146504.762
+1073741824,8187553.199
+1073741824,8162514.066
+2147479552,7947126.214
+2147479552,7830991.249
+2147479552,8008948.981
+2147479552,8000980.652
+2147479552,7896117.441
+2147479552,8009715.263
+2147479552,7992830.209
+2147479552,7946225.319
+2147479552,7865214.278
+2147479552,8007017.638
+2147479552,8016693.209
+2147479552,7938012.172
+2147479552,7980189.400
+2147479552,7974511.109
+2147479552,8012179.242
+2147479552,7868989.823
+2147479552,8000277.903
+2147479552,7989977.945
+2147479552,8007474.704
+2147479552,8027702.523
+2147479552,7973356.133
+2147479552,7934579.157
+2147479552,7991086.129
+2147479552,8018982.870
+2147479552,7974215.830
+2147479552,8018838.973
+2147479552,7926990.292
+2147479552,7987530.155
+2147479552,7884838.470
+2147479552,7979759.401
+2147479552,8003693.270
+2147479552,7977333.738
+2147479552,7927892.195
+2147479552,7998116.468
+2147479552,7993422.788
+2147479552,8008514.837
+2147479552,8006450.461
+2147479552,7945386.006
+2147479552,7995881.874
+2147479552,7996968.246
+2147479552,8016157.016
+2147479552,8020270.325
+2147479552,7932353.038
+2147479552,8026109.338
+2147479552,7974138.451
+2147479552,8011087.418
+2147479552,8018429.172
+2147479552,7980079.080
+2147479552,7975050.448
+2147479552,8020054.366
+2147479552,7988862.582
+2147479552,8010601.575
+2147479552,7984622.573
+2147479552,7937457.852
+2147479552,8013796.881
+2147479552,7872770.945
+2147479552,8006195.847
+2147479552,8008850.863
+2147479552,7998459.766
+2147479552,7936888.470
+2147479552,8005590.218
+2147479552,7996606.780
+2147479552,8018439.595
+2147479552,7892034.858
+2147479552,7999417.125
+2147479552,7979929.197
+2147479552,7999268.346
+2147479552,8015869.828
+2147479552,8007620.334
+2147479552,8005805.185
+2147479552,7920126.228
+2147479552,7995110.891
+2147479552,7981652.097
+2147479552,7998705.438
+2147479552,7970318.000
+2147479552,7882859.428
+2147479552,8014648.689
+2147479552,8003171.979
+2147479552,7988015.334
+2147479552,7833679.173
+2147479552,8008951.734
+2147479552,8006672.199
+2147479552,7991080.465
+2147479552,7970719.112
+2147479552,7924635.887
+2147479552,7994571.699
+2147479552,8006554.389
+2147479552,7985302.202
+2147479552,7971576.967
+2147479552,7923306.476
+2147479552,8003718.593
+2147479552,7905757.297
+2147479552,8013574.350
+2147479552,7939932.009
+2147479552,8000819.788
+2147479552,7974226.018
+2147479552,7967589.450
+2147479552,7970503.541
+2147479552,7975902.835
+2147479552,8012434.115
+2147479552,7984418.834
+2147479552,7976403.136
+2147479552,8007045.520
+2147479552,7935571.131
+2147479552,7975156.293
+2147479552,8000446.559
+2147479552,8003289.383
+2147479552,7959525.168
+2147479552,7967631.890
+2147479552,7986418.000
+2147479552,7983242.875
+2147479552,7996949.766
+2147479552,7945887.814
+2147479552,7996839.164
+2147479552,7883464.232
+2147479552,7917027.853
+2147479552,7942927.071
+2147479552,7897486.903
+2147479552,7995260.125
+2147479552,7990338.477
+2147479552,8004819.195
+2147479552,7880098.747
+2147479552,7990653.645
+2147479552,7982676.538
+2147479552,7984842.678
+2147479552,7902720.450
+2147479552,7937538.186
+2147479552,8018753.489
+2147479552,7900726.589
+2147479552,8011971.371
+2147479552,7980681.583
+2147479552,8001119.116
+2147479552,7942218.541
+2147479552,7978663.645
+2147479552,7899568.903
+2147479552,7861320.676
+2147479552,7996047.570
+2147479552,7947567.070
+2147479552,8000349.564
+2147479552,8001487.767
+2147479552,7995970.803
+2147479552,7827102.177
+2147479552,7896470.741
+2147479552,7984024.520
+2147479552,8006597.245
+2147479552,8009409.724
+2147479552,7933554.178
+2147479552,7950081.138
+2147479552,7986958.252
+2147479552,7984203.190
+2147479552,8002735.834
+2147479552,8006604.582
+2147479552,7997890.719
+2147479552,8000348.343
+2147479552,7946083.629
+2147479552,8000179.936
+2147479552,7988375.262
+2147479552,7980154.296
+2147479552,7908920.854
+2147479552,8001382.535
+2147479552,7991281.468
+2147479552,8003794.164
+2147479552,7861265.127
+2147479552,7990350.137
+2147479552,7973930.123
+2147479552,8014293.709
+2147479552,7991292.522
+2147479552,7994522.176
+2147479552,7933174.864
+2147479552,8013732.819
+2147479552,7994925.452
+2147479552,8031332.963
+2147479552,7910863.557
+2147479552,8002279.310
+2147479552,7972722.728
+2147479552,7965069.199
+2147479552,7967829.505
+2147479552,7966056.707
+2147479552,8019600.524
+2147479552,7982388.614
+2147479552,7908450.992
+2147479552,8018495.149
+2147479552,7982369.200
+2147479552,7976839.965
+2147479552,7933725.795
+2147479552,8010886.733
+2147479552,7912879.556
+2147479552,8000956.751
+2147479552,8013436.465
+2147479552,8009547.777
+2147479552,7931425.041
+2147479552,8000160.495
+2147479552,8011892.462
+2147479552,8007611.987
+2147479552,8002130.424
+2147479552,7915497.321
+2147479552,8008949.807
+2147479552,7995144.907
+536870912,8297726.257
+536870912,8329119.827
+536870912,8358219.253
+536870912,8414840.896
+536870912,8357399.731
+536870912,8336335.972
+536870912,8321540.247
+536870912,8286800.873
+536870912,8362168.162
+536870912,8376162.631
+536870912,8357669.112
+536870912,8369541.248
+536870912,8395280.569
+536870912,8360743.848
+536870912,8403614.705
+536870912,8414502.723
+536870912,8405916.252
+536870912,8355010.697
+536870912,8372292.612
+536870912,8379949.032
+536870912,8372315.340
+536870912,8364418.103
+536870912,8381942.545
+536870912,8389321.965
+536870912,8407988.750
+536870912,8338789.271
+536870912,8406029.867
+536870912,8379301.345
+536870912,8347195.360
+536870912,8398977.176
+536870912,8420189.909
+536870912,8353653.108
+536870912,8360287.759
+536870912,8356341.691
+536870912,8419746.378
+536870912,8368900.645
+536870912,8361595.631
+536870912,8345109.019
+536870912,8371805.986
+536870912,8386092.575
+536870912,8348197.515
+536870912,8336405.694
+536870912,8425796.364
+536870912,8389089.601
+536870912,8417867.565
+536870912,8349642.290
+536870912,8397103.719
+536870912,8395858.126
+536870912,8357745.720
+536870912,8378779.089
+536870912,8371087.916
+536870912,8337224.153
+536870912,8434736.833
+536870912,8400962.927
+536870912,8364051.546
+536870912,8359437.575
+536870912,8383428.651
+536870912,8433608.521
+536870912,8399843.227
+536870912,8358140.372
+536870912,8398175.605
+536870912,8368244.246
+536870912,8361196.786
+536870912,8380838.091
+536870912,8362211.242
+536870912,8364237.689
+536870912,8387494.812
+536870912,8335830.456
+536870912,8354360.203
+536870912,8363657.937
+536870912,8385410.006
+536870912,8374072.753
+536870912,8346840.411
+536870912,8312084.029
+536870912,8371472.065
+536870912,8363742.660
+536870912,8406858.955
+536870912,8408712.626
+536870912,8333298.365
+536870912,8435537.663
+536870912,8364845.281
+536870912,8376712.532
+536870912,8406175.697
+536870912,8364534.201
+536870912,8385997.070
+536870912,8400531.647
+536870912,8379733.125
+536870912,8431229.416
+536870912,8204954.212
+536870912,8370098.431
+536870912,8378620.684
+536870912,8387569.418
+536870912,8346932.899
+536870912,8384022.409
+536870912,8370418.879
+536870912,8368334.137
+536870912,8331419.537
+536870912,8347124.527
+536870912,8396763.609
+536870912,8370911.625
+536870912,8377613.354
+536870912,8378574.489
+536870912,8366011.737
+536870912,8334095.150
+536870912,8348366.602
+536870912,8353517.479
+536870912,8318633.518
+536870912,8357358.966
+536870912,8339111.703
+536870912,8431833.220
+536870912,8316449.692
+536870912,8382440.268
+536870912,8358427.923
+536870912,8370531.937
+536870912,8382461.711
+536870912,8351256.903
+536870912,8376703.967
+536870912,8376585.121
+536870912,8384669.084
+536870912,8387783.447
+536870912,8366347.492
+536870912,8411992.397
+536870912,8349625.934
+536870912,8392767.859
+536870912,8437106.920
+536870912,8391246.342
+536870912,8348152.320
+536870912,8403981.639
+536870912,8357803.010
+536870912,8366263.918
+536870912,8388316.087
+536870912,8374524.462
+536870912,8366404.900
+536870912,8394617.068
+536870912,8397475.465
+536870912,8383837.529
+536870912,8370766.481
+536870912,8352748.914
+536870912,8361183.985
+536870912,8347421.023
+536870912,8349302.556
+536870912,8368650.977
+536870912,8330391.889
+536870912,8382899.983
+536870912,8369513.724
+536870912,8386597.095
+536870912,8438134.585
+536870912,8350253.615
+536870912,8366252.303
+536870912,8380905.077
+536870912,8338769.907
+536870912,8263838.061
+536870912,8374662.111
+536870912,8401913.001
+536870912,8385186.173
+536870912,8377838.122
+536870912,8384051.905
+536870912,8386658.672
+536870912,8362595.511
+536870912,8357858.169
+536870912,8379260.633
+536870912,8389537.024
+536870912,8304545.274
+536870912,8389956.971
+536870912,8385054.883
+536870912,8416118.203
+536870912,8370145.602
+536870912,8334803.443
+536870912,8341427.684
+536870912,8337381.395
+536870912,8336307.209
+536870912,8350480.774
+536870912,8343804.042
+536870912,8377532.768
+536870912,8390205.629
+536870912,8325661.867
+536870912,8382035.947
+536870912,8326395.835
+536870912,8362346.219
+536870912,8286901.597
+536870912,8279314.165
+536870912,8374263.490
+536870912,8414728.529
+536870912,8390042.362
+536870912,8310930.322
+536870912,8390255.175
+536870912,8391144.274
+536870912,8393546.091
+536870912,8411403.577
+536870912,8383280.392
+536870912,8377631.694
+536870912,8395649.599
+536870912,8340726.624
+536870912,8363368.558
+536870912,8369033.968
+536870912,8418998.835
+536870912,8363262.764
+536870912,8358238.441
+536870912,8384050.564
+536870912,8410748.319
+536870912,8342035.550
+536870912,8353805.645
+536870912,8373079.889
+536870912,8341745.542
+536870912,8381808.677
+536870912,8381610.629
+536870912,8380764.543
+536870912,8322230.951
+536870912,8359038.536
+536870912,8400457.753
+536870912,8410784.345
+536870912,8363107.347
+536870912,8339816.471
+536870912,8435068.492
+536870912,8389056.445
+536870912,8383005.738
+536870912,8384873.176
+536870912,8397375.935
+536870912,8344473.612
+536870912,8353101.704
+536870912,8361585.363
+536870912,8323990.262
+536870912,8384113.981
+536870912,8423037.334
+536870912,8391526.237
+536870912,8400320.466
+536870912,8368454.352
+536870912,8395609.266
+536870912,8359098.510
+536870912,8333326.976
+536870912,8412438.352
+536870912,8349328.351
+536870912,8336571.653
+536870912,8367998.356
+536870912,8373028.273
+536870912,8365465.509
+536870912,8338848.556
+536870912,8364488.028
+536870912,8373630.857
+536870912,8375956.955
+536870912,8383128.519
+536870912,8370995.292
+536870912,8368521.941
+536870912,8404117.698
+536870912,8365619.679
+536870912,8396772.619
+1073741824,8106935.885
+1073741824,8163232.196
+1073741824,8186321.890
+1073741824,8140414.069
+1073741824,8133332.430
+1073741824,8146613.688
+1073741824,8166003.146
+1073741824,8171050.321
+1073741824,8174432.187
+1073741824,8174376.746
+1073741824,8187120.796
+1073741824,8179944.615
+1073741824,8198790.648
+1073741824,8088146.431
+1073741824,8212268.713
+1073741824,8146527.231
+1073741824,8140647.839
+1073741824,8165594.763
+1073741824,8163528.165
+1073741824,8150605.431
+1073741824,8192582.121
+1073741824,8103913.875
+1073741824,8181810.769
+1073741824,8133931.293
+1073741824,8141017.324
+1073741824,8151947.824
+1073741824,8178590.370
+1073741824,8163575.133
+1073741824,8187417.860
+1073741824,8165247.714
+1073741824,8192821.970
+1073741824,8177847.915
+1073741824,8200999.957
+1073741824,8113109.894
+1073741824,8134005.683
+1073741824,8157734.710
+1073741824,8094886.469
+1073741824,8172987.970
+1073741824,8152461.644
+1073741824,8099153.894
+1073741824,8199905.285
+1073741824,8162937.201
+1073741824,8188245.114
+1073741824,8168747.087
+1073741824,8134112.824
+1073741824,8156418.960
+1073741824,8174455.957
+1073741824,8200315.953
+1073741824,8168047.074
+1073741824,8161488.340
+1073741824,8182508.673
+1073741824,8164306.545
+1073741824,8172004.255
+1073741824,8189975.093
+1073741824,8173512.600
+1073741824,8179491.513
+1073741824,8178463.557
+1073741824,8151221.603
+1073741824,8163997.171
+1073741824,8176074.412
+1073741824,8181150.005
+1073741824,8166385.239
+1073741824,8179931.789
+1073741824,8217738.793
+1073741824,8175759.492
+1073741824,8161215.640
+1073741824,8169473.443
+1073741824,8157957.925
+1073741824,8195599.341
+1073741824,8200060.531
+1073741824,8113958.426
+1073741824,8169994.121
+1073741824,8076056.598
+1073741824,8176473.388
+1073741824,8079035.891
+1073741824,8181077.941
+1073741824,8077869.548
+1073741824,8148080.256
+1073741824,8175080.649
+1073741824,8185444.802
+1073741824,8164017.765
+1073741824,8163177.796
+1073741824,8188425.241
+1073741824,8227575.845
+1073741824,8198858.986
+1073741824,8146674.006
+1073741824,8217406.745
+1073741824,8174112.360
+1073741824,8157474.953
+1073741824,8189138.280
+1073741824,8191146.393
+1073741824,8073919.309
+1073741824,8170414.149
+1073741824,8155771.299
+1073741824,8149074.052
+1073741824,8127396.972
+1073741824,8168637.123
+1073741824,8172627.298
+1073741824,8180653.625
+1073741824,8164979.150
+1073741824,8151065.857
+1073741824,8159950.710
+1073741824,8183920.488
+1073741824,8183054.323
+1073741824,8179686.122
+1073741824,8157814.360
+1073741824,8156617.739
+1073741824,8118259.188
+1073741824,8145079.569
+1073741824,8140207.106
+1073741824,8165940.443
+1073741824,8188169.472
+1073741824,8175639.970
+1073741824,8180145.435
+1073741824,8147617.382
+1073741824,8176401.406
+1073741824,8183777.350
+1073741824,8148855.693
+1073741824,8144995.296
+1073741824,8129499.960
+1073741824,8164277.748
+1073741824,8187397.787
+1073741824,8187129.809
+1073741824,8171398.309
+1073741824,8159266.235
+1073741824,8164569.025
+1073741824,8195578.394
+1073741824,8147685.756
+1073741824,8082821.541
+1073741824,8168774.451
+1073741824,8189572.240
+1073741824,8164455.742
+1073741824,8138381.545
+1073741824,8184619.392
+1073741824,8157117.362
+1073741824,8157644.209
+1073741824,8206472.306
+1073741824,8151579.692
+1073741824,8164861.277
+1073741824,8176602.308
+1073741824,8150797.844
+1073741824,8160524.983
+1073741824,8156190.945
+1073741824,8075629.485
+1073741824,8119201.464
+1073741824,8162116.070
+1073741824,8169588.394
+1073741824,8154480.217
+1073741824,8156762.721
+1073741824,8174093.690
+1073741824,8165189.218
+1073741824,8184585.341
+1073741824,8194810.052
+1073741824,8168537.917
+1073741824,8130408.093
+1073741824,8157694.727
+1073741824,8123365.872
+1073741824,8185404.994
+1073741824,8174219.986
+1073741824,8132685.529
+1073741824,8173724.446
+1073741824,8167038.531
+1073741824,8172145.071
+1073741824,8169411.577
+1073741824,8171300.755
+1073741824,8181844.733
+1073741824,8161130.968
+1073741824,8143266.811
+1073741824,8163710.129
+1073741824,8187115.938
+1073741824,8131100.787
+1073741824,8142369.017
+1073741824,8171659.399
+1073741824,8178910.548
+1073741824,8168394.680
+1073741824,8183815.417
+1073741824,8187006.502
+1073741824,8095454.870
+1073741824,8188724.894
+1073741824,8091712.953
+1073741824,8194746.264
+1073741824,8104034.692
+1073741824,8168837.135
+1073741824,8156216.004
+1073741824,8172347.229
+1073741824,8182950.999
+1073741824,8163428.638
+1073741824,8182134.838
+1073741824,8193704.290
+1073741824,8158991.969
+1073741824,8152333.674
+1073741824,8164574.556
+1073741824,8163973.525
+1073741824,8153574.053
+1073741824,8178561.665
+1073741824,8150908.025
+1073741824,8184141.178
+1073741824,8183726.317
+1073741824,8163570.048
+1073741824,8136379.330
+1073741824,8182754.446
+1073741824,8173871.948
+1073741824,8118761.792
+1073741824,8164069.824
+1073741824,8166205.127
+1073741824,8182325.551
+1073741824,8087878.797
+1073741824,8152913.785
+1073741824,8168333.594
+1073741824,8172978.414
+1073741824,8183244.504
+1073741824,8182641.104
+1073741824,8214573.648
+1073741824,8170338.900
+1073741824,8143072.160
+1073741824,8171580.943
+1073741824,8163099.249
+1073741824,8160398.855
+1073741824,8161304.886
+1073741824,8145896.453
+1073741824,8182415.706
+1073741824,8131530.950
+1073741824,8178149.346
+1073741824,8136428.322
+1073741824,8193458.820
+1073741824,8156454.046
+1073741824,8178888.220
+1073741824,8143104.411
+1073741824,8135342.866
+1073741824,8169322.535
+1073741824,8181351.715
+1073741824,8166082.131
+1073741824,8177195.571
+1073741824,8181289.222
+1073741824,8195288.295
+1073741824,8199358.604
+1073741824,8186441.342
+1073741824,8142976.356
+1073741824,8174117.840
+1073741824,8156598.514
+1073741824,8136233.367
+1073741824,8168303.687
+1073741824,8144401.193
+1073741824,8110372.899
+1073741824,8152730.590
+1073741824,8154310.585
+2147479552,7950062.182
+2147479552,7990352.998
+2147479552,7855232.727
+2147479552,7993092.504
+2147479552,7997344.657
+2147479552,7953579.526
+2147479552,8007072.820
+2147479552,7934290.130
+2147479552,7980624.305
+2147479552,7845012.438
+2147479552,7993641.642
+2147479552,7964835.662
+2147479552,7967730.363
+2147479552,8031605.788
+2147479552,7985868.607
+2147479552,8006719.917
+2147479552,7882609.977
+2147479552,7930999.171
+2147479552,8017656.103
+2147479552,8013142.246
+2147479552,7995211.294
+2147479552,8029009.256
+2147479552,7938073.257
+2147479552,7881379.457
+2147479552,8017614.967
+2147479552,8001349.687
+2147479552,7930518.195
+2147479552,8007539.156
+2147479552,7984991.621
+2147479552,7993366.119
+2147479552,7994916.522
+2147479552,8005966.586
+2147479552,7869429.021
+2147479552,7973623.791
+2147479552,7990025.099
+2147479552,7988060.912
+2147479552,7913024.125
+2147479552,7921938.519
+2147479552,7997903.347
+2147479552,8019951.068
+2147479552,7987257.092
+2147479552,8005563.019
+2147479552,7939640.668
+2147479552,7986483.817
+2147479552,8028328.406
+2147479552,8007706.375
+2147479552,7955074.126
+2147479552,7998212.768
+2147479552,7992685.939
+2147479552,7991980.901
+2147479552,7998861.305
+2147479552,7981068.582
+2147479552,7988685.528
+2147479552,7991936.983
+2147479552,7941170.057
+2147479552,8005044.662
+2147479552,8008396.882
+2147479552,7945674.848
+2147479552,7962674.618
+2147479552,7842098.344
+2147479552,7997818.492
+2147479552,7960073.359
+2147479552,7998526.605
+2147479552,7991974.535
+2147479552,7971994.751
+2147479552,8000576.428
+2147479552,7977220.553
+2147479552,7953705.314
+2147479552,8003867.416
+2147479552,8019421.584
+2147479552,7988648.402
+2147479552,7986066.520
+2147479552,7915712.855
+2147479552,8006258.750
+2147479552,7988927.617
+2147479552,7988052.302
+2147479552,7989980.989
+2147479552,7935479.126
+2147479552,8001224.952
+2147479552,7978006.481
+2147479552,7986286.096
+2147479552,8009372.558
+2147479552,7935139.621
+2147479552,7975297.201
+2147479552,7996371.208
+2147479552,7998577.917
+2147479552,7890604.404
+2147479552,8002847.301
+2147479552,7893965.500
+2147479552,7986587.167
+2147479552,7928493.139
+2147479552,7968704.027
+2147479552,8000832.638
+2147479552,7933911.647
+2147479552,7970263.385
+2147479552,7994349.838
+2147479552,8016476.217
+2147479552,7939719.543
+2147479552,8011879.943
+2147479552,8001712.681
+2147479552,8005954.697
+2147479552,7995991.443
+2147479552,7944468.260
+2147479552,7986312.434
+2147479552,7984621.722
+2147479552,7995300.422
+2147479552,8002278.607
+2147479552,8000003.448
+2147479552,7939803.049
+2147479552,8003220.327
+2147479552,7997799.521
+2147479552,7986410.092
+2147479552,7944202.466
+2147479552,7985562.938
+2147479552,8005039.070
+2147479552,7997929.030
+2147479552,7917067.574
+2147479552,8003216.753
+2147479552,8002632.615
+2147479552,7978499.063
+2147479552,8002023.831
+2147479552,8010022.172
+2147479552,7918844.916
+2147479552,7998607.875
+2147479552,7997706.860
+2147479552,8010458.805
+2147479552,7996623.368
+2147479552,7922279.977
+2147479552,8004146.382
+2147479552,8002017.633
+2147479552,8003505.051
+2147479552,7939021.233
+2147479552,7877178.535
+2147479552,7978784.672
+2147479552,7987720.544
+2147479552,7981375.213
+2147479552,7891038.596
+2147479552,7938153.784
+2147479552,7994743.436
+2147479552,7969981.838
+2147479552,8011823.777
+2147479552,7996064.247
+2147479552,7947879.145
+2147479552,7985816.971
+2147479552,7995605.312
+2147479552,7983282.017
+2147479552,8005353.046
+2147479552,7914268.430
+2147479552,7999164.728
+2147479552,8005604.031
+2147479552,7991085.428
+2147479552,7972030.389
+2147479552,8021943.766
+2147479552,8004200.210
+2147479552,7981959.502
+2147479552,8015792.619
+2147479552,8025698.916
+2147479552,7920272.856
+2147479552,7987016.077
+2147479552,7993946.193
+2147479552,7976842.665
+2147479552,7932725.791
+2147479552,8001207.246
+2147479552,7992935.034
+2147479552,7994839.564
+2147479552,7953781.000
+2147479552,7995609.458
+2147479552,7991498.621
+2147479552,7981376.428
+2147479552,8019860.285
+2147479552,8010076.783
+2147479552,7947939.147
+2147479552,7991493.535
+2147479552,8007070.496
+2147479552,7995804.714
+2147479552,7988939.304
+2147479552,7975442.967
+2147479552,7930282.212
+2147479552,7975682.920
+2147479552,7989355.196
+2147479552,7970851.592
+2147479552,7940425.011
+2147479552,8035883.231
+2147479552,7987103.927
+2147479552,8010144.734
+2147479552,7832545.204
+2147479552,7943871.723
+2147479552,8001202.057
+2147479552,7991649.426
+2147479552,8006330.518
+2147479552,8009843.751
+2147479552,8002447.011
+2147479552,7875281.291
+2147479552,8008141.746
+2147479552,7972849.607
+2147479552,7987483.153
+2147479552,7971092.541
+2147479552,7940162.464
+2147479552,8009365.216
+2147479552,7854549.375
+2147479552,8006580.769
+2147479552,7948876.345
diff --git a/dma/bw_all.CSV b/dma/bw_all.CSV
new file mode 100644
index 0000000..98226cf
--- /dev/null
+++ b/dma/bw_all.CSV
@@ -0,0 +1,4 @@
+bytes,size,VANILLA,VANILLA_err,FALCO,FALCO_err,TETRA,TETRA_err,TRACE,TRACE_err
+536870912,512M,8170.113520,32.870435,,,,,,
+1073741824,1G,7971.435763,26.357252,,,,,,
+2147479552,2G,7788.278555,40.186783,,,,,,
diff --git a/dma/combine.py b/dma/combine.py
new file mode 100755
index 0000000..7397449
--- /dev/null
+++ b/dma/combine.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python3
+
+import csv
+import glob
+import math
+from collections import defaultdict
+from pathlib import Path
+
+
+LABELS = ["VANILLA", "FALCO", "TETRA", "TRACE"]
+
+
+def label_from_path(path: str, prefix: str) -> str:
+ stem = Path(path).stem
+ if stem.startswith(prefix):
+ stem = stem[len(prefix):]
+ return stem.upper()
+
+
+def format_size(n: int) -> str:
+ gib = 1024 ** 3
+ mib = 1024 ** 2
+ kib = 1024
+
+ if n >= gib:
+ v = n / gib
+ if abs(v - round(v)) < 0.03:
+ return f"{int(round(v))}G"
+ return f"{v:.1f}G"
+
+ if n >= mib:
+ v = n / mib
+ if abs(v - round(v)) < 0.03:
+ return f"{int(round(v))}M"
+ return f"{round(n / 1_000_000)}M"
+
+ if n >= kib:
+ return f"{round(n / 1000)}K"
+
+ return f"{n}B"
+
+
+def mean(xs):
+ return sum(xs) / len(xs)
+
+
+def stddev(xs):
+ m = mean(xs)
+ return math.sqrt(sum((x - m) ** 2 for x in xs) / len(xs))
+
+
+def prepare_times():
+ groups = defaultdict(list)
+
+ for path in sorted(glob.glob("times_*.csv")):
+ label = label_from_path(path, "times_")
+
+ if label not in LABELS:
+ print(f"Skipping unknown latency label: {path}")
+ continue
+
+ with open(path, newline="") as f:
+ r = csv.DictReader(f)
+ if r.fieldnames != ["bytes", "time_usec"]:
+ raise ValueError(f"{path}: expected bytes,time_usec, got {r.fieldnames}")
+
+ for row in r:
+ nbytes = int(row["bytes"])
+ time_usec = float(row["time_usec"])
+ groups[(label, nbytes)].append(time_usec)
+
+ sizes = sorted({nbytes for (_, nbytes) in groups.keys()})
+
+ fieldnames = ["bytes"]
+ for label in LABELS:
+ fieldnames += [f"{label}_time_usec", f"{label}_cdf"]
+
+ with open("times_all.CSV", "w", newline="") as f:
+ w = csv.DictWriter(f, fieldnames=fieldnames)
+ w.writeheader()
+
+ for nbytes in sizes:
+ per_label = {}
+ max_n = 0
+
+ for label in LABELS:
+ values = sorted(groups.get((label, nbytes), []))
+ n = len(values)
+ max_n = max(max_n, n)
+
+ per_label[label] = [
+ (v, (i + 1) / n) for i, v in enumerate(values)
+ ] if n else []
+
+ for i in range(max_n):
+ row = {"bytes": nbytes}
+
+ for label in LABELS:
+ if i < len(per_label[label]):
+ t, cdf = per_label[label][i]
+ row[f"{label}_time_usec"] = f"{t / 1000.0:.6f}"
+ row[f"{label}_cdf"] = f"{cdf:.9f}"
+ else:
+ row[f"{label}_time_usec"] = ""
+ row[f"{label}_cdf"] = ""
+
+ w.writerow(row)
+
+ print("Wrote times_all.CSV")
+
+
+def prepare_bw():
+ groups = defaultdict(list)
+
+ for path in sorted(glob.glob("bw_*.csv")):
+ label = label_from_path(path, "bw_")
+
+ if label not in LABELS:
+ print(f"Skipping unknown bandwidth label: {path}")
+ continue
+
+ with open(path, newline="") as f:
+ r = csv.DictReader(f)
+ if r.fieldnames != ["bytes", "bw_KiBps"]:
+ raise ValueError(f"{path}: expected bytes,bw_KiBps, got {r.fieldnames}")
+
+ for row in r:
+ nbytes = int(row["bytes"])
+ bw_mibps = float(row["bw_KiBps"]) / 1024.0
+ groups[(label, nbytes)].append(bw_mibps)
+
+ sizes = sorted({nbytes for (_, nbytes) in groups.keys()})
+
+ fieldnames = ["bytes", "size"]
+ for label in LABELS:
+ fieldnames += [label, f"{label}_err"]
+
+ with open("bw_all.CSV", "w", newline="") as f:
+ w = csv.DictWriter(f, fieldnames=fieldnames)
+ w.writeheader()
+
+ for nbytes in sizes:
+ row = {
+ "bytes": nbytes,
+ "size": format_size(nbytes),
+ }
+
+ for label in LABELS:
+ values = groups.get((label, nbytes), [])
+
+ if values:
+ row[label] = f"{mean(values):.6f}"
+ row[f"{label}_err"] = f"{stddev(values):.6f}"
+ else:
+ row[label] = ""
+ row[f"{label}_err"] = ""
+
+ w.writerow(row)
+
+ print("Wrote bw_all.CSV")
+
+
+def main():
+ prepare_times()
+ prepare_bw()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/dma/doca_dma_host_recv b/dma/doca_dma_host_recv
new file mode 100755
index 0000000..b99bc37
--- /dev/null
+++ b/dma/doca_dma_host_recv
Binary files differ
diff --git a/dma/host_recv.c b/dma/host_recv.c
new file mode 100644
index 0000000..9fdffab
--- /dev/null
+++ b/dma/host_recv.c
@@ -0,0 +1,251 @@
+#define _GNU_SOURCE
+
+#include <doca_error.h>
+#include <doca_dev.h>
+#include <doca_mmap.h>
+
+#include <errno.h>
+#include <getopt.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+
+#define META_MAGIC 0x444f4341444d4131ULL /* "DOCADMA1" */
+#define DEFAULT_DESC_PATH "descriptor.bin"
+#define DEFAULT_BUF_PATH "buffer.json"
+
+static void die_errno(const char *what)
+{
+ fprintf(stderr, "%s: %s\n", what, strerror(errno));
+ exit(EXIT_FAILURE);
+}
+
+static void die_doca(const char *what, doca_error_t err)
+{
+ fprintf(stderr, "%s: DOCA error code %d\n", what, (int)err);
+ exit(EXIT_FAILURE);
+}
+
+static int write_file_all(const char *path, const void *data, size_t len)
+{
+ FILE *f = fopen(path, "wb");
+
+ if (f == NULL)
+ return -1;
+
+ if (len > 0 && fwrite(data, 1, len, f) != len) {
+ fclose(f);
+ return -1;
+ }
+
+ if (fclose(f) != 0)
+ return -1;
+
+ return 0;
+}
+
+static int write_remote_buffer_json(const char *path, uintptr_t addr, size_t len)
+{
+ FILE *f = fopen(path, "w");
+
+ if (f == NULL)
+ return -1;
+
+ fprintf(f,
+ "{\n"
+ " \"magic\": \"0x%016" PRIx64 "\",\n"
+ " \"addr\": \"0x%016" PRIxPTR "\",\n"
+ " \"len\": %" PRIu64 "\n"
+ "}\n",
+ (uint64_t)META_MAGIC,
+ addr,
+ (uint64_t)len);
+
+ if (fclose(f) != 0)
+ return -1;
+
+ return 0;
+}
+
+static doca_error_t open_doca_device_by_pci(const char *pci_addr,
+ struct doca_dev **dev)
+{
+ struct doca_devinfo **dev_list = NULL;
+ uint32_t nb_devs = 0;
+ doca_error_t result;
+ uint32_t i;
+
+ result = doca_devinfo_create_list(&dev_list, &nb_devs);
+ if (result != DOCA_SUCCESS)
+ return result;
+
+ for (i = 0; i < nb_devs; i++) {
+ uint8_t is_equal = 0;
+
+ if (pci_addr == NULL) {
+ result = doca_dev_open(dev_list[i], dev);
+ doca_devinfo_destroy_list(dev_list);
+ return result;
+ }
+
+ result = doca_devinfo_is_equal_pci_addr(dev_list[i],
+ pci_addr,
+ &is_equal);
+ if (result == DOCA_SUCCESS && is_equal) {
+ result = doca_dev_open(dev_list[i], dev);
+ doca_devinfo_destroy_list(dev_list);
+ return result;
+ }
+ }
+
+ doca_devinfo_destroy_list(dev_list);
+ return DOCA_ERROR_NOT_FOUND;
+}
+
+static doca_error_t create_started_host_mmap(struct doca_dev *dev,
+ void *addr,
+ size_t len,
+ struct doca_mmap **mmap)
+{
+ doca_error_t result;
+
+ /*
+ * DOCA 2.x commonly uses:
+ * doca_mmap_create(const union doca_data *user_data, struct doca_mmap **mmap)
+ */
+ result = doca_mmap_create(mmap);
+ if (result != DOCA_SUCCESS)
+ return result;
+
+ result = doca_mmap_set_memrange(*mmap, addr, len);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ result = doca_mmap_set_permissions(*mmap, DOCA_ACCESS_FLAG_PCI_READ_WRITE);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ result = doca_mmap_add_dev(*mmap, dev);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ result = doca_mmap_start(*mmap);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ return DOCA_SUCCESS;
+
+destroy:
+ doca_mmap_destroy(*mmap);
+ *mmap = NULL;
+ return result;
+}
+
+static void usage(const char *prog)
+{
+ fprintf(stderr,
+ "Usage: %s -p <host-pci-bdf> -s <bytes> -o <output-file> "
+ "[-d descriptor.bin] [-b buffer.json]\n\n"
+ "Example:\n"
+ " sudo %s -p 0000:3b:00.0 -s 268435456 -o received_256M.bin\n",
+ prog, prog);
+}
+
+int main(int argc, char **argv)
+{
+ const char *pci = NULL;
+ const char *out_path = NULL;
+ const char *desc_path = DEFAULT_DESC_PATH;
+ const char *buf_path = DEFAULT_BUF_PATH;
+ size_t size = 0;
+
+ struct doca_dev *dev = NULL;
+ struct doca_mmap *mmap = NULL;
+
+ void *host_buf = NULL;
+ const void *export_desc = NULL;
+ size_t export_desc_len = 0;
+
+ int opt;
+ doca_error_t result;
+
+ while ((opt = getopt(argc, argv, "p:s:o:d:b:h")) != -1) {
+ switch (opt) {
+ case 'p':
+ pci = optarg;
+ break;
+ case 's':
+ size = strtoull(optarg, NULL, 0);
+ break;
+ case 'o':
+ out_path = optarg;
+ break;
+ case 'd':
+ desc_path = optarg;
+ break;
+ case 'b':
+ buf_path = optarg;
+ break;
+ case 'h':
+ default:
+ usage(argv[0]);
+ return EXIT_FAILURE;
+ }
+ }
+
+ if (pci == NULL || out_path == NULL || size == 0) {
+ usage(argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ result = open_doca_device_by_pci(pci, &dev);
+ if (result != DOCA_SUCCESS)
+ die_doca("open_doca_device_by_pci", result);
+
+ if (posix_memalign(&host_buf, 4096, size) != 0)
+ die_errno("posix_memalign");
+
+ memset(host_buf, 0, size);
+
+ result = create_started_host_mmap(dev, host_buf, size, &mmap);
+ if (result != DOCA_SUCCESS)
+ die_doca("create_started_host_mmap", result);
+
+ result = doca_mmap_export_pci(mmap, dev, &export_desc, &export_desc_len);
+ if (result != DOCA_SUCCESS)
+ die_doca("doca_mmap_export_pci", result);
+
+ if (export_desc == NULL || export_desc_len == 0) {
+ fprintf(stderr, "doca_mmap_export_pci returned empty descriptor\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (write_file_all(desc_path, export_desc, export_desc_len) != 0)
+ die_errno("write descriptor");
+
+ if (write_remote_buffer_json(buf_path, (uintptr_t)host_buf, size) != 0)
+ die_errno("write buffer metadata");
+
+ printf("Host receive buffer exported.\n");
+ printf(" descriptor: %s (%zu bytes)\n", desc_path, export_desc_len);
+ printf(" buffer: %s\n", buf_path);
+ printf(" addr: 0x%016" PRIxPTR "\n", (uintptr_t)host_buf);
+ printf(" len: %zu\n", size);
+ printf("\nCopy %s and %s to the DPU, run dpu sender, then press ENTER here.\n",
+ desc_path, buf_path);
+
+ (void)getchar();
+
+ if (write_file_all(out_path, host_buf, size) != 0)
+ die_errno("write output file");
+
+ printf("Wrote host buffer to %s\n", out_path);
+
+ doca_mmap_destroy(mmap);
+ doca_dev_close(dev);
+ free(host_buf);
+
+ return EXIT_SUCCESS;
+}
diff --git a/dma/run.sh b/dma/run.sh
new file mode 100755
index 0000000..f9daba2
--- /dev/null
+++ b/dma/run.sh
@@ -0,0 +1,219 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+parse_size() {
+ local input="$1"
+ local number suffix
+
+ if [[ "$input" =~ ^([0-9]+)([KkMmGg]?)$ ]]; then
+ number="${BASH_REMATCH[1]}"
+ suffix="${BASH_REMATCH[2]}"
+
+ case "$suffix" in
+ K|k) echo $((number * 1024)) ;;
+ M|m) echo $((number * 1024 * 1024)) ;;
+ G|g) echo $((number * 1024 * 1024 * 1024)) ;;
+ "") echo "$number" ;;
+ *) return 1 ;;
+ esac
+ else
+ echo "Invalid size: $input" >&2
+ return 1
+ fi
+}
+
+cleanup() {
+ rm -f buffer.json descriptor.bin host_recv.stdin
+}
+trap cleanup EXIT INT TERM
+
+if [[ $# -lt 4 || $# -gt 5 ]]; then
+ echo "Usage: $0 <tag> <runs> <bytes|size> <remote-input-file> [remote-log-prefix-base]"
+ echo "Example: $0 VANILLA 10 256M bins/256M.bin"
+ exit 1
+fi
+
+TAG="$1"
+RUNS="$2"
+DEBUG_BYTES="$(parse_size "$3")"
+REMOTE_INPUT="$4"
+REMOTE_PREFIX_BASE="${TAG}_$3"
+
+SSH_KEY="$HOME/.ssh/id_ed25519"
+REMOTE_HOST="ubuntu@143.248.53.46"
+REMOTE_DIR="/home/ubuntu/siho-benchmark/dma"
+
+DEBUG_OUT="./test.bin"
+
+# Host-side PCI BDF toward DPU.
+PCI_TO_DPU="0000:5e:00.0"
+
+# DPU-side PCI BDF.
+DPU_PCI="03:00.0"
+
+# DPU-side wrapper script.
+DPU_SCRIPT="./run.sh"
+
+TIMES_CSV="times_${TAG}.csv"
+BW_CSV="bw_${TAG}.csv"
+
+SSH_OPTS=(
+-i "$SSH_KEY"
+-n
+-o BatchMode=yes
+-o StrictHostKeyChecking=accept-new
+)
+
+SCP_OPTS=(
+-i "$SSH_KEY"
+-o BatchMode=yes
+-o StrictHostKeyChecking=accept-new
+)
+
+echo "====="
+echo "SIHO'S DMA BENCHMARKING"
+echo "SSH KEY LOCATION: $SSH_KEY"
+echo "REMOTE HOST: $REMOTE_HOST"
+echo "REMOTE DIR: $REMOTE_DIR"
+echo "TAG: $TAG"
+echo "HOST PCIE ADDRESS TO DPU: $PCI_TO_DPU"
+echo "DPU PCIE ADDRESS: $DPU_PCI"
+echo "RUNS: $RUNS"
+echo "BYTES: $DEBUG_BYTES"
+echo "REMOTE INPUT: $REMOTE_INPUT"
+echo "====="
+echo "PROCEED (y/N)?"
+
+read -r proceed
+
+if [[ "${proceed:-}" != "y" ]]; then
+ echo "TERMINATING..."
+ exit 0
+fi
+
+sudo -v
+
+for i in $(seq 1 "$RUNS"); do
+ echo "===== RUN $i/$RUNS ====="
+
+ rm -f descriptor.bin buffer.json host_recv.stdin "$DEBUG_OUT"
+ mkfifo host_recv.stdin
+
+ # Open FIFO read-write so the receiver does not get accidental EOF.
+ exec 3<>host_recv.stdin
+
+ sudo -n ./doca_dma_host_recv \
+ -p "$PCI_TO_DPU" \
+ -o "$DEBUG_OUT" \
+ -s "$DEBUG_BYTES" \
+ < host_recv.stdin &
+ host_pid=$!
+
+ ok=0
+ for _ in $(seq 1 100); do
+ if [[ -s descriptor.bin && -s buffer.json ]]; then
+ ok=1
+ break
+ fi
+
+ sleep 0.1
+ done
+
+ if [[ "$ok" != "1" ]]; then
+ echo "ERROR: descriptor.bin or buffer.json was not generated within timeout"
+ echo "host_pid=$host_pid"
+
+ if kill -0 "$host_pid" 2>/dev/null; then
+ echo "host receiver still appears to be running"
+ else
+ echo "host receiver process is not visible anymore"
+ fi
+
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&- 2>/dev/null || true
+ rm -f host_recv.stdin
+ exit 1
+ fi
+
+ echo "[host] Copying descriptor.bin and buffer.json to DPU..."
+ if ! scp "${SCP_OPTS[@]}" descriptor.bin buffer.json "$REMOTE_HOST:$REMOTE_DIR/"; then
+ echo "ERROR: scp failed"
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&-
+ exit 1
+ fi
+
+ echo "[dpu] Running DMA sender through wrapper..."
+ if ! dpu_out="$(
+ ssh "${SSH_OPTS[@]}" "$REMOTE_HOST" \
+ "cd '$REMOTE_DIR' && sudo -n '$DPU_SCRIPT' '$REMOTE_PREFIX_BASE' '$DPU_PCI' '$REMOTE_INPUT'" \
+ 2>&1
+ )"; then
+ echo "ERROR: DPU sender failed"
+ echo "$dpu_out"
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&-
+ exit 1
+ fi
+
+ bytes="$(awk '/bytes:/ {print $2}' <<< "$dpu_out" | tail -n1)"
+ time_val="$(awk '/time:/ {print $2}' <<< "$dpu_out" | tail -n1)"
+ time_unit="$(awk '/time:/ {print $3}' <<< "$dpu_out" | tail -n1)"
+ bw_val="$(awk '/BW:/ {print $2}' <<< "$dpu_out" | tail -n1)"
+ bw_unit="$(awk '/BW:/ {print $3}' <<< "$dpu_out" | tail -n1)"
+
+ if [[ -z "${bytes:-}" || -z "${time_val:-}" || -z "${bw_val:-}" ]]; then
+ echo "ERROR: failed to parse DPU output"
+ echo "$dpu_out"
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&-
+ exit 1
+ fi
+
+ # Convert time to usec.
+ case "$time_unit" in
+ usec) time_usec="$time_val" ;;
+ msec) time_usec="$(awk -v x="$time_val" 'BEGIN { printf "%.6f", x * 1000.0 }')" ;;
+ sec) time_usec="$(awk -v x="$time_val" 'BEGIN { printf "%.6f", x * 1000000.0 }')" ;;
+ nsec) time_usec="$(awk -v x="$time_val" 'BEGIN { printf "%.6f", x / 1000.0 }')" ;;
+ *) time_usec="$time_val" ;;
+ esac
+
+ # Convert bandwidth to KiB/s.
+ case "$bw_unit" in
+ KiB/s|KiBps) bw_kibps="$bw_val" ;;
+ MiB/s|MiBps) bw_kibps="$(awk -v x="$bw_val" 'BEGIN { printf "%.6f", x * 1024.0 }')" ;;
+ GiB/s|GiBps) bw_kibps="$(awk -v x="$bw_val" 'BEGIN { printf "%.6f", x * 1024.0 * 1024.0 }')" ;;
+ B/s|Bps) bw_kibps="$(awk -v x="$bw_val" 'BEGIN { printf "%.6f", x / 1024.0 }')" ;;
+ *) bw_kibps="$bw_val" ;;
+ esac
+
+ if [ ! -f "$TIMES_CSV" ]; then
+ echo "bytes,time_usec" > "$TIMES_CSV"
+ fi
+
+ if [ ! -f "$BW_CSV" ]; then
+ echo "bytes,bw_KiBps" > "$BW_CSV"
+ fi
+
+ echo "$bytes,$time_usec" >> "$TIMES_CSV"
+ echo "$bytes,$bw_kibps" >> "$BW_CSV"
+
+ echo "[host] Releasing host receiver..."
+ printf '\n' >&3
+ exec 3>&-
+
+ if ! wait "$host_pid"; then
+ echo "ERROR: host receiver failed"
+ exit 1
+ fi
+
+ rm -f host_recv.stdin
+
+ echo "[result] bytes=$bytes time_usec=$time_usec bw_KiBps=$bw_kibps"
+ echo "===== RUN $i/$RUNS DONE ====="
+done
+
+echo "Wrote: $TIMES_CSV"
+echo "Wrote: $BW_CSV"
diff --git a/dma/sum.sh b/dma/sum.sh
new file mode 100755
index 0000000..feae470
--- /dev/null
+++ b/dma/sum.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -euo pipefail
+
+
+ #times_FALCO.csv \
+ #times_TETRA.csv \
+ #times_TRACE.csv \
+ #bw_FALCO.csv \
+ #bw_TETRA.csv \
+ #bw_TRACE.csv \
+
+./analyze_time.py \
+ --unit msec \
+ --out time \
+ times_VANILLA.csv \
+ | tee ./summary/times.txt
+./analyze_bw.py \
+ --unit MiBps \
+ --out bw \
+ bw_VANILLA.csv \
+ | tee ./summary/bw.txt
diff --git a/dma/times_VANILLA.csv b/dma/times_VANILLA.csv
new file mode 100644
index 0000000..4269925
--- /dev/null
+++ b/dma/times_VANILLA.csv
@@ -0,0 +1,1348 @@
+bytes,time_usec
+536870912,63489.795000
+536870912,62984.421000
+536870912,62713.422000
+536870912,63058.195000
+536870912,62965.014000
+536870912,62855.561000
+536870912,62650.012000
+536870912,63074.874000
+536870912,62584.804000
+536870912,63134.707000
+536870912,63028.091000
+536870912,62681.548000
+536870912,62739.579000
+536870912,62804.091000
+536870912,62744.142000
+536870912,63509.868000
+536870912,62697.951000
+536870912,62564.218000
+536870912,62482.651000
+536870912,62636.890000
+536870912,62695.587000
+536870912,62278.528000
+536870912,62776.428000
+536870912,62801.547000
+536870912,62893.508000
+536870912,62588.838000
+536870912,62543.189000
+536870912,62410.136000
+536870912,62677.309000
+536870912,62455.221000
+536870912,63020.347000
+536870912,62818.725000
+536870912,62863.360000
+536870912,62589.763000
+536870912,62541.721000
+536870912,62757.261000
+536870912,62529.262000
+536870912,62207.045000
+536870912,62634.045000
+536870912,62773.077000
+536870912,62381.274000
+536870912,62746.201000
+536870912,62698.327000
+536870912,63057.806000
+536870912,62934.840000
+536870912,62646.212000
+536870912,63026.353000
+536870912,62676.516000
+536870912,62879.057000
+536870912,62982.650000
+536870912,63180.418000
+536870912,62751.229000
+536870912,63048.517000
+536870912,62773.314000
+536870912,62734.044000
+536870912,62572.787000
+536870912,63607.369000
+536870912,62564.235000
+536870912,62855.877000
+536870912,62959.419000
+536870912,62415.058000
+536870912,62309.991000
+536870912,62785.897000
+536870912,62690.258000
+536870912,62415.332000
+536870912,62441.645000
+536870912,62729.018000
+536870912,62478.677000
+536870912,62558.849000
+536870912,62680.513000
+536870912,62624.220000
+536870912,62564.798000
+536870912,62725.861000
+536870912,62318.913000
+536870912,62945.061000
+536870912,62785.693000
+536870912,63015.685000
+536870912,62728.146000
+536870912,62249.735000
+536870912,62251.258000
+536870912,62325.861000
+536870912,62432.666000
+536870912,63447.784000
+536870912,62602.179000
+536870912,62309.518000
+536870912,63086.085000
+536870912,62583.878000
+536870912,62786.236000
+536870912,62613.086000
+536870912,62547.216000
+536870912,62664.777000
+536870912,62807.122000
+536870912,62594.952000
+536870912,62608.381000
+536870912,62546.490000
+536870912,62700.423000
+536870912,63168.508000
+536870912,62800.671000
+536870912,62830.069000
+536870912,62753.804000
+536870912,62560.245000
+536870912,62382.812000
+536870912,62333.384000
+536870912,62656.923000
+536870912,62472.523000
+536870912,62575.925000
+536870912,62902.778000
+536870912,62438.804000
+536870912,62884.779000
+536870912,62711.720000
+536870912,62941.834000
+536870912,62278.108000
+536870912,62802.146000
+536870912,62639.431000
+536870912,62523.417000
+536870912,62478.105000
+536870912,62862.625000
+536870912,62614.423000
+536870912,62175.452000
+536870912,62564.245000
+536870912,62260.623000
+536870912,63021.730000
+536870912,62353.663000
+536870912,62987.958000
+536870912,62714.081000
+536870912,62875.480000
+536870912,62608.377000
+536870912,62547.835000
+536870912,62825.203000
+536870912,63031.471000
+536870912,62594.279000
+536870912,62432.563000
+536870912,62572.928000
+536870912,62908.543000
+536870912,62573.117000
+536870912,62607.168000
+536870912,63551.153000
+536870912,62754.363000
+536870912,62769.897000
+536870912,62457.675000
+536870912,63081.472000
+536870912,62575.529000
+536870912,62738.454000
+536870912,62519.180000
+536870912,63184.155000
+536870912,62513.958000
+536870912,62637.905000
+536870912,62640.969000
+536870912,62498.890000
+536870912,62833.153000
+536870912,62780.018000
+536870912,62503.510000
+536870912,62807.078000
+536870912,62742.944000
+536870912,62403.578000
+536870912,62691.697000
+536870912,63165.921000
+536870912,62332.588000
+536870912,63133.721000
+536870912,62549.671000
+536870912,63035.128000
+536870912,62532.528000
+536870912,62592.182000
+536870912,62796.261000
+536870912,62751.735000
+536870912,62558.650000
+536870912,62931.123000
+536870912,62781.617000
+536870912,62280.346000
+536870912,62542.120000
+536870912,62516.329000
+536870912,62449.359000
+536870912,62578.119000
+536870912,63023.574000
+536870912,62333.771000
+536870912,62913.852000
+536870912,63771.759000
+536870912,62680.639000
+536870912,62819.388000
+536870912,62689.228000
+536870912,62923.446000
+536870912,62547.552000
+536870912,62818.679000
+536870912,62339.166000
+536870912,62760.738000
+536870912,62378.726000
+536870912,62289.564000
+536870912,62586.769000
+536870912,62626.293000
+536870912,62439.731000
+536870912,62305.625000
+536870912,62764.595000
+536870912,63024.823000
+536870912,62925.298000
+536870912,62542.160000
+536870912,62872.860000
+536870912,63020.087000
+536870912,62424.527000
+536870912,62937.704000
+536870912,62632.583000
+536870912,62705.855000
+536870912,62669.379000
+536870912,62676.689000
+536870912,62582.706000
+536870912,62763.066000
+536870912,62600.187000
+536870912,63001.890000
+536870912,62783.888000
+536870912,63447.465000
+536870912,62918.914000
+536870912,62284.017000
+536870912,62463.288000
+536870912,62804.774000
+536870912,62685.868000
+536870912,62981.294000
+536870912,63129.698000
+536870912,63172.788000
+536870912,62396.783000
+536870912,62805.197000
+536870912,63194.962000
+536870912,62442.165000
+536870912,62586.296000
+536870912,63062.488000
+536870912,62626.102000
+536870912,62573.197000
+536870912,62858.625000
+536870912,62708.645000
+536870912,62678.931000
+536870912,62474.981000
+536870912,62786.592000
+536870912,62787.149000
+536870912,62124.485000
+536870912,62580.338000
+536870912,62421.176000
+536870912,62566.710000
+536870912,62565.514000
+536870912,62658.089000
+536870912,62473.495000
+536870912,62729.651000
+536870912,62977.907000
+536870912,62670.804000
+536870912,62733.764000
+536870912,62683.454000
+536870912,62424.694000
+536870912,62225.992000
+536870912,62545.001000
+536870912,62606.322000
+536870912,62798.826000
+536870912,62610.269000
+536870912,62480.129000
+536870912,62479.207000
+536870912,62472.676000
+536870912,62284.099000
+536870912,62773.361000
+1073741824,128847.934000
+1073741824,128228.653000
+1073741824,128358.822000
+1073741824,129359.483000
+1073741824,127960.185000
+1073741824,128831.561000
+1073741824,129032.084000
+1073741824,128468.556000
+1073741824,128452.040000
+1073741824,128327.067000
+1073741824,128093.558000
+1073741824,128411.867000
+1073741824,130043.465000
+1073741824,128208.807000
+1073741824,127832.440000
+1073741824,128688.396000
+1073741824,128462.595000
+1073741824,127974.289000
+1073741824,128382.129000
+1073741824,128084.382000
+1073741824,128354.746000
+1073741824,128089.438000
+1073741824,128570.736000
+1073741824,128806.602000
+1073741824,128416.381000
+1073741824,128246.285000
+1073741824,128170.772000
+1073741824,128180.281000
+1073741824,128408.284000
+1073741824,128361.587000
+1073741824,127996.603000
+1073741824,128929.908000
+1073741824,128295.273000
+1073741824,128437.925000
+1073741824,128905.852000
+1073741824,128328.525000
+1073741824,128615.521000
+1073741824,127972.604000
+1073741824,128450.318000
+1073741824,127968.264000
+1073741824,128742.763000
+1073741824,128727.120000
+1073741824,128740.985000
+1073741824,128421.690000
+1073741824,129542.817000
+1073741824,129616.984000
+1073741824,128369.117000
+1073741824,127993.060000
+1073741824,128965.128000
+1073741824,128497.148000
+1073741824,128874.149000
+1073741824,128087.496000
+1073741824,128121.184000
+1073741824,128970.003000
+1073741824,127716.858000
+1073741824,128108.995000
+1073741824,128794.189000
+1073741824,128214.452000
+1073741824,128280.623000
+1073741824,128383.771000
+1073741824,129860.524000
+1073741824,128690.881000
+1073741824,128454.171000
+1073741824,128356.101000
+1073741824,128317.008000
+1073741824,128511.373000
+1073741824,128290.294000
+1073741824,128354.517000
+1073741824,128804.554000
+1073741824,128137.764000
+1073741824,128341.067000
+1073741824,128592.371000
+1073741824,128336.172000
+1073741824,128363.135000
+1073741824,128289.664000
+1073741824,128549.018000
+1073741824,128312.002000
+1073741824,128611.158000
+1073741824,127515.396000
+1073741824,128869.322000
+1073741824,128458.551000
+1073741824,128451.021000
+1073741824,128119.159000
+1073741824,128783.615000
+1073741824,128406.949000
+1073741824,128493.522000
+1073741824,129774.847000
+1073741824,128754.600000
+1073741824,128407.445000
+1073741824,128427.297000
+1073741824,127991.351000
+1073741824,128549.394000
+1073741824,128194.076000
+1073741824,128442.858000
+1073741824,128720.388000
+1073741824,128719.087000
+1073741824,128082.507000
+1073741824,127914.157000
+1073741824,128494.464000
+1073741824,128247.481000
+1073741824,128750.373000
+1073741824,128848.464000
+1073741824,128709.755000
+1073741824,128419.617000
+1073741824,128464.786000
+1073741824,128089.221000
+1073741824,128285.098000
+1073741824,127956.854000
+1073741824,128627.834000
+1073741824,128401.736000
+1073741824,128238.908000
+1073741824,128491.011000
+1073741824,128624.531000
+1073741824,127935.579000
+1073741824,128182.256000
+1073741824,127968.604000
+1073741824,128339.703000
+1073741824,128818.708000
+1073741824,129256.167000
+1073741824,128101.168000
+1073741824,128515.409000
+1073741824,128576.432000
+1073741824,128058.615000
+1073741824,127714.940000
+1073741824,128897.189000
+1073741824,128548.555000
+1073741824,128118.051000
+1073741824,128595.775000
+1073741824,128390.759000
+1073741824,128665.233000
+1073741824,128656.797000
+1073741824,128023.144000
+1073741824,128368.514000
+1073741824,128699.314000
+1073741824,128119.968000
+1073741824,128309.818000
+1073741824,128562.510000
+1073741824,128592.078000
+1073741824,128174.726000
+1073741824,128261.116000
+1073741824,127976.328000
+1073741824,128229.360000
+1073741824,128636.430000
+1073741824,129598.053000
+1073741824,128338.553000
+1073741824,127990.602000
+1073741824,128502.897000
+1073741824,128315.735000
+1073741824,128656.952000
+1073741824,127950.805000
+1073741824,128068.290000
+1073741824,128414.345000
+1073741824,129955.992000
+1073741824,128458.069000
+1073741824,128310.001000
+1073741824,128605.643000
+1073741824,128257.949000
+1073741824,129143.886000
+1073741824,128083.550000
+1073741824,128056.730000
+1073741824,128477.029000
+1073741824,127824.060000
+1073741824,128286.444000
+1073741824,128424.816000
+1073741824,128376.334000
+1073741824,128304.672000
+1073741824,128520.425000
+1073741824,128322.713000
+1073741824,128477.631000
+1073741824,128429.009000
+1073741824,128471.310000
+1073741824,129109.411000
+1073741824,128089.378000
+1073741824,127884.552000
+1073741824,128002.158000
+1073741824,128653.792000
+1073741824,128495.450000
+1073741824,128575.096000
+1073741824,128037.838000
+1073741824,127790.205000
+1073741824,128358.903000
+1073741824,129734.960000
+1073741824,128336.542000
+1073741824,128484.916000
+1073741824,128511.766000
+1073741824,128558.427000
+1073741824,128169.736000
+1073741824,128879.380000
+1073741824,128343.909000
+1073741824,128120.941000
+1073741824,130074.652000
+1073741824,128719.556000
+1073741824,128637.296000
+1073741824,128265.632000
+1073741824,127934.537000
+1073741824,128278.807000
+1073741824,128205.573000
+1073741824,128516.655000
+1073741824,128714.833000
+1073741824,128069.519000
+1073741824,128462.382000
+2147479552,263887.592000
+2147479552,267801.091000
+2147479552,261850.588000
+2147479552,262111.370000
+2147479552,265592.301000
+2147479552,261825.537000
+2147479552,262378.650000
+2147479552,263917.510000
+2147479552,266635.838000
+2147479552,261913.748000
+2147479552,261597.637000
+2147479552,264190.575000
+2147479552,262794.264000
+2147479552,262981.388000
+2147479552,261745.018000
+2147479552,266507.906000
+2147479552,262134.394000
+2147479552,262472.314000
+2147479552,261898.798000
+2147479552,261238.878000
+2147479552,263019.482000
+2147479552,264304.881000
+2147479552,262435.915000
+2147479552,261522.943000
+2147479552,262991.126000
+2147479552,261527.636000
+2147479552,264557.912000
+2147479552,262552.749000
+2147479552,265972.221000
+2147479552,262808.425000
+2147479552,262022.535000
+2147479552,262888.337000
+2147479552,264527.815000
+2147479552,262205.234000
+2147479552,262359.199000
+2147479552,261864.783000
+2147479552,261932.302000
+2147479552,263945.389000
+2147479552,262278.512000
+2147479552,262242.882000
+2147479552,261615.135000
+2147479552,261480.962000
+2147479552,264379.055000
+2147479552,261290.734000
+2147479552,262993.678000
+2147479552,261780.691000
+2147479552,261541.002000
+2147479552,262797.897000
+2147479552,262963.603000
+2147479552,261488.003000
+2147479552,262508.959000
+2147479552,261796.568000
+2147479552,262648.357000
+2147479552,264209.025000
+2147479552,261692.183000
+2147479552,266379.908000
+2147479552,261940.632000
+2147479552,261853.796000
+2147479552,262193.980000
+2147479552,264227.979000
+2147479552,261960.448000
+2147479552,262254.736000
+2147479552,261540.662000
+2147479552,265729.693000
+2147479552,262162.601000
+2147479552,262802.833000
+2147479552,262167.477000
+2147479552,261624.508000
+2147479552,261894.035000
+2147479552,261953.414000
+2147479552,264787.194000
+2147479552,262303.804000
+2147479552,262746.105000
+2147479552,262185.927000
+2147479552,263119.740000
+2147479552,266038.995000
+2147479552,261664.370000
+2147479552,262039.602000
+2147479552,262536.802000
+2147479552,267709.202000
+2147479552,261850.498000
+2147479552,261925.048000
+2147479552,262436.101000
+2147479552,263106.499000
+2147479552,264636.512000
+2147479552,262321.495000
+2147479552,261928.902000
+2147479552,262626.003000
+2147479552,263078.185000
+2147479552,264680.914000
+2147479552,262021.706000
+2147479552,265268.452000
+2147479552,261699.450000
+2147479552,264126.695000
+2147479552,262116.640000
+2147479552,262990.790000
+2147479552,263209.847000
+2147479552,263113.615000
+2147479552,262935.500000
+2147479552,261736.692000
+2147479552,262655.059000
+2147479552,262919.008000
+2147479552,261912.836000
+2147479552,264271.842000
+2147479552,262960.113000
+2147479552,262128.868000
+2147479552,262035.758000
+2147479552,263476.521000
+2147479552,263208.445000
+2147479552,262589.311000
+2147479552,262693.749000
+2147479552,262243.488000
+2147479552,263928.720000
+2147479552,262247.115000
+2147479552,266018.585000
+2147479552,264890.820000
+2147479552,264027.100000
+2147479552,265546.246000
+2147479552,262298.908000
+2147479552,262460.471000
+2147479552,261985.680000
+2147479552,266132.198000
+2147479552,262450.119000
+2147479552,262712.386000
+2147479552,262641.117000
+2147479552,265370.389000
+2147479552,264206.351000
+2147479552,261530.424000
+2147479552,265437.359000
+2147479552,261751.809000
+2147479552,262778.057000
+2147479552,262106.834000
+2147479552,264050.654000
+2147479552,262844.518000
+2147479552,265476.259000
+2147479552,266767.899000
+2147479552,262273.077000
+2147479552,263872.954000
+2147479552,262132.046000
+2147479552,262094.758000
+2147479552,262275.595000
+2147479552,267934.154000
+2147479552,265580.418000
+2147479552,262668.031000
+2147479552,261927.500000
+2147479552,261835.525000
+2147479552,264339.028000
+2147479552,263789.509000
+2147479552,262571.549000
+2147479552,262662.153000
+2147479552,262053.883000
+2147479552,261927.260000
+2147479552,262212.635000
+2147479552,262132.086000
+2147479552,263922.216000
+2147479552,262137.604000
+2147479552,262524.973000
+2147479552,262795.420000
+2147479552,265162.345000
+2147479552,262098.205000
+2147479552,262429.500000
+2147479552,262019.232000
+2147479552,266769.784000
+2147479552,262460.088000
+2147479552,263000.549000
+2147479552,261675.960000
+2147479552,262429.137000
+2147479552,262323.120000
+2147479552,264351.667000
+2147479552,261694.275000
+2147479552,262309.888000
+2147479552,261120.789000
+2147479552,265097.228000
+2147479552,262068.833000
+2147479552,263040.378000
+2147479552,263293.130000
+2147479552,263201.917000
+2147479552,263260.491000
+2147479552,261502.801000
+2147479552,262721.862000
+2147479552,265178.099000
+2147479552,261538.850000
+2147479552,262722.501000
+2147479552,262904.610000
+2147479552,264333.310000
+2147479552,261787.249000
+2147479552,265029.688000
+2147479552,262112.153000
+2147479552,261703.953000
+2147479552,261831.012000
+2147479552,264409.988000
+2147479552,262138.241000
+2147479552,261754.387000
+2147479552,261894.308000
+2147479552,262073.709000
+2147479552,264942.039000
+2147479552,261850.561000
+2147479552,262302.688000
+536870912,63184.538000
+536870912,62946.387000
+536870912,62727.237000
+536870912,62305.159000
+536870912,62733.388000
+536870912,62891.899000
+536870912,63003.721000
+536870912,63267.841000
+536870912,62697.615000
+536870912,62592.863000
+536870912,62731.366000
+536870912,62642.382000
+536870912,62450.325000
+536870912,62708.296000
+536870912,62388.391000
+536870912,62307.663000
+536870912,62371.309000
+536870912,62751.326000
+536870912,62621.796000
+536870912,62564.581000
+536870912,62621.626000
+536870912,62680.750000
+536870912,62549.701000
+536870912,62494.681000
+536870912,62355.935000
+536870912,62873.396000
+536870912,62370.466000
+536870912,62569.417000
+536870912,62810.079000
+536870912,62422.839000
+536870912,62265.579000
+536870912,62761.524000
+536870912,62711.717000
+536870912,62741.331000
+536870912,62268.859000
+536870912,62647.177000
+536870912,62701.908000
+536870912,62825.782000
+536870912,62625.436000
+536870912,62518.747000
+536870912,62802.539000
+536870912,62891.373000
+536870912,62224.148000
+536870912,62496.412000
+536870912,62282.757000
+536870912,62791.672000
+536870912,62436.766000
+536870912,62446.029000
+536870912,62730.791000
+536870912,62573.317000
+536870912,62630.808000
+536870912,62885.199000
+536870912,62158.193000
+536870912,62408.084000
+536870912,62683.497000
+536870912,62718.095000
+536870912,62538.613000
+536870912,62166.509000
+536870912,62416.403000
+536870912,62727.829000
+536870912,62428.797000
+536870912,62652.091000
+536870912,62704.899000
+536870912,62557.944000
+536870912,62697.292000
+536870912,62682.102000
+536870912,62508.295000
+536870912,62895.713000
+536870912,62756.212000
+536870912,62686.447000
+536870912,62523.836000
+536870912,62608.484000
+536870912,62812.750000
+536870912,63075.397000
+536870912,62627.934000
+536870912,62685.812000
+536870912,62364.315000
+536870912,62350.567000
+536870912,62914.824000
+536870912,62152.292000
+536870912,62677.549000
+536870912,62588.754000
+536870912,62369.384000
+536870912,62679.880000
+536870912,62519.459000
+536870912,62411.288000
+536870912,62566.193000
+536870912,62184.051000
+536870912,63898.955000
+536870912,62638.212000
+536870912,62574.500000
+536870912,62507.739000
+536870912,62812.054000
+536870912,62534.184000
+536870912,62635.814000
+536870912,62651.418000
+536870912,62929.012000
+536870912,62810.612000
+536870912,62439.295000
+536870912,62632.127000
+536870912,62582.024000
+536870912,62574.845000
+536870912,62668.810000
+536870912,62908.809000
+536870912,62801.267000
+536870912,62762.543000
+536870912,63025.736000
+536870912,62733.694000
+536870912,62870.965000
+536870912,62179.598000
+536870912,63042.286000
+536870912,62545.987000
+536870912,62725.671000
+536870912,62634.968000
+536870912,62545.827000
+536870912,62779.532000
+536870912,62588.818000
+536870912,62589.706000
+536870912,62529.361000
+536870912,62506.144000
+536870912,62666.295000
+536870912,62326.257000
+536870912,62791.795000
+536870912,62469.022000
+536870912,62140.732000
+536870912,62480.349000
+536870912,62802.879000
+536870912,62385.667000
+536870912,62730.361000
+536870912,62666.921000
+536870912,62502.175000
+536870912,62605.107000
+536870912,62665.865000
+536870912,62455.261000
+536870912,62434.002000
+536870912,62535.563000
+536870912,62633.213000
+536870912,62768.318000
+536870912,62704.995000
+536870912,62808.381000
+536870912,62794.227000
+536870912,62649.046000
+536870912,62936.775000
+536870912,62542.557000
+536870912,62642.588000
+536870912,62514.986000
+536870912,62133.164000
+536870912,62787.075000
+536870912,62667.008000
+536870912,62557.444000
+536870912,62873.542000
+536870912,63443.644000
+536870912,62604.078000
+536870912,62401.027000
+536870912,62525.505000
+536870912,62580.345000
+536870912,62533.964000
+536870912,62514.527000
+536870912,62694.411000
+536870912,62729.947000
+536870912,62569.721000
+536870912,62493.079000
+536870912,63132.656000
+536870912,62489.951000
+536870912,62526.484000
+536870912,62295.703000
+536870912,62637.859000
+536870912,62903.463000
+536870912,62853.509000
+536870912,62884.013000
+536870912,62892.116000
+536870912,62785.367000
+536870912,62835.608000
+536870912,62582.626000
+536870912,62488.099000
+536870912,62972.531000
+536870912,62549.004000
+536870912,62966.980000
+536870912,62696.280000
+536870912,63267.072000
+536870912,63325.052000
+536870912,62607.058000
+536870912,62305.991000
+536870912,62489.315000
+536870912,63084.153000
+536870912,62487.730000
+536870912,62481.109000
+536870912,62463.230000
+536870912,62330.620000
+536870912,62539.719000
+536870912,62581.887000
+536870912,62447.580000
+536870912,62858.792000
+536870912,62688.616000
+536870912,62646.179000
+536870912,62274.388000
+536870912,62689.409000
+536870912,62727.093000
+536870912,62533.974000
+536870912,62335.476000
+536870912,62848.929000
+536870912,62760.378000
+536870912,62615.908000
+536870912,62851.114000
+536870912,62550.700000
+536870912,62552.178000
+536870912,62558.493000
+536870912,62998.492000
+536870912,62721.089000
+536870912,62411.837000
+536870912,62335.209000
+536870912,62690.574000
+536870912,62865.652000
+536870912,62155.749000
+536870912,62496.659000
+536870912,62541.768000
+536870912,62527.839000
+536870912,62434.742000
+536870912,62830.566000
+536870912,62765.667000
+536870912,62701.985000
+536870912,62985.177000
+536870912,62533.501000
+536870912,62244.530000
+536870912,62478.265000
+536870912,62412.857000
+536870912,62650.518000
+536870912,62447.880000
+536870912,62720.639000
+536870912,62914.608000
+536870912,62322.953000
+536870912,62794.033000
+536870912,62890.121000
+536870912,62653.932000
+536870912,62616.294000
+536870912,62672.902000
+536870912,62872.949000
+536870912,62680.226000
+536870912,62611.788000
+536870912,62594.400000
+536870912,62540.852000
+536870912,62631.501000
+536870912,62650.012000
+536870912,62384.657000
+536870912,62671.747000
+536870912,62439.228000
+1073741824,129343.073000
+1073741824,128451.081000
+1073741824,128088.782000
+1073741824,128811.138000
+1073741824,128923.293000
+1073741824,128713.112000
+1073741824,128407.494000
+1073741824,128328.178000
+1073741824,128275.087000
+1073741824,128275.957000
+1073741824,128076.283000
+1073741824,128188.643000
+1073741824,127893.984000
+1073741824,129643.548000
+1073741824,127684.083000
+1073741824,128714.478000
+1073741824,128807.439000
+1073741824,128413.916000
+1073741824,128446.424000
+1073741824,128650.075000
+1073741824,127990.905000
+1073741824,129391.306000
+1073741824,128159.405000
+1073741824,128913.801000
+1073741824,128801.593000
+1073741824,128628.890000
+1073741824,128209.869000
+1073741824,128445.685000
+1073741824,128071.636000
+1073741824,128419.374000
+1073741824,127987.158000
+1073741824,128221.509000
+1073741824,127859.530000
+1073741824,129244.644000
+1073741824,128912.622000
+1073741824,128537.644000
+1073741824,129535.603000
+1073741824,128297.754000
+1073741824,128620.783000
+1073741824,129467.351000
+1073741824,127876.599000
+1073741824,128455.723000
+1073741824,128058.697000
+1073741824,128364.361000
+1073741824,128910.924000
+1073741824,128558.379000
+1073741824,128274.714000
+1073741824,127870.195000
+1073741824,128375.362000
+1073741824,128478.527000
+1073741824,128148.474000
+1073741824,128434.178000
+1073741824,128313.198000
+1073741824,128031.647000
+1073741824,128289.519000
+1073741824,128195.744000
+1073741824,128211.857000
+1073741824,128640.350000
+1073741824,128439.045000
+1073741824,128249.322000
+1073741824,128169.756000
+1073741824,128401.486000
+1073741824,128188.844000
+1073741824,127599.091000
+1073741824,128254.262000
+1073741824,128482.820000
+1073741824,128352.948000
+1073741824,128534.127000
+1073741824,127943.785000
+1073741824,127874.178000
+1073741824,129231.128000
+1073741824,128344.768000
+1073741824,129837.624000
+1073741824,128243.064000
+1073741824,129789.744000
+1073741824,128170.885000
+1073741824,129808.484000
+1073741824,128689.945000
+1073741824,128264.912000
+1073741824,128102.507000
+1073741824,128438.721000
+1073741824,128451.937000
+1073741824,128055.880000
+1073741824,127446.531000
+1073741824,127892.918000
+1073741824,128712.159000
+1073741824,127604.247000
+1073741824,128280.106000
+1073741824,128541.737000
+1073741824,128044.730000
+1073741824,128013.339000
+1073741824,129871.994000
+1073741824,128338.170000
+1073741824,128568.588000
+1073741824,128674.251000
+1073741824,129017.446000
+1073741824,128366.089000
+1073741824,128303.416000
+1073741824,128177.533000
+1073741824,128423.598000
+1073741824,128642.808000
+1073741824,128502.737000
+1073741824,128126.367000
+1073741824,128139.929000
+1073741824,128192.694000
+1073741824,128536.389000
+1073741824,128555.246000
+1073741824,129162.666000
+1073741824,128737.355000
+1073741824,128814.413000
+1073741824,128408.480000
+1073741824,128059.880000
+1073741824,128256.137000
+1073741824,128185.496000
+1073741824,128697.256000
+1073741824,128244.193000
+1073741824,128128.608000
+1073741824,128677.699000
+1073741824,128738.687000
+1073741824,128984.071000
+1073741824,128434.631000
+1073741824,128071.950000
+1073741824,128076.142000
+1073741824,128322.713000
+1073741824,128513.517000
+1073741824,128430.049000
+1073741824,127944.112000
+1073741824,128696.176000
+1073741824,129728.956000
+1073741824,128363.931000
+1073741824,128037.945000
+1073741824,128431.831000
+1073741824,128843.308000
+1073741824,128115.426000
+1073741824,128547.372000
+1073741824,128539.070000
+1073741824,127774.269000
+1073741824,128634.699000
+1073741824,128425.452000
+1073741824,128241.042000
+1073741824,128647.038000
+1073741824,128493.694000
+1073741824,128561.973000
+1073741824,129844.491000
+1073741824,129147.676000
+1073741824,128468.646000
+1073741824,128351.142000
+1073741824,128588.944000
+1073741824,128552.961000
+1073741824,128280.399000
+1073741824,128420.294000
+1073741824,128115.959000
+1073741824,127956.108000
+1073741824,128367.648000
+1073741824,128969.664000
+1073741824,128538.274000
+1073741824,129081.469000
+1073741824,128103.130000
+1073741824,128278.417000
+1073741824,128933.548000
+1073741824,128286.194000
+1073741824,128391.215000
+1073741824,128310.987000
+1073741824,128353.920000
+1073741824,128324.245000
+1073741824,128158.873000
+1073741824,128484.153000
+1073741824,128766.013000
+1073741824,128443.561000
+1073741824,128076.359000
+1073741824,128958.677000
+1073741824,128780.211000
+1073741824,128318.613000
+1073741824,128204.850000
+1073741824,128369.899000
+1073741824,128128.012000
+1073741824,128078.071000
+1073741824,129526.508000
+1073741824,128051.194000
+1073741824,129586.406000
+1073741824,127957.104000
+1073741824,129389.377000
+1073741824,128362.946000
+1073741824,128561.578000
+1073741824,128307.813000
+1073741824,128141.547000
+1073741824,128447.990000
+1073741824,128154.329000
+1073741824,127973.376000
+1073741824,128517.837000
+1073741824,128622.802000
+1073741824,128429.962000
+1073741824,128439.417000
+1073741824,128603.235000
+1073741824,128210.319000
+1073741824,128645.299000
+1073741824,128122.912000
+1073741824,128129.407000
+1073741824,128445.765000
+1073741824,128875.014000
+1073741824,128144.625000
+1073741824,128283.879000
+1073741824,129154.670000
+1073741824,128437.902000
+1073741824,128404.318000
+1073741824,128151.342000
+1073741824,129647.838000
+1073741824,128613.650000
+1073741824,128370.859000
+1073741824,128297.904000
+1073741824,128136.951000
+1073741824,128146.400000
+1073741824,127648.256000
+1073741824,128339.352000
+1073741824,128769.091000
+1073741824,128319.845000
+1073741824,128453.173000
+1073741824,128495.680000
+1073741824,128481.415000
+1073741824,128724.445000
+1073741824,128149.930000
+1073741824,128951.855000
+1073741824,128216.783000
+1073741824,128874.238000
+1073741824,127977.210000
+1073741824,128557.826000
+1073741824,128205.200000
+1073741824,128768.581000
+1073741824,128891.433000
+1073741824,128355.319000
+1073741824,128166.596000
+1073741824,128406.252000
+1073741824,128231.738000
+1073741824,128167.575000
+1073741824,127948.641000
+1073741824,127885.125000
+1073741824,128086.913000
+1073741824,128770.606000
+1073741824,128280.020000
+1073741824,128555.549000
+1073741824,128877.326000
+1073741824,128371.329000
+1073741824,128748.078000
+1073741824,129288.260000
+1073741824,128616.540000
+1073741824,128591.619000
+2147479552,263790.138000
+2147479552,262459.994000
+2147479552,266974.649000
+2147479552,262370.040000
+2147479552,262230.539000
+2147479552,263673.481000
+2147479552,261911.943000
+2147479552,264314.509000
+2147479552,262779.943000
+2147479552,267322.457000
+2147479552,262352.016000
+2147479552,263300.850000
+2147479552,263205.192000
+2147479552,261111.919000
+2147479552,262607.376000
+2147479552,261923.487000
+2147479552,266047.414000
+2147479552,264424.186000
+2147479552,261566.220000
+2147479552,261713.562000
+2147479552,262300.510000
+2147479552,261196.361000
+2147479552,264188.542000
+2147479552,266088.952000
+2147479552,261567.562000
+2147479552,262099.281000
+2147479552,264440.223000
+2147479552,261896.690000
+2147479552,262636.218000
+2147479552,262361.059000
+2147479552,262310.181000
+2147479552,261948.133000
+2147479552,266493.032000
+2147479552,263010.653000
+2147479552,262470.765000
+2147479552,262535.304000
+2147479552,265024.846000
+2147479552,264726.619000
+2147479552,262212.221000
+2147479552,261491.371000
+2147479552,262561.725000
+2147479552,261961.338000
+2147479552,264136.387000
+2147479552,262587.147000
+2147479552,261218.512000
+2147479552,261891.221000
+2147479552,263623.942000
+2147479552,262202.077000
+2147479552,262383.386000
+2147479552,262406.533000
+2147479552,262180.818000
+2147479552,262765.315000
+2147479552,262514.777000
+2147479552,262407.975000
+2147479552,264085.517000
+2147479552,261978.301000
+2147479552,261868.640000
+2147479552,263935.794000
+2147479552,263372.309000
+2147479552,267421.793000
+2147479552,262215.003000
+2147479552,263458.376000
+2147479552,262191.789000
+2147479552,262406.742000
+2147479552,263064.398000
+2147479552,262124.613000
+2147479552,262892.067000
+2147479552,263669.311000
+2147479552,262016.834000
+2147479552,261508.636000
+2147479552,262515.997000
+2147479552,262600.868000
+2147479552,264934.825000
+2147479552,261938.574000
+2147479552,262506.822000
+2147479552,262535.587000
+2147479552,262472.214000
+2147479552,264274.906000
+2147479552,262103.367000
+2147479552,262866.169000
+2147479552,262593.648000
+2147479552,261836.740000
+2147479552,264286.213000
+2147479552,262955.467000
+2147479552,262262.462000
+2147479552,262190.107000
+2147479552,265777.866000
+2147479552,262050.233000
+2147479552,265664.703000
+2147479552,262583.749000
+2147479552,264507.765000
+2147479552,263173.032000
+2147479552,262116.219000
+2147479552,264327.118000
+2147479552,263121.543000
+2147479552,262328.775000
+2147479552,261604.718000
+2147479552,264133.763000
+2147479552,261754.796000
+2147479552,262087.391000
+2147479552,261948.522000
+2147479552,262274.918000
+2147479552,263975.880000
+2147479552,262592.782000
+2147479552,262648.385000
+2147479552,262297.586000
+2147479552,262068.856000
+2147479552,262143.387000
+2147479552,264130.985000
+2147479552,262038.019000
+2147479552,262215.625000
+2147479552,262589.571000
+2147479552,263984.712000
+2147479552,262617.428000
+2147479552,261978.484000
+2147479552,262211.379000
+2147479552,264889.491000
+2147479552,262038.136000
+2147479552,262057.263000
+2147479552,262849.940000
+2147479552,262077.200000
+2147479552,261815.505000
+2147479552,264830.038000
+2147479552,262189.125000
+2147479552,262218.663000
+2147479552,261801.234000
+2147479552,262254.192000
+2147479552,264715.209000
+2147479552,262007.702000
+2147479552,262077.403000
+2147479552,262028.697000
+2147479552,264156.996000
+2147479552,266230.858000
+2147479552,262840.531000
+2147479552,262546.491000
+2147479552,262755.220000
+2147479552,265763.242000
+2147479552,264185.862000
+2147479552,262315.860000
+2147479552,263130.838000
+2147479552,261756.631000
+2147479552,262272.530000
+2147479552,263862.593000
+2147479552,262609.074000
+2147479552,262287.584000
+2147479552,262692.461000
+2147479552,261968.209000
+2147479552,264983.178000
+2147479552,262170.873000
+2147479552,261959.996000
+2147479552,262435.938000
+2147479552,263063.222000
+2147479552,261426.415000
+2147479552,262005.940000
+2147479552,262735.986000
+2147479552,261627.028000
+2147479552,261304.096000
+2147479552,264782.292000
+2147479552,262569.648000
+2147479552,262342.021000
+2147479552,262904.521000
+2147479552,264366.632000
+2147479552,262103.947000
+2147479552,262375.209000
+2147479552,262312.706000
+2147479552,263666.802000
+2147479552,262287.448000
+2147479552,262422.369000
+2147479552,262755.180000
+2147479552,261494.331000
+2147479552,261813.720000
+2147479552,263860.601000
+2147479552,262422.536000
+2147479552,261912.019000
+2147479552,262281.043000
+2147479552,262506.438000
+2147479552,262950.661000
+2147479552,264448.092000
+2147479552,262942.750000
+2147479552,262492.773000
+2147479552,263102.126000
+2147479552,264110.296000
+2147479552,260972.931000
+2147479552,262566.760000
+2147479552,261811.499000
+2147479552,267747.960000
+2147479552,263995.703000
+2147479552,262104.117000
+2147479552,262417.417000
+2147479552,261936.226000
+2147479552,261821.337000
+2147479552,262063.341000
+2147479552,266294.996000
+2147479552,261876.983000
+2147479552,263036.192000
+2147479552,262554.294000
+2147479552,263094.173000
+2147479552,264119.029000
+2147479552,261836.980000
+2147479552,266997.876000
+2147479552,261928.039000
+2147479552,263829.491000
diff --git a/dma/times_all.CSV b/dma/times_all.CSV
new file mode 100644
index 0000000..9a57783
--- /dev/null
+++ b/dma/times_all.CSV
@@ -0,0 +1,1348 @@
+bytes,VANILLA_time_usec,VANILLA_cdf,FALCO_time_usec,FALCO_cdf,TETRA_time_usec,TETRA_cdf,TRACE_time_usec,TRACE_cdf
+536870912,62.124485,0.002000000,,,,,,
+536870912,62.133164,0.004000000,,,,,,
+536870912,62.140732,0.006000000,,,,,,
+536870912,62.152292,0.008000000,,,,,,
+536870912,62.155749,0.010000000,,,,,,
+536870912,62.158193,0.012000000,,,,,,
+536870912,62.166509,0.014000000,,,,,,
+536870912,62.175452,0.016000000,,,,,,
+536870912,62.179598,0.018000000,,,,,,
+536870912,62.184051,0.020000000,,,,,,
+536870912,62.207045,0.022000000,,,,,,
+536870912,62.224148,0.024000000,,,,,,
+536870912,62.225992,0.026000000,,,,,,
+536870912,62.244530,0.028000000,,,,,,
+536870912,62.249735,0.030000000,,,,,,
+536870912,62.251258,0.032000000,,,,,,
+536870912,62.260623,0.034000000,,,,,,
+536870912,62.265579,0.036000000,,,,,,
+536870912,62.268859,0.038000000,,,,,,
+536870912,62.274388,0.040000000,,,,,,
+536870912,62.278108,0.042000000,,,,,,
+536870912,62.278528,0.044000000,,,,,,
+536870912,62.280346,0.046000000,,,,,,
+536870912,62.282757,0.048000000,,,,,,
+536870912,62.284017,0.050000000,,,,,,
+536870912,62.284099,0.052000000,,,,,,
+536870912,62.289564,0.054000000,,,,,,
+536870912,62.295703,0.056000000,,,,,,
+536870912,62.305159,0.058000000,,,,,,
+536870912,62.305625,0.060000000,,,,,,
+536870912,62.305991,0.062000000,,,,,,
+536870912,62.307663,0.064000000,,,,,,
+536870912,62.309518,0.066000000,,,,,,
+536870912,62.309991,0.068000000,,,,,,
+536870912,62.318913,0.070000000,,,,,,
+536870912,62.322953,0.072000000,,,,,,
+536870912,62.325861,0.074000000,,,,,,
+536870912,62.326257,0.076000000,,,,,,
+536870912,62.330620,0.078000000,,,,,,
+536870912,62.332588,0.080000000,,,,,,
+536870912,62.333384,0.082000000,,,,,,
+536870912,62.333771,0.084000000,,,,,,
+536870912,62.335209,0.086000000,,,,,,
+536870912,62.335476,0.088000000,,,,,,
+536870912,62.339166,0.090000000,,,,,,
+536870912,62.350567,0.092000000,,,,,,
+536870912,62.353663,0.094000000,,,,,,
+536870912,62.355935,0.096000000,,,,,,
+536870912,62.364315,0.098000000,,,,,,
+536870912,62.369384,0.100000000,,,,,,
+536870912,62.370466,0.102000000,,,,,,
+536870912,62.371309,0.104000000,,,,,,
+536870912,62.378726,0.106000000,,,,,,
+536870912,62.381274,0.108000000,,,,,,
+536870912,62.382812,0.110000000,,,,,,
+536870912,62.384657,0.112000000,,,,,,
+536870912,62.385667,0.114000000,,,,,,
+536870912,62.388391,0.116000000,,,,,,
+536870912,62.396783,0.118000000,,,,,,
+536870912,62.401027,0.120000000,,,,,,
+536870912,62.403578,0.122000000,,,,,,
+536870912,62.408084,0.124000000,,,,,,
+536870912,62.410136,0.126000000,,,,,,
+536870912,62.411288,0.128000000,,,,,,
+536870912,62.411837,0.130000000,,,,,,
+536870912,62.412857,0.132000000,,,,,,
+536870912,62.415058,0.134000000,,,,,,
+536870912,62.415332,0.136000000,,,,,,
+536870912,62.416403,0.138000000,,,,,,
+536870912,62.421176,0.140000000,,,,,,
+536870912,62.422839,0.142000000,,,,,,
+536870912,62.424527,0.144000000,,,,,,
+536870912,62.424694,0.146000000,,,,,,
+536870912,62.428797,0.148000000,,,,,,
+536870912,62.432563,0.150000000,,,,,,
+536870912,62.432666,0.152000000,,,,,,
+536870912,62.434002,0.154000000,,,,,,
+536870912,62.434742,0.156000000,,,,,,
+536870912,62.436766,0.158000000,,,,,,
+536870912,62.438804,0.160000000,,,,,,
+536870912,62.439228,0.162000000,,,,,,
+536870912,62.439295,0.164000000,,,,,,
+536870912,62.439731,0.166000000,,,,,,
+536870912,62.441645,0.168000000,,,,,,
+536870912,62.442165,0.170000000,,,,,,
+536870912,62.446029,0.172000000,,,,,,
+536870912,62.447580,0.174000000,,,,,,
+536870912,62.447880,0.176000000,,,,,,
+536870912,62.449359,0.178000000,,,,,,
+536870912,62.450325,0.180000000,,,,,,
+536870912,62.455221,0.182000000,,,,,,
+536870912,62.455261,0.184000000,,,,,,
+536870912,62.457675,0.186000000,,,,,,
+536870912,62.463230,0.188000000,,,,,,
+536870912,62.463288,0.190000000,,,,,,
+536870912,62.469022,0.192000000,,,,,,
+536870912,62.472523,0.194000000,,,,,,
+536870912,62.472676,0.196000000,,,,,,
+536870912,62.473495,0.198000000,,,,,,
+536870912,62.474981,0.200000000,,,,,,
+536870912,62.478105,0.202000000,,,,,,
+536870912,62.478265,0.204000000,,,,,,
+536870912,62.478677,0.206000000,,,,,,
+536870912,62.479207,0.208000000,,,,,,
+536870912,62.480129,0.210000000,,,,,,
+536870912,62.480349,0.212000000,,,,,,
+536870912,62.481109,0.214000000,,,,,,
+536870912,62.482651,0.216000000,,,,,,
+536870912,62.487730,0.218000000,,,,,,
+536870912,62.488099,0.220000000,,,,,,
+536870912,62.489315,0.222000000,,,,,,
+536870912,62.489951,0.224000000,,,,,,
+536870912,62.493079,0.226000000,,,,,,
+536870912,62.494681,0.228000000,,,,,,
+536870912,62.496412,0.230000000,,,,,,
+536870912,62.496659,0.232000000,,,,,,
+536870912,62.498890,0.234000000,,,,,,
+536870912,62.502175,0.236000000,,,,,,
+536870912,62.503510,0.238000000,,,,,,
+536870912,62.506144,0.240000000,,,,,,
+536870912,62.507739,0.242000000,,,,,,
+536870912,62.508295,0.244000000,,,,,,
+536870912,62.513958,0.246000000,,,,,,
+536870912,62.514527,0.248000000,,,,,,
+536870912,62.514986,0.250000000,,,,,,
+536870912,62.516329,0.252000000,,,,,,
+536870912,62.518747,0.254000000,,,,,,
+536870912,62.519180,0.256000000,,,,,,
+536870912,62.519459,0.258000000,,,,,,
+536870912,62.523417,0.260000000,,,,,,
+536870912,62.523836,0.262000000,,,,,,
+536870912,62.525505,0.264000000,,,,,,
+536870912,62.526484,0.266000000,,,,,,
+536870912,62.527839,0.268000000,,,,,,
+536870912,62.529262,0.270000000,,,,,,
+536870912,62.529361,0.272000000,,,,,,
+536870912,62.532528,0.274000000,,,,,,
+536870912,62.533501,0.276000000,,,,,,
+536870912,62.533964,0.278000000,,,,,,
+536870912,62.533974,0.280000000,,,,,,
+536870912,62.534184,0.282000000,,,,,,
+536870912,62.535563,0.284000000,,,,,,
+536870912,62.538613,0.286000000,,,,,,
+536870912,62.539719,0.288000000,,,,,,
+536870912,62.540852,0.290000000,,,,,,
+536870912,62.541721,0.292000000,,,,,,
+536870912,62.541768,0.294000000,,,,,,
+536870912,62.542120,0.296000000,,,,,,
+536870912,62.542160,0.298000000,,,,,,
+536870912,62.542557,0.300000000,,,,,,
+536870912,62.543189,0.302000000,,,,,,
+536870912,62.545001,0.304000000,,,,,,
+536870912,62.545827,0.306000000,,,,,,
+536870912,62.545987,0.308000000,,,,,,
+536870912,62.546490,0.310000000,,,,,,
+536870912,62.547216,0.312000000,,,,,,
+536870912,62.547552,0.314000000,,,,,,
+536870912,62.547835,0.316000000,,,,,,
+536870912,62.549004,0.318000000,,,,,,
+536870912,62.549671,0.320000000,,,,,,
+536870912,62.549701,0.322000000,,,,,,
+536870912,62.550700,0.324000000,,,,,,
+536870912,62.552178,0.326000000,,,,,,
+536870912,62.557444,0.328000000,,,,,,
+536870912,62.557944,0.330000000,,,,,,
+536870912,62.558493,0.332000000,,,,,,
+536870912,62.558650,0.334000000,,,,,,
+536870912,62.558849,0.336000000,,,,,,
+536870912,62.560245,0.338000000,,,,,,
+536870912,62.564218,0.340000000,,,,,,
+536870912,62.564235,0.342000000,,,,,,
+536870912,62.564245,0.344000000,,,,,,
+536870912,62.564581,0.346000000,,,,,,
+536870912,62.564798,0.348000000,,,,,,
+536870912,62.565514,0.350000000,,,,,,
+536870912,62.566193,0.352000000,,,,,,
+536870912,62.566710,0.354000000,,,,,,
+536870912,62.569417,0.356000000,,,,,,
+536870912,62.569721,0.358000000,,,,,,
+536870912,62.572787,0.360000000,,,,,,
+536870912,62.572928,0.362000000,,,,,,
+536870912,62.573117,0.364000000,,,,,,
+536870912,62.573197,0.366000000,,,,,,
+536870912,62.573317,0.368000000,,,,,,
+536870912,62.574500,0.370000000,,,,,,
+536870912,62.574845,0.372000000,,,,,,
+536870912,62.575529,0.374000000,,,,,,
+536870912,62.575925,0.376000000,,,,,,
+536870912,62.578119,0.378000000,,,,,,
+536870912,62.580338,0.380000000,,,,,,
+536870912,62.580345,0.382000000,,,,,,
+536870912,62.581887,0.384000000,,,,,,
+536870912,62.582024,0.386000000,,,,,,
+536870912,62.582626,0.388000000,,,,,,
+536870912,62.582706,0.390000000,,,,,,
+536870912,62.583878,0.392000000,,,,,,
+536870912,62.584804,0.394000000,,,,,,
+536870912,62.586296,0.396000000,,,,,,
+536870912,62.586769,0.398000000,,,,,,
+536870912,62.588754,0.400000000,,,,,,
+536870912,62.588818,0.402000000,,,,,,
+536870912,62.588838,0.404000000,,,,,,
+536870912,62.589706,0.406000000,,,,,,
+536870912,62.589763,0.408000000,,,,,,
+536870912,62.592182,0.410000000,,,,,,
+536870912,62.592863,0.412000000,,,,,,
+536870912,62.594279,0.414000000,,,,,,
+536870912,62.594400,0.416000000,,,,,,
+536870912,62.594952,0.418000000,,,,,,
+536870912,62.600187,0.420000000,,,,,,
+536870912,62.602179,0.422000000,,,,,,
+536870912,62.604078,0.424000000,,,,,,
+536870912,62.605107,0.426000000,,,,,,
+536870912,62.606322,0.428000000,,,,,,
+536870912,62.607058,0.430000000,,,,,,
+536870912,62.607168,0.432000000,,,,,,
+536870912,62.608377,0.434000000,,,,,,
+536870912,62.608381,0.436000000,,,,,,
+536870912,62.608484,0.438000000,,,,,,
+536870912,62.610269,0.440000000,,,,,,
+536870912,62.611788,0.442000000,,,,,,
+536870912,62.613086,0.444000000,,,,,,
+536870912,62.614423,0.446000000,,,,,,
+536870912,62.615908,0.448000000,,,,,,
+536870912,62.616294,0.450000000,,,,,,
+536870912,62.621626,0.452000000,,,,,,
+536870912,62.621796,0.454000000,,,,,,
+536870912,62.624220,0.456000000,,,,,,
+536870912,62.625436,0.458000000,,,,,,
+536870912,62.626102,0.460000000,,,,,,
+536870912,62.626293,0.462000000,,,,,,
+536870912,62.627934,0.464000000,,,,,,
+536870912,62.630808,0.466000000,,,,,,
+536870912,62.631501,0.468000000,,,,,,
+536870912,62.632127,0.470000000,,,,,,
+536870912,62.632583,0.472000000,,,,,,
+536870912,62.633213,0.474000000,,,,,,
+536870912,62.634045,0.476000000,,,,,,
+536870912,62.634968,0.478000000,,,,,,
+536870912,62.635814,0.480000000,,,,,,
+536870912,62.636890,0.482000000,,,,,,
+536870912,62.637859,0.484000000,,,,,,
+536870912,62.637905,0.486000000,,,,,,
+536870912,62.638212,0.488000000,,,,,,
+536870912,62.639431,0.490000000,,,,,,
+536870912,62.640969,0.492000000,,,,,,
+536870912,62.642382,0.494000000,,,,,,
+536870912,62.642588,0.496000000,,,,,,
+536870912,62.646179,0.498000000,,,,,,
+536870912,62.646212,0.500000000,,,,,,
+536870912,62.647177,0.502000000,,,,,,
+536870912,62.649046,0.504000000,,,,,,
+536870912,62.650012,0.506000000,,,,,,
+536870912,62.650012,0.508000000,,,,,,
+536870912,62.650518,0.510000000,,,,,,
+536870912,62.651418,0.512000000,,,,,,
+536870912,62.652091,0.514000000,,,,,,
+536870912,62.653932,0.516000000,,,,,,
+536870912,62.656923,0.518000000,,,,,,
+536870912,62.658089,0.520000000,,,,,,
+536870912,62.664777,0.522000000,,,,,,
+536870912,62.665865,0.524000000,,,,,,
+536870912,62.666295,0.526000000,,,,,,
+536870912,62.666921,0.528000000,,,,,,
+536870912,62.667008,0.530000000,,,,,,
+536870912,62.668810,0.532000000,,,,,,
+536870912,62.669379,0.534000000,,,,,,
+536870912,62.670804,0.536000000,,,,,,
+536870912,62.671747,0.538000000,,,,,,
+536870912,62.672902,0.540000000,,,,,,
+536870912,62.676516,0.542000000,,,,,,
+536870912,62.676689,0.544000000,,,,,,
+536870912,62.677309,0.546000000,,,,,,
+536870912,62.677549,0.548000000,,,,,,
+536870912,62.678931,0.550000000,,,,,,
+536870912,62.679880,0.552000000,,,,,,
+536870912,62.680226,0.554000000,,,,,,
+536870912,62.680513,0.556000000,,,,,,
+536870912,62.680639,0.558000000,,,,,,
+536870912,62.680750,0.560000000,,,,,,
+536870912,62.681548,0.562000000,,,,,,
+536870912,62.682102,0.564000000,,,,,,
+536870912,62.683454,0.566000000,,,,,,
+536870912,62.683497,0.568000000,,,,,,
+536870912,62.685812,0.570000000,,,,,,
+536870912,62.685868,0.572000000,,,,,,
+536870912,62.686447,0.574000000,,,,,,
+536870912,62.688616,0.576000000,,,,,,
+536870912,62.689228,0.578000000,,,,,,
+536870912,62.689409,0.580000000,,,,,,
+536870912,62.690258,0.582000000,,,,,,
+536870912,62.690574,0.584000000,,,,,,
+536870912,62.691697,0.586000000,,,,,,
+536870912,62.694411,0.588000000,,,,,,
+536870912,62.695587,0.590000000,,,,,,
+536870912,62.696280,0.592000000,,,,,,
+536870912,62.697292,0.594000000,,,,,,
+536870912,62.697615,0.596000000,,,,,,
+536870912,62.697951,0.598000000,,,,,,
+536870912,62.698327,0.600000000,,,,,,
+536870912,62.700423,0.602000000,,,,,,
+536870912,62.701908,0.604000000,,,,,,
+536870912,62.701985,0.606000000,,,,,,
+536870912,62.704899,0.608000000,,,,,,
+536870912,62.704995,0.610000000,,,,,,
+536870912,62.705855,0.612000000,,,,,,
+536870912,62.708296,0.614000000,,,,,,
+536870912,62.708645,0.616000000,,,,,,
+536870912,62.711717,0.618000000,,,,,,
+536870912,62.711720,0.620000000,,,,,,
+536870912,62.713422,0.622000000,,,,,,
+536870912,62.714081,0.624000000,,,,,,
+536870912,62.718095,0.626000000,,,,,,
+536870912,62.720639,0.628000000,,,,,,
+536870912,62.721089,0.630000000,,,,,,
+536870912,62.725671,0.632000000,,,,,,
+536870912,62.725861,0.634000000,,,,,,
+536870912,62.727093,0.636000000,,,,,,
+536870912,62.727237,0.638000000,,,,,,
+536870912,62.727829,0.640000000,,,,,,
+536870912,62.728146,0.642000000,,,,,,
+536870912,62.729018,0.644000000,,,,,,
+536870912,62.729651,0.646000000,,,,,,
+536870912,62.729947,0.648000000,,,,,,
+536870912,62.730361,0.650000000,,,,,,
+536870912,62.730791,0.652000000,,,,,,
+536870912,62.731366,0.654000000,,,,,,
+536870912,62.733388,0.656000000,,,,,,
+536870912,62.733694,0.658000000,,,,,,
+536870912,62.733764,0.660000000,,,,,,
+536870912,62.734044,0.662000000,,,,,,
+536870912,62.738454,0.664000000,,,,,,
+536870912,62.739579,0.666000000,,,,,,
+536870912,62.741331,0.668000000,,,,,,
+536870912,62.742944,0.670000000,,,,,,
+536870912,62.744142,0.672000000,,,,,,
+536870912,62.746201,0.674000000,,,,,,
+536870912,62.751229,0.676000000,,,,,,
+536870912,62.751326,0.678000000,,,,,,
+536870912,62.751735,0.680000000,,,,,,
+536870912,62.753804,0.682000000,,,,,,
+536870912,62.754363,0.684000000,,,,,,
+536870912,62.756212,0.686000000,,,,,,
+536870912,62.757261,0.688000000,,,,,,
+536870912,62.760378,0.690000000,,,,,,
+536870912,62.760738,0.692000000,,,,,,
+536870912,62.761524,0.694000000,,,,,,
+536870912,62.762543,0.696000000,,,,,,
+536870912,62.763066,0.698000000,,,,,,
+536870912,62.764595,0.700000000,,,,,,
+536870912,62.765667,0.702000000,,,,,,
+536870912,62.768318,0.704000000,,,,,,
+536870912,62.769897,0.706000000,,,,,,
+536870912,62.773077,0.708000000,,,,,,
+536870912,62.773314,0.710000000,,,,,,
+536870912,62.773361,0.712000000,,,,,,
+536870912,62.776428,0.714000000,,,,,,
+536870912,62.779532,0.716000000,,,,,,
+536870912,62.780018,0.718000000,,,,,,
+536870912,62.781617,0.720000000,,,,,,
+536870912,62.783888,0.722000000,,,,,,
+536870912,62.785367,0.724000000,,,,,,
+536870912,62.785693,0.726000000,,,,,,
+536870912,62.785897,0.728000000,,,,,,
+536870912,62.786236,0.730000000,,,,,,
+536870912,62.786592,0.732000000,,,,,,
+536870912,62.787075,0.734000000,,,,,,
+536870912,62.787149,0.736000000,,,,,,
+536870912,62.791672,0.738000000,,,,,,
+536870912,62.791795,0.740000000,,,,,,
+536870912,62.794033,0.742000000,,,,,,
+536870912,62.794227,0.744000000,,,,,,
+536870912,62.796261,0.746000000,,,,,,
+536870912,62.798826,0.748000000,,,,,,
+536870912,62.800671,0.750000000,,,,,,
+536870912,62.801267,0.752000000,,,,,,
+536870912,62.801547,0.754000000,,,,,,
+536870912,62.802146,0.756000000,,,,,,
+536870912,62.802539,0.758000000,,,,,,
+536870912,62.802879,0.760000000,,,,,,
+536870912,62.804091,0.762000000,,,,,,
+536870912,62.804774,0.764000000,,,,,,
+536870912,62.805197,0.766000000,,,,,,
+536870912,62.807078,0.768000000,,,,,,
+536870912,62.807122,0.770000000,,,,,,
+536870912,62.808381,0.772000000,,,,,,
+536870912,62.810079,0.774000000,,,,,,
+536870912,62.810612,0.776000000,,,,,,
+536870912,62.812054,0.778000000,,,,,,
+536870912,62.812750,0.780000000,,,,,,
+536870912,62.818679,0.782000000,,,,,,
+536870912,62.818725,0.784000000,,,,,,
+536870912,62.819388,0.786000000,,,,,,
+536870912,62.825203,0.788000000,,,,,,
+536870912,62.825782,0.790000000,,,,,,
+536870912,62.830069,0.792000000,,,,,,
+536870912,62.830566,0.794000000,,,,,,
+536870912,62.833153,0.796000000,,,,,,
+536870912,62.835608,0.798000000,,,,,,
+536870912,62.848929,0.800000000,,,,,,
+536870912,62.851114,0.802000000,,,,,,
+536870912,62.853509,0.804000000,,,,,,
+536870912,62.855561,0.806000000,,,,,,
+536870912,62.855877,0.808000000,,,,,,
+536870912,62.858625,0.810000000,,,,,,
+536870912,62.858792,0.812000000,,,,,,
+536870912,62.862625,0.814000000,,,,,,
+536870912,62.863360,0.816000000,,,,,,
+536870912,62.865652,0.818000000,,,,,,
+536870912,62.870965,0.820000000,,,,,,
+536870912,62.872860,0.822000000,,,,,,
+536870912,62.872949,0.824000000,,,,,,
+536870912,62.873396,0.826000000,,,,,,
+536870912,62.873542,0.828000000,,,,,,
+536870912,62.875480,0.830000000,,,,,,
+536870912,62.879057,0.832000000,,,,,,
+536870912,62.884013,0.834000000,,,,,,
+536870912,62.884779,0.836000000,,,,,,
+536870912,62.885199,0.838000000,,,,,,
+536870912,62.890121,0.840000000,,,,,,
+536870912,62.891373,0.842000000,,,,,,
+536870912,62.891899,0.844000000,,,,,,
+536870912,62.892116,0.846000000,,,,,,
+536870912,62.893508,0.848000000,,,,,,
+536870912,62.895713,0.850000000,,,,,,
+536870912,62.902778,0.852000000,,,,,,
+536870912,62.903463,0.854000000,,,,,,
+536870912,62.908543,0.856000000,,,,,,
+536870912,62.908809,0.858000000,,,,,,
+536870912,62.913852,0.860000000,,,,,,
+536870912,62.914608,0.862000000,,,,,,
+536870912,62.914824,0.864000000,,,,,,
+536870912,62.918914,0.866000000,,,,,,
+536870912,62.923446,0.868000000,,,,,,
+536870912,62.925298,0.870000000,,,,,,
+536870912,62.929012,0.872000000,,,,,,
+536870912,62.931123,0.874000000,,,,,,
+536870912,62.934840,0.876000000,,,,,,
+536870912,62.936775,0.878000000,,,,,,
+536870912,62.937704,0.880000000,,,,,,
+536870912,62.941834,0.882000000,,,,,,
+536870912,62.945061,0.884000000,,,,,,
+536870912,62.946387,0.886000000,,,,,,
+536870912,62.959419,0.888000000,,,,,,
+536870912,62.965014,0.890000000,,,,,,
+536870912,62.966980,0.892000000,,,,,,
+536870912,62.972531,0.894000000,,,,,,
+536870912,62.977907,0.896000000,,,,,,
+536870912,62.981294,0.898000000,,,,,,
+536870912,62.982650,0.900000000,,,,,,
+536870912,62.984421,0.902000000,,,,,,
+536870912,62.985177,0.904000000,,,,,,
+536870912,62.987958,0.906000000,,,,,,
+536870912,62.998492,0.908000000,,,,,,
+536870912,63.001890,0.910000000,,,,,,
+536870912,63.003721,0.912000000,,,,,,
+536870912,63.015685,0.914000000,,,,,,
+536870912,63.020087,0.916000000,,,,,,
+536870912,63.020347,0.918000000,,,,,,
+536870912,63.021730,0.920000000,,,,,,
+536870912,63.023574,0.922000000,,,,,,
+536870912,63.024823,0.924000000,,,,,,
+536870912,63.025736,0.926000000,,,,,,
+536870912,63.026353,0.928000000,,,,,,
+536870912,63.028091,0.930000000,,,,,,
+536870912,63.031471,0.932000000,,,,,,
+536870912,63.035128,0.934000000,,,,,,
+536870912,63.042286,0.936000000,,,,,,
+536870912,63.048517,0.938000000,,,,,,
+536870912,63.057806,0.940000000,,,,,,
+536870912,63.058195,0.942000000,,,,,,
+536870912,63.062488,0.944000000,,,,,,
+536870912,63.074874,0.946000000,,,,,,
+536870912,63.075397,0.948000000,,,,,,
+536870912,63.081472,0.950000000,,,,,,
+536870912,63.084153,0.952000000,,,,,,
+536870912,63.086085,0.954000000,,,,,,
+536870912,63.129698,0.956000000,,,,,,
+536870912,63.132656,0.958000000,,,,,,
+536870912,63.133721,0.960000000,,,,,,
+536870912,63.134707,0.962000000,,,,,,
+536870912,63.165921,0.964000000,,,,,,
+536870912,63.168508,0.966000000,,,,,,
+536870912,63.172788,0.968000000,,,,,,
+536870912,63.180418,0.970000000,,,,,,
+536870912,63.184155,0.972000000,,,,,,
+536870912,63.184538,0.974000000,,,,,,
+536870912,63.194962,0.976000000,,,,,,
+536870912,63.267072,0.978000000,,,,,,
+536870912,63.267841,0.980000000,,,,,,
+536870912,63.325052,0.982000000,,,,,,
+536870912,63.443644,0.984000000,,,,,,
+536870912,63.447465,0.986000000,,,,,,
+536870912,63.447784,0.988000000,,,,,,
+536870912,63.489795,0.990000000,,,,,,
+536870912,63.509868,0.992000000,,,,,,
+536870912,63.551153,0.994000000,,,,,,
+536870912,63.607369,0.996000000,,,,,,
+536870912,63.771759,0.998000000,,,,,,
+536870912,63.898955,1.000000000,,,,,,
+1073741824,127.446531,0.002237136,,,,,,
+1073741824,127.515396,0.004474273,,,,,,
+1073741824,127.599091,0.006711409,,,,,,
+1073741824,127.604247,0.008948546,,,,,,
+1073741824,127.648256,0.011185682,,,,,,
+1073741824,127.684083,0.013422819,,,,,,
+1073741824,127.714940,0.015659955,,,,,,
+1073741824,127.716858,0.017897092,,,,,,
+1073741824,127.774269,0.020134228,,,,,,
+1073741824,127.790205,0.022371365,,,,,,
+1073741824,127.824060,0.024608501,,,,,,
+1073741824,127.832440,0.026845638,,,,,,
+1073741824,127.859530,0.029082774,,,,,,
+1073741824,127.870195,0.031319911,,,,,,
+1073741824,127.874178,0.033557047,,,,,,
+1073741824,127.876599,0.035794183,,,,,,
+1073741824,127.884552,0.038031320,,,,,,
+1073741824,127.885125,0.040268456,,,,,,
+1073741824,127.892918,0.042505593,,,,,,
+1073741824,127.893984,0.044742729,,,,,,
+1073741824,127.914157,0.046979866,,,,,,
+1073741824,127.934537,0.049217002,,,,,,
+1073741824,127.935579,0.051454139,,,,,,
+1073741824,127.943785,0.053691275,,,,,,
+1073741824,127.944112,0.055928412,,,,,,
+1073741824,127.948641,0.058165548,,,,,,
+1073741824,127.950805,0.060402685,,,,,,
+1073741824,127.956108,0.062639821,,,,,,
+1073741824,127.956854,0.064876957,,,,,,
+1073741824,127.957104,0.067114094,,,,,,
+1073741824,127.960185,0.069351230,,,,,,
+1073741824,127.968264,0.071588367,,,,,,
+1073741824,127.968604,0.073825503,,,,,,
+1073741824,127.972604,0.076062640,,,,,,
+1073741824,127.973376,0.078299776,,,,,,
+1073741824,127.974289,0.080536913,,,,,,
+1073741824,127.976328,0.082774049,,,,,,
+1073741824,127.977210,0.085011186,,,,,,
+1073741824,127.987158,0.087248322,,,,,,
+1073741824,127.990602,0.089485459,,,,,,
+1073741824,127.990905,0.091722595,,,,,,
+1073741824,127.991351,0.093959732,,,,,,
+1073741824,127.993060,0.096196868,,,,,,
+1073741824,127.996603,0.098434004,,,,,,
+1073741824,128.002158,0.100671141,,,,,,
+1073741824,128.013339,0.102908277,,,,,,
+1073741824,128.023144,0.105145414,,,,,,
+1073741824,128.031647,0.107382550,,,,,,
+1073741824,128.037838,0.109619687,,,,,,
+1073741824,128.037945,0.111856823,,,,,,
+1073741824,128.044730,0.114093960,,,,,,
+1073741824,128.051194,0.116331096,,,,,,
+1073741824,128.055880,0.118568233,,,,,,
+1073741824,128.056730,0.120805369,,,,,,
+1073741824,128.058615,0.123042506,,,,,,
+1073741824,128.058697,0.125279642,,,,,,
+1073741824,128.059880,0.127516779,,,,,,
+1073741824,128.068290,0.129753915,,,,,,
+1073741824,128.069519,0.131991051,,,,,,
+1073741824,128.071636,0.134228188,,,,,,
+1073741824,128.071950,0.136465324,,,,,,
+1073741824,128.076142,0.138702461,,,,,,
+1073741824,128.076283,0.140939597,,,,,,
+1073741824,128.076359,0.143176734,,,,,,
+1073741824,128.078071,0.145413870,,,,,,
+1073741824,128.082507,0.147651007,,,,,,
+1073741824,128.083550,0.149888143,,,,,,
+1073741824,128.084382,0.152125280,,,,,,
+1073741824,128.086913,0.154362416,,,,,,
+1073741824,128.087496,0.156599553,,,,,,
+1073741824,128.088782,0.158836689,,,,,,
+1073741824,128.089221,0.161073826,,,,,,
+1073741824,128.089378,0.163310962,,,,,,
+1073741824,128.089438,0.165548098,,,,,,
+1073741824,128.093558,0.167785235,,,,,,
+1073741824,128.101168,0.170022371,,,,,,
+1073741824,128.102507,0.172259508,,,,,,
+1073741824,128.103130,0.174496644,,,,,,
+1073741824,128.108995,0.176733781,,,,,,
+1073741824,128.115426,0.178970917,,,,,,
+1073741824,128.115959,0.181208054,,,,,,
+1073741824,128.118051,0.183445190,,,,,,
+1073741824,128.119159,0.185682327,,,,,,
+1073741824,128.119968,0.187919463,,,,,,
+1073741824,128.120941,0.190156600,,,,,,
+1073741824,128.121184,0.192393736,,,,,,
+1073741824,128.122912,0.194630872,,,,,,
+1073741824,128.126367,0.196868009,,,,,,
+1073741824,128.128012,0.199105145,,,,,,
+1073741824,128.128608,0.201342282,,,,,,
+1073741824,128.129407,0.203579418,,,,,,
+1073741824,128.136951,0.205816555,,,,,,
+1073741824,128.137764,0.208053691,,,,,,
+1073741824,128.139929,0.210290828,,,,,,
+1073741824,128.141547,0.212527964,,,,,,
+1073741824,128.144625,0.214765101,,,,,,
+1073741824,128.146400,0.217002237,,,,,,
+1073741824,128.148474,0.219239374,,,,,,
+1073741824,128.149930,0.221476510,,,,,,
+1073741824,128.151342,0.223713647,,,,,,
+1073741824,128.154329,0.225950783,,,,,,
+1073741824,128.158873,0.228187919,,,,,,
+1073741824,128.159405,0.230425056,,,,,,
+1073741824,128.166596,0.232662192,,,,,,
+1073741824,128.167575,0.234899329,,,,,,
+1073741824,128.169736,0.237136465,,,,,,
+1073741824,128.169756,0.239373602,,,,,,
+1073741824,128.170772,0.241610738,,,,,,
+1073741824,128.170885,0.243847875,,,,,,
+1073741824,128.174726,0.246085011,,,,,,
+1073741824,128.177533,0.248322148,,,,,,
+1073741824,128.180281,0.250559284,,,,,,
+1073741824,128.182256,0.252796421,,,,,,
+1073741824,128.185496,0.255033557,,,,,,
+1073741824,128.188643,0.257270694,,,,,,
+1073741824,128.188844,0.259507830,,,,,,
+1073741824,128.192694,0.261744966,,,,,,
+1073741824,128.194076,0.263982103,,,,,,
+1073741824,128.195744,0.266219239,,,,,,
+1073741824,128.204850,0.268456376,,,,,,
+1073741824,128.205200,0.270693512,,,,,,
+1073741824,128.205573,0.272930649,,,,,,
+1073741824,128.208807,0.275167785,,,,,,
+1073741824,128.209869,0.277404922,,,,,,
+1073741824,128.210319,0.279642058,,,,,,
+1073741824,128.211857,0.281879195,,,,,,
+1073741824,128.214452,0.284116331,,,,,,
+1073741824,128.216783,0.286353468,,,,,,
+1073741824,128.221509,0.288590604,,,,,,
+1073741824,128.228653,0.290827740,,,,,,
+1073741824,128.229360,0.293064877,,,,,,
+1073741824,128.231738,0.295302013,,,,,,
+1073741824,128.238908,0.297539150,,,,,,
+1073741824,128.241042,0.299776286,,,,,,
+1073741824,128.243064,0.302013423,,,,,,
+1073741824,128.244193,0.304250559,,,,,,
+1073741824,128.246285,0.306487696,,,,,,
+1073741824,128.247481,0.308724832,,,,,,
+1073741824,128.249322,0.310961969,,,,,,
+1073741824,128.254262,0.313199105,,,,,,
+1073741824,128.256137,0.315436242,,,,,,
+1073741824,128.257949,0.317673378,,,,,,
+1073741824,128.261116,0.319910515,,,,,,
+1073741824,128.264912,0.322147651,,,,,,
+1073741824,128.265632,0.324384787,,,,,,
+1073741824,128.274714,0.326621924,,,,,,
+1073741824,128.275087,0.328859060,,,,,,
+1073741824,128.275957,0.331096197,,,,,,
+1073741824,128.278417,0.333333333,,,,,,
+1073741824,128.278807,0.335570470,,,,,,
+1073741824,128.280020,0.337807606,,,,,,
+1073741824,128.280106,0.340044743,,,,,,
+1073741824,128.280399,0.342281879,,,,,,
+1073741824,128.280623,0.344519016,,,,,,
+1073741824,128.283879,0.346756152,,,,,,
+1073741824,128.285098,0.348993289,,,,,,
+1073741824,128.286194,0.351230425,,,,,,
+1073741824,128.286444,0.353467562,,,,,,
+1073741824,128.289519,0.355704698,,,,,,
+1073741824,128.289664,0.357941834,,,,,,
+1073741824,128.290294,0.360178971,,,,,,
+1073741824,128.295273,0.362416107,,,,,,
+1073741824,128.297754,0.364653244,,,,,,
+1073741824,128.297904,0.366890380,,,,,,
+1073741824,128.303416,0.369127517,,,,,,
+1073741824,128.304672,0.371364653,,,,,,
+1073741824,128.307813,0.373601790,,,,,,
+1073741824,128.309818,0.375838926,,,,,,
+1073741824,128.310001,0.378076063,,,,,,
+1073741824,128.310987,0.380313199,,,,,,
+1073741824,128.312002,0.382550336,,,,,,
+1073741824,128.313198,0.384787472,,,,,,
+1073741824,128.315735,0.387024609,,,,,,
+1073741824,128.317008,0.389261745,,,,,,
+1073741824,128.318613,0.391498881,,,,,,
+1073741824,128.319845,0.393736018,,,,,,
+1073741824,128.322713,0.395973154,,,,,,
+1073741824,128.322713,0.398210291,,,,,,
+1073741824,128.324245,0.400447427,,,,,,
+1073741824,128.327067,0.402684564,,,,,,
+1073741824,128.328178,0.404921700,,,,,,
+1073741824,128.328525,0.407158837,,,,,,
+1073741824,128.336172,0.409395973,,,,,,
+1073741824,128.336542,0.411633110,,,,,,
+1073741824,128.338170,0.413870246,,,,,,
+1073741824,128.338553,0.416107383,,,,,,
+1073741824,128.339352,0.418344519,,,,,,
+1073741824,128.339703,0.420581655,,,,,,
+1073741824,128.341067,0.422818792,,,,,,
+1073741824,128.343909,0.425055928,,,,,,
+1073741824,128.344768,0.427293065,,,,,,
+1073741824,128.351142,0.429530201,,,,,,
+1073741824,128.352948,0.431767338,,,,,,
+1073741824,128.353920,0.434004474,,,,,,
+1073741824,128.354517,0.436241611,,,,,,
+1073741824,128.354746,0.438478747,,,,,,
+1073741824,128.355319,0.440715884,,,,,,
+1073741824,128.356101,0.442953020,,,,,,
+1073741824,128.358822,0.445190157,,,,,,
+1073741824,128.358903,0.447427293,,,,,,
+1073741824,128.361587,0.449664430,,,,,,
+1073741824,128.362946,0.451901566,,,,,,
+1073741824,128.363135,0.454138702,,,,,,
+1073741824,128.363931,0.456375839,,,,,,
+1073741824,128.364361,0.458612975,,,,,,
+1073741824,128.366089,0.460850112,,,,,,
+1073741824,128.367648,0.463087248,,,,,,
+1073741824,128.368514,0.465324385,,,,,,
+1073741824,128.369117,0.467561521,,,,,,
+1073741824,128.369899,0.469798658,,,,,,
+1073741824,128.370859,0.472035794,,,,,,
+1073741824,128.371329,0.474272931,,,,,,
+1073741824,128.375362,0.476510067,,,,,,
+1073741824,128.376334,0.478747204,,,,,,
+1073741824,128.382129,0.480984340,,,,,,
+1073741824,128.383771,0.483221477,,,,,,
+1073741824,128.390759,0.485458613,,,,,,
+1073741824,128.391215,0.487695749,,,,,,
+1073741824,128.401486,0.489932886,,,,,,
+1073741824,128.401736,0.492170022,,,,,,
+1073741824,128.404318,0.494407159,,,,,,
+1073741824,128.406252,0.496644295,,,,,,
+1073741824,128.406949,0.498881432,,,,,,
+1073741824,128.407445,0.501118568,,,,,,
+1073741824,128.407494,0.503355705,,,,,,
+1073741824,128.408284,0.505592841,,,,,,
+1073741824,128.408480,0.507829978,,,,,,
+1073741824,128.411867,0.510067114,,,,,,
+1073741824,128.413916,0.512304251,,,,,,
+1073741824,128.414345,0.514541387,,,,,,
+1073741824,128.416381,0.516778523,,,,,,
+1073741824,128.419374,0.519015660,,,,,,
+1073741824,128.419617,0.521252796,,,,,,
+1073741824,128.420294,0.523489933,,,,,,
+1073741824,128.421690,0.525727069,,,,,,
+1073741824,128.423598,0.527964206,,,,,,
+1073741824,128.424816,0.530201342,,,,,,
+1073741824,128.425452,0.532438479,,,,,,
+1073741824,128.427297,0.534675615,,,,,,
+1073741824,128.429009,0.536912752,,,,,,
+1073741824,128.429962,0.539149888,,,,,,
+1073741824,128.430049,0.541387025,,,,,,
+1073741824,128.431831,0.543624161,,,,,,
+1073741824,128.434178,0.545861298,,,,,,
+1073741824,128.434631,0.548098434,,,,,,
+1073741824,128.437902,0.550335570,,,,,,
+1073741824,128.437925,0.552572707,,,,,,
+1073741824,128.438721,0.554809843,,,,,,
+1073741824,128.439045,0.557046980,,,,,,
+1073741824,128.439417,0.559284116,,,,,,
+1073741824,128.442858,0.561521253,,,,,,
+1073741824,128.443561,0.563758389,,,,,,
+1073741824,128.445685,0.565995526,,,,,,
+1073741824,128.445765,0.568232662,,,,,,
+1073741824,128.446424,0.570469799,,,,,,
+1073741824,128.447990,0.572706935,,,,,,
+1073741824,128.450318,0.574944072,,,,,,
+1073741824,128.451021,0.577181208,,,,,,
+1073741824,128.451081,0.579418345,,,,,,
+1073741824,128.451937,0.581655481,,,,,,
+1073741824,128.452040,0.583892617,,,,,,
+1073741824,128.453173,0.586129754,,,,,,
+1073741824,128.454171,0.588366890,,,,,,
+1073741824,128.455723,0.590604027,,,,,,
+1073741824,128.458069,0.592841163,,,,,,
+1073741824,128.458551,0.595078300,,,,,,
+1073741824,128.462382,0.597315436,,,,,,
+1073741824,128.462595,0.599552573,,,,,,
+1073741824,128.464786,0.601789709,,,,,,
+1073741824,128.468556,0.604026846,,,,,,
+1073741824,128.468646,0.606263982,,,,,,
+1073741824,128.471310,0.608501119,,,,,,
+1073741824,128.477029,0.610738255,,,,,,
+1073741824,128.477631,0.612975391,,,,,,
+1073741824,128.478527,0.615212528,,,,,,
+1073741824,128.481415,0.617449664,,,,,,
+1073741824,128.482820,0.619686801,,,,,,
+1073741824,128.484153,0.621923937,,,,,,
+1073741824,128.484916,0.624161074,,,,,,
+1073741824,128.491011,0.626398210,,,,,,
+1073741824,128.493522,0.628635347,,,,,,
+1073741824,128.493694,0.630872483,,,,,,
+1073741824,128.494464,0.633109620,,,,,,
+1073741824,128.495450,0.635346756,,,,,,
+1073741824,128.495680,0.637583893,,,,,,
+1073741824,128.497148,0.639821029,,,,,,
+1073741824,128.502737,0.642058166,,,,,,
+1073741824,128.502897,0.644295302,,,,,,
+1073741824,128.511373,0.646532438,,,,,,
+1073741824,128.511766,0.648769575,,,,,,
+1073741824,128.513517,0.651006711,,,,,,
+1073741824,128.515409,0.653243848,,,,,,
+1073741824,128.516655,0.655480984,,,,,,
+1073741824,128.517837,0.657718121,,,,,,
+1073741824,128.520425,0.659955257,,,,,,
+1073741824,128.534127,0.662192394,,,,,,
+1073741824,128.536389,0.664429530,,,,,,
+1073741824,128.537644,0.666666667,,,,,,
+1073741824,128.538274,0.668903803,,,,,,
+1073741824,128.539070,0.671140940,,,,,,
+1073741824,128.541737,0.673378076,,,,,,
+1073741824,128.547372,0.675615213,,,,,,
+1073741824,128.548555,0.677852349,,,,,,
+1073741824,128.549018,0.680089485,,,,,,
+1073741824,128.549394,0.682326622,,,,,,
+1073741824,128.552961,0.684563758,,,,,,
+1073741824,128.555246,0.686800895,,,,,,
+1073741824,128.555549,0.689038031,,,,,,
+1073741824,128.557826,0.691275168,,,,,,
+1073741824,128.558379,0.693512304,,,,,,
+1073741824,128.558427,0.695749441,,,,,,
+1073741824,128.561578,0.697986577,,,,,,
+1073741824,128.561973,0.700223714,,,,,,
+1073741824,128.562510,0.702460850,,,,,,
+1073741824,128.568588,0.704697987,,,,,,
+1073741824,128.570736,0.706935123,,,,,,
+1073741824,128.575096,0.709172260,,,,,,
+1073741824,128.576432,0.711409396,,,,,,
+1073741824,128.588944,0.713646532,,,,,,
+1073741824,128.591619,0.715883669,,,,,,
+1073741824,128.592078,0.718120805,,,,,,
+1073741824,128.592371,0.720357942,,,,,,
+1073741824,128.595775,0.722595078,,,,,,
+1073741824,128.603235,0.724832215,,,,,,
+1073741824,128.605643,0.727069351,,,,,,
+1073741824,128.611158,0.729306488,,,,,,
+1073741824,128.613650,0.731543624,,,,,,
+1073741824,128.615521,0.733780761,,,,,,
+1073741824,128.616540,0.736017897,,,,,,
+1073741824,128.620783,0.738255034,,,,,,
+1073741824,128.622802,0.740492170,,,,,,
+1073741824,128.624531,0.742729306,,,,,,
+1073741824,128.627834,0.744966443,,,,,,
+1073741824,128.628890,0.747203579,,,,,,
+1073741824,128.634699,0.749440716,,,,,,
+1073741824,128.636430,0.751677852,,,,,,
+1073741824,128.637296,0.753914989,,,,,,
+1073741824,128.640350,0.756152125,,,,,,
+1073741824,128.642808,0.758389262,,,,,,
+1073741824,128.645299,0.760626398,,,,,,
+1073741824,128.647038,0.762863535,,,,,,
+1073741824,128.650075,0.765100671,,,,,,
+1073741824,128.653792,0.767337808,,,,,,
+1073741824,128.656797,0.769574944,,,,,,
+1073741824,128.656952,0.771812081,,,,,,
+1073741824,128.665233,0.774049217,,,,,,
+1073741824,128.674251,0.776286353,,,,,,
+1073741824,128.677699,0.778523490,,,,,,
+1073741824,128.688396,0.780760626,,,,,,
+1073741824,128.689945,0.782997763,,,,,,
+1073741824,128.690881,0.785234899,,,,,,
+1073741824,128.696176,0.787472036,,,,,,
+1073741824,128.697256,0.789709172,,,,,,
+1073741824,128.699314,0.791946309,,,,,,
+1073741824,128.709755,0.794183445,,,,,,
+1073741824,128.712159,0.796420582,,,,,,
+1073741824,128.713112,0.798657718,,,,,,
+1073741824,128.714478,0.800894855,,,,,,
+1073741824,128.714833,0.803131991,,,,,,
+1073741824,128.719087,0.805369128,,,,,,
+1073741824,128.719556,0.807606264,,,,,,
+1073741824,128.720388,0.809843400,,,,,,
+1073741824,128.724445,0.812080537,,,,,,
+1073741824,128.727120,0.814317673,,,,,,
+1073741824,128.737355,0.816554810,,,,,,
+1073741824,128.738687,0.818791946,,,,,,
+1073741824,128.740985,0.821029083,,,,,,
+1073741824,128.742763,0.823266219,,,,,,
+1073741824,128.748078,0.825503356,,,,,,
+1073741824,128.750373,0.827740492,,,,,,
+1073741824,128.754600,0.829977629,,,,,,
+1073741824,128.766013,0.832214765,,,,,,
+1073741824,128.768581,0.834451902,,,,,,
+1073741824,128.769091,0.836689038,,,,,,
+1073741824,128.770606,0.838926174,,,,,,
+1073741824,128.780211,0.841163311,,,,,,
+1073741824,128.783615,0.843400447,,,,,,
+1073741824,128.794189,0.845637584,,,,,,
+1073741824,128.801593,0.847874720,,,,,,
+1073741824,128.804554,0.850111857,,,,,,
+1073741824,128.806602,0.852348993,,,,,,
+1073741824,128.807439,0.854586130,,,,,,
+1073741824,128.811138,0.856823266,,,,,,
+1073741824,128.814413,0.859060403,,,,,,
+1073741824,128.818708,0.861297539,,,,,,
+1073741824,128.831561,0.863534676,,,,,,
+1073741824,128.843308,0.865771812,,,,,,
+1073741824,128.847934,0.868008949,,,,,,
+1073741824,128.848464,0.870246085,,,,,,
+1073741824,128.869322,0.872483221,,,,,,
+1073741824,128.874149,0.874720358,,,,,,
+1073741824,128.874238,0.876957494,,,,,,
+1073741824,128.875014,0.879194631,,,,,,
+1073741824,128.877326,0.881431767,,,,,,
+1073741824,128.879380,0.883668904,,,,,,
+1073741824,128.891433,0.885906040,,,,,,
+1073741824,128.897189,0.888143177,,,,,,
+1073741824,128.905852,0.890380313,,,,,,
+1073741824,128.910924,0.892617450,,,,,,
+1073741824,128.912622,0.894854586,,,,,,
+1073741824,128.913801,0.897091723,,,,,,
+1073741824,128.923293,0.899328859,,,,,,
+1073741824,128.929908,0.901565996,,,,,,
+1073741824,128.933548,0.903803132,,,,,,
+1073741824,128.951855,0.906040268,,,,,,
+1073741824,128.958677,0.908277405,,,,,,
+1073741824,128.965128,0.910514541,,,,,,
+1073741824,128.969664,0.912751678,,,,,,
+1073741824,128.970003,0.914988814,,,,,,
+1073741824,128.984071,0.917225951,,,,,,
+1073741824,129.017446,0.919463087,,,,,,
+1073741824,129.032084,0.921700224,,,,,,
+1073741824,129.081469,0.923937360,,,,,,
+1073741824,129.109411,0.926174497,,,,,,
+1073741824,129.143886,0.928411633,,,,,,
+1073741824,129.147676,0.930648770,,,,,,
+1073741824,129.154670,0.932885906,,,,,,
+1073741824,129.162666,0.935123043,,,,,,
+1073741824,129.231128,0.937360179,,,,,,
+1073741824,129.244644,0.939597315,,,,,,
+1073741824,129.256167,0.941834452,,,,,,
+1073741824,129.288260,0.944071588,,,,,,
+1073741824,129.343073,0.946308725,,,,,,
+1073741824,129.359483,0.948545861,,,,,,
+1073741824,129.389377,0.950782998,,,,,,
+1073741824,129.391306,0.953020134,,,,,,
+1073741824,129.467351,0.955257271,,,,,,
+1073741824,129.526508,0.957494407,,,,,,
+1073741824,129.535603,0.959731544,,,,,,
+1073741824,129.542817,0.961968680,,,,,,
+1073741824,129.586406,0.964205817,,,,,,
+1073741824,129.598053,0.966442953,,,,,,
+1073741824,129.616984,0.968680089,,,,,,
+1073741824,129.643548,0.970917226,,,,,,
+1073741824,129.647838,0.973154362,,,,,,
+1073741824,129.728956,0.975391499,,,,,,
+1073741824,129.734960,0.977628635,,,,,,
+1073741824,129.774847,0.979865772,,,,,,
+1073741824,129.789744,0.982102908,,,,,,
+1073741824,129.808484,0.984340045,,,,,,
+1073741824,129.837624,0.986577181,,,,,,
+1073741824,129.844491,0.988814318,,,,,,
+1073741824,129.860524,0.991051454,,,,,,
+1073741824,129.871994,0.993288591,,,,,,
+1073741824,129.955992,0.995525727,,,,,,
+1073741824,130.043465,0.997762864,,,,,,
+1073741824,130.074652,1.000000000,,,,,,
+2147479552,260.972931,0.002500000,,,,,,
+2147479552,261.111919,0.005000000,,,,,,
+2147479552,261.120789,0.007500000,,,,,,
+2147479552,261.196361,0.010000000,,,,,,
+2147479552,261.218512,0.012500000,,,,,,
+2147479552,261.238878,0.015000000,,,,,,
+2147479552,261.290734,0.017500000,,,,,,
+2147479552,261.304096,0.020000000,,,,,,
+2147479552,261.426415,0.022500000,,,,,,
+2147479552,261.480962,0.025000000,,,,,,
+2147479552,261.488003,0.027500000,,,,,,
+2147479552,261.491371,0.030000000,,,,,,
+2147479552,261.494331,0.032500000,,,,,,
+2147479552,261.502801,0.035000000,,,,,,
+2147479552,261.508636,0.037500000,,,,,,
+2147479552,261.522943,0.040000000,,,,,,
+2147479552,261.527636,0.042500000,,,,,,
+2147479552,261.530424,0.045000000,,,,,,
+2147479552,261.538850,0.047500000,,,,,,
+2147479552,261.540662,0.050000000,,,,,,
+2147479552,261.541002,0.052500000,,,,,,
+2147479552,261.566220,0.055000000,,,,,,
+2147479552,261.567562,0.057500000,,,,,,
+2147479552,261.597637,0.060000000,,,,,,
+2147479552,261.604718,0.062500000,,,,,,
+2147479552,261.615135,0.065000000,,,,,,
+2147479552,261.624508,0.067500000,,,,,,
+2147479552,261.627028,0.070000000,,,,,,
+2147479552,261.664370,0.072500000,,,,,,
+2147479552,261.675960,0.075000000,,,,,,
+2147479552,261.692183,0.077500000,,,,,,
+2147479552,261.694275,0.080000000,,,,,,
+2147479552,261.699450,0.082500000,,,,,,
+2147479552,261.703953,0.085000000,,,,,,
+2147479552,261.713562,0.087500000,,,,,,
+2147479552,261.736692,0.090000000,,,,,,
+2147479552,261.745018,0.092500000,,,,,,
+2147479552,261.751809,0.095000000,,,,,,
+2147479552,261.754387,0.097500000,,,,,,
+2147479552,261.754796,0.100000000,,,,,,
+2147479552,261.756631,0.102500000,,,,,,
+2147479552,261.780691,0.105000000,,,,,,
+2147479552,261.787249,0.107500000,,,,,,
+2147479552,261.796568,0.110000000,,,,,,
+2147479552,261.801234,0.112500000,,,,,,
+2147479552,261.811499,0.115000000,,,,,,
+2147479552,261.813720,0.117500000,,,,,,
+2147479552,261.815505,0.120000000,,,,,,
+2147479552,261.821337,0.122500000,,,,,,
+2147479552,261.825537,0.125000000,,,,,,
+2147479552,261.831012,0.127500000,,,,,,
+2147479552,261.835525,0.130000000,,,,,,
+2147479552,261.836740,0.132500000,,,,,,
+2147479552,261.836980,0.135000000,,,,,,
+2147479552,261.850498,0.137500000,,,,,,
+2147479552,261.850561,0.140000000,,,,,,
+2147479552,261.850588,0.142500000,,,,,,
+2147479552,261.853796,0.145000000,,,,,,
+2147479552,261.864783,0.147500000,,,,,,
+2147479552,261.868640,0.150000000,,,,,,
+2147479552,261.876983,0.152500000,,,,,,
+2147479552,261.891221,0.155000000,,,,,,
+2147479552,261.894035,0.157500000,,,,,,
+2147479552,261.894308,0.160000000,,,,,,
+2147479552,261.896690,0.162500000,,,,,,
+2147479552,261.898798,0.165000000,,,,,,
+2147479552,261.911943,0.167500000,,,,,,
+2147479552,261.912019,0.170000000,,,,,,
+2147479552,261.912836,0.172500000,,,,,,
+2147479552,261.913748,0.175000000,,,,,,
+2147479552,261.923487,0.177500000,,,,,,
+2147479552,261.925048,0.180000000,,,,,,
+2147479552,261.927260,0.182500000,,,,,,
+2147479552,261.927500,0.185000000,,,,,,
+2147479552,261.928039,0.187500000,,,,,,
+2147479552,261.928902,0.190000000,,,,,,
+2147479552,261.932302,0.192500000,,,,,,
+2147479552,261.936226,0.195000000,,,,,,
+2147479552,261.938574,0.197500000,,,,,,
+2147479552,261.940632,0.200000000,,,,,,
+2147479552,261.948133,0.202500000,,,,,,
+2147479552,261.948522,0.205000000,,,,,,
+2147479552,261.953414,0.207500000,,,,,,
+2147479552,261.959996,0.210000000,,,,,,
+2147479552,261.960448,0.212500000,,,,,,
+2147479552,261.961338,0.215000000,,,,,,
+2147479552,261.968209,0.217500000,,,,,,
+2147479552,261.978301,0.220000000,,,,,,
+2147479552,261.978484,0.222500000,,,,,,
+2147479552,261.985680,0.225000000,,,,,,
+2147479552,262.005940,0.227500000,,,,,,
+2147479552,262.007702,0.230000000,,,,,,
+2147479552,262.016834,0.232500000,,,,,,
+2147479552,262.019232,0.235000000,,,,,,
+2147479552,262.021706,0.237500000,,,,,,
+2147479552,262.022535,0.240000000,,,,,,
+2147479552,262.028697,0.242500000,,,,,,
+2147479552,262.035758,0.245000000,,,,,,
+2147479552,262.038019,0.247500000,,,,,,
+2147479552,262.038136,0.250000000,,,,,,
+2147479552,262.039602,0.252500000,,,,,,
+2147479552,262.050233,0.255000000,,,,,,
+2147479552,262.053883,0.257500000,,,,,,
+2147479552,262.057263,0.260000000,,,,,,
+2147479552,262.063341,0.262500000,,,,,,
+2147479552,262.068833,0.265000000,,,,,,
+2147479552,262.068856,0.267500000,,,,,,
+2147479552,262.073709,0.270000000,,,,,,
+2147479552,262.077200,0.272500000,,,,,,
+2147479552,262.077403,0.275000000,,,,,,
+2147479552,262.087391,0.277500000,,,,,,
+2147479552,262.094758,0.280000000,,,,,,
+2147479552,262.098205,0.282500000,,,,,,
+2147479552,262.099281,0.285000000,,,,,,
+2147479552,262.103367,0.287500000,,,,,,
+2147479552,262.103947,0.290000000,,,,,,
+2147479552,262.104117,0.292500000,,,,,,
+2147479552,262.106834,0.295000000,,,,,,
+2147479552,262.111370,0.297500000,,,,,,
+2147479552,262.112153,0.300000000,,,,,,
+2147479552,262.116219,0.302500000,,,,,,
+2147479552,262.116640,0.305000000,,,,,,
+2147479552,262.124613,0.307500000,,,,,,
+2147479552,262.128868,0.310000000,,,,,,
+2147479552,262.132046,0.312500000,,,,,,
+2147479552,262.132086,0.315000000,,,,,,
+2147479552,262.134394,0.317500000,,,,,,
+2147479552,262.137604,0.320000000,,,,,,
+2147479552,262.138241,0.322500000,,,,,,
+2147479552,262.143387,0.325000000,,,,,,
+2147479552,262.162601,0.327500000,,,,,,
+2147479552,262.167477,0.330000000,,,,,,
+2147479552,262.170873,0.332500000,,,,,,
+2147479552,262.180818,0.335000000,,,,,,
+2147479552,262.185927,0.337500000,,,,,,
+2147479552,262.189125,0.340000000,,,,,,
+2147479552,262.190107,0.342500000,,,,,,
+2147479552,262.191789,0.345000000,,,,,,
+2147479552,262.193980,0.347500000,,,,,,
+2147479552,262.202077,0.350000000,,,,,,
+2147479552,262.205234,0.352500000,,,,,,
+2147479552,262.211379,0.355000000,,,,,,
+2147479552,262.212221,0.357500000,,,,,,
+2147479552,262.212635,0.360000000,,,,,,
+2147479552,262.215003,0.362500000,,,,,,
+2147479552,262.215625,0.365000000,,,,,,
+2147479552,262.218663,0.367500000,,,,,,
+2147479552,262.230539,0.370000000,,,,,,
+2147479552,262.242882,0.372500000,,,,,,
+2147479552,262.243488,0.375000000,,,,,,
+2147479552,262.247115,0.377500000,,,,,,
+2147479552,262.254192,0.380000000,,,,,,
+2147479552,262.254736,0.382500000,,,,,,
+2147479552,262.262462,0.385000000,,,,,,
+2147479552,262.272530,0.387500000,,,,,,
+2147479552,262.273077,0.390000000,,,,,,
+2147479552,262.274918,0.392500000,,,,,,
+2147479552,262.275595,0.395000000,,,,,,
+2147479552,262.278512,0.397500000,,,,,,
+2147479552,262.281043,0.400000000,,,,,,
+2147479552,262.287448,0.402500000,,,,,,
+2147479552,262.287584,0.405000000,,,,,,
+2147479552,262.297586,0.407500000,,,,,,
+2147479552,262.298908,0.410000000,,,,,,
+2147479552,262.300510,0.412500000,,,,,,
+2147479552,262.302688,0.415000000,,,,,,
+2147479552,262.303804,0.417500000,,,,,,
+2147479552,262.309888,0.420000000,,,,,,
+2147479552,262.310181,0.422500000,,,,,,
+2147479552,262.312706,0.425000000,,,,,,
+2147479552,262.315860,0.427500000,,,,,,
+2147479552,262.321495,0.430000000,,,,,,
+2147479552,262.323120,0.432500000,,,,,,
+2147479552,262.328775,0.435000000,,,,,,
+2147479552,262.342021,0.437500000,,,,,,
+2147479552,262.352016,0.440000000,,,,,,
+2147479552,262.359199,0.442500000,,,,,,
+2147479552,262.361059,0.445000000,,,,,,
+2147479552,262.370040,0.447500000,,,,,,
+2147479552,262.375209,0.450000000,,,,,,
+2147479552,262.378650,0.452500000,,,,,,
+2147479552,262.383386,0.455000000,,,,,,
+2147479552,262.406533,0.457500000,,,,,,
+2147479552,262.406742,0.460000000,,,,,,
+2147479552,262.407975,0.462500000,,,,,,
+2147479552,262.417417,0.465000000,,,,,,
+2147479552,262.422369,0.467500000,,,,,,
+2147479552,262.422536,0.470000000,,,,,,
+2147479552,262.429137,0.472500000,,,,,,
+2147479552,262.429500,0.475000000,,,,,,
+2147479552,262.435915,0.477500000,,,,,,
+2147479552,262.435938,0.480000000,,,,,,
+2147479552,262.436101,0.482500000,,,,,,
+2147479552,262.450119,0.485000000,,,,,,
+2147479552,262.459994,0.487500000,,,,,,
+2147479552,262.460088,0.490000000,,,,,,
+2147479552,262.460471,0.492500000,,,,,,
+2147479552,262.470765,0.495000000,,,,,,
+2147479552,262.472214,0.497500000,,,,,,
+2147479552,262.472314,0.500000000,,,,,,
+2147479552,262.492773,0.502500000,,,,,,
+2147479552,262.506438,0.505000000,,,,,,
+2147479552,262.506822,0.507500000,,,,,,
+2147479552,262.508959,0.510000000,,,,,,
+2147479552,262.514777,0.512500000,,,,,,
+2147479552,262.515997,0.515000000,,,,,,
+2147479552,262.524973,0.517500000,,,,,,
+2147479552,262.535304,0.520000000,,,,,,
+2147479552,262.535587,0.522500000,,,,,,
+2147479552,262.536802,0.525000000,,,,,,
+2147479552,262.546491,0.527500000,,,,,,
+2147479552,262.552749,0.530000000,,,,,,
+2147479552,262.554294,0.532500000,,,,,,
+2147479552,262.561725,0.535000000,,,,,,
+2147479552,262.566760,0.537500000,,,,,,
+2147479552,262.569648,0.540000000,,,,,,
+2147479552,262.571549,0.542500000,,,,,,
+2147479552,262.583749,0.545000000,,,,,,
+2147479552,262.587147,0.547500000,,,,,,
+2147479552,262.589311,0.550000000,,,,,,
+2147479552,262.589571,0.552500000,,,,,,
+2147479552,262.592782,0.555000000,,,,,,
+2147479552,262.593648,0.557500000,,,,,,
+2147479552,262.600868,0.560000000,,,,,,
+2147479552,262.607376,0.562500000,,,,,,
+2147479552,262.609074,0.565000000,,,,,,
+2147479552,262.617428,0.567500000,,,,,,
+2147479552,262.626003,0.570000000,,,,,,
+2147479552,262.636218,0.572500000,,,,,,
+2147479552,262.641117,0.575000000,,,,,,
+2147479552,262.648357,0.577500000,,,,,,
+2147479552,262.648385,0.580000000,,,,,,
+2147479552,262.655059,0.582500000,,,,,,
+2147479552,262.662153,0.585000000,,,,,,
+2147479552,262.668031,0.587500000,,,,,,
+2147479552,262.692461,0.590000000,,,,,,
+2147479552,262.693749,0.592500000,,,,,,
+2147479552,262.712386,0.595000000,,,,,,
+2147479552,262.721862,0.597500000,,,,,,
+2147479552,262.722501,0.600000000,,,,,,
+2147479552,262.735986,0.602500000,,,,,,
+2147479552,262.746105,0.605000000,,,,,,
+2147479552,262.755180,0.607500000,,,,,,
+2147479552,262.755220,0.610000000,,,,,,
+2147479552,262.765315,0.612500000,,,,,,
+2147479552,262.778057,0.615000000,,,,,,
+2147479552,262.779943,0.617500000,,,,,,
+2147479552,262.794264,0.620000000,,,,,,
+2147479552,262.795420,0.622500000,,,,,,
+2147479552,262.797897,0.625000000,,,,,,
+2147479552,262.802833,0.627500000,,,,,,
+2147479552,262.808425,0.630000000,,,,,,
+2147479552,262.840531,0.632500000,,,,,,
+2147479552,262.844518,0.635000000,,,,,,
+2147479552,262.849940,0.637500000,,,,,,
+2147479552,262.866169,0.640000000,,,,,,
+2147479552,262.888337,0.642500000,,,,,,
+2147479552,262.892067,0.645000000,,,,,,
+2147479552,262.904521,0.647500000,,,,,,
+2147479552,262.904610,0.650000000,,,,,,
+2147479552,262.919008,0.652500000,,,,,,
+2147479552,262.935500,0.655000000,,,,,,
+2147479552,262.942750,0.657500000,,,,,,
+2147479552,262.950661,0.660000000,,,,,,
+2147479552,262.955467,0.662500000,,,,,,
+2147479552,262.960113,0.665000000,,,,,,
+2147479552,262.963603,0.667500000,,,,,,
+2147479552,262.981388,0.670000000,,,,,,
+2147479552,262.990790,0.672500000,,,,,,
+2147479552,262.991126,0.675000000,,,,,,
+2147479552,262.993678,0.677500000,,,,,,
+2147479552,263.000549,0.680000000,,,,,,
+2147479552,263.010653,0.682500000,,,,,,
+2147479552,263.019482,0.685000000,,,,,,
+2147479552,263.036192,0.687500000,,,,,,
+2147479552,263.040378,0.690000000,,,,,,
+2147479552,263.063222,0.692500000,,,,,,
+2147479552,263.064398,0.695000000,,,,,,
+2147479552,263.078185,0.697500000,,,,,,
+2147479552,263.094173,0.700000000,,,,,,
+2147479552,263.102126,0.702500000,,,,,,
+2147479552,263.106499,0.705000000,,,,,,
+2147479552,263.113615,0.707500000,,,,,,
+2147479552,263.119740,0.710000000,,,,,,
+2147479552,263.121543,0.712500000,,,,,,
+2147479552,263.130838,0.715000000,,,,,,
+2147479552,263.173032,0.717500000,,,,,,
+2147479552,263.201917,0.720000000,,,,,,
+2147479552,263.205192,0.722500000,,,,,,
+2147479552,263.208445,0.725000000,,,,,,
+2147479552,263.209847,0.727500000,,,,,,
+2147479552,263.260491,0.730000000,,,,,,
+2147479552,263.293130,0.732500000,,,,,,
+2147479552,263.300850,0.735000000,,,,,,
+2147479552,263.372309,0.737500000,,,,,,
+2147479552,263.458376,0.740000000,,,,,,
+2147479552,263.476521,0.742500000,,,,,,
+2147479552,263.623942,0.745000000,,,,,,
+2147479552,263.666802,0.747500000,,,,,,
+2147479552,263.669311,0.750000000,,,,,,
+2147479552,263.673481,0.752500000,,,,,,
+2147479552,263.789509,0.755000000,,,,,,
+2147479552,263.790138,0.757500000,,,,,,
+2147479552,263.829491,0.760000000,,,,,,
+2147479552,263.860601,0.762500000,,,,,,
+2147479552,263.862593,0.765000000,,,,,,
+2147479552,263.872954,0.767500000,,,,,,
+2147479552,263.887592,0.770000000,,,,,,
+2147479552,263.917510,0.772500000,,,,,,
+2147479552,263.922216,0.775000000,,,,,,
+2147479552,263.928720,0.777500000,,,,,,
+2147479552,263.935794,0.780000000,,,,,,
+2147479552,263.945389,0.782500000,,,,,,
+2147479552,263.975880,0.785000000,,,,,,
+2147479552,263.984712,0.787500000,,,,,,
+2147479552,263.995703,0.790000000,,,,,,
+2147479552,264.027100,0.792500000,,,,,,
+2147479552,264.050654,0.795000000,,,,,,
+2147479552,264.085517,0.797500000,,,,,,
+2147479552,264.110296,0.800000000,,,,,,
+2147479552,264.119029,0.802500000,,,,,,
+2147479552,264.126695,0.805000000,,,,,,
+2147479552,264.130985,0.807500000,,,,,,
+2147479552,264.133763,0.810000000,,,,,,
+2147479552,264.136387,0.812500000,,,,,,
+2147479552,264.156996,0.815000000,,,,,,
+2147479552,264.185862,0.817500000,,,,,,
+2147479552,264.188542,0.820000000,,,,,,
+2147479552,264.190575,0.822500000,,,,,,
+2147479552,264.206351,0.825000000,,,,,,
+2147479552,264.209025,0.827500000,,,,,,
+2147479552,264.227979,0.830000000,,,,,,
+2147479552,264.271842,0.832500000,,,,,,
+2147479552,264.274906,0.835000000,,,,,,
+2147479552,264.286213,0.837500000,,,,,,
+2147479552,264.304881,0.840000000,,,,,,
+2147479552,264.314509,0.842500000,,,,,,
+2147479552,264.327118,0.845000000,,,,,,
+2147479552,264.333310,0.847500000,,,,,,
+2147479552,264.339028,0.850000000,,,,,,
+2147479552,264.351667,0.852500000,,,,,,
+2147479552,264.366632,0.855000000,,,,,,
+2147479552,264.379055,0.857500000,,,,,,
+2147479552,264.409988,0.860000000,,,,,,
+2147479552,264.424186,0.862500000,,,,,,
+2147479552,264.440223,0.865000000,,,,,,
+2147479552,264.448092,0.867500000,,,,,,
+2147479552,264.507765,0.870000000,,,,,,
+2147479552,264.527815,0.872500000,,,,,,
+2147479552,264.557912,0.875000000,,,,,,
+2147479552,264.636512,0.877500000,,,,,,
+2147479552,264.680914,0.880000000,,,,,,
+2147479552,264.715209,0.882500000,,,,,,
+2147479552,264.726619,0.885000000,,,,,,
+2147479552,264.782292,0.887500000,,,,,,
+2147479552,264.787194,0.890000000,,,,,,
+2147479552,264.830038,0.892500000,,,,,,
+2147479552,264.889491,0.895000000,,,,,,
+2147479552,264.890820,0.897500000,,,,,,
+2147479552,264.934825,0.900000000,,,,,,
+2147479552,264.942039,0.902500000,,,,,,
+2147479552,264.983178,0.905000000,,,,,,
+2147479552,265.024846,0.907500000,,,,,,
+2147479552,265.029688,0.910000000,,,,,,
+2147479552,265.097228,0.912500000,,,,,,
+2147479552,265.162345,0.915000000,,,,,,
+2147479552,265.178099,0.917500000,,,,,,
+2147479552,265.268452,0.920000000,,,,,,
+2147479552,265.370389,0.922500000,,,,,,
+2147479552,265.437359,0.925000000,,,,,,
+2147479552,265.476259,0.927500000,,,,,,
+2147479552,265.546246,0.930000000,,,,,,
+2147479552,265.580418,0.932500000,,,,,,
+2147479552,265.592301,0.935000000,,,,,,
+2147479552,265.664703,0.937500000,,,,,,
+2147479552,265.729693,0.940000000,,,,,,
+2147479552,265.763242,0.942500000,,,,,,
+2147479552,265.777866,0.945000000,,,,,,
+2147479552,265.972221,0.947500000,,,,,,
+2147479552,266.018585,0.950000000,,,,,,
+2147479552,266.038995,0.952500000,,,,,,
+2147479552,266.047414,0.955000000,,,,,,
+2147479552,266.088952,0.957500000,,,,,,
+2147479552,266.132198,0.960000000,,,,,,
+2147479552,266.230858,0.962500000,,,,,,
+2147479552,266.294996,0.965000000,,,,,,
+2147479552,266.379908,0.967500000,,,,,,
+2147479552,266.493032,0.970000000,,,,,,
+2147479552,266.507906,0.972500000,,,,,,
+2147479552,266.635838,0.975000000,,,,,,
+2147479552,266.767899,0.977500000,,,,,,
+2147479552,266.769784,0.980000000,,,,,,
+2147479552,266.974649,0.982500000,,,,,,
+2147479552,266.997876,0.985000000,,,,,,
+2147479552,267.322457,0.987500000,,,,,,
+2147479552,267.421793,0.990000000,,,,,,
+2147479552,267.709202,0.992500000,,,,,,
+2147479552,267.747960,0.995000000,,,,,,
+2147479552,267.801091,0.997500000,,,,,,
+2147479552,267.934154,1.000000000,,,,,,