Repository: ericaltendorf/plotman (language: python)

Issue:
Parse command lines of existing jobs more robustly
E.g.:
```
$ ./plotman.py interactive
Warning: unrecognized args: -k32 -n1
Warning: unrecognized args: -t/tmp -2/tmp2
Warning: unrecognized args: -d/dst -b6000
Warning: unrecognized args: -u128 -r3
...
```
Should probably use a standard library for parsing the args. :)
Bug: analyzer module gets overloaded
On the current development branch (haven't tried anywhere else), this command fails:

```
plotman analyze # anthing else, doesn't matter
```

because the `analyzer` module is overloaded with a variable of the same name.
PsUtil access denied in MacOS
I manage to run the development branch in Ubuntu

But when I try in MacOs I got this error below. 
It  seems we need to ask Access Permission in MacOs first?

Thanks

```python-traceback
Traceback (most recent call last):
  File "/Users/kosada/chia/chia/venv/bin/plotman", line 8, in <module>
    sys.exit(main())
  File "/Users/kosada/chia/chia/venv/lib/python3.8/site-packages/plotman/plotman.py", line 127, in main
    jobs = Job.get_running_jobs(dir_cfg['log'])
  File "/Users/kosada/chia/chia/venv/lib/python3.8/site-packages/plotman/job.py", line 84, in get_running_jobs
    if is_plotting_cmdline(proc.cmdline()):
  File "/Users/kosada/chia/chia/venv/lib/python3.8/site-packages/psutil/init.py", line 677, in cmdline
    return self._proc.cmdline()
  File "/Users/kosada/chia/chia/venv/lib/python3.8/site-packages/psutil/_psosx.py", line 351, in wrapper
    raise AccessDenied(self.pid, self._name)
psutil.AccessDenied: psutil.AccessDenied (pid=1)
```


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..dfa08abb
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,169 @@
+name: CI
+
+on:
+  push:
+    branches: [ development ]
+    tags: [ "**" ]
+  pull_request:
+    branches: [ "**" ]
+
+defaults:
+  run:
+    shell: bash
+
+jobs:
+  build:
+    name: ${{ matrix.task.name}} - ${{ matrix.os.name }} ${{ matrix.python.name }}
+    runs-on: ${{ matrix.os.runs-on }}
+    strategy:
+      fail-fast: false
+      matrix:
+        os:
+          - name: Linux
+            runs-on: ubuntu-latest
+            matrix: linux
+        python:
+          - name: CPython 3.8
+            tox: py38
+            action: 3.8
+        task:
+          - name: Build
+            tox: build
+
+    steps:
+    - uses: actions/checkout@v2
+      with:
+        ref: ${{ github.event.pull_request.head.sha }}
+    - name: Set up ${{ matrix.python.name }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python.action }}
+
+    - name: Install dependencies
+      run: |
+        python -m pip install --upgrade pip setuptools wheel
+        python -m pip install build check-manifest twine
+
+    - uses: twisted/python-info-action@v1
+
+    - name: Build
+      run: |
+        check-manifest --verbose .
+
+        python -m build --sdist --outdir dist/ .
+
+        mkdir empty/
+        cd empty
+
+        tar -xvf ../dist/*
+        cd *
+
+        # build the wheel from the sdist
+        python -m build --wheel --outdir ../../dist/ .
+        cd ../../
+
+        twine check dist/*
+
+    - name: Publish
+      uses: actions/upload-artifact@v2
+      with:
+        name: dist
+        path: dist/
+
+  test:
+    name: ${{ matrix.task.name}} - ${{ matrix.os.name }} ${{ matrix.python.name }}
+    runs-on: ${{ matrix.os.runs-on }}
+    needs:
+      - build
+    strategy:
+      fail-fast: false
+      matrix:
+        os:
+          - name: Linux
+            runs-on: ubuntu-latest
+            matrix: linux
+          - name: macOS
+            runs-on: macos-latest
+            matrix: macos
+        python:
+          - name: CPython 3.7
+            tox: py37
+            action: 3.7
+          - name: CPython 3.8
+            tox: py38
+            action: 3.8
+          - name: CPython 3.9
+            tox: py39
+            action: 3.9
+        task:
+          - name: Test
+            tox: test
+        include:
+          - task:
+              name: Check
+              tox: check
+            os:
+              name: Linux
+              runs-on: ubuntu-latest
+            python:
+              name: CPython 3.8
+              action: 3.8
+
+
+    env:
+      TOXENV: ${{ matrix.task.tox }}${{ fromJSON('["", "-"]')[matrix.python.tox != null] }}${{ matrix.python.tox }}
+
+    steps:
+    - uses: actions/checkout@v2
+      with:
+        ref: ${{ github.event.pull_request.head.sha }}
+
+    - name: Download package files
+      uses: actions/download-artifact@v2
+      with:
+        name: dist
+        path: dist/
+
+    - name: Set up ${{ matrix.python.name }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python.action }}
+
+    - name: Generate extra locales (Linux)
+      if: ${{ matrix.os.matrix == 'linux' }}
+      run: |
+        sudo apt-get update
+        sudo apt-get install --yes tzdata locales
+        sudo locale-gen en_US.UTF-8 de_DE.UTF-8
+
+    - name: Install dependencies
+      run: |
+        python -m pip install --upgrade pip setuptools wheel
+        pip install tox
+
+    - name: Prepare tox environment
+      run: |
+        tox --notest --installpkg dist/*.whl
+
+    - name: Runner info
+      uses: twisted/python-info-action@v1
+
+    - name: Tox info
+      uses: twisted/python-info-action@v1
+      with:
+        python-path: .tox/${{ env.TOXENV }}/*/python
+
+    - name: Test
+      run: |
+        tox --skip-pkg-install
+
+  all:
+    name: All
+    runs-on: ubuntu-latest
+    needs:
+      - build
+      - test
+    steps:
+      - name: This
+        shell: python
+        run: import this
diff --git a/.gitignore b/.gitignore
index bee8a64b..82adb58b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,1 +1,2 @@
 __pycache__
+venv
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 00000000..c6146883
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,9 @@
+include CHANGELOG.md
+include LICENSE
+include README.md
+include *.md
+include VERSION
+include tox.ini
+recursive-include src *.py
+recursive-include src/plotman/_tests/resources *
+recursive-include src/plotman/resources *
diff --git a/README.md b/README.md
index 16895d0f..b298e7ca 100644
--- a/README.md
+++ b/README.md
@@ -122,7 +122,7 @@ by their unique suffix.  For example, if we have `tmp` dirs `/mnt/tmp/00`,
 `/mnt/tmp/01`, `/mnt/tmp/02`, etc., we show `/mnt/tmp` as the prefix here and
 can then talk about `tmp` dirs `00` or `01` etc.  The `archive` directories are
 the same except that these are paths on a remote host and accessed via an
