diff --git a/.clang-format b/.clang-format
deleted file mode 100644
index 31f99e191..000000000
--- a/.clang-format
+++ /dev/null
@@ -1,24 +0,0 @@
----
-BasedOnStyle: Chromium
-AccessModifierOffset: '-4'
-AlwaysBreakBeforeMultilineStrings: 'true'
-BinPackArguments: 'true'
-BinPackParameters: 'true'
-BraceWrapping:
- BeforeCatch: 'true'
- BeforeElse: 'true'
-BreakBeforeBinaryOperators: All
-BreakBeforeBraces: Custom
-ColumnLimit: '0'
-ConstructorInitializerAllOnOneLineOrOnePerLine: 'false'
-IncludeBlocks: Preserve
-IndentPPDirectives: None
-IndentWidth: '4'
-SortIncludes: 'false'
-SpaceAfterTemplateKeyword: 'false'
-SpacesBeforeTrailingComments: '1'
-Standard: Cpp11
-TabWidth: '4'
-UseTab: Never
-
-...
diff --git a/.dockerignore b/.dockerignore
deleted file mode 100644
index 32db23515..000000000
--- a/.dockerignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# hidden files and dirs
-.gitignore
-.git/
-.idea/
-.vscode/
-
-# not needed for building OpenVSLAM
-Dockerfile*
-LICENSE
-README.md
-.travis.yml
-wercker.yml
-docs/
-test/
-viewer/
-
-# build directory
-build/
-cmake-build-debug/
-cmake-build-release/
-
-# build cache
-CMakeCache.txt
-CMakeFiles/
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
deleted file mode 100644
index a383f9b5b..000000000
--- a/.github/workflows/main.yml
+++ /dev/null
@@ -1,226 +0,0 @@
-name: CI
-
-on:
- push:
- branches: [ main ]
- pull_request:
- branches: [ main ]
-
- workflow_dispatch:
-
-jobs:
- # build_macos:
- # runs-on: macos-latest
- # steps:
- # - uses: actions/checkout@v2
- # - name: brew install
- # run: |
- # brew update
- # brew upgrade
- # brew install ccache pkg-config cmake git suite-sparse libomp eigen ffmpeg opencv yaml-cpp glog gflags glew protobuf clang-format
-
- clang-format:
- runs-on: ubuntu-latest
- defaults:
- run:
- shell: bash
- steps:
- - uses: actions/checkout@v2
- - uses: DoozyX/clang-format-lint-action@v0.12
- with:
- source: '.'
- exclude: './3rd'
- extensions: 'h,cc'
- clangFormatVersion: 6
- style: file
- inplace: False
-
- build_with_gui:
- runs-on: ubuntu-latest
- defaults:
- run:
- shell: bash
- container:
- image: ghcr.io/ymd-stella/openvslam-community/openvslam-desktop:latest
- steps:
- - uses: actions/checkout@v2
- - name: cmake and make with pangolin viewer
- run: |
- mkdir build
- cd build
- cmake -DCMAKE_BUILD_TYPE=None -DBUILD_EXAMPLES=ON -DUSE_PANGOLIN_VIEWER=ON -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON ..
- make -j $(($(nproc) / 2))
- - name: cmake and make with socket publisher
- run: |
- cd build
- cmake -DCMAKE_BUILD_TYPE=None -DBUILD_EXAMPLES=ON -DUSE_SOCKET_PUBLISHER=ON -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON ..
- make -j $(($(nproc) / 2))
-
- build_without_gui:
- runs-on: ubuntu-latest
- defaults:
- run:
- shell: bash
- container:
- image: ghcr.io/ymd-stella/openvslam-community/openvslam-desktop:latest
- steps:
- - uses: actions/checkout@v2
- - name: cmake and make
- run: |
- mkdir build
- cd build
- cmake -DCMAKE_BUILD_TYPE=None -DBUILD_EXAMPLES=ON -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON -DUSE_SSE_ORB=ON ..
- make -j $(($(nproc) / 2))
- - name: unit test
- run: |
- cd build
- export BOW_VOCAB=/datasets/orb_vocab/orb_vocab.fbow
- ctest -V
- - name: Convert groundtruth to TUM format
- run: |
- python3 scripts/dataset_tools/compute_euroc_cam_tf.py > tf.json
- evo_traj euroc --transform_right tf.json /datasets/EuRoC/MH_04/state_groundtruth_estimate0/data.csv --save_as_tum
- mv data.tum euroc_gt.tum
- - name: SLAM test (monocular) with EuRoC MAV dataset
- run: |
- cd build
- ./run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_04 -c ../example/euroc/EuRoC_mono.yaml --frame-skip 2 --no-sleep --debug --eval-log --map-db euroc_mono.msg
- mv frame_trajectory.txt ../frame_trajectory_euroc_mono_slam.txt
- mv track_times.txt ../track_times_euroc_mono_slam.txt
- - name: SLAM test (stereo) with EuRoC MAV dataset
- run: |
- cd build
- ./run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_04 -c ../example/euroc/EuRoC_stereo.yaml --frame-skip 2 --no-sleep --debug --eval-log --map-db euroc_stereo.msg
- mv frame_trajectory.txt ../frame_trajectory_euroc_stereo_slam.txt
- mv track_times.txt ../track_times_euroc_stereo_slam.txt
- - name: Localization test (monocular) with EuRoC MAV dataset
- run: |
- cd build
- ./run_euroc_localization -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_04 -c ../example/euroc/EuRoC_mono.yaml --frame-skip 2 --no-sleep --debug --eval-log --map-db euroc_mono.msg
- mv frame_trajectory.txt ../frame_trajectory_euroc_mono_localization.txt
- mv track_times.txt ../track_times_euroc_mono_localization.txt
- - name: download openvslam_test_dataset
- run: |
- FILE_ID="1bdkqaR99GKjg4orhqHxQkwqyi227tfCd"
- curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
- CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
- curl -sLb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o openvslam_test_dataset.zip
- unzip openvslam_test_dataset.zip
- rm openvslam_test_dataset.zip
- - name: make config for openvslam_test_dataset
- run: |
- sed -e 's/fps: .*/fps: 24.0/g' example/aist/equirectangular.yaml > equirectangular.yaml
- - name: SLAM test with equirectangular dataset (1)
- run: |
- cd build
- ./run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ../openvslam_test_dataset/1/equirectangular/video.mp4 -c ../equirectangular.yaml --no-sleep --debug --eval-log --map-db equirectangular_map.msg
- mv frame_trajectory.txt ../frame_trajectory_equirectangular_1.txt
- mv track_times.txt ../track_times_equirectangular_1.txt
- - name: SLAM test with equirectangular dataset (2)
- run: |
- cd build
- ./run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ../openvslam_test_dataset/2/equirectangular/video.mp4 -c ../equirectangular.yaml --no-sleep --debug --eval-log --map-db equirectangular_map.msg
- mv frame_trajectory.txt ../frame_trajectory_equirectangular_2.txt
- mv track_times.txt ../track_times_equirectangular_2.txt
- - name: SLAM test with equirectangular dataset (3)
- run: |
- cd build
- ./run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ../openvslam_test_dataset/3/equirectangular/video.mp4 -c ../equirectangular.yaml --no-sleep --debug --eval-log --map-db equirectangular_map.msg
- mv frame_trajectory.txt ../frame_trajectory_equirectangular_3.txt
- mv track_times.txt ../track_times_equirectangular_3.txt
- - name: Evaluation
- if: github.event_name == 'pull_request'
- run: |
- cp scripts/workflows/* .
- (
- echo ''
- echo 'Track time and Relative pose error
'
- echo
- echo '|dataset|track_time
(mean)|track_time
(median)|track_time
(max)|RPE
(mean)|RPE
(median)|RPE
(max)|RPE
(rmse)|RPE
(sse)|RPE
(std)|'
- echo '|---|---|---|---|---|---|---|---|---|---|'
- echo -n '| EuRoC MH_04 (SLAM, perspective, mono)'
- bash track_time_print_row.bash track_times_euroc_mono_slam.txt
- bash evo_rpe_print_row.bash tum euroc_gt.tum frame_trajectory_euroc_mono_slam.txt -as
- echo '|'
- echo -n '| EuRoC MH_04 (SLAM, perspective, stereo)'
- bash track_time_print_row.bash track_times_euroc_stereo_slam.txt
- bash evo_rpe_print_row.bash tum euroc_gt.tum frame_trajectory_euroc_stereo_slam.txt -a
- echo '|'
- echo -n '| EuRoC MH_04 (Localization, perspective, mono)'
- bash track_time_print_row.bash track_times_euroc_mono_localization.txt
- bash evo_rpe_print_row.bash tum euroc_gt.tum frame_trajectory_euroc_mono_localization.txt -as
- echo '|'
- echo -n '| openvslam_test_dataset 1 (SLAM, equirectangular, mono)'
- bash track_time_print_row.bash track_times_equirectangular_1.txt
- bash evo_rpe_print_row.bash tum openvslam_test_dataset/1/gt.tum frame_trajectory_equirectangular_1.txt -as
- echo '|'
- echo -n '| openvslam_test_dataset 2 (SLAM, equirectangular, mono)'
- bash track_time_print_row.bash track_times_equirectangular_2.txt
- bash evo_rpe_print_row.bash tum openvslam_test_dataset/2/gt.tum frame_trajectory_equirectangular_2.txt -as
- echo '|'
- echo -n '| openvslam_test_dataset 3 (SLAM, equirectangular, mono)'
- bash track_time_print_row.bash track_times_equirectangular_3.txt
- bash evo_rpe_print_row.bash tum openvslam_test_dataset/3/gt.tum frame_trajectory_equirectangular_3.txt -as
- echo '|'
- echo ' '
- ) >> result.md
- - uses: actions/upload-artifact@v2
- if: github.event_name == 'pull_request'
- with:
- name: result
- path: result.md
-
- build_tutorial:
- runs-on: ubuntu-latest
- defaults:
- run:
- shell: bash
- container:
- image: ghcr.io/ymd-stella/openvslam-community/openvslam-desktop:latest
- steps:
- - uses: actions/checkout@v2
- - name: cmake and make
- run: |
- mkdir build
- cd build
- cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_EXAMPLES=ON -DUSE_STACK_TRACE_LOGGER=ON -DBUILD_TESTS=ON -DUSE_OPENMP=OFF ..
- make -j $(($(nproc) / 2))
- - name: download a dataset
- run: |
- cd build
- FILE_ID="1TXjREzkht3iRz__qVx4oYRW1GXsv37ct"
- curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
- CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
- curl -sLb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o video_for_ci_1.zip
- unzip video_for_ci_1.zip
- rm video_for_ci_1.zip
- - name: mapping test with the tutorial
- run: |
- cd build
- ./run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ./video_for_ci_1/video.mp4 -c ../example/aist/equirectangular.yaml --frame-skip 3 --no-sleep --debug --eval-log --map-db map.msg
- - name: localization test with the tutorial
- run: |
- cd build
- ./run_video_localization -v /datasets/orb_vocab/orb_vocab.fbow -m ./video_for_ci_1/video.mp4 -c ../example/aist/equirectangular.yaml --frame-skip 3 --no-sleep --debug --eval-log --map-db map.msg
-
- rosdep_foxy:
- runs-on: ubuntu-latest
- defaults:
- run:
- shell: bash
- container:
- image: ghcr.io/ymd-stella/openvslam-community/ros:foxy-ros-base
- steps:
- - uses: actions/checkout@v2
- - name: build ros2 packages
- run: |
- mkdir -p /ros_ws/src
- cp -r . /ros_ws/src/openvslam
- cd /ros_ws/src/openvslam
- git submodule update -i --recursive
- cd ../..
- rosdep update
- apt update
- rosdep install -y -i --from-paths src
- export MAKEFLAGS="-j $(($(nproc) / 2))"
- (source /opt/ros/${ROS_DISTRO}/setup.bash && colcon build --parallel-workers 1)
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index f86549c15..000000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "3rd/FBoW"]
- path = 3rd/FBoW
- url = https://github.com/OpenVSLAM-Community/FBoW.git
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 00cabe7be..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,236 +0,0 @@
-language: cpp
-
-os:
- - osx
-osx_image:
- - xcode10
-
-compiler:
- - clang
-
-env:
- global:
- - DEPS_DIR="${HOME}/deps"
- - DATASET_DIR="${HOME}/dataset"
-
-before_cache:
- - brew cleanup
-
-cache:
- ccache: true
- directories:
- - ${HOME}/Library/Caches/Homebrew
- - ${DEPS_DIR}/DBoW2
- - ${DEPS_DIR}/g2o
- - ${DEPS_DIR}/Pangolin
- - ${DEPS_DIR}/socket.io-client-cpp
- - ${DATASET_DIR}
-
-addons:
- homebrew:
- update: true
- packages:
- - ccache
- - pkg-config
- - cmake
- - git
- - suite-sparse
- - libomp
- - eigen
- - ffmpeg
- - opencv
- - yaml-cpp
- - glog
- - gflags
- - glew
- - protobuf
- - clang-format
-
-before_install:
- - ccache -s
- - mkdir -p ${DEPS_DIR}
- - |
- cd ${DEPS_DIR}
- if [ ! -d DBoW2 ]; then
- echo "clone DBoW2"
- git clone https://github.com/shinsumicco/DBoW2.git
- elif [ -z "$(ls DBoW2)" ]; then
- echo "reclone DBoW2"
- rm -rf DBoW2
- git clone https://github.com/shinsumicco/DBoW2.git
- fi
- cd DBoW2
- mkdir -p build && cd build
- cmake \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/usr/local \
- ..
- make -j 3
- make install
- - |
- cd ${DEPS_DIR}
- if [ ! -d g2o ]; then
- echo "clone g2o"
- git clone https://github.com/RainerKuemmerle/g2o.git
- elif [ -z "$(ls g2o)" ]; then
- echo "reclone g2o"
- rm -rf g2o
- git clone https://github.com/RainerKuemmerle/g2o.git
- fi
- cd g2o
- mkdir -p build && cd build
- cmake \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/usr/local \
- -DCMAKE_CXX_FLAGS=-std=c++11 \
- -DBUILD_SHARED_LIBS=ON \
- -DBUILD_UNITTESTS=OFF \
- -DG2O_BUILD_EXAMPLES=OFF \
- -DG2O_BUILD_APPS=OFF \
- -DG2O_USE_CHOLMOD=OFF \
- -DG2O_USE_CSPARSE=ON \
- -DG2O_USE_OPENGL=OFF \
- -DG2O_USE_OPENMP=OFF \
- ..
- make -j 3
- make install
- - |
- cd ${DEPS_DIR}
- if [ ! -d Pangolin ]; then
- echo "clone Pangolin"
- git clone https://github.com/stevenlovegrove/Pangolin.git
- elif [ -z "$(ls Pangolin)" ]; then
- echo "reclone Pangolin"
- rm -rf Pangolin
- git clone https://github.com/stevenlovegrove/Pangolin.git
- fi
- cd Pangolin
- mkdir -p build && cd build
- cmake \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/usr/local \
- -DBUILD_PANGOLIN_LIBOPENEXR=OFF \
- ..
- make -j 3
- make install
- - |
- cd ${DEPS_DIR}
- if [ ! -d socket.io-client-cpp ]; then
- echo "clone socket.io-client-cpp"
- git clone https://github.com/shinsumicco/socket.io-client-cpp.git
- elif [ -z "$(ls socket.io-client-cpp)" ]; then
- echo "reclone socket.io-client-cpp"
- rm -rf socket.io-client-cpp
- git clone https://github.com/shinsumicco/socket.io-client-cpp.git
- fi
- cd socket.io-client-cpp
- git submodule init
- git submodule update
- mkdir -p build && cd build
- cmake \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/usr/local \
- -DBUILD_UNIT_TESTS=OFF \
- ..
- make -j 3
- make install
-
-install:
- - |
- cd ${TRAVIS_BUILD_DIR}
- DIRS_TO_EXCLUDE=".git 3rd cmake docs build .idea cmake-build-debug cmake-build-release"
- for DIR in ${DIRS_TO_EXCLUDE}; do
- EXCLUDE_CMD="${EXCLUDE_CMD} -type d -name ${DIR} -prune -o"
- done
- FILES=$(find -E . ${EXCLUDE_CMD} -type f -regex ".*\.(c|h|cc|hh|cpp|hpp)" -print)
- for FILE in ${FILES}; do
- RET=$(diff ${FILE} <(clang-format -style=file ${FILE}) 2>&1 || true)
- if [ -n "${RET}" ]; then
- FILES_TO_FORMAT="${FILES_TO_FORMAT} ${FILE}"
- fi
- done
- - |
- if [ -n "${FILES_TO_FORMAT}" ]; then
- echo "Please apply clang-format to following files:"
- for FILE in ${FILES_TO_FORMAT}; do echo "* ${FILE}"; done
- travis_terminate 1
- fi
- echo "There is no file which needs clang-format"
- - |
- cd ${TRAVIS_BUILD_DIR}
- mkdir -p build && cd build
- cmake \
- -DUSE_PANGOLIN_VIEWER=ON \
- -DUSE_SOCKET_PUBLISHER=OFF \
- -DUSE_STACK_TRACE_LOGGER=ON \
- -DBOW_FRAMEWORK=DBoW2 \
- -DBUILD_TESTS=ON \
- ..
- make -j 3
- - |
- cd ${TRAVIS_BUILD_DIR}
- mkdir -p build && cd build
- cmake \
- -DUSE_PANGOLIN_VIEWER=OFF \
- -DUSE_SOCKET_PUBLISHER=ON \
- -DUSE_STACK_TRACE_LOGGER=ON \
- -DBOW_FRAMEWORK=DBoW2 \
- -DBUILD_TESTS=ON \
- ..
- make -j 3
- - |
- cd ${TRAVIS_BUILD_DIR}
- mkdir -p build && cd build
- cmake \
- -DUSE_PANGOLIN_VIEWER=OFF \
- -DUSE_SOCKET_PUBLISHER=OFF \
- -DUSE_STACK_TRACE_LOGGER=ON \
- -DBOW_FRAMEWORK=DBoW2 \
- -DBUILD_TESTS=ON \
- ..
- make -j 3
-
-before_script:
- - mkdir -p ${DATASET_DIR}
- - |
- cd ${DATASET_DIR}
- if [ -z "$(ls orb_vocab)" ]; then
- FILE_ID="1wUPb328th8bUqhOk-i8xllt5mgRW4n84"
- curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
- CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
- curl -sLb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o orb_vocab.zip
- unzip orb_vocab.zip
- rm orb_vocab.zip
- fi
- - |
- cd ${DATASET_DIR}
- if [ -z "$(ls video_for_ci_1)" ]; then
- FILE_ID="1TXjREzkht3iRz__qVx4oYRW1GXsv37ct"
- curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
- CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
- curl -sLb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o video_for_ci_1.zip
- unzip video_for_ci_1.zip
- rm video_for_ci_1.zip
- fi
-
-script:
- - |
- cd ${TRAVIS_BUILD_DIR}
- cd build
- ctest -V
- - |
- cd ${TRAVIS_BUILD_DIR}
- cd build
- ./run_video_slam \
- -v ${DATASET_DIR}/orb_vocab/orb_vocab.dbow2 \
- -m ${DATASET_DIR}/video_for_ci_1/video.mp4 \
- -c ${DATASET_DIR}/video_for_ci_1/config.yaml \
- --frame-skip 3 --no-sleep --map-db map.msg --debug
- - |
- cd ${TRAVIS_BUILD_DIR}
- cd build
- ./run_video_localization \
- -v ${DATASET_DIR}/orb_vocab/orb_vocab.dbow2 \
- -m ${DATASET_DIR}/video_for_ci_1/video.mp4 \
- -c ${DATASET_DIR}/video_for_ci_1/config.yaml \
- --frame-skip 3 --no-sleep --map-db map.msg --debug
diff --git a/3rd/FBoW b/3rd/FBoW
deleted file mode 160000
index 30f45f1d9..000000000
--- a/3rd/FBoW
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 30f45f1d97314145f81b49617bb37846a861dfe7
diff --git a/3rd/json/LICENSE b/3rd/json/LICENSE
deleted file mode 100644
index db73c5f7d..000000000
--- a/3rd/json/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2013-2019 Niels Lohmann
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/3rd/json/include/nlohmann/json.hpp b/3rd/json/include/nlohmann/json.hpp
deleted file mode 100644
index 5003a4fa2..000000000
--- a/3rd/json/include/nlohmann/json.hpp
+++ /dev/null
@@ -1,20842 +0,0 @@
-/*
- __ _____ _____ _____
- __| | __| | | | JSON for Modern C++
-| | |__ | | | | | | version 3.6.1
-|_____|_____|_____|_|___| https://github.com/nlohmann/json
-
-Licensed under the MIT License .
-SPDX-License-Identifier: MIT
-Copyright (c) 2013-2019 Niels Lohmann .
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#ifndef INCLUDE_NLOHMANN_JSON_HPP_
-#define INCLUDE_NLOHMANN_JSON_HPP_
-
-#define NLOHMANN_JSON_VERSION_MAJOR 3
-#define NLOHMANN_JSON_VERSION_MINOR 6
-#define NLOHMANN_JSON_VERSION_PATCH 1
-
-#include // all_of, find, for_each
-#include // assert
-#include // and, not, or
-#include // nullptr_t, ptrdiff_t, size_t
-#include // hash, less
-#include // initializer_list
-#include // istream, ostream
-#include // random_access_iterator_tag
-#include // unique_ptr
-#include // accumulate
-#include // string, stoi, to_string
-#include // declval, forward, move, pair, swap
-#include // vector
-
-// #include
-
-
-#include
-
-// #include
-
-
-#include // transform
-#include // array
-#include // and, not
-#include // forward_list
-#include // inserter, front_inserter, end
-#include