-`rsyncd` module (see `config.yaml` for details).
+`rsyncd` module (see `src/plotman/resources/plotman.yaml` for details).
 
 The next table shows information about the active plotting jobs.  It is
 abbreviated to show the most and least recently started jobs (the full list is
@@ -166,17 +166,40 @@ mode or the command line mode.
 
 There are many bugs and TODOs.
 
-## Installation
+Plotman will always look for the `plotman.yaml` file within your computer at an OS-based
+default location. To generate a default `plotman.yaml`, run:
+```shell
+> plotman config generate
+```
 
-This program requires `psutil`, `pyfakefs`, and `texttable`.
+To display the current location of your `plotman.yaml` file and check if it exists, run:
+```shell
+> plotman config path
+```
 
-Installation for Ubuntu 20.04:
+([See also](https://github.com/ericaltendorf/plotman/pull/61#issuecomment-812967363)).
 
-```
-# Install Python package system
-sudo apt-get install python3-pip
+## Installation
 
-python3 -m pip install psutil
-python3 -m pip install pyfakefs
-python3 -m pip install texttable
-```
+Installation for Linux:
+
+1. Plotman assumes that a functioning [Chia](https://github.com/Chia-Network/chia-blockchain)
+   installation is present on the system. Activate your `chia` environment by typing
+   `source /path/to/your/chia/install/activate`.
+2. Then, install Plotman using the following command:
+   ```shell
+    > pip install --force-reinstall git+https://github.com/ericaltendorf/plotman@main
+    ```
+3. Plotman will look for `plotman.yaml` within your computer at an OS-based
+   default location. To create a default `plotman.yaml` and display its location,
+   run the following command:
+   ```shell
+   > plotman config generate
+   ```
+   The default configuration file used as a starting point is located [here](./src/plotman/resources/plotman.yaml)
+4. That's it! You can now run Plotman by typing `plotman version` to verify its version.
+   Run `plotman --help` to learn about the available commands.
+
+### Development note:
+
+If you are forking Plotman, simply replace the installation step with `pip install --editable .[dev]` from the project root directory to install *your* version of plotman with test and development extras.
diff --git a/VERSION b/VERSION
new file mode 100644
index 00000000..3b04cfb6
--- /dev/null
+++ b/VERSION
@@ -0,0 +1,1 @@
+0.2
diff --git a/analyzer.py b/analyzer.py
deleted file mode 100755
index 6640f025..00000000
--- a/analyzer.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/python3
-
-import os
-import re
-import statistics
-import sys
-import texttable as tt
-
-import plot_util
-
-class LogAnalyzer:
-    # Map from key (e.g. logdir or the like) to (map from measurement name to list of values)
-    all_measures = ['phase 1', 'phase 2', 'phase 3', 'phase 4', 'total time']
-
-    def analyze(self, logfilenames):
-        data = {}
-        for logfilename in logfilenames:
-            with open(logfilename, 'r') as f:
-                key = 'x'  # TODO
-                for line in f:
-                    #
-                    # Aggregation specification
-                    #
-
-                    # Starting phase 1/4: Forward Propagation into tmp files... Sun Nov 15 00:35:57 2020
-                    # TODO: This only does by day!!!
-                    m = re.search(r'^Starting phase 1/4.*files.*\d\d (\d\d):\d\d:\d\d \d\d\d\d', line)
-                    if m:
-                        bucketsize = 2
-                        hour = int(m.group(1))
-                        hourbucket = int(hour / bucketsize)
-                        # key += '-%02d-%02d' % (hourbucket * bucketsize, (hourbucket + 1) * bucketsize)
-
-                    # Starting plotting progress into temporary dirs: /mnt/tmp/01 and /mnt/tmp/a
-                    m = re.search(r'^Starting plotting.*dirs: (.*) and (.*)', line)
-                    if False and m:
-                        tmpdir = m.group(1)
-                        # Hack to split data for backing hardware
-                        tmpdir_idx = tmpdir[-2:]
-                        if tmpdir_idx in ['00', '01']:
-                            key += '-wd-raid'
-                        if tmpdir_idx in ['02', '03', '04', '05']:
-                            key += '-samsung'
-
-                    #
-                    # Data collection
-                    #
-
-                    # Time for phase 1 = 22796.7 seconds. CPU (98%) Tue Sep 29 17:57:19 2020
-                    for phase in ['1', '2', '3', '4']:
-                        m = re.search(r'^Time for phase ' + phase + ' = (\d+.\d+) seconds..*', line)
-                        if m:
-                            data.setdefault(key, {}).setdefault('phase ' + phase, []).append(float(m.group(1)))
-
-                    # Total time = 49487.1 seconds. CPU (97.26%) Wed Sep 30 01:22:10 2020
-                    m = re.search(r'^Total time = (\d+.\d+) seconds.*', line)
-                    if m:
-                        data.setdefault(key, {}).setdefault('total time', []).append(float(m.group(1)))
-
-        # Prepare report
-        tab = tt.Texttable()
-        headings = ['Key'] + self.all_measures
-        tab.header(headings)
-
-        #for logdir in logdirs:
-        for key in data.keys():
-            row = [key]
-            for measure in self.all_measures:
-                values = data.get(key, {}).get(measure, [])
-                if(len(values) > 1):
-                    row.append('μ=%s σ=%s' % (
-                        plot_util.human_format(statistics.mean(values), 1),
-                        plot_util.human_format(statistics.stdev(values), 0)
-                        ))
-                elif(len(values) == 1):
-                    row.append(plot_util.human_format(values[0], 1))
-                else:
-                    row.append('N/A')
-            tab.add_row(row)
-
-        (rows, columns) = os.popen('stty size', 'r').read().split()
-        tab.set_max_width(int(columns))
-        s = tab.draw()
-        print(s)
-
-
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 00000000..9787c3bd
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools", "wheel"]
+build-backend = "setuptools.build_meta"
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 00000000..092ae2b3
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,72 @@
+[metadata]
+name = plotman
+version = file: VERSION
+author = Eric Altendorf
+home-page = https://github.com/ericaltendorf/plotman
+description = Chia plotting manager
+long-description = file: README.md
+long_description_content_type = text/markdown
+license = Apache 2.0
+license-file = LICENSE
+python_requires = >=3.7
+keywords = chia, blockchain, automation, process management
+classifiers =
+    Development Status :: 3 - Alpha
+    Environment :: Console :: Curses
+    Intended Audience :: Developers
+    Intended Audience :: System Administrators
+    Intended Audience :: Information Technology
+    License :: OSI Approved :: Apache Software License
+    Natural Language :: English
+    Operating System :: POSIX :: Linux
+    Operating System :: MacOS :: MacOS X
+    Programming Language :: Python :: 3
+    Programming Language :: Python :: Implementation :: CPython
+    Programming Language :: Python :: Implementation :: PyPy
+    Topic :: System :: Monitoring
+    Topic :: System :: Systems Administration
+    Topic :: Utilities
+project_urls = 
+    Bug Tracker = https://github.com/ericaltendorf/plotman/issues
+    Changelog = https://github.com/ericaltendorf/plotman/blob/main/CHANGELOG.md
+
+[options]
+include_package_data = True
+package_dir=
+    =src
+packages=find:
+install_requires =
+    appdirs
+    desert
+    marshmallow
+    pendulum
+    psutil ~= 5.8
+    pyyaml
+    texttable
+
+[options.packages.find]
+where=src
+
+[options.entry_points]
+console_scripts =
+    plotman = plotman.plotman:main
+
+[options.extras_require]
+dev =
+    %(test)s
+    isort
+test = 
+    check-manifest
+    pytest
+    pytest-mock
+    pyfakefs
+
+[options.data_files]
+config = src/plotman/resources/plotman.yaml
+bin = util/listlogs
+
+[isort]
+multi_line_output=3
+include_trailing_comma=True
+force_grid_wrap=0
+line_length=88
diff --git a/setup.py b/setup.py
new file mode 100644
index 00000000..056ba45d
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,4 @@
+import setuptools
+
+
+setuptools.setup()
diff --git a/src/plotman/__init__.py b/src/plotman/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/plotman/__main__.py b/src/plotman/__main__.py
new file mode 100644
index 00000000..c6f25c3f
--- /dev/null
+++ b/src/plotman/__main__.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python3
+
+from plotman import plotman
+
+
+"""Plotman module launcher.
+This is a shim that allows you to run plotman via 
+    python3 -m plotman
+"""
+plotman.main()
diff --git a/src/plotman/analyzer.py b/src/plotman/analyzer.py
new file mode 100644
index 00000000..67073805
--- /dev/null
+++ b/src/plotman/analyzer.py
@@ -0,0 +1,138 @@
+import os
+import re
+import statistics
+import sys
+
+import texttable as tt
+
+from plotman import plot_util
+
+
+def analyze(logfilenames, clipterminals, bytmp, bybitfield):
+    data = {}
+    for logfilename in logfilenames:
+        with open(logfilename, 'r') as f:
+            # Record of slicing and data associated with the slice
+            sl = 'x'         # Slice key
+            phase_time = {}  # Map from phase index to time
+            n_sorts = 0
+            n_uniform = 0
+            is_first_last = False
+
+            # Read the logfile, triggering various behaviors on various
+            # regex matches.
+            for line in f:
+                # Beginning of plot job.  We may encounter this multiple
+                # times, if a job was run with -n > 1.  Sample log line:
+                # 2021-04-08T13:33:43.542  chia.plotting.create_plots       : INFO     Starting plot 1/5
+                m = re.search(r'Starting plot (\d*)/(\d*)', line)
+                if m:
+                    # (re)-initialize data structures
+                    sl = 'x'         # Slice key
+                    phase_time = {}  # Map from phase index to time
+                    n_sorts = 0
+                    n_uniform = 0
+
+                    seq_num = int(m.group(1))
+                    seq_total = int(m.group(2))
+                    is_first_last = seq_num == 1 or seq_num == seq_total
+
+                # Temp dirs.  Sample log line:
+                # Starting plotting progress into temporary dirs: /mnt/tmp/01 and /mnt/tmp/a
+                m = re.search(r'^Starting plotting.*dirs: (.*) and (.*)', line)
+                if m:
+                    # Record tmpdir, if slicing by it
+                    if bytmp:
+                        tmpdir = m.group(1)
+                        sl += '-' + tmpdir
+
+                # Bitfield marker.  Sample log line(s):
+                # Starting phase 2/4: Backpropagation without bitfield into tmp files... Mon Mar  1 03:56:11 2021
+                #   or
+                # Starting phase 2/4: Backpropagation into tmp files... Fri Apr  2 03:17:32 2021
+                m = re.search(r'^Starting phase 2/4: Backpropagation', line)
+                if bybitfield and m:
+                    if 'without bitfield' in line:
+                        sl += '-nobitfield'
+                    else:
+                        sl += '-bitfield'
+
+                # Phase timing.  Sample log line:
+                # Time for phase 1 = 22796.7 seconds. CPU (98%) Tue Sep 29 17:57:19 2020
+                for phase in ['1', '2', '3', '4']:
+                    m = re.search(r'^Time for phase ' + phase + ' = (\d+.\d+) seconds..*', line)
+                    if m:
+                        phase_time[phase] = float(m.group(1))
+
+                # Uniform sort.  Sample log line:
+                # Bucket 267 uniform sort. Ram: 0.920GiB, u_sort min: 0.688GiB, qs min: 0.172GiB.
+                #   or
+                # ....?....
+                #   or
+                # Bucket 511 QS. Ram: 0.920GiB, u_sort min: 0.375GiB, qs min: 0.094GiB. force_qs: 1
+                m = re.search(r'Bucket \d+ ([^\.]+)\..*', line)
+                if m and not 'force_qs' in line:
+                    sorter = m.group(1)
+                    n_sorts += 1
+                    if sorter == 'uniform sort':
+                        n_uniform += 1
+                    elif sorter == 'QS':
+                        pass
+                    else:
+                        print ('Warning: unrecognized sort ' + sorter)
+
+                # Job completion.  Record total time in sliced data store.
+                # Sample log line:
+                # Total time = 49487.1 seconds. CPU (97.26%) Wed Sep 30 01:22:10 2020
+                m = re.search(r'^Total time = (\d+.\d+) seconds.*', line)
+                if m:
+                    if clipterminals and is_first_last:
+                        pass  # Drop this data; omit from statistics.
+                    else:
+                        data.setdefault(sl, {}).setdefault('total time', []).append(float(m.group(1)))
+                        for phase in ['1', '2', '3', '4']:
+                            data.setdefault(sl, {}).setdefault('phase ' + phase, []).append(phase_time[phase])
+                        data.setdefault(sl, {}).setdefault('%usort', []).append(100 * n_uniform // n_sorts)
+
+    # Prepare report
+    tab = tt.Texttable()
+    all_measures = ['%usort', 'phase 1', 'phase 2', 'phase 3', 'phase 4', 'total time']
+    headings = ['Slice', 'n'] + all_measures
+    tab.header(headings)
+
+    for sl in data.keys():
+        row = [sl]
+
+        # Sample size
+        sample_sizes = []
+        for measure in all_measures:
+            values = data.get(sl, {}).get(measure, [])
+            sample_sizes.append(len(values))
+        sample_size_lower_bound = min(sample_sizes)
+        sample_size_upper_bound = max(sample_sizes)
+        if sample_size_lower_bound == sample_size_upper_bound:
+            row.append('%d' % sample_size_lower_bound)
+        else:
+            row.append('%d-%d' % (sample_size_lower_bound, sample_size_upper_bound))
+
+        # Phase timings
+        for measure in all_measures:
+            values = data.get(sl, {}).get(measure, [])
+            if(len(values) > 1):
+                row.append('μ=%s σ=%s' % (
+                    plot_util.human_format(statistics.mean(values), 1),
+                    plot_util.human_format(statistics.stdev(values), 0)
+                    ))
+            elif(len(values) == 1):
+                row.append(plot_util.human_format(values[0], 1))
+            else:
+                row.append('N/A')
+
+        tab.add_row(row)
+
+    (rows, columns) = os.popen('stty size', 'r').read().split()
+    tab.set_max_width(int(columns))
+    s = tab.draw()
+    print(s)
+
+
diff --git a/archive.py b/src/plotman/archive.py
old mode 100755
new mode 100644
similarity index 66%
rename from archive.py
rename to src/plotman/archive.py
index 0655e549..17a29af0
--- a/archive.py
+++ b/src/plotman/archive.py
@@ -1,19 +1,17 @@
-#!/usr/bin/python3
-
-from datetime import datetime
-import subprocess
 import argparse
+import contextlib
 import math
 import os
-import psutil
-import re
 import random
+import re
+import subprocess
 import sys
+from datetime import datetime
 
+import psutil
 import texttable as tt
 
-import manager
-import plot_util
+from plotman import manager, plot_util
 
 # TODO : write-protect and delete-protect archived plots
 
@@ -25,16 +23,18 @@ def compute_priority(phase, gb_free, n_plots):
     priority = 50
 
     # To avoid concurrent IO, we should not touch drives that
-    # are about to receive a new plot
-    if (phase == (3, 4)):
-        priority -= 4
-    elif (phase == (3, 5)):
-        priority -= 8
-    elif (phase == (3, 6)):
-        priority -= 16
-    elif (phase >= (3, 7)):
-        priority -= 32
-    
+    # are about to receive a new plot.  If we don't know the phase,
+    # ignore.
+    if (phase[0] and phase[1]):
+        if (phase == (3, 4)):
+            priority -= 4
+        elif (phase == (3, 5)):
+            priority -= 8
+        elif (phase == (3, 6)):
+            priority -= 16
+        elif (phase >= (3, 7)):
+            priority -= 32
+        
     # If a drive is getting full, we should prioritize it
     if (gb_free < 1000):
         priority += 1 + int((1000 - gb_free) / 100)
@@ -48,23 +48,26 @@ def compute_priority(phase, gb_free, n_plots):
     return priority
 
 def get_archdir_freebytes(arch_cfg):
-    archdir_freebytes = { }
-    df_cmd = ('ssh %s@%s df -BK | grep " %s/"' %
-        (arch_cfg['rsyncd_user'], arch_cfg['rsyncd_host'], arch_cfg['rsyncd_path']) )
+    archdir_freebytes = {}
+    df_cmd = ('ssh %s@%s df -aBK | grep " %s/"' %
+        (arch_cfg.rsyncd_user, arch_cfg.rsyncd_host, arch_cfg.rsyncd_path) )
     with subprocess.Popen(df_cmd, shell=True, stdout=subprocess.PIPE) as proc:
         for line in proc.stdout.readlines():
             fields = line.split()
+            if fields[3] == b'-':
+                # not actually mounted
+                continue
             freebytes = int(fields[3][:-1]) * 1024  # Strip the final 'K'
             archdir = (fields[5]).decode('ascii')
             archdir_freebytes[archdir] = freebytes
     return archdir_freebytes
 
 def rsync_dest(arch_cfg, arch_dir):
-    rsync_path = arch_dir.replace(arch_cfg['rsyncd_path'], arch_cfg['rsyncd_module'])
+    rsync_path = arch_dir.replace(arch_cfg.rsyncd_path, arch_cfg.rsyncd_module)
     if rsync_path.startswith('/'):
         rsync_path = rsync_path[1:]  # Avoid dup slashes.  TODO use path join?
     rsync_url = 'rsync://%s@%s:12000/%s' % (
-            arch_cfg['rsyncd_user'], arch_cfg['rsyncd_host'], rsync_path)
+            arch_cfg.rsyncd_user, arch_cfg.rsyncd_host, rsync_path)
     return rsync_url
 
 # TODO: maybe consolidate with similar code in job.py?
@@ -74,11 +77,12 @@ def get_running_archive_jobs(arch_cfg):
     jobs = []
     dest = rsync_dest(arch_cfg, '/')
     for proc in psutil.process_iter(['pid', 'name']):
-        if proc.name() == 'rsync':
-            args = proc.cmdline()
-            for arg in args:
-                if arg.startswith(dest):
-                    jobs.append(proc.pid)
+        with contextlib.suppress(psutil.NoSuchProcess):
+            if proc.name() == 'rsync':
+                args = proc.cmdline()
+                for arg in args:
+                    if arg.startswith(dest):
+                        jobs.append(proc.pid)
     return jobs
 
 def archive(dir_cfg, all_jobs):
@@ -86,15 +90,14 @@ def archive(dir_cfg, all_jobs):
     contention on the plotting dstdir drives.  Returns either (False, <reason>) 
     if we should not execute an archive job or (True, <cmd>) with the archive
     command if we should.'''
-
-    dstdirs = dir_cfg['dst']
-    arch_cfg = dir_cfg['archive']
+    if dir_cfg.archive is None:
+        return (False, "No 'archive' settings declared in plotman.yaml")
 
     dir2ph = manager.dstdirs_to_furthest_phase(all_jobs)
     best_priority = -100000000
     chosen_plot = None
 
-    for d in dstdirs:
+    for d in dir_cfg.dst:
         ph = dir2ph.get(d, (0, 0))
         dir_plots = plot_util.list_k32_plots(d)
         gb_free = plot_util.df_b(d) / plot_util.GB
@@ -113,26 +116,25 @@ def archive(dir_cfg, all_jobs):
     #
     # Pick first archive dir with sufficient space
     #
-    archdir_freebytes = get_archdir_freebytes(arch_cfg)
+    archdir_freebytes = get_archdir_freebytes(dir_cfg.archive)
     if not archdir_freebytes:
         return(False, 'No free archive dirs found.')
     
     archdir = ''
-    for (d, space) in sorted(archdir_freebytes.items()):
-        # TODO: make buffer configurable
-        if space > 1.2 * plot_util.get_k32_plotsize():   # Leave a little buffer
-            archdir = d
-            freespace = space
-            break
+    available = [(d, space) for (d, space) in archdir_freebytes.items() if 
+                 space > 1.2 * plot_util.get_k32_plotsize()]
+    if len(available) > 0:
+        index = min(dir_cfg.archive.index, len(available) - 1)
+        (archdir, freespace) = sorted(available)[index]
 
     if not archdir:
         return(False, 'No archive directories found with enough free space')
     
     msg = 'Found %s with ~%d GB free' % (archdir, freespace / plot_util.GB)
 
-    bwlimit = arch_cfg['rsyncd_bwlimit']
+    bwlimit = dir_cfg.archive.rsyncd_bwlimit
     throttle_arg = ('--bwlimit=%d' % bwlimit) if bwlimit else ''
     cmd = ('rsync %s --remove-source-files -P %s %s' %
-            (throttle_arg, chosen_plot, rsync_dest(arch_cfg, archdir)))
+            (throttle_arg, chosen_plot, rsync_dest(dir_cfg.archive, archdir)))
 
     return (True, cmd)
diff --git a/src/plotman/configuration.py b/src/plotman/configuration.py
new file mode 100644
index 00000000..44b12c43
--- /dev/null
+++ b/src/plotman/configuration.py
@@ -0,0 +1,92 @@
+from dataclasses import dataclass
+from typing import Dict, List, Optional
+
+import appdirs
+import desert
+import marshmallow
+import yaml
+
+
+class ConfigurationException(Exception):
+    """Raised when plotman.yaml configuration is missing or malformed."""
+
+
+def get_path():
+    """Return path to where plotman.yaml configuration file should exist."""
+    return appdirs.user_config_dir("plotman") + "/plotman.yaml"
+
+
+def get_validated_configs():
+    """Return a validated instance of the PlotmanConfig dataclass with data from plotman.yaml
+
+    :raises ConfigurationException: Raised when plotman.yaml is either missing or malformed
+    """
+    schema = desert.schema(PlotmanConfig)
+    config_file_path = get_path()
+    try:
+        with open(config_file_path, "r") as file:
+            config_file = yaml.load(file, Loader=yaml.SafeLoader)
+            return schema.load(config_file)
+    except FileNotFoundError as e:
+        raise ConfigurationException(
+            f"No 'plotman.yaml' file exists at expected location: '{config_file_path}'. To generate "
+            f"default config file, run: 'plotman config generate'"
+        ) from e
+    except marshmallow.exceptions.ValidationError as e:
+        raise ConfigurationException(f"Config file at: '{config_file_path}' is malformed") from e
+
+
+# Data models used to deserializing/formatting plotman.yaml files.
+
+@dataclass
+class Archive:
+    rsyncd_module: str
+    rsyncd_path: str
+    rsyncd_bwlimit: int
+    rsyncd_host: str
+    rsyncd_user: str
+    index: int = 0  # If not explicit, "index" will default to 0
+
+@dataclass
+class TmpOverrides:
+    tmpdir_max_jobs: Optional[int] = None
+
+@dataclass
+class Directories:
+    log: str
+    tmp: List[str]
+    dst: List[str]
+    tmp2: Optional[str] = None
+    tmp_overrides: Optional[Dict[str, TmpOverrides]] = None
+    archive: Optional[Archive] = None
+
+@dataclass
+class Scheduling:
+    global_max_jobs: int
+    global_stagger_m: int
+    polling_time_s: int
+    tmpdir_max_jobs: int
+    tmpdir_stagger_phase_major: int
+    tmpdir_stagger_phase_minor: int
+    tmpdir_stagger_phase_limit: int = 1  # If not explicit, "tmpdir_stagger_phase_limit" will default to 1
+
+@dataclass
+class Plotting:
+    k: int
+    e: bool
+    n_threads: int
+    n_buckets: int
+    job_buffer: int
+    farmer_pk: Optional[str] = None
+    pool_pk: Optional[str] = None
+
+@dataclass
+class UserInterface:
+    use_stty_size: bool
+
+@dataclass
+class PlotmanConfig:
+    user_interface: UserInterface
+    directories: Directories
+    scheduling: Scheduling
+    plotting: Plotting
diff --git a/interactive.py b/src/plotman/interactive.py
similarity index 58%
rename from interactive.py
rename to src/plotman/interactive.py
index 885d5ef6..321aa14c 100644
--- a/interactive.py
+++ b/src/plotman/interactive.py
@@ -1,15 +1,14 @@
 import curses
 import datetime
 import locale
+import math
 import os
 import subprocess
 import threading
-import yaml
 
-from job import Job
-import archive
-import manager
-import reporting
+from plotman import archive, configuration, manager, reporting
+from plotman.job import Job
+
 
 class Log:
     def __init__(self):
@@ -62,119 +61,184 @@ def archiving_status_msg(configured, active, status):
         return '(not configured)'
 
 def curses_main(stdscr):
-    # TODO: figure out how to pass the configs in from plotman.py instead of
-    # duplicating the code here.
-    with open('config.yaml', 'r') as ymlfile:
-        cfg = yaml.load(ymlfile, Loader=yaml.FullLoader)
-    dir_cfg = cfg['directories']
-    sched_cfg = cfg['scheduling']
-    plotting_cfg = cfg['plotting']
-
     log = Log()
 
+    cfg = configuration.get_validated_configs()
+
     plotting_active = True
-    archiving_configured = 'archive' in dir_cfg
+    archiving_configured = cfg.directories.archive is not None
     archiving_active = archiving_configured
 
-    (n_rows, n_cols) = map(int, stdscr.getmaxyx())
-
-    # Page layout.  Currently requires at least ~40 rows.
-    # TODO: make everything dynamically resize to best use available space
-    header_height = 3
-    jobs_height = 10
-    dirs_height = 14
-    logscreen_height = n_rows - (header_height + jobs_height + dirs_height)
-
-    header_pos = 0
-    jobs_pos = header_pos + header_height
-    dirs_pos = jobs_pos + jobs_height
-    logscreen_pos = dirs_pos + dirs_height
-
     plotting_status = '<startup>'    # todo rename these msg?
     archiving_status = '<startup>'
 
-    refresh_period = int(sched_cfg['polling_time_s'])
-
     stdscr.nodelay(True)  # make getch() non-blocking
     stdscr.timeout(2000)
 
-    header_win = curses.newwin(header_height, n_cols, header_pos, 0)
-    log_win = curses.newwin(logscreen_height, n_cols, logscreen_pos, 0)
-    jobs_win = curses.newwin(jobs_height, n_cols, jobs_pos, 0)
-    dirs_win = curses.newwin(dirs_height, n_cols, dirs_pos, 0)
+    # Create windows.  We'll size them in the main loop when we have their content.
+    header_win = curses.newwin(1, 1, 1, 0)
+    log_win = curses.newwin(1, 1, 1, 0)
+    jobs_win = curses.newwin(1, 1, 1, 0)
+    dirs_win = curses.newwin(1, 1, 1, 0)
 
-    jobs = Job.get_running_jobs(dir_cfg['log'])
-    last_refresh = datetime.datetime.now()
+    jobs = Job.get_running_jobs(cfg.directories.log)
+    last_refresh = None
 
     pressed_key = ''   # For debugging
 
-    while True:
-
-        # TODO: handle resizing.  Need to (1) figure out how to reliably get
-        # the terminal size -- the recommended method doesn't seem to work:
-        #    (n_rows, n_cols) = [int(v) for v in stdscr.getmaxyx()]
-        # Consider instead:
-        #    ...[int(v) for v in os.popen('stty size', 'r').read().split()]
-        # and then (2) implement the logic to resize all the subwindows as above
+    archdir_freebytes = None
 
-        stdscr.clear()
-        linecap = n_cols - 1
-        logscreen_height = n_rows - (header_height + jobs_height + dirs_height)
-
-        elapsed = (datetime.datetime.now() - last_refresh).total_seconds() 
+    while True:
 
         # A full refresh scans for and reads info for running jobs from
         # scratch (i.e., reread their logfiles).  Otherwise we'll only
         # initialize new jobs, and mostly rely on cached info.
-        do_full_refresh = elapsed >= refresh_period
+        do_full_refresh = False
+        elapsed = 0    # Time since last refresh, or zero if no prev. refresh
+        if last_refresh is None:
+            do_full_refresh = True
+        else:
+            elapsed = (datetime.datetime.now() - last_refresh).total_seconds() 
+            do_full_refresh = elapsed >= cfg.scheduling.polling_time_s
 
         if not do_full_refresh:
-            jobs = Job.get_running_jobs(dir_cfg['log'], cached_jobs=jobs)
+            jobs = Job.get_running_jobs(cfg.directories.log, cached_jobs=jobs)
 
         else:
             last_refresh = datetime.datetime.now()
-            jobs = Job.get_running_jobs(dir_cfg['log'])
+            jobs = Job.get_running_jobs(cfg.directories.log)
 
             if plotting_active:
-                (started, msg) = manager.maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg)
+                (started, msg) = manager.maybe_start_new_plot(
+                    cfg.directories, cfg.scheduling, cfg.plotting
+                )
                 if (started):
                     log.log(msg)
                     plotting_status = '<just started job>'
-                    jobs = Job.get_running_jobs(dir_cfg['log'], cached_jobs=jobs)
+                    jobs = Job.get_running_jobs(cfg.directories.log, cached_jobs=jobs)
                 else:
                     plotting_status = msg
 
-            if archiving_configured and archiving_active:
-                # Look for running archive jobs.  Be robust to finding more than one
-                # even though the scheduler should only run one at a time.
-                arch_jobs = archive.get_running_archive_jobs(dir_cfg['archive'])
-                if arch_jobs:
-                    archiving_status = 'pid: ' + ', '.join(map(str, arch_jobs))
-                else:
-                    (should_start, status_or_cmd) = archive.archive(dir_cfg, jobs)
-                    if not should_start:
-                        archiving_status = status_or_cmd
+            if archiving_configured:
+                if archiving_active:
+                    # Look for running archive jobs.  Be robust to finding more than one
+                    # even though the scheduler should only run one at a time.
+                    arch_jobs = archive.get_running_archive_jobs(cfg.directories.archive)
+                    if arch_jobs:
+                        archiving_status = 'pid: ' + ', '.join(map(str, arch_jobs))
                     else:
-                        cmd = status_or_cmd
-                        log.log('Starting archive: ' + cmd)
+                        (should_start, status_or_cmd) = archive.archive(cfg.directories, jobs)
+                        if not should_start:
+                            archiving_status = status_or_cmd
+                        else:
+                            cmd = status_or_cmd
+                            log.log('Starting archive: ' + cmd)
+
+                            # TODO: do something useful with output instead of DEVNULL
+                            p = subprocess.Popen(cmd,
+                                    shell=True,
+                                    stdout=subprocess.DEVNULL,
+                                    stderr=subprocess.STDOUT,
+                                    start_new_session=True)
+
+                archdir_freebytes = archive.get_archdir_freebytes(cfg.directories.archive)
+
+
+        # Get terminal size.  Recommended method is stdscr.getmaxyx(), but this
+        # does not seem to work on some systems.  It may be a bug in Python
+        # curses, maybe having to do with registering sigwinch handlers in
+        # multithreaded environments.  See e.g.
+        #     https://stackoverflow.com/questions/33906183#33906270
+        # Alternative option is to call out to `stty size`.  For now, we
+        # support both strategies, selected by a config option.
+        # TODO: also try shutil.get_terminal_size()
+        n_rows: int
+        n_cols: int
+        if cfg.user_interface.use_stty_size:
+            completed_process = subprocess.run(
+                ['stty', 'size'], check=True, encoding='utf-8', stdout=subprocess.PIPE
+            )
+            elements = completed_process.stdout.split()
+            (n_rows, n_cols) = [int(v) for v in elements]
+        else:
+            (n_rows, n_cols) = map(int, stdscr.getmaxyx())
+
+        stdscr.clear()
+        stdscr.resize(n_rows, n_cols)
+        curses.resize_term(n_rows, n_cols)
 
-                        # TODO: do something useful with output instead of DEVNULL
-                        p = subprocess.Popen(cmd,
-                                shell=True,
-                                stdout=subprocess.DEVNULL,
-                                stderr=subprocess.STDOUT,
-                                start_new_session=True)
+        #
+        # Obtain and measure content
+        #
 
         # Directory prefixes, for abbreviation
-        tmp_prefix = os.path.commonpath(dir_cfg['tmp'])
-        dst_prefix = os.path.commonpath(dir_cfg['dst'])
+        tmp_prefix = os.path.commonpath(cfg.directories.tmp)
+        dst_prefix = os.path.commonpath(cfg.directories.dst)
         if archiving_configured:
-            arch_prefix = dir_cfg['archive']['rsyncd_path']
+            arch_prefix = cfg.directories.archive.rsyncd_path
+
+        n_tmpdirs = len(cfg.directories.tmp)
+        n_tmpdirs_half = int(n_tmpdirs / 2)
+
+        # Directory reports.
+        tmp_report_1 = reporting.tmp_dir_report(
+            jobs, cfg.directories, cfg.scheduling, n_cols, 0, n_tmpdirs_half, tmp_prefix)
+        tmp_report_2 = reporting.tmp_dir_report(
+            jobs, cfg.directories, cfg.scheduling, n_cols, n_tmpdirs_half, n_tmpdirs, tmp_prefix)
+        dst_report = reporting.dst_dir_report(
+            jobs, cfg.directories.dst, n_cols, dst_prefix)
+        if archiving_configured:
+            arch_report = reporting.arch_dir_report(archdir_freebytes, n_cols, arch_prefix)
+            if not arch_report:
+                arch_report = '<no archive dir info>'
+        else:
+            arch_report = '<archiving not configured>'
+
+        #
+        # Layout
+        #
+            
+        tmp_h = max(len(tmp_report_1.splitlines()),
+                    len(tmp_report_2.splitlines()))
+        tmp_w = len(max(tmp_report_1.splitlines() +
+                        tmp_report_2.splitlines(), key=len)) + 1
+        dst_h = len(dst_report.splitlines())
+        dst_w = len(max(dst_report.splitlines(), key=len)) + 1
+        arch_h = len(arch_report.splitlines()) + 1
+        arch_w = n_cols
+
+        header_h = 3
+        dirs_h = max(tmp_h, dst_h) + arch_h
+        remainder = n_rows - (header_h + dirs_h)
+        jobs_h = max(5, math.floor(remainder * 0.6))
+        logs_h = n_rows - (header_h + jobs_h + dirs_h)
+
+        header_pos = 0
+        jobs_pos = header_pos + header_h
+        stdscr.resize(n_rows, n_cols)
+        dirs_pos = jobs_pos + jobs_h
+        logscreen_pos = dirs_pos + dirs_h
+
+        linecap = n_cols - 1
+        logs_h = n_rows - (header_h + jobs_h + dirs_h)
+
+        try:
+            header_win = curses.newwin(header_h, n_cols, header_pos, 0)
+            log_win = curses.newwin(logs_h, n_cols, logscreen_pos, 0)
+            jobs_win = curses.newwin(jobs_h, n_cols, jobs_pos, 0)
+            dirs_win = curses.newwin(dirs_h, n_cols, dirs_pos, 0)
+        except Exception:
+            raise Exception('Failed to initialize curses windows, try a larger '
+                            'terminal window.')
+
+        #
+        # Write
+        #
 
         # Header
         header_win.addnstr(0, 0, 'Plotman', linecap, curses.A_BOLD)
         timestamp = datetime.datetime.now().strftime("%H:%M:%S")
-        refresh_msg = "now" if do_full_refresh else f"{int(elapsed)}s/{refresh_period}"
+        refresh_msg = "now" if do_full_refresh else f"{int(elapsed)}s/{cfg.scheduling.polling_time_s}"
         header_win.addnstr(f" {timestamp} (refresh {refresh_msg})", linecap)
         header_win.addnstr('  |  <P>lotting: ', linecap, curses.A_BOLD)
         header_win.addnstr(
@@ -204,38 +268,11 @@ def curses_main(stdscr):
         
 
         # Jobs
-        jobs_win.addstr(0, 0, reporting.status_report(jobs, n_cols, jobs_height, 
+        jobs_win.addstr(0, 0, reporting.status_report(jobs, n_cols, jobs_h, 
             tmp_prefix, dst_prefix))
         jobs_win.chgat(0, 0, curses.A_REVERSE)
 
-        # Dirs.  Collect reports as strings, then lay out.
-        n_tmpdirs = len(dir_cfg['tmp']) 
-        n_tmpdirs_half = int(n_tmpdirs / 2)
-        tmp_report_1 = reporting.tmp_dir_report(
-            jobs, dir_cfg['tmp'], sched_cfg, n_cols, 0, n_tmpdirs_half, tmp_prefix)
-        tmp_report_2 = reporting.tmp_dir_report(
-            jobs, dir_cfg['tmp'], sched_cfg, n_cols, n_tmpdirs_half, n_tmpdirs, tmp_prefix)
-
-        dst_report = reporting.dst_dir_report(
-            jobs, dir_cfg['dst'], n_cols, dst_prefix)
-
-        if archiving_configured:
-            arch_report = reporting.arch_dir_report(
-                archive.get_archdir_freebytes(dir_cfg['archive']), n_cols, arch_prefix)
-            if not arch_report:
-                arch_report = '<no archive dir info>'
-        else:
-            arch_report = '<archiving not configured>'
-            
-        tmp_h = max(len(tmp_report_1.splitlines()),
-                    len(tmp_report_2.splitlines()))
-        tmp_w = len(max(tmp_report_1.splitlines() +
-                        tmp_report_2.splitlines(), key=len)) + 1
-        dst_h = len(dst_report.splitlines())
-        dst_w = len(max(dst_report.splitlines(), key=len)) + 1
-        arch_h = len(arch_report.splitlines()) + 1
-        arch_w = n_cols
-
+        # Dirs
         tmpwin_12_gutter = 3
         tmpwin_dstwin_gutter = 6
 
@@ -269,7 +306,7 @@ def curses_main(stdscr):
         # this seems easier.
         log_win.addnstr(0, 0, ('Log: %d (<up>/<down>/<end> to scroll)\n' % log.get_cur_pos() ),
                 linecap, curses.A_REVERSE)
-        for i, logline in enumerate(log.cur_slice(logscreen_height - 1)):
+        for i, logline in enumerate(log.cur_slice(logs_h - 1)):
             log_win.addnstr(i + 1, 0, logline, linecap)
 
         stdscr.noutrefresh()
@@ -282,7 +319,11 @@ def curses_main(stdscr):
         log_win.noutrefresh()
         curses.doupdate()
 
-        key = stdscr.getch()
+        try:
+            key = stdscr.getch()
+        except KeyboardInterrupt:
+            key = ord('q')
+
         if key == curses.KEY_UP:
             log.shift_slice(-1)
             pressed_key = 'up'
diff --git a/job.py b/src/plotman/job.py
old mode 100755
new mode 100644
similarity index 76%
rename from job.py
rename to src/plotman/job.py
index 2333dcc2..6314d168
--- a/job.py
+++ b/src/plotman/job.py
@@ -1,20 +1,20 @@
-#!/usr/bin/python3
-
 # TODO do we use all these?
-from datetime import datetime
-from enum import Enum, auto
-from subprocess import call
 import argparse
-
 import contextlib
 import logging
 import os
+import random
 import re
+import sys
 import threading
 import time
-import psutil      # apt-get install python-psutil
-import random
-import sys
+from datetime import datetime
+from enum import Enum, auto
+from subprocess import call
+
+import pendulum
+import psutil
+
 
 def job_phases_for_tmpdir(d, all_jobs):
     '''Return phase 2-tuples for jobs running on tmpdir d'''
@@ -28,11 +28,30 @@ def is_plotting_cmdline(cmdline):
     return (
         len(cmdline) >= 4
         and 'python' in cmdline[0]
-        and 'venv/bin/chia' in cmdline[1]
+        and cmdline[1].endswith('/chia')
         and 'plots' == cmdline[2]
         and 'create' == cmdline[3]
     )
 
+# This is a cmdline argument fix for https://github.com/ericaltendorf/plotman/issues/41
+def cmdline_argfix(cmdline):
+    known_keys = 'krbut2dne'
+    for i in cmdline:
+        # If the argument starts with dash and a known key and is longer than 2,
+        # then an argument is passed with no space between its key and value.
+        # This is POSIX compliant but the arg parser was tripping over it.
+        # In these cases, splitting that item up in separate key and value
+        # elements results in a `cmdline` list that is correctly formatted.
+        if i[0]=='-' and i[1] in known_keys and len(i)>2:
+            yield i[0:2]  # key
+            yield i[2:]  # value
+        else:
+            yield i
+
+def parse_chia_plot_time(s):
+    # This will grow to try ISO8601 as well for when Chia logs that way
+    return pendulum.from_format(s, 'ddd MMM DD HH:mm:ss YYYY', locale='en', tz=None)
+
 # TODO: be more principled and explicit about what we cache vs. what we look up
 # dynamically from the logfile
 class Job:
@@ -52,6 +71,7 @@ class Job:
     job_id = 0
     plot_id = '--------'
     proc = None   # will get a psutil.Process
+    help = False
 
     # These are dynamic, cached, and need to be udpated periodically
     phase = (None, None)   # Phase/subphase
@@ -66,12 +86,14 @@ def get_running_jobs(logroot, cached_jobs=()):
         for proc in psutil.process_iter(['pid', 'cmdline']):
             # Ignore processes which most likely have terminated between the time of
             # iteration and data access.
-            with contextlib.suppress(psutil.NoSuchProcess):
+            with contextlib.suppress(psutil.NoSuchProcess, psutil.AccessDenied):
                 if is_plotting_cmdline(proc.cmdline()):
                     if proc.pid in cached_jobs_by_pid.keys():
                         jobs.append(cached_jobs_by_pid[proc.pid])  # Copy from cache
                     else:
-                        jobs.append(Job(proc, logroot))
+                        job = Job(proc, logroot)
+                        if not job.help:
+                            jobs.append(job)
 
         return jobs
 
@@ -88,28 +110,32 @@ def __init__(self, proc, logroot):
             assert 'chia' in args[1]
             assert 'plots' == args[2]
             assert 'create' == args[3]
-            args_iter = iter(args[4:])
+            args_iter = iter(cmdline_argfix(args[4:]))
             for arg in args_iter:
-                val = None if arg in ['-e'] else next(args_iter)
-                if arg == '-k':
+                val = None if arg in {'-e', '--nobitfield', '-h', '--help', '--override-k'} else next(args_iter)
+                if arg in {'-k', '--size'}:
                     self.k = val
-                elif arg == '-r':
+                elif arg in {'-r', '--num_threads'}:
                     self.r = val
-                elif arg == '-b':
+                elif arg in {'-b', '--buffer'}:
                     self.b = val
-                elif arg == '-u':
+                elif arg in {'-u', '--buckets'}:
                     self.u = val
-                elif arg == '-t':
+                elif arg in {'-t', '--tmp_dir'}:
                     self.tmpdir = val
-                elif arg == '-2':
+                elif arg in {'-2', '--tmp2_dir'}:
                     self.tmp2dir = val
-                elif arg == '-d':
+                elif arg in {'-d', '--final_dir'}:
                     self.dstdir = val
-                elif arg == '-n':
+                elif arg in {'-n', '--num'}:
                     self.n = val
-                elif arg == '-e':
+                elif arg in {'-h', '--help'}:
+                    self.help = True
+                elif arg in {'-e', '--nobitfield', '-f', '--farmer_public_key', '-p', '--pool_public_key'}:
+                    pass
+                    # TODO: keep track of these
+                elif arg == '--override-k':
                     pass
-                    # TODO: keep track of -e
                 else:
                     print('Warning: unrecognized args: %s %s' % (arg, val))
 
@@ -123,8 +149,15 @@ def __init__(self, proc, logroot):
                         self.logfile = f.path
                     break
 
-            # Initialize data that needs to be loaded from the logfile
-            self.init_from_logfile()
+            if self.logfile:
+                # Initialize data that needs to be loaded from the logfile
+                self.init_from_logfile()
+            else:
+                print('Found plotting process PID {pid}, but could not find '
+                        'logfile in its open files:'.format(pid = self.proc.pid))
+                for f in self.proc.open_files():
+                    print(f.path)
+
 
 
     def init_from_logfile(self):
@@ -145,7 +178,7 @@ def init_from_logfile(self):
                     m = re.match(r'^Starting phase 1/4:.*\.\.\. (.*)', line)
                     if m:
                         # Mon Nov  2 08:39:53 2020
-                        self.start_time = datetime.strptime(m.group(1), '%a %b  %d %H:%M:%S %Y')
+                        self.start_time = parse_chia_plot_time(m.group(1))
                         found_log = True
                         break  # Stop reading lines in file
 
@@ -157,6 +190,7 @@ def init_from_logfile(self):
         # If we couldn't find the line in the logfile, the job is probably just getting started
         # (and being slow about it).  In this case, use the last metadata change as the start time.
         # TODO: we never come back to this; e.g. plot_id may remain uninitialized.
+        # TODO: should we just use the process start time instead?
         if not found_log:
             self.start_time = datetime.fromtimestamp(os.path.getctime(self.logfile))
 
@@ -270,7 +304,8 @@ def get_run_status(self):
             return self.proc.status()
 
     def get_time_wall(self):
-        return int((datetime.now() - self.start_time).total_seconds())
+        create_time = datetime.fromtimestamp(self.proc.create_time())
+        return int((datetime.now() - create_time).total_seconds())
 
     def get_time_user(self):
         return int(self.proc.cpu_times().user)
@@ -279,7 +314,12 @@ def get_time_sys(self):
         return int(self.proc.cpu_times().system)
 
     def get_time_iowait(self):
-        return int(self.proc.cpu_times().iowait)
+        cpu_times = self.proc.cpu_times()
+        iowait = getattr(cpu_times, 'iowait', None)
+        if iowait is None:
+            return None
+
+        return int(iowait)
 
     def suspend(self, reason=''):
         self.proc.suspend()
@@ -289,10 +329,11 @@ def resume(self):
         self.proc.resume()
 
     def get_temp_files(self):
-        temp_files = []
+        # Prevent duplicate file paths by using set.
+        temp_files = set([])
         for f in self.proc.open_files():
             if self.tmpdir in f.path or self.tmp2dir in f.path or self.dstdir in f.path:
-                temp_files.append(f.path)
+                temp_files.add(f.path)
         return temp_files
 
     def cancel(self):
@@ -303,10 +344,3 @@ def cancel(self):
         # TODO: check that this is best practice for killing a job.
         self.proc.resume()
         self.proc.terminate()
-
-    def check_status(self, expected_status):
-        if (self.status == expected_status):
-            return 1
-        else:
-            print('Expected status %s, actual %s', expected_status, self.status)
-            return 0
diff --git a/manager.py b/src/plotman/manager.py
old mode 100755
new mode 100644
similarity index 54%
rename from manager.py
rename to src/plotman/manager.py
index bb9737a5..19a45d63
--- a/manager.py
+++ b/src/plotman/manager.py
@@ -1,23 +1,21 @@
-#!/usr/bin/python3
-
-from datetime import datetime
-
 import logging
 import operator
 import os
+import random
 import re
+import readline  # For nice CLI
+import subprocess
+import sys
 import threading
 import time
+from datetime import datetime
+
 import psutil
-import random
-import readline          # For nice CLI
-import subprocess
-import sys
 
 # Plotman libraries
-import job
-import plot_util
-import archive # for get_archdir_freebytes(). TODO: move to avoid import loop
+from plotman import \
+    archive  # for get_archdir_freebytes(). TODO: move to avoid import loop
+from plotman import job, plot_util
 
 # Constants
 MIN = 60    # Seconds
@@ -43,43 +41,47 @@ def dstdirs_to_youngest_phase(all_jobs):
             result[j.dstdir] = j.progress()
     return result
 
-def phases_permit_new_job(phases, sched_cfg):
+def phases_permit_new_job(phases, d, sched_cfg, dir_cfg):
     '''Scheduling logic: return True if it's OK to start a new job on a tmp dir
        with existing jobs in the provided phases.'''
+    # Filter unknown-phase jobs
+    phases = [ph for ph in phases if ph[0] is not None and ph[1] is not None]
+
     if len(phases) == 0:
         return True
 
-    milestone_1 = ( sched_cfg['tmpdir_stagger_phase_major'],
-                    sched_cfg['tmpdir_stagger_phase_minor'] )
-    # milestone_2 = (4, 0)
-
-    if len([p for p in phases if p < milestone_1]) > 0:
+    milestone = (sched_cfg.tmpdir_stagger_phase_major, sched_cfg.tmpdir_stagger_phase_minor)
+    # tmpdir_stagger_phase_limit default is 1, as declared in configuration.py
+    if len([p for p in phases if p < milestone]) >= sched_cfg.tmpdir_stagger_phase_limit:
         return False
 
-    # if len([p for p in phases if milestone_1 <= p and p <milestone_2]) > 1:
-        # return False
-
-    # No more than 3 jobs total on the tmpdir
-    if len(phases) >= sched_cfg['tmpdir_max_jobs']:
+    # Limit the total number of jobs per tmp dir. Default to the overall max
+    # jobs configuration, but restrict to any configured overrides.
+    max_plots = sched_cfg.tmpdir_max_jobs
+    if dir_cfg.tmp_overrides is not None and d in dir_cfg.tmp_overrides:
+        curr_overrides = dir_cfg.tmp_overrides[d]
+        if curr_overrides.tmpdir_max_jobs is not None:
+            max_plots = curr_overrides.tmpdir_max_jobs
+    if len(phases) >= max_plots:
         return False
 
     return True
 
 def maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg):
-    jobs = job.Job.get_running_jobs(dir_cfg['log'])
+    jobs = job.Job.get_running_jobs(dir_cfg.log)
 
     wait_reason = None  # If we don't start a job this iteration, this says why.
 
     youngest_job_age = min(jobs, key=job.Job.get_time_wall).get_time_wall() if jobs else MAX_AGE
-    global_stagger = int(sched_cfg['global_stagger_m'] * MIN)
+    global_stagger = int(sched_cfg.global_stagger_m * MIN)
     if (youngest_job_age < global_stagger):
-        wait_reason = 'stagger (%ds/%ds)' % (
-                youngest_job_age, global_stagger)
+        wait_reason = 'stagger (%ds/%ds)' % (youngest_job_age, global_stagger)
+    elif len(jobs) >= sched_cfg.global_max_jobs:
+        wait_reason = 'max jobs (%d)' % sched_cfg.global_max_jobs
     else:
-        tmp_to_all_phases = [ (d, job.job_phases_for_tmpdir(d, jobs))
-                for d in dir_cfg['tmp'] ]
+        tmp_to_all_phases = [(d, job.job_phases_for_tmpdir(d, jobs)) for d in dir_cfg.tmp]
         eligible = [ (d, phases) for (d, phases) in tmp_to_all_phases
-                if phases_permit_new_job(phases, sched_cfg) ]
+                if phases_permit_new_job(phases, d, sched_cfg, dir_cfg) ]
         rankable = [ (d, phases[0]) if phases else (d, (999, 999))
                 for (d, phases) in eligible ]
         
@@ -90,29 +92,37 @@ def maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg):
             tmpdir = max(rankable, key=operator.itemgetter(1))[0]
 
             # Select the dst dir least recently selected
-            dir2ph = dstdirs_to_youngest_phase(jobs)
-            unused_dirs = [d for d in dir_cfg['dst'] if d not in dir2ph.keys()]
+            dir2ph = { d:ph for (d, ph) in dstdirs_to_youngest_phase(jobs).items()
+                      if d in dir_cfg.dst }
+            unused_dirs = [d for d in dir_cfg.dst if d not in dir2ph.keys()]
             dstdir = ''
             if unused_dirs: 
                 dstdir = random.choice(unused_dirs)
             else:
                 dstdir = max(dir2ph, key=dir2ph.get)
 
-            logfile = os.path.join(dir_cfg['log'],
-                    datetime.now().strftime('%Y-%m-%d-%H:%M:%S.log'))
+            logfile = os.path.join(
+                dir_cfg.log, datetime.now().strftime('%Y-%m-%d-%H:%M:%S.log')
+            )
 
             plot_args = ['chia', 'plots', 'create',
-                    '-k', str(plotting_cfg['k']),
-                    '-r', str(plotting_cfg['n_threads']),
-                    '-u', str(plotting_cfg['n_buckets']),
-                    '-b', str(plotting_cfg['job_buffer']),
+                    '-k', str(plotting_cfg.k),
+                    '-r', str(plotting_cfg.n_threads),
+                    '-u', str(plotting_cfg.n_buckets),
+                    '-b', str(plotting_cfg.job_buffer),
                     '-t', tmpdir,
                     '-d', dstdir ]
-            if 'e' in plotting_cfg and plotting_cfg['e']:
+            if plotting_cfg.e:
                 plot_args.append('-e')
-            if 'tmp2' in dir_cfg:
+            if plotting_cfg.farmer_pk is not None:
+                plot_args.append('-f')
+                plot_args.append(plotting_cfg.farmer_pk)
+            if plotting_cfg.pool_pk is not None:
+                plot_args.append('-p')
+                plot_args.append(plotting_cfg.pool_pk)
+            if dir_cfg.tmp2 is not None:
                 plot_args.append('-2')
-                plot_args.append(dir_cfg['tmp2'])
+                plot_args.append(dir_cfg.tmp2)
 
             logmsg = ('Starting plot job: %s ; logging to %s' % (' '.join(plot_args), logfile))
 
@@ -133,4 +143,3 @@ def select_jobs_by_partial_id(jobs, partial_id):
         if j.plot_id.startswith(partial_id):
             selected.append(j)
     return selected
-
diff --git a/plot_util.py b/src/plotman/plot_util.py
similarity index 95%
rename from plot_util.py
rename to src/plotman/plot_util.py
index 664277f6..59ef0fad 100644
--- a/plot_util.py
+++ b/src/plotman/plot_util.py
@@ -7,7 +7,7 @@
 def df_b(d):
     'Return free space for directory (in bytes)'
     stat = os.statvfs(d)
-    return stat.f_frsize * stat.f_bfree 
+    return stat.f_frsize * stat.f_bavail
 
 def get_k32_plotsize():
     return 108 * GB
@@ -21,6 +21,8 @@ def human_format(num, precision):
             (num, ['', 'K', 'M', 'G', 'T', 'P'][magnitude]))
 
 def time_format(sec):
+    if sec is None:
+        return '-'
     if sec < 60:
         return '%ds' % sec
     else:
diff --git a/plotman.py b/src/plotman/plotman.py
similarity index 50%
rename from plotman.py
rename to src/plotman/plotman.py
index e50fb4dc..77602d69 100755
--- a/plotman.py
+++ b/src/plotman/plotman.py
@@ -1,26 +1,16 @@
-#!/usr/bin/python3
-
-from datetime import datetime
-from subprocess import call
-
 import argparse
+import importlib
+import importlib.resources
 import os
-import re
-import threading
 import random
-import readline          # For nice CLI
-import sys
+from shutil import copyfile
 import time
-import yaml
 
 # Plotman libraries
-from job import Job
-import analyzer
-import archive
-import interactive
-import manager
-import plot_util
-import reporting
+from plotman import analyzer, archive, configuration, interactive, manager, plot_util, reporting
+from plotman import resources as plotman_resources
+from plotman.job import Job
+
 
 class PlotmanArgParser:
     def add_idprefix_arg(self, subparser):
@@ -34,18 +24,24 @@ def parse_args(self):
         parser = argparse.ArgumentParser(description='Chia plotting manager.')
         sp = parser.add_subparsers(dest='cmd')
 
-        p_status = sp.add_parser('status', help='show current plotting status')
+        sp.add_parser('version', help='print the version')
+
+        sp.add_parser('status', help='show current plotting status')
  
-        p_dirs = sp.add_parser('dirs', help='show directories info')
+        sp.add_parser('dirs', help='show directories info')
+
+        sp.add_parser('interactive', help='run interactive control/monitoring mode')
 
-        p_interactive = sp.add_parser('interactive', help='run interactive control/montioring mode')
+        sp.add_parser('dsched', help='print destination dir schedule')
 
-        p_dst_sch = sp.add_parser('dsched', help='print destination dir schedule')
+        sp.add_parser('plot', help='run plotting loop')
 
-        p_plot = sp.add_parser('plot', help='run plotting loop')
+        sp.add_parser('archive', help='move completed plots to farming location')
 
-        p_archive = sp.add_parser('archive',
-                help='move completed plots to farming location')
+        p_config = sp.add_parser('config', help='display or generate plotman.yaml configuration')
+        sp_config = p_config.add_subparsers(dest='config_subcommand')
+        sp_config.add_parser('generate', help='generate a default plotman.yaml file and print path')
+        sp_config.add_parser('path', help='show path to current plotman.yaml file')
 
         p_details = sp.add_parser('details', help='show details for job')
         self.add_idprefix_arg(p_details)
@@ -62,26 +58,81 @@ def parse_args(self):
         p_resume = sp.add_parser('resume', help='resume suspended job')
         self.add_idprefix_arg(p_resume)
 
-        p_analyze = sp.add_parser('analyze',
-                help='analyze timing stats of completed jobs')
+        p_analyze = sp.add_parser('analyze', help='analyze timing stats of completed jobs')
+
+        p_analyze.add_argument('--clipterminals',
+                action='store_true',
+                help='Ignore first and last plot in a logfile, useful for '
+                     'focusing on the steady-state in a staggered parallel '
+                     'plotting test (requires plotting  with -n>2)')
+        p_analyze.add_argument('--bytmp',
+                action='store_true',
+                help='slice by tmp dirs')
+        p_analyze.add_argument('--bybitfield',
+                action='store_true',
+                help='slice by bitfield/non-bitfield sorting')
         p_analyze.add_argument('logfile', type=str, nargs='+',
                 help='logfile(s) to analyze')
 
         args = parser.parse_args()
         return args
 
+def get_term_width():
+    columns = 0
+    try:
+        (rows, columns) = os.popen('stty size', 'r').read().split()
+        columns = int(columns)
+    except:
+        columns = 120  # 80 is typically too narrow.  TODO: make a command line arg.
+    return columns
 
-if __name__ == "__main__":
+def main():
     random.seed()
 
     pm_parser = PlotmanArgParser()
     args = pm_parser.parse_args()
-    
-    with open('config.yaml', 'r') as ymlfile:
-        cfg = yaml.load(ymlfile, Loader=yaml.FullLoader)
-    dir_cfg = cfg['directories']
-    sched_cfg = cfg['scheduling']
-    plotting_cfg = cfg['plotting']
+
+    if args.cmd == 'version':
+        import pkg_resources
+        print(pkg_resources.get_distribution('plotman'))
+        return
+
+    elif args.cmd == 'config':
+        config_file_path = configuration.get_path()
+        if args.config_subcommand == 'path':
+            if os.path.isfile(config_file_path):
+                print(config_file_path)
+                return
+            print(f"No 'plotman.yaml' file exists at expected location: '{config_file_path}'")
+            print(f"To generate a default config file, run: 'plotman config generate'")
+            return 1
+        if args.config_subcommand == 'generate':
+            if os.path.isfile(config_file_path):
+                overwrite = None
+                while overwrite not in {"y", "n"}:
+                    overwrite = input(
+                        f"A 'plotman.yaml' file already exists at the default location: '{config_file_path}' \n\n"
+                        "\tInput 'y' to overwrite existing file, or 'n' to exit without overwrite."
+                      ).lower()
+                    if overwrite == 'n':
+                        print("\nExited without overrwriting file")
+                        return
+
+            # Copy the default plotman.yaml (packaged in plotman/resources/) to the user's config file path,
+            # creating the parent plotman file/directory if it does not yet exist
+            with importlib.resources.path(plotman_resources, "plotman.yaml") as default_config:
+                config_dir = os.path.dirname(config_file_path)
+
+                os.makedirs(config_dir, exist_ok=True)
+                copyfile(default_config, config_file_path)
+                print(f"\nWrote default plotman.yaml to: {config_file_path}")
+                return
+
+        if not args.config_subcommand:
+            print("No action requested, add 'generate' or 'path'.")
+            return
+
+    cfg = configuration.get_validated_configs()
 
     #
     # Stay alive, spawning plot jobs
@@ -89,35 +140,32 @@ def parse_args(self):
     if args.cmd == 'plot':
         print('...starting plot loop')
         while True:
-            wait_reason = manager.maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg)
+            wait_reason = manager.maybe_start_new_plot(cfg.directories, cfg.scheduling, cfg.plotting)
 
             # TODO: report this via a channel that can be polled on demand, so we don't spam the console
-            sleep_s = int(sched_cfg['polling_time_s'])
             if wait_reason:
-                print('...sleeping %d s: %s' % (sleep_s, wait_reason))
+                print('...sleeping %d s: %s' % (cfg.scheduling.polling_time_s, wait_reason))
+
+            time.sleep(cfg.scheduling.polling_time_s)
 
-            time.sleep(sleep_s)
-    
     #
     # Analysis of completed jobs
     #
     elif args.cmd == 'analyze':
-        analyzer = analyzer.LogAnalyzer()
-        analyzer.analyze(args.logfile)
+
+        analyzer.analyze(args.logfile, args.clipterminals,
+                args.bytmp, args.bybitfield)
 
     else:
-        # print('...scanning process tables')
-        jobs = Job.get_running_jobs(dir_cfg['log'])
+        jobs = Job.get_running_jobs(cfg.directories.log)
 
         # Status report
         if args.cmd == 'status':
-            (rows, columns) = os.popen('stty size', 'r').read().split()
-            print(reporting.status_report(jobs, int(columns)))
+            print(reporting.status_report(jobs, get_term_width()))
 
         # Directories report
         elif args.cmd == 'dirs':
-            (rows, columns) = os.popen('stty size', 'r').read().split()
-            print(reporting.dirs_report(jobs, dir_cfg, sched_cfg, int(columns)))
+            print(reporting.dirs_report(jobs, cfg.directories, cfg.scheduling, get_term_width()))
 
         elif args.cmd == 'interactive':
             interactive.run_interactive()
@@ -130,13 +178,12 @@ def parse_args(self):
                 if not firstit:
                     print('Sleeping 60s until next iteration...')
                     time.sleep(60)
-                    jobs = Job.get_running_jobs(dir_cfg['log'])
+                    jobs = Job.get_running_jobs(cfg.directories.log)
                 firstit = False
-                archive.archive(dir_cfg, jobs)
+                archive.archive(cfg.directories, jobs)
 
         # Debugging: show the destination drive usage schedule
         elif args.cmd == 'dsched':
-            dstdirs = dir_cfg['dst']
             for (d, ph) in manager.dstdirs_to_furthest_phase(jobs).items():
                 print('  %s : %s' % (d, str(ph)))
         
@@ -195,4 +242,3 @@ def parse_args(self):
                 elif args.cmd == 'resume':
                     print('Resuming ' + job.plot_id)
                     job.resume()
-
diff --git a/reporting.py b/src/plotman/reporting.py
similarity index 84%
rename from reporting.py
rename to src/plotman/reporting.py
index 07ab2285..80af0b55 100644
--- a/reporting.py
+++ b/src/plotman/reporting.py
@@ -1,30 +1,34 @@
-import texttable as tt   # from somewhere?
+import math
 import os
+
 import psutil
+import texttable as tt  # from somewhere?
+
+from plotman import archive, job, manager, plot_util
 
-import archive
-import job
-import manager
-import math
-import plot_util
 
 def abbr_path(path, putative_prefix):
     if putative_prefix and path.startswith(putative_prefix):
         return os.path.relpath(path, putative_prefix)
     else:
         return path
+    
+def phase_str(phase_pair):
+    (ph, subph) = phase_pair
+    return ((str(ph) if ph is not None else '?') + ':'
+            + (str(subph) if subph is not None else '?'))
 
 def phases_str(phases, max_num=None):
     '''Take a list of phase-subphase pairs and return them as a compact string'''
     if not max_num or len(phases) <= max_num:
-        return ' '.join(['%d:%d' % pair for pair in phases])
+        return ' '.join([phase_str(pair) for pair in phases])
     else:
         n_first = math.floor(max_num / 2)
         n_last = max_num - n_first
         n_elided = len(phases) - (n_first + n_last)
-        first = ' '.join(['%d:%d' % pair for pair in phases[:n_first]])
+        first = ' '.join([phase_str(pair) for pair in phases[:n_first]])
         elided = " [+%d] " % n_elided
-        last = ' '.join(['%d:%d' % pair for pair in phases[n_first + n_elided:]])
+        last = ' '.join([phase_str(pair) for pair in phases[n_first + n_elided:]])
         return first + elided + last
 
 def n_at_ph(jobs, ph):
@@ -56,7 +60,6 @@ def job_viz(jobs):
     result += '4'
     result += n_to_char(n_at_ph(jobs, (4, 0)))
     return result
-    
 
 def status_report(jobs, width, height=None, tmp_prefix='', dst_prefix=''):
     '''height, if provided, will limit the number of rows in the table,
@@ -68,7 +71,7 @@ def status_report(jobs, width, height=None, tmp_prefix='', dst_prefix=''):
         abbreviate_jobs_list = True
 
     if abbreviate_jobs_list:
-        n_rows = height - 2  # One for header, one for elipsis
+        n_rows = height - 2  # Minus one for header, one for ellipsis
         n_begin_rows = int(n_rows / 2)
         n_end_rows = n_rows - n_begin_rows
 
@@ -92,12 +95,12 @@ def status_report(jobs, width, height=None, tmp_prefix='', dst_prefix=''):
         # Regular row
         else:
             try:
-                row = [j.plot_id[:8] + '...',
+                row = [j.plot_id[:8],
                     j.k,
                     abbr_path(j.tmpdir, tmp_prefix),
                     abbr_path(j.dstdir, dst_prefix),
                     plot_util.time_format(j.get_time_wall()),
-                    '%d:%d' % j.progress(),
+                    phase_str(j.progress()),
                     plot_util.human_format(j.get_tmp_usage(), 0),
                     j.proc.pid,
                     j.get_run_status(),
@@ -108,7 +111,7 @@ def status_report(jobs, width, height=None, tmp_prefix='', dst_prefix=''):
                     ]
             except psutil.NoSuchProcess:
                 # In case the job has disappeared
-                row = [j.plot_id[:8] + '...'] + (['--'] * 12)
+                row = [j.plot_id[:8]] + (['--'] * 12)
 
             if height:
                 row.insert(0, '%3d' % i)
@@ -120,18 +123,18 @@ def status_report(jobs, width, height=None, tmp_prefix='', dst_prefix=''):
     # return ('tmp dir prefix: %s ; dst dir prefix: %s\n' % (tmp_prefix, dst_prefix)
     return tab.draw()
 
-def tmp_dir_report(jobs, tmpdirs, sched_cfg, width, start_row=None, end_row=None, prefix=''):
+def tmp_dir_report(jobs, dir_cfg, sched_cfg, width, start_row=None, end_row=None, prefix=''):
     '''start_row, end_row let you split the table up if you want'''
     tab = tt.Texttable()
     headings = ['tmp', 'ready', 'phases']
     tab.header(headings)
     tab.set_cols_dtype('t' * len(headings))
     tab.set_cols_align('r' * (len(headings) - 1) + 'l')
-    for i, d in enumerate(sorted(tmpdirs)):
+    for i, d in enumerate(sorted(dir_cfg.tmp)):
         if (start_row and i < start_row) or (end_row and i >= end_row):
             continue
         phases = sorted(job.job_phases_for_tmpdir(d, jobs))
-        ready = manager.phases_permit_new_job(phases, sched_cfg)
+        ready = manager.phases_permit_new_job(phases, d, sched_cfg, dir_cfg)
         row = [abbr_path(d, prefix), 'OK' if ready else '--', phases_str(phases)]
         tab.add_row(row)
 
@@ -183,12 +186,10 @@ def arch_dir_report(archdir_freebytes, width, prefix=''):
 
 # TODO: remove this
 def dirs_report(jobs, dir_cfg, sched_cfg, width):
-    tmpdirs = dir_cfg['tmp']
-    dstdirs = dir_cfg['dst']
-    arch_cfg = dir_cfg['archive']
-    return (tmp_dir_report(jobs, tmpdirs, sched_cfg, width) + '\n' +
-            dst_dir_report(jobs, dstdirs, width) + '\n' +
-            'archive dirs free space:\n' +
-            arch_dir_report(archive.get_archdir_freebytes(arch_cfg), width) + '\n')
-
+    return (
+        tmp_dir_report(jobs, dir_cfg, sched_cfg, width) + '\n' +
+        dst_dir_report(jobs, dir_cfg.dst, width) + '\n' +
+        'archive dirs free space:\n' +
+        arch_dir_report(archive.get_archdir_freebytes(dir_cfg.archive), width) + '\n'
+    )
 
diff --git a/src/plotman/resources/__init__.py b/src/plotman/resources/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/config.yaml b/src/plotman/resources/plotman.yaml
similarity index 52%
rename from config.yaml
rename to src/plotman/resources/plotman.yaml
index 93f2b54e..209ed3ad 100644
--- a/config.yaml
+++ b/src/plotman/resources/plotman.yaml
@@ -1,3 +1,14 @@
+# Default/example plotman.yaml configuration file
+
+# Options for display and rendering
+user_interface:
+        # Call out to the `stty` program to determine terminal size, instead of
+        # relying on what is reported by the curses library.   In some cases,
+        # the curses library fails to update on SIGWINCH signals.  If the
+        # `plotman interactive` curses interface does not properly adjust when
+        # you resize the terminal window, you can try setting this to True. 
+        use_stty_size: True
+
 # Where to plot and log.
 directories:
         # One directory in which to store all plot job logs (the STDOUT/
@@ -19,6 +30,19 @@ directories:
                 - /mnt/tmp/02
                 - /mnt/tmp/03
 
+        # Optional: Allows overriding some characteristics of certain tmp
+        # directories. This contains a map of tmp directory names to
+        # attributes. If a tmp directory and attribute is not listed here,
+        # it uses the default attribute setting from the main configuration.
+        #
+        # Currently support override parameters:
+        #     - tmpdir_max_jobs
+        tmp_overrides:
+                # In this example, /mnt/tmp/00 is larger than the other tmp
+                # dirs and it can hold more plots than the default.
+                "/mnt/tmp/00":
+                        tmpdir_max_jobs: 5
+
         # Optional: tmp2 directory.  If specified, will be passed to
         # chia plots create as -2.  Only one tmp2 directory is supported.
         # tmp2: /mnt/tmp/a
@@ -43,20 +67,36 @@ directories:
                 rsyncd_bwlimit: 80000  # Bandwidth limit in KB/s
                 rsyncd_host: myfarmer
                 rsyncd_user: chia
+                # Optional index.  If omitted or set to 0, plotman will archive
+                # to the first archive dir with free space.  If specified,
+                # plotman will skip forward up to 'index' drives (if they exist).
+                # This can be useful to reduce io contention on a drive on the
+                # archive host if you have multiple plotters (simultaneous io
+                # can still happen at the time a drive fills up.)  E.g., if you
+                # have four plotters, you could set this to 0, 1, 2, and 3, on
+                # the 4 machines, or 0, 1, 0, 1.
+                #   index: 0
 
 
 # Plotting scheduling parameters
 scheduling:
-        # Don't run a job on a particular temp dir until all existing jobs
-        # have progresed at least this far.  Phase major corresponds to the
-        # plot phase, phase minor corresponds to the table or table pair
-        # in sequence.
+        # Run a job on a particular temp dir only if the number of existing jobs
+        # before tmpdir_stagger_phase_major tmpdir_stagger_phase_minor
+        # is less than tmpdir_stagger_phase_limit.
+        # Phase major corresponds to the plot phase, phase minor corresponds to
+        # the table or table pair in sequence, phase limit corresponds to
+        # the number of plots allowed before [phase major, phase minor]
         tmpdir_stagger_phase_major: 2
         tmpdir_stagger_phase_minor: 1
+        # Optional: default is 1
+        tmpdir_stagger_phase_limit: 1
 
         # Don't run more than this many jobs at a time on a single temp dir.
         tmpdir_max_jobs: 3
 
+        # Don't run more than this many jobs at a time in total.
+        global_max_jobs: 12
+
         # Don't run any jobs (across all temp dirs) more often than this.
         global_stagger_m: 30
 
@@ -73,3 +113,6 @@ plotting:
         n_threads: 8         # Threads per job
         n_buckets: 128       # Number of buckets to split data into
         job_buffer: 4520     # Per job memory
+        # If specified, pass through to the -f and -p options.  See CLI reference.
+        #   farmer_pk: ...
+        #   pool_pk: ...
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 00000000..bd7e875e
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,17 @@
+[tox]
+envlist = test-py{37,38,39}
+
+[testenv]
+changedir = {envtmpdir}
+
+[testenv:test-py{37,38,39}]
+extras =
+    test
+commands =
+    pytest --capture=no --verbose --pyargs plotman
+
+[testenv:check]
+extras =
+    test
+commands =
+    check-manifest --verbose {toxinidir}
diff --git a/util/listlogs b/util/listlogs
new file mode 100755
index 00000000..e83ea776
--- /dev/null
+++ b/util/listlogs
@@ -0,0 +1,79 @@
+#!/bin/bash
+#must run with bash or <<< redirections won't work
+#created by @scry
+if [[ $@ == *"-h"* || $@ == *"--help"* ]]; then
+	echo 'listlogs <wildcard for group of logs>'
+	echo ' '
+	echo 'example: listlogs 2021-03-17-*'
+	echo ' '
+	echo 'listlogs lists complete chia plot log times and filenames'
+	echo ' -h  --help	This screen'
+	echo ' -d       	List just filenames'
+	echo ' -t       	List just total times'
+	echo ' -T       	List just phase 1 times'
+	echo ' -s       	Sum of total times'
+	echo ' -S       	Sum of phase 1 times'
+	echo ' -c       	Return the count of logs with total times'
+	echo ' -a       	Return average of total times'
+	echo ' -A       	Return average of phase 1 times'
+	exit
+fi
+if [[ $@ == *"-A"* ]]; then
+	opt="-A"
+	in=${@#"$opt"}
+	sum=$(grep -iR "Time for phase 1" $in | cut -d' ' -f6 | paste -sd+ - | bc)
+	len=$(grep -iR "Time for phase 1" $in | wc -l)
+	bc <<< "scale=2; $sum/$len"
+	exit
+fi
+if [[ $@ == *"-a"* ]]; then
+	opt="-a"
+	foo=${@#"$opt"}
+	sum=$(grep -iR "Total time" $foo | cut -d' ' -f4 | paste -sd+ - | bc)
+	len=$(grep -iR "Total time" $foo | wc -l)
+	bc <<< "scale=2; $sum/$len"
+	exit
+fi
+if [[ $@ == *"-C"* ]]; then
+	opt="-C"
+	in=${@#"$opt"}
+	grep -iR "Time for phase 1" $in | wc -l
+	exit
+fi
+if [[ $@ == *"-c"* ]]; then
+	opt="-c"
+	in=${@#"$opt"}
+	grep -iR "Total time" $in | wc -l
+	exit
+fi
+if [[ $@ == *"-S"* ]]; then
+	opt="-S"
+	in=${@#"$opt"}
+	grep -iR "Time for phase 1" $in | cut -d' ' -f6 | paste -sd+ - | bc
+	exit
+fi
+if [[ $@ == *"-s"* ]]; then
+	opt="-s"
+	in=${@#"$opt"}
+	grep -iR "Total time" $in | cut -d' ' -f4 | paste -sd+ - | bc
+	exit
+fi
+if [[ $@ == *"-T"* ]]; then
+	opt="-T"
+	in=${@#"$opt"}
+	grep -iR "Time for phase 1" $in | cut -d' ' -f6
+	exit
+fi
+if [[ $@ == *"-t"* ]]; then
+	opt="-t"
+	in=${@#"$opt"}
+	grep -iR "Total time" $in | cut -d' ' -f4
+	exit
+fi
+if [[ $@ == *"-d"* ]]; then
+	opt="-d"
+	in=${@#"$opt"}
+	grep -iR "Total time" $in | cut -d: -f1,2,3 | cut -d/ -f3
+	exit
+fi
+grep -iR "Total time" $@


Test patch:
diff --git a/archive_test.py b/archive_test.py
deleted file mode 100755
index f138f1db..00000000
--- a/archive_test.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python3
-
-from unittest.mock import patch
-
-import unittest
-import archive
-import manager
-
-class TestArchive(unittest.TestCase):
-    def test_compute_priority(self):
-        self.assertGreater(
-                archive.compute_priority( (3, 1), 1000, 10),
-                archive.compute_priority( (3, 6), 1000, 10) )
-
-    def test_rsync_dest(self):
-        arch_dir = '/plotdir/012'
-        arch_cfg = { 'rsyncd_module': 'plots_mod',
-                     'rsyncd_path'  : '/plotdir',
-                     'rsyncd_host'  : 'thehostname',
-                     'rsyncd_user'  : 'theusername' }
-
-        # Normal usage
-        self.assertEqual('rsync://theusername@thehostname:12000/plots_mod/012',
-                archive.rsync_dest(arch_cfg, arch_dir))
-
-        # Usage for constructing just the prefix, for scanning process tables
-        # for matching jobs.
-        self.assertEqual('rsync://theusername@thehostname:12000/',
-                archive.rsync_dest(arch_cfg, '/'))
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/job_test.py b/job_test.py
deleted file mode 100644
index c2a92d9a..00000000
--- a/job_test.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/python3
-
-from unittest.mock import patch
-import unittest
-import manager
-import job
-
-class TestJob(unittest.TestCase):
-    def setUp(self):
-        pass
diff --git a/manager_test.py b/manager_test.py
deleted file mode 100755
index 03108684..00000000
--- a/manager_test.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/python3
-
-from unittest.mock import patch
-import unittest
-import manager
-import job
-
-class TestManager(unittest.TestCase):
-    def setUp(self):
-        self.sched_cfg = {
-                'tmpdir_stagger_phase_major': 3,
-                'tmpdir_stagger_phase_minor': 0,
-                'tmpdir_max_jobs': 3 }
-
-    @patch('job.Job')
-    def job_w_tmpdir_phase(self, tmpdir, phase, MockJob):
-        j = MockJob()
-        j.progress.return_value = phase
-        j.tmpdir = tmpdir
-        return j
-
-    @patch('job.Job')
-    def job_w_dstdir_phase(self, dstdir, phase, MockJob):
-        j = MockJob()
-        j.progress.return_value = phase
-        j.dstdir = dstdir
-        return j
-
-    def test_permit_new_job_post_milestone(self):
-        self.assertTrue(manager.phases_permit_new_job(
-            [ (3, 8), (4, 1) ], self.sched_cfg ))
-
-    def test_permit_new_job_pre_milestone(self):
-        self.assertFalse(manager.phases_permit_new_job(
-            [ (2, 3), (4, 1) ], self.sched_cfg ))
-
-    def test_permit_new_job_too_many_jobs(self):
-        self.assertFalse(manager.phases_permit_new_job(
-            [ (3, 1), (3, 2), (3, 3) ], self.sched_cfg ))
-
-    def test_dstdirs_to_furthest_phase(self):
-        all_jobs = [ self.job_w_dstdir_phase('/plots1', (1, 5)),
-                     self.job_w_dstdir_phase('/plots2', (1, 1)),
-                     self.job_w_dstdir_phase('/plots2', (3, 1)),
-                     self.job_w_dstdir_phase('/plots2', (2, 1)),
-                     self.job_w_dstdir_phase('/plots3', (4, 1)) ]
-
-        self.assertEqual(
-                { '/plots1' : (1, 5),
-                  '/plots2' : (3, 1),
-                  '/plots3' : (4, 1) },
-                manager.dstdirs_to_furthest_phase(all_jobs))
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/plot_util_test.py b/plot_util_test.py
deleted file mode 100755
index 0e086d39..00000000
--- a/plot_util_test.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/python3
-
-# from unittest.mock import patch
-from pyfakefs.fake_filesystem_unittest import TestCase
-
-from plot_util import GB
-
-import os
-import pyfakefs
-import unittest
-
-import plot_util
-
-class TestPlotUtil(unittest.TestCase):
-    def test_human_format(self):
-        self.assertEqual('3G', plot_util.human_format(3442000000, 0))
-        self.assertEqual('3.54M', plot_util.human_format(3542000, 2))
-        self.assertEqual('354', plot_util.human_format(354, 0))
-        self.assertEqual('354.00', plot_util.human_format(354, 2))
-
-    def test_time_format(self):
-        self.assertEqual('34s', plot_util.time_format(34))
-        self.assertEqual('59s', plot_util.time_format(59))
-        self.assertEqual('0:01', plot_util.time_format(60))
-        self.assertEqual('0:01', plot_util.time_format(119))
-        self.assertEqual('0:02', plot_util.time_format(120))
-        self.assertEqual('1:01', plot_util.time_format(3694))
-
-    def test_split_path_prefix(self):
-        self.assertEqual(
-                ('', []),
-                plot_util.split_path_prefix( [] ) )
-        self.assertEqual(
-                ('', ['/a/0', '/b/1', '/c/2']),
-                plot_util.split_path_prefix([ '/a/0', '/b/1', '/c/2' ]) )
-        self.assertEqual(
-                ('/a/b', ['0', '1', '2']),
-                plot_util.split_path_prefix([ '/a/b/0', '/a/b/1', '/a/b/2' ]) )
-
-    def test_columns(self):
-        self.assertEqual(
-                [ [ 0, 3, 6 ],
-                  [ 1, 4, 7 ],
-                  [ 2, 5, '--'] ],
-                plot_util.column_wrap(list(range(8)), 3, filler='--') )
-        self.assertEqual(
-                [ [ 0, 3, 6 ],
-                  [ 1, 4, 7 ],
-                  [ 2, 5, 8 ] ],
-                plot_util.column_wrap(list(range(9)), 3, filler='--') )
-        self.assertEqual(
-                [ [ 0 ],
-                  [ 1 ],
-                  [ 2 ] ],
-                plot_util.column_wrap(list(range(3)), 1, filler='--') )
-
-
-class TestPlotUtilFiles(TestCase):
-    def setUp(self):
-        self.setUpPyfakefs()
-
-    def test_list_k32_plots(self):
-        self.fs.create_file('/t/plot-k32-0.plot', st_size=108 * GB)
-        self.fs.create_file('/t/plot-k32-1.plot', st_size=108 * GB)
-        self.fs.create_file('/t/.plot-k32-2.plot', st_size=108 * GB)
-        self.fs.create_file('/t/plot-k32-3.plot.2.tmp', st_size=108 * GB)
-        self.fs.create_file('/t/plot-k32-4.plot', st_size=100 * GB)
-        self.fs.create_file('/t/plot-k32-5.plot', st_size=108 * GB)
-
-        self.assertEqual( [ '/t/plot-k32-0.plot',
-                            '/t/plot-k32-1.plot',
-                            '/t/plot-k32-5.plot' ],
-                plot_util.list_k32_plots('/t/') )
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/reporting_test.py b/reporting_test.py
deleted file mode 100644
index 523e50f9..00000000
--- a/reporting_test.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/python3
-
-from unittest.mock import patch
-
-import os
-import pyfakefs
-import unittest
-
-import reporting
-
-class TestReporting(unittest.TestCase):
-    def test_phases_str(self):
-        self.assertEqual('1:2 2:3 3:4 4:0',
-            reporting.phases_str([(1,2), (2,3), (3,4), (4,0)]))
-        self.assertEqual('1:2 [+1] 3:4 4:0',
-            reporting.phases_str([(1,2), (2,3), (3,4), (4,0)], 3))
-        self.assertEqual('1:2 [+2] 4:0',
-            reporting.phases_str([(1,2), (2,3), (3,4), (4,0)], 2))
-
-    def test_job_viz_empty(self):
-        self.assertEqual('1        2        3       4 ',
-            reporting.job_viz([]) )
-
-    @patch('job.Job')
-    def job_w_phase(self, ph, MockJob):
-        j = MockJob()
-        j.progress.return_value = ph
-        return j
-
-    def test_job_viz_positions(self):
-        jobs = [self.job_w_phase((1, 1)),
-                self.job_w_phase((2, 0)),
-                self.job_w_phase((2, 4)),
-                self.job_w_phase((2, 7)),
-                self.job_w_phase((4, 0))]
-
-        self.assertEqual('1 .      2.   .  .3       4.',
-            reporting.job_viz(jobs))
-
-    def test_job_viz_counts(self):
-        jobs = [self.job_w_phase((2, 2)),
-                self.job_w_phase((2, 3)),
-                self.job_w_phase((2, 3)),
-                self.job_w_phase((2, 4)),
-                self.job_w_phase((2, 4)),
-                self.job_w_phase((2, 4)),
-                self.job_w_phase((2, 5)),
-                self.job_w_phase((2, 5)),
-                self.job_w_phase((2, 5)),
-                self.job_w_phase((2, 5)),
-                self.job_w_phase((3, 1)),
-                self.job_w_phase((3, 1)),
-                self.job_w_phase((3, 1)),
-                self.job_w_phase((3, 1)),
-                self.job_w_phase((3, 1)),
-                self.job_w_phase((3, 1)),
-                ]
-
-        self.assertEqual('1        2  .:;!  3 !     4 ',
-            reporting.job_viz(jobs))
-
diff --git a/src/plotman/_tests/__init__.py b/src/plotman/_tests/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/plotman/_tests/archive_test.py b/src/plotman/_tests/archive_test.py
new file mode 100755
index 00000000..9caa2abe
--- /dev/null
+++ b/src/plotman/_tests/archive_test.py
@@ -0,0 +1,25 @@
+from plotman import archive, configuration, manager
+
+
+def test_compute_priority():
+    assert (archive.compute_priority( (3, 1), 1000, 10) >
+            archive.compute_priority( (3, 6), 1000, 10) )
+
+def test_rsync_dest():
+    arch_dir = '/plotdir/012'
+    arch_cfg = configuration.Archive(
+        rsyncd_module='plots_mod',
+        rsyncd_path='/plotdir',
+        rsyncd_host='thehostname',
+        rsyncd_user='theusername',
+        rsyncd_bwlimit=80000
+    )
+
+    # Normal usage
+    assert ('rsync://theusername@thehostname:12000/plots_mod/012' ==
+            archive.rsync_dest(arch_cfg, arch_dir))
+
+    # Usage for constructing just the prefix, for scanning process tables
+    # for matching jobs.
+    assert ('rsync://theusername@thehostname:12000/' ==
+            archive.rsync_dest(arch_cfg, '/'))
diff --git a/src/plotman/_tests/configuration_test.py b/src/plotman/_tests/configuration_test.py
new file mode 100644
index 00000000..0f0e9d56
--- /dev/null
+++ b/src/plotman/_tests/configuration_test.py
@@ -0,0 +1,52 @@
+"""Tests for plotman/configuration.py"""
+import importlib.resources
+
+import pytest
+import yaml
+
+from plotman import configuration
+from plotman import resources as plotman_resources
+
+
+@pytest.fixture(name='config_path')
+def config_fixture(tmp_path):
+    """Return direct path to plotman.yaml"""
+    with importlib.resources.path(plotman_resources, "plotman.yaml") as path:
+        yield path
+
+
+def test_get_validated_configs__default(mocker, config_path):
+    """Check that get_validated_configs() works with default/example plotman.yaml file."""
+    mocker.patch("plotman.configuration.get_path", return_value=config_path)
+    res = configuration.get_validated_configs()
+    assert isinstance(res, configuration.PlotmanConfig)
+
+
+def test_get_validated_configs__malformed(mocker, config_path):
+    """Check that get_validated_configs() raises exception with invalid plotman.yaml contents."""
+    mocker.patch("plotman.configuration.get_path", return_value=config_path)
+    with open(configuration.get_path(), "r") as file:
+        loaded_yaml = yaml.load(file, Loader=yaml.SafeLoader)
+
+    # Purposefully malform the contents of loaded_yaml by changing tmp from List[str] --> str
+    loaded_yaml["directories"]["tmp"] = "/mnt/tmp/00"
+    mocker.patch("yaml.load", return_value=loaded_yaml)
+
+    with pytest.raises(configuration.ConfigurationException) as exc_info:
+        configuration.get_validated_configs()
+
+    assert exc_info.value.args[0] == f"Config file at: '{configuration.get_path()}' is malformed"
+
+
+def test_get_validated_configs__missing(mocker, config_path):
+    """Check that get_validated_configs() raises exception when plotman.yaml does not exist."""
+    nonexistent_config = config_path.with_name("plotman2.yaml")
+    mocker.patch("plotman.configuration.get_path", return_value=nonexistent_config)
+
+    with pytest.raises(configuration.ConfigurationException) as exc_info:
+        configuration.get_validated_configs()
+
+    assert exc_info.value.args[0] == (
+        f"No 'plotman.yaml' file exists at expected location: '{nonexistent_config}'. To generate "
+        f"default config file, run: 'plotman config generate'"
+    )
diff --git a/src/plotman/_tests/job_test.py b/src/plotman/_tests/job_test.py
new file mode 100644
index 00000000..04727a92
--- /dev/null
+++ b/src/plotman/_tests/job_test.py
@@ -0,0 +1,56 @@
+import contextlib
+import datetime
+import locale
+import importlib.resources
+
+import pytest
+from plotman import job
+from plotman._tests import resources
+
+
+class FauxJobWithLogfile:
+    # plotman.job.Job does too much in its .__init_() so we have this to let us
+    # test its .init_from_logfile().
+
+    def __init__(self, logfile_path):
+        self.logfile = logfile_path
+
+    def update_from_logfile(self):
+        pass
+
+
+@pytest.fixture(name='logfile_path')
+def logfile_fixture(tmp_path):
+    log_name = '2021-04-04-19:00:47.log'
+    log_contents = importlib.resources.read_binary(resources, log_name)
+    log_file_path = tmp_path.joinpath(log_name)
+    log_file_path.write_bytes(log_contents)
+
+    return log_file_path
+
+
+@contextlib.contextmanager
+def set_locale(name):
+    # This is terrible and not thread safe.
+
+    original = locale.setlocale(locale.LC_ALL)
+
+    try:
+        yield locale.setlocale(locale.LC_ALL, name)
+    finally:
+        locale.setlocale(locale.LC_ALL, original)
+
+with set_locale('C'):
+    log_file_time = datetime.datetime.strptime('Sun Apr  4 19:00:50 2021', '%a %b  %d %H:%M:%S %Y')
+
+@pytest.mark.parametrize(
+    argnames=['locale_name'],
+    argvalues=[['C'], ['en_US.UTF-8'], ['de_DE.UTF-8']],
+)
+def test_job_parses_time_with_non_english_locale(logfile_path, locale_name):
+    faux_job_with_logfile = FauxJobWithLogfile(logfile_path=logfile_path)
+
+    with set_locale(locale_name):
+        job.Job.init_from_logfile(self=faux_job_with_logfile)
+
+    assert faux_job_with_logfile.start_time == log_file_time
diff --git a/src/plotman/_tests/manager_test.py b/src/plotman/_tests/manager_test.py
new file mode 100755
index 00000000..2f425955
--- /dev/null
+++ b/src/plotman/_tests/manager_test.py
@@ -0,0 +1,93 @@
+# TODO: migrate away from unittest patch
+from unittest.mock import patch
+
+import pytest
+
+from plotman import configuration, job, manager
+
+
+@pytest.fixture
+def sched_cfg():
+    return configuration.Scheduling(
+        global_max_jobs=1,
+        global_stagger_m=2,
+        polling_time_s=2,
+        tmpdir_stagger_phase_major=3,
+        tmpdir_stagger_phase_minor=0,
+        tmpdir_max_jobs=3
+    )
+
+@pytest.fixture
+def dir_cfg():
+    return configuration.Directories(
+        log="/plots/log",
+        tmp=["/var/tmp", "/tmp"],
+        dst=["/mnt/dst/00", "/mnt/dst/01", "/mnt/dst/03"],
+        tmp_overrides={"/mnt/tmp/04": configuration.TmpOverrides(tmpdir_max_jobs=4)}
+    )
+
+def test_permit_new_job_post_milestone(sched_cfg, dir_cfg):
+    assert manager.phases_permit_new_job(
+        [ (3, 8), (4, 1) ], '/mnt/tmp/00', sched_cfg, dir_cfg)
+
+def test_permit_new_job_pre_milestone(sched_cfg, dir_cfg):
+    assert not manager.phases_permit_new_job(
+        [ (2, 3), (4, 1) ], '/mnt/tmp/00', sched_cfg, dir_cfg)
+
+def test_permit_new_job_too_many_jobs(sched_cfg, dir_cfg):
+    assert not manager.phases_permit_new_job(
+        [ (3, 1), (3, 2), (3, 3) ], '/mnt/tmp/00', sched_cfg, dir_cfg)
+
+def test_permit_new_job_too_many_jobs_zerophase(sched_cfg, dir_cfg):
+    assert not manager.phases_permit_new_job(
+        [ (3, 0), (3, 1), (3, 3) ], '/mnt/tmp/00', sched_cfg, dir_cfg)
+
+def test_permit_new_job_too_many_jobs_nonephase(sched_cfg, dir_cfg):
+    assert manager.phases_permit_new_job(
+        [ (None, None), (3, 1), (3, 3) ], '/mnt/tmp/00', sched_cfg, dir_cfg)
+
+def test_permit_new_job_override_tmp_dir(sched_cfg, dir_cfg):
+    assert manager.phases_permit_new_job(
+        [ (3, 1), (3, 2), (3, 3) ], '/mnt/tmp/04', sched_cfg, dir_cfg)
+    assert not manager.phases_permit_new_job(
+        [ (3, 1), (3, 2), (3, 3), (3, 6) ], '/mnt/tmp/04', sched_cfg,
+        dir_cfg)
+
+@patch('plotman.job.Job')
+def job_w_tmpdir_phase(tmpdir, phase, MockJob):
+    j = MockJob()
+    j.progress.return_value = phase
+    j.tmpdir = tmpdir
+    return j
+
+@patch('plotman.job.Job')
+def job_w_dstdir_phase(dstdir, phase, MockJob):
+    j = MockJob()
+    j.progress.return_value = phase
+    j.dstdir = dstdir
+    return j
+
+def test_dstdirs_to_furthest_phase():
+    all_jobs = [ job_w_dstdir_phase('/plots1', (1, 5)),
+                 job_w_dstdir_phase('/plots2', (1, 1)),
+                 job_w_dstdir_phase('/plots2', (3, 1)),
+                 job_w_dstdir_phase('/plots2', (2, 1)),
+                 job_w_dstdir_phase('/plots3', (4, 1)) ]
+
+    assert (manager.dstdirs_to_furthest_phase(all_jobs) ==
+            { '/plots1' : (1, 5),
+              '/plots2' : (3, 1),
+              '/plots3' : (4, 1) } )
+           
+
+def test_dstdirs_to_youngest_phase():
+    all_jobs = [ job_w_dstdir_phase('/plots1', (1, 5)),
+                 job_w_dstdir_phase('/plots2', (1, 1)),
+                 job_w_dstdir_phase('/plots2', (3, 1)),
+                 job_w_dstdir_phase('/plots2', (2, 1)),
+                 job_w_dstdir_phase('/plots3', (4, 1)) ]
+
+    assert (manager.dstdirs_to_youngest_phase(all_jobs) ==
+            { '/plots1' : (1, 5),
+              '/plots2' : (1, 1),
+              '/plots3' : (4, 1) } )
diff --git a/src/plotman/_tests/plot_util_test.py b/src/plotman/_tests/plot_util_test.py
new file mode 100755
index 00000000..5b8ca2ad
--- /dev/null
+++ b/src/plotman/_tests/plot_util_test.py
@@ -0,0 +1,56 @@
+import os
+
+import pyfakefs
+
+from plotman import plot_util
+from plotman.plot_util import GB
+
+
+def test_human_format():
+    assert (plot_util.human_format(3442000000, 0) == '3G')
+    assert (plot_util.human_format(3542000, 2) == '3.54M')
+    assert (plot_util.human_format(354, 0) == '354')
+    assert (plot_util.human_format(354, 2) == '354.00')
+
+def test_time_format():
+    assert (plot_util.time_format(34) == '34s')
+    assert (plot_util.time_format(59) == '59s')
+    assert (plot_util.time_format(60) == '0:01')
+    assert (plot_util.time_format(119) == '0:01')
+    assert (plot_util.time_format(120) == '0:02')
+    assert (plot_util.time_format(3694) == '1:01')
+
+def test_split_path_prefix():
+    assert (plot_util.split_path_prefix( [] ) ==
+            ('', []) )
+    assert (plot_util.split_path_prefix([ '/a/0', '/b/1', '/c/2' ]) ==
+            ('', ['/a/0', '/b/1', '/c/2']) )
+    assert ( plot_util.split_path_prefix([ '/a/b/0', '/a/b/1', '/a/b/2' ]) ==
+            ('/a/b', ['0', '1', '2']) )
+
+def test_columns():
+    assert (plot_util.column_wrap(list(range(8)), 3, filler='--') ==
+            [ [ 0, 3, 6 ],
+              [ 1, 4, 7 ],
+              [ 2, 5, '--'] ] )
+    assert (plot_util.column_wrap(list(range(9)), 3, filler='--') ==
+            [ [ 0, 3, 6 ],
+              [ 1, 4, 7 ],
+              [ 2, 5, 8 ] ] )
+    assert (plot_util.column_wrap(list(range(3)), 1, filler='--') ==
+            [ [ 0 ],
+              [ 1 ],
+              [ 2 ] ] )
+
+def test_list_k32_plots(fs: pyfakefs.fake_filesystem.FakeFilesystem):
+    fs.create_file('/t/plot-k32-0.plot', st_size=108 * GB)
+    fs.create_file('/t/plot-k32-1.plot', st_size=108 * GB)
+    fs.create_file('/t/.plot-k32-2.plot', st_size=108 * GB)
+    fs.create_file('/t/plot-k32-3.plot.2.tmp', st_size=108 * GB)
+    fs.create_file('/t/plot-k32-4.plot', st_size=100 * GB)
+    fs.create_file('/t/plot-k32-5.plot', st_size=108 * GB)
+
+    assert (plot_util.list_k32_plots('/t/') ==
+            [ '/t/plot-k32-0.plot',
+              '/t/plot-k32-1.plot',
+              '/t/plot-k32-5.plot' ] )
diff --git a/src/plotman/_tests/reporting_test.py b/src/plotman/_tests/reporting_test.py
new file mode 100644
index 00000000..b46dd873
--- /dev/null
+++ b/src/plotman/_tests/reporting_test.py
@@ -0,0 +1,61 @@
+# TODO: migrate away from unittest patch
+import os
+from unittest.mock import patch
+
+from plotman import reporting
+
+
+def test_phases_str_basic():
+    assert(reporting.phases_str([(1,2), (2,3), (3,4), (4,0)]) ==
+            '1:2 2:3 3:4 4:0')
+
+def test_phases_str_elipsis_1():
+    assert(reporting.phases_str([(1,2), (2,3), (3,4), (4,0)], 3) ==
+            '1:2 [+1] 3:4 4:0')
+
+def test_phases_str_elipsis_2():
+    assert(reporting.phases_str([(1,2), (2,3), (3,4), (4,0)], 2) ==
+            '1:2 [+2] 4:0')
+
+def test_phases_str_none():
+    assert(reporting.phases_str([(None, None), (2, None), (3, 0)]) ==
+            '?:? 2:? 3:0')
+
+def test_job_viz_empty():
+    assert(reporting.job_viz([]) == '1        2        3       4 ')
+
+@patch('plotman.job.Job')
+def job_w_phase(ph, MockJob):
+    j = MockJob()
+    j.progress.return_value = ph
+    return j
+
+def test_job_viz_positions():
+    jobs = [job_w_phase((1, 1)),
+            job_w_phase((2, 0)),
+            job_w_phase((2, 4)),
+            job_w_phase((2, 7)),
+            job_w_phase((4, 0))]
+
+    assert(reporting.job_viz(jobs) == '1 .      2.   .  .3       4.')
+
+def test_job_viz_counts():
+    jobs = [job_w_phase((2, 2)),
+            job_w_phase((2, 3)),
+            job_w_phase((2, 3)),
+            job_w_phase((2, 4)),
+            job_w_phase((2, 4)),
+            job_w_phase((2, 4)),
+            job_w_phase((2, 5)),
+            job_w_phase((2, 5)),
+            job_w_phase((2, 5)),
+            job_w_phase((2, 5)),
+            job_w_phase((3, 1)),
+            job_w_phase((3, 1)),
+            job_w_phase((3, 1)),
+            job_w_phase((3, 1)),
+            job_w_phase((3, 1)),
+            job_w_phase((3, 1)),
+            ]
+
+    assert(reporting.job_viz(jobs) == '1        2  .:;!  3 !     4 ')
diff --git a/src/plotman/_tests/resources/2021-04-04-19:00:47.log b/src/plotman/_tests/resources/2021-04-04-19:00:47.log
new file mode 100644
index 00000000..704efe51
--- /dev/null
+++ b/src/plotman/_tests/resources/2021-04-04-19:00:47.log
@@ -0,0 +1,2088 @@
+19:00:50.561  src.plotting.create_plots        : [32mINFO    [0m Creating 1 plots of size 32, pool public key:  0b6f2b9428744d5062a2073e14b3ca9896a71f7ca9850bdcb285f26108fb19f610c788d47e4830c4c7abfa7611e00168 farmer public key: 93222af1a0f7b2ff39f98eb87c1b609fea797798302a60d1f1d6e5152cfdce12c260325d78446e7b8758101b64f43bd5[0m
+19:00:50.576  src.plotting.create_plots        : [32mINFO    [0m Memo: 0b6f2b9428744d5062a2073e14b3ca9896a71f7ca9850bdcb285f26108fb19f610c788d47e4830c4c7abfa7611e0016893222af1a0f7b2ff39f98eb87c1b609fea797798302a60d1f1d6e5152cfdce12c260325d78446e7b8758101b64f43bd5053ad2848e58469c8529c36fdfaf0fc00552f00778704010a4a88ce33d705892[0m
+19:00:50.576  src.plotting.create_plots        : [32mINFO    [0m Starting plot 1/1[0m
+
+Starting plotting progress into temporary dirs: /farm/yards/901 and /farm/yards/901
+ID: 3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24
+Plot size is: 32
+Buffer size is: 4000MiB
+Using 128 buckets
+Using 4 threads of stripe size 65536
+
+Starting phase 1/4: Forward Propagation into tmp files... Sun Apr  4 19:00:50 2021
+Computing table 1
+F1 complete, time: 193.141 seconds. CPU (173.42%) Sun Apr  4 19:04:03 2021
+Computing table 2
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 102 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 103 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 104 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 105 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 106 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 107 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 108 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 109 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 110 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 111 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 112 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 113 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 114 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 115 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 116 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 117 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 118 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 119 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 120 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 121 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 122 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 123 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 124 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 125 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.281GiB.
+	Bucket 126 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Bucket 127 uniform sort. Ram: 3.840GiB, u_sort min: 0.563GiB, qs min: 0.281GiB.
+	Total matches: 4294907691
+Forward propagation table time: 2305.238 seconds. CPU (191.490%) Sun Apr  4 19:42:29 2021
+Computing table 3
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 102 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 103 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 104 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 105 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 106 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 107 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 108 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 109 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 110 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 111 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 112 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 113 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 114 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 115 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 116 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 117 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 118 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 119 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 120 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 121 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 122 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 123 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 124 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 125 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 126 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 127 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Total matches: 4294825940
+Forward propagation table time: 2719.802 seconds. CPU (178.050%) Sun Apr  4 20:27:49 2021
+Computing table 4
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 102 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 103 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 104 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 105 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 106 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 107 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 108 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 109 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 110 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 111 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 112 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 113 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 114 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 115 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 116 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 117 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 118 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 119 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 120 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 121 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 122 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 123 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 124 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 125 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 126 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 127 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Total matches: 4294693125
+Forward propagation table time: 3456.261 seconds. CPU (172.590%) Sun Apr  4 21:25:25 2021
+Computing table 5
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 102 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 103 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 104 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 105 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 106 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 107 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 108 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 109 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 110 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 111 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 112 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 113 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 114 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 115 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 116 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 117 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 118 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 119 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 120 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 121 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 122 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 123 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
+	Bucket 124 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 125 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 126 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 127 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Total matches: 4294469524
+Forward propagation table time: 3343.521 seconds. CPU (173.250%) Sun Apr  4 22:21:08 2021
+Computing table 6
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 102 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 103 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 104 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 105 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 106 uniform sort. Ram: 3.840GiB, u_sort min: 2.750GiB, qs min: 0.688GiB.
+	Bucket 107 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 108 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 109 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 110 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 111 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 112 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 113 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 114 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 115 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 116 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 117 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 118 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 119 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 120 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 121 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 122 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 123 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 124 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 125 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 126 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Bucket 127 uniform sort. Ram: 3.840GiB, u_sort min: 1.375GiB, qs min: 0.687GiB.
+	Total matches: 4293986638
+Forward propagation table time: 3127.428 seconds. CPU (178.720%) Sun Apr  4 23:13:16 2021
+Computing table 7
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 102 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 103 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 104 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 105 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 106 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 107 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 108 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 109 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 110 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 111 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 112 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 113 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 114 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 115 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 116 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 117 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 118 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 119 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 120 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 121 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 122 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 123 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 124 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Bucket 125 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 126 uniform sort. Ram: 3.840GiB, u_sort min: 1.125GiB, qs min: 0.562GiB.
+	Bucket 127 uniform sort. Ram: 3.840GiB, u_sort min: 2.250GiB, qs min: 0.563GiB.
+	Total matches: 4292974565
+Forward propagation table time: 2426.274 seconds. CPU (183.160%) Sun Apr  4 23:53:42 2021
+Time for phase 1 = 17571.981 seconds. CPU (178.600%) Sun Apr  4 23:53:42 2021
+
+Starting phase 2/4: Backpropagation into tmp files... Sun Apr  4 23:53:42 2021
+Backpropagating on table 7
+scanned table 7
+scanned time =  337.014 seconds. CPU (30.500%) Sun Apr  4 23:59:19 2021
+sorting table 7
+Backpropagating on table 6
+scanned table 6
+scanned time =  339.546 seconds. CPU (69.420%) Mon Apr  5 00:14:11 2021
+sorting table 6
+sort time =  909.801 seconds. CPU (78.330%) Mon Apr  5 00:29:21 2021
+Backpropagating on table 5
+scanned table 5
+scanned time =  347.923 seconds. CPU (70.320%) Mon Apr  5 00:35:11 2021
+sorting table 5
+sort time =  886.987 seconds. CPU (77.400%) Mon Apr  5 00:49:58 2021
+Backpropagating on table 4
+scanned table 4
+scanned time =  326.522 seconds. CPU (68.940%) Mon Apr  5 00:55:26 2021
+sorting table 4
+sort time =  845.687 seconds. CPU (80.330%) Mon Apr  5 01:09:31 2021
+Backpropagating on table 3
+scanned table 3
+scanned time =  341.132 seconds. CPU (69.560%) Mon Apr  5 01:15:14 2021
+sorting table 3
+sort time =  837.117 seconds. CPU (78.960%) Mon Apr  5 01:29:11 2021
+Backpropagating on table 2
+scanned table 2
+scanned time =  331.484 seconds. CPU (70.220%) Mon Apr  5 01:34:44 2021
+sorting table 2
+sort time =  848.353 seconds. CPU (79.340%) Mon Apr  5 01:48:52 2021
+table 1 new size: 3425107198
+Time for phase 2 = 6911.621 seconds. CPU (71.780%) Mon Apr  5 01:48:54 2021
+Wrote: 268
+
+Starting phase 3/4: Compression from tmp files into "/farm/yards/901/plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot.2.tmp" ... Mon Apr  5 01:48:54 2021
+Compressing tables 1 and 2
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 102 QS. Ram: 3.840GiB, u_sort min: 0.102GiB, qs min: 0.031GiB. force_qs: 1
+	First computation pass time: 1185.951 seconds. CPU (83.650%) Mon Apr  5 02:08:40 2021
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.682GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.643GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.688GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.662GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.628GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.640GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.654GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.651GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.659GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.653GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.648GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.664GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.674GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.661GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.650GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.644GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.653GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.649GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.640GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.629GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.630GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.641GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.649GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.649GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.645GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.641GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.646GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.647GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.647GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.644GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.649GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.651GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.653GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.655GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.656GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.657GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.648GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.645GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.642GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.638GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.638GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.639GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.641GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.642GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.646GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.649GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.652GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.654GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.654GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.651GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.650GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.647GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.646GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.646GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.646GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.647GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.644GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.642GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.643GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.643GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.647GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.647GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.649GiB.
+	Bucket 63 QS. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.649GiB. force_qs: 1
+	Second computation pass time: 819.668 seconds. CPU (81.220%) Mon Apr  5 02:22:20 2021
+	Wrote 3429267383 entries
+Total compress table time: 2006.181 seconds. CPU (82.660%) Mon Apr  5 02:22:20 2021
+Compressing tables 2 and 3
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 51 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 52 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 53 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 54 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 55 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 56 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 57 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 58 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 59 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 60 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 61 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 62 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 63 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 64 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 65 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 66 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 67 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 68 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 69 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 70 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 71 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 72 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 73 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 74 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 75 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 76 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 77 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 78 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 79 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 80 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 81 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 82 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 83 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 84 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 85 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 86 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 87 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 88 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 89 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 90 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 91 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 92 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 93 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 94 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 95 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 96 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 97 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 98 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 99 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 100 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.407GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 101 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.408GiB.
+	Bucket 102 QS. Ram: 1.920GiB, u_sort min: 0.203GiB, qs min: 0.082GiB. force_qs: 1
+	Bucket 51 QS. Ram: 1.920GiB, u_sort min: 0.203GiB, qs min: 0.081GiB. force_qs: 1
+	First computation pass time: 1641.359 seconds. CPU (85.940%) Mon Apr  5 02:49:41 2021
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.021GiB.
+	Bucket 40 QS. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 0.817GiB. force_qs: 1
+	Second computation pass time: 869.565 seconds. CPU (79.930%) Mon Apr  5 03:04:11 2021
+	Wrote 3439708244 entries
+Total compress table time: 2510.965 seconds. CPU (83.860%) Mon Apr  5 03:04:11 2021
+Compressing tables 3 and 4
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 51 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 52 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 53 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 54 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 55 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 56 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 57 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 58 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 59 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 60 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 61 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 62 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 63 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 64 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 65 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 66 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 67 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 68 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 69 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 70 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 71 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 72 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 73 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 74 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 75 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 76 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 77 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 78 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 79 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 80 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 81 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 82 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 83 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 84 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 85 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 86 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 87 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 88 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 89 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 90 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 91 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 92 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 93 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 94 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 95 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 96 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 97 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.410GiB.
+	Bucket 98 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 99 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 100 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 101 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.409GiB.
+	Bucket 102 QS. Ram: 1.920GiB, u_sort min: 0.813GiB, qs min: 0.209GiB. force_qs: 1
+	Bucket 51 QS. Ram: 1.920GiB, u_sort min: 0.813GiB, qs min: 0.208GiB. force_qs: 1
+	First computation pass time: 1631.845 seconds. CPU (86.160%) Mon Apr  5 03:31:23 2021
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.022GiB.
+	Bucket 41 QS. Ram: 3.840GiB, u_sort min: 0.102GiB, qs min: 0.050GiB. force_qs: 1
+	Second computation pass time: 870.303 seconds. CPU (79.480%) Mon Apr  5 03:45:53 2021
+	Wrote 3465774150 entries
+Total compress table time: 2502.233 seconds. CPU (83.840%) Mon Apr  5 03:45:53 2021
+Compressing tables 4 and 5
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 51 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 52 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 53 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 54 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 55 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 56 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 57 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 58 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 59 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 60 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 61 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 62 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 63 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 64 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 65 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 66 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 67 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 68 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 69 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 70 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 71 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 72 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 73 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 74 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 75 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 76 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 77 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 78 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 79 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 80 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 81 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 82 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 83 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 84 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 85 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 86 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 87 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 88 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 89 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 90 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 91 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 92 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 93 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 94 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 95 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 96 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 97 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 98 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 99 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 100 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 101 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 102 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.414GiB.
+	Bucket 51 QS. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.523GiB. force_qs: 1
+	Bucket 103 QS. Ram: 1.920GiB, u_sort min: 0.406GiB, qs min: 0.119GiB. force_qs: 1
+	First computation pass time: 1667.602 seconds. CPU (86.330%) Mon Apr  5 04:13:41 2021
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.026GiB.
+	Bucket 41 QS. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.691GiB. force_qs: 1
+	Second computation pass time: 888.151 seconds. CPU (81.280%) Mon Apr  5 04:28:29 2021
+	Wrote 3532387464 entries
+Total compress table time: 2555.841 seconds. CPU (84.580%) Mon Apr  5 04:28:29 2021
+Compressing tables 5 and 6
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 0 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 1 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 2 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 3 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 4 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 5 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 6 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 7 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 8 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 9 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 10 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 11 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 12 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 13 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 14 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 15 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 16 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 17 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 18 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 19 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 20 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 21 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 22 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 23 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 24 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 25 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 51 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 52 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 26 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 53 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 54 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 27 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 55 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 56 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 28 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 57 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 58 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 29 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 59 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 60 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 30 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 61 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 62 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 31 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 63 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 64 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 32 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 65 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 66 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 33 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 67 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 68 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 34 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 69 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 70 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 35 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 71 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 72 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 36 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 73 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 74 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 37 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 75 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 76 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 38 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 77 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 78 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 39 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 79 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 80 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 40 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 81 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 82 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 41 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 83 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 84 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 42 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 85 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 86 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 43 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 87 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 88 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 44 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 89 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 90 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 45 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 91 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 92 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 46 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 93 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 94 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 47 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 95 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 96 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 48 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 97 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 98 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 49 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 99 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 100 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 50 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 101 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 102 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 51 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 103 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 104 uniform sort. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.427GiB.
+	Bucket 52 QS. Ram: 1.920GiB, u_sort min: 1.625GiB, qs min: 0.517GiB. force_qs: 1
+	Bucket 105 QS. Ram: 1.920GiB, u_sort min: 0.406GiB, qs min: 0.117GiB. force_qs: 1
+	First computation pass time: 1729.316 seconds. CPU (85.660%) Mon Apr  5 04:57:18 2021
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.039GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 3.250GiB, qs min: 1.038GiB.
+	Bucket 43 QS. Ram: 3.840GiB, u_sort min: 0.813GiB, qs min: 0.302GiB. force_qs: 1
+	Second computation pass time: 949.061 seconds. CPU (78.800%) Mon Apr  5 05:13:07 2021
+	Wrote 3712594744 entries
+Total compress table time: 2678.466 seconds. CPU (83.230%) Mon Apr  5 05:13:07 2021
+Compressing tables 6 and 7
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
+	Bucket 55 QS. Ram: 3.840GiB, u_sort min: 0.813GiB, qs min: 0.262GiB. force_qs: 1
+	First computation pass time: 1220.986 seconds. CPU (76.040%) Mon Apr  5 05:33:28 2021
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 1.003GiB.
+	Bucket 47 QS. Ram: 3.840GiB, u_sort min: 3.000GiB, qs min: 0.823GiB. force_qs: 1
+	Second computation pass time: 1062.327 seconds. CPU (79.610%) Mon Apr  5 05:51:11 2021
+	Wrote 4292974565 entries
+Total compress table time: 2283.456 seconds. CPU (77.700%) Mon Apr  5 05:51:11 2021
+Time for phase 3 = 14537.188 seconds. CPU (82.730%) Mon Apr  5 05:51:11 2021
+
+Starting phase 4/4: Write Checkpoint tables into "/farm/yards/901/plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot.2.tmp" ... Mon Apr  5 05:51:11 2021
+	Starting to write C1 and C3 tables
+	Bucket 0 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 1 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 2 uniform sort. Ram: 3.840GiB, u_sort min: 1.500GiB, qs min: 0.375GiB.
+	Bucket 3 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 4 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 5 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 6 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 7 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 8 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 9 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 10 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 11 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 12 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 13 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 14 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 15 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 16 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 17 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 18 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 19 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 20 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 21 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 22 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 23 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 24 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 25 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 26 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 27 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 28 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 29 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 30 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 31 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 32 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 33 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 34 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 35 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 36 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 37 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 38 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 39 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 40 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 41 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 42 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 43 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 44 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 45 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 46 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 47 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 48 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 49 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 50 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 51 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 52 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 53 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 54 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 55 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 56 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 57 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 58 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 59 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 60 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 61 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 62 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 63 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 64 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 65 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 66 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 67 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 68 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 69 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 70 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 71 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 72 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 73 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 74 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 75 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 76 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 77 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 78 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 79 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 80 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 81 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 82 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 83 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 84 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 85 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 86 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 87 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 88 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 89 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 90 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 91 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 92 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 93 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 94 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 95 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 96 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 97 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 98 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 99 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 100 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 101 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 102 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 103 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 104 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 105 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 106 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 107 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 108 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 109 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 110 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 111 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 112 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 113 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 114 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 115 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 116 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 117 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 118 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 119 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 120 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 121 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 122 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 123 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 124 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 125 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 126 uniform sort. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB.
+	Bucket 127 QS. Ram: 3.840GiB, u_sort min: 0.750GiB, qs min: 0.375GiB. force_qs: 1
+	Finished writing C1 and C3 tables
+	Writing C2 table
+	Finished writing C2 table
+	Final table pointers:
+	P1: 0x10c
+	P2: 0x3747866ce
+	P3: 0x6b5e02770
+	P4: 0x9fd989c25
+	P5: 0xd5574d320
+	P6: 0x10d8fa9cb3
+	P7: 0x14e91f0332
+	C1: 0x1908a19632
+	C2: 0x1908bbc9fe
+	C3: 0x1908bbcaae
+Time for phase 4 = 924.288 seconds. CPU (86.810%) Mon Apr  5 06:06:35 2021
+Approximate working space used (without final file): 286.598 GiB
+Final File size: 101.336 GiB
+Total time = 39945.080 seconds. CPU (123.100%) Mon Apr  5 06:06:35 2021
+Copied final file from "/farm/yards/901/plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot.2.tmp" to "/farm/wagons/801/plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot.2.tmp"
+Removed temp2 file "/farm/yards/901/plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot.2.tmp"? 1
+Renamed final file from "/farm/wagons/801/plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot.2.tmp" to "/farm/wagons/801/plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot"
+06:22:40.715  src.plotting.create_plots        : [32mINFO    [0m Summary:[0m
+06:22:40.715  src.plotting.create_plots        : [32mINFO    [0m Created a total of 1 new plots[0m
+06:22:40.715  src.plotting.create_plots        : [32mINFO    [0m plot-k32-2021-04-04-19-00-3eb8a37981de1cc76187a36ed947ab4307943cf92967a7e166841186c7899e24.plot[0m
diff --git a/src/plotman/_tests/resources/2021-04-04-19:00:47.notes b/src/plotman/_tests/resources/2021-04-04-19:00:47.notes
new file mode 100644
index 00000000..0f12a7ad
--- /dev/null
+++ b/src/plotman/_tests/resources/2021-04-04-19:00:47.notes
@@ -0,0 +1,8 @@
+This sample log file was created from a real log file.  It has had the
+following values replaced by naively randomly generated hexadecimal
+characters.
+
+pool public key
+farmer public key
+memo
+id
diff --git a/src/plotman/_tests/resources/__init__.py b/src/plotman/_tests/resources/__init__.py
new file mode 100644
index 00000000..e69de29b