[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\nlfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry\npolar: # Replace with a single Polar username\nbuy_me_a_coffee: mikel.brostrom\nthanks_dev: # Replace with a single thanks.dev username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yml",
    "content": "name: Bug\n# title: \" \"\ndescription: Report a BoxMOT bug\nlabels: [bug]\nbody:\n\n  - type: checkboxes\n    attributes:\n      label: Search before asking\n      description: >\n        Please search the [issues](https://github.com/mikel-brostrom/boxmot/issues) and [discussions](https://github.com/mikel-brostrom/boxmot/discussions) to see if a similar question already exists.\n      options:\n        - label: >\n            I have searched the BoxMOT [issues](https://github.com/mikel-brostrom/boxmot/issues) and [discussions](https://github.com/mikel-brostrom/boxmot/discussions) and found no similar questions.\n          required: true\n\n  - type: textarea\n    attributes:\n      label: Bug\n      description: Provide console output with error messages and/or screenshots of the bug.\n      placeholder: |\n        💡 ProTip! Include as much information as possible (screenshots, logs, tracebacks etc.) to receive the most helpful response.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Environment\n      description: Please specify the environment information you used to produce the bug.\n      placeholder: |\n        - boxmot v12.0.0\n        - Python 3.11.5\n        - torch-2.6.0MPS\n\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Minimal Reproducible Example\n      description: >\n        When asking a question, people will be better able to provide help if you provide code that they can easily understand and use to [**reproduce**](https://stackoverflow.com/help/minimal-reproducible-example) the problem.\n      placeholder: |\n        ```\n        # Code to reproduce your issue here\n        ```\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/enhancement.yml",
    "content": "name: Enhancement\ndescription: Suggest a BoxMOT enhancement\n# title: \" \"\nlabels: [enhancement]\nbody:\n\n  - type: checkboxes\n    attributes:\n      label: Search before asking\n      description: >\n        Please search the [issues](https://github.com/mikel-brostrom/boxmot/issues) to see if a similar enhancement request already exists.\n      options:\n        - label: >\n            I have searched the BoxMOT [issues](https://github.com/mikel-brostrom/boxmot/issues) and found no similar enhancement requests.\n          required: true\n\n  - type: textarea\n    attributes:\n      label: Description\n      description: A short description of your enhancement.\n      placeholder: |\n        What new enhancement would you like to see in BoxMOT?\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Use case\n      description: |\n        Describe the use case of your feature request. It will help us understand and prioritize the feature request.\n      placeholder: |\n        How would this feature be used, and who would use it?\n\n  - type: checkboxes\n    attributes:\n      label: Are you willing to submit a PR?\n      description: >\n        (Optional) If you have a good understanding of this package and feel like contributing to it we will gladly review your [Pull Request](https://github.com/mikel-brostrom/boxmot/pulls) (PR).\n      options:\n        - label: Yes I'd like to help by submitting a PR!\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.yml",
    "content": "name: Question\ndescription: Ask a BoxMOT question\n# title: \" \"\nlabels: [question]\nbody:\n\n  - type: checkboxes\n    attributes:\n      label: Search before asking\n      description: >\n        Please search the [issues](https://github.com/mikel-brostrom/boxmot/issues) to see if a similar question already exists.\n      options:\n        - label: >\n            I have searched the BoxMOT [issues](https://github.com/mikel-brostrom/boxmot/issues) and found no similar bug report.\n          required: true\n\n  - type: textarea\n    attributes:\n      label: Question\n      description: What is your question?\n      placeholder: |\n        💡 ProTip! Include as much information as possible (screenshots, logs, tracebacks etc.) to receive the most helpful response.\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/scripts/uv_ci_install.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nif [[ $# -lt 1 ]]; then\n  echo \"Usage: $0 <editable-spec> [additional uv pip install args...]\" >&2\n  echo \"Example: $0 '.[yolo]' --group test\" >&2\n  exit 1\nfi\n\neditable_spec=\"$1\"\nshift\n\npython -m pip install --upgrade pip setuptools wheel uv\nuv venv\nuv pip install \\\n  --python .venv/bin/python \\\n  --no-sources \\\n  --torch-backend \"${UV_TORCH_BACKEND:-cpu}\" \\\n  --index-strategy \"${UV_INDEX_STRATEGY:-unsafe-best-match}\" \\\n  -e \"${editable_spec}\" \\\n  \"$@\"\n"
  },
  {
    "path": ".github/workflows/benchmark.yml",
    "content": "\nname: Benchmark\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n  workflow_dispatch:\n\nenv:\n  UV_TORCH_BACKEND: cpu\n  UV_INDEX_STRATEGY: unsafe-best-match\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n  mot-metrics-benchmark:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ubuntu-latest]\n        python-version: ['3.12']\n        tracker: [\"ocsort\", \"bytetrack\", \"botsort\", \"deepocsort\", \"hybridsort\", \"strongsort\", \"boosttrack\", \"sfsort\"]\n    timeout-minutes: 50\n    env:\n      SMOKE_SOURCE: assets/DOTA8-MOT/train/P0861__1024__0___1648/img1\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n          cache: 'pip'\n\n      - name: Install requirements\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y jq curl unzip\n          bash .github/scripts/uv_ci_install.sh \".[yolo]\"\n\n      - name: Restore MOT17 dataset cache\n        id: cache-restore\n        uses: actions/cache@v4\n        with:\n          path: boxmot/engine/TrackEval/MOT17-ablation.zip\n          key: mot17-ablation-dataset-cache-v3\n\n      - name: Cache MOT17.zip if not already cached\n        if: steps.cache-restore.outputs.cache-hit != 'true'\n        uses: actions/cache@v4\n        with:\n          path: boxmot/engine/TrackEval/MOT17-ablation.zip\n          key: mot17-ablation-dataset-cache-v3\n\n      - name: DOTA8-MOT OBB smoke tracking\n        id: obb_smoke\n        run: |\n          source .venv/bin/activate\n\n          if boxmot track --yolo-model yolo11n-obb.pt --reid-model lmbn_n_duke.pt --tracking-method ${{ matrix.tracker }} --source \"$SMOKE_SOURCE\" --project runs/benchmark_ci --name ${{ matrix.tracker }} --exist-ok --save-txt; then\n            echo \"obb_status=✅\" >> $GITHUB_OUTPUT\n          else\n            echo \"obb_status=❌\" >> $GITHUB_OUTPUT\n          fi\n\n      - name: Evaluation and summarize MOT metrics\n        run: |\n          source .venv/bin/activate\n\n          OBB_STATUS=\"${{ steps.obb_smoke.outputs.obb_status }}\"\n\n          if boxmot eval --classes 0 --yolo-model yolox_x_MOT17_ablation.pt --reid-model lmbn_n_duke.pt --tracking-method ${{ matrix.tracker }} --ci --verbose --source MOT17-ablation; then\n            STATUS=\"✅\"\n          else\n            STATUS=\"❌\"\n          fi\n\n          if [ -f ${{ matrix.tracker }}_output.json ]; then\n            HOTA=$(jq -r '.HOTA' ${{ matrix.tracker }}_output.json)\n            MOTA=$(jq -r '.MOTA' ${{ matrix.tracker }}_output.json)\n            IDF1=$(jq -r '.IDF1' ${{ matrix.tracker }}_output.json)\n          else\n            HOTA=\"\"\n            MOTA=\"\"\n            IDF1=\"\"\n          fi\n\n          mkdir -p results\n          TRACKER_NAME=$(echo \"${{ matrix.tracker }}\" | awk '{print tolower($0)}')\n\n          if [ \"$STATUS\" = \"❌\" ]; then\n            fps=\"\"\n          else\n            declare -A tracker_fps\n            tracker_fps[\"deepocsort\"]=12\n            tracker_fps[\"bytetrack\"]=720\n            tracker_fps[\"ocsort\"]=890\n            tracker_fps[\"strongsort\"]=11\n            tracker_fps[\"botsort\"]=12\n            tracker_fps[\"hybridsort\"]=25\n            tracker_fps[\"boosttrack\"]=13\n            tracker_fps[\"sfsort\"]=\"6000\"\n            fps=${tracker_fps[$TRACKER_NAME]}\n          fi\n\n          echo \"$TRACKER_NAME,$STATUS,$OBB_STATUS,$HOTA,$MOTA,$IDF1,$fps\" > results/${{ matrix.tracker }}.txt\n\n      - name: Show Results\n        run: cat results/${{ matrix.tracker }}.txt\n\n      - name: Upload Results\n        uses: actions/upload-artifact@v4\n        with:\n          name: results-${{ github.run_id }}-${{ matrix.tracker }}\n          path: results/${{ matrix.tracker }}.txt\n\n  combine-results:\n    runs-on: ubuntu-latest\n    needs: mot-metrics-benchmark\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Download all results artifacts\n        uses: actions/download-artifact@v4\n        with:\n          path: results\n\n      - name: Check downloaded files\n        run: |\n          echo \"Downloaded files in the results directory:\"\n          ls -la results/*/ || true\n\n      - name: Combine results\n        run: |\n          : > combined_results.csv\n          for file in results/*/*; do\n            if [ -f \"$file\" ]; then\n              cat \"$file\" >> combined_results.csv\n            fi\n          done\n\n          sort -t, -k4 -nr combined_results.csv > sorted_results.csv\n\n      - name: Show Combined Results\n        run: cat sorted_results.csv\n\n      - name: Set up Git\n        run: |\n          git config --local user.email \"yolov5.deepsort.pytorch@gmail.com\"\n          git config --local user.name \"mikel-brostrom\"\n\n      - name: Update README with tracker results\n        run: |\n          RESULTS_FILE=\"sorted_results.csv\"\n          README_FILE=\"README.md\"\n          cp \"$README_FILE\" \"${README_FILE}.bak\"\n\n          declare -A paper_links\n          paper_links[\"boosttrack\"]=\"https://arxiv.org/abs/2408.13003\"\n          paper_links[\"deepocsort\"]=\"https://arxiv.org/abs/2302.11813\"\n          paper_links[\"bytetrack\"]=\"https://arxiv.org/abs/2110.06864\"\n          paper_links[\"ocsort\"]=\"https://arxiv.org/abs/2203.14360\"\n          paper_links[\"strongsort\"]=\"https://arxiv.org/abs/2202.13514\"\n          paper_links[\"botsort\"]=\"https://arxiv.org/abs/2206.14651\"\n          paper_links[\"hybridsort\"]=\"https://arxiv.org/abs/2308.00783\"\n          paper_links[\"sfsort\"]=\"https://arxiv.org/pdf/2404.07553\"\n\n            new_table=\"| Tracker | Status | OBB | HOTA↑ | MOTA↑ | IDF1↑ | FPS |\\n\"\n            new_table+=\"| :-----: | :----: | :---: | :---: | :---: | :---: | :---: |\\n\"\n\n            while IFS=, read -r tracker status obb hota mota idf1 fps; do\n              paper_url=${paper_links[$tracker]}\n              tracker_link=\"[$tracker](${paper_url:-#})\"\n              new_table+=\"| $tracker_link | $status | $obb | $hota | $mota | $idf1 | $fps |\\n\"\n          done < \"$RESULTS_FILE\"\n\n          start_marker=\"<!-- START TRACKER TABLE -->\"\n          end_marker=\"<!-- END TRACKER TABLE -->\"\n\n          awk -v start_marker=\"$start_marker\" -v end_marker=\"$end_marker\" -v new_table=\"$new_table\" '\n              $0 == start_marker { print $0; print new_table; in_table=1; next }\n              $0 == end_marker { in_table=0; print $0; next }\n              !in_table\n          ' \"$README_FILE\" > temp_readme.md\n\n          mv temp_readme.md \"$README_FILE\"\n\n      - name: Sync docs benchmark table\n        run: cp README.md docs/index.md\n\n      - name: Check for changes in benchmark docs\n        id: check_changes\n        run: |\n          if git diff --quiet README.md docs/index.md; then\n            echo \"changed=false\" >> $GITHUB_OUTPUT\n          else\n            BRANCH_NAME=\"update-tracker-results-$(date +%Y%m%d%H%M%S)\"\n            echo \"branch_name=$BRANCH_NAME\" >> $GITHUB_OUTPUT\n            echo \"changed=true\" >> $GITHUB_OUTPUT\n          fi\n\n      - name: Create Pull Request\n        if: steps.check_changes.outputs.changed == 'true'\n        uses: peter-evans/create-pull-request@v7\n        with:\n          add-paths: |\n            README.md\n            docs/index.md\n          token: ${{ secrets.GITHUB_TOKEN }}\n          branch: ${{ steps.check_changes.outputs.branch_name }}\n          commit-message: \"docs: update benchmark results\"\n          title: \"docs: update benchmark results\"\n          body: \"This PR updates the benchmark tables in the README and docs index.\"\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "# name of the workflow, what it is doing (optional)\nname: BoxMOT CI\n\n# events that trigger the workflow (required)\non:\n  push:\n    # pushes to the following branches\n    branches:\n      - master\n  pull_request:\n    # pull request where master is target\n    branches:\n      - master\n\nenv:\n  UV_TORCH_BACKEND: cpu\n  UV_INDEX_STRATEGY: unsafe-best-match\n\n\njobs:\n  trackers:\n    runs-on: ${{ matrix.os }}\n    outputs:\n      status: ${{ job.status }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ubuntu-latest, macos-14]   # skip windows-latest for\n        python-version: ['3.12']\n    env:\n      TRACKERS: \"ocsort bytetrack botsort deepocsort strongsort boosttrack hybridsort sfsort\"\n      IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg\n\n    # Timeout: https://stackoverflow.com/a/59076067/4521646\n    timeout-minutes: 50\n    steps:\n      - uses: actions/checkout@v4  # Check out the repository\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n          cache: 'pip' # caching pip dependencies\n      - name: Install requirements\n        shell: bash  # for Windows compatibility\n        run: |\n          bash .github/scripts/uv_ci_install.sh \".[yolo]\"\n      - name: Run tracking method\n        run: |\n          source .venv/bin/activate\n          for tracker in $TRACKERS; do\n            boxmot track  --yolo-model yolov10n.pt --reid-model osnet_x0_25_msmt17.pt --imgsz 320 --tracking-method $tracker --source $IMG --verbose\n          done\n  tune:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ubuntu-latest]   # skip windows-latest for\n        python-version: ['3.9', '3.12']\n    outputs:\n      status: ${{ job.status }}\n\n    # Timeout: https://stackoverflow.com/a/59076067/4521646\n    timeout-minutes: 50\n    steps:\n      - uses: actions/checkout@v4  # Check out the repository\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n          cache: 'pip' # caching pip dependencies\n\n      - name: Install requirements\n        shell: bash  # for Windows compatibility\n        run: |\n          bash .github/scripts/uv_ci_install.sh \".[yolo,evolve]\"\n      - name: Evolve set of parameters for selected tracking method\n        run: |\n          source .venv/bin/activate\n          # reuse first set of generated det and prod\n          boxmot tune --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --n-trials 3 --tracking-method strongsort --source ./assets/MOT17-mini/train --ci --classes 0\n  metrics:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ubuntu-latest]   # skip windows-latest for\n        python-version: ['3.9', '3.12']\n    outputs:\n      status: ${{ job.status }}\n    env:\n      TRACKERS: \"ocsort bytetrack botsort deepocsort strongsort boosttrack hybridsort sfsort\"\n\n    # Timeout: https://stackoverflow.com/a/59076067/4521646\n    timeout-minutes: 50\n    steps:\n      - uses: actions/checkout@v4  # Check out the repository\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n          cache: 'pip' # caching pip dependencies\n\n      - name: Install requirements\n        shell: bash  # for Windows compatibility\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y jq\n          bash .github/scripts/uv_ci_install.sh \".[yolo]\"\n      - name: Generate detections and embeddings\n        run: |\n          source .venv/bin/activate\n          boxmot generate --source ./assets/MOT17-mini/train --yolo-model yolov10n.pt --reid-model osnet_x0_25_msmt17.pt --imgsz 320 --classes 0\n\n      - name: Evaluate MOT17-mini metrics\n        shell: bash\n        run: |\n          source .venv/bin/activate\n          echo \"Format,Status❔,HOTA,MOTA,IDF1\" > metrics.csv\n          for tracker in $TRACKERS; do\n            if boxmot eval --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --tracking-method $tracker --verbose --source ./assets/MOT17-mini/train --ci --classes 0; then\n              STATUS=\"✅\"\n            else\n              STATUS=\"❌\"\n            fi\n            if [ -f ${tracker}_output.json ]; then\n              cat ${tracker}_output.json\n              HOTA=$(jq -r '.HOTA' ${tracker}_output.json)\n              MOTA=$(jq -r '.MOTA' ${tracker}_output.json)\n              IDF1=$(jq -r '.IDF1' ${tracker}_output.json)\n            else\n              HOTA=\"\"\n              MOTA=\"\"\n              IDF1=\"\"\n            fi\n            TRACKER_NAME=$(echo $tracker | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')\n            echo \"$TRACKER_NAME,$STATUS,$HOTA,$MOTA,$IDF1\" >> metrics.csv\n          done\n\n      - name: Sort MOT metrics results\n        shell: bash\n        run: |\n          cp metrics.csv results.csv\n          (head -n 1 results.csv && tail -n +2 results.csv | sort -t, -k3 -nr) > sorted_results.csv\n          column -s, -t sorted_results.csv > pretty_results.txt\n      - name: Show Results\n        shell: bash\n        run: |\n          cat pretty_results.txt\n\n  obb:\n    runs-on: ubuntu-latest\n    outputs:\n      status: ${{ job.status }}\n    env:\n      TRACKERS: \"ocsort bytetrack botsort deepocsort strongsort boosttrack hybridsort sfsort\"\n      SMOKE_SOURCE: ./assets/DOTA8-MOT/train/P1142__1024__0___824/img1\n\n    timeout-minutes: 50\n    steps:\n      - uses: actions/checkout@v4\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.12'\n          cache: 'pip'\n      - name: Install requirements\n        shell: bash\n        run: |\n          bash .github/scripts/uv_ci_install.sh \".[yolo]\"\n      - name: Run obb tracking method\n        shell: bash\n        run: |\n          source .venv/bin/activate\n          echo \"Format,OBB\" > obb.csv\n          for tracker in $TRACKERS; do\n            if boxmot track --yolo-model yolo11s-obb.pt --reid-model lmbn_n_duke.pt --tracking-method $tracker --source \"$SMOKE_SOURCE\" --project runs/ci_smoke --name \"$tracker\" --exist-ok --save-txt; then\n              OBB_STATUS=\"✅\"\n            else\n              OBB_STATUS=\"❌\"\n            fi\n            TRACKER_NAME=$(echo $tracker | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')\n            echo \"$TRACKER_NAME,$OBB_STATUS\" >> obb.csv\n          done\n      - name: Show OBB Results\n        shell: bash\n        run: |\n          column -s, -t obb.csv\n  pose:\n    runs-on: ubuntu-latest\n    outputs:\n      status: ${{ job.status }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.12'\n      - run: |\n          bash .github/scripts/uv_ci_install.sh \".[yolo]\"\n      - name: Test tracking with pose models\n        env:\n          IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg\n        run:  |\n          source .venv/bin/activate\n          boxmot track --yolo-model yolov8n-pose.pt --imgsz 320 --source $IMG\n  yolos:\n    runs-on: ubuntu-latest\n    outputs:\n      status: ${{ job.status }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.11'\n      - run: |\n          bash .github/scripts/uv_ci_install.sh \".[yolo]\"\n          # Export so that setuptools picks up clang instead of gcc\n          echo \"CC=clang\" >> $GITHUB_ENV\n          echo \"CXX=clang++\" >> $GITHUB_ENV\n      - name: Test tracking with pose models\n        env:\n          IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg\n        run: |\n          source .venv/bin/activate\n          uv pip list\n          boxmot track --yolo-model yolov10n.pt --imgsz 320 --source $IMG\n          boxmot track --yolo-model yolox_n.pt --imgsz 320 --source $IMG\n          boxmot track --yolo-model rtdetr_v2_r18vd --imgsz 320 --source $IMG\n\n  seg:\n    runs-on: ubuntu-latest\n    outputs:\n      status: ${{ job.status }}\n    steps:\n      - id: set_result\n        run: echo \"::set-output name=result::success\"\n      - uses: actions/checkout@v4\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.12'\n      - name: Install dependencies\n        run: |\n          bash .github/scripts/uv_ci_install.sh \".[yolo]\"\n      - name: Test tracking with seg models\n        env:\n          IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg\n        run: |\n          source .venv/bin/activate\n          boxmot track --tracking-method bytetrack --yolo-model yolov8n-seg.pt --source $IMG\n  \n  export:\n    runs-on: ubuntu-latest\n    outputs:\n      status: ${{ job.status }}\n    steps:\n      - id: set_result\n        run: echo \"::set-output name=result::success\"\n      - uses: actions/checkout@v4\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.12'\n      - name: Install dependencies\n        run: |\n          sed -i'' -e 's/index = \"torch-gpu\"/index = \"torch-cpu\"/g' pyproject.toml\n          python -m pip install --upgrade pip setuptools wheel uv\n          uv sync --extra yolo --extra onnx --extra openvino --extra tflite\n\n      - name: Test export models\n        run: | \n          source .venv/bin/activate\n          boxmot export --include torchscript --include onnx --include openvino --include tflite --device cpu --batch-size 3 --dynamic\n      - name: Smoke test exported engines\n        if: always()\n        env:\n          IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg\n        run: |\n          source .venv/bin/activate\n          TFLITE_MODEL=$(find models -name '*_float32.tflite' | head -n 1)\n          engines=(torchscript onnx openvino tflite)\n          model_paths=(\n            \"models/osnet_x0_25_msmt17.torchscript\"\n            \"models/osnet_x0_25_msmt17.onnx\"\n            \"models/osnet_x0_25_msmt17_openvino_model\"\n            \"$TFLITE_MODEL\"\n          )\n\n          echo \"Engine,Export,Inference,Model\" > engine_results.csv\n          failed=0\n\n          for i in \"${!engines[@]}\"; do\n            engine=\"${engines[$i]}\"\n            model_path=\"${model_paths[$i]}\"\n            export_status=\"❌\"\n            inference_status=\"❌\"\n\n            if [ -n \"$model_path\" ] && [ -e \"$model_path\" ]; then\n              export_status=\"✅\"\n              if boxmot track --reid-model \"$model_path\" --imgsz 320 --source \"$IMG\"; then\n                inference_status=\"✅\"\n              else\n                failed=1\n              fi\n            else\n              failed=1\n            fi\n\n            echo \"$engine,$export_status,$inference_status,$model_path\" >> engine_results.csv\n          done\n\n          column -s, -t engine_results.csv\n          exit \"$failed\"\n      - name: Summarize exported engines\n        if: always()\n        run: |\n          if [ ! -f engine_results.csv ]; then\n            echo \"## Export and inference engines\" >> \"$GITHUB_STEP_SUMMARY\"\n            echo >> \"$GITHUB_STEP_SUMMARY\"\n            echo \"No engine summary was generated.\" >> \"$GITHUB_STEP_SUMMARY\"\n            exit 0\n          fi\n\n          successful_engines=$(awk -F, 'NR > 1 && $2 == \"✅\" && $3 == \"✅\" {print $1}' engine_results.csv)\n\n          {\n            echo \"## Export and inference engines\"\n            echo\n            if [ -n \"$successful_engines\" ]; then\n              echo \"Successful export and inference engines:\"\n              echo\n              while IFS= read -r engine; do\n                [ -n \"$engine\" ] && echo \"- $engine\"\n              done <<< \"$successful_engines\"\n            else\n              echo \"No engines completed both export and inference successfully.\"\n            fi\n            echo\n            echo \"| Engine | Export | Inference | Model |\"\n            echo \"| --- | --- | --- | --- |\"\n            while IFS=, read -r engine export_status inference_status model_path; do\n              if [ \"$engine\" = \"Engine\" ]; then\n                continue\n              fi\n              echo \"| $engine | $export_status | $inference_status | \\`$model_path\\` |\"\n            done < engine_results.csv\n          } >> \"$GITHUB_STEP_SUMMARY\"\n               \n  tests:\n    runs-on: ubuntu-latest\n    outputs:\n      status: ${{ job.status }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.12'\n      - run: |\n          bash .github/scripts/uv_ci_install.sh \".[yolo,evolve,onnx,openvino,tflite]\" --group dev --group test --group docs\n      - name: Pytest tests  # after tracking options as this does not download models\n        env:\n          # directory of PyPi package to be tested\n          PACKAGE_DIR: boxmot\n          # minimum acceptable test coverage\n          COVERAGE_FAIL_UNDER: 25\n        run: |\n          uv run python -m pytest --cov=\"$PACKAGE_DIR\" --cov-report=html -v -s tests\n          uv run python -m coverage report --fail-under=\"$COVERAGE_FAIL_UNDER\"\n  # test-gpu:\n  #   runs-on: gpu-latest\n  #   outputs:\n  #     status: ${{ job.status }}\n  #   steps:\n  #     - uses: actions/checkout@v4\n  #     - name: Set up Python\n  #       uses: actions/setup-python@v5\n  #       with:\n  #         python-version: '3.12'\n  #     - run: |\n  #         python -m pip install --upgrade pip setuptools wheel poetry\n  #         poetry config virtualenvs.create false\n  #         poetry install --with test\n\n  #     - name: Pytest tests  # after tracking options as this does not download models\n  #       env:\n  #         # directory of PyPi package to be tested\n  #         PACKAGE_DIR: boxmot\n  #         # minimum acceptable test coverage\n  #         COVERAGE_FAIL_UNDER: 25\n  #       shell: bash  # for Windows compatibility\n  #       run: |\n  #         pytest --cov=$PACKAGE_DIR --cov-report=html -v tests/test_cuda.py\n\n\n  check-failures:\n    needs:\n      - trackers\n      - metrics\n      - obb\n      - tune\n      - export\n      - tests\n      - pose\n      - seg\n      - yolos\n    if: always()  # This ensures the job runs regardless of previous job failures\n    runs-on: ubuntu-latest\n    steps:\n      - name: Prepare environment variables\n        run: |\n          echo \"trackers_STATUS=${{ needs.trackers.result }}\" >> $GITHUB_ENV\n          echo \"metrics_STATUS=${{ needs.metrics.result }}\" >> $GITHUB_ENV\n          echo \"obb_STATUS=${{ needs.obb.result }}\" >> $GITHUB_ENV\n          echo \"tune_STATUS=${{ needs.tune.result }}\" >> $GITHUB_ENV\n          echo \"export_STATUS=${{ needs.export.result }}\" >> $GITHUB_ENV\n          echo \"tests_STATUS=${{ needs.tests.result }}\" >> $GITHUB_ENV\n          echo \"pose_STATUS=${{ needs.pose.result }}\" >> $GITHUB_ENV\n          echo \"seg_STATUS=${{ needs.seg.result }}\" >> $GITHUB_ENV\n          echo \"yolos_STATUS=${{ needs.yolos.result }}\" >> $GITHUB_ENV\n      - name: Check for failures and create summary\n        run: |\n          summary=\"\"\n          failed=false\n          # Print all environment variables, grep for those ending with _STATUS, then loop\n          for var in $(printenv | grep '_STATUS$'); do\n            job_status=\"${var##*=}\"  # Extract the status part\n            job_name=\"${var%%=*}\"  # Extract the job name part\n            if [[ \"$job_status\" != \"success\" ]]; then\n              summary+=\"$job_name failed with status: $job_status\\n\"\n              failed=true\n            fi\n          done\n          if [[ \"$failed\" = false ]]; then\n            summary=\"All jobs succeeded.\"\n          fi\n          echo \"Summary: $summary\"\n"
  },
  {
    "path": ".github/workflows/docker.yml",
    "content": "name: Docker Image CI\n\non:\n  push:\n    branches:\n      - main\n  workflow_dispatch:\n\njobs:\n  build-and-push:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Extract version from pyproject.toml\n        id: extract_version\n        run: |\n          version=$(python3 -c 'import tomllib, sys; data = tomllib.loads(open(\"pyproject.toml\",\"r\", encoding=\"utf-8\").read()); sys.stdout.write(data[\"project\"][\"version\"])')\n          echo \"VERSION=$version\" >> \"$GITHUB_ENV\"\n\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          push: true\n          tags: |\n            boxmot/boxmot:${{ env.VERSION }}\n            boxmot/boxmot:latest\n"
  },
  {
    "path": ".github/workflows/docs.yml",
    "content": "# name: Deploy MkDocs Docs\n# on:\n#   push:\n#     branches: [master]\n\n# permissions:\n#   contents: write\n\n# jobs:\n#   deploy:\n#     runs-on: ubuntu-latest\n#     steps:\n#       - uses: actions/checkout@v4\n\n#       - uses: actions/setup-python@v4\n#         with:\n#           python-version: '3.10'\n\n#       - name: Install MkDocs and plugins\n#         run: |\n#           python -m pip install --upgrade pip setuptools wheel uv\n#           uv sync --group dev --group test --group docs\n\n#       - name: Symlink README into docs\n#         run: cp --remove-destination README.md docs/index.md\n\n#       - name: Extract code examples (with section titles) from README\n#         run: |\n#           cat <<'AWK' > /tmp/extract_examples.awk\n#           /^##[[:space:]]*.*Code Examples/ { insec=1; next }\n#           insec && /^##[[:space:]]/ { exit }\n\n#           insec {\n#             # capture text inside <summary> ... </summary>\n#             if ($0 ~ /<summary>/) {\n#               t=$0\n#               sub(/.*<summary>[[:space:]]*/, \"\", t)\n#               sub(/[[:space:]]*<\\/summary>.*/, \"\", t)\n#               title=t\n#             }\n\n#             # start of fenced code block\n#             if ($0 ~ /^[[:space:]]*```(bash|python)/) {\n#               if (title != \"\") { print \"# \" title }\n#               code=1; print; next\n#             }\n\n#             # end of fenced code block\n#             if (code && $0 ~ /^[[:space:]]*```[[:space:]]*$/) { code=0; print; next }\n\n#             if (code) print\n#           }\n#           AWK\n#           awk -f /tmp/extract_examples.awk README.md > docs/quickstart.md\n\n#       - name: Expose project on PYTHONPATH\n#         run: echo \"PYTHONPATH=${GITHUB_WORKSPACE}\" >> \"$GITHUB_ENV\"\n\n#       - name: Deploy to GitHub Pages\n#         env:\n#           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n#         run: |\n#           source .venv/bin/activate\n#           git config --local user.email yolov5.deepsort.pytorch@gmail.com\n#           git config --local user.name mikel-brostrom\n#           mkdocs gh-deploy --clean --force --verbose\n"
  },
  {
    "path": ".github/workflows/label.yml",
    "content": "name: Label issues\n\non:\n  issues:\n    types:\n      - opened\n      - reopened\n\njobs:\n  label_issues:\n    name: \"Issue: add labels\"\n    if: ${{ github.event.action == 'opened' || github.event.action == 'reopened' }}\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n\n    steps:\n      - name: Label new issues\n        uses: actions/github-script@v6\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          script: |\n            // Combine title + body\n            const title = context.payload.issue.title  || ''\n            const body  = context.payload.issue.body   || ''\n            const content = `${title}\\n${body}`\n\n            // Always start with triage\n            const labels = ['triage']\n\n            // Map each directory/tracker → regex\n            const mapping = {\n              'reid'           : /\\b(?:appearance|re[- ]?id|re[- ]?identification)\\b/i,\n              'kf'             : /\\b(?:kf|kalman[- ]?filter)s?\\b/i,\n              'postprocessing' : /\\bpostprocessing\\b/i,\n\n              // engine-related categories\n              'engine'         : /\\b(engine|cli|detectors|track|val)\\b/i,\n              'tuning'         : /\\b(?:tuning|hyperparameter(?:s)?|evolution|evolve)\\b/i,\n              'evaluation'     : /\\b(?:evaluation|eval(?:uation)?|val(?:idation)?)\\b/i,\n              'tracking'       : /\\b(?:track(?:ing)?|track)\\b/i,\n\n              // individual tracker labels\n              'boosttrack'     : /\\bboosttrack\\b/i,\n              'botsort'        : /\\bbotsort\\b/i,\n              'bytetrack'      : /\\bbytetrack\\b/i,\n              'deepocsort'     : /\\bdeepocsort\\b/i,\n              'hybridsort'     : /\\bhybridsort\\b/i,\n              'ocsort'         : /\\bocsort\\b/i,\n              'strongsort'     : /\\bstrongsort\\b/i,\n              'tracktrack'     : /\\btracktrack\\b/i,\n\n              // per-dataset labels\n              'datasets'       : /\\dataset?\\b/i,\n              'mot17'          : /\\bMOT17\\b/i,\n              'mot20'          : /\\bMOT20\\b/i,\n              'dancetrack'     : /\\bDanceTrack\\b/i,\n            }\n\n            // Add any matching labels\n            for (const [label, regex] of Object.entries(mapping)) {\n              if (regex.test(content)) {\n                labels.push(label)\n              }\n            }\n\n            // Apply them in one call\n            await github.rest.issues.addLabels({\n              owner:        context.repo.owner,\n              repo:         context.repo.repo,\n              issue_number: context.issue.number,\n              labels\n            })\n"
  },
  {
    "path": ".github/workflows/publish.yml",
    "content": "name: Publish to PyPI\n\non:\n  push:\n    branches: [main]\n  workflow_dispatch:\n    inputs:\n      pypi:\n        description: 'Target repository'\n        required: true\n        type: choice\n        default: 'pypi'\n        options:\n          - pypi\n          - testpypi\n      bump_type:\n        description: 'Version bump type'\n        required: true\n        type: choice\n        default: 'patch'\n        options:\n          - patch\n          - minor\n          - major\n\njobs:\n  pypi-upload:\n    name: Publish\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n        with:\n          # Personal Access Token (PAT) so that git push\n          # is authenticated such that you and can bypass the protected ref\n          token: ${{ secrets.RELEASE_PAT }}\n\n      - name: Set up Python environment\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.10'\n\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip setuptools wheel uv poetry\n          uv sync\n\n      - name: Increase uv path version and add\n        id: get_version\n        run: |\n          source .venv/bin/activate\n          git config --local user.email yolov5.deepsort.pytorch@gmail.com\n          git config --local user.name mikel-brostrom\n          bump_type=${{ github.event.inputs.bump_type }}\n          commit_message=$(poetry version $bump_type)\n          new_version=$(echo $commit_message | grep -oE '[0-9]+\\.[0-9]+\\.[0-9]+$')\n          git add pyproject.toml\n          uv build --no-sources\n          echo \"commit_message=$commit_message\" >> $GITHUB_OUTPUT\n          echo \"new_version=$new_version\" >> $GITHUB_OUTPUT\n          du -sh dist/*\n        if: ${{ success() }}\n\n      - name: Update __init__.py version and add\n        run: |\n          sed -i \"s/__version__ = '.*'/__version__ = '${{ steps.get_version.outputs.new_version }}'/\" boxmot/__init__.py\n          git add boxmot/__init__.py\n        if: ${{ success() }}\n\n      - name: Update citation pkg version and add\n        run: |\n          sed -i \"s/version: .*/version: ${{ steps.get_version.outputs.new_version }}/\" CITATION.cff\n          git add CITATION.cff\n        if: ${{ success() }}\n\n      - name: Commit and push updated version\n        run: |\n          if [ \"${{ github.event.inputs.pypi }}\" == \"pypi\" ]; then\n            git commit -m \"${{ steps.get_version.outputs.commit_message }}\"\n            git push\n          fi\n        if: ${{ success() }}\n\n      - name: Publish to PyPI\n        run: |\n          if [ \"${{ github.event.inputs.pypi }}\" == \"pypi\" ]; then\n            uv publish --token ${{ secrets.PYPI_TOKEN }}\n          else\n            uv publish --index testpypi --token ${{ secrets.TEST_PYPI_TOKEN }}\n          fi\n        if: ${{ success() }}\n\n      - name: Create code release\n        id: create_release\n        uses: actions/create-release@v1\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        with:\n          tag_name: v${{ steps.get_version.outputs.new_version }}\n          release_name: Release v${{ steps.get_version.outputs.new_version }}\n          draft: false\n          prerelease: false\n        if: ${{ success() }}\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "name: Close stale issues\non:\n  schedule:\n    - cron: \"0 0 * * *\"  # At the end of every day\n\njobs:\n  stale:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/stale@v9\n        with:\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n          stale-issue-message: |\n            👋 Hello, this issue has been automatically marked as stale because it has not had recent activity. Please note it will be closed if no further activity occurs.\n            Feel free to inform us of any other **issues** you discover or **feature requests** that come to mind in the future. Pull Requests (PRs) are also always welcomed!\n          stale-pr-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.'\n          days-before-stale: 10\n          days-before-close: 3\n          exempt-issue-labels: 'documentation,tutorial'\n          operations-per-run: 100  # The maximum number of operations per run, used to control rate limiting.\n"
  },
  {
    "path": ".github/workflows/update.yml",
    "content": "name: Update Dependencies\n\non:\n  workflow_dispatch: # Allows you to manually trigger the workflow\n\njobs:\n  update-dependencies:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.8'\n\n      - name: Install Poetry\n        run: pip install poetry\n\n      - name: Update dependencies\n        run: |\n          poetry install\n          poetry update\n          poetry lock\n\n      - name: Commit changes\n        run: |\n          git config --local user.email yolov5.deepsort.pytorch@gmail.com\n          git config --local user.name mikel-brostrom\n          git add .\n          git commit -m \"Update dependencies\"\n\n      - name: Push changes\n        run: git push origin HEAD:dependabot/update-dependencies\n\n      - name: Create Pull Request\n        uses: peter-evans/create-pull-request@v7\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          branch: dependabot/update-dependencies\n          title: \"Update dependencies\"\n          body: \"This is an automated pull request to update dependencies.\"\n          delete-branch: true\n\n      # - name: Auto-merge Pull Request\n      #   uses: pascalgn/automerge-action@v0.16.3\n      #   with:\n      #     token: ${{ secrets.GITHUB_TOKEN }}\n      #     merge-method: squash\n      #   env:\n      #     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
  },
  {
    "path": ".gitignore",
    "content": ".vscode/\n.venv/\n.eggs/\nenv/\n*.DS_Store\n.coverage\nhtmlcov/\n# interpreter bytecode\n__pycache__/\n__MACOSX/\n\n# experiment results\nruns/\nvideos/\n\n# experiment files\n*.pkl\n\n# partial downlaods\n*.part\n\n# Downloaded weights\nweights/*.pt\nweights/*.torchscript\nweights/*.onnx\nweights/*_openvino_model\nweights/*.engine\nweights/*.tflite\n\n# evaluation tools folder\nboxmot/engine/trackeval/\n\n# zip files\n*.zip\n\n# exports\n*_openvino_model\n*.torchscript\n*.pt\n*.pth\n*.pth\n*.onnx\n*.engine\n*.data\n\n# interactive plots\n*.html\n*.gif\n*.pdf\n\n# tf models\n*saved_model/\ntf_models/\n\n# distribution / packaging\nbuild/\ndist/\n*.egg-info/\n\n# cmc debug images\nboxmot/motion/cmc/*.jpg\n\n# json outputs\n*_output.json\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nrepos:\n-   repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v5.0.0\n    hooks:\n      - id: check-added-large-files # prevents giant files from being committed.\n        exclude: '.*vocab*.'\n      - id: check-case-conflict # checks for files that would conflict in case-insensitive filesystems.\n      - id: check-merge-conflict # checks for files that contain merge conflict strings.\n      - id: check-yaml # checks yaml files for parseable syntax.\n      - id: detect-private-key # detects the presence of private keys.\n      - id: end-of-file-fixer # ensures that a file is either empty, or ends with one newline.\n      - id: fix-byte-order-marker # removes utf-8 byte order marker.\n      - id: mixed-line-ending # replaces or checks mixed line ending.\n      - id: requirements-txt-fixer # sorts entries in requirements.txt.\n      - id: trailing-whitespace # trims trailing whitespace.\n\n-   repo: https://github.com/astral-sh/ruff-pre-commit\n    rev: v0.8.4\n    hooks:\n      - id: ruff\n        args: [ --fix ]\n      - id: ruff-format\n\n- repo: https://github.com/Lucas-C/pre-commit-hooks\n  rev: v1.5.5\n  hooks:\n    - id: insert-license\n      files: .*\\.py$\n      args:\n        - --license-filepath\n        - assets/file_banner.txt\n"
  },
  {
    "path": "AGENTS.md",
    "content": "# AGENTS.md – Working Guidelines for **BoxMOT**\n\n> These instructions apply to all directories in this repository.  \\\n> Nested `AGENTS.md` files (if added later) override rules for their subtrees.\n\n---\n\n## 1. Environment & Tooling\n\n### Python & `uv`\n\n- Use **Python 3.11** (or the version configured in `pyproject.toml`).\n- Install `uv` (safe to rerun even if present):\n\n  ```bash\n  pip install uv\n  ```\n\n- Install dependencies using the existing workflow:\n\n  ```bash\n  uv sync --all-extras --all-groups\n  ```\n\n- `uv` will create a `.venv` in the project root. Prefer running everything through `uv` so you don’t have to manage activation manually:\n\n  ```bash\n  # Generic command wrapper\n  uv run <command> [args...]\n  ```\n\n#### Running with the package context\n\nAlways run Python entry points as modules from the repo root, not as loose scripts, so that `from boxmot...` imports work correctly:\n\n```bash\n# ✅ Good – uses package context\nuv run python -m boxmot.engine.cli --help\n\n# ❌ Avoid – can break imports (e.g., ModuleNotFoundError: boxmot)\npython boxmot/engine/cli.py --help\nPYTHONPATH=. python boxmot/engine/cli.py --help\n```\n\nIf you really need to use the virtualenv directly:\n\n```bash\nsource .venv/bin/activate\npython -m boxmot.engine.cli --help\n```\n\n## 2. Workflow\n\n- Create feature branches for work:\n\n  ```bash\n  git checkout -b codex/<short-topic>\n  ```\n\n- Keep changes focused: one logical change per PR / task.\n- Follow the existing structure and conventions of the modules you touch.\n\n## 3. Coding Conventions\n\n- Prefer Python type hints and docstrings for any new or modified functions/classes.\n- Keep imports:\n  - Sorted.\n  - Minimal (remove unused).\n- Do not wrap imports in `try/except` unless there is a very specific reason and it’s clearly documented.\n\n**Logging**\n- Use the existing logger (e.g., `LOGGER`) rather than `print` in library code.\n- It’s fine to `print` in CLI entry points when it improves UX, but prefer consistent logging style.\n\n**Match the surrounding style**\n- Naming, spacing, line wrapping, click option style, etc.\n- Reuse helper patterns (e.g., decorators like `core_options`, shared parsing helpers).\n\n## 4. CLI-Specific Guidelines\n\nWhen editing `boxmot/engine/cli.py` or other CLIs:\n\n- Group options logically (e.g., input, inference, output, display), but maintain backwards-compatible option names and defaults where possible.\n- Prefer reusable decorators for option groups (`core_options`, `plural_model_options`, etc.).\n- Use parsing helpers (e.g., `parse_tuple`, `parse_hw_tuple`) rather than ad-hoc parsing in every command.\n- Keep help text accurate and concise; if you change behavior, update:\n  - The option help strings.\n  - Any CLI examples in `README.md`, `docs/`, or `examples/`.\n\nWhen adding a new command:\n\n- Reuse `make_args` to build argparse-like namespaces.\n- Align with existing subcommands’ style (`track`, `generate`, `eval`, `tune`, `export`).\n\n## 5. Commit & PR Expectations\n\nCommit messages should start with one of:\n\n- `feat:` – new feature\n- `fix:` – bug fix\n- `refactor:` – internal-only changes / cleanup\n- `docs:` – documentation only\n- `ci:` – CI / tooling changes\n- `perf:` – performance improvements\n\nEach commit should represent a coherent change; avoid mixing unrelated edits.\n\nPR / task descriptions should include:\n\n- A short summary of user-facing changes.\n- A Testing section (see below).\n- Any follow-up work or known limitations.\n\n## 6. Testing & Verification\n\n**What to run**\n\n- Default: run the pytest suite from the repo root:\n\n  ```bash\n  uv run pytest\n  ```\n\n- If the full suite is too heavy, at least run the tests relevant to your change, e.g.:\n\n  ```bash\n  uv run pytest tests/test_cli.py\n  uv run pytest tests/path/to/affected_module_tests.py\n  ```\n\n- When touching CLI / engine entry points, it’s useful to smoke-test common commands:\n\n  ```bash\n  uv run python -m boxmot.engine.cli --help\n\n  # Example invocations (adjust source/paths as available in your env)\n  uv run python -m boxmot.engine.cli track --source <path-or-url> ...\n  uv run python -m boxmot.engine.cli generate --source <path-or-url> ...\n  uv run python -m boxmot.engine.cli eval --source <path-or-url> ...\n  uv run python -m boxmot.engine.cli tune --source <path-or-url> ...\n  ```\n\n**If tests or commands cannot be run**\n\nSometimes the provided environment is missing GPUs, large datasets, or external services. In that case:\n\n1. Try the following first:\n\n   ```bash\n   uv sync --all-extras --all-groups\n\n   uv run python -m boxmot.engine.cli --help\n\n   uv run pytest\n   ```\n\n2. If something still fails for reasons outside your control (e.g., missing CUDA runtime, no network for model downloads, etc.), do not fake test results. Instead, document clearly in your Testing section, for example:\n\n   ```text\n   Testing\n   - uv run python -m boxmot.engine.cli --help  ✅\n   - uv run pytest ❌ (not run)\n\n   Reason: pytest requires GPU / CUDA dependencies that are not available in the current container.\n   Please run `uv sync --all-extras --all-groups` and `uv run pytest` in a fully configured environment.\n   ```\n\n- Include the exact commands you ran and a brief reason why anything couldn’t be completed.\n\n## 7. Documentation & Examples\n\n- Update docs or examples when behavior or interfaces change, especially:\n  - CLI options or defaults.\n  - New or removed commands.\n- Keep README snippets and CLI help text in sync with code updates.\n- When changing data formats or output directories, update any references in:\n  - `docs/`\n  - `examples/`\n  - `tests/`\n\n## 8. Performance & Safety\n\n- Be mindful of model weights and large assets:\n  - Do not commit generated artifacts or large binaries.\n  - Prefer referencing weights via URLs or documented download steps.\n- Where practical:\n  - Use deterministic or seeded behavior for tests/examples.\n  - Avoid unnecessary heavy computation in unit tests.\n\n## 9. Integrating a New Tracker (Checklist)\n\n1) Implement the tracker\n  - Add a new module under `boxmot/trackers/<name>/` (e.g., `sfsort.py`).\n  - Implement a tracker class that subclasses `BaseTracker` and defines `update()`.\n\n2) Register the tracker\n  - Add the tracker to `TRACKER_MAPPING` in `boxmot/trackers/tracker_zoo.py`.\n  - Export it in `boxmot/trackers/__init__.py` and `boxmot/__init__.py`.\n  - Add the tracker name to the `TRACKERS` list in `boxmot/__init__.py`.\n\n3) Add default configuration\n  - Create `boxmot/configs/trackers/<name>.yaml` with default parameters and tuning ranges.\n\n4) Update docs\n  - Add a tracker doc page in `docs/trackers/<name>.md`.\n  - Add the tracker to `mkdocs.yml` nav.\n  - Mention it in `docs/index.md` and `README.md` where trackers are listed.\n\n5) Update tests\n  - Register the tracker in `tests/test_config.py` lists so it’s covered by unit tests.\n\n6) Update CI/benchmarks\n  - Add the tracker name to workflow matrices/lists in `.github/workflows/`.\n\n7) Commit new files\n  - Ensure new tracker code, config, and docs are staged and pushed.\n\n## 10. Integrating OBB Support for New Trackers\n\nWhen adding oriented bounding box (OBB) support, follow this generic implementation guide.\n\n### Core requirements\n\n- Set `supports_obb = True` on the tracker class.\n- Keep `@BaseTracker.setup_decorator` enabled so detection shape can trigger OBB mode automatically.\n- Reuse shared detection plumbing from:\n  - `boxmot/trackers/basetracker.py`\n  - `boxmot/trackers/detection_layout.py`\n- Do not hardcode column indices if layout helpers already provide them:\n  - `self.detection_layout.boxes(...)`\n  - `self.detection_layout.confidences(...)`\n  - `self.detection_layout.classes(...)`\n  - `self.detection_layout.with_detection_indices(...)`\n\n### Data contract\n\n- Input detections:\n  - AABB: `(x1, y1, x2, y2, conf, cls)` (6 columns)\n  - OBB: `(cx, cy, w, h, angle, conf, cls)` (7 columns)\n- Output tracks:\n  - AABB: 8 columns\n  - OBB: 9 columns `(cx, cy, w, h, angle, id, conf, cls, det_ind)`\n\n### Implementation checklist\n\n1) Split AABB and OBB parsing paths\n  - Add explicit detection parsing/init branches for each mode.\n  - Preserve `conf`, `cls`, and `det_ind` in both paths.\n\n2) Use a motion model that supports OBB state\n  - Keep AABB and OBB state/measurement handling explicit.\n  - If OBB adds dimensions (for example angle), ensure `initiate`, `predict`, and `update` all use matching state sizes.\n  - For KF-based trackers, keep angle dynamics explicit (`theta`, `v_theta`/`omega`) and prefer damping over hard resets.\n  - For non-KF trackers, maintain per-track angular velocity state and apply damping during OBB updates.\n\n3) Keep mode-dependent predict/update logic\n  - If velocity/state reset behavior differs between AABB and OBB, implement separate branches.\n  - Avoid combining incompatible state assumptions in one path.\n  - Do not hard-zero OBB angular velocity after every update unless there is a tracker-specific reason.\n  - Preferred default: damp angular velocity each update (for example `omega *= 0.8` or equivalent blend).\n\n4) Wire OBB-aware association\n  - Ensure association uses OBB geometry in OBB mode.\n  - For IoU distance matching, pass `is_obb=self.is_obb` where applicable.\n  - If using `self.asso_func`, verify the OBB association mode is selected in OBB mode.\n\n5) Preserve geometry accessors for downstream consumers\n  - Expose `xywha` in OBB mode.\n  - Keep `xyxy` available as enclosing AABB for compatibility where needed.\n  - Maintain `history_observations` and `id` for plotting and lifecycle logic.\n\n6) Keep OBB plotting/history stable\n  - Append post-update OBB geometry to `history_observations`.\n  - If angles are used for plotting, add angle continuity handling to avoid wrap/flip artifacts.\n  - Before OBB update, resolve equivalent rectangle forms relative to current state:\n    - `(w, h, theta)`\n    - `(w, h, theta + pi)`\n    - `(h, w, theta + pi/2)`\n    - `(h, w, theta - pi/2)`\n  - Choose the candidate closest to the reference state, then apply damped angular update.\n\n7) Emit schema-correct outputs\n  - AABB outputs must remain 8 columns.\n  - OBB outputs must remain 9 columns in the exact order:\n    `(cx, cy, w, h, angle, id, conf, cls, det_ind)`.\n\n### Testing expectations\n\nAt minimum, add or update tests to cover:\n\n- tracker accepts OBB detections\n- tracker returns 9-column OBB outputs\n- OBB association path uses oriented geometry\n- OBB plotting/history path remains stable across frames\n- OBB angle update is smooth:\n  - track angle moves toward the new detection\n  - track angle does not jump the full detection delta when damping is enabled\n\nIf shared OBB plumbing changes, also consider extending:\n\n- `tests/unit/test_inference.py`\n- `tests/unit/test_base_backend.py`\n\n### Design rule\n\nUse shared OBB plumbing for detection mode/layout and keep tracker-specific OBB internals limited to algorithm-specific motion and association details.\n"
  },
  {
    "path": "CITATION.cff",
    "content": "cff-version: 16.0.11\n\nmessage: >-\n  If you use this software, please cite it using the\n  metadata from this file.\n\nauthors:\n  - given-names: Mikel\n    family-names: Broström\n    orcid: \"https://orcid.org/0009-0009-0540-9829\"\n\nabstract: >-\n  BoxMOT is a pluggable collection of state-of-the-art multi-object tracking modules\n  for segmentation, object detection, and pose estimation models.\n\ntitle: \"BoxMOT: pluggable state-of-the-art multi-object tracking modules\"\nrepository-code: \"https://github.com/mikel-brostrom/boxmot\"\nlicense: AGPL-3.0\nversion: 16.0.11\ntype: software\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThank you for improving this project! Please follow these guidelines.\n\n# Pull Requests\n\nProposed workflow\n\n```bash\n# Fork the repository on GitHub\n\n# Then clone your fork locally\ngit clone https://github.com/your-username/boxmot.git\ncd boxmot\npip install uv\nuv sync  # builds & installs boxmot in editable mode\n\n# Create a branch\ngit checkout -b feature/short-desc\n\n# Develop\n# ...\n\n# Run functionality where changes were introduced\npython boxmot/engine/cli.py track     --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0\npython boxmot/engine/cli.py generate  --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0\npython boxmot/engine/cli.py eval      --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0\npython boxmot/engine/cli.py tune      --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0\n \n# Run tests\nuv run pytest\n\n# Commit & push\ngit add .\ngit commit -m \"type: summary\"\ngit push origin feature/short-desc\n\n# Open a pull request\n# 1. On GitHub, go to your fork: https://github.com/your-username/boxmot\n# 2. Click contribute\n```"
  },
  {
    "path": "Dockerfile",
    "content": "# Build the image and tag it for easier later reference\n# Example:\n#   docker build -t mikel-brostrom/boxmot .\n\n# Base image: Nvidia PyTorch https://ngc.nvidia.com/catalog/containers/nvidia:pytorch\nFROM pytorch/pytorch:2.3.1-cuda11.8-cudnn8-runtime\n\n# Update and install necessary packages\nRUN apt update && apt install -y git\n\n# Set the parent working directory\nWORKDIR /usr/src\n\n# Clone the repository with submodules into a subdirectory 'boxmot'\nRUN git clone https://github.com/mikel-brostrom/boxmot.git -b master boxmot\n\n# Set the working directory to the cloned repository\nWORKDIR /usr/src/boxmot\n\n# Install pip packages and Poetry dependencies\nRUN python3 -m pip install --upgrade pip poetry && \\\n    pip install uv && \\\n    uv sync --all-extras --all-groups\n\n# ------------------------------------------------------------------------------\n\n# A Docker container exits when its main process finishes, which in this case is bash.\n# To avoid this, use detach mode.\n\n# Run interactively with all GPUs accessible:\n#   docker run -it --gpus all mikel-brostrom/boxmot bash\n\n# Run interactively with specific GPUs accessible (e.g., first and third GPU):\n#   docker run -it --gpus '\"device=0,2\"' mikel-brostrom/boxmot bash\n\n# Run in detached mode (if you exit the container, it won't stop):\n# Create a detached Docker container from an image:\n#   docker run -it --gpus all -d mikel-brostrom/boxmot\n\n# Access the running container:\n#   docker exec -it <container_id> bash\n\n# When you are done with the container, stop it by:\n#   docker stop <container_id>\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include requirements.txt\ninclude LICENSE\ninclude setup.py\ninclude boxmot/reid/backbones/clip/clip/bpe_simple_vocab_16e6.txt.gz\nrecursive-include boxmot *.yaml\nrecursive-exclude __pycache__ *\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\" markdown=\"1\">\n\n  <img width=\"640\"\n       src=\"https://github.com/mikel-brostrom/boxmot/releases/download/v12.0.0/output_640.gif\"\n       alt=\"BoxMOT demo\">\n  <br>\n\n  <a href=\"https://trendshift.io/repositories/13239\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/13239\" alt=\"mikel-brostrom%2Fboxmot | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"></a>\n\n  [![CI](https://github.com/mikel-brostrom/boxmot/actions/workflows/ci.yml/badge.svg)](https://github.com/mikel-brostrom/boxmot/actions/workflows/ci.yml)\n  [![PyPI version](https://badge.fury.io/py/boxmot.svg)](https://badge.fury.io/py/boxmot)\n  [![downloads](https://static.pepy.tech/badge/boxmot)](https://pepy.tech/project/boxmot)\n  [![license](https://img.shields.io/badge/license-AGPL%203.0-blue)](https://github.com/mikel-brostrom/boxmot/blob/master/LICENSE)\n  [![python-version](https://img.shields.io/pypi/pyversions/boxmot)](https://badge.fury.io/py/boxmot)\n  [![colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/18nIqkBr68TkK8dHdarxTco6svHUJGggY?usp=sharing)\n  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8132989.svg)](https://doi.org/10.5281/zenodo.8132989)\n  [![docker pulls](https://img.shields.io/docker/pulls/boxmot/boxmot?logo=docker)](https://hub.docker.com/r/boxmot/boxmot)\n  [![discord](https://img.shields.io/discord/1377565354326495283?logo=discord&label=discord&labelColor=fff&color=5865f2)](https://discord.gg/tUmFEcYU4q)\n  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/mikel-brostrom/boxmot)\n\n</div>\n\nBoxMOT gives you one CLI and one Python API for running, evaluating, tuning, and exporting modern multi-object tracking pipelines. Swap trackers without rewriting your detector stack, reuse cached detections and embeddings across experiments, and benchmark locally on MOT-style datasets.\n\n<div align=\"center\" markdown=\"1\">\n\n[Installation](#installation) • [Metrics](#benchmark-results-mot17-ablation-split) • [CLI](#cli) • [Python API](#python-api) • [Detection Layouts](#detection-layouts) • [Examples](#examples) • [Contributing](#contributing)\n\n</div>\n\n## Why BoxMOT\n\n- One interface for `track`, `generate`, `eval`, `tune`, and `export`.\n- Works with detection, segmentation, and pose models as long as they emit boxes.\n- Supports both motion-only trackers and motion + appearance trackers.\n- Reuses saved detections and embeddings to speed up repeated evaluation and tuning.\n- Handles both AABB and OBB detection layouts natively.\n- Includes local benchmarking workflows for MOT17, MOT20, and DanceTrack ablation splits.\n\n## Installation\n\nBoxMOT supports Python `3.9` through `3.12`.\n\n```bash\npip install boxmot\nboxmot --help\n```\n\n## Benchmark Results (MOT17 ablation split)\n\n<div align=\"center\" markdown=\"1\">\n\n<!-- START TRACKER TABLE -->\n| Tracker | Status  | OBB | HOTA↑ | MOTA↑ | IDF1↑ | FPS |\n| :-----: | :-----: | :-: | :---: | :---: | :---: | :---: |\n| [botsort](https://arxiv.org/abs/2206.14651) | ✅ | ✅ | 69.418 | 78.232 | 81.812 | 12 |\n| [boosttrack](https://arxiv.org/abs/2408.13003) | ✅ | ❌ | 69.253 | 75.914 | 83.206 | 13 |\n| [strongsort](https://arxiv.org/abs/2202.13514) | ✅ | ❌ | 68.05 | 76.185 | 80.763 | 11 |\n| [deepocsort](https://arxiv.org/abs/2302.11813) | ✅ | ❌ | 67.796 | 75.868 | 80.514 | 12 |\n| [bytetrack](https://arxiv.org/abs/2110.06864) | ✅ | ✅ | 67.68 | 78.039 | 79.157 | 720 |\n| [hybridsort](https://arxiv.org/abs/2308.00783) | ✅ | ❌ | 67.39 | 74.127 | 79.105 | 25 |\n| [ocsort](https://arxiv.org/abs/2203.14360) | ✅ | ✅ | 66.441 | 74.548 | 77.899 | 890 |\n| [sfsort](https://arxiv.org/pdf/2404.07553) | ✅ | ✅ | 62.653 | 76.87 | 69.184 | 6000 |\n<!-- END TRACKER TABLE -->\n\n<sub>Evaluation was run on the second half of the MOT17 training set because the validation split is not public and the ablation detector was trained on the first half. Results used [pre-generated detections and embeddings](https://github.com/mikel-brostrom/boxmot/releases/download/v11.0.9/runs2.zip) with each tracker configured from its default repository settings.</sub>\n\n</div>\n\n## CLI\n\nBoxMOT provides a unified CLI with a simple syntax:\n\n```bash\nboxmot MODE [OPTIONS] [DETECTOR] [REID] [TRACKER]\n```\n\nModes:\n\n```text\ntrack      run detector + tracker on webcam, images, videos, directories, or streams\ngenerate   precompute detections and embeddings for later reuse\neval       benchmark on MOT-style datasets and apply optional postprocessing\ntune       optimize tracker hyperparameters with multi-objective search\nexport     export ReID models to deployment formats\n```\n\nUse `boxmot MODE --help` for mode-specific flags.\n\nQuick examples:\n\n```bash\n# Track a webcam feed\nboxmot track yolov8n osnet_x0_25_msmt17 deepocsort --source 0 --show\n\n# Track a video, draw trajectories, and save the result\nboxmot track yolov8n osnet_x0_25_msmt17 botsort --source video.mp4 --show-trajectories --save\n\n# Evaluate on the MOT17 ablation split with GBRC postprocessing\nboxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --postprocessing gbrc --verbose\n\n# Generate reusable detections and embeddings\nboxmot generate yolov8n osnet_x0_25_msmt17 --source ./assets/MOT17-mini/train\n\n# Tune tracker hyperparameters on a MOT-style dataset\nboxmot tune yolov8n osnet_x0_25_msmt17 ocsort --source ./assets/MOT17-mini/train --n-trials 10\n\n# Export a ReID model to ONNX and TensorRT with dynamic input\nboxmot export --weights osnet_x0_25_msmt17.pt --include onnx --include engine --dynamic\n```\n\nCommon `--source` values include `0`, `img.jpg`, `video.mp4`, `path/`, `path/*.jpg`, YouTube URLs, and RTSP / RTMP / HTTP streams.\n\nIf you want to track only selected classes, pass a comma-separated list:\n\n```bash\nboxmot track yolov8s --source 0 --classes 16,17\n```\n\n## Python API\n\nIf you already have detections from your own model, call `tracker.update(...)` once per frame inside your video loop:\n\n```python\nfrom pathlib import Path\n\nimport cv2\nimport numpy as np\nfrom boxmot import BotSort\n\ntracker = BotSort(\n    reid_weights=Path(\"osnet_x0_25_msmt17.pt\"),\n    device=\"cpu\",\n    half=False,\n)\n\ncap = cv2.VideoCapture(\"video.mp4\")\n\nwhile True:\n    ok, frame = cap.read()\n    if not ok:\n        break\n\n    # Replace this with your detector output for the current frame.\n    # Expected AABB shape: (N, 6) = (x1, y1, x2, y2, conf, cls)\n    detections = np.empty((0, 6), dtype=np.float32)\n    # detections = your_detector(frame)\n\n    tracks = tracker.update(detections, frame)\n    tracker.plot_results(frame, show_trajectories=True)\n\n    print(tracks)\n    # AABB output: (N, 8) = (x1, y1, x2, y2, id, conf, cls, det_ind)\n\n    cv2.imshow(\"BoxMOT\", frame)\n    if cv2.waitKey(1) & 0xFF == ord(\"q\"):\n        break\n\ncap.release()\ncv2.destroyAllWindows()\n```\n\nFor end-to-end detector integrations, see the notebooks in [examples](examples).\n\n## Detection Layouts\n\nBoxMOT switches tracking mode from the detection tensor shape:\n\n| Geometry | Input detections | Output tracks |\n| --- | --- | --- |\n| AABB | `(N, 6)` = `(x1, y1, x2, y2, conf, cls)` | `(N, 8)` = `(x1, y1, x2, y2, id, conf, cls, det_ind)` |\n| OBB | `(N, 7)` = `(cx, cy, w, h, angle, conf, cls)` | `(N, 9)` = `(cx, cy, w, h, angle, id, conf, cls, det_ind)` |\n\nOBB-specific tracking paths are enabled automatically when OBB detections are provided. Current OBB-capable trackers: `bytetrack`, `botsort`, `ocsort`, and `sfsort`.\n\n## Examples\n\nThe short commands above are enough to get started. The sections below keep the longer recipe list available without turning the README into a wall of commands.\n\n<details>\n<summary><strong>Tracking recipes</strong></summary>\n\nTrack from common sources:\n\n```bash\n# Webcam\nboxmot track yolov8n osnet_x0_25_msmt17 deepocsort --source 0 --show\n\n# Video file\nboxmot track yolov8n osnet_x0_25_msmt17 botsort --source video.mp4 --save\n\n# Image directory\nboxmot track yolov8n osnet_x0_25_msmt17 bytetrack --source path/to/images --save-txt\n\n# Stream or URL\nboxmot track yolov8n osnet_x0_25_msmt17 ocsort --source 'rtsp://example.com/media.mp4'\n\n# YouTube\nboxmot track yolov8n osnet_x0_25_msmt17 boosttrack --source 'https://youtu.be/Zgi9g1ksQHc'\n```\n\n</details>\n\n<details>\n<summary><strong>Detector backends</strong></summary>\n\nSwap detectors without changing the overall CLI:\n\n```bash\n# Ultralytics detection\nboxmot track yolov8n\nboxmot track yolo11n\n\n# Segmentation and pose variants\nboxmot track yolov8n-seg\nboxmot track yolov8n-pose\n\n# YOLOX\nboxmot track yolox_s\n\n# RF-DETR\nboxmot track rf-detr-base\n```\n\n</details>\n\n<details>\n<summary><strong>Tracker swaps</strong></summary>\n\nUse the same detector and ReID model while changing only the tracker:\n\n```bash\nboxmot track yolov8n osnet_x0_25_msmt17 deepocsort\nboxmot track yolov8n osnet_x0_25_msmt17 strongsort\nboxmot track yolov8n osnet_x0_25_msmt17 botsort\nboxmot track yolov8n osnet_x0_25_msmt17 boosttrack\nboxmot track yolov8n osnet_x0_25_msmt17 hybridsort\n\n# Motion-only trackers\nboxmot track yolov8n osnet_x0_25_msmt17 bytetrack\nboxmot track yolov8n osnet_x0_25_msmt17 ocsort\nboxmot track yolov8n osnet_x0_25_msmt17 sfsort\n```\n\n</details>\n\n<details>\n<summary><strong>Filtering and visualization</strong></summary>\n\nUseful flags for inspection and debugging:\n\n```bash\n# Draw trajectories and show lost tracks\nboxmot track yolov8n osnet_x0_25_msmt17 botsort --source video.mp4 --show-trajectories --show-lost --save\n\n# Track only selected classes\nboxmot track yolov8s --source 0 --classes 16,17\n\n# Track each class independently\nboxmot track yolov8n --source video.mp4 --per-class --save-txt\n\n# Highlight one target ID\nboxmot track yolov8n osnet_x0_25_msmt17 deepocsort --source video.mp4 --target-id 7 --show\n```\n\n</details>\n\n<details>\n<summary><strong>Evaluation and tuning</strong></summary>\n\nBenchmark on built-in MOT-style dataset shortcuts or your own data:\n\n```bash\n# Reproduce README-style MOT17 results\nboxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --verbose\n\n# MOT20 ablation split\nboxmot eval yolox_x_MOT20_ablation lmbn_n_duke boosttrack --source MOT20-ablation --verbose\n\n# DanceTrack ablation split\nboxmot eval yolox_x_dancetrack_ablation lmbn_n_duke boosttrack --source dancetrack-ablation --verbose\n\n# VisDrone ablation split\nboxmot eval yolox_x_visdrone lmbn_n_duke botsort --source visdrone-ablation --verbose\n\n# Apply postprocessing\nboxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --postprocessing gsi\nboxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --postprocessing gbrc\n\n# Generate detections and embeddings once\nboxmot generate yolov8n osnet_x0_25_msmt17 --source ./assets/MOT17-mini/train\n\n# Tune a tracker on a custom MOT-style dataset\nboxmot tune yolov8n osnet_x0_25_msmt17 botsort --source ./assets/MOT17-mini/train --n-trials 9\n```\n\n</details>\n\n<details>\n<summary><strong>Export and OBB</strong></summary>\n\nDeployment and oriented-box examples:\n\n```bash\n# Export to ONNX\nboxmot export --weights osnet_x0_25_msmt17.pt --include onnx --device cpu\n\n# Export to OpenVINO\nboxmot export --weights osnet_x0_25_msmt17.pt --include openvino --device cpu\n\n# Export to TensorRT with dynamic input\nboxmot export --weights osnet_x0_25_msmt17.pt --include engine --device 0 --dynamic\n```\n\nOBB references:\n\n- Notebook: [examples/det/obb.ipynb](examples/det/obb.ipynb)\n- Script: [examples/det/run_obb_kalman.py](examples/det/run_obb_kalman.py)\n- OBB-capable trackers: `bytetrack`, `botsort`, `ocsort`, `sfsort`\n\n</details>\n\n## Contributing\n\nIf you want to contribute, start with [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Contributors\n\n<a href=\"https://github.com/mikel-brostrom/boxmot/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=mikel-brostrom/boxmot\" alt=\"BoxMOT contributors\">\n</a>\n\n## Support and Citation\n\n- Bugs and feature requests: [GitHub Issues](https://github.com/mikel-brostrom/boxmot/issues)\n- Questions and discussion: [GitHub Discussions](https://github.com/mikel-brostrom/boxmot/discussions) or [Discord](https://discord.gg/tUmFEcYU4q)\n- Citation metadata: [CITATION.cff](CITATION.cff)\n- Commercial support: `box-mot@outlook.com`\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/det/det.txt",
    "content": "1.000000,-1.000000,831.967285,528.233704,60.625854,22.047729,1.000000\n1.000000,-1.000000,839.141479,456.383881,54.965515,20.873291,1.000000\n1.000000,-1.000000,834.387634,430.224792,58.523438,22.974701,1.000000\n1.000000,-1.000000,838.257507,405.379669,56.559814,20.873352,1.000000\n1.000000,-1.000000,838.026550,382.357697,60.555969,23.011597,1.000000\n1.000000,-1.000000,846.292053,337.558960,54.929626,22.907837,1.000000\n1.000000,-1.000000,846.164673,294.585327,54.490234,21.803345,1.000000\n1.000000,-1.000000,850.453430,275.667358,52.931946,17.806061,1.000000\n1.000000,-1.000000,851.731384,251.717392,53.388855,19.803665,1.000000\n1.000000,-1.000000,852.464294,229.732193,54.457336,21.835266,1.000000\n1.000000,-1.000000,853.197205,208.778687,56.896423,20.943146,1.000000\n1.000000,-1.000000,849.004761,186.581085,59.452515,17.981491,1.000000\n1.000000,-1.000000,852.700256,166.700241,48.495300,18.664276,1.000000\n1.000000,-1.000000,854.397095,144.782761,61.557800,20.047974,1.000000\n1.000000,-1.000000,853.167114,123.689697,57.523682,17.910675,1.000000\n1.000000,-1.000000,860.895874,102.948746,56.524780,18.943359,1.000000\n1.000000,-1.000000,858.362305,77.824478,62.858521,26.113701,1.000000\n1.000000,-1.000000,859.362122,58.870956,55.595825,21.870117,1.000000\n1.000000,-1.000000,859.095215,38.882580,56.490906,20.873138,1.000000\n1.000000,-1.000000,572.301575,89.701027,43.162354,50.864403,1.000000\n1.000000,-1.000000,582.375977,172.615738,61.440002,46.439072,1.000000\n1.000000,-1.000000,593.102173,151.049347,63.472412,48.400818,1.000000\n1.000000,-1.000000,838.709412,479.438690,55.523926,20.873291,1.000000\n1.000000,-1.000000,835.162903,553.358093,60.521118,22.012756,1.000000\n1.000000,-1.000000,634.696960,76.422066,62.576294,44.438896,1.000000\n1.000000,-1.000000,831.360718,576.241455,59.522339,20.012024,1.000000\n1.000000,-1.000000,782.010132,503.433960,38.395264,15.318787,1.000000\n1.000000,-1.000000,782.603516,481.446716,43.601746,19.488556,1.000000\n1.000000,-1.000000,774.983398,409.143158,55.628601,25.904297,1.000000\n1.000000,-1.000000,777.447937,389.189423,52.932983,20.803528,1.000000\n1.000000,-1.000000,773.589172,362.065430,60.929749,26.113800,1.000000\n1.000000,-1.000000,776.495178,339.185150,59.559326,24.009369,1.000000\n1.000000,-1.000000,774.300476,315.060638,61.624634,24.114014,1.000000\n1.000000,-1.000000,779.206238,294.246765,51.422913,19.698883,1.000000\n1.000000,-1.000000,777.903442,269.157288,59.626953,24.974335,1.000000\n1.000000,-1.000000,767.783813,245.789429,70.479492,23.428284,1.000000\n1.000000,-1.000000,780.473755,224.219925,57.593384,23.977539,1.000000\n1.000000,-1.000000,784.310791,203.336258,54.489258,19.876495,1.000000\n1.000000,-1.000000,780.115417,177.212051,63.520569,26.116867,1.000000\n1.000000,-1.000000,793.841125,160.642838,50.527771,19.697983,1.000000\n1.000000,-1.000000,815.028503,107.339630,35.221191,12.179245,1.000000\n1.000000,-1.000000,804.370117,119.982964,44.392212,18.524651,1.000000\n1.000000,-1.000000,790.540710,141.514465,57.929199,19.013214,1.000000\n1.000000,-1.000000,826.038269,611.078857,72.512024,26.427734,1.000000\n1.000000,-1.000000,621.726807,105.879517,60.579712,41.442337,1.000000\n1.000000,-1.000000,647.350952,57.852261,57.720703,42.230007,1.000000\n1.000000,-1.000000,390.695862,11.696652,53.176300,33.443741,1.000000\n1.000000,-1.000000,209.511597,133.404327,51.039062,27.415375,1.000000\n1.000000,-1.000000,208.280777,109.314743,61.136978,32.831329,1.000000\n1.000000,-1.000000,220.320831,84.714233,49.005524,23.383911,1.000000\n1.000000,-1.000000,222.017670,60.869053,60.069366,30.656307,1.000000\n1.000000,-1.000000,237.649490,15.280258,55.072311,29.589363,1.000000\n1.000000,-1.000000,246.516571,0.000000,55.107239,20.164230,1.000000\n1.000000,-1.000000,399.528076,0.000000,56.176788,22.539318,1.000000\n1.000000,-1.000000,385.827087,36.506924,51.213501,33.376743,1.000000\n1.000000,-1.000000,681.148254,8.895086,48.726318,38.093826,1.000000\n1.000000,-1.000000,373.367126,81.058304,52.072845,32.449257,1.000000\n1.000000,-1.000000,265.976013,180.366852,69.781433,31.182739,1.000000\n1.000000,-1.000000,188.756271,158.621048,36.117416,17.039291,1.000000\n1.000000,-1.000000,221.421478,165.803604,47.969727,27.380539,1.000000\n1.000000,-1.000000,335.443329,198.766235,35.048798,20.997574,1.000000\n1.000000,-1.000000,369.039642,208.911285,36.152283,21.140320,1.000000\n1.000000,-1.000000,403.333832,201.174271,53.106567,24.590439,1.000000\n1.000000,-1.000000,412.061401,179.466202,42.149261,24.136765,1.000000\n1.000000,-1.000000,418.756409,160.686874,46.145538,24.346146,1.000000\n1.000000,-1.000000,423.415771,139.838089,47.146454,25.348969,1.000000\n1.000000,-1.000000,434.039246,121.199333,39.184662,24.068947,1.000000\n1.000000,-1.000000,436.909363,99.318474,37.152130,22.962723,1.000000\n1.000000,-1.000000,443.569427,78.539574,46.075836,27.241158,1.000000\n1.000000,-1.000000,456.236755,32.883881,55.002411,28.621883,1.000000\n1.000000,-1.000000,459.899353,7.108705,56.208557,33.551331,1.000000\n1.000000,-1.000000,329.287140,171.572433,70.919861,31.180695,1.000000\n1.000000,-1.000000,338.049591,148.901505,66.924591,33.005829,1.000000\n1.000000,-1.000000,338.852264,122.987793,73.955292,37.105820,1.000000\n1.000000,-1.000000,843.434143,318.500397,46.494629,17.562775,1.000000\n1.000000,-1.000000,986.584106,484.603821,36.415894,20.914215,1.000000\n1.000000,-1.000000,996.441650,421.852051,26.558350,18.576721,1.000000\n1.000000,-1.000000,1007.476440,237.173203,15.523560,12.500122,1.000000\n1.000000,-1.000000,991.441711,507.728455,31.558289,15.111755,1.000000\n1.000000,-1.000000,993.706238,528.821533,29.293762,14.292969,1.000000\n1.000000,-1.000000,998.041321,547.984802,24.958679,16.514160,1.000000\n1.000000,-1.000000,986.859375,567.658203,36.140625,15.972168,1.000000\n1.000000,-1.000000,961.814392,619.787537,61.185608,21.151917,1.000000\n1.000000,-1.000000,979.130798,586.367798,43.869202,18.366882,1.000000\n1.000000,-1.000000,754.256042,23.342646,161.644165,607.749329,1.000000\n1.000000,-1.000000,576.883484,337.644623,186.100159,292.126617,1.000000\n1.000000,-1.000000,569.801941,0.000000,194.495789,219.054810,1.000000\n1.000000,-1.000000,343.276703,0.000000,177.038971,223.079285,1.000000\n1.000000,-1.000000,193.660919,0.000000,110.544922,164.923798,1.000000\n1.000000,-1.000000,600.218506,340.504517,56.140930,41.787109,1.000000\n1.000000,-1.000000,608.551941,371.346649,34.081848,23.147217,1.000000\n1.000000,-1.000000,610.955139,387.544281,38.046204,25.042236,1.000000\n1.000000,-1.000000,620.459778,404.850525,36.942749,22.042694,1.000000\n1.000000,-1.000000,627.864197,417.086731,37.081238,28.143311,1.000000\n1.000000,-1.000000,638.367676,436.319794,32.945496,22.252075,1.000000\n1.000000,-1.000000,642.806396,448.660645,37.012512,27.109741,1.000000\n1.000000,-1.000000,656.715942,481.025116,34.944214,27.249298,1.000000\n1.000000,-1.000000,666.219727,497.398193,34.874207,25.216736,1.000000\n1.000000,-1.000000,671.658264,513.634766,34.944031,24.147156,1.000000\n1.000000,-1.000000,679.059570,529.971985,36.977661,24.112183,1.000000\n1.000000,-1.000000,688.494385,548.100525,31.017639,21.290222,1.000000\n1.000000,-1.000000,691.934387,560.409546,38.011353,28.179321,1.000000\n1.000000,-1.000000,699.266907,577.747620,40.150635,28.038757,1.000000\n1.000000,-1.000000,652.250671,532.261292,25.077148,36.152222,1.000000\n1.000000,-1.000000,627.767822,486.451385,26.109863,37.116241,1.000000\n1.000000,-1.000000,606.492859,437.641022,26.178650,32.189880,1.000000\n1.000000,-1.000000,569.643433,376.318268,21.359070,26.089233,1.000000\n1.000000,-1.000000,189.606094,92.697327,18.721802,28.226471,1.000000\n1.000000,-1.000000,198.578949,65.027817,18.756622,27.089500,1.000000\n1.000000,-1.000000,203.518463,32.326542,21.894791,34.050220,1.000000\n2.000000,-1.000000,832.302307,525.025269,60.454346,21.465515,1.000000\n2.000000,-1.000000,838.570557,453.124023,54.981934,20.340668,1.000000\n2.000000,-1.000000,833.745422,427.007019,58.381226,22.412720,1.000000\n2.000000,-1.000000,837.367004,402.114594,56.406982,20.340698,1.000000\n2.000000,-1.000000,836.916382,379.095734,60.404419,22.439636,1.000000\n2.000000,-1.000000,844.535706,334.233673,54.955994,22.365845,1.000000\n2.000000,-1.000000,844.158813,291.247223,54.356812,21.290955,1.000000\n2.000000,-1.000000,848.079651,272.303680,52.957703,17.292450,1.000000\n2.000000,-1.000000,849.278137,248.336578,53.284973,19.290680,1.000000\n2.000000,-1.000000,849.801697,226.344818,54.333923,21.312851,1.000000\n2.000000,-1.000000,850.325256,205.375076,56.933350,20.390549,1.000000\n2.000000,-1.000000,845.902039,183.230698,59.330505,17.418076,1.000000\n2.000000,-1.000000,849.399048,163.313995,48.360107,18.190842,1.000000\n2.000000,-1.000000,850.896790,141.370026,61.406555,19.465179,1.000000\n2.000000,-1.000000,849.446960,120.300583,57.381165,17.367188,1.000000\n2.000000,-1.000000,856.968445,99.483582,56.381958,18.390175,1.000000\n2.000000,-1.000000,854.014954,74.391754,62.907288,25.512741,1.000000\n2.000000,-1.000000,855.015076,55.422588,55.432800,21.337757,1.000000\n2.000000,-1.000000,854.538513,35.428242,56.358093,20.340485,1.000000\n2.000000,-1.000000,568.507507,88.876404,42.835938,50.909546,1.000000\n2.000000,-1.000000,579.133789,171.825851,61.607971,46.033813,1.000000\n2.000000,-1.000000,589.653564,150.133270,63.631104,48.006104,1.000000\n2.000000,-1.000000,838.547485,476.165771,55.380859,20.340637,1.000000\n2.000000,-1.000000,835.728394,550.117188,60.379517,21.440552,1.000000\n2.000000,-1.000000,630.512329,75.104507,62.704773,44.033035,1.000000\n2.000000,-1.000000,832.154602,573.037354,59.380432,19.439209,1.000000\n2.000000,-1.000000,782.040833,500.737000,38.286987,14.944153,1.000000\n2.000000,-1.000000,782.464722,478.743195,43.435181,19.065277,1.000000\n2.000000,-1.000000,774.163757,406.517853,55.455627,25.363190,1.000000\n2.000000,-1.000000,776.209900,386.548187,52.958801,20.290833,1.000000\n2.000000,-1.000000,772.310120,359.456024,60.957886,25.512817,1.000000\n2.000000,-1.000000,774.957520,336.538971,59.407410,23.437714,1.000000\n2.000000,-1.000000,772.532654,312.447174,61.453369,23.512482,1.000000\n2.000000,-1.000000,777.180420,291.577179,51.308533,19.215790,1.000000\n2.000000,-1.000000,775.677612,266.510162,59.455200,24.412964,1.000000\n2.000000,-1.000000,765.305542,243.245087,70.350769,22.736725,1.000000\n2.000000,-1.000000,777.799622,221.549408,57.430969,23.415863,1.000000\n2.000000,-1.000000,781.398315,200.629547,54.355835,19.343567,1.000000\n2.000000,-1.000000,776.972168,174.537476,63.379883,25.515915,1.000000\n2.000000,-1.000000,790.492371,157.843552,50.383240,19.214874,1.000000\n2.000000,-1.000000,811.057434,104.334824,35.161865,11.843605,1.000000\n2.000000,-1.000000,800.585449,117.081741,44.285706,18.091095,1.000000\n2.000000,-1.000000,786.991455,138.749405,57.956421,18.440094,1.000000\n2.000000,-1.000000,827.209778,607.925049,72.374023,25.737122,1.000000\n2.000000,-1.000000,617.817749,104.720444,60.707581,41.035583,1.000000\n2.000000,-1.000000,642.980530,56.409397,57.807800,41.883366,1.000000\n2.000000,-1.000000,385.909515,12.864549,53.132294,33.034595,1.000000\n2.000000,-1.000000,205.898621,136.384857,51.034363,27.014435,1.000000\n2.000000,-1.000000,204.447891,112.318024,61.105362,32.312241,1.000000\n2.000000,-1.000000,216.192169,87.600403,49.010162,22.991722,1.000000\n2.000000,-1.000000,217.689926,63.708187,60.057358,30.186443,1.000000\n2.000000,-1.000000,232.857391,17.996002,55.058807,29.139160,1.000000\n2.000000,-1.000000,241.477661,0.000000,55.083740,22.342558,1.000000\n2.000000,-1.000000,394.504883,0.000000,56.133698,23.181561,1.000000\n2.000000,-1.000000,381.288788,37.732132,51.158936,32.987526,1.000000\n2.000000,-1.000000,676.269043,7.148215,48.810730,37.785873,1.000000\n2.000000,-1.000000,369.244232,82.416550,52.058441,32.039833,1.000000\n2.000000,-1.000000,262.808990,182.792587,69.852173,30.563354,1.000000\n2.000000,-1.000000,185.356644,161.828659,36.088287,16.744995,1.000000\n2.000000,-1.000000,218.121429,168.674057,47.984039,26.989548,1.000000\n2.000000,-1.000000,332.436768,200.508896,35.039307,20.714447,1.000000\n2.000000,-1.000000,366.152893,210.327682,36.113190,20.817291,1.000000\n2.000000,-1.000000,400.367523,202.229080,53.082458,24.138733,1.000000\n2.000000,-1.000000,408.888123,180.434723,42.111938,23.814636,1.000000\n2.000000,-1.000000,415.385529,161.589905,46.109436,23.964203,1.000000\n2.000000,-1.000000,419.856659,140.694962,47.110657,24.967361,1.000000\n2.000000,-1.000000,430.303711,121.950859,39.136475,23.766777,1.000000\n2.000000,-1.000000,432.925201,100.033516,37.113312,22.690178,1.000000\n2.000000,-1.000000,439.397644,79.188560,46.059662,26.890030,1.000000\n2.000000,-1.000000,451.589722,33.429405,55.008881,28.161411,1.000000\n2.000000,-1.000000,455.063843,7.586673,56.155518,33.112263,1.000000\n2.000000,-1.000000,326.039246,173.366852,70.951019,30.561325,1.000000\n2.000000,-1.000000,334.584778,150.599335,66.954529,32.436905,1.000000\n2.000000,-1.000000,335.158142,124.657928,73.977386,36.508163,1.000000\n2.000000,-1.000000,841.637024,315.189392,46.358826,17.118958,1.000000\n2.000000,-1.000000,986.476318,479.855499,36.523682,20.570496,1.000000\n2.000000,-1.000000,995.518494,417.025116,27.481506,18.347412,1.000000\n2.000000,-1.000000,1004.830139,232.231277,18.169861,12.424683,1.000000\n2.000000,-1.000000,991.375244,502.947113,31.624756,14.794220,1.000000\n2.000000,-1.000000,993.850037,524.016602,29.149963,14.020691,1.000000\n2.000000,-1.000000,998.376038,543.135681,24.623962,16.218750,1.000000\n2.000000,-1.000000,987.530090,562.904785,35.469910,15.594238,1.000000\n2.000000,-1.000000,963.066284,615.289124,59.933716,20.536255,1.000000\n2.000000,-1.000000,980.008667,581.699768,42.991333,17.894287,1.000000\n2.000000,-1.000000,755.356262,20.612152,155.764709,606.753174,1.000000\n2.000000,-1.000000,575.495789,336.295288,188.381042,291.555176,1.000000\n2.000000,-1.000000,566.436279,0.000000,191.286682,217.859665,1.000000\n2.000000,-1.000000,340.032990,0.000000,175.335480,223.591782,1.000000\n2.000000,-1.000000,190.003311,0.000000,109.672379,167.474655,1.000000\n2.000000,-1.000000,598.737976,339.195953,56.107788,42.138855,1.000000\n2.000000,-1.000000,607.263550,370.087189,34.062073,23.393646,1.000000\n2.000000,-1.000000,609.837097,386.229797,38.037598,25.319122,1.000000\n2.000000,-1.000000,619.484253,403.451385,36.963745,22.318726,1.000000\n2.000000,-1.000000,627.060547,415.621368,37.062378,28.391235,1.000000\n2.000000,-1.000000,637.706848,434.790314,32.965332,22.468292,1.000000\n2.000000,-1.000000,642.306580,447.035095,37.013611,27.367279,1.000000\n2.000000,-1.000000,656.529663,479.299438,34.964539,27.466980,1.000000\n2.000000,-1.000000,666.175903,495.567627,34.914612,25.443787,1.000000\n2.000000,-1.000000,671.775757,511.739227,34.964478,24.393829,1.000000\n2.000000,-1.000000,679.348999,527.981506,36.988647,24.368896,1.000000\n2.000000,-1.000000,688.946289,546.075500,31.016907,21.496216,1.000000\n2.000000,-1.000000,692.546936,558.298462,38.012756,28.417236,1.000000\n2.000000,-1.000000,700.071289,575.541870,40.112671,28.316528,1.000000\n2.000000,-1.000000,652.482178,530.760437,25.344055,36.113159,1.000000\n2.000000,-1.000000,627.562866,485.176392,26.367126,37.087402,1.000000\n2.000000,-1.000000,605.792603,436.590942,26.415955,32.139648,1.000000\n2.000000,-1.000000,568.323425,375.639099,21.545044,26.067078,1.000000\n2.000000,-1.000000,185.677826,95.875267,18.517822,28.165047,1.000000\n2.000000,-1.000000,194.373932,68.107681,18.542709,27.067657,1.000000\n2.000000,-1.000000,199.045502,35.316822,21.641861,34.040417,1.000000\n3.000000,-1.000000,832.605469,521.815491,60.276794,20.881165,1.000000\n3.000000,-1.000000,837.967102,449.870026,54.992920,19.806000,1.000000\n3.000000,-1.000000,833.071167,423.797729,58.233276,21.848511,1.000000\n3.000000,-1.000000,836.444092,398.860443,56.248596,19.806000,1.000000\n3.000000,-1.000000,835.773926,375.846954,60.246826,21.865479,1.000000\n3.000000,-1.000000,842.746277,330.926117,54.976929,21.821594,1.000000\n3.000000,-1.000000,842.119934,287.931091,54.217957,20.776428,1.000000\n3.000000,-1.000000,845.672424,268.963837,52.978210,16.777130,1.000000\n3.000000,-1.000000,846.791321,244.981979,53.175903,18.775742,1.000000\n3.000000,-1.000000,847.105469,222.985840,54.205078,20.788345,1.000000\n3.000000,-1.000000,847.419678,202.001953,56.964661,19.835938,1.000000\n3.000000,-1.000000,842.766113,179.913025,59.202637,16.852905,1.000000\n3.000000,-1.000000,846.064270,159.962433,48.220093,17.715576,1.000000\n3.000000,-1.000000,847.362793,137.994156,61.249207,18.880447,1.000000\n3.000000,-1.000000,845.693237,116.950432,57.232910,17.000587,1.000000\n3.000000,-1.000000,853.006653,96.059448,56.233643,17.835159,1.000000\n3.000000,-1.000000,849.633606,71.002548,62.949707,24.909256,1.000000\n3.000000,-1.000000,850.633911,52.019630,55.264282,20.803284,1.000000\n3.000000,-1.000000,849.947754,32.021305,56.219666,19.805809,1.000000\n3.000000,-1.000000,564.707764,88.093872,42.505310,50.949600,1.000000\n3.000000,-1.000000,575.884949,171.069809,61.769836,45.623978,1.000000\n3.000000,-1.000000,586.197327,149.253204,63.783386,47.606613,1.000000\n3.000000,-1.000000,838.353088,472.896393,55.232239,19.806000,1.000000\n3.000000,-1.000000,836.261719,546.872498,60.231873,20.866211,1.000000\n3.000000,-1.000000,626.315979,73.830414,62.826965,43.622787,1.000000\n3.000000,-1.000000,832.916687,569.827148,59.232605,18.864502,1.000000\n3.000000,-1.000000,782.044678,498.041168,38.174927,14.568085,1.000000\n3.000000,-1.000000,782.299011,476.042999,43.264282,18.640076,1.000000\n3.000000,-1.000000,773.318054,403.903015,55.277100,24.819550,1.000000\n3.000000,-1.000000,774.945618,383.919434,52.979309,19.776093,1.000000\n3.000000,-1.000000,771.005127,356.861786,60.979980,24.909332,1.000000\n3.000000,-1.000000,773.393677,333.910217,59.249634,22.863770,1.000000\n3.000000,-1.000000,770.738831,309.853546,61.276123,22.908630,1.000000\n3.000000,-1.000000,775.128174,288.929504,51.189026,18.730835,1.000000\n3.000000,-1.000000,773.425598,263.887451,59.277405,23.849152,1.000000\n3.000000,-1.000000,762.802002,240.727478,70.215149,22.042938,1.000000\n3.000000,-1.000000,775.099060,218.907776,57.262817,22.851883,1.000000\n3.000000,-1.000000,778.459106,197.953812,54.216980,18.808701,1.000000\n3.000000,-1.000000,773.802612,171.896469,63.232788,24.912415,1.000000\n3.000000,-1.000000,787.115967,155.079498,50.233643,18.729858,1.000000\n3.000000,-1.000000,807.056580,101.370567,35.099060,11.506775,1.000000\n3.000000,-1.000000,796.772095,114.219795,44.174805,17.655739,1.000000\n3.000000,-1.000000,783.414856,135.873810,57.977905,18.012802,1.000000\n3.000000,-1.000000,828.349976,604.761719,72.228699,25.043884,1.000000\n3.000000,-1.000000,613.898193,103.601875,60.829407,40.624748,1.000000\n3.000000,-1.000000,638.597107,55.011852,57.889160,41.532558,1.000000\n3.000000,-1.000000,381.135742,14.082091,53.083008,32.622162,1.000000\n3.000000,-1.000000,202.316101,139.402740,51.024551,26.610794,1.000000\n3.000000,-1.000000,200.645584,115.361061,61.067642,31.789940,1.000000\n3.000000,-1.000000,212.092926,90.528778,49.009949,22.597260,1.000000\n3.000000,-1.000000,213.391449,66.591911,60.039398,29.713577,1.000000\n3.000000,-1.000000,228.093079,20.760881,55.039825,28.686060,1.000000\n3.000000,-1.000000,236.465637,0.000000,55.054810,24.569590,1.000000\n3.000000,-1.000000,389.493378,0.000000,56.085022,23.872423,1.000000\n3.000000,-1.000000,376.763489,39.004517,51.099304,32.595024,1.000000\n3.000000,-1.000000,671.373413,5.451560,48.890320,37.474163,1.000000\n3.000000,-1.000000,365.135559,83.817528,52.038849,31.627213,1.000000\n3.000000,-1.000000,259.666779,185.251083,69.915955,29.940933,1.000000\n3.000000,-1.000000,181.989502,165.071106,36.055557,16.449036,1.000000\n3.000000,-1.000000,214.850601,171.578659,47.993576,26.595871,1.000000\n3.000000,-1.000000,329.448090,202.282532,35.026306,20.429276,1.000000\n3.000000,-1.000000,363.280609,211.774078,36.070526,20.492203,1.000000\n3.000000,-1.000000,397.412292,203.314713,53.053131,23.684616,1.000000\n3.000000,-1.000000,405.725098,181.436203,42.070435,23.490158,1.000000\n3.000000,-1.000000,412.024261,162.527771,46.068726,23.579910,1.000000\n3.000000,-1.000000,416.306732,141.588776,47.070129,24.583267,1.000000\n3.000000,-1.000000,426.576294,122.741180,39.084412,23.462250,1.000000\n3.000000,-1.000000,428.948914,100.789536,37.070801,22.415375,1.000000\n3.000000,-1.000000,435.233093,79.880600,46.038879,26.536224,1.000000\n3.000000,-1.000000,446.948730,34.022530,55.009857,27.698135,1.000000\n3.000000,-1.000000,450.233948,8.114814,56.096893,32.669903,1.000000\n3.000000,-1.000000,322.809875,175.194962,70.975098,29.938889,1.000000\n3.000000,-1.000000,331.137573,152.333130,66.977844,31.864731,1.000000\n3.000000,-1.000000,331.481628,126.366600,73.992126,35.906883,1.000000\n3.000000,-1.000000,839.807129,311.897980,46.218384,16.673431,1.000000\n3.000000,-1.000000,986.321289,475.110382,36.678711,20.224701,1.000000\n3.000000,-1.000000,994.547241,412.207642,28.452759,18.103546,1.000000\n3.000000,-1.000000,1002.134888,227.317154,20.865112,12.296097,1.000000\n3.000000,-1.000000,991.261108,498.166687,31.738892,14.477600,1.000000\n3.000000,-1.000000,993.945923,519.210449,29.054077,14.013489,1.000000\n3.000000,-1.000000,998.662354,538.283447,24.337646,15.935852,1.000000\n3.000000,-1.000000,988.153442,558.146301,34.846558,15.230347,1.000000\n3.000000,-1.000000,964.273376,610.780457,58.726624,19.997559,1.000000\n3.000000,-1.000000,980.840027,577.024780,42.159973,17.439636,1.000000\n3.000000,-1.000000,756.432251,17.930534,149.869812,605.696716,1.000000\n3.000000,-1.000000,574.101807,334.963409,190.643250,290.954742,1.000000\n3.000000,-1.000000,563.065186,0.000000,188.153931,216.693787,1.000000\n3.000000,-1.000000,336.806366,0.000000,173.614563,224.132965,1.000000\n3.000000,-1.000000,186.377731,0.000000,108.757370,170.059769,1.000000\n3.000000,-1.000000,597.248840,337.904572,56.069092,42.486420,1.000000\n3.000000,-1.000000,605.965637,368.841858,34.038879,23.637756,1.000000\n3.000000,-1.000000,608.709290,384.927795,38.025208,25.593536,1.000000\n3.000000,-1.000000,618.498047,402.063019,36.981079,22.592529,1.000000\n3.000000,-1.000000,626.245422,414.165619,37.039856,28.636322,1.000000\n3.000000,-1.000000,637.033508,433.268524,32.981873,22.682281,1.000000\n3.000000,-1.000000,641.793762,445.415985,37.011047,27.622131,1.000000\n3.000000,-1.000000,656.328979,477.576996,34.981445,27.681946,1.000000\n3.000000,-1.000000,666.116821,493.738708,34.951477,25.668335,1.000000\n3.000000,-1.000000,671.877380,509.843658,34.981445,24.638153,1.000000\n3.000000,-1.000000,679.621704,525.989441,36.996033,24.623169,1.000000\n3.000000,-1.000000,689.380554,544.047119,31.013062,21.700012,1.000000\n3.000000,-1.000000,693.141541,556.182739,38.010315,28.652344,1.000000\n3.000000,-1.000000,700.856934,573.329834,40.070801,28.591492,1.000000\n3.000000,-1.000000,652.699707,529.257751,25.608459,36.070496,1.000000\n3.000000,-1.000000,627.346436,483.904083,26.621765,37.054901,1.000000\n3.000000,-1.000000,605.083008,435.548401,26.650696,32.086151,1.000000\n3.000000,-1.000000,566.997803,374.973480,21.728943,26.042358,1.000000\n3.000000,-1.000000,181.782013,99.094604,18.312012,28.100815,1.000000\n3.000000,-1.000000,190.200516,71.231705,18.326920,27.043106,1.000000\n3.000000,-1.000000,194.603668,38.354515,21.386795,34.027229,1.000000\n4.000000,-1.000000,832.876770,518.604797,60.093262,20.294739,1.000000\n4.000000,-1.000000,837.331299,446.622192,54.998352,19.269379,1.000000\n4.000000,-1.000000,832.365051,420.597198,58.079407,21.282135,1.000000\n4.000000,-1.000000,835.488953,395.617523,56.084595,19.269348,1.000000\n4.000000,-1.000000,834.599243,372.611725,60.083252,21.289154,1.000000\n4.000000,-1.000000,840.923950,327.636536,54.992371,21.275208,1.000000\n4.000000,-1.000000,840.048157,284.637238,54.073792,20.259827,1.000000\n4.000000,-1.000000,843.231995,265.648163,52.993469,16.260132,1.000000\n4.000000,-1.000000,844.271240,241.653946,53.061462,18.258957,1.000000\n4.000000,-1.000000,844.375977,219.655624,54.070801,20.261749,1.000000\n4.000000,-1.000000,844.480713,198.659668,56.990234,19.279343,1.000000\n4.000000,-1.000000,839.597290,176.628372,59.068848,16.286072,1.000000\n4.000000,-1.000000,842.696289,156.645874,48.075256,17.238586,1.000000\n4.000000,-1.000000,843.795471,134.655487,61.085693,18.293839,1.000000\n4.000000,-1.000000,841.906311,113.639572,57.078979,17.002274,1.000000\n4.000000,-1.000000,849.010986,92.676689,56.079651,17.278374,1.000000\n4.000000,-1.000000,845.218689,67.657211,62.985840,24.303284,1.000000\n4.000000,-1.000000,846.219116,48.662426,55.090210,20.266735,1.000000\n4.000000,-1.000000,845.323425,28.662113,56.075623,19.269161,1.000000\n4.000000,-1.000000,560.902832,87.353500,42.170410,50.984604,1.000000\n4.000000,-1.000000,572.629700,170.347687,61.925598,45.209579,1.000000\n4.000000,-1.000000,582.733643,148.409210,63.929382,47.202408,1.000000\n4.000000,-1.000000,838.126221,469.630920,55.078186,19.269348,1.000000\n4.000000,-1.000000,836.762817,543.624329,60.078247,20.289795,1.000000\n4.000000,-1.000000,622.108276,72.599899,62.942871,43.208206,1.000000\n4.000000,-1.000000,833.646790,566.611267,59.078918,18.287842,1.000000\n4.000000,-1.000000,782.021667,495.346741,38.059021,14.190460,1.000000\n4.000000,-1.000000,782.106506,473.346375,43.088989,18.213043,1.000000\n4.000000,-1.000000,772.446350,401.298950,55.093079,24.273438,1.000000\n4.000000,-1.000000,773.655151,381.303406,52.994568,19.259399,1.000000\n4.000000,-1.000000,769.674438,354.282959,60.995972,24.303375,1.000000\n4.000000,-1.000000,771.803894,331.299194,59.085938,22.287506,1.000000\n4.000000,-1.000000,768.919373,307.280029,61.092651,22.302490,1.000000\n4.000000,-1.000000,773.049744,286.304016,51.064514,18.243988,1.000000\n4.000000,-1.000000,771.147522,261.289429,59.093872,23.282990,1.000000\n4.000000,-1.000000,760.273560,238.236847,70.072510,21.346954,1.000000\n4.000000,-1.000000,772.372375,216.295288,57.088989,22.285629,1.000000\n4.000000,-1.000000,775.493347,195.309311,54.072693,18.271973,1.000000\n4.000000,-1.000000,770.606934,169.289276,63.079529,24.306458,1.000000\n4.000000,-1.000000,783.712158,152.350937,50.079041,18.242981,1.000000\n4.000000,-1.000000,803.026428,98.447151,35.032715,11.168808,1.000000\n4.000000,-1.000000,792.930359,111.397415,44.059570,17.218628,1.000000\n4.000000,-1.000000,779.811218,132.614716,57.993652,18.004623,1.000000\n4.000000,-1.000000,829.458618,601.589172,72.076355,24.348206,1.000000\n4.000000,-1.000000,609.968506,102.523933,60.945129,40.209862,1.000000\n4.000000,-1.000000,634.201050,53.659763,57.964783,41.177616,1.000000\n4.000000,-1.000000,376.374969,15.349161,53.028442,32.206482,1.000000\n4.000000,-1.000000,198.764389,142.457703,51.009674,26.204498,1.000000\n4.000000,-1.000000,196.874252,118.443550,61.023849,31.264473,1.000000\n4.000000,-1.000000,208.023514,93.499084,49.004837,22.200539,1.000000\n4.000000,-1.000000,209.122681,69.519936,60.015472,29.237762,1.000000\n4.000000,-1.000000,223.356979,23.574625,55.015366,28.230104,1.000000\n4.000000,-1.000000,231.481033,0.000000,55.020340,26.845104,1.000000\n4.000000,-1.000000,384.494049,0.000000,56.030762,24.611839,1.000000\n4.000000,-1.000000,372.251617,40.323948,51.034607,32.199284,1.000000\n4.000000,-1.000000,666.461975,3.805288,48.964966,37.158730,1.000000\n4.000000,-1.000000,361.041504,85.261086,52.014069,31.211464,1.000000\n4.000000,-1.000000,256.549622,187.742081,69.972809,29.315521,1.000000\n4.000000,-1.000000,178.655182,168.348053,36.019257,16.151443,1.000000\n4.000000,-1.000000,211.609329,174.517136,47.998367,26.199524,1.000000\n4.000000,-1.000000,326.477539,204.086975,35.009857,20.142059,1.000000\n4.000000,-1.000000,360.423157,213.250336,36.024231,20.165085,1.000000\n4.000000,-1.000000,394.468475,204.431061,53.018494,23.228134,1.000000\n4.000000,-1.000000,402.572632,182.470581,42.024780,23.163315,1.000000\n4.000000,-1.000000,408.672943,163.500412,46.023438,23.193237,1.000000\n4.000000,-1.000000,412.766327,142.519424,47.024933,24.196716,1.000000\n4.000000,-1.000000,422.857391,123.570213,39.028442,23.155388,1.000000\n4.000000,-1.000000,424.980865,101.586456,37.024658,22.138344,1.000000\n4.000000,-1.000000,431.076172,80.615616,46.013519,26.179787,1.000000\n4.000000,-1.000000,442.314178,34.663200,55.005402,27.232101,1.000000\n4.000000,-1.000000,445.410248,8.693073,56.032654,32.224297,1.000000\n4.000000,-1.000000,319.599304,177.056564,70.992126,29.313492,1.000000\n4.000000,-1.000000,327.708374,154.102692,66.994507,31.289398,1.000000\n4.000000,-1.000000,327.823059,128.113617,73.999481,35.302032,1.000000\n4.000000,-1.000000,837.944641,308.626465,46.073303,16.226227,1.000000\n4.000000,-1.000000,986.119141,470.368958,36.880859,19.875244,1.000000\n4.000000,-1.000000,993.528015,407.400085,29.471985,17.843567,1.000000\n4.000000,-1.000000,999.390808,222.431366,23.609192,12.112839,1.000000\n4.000000,-1.000000,991.099304,493.387634,31.900696,14.160400,1.000000\n4.000000,-1.000000,993.993896,514.403564,29.006104,14.004944,1.000000\n4.000000,-1.000000,998.900269,533.428589,24.099731,15.664001,1.000000\n4.000000,-1.000000,988.729492,553.383179,34.270508,14.879028,1.000000\n4.000000,-1.000000,965.435486,606.261963,57.564514,19.999512,1.000000\n4.000000,-1.000000,981.624756,572.343384,41.375244,17.001282,1.000000\n4.000000,-1.000000,757.483948,15.298059,143.959961,604.580017,1.000000\n4.000000,-1.000000,572.701599,333.649139,192.886475,290.325409,1.000000\n4.000000,-1.000000,559.688965,0.000000,185.094666,215.557266,1.000000\n4.000000,-1.000000,333.597198,0.000000,171.876343,224.702774,1.000000\n4.000000,-1.000000,182.784531,0.000000,107.798660,172.678909,1.000000\n4.000000,-1.000000,595.751221,336.630493,56.024780,42.829742,1.000000\n4.000000,-1.000000,604.658386,367.610748,34.012329,23.879517,1.000000\n4.000000,-1.000000,607.571838,383.638428,38.009094,25.865417,1.000000\n4.000000,-1.000000,617.501221,400.685608,36.994751,22.864105,1.000000\n4.000000,-1.000000,625.418945,412.719574,37.013611,28.878601,1.000000\n4.000000,-1.000000,636.347778,431.754578,32.995056,22.894012,1.000000\n4.000000,-1.000000,641.268066,443.803528,37.004761,27.874207,1.000000\n4.000000,-1.000000,656.113953,475.857971,34.994873,27.894196,1.000000\n4.000000,-1.000000,666.042358,491.911591,34.984924,25.890350,1.000000\n4.000000,-1.000000,671.963074,507.948334,34.994934,24.879974,1.000000\n4.000000,-1.000000,679.877747,523.995972,36.999695,24.874939,1.000000\n4.000000,-1.000000,689.797180,542.015564,31.006165,21.901672,1.000000\n4.000000,-1.000000,693.718140,554.062622,38.004089,28.884583,1.000000\n4.000000,-1.000000,701.623779,571.111694,40.024902,28.863647,1.000000\n4.000000,-1.000000,652.903198,527.753357,25.870361,36.024231,1.000000\n4.000000,-1.000000,627.118530,482.634552,26.873779,37.018646,1.000000\n4.000000,-1.000000,604.364136,434.513428,26.882751,32.029541,1.000000\n4.000000,-1.000000,565.666687,374.321503,21.910645,26.015015,1.000000\n4.000000,-1.000000,177.919052,102.355011,18.104370,28.033783,1.000000\n4.000000,-1.000000,186.059097,74.399574,18.109329,27.015869,1.000000\n4.000000,-1.000000,190.193420,41.439320,21.129562,34.010654,1.000000\n5.000000,-1.000000,833.116089,515.099182,60.003540,20.000549,1.000000\n5.000000,-1.000000,836.663086,443.106598,54.998352,19.005096,1.000000\n5.000000,-1.000000,831.532288,417.405731,58.014587,20.713684,1.000000\n5.000000,-1.000000,834.501587,392.386200,55.915039,19.005066,1.000000\n5.000000,-1.000000,833.392517,369.390381,59.913635,20.710693,1.000000\n5.000000,-1.000000,839.068909,324.365295,55.102051,20.726685,1.000000\n5.000000,-1.000000,837.943787,281.365997,53.924194,19.741211,1.000000\n5.000000,-1.000000,840.758606,262.356964,53.003479,15.741547,1.000000\n5.000000,-1.000000,841.638306,238.352814,53.021545,17.740356,1.000000\n5.000000,-1.000000,841.528625,216.354492,54.015930,19.733139,1.000000\n5.000000,-1.000000,841.508667,195.348557,57.010254,18.720825,1.000000\n5.000000,-1.000000,836.316040,173.377075,59.009094,16.001846,1.000000\n5.000000,-1.000000,839.215637,153.364670,48.085205,16.759857,1.000000\n5.000000,-1.000000,840.195129,131.354340,60.916138,18.004623,1.000000\n5.000000,-1.000000,838.001770,110.368332,57.004211,17.002274,1.000000\n5.000000,-1.000000,844.897034,89.335640,56.084595,16.999115,1.000000\n5.000000,-1.000000,840.770630,64.356071,63.015747,23.694901,1.000000\n5.000000,-1.000000,841.676270,45.351311,55.005432,19.728172,1.000000\n5.000000,-1.000000,840.665894,25.350996,55.926025,18.730597,1.000000\n5.000000,-1.000000,557.093079,86.655365,41.831299,51.014542,1.000000\n5.000000,-1.000000,569.368469,169.659531,62.075195,44.790710,1.000000\n5.000000,-1.000000,579.262939,147.601379,64.069031,46.793488,1.000000\n5.000000,-1.000000,837.866882,466.369659,55.003418,18.730804,1.000000\n5.000000,-1.000000,837.231567,540.373047,59.918640,19.711365,1.000000\n5.000000,-1.000000,617.889526,71.413086,63.052612,42.789322,1.000000\n5.000000,-1.000000,834.344971,563.389893,59.004028,17.709351,1.000000\n5.000000,-1.000000,781.906982,492.653961,38.069031,13.811493,1.000000\n5.000000,-1.000000,781.797302,470.439148,43.089050,18.213043,1.000000\n5.000000,-1.000000,771.439087,398.705902,55.117981,23.724915,1.000000\n5.000000,-1.000000,772.338684,378.700378,53.004517,18.740784,1.000000\n5.000000,-1.000000,768.203369,351.719849,61.120605,23.694977,1.000000\n5.000000,-1.000000,770.188232,328.706116,59.011108,21.709076,1.000000\n5.000000,-1.000000,766.969604,304.726868,61.107544,21.694153,1.000000\n5.000000,-1.000000,770.945374,283.701019,50.934875,17.755280,1.000000\n5.000000,-1.000000,768.739014,258.716339,59.009033,22.714508,1.000000\n5.000000,-1.000000,757.625671,235.773438,70.102417,20.648834,1.000000\n5.000000,-1.000000,769.515015,213.712219,57.108948,21.717148,1.000000\n5.000000,-1.000000,772.411621,192.696304,54.087646,18.002716,1.000000\n5.000000,-1.000000,767.385559,166.716187,62.919983,23.698074,1.000000\n5.000000,-1.000000,780.196594,149.658157,50.004211,17.754288,1.000000\n5.000000,-1.000000,798.927368,95.564873,35.002869,10.829727,1.000000\n5.000000,-1.000000,788.990906,108.614883,44.084473,16.779793,1.000000\n5.000000,-1.000000,776.101135,129.393356,58.083374,17.994659,1.000000\n5.000000,-1.000000,830.535767,598.407654,71.916748,23.650146,1.000000\n5.000000,-1.000000,606.029114,101.486717,61.054810,39.790977,1.000000\n5.000000,-1.000000,629.792908,52.353260,58.034546,40.818584,1.000000\n5.000000,-1.000000,371.627686,16.665630,52.968597,31.787601,1.000000\n5.000000,-1.000000,195.243835,145.549408,50.989716,25.795609,1.000000\n5.000000,-1.000000,193.134262,121.565178,60.973999,30.735893,1.000000\n5.000000,-1.000000,203.984344,96.511009,48.994858,21.801613,1.000000\n5.000000,-1.000000,204.884033,72.491974,59.985565,28.759033,1.000000\n5.000000,-1.000000,218.649612,26.436949,54.985428,27.771345,1.000000\n5.000000,-1.000000,226.524323,0.000000,54.980438,29.168877,1.000000\n5.000000,-1.000000,379.507416,0.000000,55.970917,25.399733,1.000000\n5.000000,-1.000000,367.753662,41.690296,50.964813,31.800335,1.000000\n5.000000,-1.000000,661.535217,2.209565,49.034790,36.839592,1.000000\n5.000000,-1.000000,356.962433,86.747093,51.984131,30.792603,1.000000\n5.000000,-1.000000,253.457916,190.265320,70.022644,28.687195,1.000000\n5.000000,-1.000000,175.354034,171.659180,35.979355,15.852249,1.000000\n5.000000,-1.000000,208.397934,177.489182,47.998367,25.800583,1.000000\n5.000000,-1.000000,323.525452,205.922058,34.989899,19.852829,1.000000\n5.000000,-1.000000,357.580780,214.756317,35.974365,19.835938,1.000000\n5.000000,-1.000000,391.536377,205.577988,52.978546,22.769363,1.000000\n5.000000,-1.000000,399.431061,183.537720,41.974915,22.834198,1.000000\n5.000000,-1.000000,405.331879,164.507721,45.973572,22.804260,1.000000\n5.000000,-1.000000,409.235809,143.486816,46.975067,23.807785,1.000000\n5.000000,-1.000000,419.147339,124.437889,38.968597,22.846230,1.000000\n5.000000,-1.000000,421.021484,102.424194,36.974792,21.859116,1.000000\n5.000000,-1.000000,426.927307,81.393547,45.983551,25.820740,1.000000\n5.000000,-1.000000,437.686584,35.351349,54.995422,26.763363,1.000000\n5.000000,-1.000000,440.593140,9.321395,55.962860,31.775482,1.000000\n5.000000,-1.000000,316.407867,178.951492,71.002106,28.685150,1.000000\n5.000000,-1.000000,324.297516,155.907852,67.004456,30.710968,1.000000\n5.000000,-1.000000,324.182831,129.898834,73.999481,34.693649,1.000000\n5.000000,-1.000000,836.049744,305.150757,46.003479,16.001862,1.000000\n5.000000,-1.000000,985.869812,465.631653,37.130188,19.520721,1.000000\n5.000000,-1.000000,992.460876,402.602936,30.539124,17.566040,1.000000\n5.000000,-1.000000,996.598328,217.447403,26.401672,12.132050,1.000000\n5.000000,-1.000000,990.889893,488.610443,32.110107,13.996002,1.000000\n5.000000,-1.000000,993.993896,509.596436,29.006104,13.994995,1.000000\n5.000000,-1.000000,999.089783,528.571594,23.910217,15.401672,1.000000\n5.000000,-1.000000,989.258057,548.615967,33.741943,14.538696,1.000000\n5.000000,-1.000000,966.452759,601.452148,56.547241,20.281494,1.000000\n5.000000,-1.000000,982.283020,567.655945,40.716980,16.578003,1.000000\n5.000000,-1.000000,758.511169,12.714990,138.035889,603.403137,1.000000\n5.000000,-1.000000,571.295349,332.352631,195.110535,289.667145,1.000000\n5.000000,-1.000000,556.308044,0.000000,182.106140,214.450241,1.000000\n5.000000,-1.000000,330.405762,0.000000,170.121033,225.301163,1.000000\n5.000000,-1.000000,179.224091,0.000000,106.795105,175.331787,1.000000\n5.000000,-1.000000,594.245239,335.373871,55.974915,43.168823,1.000000\n5.000000,-1.000000,603.341919,366.394012,33.982422,24.118866,1.000000\n5.000000,-1.000000,606.424927,382.361847,37.989136,26.134674,1.000000\n5.000000,-1.000000,616.493958,399.319244,37.004700,23.133392,1.000000\n5.000000,-1.000000,624.581177,411.283417,36.983765,29.117981,1.000000\n5.000000,-1.000000,635.649658,430.248596,33.005066,23.103455,1.000000\n5.000000,-1.000000,640.729553,442.197815,36.994751,28.123566,1.000000\n5.000000,-1.000000,655.884583,474.142578,35.004822,28.103607,1.000000\n5.000000,-1.000000,665.952576,490.086487,35.014832,26.109741,1.000000\n5.000000,-1.000000,672.032898,506.053436,35.004883,25.119354,1.000000\n5.000000,-1.000000,680.117126,522.001343,36.999695,25.124268,1.000000\n5.000000,-1.000000,690.196106,539.981018,30.996216,22.101135,1.000000\n5.000000,-1.000000,694.276611,551.938293,37.994141,29.114014,1.000000\n5.000000,-1.000000,702.371765,568.887634,39.975037,29.132935,1.000000\n5.000000,-1.000000,653.092712,526.247375,26.129700,35.974365,1.000000\n5.000000,-1.000000,626.879211,481.367950,27.123108,36.978790,1.000000\n5.000000,-1.000000,603.636108,433.486176,27.112122,31.969696,1.000000\n5.000000,-1.000000,564.330261,373.683197,22.090149,25.985138,1.000000\n5.000000,-1.000000,174.089310,105.656158,17.894928,27.963974,1.000000\n5.000000,-1.000000,181.950104,77.610962,17.889938,26.985947,1.000000\n5.000000,-1.000000,185.815155,44.570930,20.870270,33.990700,1.000000\n6.000000,-1.000000,833.323547,511.299042,60.007507,19.998566,1.000000\n6.000000,-1.000000,835.962585,439.323608,54.992859,19.013184,1.000000\n6.000000,-1.000000,830.572998,414.223694,58.038696,20.143127,1.000000\n6.000000,-1.000000,833.482178,389.166779,55.739929,19.013123,1.000000\n6.000000,-1.000000,832.153748,366.183197,59.738220,20.130188,1.000000\n6.000000,-1.000000,837.181335,321.112701,55.306030,20.176147,1.000000\n6.000000,-1.000000,835.807007,278.117706,53.769226,19.220642,1.000000\n6.000000,-1.000000,838.252502,259.090637,53.008179,15.221375,1.000000\n6.000000,-1.000000,838.892761,235.078888,53.056152,17.219986,1.000000\n6.000000,-1.000000,838.563721,213.082764,54.040405,19.202576,1.000000\n6.000000,-1.000000,838.503845,192.068939,57.024536,18.160461,1.000000\n6.000000,-1.000000,832.922791,170.159470,59.023132,16.000259,1.000000\n6.000000,-1.000000,835.622620,150.119141,48.250000,16.279449,1.000000\n6.000000,-1.000000,836.562134,128.091064,60.740540,18.012802,1.000000\n6.000000,-1.000000,833.979980,107.137047,57.008545,17.000580,1.000000\n6.000000,-1.000000,840.665161,86.036629,56.248596,16.997429,1.000000\n6.000000,-1.000000,836.289856,61.099461,63.039368,23.084156,1.000000\n6.000000,-1.000000,837.005920,42.086609,55.009888,19.187645,1.000000\n6.000000,-1.000000,835.975708,22.088284,55.770874,18.190174,1.000000\n6.000000,-1.000000,553.278748,85.999535,41.488098,51.039406,1.000000\n6.000000,-1.000000,566.101501,169.005447,62.218567,44.367355,1.000000\n6.000000,-1.000000,575.785522,146.829788,64.202271,46.379929,1.000000\n6.000000,-1.000000,837.575195,463.112946,55.007874,18.190369,1.000000\n6.000000,-1.000000,837.667969,537.118958,59.753113,19.130920,1.000000\n6.000000,-1.000000,613.660339,70.270103,63.156006,42.366180,1.000000\n6.000000,-1.000000,835.010986,560.163391,59.008179,17.129211,1.000000\n6.000000,-1.000000,781.700623,489.963104,38.204834,13.431122,1.000000\n6.000000,-1.000000,781.371521,467.321655,43.264282,18.640076,1.000000\n6.000000,-1.000000,770.296265,396.124115,55.351868,23.174042,1.000000\n6.000000,-1.000000,770.996338,376.110596,53.009216,18.220337,1.000000\n6.000000,-1.000000,766.592163,349.172638,61.353882,23.084259,1.000000\n6.000000,-1.000000,768.546875,326.131317,59.025208,21.128448,1.000000\n6.000000,-1.000000,764.889709,302.194336,61.320923,21.083618,1.000000\n6.000000,-1.000000,768.815247,281.120697,50.800110,17.264832,1.000000\n6.000000,-1.000000,766.200195,256.168457,59.023132,22.143738,1.000000\n6.000000,-1.000000,754.858582,233.337524,70.304932,19.948669,1.000000\n6.000000,-1.000000,766.527344,211.158813,57.322693,21.146515,1.000000\n6.000000,-1.000000,769.214172,190.115067,54.261902,18.000916,1.000000\n6.000000,-1.000000,764.138794,164.177444,62.754150,23.087326,1.000000\n6.000000,-1.000000,776.569580,147.001419,50.009216,17.263824,1.000000\n6.000000,-1.000000,794.759949,92.724014,35.009338,10.489571,1.000000\n6.000000,-1.000000,784.954163,105.872475,44.249573,16.339302,1.000000\n6.000000,-1.000000,772.285034,126.210052,58.247131,17.982895,1.000000\n6.000000,-1.000000,831.581177,595.217590,71.750061,22.949646,1.000000\n6.000000,-1.000000,602.080322,100.490334,61.158447,39.368141,1.000000\n6.000000,-1.000000,625.372986,51.092480,58.098572,40.455486,1.000000\n6.000000,-1.000000,366.894348,18.031368,52.903503,31.365559,1.000000\n6.000000,-1.000000,191.754791,148.677567,50.964676,25.384155,1.000000\n6.000000,-1.000000,189.425995,124.725647,60.918076,30.204269,1.000000\n6.000000,-1.000000,199.975800,99.564270,48.980011,21.400520,1.000000\n6.000000,-1.000000,200.675919,75.507729,59.949692,28.277443,1.000000\n6.000000,-1.000000,213.971405,29.347569,54.950043,27.309822,1.000000\n6.000000,-1.000000,221.596008,1.217553,54.935059,30.323120,1.000000\n6.000000,-1.000000,374.533966,0.000000,55.905487,26.236027,1.000000\n6.000000,-1.000000,363.270050,43.103424,50.889954,31.398224,1.000000\n6.000000,-1.000000,656.593506,0.664549,49.099731,36.516792,1.000000\n6.000000,-1.000000,352.898804,88.275406,51.949036,30.370674,1.000000\n6.000000,-1.000000,250.391907,192.820557,70.065582,28.056030,1.000000\n6.000000,-1.000000,172.086349,175.004150,35.935898,15.551468,1.000000\n6.000000,-1.000000,205.216751,180.494492,47.993591,25.399078,1.000000\n6.000000,-1.000000,320.592133,207.787582,34.966461,19.561630,1.000000\n6.000000,-1.000000,354.753754,216.291855,35.920929,19.504837,1.000000\n6.000000,-1.000000,388.616211,206.755386,52.933380,22.308319,1.000000\n6.000000,-1.000000,396.300659,184.637543,41.920898,22.502777,1.000000\n6.000000,-1.000000,402.001434,165.549591,45.919159,22.413025,1.000000\n6.000000,-1.000000,405.715485,144.490875,46.920532,23.416458,1.000000\n6.000000,-1.000000,415.446503,125.344116,38.904907,22.534775,1.000000\n6.000000,-1.000000,417.071136,103.302681,36.921265,21.577698,1.000000\n6.000000,-1.000000,422.786896,82.214302,45.949066,25.459129,1.000000\n6.000000,-1.000000,433.066345,36.086906,54.980042,26.291962,1.000000\n6.000000,-1.000000,435.783142,9.999717,55.887512,31.323505,1.000000\n6.000000,-1.000000,313.235870,180.879547,71.005035,28.053970,1.000000\n6.000000,-1.000000,320.905334,157.748444,67.007751,30.129456,1.000000\n6.000000,-1.000000,320.561279,131.722046,73.992126,34.081833,1.000000\n6.000000,-1.000000,834.122559,301.471252,46.008911,16.000244,1.000000\n6.000000,-1.000000,985.573364,460.898956,37.426636,19.159607,1.000000\n6.000000,-1.000000,991.345947,397.816681,31.654053,17.269470,1.000000\n6.000000,-1.000000,993.757568,212.321442,29.242432,12.439087,1.000000\n6.000000,-1.000000,990.632812,483.835571,32.367188,13.984619,1.000000\n6.000000,-1.000000,993.945923,504.789581,29.054077,13.983612,1.000000\n6.000000,-1.000000,999.230835,523.712952,23.769165,15.147339,1.000000\n6.000000,-1.000000,989.739197,543.845093,33.260803,14.207947,1.000000\n6.000000,-1.000000,967.325073,596.364380,55.674927,20.830505,1.000000\n6.000000,-1.000000,982.814697,562.962952,40.185303,16.168152,1.000000\n6.000000,-1.000000,759.513916,10.181582,132.098022,602.166260,1.000000\n6.000000,-1.000000,569.883179,331.073975,197.315186,288.980103,1.000000\n6.000000,-1.000000,552.922729,0.000000,179.185669,213.372803,1.000000\n6.000000,-1.000000,327.232391,0.000000,168.348816,225.928070,1.000000\n6.000000,-1.000000,175.696747,0.000000,105.745575,178.018158,1.000000\n6.000000,-1.000000,592.731079,334.134827,55.919556,43.503601,1.000000\n6.000000,-1.000000,602.016357,365.191742,33.949097,24.355865,1.000000\n6.000000,-1.000000,605.268616,381.098145,37.965393,26.401367,1.000000\n6.000000,-1.000000,615.476257,397.964111,37.010986,23.400360,1.000000\n6.000000,-1.000000,623.732239,409.857269,36.950134,29.354462,1.000000\n6.000000,-1.000000,634.939209,428.750763,33.011780,23.310608,1.000000\n6.000000,-1.000000,640.178223,440.599091,36.981079,28.370056,1.000000\n6.000000,-1.000000,655.640869,472.430908,35.011292,28.310272,1.000000\n6.000000,-1.000000,665.847534,488.263550,35.041260,26.326599,1.000000\n6.000000,-1.000000,672.086792,504.159088,35.011353,25.356171,1.000000\n6.000000,-1.000000,680.339722,520.005676,36.996033,25.371094,1.000000\n6.000000,-1.000000,690.577332,537.943665,30.983154,22.298401,1.000000\n6.000000,-1.000000,694.817017,549.810059,37.980347,29.340454,1.000000\n6.000000,-1.000000,703.100830,566.657898,39.921204,29.399353,1.000000\n6.000000,-1.000000,653.268127,524.739990,26.386414,35.920959,1.000000\n6.000000,-1.000000,626.628418,480.104401,27.369751,36.935211,1.000000\n6.000000,-1.000000,602.898987,432.466736,27.338745,31.906677,1.000000\n6.000000,-1.000000,562.988647,373.058685,22.267456,25.952606,1.000000\n6.000000,-1.000000,170.293182,108.997726,17.683716,27.891373,1.000000\n6.000000,-1.000000,177.873932,80.865562,17.668762,26.953339,1.000000\n6.000000,-1.000000,181.469360,47.749035,20.608887,33.967365,1.000000\n7.000000,-1.000000,833.498962,507.498993,60.005554,20.490326,1.000000\n7.000000,-1.000000,835.229858,435.547852,54.981934,19.019379,1.000000\n7.000000,-1.000000,829.581970,411.051392,58.057129,19.570557,1.000000\n7.000000,-1.000000,832.430725,385.959564,55.559326,19.019318,1.000000\n7.000000,-1.000000,830.883179,362.990540,59.556763,20.019440,1.000000\n7.000000,-1.000000,835.261414,317.508148,55.504517,19.994537,1.000000\n7.000000,-1.000000,833.638000,274.892670,53.608948,18.698151,1.000000\n7.000000,-1.000000,835.713989,255.528290,53.007629,15.020844,1.000000\n7.000000,-1.000000,836.114746,231.832520,53.085449,16.697891,1.000000\n7.000000,-1.000000,835.566284,209.840759,54.059631,18.670090,1.000000\n7.000000,-1.000000,835.466553,188.821136,57.033142,17.598282,1.000000\n7.000000,-1.000000,829.497620,166.975861,59.031372,15.997070,1.000000\n7.000000,-1.000000,831.997437,146.710999,48.409912,16.192596,1.000000\n7.000000,-1.000000,832.896851,124.370201,60.558960,18.514946,1.000000\n7.000000,-1.000000,829.926208,103.525116,57.007202,17.418114,1.000000\n7.000000,-1.000000,836.400635,82.383995,56.406921,17.390038,1.000000\n7.000000,-1.000000,831.776855,57.887695,63.056763,22.471115,1.000000\n7.000000,-1.000000,832.303284,38.494701,55.008850,19.368053,1.000000\n7.000000,-1.000000,831.253296,18.874302,55.610107,18.018909,1.000000\n7.000000,-1.000000,549.460388,85.386078,41.140747,51.059189,1.000000\n7.000000,-1.000000,562.829163,168.385468,62.355774,43.939606,1.000000\n7.000000,-1.000000,572.301819,146.094528,64.329163,45.961746,1.000000\n7.000000,-1.000000,837.251099,459.861084,55.006897,18.019165,1.000000\n7.000000,-1.000000,838.071960,533.391602,59.581665,19.019348,1.000000\n7.000000,-1.000000,609.421021,69.171051,63.253174,41.938835,1.000000\n7.000000,-1.000000,835.644958,556.483215,59.006409,17.467957,1.000000\n7.000000,-1.000000,781.467468,487.274414,38.336853,13.049469,1.000000\n7.000000,-1.000000,780.918945,464.208618,43.435181,19.065247,1.000000\n7.000000,-1.000000,769.127747,393.553864,55.580261,22.620850,1.000000\n7.000000,-1.000000,769.628235,373.213165,53.008606,18.290527,1.000000\n7.000000,-1.000000,764.955566,346.641663,61.581055,22.994965,1.000000\n7.000000,-1.000000,766.880005,323.574951,59.033386,20.545746,1.000000\n7.000000,-1.000000,762.784729,299.682648,61.528137,20.991638,1.000000\n7.000000,-1.000000,766.659546,278.563324,50.660400,16.772705,1.000000\n7.000000,-1.000000,763.636108,253.645996,59.031372,21.570801,1.000000\n7.000000,-1.000000,752.067383,230.929321,70.500366,19.246506,1.000000\n7.000000,-1.000000,763.514343,208.635345,57.530762,20.993668,1.000000\n7.000000,-1.000000,765.991211,187.565842,54.430603,17.997330,1.000000\n7.000000,-1.000000,760.866943,161.673294,62.582092,22.474289,1.000000\n7.000000,-1.000000,772.916199,144.133560,50.009277,17.240524,1.000000\n7.000000,-1.000000,790.564392,89.924866,35.012329,10.148369,1.000000\n7.000000,-1.000000,780.890198,103.170464,44.410400,15.897179,1.000000\n7.000000,-1.000000,768.443054,123.065125,58.405090,18.417221,1.000000\n7.000000,-1.000000,832.594849,592.019226,71.576111,22.246887,1.000000\n7.000000,-1.000000,598.122559,99.534882,61.255981,38.941391,1.000000\n7.000000,-1.000000,620.941833,49.877541,58.156860,40.088364,1.000000\n7.000000,-1.000000,362.175476,19.446239,52.833099,30.940395,1.000000\n7.000000,-1.000000,188.297592,151.841858,50.934586,24.970169,1.000000\n7.000000,-1.000000,185.749817,127.924637,60.856079,29.669632,1.000000\n7.000000,-1.000000,195.998291,102.658546,48.960297,20.997299,1.000000\n7.000000,-1.000000,196.498795,78.566902,59.907852,27.793045,1.000000\n7.000000,-1.000000,209.322861,32.306198,54.909164,26.845581,1.000000\n7.000000,-1.000000,216.696594,4.092010,54.884216,29.868248,1.000000\n7.000000,-1.000000,369.574158,0.000000,55.834534,27.120638,1.000000\n7.000000,-1.000000,358.801239,44.563190,50.810028,30.992992,1.000000\n7.000000,-1.000000,651.637451,0.000000,49.159790,35.360756,1.000000\n7.000000,-1.000000,348.850983,89.845856,51.908752,29.945732,1.000000\n7.000000,-1.000000,247.351929,195.407562,70.101501,27.422058,1.000000\n7.000000,-1.000000,168.852493,178.382660,35.888840,15.249146,1.000000\n7.000000,-1.000000,202.066071,183.532776,47.984039,24.995056,1.000000\n7.000000,-1.000000,317.677826,209.683365,34.939545,19.268494,1.000000\n7.000000,-1.000000,351.942352,217.856812,35.863922,19.171783,1.000000\n7.000000,-1.000000,385.708344,207.963165,52.882935,21.845047,1.000000\n7.000000,-1.000000,393.181793,185.769928,41.862671,22.169144,1.000000\n7.000000,-1.000000,398.681946,166.625916,45.860138,22.019562,1.000000\n7.000000,-1.000000,402.205750,145.531494,46.861298,23.022812,1.000000\n7.000000,-1.000000,411.755280,126.288795,38.837341,22.221107,1.000000\n7.000000,-1.000000,413.130249,104.221809,36.864044,21.294151,1.000000\n7.000000,-1.000000,418.655334,83.077805,45.910004,25.094986,1.000000\n7.000000,-1.000000,428.453979,36.869801,54.959137,25.817947,1.000000\n7.000000,-1.000000,430.980713,10.727969,55.806610,30.868416,1.000000\n7.000000,-1.000000,310.083649,182.840530,71.000916,27.420013,1.000000\n7.000000,-1.000000,317.532135,159.624268,67.004425,29.544952,1.000000\n7.000000,-1.000000,316.958771,133.583084,73.977386,33.466629,1.000000\n7.000000,-1.000000,832.163391,297.812683,46.009705,16.143738,1.000000\n7.000000,-1.000000,985.229797,456.171356,37.770203,19.019318,1.000000\n7.000000,-1.000000,990.183350,393.041779,32.816650,16.969208,1.000000\n7.000000,-1.000000,990.868958,207.164917,32.131042,12.805267,1.000000\n7.000000,-1.000000,990.328064,479.026978,32.671936,14.008392,1.000000\n7.000000,-1.000000,993.850037,499.967773,29.149963,13.986511,1.000000\n7.000000,-1.000000,999.323425,518.853149,23.676575,14.899414,1.000000\n7.000000,-1.000000,990.172791,538.953552,32.827209,14.139282,1.000000\n7.000000,-1.000000,968.152100,591.284302,54.847900,21.361328,1.000000\n7.000000,-1.000000,983.299561,558.264893,39.700439,15.994080,1.000000\n7.000000,-1.000000,758.503296,7.698089,133.023132,601.138062,1.000000\n7.000000,-1.000000,568.465332,329.813293,199.500183,288.264282,1.000000\n7.000000,-1.000000,549.533325,0.000000,176.330688,212.325073,1.000000\n7.000000,-1.000000,324.077393,0.000000,166.559875,226.583420,1.000000\n7.000000,-1.000000,172.202850,0.000000,104.648865,180.737747,1.000000\n7.000000,-1.000000,591.208923,332.913452,55.858521,43.834045,1.000000\n7.000000,-1.000000,600.681824,364.004089,33.912415,24.590393,1.000000\n7.000000,-1.000000,604.103027,379.847473,37.937927,26.665436,1.000000\n7.000000,-1.000000,614.448242,396.620331,37.013672,23.665009,1.000000\n7.000000,-1.000000,622.872131,408.441284,36.912903,29.588043,1.000000\n7.000000,-1.000000,634.216553,427.261200,33.015137,23.515442,1.000000\n7.000000,-1.000000,639.614136,439.007446,36.963684,28.613770,1.000000\n7.000000,-1.000000,655.382874,470.723206,35.014343,28.514099,1.000000\n7.000000,-1.000000,665.727112,486.442993,35.064270,26.540771,1.000000\n7.000000,-1.000000,672.124756,502.265533,35.014404,25.590546,1.000000\n7.000000,-1.000000,680.545593,518.009216,36.988708,25.615479,1.000000\n7.000000,-1.000000,690.940735,535.903748,30.967041,22.493469,1.000000\n7.000000,-1.000000,695.339172,547.678040,37.962830,29.563965,1.000000\n7.000000,-1.000000,703.810852,564.422791,39.863403,29.662781,1.000000\n7.000000,-1.000000,653.429565,523.231323,26.640503,35.863953,1.000000\n7.000000,-1.000000,626.366211,478.844025,27.613708,36.887909,1.000000\n7.000000,-1.000000,602.152771,431.455231,27.562744,31.840485,1.000000\n7.000000,-1.000000,561.641968,372.447968,22.442566,25.917542,1.000000\n7.000000,-1.000000,166.531052,112.379379,17.470734,27.816010,1.000000\n7.000000,-1.000000,173.831009,84.163048,17.445831,26.918045,1.000000\n7.000000,-1.000000,177.156433,50.973316,20.345444,33.940647,1.000000\n8.000000,-1.000000,833.642456,503.699402,59.997620,21.082764,1.000000\n8.000000,-1.000000,834.465027,431.779694,54.965515,19.023682,1.000000\n8.000000,-1.000000,828.559448,407.889130,58.069702,18.996063,1.000000\n8.000000,-1.000000,831.347473,382.764893,55.373108,19.023590,1.000000\n8.000000,-1.000000,829.580872,359.812683,59.369385,20.023468,1.000000\n8.000000,-1.000000,833.309326,313.745300,55.697449,19.988586,1.000000\n8.000000,-1.000000,831.437012,271.691223,53.443298,18.173828,1.000000\n8.000000,-1.000000,833.143250,251.783951,53.001770,15.026321,1.000000\n8.000000,-1.000000,833.304504,228.613998,53.109497,16.174149,1.000000\n8.000000,-1.000000,832.536743,206.628815,54.073364,18.135757,1.000000\n8.000000,-1.000000,832.397095,185.605484,57.036072,17.034348,1.000000\n8.000000,-1.000000,826.040833,163.767166,59.033691,16.051697,1.000000\n8.000000,-1.000000,828.340454,143.058960,48.565063,16.666641,1.000000\n8.000000,-1.000000,829.199646,120.585167,60.371277,19.117989,1.000000\n8.000000,-1.000000,825.840820,99.806168,57.000183,17.981560,1.000000\n8.000000,-1.000000,832.103821,78.611488,56.559692,17.943527,1.000000\n8.000000,-1.000000,827.231995,54.721100,63.067871,21.950172,1.000000\n8.000000,-1.000000,827.568726,34.775211,55.002441,19.910973,1.000000\n8.000000,-1.000000,826.499084,15.709368,55.443909,18.023512,1.000000\n8.000000,-1.000000,545.638245,84.815056,40.789307,51.073891,1.000000\n8.000000,-1.000000,559.551758,167.799667,62.486816,43.507492,1.000000\n8.000000,-1.000000,568.812073,145.395660,64.449646,45.539001,1.000000\n8.000000,-1.000000,836.894592,456.614410,55.000549,18.023773,1.000000\n8.000000,-1.000000,838.443542,529.544373,59.404236,19.023621,1.000000\n8.000000,-1.000000,605.171997,68.116051,63.343994,41.507309,1.000000\n8.000000,-1.000000,836.246704,552.669006,58.998779,18.051331,1.000000\n8.000000,-1.000000,781.207458,484.261902,38.465149,13.319092,1.000000\n8.000000,-1.000000,780.439636,461.100311,43.601807,19.488556,1.000000\n8.000000,-1.000000,767.933716,390.995361,55.803101,22.065430,1.000000\n8.000000,-1.000000,768.234436,370.122040,53.002869,18.803833,1.000000\n8.000000,-1.000000,763.293823,344.127136,61.802124,22.988098,1.000000\n8.000000,-1.000000,765.187805,321.037384,59.035706,20.023529,1.000000\n8.000000,-1.000000,760.654785,297.059906,61.729248,21.117584,1.000000\n8.000000,-1.000000,764.478577,276.029205,50.515564,16.278870,1.000000\n8.000000,-1.000000,761.046997,251.089844,59.033691,21.055115,1.000000\n8.000000,-1.000000,749.252319,228.549072,70.688782,18.987732,1.000000\n8.000000,-1.000000,760.476318,206.142044,57.733093,20.987396,1.000000\n8.000000,-1.000000,762.742920,185.048889,54.593994,17.991959,1.000000\n8.000000,-1.000000,757.570374,159.203979,62.403809,21.859024,1.000000\n8.000000,-1.000000,769.236938,141.050949,50.004272,17.734192,1.000000\n8.000000,-1.000000,786.341125,86.946007,35.011902,10.027847,1.000000\n8.000000,-1.000000,776.799500,100.509117,44.566711,15.453476,1.000000\n8.000000,-1.000000,764.575562,119.958885,58.557251,18.980370,1.000000\n8.000000,-1.000000,833.576599,588.812927,71.395142,21.541931,1.000000\n8.000000,-1.000000,594.156250,98.620461,61.347412,38.510750,1.000000\n8.000000,-1.000000,616.499817,48.708569,58.209351,39.717258,1.000000\n8.000000,-1.000000,357.471466,20.910103,52.757507,30.512154,1.000000\n8.000000,-1.000000,184.872589,155.041992,50.899414,24.553696,1.000000\n8.000000,-1.000000,182.106079,131.161819,60.788055,29.132050,1.000000\n8.000000,-1.000000,192.052231,105.793541,48.935684,20.591988,1.000000\n8.000000,-1.000000,192.353043,81.669182,59.860077,27.305878,1.000000\n8.000000,-1.000000,204.704407,35.312538,54.862854,26.378670,1.000000\n8.000000,-1.000000,211.826538,7.016986,54.827911,29.410404,1.000000\n8.000000,-1.000000,364.628540,0.000000,55.758026,28.053478,1.000000\n8.000000,-1.000000,354.347687,46.069450,50.725037,30.584679,1.000000\n8.000000,-1.000000,646.667542,0.000000,49.214905,33.587578,1.000000\n8.000000,-1.000000,344.819397,91.458298,51.863312,29.517815,1.000000\n8.000000,-1.000000,244.338272,198.026047,70.130447,26.785355,1.000000\n8.000000,-1.000000,165.652756,181.794342,35.838226,14.945297,1.000000\n8.000000,-1.000000,198.946213,186.603729,47.969727,24.588547,1.000000\n8.000000,-1.000000,314.782867,211.609207,34.909149,18.973434,1.000000\n8.000000,-1.000000,349.146881,219.451019,35.803345,18.836838,1.000000\n8.000000,-1.000000,382.813019,209.201172,52.827240,21.379608,1.000000\n8.000000,-1.000000,390.074738,186.934753,41.800323,21.833298,1.000000\n8.000000,-1.000000,395.373718,167.736588,45.796600,21.623917,1.000000\n8.000000,-1.000000,398.706940,146.608551,46.797424,22.626877,1.000000\n8.000000,-1.000000,408.074066,127.271851,38.765869,21.905212,1.000000\n8.000000,-1.000000,409.199188,105.181503,36.803162,21.008476,1.000000\n8.000000,-1.000000,414.533081,83.983978,45.866364,24.728340,1.000000\n8.000000,-1.000000,423.849915,37.699955,54.932800,25.341362,1.000000\n8.000000,-1.000000,426.186340,11.506083,55.720154,30.410254,1.000000\n8.000000,-1.000000,306.951538,184.834244,70.989685,26.783325,1.000000\n8.000000,-1.000000,314.178284,161.535126,66.994415,28.957535,1.000000\n8.000000,-1.000000,313.375641,135.481766,73.955322,32.848099,1.000000\n8.000000,-1.000000,830.172302,294.175415,46.005981,16.597839,1.000000\n8.000000,-1.000000,984.839111,451.449310,38.160889,19.023621,1.000000\n8.000000,-1.000000,988.973145,388.278687,34.026855,16.954193,1.000000\n8.000000,-1.000000,987.932678,201.976730,35.067322,13.232147,1.000000\n8.000000,-1.000000,989.975830,473.928406,33.024170,14.324005,1.000000\n8.000000,-1.000000,993.706238,494.870575,29.293762,14.264587,1.000000\n8.000000,-1.000000,999.367554,513.992615,23.632446,14.656494,1.000000\n8.000000,-1.000000,990.558838,533.859253,32.441162,14.462646,1.000000\n8.000000,-1.000000,968.933777,586.210754,54.066223,21.875610,1.000000\n8.000000,-1.000000,983.737488,553.562256,39.262512,15.989319,1.000000\n8.000000,-1.000000,753.461548,5.264757,139.009094,601.088257,1.000000\n8.000000,-1.000000,567.041809,328.570770,201.665344,287.519806,1.000000\n8.000000,-1.000000,546.140137,0.000000,173.538757,211.307159,1.000000\n8.000000,-1.000000,320.941071,0.000000,164.754364,227.267181,1.000000\n8.000000,-1.000000,168.742737,0.000000,103.503784,183.490295,1.000000\n8.000000,-1.000000,589.678894,331.709900,55.791931,44.160126,1.000000\n8.000000,-1.000000,599.338501,362.831146,33.872375,24.822510,1.000000\n8.000000,-1.000000,602.928223,378.609955,37.906677,26.926849,1.000000\n8.000000,-1.000000,613.410095,395.287994,37.012573,23.927338,1.000000\n8.000000,-1.000000,622.001038,407.035583,36.871948,29.818695,1.000000\n8.000000,-1.000000,633.481689,425.780060,33.015320,23.717957,1.000000\n8.000000,-1.000000,639.037292,437.423065,36.942749,28.854614,1.000000\n8.000000,-1.000000,655.110657,469.019592,35.013794,28.715088,1.000000\n8.000000,-1.000000,665.591431,484.624969,35.083740,26.752319,1.000000\n8.000000,-1.000000,672.146851,500.372955,35.013855,25.822296,1.000000\n8.000000,-1.000000,680.734741,516.012207,36.977661,25.857178,1.000000\n8.000000,-1.000000,691.286377,533.861511,30.947815,22.686218,1.000000\n8.000000,-1.000000,695.843140,545.542419,37.941467,29.784668,1.000000\n8.000000,-1.000000,704.501831,562.182434,39.801636,29.923279,1.000000\n8.000000,-1.000000,653.576904,521.721558,26.891907,35.803406,1.000000\n8.000000,-1.000000,626.092651,477.586945,27.854858,36.837006,1.000000\n8.000000,-1.000000,601.397583,430.451721,27.783997,31.771118,1.000000\n8.000000,-1.000000,560.290283,371.851135,22.615479,25.879883,1.000000\n8.000000,-1.000000,162.803268,115.800781,17.256027,27.737869,1.000000\n8.000000,-1.000000,169.821701,87.503082,17.221176,26.880081,1.000000\n8.000000,-1.000000,172.876801,54.243454,20.079987,33.910561,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/det/det_obb.txt",
    "content": "1.000000,-1.000000,862.262878,539.240173,59.999321,20.000832,0.034907,1.000000,2.000000\n1.000000,-1.000000,866.292725,466.838013,54.999016,19.000315,0.034907,1.000000,2.000000\n1.000000,-1.000000,863.160645,442.187653,58.077854,18.974989,0.086572,1.000000,2.000000\n1.000000,-1.000000,866.537476,416.815247,55.346180,19.024078,0.071233,1.000000,2.000000\n1.000000,-1.000000,868.306702,394.837402,59.076084,20.025723,0.084835,1.000000,2.000000\n1.000000,-1.000000,873.407776,349.012878,55.370876,19.997467,0.053095,1.000000,2.000000\n1.000000,-1.000000,873.400452,305.986053,53.084126,18.027664,0.091476,1.000000,2.000000\n1.000000,-1.000000,876.515808,284.589661,53.008591,15.016784,0.053781,1.000000,2.000000\n1.000000,-1.000000,877.868408,262.474426,53.152523,15.960173,0.106387,1.000000,2.000000\n1.000000,-1.000000,879.221252,240.652344,54.084778,17.028685,0.090372,1.000000,2.000000\n1.000000,-1.000000,882.240784,219.236176,57.036079,17.024061,0.069995,1.000000,2.000000\n1.000000,-1.000000,878.460510,196.587967,59.033798,15.992846,0.068807,1.000000,2.000000\n1.000000,-1.000000,876.947876,176.032364,48.344177,15.997558,0.055703,1.000000,2.000000\n1.000000,-1.000000,885.176025,155.306732,60.709812,18.014027,0.051579,1.000000,2.000000\n1.000000,-1.000000,881.780029,133.672501,57.008713,16.999865,0.052457,1.000000,2.000000\n1.000000,-1.000000,889.175781,112.420433,56.000549,16.999321,0.034907,1.000000,2.000000\n1.000000,-1.000000,888.888550,91.347893,63.072853,21.926064,0.082463,1.000000,2.000000\n1.000000,-1.000000,886.987549,69.823402,55.010101,19.015139,0.053042,1.000000,2.000000\n1.000000,-1.000000,887.340637,50.317558,55.101841,18.027332,0.089371,1.000000,2.000000\n1.000000,-1.000000,593.882812,115.615814,49.606350,21.429480,2.088240,1.000000,2.000000\n1.000000,-1.000000,613.096008,195.835327,61.199314,17.992085,0.558174,1.000000,2.000000\n1.000000,-1.000000,624.838440,174.732391,62.312767,20.226809,0.564138,1.000000,2.000000\n1.000000,-1.000000,866.652832,489.857544,55.008179,18.015055,0.053095,1.000000,2.000000\n1.000000,-1.000000,865.423523,563.366150,59.109718,19.026541,0.085682,1.000000,2.000000\n1.000000,-1.000000,665.985046,99.622429,60.683601,20.181610,0.528823,1.000000,2.000000\n1.000000,-1.000000,861.266052,586.229065,59.008301,17.013884,0.051844,1.000000,2.000000\n1.000000,-1.000000,801.207703,511.093353,38.354958,12.996212,0.061228,1.000000,2.000000\n1.000000,-1.000000,804.404419,491.190979,42.999825,17.998850,0.034907,1.000000,2.000000\n1.000000,-1.000000,802.815063,422.095276,55.835251,21.984024,0.071271,1.000000,2.000000\n1.000000,-1.000000,803.430298,399.609009,53.009628,18.015537,0.053781,1.000000,2.000000\n1.000000,-1.000000,804.455383,375.122375,61.385941,22.999037,0.051255,1.000000,2.000000\n1.000000,-1.000000,806.752258,351.665863,59.027988,20.025839,0.084938,1.000000,2.000000\n1.000000,-1.000000,805.130249,327.117676,61.351162,20.995348,0.051306,1.000000,2.000000\n1.000000,-1.000000,804.917725,304.595123,50.130421,16.030073,0.094819,1.000000,2.000000\n1.000000,-1.000000,807.359741,281.688690,59.033733,21.053823,0.068807,1.000000,2.000000\n1.000000,-1.000000,803.058472,257.503601,70.569466,18.991566,0.063454,1.000000,2.000000\n1.000000,-1.000000,809.305359,236.208694,57.377602,20.996964,0.052474,1.000000,2.000000\n1.000000,-1.000000,811.607849,213.274521,53.998604,18.002941,0.034907,1.000000,2.000000\n1.000000,-1.000000,811.950317,190.273804,62.170509,21.024971,0.083277,1.000000,2.000000\n1.000000,-1.000000,818.934875,170.509918,50.009834,17.016006,0.054893,1.000000,2.000000\n1.000000,-1.000000,832.460693,113.451881,35.012604,10.023527,0.063482,1.000000,2.000000\n1.000000,-1.000000,826.548767,129.245285,44.725975,14.986153,0.080280,1.000000,2.000000\n1.000000,-1.000000,819.801941,150.521072,57.999378,17.999857,0.034909,1.000000,2.000000\n1.000000,-1.000000,862.294312,624.292725,71.237343,20.025291,0.091168,1.000000,2.000000\n1.000000,-1.000000,652.016663,127.152687,59.479515,17.442734,0.498554,1.000000,2.000000\n1.000000,-1.000000,676.211304,78.967316,54.838905,20.142973,0.507034,1.000000,2.000000\n1.000000,-1.000000,417.448792,29.454943,49.429192,20.878641,0.324377,1.000000,2.000000\n1.000000,-1.000000,235.031128,148.112396,48.533703,15.796028,0.310346,1.000000,2.000000\n1.000000,-1.000000,238.614426,125.680206,58.660732,19.416946,0.242437,1.000000,2.000000\n1.000000,-1.000000,244.823608,96.922417,47.361618,12.606480,0.274636,1.000000,2.000000\n1.000000,-1.000000,252.052338,76.162415,57.559616,17.205652,0.275441,1.000000,2.000000\n1.000000,-1.000000,265.185669,29.592533,52.476032,16.744930,0.289277,1.000000,2.000000\n1.000000,-1.000000,274.099487,4.288618,52.224316,17.918573,0.289272,1.000000,2.000000\n1.000000,-1.000000,427.656921,5.608071,52.784229,19.934607,0.284496,1.000000,2.000000\n1.000000,-1.000000,411.134674,53.615273,47.803780,20.603170,0.310322,1.000000,2.000000\n1.000000,-1.000000,705.373413,28.153364,46.529774,17.474541,0.527357,1.000000,2.000000\n1.000000,-1.000000,398.878967,97.439568,49.999153,18.002100,0.318715,1.000000,2.000000\n1.000000,-1.000000,300.867279,196.939270,68.848923,13.593743,0.301157,1.000000,2.000000\n1.000000,-1.000000,206.814987,168.139023,34.386234,11.382750,0.243929,1.000000,2.000000\n1.000000,-1.000000,245.201935,180.421188,46.173180,14.554766,0.342988,1.000000,2.000000\n1.000000,-1.000000,352.968750,209.265045,33.330040,11.401583,0.309004,1.000000,2.000000\n1.000000,-1.000000,387.632629,219.481461,36.283478,13.139232,0.232330,1.000000,2.000000\n1.000000,-1.000000,429.887146,212.952652,51.185623,14.316456,0.232271,1.000000,2.000000\n1.000000,-1.000000,433.136017,191.553085,39.629276,14.783235,0.273487,1.000000,2.000000\n1.000000,-1.000000,441.671112,172.511948,44.125767,15.295462,0.232276,1.000000,2.000000\n1.000000,-1.000000,446.988983,153.012497,44.645840,15.517907,0.263435,1.000000,2.000000\n1.000000,-1.000000,453.799622,134.148636,36.380875,16.493107,0.279795,1.000000,2.000000\n1.000000,-1.000000,455.485413,110.283691,34.381474,14.557508,0.301132,1.000000,2.000000\n1.000000,-1.000000,466.607361,92.660118,43.304150,15.801174,0.319627,1.000000,2.000000\n1.000000,-1.000000,483.428436,47.384827,53.366344,15.738785,0.261849,1.000000,2.000000\n1.000000,-1.000000,488.003632,24.365341,52.435696,20.863659,0.289277,1.000000,2.000000\n1.000000,-1.000000,364.747070,187.164322,69.501144,14.536549,0.255180,1.000000,2.000000\n1.000000,-1.000000,371.511902,165.385468,65.125198,15.771894,0.287441,1.000000,2.000000\n1.000000,-1.000000,375.829895,142.022675,71.466545,19.198650,0.297349,1.000000,2.000000\n1.000000,-1.000000,866.855103,326.774261,46.009975,15.998276,0.056652,1.000000,2.000000\n1.000000,-1.000000,1005.303162,495.043732,36.468620,19.015789,0.053781,1.000000,2.000000\n1.000000,-1.000000,1009.720825,431.140411,27.612692,16.969957,0.059304,1.000000,2.000000\n1.000000,-1.000000,1015.447693,243.405807,15.533021,12.000253,0.034907,1.000000,2.000000\n1.000000,-1.000000,1007.220825,515.284302,32.066475,14.001139,0.034908,1.000000,2.000000\n1.000000,-1.000000,1008.353027,535.967957,29.424822,14.021163,0.009258,1.000000,2.000000\n1.000000,-1.000000,1010.520813,556.241943,26.473803,13.956755,0.099365,1.000000,2.000000\n1.000000,-1.000000,1005.319885,575.624634,36.196720,14.018911,0.055680,1.000000,2.000000\n1.000000,-1.000000,992.739197,630.848999,61.188980,19.999735,0.034904,1.000000,2.000000\n1.000000,-1.000000,1001.344482,595.551270,44.241371,15.996045,0.054145,1.000000,2.000000\n1.000000,-1.000000,836.646790,327.217285,601.306213,131.034607,1.627328,1.000000,8.000000\n1.000000,-1.000000,676.537537,484.615936,288.578491,79.649887,1.110809,1.000000,8.000000\n1.000000,-1.000000,665.061218,89.352242,255.237488,78.617355,2.109764,1.000000,8.000000\n1.000000,-1.000000,431.307495,102.688629,215.129593,124.403244,1.845045,1.000000,8.000000\n1.000000,-1.000000,248.513901,73.329231,171.285309,67.649216,1.844190,1.000000,8.000000\n1.000000,-1.000000,627.639038,361.046204,52.322239,23.703577,2.712759,1.000000,2.000000\n1.000000,-1.000000,626.048523,383.126556,32.694611,12.477627,2.767590,1.000000,2.000000\n1.000000,-1.000000,630.088257,400.215393,35.848740,13.389809,2.775257,1.000000,2.000000\n1.000000,-1.000000,638.931152,415.871307,34.665310,12.974287,2.845398,1.000000,2.000000\n1.000000,-1.000000,646.787659,431.213074,34.884701,14.760889,2.700052,1.000000,2.000000\n1.000000,-1.000000,654.840454,447.445343,30.184288,13.376986,2.789641,1.000000,2.000000\n1.000000,-1.000000,661.963379,462.404327,35.340965,14.800033,2.738110,1.000000,2.000000\n1.000000,-1.000000,674.022705,494.760590,31.294300,16.551620,2.739831,1.000000,2.000000\n1.000000,-1.000000,683.593628,510.313995,31.383192,16.156836,2.796052,1.000000,2.000000\n1.000000,-1.000000,689.280457,525.834290,32.310783,14.299404,2.796016,1.000000,2.000000\n1.000000,-1.000000,697.670898,542.448792,34.540127,13.926667,2.790599,1.000000,2.000000\n1.000000,-1.000000,704.003235,558.229248,28.381645,12.513310,2.728985,1.000000,2.000000\n1.000000,-1.000000,710.940063,574.480225,34.434410,16.100962,2.712797,1.000000,2.000000\n1.000000,-1.000000,719.249939,591.583130,38.012333,13.863952,2.712782,1.000000,2.000000\n1.000000,-1.000000,664.939148,549.706604,35.340973,12.507252,1.167379,1.000000,2.000000\n1.000000,-1.000000,641.119202,505.102509,34.882233,13.415600,1.142056,1.000000,2.000000\n1.000000,-1.000000,619.582214,454.220001,33.362797,12.031509,1.086605,1.000000,2.000000\n1.000000,-1.000000,580.324463,389.308319,25.940361,11.627506,1.141901,1.000000,2.000000\n1.000000,-1.000000,198.465775,106.754128,25.709761,13.340678,1.841234,1.000000,2.000000\n1.000000,-1.000000,207.066101,77.792564,26.563457,12.016853,1.927642,1.000000,2.000000\n1.000000,-1.000000,214.964661,49.351395,31.624640,12.649006,1.927367,1.000000,2.000000\n2.000000,-1.000000,862.696106,535.252380,60.007618,19.998066,0.041606,1.000000,2.000000\n2.000000,-1.000000,865.824585,463.306824,54.999031,19.000330,0.024934,1.000000,2.000000\n2.000000,-1.000000,862.446960,438.688904,58.077888,18.974991,0.076599,1.000000,2.000000\n2.000000,-1.000000,865.570435,413.284027,55.346138,19.024071,0.061259,1.000000,2.000000\n2.000000,-1.000000,867.109680,391.315552,59.076122,20.025681,0.075760,1.000000,2.000000\n2.000000,-1.000000,871.764465,345.416595,55.370880,19.997446,0.043122,1.000000,2.000000\n2.000000,-1.000000,871.327881,302.391998,53.084106,18.027670,0.081503,1.000000,2.000000\n2.000000,-1.000000,874.229736,280.965576,53.008560,15.016779,0.043808,1.000000,2.000000\n2.000000,-1.000000,875.361694,258.837830,53.152447,15.960182,0.096409,1.000000,2.000000\n2.000000,-1.000000,876.496704,237.003464,54.084866,17.028671,0.080398,1.000000,2.000000\n2.000000,-1.000000,879.302490,215.558258,57.036057,17.024052,0.060022,1.000000,2.000000\n2.000000,-1.000000,875.296631,192.948868,59.033718,15.992846,0.058834,1.000000,2.000000\n2.000000,-1.000000,873.579102,172.409424,48.344170,15.997562,0.045730,1.000000,2.000000\n2.000000,-1.000000,881.600159,151.602737,60.709827,18.014029,0.041605,1.000000,2.000000\n2.000000,-1.000000,877.988586,130.003448,57.008713,16.999874,0.042483,1.000000,2.000000\n2.000000,-1.000000,885.171936,108.678680,56.000538,16.999325,0.024933,1.000000,2.000000\n2.000000,-1.000000,884.674561,87.610062,63.072933,21.926065,0.072489,1.000000,2.000000\n2.000000,-1.000000,882.558899,66.105576,55.010113,19.015137,0.043069,1.000000,2.000000\n2.000000,-1.000000,882.717590,46.597183,55.101852,18.027334,0.079398,1.000000,2.000000\n2.000000,-1.000000,589.925476,114.818909,49.606312,21.429510,2.078266,1.000000,2.000000\n2.000000,-1.000000,609.937744,194.842773,61.199276,17.992050,0.548200,1.000000,2.000000\n2.000000,-1.000000,621.469177,173.623779,62.312798,20.226782,0.554164,1.000000,2.000000\n2.000000,-1.000000,866.414307,486.321625,55.008167,18.015041,0.043122,1.000000,2.000000\n2.000000,-1.000000,865.918152,559.838867,59.109749,19.026541,0.075708,1.000000,2.000000\n2.000000,-1.000000,661.864685,98.107216,60.683636,20.181641,0.518850,1.000000,2.000000\n2.000000,-1.000000,861.989014,582.742004,59.008316,17.013865,0.041871,1.000000,2.000000\n2.000000,-1.000000,801.184326,508.209106,38.354996,12.996180,0.051255,1.000000,2.000000\n2.000000,-1.000000,804.182251,488.275818,42.999825,17.998850,0.024933,1.000000,2.000000\n2.000000,-1.000000,801.904053,419.199463,55.835209,21.984024,0.061298,1.000000,2.000000\n2.000000,-1.000000,802.294739,396.708069,53.009659,18.015574,0.043807,1.000000,2.000000\n2.000000,-1.000000,803.075806,372.212494,61.385921,22.999004,0.041282,1.000000,2.000000\n2.000000,-1.000000,805.012634,348.248291,59.035671,20.023193,0.058780,1.000000,2.000000\n2.000000,-1.000000,803.271729,324.203430,61.351154,20.995340,0.041332,1.000000,2.000000\n2.000000,-1.000000,802.834717,301.684174,50.130417,16.030073,0.084845,1.000000,2.000000\n2.000000,-1.000000,805.048035,278.754456,59.033783,21.053818,0.058834,1.000000,2.000000\n2.000000,-1.000000,800.505859,254.613464,70.569466,18.991571,0.053481,1.000000,2.000000\n2.000000,-1.000000,806.540100,233.257355,57.377647,20.996954,0.042501,1.000000,2.000000\n2.000000,-1.000000,808.613708,210.301392,53.998589,18.002939,0.024935,1.000000,2.000000\n2.000000,-1.000000,808.726807,187.298325,62.170498,21.024977,0.073303,1.000000,2.000000\n2.000000,-1.000000,815.513855,167.465790,50.009857,17.016005,0.044919,1.000000,2.000000\n2.000000,-1.000000,828.470032,110.275703,35.012573,10.023529,0.053508,1.000000,2.000000\n2.000000,-1.000000,822.715820,126.127296,44.726063,14.986153,0.070307,1.000000,2.000000\n2.000000,-1.000000,816.181641,147.469360,57.999340,17.999855,0.024934,1.000000,2.000000\n2.000000,-1.000000,863.396851,620.793701,71.237358,20.025293,0.081196,1.000000,2.000000\n2.000000,-1.000000,648.171570,125.775436,59.479538,17.442738,0.488581,1.000000,2.000000\n2.000000,-1.000000,671.884460,77.351143,54.838902,20.143000,0.497061,1.000000,2.000000\n2.000000,-1.000000,412.641022,30.421925,49.429218,20.878647,0.314404,1.000000,2.000000\n2.000000,-1.000000,231.415787,150.892731,48.533730,15.796033,0.300373,1.000000,2.000000\n2.000000,-1.000000,234.775223,128.425858,58.660717,19.416960,0.232466,1.000000,2.000000\n2.000000,-1.000000,240.697266,99.607643,47.361607,12.606476,0.264662,1.000000,2.000000\n2.000000,-1.000000,247.718613,78.776596,57.559593,17.205652,0.265468,1.000000,2.000000\n2.000000,-1.000000,260.386780,32.078041,52.476028,16.744926,0.279304,1.000000,2.000000\n2.000000,-1.000000,269.067322,6.618606,52.224308,18.059811,0.279299,1.000000,2.000000\n2.000000,-1.000000,422.618378,6.447395,52.784248,19.990767,0.274522,1.000000,2.000000\n2.000000,-1.000000,406.568146,54.644012,47.803772,20.603170,0.300349,1.000000,2.000000\n2.000000,-1.000000,700.538330,26.248917,46.529804,17.474569,0.517383,1.000000,2.000000\n2.000000,-1.000000,394.750092,98.588356,49.999161,18.002096,0.308741,1.000000,2.000000\n2.000000,-1.000000,297.736053,199.057114,68.849136,13.593709,0.291083,1.000000,2.000000\n2.000000,-1.000000,203.400787,171.199783,34.386242,11.382755,0.233955,1.000000,2.000000\n2.000000,-1.000000,242.318985,182.512497,46.152660,14.561249,0.303194,1.000000,2.000000\n2.000000,-1.000000,349.957458,210.866104,33.330044,11.401593,0.299031,1.000000,2.000000\n2.000000,-1.000000,384.721497,220.736328,36.283478,13.139215,0.222357,1.000000,2.000000\n2.000000,-1.000000,426.908752,213.786438,51.185593,14.316444,0.222297,1.000000,2.000000\n2.000000,-1.000000,429.944122,192.355530,39.629250,14.783240,0.263513,1.000000,2.000000\n2.000000,-1.000000,438.288910,173.230194,44.125748,15.295472,0.222304,1.000000,2.000000\n2.000000,-1.000000,443.412018,153.678726,44.645870,15.517918,0.253462,1.000000,2.000000\n2.000000,-1.000000,449.608765,135.252121,36.401230,16.483875,0.303268,1.000000,2.000000\n2.000000,-1.000000,451.481873,110.867302,34.381454,14.557505,0.291159,1.000000,2.000000\n2.000000,-1.000000,462.427460,93.133682,43.304173,15.801174,0.309654,1.000000,2.000000\n2.000000,-1.000000,478.796204,47.692863,53.366341,15.738788,0.251877,1.000000,2.000000\n2.000000,-1.000000,483.141632,24.628901,52.435703,20.863644,0.279303,1.000000,2.000000\n2.000000,-1.000000,361.514771,188.649048,69.501144,14.536556,0.245207,1.000000,2.000000\n2.000000,-1.000000,368.062042,166.803818,65.125175,15.771891,0.277468,1.000000,2.000000\n2.000000,-1.000000,372.146820,143.399109,71.466560,19.198658,0.287376,1.000000,2.000000\n2.000000,-1.000000,864.803955,323.736359,45.999081,16.002045,0.024936,1.000000,2.000000\n2.000000,-1.000000,1005.154602,490.126770,36.558750,19.015783,0.043807,1.000000,2.000000\n2.000000,-1.000000,1009.259216,426.198853,28.352789,16.969967,0.049330,1.000000,2.000000\n2.000000,-1.000000,1014.064758,238.431183,18.175510,12.000236,0.024933,1.000000,2.000000\n2.000000,-1.000000,1007.187622,510.344238,31.983768,14.001167,0.024934,1.000000,2.000000\n2.000000,-1.000000,1008.429565,531.016785,29.148924,14.021153,3.140875,1.000000,2.000000\n2.000000,-1.000000,1010.688110,551.245056,25.973520,13.955774,0.089391,1.000000,2.000000\n2.000000,-1.000000,1005.585266,570.685791,35.506992,14.018929,0.045706,1.000000,2.000000\n2.000000,-1.000000,993.270630,626.032898,59.928616,19.999746,0.024933,1.000000,2.000000\n2.000000,-1.000000,1001.703796,590.646973,43.341103,15.996031,0.044172,1.000000,2.000000\n2.000000,-1.000000,834.787720,323.988708,601.306213,131.034561,1.617355,1.000000,8.000000\n2.000000,-1.000000,676.256287,482.976349,288.578461,79.649918,1.100836,1.000000,8.000000\n2.000000,-1.000000,660.116028,89.095322,252.352402,78.604683,2.099790,1.000000,8.000000\n2.000000,-1.000000,427.229431,103.513733,215.129593,124.403229,1.835071,1.000000,8.000000\n2.000000,-1.000000,244.434952,74.929924,173.458099,67.649200,1.834217,1.000000,8.000000\n2.000000,-1.000000,626.127808,359.900452,52.322212,23.703575,2.702786,1.000000,2.000000\n2.000000,-1.000000,624.757568,381.995575,32.694592,12.477595,2.757616,1.000000,2.000000\n2.000000,-1.000000,628.967529,399.043213,35.848698,13.389799,2.765284,1.000000,2.000000\n2.000000,-1.000000,637.966125,414.610168,34.665295,12.974289,2.835425,1.000000,2.000000\n2.000000,-1.000000,645.975220,429.872742,34.884682,14.760861,2.690078,1.000000,2.000000\n2.000000,-1.000000,654.189514,446.023987,30.184317,13.376964,2.779669,1.000000,2.000000\n2.000000,-1.000000,661.461243,460.911194,35.340942,14.800046,2.728137,1.000000,2.000000\n2.000000,-1.000000,674.214233,493.438049,31.305651,16.545555,2.702849,1.000000,2.000000\n2.000000,-1.000000,683.568237,508.602753,31.383213,16.156849,2.786077,1.000000,2.000000\n2.000000,-1.000000,689.409607,524.065613,32.310791,14.299380,2.786042,1.000000,2.000000\n2.000000,-1.000000,697.965393,540.595520,34.540092,13.926679,2.780623,1.000000,2.000000\n2.000000,-1.000000,704.454773,556.312134,28.381662,12.513248,2.719013,1.000000,2.000000\n2.000000,-1.000000,711.553345,572.493103,34.434444,16.100979,2.702824,1.000000,2.000000\n2.000000,-1.000000,720.033325,589.512268,38.012257,13.863986,2.702808,1.000000,2.000000\n2.000000,-1.000000,665.307556,548.179504,35.340942,12.507201,1.157405,1.000000,2.000000\n2.000000,-1.000000,641.209045,503.642670,34.885105,13.414519,1.119255,1.000000,2.000000\n2.000000,-1.000000,619.000610,453.149963,33.362793,12.031473,1.076631,1.000000,2.000000\n2.000000,-1.000000,579.097412,388.632935,25.940327,11.627520,1.131931,1.000000,2.000000\n2.000000,-1.000000,194.533997,109.985901,25.708771,13.341186,1.822483,1.000000,2.000000\n2.000000,-1.000000,202.750824,80.855301,26.563471,12.016870,1.917669,1.000000,2.000000\n2.000000,-1.000000,210.365936,52.337303,31.624647,12.649018,1.917439,1.000000,2.000000\n3.000000,-1.000000,862.910400,531.753723,60.007626,19.997995,0.031632,1.000000,2.000000\n3.000000,-1.000000,865.321533,459.780548,54.999077,19.000341,0.014960,1.000000,2.000000\n3.000000,-1.000000,861.698303,435.197479,58.077892,18.974972,0.066626,1.000000,2.000000\n3.000000,-1.000000,864.568359,409.762726,55.346134,19.024055,0.051285,1.000000,2.000000\n3.000000,-1.000000,865.899109,387.753998,59.076126,20.025721,0.064885,1.000000,2.000000\n3.000000,-1.000000,870.085205,341.836945,55.370911,19.997465,0.033148,1.000000,2.000000\n3.000000,-1.000000,869.219482,298.818817,53.084110,18.027660,0.071530,1.000000,2.000000\n3.000000,-1.000000,871.907532,277.364502,53.008549,15.016768,0.033835,1.000000,2.000000\n3.000000,-1.000000,872.818848,255.226700,53.152512,15.960183,0.086440,1.000000,2.000000\n3.000000,-1.000000,873.736023,233.381958,54.084820,17.028679,0.070425,1.000000,2.000000\n3.000000,-1.000000,876.327881,211.909821,57.036079,17.024057,0.050048,1.000000,2.000000\n3.000000,-1.000000,872.096619,189.341522,59.033714,15.992841,0.048860,1.000000,2.000000\n3.000000,-1.000000,870.174255,168.820221,48.344135,15.997555,0.035757,1.000000,2.000000\n3.000000,-1.000000,877.987427,147.934586,60.709850,18.014019,0.031632,1.000000,2.000000\n3.000000,-1.000000,874.317200,125.877045,56.999920,17.002491,0.014959,1.000000,2.000000\n3.000000,-1.000000,881.130981,104.977089,56.000542,16.999331,0.014962,1.000000,2.000000\n3.000000,-1.000000,880.423584,83.914413,63.072914,21.926058,0.062516,1.000000,2.000000\n3.000000,-1.000000,878.093567,62.432117,55.010174,19.015141,0.033095,1.000000,2.000000\n3.000000,-1.000000,878.057617,42.923111,55.101864,18.027338,0.069425,1.000000,2.000000\n3.000000,-1.000000,585.960449,114.061516,49.606331,21.429544,2.068292,1.000000,2.000000\n3.000000,-1.000000,606.769897,193.881821,61.199268,17.992071,0.538227,1.000000,2.000000\n3.000000,-1.000000,618.089050,172.548859,62.312752,20.226755,0.544190,1.000000,2.000000\n3.000000,-1.000000,866.140503,482.788208,55.008190,18.015079,0.033148,1.000000,2.000000\n3.000000,-1.000000,866.377625,556.306763,59.109737,19.026527,0.065735,1.000000,2.000000\n3.000000,-1.000000,657.729492,96.633202,60.683620,20.181616,0.508876,1.000000,2.000000\n3.000000,-1.000000,862.677124,579.248047,59.008297,17.013889,0.031899,1.000000,2.000000\n3.000000,-1.000000,801.132141,505.325195,38.354931,12.996221,0.041282,1.000000,2.000000\n3.000000,-1.000000,803.931274,485.363098,42.999863,17.998840,0.014960,1.000000,2.000000\n3.000000,-1.000000,800.964111,416.312805,55.835201,21.984045,0.051324,1.000000,2.000000\n3.000000,-1.000000,801.130554,393.818634,53.009647,18.015566,0.033834,1.000000,2.000000\n3.000000,-1.000000,801.667236,369.316437,61.385891,22.999010,0.031309,1.000000,2.000000\n3.000000,-1.000000,803.495789,345.818939,59.027958,20.025831,0.064995,1.000000,2.000000\n3.000000,-1.000000,801.384277,321.307831,61.351173,20.995346,0.031359,1.000000,2.000000\n3.000000,-1.000000,800.722656,298.794067,50.130383,16.030085,0.074872,1.000000,2.000000\n3.000000,-1.000000,802.707153,275.843445,59.033714,21.053814,0.048861,1.000000,2.000000\n3.000000,-1.000000,797.924561,251.748947,70.569427,18.991575,0.043508,1.000000,2.000000\n3.000000,-1.000000,803.745361,230.333710,57.377636,20.996956,0.032528,1.000000,2.000000\n3.000000,-1.000000,805.590088,207.358170,53.998627,18.002928,0.014960,1.000000,2.000000\n3.000000,-1.000000,805.473633,184.355194,62.170483,21.024973,0.063330,1.000000,2.000000\n3.000000,-1.000000,812.062683,164.455948,50.009903,17.016008,0.034946,1.000000,2.000000\n3.000000,-1.000000,824.447876,107.139488,35.012604,10.023522,0.043535,1.000000,2.000000\n3.000000,-1.000000,818.851990,123.047668,44.726025,14.986155,0.060334,1.000000,2.000000\n3.000000,-1.000000,812.531006,144.453964,57.999325,17.999866,0.014957,1.000000,2.000000\n3.000000,-1.000000,864.464294,617.283691,71.237358,20.025259,0.071222,1.000000,2.000000\n3.000000,-1.000000,644.312866,124.436554,59.479553,17.442760,0.478608,1.000000,2.000000\n3.000000,-1.000000,667.541748,75.778214,54.838928,20.142981,0.487087,1.000000,2.000000\n3.000000,-1.000000,407.843079,31.436790,49.429199,20.878649,0.304431,1.000000,2.000000\n3.000000,-1.000000,227.828400,153.709000,48.533718,15.796029,0.290400,1.000000,2.000000\n3.000000,-1.000000,230.963562,131.209793,58.660728,19.416965,0.222491,1.000000,2.000000\n3.000000,-1.000000,236.597916,102.333893,47.361622,12.606482,0.254689,1.000000,2.000000\n3.000000,-1.000000,243.411163,81.433853,57.559589,17.205647,0.255494,1.000000,2.000000\n3.000000,-1.000000,255.612991,34.611282,52.476032,16.744932,0.269330,1.000000,2.000000\n3.000000,-1.000000,264.059662,8.992285,52.224335,18.213871,0.269325,1.000000,2.000000\n3.000000,-1.000000,417.589294,7.333008,52.784260,20.054886,0.264549,1.000000,2.000000\n3.000000,-1.000000,402.012085,55.718243,47.803795,20.603163,0.290376,1.000000,2.000000\n3.000000,-1.000000,695.684509,24.392773,46.529770,17.474550,0.507410,1.000000,2.000000\n3.000000,-1.000000,390.632935,99.778275,49.999153,18.002090,0.298768,1.000000,2.000000\n3.000000,-1.000000,294.625732,201.209579,68.849129,13.593697,0.281110,1.000000,2.000000\n3.000000,-1.000000,200.017273,174.294418,34.386234,11.382749,0.223982,1.000000,2.000000\n3.000000,-1.000000,238.641525,185.808533,46.173187,14.554789,0.323042,1.000000,2.000000\n3.000000,-1.000000,346.962280,212.497162,33.330048,11.401592,0.289058,1.000000,2.000000\n3.000000,-1.000000,381.822998,222.020172,36.283470,13.139223,0.212383,1.000000,2.000000\n3.000000,-1.000000,423.938843,214.649887,51.185631,14.316458,0.212324,1.000000,2.000000\n3.000000,-1.000000,426.760345,193.189804,39.629242,14.783244,0.253540,1.000000,2.000000\n3.000000,-1.000000,435.289490,173.368286,44.147141,15.288073,0.243444,1.000000,2.000000\n3.000000,-1.000000,439.841827,154.380585,44.645851,15.517899,0.243489,1.000000,2.000000\n3.000000,-1.000000,445.854523,135.893097,36.401222,16.483889,0.293294,1.000000,2.000000\n3.000000,-1.000000,447.484314,111.490799,34.381424,14.557503,0.281186,1.000000,2.000000\n3.000000,-1.000000,458.252533,93.648903,43.304169,15.801168,0.299680,1.000000,2.000000\n3.000000,-1.000000,474.167206,48.047150,53.366356,15.738792,0.241902,1.000000,2.000000\n3.000000,-1.000000,478.282410,24.940962,52.435715,20.863653,0.269330,1.000000,2.000000\n3.000000,-1.000000,358.297455,190.165939,69.501122,14.536545,0.235234,1.000000,2.000000\n3.000000,-1.000000,364.626526,168.256500,65.125183,15.771893,0.267494,1.000000,2.000000\n3.000000,-1.000000,368.477692,144.812241,71.466568,19.198656,0.277402,1.000000,2.000000\n3.000000,-1.000000,863.090271,319.733459,46.009995,15.998281,0.036706,1.000000,2.000000\n3.000000,-1.000000,1004.982239,485.211914,36.699715,19.015800,0.033834,1.000000,2.000000\n3.000000,-1.000000,1008.773621,421.259399,29.143066,16.969959,0.039358,1.000000,2.000000\n3.000000,-1.000000,1012.657166,233.457733,20.867447,12.000244,0.014960,1.000000,2.000000\n3.000000,-1.000000,1007.130615,505.405518,31.951918,14.001187,0.014960,1.000000,2.000000\n3.000000,-1.000000,1008.472961,526.217163,29.054077,14.013489,-0.000000,1.000000,2.000000\n3.000000,-1.000000,1010.831238,546.251404,25.525181,13.954838,0.079417,1.000000,2.000000\n3.000000,-1.000000,1005.827148,565.748779,34.868816,14.018875,0.035734,1.000000,2.000000\n3.000000,-1.000000,993.779297,621.218445,58.719238,19.999794,0.014960,1.000000,2.000000\n3.000000,-1.000000,1002.039673,585.744507,42.492378,15.996084,0.034199,1.000000,2.000000\n3.000000,-1.000000,832.896606,320.778870,601.306152,131.034546,1.607381,1.000000,8.000000\n3.000000,-1.000000,675.958618,481.339691,288.578552,79.649857,1.090863,1.000000,8.000000\n3.000000,-1.000000,655.203491,88.854752,249.559464,78.592552,2.089817,1.000000,8.000000\n3.000000,-1.000000,423.159729,104.379486,215.129623,124.403252,1.825098,1.000000,8.000000\n3.000000,-1.000000,240.366867,76.548607,175.671829,67.649200,1.824244,1.000000,8.000000\n3.000000,-1.000000,624.605286,358.769867,52.322235,23.703564,2.692812,1.000000,2.000000\n3.000000,-1.000000,623.455444,380.877502,32.694580,12.477631,2.747643,1.000000,2.000000\n3.000000,-1.000000,627.835205,397.882324,35.848679,13.389812,2.755310,1.000000,2.000000\n3.000000,-1.000000,636.988586,413.358734,34.665302,12.974260,2.825451,1.000000,2.000000\n3.000000,-1.000000,645.149536,428.540771,34.884651,14.760887,2.680105,1.000000,2.000000\n3.000000,-1.000000,653.524475,444.609131,30.184315,13.376965,2.769695,1.000000,2.000000\n3.000000,-1.000000,660.944336,459.423157,35.340981,14.800048,2.718163,1.000000,2.000000\n3.000000,-1.000000,673.646667,491.532410,31.294241,16.551603,2.719884,1.000000,2.000000\n3.000000,-1.000000,683.681885,507.030762,31.385431,16.155714,2.764213,1.000000,2.000000\n3.000000,-1.000000,689.521118,522.295654,32.310818,14.299445,2.776070,1.000000,2.000000\n3.000000,-1.000000,698.241333,538.739441,34.540119,13.926645,2.770651,1.000000,2.000000\n3.000000,-1.000000,704.887085,554.390442,28.381605,12.513287,2.709038,1.000000,2.000000\n3.000000,-1.000000,712.146729,570.499939,34.434437,16.100935,2.692850,1.000000,2.000000\n3.000000,-1.000000,720.796082,587.433716,38.012268,13.863950,2.692832,1.000000,2.000000\n3.000000,-1.000000,665.660767,546.648682,35.340996,12.507224,1.147433,1.000000,2.000000\n3.000000,-1.000000,640.955933,502.528595,34.882271,13.415616,1.122110,1.000000,2.000000\n3.000000,-1.000000,618.408386,452.085693,33.362808,12.031487,1.066657,1.000000,2.000000\n3.000000,-1.000000,577.863831,387.969910,25.940361,11.627544,1.121954,1.000000,2.000000\n3.000000,-1.000000,190.445419,113.088287,25.709766,13.340677,1.821287,1.000000,2.000000\n3.000000,-1.000000,198.466324,83.960930,26.563454,12.016858,1.907695,1.000000,2.000000\n3.000000,-1.000000,205.796082,55.367889,31.624634,12.649022,1.907419,1.000000,2.000000\n4.000000,-1.000000,863.090149,528.253052,60.007603,19.998016,0.021659,1.000000,2.000000\n4.000000,-1.000000,864.783203,456.259430,54.999031,19.000341,0.004987,1.000000,2.000000\n4.000000,-1.000000,860.914856,431.713684,58.077862,18.974974,0.056652,1.000000,2.000000\n4.000000,-1.000000,863.531311,406.251617,55.346107,19.024071,0.041313,1.000000,2.000000\n4.000000,-1.000000,864.631836,384.256775,59.076122,20.025723,0.055813,1.000000,2.000000\n4.000000,-1.000000,868.370361,338.274139,55.370914,19.997459,0.023175,1.000000,2.000000\n4.000000,-1.000000,867.075684,295.266754,53.084114,18.027641,0.061556,1.000000,2.000000\n4.000000,-1.000000,869.549683,273.786804,53.008556,15.016782,0.023861,1.000000,2.000000\n4.000000,-1.000000,870.240051,251.640945,53.152523,15.960174,0.076467,1.000000,2.000000\n4.000000,-1.000000,870.939392,229.788177,54.084824,17.028675,0.060452,1.000000,2.000000\n4.000000,-1.000000,873.316956,208.291275,57.036026,17.024061,0.040075,1.000000,2.000000\n4.000000,-1.000000,868.860657,185.766296,59.033710,15.992852,0.038887,1.000000,2.000000\n4.000000,-1.000000,866.733887,165.265167,48.344200,15.997561,0.025783,1.000000,2.000000\n4.000000,-1.000000,874.338257,144.302628,60.709812,18.014011,0.021658,1.000000,2.000000\n4.000000,-1.000000,870.296692,122.779686,57.008671,16.999865,0.022537,1.000000,2.000000\n4.000000,-1.000000,877.053406,101.315872,56.000572,16.999327,0.004987,1.000000,2.000000\n4.000000,-1.000000,876.135925,80.261360,63.072880,21.926056,0.052543,1.000000,2.000000\n4.000000,-1.000000,873.591736,58.803368,55.010193,19.015142,0.023122,1.000000,2.000000\n4.000000,-1.000000,873.361267,39.295696,55.101849,18.027330,0.059451,1.000000,2.000000\n4.000000,-1.000000,581.988037,113.343704,49.606312,21.429558,2.058318,1.000000,2.000000\n4.000000,-1.000000,603.592529,192.952515,61.199299,17.992062,0.528254,1.000000,2.000000\n4.000000,-1.000000,614.698425,171.507690,62.312763,20.226791,0.534217,1.000000,2.000000\n4.000000,-1.000000,865.831665,479.257812,55.008179,18.015068,0.023175,1.000000,2.000000\n4.000000,-1.000000,866.802002,552.770386,59.109715,19.026510,0.055762,1.000000,2.000000\n4.000000,-1.000000,653.579773,95.200470,60.683578,20.181601,0.498903,1.000000,2.000000\n4.000000,-1.000000,863.330444,575.747437,59.008324,17.013824,0.021926,1.000000,2.000000\n4.000000,-1.000000,801.051208,502.441956,38.354935,12.996209,0.031308,1.000000,2.000000\n4.000000,-1.000000,803.651123,482.452911,42.999828,17.998848,0.004986,1.000000,2.000000\n4.000000,-1.000000,799.995300,413.435669,55.835213,21.984022,0.041351,1.000000,2.000000\n4.000000,-1.000000,799.937439,390.940979,53.009655,18.015547,0.023861,1.000000,2.000000\n4.000000,-1.000000,800.229797,366.434692,61.385910,22.999046,0.021335,1.000000,2.000000\n4.000000,-1.000000,801.823853,342.919983,59.027927,20.025820,0.055020,1.000000,2.000000\n4.000000,-1.000000,799.468201,318.431305,61.351185,20.995331,0.021386,1.000000,2.000000\n4.000000,-1.000000,798.581909,295.925201,50.130440,16.030123,0.064899,1.000000,2.000000\n4.000000,-1.000000,800.337646,272.955963,59.033760,21.053829,0.038887,1.000000,2.000000\n4.000000,-1.000000,795.314819,248.910355,70.569420,18.991577,0.033534,1.000000,2.000000\n4.000000,-1.000000,800.921875,227.438110,57.377651,20.996958,0.022554,1.000000,2.000000\n4.000000,-1.000000,802.537231,204.445343,53.998596,18.002922,0.004987,1.000000,2.000000\n4.000000,-1.000000,802.191406,181.444641,62.170479,21.024992,0.053357,1.000000,2.000000\n4.000000,-1.000000,808.581604,161.480667,50.009857,17.016005,0.024973,1.000000,2.000000\n4.000000,-1.000000,820.394531,104.043533,35.012577,10.023525,0.033562,1.000000,2.000000\n4.000000,-1.000000,814.957703,120.006729,44.726017,14.986160,0.050360,1.000000,2.000000\n4.000000,-1.000000,808.850342,141.474930,57.999355,17.999865,0.004986,1.000000,2.000000\n4.000000,-1.000000,865.496826,613.763306,71.237389,20.025267,0.061249,1.000000,2.000000\n4.000000,-1.000000,640.441040,123.136246,59.479527,17.442724,0.468634,1.000000,2.000000\n4.000000,-1.000000,663.183411,74.248657,54.838978,20.142998,0.477114,1.000000,2.000000\n4.000000,-1.000000,403.055542,32.499451,49.429176,20.878643,0.294457,1.000000,2.000000\n4.000000,-1.000000,224.269211,156.560898,48.533737,15.796021,0.280426,1.000000,2.000000\n4.000000,-1.000000,227.179840,134.031540,58.660728,19.416958,0.212518,1.000000,2.000000\n4.000000,-1.000000,232.525925,105.100891,47.361622,12.606475,0.244716,1.000000,2.000000\n4.000000,-1.000000,239.130432,84.133942,57.559597,17.205650,0.245521,1.000000,2.000000\n4.000000,-1.000000,250.864685,37.192009,52.476036,16.744921,0.259357,1.000000,2.000000\n4.000000,-1.000000,259.076996,11.408745,52.224308,18.382116,0.259352,1.000000,2.000000\n4.000000,-1.000000,412.569977,8.264393,52.784271,20.127829,0.254576,1.000000,2.000000\n4.000000,-1.000000,397.466949,56.837860,47.803783,20.603168,0.280402,1.000000,2.000000\n4.000000,-1.000000,690.812378,22.585087,46.529751,17.474533,0.497437,1.000000,2.000000\n4.000000,-1.000000,386.527802,101.009201,49.999165,18.002098,0.288795,1.000000,2.000000\n4.000000,-1.000000,291.536957,203.392975,68.849144,13.593703,0.271138,1.000000,2.000000\n4.000000,-1.000000,196.664825,177.422668,34.386246,11.382737,0.214009,1.000000,2.000000\n4.000000,-1.000000,235.401978,188.550995,46.173199,14.554783,0.313068,1.000000,2.000000\n4.000000,-1.000000,343.983521,214.158020,33.330059,11.401601,0.279084,1.000000,2.000000\n4.000000,-1.000000,378.937469,223.332855,36.283489,13.139219,0.202410,1.000000,2.000000\n4.000000,-1.000000,420.977692,215.542938,51.185623,14.316451,0.202351,1.000000,2.000000\n4.000000,-1.000000,423.585052,194.055786,39.629269,14.783232,0.243567,1.000000,2.000000\n4.000000,-1.000000,431.546661,174.767807,44.125736,15.295462,0.202357,1.000000,2.000000\n4.000000,-1.000000,436.278809,155.118011,44.645836,15.517905,0.233515,1.000000,2.000000\n4.000000,-1.000000,442.522095,136.058823,36.380856,16.493109,0.249875,1.000000,2.000000\n4.000000,-1.000000,443.493164,112.154144,34.381458,14.557505,0.271212,1.000000,2.000000\n4.000000,-1.000000,454.082947,94.205734,43.304165,15.801169,0.289707,1.000000,2.000000\n4.000000,-1.000000,469.542023,48.447506,53.366360,15.738791,0.231930,1.000000,2.000000\n4.000000,-1.000000,473.426575,25.301449,52.435692,20.863649,0.259357,1.000000,2.000000\n4.000000,-1.000000,355.095398,191.714859,69.501114,14.536552,0.225260,1.000000,2.000000\n4.000000,-1.000000,361.205658,169.743362,65.125206,15.771891,0.257521,1.000000,2.000000\n4.000000,-1.000000,364.822815,146.261856,71.466568,19.198668,0.267429,1.000000,2.000000\n4.000000,-1.000000,861.155212,316.241547,46.009968,15.998247,0.026732,1.000000,2.000000\n4.000000,-1.000000,1004.786377,480.298859,36.891365,19.015787,0.023860,1.000000,2.000000\n4.000000,-1.000000,1008.264099,416.321930,29.983509,16.969967,0.029385,1.000000,2.000000\n4.000000,-1.000000,1011.225281,228.485260,23.609488,12.000248,0.004987,1.000000,2.000000\n4.000000,-1.000000,1007.049561,500.467804,31.970903,14.001167,0.004986,1.000000,2.000000\n4.000000,-1.000000,1008.496948,521.406006,29.006104,14.004944,-0.000000,1.000000,2.000000\n4.000000,-1.000000,1010.950134,541.260620,25.128534,13.954017,0.069444,1.000000,2.000000\n4.000000,-1.000000,1006.045349,560.813599,34.281883,14.018928,0.025760,1.000000,2.000000\n4.000000,-1.000000,994.265381,616.405273,57.560669,19.999758,0.004987,1.000000,2.000000\n4.000000,-1.000000,1002.352417,580.843994,41.695107,15.996017,0.024225,1.000000,2.000000\n4.000000,-1.000000,830.973572,317.588104,601.306335,131.034561,1.597408,1.000000,8.000000\n4.000000,-1.000000,675.644653,479.705933,288.578522,79.649864,1.080890,1.000000,8.000000\n4.000000,-1.000000,650.322693,88.630600,246.856430,78.580940,2.079844,1.000000,8.000000\n4.000000,-1.000000,419.098907,105.285767,215.129578,124.403229,1.815125,1.000000,8.000000\n4.000000,-1.000000,236.309311,78.185181,177.926636,67.649208,1.814270,1.000000,8.000000\n4.000000,-1.000000,623.071472,357.654388,52.322197,23.703571,2.682838,1.000000,2.000000\n4.000000,-1.000000,622.142212,379.772491,32.694595,12.477630,2.737670,1.000000,2.000000\n4.000000,-1.000000,626.691284,396.732788,35.848690,13.389823,2.745336,1.000000,2.000000\n4.000000,-1.000000,635.998657,412.117188,34.665302,12.974297,2.815478,1.000000,2.000000\n4.000000,-1.000000,644.310547,427.216919,34.884693,14.760878,2.670132,1.000000,2.000000\n4.000000,-1.000000,652.845276,443.201141,30.184229,13.376966,2.759721,1.000000,2.000000\n4.000000,-1.000000,660.412537,457.940277,35.341030,14.800020,2.708191,1.000000,2.000000\n4.000000,-1.000000,673.811707,490.206268,31.305664,16.545584,2.682903,1.000000,2.000000\n4.000000,-1.000000,683.623779,505.318726,31.385458,16.155708,2.754240,1.000000,2.000000\n4.000000,-1.000000,689.614929,520.524658,32.310871,14.299405,2.766096,1.000000,2.000000\n4.000000,-1.000000,698.498718,536.880798,34.540131,13.926682,2.760677,1.000000,2.000000\n4.000000,-1.000000,705.300232,552.464661,28.381611,12.513257,2.699065,1.000000,2.000000\n4.000000,-1.000000,712.720215,568.500854,34.434406,16.100937,2.682878,1.000000,2.000000\n4.000000,-1.000000,721.537903,585.347412,38.012299,13.863899,2.682863,1.000000,2.000000\n4.000000,-1.000000,665.998657,545.114502,35.340977,12.507236,1.137460,1.000000,2.000000\n4.000000,-1.000000,640.855042,501.242920,34.882229,13.415606,1.112136,1.000000,2.000000\n4.000000,-1.000000,617.805481,451.027405,33.362816,12.031517,1.056685,1.000000,2.000000\n4.000000,-1.000000,576.623535,387.319305,25.940348,11.627570,1.111982,1.000000,2.000000\n4.000000,-1.000000,186.482986,116.315041,25.709755,13.340675,1.811314,1.000000,2.000000\n4.000000,-1.000000,194.213013,87.109131,26.563465,12.016853,1.897723,1.000000,2.000000\n4.000000,-1.000000,201.257217,58.444408,31.624641,12.649009,1.897446,1.000000,2.000000\n5.000000,-1.000000,863.070557,525.249023,59.999294,20.000795,3.136606,1.000000,2.000000\n5.000000,-1.000000,864.209717,452.743805,54.999031,19.000343,3.136606,1.000000,2.000000\n5.000000,-1.000000,860.096924,428.237946,58.077843,18.974974,0.046679,1.000000,2.000000\n5.000000,-1.000000,862.459106,402.751007,55.346115,19.024080,0.031339,1.000000,2.000000\n5.000000,-1.000000,863.340332,380.746246,59.076096,20.025702,0.045840,1.000000,2.000000\n5.000000,-1.000000,866.619934,334.728638,55.370880,19.997429,0.013202,1.000000,2.000000\n5.000000,-1.000000,864.896606,291.736359,53.084091,18.027647,0.051583,1.000000,2.000000\n5.000000,-1.000000,867.156067,270.232727,53.008591,15.016766,0.013888,1.000000,2.000000\n5.000000,-1.000000,867.625671,248.081116,53.152504,15.960179,0.066493,1.000000,2.000000\n5.000000,-1.000000,868.106995,226.222458,54.084820,17.028685,0.050478,1.000000,2.000000\n5.000000,-1.000000,870.270020,204.702927,57.036095,17.024054,0.030102,1.000000,2.000000\n5.000000,-1.000000,865.589417,182.223480,59.033772,15.992850,0.028914,1.000000,2.000000\n5.000000,-1.000000,863.258179,161.744598,48.344158,15.997562,0.015810,1.000000,2.000000\n5.000000,-1.000000,870.653259,140.707260,60.709797,18.014023,0.011685,1.000000,2.000000\n5.000000,-1.000000,866.397095,119.225693,57.008709,16.999866,0.012563,1.000000,2.000000\n5.000000,-1.000000,872.939270,97.695587,56.000530,16.999331,3.136606,1.000000,2.000000\n5.000000,-1.000000,871.812012,76.651260,63.072887,21.926065,0.042570,1.000000,2.000000\n5.000000,-1.000000,869.054016,55.219711,55.010193,19.015142,0.013149,1.000000,2.000000\n5.000000,-1.000000,868.629028,35.715298,55.101864,18.027332,0.049478,1.000000,2.000000\n5.000000,-1.000000,578.008728,112.665512,49.606304,21.429487,2.048346,1.000000,2.000000\n5.000000,-1.000000,600.406006,192.054871,61.199310,17.992104,0.518281,1.000000,2.000000\n5.000000,-1.000000,611.297485,170.500412,62.312775,20.226780,0.524244,1.000000,2.000000\n5.000000,-1.000000,865.487488,475.730621,55.008213,18.015049,0.013202,1.000000,2.000000\n5.000000,-1.000000,867.190918,549.229858,59.109688,19.026552,0.045789,1.000000,2.000000\n5.000000,-1.000000,649.415833,93.809212,60.683620,20.181633,0.488930,1.000000,2.000000\n5.000000,-1.000000,863.948669,572.240356,59.008244,17.013865,0.011951,1.000000,2.000000\n5.000000,-1.000000,800.941528,499.559723,38.355015,12.996207,0.021335,1.000000,2.000000\n5.000000,-1.000000,803.341919,479.545715,42.999863,17.998848,3.136606,1.000000,2.000000\n5.000000,-1.000000,798.998169,410.568420,55.835167,21.984020,0.031378,1.000000,2.000000\n5.000000,-1.000000,798.715820,388.075348,53.009628,18.015549,0.013887,1.000000,2.000000\n5.000000,-1.000000,798.763733,363.567322,61.385868,22.999010,0.011362,1.000000,2.000000\n5.000000,-1.000000,800.123169,340.037842,59.027962,20.025835,0.045044,1.000000,2.000000\n5.000000,-1.000000,797.523438,315.573975,61.351143,20.995329,0.011413,1.000000,2.000000\n5.000000,-1.000000,796.412842,293.077820,50.130455,16.030075,0.054925,1.000000,2.000000\n5.000000,-1.000000,797.939270,270.092224,59.033703,21.053820,0.028914,1.000000,2.000000\n5.000000,-1.000000,792.676880,246.097870,70.569420,18.991583,0.023561,1.000000,2.000000\n5.000000,-1.000000,798.069519,224.570770,57.377647,20.996960,0.012581,1.000000,2.000000\n5.000000,-1.000000,799.455505,201.563126,53.998592,18.002935,3.136609,1.000000,2.000000\n5.000000,-1.000000,798.880310,178.566956,62.170509,21.024990,0.043383,1.000000,2.000000\n5.000000,-1.000000,805.071167,158.540253,50.009834,17.016018,0.014999,1.000000,2.000000\n5.000000,-1.000000,816.310608,100.988159,35.012611,10.023528,0.023588,1.000000,2.000000\n5.000000,-1.000000,811.033142,117.004784,44.726021,14.986151,0.040387,1.000000,2.000000\n5.000000,-1.000000,805.140381,138.532883,57.999279,17.999866,3.136603,1.000000,2.000000\n5.000000,-1.000000,866.494263,610.232788,71.237366,20.025309,0.051276,1.000000,2.000000\n5.000000,-1.000000,636.556519,121.874611,59.479511,17.442738,0.458661,1.000000,2.000000\n5.000000,-1.000000,658.810181,72.762642,54.838924,20.142988,0.467141,1.000000,2.000000\n5.000000,-1.000000,398.278870,33.609825,49.429195,20.878647,0.284484,1.000000,2.000000\n5.000000,-1.000000,220.738724,159.448166,48.533726,15.796028,0.270453,1.000000,2.000000\n5.000000,-1.000000,223.424484,136.890900,58.660740,19.416958,0.202544,1.000000,2.000000\n5.000000,-1.000000,228.481781,107.908363,47.361614,12.606478,0.234742,1.000000,2.000000\n5.000000,-1.000000,234.876831,86.876595,57.559597,17.205645,0.235548,1.000000,2.000000\n5.000000,-1.000000,246.142319,39.819962,52.476032,16.744928,0.249384,1.000000,2.000000\n5.000000,-1.000000,254.026321,14.237019,51.922169,18.669701,0.266028,1.000000,2.000000\n5.000000,-1.000000,407.561127,9.240948,52.784264,20.210554,0.244602,1.000000,2.000000\n5.000000,-1.000000,392.933258,58.002747,47.803764,20.603172,0.270429,1.000000,2.000000\n5.000000,-1.000000,685.922485,20.826099,46.529774,17.474564,0.487463,1.000000,2.000000\n5.000000,-1.000000,382.435181,102.280975,49.999149,18.002090,0.278822,1.000000,2.000000\n5.000000,-1.000000,288.470154,205.606995,68.849121,13.593704,0.261163,1.000000,2.000000\n5.000000,-1.000000,193.343704,180.584183,34.386230,11.382741,0.204035,1.000000,2.000000\n5.000000,-1.000000,232.189941,191.325623,46.173187,14.554763,0.303095,1.000000,2.000000\n5.000000,-1.000000,341.021454,215.848480,33.330048,11.401598,0.269111,1.000000,2.000000\n5.000000,-1.000000,376.065186,224.674286,36.283447,13.139214,0.192437,1.000000,2.000000\n5.000000,-1.000000,418.025696,216.465469,51.185585,14.316457,0.192378,1.000000,2.000000\n5.000000,-1.000000,420.418518,194.953339,39.629261,14.783241,0.233594,1.000000,2.000000\n5.000000,-1.000000,428.187347,175.586945,44.125748,15.295472,0.192383,1.000000,2.000000\n5.000000,-1.000000,432.723358,155.890930,44.645840,15.517920,0.223542,1.000000,2.000000\n5.000000,-1.000000,438.366089,137.287201,36.401230,16.483883,0.273348,1.000000,2.000000\n5.000000,-1.000000,439.508850,112.857262,34.381454,14.557504,0.261239,1.000000,2.000000\n5.000000,-1.000000,449.919067,94.804131,43.304134,15.801160,0.279734,1.000000,2.000000\n5.000000,-1.000000,464.921082,48.894020,53.366337,15.738785,0.221955,1.000000,2.000000\n5.000000,-1.000000,468.574585,25.710358,52.435677,20.863649,0.249383,1.000000,2.000000\n5.000000,-1.000000,351.908936,193.295609,69.501122,14.536543,0.215287,1.000000,2.000000\n5.000000,-1.000000,357.799744,171.264282,65.125175,15.771894,0.247548,1.000000,2.000000\n5.000000,-1.000000,361.182587,147.747879,71.466568,19.198656,0.257455,1.000000,2.000000\n5.000000,-1.000000,859.014160,313.266357,45.999069,16.002060,3.136607,1.000000,2.000000\n5.000000,-1.000000,1004.566833,475.387512,37.133774,19.015797,0.013887,1.000000,2.000000\n5.000000,-1.000000,1007.730469,411.385986,30.874313,16.969986,0.019411,1.000000,2.000000\n5.000000,-1.000000,1009.799255,223.513443,26.461838,12.000247,3.136606,1.000000,2.000000\n5.000000,-1.000000,1006.944946,495.608459,32.110107,13.996002,-0.000000,1.000000,2.000000\n5.000000,-1.000000,1008.496948,516.593933,29.006104,13.994995,-0.000000,1.000000,2.000000\n5.000000,-1.000000,1011.044922,536.272461,24.783361,13.953316,0.059471,1.000000,2.000000\n5.000000,-1.000000,1006.239624,555.879700,33.746151,14.018911,0.015787,1.000000,2.000000\n5.000000,-1.000000,994.776184,611.592896,56.547947,19.999762,3.136606,1.000000,2.000000\n5.000000,-1.000000,1002.641479,575.944946,40.949108,15.996016,0.014253,1.000000,2.000000\n5.000000,-1.000000,829.018799,314.416565,601.306274,131.034561,1.587435,1.000000,8.000000\n5.000000,-1.000000,675.314514,478.075562,288.578522,79.649872,1.070916,1.000000,8.000000\n5.000000,-1.000000,645.472595,88.422897,244.241348,78.569832,2.069870,1.000000,8.000000\n5.000000,-1.000000,415.047272,106.232529,215.129593,124.403259,1.805151,1.000000,8.000000\n5.000000,-1.000000,232.262146,79.839409,180.222610,67.649193,1.804297,1.000000,8.000000\n5.000000,-1.000000,621.526611,356.554413,52.322197,23.703581,2.672866,1.000000,2.000000\n5.000000,-1.000000,620.818054,378.680603,32.694611,12.477595,2.727696,1.000000,2.000000\n5.000000,-1.000000,625.536011,395.594635,35.848679,13.389781,2.735363,1.000000,2.000000\n5.000000,-1.000000,634.996277,410.885376,34.665287,12.974266,2.805505,1.000000,2.000000\n5.000000,-1.000000,643.458496,425.901703,34.884712,14.760893,2.660159,1.000000,2.000000\n5.000000,-1.000000,652.152161,441.799835,30.184278,13.376930,2.749749,1.000000,2.000000\n5.000000,-1.000000,659.866028,456.462830,35.341000,14.800063,2.698217,1.000000,2.000000\n5.000000,-1.000000,673.206299,488.312439,31.294230,16.551615,2.699937,1.000000,2.000000\n5.000000,-1.000000,683.389832,503.471710,31.383236,16.156864,2.756160,1.000000,2.000000\n5.000000,-1.000000,689.691101,518.752930,32.310833,14.299481,2.756124,1.000000,2.000000\n5.000000,-1.000000,698.737671,535.019531,34.540073,13.926644,2.750705,1.000000,2.000000\n5.000000,-1.000000,705.694336,550.534912,28.381639,12.513277,2.689093,1.000000,2.000000\n5.000000,-1.000000,713.273743,566.496338,34.434429,16.100958,2.672904,1.000000,2.000000\n5.000000,-1.000000,722.259094,583.254211,38.012291,13.863896,2.672887,1.000000,2.000000\n5.000000,-1.000000,666.321289,543.576965,35.340977,12.507242,1.127486,1.000000,2.000000\n5.000000,-1.000000,640.901245,499.781158,34.885136,13.414461,1.089337,1.000000,2.000000\n5.000000,-1.000000,617.192200,449.975311,33.362816,12.031491,1.046711,1.000000,2.000000\n5.000000,-1.000000,575.376892,386.680969,25.940384,11.627533,1.102007,1.000000,2.000000\n5.000000,-1.000000,182.552948,119.581154,25.709764,13.340671,1.801341,1.000000,2.000000\n5.000000,-1.000000,189.991333,90.299599,26.563465,12.016859,1.887749,1.000000,2.000000\n5.000000,-1.000000,196.749924,61.566559,31.624640,12.649028,1.887520,1.000000,2.000000\n6.000000,-1.000000,863.344543,521.247253,60.007595,19.998020,0.001713,1.000000,2.000000\n6.000000,-1.000000,863.601196,449.234131,54.999008,19.000343,3.126633,1.000000,2.000000\n6.000000,-1.000000,859.244141,424.770477,58.077824,18.975006,0.036706,1.000000,2.000000\n6.000000,-1.000000,861.352173,399.261261,55.346134,19.024061,0.021365,1.000000,2.000000\n6.000000,-1.000000,862.023743,377.222565,59.076118,20.025728,0.034966,1.000000,2.000000\n6.000000,-1.000000,864.834412,331.200775,55.370888,19.997465,0.003229,1.000000,2.000000\n6.000000,-1.000000,862.682190,288.227844,53.084099,18.027668,0.041609,1.000000,2.000000\n6.000000,-1.000000,864.727295,266.702759,53.008579,15.016773,0.003915,1.000000,2.000000\n6.000000,-1.000000,864.975891,244.547470,53.152496,15.960184,0.056517,1.000000,2.000000\n6.000000,-1.000000,865.239136,222.685181,54.084766,17.028692,0.040505,1.000000,2.000000\n6.000000,-1.000000,867.187500,201.145126,57.036087,17.024050,0.020129,1.000000,2.000000\n6.000000,-1.000000,862.282898,178.713486,59.033718,15.992854,0.018940,1.000000,2.000000\n6.000000,-1.000000,859.747559,158.258865,48.344196,15.997552,0.005837,1.000000,2.000000\n6.000000,-1.000000,866.932434,137.148834,60.709789,18.014025,0.001712,1.000000,2.000000\n6.000000,-1.000000,862.604004,115.210907,56.999954,17.002483,3.126630,1.000000,2.000000\n6.000000,-1.000000,868.789490,94.116478,56.000584,16.999332,3.126633,1.000000,2.000000\n6.000000,-1.000000,867.452271,73.084457,63.072872,21.926060,0.032596,1.000000,2.000000\n6.000000,-1.000000,864.480591,51.681473,55.010170,19.015137,0.003176,1.000000,2.000000\n6.000000,-1.000000,863.861145,32.182274,55.101894,18.027334,0.039505,1.000000,2.000000\n6.000000,-1.000000,574.022827,112.027054,49.606300,21.429567,2.038371,1.000000,2.000000\n6.000000,-1.000000,597.210754,191.189102,61.199284,17.992088,0.508307,1.000000,2.000000\n6.000000,-1.000000,607.886719,169.527100,62.312767,20.226757,0.514270,1.000000,2.000000\n6.000000,-1.000000,865.108276,472.207031,55.008156,18.015047,0.003228,1.000000,2.000000\n6.000000,-1.000000,867.544495,545.685608,59.109730,19.026533,0.035815,1.000000,2.000000\n6.000000,-1.000000,645.238281,92.459511,60.683590,20.181614,0.478957,1.000000,2.000000\n6.000000,-1.000000,864.531921,568.727234,59.008293,17.013889,0.001979,1.000000,2.000000\n6.000000,-1.000000,800.803040,496.678650,38.354965,12.996188,0.011362,1.000000,2.000000\n6.000000,-1.000000,803.003662,476.641724,42.999863,17.998840,3.126633,1.000000,2.000000\n6.000000,-1.000000,797.972229,407.711151,55.835186,21.984009,0.021405,1.000000,2.000000\n6.000000,-1.000000,797.465759,385.222046,53.009617,18.015537,0.003915,1.000000,2.000000\n6.000000,-1.000000,797.269104,360.714722,61.385876,22.999043,0.001389,1.000000,2.000000\n6.000000,-1.000000,798.393921,337.172974,59.028004,20.025805,0.035072,1.000000,2.000000\n6.000000,-1.000000,795.550232,312.736176,61.351208,20.995346,0.001439,1.000000,2.000000\n6.000000,-1.000000,794.215332,290.252197,50.130394,16.030090,0.044952,1.000000,2.000000\n6.000000,-1.000000,795.512390,267.252502,59.033718,21.053825,0.018940,1.000000,2.000000\n6.000000,-1.000000,790.011047,243.311844,70.569504,18.991562,0.013588,1.000000,2.000000\n6.000000,-1.000000,795.188721,221.732071,57.377644,20.996958,0.002608,1.000000,2.000000\n6.000000,-1.000000,796.345215,198.711609,53.998627,18.002930,3.126633,1.000000,2.000000\n6.000000,-1.000000,795.540649,175.722443,62.170490,21.024986,0.033410,1.000000,2.000000\n6.000000,-1.000000,801.531433,155.634995,50.009846,17.016010,0.005026,1.000000,2.000000\n6.000000,-1.000000,812.196411,97.973656,35.012585,10.023527,0.013615,1.000000,2.000000\n6.000000,-1.000000,807.078857,114.042114,44.725971,14.986156,0.030414,1.000000,2.000000\n6.000000,-1.000000,801.401245,135.627869,57.999302,17.999861,3.126632,1.000000,2.000000\n6.000000,-1.000000,867.456177,606.692383,71.237389,20.025326,0.041302,1.000000,2.000000\n6.000000,-1.000000,632.659546,120.651840,59.479519,17.442760,0.448688,1.000000,2.000000\n6.000000,-1.000000,654.422363,71.320358,54.838902,20.142977,0.457168,1.000000,2.000000\n6.000000,-1.000000,393.513428,34.767765,49.429188,20.878643,0.274511,1.000000,2.000000\n6.000000,-1.000000,217.237137,162.370483,48.533714,15.796027,0.260479,1.000000,2.000000\n6.000000,-1.000000,219.697830,139.787552,58.660740,19.416960,0.192571,1.000000,2.000000\n6.000000,-1.000000,224.465820,110.756027,47.361622,12.606472,0.224769,1.000000,2.000000\n6.000000,-1.000000,230.650787,89.661530,57.559597,17.205654,0.225574,1.000000,2.000000\n6.000000,-1.000000,241.446442,42.494881,52.476040,16.744926,0.239410,1.000000,2.000000\n6.000000,-1.000000,249.076401,16.828846,51.922176,18.681547,0.256055,1.000000,2.000000\n6.000000,-1.000000,402.563110,10.261992,52.784237,20.304182,0.234629,1.000000,2.000000\n6.000000,-1.000000,388.411407,59.212799,47.803761,20.603174,0.260456,1.000000,2.000000\n6.000000,-1.000000,681.015320,19.115992,46.529743,17.474560,0.477490,1.000000,2.000000\n6.000000,-1.000000,378.355469,103.593536,49.999161,18.002098,0.268848,1.000000,2.000000\n6.000000,-1.000000,285.425537,207.851517,68.849159,13.593709,0.251190,1.000000,2.000000\n6.000000,-1.000000,190.054306,183.778687,34.386246,11.382751,0.194062,1.000000,2.000000\n6.000000,-1.000000,229.005753,194.132156,46.173187,14.554766,0.293121,1.000000,2.000000\n6.000000,-1.000000,338.076324,217.568390,33.330036,11.401578,0.259138,1.000000,2.000000\n6.000000,-1.000000,373.206390,226.044281,36.283463,13.139216,0.182464,1.000000,2.000000\n6.000000,-1.000000,415.082947,217.417389,51.185600,14.316455,0.182404,1.000000,2.000000\n6.000000,-1.000000,417.261108,195.882477,39.629284,14.783228,0.223620,1.000000,2.000000\n6.000000,-1.000000,425.193542,175.814682,44.147125,15.288060,0.213524,1.000000,2.000000\n6.000000,-1.000000,429.175751,156.699265,44.645844,15.517920,0.213569,1.000000,2.000000\n6.000000,-1.000000,435.037628,137.519379,36.380867,16.493109,0.229929,1.000000,2.000000\n6.000000,-1.000000,435.531769,113.600075,34.381462,14.557506,0.251266,1.000000,2.000000\n6.000000,-1.000000,445.761475,95.444023,43.304146,15.801166,0.269761,1.000000,2.000000\n6.000000,-1.000000,460.304840,49.386574,53.366375,15.738791,0.211982,1.000000,2.000000\n6.000000,-1.000000,463.726898,26.167622,52.435696,20.863647,0.239410,1.000000,2.000000\n6.000000,-1.000000,348.738403,194.908066,69.501144,14.536543,0.205313,1.000000,2.000000\n6.000000,-1.000000,354.409210,172.819092,65.125160,15.771884,0.237574,1.000000,2.000000\n6.000000,-1.000000,357.557373,149.270111,71.466583,19.198660,0.247482,1.000000,2.000000\n6.000000,-1.000000,857.014893,309.815460,45.999092,16.002035,3.126633,1.000000,2.000000\n6.000000,-1.000000,1004.323914,470.477539,37.426922,19.015772,0.003914,1.000000,2.000000\n6.000000,-1.000000,1007.172974,406.451416,31.815613,16.969988,0.009437,1.000000,2.000000\n6.000000,-1.000000,1008.378845,218.540985,29.425241,12.000247,3.126633,1.000000,2.000000\n6.000000,-1.000000,1006.816406,490.827881,32.367188,13.984619,-0.000000,1.000000,2.000000\n6.000000,-1.000000,1008.472961,511.781372,29.054077,13.983612,-0.000000,1.000000,2.000000\n6.000000,-1.000000,1011.115479,531.286621,24.489475,13.952802,0.049496,1.000000,2.000000\n6.000000,-1.000000,1006.410400,550.946960,33.261360,14.018940,0.005813,1.000000,2.000000\n6.000000,-1.000000,995.312134,606.779663,55.681160,19.999796,3.126633,1.000000,2.000000\n6.000000,-1.000000,1002.907471,571.047058,40.254105,15.996081,0.004278,1.000000,2.000000\n6.000000,-1.000000,827.032532,311.264740,601.306335,131.034607,1.577461,1.000000,8.000000\n6.000000,-1.000000,674.968018,476.448486,288.578522,79.649887,1.060943,1.000000,8.000000\n6.000000,-1.000000,640.651978,88.231567,241.712204,78.559280,2.059897,1.000000,8.000000\n6.000000,-1.000000,411.005310,107.219643,215.129608,124.403259,1.795178,1.000000,8.000000\n6.000000,-1.000000,228.225143,81.511162,182.559967,67.649193,1.794324,1.000000,8.000000\n6.000000,-1.000000,619.970947,355.469818,52.322220,23.703606,2.662891,1.000000,2.000000\n6.000000,-1.000000,619.482971,377.601929,32.694607,12.477628,2.717723,1.000000,2.000000\n6.000000,-1.000000,624.369446,394.468109,35.848709,13.389786,2.725390,1.000000,2.000000\n6.000000,-1.000000,633.981812,409.663788,34.665279,12.974257,2.795532,1.000000,2.000000\n6.000000,-1.000000,642.593201,424.594849,34.884693,14.760871,2.650185,1.000000,2.000000\n6.000000,-1.000000,651.445068,440.405579,30.184296,13.376953,2.739775,1.000000,2.000000\n6.000000,-1.000000,659.304749,454.990906,35.340946,14.800044,2.688244,1.000000,2.000000\n6.000000,-1.000000,673.344910,486.983276,31.305668,16.545580,2.662956,1.000000,2.000000\n6.000000,-1.000000,683.456421,501.897034,31.385401,16.155722,2.734292,1.000000,2.000000\n6.000000,-1.000000,689.749695,516.980347,32.310822,14.299421,2.746150,1.000000,2.000000\n6.000000,-1.000000,698.957947,533.156067,34.540108,13.926706,2.740731,1.000000,2.000000\n6.000000,-1.000000,706.068848,548.601135,28.381641,12.513254,2.679120,1.000000,2.000000\n6.000000,-1.000000,713.807129,564.486206,34.434395,16.100943,2.662930,1.000000,2.000000\n6.000000,-1.000000,722.959229,581.153625,38.012257,13.863955,2.662915,1.000000,2.000000\n6.000000,-1.000000,666.628479,542.036255,35.341000,12.507210,1.117512,1.000000,2.000000\n6.000000,-1.000000,640.614929,498.675079,34.882282,13.415616,1.092190,1.000000,2.000000\n6.000000,-1.000000,616.568359,448.929260,33.362778,12.031453,1.036737,1.000000,2.000000\n6.000000,-1.000000,574.123840,386.055145,25.940346,11.627553,1.092035,1.000000,2.000000\n6.000000,-1.000000,178.655670,122.886276,25.709759,13.340678,1.791368,1.000000,2.000000\n6.000000,-1.000000,185.801682,93.532013,26.563463,12.016850,1.877775,1.000000,2.000000\n6.000000,-1.000000,192.272736,64.732498,31.624636,12.649010,1.877500,1.000000,2.000000\n7.000000,-1.000000,863.419189,517.742798,60.007599,19.998034,3.133331,1.000000,2.000000\n7.000000,-1.000000,862.957642,445.730652,54.999031,19.000343,3.116660,1.000000,2.000000\n7.000000,-1.000000,858.356934,421.311707,58.077885,18.974968,0.026732,1.000000,2.000000\n7.000000,-1.000000,860.210388,395.782745,55.346184,19.024069,0.011393,1.000000,2.000000\n7.000000,-1.000000,860.652527,373.764740,59.076130,20.025682,0.025893,1.000000,2.000000\n7.000000,-1.000000,863.013611,327.690887,55.370914,19.997446,3.134848,1.000000,2.000000\n7.000000,-1.000000,860.443359,284.714081,53.084087,18.027660,0.030591,1.000000,2.000000\n7.000000,-1.000000,862.263306,263.197144,53.008602,15.016780,3.135534,1.000000,2.000000\n7.000000,-1.000000,862.290894,241.040421,53.152477,15.960182,0.046542,1.000000,2.000000\n7.000000,-1.000000,862.336243,219.176651,54.084839,17.028673,0.030532,1.000000,2.000000\n7.000000,-1.000000,864.069580,197.618225,57.036076,17.024044,0.010155,1.000000,2.000000\n7.000000,-1.000000,859.187927,174.238983,58.999821,16.002041,3.116661,1.000000,2.000000\n7.000000,-1.000000,856.202271,154.808319,48.344151,15.997562,3.137456,1.000000,2.000000\n7.000000,-1.000000,863.176270,133.627670,60.709854,18.014019,3.133331,1.000000,2.000000\n7.000000,-1.000000,858.492615,112.235283,57.008751,16.999866,3.134209,1.000000,2.000000\n7.000000,-1.000000,864.604065,90.578949,56.000565,16.999325,3.116659,1.000000,2.000000\n7.000000,-1.000000,863.057251,69.561302,63.072910,21.926065,0.022623,1.000000,2.000000\n7.000000,-1.000000,859.872375,48.189026,55.010120,19.015137,3.134795,1.000000,2.000000\n7.000000,-1.000000,859.058411,28.696972,55.101833,18.027330,0.029531,1.000000,2.000000\n7.000000,-1.000000,570.030762,111.428375,49.606335,21.429518,2.028399,1.000000,2.000000\n7.000000,-1.000000,594.007080,190.355255,61.199287,17.992065,0.498334,1.000000,2.000000\n7.000000,-1.000000,604.466431,168.587814,62.312790,20.226791,0.504297,1.000000,2.000000\n7.000000,-1.000000,864.693909,468.687469,55.008148,18.015043,3.134848,1.000000,2.000000\n7.000000,-1.000000,867.862793,542.138000,59.109772,19.026575,0.025842,1.000000,2.000000\n7.000000,-1.000000,641.047607,91.151588,60.683609,20.181612,0.468983,1.000000,2.000000\n7.000000,-1.000000,865.080139,565.208557,59.008293,17.013901,3.133598,1.000000,2.000000\n7.000000,-1.000000,800.635864,493.799194,38.354942,12.996211,0.001389,1.000000,2.000000\n7.000000,-1.000000,802.636475,473.741211,42.999825,17.998850,3.116659,1.000000,2.000000\n7.000000,-1.000000,796.917908,404.864319,55.835220,21.983990,0.011432,1.000000,2.000000\n7.000000,-1.000000,796.187134,382.381378,53.009571,18.015553,3.135533,1.000000,2.000000\n7.000000,-1.000000,795.746155,357.877258,61.385872,22.999037,3.133008,1.000000,2.000000\n7.000000,-1.000000,796.635986,334.325470,59.027992,20.025839,0.025101,1.000000,2.000000\n7.000000,-1.000000,793.548828,309.918152,61.351208,20.995340,3.133059,1.000000,2.000000\n7.000000,-1.000000,791.989746,287.448700,50.130459,16.030113,0.034980,1.000000,2.000000\n7.000000,-1.000000,793.057373,264.437164,59.033741,21.053820,0.008967,1.000000,2.000000\n7.000000,-1.000000,787.317566,240.552582,70.569458,18.991571,0.003614,1.000000,2.000000\n7.000000,-1.000000,792.279724,218.922241,57.377674,20.996958,3.134227,1.000000,2.000000\n7.000000,-1.000000,793.206482,195.891464,53.998604,18.002926,3.116662,1.000000,2.000000\n7.000000,-1.000000,792.172791,172.911377,62.170483,21.024981,0.023437,1.000000,2.000000\n7.000000,-1.000000,797.962952,152.765182,50.009892,17.016005,3.136645,1.000000,2.000000\n7.000000,-1.000000,808.052368,95.000351,35.012562,10.023530,0.003642,1.000000,2.000000\n7.000000,-1.000000,803.095337,111.119049,44.726048,14.986157,0.020440,1.000000,2.000000\n7.000000,-1.000000,797.633118,132.760345,57.999302,17.999857,3.116659,1.000000,2.000000\n7.000000,-1.000000,868.382812,603.142700,71.237419,20.025322,0.031328,1.000000,2.000000\n7.000000,-1.000000,628.750549,119.467926,59.479523,17.442741,0.438714,1.000000,2.000000\n7.000000,-1.000000,650.020325,69.921875,54.838928,20.142979,0.447194,1.000000,2.000000\n7.000000,-1.000000,388.759827,35.973198,49.429199,20.878643,0.264538,1.000000,2.000000\n7.000000,-1.000000,213.764862,165.327576,48.533722,15.796026,0.250506,1.000000,2.000000\n7.000000,-1.000000,216.000244,142.721268,58.660732,19.416962,0.182597,1.000000,2.000000\n7.000000,-1.000000,220.478439,113.643593,47.361626,12.606476,0.214796,1.000000,2.000000\n7.000000,-1.000000,226.452713,92.488464,57.559589,17.205647,0.215601,1.000000,2.000000\n7.000000,-1.000000,236.777435,45.216499,52.476032,16.744928,0.229437,1.000000,2.000000\n7.000000,-1.000000,244.151093,19.475643,51.922188,18.681545,0.246081,1.000000,2.000000\n7.000000,-1.000000,397.576447,11.326782,52.784248,20.410032,0.224656,1.000000,2.000000\n7.000000,-1.000000,383.901825,60.467888,47.803761,20.603168,0.250482,1.000000,2.000000\n7.000000,-1.000000,676.092285,17.455399,46.527496,17.474564,0.467517,1.000000,2.000000\n7.000000,-1.000000,374.288971,104.946693,49.999142,18.002090,0.258875,1.000000,2.000000\n7.000000,-1.000000,282.403473,210.126328,68.849129,13.593701,0.241218,1.000000,2.000000\n7.000000,-1.000000,186.796921,187.005814,34.386230,11.382740,0.184088,1.000000,2.000000\n7.000000,-1.000000,225.849670,196.970306,46.173195,14.554761,0.283148,1.000000,2.000000\n7.000000,-1.000000,335.148621,219.317612,33.330067,11.401578,0.249165,1.000000,2.000000\n7.000000,-1.000000,370.361420,227.442703,36.283459,13.139224,0.172490,1.000000,2.000000\n7.000000,-1.000000,412.149811,218.398590,51.185604,14.316448,0.172431,1.000000,2.000000\n7.000000,-1.000000,414.113098,196.843048,39.629261,14.783240,0.213647,1.000000,2.000000\n7.000000,-1.000000,421.845062,176.697144,44.147133,15.288063,0.203550,1.000000,2.000000\n7.000000,-1.000000,425.636414,157.542953,44.645828,15.517908,0.203595,1.000000,2.000000\n7.000000,-1.000000,431.306732,138.305588,36.380875,16.493122,0.219956,1.000000,2.000000\n7.000000,-1.000000,431.562256,114.382523,34.381447,14.557506,0.241293,1.000000,2.000000\n7.000000,-1.000000,441.610382,96.125343,43.304165,15.801171,0.259787,1.000000,2.000000\n7.000000,-1.000000,455.693665,49.925121,53.366344,15.738791,0.202010,1.000000,2.000000\n7.000000,-1.000000,458.883972,26.673220,52.435711,20.863653,0.229437,1.000000,2.000000\n7.000000,-1.000000,345.584106,196.552063,69.501160,14.536553,0.195340,1.000000,2.000000\n7.000000,-1.000000,351.034332,174.407639,65.125191,15.771889,0.227601,1.000000,2.000000\n7.000000,-1.000000,353.947479,150.828415,71.466560,19.198650,0.237509,1.000000,2.000000\n7.000000,-1.000000,854.981323,306.384613,45.999058,16.002041,3.116661,1.000000,2.000000\n7.000000,-1.000000,1004.114868,465.681030,37.770203,19.019318,-0.000000,1.000000,2.000000\n7.000000,-1.000000,1006.591675,401.526367,32.816650,16.969208,-0.000000,1.000000,2.000000\n7.000000,-1.000000,1006.934448,213.567535,32.440292,12.000257,3.116660,1.000000,2.000000\n7.000000,-1.000000,1006.671875,486.031952,32.671959,13.973392,3.140476,1.000000,2.000000\n7.000000,-1.000000,1008.428833,506.961395,29.149969,13.971607,3.141057,1.000000,2.000000\n7.000000,-1.000000,1011.161743,526.302856,24.246813,13.952229,0.039524,1.000000,2.000000\n7.000000,-1.000000,1006.586426,546.023193,32.878647,14.019260,3.137939,1.000000,2.000000\n7.000000,-1.000000,995.825500,601.965027,54.864948,19.999748,3.116660,1.000000,2.000000\n7.000000,-1.000000,1003.149780,566.261963,39.700439,15.994080,3.141593,1.000000,2.000000\n7.000000,-1.000000,825.014771,308.132904,601.306396,131.034546,1.567488,1.000000,8.000000\n7.000000,-1.000000,674.605286,474.824890,288.578522,79.649849,1.050969,1.000000,8.000000\n7.000000,-1.000000,635.860229,88.056717,239.267120,78.549248,2.049924,1.000000,8.000000\n7.000000,-1.000000,406.973419,108.246986,215.129593,124.403236,1.785205,1.000000,8.000000\n7.000000,-1.000000,224.198013,83.200272,184.938843,67.649185,1.784350,1.000000,8.000000\n7.000000,-1.000000,618.404480,354.400818,52.322186,23.703579,2.652918,1.000000,2.000000\n7.000000,-1.000000,618.137207,376.536682,32.694633,12.477622,2.707750,1.000000,2.000000\n7.000000,-1.000000,623.191711,393.353333,35.848698,13.389791,2.715417,1.000000,2.000000\n7.000000,-1.000000,632.955078,408.452301,34.665340,12.974282,2.785558,1.000000,2.000000\n7.000000,-1.000000,641.714966,423.296753,34.884670,14.760898,2.640212,1.000000,2.000000\n7.000000,-1.000000,650.724121,439.018433,30.184233,13.376941,2.729801,1.000000,2.000000\n7.000000,-1.000000,658.728882,453.524628,35.340958,14.799999,2.678270,1.000000,2.000000\n7.000000,-1.000000,672.701782,485.101898,31.294296,16.551632,2.679990,1.000000,2.000000\n7.000000,-1.000000,683.347046,500.187561,31.385452,16.155718,2.724320,1.000000,2.000000\n7.000000,-1.000000,689.790527,515.207458,32.310818,14.299447,2.736176,1.000000,2.000000\n7.000000,-1.000000,699.159668,531.290466,34.540138,13.926731,2.730757,1.000000,2.000000\n7.000000,-1.000000,706.424255,546.663940,28.381666,12.513280,2.669146,1.000000,2.000000\n7.000000,-1.000000,714.320618,562.471008,34.434414,16.100945,2.652958,1.000000,2.000000\n7.000000,-1.000000,723.638367,579.046265,38.012276,13.863898,2.652940,1.000000,2.000000\n7.000000,-1.000000,666.920410,540.492737,35.340958,12.507271,1.107540,1.000000,2.000000\n7.000000,-1.000000,640.475586,497.393066,34.882244,13.415622,1.082218,1.000000,2.000000\n7.000000,-1.000000,615.934204,447.889618,33.362797,12.031491,1.026764,1.000000,2.000000\n7.000000,-1.000000,572.864624,385.441833,25.940336,11.627505,1.082064,1.000000,2.000000\n7.000000,-1.000000,174.791580,126.230133,25.709763,13.340685,1.781395,1.000000,2.000000\n7.000000,-1.000000,181.644485,96.806061,26.563459,12.016862,1.867802,1.000000,2.000000\n7.000000,-1.000000,187.827972,67.943428,31.624640,12.649011,1.867526,1.000000,2.000000\n8.000000,-1.000000,863.309814,514.740723,59.999256,20.000769,3.106687,1.000000,2.000000\n8.000000,-1.000000,862.279419,442.233826,54.999012,19.000340,3.106686,1.000000,2.000000\n8.000000,-1.000000,857.435303,417.861908,58.077858,18.974960,0.016759,1.000000,2.000000\n8.000000,-1.000000,859.033997,392.315735,55.346176,19.024050,0.001419,1.000000,2.000000\n8.000000,-1.000000,859.256531,370.294495,59.076092,20.025719,0.015920,1.000000,2.000000\n8.000000,-1.000000,861.158081,324.199402,55.370888,19.997463,3.124875,1.000000,2.000000\n8.000000,-1.000000,858.159302,281.250336,53.084076,18.027664,0.020617,1.000000,2.000000\n8.000000,-1.000000,859.764526,259.716278,53.008583,15.016771,3.125561,1.000000,2.000000\n8.000000,-1.000000,859.571289,237.560501,53.152466,15.960192,0.036572,1.000000,2.000000\n8.000000,-1.000000,859.398376,215.697266,54.084793,17.028681,0.020558,1.000000,2.000000\n8.000000,-1.000000,860.916687,194.122635,57.036072,17.024046,0.000182,1.000000,2.000000\n8.000000,-1.000000,855.565796,171.793289,59.033718,15.992846,3.140587,1.000000,2.000000\n8.000000,-1.000000,852.622986,151.393311,48.344162,15.997560,3.127483,1.000000,2.000000\n8.000000,-1.000000,859.385254,130.144165,60.709831,18.014021,3.123358,1.000000,2.000000\n8.000000,-1.000000,854.620239,108.297012,56.999996,17.002491,3.106686,1.000000,2.000000\n8.000000,-1.000000,860.383667,87.083344,56.000542,16.999329,3.106686,1.000000,2.000000\n8.000000,-1.000000,858.627319,66.082169,63.072918,21.926058,0.012650,1.000000,2.000000\n8.000000,-1.000000,855.229431,44.742706,55.010170,19.015133,3.124821,1.000000,2.000000\n8.000000,-1.000000,854.221130,25.259747,55.101891,18.027334,0.019558,1.000000,2.000000\n8.000000,-1.000000,566.032898,110.869545,49.606346,21.429512,2.018426,1.000000,2.000000\n8.000000,-1.000000,590.795166,189.553391,61.199314,17.992071,0.488360,1.000000,2.000000\n8.000000,-1.000000,601.036926,167.682724,62.312794,20.226805,0.494324,1.000000,2.000000\n8.000000,-1.000000,864.244385,465.172150,55.008240,18.015059,3.124875,1.000000,2.000000\n8.000000,-1.000000,868.145752,538.587524,59.109760,19.026552,0.015869,1.000000,2.000000\n8.000000,-1.000000,636.843994,89.885498,60.683578,20.181614,0.459010,1.000000,2.000000\n8.000000,-1.000000,865.593262,561.684692,59.008301,17.013891,3.123624,1.000000,2.000000\n8.000000,-1.000000,800.440002,490.921448,38.354996,12.996183,3.133008,1.000000,2.000000\n8.000000,-1.000000,802.240662,470.844604,42.999847,17.998848,3.106686,1.000000,2.000000\n8.000000,-1.000000,795.835266,402.028046,55.835220,21.984026,0.001458,1.000000,2.000000\n8.000000,-1.000000,794.880310,379.553589,53.009682,18.015560,3.125560,1.000000,2.000000\n8.000000,-1.000000,794.194885,355.055084,61.385899,22.999039,3.123034,1.000000,2.000000\n8.000000,-1.000000,794.849915,331.495575,59.028000,20.025818,0.015127,1.000000,2.000000\n8.000000,-1.000000,791.519470,307.120270,61.351204,20.995352,3.123085,1.000000,2.000000\n8.000000,-1.000000,789.736389,284.667450,50.130428,16.030081,0.025006,1.000000,2.000000\n8.000000,-1.000000,790.574524,261.646454,59.033718,21.053831,3.140587,1.000000,2.000000\n8.000000,-1.000000,784.596680,237.820282,70.569443,18.991564,3.135234,1.000000,2.000000\n8.000000,-1.000000,789.343018,216.141571,57.377678,20.996948,3.124254,1.000000,2.000000\n8.000000,-1.000000,790.039978,193.102600,53.998596,18.002926,3.106686,1.000000,2.000000\n8.000000,-1.000000,788.777039,170.134033,62.170544,21.024988,0.013464,1.000000,2.000000\n8.000000,-1.000000,794.366028,149.931091,50.009842,17.016010,3.126672,1.000000,2.000000\n8.000000,-1.000000,803.878845,92.068512,35.012604,10.023531,3.135261,1.000000,2.000000\n8.000000,-1.000000,799.082886,108.235855,44.726021,14.986154,0.010467,1.000000,2.000000\n8.000000,-1.000000,793.836792,129.930511,57.999332,17.999861,3.106687,1.000000,2.000000\n8.000000,-1.000000,869.274292,599.583862,71.237381,20.025293,0.021356,1.000000,2.000000\n8.000000,-1.000000,624.830017,118.323097,59.479515,17.442717,0.428741,1.000000,2.000000\n8.000000,-1.000000,645.604553,68.567360,54.838928,20.142982,0.437221,1.000000,2.000000\n8.000000,-1.000000,384.018463,37.225956,49.429207,20.878639,0.254564,1.000000,2.000000\n8.000000,-1.000000,210.322311,168.319183,48.533710,15.796021,0.240533,1.000000,2.000000\n8.000000,-1.000000,212.332092,145.691635,58.660725,19.416964,0.172625,1.000000,2.000000\n8.000000,-1.000000,216.520081,116.570801,47.361607,12.606474,0.204822,1.000000,2.000000\n8.000000,-1.000000,222.283112,95.357132,57.559605,17.205647,0.205628,1.000000,2.000000\n8.000000,-1.000000,232.135849,47.984550,52.476048,16.744926,0.219464,1.000000,2.000000\n8.000000,-1.000000,239.222763,22.216444,51.922283,18.681513,0.238062,1.000000,2.000000\n8.000000,-1.000000,392.601593,12.434427,52.784264,20.529612,0.214682,1.000000,2.000000\n8.000000,-1.000000,379.404999,61.767879,47.803764,20.603161,0.240509,1.000000,2.000000\n8.000000,-1.000000,671.191650,15.596419,46.494564,17.482349,0.467979,1.000000,2.000000\n8.000000,-1.000000,370.236267,106.340355,49.999138,18.002094,0.248902,1.000000,2.000000\n8.000000,-1.000000,279.404083,212.434631,68.848923,13.593740,0.231344,1.000000,2.000000\n8.000000,-1.000000,183.571884,190.265274,34.386227,11.382751,0.174115,1.000000,2.000000\n8.000000,-1.000000,222.722046,199.839798,46.173199,14.554771,0.273175,1.000000,2.000000\n8.000000,-1.000000,332.238464,221.095917,33.330040,11.401585,0.239191,1.000000,2.000000\n8.000000,-1.000000,367.530518,228.869415,36.283474,13.139213,0.162517,1.000000,2.000000\n8.000000,-1.000000,409.226654,219.409012,51.185608,14.316453,0.162457,1.000000,2.000000\n8.000000,-1.000000,410.974915,197.834961,39.629276,14.783242,0.203674,1.000000,2.000000\n8.000000,-1.000000,418.505493,177.612946,44.147133,15.288064,0.193577,1.000000,2.000000\n8.000000,-1.000000,422.105682,158.421936,44.645809,15.517912,0.193622,1.000000,2.000000\n8.000000,-1.000000,427.189331,139.657700,36.401234,16.483875,0.243428,1.000000,2.000000\n8.000000,-1.000000,427.600739,115.204506,34.381439,14.557502,0.231319,1.000000,2.000000\n8.000000,-1.000000,437.466217,96.848022,43.304173,15.801167,0.249814,1.000000,2.000000\n8.000000,-1.000000,451.088043,50.509659,53.366375,15.738796,0.192036,1.000000,2.000000\n8.000000,-1.000000,454.046448,27.227100,52.435711,20.863657,0.219463,1.000000,2.000000\n8.000000,-1.000000,342.446411,198.227448,69.501144,14.536558,0.185367,1.000000,2.000000\n8.000000,-1.000000,347.675476,176.029755,65.125191,15.771893,0.217628,1.000000,2.000000\n8.000000,-1.000000,350.353333,152.422668,71.466576,19.198660,0.227536,1.000000,2.000000\n8.000000,-1.000000,853.070068,302.472046,46.009968,15.998273,3.128431,1.000000,2.000000\n8.000000,-1.000000,1003.952026,461.028412,38.158474,19.024693,0.003552,1.000000,2.000000\n8.000000,-1.000000,1005.986572,396.755798,34.026855,16.954193,-0.000000,1.000000,2.000000\n8.000000,-1.000000,1005.466431,208.592804,35.507755,12.000254,3.106686,1.000000,2.000000\n8.000000,-1.000000,1006.565430,481.097809,33.026203,13.973353,3.130501,1.000000,2.000000\n8.000000,-1.000000,1008.426575,502.009949,29.295382,13.971586,3.131084,1.000000,2.000000\n8.000000,-1.000000,1011.183838,521.320862,24.055168,13.951853,0.029550,1.000000,2.000000\n8.000000,-1.000000,1006.779480,541.090576,32.635212,14.019276,3.127967,1.000000,2.000000\n8.000000,-1.000000,996.315918,597.148621,54.099174,19.999733,3.106686,1.000000,2.000000\n8.000000,-1.000000,1003.368774,561.556824,39.262505,15.989317,3.141593,1.000000,2.000000\n8.000000,-1.000000,822.966187,305.021179,601.306213,131.034561,1.557515,1.000000,8.000000\n8.000000,-1.000000,674.226562,473.205139,288.578522,79.649887,1.040996,1.000000,8.000000\n8.000000,-1.000000,631.096130,87.898422,236.904434,78.539711,2.039950,1.000000,8.000000\n8.000000,-1.000000,402.951935,109.314514,215.129608,124.403259,1.775231,1.000000,8.000000\n8.000000,-1.000000,220.180527,84.906586,187.359482,67.649200,1.774377,1.000000,8.000000\n8.000000,-1.000000,616.827332,353.347321,52.322193,23.703579,2.642947,1.000000,2.000000\n8.000000,-1.000000,616.780945,375.484955,32.694622,12.477634,2.697777,1.000000,2.000000\n8.000000,-1.000000,622.002869,392.250336,35.848694,13.389840,2.705444,1.000000,2.000000\n8.000000,-1.000000,631.916443,407.251251,34.665314,12.974272,2.775585,1.000000,2.000000\n8.000000,-1.000000,640.823914,422.007507,34.884720,14.760887,2.630239,1.000000,2.000000\n8.000000,-1.000000,649.989380,437.638611,30.184277,13.376983,2.719828,1.000000,2.000000\n8.000000,-1.000000,658.138367,452.064148,35.340992,14.800033,2.668298,1.000000,2.000000\n8.000000,-1.000000,672.425537,483.500458,31.294266,16.551626,2.670018,1.000000,2.000000\n8.000000,-1.000000,683.220703,498.479218,31.385439,16.155706,2.714346,1.000000,2.000000\n8.000000,-1.000000,689.813599,513.434082,32.310787,14.299427,2.726203,1.000000,2.000000\n8.000000,-1.000000,699.342651,529.422852,34.540096,13.926687,2.720785,1.000000,2.000000\n8.000000,-1.000000,706.760254,544.723145,28.381664,12.513262,2.659174,1.000000,2.000000\n8.000000,-1.000000,714.813843,560.450623,34.434349,16.100964,2.642982,1.000000,2.000000\n8.000000,-1.000000,724.296570,576.932312,38.012272,13.863927,2.642968,1.000000,2.000000\n8.000000,-1.000000,667.196838,538.946228,35.340996,12.507215,1.097565,1.000000,2.000000\n8.000000,-1.000000,640.477966,495.930450,34.885136,13.414495,1.059416,1.000000,2.000000\n8.000000,-1.000000,615.289551,446.856110,33.362831,12.031480,1.016790,1.000000,2.000000\n8.000000,-1.000000,571.599487,384.841095,25.940346,11.627560,1.072091,1.000000,2.000000\n8.000000,-1.000000,170.960999,129.612335,25.709764,13.340680,1.771421,1.000000,2.000000\n8.000000,-1.000000,177.520126,100.121399,26.563459,12.016868,1.857828,1.000000,2.000000\n8.000000,-1.000000,183.416077,71.199013,31.624641,12.649017,1.857599,1.000000,2.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/gt/gt.txt",
    "content": "1.000000,1.000000,831.967285,528.233704,60.625854,22.047729,1.000000,2.000000,1.000000\n1.000000,2.000000,839.141479,456.383881,54.965515,20.873291,1.000000,2.000000,1.000000\n1.000000,3.000000,834.387634,430.224792,58.523438,22.974701,1.000000,2.000000,1.000000\n1.000000,4.000000,838.257507,405.379669,56.559814,20.873352,1.000000,2.000000,1.000000\n1.000000,5.000000,838.026550,382.357697,60.555969,23.011597,1.000000,2.000000,1.000000\n1.000000,6.000000,846.292053,337.558960,54.929626,22.907837,1.000000,2.000000,1.000000\n1.000000,7.000000,846.164673,294.585327,54.490234,21.803345,1.000000,2.000000,1.000000\n1.000000,8.000000,850.453430,275.667358,52.931946,17.806061,1.000000,2.000000,1.000000\n1.000000,9.000000,851.731384,251.717392,53.388855,19.803665,1.000000,2.000000,1.000000\n1.000000,10.000000,852.464294,229.732193,54.457336,21.835266,1.000000,2.000000,1.000000\n1.000000,11.000000,853.197205,208.778687,56.896423,20.943146,1.000000,2.000000,1.000000\n1.000000,12.000000,849.004761,186.581085,59.452515,17.981491,1.000000,2.000000,1.000000\n1.000000,13.000000,852.700256,166.700241,48.495300,18.664276,1.000000,2.000000,1.000000\n1.000000,14.000000,854.397095,144.782761,61.557800,20.047974,1.000000,2.000000,1.000000\n1.000000,15.000000,853.167114,123.689697,57.523682,17.910675,1.000000,2.000000,1.000000\n1.000000,16.000000,860.895874,102.948746,56.524780,18.943359,1.000000,2.000000,1.000000\n1.000000,17.000000,858.362305,77.824478,62.858521,26.113701,1.000000,2.000000,1.000000\n1.000000,18.000000,859.362122,58.870956,55.595825,21.870117,1.000000,2.000000,1.000000\n1.000000,19.000000,859.095215,38.882580,56.490906,20.873138,1.000000,2.000000,1.000000\n1.000000,20.000000,572.301575,89.701027,43.162354,50.864403,1.000000,2.000000,1.000000\n1.000000,21.000000,582.375977,172.615738,61.440002,46.439072,1.000000,2.000000,1.000000\n1.000000,22.000000,593.102173,151.049347,63.472412,48.400818,1.000000,2.000000,1.000000\n1.000000,23.000000,838.709412,479.438690,55.523926,20.873291,1.000000,2.000000,1.000000\n1.000000,24.000000,835.162903,553.358093,60.521118,22.012756,1.000000,2.000000,1.000000\n1.000000,25.000000,634.696960,76.422066,62.576294,44.438896,1.000000,2.000000,1.000000\n1.000000,26.000000,831.360718,576.241455,59.522339,20.012024,1.000000,2.000000,1.000000\n1.000000,27.000000,782.010132,503.433960,38.395264,15.318787,1.000000,2.000000,1.000000\n1.000000,28.000000,782.603516,481.446716,43.601746,19.488556,1.000000,2.000000,1.000000\n1.000000,29.000000,774.983398,409.143158,55.628601,25.904297,1.000000,2.000000,1.000000\n1.000000,30.000000,777.447937,389.189423,52.932983,20.803528,1.000000,2.000000,1.000000\n1.000000,31.000000,773.589172,362.065430,60.929749,26.113800,1.000000,2.000000,1.000000\n1.000000,32.000000,776.495178,339.185150,59.559326,24.009369,1.000000,2.000000,1.000000\n1.000000,33.000000,774.300476,315.060638,61.624634,24.114014,1.000000,2.000000,1.000000\n1.000000,34.000000,779.206238,294.246765,51.422913,19.698883,1.000000,2.000000,1.000000\n1.000000,35.000000,777.903442,269.157288,59.626953,24.974335,1.000000,2.000000,1.000000\n1.000000,36.000000,767.783813,245.789429,70.479492,23.428284,1.000000,2.000000,1.000000\n1.000000,37.000000,780.473755,224.219925,57.593384,23.977539,1.000000,2.000000,1.000000\n1.000000,38.000000,784.310791,203.336258,54.489258,19.876495,1.000000,2.000000,1.000000\n1.000000,39.000000,780.115417,177.212051,63.520569,26.116867,1.000000,2.000000,1.000000\n1.000000,40.000000,793.841125,160.642838,50.527771,19.697983,1.000000,2.000000,1.000000\n1.000000,41.000000,815.028503,107.339630,35.221191,12.179245,1.000000,2.000000,1.000000\n1.000000,42.000000,804.370117,119.982964,44.392212,18.524651,1.000000,2.000000,1.000000\n1.000000,43.000000,790.540710,141.514465,57.929199,19.013214,1.000000,2.000000,1.000000\n1.000000,44.000000,826.038269,611.078857,72.512024,26.427734,1.000000,2.000000,1.000000\n1.000000,45.000000,621.726807,105.879517,60.579712,41.442337,1.000000,2.000000,1.000000\n1.000000,46.000000,647.350952,57.852261,57.720703,42.230007,1.000000,2.000000,1.000000\n1.000000,47.000000,390.695862,11.696652,53.176300,33.443741,1.000000,2.000000,1.000000\n1.000000,48.000000,209.511597,133.404327,51.039062,27.415375,1.000000,2.000000,1.000000\n1.000000,49.000000,208.280777,109.314743,61.136978,32.831329,1.000000,2.000000,1.000000\n1.000000,50.000000,220.320831,84.714233,49.005524,23.383911,1.000000,2.000000,1.000000\n1.000000,51.000000,222.017670,60.869053,60.069366,30.656307,1.000000,2.000000,1.000000\n1.000000,52.000000,237.649490,15.280258,55.072311,29.589363,1.000000,2.000000,1.000000\n1.000000,53.000000,246.516571,0.000000,55.107239,20.164230,1.000000,2.000000,1.000000\n1.000000,54.000000,399.528076,0.000000,56.176788,22.539318,1.000000,2.000000,1.000000\n1.000000,55.000000,385.827087,36.506924,51.213501,33.376743,1.000000,2.000000,1.000000\n1.000000,56.000000,681.148254,8.895086,48.726318,38.093826,1.000000,2.000000,1.000000\n1.000000,57.000000,373.367126,81.058304,52.072845,32.449257,1.000000,2.000000,1.000000\n1.000000,58.000000,265.976013,180.366852,69.781433,31.182739,1.000000,2.000000,1.000000\n1.000000,59.000000,188.756271,158.621048,36.117416,17.039291,1.000000,2.000000,1.000000\n1.000000,60.000000,221.421478,165.803604,47.969727,27.380539,1.000000,2.000000,1.000000\n1.000000,61.000000,335.443329,198.766235,35.048798,20.997574,1.000000,2.000000,1.000000\n1.000000,62.000000,369.039642,208.911285,36.152283,21.140320,1.000000,2.000000,1.000000\n1.000000,63.000000,403.333832,201.174271,53.106567,24.590439,1.000000,2.000000,1.000000\n1.000000,64.000000,412.061401,179.466202,42.149261,24.136765,1.000000,2.000000,1.000000\n1.000000,65.000000,418.756409,160.686874,46.145538,24.346146,1.000000,2.000000,1.000000\n1.000000,66.000000,423.415771,139.838089,47.146454,25.348969,1.000000,2.000000,1.000000\n1.000000,67.000000,434.039246,121.199333,39.184662,24.068947,1.000000,2.000000,1.000000\n1.000000,68.000000,436.909363,99.318474,37.152130,22.962723,1.000000,2.000000,1.000000\n1.000000,69.000000,443.569427,78.539574,46.075836,27.241158,1.000000,2.000000,1.000000\n1.000000,70.000000,456.236755,32.883881,55.002411,28.621883,1.000000,2.000000,1.000000\n1.000000,71.000000,459.899353,7.108705,56.208557,33.551331,1.000000,2.000000,1.000000\n1.000000,72.000000,329.287140,171.572433,70.919861,31.180695,1.000000,2.000000,1.000000\n1.000000,73.000000,338.049591,148.901505,66.924591,33.005829,1.000000,2.000000,1.000000\n1.000000,74.000000,338.852264,122.987793,73.955292,37.105820,1.000000,2.000000,1.000000\n1.000000,75.000000,843.434143,318.500397,46.494629,17.562775,1.000000,2.000000,1.000000\n1.000000,76.000000,986.584106,484.603821,36.415894,20.914215,1.000000,2.000000,1.000000\n1.000000,77.000000,996.441650,421.852051,26.558350,18.576721,1.000000,2.000000,1.000000\n1.000000,78.000000,1007.476440,237.173203,15.523560,12.500122,1.000000,2.000000,1.000000\n1.000000,79.000000,991.441711,507.728455,31.558289,15.111755,1.000000,2.000000,1.000000\n1.000000,80.000000,993.706238,528.821533,29.293762,14.292969,1.000000,2.000000,1.000000\n1.000000,81.000000,998.041321,547.984802,24.958679,16.514160,1.000000,2.000000,1.000000\n1.000000,82.000000,986.859375,567.658203,36.140625,15.972168,1.000000,2.000000,1.000000\n1.000000,83.000000,961.814392,619.787537,61.185608,21.151917,1.000000,2.000000,1.000000\n1.000000,84.000000,979.130798,586.367798,43.869202,18.366882,1.000000,2.000000,1.000000\n1.000000,85.000000,754.256042,23.342646,161.644165,607.749329,1.000000,8.000000,1.000000\n1.000000,86.000000,576.883484,337.644623,186.100159,292.126617,1.000000,8.000000,1.000000\n1.000000,87.000000,569.801941,0.000000,194.495789,219.054810,1.000000,8.000000,1.000000\n1.000000,88.000000,343.276703,0.000000,177.038971,223.079285,1.000000,8.000000,1.000000\n1.000000,89.000000,193.660919,0.000000,110.544922,164.923798,1.000000,8.000000,1.000000\n1.000000,90.000000,600.218506,340.504517,56.140930,41.787109,1.000000,2.000000,1.000000\n1.000000,91.000000,608.551941,371.346649,34.081848,23.147217,1.000000,2.000000,1.000000\n1.000000,92.000000,610.955139,387.544281,38.046204,25.042236,1.000000,2.000000,1.000000\n1.000000,93.000000,620.459778,404.850525,36.942749,22.042694,1.000000,2.000000,1.000000\n1.000000,94.000000,627.864197,417.086731,37.081238,28.143311,1.000000,2.000000,1.000000\n1.000000,95.000000,638.367676,436.319794,32.945496,22.252075,1.000000,2.000000,1.000000\n1.000000,96.000000,642.806396,448.660645,37.012512,27.109741,1.000000,2.000000,1.000000\n1.000000,97.000000,656.715942,481.025116,34.944214,27.249298,1.000000,2.000000,1.000000\n1.000000,98.000000,666.219727,497.398193,34.874207,25.216736,1.000000,2.000000,1.000000\n1.000000,99.000000,671.658264,513.634766,34.944031,24.147156,1.000000,2.000000,1.000000\n1.000000,100.000000,679.059570,529.971985,36.977661,24.112183,1.000000,2.000000,1.000000\n1.000000,101.000000,688.494385,548.100525,31.017639,21.290222,1.000000,2.000000,1.000000\n1.000000,102.000000,691.934387,560.409546,38.011353,28.179321,1.000000,2.000000,1.000000\n1.000000,103.000000,699.266907,577.747620,40.150635,28.038757,1.000000,2.000000,1.000000\n1.000000,104.000000,652.250671,532.261292,25.077148,36.152222,1.000000,2.000000,1.000000\n1.000000,105.000000,627.767822,486.451385,26.109863,37.116241,1.000000,2.000000,1.000000\n1.000000,106.000000,606.492859,437.641022,26.178650,32.189880,1.000000,2.000000,1.000000\n1.000000,107.000000,569.643433,376.318268,21.359070,26.089233,1.000000,2.000000,1.000000\n1.000000,108.000000,189.606094,92.697327,18.721802,28.226471,1.000000,2.000000,1.000000\n1.000000,109.000000,198.578949,65.027817,18.756622,27.089500,1.000000,2.000000,1.000000\n1.000000,110.000000,203.518463,32.326542,21.894791,34.050220,1.000000,2.000000,1.000000\n2.000000,1.000000,832.302307,525.025269,60.454346,21.465515,1.000000,2.000000,1.000000\n2.000000,2.000000,838.570557,453.124023,54.981934,20.340668,1.000000,2.000000,1.000000\n2.000000,3.000000,833.745422,427.007019,58.381226,22.412720,1.000000,2.000000,1.000000\n2.000000,4.000000,837.367004,402.114594,56.406982,20.340698,1.000000,2.000000,1.000000\n2.000000,5.000000,836.916382,379.095734,60.404419,22.439636,1.000000,2.000000,1.000000\n2.000000,6.000000,844.535706,334.233673,54.955994,22.365845,1.000000,2.000000,1.000000\n2.000000,7.000000,844.158813,291.247223,54.356812,21.290955,1.000000,2.000000,1.000000\n2.000000,8.000000,848.079651,272.303680,52.957703,17.292450,1.000000,2.000000,1.000000\n2.000000,9.000000,849.278137,248.336578,53.284973,19.290680,1.000000,2.000000,1.000000\n2.000000,10.000000,849.801697,226.344818,54.333923,21.312851,1.000000,2.000000,1.000000\n2.000000,11.000000,850.325256,205.375076,56.933350,20.390549,1.000000,2.000000,1.000000\n2.000000,12.000000,845.902039,183.230698,59.330505,17.418076,1.000000,2.000000,1.000000\n2.000000,13.000000,849.399048,163.313995,48.360107,18.190842,1.000000,2.000000,1.000000\n2.000000,14.000000,850.896790,141.370026,61.406555,19.465179,1.000000,2.000000,1.000000\n2.000000,15.000000,849.446960,120.300583,57.381165,17.367188,1.000000,2.000000,1.000000\n2.000000,16.000000,856.968445,99.483582,56.381958,18.390175,1.000000,2.000000,1.000000\n2.000000,17.000000,854.014954,74.391754,62.907288,25.512741,1.000000,2.000000,1.000000\n2.000000,18.000000,855.015076,55.422588,55.432800,21.337757,1.000000,2.000000,1.000000\n2.000000,19.000000,854.538513,35.428242,56.358093,20.340485,1.000000,2.000000,1.000000\n2.000000,20.000000,568.507507,88.876404,42.835938,50.909546,1.000000,2.000000,1.000000\n2.000000,21.000000,579.133789,171.825851,61.607971,46.033813,1.000000,2.000000,1.000000\n2.000000,22.000000,589.653564,150.133270,63.631104,48.006104,1.000000,2.000000,1.000000\n2.000000,23.000000,838.547485,476.165771,55.380859,20.340637,1.000000,2.000000,1.000000\n2.000000,24.000000,835.728394,550.117188,60.379517,21.440552,1.000000,2.000000,1.000000\n2.000000,25.000000,630.512329,75.104507,62.704773,44.033035,1.000000,2.000000,1.000000\n2.000000,26.000000,832.154602,573.037354,59.380432,19.439209,1.000000,2.000000,1.000000\n2.000000,27.000000,782.040833,500.737000,38.286987,14.944153,1.000000,2.000000,1.000000\n2.000000,28.000000,782.464722,478.743195,43.435181,19.065277,1.000000,2.000000,1.000000\n2.000000,29.000000,774.163757,406.517853,55.455627,25.363190,1.000000,2.000000,1.000000\n2.000000,30.000000,776.209900,386.548187,52.958801,20.290833,1.000000,2.000000,1.000000\n2.000000,31.000000,772.310120,359.456024,60.957886,25.512817,1.000000,2.000000,1.000000\n2.000000,32.000000,774.957520,336.538971,59.407410,23.437714,1.000000,2.000000,1.000000\n2.000000,33.000000,772.532654,312.447174,61.453369,23.512482,1.000000,2.000000,1.000000\n2.000000,34.000000,777.180420,291.577179,51.308533,19.215790,1.000000,2.000000,1.000000\n2.000000,35.000000,775.677612,266.510162,59.455200,24.412964,1.000000,2.000000,1.000000\n2.000000,36.000000,765.305542,243.245087,70.350769,22.736725,1.000000,2.000000,1.000000\n2.000000,37.000000,777.799622,221.549408,57.430969,23.415863,1.000000,2.000000,1.000000\n2.000000,38.000000,781.398315,200.629547,54.355835,19.343567,1.000000,2.000000,1.000000\n2.000000,39.000000,776.972168,174.537476,63.379883,25.515915,1.000000,2.000000,1.000000\n2.000000,40.000000,790.492371,157.843552,50.383240,19.214874,1.000000,2.000000,1.000000\n2.000000,41.000000,811.057434,104.334824,35.161865,11.843605,1.000000,2.000000,1.000000\n2.000000,42.000000,800.585449,117.081741,44.285706,18.091095,1.000000,2.000000,1.000000\n2.000000,43.000000,786.991455,138.749405,57.956421,18.440094,1.000000,2.000000,1.000000\n2.000000,44.000000,827.209778,607.925049,72.374023,25.737122,1.000000,2.000000,1.000000\n2.000000,45.000000,617.817749,104.720444,60.707581,41.035583,1.000000,2.000000,1.000000\n2.000000,46.000000,642.980530,56.409397,57.807800,41.883366,1.000000,2.000000,1.000000\n2.000000,47.000000,385.909515,12.864549,53.132294,33.034595,1.000000,2.000000,1.000000\n2.000000,48.000000,205.898621,136.384857,51.034363,27.014435,1.000000,2.000000,1.000000\n2.000000,49.000000,204.447891,112.318024,61.105362,32.312241,1.000000,2.000000,1.000000\n2.000000,50.000000,216.192169,87.600403,49.010162,22.991722,1.000000,2.000000,1.000000\n2.000000,51.000000,217.689926,63.708187,60.057358,30.186443,1.000000,2.000000,1.000000\n2.000000,52.000000,232.857391,17.996002,55.058807,29.139160,1.000000,2.000000,1.000000\n2.000000,53.000000,241.477661,0.000000,55.083740,22.342558,1.000000,2.000000,1.000000\n2.000000,54.000000,394.504883,0.000000,56.133698,23.181561,1.000000,2.000000,1.000000\n2.000000,55.000000,381.288788,37.732132,51.158936,32.987526,1.000000,2.000000,1.000000\n2.000000,56.000000,676.269043,7.148215,48.810730,37.785873,1.000000,2.000000,1.000000\n2.000000,57.000000,369.244232,82.416550,52.058441,32.039833,1.000000,2.000000,1.000000\n2.000000,58.000000,262.808990,182.792587,69.852173,30.563354,1.000000,2.000000,1.000000\n2.000000,59.000000,185.356644,161.828659,36.088287,16.744995,1.000000,2.000000,1.000000\n2.000000,60.000000,218.121429,168.674057,47.984039,26.989548,1.000000,2.000000,1.000000\n2.000000,61.000000,332.436768,200.508896,35.039307,20.714447,1.000000,2.000000,1.000000\n2.000000,62.000000,366.152893,210.327682,36.113190,20.817291,1.000000,2.000000,1.000000\n2.000000,63.000000,400.367523,202.229080,53.082458,24.138733,1.000000,2.000000,1.000000\n2.000000,64.000000,408.888123,180.434723,42.111938,23.814636,1.000000,2.000000,1.000000\n2.000000,65.000000,415.385529,161.589905,46.109436,23.964203,1.000000,2.000000,1.000000\n2.000000,66.000000,419.856659,140.694962,47.110657,24.967361,1.000000,2.000000,1.000000\n2.000000,67.000000,430.303711,121.950859,39.136475,23.766777,1.000000,2.000000,1.000000\n2.000000,68.000000,432.925201,100.033516,37.113312,22.690178,1.000000,2.000000,1.000000\n2.000000,69.000000,439.397644,79.188560,46.059662,26.890030,1.000000,2.000000,1.000000\n2.000000,70.000000,451.589722,33.429405,55.008881,28.161411,1.000000,2.000000,1.000000\n2.000000,71.000000,455.063843,7.586673,56.155518,33.112263,1.000000,2.000000,1.000000\n2.000000,72.000000,326.039246,173.366852,70.951019,30.561325,1.000000,2.000000,1.000000\n2.000000,73.000000,334.584778,150.599335,66.954529,32.436905,1.000000,2.000000,1.000000\n2.000000,74.000000,335.158142,124.657928,73.977386,36.508163,1.000000,2.000000,1.000000\n2.000000,75.000000,841.637024,315.189392,46.358826,17.118958,1.000000,2.000000,1.000000\n2.000000,76.000000,986.476318,479.855499,36.523682,20.570496,1.000000,2.000000,1.000000\n2.000000,77.000000,995.518494,417.025116,27.481506,18.347412,1.000000,2.000000,1.000000\n2.000000,78.000000,1004.830139,232.231277,18.169861,12.424683,1.000000,2.000000,1.000000\n2.000000,79.000000,991.375244,502.947113,31.624756,14.794220,1.000000,2.000000,1.000000\n2.000000,80.000000,993.850037,524.016602,29.149963,14.020691,1.000000,2.000000,1.000000\n2.000000,81.000000,998.376038,543.135681,24.623962,16.218750,1.000000,2.000000,1.000000\n2.000000,82.000000,987.530090,562.904785,35.469910,15.594238,1.000000,2.000000,1.000000\n2.000000,83.000000,963.066284,615.289124,59.933716,20.536255,1.000000,2.000000,1.000000\n2.000000,84.000000,980.008667,581.699768,42.991333,17.894287,1.000000,2.000000,1.000000\n2.000000,85.000000,755.356262,20.612152,155.764709,606.753174,1.000000,8.000000,1.000000\n2.000000,86.000000,575.495789,336.295288,188.381042,291.555176,1.000000,8.000000,1.000000\n2.000000,87.000000,566.436279,0.000000,191.286682,217.859665,1.000000,8.000000,1.000000\n2.000000,88.000000,340.032990,0.000000,175.335480,223.591782,1.000000,8.000000,1.000000\n2.000000,89.000000,190.003311,0.000000,109.672379,167.474655,1.000000,8.000000,1.000000\n2.000000,90.000000,598.737976,339.195953,56.107788,42.138855,1.000000,2.000000,1.000000\n2.000000,91.000000,607.263550,370.087189,34.062073,23.393646,1.000000,2.000000,1.000000\n2.000000,92.000000,609.837097,386.229797,38.037598,25.319122,1.000000,2.000000,1.000000\n2.000000,93.000000,619.484253,403.451385,36.963745,22.318726,1.000000,2.000000,1.000000\n2.000000,94.000000,627.060547,415.621368,37.062378,28.391235,1.000000,2.000000,1.000000\n2.000000,95.000000,637.706848,434.790314,32.965332,22.468292,1.000000,2.000000,1.000000\n2.000000,96.000000,642.306580,447.035095,37.013611,27.367279,1.000000,2.000000,1.000000\n2.000000,97.000000,656.529663,479.299438,34.964539,27.466980,1.000000,2.000000,1.000000\n2.000000,98.000000,666.175903,495.567627,34.914612,25.443787,1.000000,2.000000,1.000000\n2.000000,99.000000,671.775757,511.739227,34.964478,24.393829,1.000000,2.000000,1.000000\n2.000000,100.000000,679.348999,527.981506,36.988647,24.368896,1.000000,2.000000,1.000000\n2.000000,101.000000,688.946289,546.075500,31.016907,21.496216,1.000000,2.000000,1.000000\n2.000000,102.000000,692.546936,558.298462,38.012756,28.417236,1.000000,2.000000,1.000000\n2.000000,103.000000,700.071289,575.541870,40.112671,28.316528,1.000000,2.000000,1.000000\n2.000000,104.000000,652.482178,530.760437,25.344055,36.113159,1.000000,2.000000,1.000000\n2.000000,105.000000,627.562866,485.176392,26.367126,37.087402,1.000000,2.000000,1.000000\n2.000000,106.000000,605.792603,436.590942,26.415955,32.139648,1.000000,2.000000,1.000000\n2.000000,107.000000,568.323425,375.639099,21.545044,26.067078,1.000000,2.000000,1.000000\n2.000000,108.000000,185.677826,95.875267,18.517822,28.165047,1.000000,2.000000,1.000000\n2.000000,109.000000,194.373932,68.107681,18.542709,27.067657,1.000000,2.000000,1.000000\n2.000000,110.000000,199.045502,35.316822,21.641861,34.040417,1.000000,2.000000,1.000000\n3.000000,1.000000,832.605469,521.815491,60.276794,20.881165,1.000000,2.000000,1.000000\n3.000000,2.000000,837.967102,449.870026,54.992920,19.806000,1.000000,2.000000,1.000000\n3.000000,3.000000,833.071167,423.797729,58.233276,21.848511,1.000000,2.000000,1.000000\n3.000000,4.000000,836.444092,398.860443,56.248596,19.806000,1.000000,2.000000,1.000000\n3.000000,5.000000,835.773926,375.846954,60.246826,21.865479,1.000000,2.000000,1.000000\n3.000000,6.000000,842.746277,330.926117,54.976929,21.821594,1.000000,2.000000,1.000000\n3.000000,7.000000,842.119934,287.931091,54.217957,20.776428,1.000000,2.000000,1.000000\n3.000000,8.000000,845.672424,268.963837,52.978210,16.777130,1.000000,2.000000,1.000000\n3.000000,9.000000,846.791321,244.981979,53.175903,18.775742,1.000000,2.000000,1.000000\n3.000000,10.000000,847.105469,222.985840,54.205078,20.788345,1.000000,2.000000,1.000000\n3.000000,11.000000,847.419678,202.001953,56.964661,19.835938,1.000000,2.000000,1.000000\n3.000000,12.000000,842.766113,179.913025,59.202637,16.852905,1.000000,2.000000,1.000000\n3.000000,13.000000,846.064270,159.962433,48.220093,17.715576,1.000000,2.000000,1.000000\n3.000000,14.000000,847.362793,137.994156,61.249207,18.880447,1.000000,2.000000,1.000000\n3.000000,15.000000,845.693237,116.950432,57.232910,17.000587,1.000000,2.000000,1.000000\n3.000000,16.000000,853.006653,96.059448,56.233643,17.835159,1.000000,2.000000,1.000000\n3.000000,17.000000,849.633606,71.002548,62.949707,24.909256,1.000000,2.000000,1.000000\n3.000000,18.000000,850.633911,52.019630,55.264282,20.803284,1.000000,2.000000,1.000000\n3.000000,19.000000,849.947754,32.021305,56.219666,19.805809,1.000000,2.000000,1.000000\n3.000000,20.000000,564.707764,88.093872,42.505310,50.949600,1.000000,2.000000,1.000000\n3.000000,21.000000,575.884949,171.069809,61.769836,45.623978,1.000000,2.000000,1.000000\n3.000000,22.000000,586.197327,149.253204,63.783386,47.606613,1.000000,2.000000,1.000000\n3.000000,23.000000,838.353088,472.896393,55.232239,19.806000,1.000000,2.000000,1.000000\n3.000000,24.000000,836.261719,546.872498,60.231873,20.866211,1.000000,2.000000,1.000000\n3.000000,25.000000,626.315979,73.830414,62.826965,43.622787,1.000000,2.000000,1.000000\n3.000000,26.000000,832.916687,569.827148,59.232605,18.864502,1.000000,2.000000,1.000000\n3.000000,27.000000,782.044678,498.041168,38.174927,14.568085,1.000000,2.000000,1.000000\n3.000000,28.000000,782.299011,476.042999,43.264282,18.640076,1.000000,2.000000,1.000000\n3.000000,29.000000,773.318054,403.903015,55.277100,24.819550,1.000000,2.000000,1.000000\n3.000000,30.000000,774.945618,383.919434,52.979309,19.776093,1.000000,2.000000,1.000000\n3.000000,31.000000,771.005127,356.861786,60.979980,24.909332,1.000000,2.000000,1.000000\n3.000000,32.000000,773.393677,333.910217,59.249634,22.863770,1.000000,2.000000,1.000000\n3.000000,33.000000,770.738831,309.853546,61.276123,22.908630,1.000000,2.000000,1.000000\n3.000000,34.000000,775.128174,288.929504,51.189026,18.730835,1.000000,2.000000,1.000000\n3.000000,35.000000,773.425598,263.887451,59.277405,23.849152,1.000000,2.000000,1.000000\n3.000000,36.000000,762.802002,240.727478,70.215149,22.042938,1.000000,2.000000,1.000000\n3.000000,37.000000,775.099060,218.907776,57.262817,22.851883,1.000000,2.000000,1.000000\n3.000000,38.000000,778.459106,197.953812,54.216980,18.808701,1.000000,2.000000,1.000000\n3.000000,39.000000,773.802612,171.896469,63.232788,24.912415,1.000000,2.000000,1.000000\n3.000000,40.000000,787.115967,155.079498,50.233643,18.729858,1.000000,2.000000,1.000000\n3.000000,41.000000,807.056580,101.370567,35.099060,11.506775,1.000000,2.000000,1.000000\n3.000000,42.000000,796.772095,114.219795,44.174805,17.655739,1.000000,2.000000,1.000000\n3.000000,43.000000,783.414856,135.873810,57.977905,18.012802,1.000000,2.000000,1.000000\n3.000000,44.000000,828.349976,604.761719,72.228699,25.043884,1.000000,2.000000,1.000000\n3.000000,45.000000,613.898193,103.601875,60.829407,40.624748,1.000000,2.000000,1.000000\n3.000000,46.000000,638.597107,55.011852,57.889160,41.532558,1.000000,2.000000,1.000000\n3.000000,47.000000,381.135742,14.082091,53.083008,32.622162,1.000000,2.000000,1.000000\n3.000000,48.000000,202.316101,139.402740,51.024551,26.610794,1.000000,2.000000,1.000000\n3.000000,49.000000,200.645584,115.361061,61.067642,31.789940,1.000000,2.000000,1.000000\n3.000000,50.000000,212.092926,90.528778,49.009949,22.597260,1.000000,2.000000,1.000000\n3.000000,51.000000,213.391449,66.591911,60.039398,29.713577,1.000000,2.000000,1.000000\n3.000000,52.000000,228.093079,20.760881,55.039825,28.686060,1.000000,2.000000,1.000000\n3.000000,53.000000,236.465637,0.000000,55.054810,24.569590,1.000000,2.000000,1.000000\n3.000000,54.000000,389.493378,0.000000,56.085022,23.872423,1.000000,2.000000,1.000000\n3.000000,55.000000,376.763489,39.004517,51.099304,32.595024,1.000000,2.000000,1.000000\n3.000000,56.000000,671.373413,5.451560,48.890320,37.474163,1.000000,2.000000,1.000000\n3.000000,57.000000,365.135559,83.817528,52.038849,31.627213,1.000000,2.000000,1.000000\n3.000000,58.000000,259.666779,185.251083,69.915955,29.940933,1.000000,2.000000,1.000000\n3.000000,59.000000,181.989502,165.071106,36.055557,16.449036,1.000000,2.000000,1.000000\n3.000000,60.000000,214.850601,171.578659,47.993576,26.595871,1.000000,2.000000,1.000000\n3.000000,61.000000,329.448090,202.282532,35.026306,20.429276,1.000000,2.000000,1.000000\n3.000000,62.000000,363.280609,211.774078,36.070526,20.492203,1.000000,2.000000,1.000000\n3.000000,63.000000,397.412292,203.314713,53.053131,23.684616,1.000000,2.000000,1.000000\n3.000000,64.000000,405.725098,181.436203,42.070435,23.490158,1.000000,2.000000,1.000000\n3.000000,65.000000,412.024261,162.527771,46.068726,23.579910,1.000000,2.000000,1.000000\n3.000000,66.000000,416.306732,141.588776,47.070129,24.583267,1.000000,2.000000,1.000000\n3.000000,67.000000,426.576294,122.741180,39.084412,23.462250,1.000000,2.000000,1.000000\n3.000000,68.000000,428.948914,100.789536,37.070801,22.415375,1.000000,2.000000,1.000000\n3.000000,69.000000,435.233093,79.880600,46.038879,26.536224,1.000000,2.000000,1.000000\n3.000000,70.000000,446.948730,34.022530,55.009857,27.698135,1.000000,2.000000,1.000000\n3.000000,71.000000,450.233948,8.114814,56.096893,32.669903,1.000000,2.000000,1.000000\n3.000000,72.000000,322.809875,175.194962,70.975098,29.938889,1.000000,2.000000,1.000000\n3.000000,73.000000,331.137573,152.333130,66.977844,31.864731,1.000000,2.000000,1.000000\n3.000000,74.000000,331.481628,126.366600,73.992126,35.906883,1.000000,2.000000,1.000000\n3.000000,75.000000,839.807129,311.897980,46.218384,16.673431,1.000000,2.000000,1.000000\n3.000000,76.000000,986.321289,475.110382,36.678711,20.224701,1.000000,2.000000,1.000000\n3.000000,77.000000,994.547241,412.207642,28.452759,18.103546,1.000000,2.000000,1.000000\n3.000000,78.000000,1002.134888,227.317154,20.865112,12.296097,1.000000,2.000000,1.000000\n3.000000,79.000000,991.261108,498.166687,31.738892,14.477600,1.000000,2.000000,1.000000\n3.000000,80.000000,993.945923,519.210449,29.054077,14.013489,1.000000,2.000000,1.000000\n3.000000,81.000000,998.662354,538.283447,24.337646,15.935852,1.000000,2.000000,1.000000\n3.000000,82.000000,988.153442,558.146301,34.846558,15.230347,1.000000,2.000000,1.000000\n3.000000,83.000000,964.273376,610.780457,58.726624,19.997559,1.000000,2.000000,1.000000\n3.000000,84.000000,980.840027,577.024780,42.159973,17.439636,1.000000,2.000000,1.000000\n3.000000,85.000000,756.432251,17.930534,149.869812,605.696716,1.000000,8.000000,1.000000\n3.000000,86.000000,574.101807,334.963409,190.643250,290.954742,1.000000,8.000000,1.000000\n3.000000,87.000000,563.065186,0.000000,188.153931,216.693787,1.000000,8.000000,1.000000\n3.000000,88.000000,336.806366,0.000000,173.614563,224.132965,1.000000,8.000000,1.000000\n3.000000,89.000000,186.377731,0.000000,108.757370,170.059769,1.000000,8.000000,1.000000\n3.000000,90.000000,597.248840,337.904572,56.069092,42.486420,1.000000,2.000000,1.000000\n3.000000,91.000000,605.965637,368.841858,34.038879,23.637756,1.000000,2.000000,1.000000\n3.000000,92.000000,608.709290,384.927795,38.025208,25.593536,1.000000,2.000000,1.000000\n3.000000,93.000000,618.498047,402.063019,36.981079,22.592529,1.000000,2.000000,1.000000\n3.000000,94.000000,626.245422,414.165619,37.039856,28.636322,1.000000,2.000000,1.000000\n3.000000,95.000000,637.033508,433.268524,32.981873,22.682281,1.000000,2.000000,1.000000\n3.000000,96.000000,641.793762,445.415985,37.011047,27.622131,1.000000,2.000000,1.000000\n3.000000,97.000000,656.328979,477.576996,34.981445,27.681946,1.000000,2.000000,1.000000\n3.000000,98.000000,666.116821,493.738708,34.951477,25.668335,1.000000,2.000000,1.000000\n3.000000,99.000000,671.877380,509.843658,34.981445,24.638153,1.000000,2.000000,1.000000\n3.000000,100.000000,679.621704,525.989441,36.996033,24.623169,1.000000,2.000000,1.000000\n3.000000,101.000000,689.380554,544.047119,31.013062,21.700012,1.000000,2.000000,1.000000\n3.000000,102.000000,693.141541,556.182739,38.010315,28.652344,1.000000,2.000000,1.000000\n3.000000,103.000000,700.856934,573.329834,40.070801,28.591492,1.000000,2.000000,1.000000\n3.000000,104.000000,652.699707,529.257751,25.608459,36.070496,1.000000,2.000000,1.000000\n3.000000,105.000000,627.346436,483.904083,26.621765,37.054901,1.000000,2.000000,1.000000\n3.000000,106.000000,605.083008,435.548401,26.650696,32.086151,1.000000,2.000000,1.000000\n3.000000,107.000000,566.997803,374.973480,21.728943,26.042358,1.000000,2.000000,1.000000\n3.000000,108.000000,181.782013,99.094604,18.312012,28.100815,1.000000,2.000000,1.000000\n3.000000,109.000000,190.200516,71.231705,18.326920,27.043106,1.000000,2.000000,1.000000\n3.000000,110.000000,194.603668,38.354515,21.386795,34.027229,1.000000,2.000000,1.000000\n4.000000,1.000000,832.876770,518.604797,60.093262,20.294739,1.000000,2.000000,1.000000\n4.000000,2.000000,837.331299,446.622192,54.998352,19.269379,1.000000,2.000000,1.000000\n4.000000,3.000000,832.365051,420.597198,58.079407,21.282135,1.000000,2.000000,1.000000\n4.000000,4.000000,835.488953,395.617523,56.084595,19.269348,1.000000,2.000000,1.000000\n4.000000,5.000000,834.599243,372.611725,60.083252,21.289154,1.000000,2.000000,1.000000\n4.000000,6.000000,840.923950,327.636536,54.992371,21.275208,1.000000,2.000000,1.000000\n4.000000,7.000000,840.048157,284.637238,54.073792,20.259827,1.000000,2.000000,1.000000\n4.000000,8.000000,843.231995,265.648163,52.993469,16.260132,1.000000,2.000000,1.000000\n4.000000,9.000000,844.271240,241.653946,53.061462,18.258957,1.000000,2.000000,1.000000\n4.000000,10.000000,844.375977,219.655624,54.070801,20.261749,1.000000,2.000000,1.000000\n4.000000,11.000000,844.480713,198.659668,56.990234,19.279343,1.000000,2.000000,1.000000\n4.000000,12.000000,839.597290,176.628372,59.068848,16.286072,1.000000,2.000000,1.000000\n4.000000,13.000000,842.696289,156.645874,48.075256,17.238586,1.000000,2.000000,1.000000\n4.000000,14.000000,843.795471,134.655487,61.085693,18.293839,1.000000,2.000000,1.000000\n4.000000,15.000000,841.906311,113.639572,57.078979,17.002274,1.000000,2.000000,1.000000\n4.000000,16.000000,849.010986,92.676689,56.079651,17.278374,1.000000,2.000000,1.000000\n4.000000,17.000000,845.218689,67.657211,62.985840,24.303284,1.000000,2.000000,1.000000\n4.000000,18.000000,846.219116,48.662426,55.090210,20.266735,1.000000,2.000000,1.000000\n4.000000,19.000000,845.323425,28.662113,56.075623,19.269161,1.000000,2.000000,1.000000\n4.000000,20.000000,560.902832,87.353500,42.170410,50.984604,1.000000,2.000000,1.000000\n4.000000,21.000000,572.629700,170.347687,61.925598,45.209579,1.000000,2.000000,1.000000\n4.000000,22.000000,582.733643,148.409210,63.929382,47.202408,1.000000,2.000000,1.000000\n4.000000,23.000000,838.126221,469.630920,55.078186,19.269348,1.000000,2.000000,1.000000\n4.000000,24.000000,836.762817,543.624329,60.078247,20.289795,1.000000,2.000000,1.000000\n4.000000,25.000000,622.108276,72.599899,62.942871,43.208206,1.000000,2.000000,1.000000\n4.000000,26.000000,833.646790,566.611267,59.078918,18.287842,1.000000,2.000000,1.000000\n4.000000,27.000000,782.021667,495.346741,38.059021,14.190460,1.000000,2.000000,1.000000\n4.000000,28.000000,782.106506,473.346375,43.088989,18.213043,1.000000,2.000000,1.000000\n4.000000,29.000000,772.446350,401.298950,55.093079,24.273438,1.000000,2.000000,1.000000\n4.000000,30.000000,773.655151,381.303406,52.994568,19.259399,1.000000,2.000000,1.000000\n4.000000,31.000000,769.674438,354.282959,60.995972,24.303375,1.000000,2.000000,1.000000\n4.000000,32.000000,771.803894,331.299194,59.085938,22.287506,1.000000,2.000000,1.000000\n4.000000,33.000000,768.919373,307.280029,61.092651,22.302490,1.000000,2.000000,1.000000\n4.000000,34.000000,773.049744,286.304016,51.064514,18.243988,1.000000,2.000000,1.000000\n4.000000,35.000000,771.147522,261.289429,59.093872,23.282990,1.000000,2.000000,1.000000\n4.000000,36.000000,760.273560,238.236847,70.072510,21.346954,1.000000,2.000000,1.000000\n4.000000,37.000000,772.372375,216.295288,57.088989,22.285629,1.000000,2.000000,1.000000\n4.000000,38.000000,775.493347,195.309311,54.072693,18.271973,1.000000,2.000000,1.000000\n4.000000,39.000000,770.606934,169.289276,63.079529,24.306458,1.000000,2.000000,1.000000\n4.000000,40.000000,783.712158,152.350937,50.079041,18.242981,1.000000,2.000000,1.000000\n4.000000,41.000000,803.026428,98.447151,35.032715,11.168808,1.000000,2.000000,1.000000\n4.000000,42.000000,792.930359,111.397415,44.059570,17.218628,1.000000,2.000000,1.000000\n4.000000,43.000000,779.811218,132.614716,57.993652,18.004623,1.000000,2.000000,1.000000\n4.000000,44.000000,829.458618,601.589172,72.076355,24.348206,1.000000,2.000000,1.000000\n4.000000,45.000000,609.968506,102.523933,60.945129,40.209862,1.000000,2.000000,1.000000\n4.000000,46.000000,634.201050,53.659763,57.964783,41.177616,1.000000,2.000000,1.000000\n4.000000,47.000000,376.374969,15.349161,53.028442,32.206482,1.000000,2.000000,1.000000\n4.000000,48.000000,198.764389,142.457703,51.009674,26.204498,1.000000,2.000000,1.000000\n4.000000,49.000000,196.874252,118.443550,61.023849,31.264473,1.000000,2.000000,1.000000\n4.000000,50.000000,208.023514,93.499084,49.004837,22.200539,1.000000,2.000000,1.000000\n4.000000,51.000000,209.122681,69.519936,60.015472,29.237762,1.000000,2.000000,1.000000\n4.000000,52.000000,223.356979,23.574625,55.015366,28.230104,1.000000,2.000000,1.000000\n4.000000,53.000000,231.481033,0.000000,55.020340,26.845104,1.000000,2.000000,1.000000\n4.000000,54.000000,384.494049,0.000000,56.030762,24.611839,1.000000,2.000000,1.000000\n4.000000,55.000000,372.251617,40.323948,51.034607,32.199284,1.000000,2.000000,1.000000\n4.000000,56.000000,666.461975,3.805288,48.964966,37.158730,1.000000,2.000000,1.000000\n4.000000,57.000000,361.041504,85.261086,52.014069,31.211464,1.000000,2.000000,1.000000\n4.000000,58.000000,256.549622,187.742081,69.972809,29.315521,1.000000,2.000000,1.000000\n4.000000,59.000000,178.655182,168.348053,36.019257,16.151443,1.000000,2.000000,1.000000\n4.000000,60.000000,211.609329,174.517136,47.998367,26.199524,1.000000,2.000000,1.000000\n4.000000,61.000000,326.477539,204.086975,35.009857,20.142059,1.000000,2.000000,1.000000\n4.000000,62.000000,360.423157,213.250336,36.024231,20.165085,1.000000,2.000000,1.000000\n4.000000,63.000000,394.468475,204.431061,53.018494,23.228134,1.000000,2.000000,1.000000\n4.000000,64.000000,402.572632,182.470581,42.024780,23.163315,1.000000,2.000000,1.000000\n4.000000,65.000000,408.672943,163.500412,46.023438,23.193237,1.000000,2.000000,1.000000\n4.000000,66.000000,412.766327,142.519424,47.024933,24.196716,1.000000,2.000000,1.000000\n4.000000,67.000000,422.857391,123.570213,39.028442,23.155388,1.000000,2.000000,1.000000\n4.000000,68.000000,424.980865,101.586456,37.024658,22.138344,1.000000,2.000000,1.000000\n4.000000,69.000000,431.076172,80.615616,46.013519,26.179787,1.000000,2.000000,1.000000\n4.000000,70.000000,442.314178,34.663200,55.005402,27.232101,1.000000,2.000000,1.000000\n4.000000,71.000000,445.410248,8.693073,56.032654,32.224297,1.000000,2.000000,1.000000\n4.000000,72.000000,319.599304,177.056564,70.992126,29.313492,1.000000,2.000000,1.000000\n4.000000,73.000000,327.708374,154.102692,66.994507,31.289398,1.000000,2.000000,1.000000\n4.000000,74.000000,327.823059,128.113617,73.999481,35.302032,1.000000,2.000000,1.000000\n4.000000,75.000000,837.944641,308.626465,46.073303,16.226227,1.000000,2.000000,1.000000\n4.000000,76.000000,986.119141,470.368958,36.880859,19.875244,1.000000,2.000000,1.000000\n4.000000,77.000000,993.528015,407.400085,29.471985,17.843567,1.000000,2.000000,1.000000\n4.000000,78.000000,999.390808,222.431366,23.609192,12.112839,1.000000,2.000000,1.000000\n4.000000,79.000000,991.099304,493.387634,31.900696,14.160400,1.000000,2.000000,1.000000\n4.000000,80.000000,993.993896,514.403564,29.006104,14.004944,1.000000,2.000000,1.000000\n4.000000,81.000000,998.900269,533.428589,24.099731,15.664001,1.000000,2.000000,1.000000\n4.000000,82.000000,988.729492,553.383179,34.270508,14.879028,1.000000,2.000000,1.000000\n4.000000,83.000000,965.435486,606.261963,57.564514,19.999512,1.000000,2.000000,1.000000\n4.000000,84.000000,981.624756,572.343384,41.375244,17.001282,1.000000,2.000000,1.000000\n4.000000,85.000000,757.483948,15.298059,143.959961,604.580017,1.000000,8.000000,1.000000\n4.000000,86.000000,572.701599,333.649139,192.886475,290.325409,1.000000,8.000000,1.000000\n4.000000,87.000000,559.688965,0.000000,185.094666,215.557266,1.000000,8.000000,1.000000\n4.000000,88.000000,333.597198,0.000000,171.876343,224.702774,1.000000,8.000000,1.000000\n4.000000,89.000000,182.784531,0.000000,107.798660,172.678909,1.000000,8.000000,1.000000\n4.000000,90.000000,595.751221,336.630493,56.024780,42.829742,1.000000,2.000000,1.000000\n4.000000,91.000000,604.658386,367.610748,34.012329,23.879517,1.000000,2.000000,1.000000\n4.000000,92.000000,607.571838,383.638428,38.009094,25.865417,1.000000,2.000000,1.000000\n4.000000,93.000000,617.501221,400.685608,36.994751,22.864105,1.000000,2.000000,1.000000\n4.000000,94.000000,625.418945,412.719574,37.013611,28.878601,1.000000,2.000000,1.000000\n4.000000,95.000000,636.347778,431.754578,32.995056,22.894012,1.000000,2.000000,1.000000\n4.000000,96.000000,641.268066,443.803528,37.004761,27.874207,1.000000,2.000000,1.000000\n4.000000,97.000000,656.113953,475.857971,34.994873,27.894196,1.000000,2.000000,1.000000\n4.000000,98.000000,666.042358,491.911591,34.984924,25.890350,1.000000,2.000000,1.000000\n4.000000,99.000000,671.963074,507.948334,34.994934,24.879974,1.000000,2.000000,1.000000\n4.000000,100.000000,679.877747,523.995972,36.999695,24.874939,1.000000,2.000000,1.000000\n4.000000,101.000000,689.797180,542.015564,31.006165,21.901672,1.000000,2.000000,1.000000\n4.000000,102.000000,693.718140,554.062622,38.004089,28.884583,1.000000,2.000000,1.000000\n4.000000,103.000000,701.623779,571.111694,40.024902,28.863647,1.000000,2.000000,1.000000\n4.000000,104.000000,652.903198,527.753357,25.870361,36.024231,1.000000,2.000000,1.000000\n4.000000,105.000000,627.118530,482.634552,26.873779,37.018646,1.000000,2.000000,1.000000\n4.000000,106.000000,604.364136,434.513428,26.882751,32.029541,1.000000,2.000000,1.000000\n4.000000,107.000000,565.666687,374.321503,21.910645,26.015015,1.000000,2.000000,1.000000\n4.000000,108.000000,177.919052,102.355011,18.104370,28.033783,1.000000,2.000000,1.000000\n4.000000,109.000000,186.059097,74.399574,18.109329,27.015869,1.000000,2.000000,1.000000\n4.000000,110.000000,190.193420,41.439320,21.129562,34.010654,1.000000,2.000000,1.000000\n5.000000,1.000000,833.116089,515.099182,60.003540,20.000549,1.000000,2.000000,1.000000\n5.000000,2.000000,836.663086,443.106598,54.998352,19.005096,1.000000,2.000000,1.000000\n5.000000,3.000000,831.532288,417.405731,58.014587,20.713684,1.000000,2.000000,1.000000\n5.000000,4.000000,834.501587,392.386200,55.915039,19.005066,1.000000,2.000000,1.000000\n5.000000,5.000000,833.392517,369.390381,59.913635,20.710693,1.000000,2.000000,1.000000\n5.000000,6.000000,839.068909,324.365295,55.102051,20.726685,1.000000,2.000000,1.000000\n5.000000,7.000000,837.943787,281.365997,53.924194,19.741211,1.000000,2.000000,1.000000\n5.000000,8.000000,840.758606,262.356964,53.003479,15.741547,1.000000,2.000000,1.000000\n5.000000,9.000000,841.638306,238.352814,53.021545,17.740356,1.000000,2.000000,1.000000\n5.000000,10.000000,841.528625,216.354492,54.015930,19.733139,1.000000,2.000000,1.000000\n5.000000,11.000000,841.508667,195.348557,57.010254,18.720825,1.000000,2.000000,1.000000\n5.000000,12.000000,836.316040,173.377075,59.009094,16.001846,1.000000,2.000000,1.000000\n5.000000,13.000000,839.215637,153.364670,48.085205,16.759857,1.000000,2.000000,1.000000\n5.000000,14.000000,840.195129,131.354340,60.916138,18.004623,1.000000,2.000000,1.000000\n5.000000,15.000000,838.001770,110.368332,57.004211,17.002274,1.000000,2.000000,1.000000\n5.000000,16.000000,844.897034,89.335640,56.084595,16.999115,1.000000,2.000000,1.000000\n5.000000,17.000000,840.770630,64.356071,63.015747,23.694901,1.000000,2.000000,1.000000\n5.000000,18.000000,841.676270,45.351311,55.005432,19.728172,1.000000,2.000000,1.000000\n5.000000,19.000000,840.665894,25.350996,55.926025,18.730597,1.000000,2.000000,1.000000\n5.000000,20.000000,557.093079,86.655365,41.831299,51.014542,1.000000,2.000000,1.000000\n5.000000,21.000000,569.368469,169.659531,62.075195,44.790710,1.000000,2.000000,1.000000\n5.000000,22.000000,579.262939,147.601379,64.069031,46.793488,1.000000,2.000000,1.000000\n5.000000,23.000000,837.866882,466.369659,55.003418,18.730804,1.000000,2.000000,1.000000\n5.000000,24.000000,837.231567,540.373047,59.918640,19.711365,1.000000,2.000000,1.000000\n5.000000,25.000000,617.889526,71.413086,63.052612,42.789322,1.000000,2.000000,1.000000\n5.000000,26.000000,834.344971,563.389893,59.004028,17.709351,1.000000,2.000000,1.000000\n5.000000,27.000000,781.906982,492.653961,38.069031,13.811493,1.000000,2.000000,1.000000\n5.000000,28.000000,781.797302,470.439148,43.089050,18.213043,1.000000,2.000000,1.000000\n5.000000,29.000000,771.439087,398.705902,55.117981,23.724915,1.000000,2.000000,1.000000\n5.000000,30.000000,772.338684,378.700378,53.004517,18.740784,1.000000,2.000000,1.000000\n5.000000,31.000000,768.203369,351.719849,61.120605,23.694977,1.000000,2.000000,1.000000\n5.000000,32.000000,770.188232,328.706116,59.011108,21.709076,1.000000,2.000000,1.000000\n5.000000,33.000000,766.969604,304.726868,61.107544,21.694153,1.000000,2.000000,1.000000\n5.000000,34.000000,770.945374,283.701019,50.934875,17.755280,1.000000,2.000000,1.000000\n5.000000,35.000000,768.739014,258.716339,59.009033,22.714508,1.000000,2.000000,1.000000\n5.000000,36.000000,757.625671,235.773438,70.102417,20.648834,1.000000,2.000000,1.000000\n5.000000,37.000000,769.515015,213.712219,57.108948,21.717148,1.000000,2.000000,1.000000\n5.000000,38.000000,772.411621,192.696304,54.087646,18.002716,1.000000,2.000000,1.000000\n5.000000,39.000000,767.385559,166.716187,62.919983,23.698074,1.000000,2.000000,1.000000\n5.000000,40.000000,780.196594,149.658157,50.004211,17.754288,1.000000,2.000000,1.000000\n5.000000,41.000000,798.927368,95.564873,35.002869,10.829727,1.000000,2.000000,1.000000\n5.000000,42.000000,788.990906,108.614883,44.084473,16.779793,1.000000,2.000000,1.000000\n5.000000,43.000000,776.101135,129.393356,58.083374,17.994659,1.000000,2.000000,1.000000\n5.000000,44.000000,830.535767,598.407654,71.916748,23.650146,1.000000,2.000000,1.000000\n5.000000,45.000000,606.029114,101.486717,61.054810,39.790977,1.000000,2.000000,1.000000\n5.000000,46.000000,629.792908,52.353260,58.034546,40.818584,1.000000,2.000000,1.000000\n5.000000,47.000000,371.627686,16.665630,52.968597,31.787601,1.000000,2.000000,1.000000\n5.000000,48.000000,195.243835,145.549408,50.989716,25.795609,1.000000,2.000000,1.000000\n5.000000,49.000000,193.134262,121.565178,60.973999,30.735893,1.000000,2.000000,1.000000\n5.000000,50.000000,203.984344,96.511009,48.994858,21.801613,1.000000,2.000000,1.000000\n5.000000,51.000000,204.884033,72.491974,59.985565,28.759033,1.000000,2.000000,1.000000\n5.000000,52.000000,218.649612,26.436949,54.985428,27.771345,1.000000,2.000000,1.000000\n5.000000,53.000000,226.524323,0.000000,54.980438,29.168877,1.000000,2.000000,1.000000\n5.000000,54.000000,379.507416,0.000000,55.970917,25.399733,1.000000,2.000000,1.000000\n5.000000,55.000000,367.753662,41.690296,50.964813,31.800335,1.000000,2.000000,1.000000\n5.000000,56.000000,661.535217,2.209565,49.034790,36.839592,1.000000,2.000000,1.000000\n5.000000,57.000000,356.962433,86.747093,51.984131,30.792603,1.000000,2.000000,1.000000\n5.000000,58.000000,253.457916,190.265320,70.022644,28.687195,1.000000,2.000000,1.000000\n5.000000,59.000000,175.354034,171.659180,35.979355,15.852249,1.000000,2.000000,1.000000\n5.000000,60.000000,208.397934,177.489182,47.998367,25.800583,1.000000,2.000000,1.000000\n5.000000,61.000000,323.525452,205.922058,34.989899,19.852829,1.000000,2.000000,1.000000\n5.000000,62.000000,357.580780,214.756317,35.974365,19.835938,1.000000,2.000000,1.000000\n5.000000,63.000000,391.536377,205.577988,52.978546,22.769363,1.000000,2.000000,1.000000\n5.000000,64.000000,399.431061,183.537720,41.974915,22.834198,1.000000,2.000000,1.000000\n5.000000,65.000000,405.331879,164.507721,45.973572,22.804260,1.000000,2.000000,1.000000\n5.000000,66.000000,409.235809,143.486816,46.975067,23.807785,1.000000,2.000000,1.000000\n5.000000,67.000000,419.147339,124.437889,38.968597,22.846230,1.000000,2.000000,1.000000\n5.000000,68.000000,421.021484,102.424194,36.974792,21.859116,1.000000,2.000000,1.000000\n5.000000,69.000000,426.927307,81.393547,45.983551,25.820740,1.000000,2.000000,1.000000\n5.000000,70.000000,437.686584,35.351349,54.995422,26.763363,1.000000,2.000000,1.000000\n5.000000,71.000000,440.593140,9.321395,55.962860,31.775482,1.000000,2.000000,1.000000\n5.000000,72.000000,316.407867,178.951492,71.002106,28.685150,1.000000,2.000000,1.000000\n5.000000,73.000000,324.297516,155.907852,67.004456,30.710968,1.000000,2.000000,1.000000\n5.000000,74.000000,324.182831,129.898834,73.999481,34.693649,1.000000,2.000000,1.000000\n5.000000,75.000000,836.049744,305.150757,46.003479,16.001862,1.000000,2.000000,1.000000\n5.000000,76.000000,985.869812,465.631653,37.130188,19.520721,1.000000,2.000000,1.000000\n5.000000,77.000000,992.460876,402.602936,30.539124,17.566040,1.000000,2.000000,1.000000\n5.000000,78.000000,996.598328,217.447403,26.401672,12.132050,1.000000,2.000000,1.000000\n5.000000,79.000000,990.889893,488.610443,32.110107,13.996002,1.000000,2.000000,1.000000\n5.000000,80.000000,993.993896,509.596436,29.006104,13.994995,1.000000,2.000000,1.000000\n5.000000,81.000000,999.089783,528.571594,23.910217,15.401672,1.000000,2.000000,1.000000\n5.000000,82.000000,989.258057,548.615967,33.741943,14.538696,1.000000,2.000000,1.000000\n5.000000,83.000000,966.452759,601.452148,56.547241,20.281494,1.000000,2.000000,1.000000\n5.000000,84.000000,982.283020,567.655945,40.716980,16.578003,1.000000,2.000000,1.000000\n5.000000,85.000000,758.511169,12.714990,138.035889,603.403137,1.000000,8.000000,1.000000\n5.000000,86.000000,571.295349,332.352631,195.110535,289.667145,1.000000,8.000000,1.000000\n5.000000,87.000000,556.308044,0.000000,182.106140,214.450241,1.000000,8.000000,1.000000\n5.000000,88.000000,330.405762,0.000000,170.121033,225.301163,1.000000,8.000000,1.000000\n5.000000,89.000000,179.224091,0.000000,106.795105,175.331787,1.000000,8.000000,1.000000\n5.000000,90.000000,594.245239,335.373871,55.974915,43.168823,1.000000,2.000000,1.000000\n5.000000,91.000000,603.341919,366.394012,33.982422,24.118866,1.000000,2.000000,1.000000\n5.000000,92.000000,606.424927,382.361847,37.989136,26.134674,1.000000,2.000000,1.000000\n5.000000,93.000000,616.493958,399.319244,37.004700,23.133392,1.000000,2.000000,1.000000\n5.000000,94.000000,624.581177,411.283417,36.983765,29.117981,1.000000,2.000000,1.000000\n5.000000,95.000000,635.649658,430.248596,33.005066,23.103455,1.000000,2.000000,1.000000\n5.000000,96.000000,640.729553,442.197815,36.994751,28.123566,1.000000,2.000000,1.000000\n5.000000,97.000000,655.884583,474.142578,35.004822,28.103607,1.000000,2.000000,1.000000\n5.000000,98.000000,665.952576,490.086487,35.014832,26.109741,1.000000,2.000000,1.000000\n5.000000,99.000000,672.032898,506.053436,35.004883,25.119354,1.000000,2.000000,1.000000\n5.000000,100.000000,680.117126,522.001343,36.999695,25.124268,1.000000,2.000000,1.000000\n5.000000,101.000000,690.196106,539.981018,30.996216,22.101135,1.000000,2.000000,1.000000\n5.000000,102.000000,694.276611,551.938293,37.994141,29.114014,1.000000,2.000000,1.000000\n5.000000,103.000000,702.371765,568.887634,39.975037,29.132935,1.000000,2.000000,1.000000\n5.000000,104.000000,653.092712,526.247375,26.129700,35.974365,1.000000,2.000000,1.000000\n5.000000,105.000000,626.879211,481.367950,27.123108,36.978790,1.000000,2.000000,1.000000\n5.000000,106.000000,603.636108,433.486176,27.112122,31.969696,1.000000,2.000000,1.000000\n5.000000,107.000000,564.330261,373.683197,22.090149,25.985138,1.000000,2.000000,1.000000\n5.000000,108.000000,174.089310,105.656158,17.894928,27.963974,1.000000,2.000000,1.000000\n5.000000,109.000000,181.950104,77.610962,17.889938,26.985947,1.000000,2.000000,1.000000\n5.000000,110.000000,185.815155,44.570930,20.870270,33.990700,1.000000,2.000000,1.000000\n6.000000,1.000000,833.323547,511.299042,60.007507,19.998566,1.000000,2.000000,1.000000\n6.000000,2.000000,835.962585,439.323608,54.992859,19.013184,1.000000,2.000000,1.000000\n6.000000,3.000000,830.572998,414.223694,58.038696,20.143127,1.000000,2.000000,1.000000\n6.000000,4.000000,833.482178,389.166779,55.739929,19.013123,1.000000,2.000000,1.000000\n6.000000,5.000000,832.153748,366.183197,59.738220,20.130188,1.000000,2.000000,1.000000\n6.000000,6.000000,837.181335,321.112701,55.306030,20.176147,1.000000,2.000000,1.000000\n6.000000,7.000000,835.807007,278.117706,53.769226,19.220642,1.000000,2.000000,1.000000\n6.000000,8.000000,838.252502,259.090637,53.008179,15.221375,1.000000,2.000000,1.000000\n6.000000,9.000000,838.892761,235.078888,53.056152,17.219986,1.000000,2.000000,1.000000\n6.000000,10.000000,838.563721,213.082764,54.040405,19.202576,1.000000,2.000000,1.000000\n6.000000,11.000000,838.503845,192.068939,57.024536,18.160461,1.000000,2.000000,1.000000\n6.000000,12.000000,832.922791,170.159470,59.023132,16.000259,1.000000,2.000000,1.000000\n6.000000,13.000000,835.622620,150.119141,48.250000,16.279449,1.000000,2.000000,1.000000\n6.000000,14.000000,836.562134,128.091064,60.740540,18.012802,1.000000,2.000000,1.000000\n6.000000,15.000000,833.979980,107.137047,57.008545,17.000580,1.000000,2.000000,1.000000\n6.000000,16.000000,840.665161,86.036629,56.248596,16.997429,1.000000,2.000000,1.000000\n6.000000,17.000000,836.289856,61.099461,63.039368,23.084156,1.000000,2.000000,1.000000\n6.000000,18.000000,837.005920,42.086609,55.009888,19.187645,1.000000,2.000000,1.000000\n6.000000,19.000000,835.975708,22.088284,55.770874,18.190174,1.000000,2.000000,1.000000\n6.000000,20.000000,553.278748,85.999535,41.488098,51.039406,1.000000,2.000000,1.000000\n6.000000,21.000000,566.101501,169.005447,62.218567,44.367355,1.000000,2.000000,1.000000\n6.000000,22.000000,575.785522,146.829788,64.202271,46.379929,1.000000,2.000000,1.000000\n6.000000,23.000000,837.575195,463.112946,55.007874,18.190369,1.000000,2.000000,1.000000\n6.000000,24.000000,837.667969,537.118958,59.753113,19.130920,1.000000,2.000000,1.000000\n6.000000,25.000000,613.660339,70.270103,63.156006,42.366180,1.000000,2.000000,1.000000\n6.000000,26.000000,835.010986,560.163391,59.008179,17.129211,1.000000,2.000000,1.000000\n6.000000,27.000000,781.700623,489.963104,38.204834,13.431122,1.000000,2.000000,1.000000\n6.000000,28.000000,781.371521,467.321655,43.264282,18.640076,1.000000,2.000000,1.000000\n6.000000,29.000000,770.296265,396.124115,55.351868,23.174042,1.000000,2.000000,1.000000\n6.000000,30.000000,770.996338,376.110596,53.009216,18.220337,1.000000,2.000000,1.000000\n6.000000,31.000000,766.592163,349.172638,61.353882,23.084259,1.000000,2.000000,1.000000\n6.000000,32.000000,768.546875,326.131317,59.025208,21.128448,1.000000,2.000000,1.000000\n6.000000,33.000000,764.889709,302.194336,61.320923,21.083618,1.000000,2.000000,1.000000\n6.000000,34.000000,768.815247,281.120697,50.800110,17.264832,1.000000,2.000000,1.000000\n6.000000,35.000000,766.200195,256.168457,59.023132,22.143738,1.000000,2.000000,1.000000\n6.000000,36.000000,754.858582,233.337524,70.304932,19.948669,1.000000,2.000000,1.000000\n6.000000,37.000000,766.527344,211.158813,57.322693,21.146515,1.000000,2.000000,1.000000\n6.000000,38.000000,769.214172,190.115067,54.261902,18.000916,1.000000,2.000000,1.000000\n6.000000,39.000000,764.138794,164.177444,62.754150,23.087326,1.000000,2.000000,1.000000\n6.000000,40.000000,776.569580,147.001419,50.009216,17.263824,1.000000,2.000000,1.000000\n6.000000,41.000000,794.759949,92.724014,35.009338,10.489571,1.000000,2.000000,1.000000\n6.000000,42.000000,784.954163,105.872475,44.249573,16.339302,1.000000,2.000000,1.000000\n6.000000,43.000000,772.285034,126.210052,58.247131,17.982895,1.000000,2.000000,1.000000\n6.000000,44.000000,831.581177,595.217590,71.750061,22.949646,1.000000,2.000000,1.000000\n6.000000,45.000000,602.080322,100.490334,61.158447,39.368141,1.000000,2.000000,1.000000\n6.000000,46.000000,625.372986,51.092480,58.098572,40.455486,1.000000,2.000000,1.000000\n6.000000,47.000000,366.894348,18.031368,52.903503,31.365559,1.000000,2.000000,1.000000\n6.000000,48.000000,191.754791,148.677567,50.964676,25.384155,1.000000,2.000000,1.000000\n6.000000,49.000000,189.425995,124.725647,60.918076,30.204269,1.000000,2.000000,1.000000\n6.000000,50.000000,199.975800,99.564270,48.980011,21.400520,1.000000,2.000000,1.000000\n6.000000,51.000000,200.675919,75.507729,59.949692,28.277443,1.000000,2.000000,1.000000\n6.000000,52.000000,213.971405,29.347569,54.950043,27.309822,1.000000,2.000000,1.000000\n6.000000,53.000000,221.596008,1.217553,54.935059,30.323120,1.000000,2.000000,1.000000\n6.000000,54.000000,374.533966,0.000000,55.905487,26.236027,1.000000,2.000000,1.000000\n6.000000,55.000000,363.270050,43.103424,50.889954,31.398224,1.000000,2.000000,1.000000\n6.000000,56.000000,656.593506,0.664549,49.099731,36.516792,1.000000,2.000000,1.000000\n6.000000,57.000000,352.898804,88.275406,51.949036,30.370674,1.000000,2.000000,1.000000\n6.000000,58.000000,250.391907,192.820557,70.065582,28.056030,1.000000,2.000000,1.000000\n6.000000,59.000000,172.086349,175.004150,35.935898,15.551468,1.000000,2.000000,1.000000\n6.000000,60.000000,205.216751,180.494492,47.993591,25.399078,1.000000,2.000000,1.000000\n6.000000,61.000000,320.592133,207.787582,34.966461,19.561630,1.000000,2.000000,1.000000\n6.000000,62.000000,354.753754,216.291855,35.920929,19.504837,1.000000,2.000000,1.000000\n6.000000,63.000000,388.616211,206.755386,52.933380,22.308319,1.000000,2.000000,1.000000\n6.000000,64.000000,396.300659,184.637543,41.920898,22.502777,1.000000,2.000000,1.000000\n6.000000,65.000000,402.001434,165.549591,45.919159,22.413025,1.000000,2.000000,1.000000\n6.000000,66.000000,405.715485,144.490875,46.920532,23.416458,1.000000,2.000000,1.000000\n6.000000,67.000000,415.446503,125.344116,38.904907,22.534775,1.000000,2.000000,1.000000\n6.000000,68.000000,417.071136,103.302681,36.921265,21.577698,1.000000,2.000000,1.000000\n6.000000,69.000000,422.786896,82.214302,45.949066,25.459129,1.000000,2.000000,1.000000\n6.000000,70.000000,433.066345,36.086906,54.980042,26.291962,1.000000,2.000000,1.000000\n6.000000,71.000000,435.783142,9.999717,55.887512,31.323505,1.000000,2.000000,1.000000\n6.000000,72.000000,313.235870,180.879547,71.005035,28.053970,1.000000,2.000000,1.000000\n6.000000,73.000000,320.905334,157.748444,67.007751,30.129456,1.000000,2.000000,1.000000\n6.000000,74.000000,320.561279,131.722046,73.992126,34.081833,1.000000,2.000000,1.000000\n6.000000,75.000000,834.122559,301.471252,46.008911,16.000244,1.000000,2.000000,1.000000\n6.000000,76.000000,985.573364,460.898956,37.426636,19.159607,1.000000,2.000000,1.000000\n6.000000,77.000000,991.345947,397.816681,31.654053,17.269470,1.000000,2.000000,1.000000\n6.000000,78.000000,993.757568,212.321442,29.242432,12.439087,1.000000,2.000000,1.000000\n6.000000,79.000000,990.632812,483.835571,32.367188,13.984619,1.000000,2.000000,1.000000\n6.000000,80.000000,993.945923,504.789581,29.054077,13.983612,1.000000,2.000000,1.000000\n6.000000,81.000000,999.230835,523.712952,23.769165,15.147339,1.000000,2.000000,1.000000\n6.000000,82.000000,989.739197,543.845093,33.260803,14.207947,1.000000,2.000000,1.000000\n6.000000,83.000000,967.325073,596.364380,55.674927,20.830505,1.000000,2.000000,1.000000\n6.000000,84.000000,982.814697,562.962952,40.185303,16.168152,1.000000,2.000000,1.000000\n6.000000,85.000000,759.513916,10.181582,132.098022,602.166260,1.000000,8.000000,1.000000\n6.000000,86.000000,569.883179,331.073975,197.315186,288.980103,1.000000,8.000000,1.000000\n6.000000,87.000000,552.922729,0.000000,179.185669,213.372803,1.000000,8.000000,1.000000\n6.000000,88.000000,327.232391,0.000000,168.348816,225.928070,1.000000,8.000000,1.000000\n6.000000,89.000000,175.696747,0.000000,105.745575,178.018158,1.000000,8.000000,1.000000\n6.000000,90.000000,592.731079,334.134827,55.919556,43.503601,1.000000,2.000000,1.000000\n6.000000,91.000000,602.016357,365.191742,33.949097,24.355865,1.000000,2.000000,1.000000\n6.000000,92.000000,605.268616,381.098145,37.965393,26.401367,1.000000,2.000000,1.000000\n6.000000,93.000000,615.476257,397.964111,37.010986,23.400360,1.000000,2.000000,1.000000\n6.000000,94.000000,623.732239,409.857269,36.950134,29.354462,1.000000,2.000000,1.000000\n6.000000,95.000000,634.939209,428.750763,33.011780,23.310608,1.000000,2.000000,1.000000\n6.000000,96.000000,640.178223,440.599091,36.981079,28.370056,1.000000,2.000000,1.000000\n6.000000,97.000000,655.640869,472.430908,35.011292,28.310272,1.000000,2.000000,1.000000\n6.000000,98.000000,665.847534,488.263550,35.041260,26.326599,1.000000,2.000000,1.000000\n6.000000,99.000000,672.086792,504.159088,35.011353,25.356171,1.000000,2.000000,1.000000\n6.000000,100.000000,680.339722,520.005676,36.996033,25.371094,1.000000,2.000000,1.000000\n6.000000,101.000000,690.577332,537.943665,30.983154,22.298401,1.000000,2.000000,1.000000\n6.000000,102.000000,694.817017,549.810059,37.980347,29.340454,1.000000,2.000000,1.000000\n6.000000,103.000000,703.100830,566.657898,39.921204,29.399353,1.000000,2.000000,1.000000\n6.000000,104.000000,653.268127,524.739990,26.386414,35.920959,1.000000,2.000000,1.000000\n6.000000,105.000000,626.628418,480.104401,27.369751,36.935211,1.000000,2.000000,1.000000\n6.000000,106.000000,602.898987,432.466736,27.338745,31.906677,1.000000,2.000000,1.000000\n6.000000,107.000000,562.988647,373.058685,22.267456,25.952606,1.000000,2.000000,1.000000\n6.000000,108.000000,170.293182,108.997726,17.683716,27.891373,1.000000,2.000000,1.000000\n6.000000,109.000000,177.873932,80.865562,17.668762,26.953339,1.000000,2.000000,1.000000\n6.000000,110.000000,181.469360,47.749035,20.608887,33.967365,1.000000,2.000000,1.000000\n7.000000,1.000000,833.498962,507.498993,60.005554,20.490326,1.000000,2.000000,1.000000\n7.000000,2.000000,835.229858,435.547852,54.981934,19.019379,1.000000,2.000000,1.000000\n7.000000,3.000000,829.581970,411.051392,58.057129,19.570557,1.000000,2.000000,1.000000\n7.000000,4.000000,832.430725,385.959564,55.559326,19.019318,1.000000,2.000000,1.000000\n7.000000,5.000000,830.883179,362.990540,59.556763,20.019440,1.000000,2.000000,1.000000\n7.000000,6.000000,835.261414,317.508148,55.504517,19.994537,1.000000,2.000000,1.000000\n7.000000,7.000000,833.638000,274.892670,53.608948,18.698151,1.000000,2.000000,1.000000\n7.000000,8.000000,835.713989,255.528290,53.007629,15.020844,1.000000,2.000000,1.000000\n7.000000,9.000000,836.114746,231.832520,53.085449,16.697891,1.000000,2.000000,1.000000\n7.000000,10.000000,835.566284,209.840759,54.059631,18.670090,1.000000,2.000000,1.000000\n7.000000,11.000000,835.466553,188.821136,57.033142,17.598282,1.000000,2.000000,1.000000\n7.000000,12.000000,829.497620,166.975861,59.031372,15.997070,1.000000,2.000000,1.000000\n7.000000,13.000000,831.997437,146.710999,48.409912,16.192596,1.000000,2.000000,1.000000\n7.000000,14.000000,832.896851,124.370201,60.558960,18.514946,1.000000,2.000000,1.000000\n7.000000,15.000000,829.926208,103.525116,57.007202,17.418114,1.000000,2.000000,1.000000\n7.000000,16.000000,836.400635,82.383995,56.406921,17.390038,1.000000,2.000000,1.000000\n7.000000,17.000000,831.776855,57.887695,63.056763,22.471115,1.000000,2.000000,1.000000\n7.000000,18.000000,832.303284,38.494701,55.008850,19.368053,1.000000,2.000000,1.000000\n7.000000,19.000000,831.253296,18.874302,55.610107,18.018909,1.000000,2.000000,1.000000\n7.000000,20.000000,549.460388,85.386078,41.140747,51.059189,1.000000,2.000000,1.000000\n7.000000,21.000000,562.829163,168.385468,62.355774,43.939606,1.000000,2.000000,1.000000\n7.000000,22.000000,572.301819,146.094528,64.329163,45.961746,1.000000,2.000000,1.000000\n7.000000,23.000000,837.251099,459.861084,55.006897,18.019165,1.000000,2.000000,1.000000\n7.000000,24.000000,838.071960,533.391602,59.581665,19.019348,1.000000,2.000000,1.000000\n7.000000,25.000000,609.421021,69.171051,63.253174,41.938835,1.000000,2.000000,1.000000\n7.000000,26.000000,835.644958,556.483215,59.006409,17.467957,1.000000,2.000000,1.000000\n7.000000,27.000000,781.467468,487.274414,38.336853,13.049469,1.000000,2.000000,1.000000\n7.000000,28.000000,780.918945,464.208618,43.435181,19.065247,1.000000,2.000000,1.000000\n7.000000,29.000000,769.127747,393.553864,55.580261,22.620850,1.000000,2.000000,1.000000\n7.000000,30.000000,769.628235,373.213165,53.008606,18.290527,1.000000,2.000000,1.000000\n7.000000,31.000000,764.955566,346.641663,61.581055,22.994965,1.000000,2.000000,1.000000\n7.000000,32.000000,766.880005,323.574951,59.033386,20.545746,1.000000,2.000000,1.000000\n7.000000,33.000000,762.784729,299.682648,61.528137,20.991638,1.000000,2.000000,1.000000\n7.000000,34.000000,766.659546,278.563324,50.660400,16.772705,1.000000,2.000000,1.000000\n7.000000,35.000000,763.636108,253.645996,59.031372,21.570801,1.000000,2.000000,1.000000\n7.000000,36.000000,752.067383,230.929321,70.500366,19.246506,1.000000,2.000000,1.000000\n7.000000,37.000000,763.514343,208.635345,57.530762,20.993668,1.000000,2.000000,1.000000\n7.000000,38.000000,765.991211,187.565842,54.430603,17.997330,1.000000,2.000000,1.000000\n7.000000,39.000000,760.866943,161.673294,62.582092,22.474289,1.000000,2.000000,1.000000\n7.000000,40.000000,772.916199,144.133560,50.009277,17.240524,1.000000,2.000000,1.000000\n7.000000,41.000000,790.564392,89.924866,35.012329,10.148369,1.000000,2.000000,1.000000\n7.000000,42.000000,780.890198,103.170464,44.410400,15.897179,1.000000,2.000000,1.000000\n7.000000,43.000000,768.443054,123.065125,58.405090,18.417221,1.000000,2.000000,1.000000\n7.000000,44.000000,832.594849,592.019226,71.576111,22.246887,1.000000,2.000000,1.000000\n7.000000,45.000000,598.122559,99.534882,61.255981,38.941391,1.000000,2.000000,1.000000\n7.000000,46.000000,620.941833,49.877541,58.156860,40.088364,1.000000,2.000000,1.000000\n7.000000,47.000000,362.175476,19.446239,52.833099,30.940395,1.000000,2.000000,1.000000\n7.000000,48.000000,188.297592,151.841858,50.934586,24.970169,1.000000,2.000000,1.000000\n7.000000,49.000000,185.749817,127.924637,60.856079,29.669632,1.000000,2.000000,1.000000\n7.000000,50.000000,195.998291,102.658546,48.960297,20.997299,1.000000,2.000000,1.000000\n7.000000,51.000000,196.498795,78.566902,59.907852,27.793045,1.000000,2.000000,1.000000\n7.000000,52.000000,209.322861,32.306198,54.909164,26.845581,1.000000,2.000000,1.000000\n7.000000,53.000000,216.696594,4.092010,54.884216,29.868248,1.000000,2.000000,1.000000\n7.000000,54.000000,369.574158,0.000000,55.834534,27.120638,1.000000,2.000000,1.000000\n7.000000,55.000000,358.801239,44.563190,50.810028,30.992992,1.000000,2.000000,1.000000\n7.000000,56.000000,651.637451,0.000000,49.159790,35.360756,1.000000,2.000000,1.000000\n7.000000,57.000000,348.850983,89.845856,51.908752,29.945732,1.000000,2.000000,1.000000\n7.000000,58.000000,247.351929,195.407562,70.101501,27.422058,1.000000,2.000000,1.000000\n7.000000,59.000000,168.852493,178.382660,35.888840,15.249146,1.000000,2.000000,1.000000\n7.000000,60.000000,202.066071,183.532776,47.984039,24.995056,1.000000,2.000000,1.000000\n7.000000,61.000000,317.677826,209.683365,34.939545,19.268494,1.000000,2.000000,1.000000\n7.000000,62.000000,351.942352,217.856812,35.863922,19.171783,1.000000,2.000000,1.000000\n7.000000,63.000000,385.708344,207.963165,52.882935,21.845047,1.000000,2.000000,1.000000\n7.000000,64.000000,393.181793,185.769928,41.862671,22.169144,1.000000,2.000000,1.000000\n7.000000,65.000000,398.681946,166.625916,45.860138,22.019562,1.000000,2.000000,1.000000\n7.000000,66.000000,402.205750,145.531494,46.861298,23.022812,1.000000,2.000000,1.000000\n7.000000,67.000000,411.755280,126.288795,38.837341,22.221107,1.000000,2.000000,1.000000\n7.000000,68.000000,413.130249,104.221809,36.864044,21.294151,1.000000,2.000000,1.000000\n7.000000,69.000000,418.655334,83.077805,45.910004,25.094986,1.000000,2.000000,1.000000\n7.000000,70.000000,428.453979,36.869801,54.959137,25.817947,1.000000,2.000000,1.000000\n7.000000,71.000000,430.980713,10.727969,55.806610,30.868416,1.000000,2.000000,1.000000\n7.000000,72.000000,310.083649,182.840530,71.000916,27.420013,1.000000,2.000000,1.000000\n7.000000,73.000000,317.532135,159.624268,67.004425,29.544952,1.000000,2.000000,1.000000\n7.000000,74.000000,316.958771,133.583084,73.977386,33.466629,1.000000,2.000000,1.000000\n7.000000,75.000000,832.163391,297.812683,46.009705,16.143738,1.000000,2.000000,1.000000\n7.000000,76.000000,985.229797,456.171356,37.770203,19.019318,1.000000,2.000000,1.000000\n7.000000,77.000000,990.183350,393.041779,32.816650,16.969208,1.000000,2.000000,1.000000\n7.000000,78.000000,990.868958,207.164917,32.131042,12.805267,1.000000,2.000000,1.000000\n7.000000,79.000000,990.328064,479.026978,32.671936,14.008392,1.000000,2.000000,1.000000\n7.000000,80.000000,993.850037,499.967773,29.149963,13.986511,1.000000,2.000000,1.000000\n7.000000,81.000000,999.323425,518.853149,23.676575,14.899414,1.000000,2.000000,1.000000\n7.000000,82.000000,990.172791,538.953552,32.827209,14.139282,1.000000,2.000000,1.000000\n7.000000,83.000000,968.152100,591.284302,54.847900,21.361328,1.000000,2.000000,1.000000\n7.000000,84.000000,983.299561,558.264893,39.700439,15.994080,1.000000,2.000000,1.000000\n7.000000,85.000000,758.503296,7.698089,133.023132,601.138062,1.000000,8.000000,1.000000\n7.000000,86.000000,568.465332,329.813293,199.500183,288.264282,1.000000,8.000000,1.000000\n7.000000,87.000000,549.533325,0.000000,176.330688,212.325073,1.000000,8.000000,1.000000\n7.000000,88.000000,324.077393,0.000000,166.559875,226.583420,1.000000,8.000000,1.000000\n7.000000,89.000000,172.202850,0.000000,104.648865,180.737747,1.000000,8.000000,1.000000\n7.000000,90.000000,591.208923,332.913452,55.858521,43.834045,1.000000,2.000000,1.000000\n7.000000,91.000000,600.681824,364.004089,33.912415,24.590393,1.000000,2.000000,1.000000\n7.000000,92.000000,604.103027,379.847473,37.937927,26.665436,1.000000,2.000000,1.000000\n7.000000,93.000000,614.448242,396.620331,37.013672,23.665009,1.000000,2.000000,1.000000\n7.000000,94.000000,622.872131,408.441284,36.912903,29.588043,1.000000,2.000000,1.000000\n7.000000,95.000000,634.216553,427.261200,33.015137,23.515442,1.000000,2.000000,1.000000\n7.000000,96.000000,639.614136,439.007446,36.963684,28.613770,1.000000,2.000000,1.000000\n7.000000,97.000000,655.382874,470.723206,35.014343,28.514099,1.000000,2.000000,1.000000\n7.000000,98.000000,665.727112,486.442993,35.064270,26.540771,1.000000,2.000000,1.000000\n7.000000,99.000000,672.124756,502.265533,35.014404,25.590546,1.000000,2.000000,1.000000\n7.000000,100.000000,680.545593,518.009216,36.988708,25.615479,1.000000,2.000000,1.000000\n7.000000,101.000000,690.940735,535.903748,30.967041,22.493469,1.000000,2.000000,1.000000\n7.000000,102.000000,695.339172,547.678040,37.962830,29.563965,1.000000,2.000000,1.000000\n7.000000,103.000000,703.810852,564.422791,39.863403,29.662781,1.000000,2.000000,1.000000\n7.000000,104.000000,653.429565,523.231323,26.640503,35.863953,1.000000,2.000000,1.000000\n7.000000,105.000000,626.366211,478.844025,27.613708,36.887909,1.000000,2.000000,1.000000\n7.000000,106.000000,602.152771,431.455231,27.562744,31.840485,1.000000,2.000000,1.000000\n7.000000,107.000000,561.641968,372.447968,22.442566,25.917542,1.000000,2.000000,1.000000\n7.000000,108.000000,166.531052,112.379379,17.470734,27.816010,1.000000,2.000000,1.000000\n7.000000,109.000000,173.831009,84.163048,17.445831,26.918045,1.000000,2.000000,1.000000\n7.000000,110.000000,177.156433,50.973316,20.345444,33.940647,1.000000,2.000000,1.000000\n8.000000,1.000000,833.642456,503.699402,59.997620,21.082764,1.000000,2.000000,1.000000\n8.000000,2.000000,834.465027,431.779694,54.965515,19.023682,1.000000,2.000000,1.000000\n8.000000,3.000000,828.559448,407.889130,58.069702,18.996063,1.000000,2.000000,1.000000\n8.000000,4.000000,831.347473,382.764893,55.373108,19.023590,1.000000,2.000000,1.000000\n8.000000,5.000000,829.580872,359.812683,59.369385,20.023468,1.000000,2.000000,1.000000\n8.000000,6.000000,833.309326,313.745300,55.697449,19.988586,1.000000,2.000000,1.000000\n8.000000,7.000000,831.437012,271.691223,53.443298,18.173828,1.000000,2.000000,1.000000\n8.000000,8.000000,833.143250,251.783951,53.001770,15.026321,1.000000,2.000000,1.000000\n8.000000,9.000000,833.304504,228.613998,53.109497,16.174149,1.000000,2.000000,1.000000\n8.000000,10.000000,832.536743,206.628815,54.073364,18.135757,1.000000,2.000000,1.000000\n8.000000,11.000000,832.397095,185.605484,57.036072,17.034348,1.000000,2.000000,1.000000\n8.000000,12.000000,826.040833,163.767166,59.033691,16.051697,1.000000,2.000000,1.000000\n8.000000,13.000000,828.340454,143.058960,48.565063,16.666641,1.000000,2.000000,1.000000\n8.000000,14.000000,829.199646,120.585167,60.371277,19.117989,1.000000,2.000000,1.000000\n8.000000,15.000000,825.840820,99.806168,57.000183,17.981560,1.000000,2.000000,1.000000\n8.000000,16.000000,832.103821,78.611488,56.559692,17.943527,1.000000,2.000000,1.000000\n8.000000,17.000000,827.231995,54.721100,63.067871,21.950172,1.000000,2.000000,1.000000\n8.000000,18.000000,827.568726,34.775211,55.002441,19.910973,1.000000,2.000000,1.000000\n8.000000,19.000000,826.499084,15.709368,55.443909,18.023512,1.000000,2.000000,1.000000\n8.000000,20.000000,545.638245,84.815056,40.789307,51.073891,1.000000,2.000000,1.000000\n8.000000,21.000000,559.551758,167.799667,62.486816,43.507492,1.000000,2.000000,1.000000\n8.000000,22.000000,568.812073,145.395660,64.449646,45.539001,1.000000,2.000000,1.000000\n8.000000,23.000000,836.894592,456.614410,55.000549,18.023773,1.000000,2.000000,1.000000\n8.000000,24.000000,838.443542,529.544373,59.404236,19.023621,1.000000,2.000000,1.000000\n8.000000,25.000000,605.171997,68.116051,63.343994,41.507309,1.000000,2.000000,1.000000\n8.000000,26.000000,836.246704,552.669006,58.998779,18.051331,1.000000,2.000000,1.000000\n8.000000,27.000000,781.207458,484.261902,38.465149,13.319092,1.000000,2.000000,1.000000\n8.000000,28.000000,780.439636,461.100311,43.601807,19.488556,1.000000,2.000000,1.000000\n8.000000,29.000000,767.933716,390.995361,55.803101,22.065430,1.000000,2.000000,1.000000\n8.000000,30.000000,768.234436,370.122040,53.002869,18.803833,1.000000,2.000000,1.000000\n8.000000,31.000000,763.293823,344.127136,61.802124,22.988098,1.000000,2.000000,1.000000\n8.000000,32.000000,765.187805,321.037384,59.035706,20.023529,1.000000,2.000000,1.000000\n8.000000,33.000000,760.654785,297.059906,61.729248,21.117584,1.000000,2.000000,1.000000\n8.000000,34.000000,764.478577,276.029205,50.515564,16.278870,1.000000,2.000000,1.000000\n8.000000,35.000000,761.046997,251.089844,59.033691,21.055115,1.000000,2.000000,1.000000\n8.000000,36.000000,749.252319,228.549072,70.688782,18.987732,1.000000,2.000000,1.000000\n8.000000,37.000000,760.476318,206.142044,57.733093,20.987396,1.000000,2.000000,1.000000\n8.000000,38.000000,762.742920,185.048889,54.593994,17.991959,1.000000,2.000000,1.000000\n8.000000,39.000000,757.570374,159.203979,62.403809,21.859024,1.000000,2.000000,1.000000\n8.000000,40.000000,769.236938,141.050949,50.004272,17.734192,1.000000,2.000000,1.000000\n8.000000,41.000000,786.341125,86.946007,35.011902,10.027847,1.000000,2.000000,1.000000\n8.000000,42.000000,776.799500,100.509117,44.566711,15.453476,1.000000,2.000000,1.000000\n8.000000,43.000000,764.575562,119.958885,58.557251,18.980370,1.000000,2.000000,1.000000\n8.000000,44.000000,833.576599,588.812927,71.395142,21.541931,1.000000,2.000000,1.000000\n8.000000,45.000000,594.156250,98.620461,61.347412,38.510750,1.000000,2.000000,1.000000\n8.000000,46.000000,616.499817,48.708569,58.209351,39.717258,1.000000,2.000000,1.000000\n8.000000,47.000000,357.471466,20.910103,52.757507,30.512154,1.000000,2.000000,1.000000\n8.000000,48.000000,184.872589,155.041992,50.899414,24.553696,1.000000,2.000000,1.000000\n8.000000,49.000000,182.106079,131.161819,60.788055,29.132050,1.000000,2.000000,1.000000\n8.000000,50.000000,192.052231,105.793541,48.935684,20.591988,1.000000,2.000000,1.000000\n8.000000,51.000000,192.353043,81.669182,59.860077,27.305878,1.000000,2.000000,1.000000\n8.000000,52.000000,204.704407,35.312538,54.862854,26.378670,1.000000,2.000000,1.000000\n8.000000,53.000000,211.826538,7.016986,54.827911,29.410404,1.000000,2.000000,1.000000\n8.000000,54.000000,364.628540,0.000000,55.758026,28.053478,1.000000,2.000000,1.000000\n8.000000,55.000000,354.347687,46.069450,50.725037,30.584679,1.000000,2.000000,1.000000\n8.000000,56.000000,646.667542,0.000000,49.214905,33.587578,1.000000,2.000000,1.000000\n8.000000,57.000000,344.819397,91.458298,51.863312,29.517815,1.000000,2.000000,1.000000\n8.000000,58.000000,244.338272,198.026047,70.130447,26.785355,1.000000,2.000000,1.000000\n8.000000,59.000000,165.652756,181.794342,35.838226,14.945297,1.000000,2.000000,1.000000\n8.000000,60.000000,198.946213,186.603729,47.969727,24.588547,1.000000,2.000000,1.000000\n8.000000,61.000000,314.782867,211.609207,34.909149,18.973434,1.000000,2.000000,1.000000\n8.000000,62.000000,349.146881,219.451019,35.803345,18.836838,1.000000,2.000000,1.000000\n8.000000,63.000000,382.813019,209.201172,52.827240,21.379608,1.000000,2.000000,1.000000\n8.000000,64.000000,390.074738,186.934753,41.800323,21.833298,1.000000,2.000000,1.000000\n8.000000,65.000000,395.373718,167.736588,45.796600,21.623917,1.000000,2.000000,1.000000\n8.000000,66.000000,398.706940,146.608551,46.797424,22.626877,1.000000,2.000000,1.000000\n8.000000,67.000000,408.074066,127.271851,38.765869,21.905212,1.000000,2.000000,1.000000\n8.000000,68.000000,409.199188,105.181503,36.803162,21.008476,1.000000,2.000000,1.000000\n8.000000,69.000000,414.533081,83.983978,45.866364,24.728340,1.000000,2.000000,1.000000\n8.000000,70.000000,423.849915,37.699955,54.932800,25.341362,1.000000,2.000000,1.000000\n8.000000,71.000000,426.186340,11.506083,55.720154,30.410254,1.000000,2.000000,1.000000\n8.000000,72.000000,306.951538,184.834244,70.989685,26.783325,1.000000,2.000000,1.000000\n8.000000,73.000000,314.178284,161.535126,66.994415,28.957535,1.000000,2.000000,1.000000\n8.000000,74.000000,313.375641,135.481766,73.955322,32.848099,1.000000,2.000000,1.000000\n8.000000,75.000000,830.172302,294.175415,46.005981,16.597839,1.000000,2.000000,1.000000\n8.000000,76.000000,984.839111,451.449310,38.160889,19.023621,1.000000,2.000000,1.000000\n8.000000,77.000000,988.973145,388.278687,34.026855,16.954193,1.000000,2.000000,1.000000\n8.000000,78.000000,987.932678,201.976730,35.067322,13.232147,1.000000,2.000000,1.000000\n8.000000,79.000000,989.975830,473.928406,33.024170,14.324005,1.000000,2.000000,1.000000\n8.000000,80.000000,993.706238,494.870575,29.293762,14.264587,1.000000,2.000000,1.000000\n8.000000,81.000000,999.367554,513.992615,23.632446,14.656494,1.000000,2.000000,1.000000\n8.000000,82.000000,990.558838,533.859253,32.441162,14.462646,1.000000,2.000000,1.000000\n8.000000,83.000000,968.933777,586.210754,54.066223,21.875610,1.000000,2.000000,1.000000\n8.000000,84.000000,983.737488,553.562256,39.262512,15.989319,1.000000,2.000000,1.000000\n8.000000,85.000000,753.461548,5.264757,139.009094,601.088257,1.000000,8.000000,1.000000\n8.000000,86.000000,567.041809,328.570770,201.665344,287.519806,1.000000,8.000000,1.000000\n8.000000,87.000000,546.140137,0.000000,173.538757,211.307159,1.000000,8.000000,1.000000\n8.000000,88.000000,320.941071,0.000000,164.754364,227.267181,1.000000,8.000000,1.000000\n8.000000,89.000000,168.742737,0.000000,103.503784,183.490295,1.000000,8.000000,1.000000\n8.000000,90.000000,589.678894,331.709900,55.791931,44.160126,1.000000,2.000000,1.000000\n8.000000,91.000000,599.338501,362.831146,33.872375,24.822510,1.000000,2.000000,1.000000\n8.000000,92.000000,602.928223,378.609955,37.906677,26.926849,1.000000,2.000000,1.000000\n8.000000,93.000000,613.410095,395.287994,37.012573,23.927338,1.000000,2.000000,1.000000\n8.000000,94.000000,622.001038,407.035583,36.871948,29.818695,1.000000,2.000000,1.000000\n8.000000,95.000000,633.481689,425.780060,33.015320,23.717957,1.000000,2.000000,1.000000\n8.000000,96.000000,639.037292,437.423065,36.942749,28.854614,1.000000,2.000000,1.000000\n8.000000,97.000000,655.110657,469.019592,35.013794,28.715088,1.000000,2.000000,1.000000\n8.000000,98.000000,665.591431,484.624969,35.083740,26.752319,1.000000,2.000000,1.000000\n8.000000,99.000000,672.146851,500.372955,35.013855,25.822296,1.000000,2.000000,1.000000\n8.000000,100.000000,680.734741,516.012207,36.977661,25.857178,1.000000,2.000000,1.000000\n8.000000,101.000000,691.286377,533.861511,30.947815,22.686218,1.000000,2.000000,1.000000\n8.000000,102.000000,695.843140,545.542419,37.941467,29.784668,1.000000,2.000000,1.000000\n8.000000,103.000000,704.501831,562.182434,39.801636,29.923279,1.000000,2.000000,1.000000\n8.000000,104.000000,653.576904,521.721558,26.891907,35.803406,1.000000,2.000000,1.000000\n8.000000,105.000000,626.092651,477.586945,27.854858,36.837006,1.000000,2.000000,1.000000\n8.000000,106.000000,601.397583,430.451721,27.783997,31.771118,1.000000,2.000000,1.000000\n8.000000,107.000000,560.290283,371.851135,22.615479,25.879883,1.000000,2.000000,1.000000\n8.000000,108.000000,162.803268,115.800781,17.256027,27.737869,1.000000,2.000000,1.000000\n8.000000,109.000000,169.821701,87.503082,17.221176,26.880081,1.000000,2.000000,1.000000\n8.000000,110.000000,172.876801,54.243454,20.079987,33.910561,1.000000,2.000000,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/gt/gt_obb.txt",
    "content": "1.000000,1.000000,862.262878,539.240173,59.999321,20.000832,0.034907,1.000000,2.000000,1.000000\n1.000000,2.000000,866.292725,466.838013,54.999016,19.000315,0.034907,1.000000,2.000000,1.000000\n1.000000,3.000000,863.160645,442.187653,58.077854,18.974989,0.086572,1.000000,2.000000,1.000000\n1.000000,4.000000,866.537476,416.815247,55.346180,19.024078,0.071233,1.000000,2.000000,1.000000\n1.000000,5.000000,868.306702,394.837402,59.076084,20.025723,0.084835,1.000000,2.000000,1.000000\n1.000000,6.000000,873.407776,349.012878,55.370876,19.997467,0.053095,1.000000,2.000000,1.000000\n1.000000,7.000000,873.400452,305.986053,53.084126,18.027664,0.091476,1.000000,2.000000,1.000000\n1.000000,8.000000,876.515808,284.589661,53.008591,15.016784,0.053781,1.000000,2.000000,1.000000\n1.000000,9.000000,877.868408,262.474426,53.152523,15.960173,0.106387,1.000000,2.000000,1.000000\n1.000000,10.000000,879.221252,240.652344,54.084778,17.028685,0.090372,1.000000,2.000000,1.000000\n1.000000,11.000000,882.240784,219.236176,57.036079,17.024061,0.069995,1.000000,2.000000,1.000000\n1.000000,12.000000,878.460510,196.587967,59.033798,15.992846,0.068807,1.000000,2.000000,1.000000\n1.000000,13.000000,876.947876,176.032364,48.344177,15.997558,0.055703,1.000000,2.000000,1.000000\n1.000000,14.000000,885.176025,155.306732,60.709812,18.014027,0.051579,1.000000,2.000000,1.000000\n1.000000,15.000000,881.780029,133.672501,57.008713,16.999865,0.052457,1.000000,2.000000,1.000000\n1.000000,16.000000,889.175781,112.420433,56.000549,16.999321,0.034907,1.000000,2.000000,1.000000\n1.000000,17.000000,888.888550,91.347893,63.072853,21.926064,0.082463,1.000000,2.000000,1.000000\n1.000000,18.000000,886.987549,69.823402,55.010101,19.015139,0.053042,1.000000,2.000000,1.000000\n1.000000,19.000000,887.340637,50.317558,55.101841,18.027332,0.089371,1.000000,2.000000,1.000000\n1.000000,20.000000,593.882812,115.615814,49.606350,21.429480,2.088240,1.000000,2.000000,1.000000\n1.000000,21.000000,613.096008,195.835327,61.199314,17.992085,0.558174,1.000000,2.000000,1.000000\n1.000000,22.000000,624.838440,174.732391,62.312767,20.226809,0.564138,1.000000,2.000000,1.000000\n1.000000,23.000000,866.652832,489.857544,55.008179,18.015055,0.053095,1.000000,2.000000,1.000000\n1.000000,24.000000,865.423523,563.366150,59.109718,19.026541,0.085682,1.000000,2.000000,1.000000\n1.000000,25.000000,665.985046,99.622429,60.683601,20.181610,0.528823,1.000000,2.000000,1.000000\n1.000000,26.000000,861.266052,586.229065,59.008301,17.013884,0.051844,1.000000,2.000000,1.000000\n1.000000,27.000000,801.207703,511.093353,38.354958,12.996212,0.061228,1.000000,2.000000,1.000000\n1.000000,28.000000,804.404419,491.190979,42.999825,17.998850,0.034907,1.000000,2.000000,1.000000\n1.000000,29.000000,802.815063,422.095276,55.835251,21.984024,0.071271,1.000000,2.000000,1.000000\n1.000000,30.000000,803.430298,399.609009,53.009628,18.015537,0.053781,1.000000,2.000000,1.000000\n1.000000,31.000000,804.455383,375.122375,61.385941,22.999037,0.051255,1.000000,2.000000,1.000000\n1.000000,32.000000,806.752258,351.665863,59.027988,20.025839,0.084938,1.000000,2.000000,1.000000\n1.000000,33.000000,805.130249,327.117676,61.351162,20.995348,0.051306,1.000000,2.000000,1.000000\n1.000000,34.000000,804.917725,304.595123,50.130421,16.030073,0.094819,1.000000,2.000000,1.000000\n1.000000,35.000000,807.359741,281.688690,59.033733,21.053823,0.068807,1.000000,2.000000,1.000000\n1.000000,36.000000,803.058472,257.503601,70.569466,18.991566,0.063454,1.000000,2.000000,1.000000\n1.000000,37.000000,809.305359,236.208694,57.377602,20.996964,0.052474,1.000000,2.000000,1.000000\n1.000000,38.000000,811.607849,213.274521,53.998604,18.002941,0.034907,1.000000,2.000000,1.000000\n1.000000,39.000000,811.950317,190.273804,62.170509,21.024971,0.083277,1.000000,2.000000,1.000000\n1.000000,40.000000,818.934875,170.509918,50.009834,17.016006,0.054893,1.000000,2.000000,1.000000\n1.000000,41.000000,832.460693,113.451881,35.012604,10.023527,0.063482,1.000000,2.000000,1.000000\n1.000000,42.000000,826.548767,129.245285,44.725975,14.986153,0.080280,1.000000,2.000000,1.000000\n1.000000,43.000000,819.801941,150.521072,57.999378,17.999857,0.034909,1.000000,2.000000,1.000000\n1.000000,44.000000,862.294312,624.292725,71.237343,20.025291,0.091168,1.000000,2.000000,1.000000\n1.000000,45.000000,652.016663,127.152687,59.479515,17.442734,0.498554,1.000000,2.000000,1.000000\n1.000000,46.000000,676.211304,78.967316,54.838905,20.142973,0.507034,1.000000,2.000000,1.000000\n1.000000,47.000000,417.448792,29.454943,49.429192,20.878641,0.324377,1.000000,2.000000,1.000000\n1.000000,48.000000,235.031128,148.112396,48.533703,15.796028,0.310346,1.000000,2.000000,1.000000\n1.000000,49.000000,238.614426,125.680206,58.660732,19.416946,0.242437,1.000000,2.000000,1.000000\n1.000000,50.000000,244.823608,96.922417,47.361618,12.606480,0.274636,1.000000,2.000000,1.000000\n1.000000,51.000000,252.052338,76.162415,57.559616,17.205652,0.275441,1.000000,2.000000,1.000000\n1.000000,52.000000,265.185669,29.592533,52.476032,16.744930,0.289277,1.000000,2.000000,1.000000\n1.000000,53.000000,274.099487,4.288618,52.224316,17.918573,0.289272,1.000000,2.000000,1.000000\n1.000000,54.000000,427.656921,5.608071,52.784229,19.934607,0.284496,1.000000,2.000000,1.000000\n1.000000,55.000000,411.134674,53.615273,47.803780,20.603170,0.310322,1.000000,2.000000,1.000000\n1.000000,56.000000,705.373413,28.153364,46.529774,17.474541,0.527357,1.000000,2.000000,1.000000\n1.000000,57.000000,398.878967,97.439568,49.999153,18.002100,0.318715,1.000000,2.000000,1.000000\n1.000000,58.000000,300.867279,196.939270,68.848923,13.593743,0.301157,1.000000,2.000000,1.000000\n1.000000,59.000000,206.814987,168.139023,34.386234,11.382750,0.243929,1.000000,2.000000,1.000000\n1.000000,60.000000,245.201935,180.421188,46.173180,14.554766,0.342988,1.000000,2.000000,1.000000\n1.000000,61.000000,352.968750,209.265045,33.330040,11.401583,0.309004,1.000000,2.000000,1.000000\n1.000000,62.000000,387.632629,219.481461,36.283478,13.139232,0.232330,1.000000,2.000000,1.000000\n1.000000,63.000000,429.887146,212.952652,51.185623,14.316456,0.232271,1.000000,2.000000,1.000000\n1.000000,64.000000,433.136017,191.553085,39.629276,14.783235,0.273487,1.000000,2.000000,1.000000\n1.000000,65.000000,441.671112,172.511948,44.125767,15.295462,0.232276,1.000000,2.000000,1.000000\n1.000000,66.000000,446.988983,153.012497,44.645840,15.517907,0.263435,1.000000,2.000000,1.000000\n1.000000,67.000000,453.799622,134.148636,36.380875,16.493107,0.279795,1.000000,2.000000,1.000000\n1.000000,68.000000,455.485413,110.283691,34.381474,14.557508,0.301132,1.000000,2.000000,1.000000\n1.000000,69.000000,466.607361,92.660118,43.304150,15.801174,0.319627,1.000000,2.000000,1.000000\n1.000000,70.000000,483.428436,47.384827,53.366344,15.738785,0.261849,1.000000,2.000000,1.000000\n1.000000,71.000000,488.003632,24.365341,52.435696,20.863659,0.289277,1.000000,2.000000,1.000000\n1.000000,72.000000,364.747070,187.164322,69.501144,14.536549,0.255180,1.000000,2.000000,1.000000\n1.000000,73.000000,371.511902,165.385468,65.125198,15.771894,0.287441,1.000000,2.000000,1.000000\n1.000000,74.000000,375.829895,142.022675,71.466545,19.198650,0.297349,1.000000,2.000000,1.000000\n1.000000,75.000000,866.855103,326.774261,46.009975,15.998276,0.056652,1.000000,2.000000,1.000000\n1.000000,76.000000,1005.303162,495.043732,36.468620,19.015789,0.053781,1.000000,2.000000,1.000000\n1.000000,77.000000,1009.720825,431.140411,27.612692,16.969957,0.059304,1.000000,2.000000,1.000000\n1.000000,78.000000,1015.447693,243.405807,15.533021,12.000253,0.034907,1.000000,2.000000,1.000000\n1.000000,79.000000,1007.220825,515.284302,32.066475,14.001139,0.034908,1.000000,2.000000,1.000000\n1.000000,80.000000,1008.353027,535.967957,29.424822,14.021163,0.009258,1.000000,2.000000,1.000000\n1.000000,81.000000,1010.520813,556.241943,26.473803,13.956755,0.099365,1.000000,2.000000,1.000000\n1.000000,82.000000,1005.319885,575.624634,36.196720,14.018911,0.055680,1.000000,2.000000,1.000000\n1.000000,83.000000,992.739197,630.848999,61.188980,19.999735,0.034904,1.000000,2.000000,1.000000\n1.000000,84.000000,1001.344482,595.551270,44.241371,15.996045,0.054145,1.000000,2.000000,1.000000\n1.000000,85.000000,836.646790,327.217285,601.306213,131.034607,1.627328,1.000000,8.000000,1.000000\n1.000000,86.000000,676.537537,484.615936,288.578491,79.649887,1.110809,1.000000,8.000000,1.000000\n1.000000,87.000000,665.061218,89.352242,255.237488,78.617355,2.109764,1.000000,8.000000,1.000000\n1.000000,88.000000,431.307495,102.688629,215.129593,124.403244,1.845045,1.000000,8.000000,1.000000\n1.000000,89.000000,248.513901,73.329231,171.285309,67.649216,1.844190,1.000000,8.000000,1.000000\n1.000000,90.000000,627.639038,361.046204,52.322239,23.703577,2.712759,1.000000,2.000000,1.000000\n1.000000,91.000000,626.048523,383.126556,32.694611,12.477627,2.767590,1.000000,2.000000,1.000000\n1.000000,92.000000,630.088257,400.215393,35.848740,13.389809,2.775257,1.000000,2.000000,1.000000\n1.000000,93.000000,638.931152,415.871307,34.665310,12.974287,2.845398,1.000000,2.000000,1.000000\n1.000000,94.000000,646.787659,431.213074,34.884701,14.760889,2.700052,1.000000,2.000000,1.000000\n1.000000,95.000000,654.840454,447.445343,30.184288,13.376986,2.789641,1.000000,2.000000,1.000000\n1.000000,96.000000,661.963379,462.404327,35.340965,14.800033,2.738110,1.000000,2.000000,1.000000\n1.000000,97.000000,674.022705,494.760590,31.294300,16.551620,2.739831,1.000000,2.000000,1.000000\n1.000000,98.000000,683.593628,510.313995,31.383192,16.156836,2.796052,1.000000,2.000000,1.000000\n1.000000,99.000000,689.280457,525.834290,32.310783,14.299404,2.796016,1.000000,2.000000,1.000000\n1.000000,100.000000,697.670898,542.448792,34.540127,13.926667,2.790599,1.000000,2.000000,1.000000\n1.000000,101.000000,704.003235,558.229248,28.381645,12.513310,2.728985,1.000000,2.000000,1.000000\n1.000000,102.000000,710.940063,574.480225,34.434410,16.100962,2.712797,1.000000,2.000000,1.000000\n1.000000,103.000000,719.249939,591.583130,38.012333,13.863952,2.712782,1.000000,2.000000,1.000000\n1.000000,104.000000,664.939148,549.706604,35.340973,12.507252,1.167379,1.000000,2.000000,1.000000\n1.000000,105.000000,641.119202,505.102509,34.882233,13.415600,1.142056,1.000000,2.000000,1.000000\n1.000000,106.000000,619.582214,454.220001,33.362797,12.031509,1.086605,1.000000,2.000000,1.000000\n1.000000,107.000000,580.324463,389.308319,25.940361,11.627506,1.141901,1.000000,2.000000,1.000000\n1.000000,108.000000,198.465775,106.754128,25.709761,13.340678,1.841234,1.000000,2.000000,1.000000\n1.000000,109.000000,207.066101,77.792564,26.563457,12.016853,1.927642,1.000000,2.000000,1.000000\n1.000000,110.000000,214.964661,49.351395,31.624640,12.649006,1.927367,1.000000,2.000000,1.000000\n2.000000,1.000000,862.696106,535.252380,60.007618,19.998066,0.041606,1.000000,2.000000,1.000000\n2.000000,2.000000,865.824585,463.306824,54.999031,19.000330,0.024934,1.000000,2.000000,1.000000\n2.000000,3.000000,862.446960,438.688904,58.077888,18.974991,0.076599,1.000000,2.000000,1.000000\n2.000000,4.000000,865.570435,413.284027,55.346138,19.024071,0.061259,1.000000,2.000000,1.000000\n2.000000,5.000000,867.109680,391.315552,59.076122,20.025681,0.075760,1.000000,2.000000,1.000000\n2.000000,6.000000,871.764465,345.416595,55.370880,19.997446,0.043122,1.000000,2.000000,1.000000\n2.000000,7.000000,871.327881,302.391998,53.084106,18.027670,0.081503,1.000000,2.000000,1.000000\n2.000000,8.000000,874.229736,280.965576,53.008560,15.016779,0.043808,1.000000,2.000000,1.000000\n2.000000,9.000000,875.361694,258.837830,53.152447,15.960182,0.096409,1.000000,2.000000,1.000000\n2.000000,10.000000,876.496704,237.003464,54.084866,17.028671,0.080398,1.000000,2.000000,1.000000\n2.000000,11.000000,879.302490,215.558258,57.036057,17.024052,0.060022,1.000000,2.000000,1.000000\n2.000000,12.000000,875.296631,192.948868,59.033718,15.992846,0.058834,1.000000,2.000000,1.000000\n2.000000,13.000000,873.579102,172.409424,48.344170,15.997562,0.045730,1.000000,2.000000,1.000000\n2.000000,14.000000,881.600159,151.602737,60.709827,18.014029,0.041605,1.000000,2.000000,1.000000\n2.000000,15.000000,877.988586,130.003448,57.008713,16.999874,0.042483,1.000000,2.000000,1.000000\n2.000000,16.000000,885.171936,108.678680,56.000538,16.999325,0.024933,1.000000,2.000000,1.000000\n2.000000,17.000000,884.674561,87.610062,63.072933,21.926065,0.072489,1.000000,2.000000,1.000000\n2.000000,18.000000,882.558899,66.105576,55.010113,19.015137,0.043069,1.000000,2.000000,1.000000\n2.000000,19.000000,882.717590,46.597183,55.101852,18.027334,0.079398,1.000000,2.000000,1.000000\n2.000000,20.000000,589.925476,114.818909,49.606312,21.429510,2.078266,1.000000,2.000000,1.000000\n2.000000,21.000000,609.937744,194.842773,61.199276,17.992050,0.548200,1.000000,2.000000,1.000000\n2.000000,22.000000,621.469177,173.623779,62.312798,20.226782,0.554164,1.000000,2.000000,1.000000\n2.000000,23.000000,866.414307,486.321625,55.008167,18.015041,0.043122,1.000000,2.000000,1.000000\n2.000000,24.000000,865.918152,559.838867,59.109749,19.026541,0.075708,1.000000,2.000000,1.000000\n2.000000,25.000000,661.864685,98.107216,60.683636,20.181641,0.518850,1.000000,2.000000,1.000000\n2.000000,26.000000,861.989014,582.742004,59.008316,17.013865,0.041871,1.000000,2.000000,1.000000\n2.000000,27.000000,801.184326,508.209106,38.354996,12.996180,0.051255,1.000000,2.000000,1.000000\n2.000000,28.000000,804.182251,488.275818,42.999825,17.998850,0.024933,1.000000,2.000000,1.000000\n2.000000,29.000000,801.904053,419.199463,55.835209,21.984024,0.061298,1.000000,2.000000,1.000000\n2.000000,30.000000,802.294739,396.708069,53.009659,18.015574,0.043807,1.000000,2.000000,1.000000\n2.000000,31.000000,803.075806,372.212494,61.385921,22.999004,0.041282,1.000000,2.000000,1.000000\n2.000000,32.000000,805.012634,348.248291,59.035671,20.023193,0.058780,1.000000,2.000000,1.000000\n2.000000,33.000000,803.271729,324.203430,61.351154,20.995340,0.041332,1.000000,2.000000,1.000000\n2.000000,34.000000,802.834717,301.684174,50.130417,16.030073,0.084845,1.000000,2.000000,1.000000\n2.000000,35.000000,805.048035,278.754456,59.033783,21.053818,0.058834,1.000000,2.000000,1.000000\n2.000000,36.000000,800.505859,254.613464,70.569466,18.991571,0.053481,1.000000,2.000000,1.000000\n2.000000,37.000000,806.540100,233.257355,57.377647,20.996954,0.042501,1.000000,2.000000,1.000000\n2.000000,38.000000,808.613708,210.301392,53.998589,18.002939,0.024935,1.000000,2.000000,1.000000\n2.000000,39.000000,808.726807,187.298325,62.170498,21.024977,0.073303,1.000000,2.000000,1.000000\n2.000000,40.000000,815.513855,167.465790,50.009857,17.016005,0.044919,1.000000,2.000000,1.000000\n2.000000,41.000000,828.470032,110.275703,35.012573,10.023529,0.053508,1.000000,2.000000,1.000000\n2.000000,42.000000,822.715820,126.127296,44.726063,14.986153,0.070307,1.000000,2.000000,1.000000\n2.000000,43.000000,816.181641,147.469360,57.999340,17.999855,0.024934,1.000000,2.000000,1.000000\n2.000000,44.000000,863.396851,620.793701,71.237358,20.025293,0.081196,1.000000,2.000000,1.000000\n2.000000,45.000000,648.171570,125.775436,59.479538,17.442738,0.488581,1.000000,2.000000,1.000000\n2.000000,46.000000,671.884460,77.351143,54.838902,20.143000,0.497061,1.000000,2.000000,1.000000\n2.000000,47.000000,412.641022,30.421925,49.429218,20.878647,0.314404,1.000000,2.000000,1.000000\n2.000000,48.000000,231.415787,150.892731,48.533730,15.796033,0.300373,1.000000,2.000000,1.000000\n2.000000,49.000000,234.775223,128.425858,58.660717,19.416960,0.232466,1.000000,2.000000,1.000000\n2.000000,50.000000,240.697266,99.607643,47.361607,12.606476,0.264662,1.000000,2.000000,1.000000\n2.000000,51.000000,247.718613,78.776596,57.559593,17.205652,0.265468,1.000000,2.000000,1.000000\n2.000000,52.000000,260.386780,32.078041,52.476028,16.744926,0.279304,1.000000,2.000000,1.000000\n2.000000,53.000000,269.067322,6.618606,52.224308,18.059811,0.279299,1.000000,2.000000,1.000000\n2.000000,54.000000,422.618378,6.447395,52.784248,19.990767,0.274522,1.000000,2.000000,1.000000\n2.000000,55.000000,406.568146,54.644012,47.803772,20.603170,0.300349,1.000000,2.000000,1.000000\n2.000000,56.000000,700.538330,26.248917,46.529804,17.474569,0.517383,1.000000,2.000000,1.000000\n2.000000,57.000000,394.750092,98.588356,49.999161,18.002096,0.308741,1.000000,2.000000,1.000000\n2.000000,58.000000,297.736053,199.057114,68.849136,13.593709,0.291083,1.000000,2.000000,1.000000\n2.000000,59.000000,203.400787,171.199783,34.386242,11.382755,0.233955,1.000000,2.000000,1.000000\n2.000000,60.000000,242.318985,182.512497,46.152660,14.561249,0.303194,1.000000,2.000000,1.000000\n2.000000,61.000000,349.957458,210.866104,33.330044,11.401593,0.299031,1.000000,2.000000,1.000000\n2.000000,62.000000,384.721497,220.736328,36.283478,13.139215,0.222357,1.000000,2.000000,1.000000\n2.000000,63.000000,426.908752,213.786438,51.185593,14.316444,0.222297,1.000000,2.000000,1.000000\n2.000000,64.000000,429.944122,192.355530,39.629250,14.783240,0.263513,1.000000,2.000000,1.000000\n2.000000,65.000000,438.288910,173.230194,44.125748,15.295472,0.222304,1.000000,2.000000,1.000000\n2.000000,66.000000,443.412018,153.678726,44.645870,15.517918,0.253462,1.000000,2.000000,1.000000\n2.000000,67.000000,449.608765,135.252121,36.401230,16.483875,0.303268,1.000000,2.000000,1.000000\n2.000000,68.000000,451.481873,110.867302,34.381454,14.557505,0.291159,1.000000,2.000000,1.000000\n2.000000,69.000000,462.427460,93.133682,43.304173,15.801174,0.309654,1.000000,2.000000,1.000000\n2.000000,70.000000,478.796204,47.692863,53.366341,15.738788,0.251877,1.000000,2.000000,1.000000\n2.000000,71.000000,483.141632,24.628901,52.435703,20.863644,0.279303,1.000000,2.000000,1.000000\n2.000000,72.000000,361.514771,188.649048,69.501144,14.536556,0.245207,1.000000,2.000000,1.000000\n2.000000,73.000000,368.062042,166.803818,65.125175,15.771891,0.277468,1.000000,2.000000,1.000000\n2.000000,74.000000,372.146820,143.399109,71.466560,19.198658,0.287376,1.000000,2.000000,1.000000\n2.000000,75.000000,864.803955,323.736359,45.999081,16.002045,0.024936,1.000000,2.000000,1.000000\n2.000000,76.000000,1005.154602,490.126770,36.558750,19.015783,0.043807,1.000000,2.000000,1.000000\n2.000000,77.000000,1009.259216,426.198853,28.352789,16.969967,0.049330,1.000000,2.000000,1.000000\n2.000000,78.000000,1014.064758,238.431183,18.175510,12.000236,0.024933,1.000000,2.000000,1.000000\n2.000000,79.000000,1007.187622,510.344238,31.983768,14.001167,0.024934,1.000000,2.000000,1.000000\n2.000000,80.000000,1008.429565,531.016785,29.148924,14.021153,3.140875,1.000000,2.000000,1.000000\n2.000000,81.000000,1010.688110,551.245056,25.973520,13.955774,0.089391,1.000000,2.000000,1.000000\n2.000000,82.000000,1005.585266,570.685791,35.506992,14.018929,0.045706,1.000000,2.000000,1.000000\n2.000000,83.000000,993.270630,626.032898,59.928616,19.999746,0.024933,1.000000,2.000000,1.000000\n2.000000,84.000000,1001.703796,590.646973,43.341103,15.996031,0.044172,1.000000,2.000000,1.000000\n2.000000,85.000000,834.787720,323.988708,601.306213,131.034561,1.617355,1.000000,8.000000,1.000000\n2.000000,86.000000,676.256287,482.976349,288.578461,79.649918,1.100836,1.000000,8.000000,1.000000\n2.000000,87.000000,660.116028,89.095322,252.352402,78.604683,2.099790,1.000000,8.000000,1.000000\n2.000000,88.000000,427.229431,103.513733,215.129593,124.403229,1.835071,1.000000,8.000000,1.000000\n2.000000,89.000000,244.434952,74.929924,173.458099,67.649200,1.834217,1.000000,8.000000,1.000000\n2.000000,90.000000,626.127808,359.900452,52.322212,23.703575,2.702786,1.000000,2.000000,1.000000\n2.000000,91.000000,624.757568,381.995575,32.694592,12.477595,2.757616,1.000000,2.000000,1.000000\n2.000000,92.000000,628.967529,399.043213,35.848698,13.389799,2.765284,1.000000,2.000000,1.000000\n2.000000,93.000000,637.966125,414.610168,34.665295,12.974289,2.835425,1.000000,2.000000,1.000000\n2.000000,94.000000,645.975220,429.872742,34.884682,14.760861,2.690078,1.000000,2.000000,1.000000\n2.000000,95.000000,654.189514,446.023987,30.184317,13.376964,2.779669,1.000000,2.000000,1.000000\n2.000000,96.000000,661.461243,460.911194,35.340942,14.800046,2.728137,1.000000,2.000000,1.000000\n2.000000,97.000000,674.214233,493.438049,31.305651,16.545555,2.702849,1.000000,2.000000,1.000000\n2.000000,98.000000,683.568237,508.602753,31.383213,16.156849,2.786077,1.000000,2.000000,1.000000\n2.000000,99.000000,689.409607,524.065613,32.310791,14.299380,2.786042,1.000000,2.000000,1.000000\n2.000000,100.000000,697.965393,540.595520,34.540092,13.926679,2.780623,1.000000,2.000000,1.000000\n2.000000,101.000000,704.454773,556.312134,28.381662,12.513248,2.719013,1.000000,2.000000,1.000000\n2.000000,102.000000,711.553345,572.493103,34.434444,16.100979,2.702824,1.000000,2.000000,1.000000\n2.000000,103.000000,720.033325,589.512268,38.012257,13.863986,2.702808,1.000000,2.000000,1.000000\n2.000000,104.000000,665.307556,548.179504,35.340942,12.507201,1.157405,1.000000,2.000000,1.000000\n2.000000,105.000000,641.209045,503.642670,34.885105,13.414519,1.119255,1.000000,2.000000,1.000000\n2.000000,106.000000,619.000610,453.149963,33.362793,12.031473,1.076631,1.000000,2.000000,1.000000\n2.000000,107.000000,579.097412,388.632935,25.940327,11.627520,1.131931,1.000000,2.000000,1.000000\n2.000000,108.000000,194.533997,109.985901,25.708771,13.341186,1.822483,1.000000,2.000000,1.000000\n2.000000,109.000000,202.750824,80.855301,26.563471,12.016870,1.917669,1.000000,2.000000,1.000000\n2.000000,110.000000,210.365936,52.337303,31.624647,12.649018,1.917439,1.000000,2.000000,1.000000\n3.000000,1.000000,862.910400,531.753723,60.007626,19.997995,0.031632,1.000000,2.000000,1.000000\n3.000000,2.000000,865.321533,459.780548,54.999077,19.000341,0.014960,1.000000,2.000000,1.000000\n3.000000,3.000000,861.698303,435.197479,58.077892,18.974972,0.066626,1.000000,2.000000,1.000000\n3.000000,4.000000,864.568359,409.762726,55.346134,19.024055,0.051285,1.000000,2.000000,1.000000\n3.000000,5.000000,865.899109,387.753998,59.076126,20.025721,0.064885,1.000000,2.000000,1.000000\n3.000000,6.000000,870.085205,341.836945,55.370911,19.997465,0.033148,1.000000,2.000000,1.000000\n3.000000,7.000000,869.219482,298.818817,53.084110,18.027660,0.071530,1.000000,2.000000,1.000000\n3.000000,8.000000,871.907532,277.364502,53.008549,15.016768,0.033835,1.000000,2.000000,1.000000\n3.000000,9.000000,872.818848,255.226700,53.152512,15.960183,0.086440,1.000000,2.000000,1.000000\n3.000000,10.000000,873.736023,233.381958,54.084820,17.028679,0.070425,1.000000,2.000000,1.000000\n3.000000,11.000000,876.327881,211.909821,57.036079,17.024057,0.050048,1.000000,2.000000,1.000000\n3.000000,12.000000,872.096619,189.341522,59.033714,15.992841,0.048860,1.000000,2.000000,1.000000\n3.000000,13.000000,870.174255,168.820221,48.344135,15.997555,0.035757,1.000000,2.000000,1.000000\n3.000000,14.000000,877.987427,147.934586,60.709850,18.014019,0.031632,1.000000,2.000000,1.000000\n3.000000,15.000000,874.317200,125.877045,56.999920,17.002491,0.014959,1.000000,2.000000,1.000000\n3.000000,16.000000,881.130981,104.977089,56.000542,16.999331,0.014962,1.000000,2.000000,1.000000\n3.000000,17.000000,880.423584,83.914413,63.072914,21.926058,0.062516,1.000000,2.000000,1.000000\n3.000000,18.000000,878.093567,62.432117,55.010174,19.015141,0.033095,1.000000,2.000000,1.000000\n3.000000,19.000000,878.057617,42.923111,55.101864,18.027338,0.069425,1.000000,2.000000,1.000000\n3.000000,20.000000,585.960449,114.061516,49.606331,21.429544,2.068292,1.000000,2.000000,1.000000\n3.000000,21.000000,606.769897,193.881821,61.199268,17.992071,0.538227,1.000000,2.000000,1.000000\n3.000000,22.000000,618.089050,172.548859,62.312752,20.226755,0.544190,1.000000,2.000000,1.000000\n3.000000,23.000000,866.140503,482.788208,55.008190,18.015079,0.033148,1.000000,2.000000,1.000000\n3.000000,24.000000,866.377625,556.306763,59.109737,19.026527,0.065735,1.000000,2.000000,1.000000\n3.000000,25.000000,657.729492,96.633202,60.683620,20.181616,0.508876,1.000000,2.000000,1.000000\n3.000000,26.000000,862.677124,579.248047,59.008297,17.013889,0.031899,1.000000,2.000000,1.000000\n3.000000,27.000000,801.132141,505.325195,38.354931,12.996221,0.041282,1.000000,2.000000,1.000000\n3.000000,28.000000,803.931274,485.363098,42.999863,17.998840,0.014960,1.000000,2.000000,1.000000\n3.000000,29.000000,800.964111,416.312805,55.835201,21.984045,0.051324,1.000000,2.000000,1.000000\n3.000000,30.000000,801.130554,393.818634,53.009647,18.015566,0.033834,1.000000,2.000000,1.000000\n3.000000,31.000000,801.667236,369.316437,61.385891,22.999010,0.031309,1.000000,2.000000,1.000000\n3.000000,32.000000,803.495789,345.818939,59.027958,20.025831,0.064995,1.000000,2.000000,1.000000\n3.000000,33.000000,801.384277,321.307831,61.351173,20.995346,0.031359,1.000000,2.000000,1.000000\n3.000000,34.000000,800.722656,298.794067,50.130383,16.030085,0.074872,1.000000,2.000000,1.000000\n3.000000,35.000000,802.707153,275.843445,59.033714,21.053814,0.048861,1.000000,2.000000,1.000000\n3.000000,36.000000,797.924561,251.748947,70.569427,18.991575,0.043508,1.000000,2.000000,1.000000\n3.000000,37.000000,803.745361,230.333710,57.377636,20.996956,0.032528,1.000000,2.000000,1.000000\n3.000000,38.000000,805.590088,207.358170,53.998627,18.002928,0.014960,1.000000,2.000000,1.000000\n3.000000,39.000000,805.473633,184.355194,62.170483,21.024973,0.063330,1.000000,2.000000,1.000000\n3.000000,40.000000,812.062683,164.455948,50.009903,17.016008,0.034946,1.000000,2.000000,1.000000\n3.000000,41.000000,824.447876,107.139488,35.012604,10.023522,0.043535,1.000000,2.000000,1.000000\n3.000000,42.000000,818.851990,123.047668,44.726025,14.986155,0.060334,1.000000,2.000000,1.000000\n3.000000,43.000000,812.531006,144.453964,57.999325,17.999866,0.014957,1.000000,2.000000,1.000000\n3.000000,44.000000,864.464294,617.283691,71.237358,20.025259,0.071222,1.000000,2.000000,1.000000\n3.000000,45.000000,644.312866,124.436554,59.479553,17.442760,0.478608,1.000000,2.000000,1.000000\n3.000000,46.000000,667.541748,75.778214,54.838928,20.142981,0.487087,1.000000,2.000000,1.000000\n3.000000,47.000000,407.843079,31.436790,49.429199,20.878649,0.304431,1.000000,2.000000,1.000000\n3.000000,48.000000,227.828400,153.709000,48.533718,15.796029,0.290400,1.000000,2.000000,1.000000\n3.000000,49.000000,230.963562,131.209793,58.660728,19.416965,0.222491,1.000000,2.000000,1.000000\n3.000000,50.000000,236.597916,102.333893,47.361622,12.606482,0.254689,1.000000,2.000000,1.000000\n3.000000,51.000000,243.411163,81.433853,57.559589,17.205647,0.255494,1.000000,2.000000,1.000000\n3.000000,52.000000,255.612991,34.611282,52.476032,16.744932,0.269330,1.000000,2.000000,1.000000\n3.000000,53.000000,264.059662,8.992285,52.224335,18.213871,0.269325,1.000000,2.000000,1.000000\n3.000000,54.000000,417.589294,7.333008,52.784260,20.054886,0.264549,1.000000,2.000000,1.000000\n3.000000,55.000000,402.012085,55.718243,47.803795,20.603163,0.290376,1.000000,2.000000,1.000000\n3.000000,56.000000,695.684509,24.392773,46.529770,17.474550,0.507410,1.000000,2.000000,1.000000\n3.000000,57.000000,390.632935,99.778275,49.999153,18.002090,0.298768,1.000000,2.000000,1.000000\n3.000000,58.000000,294.625732,201.209579,68.849129,13.593697,0.281110,1.000000,2.000000,1.000000\n3.000000,59.000000,200.017273,174.294418,34.386234,11.382749,0.223982,1.000000,2.000000,1.000000\n3.000000,60.000000,238.641525,185.808533,46.173187,14.554789,0.323042,1.000000,2.000000,1.000000\n3.000000,61.000000,346.962280,212.497162,33.330048,11.401592,0.289058,1.000000,2.000000,1.000000\n3.000000,62.000000,381.822998,222.020172,36.283470,13.139223,0.212383,1.000000,2.000000,1.000000\n3.000000,63.000000,423.938843,214.649887,51.185631,14.316458,0.212324,1.000000,2.000000,1.000000\n3.000000,64.000000,426.760345,193.189804,39.629242,14.783244,0.253540,1.000000,2.000000,1.000000\n3.000000,65.000000,435.289490,173.368286,44.147141,15.288073,0.243444,1.000000,2.000000,1.000000\n3.000000,66.000000,439.841827,154.380585,44.645851,15.517899,0.243489,1.000000,2.000000,1.000000\n3.000000,67.000000,445.854523,135.893097,36.401222,16.483889,0.293294,1.000000,2.000000,1.000000\n3.000000,68.000000,447.484314,111.490799,34.381424,14.557503,0.281186,1.000000,2.000000,1.000000\n3.000000,69.000000,458.252533,93.648903,43.304169,15.801168,0.299680,1.000000,2.000000,1.000000\n3.000000,70.000000,474.167206,48.047150,53.366356,15.738792,0.241902,1.000000,2.000000,1.000000\n3.000000,71.000000,478.282410,24.940962,52.435715,20.863653,0.269330,1.000000,2.000000,1.000000\n3.000000,72.000000,358.297455,190.165939,69.501122,14.536545,0.235234,1.000000,2.000000,1.000000\n3.000000,73.000000,364.626526,168.256500,65.125183,15.771893,0.267494,1.000000,2.000000,1.000000\n3.000000,74.000000,368.477692,144.812241,71.466568,19.198656,0.277402,1.000000,2.000000,1.000000\n3.000000,75.000000,863.090271,319.733459,46.009995,15.998281,0.036706,1.000000,2.000000,1.000000\n3.000000,76.000000,1004.982239,485.211914,36.699715,19.015800,0.033834,1.000000,2.000000,1.000000\n3.000000,77.000000,1008.773621,421.259399,29.143066,16.969959,0.039358,1.000000,2.000000,1.000000\n3.000000,78.000000,1012.657166,233.457733,20.867447,12.000244,0.014960,1.000000,2.000000,1.000000\n3.000000,79.000000,1007.130615,505.405518,31.951918,14.001187,0.014960,1.000000,2.000000,1.000000\n3.000000,80.000000,1008.472961,526.217163,29.054077,14.013489,-0.000000,1.000000,2.000000,1.000000\n3.000000,81.000000,1010.831238,546.251404,25.525181,13.954838,0.079417,1.000000,2.000000,1.000000\n3.000000,82.000000,1005.827148,565.748779,34.868816,14.018875,0.035734,1.000000,2.000000,1.000000\n3.000000,83.000000,993.779297,621.218445,58.719238,19.999794,0.014960,1.000000,2.000000,1.000000\n3.000000,84.000000,1002.039673,585.744507,42.492378,15.996084,0.034199,1.000000,2.000000,1.000000\n3.000000,85.000000,832.896606,320.778870,601.306152,131.034546,1.607381,1.000000,8.000000,1.000000\n3.000000,86.000000,675.958618,481.339691,288.578552,79.649857,1.090863,1.000000,8.000000,1.000000\n3.000000,87.000000,655.203491,88.854752,249.559464,78.592552,2.089817,1.000000,8.000000,1.000000\n3.000000,88.000000,423.159729,104.379486,215.129623,124.403252,1.825098,1.000000,8.000000,1.000000\n3.000000,89.000000,240.366867,76.548607,175.671829,67.649200,1.824244,1.000000,8.000000,1.000000\n3.000000,90.000000,624.605286,358.769867,52.322235,23.703564,2.692812,1.000000,2.000000,1.000000\n3.000000,91.000000,623.455444,380.877502,32.694580,12.477631,2.747643,1.000000,2.000000,1.000000\n3.000000,92.000000,627.835205,397.882324,35.848679,13.389812,2.755310,1.000000,2.000000,1.000000\n3.000000,93.000000,636.988586,413.358734,34.665302,12.974260,2.825451,1.000000,2.000000,1.000000\n3.000000,94.000000,645.149536,428.540771,34.884651,14.760887,2.680105,1.000000,2.000000,1.000000\n3.000000,95.000000,653.524475,444.609131,30.184315,13.376965,2.769695,1.000000,2.000000,1.000000\n3.000000,96.000000,660.944336,459.423157,35.340981,14.800048,2.718163,1.000000,2.000000,1.000000\n3.000000,97.000000,673.646667,491.532410,31.294241,16.551603,2.719884,1.000000,2.000000,1.000000\n3.000000,98.000000,683.681885,507.030762,31.385431,16.155714,2.764213,1.000000,2.000000,1.000000\n3.000000,99.000000,689.521118,522.295654,32.310818,14.299445,2.776070,1.000000,2.000000,1.000000\n3.000000,100.000000,698.241333,538.739441,34.540119,13.926645,2.770651,1.000000,2.000000,1.000000\n3.000000,101.000000,704.887085,554.390442,28.381605,12.513287,2.709038,1.000000,2.000000,1.000000\n3.000000,102.000000,712.146729,570.499939,34.434437,16.100935,2.692850,1.000000,2.000000,1.000000\n3.000000,103.000000,720.796082,587.433716,38.012268,13.863950,2.692832,1.000000,2.000000,1.000000\n3.000000,104.000000,665.660767,546.648682,35.340996,12.507224,1.147433,1.000000,2.000000,1.000000\n3.000000,105.000000,640.955933,502.528595,34.882271,13.415616,1.122110,1.000000,2.000000,1.000000\n3.000000,106.000000,618.408386,452.085693,33.362808,12.031487,1.066657,1.000000,2.000000,1.000000\n3.000000,107.000000,577.863831,387.969910,25.940361,11.627544,1.121954,1.000000,2.000000,1.000000\n3.000000,108.000000,190.445419,113.088287,25.709766,13.340677,1.821287,1.000000,2.000000,1.000000\n3.000000,109.000000,198.466324,83.960930,26.563454,12.016858,1.907695,1.000000,2.000000,1.000000\n3.000000,110.000000,205.796082,55.367889,31.624634,12.649022,1.907419,1.000000,2.000000,1.000000\n4.000000,1.000000,863.090149,528.253052,60.007603,19.998016,0.021659,1.000000,2.000000,1.000000\n4.000000,2.000000,864.783203,456.259430,54.999031,19.000341,0.004987,1.000000,2.000000,1.000000\n4.000000,3.000000,860.914856,431.713684,58.077862,18.974974,0.056652,1.000000,2.000000,1.000000\n4.000000,4.000000,863.531311,406.251617,55.346107,19.024071,0.041313,1.000000,2.000000,1.000000\n4.000000,5.000000,864.631836,384.256775,59.076122,20.025723,0.055813,1.000000,2.000000,1.000000\n4.000000,6.000000,868.370361,338.274139,55.370914,19.997459,0.023175,1.000000,2.000000,1.000000\n4.000000,7.000000,867.075684,295.266754,53.084114,18.027641,0.061556,1.000000,2.000000,1.000000\n4.000000,8.000000,869.549683,273.786804,53.008556,15.016782,0.023861,1.000000,2.000000,1.000000\n4.000000,9.000000,870.240051,251.640945,53.152523,15.960174,0.076467,1.000000,2.000000,1.000000\n4.000000,10.000000,870.939392,229.788177,54.084824,17.028675,0.060452,1.000000,2.000000,1.000000\n4.000000,11.000000,873.316956,208.291275,57.036026,17.024061,0.040075,1.000000,2.000000,1.000000\n4.000000,12.000000,868.860657,185.766296,59.033710,15.992852,0.038887,1.000000,2.000000,1.000000\n4.000000,13.000000,866.733887,165.265167,48.344200,15.997561,0.025783,1.000000,2.000000,1.000000\n4.000000,14.000000,874.338257,144.302628,60.709812,18.014011,0.021658,1.000000,2.000000,1.000000\n4.000000,15.000000,870.296692,122.779686,57.008671,16.999865,0.022537,1.000000,2.000000,1.000000\n4.000000,16.000000,877.053406,101.315872,56.000572,16.999327,0.004987,1.000000,2.000000,1.000000\n4.000000,17.000000,876.135925,80.261360,63.072880,21.926056,0.052543,1.000000,2.000000,1.000000\n4.000000,18.000000,873.591736,58.803368,55.010193,19.015142,0.023122,1.000000,2.000000,1.000000\n4.000000,19.000000,873.361267,39.295696,55.101849,18.027330,0.059451,1.000000,2.000000,1.000000\n4.000000,20.000000,581.988037,113.343704,49.606312,21.429558,2.058318,1.000000,2.000000,1.000000\n4.000000,21.000000,603.592529,192.952515,61.199299,17.992062,0.528254,1.000000,2.000000,1.000000\n4.000000,22.000000,614.698425,171.507690,62.312763,20.226791,0.534217,1.000000,2.000000,1.000000\n4.000000,23.000000,865.831665,479.257812,55.008179,18.015068,0.023175,1.000000,2.000000,1.000000\n4.000000,24.000000,866.802002,552.770386,59.109715,19.026510,0.055762,1.000000,2.000000,1.000000\n4.000000,25.000000,653.579773,95.200470,60.683578,20.181601,0.498903,1.000000,2.000000,1.000000\n4.000000,26.000000,863.330444,575.747437,59.008324,17.013824,0.021926,1.000000,2.000000,1.000000\n4.000000,27.000000,801.051208,502.441956,38.354935,12.996209,0.031308,1.000000,2.000000,1.000000\n4.000000,28.000000,803.651123,482.452911,42.999828,17.998848,0.004986,1.000000,2.000000,1.000000\n4.000000,29.000000,799.995300,413.435669,55.835213,21.984022,0.041351,1.000000,2.000000,1.000000\n4.000000,30.000000,799.937439,390.940979,53.009655,18.015547,0.023861,1.000000,2.000000,1.000000\n4.000000,31.000000,800.229797,366.434692,61.385910,22.999046,0.021335,1.000000,2.000000,1.000000\n4.000000,32.000000,801.823853,342.919983,59.027927,20.025820,0.055020,1.000000,2.000000,1.000000\n4.000000,33.000000,799.468201,318.431305,61.351185,20.995331,0.021386,1.000000,2.000000,1.000000\n4.000000,34.000000,798.581909,295.925201,50.130440,16.030123,0.064899,1.000000,2.000000,1.000000\n4.000000,35.000000,800.337646,272.955963,59.033760,21.053829,0.038887,1.000000,2.000000,1.000000\n4.000000,36.000000,795.314819,248.910355,70.569420,18.991577,0.033534,1.000000,2.000000,1.000000\n4.000000,37.000000,800.921875,227.438110,57.377651,20.996958,0.022554,1.000000,2.000000,1.000000\n4.000000,38.000000,802.537231,204.445343,53.998596,18.002922,0.004987,1.000000,2.000000,1.000000\n4.000000,39.000000,802.191406,181.444641,62.170479,21.024992,0.053357,1.000000,2.000000,1.000000\n4.000000,40.000000,808.581604,161.480667,50.009857,17.016005,0.024973,1.000000,2.000000,1.000000\n4.000000,41.000000,820.394531,104.043533,35.012577,10.023525,0.033562,1.000000,2.000000,1.000000\n4.000000,42.000000,814.957703,120.006729,44.726017,14.986160,0.050360,1.000000,2.000000,1.000000\n4.000000,43.000000,808.850342,141.474930,57.999355,17.999865,0.004986,1.000000,2.000000,1.000000\n4.000000,44.000000,865.496826,613.763306,71.237389,20.025267,0.061249,1.000000,2.000000,1.000000\n4.000000,45.000000,640.441040,123.136246,59.479527,17.442724,0.468634,1.000000,2.000000,1.000000\n4.000000,46.000000,663.183411,74.248657,54.838978,20.142998,0.477114,1.000000,2.000000,1.000000\n4.000000,47.000000,403.055542,32.499451,49.429176,20.878643,0.294457,1.000000,2.000000,1.000000\n4.000000,48.000000,224.269211,156.560898,48.533737,15.796021,0.280426,1.000000,2.000000,1.000000\n4.000000,49.000000,227.179840,134.031540,58.660728,19.416958,0.212518,1.000000,2.000000,1.000000\n4.000000,50.000000,232.525925,105.100891,47.361622,12.606475,0.244716,1.000000,2.000000,1.000000\n4.000000,51.000000,239.130432,84.133942,57.559597,17.205650,0.245521,1.000000,2.000000,1.000000\n4.000000,52.000000,250.864685,37.192009,52.476036,16.744921,0.259357,1.000000,2.000000,1.000000\n4.000000,53.000000,259.076996,11.408745,52.224308,18.382116,0.259352,1.000000,2.000000,1.000000\n4.000000,54.000000,412.569977,8.264393,52.784271,20.127829,0.254576,1.000000,2.000000,1.000000\n4.000000,55.000000,397.466949,56.837860,47.803783,20.603168,0.280402,1.000000,2.000000,1.000000\n4.000000,56.000000,690.812378,22.585087,46.529751,17.474533,0.497437,1.000000,2.000000,1.000000\n4.000000,57.000000,386.527802,101.009201,49.999165,18.002098,0.288795,1.000000,2.000000,1.000000\n4.000000,58.000000,291.536957,203.392975,68.849144,13.593703,0.271138,1.000000,2.000000,1.000000\n4.000000,59.000000,196.664825,177.422668,34.386246,11.382737,0.214009,1.000000,2.000000,1.000000\n4.000000,60.000000,235.401978,188.550995,46.173199,14.554783,0.313068,1.000000,2.000000,1.000000\n4.000000,61.000000,343.983521,214.158020,33.330059,11.401601,0.279084,1.000000,2.000000,1.000000\n4.000000,62.000000,378.937469,223.332855,36.283489,13.139219,0.202410,1.000000,2.000000,1.000000\n4.000000,63.000000,420.977692,215.542938,51.185623,14.316451,0.202351,1.000000,2.000000,1.000000\n4.000000,64.000000,423.585052,194.055786,39.629269,14.783232,0.243567,1.000000,2.000000,1.000000\n4.000000,65.000000,431.546661,174.767807,44.125736,15.295462,0.202357,1.000000,2.000000,1.000000\n4.000000,66.000000,436.278809,155.118011,44.645836,15.517905,0.233515,1.000000,2.000000,1.000000\n4.000000,67.000000,442.522095,136.058823,36.380856,16.493109,0.249875,1.000000,2.000000,1.000000\n4.000000,68.000000,443.493164,112.154144,34.381458,14.557505,0.271212,1.000000,2.000000,1.000000\n4.000000,69.000000,454.082947,94.205734,43.304165,15.801169,0.289707,1.000000,2.000000,1.000000\n4.000000,70.000000,469.542023,48.447506,53.366360,15.738791,0.231930,1.000000,2.000000,1.000000\n4.000000,71.000000,473.426575,25.301449,52.435692,20.863649,0.259357,1.000000,2.000000,1.000000\n4.000000,72.000000,355.095398,191.714859,69.501114,14.536552,0.225260,1.000000,2.000000,1.000000\n4.000000,73.000000,361.205658,169.743362,65.125206,15.771891,0.257521,1.000000,2.000000,1.000000\n4.000000,74.000000,364.822815,146.261856,71.466568,19.198668,0.267429,1.000000,2.000000,1.000000\n4.000000,75.000000,861.155212,316.241547,46.009968,15.998247,0.026732,1.000000,2.000000,1.000000\n4.000000,76.000000,1004.786377,480.298859,36.891365,19.015787,0.023860,1.000000,2.000000,1.000000\n4.000000,77.000000,1008.264099,416.321930,29.983509,16.969967,0.029385,1.000000,2.000000,1.000000\n4.000000,78.000000,1011.225281,228.485260,23.609488,12.000248,0.004987,1.000000,2.000000,1.000000\n4.000000,79.000000,1007.049561,500.467804,31.970903,14.001167,0.004986,1.000000,2.000000,1.000000\n4.000000,80.000000,1008.496948,521.406006,29.006104,14.004944,-0.000000,1.000000,2.000000,1.000000\n4.000000,81.000000,1010.950134,541.260620,25.128534,13.954017,0.069444,1.000000,2.000000,1.000000\n4.000000,82.000000,1006.045349,560.813599,34.281883,14.018928,0.025760,1.000000,2.000000,1.000000\n4.000000,83.000000,994.265381,616.405273,57.560669,19.999758,0.004987,1.000000,2.000000,1.000000\n4.000000,84.000000,1002.352417,580.843994,41.695107,15.996017,0.024225,1.000000,2.000000,1.000000\n4.000000,85.000000,830.973572,317.588104,601.306335,131.034561,1.597408,1.000000,8.000000,1.000000\n4.000000,86.000000,675.644653,479.705933,288.578522,79.649864,1.080890,1.000000,8.000000,1.000000\n4.000000,87.000000,650.322693,88.630600,246.856430,78.580940,2.079844,1.000000,8.000000,1.000000\n4.000000,88.000000,419.098907,105.285767,215.129578,124.403229,1.815125,1.000000,8.000000,1.000000\n4.000000,89.000000,236.309311,78.185181,177.926636,67.649208,1.814270,1.000000,8.000000,1.000000\n4.000000,90.000000,623.071472,357.654388,52.322197,23.703571,2.682838,1.000000,2.000000,1.000000\n4.000000,91.000000,622.142212,379.772491,32.694595,12.477630,2.737670,1.000000,2.000000,1.000000\n4.000000,92.000000,626.691284,396.732788,35.848690,13.389823,2.745336,1.000000,2.000000,1.000000\n4.000000,93.000000,635.998657,412.117188,34.665302,12.974297,2.815478,1.000000,2.000000,1.000000\n4.000000,94.000000,644.310547,427.216919,34.884693,14.760878,2.670132,1.000000,2.000000,1.000000\n4.000000,95.000000,652.845276,443.201141,30.184229,13.376966,2.759721,1.000000,2.000000,1.000000\n4.000000,96.000000,660.412537,457.940277,35.341030,14.800020,2.708191,1.000000,2.000000,1.000000\n4.000000,97.000000,673.811707,490.206268,31.305664,16.545584,2.682903,1.000000,2.000000,1.000000\n4.000000,98.000000,683.623779,505.318726,31.385458,16.155708,2.754240,1.000000,2.000000,1.000000\n4.000000,99.000000,689.614929,520.524658,32.310871,14.299405,2.766096,1.000000,2.000000,1.000000\n4.000000,100.000000,698.498718,536.880798,34.540131,13.926682,2.760677,1.000000,2.000000,1.000000\n4.000000,101.000000,705.300232,552.464661,28.381611,12.513257,2.699065,1.000000,2.000000,1.000000\n4.000000,102.000000,712.720215,568.500854,34.434406,16.100937,2.682878,1.000000,2.000000,1.000000\n4.000000,103.000000,721.537903,585.347412,38.012299,13.863899,2.682863,1.000000,2.000000,1.000000\n4.000000,104.000000,665.998657,545.114502,35.340977,12.507236,1.137460,1.000000,2.000000,1.000000\n4.000000,105.000000,640.855042,501.242920,34.882229,13.415606,1.112136,1.000000,2.000000,1.000000\n4.000000,106.000000,617.805481,451.027405,33.362816,12.031517,1.056685,1.000000,2.000000,1.000000\n4.000000,107.000000,576.623535,387.319305,25.940348,11.627570,1.111982,1.000000,2.000000,1.000000\n4.000000,108.000000,186.482986,116.315041,25.709755,13.340675,1.811314,1.000000,2.000000,1.000000\n4.000000,109.000000,194.213013,87.109131,26.563465,12.016853,1.897723,1.000000,2.000000,1.000000\n4.000000,110.000000,201.257217,58.444408,31.624641,12.649009,1.897446,1.000000,2.000000,1.000000\n5.000000,1.000000,863.070557,525.249023,59.999294,20.000795,3.136606,1.000000,2.000000,1.000000\n5.000000,2.000000,864.209717,452.743805,54.999031,19.000343,3.136606,1.000000,2.000000,1.000000\n5.000000,3.000000,860.096924,428.237946,58.077843,18.974974,0.046679,1.000000,2.000000,1.000000\n5.000000,4.000000,862.459106,402.751007,55.346115,19.024080,0.031339,1.000000,2.000000,1.000000\n5.000000,5.000000,863.340332,380.746246,59.076096,20.025702,0.045840,1.000000,2.000000,1.000000\n5.000000,6.000000,866.619934,334.728638,55.370880,19.997429,0.013202,1.000000,2.000000,1.000000\n5.000000,7.000000,864.896606,291.736359,53.084091,18.027647,0.051583,1.000000,2.000000,1.000000\n5.000000,8.000000,867.156067,270.232727,53.008591,15.016766,0.013888,1.000000,2.000000,1.000000\n5.000000,9.000000,867.625671,248.081116,53.152504,15.960179,0.066493,1.000000,2.000000,1.000000\n5.000000,10.000000,868.106995,226.222458,54.084820,17.028685,0.050478,1.000000,2.000000,1.000000\n5.000000,11.000000,870.270020,204.702927,57.036095,17.024054,0.030102,1.000000,2.000000,1.000000\n5.000000,12.000000,865.589417,182.223480,59.033772,15.992850,0.028914,1.000000,2.000000,1.000000\n5.000000,13.000000,863.258179,161.744598,48.344158,15.997562,0.015810,1.000000,2.000000,1.000000\n5.000000,14.000000,870.653259,140.707260,60.709797,18.014023,0.011685,1.000000,2.000000,1.000000\n5.000000,15.000000,866.397095,119.225693,57.008709,16.999866,0.012563,1.000000,2.000000,1.000000\n5.000000,16.000000,872.939270,97.695587,56.000530,16.999331,3.136606,1.000000,2.000000,1.000000\n5.000000,17.000000,871.812012,76.651260,63.072887,21.926065,0.042570,1.000000,2.000000,1.000000\n5.000000,18.000000,869.054016,55.219711,55.010193,19.015142,0.013149,1.000000,2.000000,1.000000\n5.000000,19.000000,868.629028,35.715298,55.101864,18.027332,0.049478,1.000000,2.000000,1.000000\n5.000000,20.000000,578.008728,112.665512,49.606304,21.429487,2.048346,1.000000,2.000000,1.000000\n5.000000,21.000000,600.406006,192.054871,61.199310,17.992104,0.518281,1.000000,2.000000,1.000000\n5.000000,22.000000,611.297485,170.500412,62.312775,20.226780,0.524244,1.000000,2.000000,1.000000\n5.000000,23.000000,865.487488,475.730621,55.008213,18.015049,0.013202,1.000000,2.000000,1.000000\n5.000000,24.000000,867.190918,549.229858,59.109688,19.026552,0.045789,1.000000,2.000000,1.000000\n5.000000,25.000000,649.415833,93.809212,60.683620,20.181633,0.488930,1.000000,2.000000,1.000000\n5.000000,26.000000,863.948669,572.240356,59.008244,17.013865,0.011951,1.000000,2.000000,1.000000\n5.000000,27.000000,800.941528,499.559723,38.355015,12.996207,0.021335,1.000000,2.000000,1.000000\n5.000000,28.000000,803.341919,479.545715,42.999863,17.998848,3.136606,1.000000,2.000000,1.000000\n5.000000,29.000000,798.998169,410.568420,55.835167,21.984020,0.031378,1.000000,2.000000,1.000000\n5.000000,30.000000,798.715820,388.075348,53.009628,18.015549,0.013887,1.000000,2.000000,1.000000\n5.000000,31.000000,798.763733,363.567322,61.385868,22.999010,0.011362,1.000000,2.000000,1.000000\n5.000000,32.000000,800.123169,340.037842,59.027962,20.025835,0.045044,1.000000,2.000000,1.000000\n5.000000,33.000000,797.523438,315.573975,61.351143,20.995329,0.011413,1.000000,2.000000,1.000000\n5.000000,34.000000,796.412842,293.077820,50.130455,16.030075,0.054925,1.000000,2.000000,1.000000\n5.000000,35.000000,797.939270,270.092224,59.033703,21.053820,0.028914,1.000000,2.000000,1.000000\n5.000000,36.000000,792.676880,246.097870,70.569420,18.991583,0.023561,1.000000,2.000000,1.000000\n5.000000,37.000000,798.069519,224.570770,57.377647,20.996960,0.012581,1.000000,2.000000,1.000000\n5.000000,38.000000,799.455505,201.563126,53.998592,18.002935,3.136609,1.000000,2.000000,1.000000\n5.000000,39.000000,798.880310,178.566956,62.170509,21.024990,0.043383,1.000000,2.000000,1.000000\n5.000000,40.000000,805.071167,158.540253,50.009834,17.016018,0.014999,1.000000,2.000000,1.000000\n5.000000,41.000000,816.310608,100.988159,35.012611,10.023528,0.023588,1.000000,2.000000,1.000000\n5.000000,42.000000,811.033142,117.004784,44.726021,14.986151,0.040387,1.000000,2.000000,1.000000\n5.000000,43.000000,805.140381,138.532883,57.999279,17.999866,3.136603,1.000000,2.000000,1.000000\n5.000000,44.000000,866.494263,610.232788,71.237366,20.025309,0.051276,1.000000,2.000000,1.000000\n5.000000,45.000000,636.556519,121.874611,59.479511,17.442738,0.458661,1.000000,2.000000,1.000000\n5.000000,46.000000,658.810181,72.762642,54.838924,20.142988,0.467141,1.000000,2.000000,1.000000\n5.000000,47.000000,398.278870,33.609825,49.429195,20.878647,0.284484,1.000000,2.000000,1.000000\n5.000000,48.000000,220.738724,159.448166,48.533726,15.796028,0.270453,1.000000,2.000000,1.000000\n5.000000,49.000000,223.424484,136.890900,58.660740,19.416958,0.202544,1.000000,2.000000,1.000000\n5.000000,50.000000,228.481781,107.908363,47.361614,12.606478,0.234742,1.000000,2.000000,1.000000\n5.000000,51.000000,234.876831,86.876595,57.559597,17.205645,0.235548,1.000000,2.000000,1.000000\n5.000000,52.000000,246.142319,39.819962,52.476032,16.744928,0.249384,1.000000,2.000000,1.000000\n5.000000,53.000000,254.026321,14.237019,51.922169,18.669701,0.266028,1.000000,2.000000,1.000000\n5.000000,54.000000,407.561127,9.240948,52.784264,20.210554,0.244602,1.000000,2.000000,1.000000\n5.000000,55.000000,392.933258,58.002747,47.803764,20.603172,0.270429,1.000000,2.000000,1.000000\n5.000000,56.000000,685.922485,20.826099,46.529774,17.474564,0.487463,1.000000,2.000000,1.000000\n5.000000,57.000000,382.435181,102.280975,49.999149,18.002090,0.278822,1.000000,2.000000,1.000000\n5.000000,58.000000,288.470154,205.606995,68.849121,13.593704,0.261163,1.000000,2.000000,1.000000\n5.000000,59.000000,193.343704,180.584183,34.386230,11.382741,0.204035,1.000000,2.000000,1.000000\n5.000000,60.000000,232.189941,191.325623,46.173187,14.554763,0.303095,1.000000,2.000000,1.000000\n5.000000,61.000000,341.021454,215.848480,33.330048,11.401598,0.269111,1.000000,2.000000,1.000000\n5.000000,62.000000,376.065186,224.674286,36.283447,13.139214,0.192437,1.000000,2.000000,1.000000\n5.000000,63.000000,418.025696,216.465469,51.185585,14.316457,0.192378,1.000000,2.000000,1.000000\n5.000000,64.000000,420.418518,194.953339,39.629261,14.783241,0.233594,1.000000,2.000000,1.000000\n5.000000,65.000000,428.187347,175.586945,44.125748,15.295472,0.192383,1.000000,2.000000,1.000000\n5.000000,66.000000,432.723358,155.890930,44.645840,15.517920,0.223542,1.000000,2.000000,1.000000\n5.000000,67.000000,438.366089,137.287201,36.401230,16.483883,0.273348,1.000000,2.000000,1.000000\n5.000000,68.000000,439.508850,112.857262,34.381454,14.557504,0.261239,1.000000,2.000000,1.000000\n5.000000,69.000000,449.919067,94.804131,43.304134,15.801160,0.279734,1.000000,2.000000,1.000000\n5.000000,70.000000,464.921082,48.894020,53.366337,15.738785,0.221955,1.000000,2.000000,1.000000\n5.000000,71.000000,468.574585,25.710358,52.435677,20.863649,0.249383,1.000000,2.000000,1.000000\n5.000000,72.000000,351.908936,193.295609,69.501122,14.536543,0.215287,1.000000,2.000000,1.000000\n5.000000,73.000000,357.799744,171.264282,65.125175,15.771894,0.247548,1.000000,2.000000,1.000000\n5.000000,74.000000,361.182587,147.747879,71.466568,19.198656,0.257455,1.000000,2.000000,1.000000\n5.000000,75.000000,859.014160,313.266357,45.999069,16.002060,3.136607,1.000000,2.000000,1.000000\n5.000000,76.000000,1004.566833,475.387512,37.133774,19.015797,0.013887,1.000000,2.000000,1.000000\n5.000000,77.000000,1007.730469,411.385986,30.874313,16.969986,0.019411,1.000000,2.000000,1.000000\n5.000000,78.000000,1009.799255,223.513443,26.461838,12.000247,3.136606,1.000000,2.000000,1.000000\n5.000000,79.000000,1006.944946,495.608459,32.110107,13.996002,-0.000000,1.000000,2.000000,1.000000\n5.000000,80.000000,1008.496948,516.593933,29.006104,13.994995,-0.000000,1.000000,2.000000,1.000000\n5.000000,81.000000,1011.044922,536.272461,24.783361,13.953316,0.059471,1.000000,2.000000,1.000000\n5.000000,82.000000,1006.239624,555.879700,33.746151,14.018911,0.015787,1.000000,2.000000,1.000000\n5.000000,83.000000,994.776184,611.592896,56.547947,19.999762,3.136606,1.000000,2.000000,1.000000\n5.000000,84.000000,1002.641479,575.944946,40.949108,15.996016,0.014253,1.000000,2.000000,1.000000\n5.000000,85.000000,829.018799,314.416565,601.306274,131.034561,1.587435,1.000000,8.000000,1.000000\n5.000000,86.000000,675.314514,478.075562,288.578522,79.649872,1.070916,1.000000,8.000000,1.000000\n5.000000,87.000000,645.472595,88.422897,244.241348,78.569832,2.069870,1.000000,8.000000,1.000000\n5.000000,88.000000,415.047272,106.232529,215.129593,124.403259,1.805151,1.000000,8.000000,1.000000\n5.000000,89.000000,232.262146,79.839409,180.222610,67.649193,1.804297,1.000000,8.000000,1.000000\n5.000000,90.000000,621.526611,356.554413,52.322197,23.703581,2.672866,1.000000,2.000000,1.000000\n5.000000,91.000000,620.818054,378.680603,32.694611,12.477595,2.727696,1.000000,2.000000,1.000000\n5.000000,92.000000,625.536011,395.594635,35.848679,13.389781,2.735363,1.000000,2.000000,1.000000\n5.000000,93.000000,634.996277,410.885376,34.665287,12.974266,2.805505,1.000000,2.000000,1.000000\n5.000000,94.000000,643.458496,425.901703,34.884712,14.760893,2.660159,1.000000,2.000000,1.000000\n5.000000,95.000000,652.152161,441.799835,30.184278,13.376930,2.749749,1.000000,2.000000,1.000000\n5.000000,96.000000,659.866028,456.462830,35.341000,14.800063,2.698217,1.000000,2.000000,1.000000\n5.000000,97.000000,673.206299,488.312439,31.294230,16.551615,2.699937,1.000000,2.000000,1.000000\n5.000000,98.000000,683.389832,503.471710,31.383236,16.156864,2.756160,1.000000,2.000000,1.000000\n5.000000,99.000000,689.691101,518.752930,32.310833,14.299481,2.756124,1.000000,2.000000,1.000000\n5.000000,100.000000,698.737671,535.019531,34.540073,13.926644,2.750705,1.000000,2.000000,1.000000\n5.000000,101.000000,705.694336,550.534912,28.381639,12.513277,2.689093,1.000000,2.000000,1.000000\n5.000000,102.000000,713.273743,566.496338,34.434429,16.100958,2.672904,1.000000,2.000000,1.000000\n5.000000,103.000000,722.259094,583.254211,38.012291,13.863896,2.672887,1.000000,2.000000,1.000000\n5.000000,104.000000,666.321289,543.576965,35.340977,12.507242,1.127486,1.000000,2.000000,1.000000\n5.000000,105.000000,640.901245,499.781158,34.885136,13.414461,1.089337,1.000000,2.000000,1.000000\n5.000000,106.000000,617.192200,449.975311,33.362816,12.031491,1.046711,1.000000,2.000000,1.000000\n5.000000,107.000000,575.376892,386.680969,25.940384,11.627533,1.102007,1.000000,2.000000,1.000000\n5.000000,108.000000,182.552948,119.581154,25.709764,13.340671,1.801341,1.000000,2.000000,1.000000\n5.000000,109.000000,189.991333,90.299599,26.563465,12.016859,1.887749,1.000000,2.000000,1.000000\n5.000000,110.000000,196.749924,61.566559,31.624640,12.649028,1.887520,1.000000,2.000000,1.000000\n6.000000,1.000000,863.344543,521.247253,60.007595,19.998020,0.001713,1.000000,2.000000,1.000000\n6.000000,2.000000,863.601196,449.234131,54.999008,19.000343,3.126633,1.000000,2.000000,1.000000\n6.000000,3.000000,859.244141,424.770477,58.077824,18.975006,0.036706,1.000000,2.000000,1.000000\n6.000000,4.000000,861.352173,399.261261,55.346134,19.024061,0.021365,1.000000,2.000000,1.000000\n6.000000,5.000000,862.023743,377.222565,59.076118,20.025728,0.034966,1.000000,2.000000,1.000000\n6.000000,6.000000,864.834412,331.200775,55.370888,19.997465,0.003229,1.000000,2.000000,1.000000\n6.000000,7.000000,862.682190,288.227844,53.084099,18.027668,0.041609,1.000000,2.000000,1.000000\n6.000000,8.000000,864.727295,266.702759,53.008579,15.016773,0.003915,1.000000,2.000000,1.000000\n6.000000,9.000000,864.975891,244.547470,53.152496,15.960184,0.056517,1.000000,2.000000,1.000000\n6.000000,10.000000,865.239136,222.685181,54.084766,17.028692,0.040505,1.000000,2.000000,1.000000\n6.000000,11.000000,867.187500,201.145126,57.036087,17.024050,0.020129,1.000000,2.000000,1.000000\n6.000000,12.000000,862.282898,178.713486,59.033718,15.992854,0.018940,1.000000,2.000000,1.000000\n6.000000,13.000000,859.747559,158.258865,48.344196,15.997552,0.005837,1.000000,2.000000,1.000000\n6.000000,14.000000,866.932434,137.148834,60.709789,18.014025,0.001712,1.000000,2.000000,1.000000\n6.000000,15.000000,862.604004,115.210907,56.999954,17.002483,3.126630,1.000000,2.000000,1.000000\n6.000000,16.000000,868.789490,94.116478,56.000584,16.999332,3.126633,1.000000,2.000000,1.000000\n6.000000,17.000000,867.452271,73.084457,63.072872,21.926060,0.032596,1.000000,2.000000,1.000000\n6.000000,18.000000,864.480591,51.681473,55.010170,19.015137,0.003176,1.000000,2.000000,1.000000\n6.000000,19.000000,863.861145,32.182274,55.101894,18.027334,0.039505,1.000000,2.000000,1.000000\n6.000000,20.000000,574.022827,112.027054,49.606300,21.429567,2.038371,1.000000,2.000000,1.000000\n6.000000,21.000000,597.210754,191.189102,61.199284,17.992088,0.508307,1.000000,2.000000,1.000000\n6.000000,22.000000,607.886719,169.527100,62.312767,20.226757,0.514270,1.000000,2.000000,1.000000\n6.000000,23.000000,865.108276,472.207031,55.008156,18.015047,0.003228,1.000000,2.000000,1.000000\n6.000000,24.000000,867.544495,545.685608,59.109730,19.026533,0.035815,1.000000,2.000000,1.000000\n6.000000,25.000000,645.238281,92.459511,60.683590,20.181614,0.478957,1.000000,2.000000,1.000000\n6.000000,26.000000,864.531921,568.727234,59.008293,17.013889,0.001979,1.000000,2.000000,1.000000\n6.000000,27.000000,800.803040,496.678650,38.354965,12.996188,0.011362,1.000000,2.000000,1.000000\n6.000000,28.000000,803.003662,476.641724,42.999863,17.998840,3.126633,1.000000,2.000000,1.000000\n6.000000,29.000000,797.972229,407.711151,55.835186,21.984009,0.021405,1.000000,2.000000,1.000000\n6.000000,30.000000,797.465759,385.222046,53.009617,18.015537,0.003915,1.000000,2.000000,1.000000\n6.000000,31.000000,797.269104,360.714722,61.385876,22.999043,0.001389,1.000000,2.000000,1.000000\n6.000000,32.000000,798.393921,337.172974,59.028004,20.025805,0.035072,1.000000,2.000000,1.000000\n6.000000,33.000000,795.550232,312.736176,61.351208,20.995346,0.001439,1.000000,2.000000,1.000000\n6.000000,34.000000,794.215332,290.252197,50.130394,16.030090,0.044952,1.000000,2.000000,1.000000\n6.000000,35.000000,795.512390,267.252502,59.033718,21.053825,0.018940,1.000000,2.000000,1.000000\n6.000000,36.000000,790.011047,243.311844,70.569504,18.991562,0.013588,1.000000,2.000000,1.000000\n6.000000,37.000000,795.188721,221.732071,57.377644,20.996958,0.002608,1.000000,2.000000,1.000000\n6.000000,38.000000,796.345215,198.711609,53.998627,18.002930,3.126633,1.000000,2.000000,1.000000\n6.000000,39.000000,795.540649,175.722443,62.170490,21.024986,0.033410,1.000000,2.000000,1.000000\n6.000000,40.000000,801.531433,155.634995,50.009846,17.016010,0.005026,1.000000,2.000000,1.000000\n6.000000,41.000000,812.196411,97.973656,35.012585,10.023527,0.013615,1.000000,2.000000,1.000000\n6.000000,42.000000,807.078857,114.042114,44.725971,14.986156,0.030414,1.000000,2.000000,1.000000\n6.000000,43.000000,801.401245,135.627869,57.999302,17.999861,3.126632,1.000000,2.000000,1.000000\n6.000000,44.000000,867.456177,606.692383,71.237389,20.025326,0.041302,1.000000,2.000000,1.000000\n6.000000,45.000000,632.659546,120.651840,59.479519,17.442760,0.448688,1.000000,2.000000,1.000000\n6.000000,46.000000,654.422363,71.320358,54.838902,20.142977,0.457168,1.000000,2.000000,1.000000\n6.000000,47.000000,393.513428,34.767765,49.429188,20.878643,0.274511,1.000000,2.000000,1.000000\n6.000000,48.000000,217.237137,162.370483,48.533714,15.796027,0.260479,1.000000,2.000000,1.000000\n6.000000,49.000000,219.697830,139.787552,58.660740,19.416960,0.192571,1.000000,2.000000,1.000000\n6.000000,50.000000,224.465820,110.756027,47.361622,12.606472,0.224769,1.000000,2.000000,1.000000\n6.000000,51.000000,230.650787,89.661530,57.559597,17.205654,0.225574,1.000000,2.000000,1.000000\n6.000000,52.000000,241.446442,42.494881,52.476040,16.744926,0.239410,1.000000,2.000000,1.000000\n6.000000,53.000000,249.076401,16.828846,51.922176,18.681547,0.256055,1.000000,2.000000,1.000000\n6.000000,54.000000,402.563110,10.261992,52.784237,20.304182,0.234629,1.000000,2.000000,1.000000\n6.000000,55.000000,388.411407,59.212799,47.803761,20.603174,0.260456,1.000000,2.000000,1.000000\n6.000000,56.000000,681.015320,19.115992,46.529743,17.474560,0.477490,1.000000,2.000000,1.000000\n6.000000,57.000000,378.355469,103.593536,49.999161,18.002098,0.268848,1.000000,2.000000,1.000000\n6.000000,58.000000,285.425537,207.851517,68.849159,13.593709,0.251190,1.000000,2.000000,1.000000\n6.000000,59.000000,190.054306,183.778687,34.386246,11.382751,0.194062,1.000000,2.000000,1.000000\n6.000000,60.000000,229.005753,194.132156,46.173187,14.554766,0.293121,1.000000,2.000000,1.000000\n6.000000,61.000000,338.076324,217.568390,33.330036,11.401578,0.259138,1.000000,2.000000,1.000000\n6.000000,62.000000,373.206390,226.044281,36.283463,13.139216,0.182464,1.000000,2.000000,1.000000\n6.000000,63.000000,415.082947,217.417389,51.185600,14.316455,0.182404,1.000000,2.000000,1.000000\n6.000000,64.000000,417.261108,195.882477,39.629284,14.783228,0.223620,1.000000,2.000000,1.000000\n6.000000,65.000000,425.193542,175.814682,44.147125,15.288060,0.213524,1.000000,2.000000,1.000000\n6.000000,66.000000,429.175751,156.699265,44.645844,15.517920,0.213569,1.000000,2.000000,1.000000\n6.000000,67.000000,435.037628,137.519379,36.380867,16.493109,0.229929,1.000000,2.000000,1.000000\n6.000000,68.000000,435.531769,113.600075,34.381462,14.557506,0.251266,1.000000,2.000000,1.000000\n6.000000,69.000000,445.761475,95.444023,43.304146,15.801166,0.269761,1.000000,2.000000,1.000000\n6.000000,70.000000,460.304840,49.386574,53.366375,15.738791,0.211982,1.000000,2.000000,1.000000\n6.000000,71.000000,463.726898,26.167622,52.435696,20.863647,0.239410,1.000000,2.000000,1.000000\n6.000000,72.000000,348.738403,194.908066,69.501144,14.536543,0.205313,1.000000,2.000000,1.000000\n6.000000,73.000000,354.409210,172.819092,65.125160,15.771884,0.237574,1.000000,2.000000,1.000000\n6.000000,74.000000,357.557373,149.270111,71.466583,19.198660,0.247482,1.000000,2.000000,1.000000\n6.000000,75.000000,857.014893,309.815460,45.999092,16.002035,3.126633,1.000000,2.000000,1.000000\n6.000000,76.000000,1004.323914,470.477539,37.426922,19.015772,0.003914,1.000000,2.000000,1.000000\n6.000000,77.000000,1007.172974,406.451416,31.815613,16.969988,0.009437,1.000000,2.000000,1.000000\n6.000000,78.000000,1008.378845,218.540985,29.425241,12.000247,3.126633,1.000000,2.000000,1.000000\n6.000000,79.000000,1006.816406,490.827881,32.367188,13.984619,-0.000000,1.000000,2.000000,1.000000\n6.000000,80.000000,1008.472961,511.781372,29.054077,13.983612,-0.000000,1.000000,2.000000,1.000000\n6.000000,81.000000,1011.115479,531.286621,24.489475,13.952802,0.049496,1.000000,2.000000,1.000000\n6.000000,82.000000,1006.410400,550.946960,33.261360,14.018940,0.005813,1.000000,2.000000,1.000000\n6.000000,83.000000,995.312134,606.779663,55.681160,19.999796,3.126633,1.000000,2.000000,1.000000\n6.000000,84.000000,1002.907471,571.047058,40.254105,15.996081,0.004278,1.000000,2.000000,1.000000\n6.000000,85.000000,827.032532,311.264740,601.306335,131.034607,1.577461,1.000000,8.000000,1.000000\n6.000000,86.000000,674.968018,476.448486,288.578522,79.649887,1.060943,1.000000,8.000000,1.000000\n6.000000,87.000000,640.651978,88.231567,241.712204,78.559280,2.059897,1.000000,8.000000,1.000000\n6.000000,88.000000,411.005310,107.219643,215.129608,124.403259,1.795178,1.000000,8.000000,1.000000\n6.000000,89.000000,228.225143,81.511162,182.559967,67.649193,1.794324,1.000000,8.000000,1.000000\n6.000000,90.000000,619.970947,355.469818,52.322220,23.703606,2.662891,1.000000,2.000000,1.000000\n6.000000,91.000000,619.482971,377.601929,32.694607,12.477628,2.717723,1.000000,2.000000,1.000000\n6.000000,92.000000,624.369446,394.468109,35.848709,13.389786,2.725390,1.000000,2.000000,1.000000\n6.000000,93.000000,633.981812,409.663788,34.665279,12.974257,2.795532,1.000000,2.000000,1.000000\n6.000000,94.000000,642.593201,424.594849,34.884693,14.760871,2.650185,1.000000,2.000000,1.000000\n6.000000,95.000000,651.445068,440.405579,30.184296,13.376953,2.739775,1.000000,2.000000,1.000000\n6.000000,96.000000,659.304749,454.990906,35.340946,14.800044,2.688244,1.000000,2.000000,1.000000\n6.000000,97.000000,673.344910,486.983276,31.305668,16.545580,2.662956,1.000000,2.000000,1.000000\n6.000000,98.000000,683.456421,501.897034,31.385401,16.155722,2.734292,1.000000,2.000000,1.000000\n6.000000,99.000000,689.749695,516.980347,32.310822,14.299421,2.746150,1.000000,2.000000,1.000000\n6.000000,100.000000,698.957947,533.156067,34.540108,13.926706,2.740731,1.000000,2.000000,1.000000\n6.000000,101.000000,706.068848,548.601135,28.381641,12.513254,2.679120,1.000000,2.000000,1.000000\n6.000000,102.000000,713.807129,564.486206,34.434395,16.100943,2.662930,1.000000,2.000000,1.000000\n6.000000,103.000000,722.959229,581.153625,38.012257,13.863955,2.662915,1.000000,2.000000,1.000000\n6.000000,104.000000,666.628479,542.036255,35.341000,12.507210,1.117512,1.000000,2.000000,1.000000\n6.000000,105.000000,640.614929,498.675079,34.882282,13.415616,1.092190,1.000000,2.000000,1.000000\n6.000000,106.000000,616.568359,448.929260,33.362778,12.031453,1.036737,1.000000,2.000000,1.000000\n6.000000,107.000000,574.123840,386.055145,25.940346,11.627553,1.092035,1.000000,2.000000,1.000000\n6.000000,108.000000,178.655670,122.886276,25.709759,13.340678,1.791368,1.000000,2.000000,1.000000\n6.000000,109.000000,185.801682,93.532013,26.563463,12.016850,1.877775,1.000000,2.000000,1.000000\n6.000000,110.000000,192.272736,64.732498,31.624636,12.649010,1.877500,1.000000,2.000000,1.000000\n7.000000,1.000000,863.419189,517.742798,60.007599,19.998034,3.133331,1.000000,2.000000,1.000000\n7.000000,2.000000,862.957642,445.730652,54.999031,19.000343,3.116660,1.000000,2.000000,1.000000\n7.000000,3.000000,858.356934,421.311707,58.077885,18.974968,0.026732,1.000000,2.000000,1.000000\n7.000000,4.000000,860.210388,395.782745,55.346184,19.024069,0.011393,1.000000,2.000000,1.000000\n7.000000,5.000000,860.652527,373.764740,59.076130,20.025682,0.025893,1.000000,2.000000,1.000000\n7.000000,6.000000,863.013611,327.690887,55.370914,19.997446,3.134848,1.000000,2.000000,1.000000\n7.000000,7.000000,860.443359,284.714081,53.084087,18.027660,0.030591,1.000000,2.000000,1.000000\n7.000000,8.000000,862.263306,263.197144,53.008602,15.016780,3.135534,1.000000,2.000000,1.000000\n7.000000,9.000000,862.290894,241.040421,53.152477,15.960182,0.046542,1.000000,2.000000,1.000000\n7.000000,10.000000,862.336243,219.176651,54.084839,17.028673,0.030532,1.000000,2.000000,1.000000\n7.000000,11.000000,864.069580,197.618225,57.036076,17.024044,0.010155,1.000000,2.000000,1.000000\n7.000000,12.000000,859.187927,174.238983,58.999821,16.002041,3.116661,1.000000,2.000000,1.000000\n7.000000,13.000000,856.202271,154.808319,48.344151,15.997562,3.137456,1.000000,2.000000,1.000000\n7.000000,14.000000,863.176270,133.627670,60.709854,18.014019,3.133331,1.000000,2.000000,1.000000\n7.000000,15.000000,858.492615,112.235283,57.008751,16.999866,3.134209,1.000000,2.000000,1.000000\n7.000000,16.000000,864.604065,90.578949,56.000565,16.999325,3.116659,1.000000,2.000000,1.000000\n7.000000,17.000000,863.057251,69.561302,63.072910,21.926065,0.022623,1.000000,2.000000,1.000000\n7.000000,18.000000,859.872375,48.189026,55.010120,19.015137,3.134795,1.000000,2.000000,1.000000\n7.000000,19.000000,859.058411,28.696972,55.101833,18.027330,0.029531,1.000000,2.000000,1.000000\n7.000000,20.000000,570.030762,111.428375,49.606335,21.429518,2.028399,1.000000,2.000000,1.000000\n7.000000,21.000000,594.007080,190.355255,61.199287,17.992065,0.498334,1.000000,2.000000,1.000000\n7.000000,22.000000,604.466431,168.587814,62.312790,20.226791,0.504297,1.000000,2.000000,1.000000\n7.000000,23.000000,864.693909,468.687469,55.008148,18.015043,3.134848,1.000000,2.000000,1.000000\n7.000000,24.000000,867.862793,542.138000,59.109772,19.026575,0.025842,1.000000,2.000000,1.000000\n7.000000,25.000000,641.047607,91.151588,60.683609,20.181612,0.468983,1.000000,2.000000,1.000000\n7.000000,26.000000,865.080139,565.208557,59.008293,17.013901,3.133598,1.000000,2.000000,1.000000\n7.000000,27.000000,800.635864,493.799194,38.354942,12.996211,0.001389,1.000000,2.000000,1.000000\n7.000000,28.000000,802.636475,473.741211,42.999825,17.998850,3.116659,1.000000,2.000000,1.000000\n7.000000,29.000000,796.917908,404.864319,55.835220,21.983990,0.011432,1.000000,2.000000,1.000000\n7.000000,30.000000,796.187134,382.381378,53.009571,18.015553,3.135533,1.000000,2.000000,1.000000\n7.000000,31.000000,795.746155,357.877258,61.385872,22.999037,3.133008,1.000000,2.000000,1.000000\n7.000000,32.000000,796.635986,334.325470,59.027992,20.025839,0.025101,1.000000,2.000000,1.000000\n7.000000,33.000000,793.548828,309.918152,61.351208,20.995340,3.133059,1.000000,2.000000,1.000000\n7.000000,34.000000,791.989746,287.448700,50.130459,16.030113,0.034980,1.000000,2.000000,1.000000\n7.000000,35.000000,793.057373,264.437164,59.033741,21.053820,0.008967,1.000000,2.000000,1.000000\n7.000000,36.000000,787.317566,240.552582,70.569458,18.991571,0.003614,1.000000,2.000000,1.000000\n7.000000,37.000000,792.279724,218.922241,57.377674,20.996958,3.134227,1.000000,2.000000,1.000000\n7.000000,38.000000,793.206482,195.891464,53.998604,18.002926,3.116662,1.000000,2.000000,1.000000\n7.000000,39.000000,792.172791,172.911377,62.170483,21.024981,0.023437,1.000000,2.000000,1.000000\n7.000000,40.000000,797.962952,152.765182,50.009892,17.016005,3.136645,1.000000,2.000000,1.000000\n7.000000,41.000000,808.052368,95.000351,35.012562,10.023530,0.003642,1.000000,2.000000,1.000000\n7.000000,42.000000,803.095337,111.119049,44.726048,14.986157,0.020440,1.000000,2.000000,1.000000\n7.000000,43.000000,797.633118,132.760345,57.999302,17.999857,3.116659,1.000000,2.000000,1.000000\n7.000000,44.000000,868.382812,603.142700,71.237419,20.025322,0.031328,1.000000,2.000000,1.000000\n7.000000,45.000000,628.750549,119.467926,59.479523,17.442741,0.438714,1.000000,2.000000,1.000000\n7.000000,46.000000,650.020325,69.921875,54.838928,20.142979,0.447194,1.000000,2.000000,1.000000\n7.000000,47.000000,388.759827,35.973198,49.429199,20.878643,0.264538,1.000000,2.000000,1.000000\n7.000000,48.000000,213.764862,165.327576,48.533722,15.796026,0.250506,1.000000,2.000000,1.000000\n7.000000,49.000000,216.000244,142.721268,58.660732,19.416962,0.182597,1.000000,2.000000,1.000000\n7.000000,50.000000,220.478439,113.643593,47.361626,12.606476,0.214796,1.000000,2.000000,1.000000\n7.000000,51.000000,226.452713,92.488464,57.559589,17.205647,0.215601,1.000000,2.000000,1.000000\n7.000000,52.000000,236.777435,45.216499,52.476032,16.744928,0.229437,1.000000,2.000000,1.000000\n7.000000,53.000000,244.151093,19.475643,51.922188,18.681545,0.246081,1.000000,2.000000,1.000000\n7.000000,54.000000,397.576447,11.326782,52.784248,20.410032,0.224656,1.000000,2.000000,1.000000\n7.000000,55.000000,383.901825,60.467888,47.803761,20.603168,0.250482,1.000000,2.000000,1.000000\n7.000000,56.000000,676.092285,17.455399,46.527496,17.474564,0.467517,1.000000,2.000000,1.000000\n7.000000,57.000000,374.288971,104.946693,49.999142,18.002090,0.258875,1.000000,2.000000,1.000000\n7.000000,58.000000,282.403473,210.126328,68.849129,13.593701,0.241218,1.000000,2.000000,1.000000\n7.000000,59.000000,186.796921,187.005814,34.386230,11.382740,0.184088,1.000000,2.000000,1.000000\n7.000000,60.000000,225.849670,196.970306,46.173195,14.554761,0.283148,1.000000,2.000000,1.000000\n7.000000,61.000000,335.148621,219.317612,33.330067,11.401578,0.249165,1.000000,2.000000,1.000000\n7.000000,62.000000,370.361420,227.442703,36.283459,13.139224,0.172490,1.000000,2.000000,1.000000\n7.000000,63.000000,412.149811,218.398590,51.185604,14.316448,0.172431,1.000000,2.000000,1.000000\n7.000000,64.000000,414.113098,196.843048,39.629261,14.783240,0.213647,1.000000,2.000000,1.000000\n7.000000,65.000000,421.845062,176.697144,44.147133,15.288063,0.203550,1.000000,2.000000,1.000000\n7.000000,66.000000,425.636414,157.542953,44.645828,15.517908,0.203595,1.000000,2.000000,1.000000\n7.000000,67.000000,431.306732,138.305588,36.380875,16.493122,0.219956,1.000000,2.000000,1.000000\n7.000000,68.000000,431.562256,114.382523,34.381447,14.557506,0.241293,1.000000,2.000000,1.000000\n7.000000,69.000000,441.610382,96.125343,43.304165,15.801171,0.259787,1.000000,2.000000,1.000000\n7.000000,70.000000,455.693665,49.925121,53.366344,15.738791,0.202010,1.000000,2.000000,1.000000\n7.000000,71.000000,458.883972,26.673220,52.435711,20.863653,0.229437,1.000000,2.000000,1.000000\n7.000000,72.000000,345.584106,196.552063,69.501160,14.536553,0.195340,1.000000,2.000000,1.000000\n7.000000,73.000000,351.034332,174.407639,65.125191,15.771889,0.227601,1.000000,2.000000,1.000000\n7.000000,74.000000,353.947479,150.828415,71.466560,19.198650,0.237509,1.000000,2.000000,1.000000\n7.000000,75.000000,854.981323,306.384613,45.999058,16.002041,3.116661,1.000000,2.000000,1.000000\n7.000000,76.000000,1004.114868,465.681030,37.770203,19.019318,-0.000000,1.000000,2.000000,1.000000\n7.000000,77.000000,1006.591675,401.526367,32.816650,16.969208,-0.000000,1.000000,2.000000,1.000000\n7.000000,78.000000,1006.934448,213.567535,32.440292,12.000257,3.116660,1.000000,2.000000,1.000000\n7.000000,79.000000,1006.671875,486.031952,32.671959,13.973392,3.140476,1.000000,2.000000,1.000000\n7.000000,80.000000,1008.428833,506.961395,29.149969,13.971607,3.141057,1.000000,2.000000,1.000000\n7.000000,81.000000,1011.161743,526.302856,24.246813,13.952229,0.039524,1.000000,2.000000,1.000000\n7.000000,82.000000,1006.586426,546.023193,32.878647,14.019260,3.137939,1.000000,2.000000,1.000000\n7.000000,83.000000,995.825500,601.965027,54.864948,19.999748,3.116660,1.000000,2.000000,1.000000\n7.000000,84.000000,1003.149780,566.261963,39.700439,15.994080,3.141593,1.000000,2.000000,1.000000\n7.000000,85.000000,825.014771,308.132904,601.306396,131.034546,1.567488,1.000000,8.000000,1.000000\n7.000000,86.000000,674.605286,474.824890,288.578522,79.649849,1.050969,1.000000,8.000000,1.000000\n7.000000,87.000000,635.860229,88.056717,239.267120,78.549248,2.049924,1.000000,8.000000,1.000000\n7.000000,88.000000,406.973419,108.246986,215.129593,124.403236,1.785205,1.000000,8.000000,1.000000\n7.000000,89.000000,224.198013,83.200272,184.938843,67.649185,1.784350,1.000000,8.000000,1.000000\n7.000000,90.000000,618.404480,354.400818,52.322186,23.703579,2.652918,1.000000,2.000000,1.000000\n7.000000,91.000000,618.137207,376.536682,32.694633,12.477622,2.707750,1.000000,2.000000,1.000000\n7.000000,92.000000,623.191711,393.353333,35.848698,13.389791,2.715417,1.000000,2.000000,1.000000\n7.000000,93.000000,632.955078,408.452301,34.665340,12.974282,2.785558,1.000000,2.000000,1.000000\n7.000000,94.000000,641.714966,423.296753,34.884670,14.760898,2.640212,1.000000,2.000000,1.000000\n7.000000,95.000000,650.724121,439.018433,30.184233,13.376941,2.729801,1.000000,2.000000,1.000000\n7.000000,96.000000,658.728882,453.524628,35.340958,14.799999,2.678270,1.000000,2.000000,1.000000\n7.000000,97.000000,672.701782,485.101898,31.294296,16.551632,2.679990,1.000000,2.000000,1.000000\n7.000000,98.000000,683.347046,500.187561,31.385452,16.155718,2.724320,1.000000,2.000000,1.000000\n7.000000,99.000000,689.790527,515.207458,32.310818,14.299447,2.736176,1.000000,2.000000,1.000000\n7.000000,100.000000,699.159668,531.290466,34.540138,13.926731,2.730757,1.000000,2.000000,1.000000\n7.000000,101.000000,706.424255,546.663940,28.381666,12.513280,2.669146,1.000000,2.000000,1.000000\n7.000000,102.000000,714.320618,562.471008,34.434414,16.100945,2.652958,1.000000,2.000000,1.000000\n7.000000,103.000000,723.638367,579.046265,38.012276,13.863898,2.652940,1.000000,2.000000,1.000000\n7.000000,104.000000,666.920410,540.492737,35.340958,12.507271,1.107540,1.000000,2.000000,1.000000\n7.000000,105.000000,640.475586,497.393066,34.882244,13.415622,1.082218,1.000000,2.000000,1.000000\n7.000000,106.000000,615.934204,447.889618,33.362797,12.031491,1.026764,1.000000,2.000000,1.000000\n7.000000,107.000000,572.864624,385.441833,25.940336,11.627505,1.082064,1.000000,2.000000,1.000000\n7.000000,108.000000,174.791580,126.230133,25.709763,13.340685,1.781395,1.000000,2.000000,1.000000\n7.000000,109.000000,181.644485,96.806061,26.563459,12.016862,1.867802,1.000000,2.000000,1.000000\n7.000000,110.000000,187.827972,67.943428,31.624640,12.649011,1.867526,1.000000,2.000000,1.000000\n8.000000,1.000000,863.309814,514.740723,59.999256,20.000769,3.106687,1.000000,2.000000,1.000000\n8.000000,2.000000,862.279419,442.233826,54.999012,19.000340,3.106686,1.000000,2.000000,1.000000\n8.000000,3.000000,857.435303,417.861908,58.077858,18.974960,0.016759,1.000000,2.000000,1.000000\n8.000000,4.000000,859.033997,392.315735,55.346176,19.024050,0.001419,1.000000,2.000000,1.000000\n8.000000,5.000000,859.256531,370.294495,59.076092,20.025719,0.015920,1.000000,2.000000,1.000000\n8.000000,6.000000,861.158081,324.199402,55.370888,19.997463,3.124875,1.000000,2.000000,1.000000\n8.000000,7.000000,858.159302,281.250336,53.084076,18.027664,0.020617,1.000000,2.000000,1.000000\n8.000000,8.000000,859.764526,259.716278,53.008583,15.016771,3.125561,1.000000,2.000000,1.000000\n8.000000,9.000000,859.571289,237.560501,53.152466,15.960192,0.036572,1.000000,2.000000,1.000000\n8.000000,10.000000,859.398376,215.697266,54.084793,17.028681,0.020558,1.000000,2.000000,1.000000\n8.000000,11.000000,860.916687,194.122635,57.036072,17.024046,0.000182,1.000000,2.000000,1.000000\n8.000000,12.000000,855.565796,171.793289,59.033718,15.992846,3.140587,1.000000,2.000000,1.000000\n8.000000,13.000000,852.622986,151.393311,48.344162,15.997560,3.127483,1.000000,2.000000,1.000000\n8.000000,14.000000,859.385254,130.144165,60.709831,18.014021,3.123358,1.000000,2.000000,1.000000\n8.000000,15.000000,854.620239,108.297012,56.999996,17.002491,3.106686,1.000000,2.000000,1.000000\n8.000000,16.000000,860.383667,87.083344,56.000542,16.999329,3.106686,1.000000,2.000000,1.000000\n8.000000,17.000000,858.627319,66.082169,63.072918,21.926058,0.012650,1.000000,2.000000,1.000000\n8.000000,18.000000,855.229431,44.742706,55.010170,19.015133,3.124821,1.000000,2.000000,1.000000\n8.000000,19.000000,854.221130,25.259747,55.101891,18.027334,0.019558,1.000000,2.000000,1.000000\n8.000000,20.000000,566.032898,110.869545,49.606346,21.429512,2.018426,1.000000,2.000000,1.000000\n8.000000,21.000000,590.795166,189.553391,61.199314,17.992071,0.488360,1.000000,2.000000,1.000000\n8.000000,22.000000,601.036926,167.682724,62.312794,20.226805,0.494324,1.000000,2.000000,1.000000\n8.000000,23.000000,864.244385,465.172150,55.008240,18.015059,3.124875,1.000000,2.000000,1.000000\n8.000000,24.000000,868.145752,538.587524,59.109760,19.026552,0.015869,1.000000,2.000000,1.000000\n8.000000,25.000000,636.843994,89.885498,60.683578,20.181614,0.459010,1.000000,2.000000,1.000000\n8.000000,26.000000,865.593262,561.684692,59.008301,17.013891,3.123624,1.000000,2.000000,1.000000\n8.000000,27.000000,800.440002,490.921448,38.354996,12.996183,3.133008,1.000000,2.000000,1.000000\n8.000000,28.000000,802.240662,470.844604,42.999847,17.998848,3.106686,1.000000,2.000000,1.000000\n8.000000,29.000000,795.835266,402.028046,55.835220,21.984026,0.001458,1.000000,2.000000,1.000000\n8.000000,30.000000,794.880310,379.553589,53.009682,18.015560,3.125560,1.000000,2.000000,1.000000\n8.000000,31.000000,794.194885,355.055084,61.385899,22.999039,3.123034,1.000000,2.000000,1.000000\n8.000000,32.000000,794.849915,331.495575,59.028000,20.025818,0.015127,1.000000,2.000000,1.000000\n8.000000,33.000000,791.519470,307.120270,61.351204,20.995352,3.123085,1.000000,2.000000,1.000000\n8.000000,34.000000,789.736389,284.667450,50.130428,16.030081,0.025006,1.000000,2.000000,1.000000\n8.000000,35.000000,790.574524,261.646454,59.033718,21.053831,3.140587,1.000000,2.000000,1.000000\n8.000000,36.000000,784.596680,237.820282,70.569443,18.991564,3.135234,1.000000,2.000000,1.000000\n8.000000,37.000000,789.343018,216.141571,57.377678,20.996948,3.124254,1.000000,2.000000,1.000000\n8.000000,38.000000,790.039978,193.102600,53.998596,18.002926,3.106686,1.000000,2.000000,1.000000\n8.000000,39.000000,788.777039,170.134033,62.170544,21.024988,0.013464,1.000000,2.000000,1.000000\n8.000000,40.000000,794.366028,149.931091,50.009842,17.016010,3.126672,1.000000,2.000000,1.000000\n8.000000,41.000000,803.878845,92.068512,35.012604,10.023531,3.135261,1.000000,2.000000,1.000000\n8.000000,42.000000,799.082886,108.235855,44.726021,14.986154,0.010467,1.000000,2.000000,1.000000\n8.000000,43.000000,793.836792,129.930511,57.999332,17.999861,3.106687,1.000000,2.000000,1.000000\n8.000000,44.000000,869.274292,599.583862,71.237381,20.025293,0.021356,1.000000,2.000000,1.000000\n8.000000,45.000000,624.830017,118.323097,59.479515,17.442717,0.428741,1.000000,2.000000,1.000000\n8.000000,46.000000,645.604553,68.567360,54.838928,20.142982,0.437221,1.000000,2.000000,1.000000\n8.000000,47.000000,384.018463,37.225956,49.429207,20.878639,0.254564,1.000000,2.000000,1.000000\n8.000000,48.000000,210.322311,168.319183,48.533710,15.796021,0.240533,1.000000,2.000000,1.000000\n8.000000,49.000000,212.332092,145.691635,58.660725,19.416964,0.172625,1.000000,2.000000,1.000000\n8.000000,50.000000,216.520081,116.570801,47.361607,12.606474,0.204822,1.000000,2.000000,1.000000\n8.000000,51.000000,222.283112,95.357132,57.559605,17.205647,0.205628,1.000000,2.000000,1.000000\n8.000000,52.000000,232.135849,47.984550,52.476048,16.744926,0.219464,1.000000,2.000000,1.000000\n8.000000,53.000000,239.222763,22.216444,51.922283,18.681513,0.238062,1.000000,2.000000,1.000000\n8.000000,54.000000,392.601593,12.434427,52.784264,20.529612,0.214682,1.000000,2.000000,1.000000\n8.000000,55.000000,379.404999,61.767879,47.803764,20.603161,0.240509,1.000000,2.000000,1.000000\n8.000000,56.000000,671.191650,15.596419,46.494564,17.482349,0.467979,1.000000,2.000000,1.000000\n8.000000,57.000000,370.236267,106.340355,49.999138,18.002094,0.248902,1.000000,2.000000,1.000000\n8.000000,58.000000,279.404083,212.434631,68.848923,13.593740,0.231344,1.000000,2.000000,1.000000\n8.000000,59.000000,183.571884,190.265274,34.386227,11.382751,0.174115,1.000000,2.000000,1.000000\n8.000000,60.000000,222.722046,199.839798,46.173199,14.554771,0.273175,1.000000,2.000000,1.000000\n8.000000,61.000000,332.238464,221.095917,33.330040,11.401585,0.239191,1.000000,2.000000,1.000000\n8.000000,62.000000,367.530518,228.869415,36.283474,13.139213,0.162517,1.000000,2.000000,1.000000\n8.000000,63.000000,409.226654,219.409012,51.185608,14.316453,0.162457,1.000000,2.000000,1.000000\n8.000000,64.000000,410.974915,197.834961,39.629276,14.783242,0.203674,1.000000,2.000000,1.000000\n8.000000,65.000000,418.505493,177.612946,44.147133,15.288064,0.193577,1.000000,2.000000,1.000000\n8.000000,66.000000,422.105682,158.421936,44.645809,15.517912,0.193622,1.000000,2.000000,1.000000\n8.000000,67.000000,427.189331,139.657700,36.401234,16.483875,0.243428,1.000000,2.000000,1.000000\n8.000000,68.000000,427.600739,115.204506,34.381439,14.557502,0.231319,1.000000,2.000000,1.000000\n8.000000,69.000000,437.466217,96.848022,43.304173,15.801167,0.249814,1.000000,2.000000,1.000000\n8.000000,70.000000,451.088043,50.509659,53.366375,15.738796,0.192036,1.000000,2.000000,1.000000\n8.000000,71.000000,454.046448,27.227100,52.435711,20.863657,0.219463,1.000000,2.000000,1.000000\n8.000000,72.000000,342.446411,198.227448,69.501144,14.536558,0.185367,1.000000,2.000000,1.000000\n8.000000,73.000000,347.675476,176.029755,65.125191,15.771893,0.217628,1.000000,2.000000,1.000000\n8.000000,74.000000,350.353333,152.422668,71.466576,19.198660,0.227536,1.000000,2.000000,1.000000\n8.000000,75.000000,853.070068,302.472046,46.009968,15.998273,3.128431,1.000000,2.000000,1.000000\n8.000000,76.000000,1003.952026,461.028412,38.158474,19.024693,0.003552,1.000000,2.000000,1.000000\n8.000000,77.000000,1005.986572,396.755798,34.026855,16.954193,-0.000000,1.000000,2.000000,1.000000\n8.000000,78.000000,1005.466431,208.592804,35.507755,12.000254,3.106686,1.000000,2.000000,1.000000\n8.000000,79.000000,1006.565430,481.097809,33.026203,13.973353,3.130501,1.000000,2.000000,1.000000\n8.000000,80.000000,1008.426575,502.009949,29.295382,13.971586,3.131084,1.000000,2.000000,1.000000\n8.000000,81.000000,1011.183838,521.320862,24.055168,13.951853,0.029550,1.000000,2.000000,1.000000\n8.000000,82.000000,1006.779480,541.090576,32.635212,14.019276,3.127967,1.000000,2.000000,1.000000\n8.000000,83.000000,996.315918,597.148621,54.099174,19.999733,3.106686,1.000000,2.000000,1.000000\n8.000000,84.000000,1003.368774,561.556824,39.262505,15.989317,3.141593,1.000000,2.000000,1.000000\n8.000000,85.000000,822.966187,305.021179,601.306213,131.034561,1.557515,1.000000,8.000000,1.000000\n8.000000,86.000000,674.226562,473.205139,288.578522,79.649887,1.040996,1.000000,8.000000,1.000000\n8.000000,87.000000,631.096130,87.898422,236.904434,78.539711,2.039950,1.000000,8.000000,1.000000\n8.000000,88.000000,402.951935,109.314514,215.129608,124.403259,1.775231,1.000000,8.000000,1.000000\n8.000000,89.000000,220.180527,84.906586,187.359482,67.649200,1.774377,1.000000,8.000000,1.000000\n8.000000,90.000000,616.827332,353.347321,52.322193,23.703579,2.642947,1.000000,2.000000,1.000000\n8.000000,91.000000,616.780945,375.484955,32.694622,12.477634,2.697777,1.000000,2.000000,1.000000\n8.000000,92.000000,622.002869,392.250336,35.848694,13.389840,2.705444,1.000000,2.000000,1.000000\n8.000000,93.000000,631.916443,407.251251,34.665314,12.974272,2.775585,1.000000,2.000000,1.000000\n8.000000,94.000000,640.823914,422.007507,34.884720,14.760887,2.630239,1.000000,2.000000,1.000000\n8.000000,95.000000,649.989380,437.638611,30.184277,13.376983,2.719828,1.000000,2.000000,1.000000\n8.000000,96.000000,658.138367,452.064148,35.340992,14.800033,2.668298,1.000000,2.000000,1.000000\n8.000000,97.000000,672.425537,483.500458,31.294266,16.551626,2.670018,1.000000,2.000000,1.000000\n8.000000,98.000000,683.220703,498.479218,31.385439,16.155706,2.714346,1.000000,2.000000,1.000000\n8.000000,99.000000,689.813599,513.434082,32.310787,14.299427,2.726203,1.000000,2.000000,1.000000\n8.000000,100.000000,699.342651,529.422852,34.540096,13.926687,2.720785,1.000000,2.000000,1.000000\n8.000000,101.000000,706.760254,544.723145,28.381664,12.513262,2.659174,1.000000,2.000000,1.000000\n8.000000,102.000000,714.813843,560.450623,34.434349,16.100964,2.642982,1.000000,2.000000,1.000000\n8.000000,103.000000,724.296570,576.932312,38.012272,13.863927,2.642968,1.000000,2.000000,1.000000\n8.000000,104.000000,667.196838,538.946228,35.340996,12.507215,1.097565,1.000000,2.000000,1.000000\n8.000000,105.000000,640.477966,495.930450,34.885136,13.414495,1.059416,1.000000,2.000000,1.000000\n8.000000,106.000000,615.289551,446.856110,33.362831,12.031480,1.016790,1.000000,2.000000,1.000000\n8.000000,107.000000,571.599487,384.841095,25.940346,11.627560,1.072091,1.000000,2.000000,1.000000\n8.000000,108.000000,170.960999,129.612335,25.709764,13.340680,1.771421,1.000000,2.000000,1.000000\n8.000000,109.000000,177.520126,100.121399,26.563459,12.016868,1.857828,1.000000,2.000000,1.000000\n8.000000,110.000000,183.416077,71.199013,31.624641,12.649017,1.857599,1.000000,2.000000,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/seqinfo.ini",
    "content": "[Sequence]\nname = P0861__1024__0___1648\nimdir = img1\nframerate = 8\nseqlength = 8\nimwidth = 1024\nimheight = 1024\nimext = .jpg\n\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1053__1024__0___90/det/det.txt",
    "content": "1.000000,-1.000000,137.380234,456.461578,33.107666,44.044189,1.000000\n1.000000,-1.000000,263.443390,141.705688,31.142944,42.937714,1.000000\n1.000000,-1.000000,260.242035,290.579224,31.282562,40.080750,1.000000\n1.000000,-1.000000,174.717529,193.530258,23.286865,31.807068,1.000000\n1.000000,-1.000000,518.538452,166.455719,199.174194,146.195862,1.000000\n1.000000,-1.000000,831.680542,232.484375,100.016418,187.504700,1.000000\n1.000000,-1.000000,904.832947,573.384399,104.082458,188.574341,1.000000\n1.000000,-1.000000,772.276062,528.697876,101.118896,187.504639,1.000000\n1.000000,-1.000000,634.709717,514.887268,102.013062,188.504517,1.000000\n1.000000,-1.000000,496.130341,529.023987,102.048920,188.539429,1.000000\n1.000000,-1.000000,358.529144,517.213074,102.944092,187.574463,1.000000\n1.000000,-1.000000,208.696213,652.066589,101.014206,188.504578,1.000000\n1.000000,-1.000000,70.989471,639.360535,104.047363,188.468628,1.000000\n2.000000,-1.000000,136.939072,460.037506,33.367035,44.037415,1.000000\n2.000000,-1.000000,259.856506,144.030075,31.391754,42.960495,1.000000\n2.000000,-1.000000,258.141113,292.958008,31.491455,40.062805,1.000000\n2.000000,-1.000000,171.613083,196.768250,23.493408,31.866440,1.000000\n2.000000,-1.000000,516.384888,166.282700,198.006226,144.443253,1.000000\n2.000000,-1.000000,830.668274,229.167664,98.309875,186.812225,1.000000\n2.000000,-1.000000,907.215515,569.281311,102.357178,187.862244,1.000000\n2.000000,-1.000000,774.229858,525.928650,99.382812,186.812195,1.000000\n2.000000,-1.000000,636.522644,513.491028,100.307129,187.812378,1.000000\n2.000000,-1.000000,498.091522,529.019104,100.332977,187.837280,1.000000\n2.000000,-1.000000,360.359406,518.581726,101.258392,186.862122,1.000000\n2.000000,-1.000000,211.888824,654.922546,99.307983,187.812378,1.000000\n2.000000,-1.000000,74.081108,643.559875,102.332069,187.786438,1.000000\n3.000000,-1.000000,136.535217,463.618622,33.623108,44.026215,1.000000\n3.000000,-1.000000,256.294708,146.391052,31.637421,42.979019,1.000000\n3.000000,-1.000000,256.065430,295.358612,31.697235,40.040863,1.000000\n3.000000,-1.000000,168.542496,200.037582,23.697617,31.922668,1.000000\n3.000000,-1.000000,514.230896,166.144073,196.818542,142.676270,1.000000\n3.000000,-1.000000,829.624329,225.879089,96.593567,186.101166,1.000000\n3.000000,-1.000000,909.558777,565.172546,100.621704,187.131409,1.000000\n3.000000,-1.000000,776.157593,523.158020,97.636719,186.101135,1.000000\n3.000000,-1.000000,638.323181,512.094666,98.591248,187.101501,1.000000\n3.000000,-1.000000,500.054077,529.012512,98.607117,187.116455,1.000000\n3.000000,-1.000000,362.204773,519.949829,99.562622,186.131104,1.000000\n3.000000,-1.000000,215.111282,657.764282,97.591873,187.101501,1.000000\n3.000000,-1.000000,77.216301,647.746155,100.606590,187.085571,1.000000\n4.000000,-1.000000,136.168716,467.204529,33.875809,44.010681,1.000000\n4.000000,-1.000000,252.758331,148.788406,31.879944,42.993256,1.000000\n4.000000,-1.000000,254.015182,297.780731,31.899887,40.014954,1.000000\n4.000000,-1.000000,165.506073,203.337967,23.899460,31.975693,1.000000\n4.000000,-1.000000,512.076660,166.039856,195.611267,140.895081,1.000000\n4.000000,-1.000000,828.548767,222.618973,94.867676,185.371628,1.000000\n4.000000,-1.000000,911.862488,561.058472,98.876282,186.382019,1.000000\n4.000000,-1.000000,778.059021,520.386292,95.881042,185.371582,1.000000\n4.000000,-1.000000,640.111206,510.698273,96.865479,186.372040,1.000000\n4.000000,-1.000000,502.017792,529.004211,96.871490,186.377075,1.000000\n4.000000,-1.000000,364.065033,521.317078,97.856964,185.381592,1.000000\n4.000000,-1.000000,218.363281,660.591553,95.866058,186.372009,1.000000\n4.000000,-1.000000,80.394737,651.918945,98.871101,186.366089,1.000000\n5.000000,-1.000000,135.839600,470.794891,34.125137,43.990753,1.000000\n5.000000,-1.000000,249.247757,151.221878,32.119308,43.003235,1.000000\n5.000000,-1.000000,251.990616,300.224182,32.099350,39.985046,1.000000\n5.000000,-1.000000,162.504105,206.669037,24.098938,32.025543,1.000000\n5.000000,-1.000000,509.922424,165.970032,194.384583,139.099915,1.000000\n5.000000,-1.000000,827.441772,219.387634,93.132324,184.623627,1.000000\n5.000000,-1.000000,914.126404,556.939514,97.120972,185.614075,1.000000\n5.000000,-1.000000,779.933960,517.613708,94.115784,184.623596,1.000000\n5.000000,-1.000000,641.886475,509.302002,95.130127,185.624084,1.000000\n5.000000,-1.000000,503.982544,528.994263,95.126160,185.619080,1.000000\n5.000000,-1.000000,365.940033,522.683411,96.141541,184.613647,1.000000\n5.000000,-1.000000,221.644485,663.403992,94.130722,185.624084,1.000000\n5.000000,-1.000000,83.616104,656.077759,97.125793,185.628113,1.000000\n6.000000,-1.000000,135.547882,474.389374,34.371094,43.966400,1.000000\n6.000000,-1.000000,245.763306,153.691238,32.355469,43.008926,1.000000\n6.000000,-1.000000,249.991898,302.688690,32.295639,39.951172,1.000000\n6.000000,-1.000000,159.536911,210.030472,24.296005,32.072235,1.000000\n6.000000,-1.000000,507.768402,165.934647,193.138519,137.290878,1.000000\n6.000000,-1.000000,826.303345,216.185394,91.387695,183.857269,1.000000\n6.000000,-1.000000,916.350342,552.816101,95.356018,184.827637,1.000000\n6.000000,-1.000000,781.782288,514.840576,92.341125,183.857300,1.000000\n6.000000,-1.000000,643.648804,507.906036,93.385315,184.857574,1.000000\n6.000000,-1.000000,505.948059,528.982605,93.371399,184.842651,1.000000\n6.000000,-1.000000,367.829529,524.048706,94.416565,183.827332,1.000000\n6.000000,-1.000000,224.954575,666.201416,92.386002,184.857605,1.000000\n6.000000,-1.000000,86.880089,660.222290,95.370811,184.871582,1.000000\n7.000000,-1.000000,135.293625,477.987579,34.613617,43.937714,1.000000\n7.000000,-1.000000,242.305344,156.196243,32.588394,43.010330,1.000000\n7.000000,-1.000000,248.019257,305.174011,32.488678,39.913330,1.000000\n7.000000,-1.000000,156.604767,213.421951,24.490677,32.115707,1.000000\n7.000000,-1.000000,505.614807,165.933670,191.873230,135.468216,1.000000\n7.000000,-1.000000,825.133667,213.012589,89.634033,183.072617,1.000000\n7.000000,-1.000000,918.534058,548.688599,93.581604,184.022888,1.000000\n7.000000,-1.000000,783.603821,512.067139,90.557312,183.072693,1.000000\n7.000000,-1.000000,645.398010,506.510437,91.631226,184.072754,1.000000\n7.000000,-1.000000,507.914215,528.969238,91.607269,184.047852,1.000000\n7.000000,-1.000000,369.733368,525.412781,92.682220,183.022766,1.000000\n7.000000,-1.000000,228.293213,668.983459,90.632080,184.072754,1.000000\n7.000000,-1.000000,90.186348,664.352112,93.606346,184.096680,1.000000\n8.000000,-1.000000,135.076828,481.589172,34.852707,43.904663,1.000000\n8.000000,-1.000000,238.874207,158.736633,32.818085,43.007462,1.000000\n8.000000,-1.000000,246.072861,307.679932,32.678513,39.871460,1.000000\n8.000000,-1.000000,153.707977,216.843140,24.682892,32.155991,1.000000\n8.000000,-1.000000,503.461853,165.967117,190.588928,133.632065,1.000000\n8.000000,-1.000000,823.932861,209.869522,87.871399,182.269760,1.000000\n8.000000,-1.000000,920.677368,544.557434,91.797791,183.199829,1.000000\n8.000000,-1.000000,785.398254,509.293701,88.764526,182.269836,1.000000\n8.000000,-1.000000,647.133972,505.115417,89.868042,183.269592,1.000000\n8.000000,-1.000000,509.880737,528.954224,89.834106,183.234680,1.000000\n8.000000,-1.000000,371.651367,526.775513,90.938629,182.200012,1.000000\n8.000000,-1.000000,231.660065,671.749939,88.869171,183.269531,1.000000\n8.000000,-1.000000,93.534569,668.466736,91.832573,183.303467,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1053__1024__0___90/det/det_obb.txt",
    "content": "1.000000,-1.000000,153.951538,478.483704,39.823242,18.820560,1.118817,1.000000,11.000000\n1.000000,-1.000000,279.532776,163.174561,38.254032,19.660196,1.154206,1.000000,11.000000\n1.000000,-1.000000,275.383942,310.619598,35.843254,18.008017,1.065313,1.000000,11.000000\n1.000000,-1.000000,185.861038,209.433807,28.073294,16.153883,1.238521,1.000000,11.000000\n1.000000,-1.000000,618.162720,238.039719,188.266068,133.184280,0.088050,1.000000,15.000000\n1.000000,-1.000000,880.202148,326.287292,180.152557,86.206772,1.667083,1.000000,5.000000\n1.000000,-1.000000,956.806946,667.415894,182.222031,89.187691,1.655113,1.000000,5.000000\n1.000000,-1.000000,822.835571,622.415283,181.499863,86.092102,1.655385,1.000000,5.000000\n1.000000,-1.000000,686.216064,609.139526,181.079330,86.205437,1.666737,1.000000,5.000000\n1.000000,-1.000000,547.136902,623.293762,181.498550,86.200035,1.661198,1.000000,5.000000\n1.000000,-1.000000,409.982697,611.000305,180.389938,87.254707,1.661820,1.000000,5.000000\n1.000000,-1.000000,259.168396,746.318848,181.527664,85.258308,1.661507,1.000000,5.000000\n1.000000,-1.000000,123.860016,734.150024,181.466293,87.135933,1.676182,1.000000,5.000000\n2.000000,-1.000000,153.635056,482.056213,39.823265,18.820543,1.108844,1.000000,11.000000\n2.000000,-1.000000,276.065430,165.510330,38.254009,19.660208,1.144233,1.000000,11.000000\n2.000000,-1.000000,273.387268,312.989410,35.843277,18.008005,1.055340,1.000000,11.000000\n2.000000,-1.000000,182.859695,212.701462,28.073280,16.153887,1.228547,1.000000,11.000000\n2.000000,-1.000000,615.425110,236.994537,188.266037,133.184250,0.078077,1.000000,15.000000\n2.000000,-1.000000,878.331665,322.624359,180.152542,86.206734,1.657109,1.000000,5.000000\n2.000000,-1.000000,958.334900,662.972046,182.222015,89.187706,1.645139,1.000000,5.000000\n2.000000,-1.000000,823.921326,619.309814,181.499939,86.092133,1.645412,1.000000,5.000000\n2.000000,-1.000000,687.176270,607.397278,181.079376,86.205421,1.656764,1.000000,5.000000\n2.000000,-1.000000,548.245117,622.937744,181.498566,86.200020,1.651224,1.000000,5.000000\n2.000000,-1.000000,410.975128,612.012817,180.389999,87.254738,1.651847,1.000000,5.000000\n2.000000,-1.000000,261.517883,748.828735,181.527634,85.258308,1.651534,1.000000,5.000000\n2.000000,-1.000000,126.094864,738.009827,181.466293,87.135918,1.666209,1.000000,5.000000\n3.000000,-1.000000,153.354263,485.631714,39.823250,18.820545,1.098871,1.000000,11.000000\n3.000000,-1.000000,272.621582,167.880554,38.254017,19.660202,1.134259,1.000000,11.000000\n3.000000,-1.000000,271.414368,315.379028,35.843273,18.008007,1.045367,1.000000,11.000000\n3.000000,-1.000000,179.891129,215.998947,28.073294,16.153879,1.218575,1.000000,11.000000\n3.000000,-1.000000,612.677368,235.976746,188.266068,133.184265,0.068103,1.000000,15.000000\n3.000000,-1.000000,876.424805,318.980316,180.152557,86.206703,1.647136,1.000000,5.000000\n3.000000,-1.000000,959.818237,658.513184,182.222000,89.187683,1.635166,1.000000,5.000000\n3.000000,-1.000000,824.976013,616.193665,181.499878,86.092148,1.635439,1.000000,5.000000\n3.000000,-1.000000,688.119019,605.645508,181.079346,86.205467,1.646790,1.000000,5.000000\n3.000000,-1.000000,549.349731,622.570740,181.498550,86.200027,1.641251,1.000000,5.000000\n3.000000,-1.000000,411.977600,613.015381,180.389969,87.254730,1.641873,1.000000,5.000000\n3.000000,-1.000000,263.892273,751.315063,181.527618,85.258316,1.641561,1.000000,5.000000\n3.000000,-1.000000,128.368088,741.847290,181.466324,87.135925,1.656236,1.000000,5.000000\n4.000000,-1.000000,153.109131,489.209839,39.823277,18.820547,1.088897,1.000000,11.000000\n4.000000,-1.000000,269.201538,170.285019,38.254009,19.660219,1.124286,1.000000,11.000000\n4.000000,-1.000000,269.465424,317.788239,35.843285,18.008017,1.035393,1.000000,11.000000\n4.000000,-1.000000,176.955582,219.325806,28.073282,16.153877,1.208601,1.000000,11.000000\n4.000000,-1.000000,609.919495,234.986389,188.266052,133.184265,0.058130,1.000000,15.000000\n4.000000,-1.000000,874.481689,315.355499,180.152573,86.206734,1.637163,1.000000,5.000000\n4.000000,-1.000000,961.257202,654.039673,182.222076,89.187660,1.625193,1.000000,5.000000\n4.000000,-1.000000,825.999512,613.067017,181.499954,86.092110,1.625466,1.000000,5.000000\n4.000000,-1.000000,689.044189,603.884277,181.079315,86.205429,1.636817,1.000000,5.000000\n4.000000,-1.000000,550.450562,622.192749,181.498596,86.200027,1.631278,1.000000,5.000000\n4.000000,-1.000000,412.990021,614.007874,180.389969,87.254738,1.631900,1.000000,5.000000\n4.000000,-1.000000,266.291290,753.777588,181.527588,85.258301,1.631587,1.000000,5.000000\n4.000000,-1.000000,130.679459,745.661865,181.466293,87.135933,1.646262,1.000000,5.000000\n5.000000,-1.000000,152.899673,492.790283,39.823284,18.820551,1.078924,1.000000,11.000000\n5.000000,-1.000000,265.805603,172.723495,38.254028,19.660212,1.114313,1.000000,11.000000\n5.000000,-1.000000,267.540558,320.216705,35.843281,18.008018,1.025420,1.000000,11.000000\n5.000000,-1.000000,174.053375,222.681808,28.073277,16.153883,1.198628,1.000000,11.000000\n5.000000,-1.000000,607.151978,234.023605,188.266052,133.184280,0.048157,1.000000,15.000000\n5.000000,-1.000000,872.502563,311.750183,180.152557,86.206749,1.627190,1.000000,5.000000\n5.000000,-1.000000,962.651489,649.552185,182.221985,89.187698,1.615219,1.000000,5.000000\n5.000000,-1.000000,826.991882,609.930542,181.499893,86.092186,1.615492,1.000000,5.000000\n5.000000,-1.000000,689.951721,602.114075,181.079391,86.205414,1.626843,1.000000,5.000000\n5.000000,-1.000000,551.547607,621.803833,181.498566,86.200043,1.621305,1.000000,5.000000\n5.000000,-1.000000,414.012268,614.990234,180.389954,87.254707,1.621927,1.000000,5.000000\n5.000000,-1.000000,268.714844,756.216064,181.527679,85.258308,1.621614,1.000000,5.000000\n5.000000,-1.000000,133.028824,749.453308,181.466339,87.135925,1.636290,1.000000,5.000000\n6.000000,-1.000000,152.725952,496.372589,39.823231,18.820564,1.068950,1.000000,11.000000\n6.000000,-1.000000,262.434204,175.195709,38.254025,19.660210,1.104339,1.000000,11.000000\n6.000000,-1.000000,265.640076,322.664246,35.843285,18.008022,1.015446,1.000000,11.000000\n6.000000,-1.000000,171.184753,226.066589,28.073294,16.153879,1.188655,1.000000,11.000000\n6.000000,-1.000000,604.335693,233.139755,188.266052,133.184280,0.037623,1.000000,15.000000\n6.000000,-1.000000,870.487427,308.164795,180.152557,86.206741,1.617216,1.000000,5.000000\n6.000000,-1.000000,964.000854,645.050903,182.222031,89.187683,1.605246,1.000000,5.000000\n6.000000,-1.000000,827.952820,606.784180,181.499878,86.092186,1.605519,1.000000,5.000000\n6.000000,-1.000000,690.841553,600.334839,181.079346,86.205406,1.616870,1.000000,5.000000\n6.000000,-1.000000,552.640747,621.403992,181.498596,86.200035,1.611331,1.000000,5.000000\n6.000000,-1.000000,415.044250,615.962341,180.389954,87.254715,1.611953,1.000000,5.000000\n6.000000,-1.000000,271.162567,758.630249,181.527649,85.258324,1.611641,1.000000,5.000000\n6.000000,-1.000000,135.415802,753.221008,181.466293,87.135910,1.626316,1.000000,5.000000\n7.000000,-1.000000,152.587982,499.956421,39.823231,18.820559,1.058977,1.000000,11.000000\n7.000000,-1.000000,259.087616,177.701416,38.254025,19.660198,1.094366,1.000000,11.000000\n7.000000,-1.000000,263.764038,325.130707,35.843292,18.008028,1.005473,1.000000,11.000000\n7.000000,-1.000000,168.350067,229.479828,28.073286,16.153873,1.178681,1.000000,11.000000\n7.000000,-1.000000,601.588745,232.181091,188.266068,133.184280,0.028210,1.000000,15.000000\n7.000000,-1.000000,868.436646,304.599670,180.152588,86.206741,1.607243,1.000000,5.000000\n7.000000,-1.000000,965.305359,640.536377,182.222000,89.187691,1.595273,1.000000,5.000000\n7.000000,-1.000000,828.882507,603.628418,181.499908,86.092163,1.595546,1.000000,5.000000\n7.000000,-1.000000,691.713684,598.546814,181.079330,86.205467,1.606897,1.000000,5.000000\n7.000000,-1.000000,553.729736,620.993103,181.498611,86.200012,1.601358,1.000000,5.000000\n7.000000,-1.000000,416.085938,616.924133,180.389954,87.254707,1.601980,1.000000,5.000000\n7.000000,-1.000000,273.634186,761.019836,181.527664,85.258301,1.601667,1.000000,5.000000\n7.000000,-1.000000,137.840225,756.964783,181.466293,87.135918,1.616342,1.000000,5.000000\n8.000000,-1.000000,152.485748,503.541504,39.823231,18.820560,1.049003,1.000000,11.000000\n8.000000,-1.000000,255.766220,180.240341,38.254013,19.660208,1.084392,1.000000,11.000000\n8.000000,-1.000000,261.912720,327.615662,35.843262,18.008011,0.995499,1.000000,11.000000\n8.000000,-1.000000,165.549530,232.921143,28.073284,16.153868,1.168708,1.000000,11.000000\n8.000000,-1.000000,598.755432,231.353500,188.266006,133.184296,0.017677,1.000000,15.000000\n8.000000,-1.000000,866.350464,301.055176,180.152557,86.206757,1.597270,1.000000,5.000000\n8.000000,-1.000000,966.564758,636.009155,182.222000,89.187630,1.585299,1.000000,5.000000\n8.000000,-1.000000,829.780579,600.463562,181.499908,86.092171,1.585572,1.000000,5.000000\n8.000000,-1.000000,692.567871,596.750244,181.079330,86.205444,1.596924,1.000000,5.000000\n8.000000,-1.000000,554.814697,620.571594,181.498550,86.199997,1.591385,1.000000,5.000000\n8.000000,-1.000000,417.137146,617.875488,180.390015,87.254715,1.592007,1.000000,5.000000\n8.000000,-1.000000,276.129547,763.384766,181.527618,85.258316,1.591694,1.000000,5.000000\n8.000000,-1.000000,140.301865,760.684021,181.466278,87.135925,1.606369,1.000000,5.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1053__1024__0___90/gt/gt.txt",
    "content": "1.000000,1.000000,137.380234,456.461578,33.107666,44.044189,1.000000,11.000000,1.000000\n1.000000,2.000000,263.443390,141.705688,31.142944,42.937714,1.000000,11.000000,1.000000\n1.000000,3.000000,260.242035,290.579224,31.282562,40.080750,1.000000,11.000000,1.000000\n1.000000,4.000000,174.717529,193.530258,23.286865,31.807068,1.000000,11.000000,1.000000\n1.000000,5.000000,518.538452,166.455719,199.174194,146.195862,1.000000,15.000000,1.000000\n1.000000,6.000000,831.680542,232.484375,100.016418,187.504700,1.000000,5.000000,1.000000\n1.000000,7.000000,904.832947,573.384399,104.082458,188.574341,1.000000,5.000000,1.000000\n1.000000,8.000000,772.276062,528.697876,101.118896,187.504639,1.000000,5.000000,1.000000\n1.000000,9.000000,634.709717,514.887268,102.013062,188.504517,1.000000,5.000000,1.000000\n1.000000,10.000000,496.130341,529.023987,102.048920,188.539429,1.000000,5.000000,1.000000\n1.000000,11.000000,358.529144,517.213074,102.944092,187.574463,1.000000,5.000000,1.000000\n1.000000,12.000000,208.696213,652.066589,101.014206,188.504578,1.000000,5.000000,1.000000\n1.000000,13.000000,70.989471,639.360535,104.047363,188.468628,1.000000,5.000000,1.000000\n2.000000,1.000000,136.939072,460.037506,33.367035,44.037415,1.000000,11.000000,1.000000\n2.000000,2.000000,259.856506,144.030075,31.391754,42.960495,1.000000,11.000000,1.000000\n2.000000,3.000000,258.141113,292.958008,31.491455,40.062805,1.000000,11.000000,1.000000\n2.000000,4.000000,171.613083,196.768250,23.493408,31.866440,1.000000,11.000000,1.000000\n2.000000,5.000000,516.384888,166.282700,198.006226,144.443253,1.000000,15.000000,1.000000\n2.000000,6.000000,830.668274,229.167664,98.309875,186.812225,1.000000,5.000000,1.000000\n2.000000,7.000000,907.215515,569.281311,102.357178,187.862244,1.000000,5.000000,1.000000\n2.000000,8.000000,774.229858,525.928650,99.382812,186.812195,1.000000,5.000000,1.000000\n2.000000,9.000000,636.522644,513.491028,100.307129,187.812378,1.000000,5.000000,1.000000\n2.000000,10.000000,498.091522,529.019104,100.332977,187.837280,1.000000,5.000000,1.000000\n2.000000,11.000000,360.359406,518.581726,101.258392,186.862122,1.000000,5.000000,1.000000\n2.000000,12.000000,211.888824,654.922546,99.307983,187.812378,1.000000,5.000000,1.000000\n2.000000,13.000000,74.081108,643.559875,102.332069,187.786438,1.000000,5.000000,1.000000\n3.000000,1.000000,136.535217,463.618622,33.623108,44.026215,1.000000,11.000000,1.000000\n3.000000,2.000000,256.294708,146.391052,31.637421,42.979019,1.000000,11.000000,1.000000\n3.000000,3.000000,256.065430,295.358612,31.697235,40.040863,1.000000,11.000000,1.000000\n3.000000,4.000000,168.542496,200.037582,23.697617,31.922668,1.000000,11.000000,1.000000\n3.000000,5.000000,514.230896,166.144073,196.818542,142.676270,1.000000,15.000000,1.000000\n3.000000,6.000000,829.624329,225.879089,96.593567,186.101166,1.000000,5.000000,1.000000\n3.000000,7.000000,909.558777,565.172546,100.621704,187.131409,1.000000,5.000000,1.000000\n3.000000,8.000000,776.157593,523.158020,97.636719,186.101135,1.000000,5.000000,1.000000\n3.000000,9.000000,638.323181,512.094666,98.591248,187.101501,1.000000,5.000000,1.000000\n3.000000,10.000000,500.054077,529.012512,98.607117,187.116455,1.000000,5.000000,1.000000\n3.000000,11.000000,362.204773,519.949829,99.562622,186.131104,1.000000,5.000000,1.000000\n3.000000,12.000000,215.111282,657.764282,97.591873,187.101501,1.000000,5.000000,1.000000\n3.000000,13.000000,77.216301,647.746155,100.606590,187.085571,1.000000,5.000000,1.000000\n4.000000,1.000000,136.168716,467.204529,33.875809,44.010681,1.000000,11.000000,1.000000\n4.000000,2.000000,252.758331,148.788406,31.879944,42.993256,1.000000,11.000000,1.000000\n4.000000,3.000000,254.015182,297.780731,31.899887,40.014954,1.000000,11.000000,1.000000\n4.000000,4.000000,165.506073,203.337967,23.899460,31.975693,1.000000,11.000000,1.000000\n4.000000,5.000000,512.076660,166.039856,195.611267,140.895081,1.000000,15.000000,1.000000\n4.000000,6.000000,828.548767,222.618973,94.867676,185.371628,1.000000,5.000000,1.000000\n4.000000,7.000000,911.862488,561.058472,98.876282,186.382019,1.000000,5.000000,1.000000\n4.000000,8.000000,778.059021,520.386292,95.881042,185.371582,1.000000,5.000000,1.000000\n4.000000,9.000000,640.111206,510.698273,96.865479,186.372040,1.000000,5.000000,1.000000\n4.000000,10.000000,502.017792,529.004211,96.871490,186.377075,1.000000,5.000000,1.000000\n4.000000,11.000000,364.065033,521.317078,97.856964,185.381592,1.000000,5.000000,1.000000\n4.000000,12.000000,218.363281,660.591553,95.866058,186.372009,1.000000,5.000000,1.000000\n4.000000,13.000000,80.394737,651.918945,98.871101,186.366089,1.000000,5.000000,1.000000\n5.000000,1.000000,135.839600,470.794891,34.125137,43.990753,1.000000,11.000000,1.000000\n5.000000,2.000000,249.247757,151.221878,32.119308,43.003235,1.000000,11.000000,1.000000\n5.000000,3.000000,251.990616,300.224182,32.099350,39.985046,1.000000,11.000000,1.000000\n5.000000,4.000000,162.504105,206.669037,24.098938,32.025543,1.000000,11.000000,1.000000\n5.000000,5.000000,509.922424,165.970032,194.384583,139.099915,1.000000,15.000000,1.000000\n5.000000,6.000000,827.441772,219.387634,93.132324,184.623627,1.000000,5.000000,1.000000\n5.000000,7.000000,914.126404,556.939514,97.120972,185.614075,1.000000,5.000000,1.000000\n5.000000,8.000000,779.933960,517.613708,94.115784,184.623596,1.000000,5.000000,1.000000\n5.000000,9.000000,641.886475,509.302002,95.130127,185.624084,1.000000,5.000000,1.000000\n5.000000,10.000000,503.982544,528.994263,95.126160,185.619080,1.000000,5.000000,1.000000\n5.000000,11.000000,365.940033,522.683411,96.141541,184.613647,1.000000,5.000000,1.000000\n5.000000,12.000000,221.644485,663.403992,94.130722,185.624084,1.000000,5.000000,1.000000\n5.000000,13.000000,83.616104,656.077759,97.125793,185.628113,1.000000,5.000000,1.000000\n6.000000,1.000000,135.547882,474.389374,34.371094,43.966400,1.000000,11.000000,1.000000\n6.000000,2.000000,245.763306,153.691238,32.355469,43.008926,1.000000,11.000000,1.000000\n6.000000,3.000000,249.991898,302.688690,32.295639,39.951172,1.000000,11.000000,1.000000\n6.000000,4.000000,159.536911,210.030472,24.296005,32.072235,1.000000,11.000000,1.000000\n6.000000,5.000000,507.768402,165.934647,193.138519,137.290878,1.000000,15.000000,1.000000\n6.000000,6.000000,826.303345,216.185394,91.387695,183.857269,1.000000,5.000000,1.000000\n6.000000,7.000000,916.350342,552.816101,95.356018,184.827637,1.000000,5.000000,1.000000\n6.000000,8.000000,781.782288,514.840576,92.341125,183.857300,1.000000,5.000000,1.000000\n6.000000,9.000000,643.648804,507.906036,93.385315,184.857574,1.000000,5.000000,1.000000\n6.000000,10.000000,505.948059,528.982605,93.371399,184.842651,1.000000,5.000000,1.000000\n6.000000,11.000000,367.829529,524.048706,94.416565,183.827332,1.000000,5.000000,1.000000\n6.000000,12.000000,224.954575,666.201416,92.386002,184.857605,1.000000,5.000000,1.000000\n6.000000,13.000000,86.880089,660.222290,95.370811,184.871582,1.000000,5.000000,1.000000\n7.000000,1.000000,135.293625,477.987579,34.613617,43.937714,1.000000,11.000000,1.000000\n7.000000,2.000000,242.305344,156.196243,32.588394,43.010330,1.000000,11.000000,1.000000\n7.000000,3.000000,248.019257,305.174011,32.488678,39.913330,1.000000,11.000000,1.000000\n7.000000,4.000000,156.604767,213.421951,24.490677,32.115707,1.000000,11.000000,1.000000\n7.000000,5.000000,505.614807,165.933670,191.873230,135.468216,1.000000,15.000000,1.000000\n7.000000,6.000000,825.133667,213.012589,89.634033,183.072617,1.000000,5.000000,1.000000\n7.000000,7.000000,918.534058,548.688599,93.581604,184.022888,1.000000,5.000000,1.000000\n7.000000,8.000000,783.603821,512.067139,90.557312,183.072693,1.000000,5.000000,1.000000\n7.000000,9.000000,645.398010,506.510437,91.631226,184.072754,1.000000,5.000000,1.000000\n7.000000,10.000000,507.914215,528.969238,91.607269,184.047852,1.000000,5.000000,1.000000\n7.000000,11.000000,369.733368,525.412781,92.682220,183.022766,1.000000,5.000000,1.000000\n7.000000,12.000000,228.293213,668.983459,90.632080,184.072754,1.000000,5.000000,1.000000\n7.000000,13.000000,90.186348,664.352112,93.606346,184.096680,1.000000,5.000000,1.000000\n8.000000,1.000000,135.076828,481.589172,34.852707,43.904663,1.000000,11.000000,1.000000\n8.000000,2.000000,238.874207,158.736633,32.818085,43.007462,1.000000,11.000000,1.000000\n8.000000,3.000000,246.072861,307.679932,32.678513,39.871460,1.000000,11.000000,1.000000\n8.000000,4.000000,153.707977,216.843140,24.682892,32.155991,1.000000,11.000000,1.000000\n8.000000,5.000000,503.461853,165.967117,190.588928,133.632065,1.000000,15.000000,1.000000\n8.000000,6.000000,823.932861,209.869522,87.871399,182.269760,1.000000,5.000000,1.000000\n8.000000,7.000000,920.677368,544.557434,91.797791,183.199829,1.000000,5.000000,1.000000\n8.000000,8.000000,785.398254,509.293701,88.764526,182.269836,1.000000,5.000000,1.000000\n8.000000,9.000000,647.133972,505.115417,89.868042,183.269592,1.000000,5.000000,1.000000\n8.000000,10.000000,509.880737,528.954224,89.834106,183.234680,1.000000,5.000000,1.000000\n8.000000,11.000000,371.651367,526.775513,90.938629,182.200012,1.000000,5.000000,1.000000\n8.000000,12.000000,231.660065,671.749939,88.869171,183.269531,1.000000,5.000000,1.000000\n8.000000,13.000000,93.534569,668.466736,91.832573,183.303467,1.000000,5.000000,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1053__1024__0___90/gt/gt_obb.txt",
    "content": "1.000000,1.000000,153.951538,478.483704,39.823242,18.820560,1.118817,1.000000,11.000000,1.000000\n1.000000,2.000000,279.532776,163.174561,38.254032,19.660196,1.154206,1.000000,11.000000,1.000000\n1.000000,3.000000,275.383942,310.619598,35.843254,18.008017,1.065313,1.000000,11.000000,1.000000\n1.000000,4.000000,185.861038,209.433807,28.073294,16.153883,1.238521,1.000000,11.000000,1.000000\n1.000000,5.000000,618.162720,238.039719,188.266068,133.184280,0.088050,1.000000,15.000000,1.000000\n1.000000,6.000000,880.202148,326.287292,180.152557,86.206772,1.667083,1.000000,5.000000,1.000000\n1.000000,7.000000,956.806946,667.415894,182.222031,89.187691,1.655113,1.000000,5.000000,1.000000\n1.000000,8.000000,822.835571,622.415283,181.499863,86.092102,1.655385,1.000000,5.000000,1.000000\n1.000000,9.000000,686.216064,609.139526,181.079330,86.205437,1.666737,1.000000,5.000000,1.000000\n1.000000,10.000000,547.136902,623.293762,181.498550,86.200035,1.661198,1.000000,5.000000,1.000000\n1.000000,11.000000,409.982697,611.000305,180.389938,87.254707,1.661820,1.000000,5.000000,1.000000\n1.000000,12.000000,259.168396,746.318848,181.527664,85.258308,1.661507,1.000000,5.000000,1.000000\n1.000000,13.000000,123.860016,734.150024,181.466293,87.135933,1.676182,1.000000,5.000000,1.000000\n2.000000,1.000000,153.635056,482.056213,39.823265,18.820543,1.108844,1.000000,11.000000,1.000000\n2.000000,2.000000,276.065430,165.510330,38.254009,19.660208,1.144233,1.000000,11.000000,1.000000\n2.000000,3.000000,273.387268,312.989410,35.843277,18.008005,1.055340,1.000000,11.000000,1.000000\n2.000000,4.000000,182.859695,212.701462,28.073280,16.153887,1.228547,1.000000,11.000000,1.000000\n2.000000,5.000000,615.425110,236.994537,188.266037,133.184250,0.078077,1.000000,15.000000,1.000000\n2.000000,6.000000,878.331665,322.624359,180.152542,86.206734,1.657109,1.000000,5.000000,1.000000\n2.000000,7.000000,958.334900,662.972046,182.222015,89.187706,1.645139,1.000000,5.000000,1.000000\n2.000000,8.000000,823.921326,619.309814,181.499939,86.092133,1.645412,1.000000,5.000000,1.000000\n2.000000,9.000000,687.176270,607.397278,181.079376,86.205421,1.656764,1.000000,5.000000,1.000000\n2.000000,10.000000,548.245117,622.937744,181.498566,86.200020,1.651224,1.000000,5.000000,1.000000\n2.000000,11.000000,410.975128,612.012817,180.389999,87.254738,1.651847,1.000000,5.000000,1.000000\n2.000000,12.000000,261.517883,748.828735,181.527634,85.258308,1.651534,1.000000,5.000000,1.000000\n2.000000,13.000000,126.094864,738.009827,181.466293,87.135918,1.666209,1.000000,5.000000,1.000000\n3.000000,1.000000,153.354263,485.631714,39.823250,18.820545,1.098871,1.000000,11.000000,1.000000\n3.000000,2.000000,272.621582,167.880554,38.254017,19.660202,1.134259,1.000000,11.000000,1.000000\n3.000000,3.000000,271.414368,315.379028,35.843273,18.008007,1.045367,1.000000,11.000000,1.000000\n3.000000,4.000000,179.891129,215.998947,28.073294,16.153879,1.218575,1.000000,11.000000,1.000000\n3.000000,5.000000,612.677368,235.976746,188.266068,133.184265,0.068103,1.000000,15.000000,1.000000\n3.000000,6.000000,876.424805,318.980316,180.152557,86.206703,1.647136,1.000000,5.000000,1.000000\n3.000000,7.000000,959.818237,658.513184,182.222000,89.187683,1.635166,1.000000,5.000000,1.000000\n3.000000,8.000000,824.976013,616.193665,181.499878,86.092148,1.635439,1.000000,5.000000,1.000000\n3.000000,9.000000,688.119019,605.645508,181.079346,86.205467,1.646790,1.000000,5.000000,1.000000\n3.000000,10.000000,549.349731,622.570740,181.498550,86.200027,1.641251,1.000000,5.000000,1.000000\n3.000000,11.000000,411.977600,613.015381,180.389969,87.254730,1.641873,1.000000,5.000000,1.000000\n3.000000,12.000000,263.892273,751.315063,181.527618,85.258316,1.641561,1.000000,5.000000,1.000000\n3.000000,13.000000,128.368088,741.847290,181.466324,87.135925,1.656236,1.000000,5.000000,1.000000\n4.000000,1.000000,153.109131,489.209839,39.823277,18.820547,1.088897,1.000000,11.000000,1.000000\n4.000000,2.000000,269.201538,170.285019,38.254009,19.660219,1.124286,1.000000,11.000000,1.000000\n4.000000,3.000000,269.465424,317.788239,35.843285,18.008017,1.035393,1.000000,11.000000,1.000000\n4.000000,4.000000,176.955582,219.325806,28.073282,16.153877,1.208601,1.000000,11.000000,1.000000\n4.000000,5.000000,609.919495,234.986389,188.266052,133.184265,0.058130,1.000000,15.000000,1.000000\n4.000000,6.000000,874.481689,315.355499,180.152573,86.206734,1.637163,1.000000,5.000000,1.000000\n4.000000,7.000000,961.257202,654.039673,182.222076,89.187660,1.625193,1.000000,5.000000,1.000000\n4.000000,8.000000,825.999512,613.067017,181.499954,86.092110,1.625466,1.000000,5.000000,1.000000\n4.000000,9.000000,689.044189,603.884277,181.079315,86.205429,1.636817,1.000000,5.000000,1.000000\n4.000000,10.000000,550.450562,622.192749,181.498596,86.200027,1.631278,1.000000,5.000000,1.000000\n4.000000,11.000000,412.990021,614.007874,180.389969,87.254738,1.631900,1.000000,5.000000,1.000000\n4.000000,12.000000,266.291290,753.777588,181.527588,85.258301,1.631587,1.000000,5.000000,1.000000\n4.000000,13.000000,130.679459,745.661865,181.466293,87.135933,1.646262,1.000000,5.000000,1.000000\n5.000000,1.000000,152.899673,492.790283,39.823284,18.820551,1.078924,1.000000,11.000000,1.000000\n5.000000,2.000000,265.805603,172.723495,38.254028,19.660212,1.114313,1.000000,11.000000,1.000000\n5.000000,3.000000,267.540558,320.216705,35.843281,18.008018,1.025420,1.000000,11.000000,1.000000\n5.000000,4.000000,174.053375,222.681808,28.073277,16.153883,1.198628,1.000000,11.000000,1.000000\n5.000000,5.000000,607.151978,234.023605,188.266052,133.184280,0.048157,1.000000,15.000000,1.000000\n5.000000,6.000000,872.502563,311.750183,180.152557,86.206749,1.627190,1.000000,5.000000,1.000000\n5.000000,7.000000,962.651489,649.552185,182.221985,89.187698,1.615219,1.000000,5.000000,1.000000\n5.000000,8.000000,826.991882,609.930542,181.499893,86.092186,1.615492,1.000000,5.000000,1.000000\n5.000000,9.000000,689.951721,602.114075,181.079391,86.205414,1.626843,1.000000,5.000000,1.000000\n5.000000,10.000000,551.547607,621.803833,181.498566,86.200043,1.621305,1.000000,5.000000,1.000000\n5.000000,11.000000,414.012268,614.990234,180.389954,87.254707,1.621927,1.000000,5.000000,1.000000\n5.000000,12.000000,268.714844,756.216064,181.527679,85.258308,1.621614,1.000000,5.000000,1.000000\n5.000000,13.000000,133.028824,749.453308,181.466339,87.135925,1.636290,1.000000,5.000000,1.000000\n6.000000,1.000000,152.725952,496.372589,39.823231,18.820564,1.068950,1.000000,11.000000,1.000000\n6.000000,2.000000,262.434204,175.195709,38.254025,19.660210,1.104339,1.000000,11.000000,1.000000\n6.000000,3.000000,265.640076,322.664246,35.843285,18.008022,1.015446,1.000000,11.000000,1.000000\n6.000000,4.000000,171.184753,226.066589,28.073294,16.153879,1.188655,1.000000,11.000000,1.000000\n6.000000,5.000000,604.335693,233.139755,188.266052,133.184280,0.037623,1.000000,15.000000,1.000000\n6.000000,6.000000,870.487427,308.164795,180.152557,86.206741,1.617216,1.000000,5.000000,1.000000\n6.000000,7.000000,964.000854,645.050903,182.222031,89.187683,1.605246,1.000000,5.000000,1.000000\n6.000000,8.000000,827.952820,606.784180,181.499878,86.092186,1.605519,1.000000,5.000000,1.000000\n6.000000,9.000000,690.841553,600.334839,181.079346,86.205406,1.616870,1.000000,5.000000,1.000000\n6.000000,10.000000,552.640747,621.403992,181.498596,86.200035,1.611331,1.000000,5.000000,1.000000\n6.000000,11.000000,415.044250,615.962341,180.389954,87.254715,1.611953,1.000000,5.000000,1.000000\n6.000000,12.000000,271.162567,758.630249,181.527649,85.258324,1.611641,1.000000,5.000000,1.000000\n6.000000,13.000000,135.415802,753.221008,181.466293,87.135910,1.626316,1.000000,5.000000,1.000000\n7.000000,1.000000,152.587982,499.956421,39.823231,18.820559,1.058977,1.000000,11.000000,1.000000\n7.000000,2.000000,259.087616,177.701416,38.254025,19.660198,1.094366,1.000000,11.000000,1.000000\n7.000000,3.000000,263.764038,325.130707,35.843292,18.008028,1.005473,1.000000,11.000000,1.000000\n7.000000,4.000000,168.350067,229.479828,28.073286,16.153873,1.178681,1.000000,11.000000,1.000000\n7.000000,5.000000,601.588745,232.181091,188.266068,133.184280,0.028210,1.000000,15.000000,1.000000\n7.000000,6.000000,868.436646,304.599670,180.152588,86.206741,1.607243,1.000000,5.000000,1.000000\n7.000000,7.000000,965.305359,640.536377,182.222000,89.187691,1.595273,1.000000,5.000000,1.000000\n7.000000,8.000000,828.882507,603.628418,181.499908,86.092163,1.595546,1.000000,5.000000,1.000000\n7.000000,9.000000,691.713684,598.546814,181.079330,86.205467,1.606897,1.000000,5.000000,1.000000\n7.000000,10.000000,553.729736,620.993103,181.498611,86.200012,1.601358,1.000000,5.000000,1.000000\n7.000000,11.000000,416.085938,616.924133,180.389954,87.254707,1.601980,1.000000,5.000000,1.000000\n7.000000,12.000000,273.634186,761.019836,181.527664,85.258301,1.601667,1.000000,5.000000,1.000000\n7.000000,13.000000,137.840225,756.964783,181.466293,87.135918,1.616342,1.000000,5.000000,1.000000\n8.000000,1.000000,152.485748,503.541504,39.823231,18.820560,1.049003,1.000000,11.000000,1.000000\n8.000000,2.000000,255.766220,180.240341,38.254013,19.660208,1.084392,1.000000,11.000000,1.000000\n8.000000,3.000000,261.912720,327.615662,35.843262,18.008011,0.995499,1.000000,11.000000,1.000000\n8.000000,4.000000,165.549530,232.921143,28.073284,16.153868,1.168708,1.000000,11.000000,1.000000\n8.000000,5.000000,598.755432,231.353500,188.266006,133.184296,0.017677,1.000000,15.000000,1.000000\n8.000000,6.000000,866.350464,301.055176,180.152557,86.206757,1.597270,1.000000,5.000000,1.000000\n8.000000,7.000000,966.564758,636.009155,182.222000,89.187630,1.585299,1.000000,5.000000,1.000000\n8.000000,8.000000,829.780579,600.463562,181.499908,86.092171,1.585572,1.000000,5.000000,1.000000\n8.000000,9.000000,692.567871,596.750244,181.079330,86.205444,1.596924,1.000000,5.000000,1.000000\n8.000000,10.000000,554.814697,620.571594,181.498550,86.199997,1.591385,1.000000,5.000000,1.000000\n8.000000,11.000000,417.137146,617.875488,180.390015,87.254715,1.592007,1.000000,5.000000,1.000000\n8.000000,12.000000,276.129547,763.384766,181.527618,85.258316,1.591694,1.000000,5.000000,1.000000\n8.000000,13.000000,140.301865,760.684021,181.466278,87.135925,1.606369,1.000000,5.000000,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1053__1024__0___90/seqinfo.ini",
    "content": "[Sequence]\nname = P1053__1024__0___90\nimdir = img1\nframerate = 8\nseqlength = 8\nimwidth = 1024\nimheight = 1024\nimext = .jpg\n\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1142__1024__0___824/det/det.txt",
    "content": "1.000000,-1.000000,642.665894,287.069977,380.334106,429.791718,1.000000\n2.000000,-1.000000,642.205933,283.021088,380.794067,431.047699,1.000000\n3.000000,-1.000000,641.732971,278.994995,381.267029,432.260803,1.000000\n4.000000,-1.000000,641.247192,274.992065,381.752808,433.430969,1.000000\n5.000000,-1.000000,640.748535,271.012726,382.251465,434.557953,1.000000\n6.000000,-1.000000,640.237061,267.057343,382.762939,435.641754,1.000000\n7.000000,-1.000000,639.712769,263.126312,383.287231,436.682220,1.000000\n8.000000,-1.000000,639.175842,259.220062,383.824158,437.679169,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1142__1024__0___824/det/det_obb.txt",
    "content": "1.000000,-1.000000,855.059509,501.965851,335.273407,297.854279,2.586787,1.000000,1.000000\n2.000000,-1.000000,854.942261,498.544922,335.273407,297.854248,2.576813,1.000000,1.000000\n3.000000,-1.000000,854.791138,495.125366,335.273346,297.854279,2.566840,1.000000,1.000000\n4.000000,-1.000000,854.605774,491.707550,335.273407,297.854340,2.556867,1.000000,1.000000\n5.000000,-1.000000,854.386475,488.291687,335.273376,297.854279,2.546893,1.000000,1.000000\n6.000000,-1.000000,854.132935,484.878235,335.273407,297.854279,2.536920,1.000000,1.000000\n7.000000,-1.000000,853.845398,481.467407,335.273407,297.854340,2.526947,1.000000,1.000000\n8.000000,-1.000000,853.524048,478.059601,335.273407,297.854248,2.516973,1.000000,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1142__1024__0___824/gt/gt.txt",
    "content": "1.000000,1.000000,642.665894,287.069977,380.334106,429.791718,1.000000,1.000000,1.000000\n2.000000,1.000000,642.205933,283.021088,380.794067,431.047699,1.000000,1.000000,1.000000\n3.000000,1.000000,641.732971,278.994995,381.267029,432.260803,1.000000,1.000000,1.000000\n4.000000,1.000000,641.247192,274.992065,381.752808,433.430969,1.000000,1.000000,1.000000\n5.000000,1.000000,640.748535,271.012726,382.251465,434.557953,1.000000,1.000000,1.000000\n6.000000,1.000000,640.237061,267.057343,382.762939,435.641754,1.000000,1.000000,1.000000\n7.000000,1.000000,639.712769,263.126312,383.287231,436.682220,1.000000,1.000000,1.000000\n8.000000,1.000000,639.175842,259.220062,383.824158,437.679169,1.000000,1.000000,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1142__1024__0___824/gt/gt_obb.txt",
    "content": "1.000000,1.000000,855.059509,501.965851,335.273407,297.854279,2.586787,1.000000,1.000000,1.000000\n2.000000,1.000000,854.942261,498.544922,335.273407,297.854248,2.576813,1.000000,1.000000,1.000000\n3.000000,1.000000,854.791138,495.125366,335.273346,297.854279,2.566840,1.000000,1.000000,1.000000\n4.000000,1.000000,854.605774,491.707550,335.273407,297.854340,2.556867,1.000000,1.000000,1.000000\n5.000000,1.000000,854.386475,488.291687,335.273376,297.854279,2.546893,1.000000,1.000000,1.000000\n6.000000,1.000000,854.132935,484.878235,335.273407,297.854279,2.536920,1.000000,1.000000,1.000000\n7.000000,1.000000,853.845398,481.467407,335.273407,297.854340,2.526947,1.000000,1.000000,1.000000\n8.000000,1.000000,853.524048,478.059601,335.273407,297.854248,2.516973,1.000000,1.000000,1.000000\n"
  },
  {
    "path": "assets/DOTA8-MOT/train/P1142__1024__0___824/seqinfo.ini",
    "content": "[Sequence]\nname = P1142__1024__0___824\nimdir = img1\nframerate = 8\nseqlength = 8\nimwidth = 1024\nimheight = 1024\nimext = .jpg\n\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-02-FRCNN/det/det.txt",
    "content": "69,-1,912.8,482.9,97.6,112.6,1\n69,-1,835.8,472.2,53.7,77,1\n69,-1,374.4,447.1,43.4,105.1,1\n69,-1,1261,447.7,34.9,100.6,1\n69,-1,419,458.4,42.7,85.3,1\n69,-1,501.4,440.4,129.3,324,1\n69,-1,1543.7,429.8,52,127.2,1\n69,-1,1088.7,482.7,35.6,117.1,1\n69,-1,1004.6,441.5,42.1,112,1\n69,-1,619.2,441.2,96.2,290,1\n69,-1,1052.2,482.2,39.6,112.4,1\n69,-1,796.3,475.5,56.9,62.8,1\n69,-1,696.6,454.2,76.1,219.9,0.998\n69,-1,1095.8,442.2,39.7,108.8,0.998\n69,-1,475.5,465.6,33.4,97.9,0.996\n517,-1,382.8,463.7,51.1,115.9,1\n517,-1,738.7,437.9,107.2,259.8,1\n517,-1,916,442.8,142.5,282,1\n517,-1,835.9,473.4,53.6,75.5,1\n517,-1,1556.7,370.3,307.6,710.7,1\n517,-1,689.5,448.5,39.9,124.9,1\n517,-1,1330.7,427.2,247.2,644,1\n517,-1,572.5,458,32.7,81.8,1\n517,-1,1179.3,447.9,35.3,86.5,1\n517,-1,1048.5,436.3,101.7,243.9,1\n517,-1,643.9,453.7,33.3,96.6,1\n517,-1,539.9,462.1,29.1,74.9,0.993\n517,-1,459.4,460.2,25.8,73.9,0.979\n517,-1,412.1,471.5,48.5,97.6,0.421\n436,-1,916.6,483.9,92.1,110.8,1\n436,-1,543.2,440,145.2,314.8,1\n436,-1,421.5,435.7,125,312.3,1\n436,-1,756,414.4,104.2,315.5,1\n436,-1,1090.8,417.1,200.9,635.1,0.999\n436,-1,1286.1,300.3,479.9,780.7,0.998\n436,-1,696.2,429.5,72.8,285.6,0.996\n436,-1,528.8,466.7,24.2,71.6,0.306\n294,-1,752.6,445,65.1,198,1\n294,-1,1517.6,430.2,241.1,461.2,1\n294,-1,508.5,455.6,35.5,109.2,1\n294,-1,1003.3,408,156.3,613,1\n294,-1,1159.8,444.8,47,110,1\n294,-1,856.1,432.9,168.6,495.6,1\n294,-1,1359.1,441.9,51.6,109.5,1\n294,-1,410.1,470.4,49.1,104.4,1\n294,-1,659.9,460.9,25.8,72.7,1\n294,-1,382.3,463.2,44.8,111.7,0.999\n294,-1,1399.5,425.4,151.8,291.2,0.999\n294,-1,574.7,463,26.6,59.4,0.99\n294,-1,441.3,462.8,32.6,96.9,0.94\n294,-1,557,462.1,26.2,62.5,0.899\n294,-1,597,460,22.8,55.7,0.788\n294,-1,828.1,481.5,53.4,67.1,0.295\n294,-1,472,458,35.2,94.6,0.186\n294,-1,534.9,455.6,37.4,70.6,0.177\n385,-1,835.1,472.5,53.5,76.9,1\n385,-1,1083.5,400.3,207.8,626.1,1\n385,-1,3,438.1,204.6,374.1,1\n385,-1,545.3,412.2,142.9,360.6,1\n385,-1,224.7,444.5,155.6,362.2,1\n385,-1,796.7,476.8,55.6,60.3,1\n385,-1,354.7,439.4,122.4,306.3,1\n385,-1,469.3,454.1,38.7,105.4,0.999\n385,-1,976.2,418.3,129.7,522.8,0.999\n385,-1,514.6,460.7,26.7,64.8,0.954\n592,-1,835.9,471.9,53.4,78.7,1\n592,-1,1244.9,444.4,92.4,275.6,1\n592,-1,914.9,482.7,96.5,112.7,1\n592,-1,722.3,446.4,44.5,109.3,1\n592,-1,1096.1,414.4,104,286.5,1\n592,-1,1014.4,433.5,83.4,241.7,1\n592,-1,665,456,38.2,104.4,1\n592,-1,381.4,462.2,47.8,116.2,1\n592,-1,796.8,476,55.6,61.1,1\n592,-1,416.8,467,41.5,105.4,1\n592,-1,555.8,459.5,29.3,84.2,1\n592,-1,629.9,454.2,34.3,101.3,0.997\n592,-1,585.9,457.5,33.9,83.1,0.964\n592,-1,605.3,456.6,31.6,90,0.915\n293,-1,748.5,443.8,66.6,204.3,1\n293,-1,849.7,433.5,172.9,490.8,1\n293,-1,507.9,455.2,36.1,110,1\n293,-1,1515.9,431.5,240.4,455.2,1\n293,-1,1358.3,440.2,50.8,110.8,1\n293,-1,1157.3,443.7,48,114.8,1\n293,-1,998.9,409.2,154.9,624.3,1\n293,-1,410.3,471.9,47.4,102.7,1\n293,-1,658.7,461,27,72.8,1\n293,-1,381.8,462.8,44.2,111.2,0.999\n293,-1,576.2,462,25.7,59.5,0.989\n293,-1,445.3,462.9,30,93.8,0.955\n293,-1,1419.4,426.3,127.9,290.8,0.946\n293,-1,559.9,461.2,25.3,60.3,0.923\n293,-1,544.1,460.6,27.4,68.4,0.852\n293,-1,601.1,459.2,24,56.4,0.685\n293,-1,827.1,479.3,50.9,75.5,0.238\n293,-1,479.3,457.3,32.4,97,0.142\n159,-1,540,430.3,161.3,459.1,1\n159,-1,1188.7,445.1,39.9,101.4,1\n159,-1,399.4,469.2,61.6,104.9,1\n159,-1,733,434.2,119.9,343.7,1\n159,-1,1088,484.4,39.1,115.5,1\n159,-1,1000.1,444,38,103.2,1\n159,-1,371.6,446.7,44.4,104.3,1\n159,-1,843.7,447.6,83.6,287.3,1\n159,-1,472.1,466.4,35,111,1\n159,-1,1052.5,483.3,39.2,110.6,1\n159,-1,909.6,438.8,80.4,244.3,1\n159,-1,1130.4,454,34.9,91,0.998\n226,-1,737.5,407.9,252.7,587,1\n226,-1,372.9,447.3,42.9,106.8,1\n226,-1,607.7,452.1,55.5,182.9,1\n226,-1,1100.6,448.5,105.9,335.2,1\n226,-1,514.9,453.2,34.5,111.3,1\n226,-1,428.6,465.7,45.1,112.6,1\n226,-1,1051.1,484.4,41.4,110.5,0.999\n226,-1,895.4,430.4,136.4,413.6,0.953\n226,-1,658,466.7,27.5,72,0.93\n226,-1,549.9,457.4,25.5,64.9,0.925\n226,-1,531.9,457.7,28.3,80.1,0.674\n226,-1,466.7,454.1,36.2,107.5,0.307\n226,-1,597.3,423.8,19.7,34.8,0.126\n600,-1,915.7,483.8,93.6,111.5,1\n600,-1,835,473.3,53.4,76.5,1\n600,-1,723.4,448,44.6,109.1,1\n600,-1,663.9,458,39.8,102,1\n600,-1,1031.4,430.2,105.3,248.7,1\n600,-1,1263.6,436.7,100.9,282.5,1\n600,-1,797.4,475.5,54.9,62.3,1\n600,-1,382,464.2,46.5,114.5,1\n600,-1,416.5,467.5,41.5,106.2,1\n600,-1,554.9,460.7,31.2,84.1,1\n600,-1,1109.7,417.7,92.5,278.3,0.999\n600,-1,630.3,456.5,34.9,98.9,0.996\n600,-1,995.6,448.7,32.3,90.1,0.958\n600,-1,583.7,457.3,32.9,83.6,0.941\n600,-1,1204.9,434.7,73.5,247.2,0.59\n343,-1,834.5,473.3,54,77.2,1\n343,-1,486.7,453.3,34,112.7,1\n343,-1,246.3,411.7,218.1,411.3,1\n343,-1,1063.4,407.9,195.9,610.2,1\n343,-1,905,425.8,148.4,522.1,1\n343,-1,1486.5,437.3,55.3,112.3,1\n343,-1,796.7,475.5,55.7,63,1\n343,-1,6.1,440.3,147.5,363.7,1\n343,-1,658.5,463.4,26.5,73.9,1\n343,-1,635.1,460.9,24.2,63.2,0.958\n343,-1,558.8,460.7,20.7,58.9,0.947\n343,-1,578.6,460,22.4,58.4,0.94\n343,-1,607.9,457.5,38,62,0.703\n343,-1,537.5,458.5,34.5,63.4,0.53\n343,-1,410.8,472,46.5,117.8,0.058\n481,-1,1180.4,418.1,161.9,584.1,1\n481,-1,1353.4,386.6,262.8,694.4,1\n481,-1,637.1,436.4,83.8,266.5,1\n481,-1,564.2,455.2,35.7,81.9,1\n481,-1,775.5,438.1,97.6,290,1\n481,-1,1041,440.2,36.7,108.2,1\n481,-1,868.9,435.1,138.5,254.9,0.998\n481,-1,1086.1,463.4,39.9,135.9,0.997\n481,-1,746.6,446.7,44.8,129.4,0.996\n481,-1,1111.4,437.9,40.7,149.9,0.993\n481,-1,533.5,459.7,26.7,73,0.952\n481,-1,995.5,450,29.8,94.5,0.803\n481,-1,1518.9,410.4,193.4,429.5,0.78\n481,-1,1065.8,447.4,35.1,120.5,0.132\n481,-1,4,501.4,168.5,579.6,0.097\n481,-1,473.2,459.9,25.3,67.7,0.086\n487,-1,1198.3,425,176.9,574.6,1\n487,-1,647,431.5,116.1,275.9,1\n487,-1,1365.9,384.9,281.7,696.1,1\n487,-1,805.5,438.9,114.7,292.7,1\n487,-1,567.4,453.9,35,82.8,1\n487,-1,901.4,431.1,116.5,254.5,1\n487,-1,1032.7,439.8,41,109.8,1\n487,-1,1575.9,414.9,179.2,418.2,0.999\n487,-1,461.1,461,28.4,76.5,0.999\n487,-1,1087.6,457.5,39.4,141.1,0.998\n487,-1,1110.7,438,39.6,150.4,0.994\n487,-1,532.4,456.8,28.1,75.6,0.993\n487,-1,630.3,461.8,27.8,75,0.852\n487,-1,1184.4,455.3,33.5,90.3,0.795\n487,-1,738.1,444.8,41.3,135.8,0.067\n396,-1,835.8,472.2,54.6,78.5,1\n396,-1,597.5,403.1,123.1,343.9,1\n396,-1,1072.1,416.7,225.6,587.9,1\n396,-1,91.6,437,186.5,361.2,1\n396,-1,313,448.5,169.1,348.8,1\n396,-1,796.6,476.5,56.3,61.9,1\n396,-1,917.5,439.7,60.9,176.9,0.999\n396,-1,978.2,420.7,129.8,518.9,0.999\n396,-1,562.6,462.5,18.5,54.7,0.898\n396,-1,530,464.7,23.1,57,0.682\n396,-1,425.1,443.6,119.9,295.2,0.625\n20,-1,913.9,484.7,96.2,110,1\n20,-1,836,472.2,53.7,77.8,1\n20,-1,1461.9,413.1,233.4,412.1,1\n20,-1,450.5,442.2,123.8,291.6,1\n20,-1,1413.8,435.2,55.3,130.9,1\n20,-1,1257,448.5,34.8,99.7,1\n20,-1,375.2,446.3,42.9,106.1,1\n20,-1,587.2,442.9,91.4,270.3,1\n20,-1,1012.9,436.5,42.6,116.7,1\n20,-1,796,475.9,56.5,61.2,1\n20,-1,1091,481.9,33.6,117,1\n20,-1,1099.7,437.4,39.8,111.2,1\n20,-1,1054.5,486.1,39,108.1,0.999\n20,-1,418,456.7,41.2,87.4,0.999\n20,-1,402.1,452.5,32.4,92.7,0.077\n65,-1,912.3,484.4,97.8,111.2,1\n65,-1,835.7,472.4,54.2,78.6,1\n65,-1,419.3,458.7,42,85.1,1\n65,-1,374.8,447.2,42.8,103.8,1\n65,-1,1260,446.8,36.2,101.3,1\n65,-1,490.6,442.9,134.5,327.9,1\n65,-1,1003.3,441.2,43,115.8,1\n65,-1,1531.4,431,51.6,125.2,1\n65,-1,622.2,446.7,89.9,282.6,1\n65,-1,796.4,474.9,56.4,63.9,1\n65,-1,1089.2,481,34.8,117.3,1\n65,-1,1053.7,481.6,39.4,112.6,1\n65,-1,1096.4,439.7,40.2,111.4,0.999\n65,-1,692.2,456.7,75.7,219.6,0.998\n457,-1,913.7,483.8,97.2,110.3,1\n457,-1,1163.3,406.5,276,674.5,1\n457,-1,379.8,462.4,51,116.1,1\n457,-1,821.3,406.6,86.8,302.5,1\n457,-1,994.6,446,37.6,99.5,1\n457,-1,417,384.6,388.3,696.4,0.998\n457,-1,1052.7,443,37.9,96.4,0.984\n457,-1,1383.8,424,124.7,354.1,0.978\n457,-1,413.6,466.5,41.7,106.7,0.946\n125,-1,914.6,482.1,95.9,112,1\n125,-1,787.6,453.2,94.4,253.1,1\n125,-1,374,447.3,41.8,103.8,1\n125,-1,429.3,467.4,50.4,105.7,1\n125,-1,567.1,438.6,137,395.6,1\n125,-1,1087.8,483.8,37.9,117.2,1\n125,-1,1235.2,446.2,38.8,101.5,1\n125,-1,1005.2,444.3,38.5,102.8,1\n125,-1,498.2,469.1,34.5,105.9,1\n125,-1,681.2,438.2,99,318.6,1\n125,-1,1051.9,483.2,39.3,110.2,0.998\n125,-1,531.7,454.1,32.3,77.5,0.983\n542,-1,655.6,452.9,39.9,116,1\n542,-1,1037.7,438.2,112.5,285.2,1\n542,-1,381.9,463.2,49.4,115.1,1\n542,-1,713.6,450.1,36.3,96.7,1\n542,-1,824.5,429.8,110.9,260.8,1\n542,-1,1478.8,404.6,236.4,669.5,1\n542,-1,574.6,454.8,38.9,87,1\n542,-1,919.2,414.2,135.6,299.4,1\n542,-1,415.7,468.2,44.7,103.1,0.999\n542,-1,1172.6,444.7,48.3,105.8,0.998\n542,-1,544.9,460.3,30.2,78.2,0.994\n542,-1,797,477.7,54.2,61.2,0.975\n542,-1,461.9,461.3,28.1,66.9,0.655\n542,-1,501.3,458.6,21.8,54.6,0.497\n542,-1,1110.1,446.8,72.6,233.4,0.22\n337,-1,836.4,471.7,52.8,80,1\n337,-1,487.8,452.5,36,114.1,1\n337,-1,227.5,409.2,193.4,417.1,1\n337,-1,1065,389.6,188.9,628,1\n337,-1,1473.1,438.3,49,113.2,1\n337,-1,899.9,422,146.1,527.4,1\n337,-1,411.9,471.4,44.6,105.6,1\n337,-1,795.6,475.5,55.5,61.1,1\n337,-1,658.8,463.4,26.1,73.6,1\n337,-1,1,443.4,144.4,342,0.996\n337,-1,633.9,459.7,24.8,64.9,0.962\n337,-1,559.9,461.6,19.8,58.1,0.952\n337,-1,375.1,464.7,42.6,117.9,0.899\n337,-1,585.1,459.3,22.2,58.2,0.881\n337,-1,525.7,456.2,35.3,66.9,0.39\n473,-1,915.9,487.3,95.4,107.1,1\n473,-1,1314.9,391.1,196,689.9,1\n473,-1,745.6,440.1,100.5,292.6,1\n473,-1,613.7,427.7,78.2,284.2,1\n473,-1,1143.6,421.7,158.2,583.8,1\n473,-1,837,407.4,86.5,298.5,1\n473,-1,1044.9,441.5,41.1,111.3,0.999\n473,-1,1083.5,476.6,42.2,121,0.998\n473,-1,562.2,454.9,33.7,81.4,0.998\n473,-1,992.9,445.9,37.9,99.9,0.997\n473,-1,1494.4,417.4,118.9,375.5,0.994\n473,-1,1112.7,439.9,40.3,137.7,0.986\n473,-1,1,383.3,334.8,697.7,0.966\n473,-1,377.1,463.4,44.7,101.4,0.942\n473,-1,716,469.6,24.8,71.7,0.927\n473,-1,543.6,459.9,25.6,68.3,0.843\n473,-1,518.4,467.4,29.2,72.2,0.201\n194,-1,638.6,418,167.1,537.3,1\n194,-1,405.9,467.6,52.1,108.4,1\n194,-1,568.1,452.1,61,167.6,1\n194,-1,946,450.9,113.5,306,1\n194,-1,806.7,433.5,119.2,369.1,1\n194,-1,370.7,445,44.9,106.6,1\n194,-1,508.6,455.4,34.5,110.1,1\n194,-1,459.3,467.2,41.6,109.7,0.999\n194,-1,1143.1,450,40.8,100.2,0.996\n194,-1,1173,452.4,38.1,93.9,0.996\n194,-1,589.3,421.8,23.2,44.6,0.748\n194,-1,1087.5,482.1,39.4,114.3,0.722\n194,-1,1107.4,442.7,36.4,100.5,0.602\n194,-1,551.3,434,19.7,45.4,0.315\n194,-1,561.1,395.1,38,104.7,0.097\n194,-1,603.3,412.8,22.4,48.5,0.088\n194,-1,1007.9,442.8,89.2,266.1,0.075\n127,-1,914.5,483.8,96.3,110.4,1\n127,-1,787.8,458.7,96.1,251.7,1\n127,-1,425.8,466.1,52.6,107.3,1\n127,-1,373.5,446.9,42.6,104.6,1\n127,-1,571,442.9,133.9,389.6,1\n127,-1,1087.2,482,38.9,118.5,1\n127,-1,1231,446.2,41,102.2,1\n127,-1,1006.1,444.9,38.7,102.4,1\n127,-1,496.1,468.9,34.9,106.6,1\n127,-1,1052.6,482.6,39.7,110.8,1\n127,-1,682.7,436.6,98.8,323.6,0.999\n127,-1,530.4,456.5,30.7,69.1,0.984\n30,-1,914,485.3,95.8,110.3,1\n30,-1,836,473.5,54,75.9,1\n30,-1,375.4,446.9,42.8,105.8,1\n30,-1,1435.5,431.1,63.7,130,1\n30,-1,471.6,446.3,120.3,288.9,1\n30,-1,598.3,441.9,90.9,275.5,1\n30,-1,1568.2,394,181.5,436.8,1\n30,-1,795.6,475.4,57,62.5,1\n30,-1,1256.7,448.4,34.6,99.5,1\n30,-1,418.2,458.2,42.9,87.6,1\n30,-1,1090.6,481.5,33.8,118.5,1\n30,-1,1011.7,440.2,42.3,116.2,1\n30,-1,1098.8,439.2,40.2,109.5,1\n30,-1,1054,485.2,38.5,109.9,0.999\n30,-1,1693.1,428.4,185.3,379.4,0.916\n81,-1,912.5,483.6,97.5,111.6,1\n81,-1,835.4,472.1,53.4,77.3,1\n81,-1,374.4,446.8,43.3,105.5,1\n81,-1,1260.2,447.5,36.1,100.9,1\n81,-1,1088.1,486.8,36.4,114.7,1\n81,-1,1004.3,443.1,42.4,110.9,1\n81,-1,538.4,445.1,108.8,334.6,1\n81,-1,467.9,465.4,36.3,101.1,1\n81,-1,419.5,457.6,42.2,86.4,1\n81,-1,709.2,454.2,95.6,227.2,1\n81,-1,621.2,439.1,94,292.5,1\n81,-1,1055.2,485.6,38.9,108.3,1\n81,-1,1097.2,447.7,38.7,105.6,0.543\n81,-1,500.8,461.6,25.5,94.7,0.105\n449,-1,499,432.9,99.6,292.3,1\n449,-1,630.9,438.2,88,310.1,1\n449,-1,378.7,463.9,52.6,113.2,1\n449,-1,1138.2,397.9,255.8,676,1\n449,-1,687.9,329.1,411.8,751.9,1\n449,-1,412.9,468.5,47.1,103.3,0.996\n449,-1,471.4,459.7,28.2,75.4,0.908\n449,-1,1316.8,438.3,131.4,326.5,0.151\n449,-1,1042.7,437.4,154.7,528.1,0.07\n435,-1,914.4,487.8,92.2,109.7,1\n435,-1,415.7,432.4,121.1,309.7,1\n435,-1,546.8,448.9,137.2,313.1,1\n435,-1,751.2,411.8,106.9,316.1,1\n435,-1,1076.4,402.1,213.6,667.9,0.999\n435,-1,1314.9,295.3,497.9,785.7,0.999\n435,-1,687.4,431.2,83.5,284.9,0.998\n435,-1,526.5,465.3,22.5,70.2,0.507\n435,-1,825.4,438,55.2,164.6,0.144\n437,-1,915.8,484.3,93.2,110.4,1\n437,-1,423.2,436,131.1,310.2,1\n437,-1,544.1,440,148.5,316.4,1\n437,-1,760.8,414.3,101,312.4,1\n437,-1,1210.5,312.9,474.9,768.1,0.998\n437,-1,1093.6,395.3,216.4,680.2,0.997\n437,-1,702.5,430.4,75.4,284.9,0.996\n437,-1,529.2,470.2,27.3,71.6,0.142\n599,-1,915.7,483.7,94,111.1,1\n599,-1,835.9,473.2,52.9,76.7,1\n599,-1,723.2,447.9,45.3,110.2,1\n599,-1,1255.2,440,105.9,280.8,1\n599,-1,663.8,457.4,38.4,102.4,1\n599,-1,381.9,463.1,47.1,115.3,1\n599,-1,798.1,475.6,54.3,62.4,1\n599,-1,416.5,467.2,41.8,106,1\n599,-1,1031,428.8,99.4,248.5,1\n599,-1,554.4,461.1,31.1,83.9,1\n599,-1,1108,415,98.3,279.4,1\n599,-1,631.7,455.9,34.3,99.4,0.995\n599,-1,582.9,457,33.4,84,0.939\n599,-1,993.9,448.4,33.5,92.2,0.853\n599,-1,1206.6,435.1,57.6,242.4,0.08\n433,-1,914.1,484.5,94.8,109.3,1\n433,-1,745.5,413.8,112.6,307.1,1\n433,-1,536.9,440.2,144.6,317.8,1\n433,-1,408,434,103.9,311.8,1\n433,-1,1063.7,406,218.6,633.4,0.999\n433,-1,668.2,439.9,87.3,270.6,0.997\n433,-1,1420.5,292.8,496.9,788.2,0.996\n433,-1,519.7,465.7,22.5,67.9,0.936\n433,-1,830.1,434.8,50.2,166.5,0.843\n552,-1,836.9,472,51.6,78.7,1\n552,-1,651.3,450.4,38.4,115.5,1\n552,-1,1085.1,439.9,111.1,284.5,1\n552,-1,715.2,448.6,37.8,101,1\n552,-1,977.9,415.2,83.4,287.7,1\n552,-1,381.4,463.9,49.9,114.8,1\n552,-1,890.4,435.6,83.2,250.5,1\n552,-1,579.7,456.3,38.6,85.6,1\n552,-1,795.9,475.9,55.6,61.9,1\n552,-1,415.7,467.2,45.9,103.5,1\n552,-1,1553.7,394.6,228.7,686.4,1\n552,-1,1194,439.8,40.9,110.3,0.999\n552,-1,549.2,460.5,29.8,78.8,0.998\n552,-1,502.4,457.5,24,59,0.927\n552,-1,1036.6,439.1,44.6,121.6,0.174\n540,-1,656.7,451.6,41.9,118.8,1\n540,-1,816.9,425.8,116.9,262.9,1\n540,-1,1463,404.6,237.2,676.4,1\n540,-1,1032.6,438.8,111,285,1\n540,-1,714.5,450.7,34.3,93.6,1\n540,-1,381.7,463.2,49.6,115.4,1\n540,-1,574.7,454.5,37.7,87,1\n540,-1,923.7,407.3,128.8,305.6,1\n540,-1,415.2,468,44.4,103.3,0.999\n540,-1,543.9,459.9,30.4,78.7,0.995\n540,-1,1753.2,376.7,167.8,704.3,0.914\n540,-1,458,463,29,68.6,0.613\n540,-1,505.6,458.4,21.2,53.1,0.435\n540,-1,1106.6,451.2,77.8,223.7,0.306\n540,-1,1169.4,449.9,45.7,94.3,0.219\n540,-1,799.7,475.2,45.1,76.6,0.081\n257,-1,656.8,448.9,62.5,189.1,1\n257,-1,1234.9,435.4,201.3,379.1,1\n257,-1,410.9,465,40.3,112,1\n257,-1,936.4,409.7,163.8,637.4,1\n257,-1,514.1,452.7,32.6,112,1\n257,-1,1784.5,404.7,136.5,380,1\n257,-1,371,446,44.6,105.9,1\n257,-1,809.6,440.6,131.2,458,1\n257,-1,589,460,23.7,62.4,0.996\n257,-1,469.7,460.6,31.9,103.8,0.995\n257,-1,773.3,453,25.6,73.2,0.994\n257,-1,612.1,461.1,23.2,58.2,0.918\n257,-1,550.6,460.7,24.1,62.5,0.907\n257,-1,627.9,463.4,27.3,63.6,0.255\n450,-1,502.4,430.3,105.7,300.1,1\n450,-1,1145.3,405.1,245,672.9,1\n450,-1,378.7,464,51.7,114.3,1\n450,-1,675.6,333.3,386.6,747.7,1\n450,-1,412.6,467.5,47,103.3,0.998\n450,-1,473.6,458.8,28.5,78.6,0.937\n450,-1,1039.7,435.9,170.4,517.9,0.926\n450,-1,1000.9,449,30.1,98.5,0.767\n450,-1,640.8,436.2,80.4,333.3,0.683\n450,-1,1029.6,443.4,25.1,86.4,0.195\n450,-1,1321.4,440,129.6,328.9,0.074\n582,-1,835.6,472.7,53.6,78.1,1\n582,-1,974.6,435.8,97.8,243,1\n582,-1,722.1,449,42.5,106.2,1\n582,-1,1188.2,442.7,116.8,275.5,1\n582,-1,1076,414.7,85,285.1,1\n582,-1,797,475.8,55.9,61.8,1\n582,-1,383.2,465.4,48,112.7,1\n582,-1,416.2,468.4,41.1,104.8,1\n582,-1,665.6,453.2,38.9,105.1,1\n582,-1,554.7,461,30.6,82.3,0.999\n582,-1,1676.4,399.7,244.6,681.3,0.998\n582,-1,908.6,482.5,100.5,109.6,0.993\n582,-1,634.5,452.7,36.6,105.3,0.989\n582,-1,585.3,458.6,37.6,84.8,0.976\n2,-1,915.8,481.4,93.5,113.6,1\n2,-1,837.2,472.5,53.1,76.6,1\n2,-1,442.8,447.6,109.6,274.9,1\n2,-1,375.6,446.3,43.3,105.5,1\n2,-1,1344.1,414.7,168.2,386.5,1\n2,-1,587.2,444.8,86,266.2,1\n2,-1,796.3,475.2,54.8,62,1\n2,-1,1090.4,482,34.6,117.7,1\n2,-1,1014.4,430.5,43.8,121.7,1\n2,-1,1055,485.1,38.4,107.7,1\n2,-1,1257,448.5,34.2,101,1\n2,-1,1099.4,437.9,41.9,109.2,0.999\n2,-1,1455.6,424.1,141.4,352.2,0.2\n201,-1,404.9,467.3,50.9,106,1\n201,-1,660.4,428,173.5,528.9,1\n201,-1,573.1,449.2,64.8,172.7,1\n201,-1,1138.1,448.1,38.2,104.4,1\n201,-1,818.4,432,159.6,381.8,1\n201,-1,370.2,446,46.3,106,1\n201,-1,978.4,450.6,101.1,314.5,1\n201,-1,1184.3,447.3,36,99,1\n201,-1,510.5,456.3,34.7,109.8,1\n201,-1,1041.8,438.3,99.4,281.7,0.999\n201,-1,457.1,466.1,36.4,108.8,0.998\n201,-1,591.3,422,23.5,45.2,0.783\n201,-1,551.7,438,19.7,45.6,0.408\n201,-1,603.8,412.7,22.3,49.6,0.365\n201,-1,553.2,423.4,37.1,88.4,0.218\n201,-1,648.3,466.1,22,71.7,0.077\n516,-1,382.5,463.7,51.5,116.3,1\n516,-1,837.5,472.5,53.5,78.1,1\n516,-1,1553,378.9,314.1,702.1,1\n516,-1,731.8,436.4,113.2,263.9,1\n516,-1,688.5,447.8,43.5,128.4,1\n516,-1,915.9,441.6,140.7,282.8,1\n516,-1,1332.7,424.6,243.6,646.7,1\n516,-1,1178.7,448.2,36.1,88.3,1\n516,-1,1044.6,436.8,104.5,244.9,1\n516,-1,572.3,456.8,32,83,1\n516,-1,643.3,453.5,34.5,95.6,1\n516,-1,539.8,461.8,28.9,74.3,0.992\n516,-1,458.2,460.2,26.2,73.9,0.984\n516,-1,410.6,470.4,49.1,98.7,0.372\n188,-1,405.5,469.1,53.2,106.7,1\n188,-1,613.3,425.1,174.7,499.6,1\n188,-1,792.6,437.1,112.1,360.6,1\n188,-1,1152.6,448.6,40.1,100.9,1\n188,-1,370.3,445.5,44.9,106.2,1\n188,-1,1088,483.3,40,116.8,1\n188,-1,509.4,455.7,34.8,109.2,1\n188,-1,934.8,447.7,92.4,309.5,1\n188,-1,568.1,452.8,58.6,162.9,1\n188,-1,459.4,469.1,39.9,108,0.999\n188,-1,991.4,437.2,93.4,274,0.998\n188,-1,581.7,433.2,23.6,40.5,0.589\n188,-1,1101.6,447.5,34.2,108,0.405\n188,-1,549.5,439,19.5,43.9,0.072\n325,-1,1443.8,439.1,54,112.6,1\n325,-1,490.6,453.5,46.4,111.3,1\n325,-1,52.7,410.2,265.3,441.7,1\n325,-1,1053,414,193.9,602,1\n325,-1,900.9,421.8,139.6,526,1\n325,-1,410.2,467.9,47.1,106.5,1\n325,-1,658.3,463,26.7,73.7,1\n325,-1,380.4,463.6,44.1,113,1\n325,-1,1213.9,436.9,106.7,243.7,1\n325,-1,1751,399.7,170,449.9,0.999\n325,-1,831.5,444.6,87.2,215.9,0.999\n325,-1,796.8,476.6,48.8,61.6,0.99\n325,-1,587.5,458.7,21.6,58.5,0.96\n325,-1,626.6,458.2,24.7,60.2,0.948\n325,-1,555.6,459.6,22.3,59,0.939\n335,-1,1470.3,438.1,46.1,114.3,1\n335,-1,489.4,453.3,39.3,113.3,1\n335,-1,835.2,472,54.3,78.3,1\n335,-1,1059.6,408,191.5,606.2,1\n335,-1,216.5,405.8,168.8,421.5,1\n335,-1,902.2,421.7,144.7,525.8,1\n335,-1,410.6,471.6,45.5,104,1\n335,-1,796.6,476.1,57.5,61.3,1\n335,-1,660.1,461.9,26.7,76,1\n335,-1,383.7,465.7,43,112,0.997\n335,-1,1,437.6,135.8,346.9,0.995\n335,-1,630.4,460.2,25.2,64.2,0.959\n335,-1,562.5,462.3,21,58.1,0.959\n335,-1,585.7,459.4,22,59.6,0.926\n335,-1,514.5,454.4,35.8,80.7,0.098\n340,-1,232.5,413,219.5,408.6,1\n340,-1,835.3,471.7,54.5,79.9,1\n340,-1,486.4,452.8,34.7,114.1,1\n340,-1,1066.2,408.7,189.9,588.2,1\n340,-1,905.7,424.4,143.2,525.6,1\n340,-1,1481.6,438.3,54.2,111.7,1\n340,-1,795.9,474.6,56.6,63.3,1\n340,-1,2.3,455.1,150.9,330.1,1\n340,-1,415.3,472.9,40.5,107.9,0.999\n340,-1,659.1,463.8,26,72.4,0.999\n340,-1,633.6,460.8,24.7,66.2,0.973\n340,-1,559.6,460.8,19.6,59.3,0.943\n340,-1,574.3,460.2,23.1,58.7,0.87\n296,-1,759.2,442.8,65.5,204.6,1\n296,-1,1522.2,432.5,237.9,463.2,1\n296,-1,508.7,455.7,35.3,108.8,1\n296,-1,1162.5,443.3,48.3,113.1,1\n296,-1,871.2,431.6,157.5,500.8,1\n296,-1,1004.1,405.5,159.8,636.6,1\n296,-1,411.4,470.4,48.3,104.4,1\n296,-1,1390.4,423.9,148.1,292.9,1\n296,-1,658.7,461,26.1,73.4,1\n296,-1,381.8,462.4,43.9,112.6,1\n296,-1,577.9,462.2,26.1,59.4,0.989\n296,-1,828.6,482.2,58.2,63.9,0.963\n296,-1,553.2,461.1,26.2,63.2,0.9\n296,-1,595.3,460,23.9,56.7,0.758\n415,-1,282.5,433.2,120.1,341.8,1\n415,-1,665.1,405,140.4,336.9,1\n415,-1,1059.9,411.8,197.3,604.3,1\n415,-1,436.5,445.1,164.1,329.9,1\n415,-1,872.2,438.8,61.3,172.8,1\n415,-1,832.7,473.3,58.4,76,0.995\n415,-1,549.3,428.2,102.2,299.5,0.903\n415,-1,793.8,476.4,56.1,61.1,0.891\n415,-1,996.1,425.9,119.9,509.2,0.842\n415,-1,377.5,467.9,46.3,114.5,0.808\n415,-1,917.1,481.1,81.9,115.1,0.322\n101,-1,913.1,484.3,97.8,110.7,1\n101,-1,374.2,446.2,43.2,104.4,1\n101,-1,1256.8,444.8,38.7,104.3,1\n101,-1,834.7,472.7,53.4,75.9,1\n101,-1,452.1,466.5,44.6,105.7,1\n101,-1,752.3,455.5,83.3,233.2,1\n101,-1,549.6,445,125.2,360.6,1\n101,-1,1089.6,484.2,35.7,116.1,1\n101,-1,1003.8,443.8,41.8,108.2,1\n101,-1,1051.7,482.1,40.5,110.2,1\n101,-1,652.4,441.5,99.1,297.7,1\n101,-1,510.9,462.3,27.9,105.7,0.554\n451,-1,505,435.6,112.3,295,1\n451,-1,1143.9,399.7,254.3,673.3,1\n451,-1,379.3,463.9,51.4,114.8,1\n451,-1,651.7,360.7,375.2,720.3,1\n451,-1,412.3,467.5,46.6,103.2,0.997\n451,-1,996.7,446.9,35.7,102.4,0.997\n451,-1,1041.5,434.4,181.7,532.4,0.974\n451,-1,475.6,462.3,29.3,79.4,0.958\n451,-1,1029.6,439.2,25.3,87.5,0.528\n451,-1,1324.9,439.4,133.7,330.3,0.305\n276,-1,824,431.8,145.2,485.3,1\n276,-1,391,464.9,42.5,113.2,1\n276,-1,512,455.6,34.5,110.3,1\n276,-1,969.6,393.8,154.5,668.5,1\n276,-1,701.9,444.5,74.8,203.7,1\n276,-1,1387.8,439.7,198.8,409.9,1\n276,-1,1574,416.2,131.7,330,1\n276,-1,457.2,456.6,31.8,109.2,0.999\n276,-1,656.7,461.1,27.5,72.9,0.994\n276,-1,582.2,460.7,23.2,60.4,0.989\n276,-1,629.7,459.9,26.1,61.7,0.953\n276,-1,556.2,460.9,24.2,61.3,0.935\n360,-1,835.6,470.9,55.1,79.2,1\n360,-1,1072.5,407,202,612,1\n360,-1,1532.5,436.2,46,113.9,1\n360,-1,923.6,420.1,143.7,526.4,1\n360,-1,394.2,409.8,184.4,386.3,1\n360,-1,1.4,442.4,216.9,411.6,1\n360,-1,797.3,475.9,56.6,61.2,1\n360,-1,629.2,459.4,27.6,72.2,0.998\n360,-1,659.4,464.1,25.9,70.9,0.979\n360,-1,885.6,455.2,30.4,70.9,0.954\n360,-1,562.1,461.3,19,57.8,0.947\n360,-1,590.4,459,22.2,56.5,0.837\n360,-1,526.4,458.5,21.1,65.7,0.223\n360,-1,604.5,456.2,27.3,62.6,0.157\n580,-1,836.2,472.2,53.7,79,1\n580,-1,721.4,448.3,41.8,106.9,1\n580,-1,968.2,436,101.7,240.8,1\n580,-1,1171.4,440.3,125.1,275.4,1\n580,-1,381.7,464.6,48.9,113.2,1\n580,-1,797.2,475.4,55.3,62,1\n580,-1,1065.5,413.6,95.1,282.8,1\n580,-1,665.2,453.5,39.6,105.4,1\n580,-1,416.2,470.5,42.1,101.8,1\n580,-1,1673.3,395.8,247.7,685.2,1\n580,-1,553,460.7,32.3,82.1,0.999\n580,-1,635.2,452.1,34.9,106.2,0.98\n580,-1,584.3,458.3,37.8,84.3,0.979\n580,-1,921.9,485,76.1,109,0.052\n573,-1,836.5,472.2,53.3,77.8,1\n573,-1,1155,440.8,128.9,278.2,1\n573,-1,720.1,446.9,41.1,105.1,1\n573,-1,1662.7,396.5,254.2,684.5,1\n573,-1,381.8,464.6,48.7,113.7,1\n573,-1,797.4,476.2,54.7,61.1,1\n573,-1,416.3,467.7,42.5,104.5,1\n573,-1,1022,413.5,124.7,287.3,0.999\n573,-1,958.1,434.3,100.2,251.1,0.999\n573,-1,553,459.2,30.6,83.3,0.999\n573,-1,664.9,452,38.4,103.9,0.998\n573,-1,639.8,452.7,36.6,107.1,0.997\n573,-1,580.8,459.1,42.7,82.3,0.989\n573,-1,614.8,458.7,25.1,86,0.095\n279,-1,708.1,440.6,86.6,211.8,1\n279,-1,390.1,465.9,43,111.8,1\n279,-1,510.2,455.6,35.1,110.4,1\n279,-1,824.7,424.9,151,500.3,1\n279,-1,1415.4,431.8,177.2,413.6,1\n279,-1,981.4,406.7,154.9,639.4,1\n279,-1,452.8,459.6,32.6,106.4,1\n279,-1,1327.1,444.2,45.1,106.7,0.999\n279,-1,1544.4,417.7,149.2,330.4,0.998\n279,-1,657.8,462.6,27.1,72.7,0.997\n279,-1,579.3,461.6,24.8,60.6,0.988\n279,-1,621.9,460.6,24.7,59.3,0.932\n279,-1,562,462,24.5,60.8,0.929\n279,-1,539.1,458.5,26.7,78.8,0.555\n118,-1,915,483.8,95.4,109.9,1\n118,-1,374,445.9,42.7,106.7,1\n118,-1,438.1,467.8,43.5,104.4,1\n118,-1,1088.1,481.7,38.1,120.5,1\n118,-1,559.1,444,130.2,379.9,1\n118,-1,678.4,440.7,98.1,309.6,1\n118,-1,499.1,465.9,36,107.8,1\n118,-1,773.8,450.6,87.9,253,1\n118,-1,1239.6,443.5,40.8,103.8,1\n118,-1,1051.5,483,40,110.5,1\n118,-1,1006.2,445.3,39.3,102.6,0.999\n118,-1,539.1,463.8,27.8,64.5,0.807\n259,-1,1257.7,442.9,179.2,381.5,1\n259,-1,407.8,464.3,42.4,112.2,1\n259,-1,659,450.3,63.7,189,1\n259,-1,934.2,404.6,170.5,639.9,1\n259,-1,1738.6,398.6,182.4,381.6,1\n259,-1,513.4,452.8,33.2,110.8,1\n259,-1,811,439.5,132.8,456.2,1\n259,-1,370.9,446,44.6,107.2,1\n259,-1,587.6,459.3,23.5,63.4,0.996\n259,-1,472,459.6,30.7,103.9,0.993\n259,-1,774.9,451.6,25.5,76.5,0.989\n259,-1,552.6,460.9,23.6,61.3,0.936\n259,-1,607.5,459.3,23.6,59.9,0.911\n259,-1,493.1,456.9,22.9,105.2,0.585\n259,-1,759.5,453.1,22.3,75.2,0.095\n133,-1,914.4,483.9,96.4,111.1,1\n133,-1,797.9,448.6,92.5,264,1\n133,-1,412.5,466.7,62.1,104.2,1\n133,-1,577.4,433.2,141.7,404.6,1\n133,-1,1222.4,446.1,41.6,100.4,1\n133,-1,1087,484.6,38.4,115.7,1\n133,-1,374.2,447,42.4,104.7,1\n133,-1,1004.3,443.7,39.9,105,1\n133,-1,490.6,468.5,39.1,108.9,1\n133,-1,688.5,437.2,99.2,318.2,1\n133,-1,1053.6,483.8,38.6,108.4,1\n133,-1,528.3,457.1,32,73.5,0.991\n169,-1,536.7,419.9,212.1,479.8,1\n169,-1,405.9,467.1,55.6,104.2,1\n169,-1,865.8,445,127.1,293.1,1\n169,-1,1089.1,483.7,38.3,116.4,1\n169,-1,1176.5,448.4,40.1,101,1\n169,-1,372.4,445.6,43.1,105.1,1\n169,-1,757.8,441.5,113.8,347.9,1\n169,-1,1051.9,481.6,40,111.3,1\n169,-1,471.5,465.7,34.1,108.2,1\n169,-1,997.2,441.6,38.4,105.8,0.999\n169,-1,1145.3,452.1,33,93.1,0.988\n169,-1,506.7,457.2,30.3,95.4,0.948\n169,-1,491.3,460.7,28.4,100.4,0.391\n167,-1,536.5,420.3,200.5,480.2,1\n167,-1,403.9,466.9,58.8,104.8,1\n167,-1,756.7,437.2,112.4,342.2,1\n167,-1,1178.6,446.7,41.4,103.1,1\n167,-1,372.3,446,42.7,104.9,1\n167,-1,1088.3,484.7,38.8,115.8,1\n167,-1,470,466.6,34.8,107.9,1\n167,-1,860.9,445.2,117.3,293.9,1\n167,-1,1051.3,482.5,40.2,112.1,1\n167,-1,998.6,443.8,39,106,1\n167,-1,1140.8,452.8,32.3,92.3,0.993\n167,-1,506.1,455.9,28.1,89.8,0.805\n52,-1,912.9,483.3,98.3,111.6,1\n52,-1,835.5,472.8,54,76.2,1\n52,-1,1498,430,54,131.3,1\n52,-1,478,440.1,117.3,320.8,1\n52,-1,374.3,445,43.8,107.5,1\n52,-1,418.5,456.3,43.2,88.9,1\n52,-1,623.9,444.1,90.4,275.2,1\n52,-1,1260.6,446.8,35.2,101.4,1\n52,-1,1008.6,443.4,41.7,114.8,1\n52,-1,796.2,475.1,55.8,62,1\n52,-1,1055,483.3,38.5,110.6,1\n52,-1,1097.7,437.7,41.3,110.3,1\n52,-1,1091.7,479.1,33.2,119,1\n52,-1,581.3,452.8,43.6,136.5,0.994\n52,-1,1802.8,395.5,118.2,485.8,0.211\n51,-1,913.4,483.7,97.8,111.4,1\n51,-1,836.1,472.7,53.8,76.9,1\n51,-1,1495,429.9,55.1,131.3,1\n51,-1,478.3,440.4,118.7,321.8,1\n51,-1,624.3,449.9,88.8,267.5,1\n51,-1,374.9,445.4,43.4,106.8,1\n51,-1,1260.8,446.6,34.9,102.6,1\n51,-1,418,456.9,43.3,88.6,1\n51,-1,1008.5,443.5,41.3,113.5,1\n51,-1,795.6,474.8,56.4,62.7,1\n51,-1,1090.4,482.6,33.8,117,1\n51,-1,1098.4,437.7,40.6,107.9,1\n51,-1,1054.5,483.6,38.5,111.4,0.999\n51,-1,583,455,41.6,134,0.994\n51,-1,1787,381.6,134,494.5,0.662\n479,-1,1171.7,416.5,162.5,587.8,1\n479,-1,630.1,435.9,89,275.4,1\n479,-1,1349.1,395.2,242.1,685.8,1\n479,-1,760.2,440.2,101.8,293.9,1\n479,-1,1040.1,438.7,40.1,107.8,1\n479,-1,842.2,408.2,79.5,308,1\n479,-1,564,454.6,34.6,81.7,0.999\n479,-1,1084.9,472.1,40.2,127,0.998\n479,-1,1113,438,40.8,146.1,0.997\n479,-1,991.4,447.8,34.2,98,0.995\n479,-1,526.5,458.4,30.3,75.1,0.993\n479,-1,894.4,434.8,99.6,246,0.962\n479,-1,1514.2,415.4,188.1,398.9,0.95\n479,-1,1018.3,444.5,23.5,93.1,0.312\n479,-1,747.3,456.5,41.2,112,0.172\n479,-1,1065.6,451.9,38.3,117.3,0.107\n479,-1,710.2,465.3,25.9,81.1,0.08\n37,-1,913.3,483.6,97.2,112.2,1\n37,-1,835.1,472.2,54.6,78.9,1\n37,-1,1628,400,247,465.7,1\n37,-1,1453.3,427.3,63.5,132.9,1\n37,-1,375.1,446.5,43,105.6,1\n37,-1,1257.8,448.5,35.2,100.5,1\n37,-1,1009.6,439.7,42.4,116.8,1\n37,-1,418.2,457.3,42.2,88.1,1\n37,-1,479.9,443.9,114.4,301.5,1\n37,-1,608.5,442,88.3,276.7,1\n37,-1,1090.2,483.6,33.7,117.4,1\n37,-1,795.8,475.8,57,61.9,1\n37,-1,1054,485.4,38.8,109.6,1\n37,-1,1097.4,439.7,39,112.7,0.999\n37,-1,670.5,486.4,58.2,192.8,0.073\n403,-1,144.7,436,206,356.4,1\n403,-1,836,473.9,52.9,75.3,1\n403,-1,1080.4,413.9,207.7,612.3,1\n403,-1,636.8,413.9,143.7,340.1,1\n403,-1,361,439.4,128.3,353.7,1\n403,-1,796.1,476.2,56.7,62,1\n403,-1,898.1,437.1,59.3,176.5,1\n403,-1,484.6,433.6,111,291.6,1\n403,-1,980.1,423.7,132.7,506.5,0.999\n251,-1,1214.4,437.9,194,380.2,1\n251,-1,371.2,445.8,44.2,106.1,1\n251,-1,644.6,447.5,64.6,189.2,1\n251,-1,415,463.2,38.5,112.5,1\n251,-1,910.3,399.4,169.5,657,1\n251,-1,513.5,452.5,32.5,112.9,1\n251,-1,797.6,439.5,139.3,445,0.999\n251,-1,590.5,458.3,22.1,63.8,0.997\n251,-1,471.1,457.8,33.5,107.2,0.993\n251,-1,548,458.5,24.4,63,0.883\n251,-1,1076.4,479.5,49.3,116.7,0.316\n251,-1,762.6,446,25.9,75.5,0.148\n251,-1,1103.1,442.5,44.8,116.9,0.113\n165,-1,538.6,420.2,188.5,477.2,1\n165,-1,402.9,467.6,59.2,104.3,1\n165,-1,752.1,442.5,112.3,335.2,1\n165,-1,1181.8,448.1,40.3,99.5,1\n165,-1,1088,483.9,39.4,117,1\n165,-1,372.9,446.4,42.7,105.4,1\n165,-1,1000.3,442,36.9,106.6,1\n165,-1,856.6,447.7,107.9,285.4,1\n165,-1,1050.2,482.5,41.3,112.2,1\n165,-1,469.4,466.1,36,107.5,1\n165,-1,1139.9,452.7,31.9,93.8,0.994\n165,-1,507.2,453.4,25.2,89.7,0.431\n165,-1,920.2,452.1,75.9,237.7,0.057\n377,-1,835.7,472.4,54.4,78.1,1\n377,-1,1078.4,411.9,211.8,598.5,1\n377,-1,510.6,401.1,129.2,366.3,1\n377,-1,157.1,444.4,203.1,377,1\n377,-1,796.4,476.5,56.1,61.1,1\n377,-1,409.7,469.9,48.3,106.4,1\n377,-1,958,421.8,142.8,526.3,0.999\n377,-1,472,453,36.8,115.7,0.997\n377,-1,5.5,444.1,103.4,362.9,0.996\n377,-1,625.1,455.9,31.4,74.3,0.283\n377,-1,887.7,458.3,24.6,52.7,0.051\n460,-1,912.2,483.7,98.4,109.8,1\n460,-1,1173.6,385.8,277.6,695.2,1\n460,-1,830.8,410.1,80.1,304.8,1\n460,-1,1050.5,440.5,38.5,110.7,1\n460,-1,996.6,445.5,37.5,102.8,1\n460,-1,654.8,438.4,136.1,302.5,0.999\n460,-1,1395.5,424.8,156.7,357.7,0.998\n460,-1,312.8,380.2,374.7,700.8,0.997\n460,-1,642.4,458.8,27.8,82.5,0.15\n148,-1,402.5,464.6,62,108.3,1\n148,-1,558.7,432.6,151.1,449.3,1\n148,-1,1205,445.3,38.1,103.3,1\n148,-1,709.2,435.3,130.2,334.8,1\n148,-1,1002.1,443.6,38.1,101.2,1\n148,-1,827.1,450.9,89.5,277,1\n148,-1,1088.6,483.5,38.1,115.8,1\n148,-1,373,445.8,42.4,106,1\n148,-1,475.4,462.1,42.2,114.1,1\n148,-1,1052.5,484,38.8,109.3,1\n148,-1,1124.8,452.8,34.5,92,0.99\n148,-1,505.2,454.2,33.8,100.9,0.972\n148,-1,523.9,455.2,30,84,0.424\n148,-1,887.5,461.1,68.6,211.2,0.083\n408,-1,199,431.9,160.7,350.4,1\n408,-1,636.7,410.2,159.6,339.9,1\n408,-1,1075.5,405.1,197.1,602.3,1\n408,-1,836,472.1,53.6,78.6,1\n408,-1,880.7,437.8,64.5,176.7,1\n408,-1,794.4,475.4,57.9,60.8,1\n408,-1,414.7,444.1,107.2,329.6,1\n408,-1,496.8,434.6,150.6,304.3,0.999\n408,-1,983.6,424.7,133,506,0.994\n408,-1,378.1,464.7,52.6,119.1,0.98\n408,-1,623.1,456,21.4,69.6,0.099\n199,-1,648.8,422,176.2,535,1\n199,-1,406.5,467.6,51.4,106.2,1\n199,-1,569.3,450.8,64.6,171.2,1\n199,-1,816.7,435.1,155,376.8,1\n199,-1,371.5,445.2,44.8,106.4,1\n199,-1,1138.8,447.3,40.5,104.9,1\n199,-1,511.6,456.4,34.7,108.7,1\n199,-1,963.9,456.1,109,311.2,1\n199,-1,1032.8,438.5,103.5,284.4,0.999\n199,-1,1180.3,448,37,98.7,0.999\n199,-1,457,465.8,37.3,110.1,0.998\n199,-1,591.2,422.3,23.6,46.1,0.794\n199,-1,550.2,437.3,19.7,46.2,0.33\n199,-1,604,411.7,22.5,50,0.217\n199,-1,550.9,425,37.5,91,0.205\n199,-1,530.8,459.4,29,93.8,0.054\n147,-1,401.7,464.9,62.5,107.3,1\n147,-1,1207.2,445.6,37.7,102.9,1\n147,-1,564.1,438.8,148.7,435.3,1\n147,-1,708,436.3,130.6,330.1,1\n147,-1,1002.4,443.9,37.9,102.1,1\n147,-1,826.1,449.1,88,277.6,1\n147,-1,1088.6,485,37.4,114.4,1\n147,-1,372.5,445.9,43.2,105.7,1\n147,-1,477.1,463.3,41.3,112,1\n147,-1,1050.6,483.6,40.9,110.2,0.997\n147,-1,1122,450.9,36.2,92.8,0.991\n147,-1,512.6,456.4,32.6,85,0.974\n147,-1,530.5,453.5,25.8,77.5,0.629\n147,-1,924.7,486.6,73.4,119.4,0.231\n265,-1,669.6,450.9,69.2,192.8,1\n265,-1,942.7,404.7,174.5,643.3,1\n265,-1,512.3,453.9,34.3,109.9,1\n265,-1,1670.9,421.4,215.3,347,1\n265,-1,823.9,417.5,124.1,507.7,1\n265,-1,1331.4,433.7,132,399.5,1\n265,-1,371.5,445.5,44.5,109,1\n265,-1,1299.9,441.1,42.8,108.6,1\n265,-1,402.2,463,43.4,112.4,1\n265,-1,589.6,459.8,23,62.6,0.993\n265,-1,465.9,459.4,28.6,103.7,0.989\n265,-1,779.7,453.2,25.9,73.2,0.975\n265,-1,553,460.5,23.9,62,0.921\n265,-1,611.2,460.9,23,60,0.918\n83,-1,913.6,482,97,113.2,1\n83,-1,835,471.8,53.8,78.6,1\n83,-1,373.9,447.1,43.9,105.1,1\n83,-1,1260.8,446.8,35.4,101.2,1\n83,-1,1088,486.6,36.5,115.1,1\n83,-1,1004.2,442.8,42.1,110,1\n83,-1,715.6,461.4,94.4,221.4,1\n83,-1,466.2,465.7,38.2,104.9,1\n83,-1,540.7,446,108.8,328.8,1\n83,-1,420.4,458.1,41.1,86.1,0.999\n83,-1,1054.9,482.9,39,110.6,0.999\n83,-1,623.9,444,95.9,288.6,0.999\n83,-1,502,461.6,28.1,93.6,0.706\n83,-1,1097.1,447.9,39.1,106,0.46\n83,-1,516.8,461.6,31.8,88.1,0.197\n254,-1,1224.8,437.9,201.6,377.3,1\n254,-1,413.6,462.9,40.1,113.6,1\n254,-1,652.4,447.5,61.2,188.7,1\n254,-1,371.2,445.7,44.5,107.4,1\n254,-1,921.8,394.5,162.3,655.2,1\n254,-1,514,452.2,32.9,113.5,1\n254,-1,804.4,437.8,137.2,454.4,0.999\n254,-1,588.8,458.8,24.4,64.3,0.998\n254,-1,470.6,459.5,30.8,105.9,0.993\n254,-1,769.7,452.9,24.6,71.2,0.983\n254,-1,551,460.9,23.9,62.9,0.911\n254,-1,610.3,460.5,23.4,59.7,0.781\n254,-1,1844.3,390.1,76.7,393.3,0.436\n254,-1,628.3,464.7,28.7,64.3,0.422\n254,-1,493.1,457.1,22,106.1,0.377\n254,-1,1105.5,446.6,45,110.7,0.164\n254,-1,1078.9,486.6,49.7,105.9,0.102\n115,-1,913.6,483.8,97.2,110.9,1\n115,-1,374.3,446.3,43.1,106.8,1\n115,-1,441.5,468.5,43.3,103,1\n115,-1,1088,485,37.3,116.9,1\n115,-1,557.9,432.6,133.3,377.8,1\n115,-1,1242.6,444.7,41.4,103,1\n115,-1,669.8,437.5,98.7,320,1\n115,-1,770.1,455.2,83,240,1\n115,-1,501.2,465,35.3,107.8,1\n115,-1,1006.6,445.5,37.9,99.5,1\n115,-1,833.4,469.9,55.1,81.4,0.998\n115,-1,1052.2,483.6,40.7,108.9,0.998\n115,-1,536.5,464.9,24.7,66.7,0.134\n514,-1,381.5,463.3,51.7,116.7,1\n514,-1,905.4,443.6,147.6,283.4,1\n514,-1,725,437.4,118.1,265.8,1\n514,-1,837.5,469.6,51.1,81.1,1\n514,-1,1543,379.2,317.6,701.8,1\n514,-1,1042.9,441.4,97.3,238.6,1\n514,-1,1178.5,448.3,35.9,88.7,1\n514,-1,572.3,455.3,33.2,84.1,1\n514,-1,1332.3,427.1,238.9,650.7,1\n514,-1,691.7,446.6,43.5,130.7,1\n514,-1,641.5,455.6,34.6,89.9,1\n514,-1,539.3,460.9,28.9,75.6,0.994\n514,-1,459.3,460.1,25.6,73.6,0.982\n514,-1,413.7,470.7,48.2,96.9,0.407\n514,-1,1785.7,385.7,135.3,506.9,0.106\n547,-1,1075.8,442.3,92.9,280.4,1\n547,-1,938.7,408.4,112.1,301.1,1\n547,-1,653.8,452.6,38.7,115.8,1\n547,-1,715.8,450.2,35.5,97.8,1\n547,-1,1181.4,442.1,50.8,108.6,1\n547,-1,579.2,455,38.1,86.2,1\n547,-1,1532.9,407.7,209.9,658.3,1\n547,-1,380.8,464,50.2,113.6,1\n547,-1,870.3,437.7,82.3,245.9,1\n547,-1,415.2,468.3,45.7,103.3,1\n547,-1,794.3,476,60.1,60.2,1\n547,-1,835.8,470.9,52.8,78.6,0.999\n547,-1,545.8,460.7,29.9,78.2,0.998\n547,-1,1041.7,448.2,34.3,96.9,0.93\n547,-1,504.3,457.7,23,56.5,0.913\n547,-1,455.6,463.3,31.7,72.9,0.525\n598,-1,915.6,484.1,94.2,111.2,1\n598,-1,835.9,472.9,52.9,77.2,1\n598,-1,722.4,446.9,45.8,112.8,1\n598,-1,1252.1,444.6,107.2,273.1,1\n598,-1,664.2,457.4,37.9,102.8,1\n598,-1,797.4,475.4,54.8,62.9,1\n598,-1,382,462.7,47.2,116,1\n598,-1,417,467,41.2,106.2,1\n598,-1,554.3,461.6,30.5,84,1\n598,-1,1032.4,437.1,90.2,239.6,1\n598,-1,1104.9,413.5,101.3,284.6,1\n598,-1,629.6,455.9,34.9,98.9,0.997\n598,-1,583.1,457.6,33.1,82.4,0.942\n598,-1,993.8,449.7,31.8,90.3,0.869\n598,-1,1204.3,435.9,54.4,249.1,0.057\n537,-1,660.7,449.9,42,119,1\n537,-1,808.7,431.6,122,259.9,1\n537,-1,1461.1,419.7,225,661.3,1\n537,-1,716.1,450.6,33.1,94.9,1\n537,-1,1020,444.7,114.6,278.3,1\n537,-1,574.9,453.7,35.2,87.2,1\n537,-1,923.2,411.7,118,299.3,1\n537,-1,381,463,50.3,115.2,1\n537,-1,414.5,467.7,46.6,103.7,0.999\n537,-1,1104.2,443.7,85.2,228.4,0.997\n537,-1,1729.2,385.3,191.8,695.7,0.995\n537,-1,544.5,460.4,27.9,77.8,0.987\n537,-1,458.1,461.7,28.8,70.9,0.596\n537,-1,1173.9,450.1,39.2,83.4,0.112\n537,-1,568.1,433.6,20.7,37.6,0.071\n412,-1,649.9,409.4,145.1,336.6,1\n412,-1,257.3,432.4,123.1,342.6,1\n412,-1,875.5,440.4,63.8,169.9,1\n412,-1,1069.5,416.2,196,609.9,1\n412,-1,426.2,447,152.4,328,1\n412,-1,379.5,467.9,52.8,107.6,1\n412,-1,836.6,470.8,55.1,81.6,0.999\n412,-1,793.6,476.3,63.1,59.7,0.999\n412,-1,983.8,422.2,133.8,514.1,0.999\n412,-1,520.9,429.5,132.5,301.9,0.957\n114,-1,914.5,483.7,95.3,111.4,1\n114,-1,374,446.1,42.9,106.8,1\n114,-1,1088.6,484.4,36.3,117.5,1\n114,-1,441.4,469.5,44.8,102.5,1\n114,-1,1243.5,444.8,40.9,103.7,1\n114,-1,560.3,430.9,130.5,380.1,1\n114,-1,768.2,458,80.4,236.9,1\n114,-1,668.7,436.1,97.2,318.5,1\n114,-1,501,465.9,35.5,105.4,1\n114,-1,1051.1,483.5,41.1,109.9,1\n114,-1,1005.4,446.1,39.1,100.3,1\n114,-1,835.1,470.4,53.2,78.4,1\n539,-1,657.9,451,42.2,119,1\n539,-1,1458.1,412.1,237.2,668.9,1\n539,-1,811.7,432.9,125.6,253.1,1\n539,-1,715.5,450.1,34.1,94.8,1\n539,-1,381.1,462.8,49.7,115.4,1\n539,-1,574.1,454.3,35.6,87.7,1\n539,-1,1027.8,442.9,110.3,280.2,1\n539,-1,922.1,415.2,134.5,298.2,1\n539,-1,414.8,468.5,45.8,102.8,0.999\n539,-1,544.4,460.4,29.1,78.2,0.993\n539,-1,1752.9,374.1,168.1,706.9,0.992\n539,-1,1100.3,449.4,82.8,226.4,0.812\n539,-1,457.7,462.1,29.2,70.9,0.555\n539,-1,1171,447.6,43.3,94.8,0.305\n539,-1,570.7,434.9,21.4,39.6,0.06\n518,-1,741.5,433.8,106.6,263,1\n518,-1,382.9,463.8,51.1,115.9,1\n518,-1,918.4,439.9,141.2,288.8,1\n518,-1,835.5,472.4,52.8,79.2,1\n518,-1,1560.3,376.5,296.7,704.5,1\n518,-1,1323.2,440.8,253.2,613.4,1\n518,-1,688.3,451.3,40,121.4,1\n518,-1,1179.1,448.1,36.1,87.5,1\n518,-1,572.7,458.1,32.9,82.1,1\n518,-1,1045.8,443.1,103.3,238.9,1\n518,-1,645.4,452.9,33.2,98.3,1\n518,-1,540.5,462.3,29.1,74.9,0.992\n518,-1,456.5,460.5,26.6,74.6,0.976\n518,-1,413.1,471.1,42.5,100,0.873\n324,-1,1441.9,438.7,53.8,113.2,1\n324,-1,491.3,454.3,45.4,110.8,1\n324,-1,42.1,408.2,277.2,445.2,1\n324,-1,895.1,416.9,145,534.4,1\n324,-1,1052.8,410.2,195.2,604.6,1\n324,-1,410.4,469.7,46.3,104.4,1\n324,-1,827.3,443.5,84.6,219.6,1\n324,-1,658.4,462.7,26.7,74.1,1\n324,-1,380.6,464.6,44.7,112.2,1\n324,-1,1212.4,437.8,112.8,251.9,0.998\n324,-1,1738.6,401.9,172.5,453,0.997\n324,-1,587.5,459.3,22.2,58.2,0.967\n324,-1,798.1,473.3,46.1,66.7,0.96\n324,-1,625.3,458.1,24.7,60.3,0.95\n324,-1,556.3,460,22.4,58.9,0.941\n509,-1,382.3,463.2,52.9,116.5,1\n509,-1,835.3,471.9,50.4,78.1,1\n509,-1,895.7,441.9,151.1,284.1,1\n509,-1,720.2,433.4,103.4,268.1,1\n509,-1,1524.7,376.2,288.6,704.8,1\n509,-1,1319.3,412.1,194.7,647.7,1\n509,-1,637.5,456,34.8,89.1,1\n509,-1,572,457.7,33.5,82.2,1\n509,-1,1177.4,449.5,37.1,87.7,1\n509,-1,1095.4,447,55.5,149.3,0.999\n509,-1,1752.8,398.4,168.2,518.6,0.998\n509,-1,1028.8,436.2,70.6,232.3,0.998\n509,-1,538.8,462,29.8,75.6,0.993\n509,-1,460.3,459.6,25.4,73,0.982\n509,-1,675.6,456.6,25.8,81.2,0.912\n509,-1,689.6,456.7,35.4,90,0.596\n509,-1,410.4,469.2,49.9,98.8,0.221\n7,-1,914,482.4,96.3,112.7,1\n7,-1,836.4,472.3,53.2,77.6,1\n7,-1,375.8,447.8,42.2,104.3,1\n7,-1,1371.5,413.4,165.3,381.3,1\n7,-1,586,448.6,86.9,260.8,1\n7,-1,439.3,445.9,122,285.2,1\n7,-1,1013.9,432.3,41.8,117.4,1\n7,-1,1256.5,447.4,34.3,101.6,1\n7,-1,1090.7,482.4,34.5,117.8,1\n7,-1,796.3,475.3,55.3,61.8,1\n7,-1,1054,485.3,38.9,107.9,1\n7,-1,1099.7,439.3,41.7,106.9,0.999\n7,-1,1485.7,428.4,138.8,344.7,0.956\n591,-1,835.8,472,53.3,78.8,1\n591,-1,722.4,446.4,45,109.7,1\n591,-1,914.9,482.8,96.5,112.9,1\n591,-1,1242.6,447.6,89.5,268.1,1\n591,-1,1009.1,433,87.3,242.5,1\n591,-1,664.7,455.7,39.3,105.4,1\n591,-1,1094.4,413.7,105.1,287.1,1\n591,-1,381.2,462,48.3,116.7,1\n591,-1,796.8,475.5,55.4,61.3,1\n591,-1,416.9,466.4,41.2,105.8,1\n591,-1,556.3,460.1,28.5,83.6,0.999\n591,-1,628.4,454.7,35.4,101.8,0.996\n591,-1,587.2,458.3,31.9,82.5,0.962\n591,-1,606.2,456.7,31.5,90.7,0.921\n591,-1,650.2,455.2,26.9,102.6,0.47\n508,-1,382.1,463.1,52.3,116.9,1\n508,-1,892,437.2,149.5,289.9,1\n508,-1,834.4,472.4,51.8,78,1\n508,-1,717.4,435.6,98.6,261.7,1\n508,-1,1519.7,387.1,286.2,693.9,1\n508,-1,1313.9,420.9,193,631.2,1\n508,-1,637.9,456.1,35.7,88.6,1\n508,-1,1176.8,449.1,37.5,88.8,1\n508,-1,571.8,458.2,33.3,81.7,1\n508,-1,1022.8,435.9,75.7,241.9,0.999\n508,-1,1746.3,404.1,173.4,515.9,0.999\n508,-1,1091.4,451.8,57.3,143.8,0.999\n508,-1,538.6,462.1,30.4,75.2,0.992\n508,-1,459.7,459.6,25.2,73.5,0.976\n508,-1,675.8,457,28.3,79.1,0.965\n508,-1,802.9,479.7,50.4,59.4,0.398\n508,-1,411.6,469.1,48.6,98.9,0.292\n554,-1,837.5,472.9,51.7,78.9,1\n554,-1,1088.4,442.1,109.1,281.7,1\n554,-1,716.9,447.7,38.4,101.3,1\n554,-1,649.3,452.6,38.3,114.1,1\n554,-1,1560.1,402.3,235.2,678.7,1\n554,-1,381.5,463.7,49.5,114.9,1\n554,-1,892.8,434.2,95.8,255,1\n554,-1,581.8,457.2,37.5,84.8,1\n554,-1,796,476,55.6,62.6,1\n554,-1,989.9,409.9,82.1,298.9,1\n554,-1,416.3,467.5,44.9,102.5,1\n554,-1,548.4,461.2,29.4,77.8,0.998\n554,-1,1195.1,439.7,42,113.8,0.924\n554,-1,507,457.1,23.9,57.6,0.923\n139,-1,913.8,483.7,96.9,110.8,1\n139,-1,407.9,468.7,63.6,102.9,1\n139,-1,1216.2,445.2,40.8,103.7,1\n139,-1,813.8,450.7,88.1,263.7,1\n139,-1,567.3,436.9,154.7,418.7,1\n139,-1,1088.1,486.5,38.2,114.4,1\n139,-1,1002.8,442.9,38.5,103.8,1\n139,-1,373.4,446,42.6,104.8,1\n139,-1,696.1,431.6,104.6,333,1\n139,-1,485.6,467.9,39.9,106.7,1\n139,-1,1053.2,483.5,37.6,109.3,1\n139,-1,531.8,455.3,29.6,71.4,0.978\n139,-1,1106.4,464.1,34.8,84,0.275\n314,-1,494.3,455.8,47.1,109.9,1\n314,-1,1029.4,401.7,216.3,620.1,1\n314,-1,1269.9,424.6,101.4,270.1,1\n314,-1,1693.7,417.9,227.3,517.4,1\n314,-1,411.1,468.3,46.6,105.6,1\n314,-1,1409.3,438.3,54.2,114.7,1\n314,-1,897.8,426.6,137.4,523,1\n314,-1,10,394.2,168.4,464.9,1\n314,-1,806.2,442.7,68.1,216.6,1\n314,-1,658.8,462.8,25.8,73.4,1\n314,-1,382.2,466.3,44.4,111,1\n314,-1,1196.5,448.9,38.4,97.1,0.994\n314,-1,579.5,460.6,23.3,57.3,0.99\n314,-1,553.1,461.3,22.7,58,0.945\n314,-1,624.2,459.8,23.9,59.1,0.945\n575,-1,836.6,472,53.1,78.3,1\n575,-1,719.7,446.5,42.1,106.9,1\n575,-1,1158.5,439.5,126.7,275.1,1\n575,-1,381.7,465.4,48.4,112.8,1\n575,-1,797.5,476.1,54.6,61,1\n575,-1,1030.6,413.6,118,289.8,1\n575,-1,416.9,468.9,42.5,103.3,1\n575,-1,962.4,432,104.6,245.9,1\n575,-1,1669.7,399.2,251.3,681.8,1\n575,-1,553.6,458.2,31.9,84.4,0.999\n575,-1,664.9,452.9,38.9,103.4,0.999\n575,-1,582.5,458.6,41.8,83.9,0.988\n575,-1,642,452.3,35.3,106.8,0.977\n575,-1,615.5,458.5,25.4,86.9,0.106\n122,-1,915,484.9,95.3,109.2,1\n122,-1,374,446.2,41.5,105.8,1\n122,-1,1089,483.5,37.3,118.6,1\n122,-1,434.5,469.1,46.1,104.9,1\n122,-1,678.5,440.8,100.9,312.7,1\n122,-1,567,438.6,129.8,383.1,1\n122,-1,497.8,469.6,34.6,103.3,1\n122,-1,1237.7,443,40.4,104.9,1\n122,-1,780.1,451.2,95.9,251,1\n122,-1,1006.4,444.6,39.7,103.6,1\n122,-1,1051.6,483.8,40.3,109.7,1\n122,-1,533.5,458.7,30.1,70.5,0.937\n175,-1,552.2,428.9,211.3,477.5,1\n175,-1,409.3,468.2,51,104.2,1\n175,-1,877.2,448.1,120.4,294.3,1\n175,-1,771.5,435.2,116.7,361.5,1\n175,-1,1087.5,484.2,39.3,115.1,1\n175,-1,371.8,445.9,44,106.8,1\n175,-1,1164.4,447.6,43.7,100.3,1\n175,-1,506.5,454.1,38.4,110.2,1\n175,-1,1052.9,482,37.5,111.3,0.999\n175,-1,467.3,464.1,35,110,0.994\n175,-1,1149.4,450.2,33.1,96.4,0.643\n175,-1,491.4,458.9,25,111.6,0.441\n175,-1,955.3,434.8,74,259.5,0.366\n175,-1,554.4,456.8,22.4,58.8,0.282\n175,-1,538.2,457.8,25,74.4,0.209\n119,-1,915.2,484,94.8,110.7,1\n119,-1,373.4,446,42.5,106.5,1\n119,-1,561.9,437,130.4,381.4,1\n119,-1,438,467.8,43.5,103.7,1\n119,-1,1088.4,483.1,37.5,118.7,1\n119,-1,497.5,467.4,35.8,105.7,1\n119,-1,1239.5,442.5,40.2,104.2,1\n119,-1,678.4,439,99,309.1,1\n119,-1,774.6,452.8,90.3,250.6,1\n119,-1,1051.9,483.3,39.9,110.8,1\n119,-1,1006.7,444.6,39.7,104.3,0.999\n119,-1,538,462.7,28.7,65.5,0.854\n119,-1,519.3,462.3,30,78,0.528\n55,-1,914.5,482.7,96.8,112.2,1\n55,-1,836,473,54.1,76.3,1\n55,-1,477,444.4,123.9,314.3,1\n55,-1,374.8,445,43.6,107.5,1\n55,-1,623.4,446.1,89,271.1,1\n55,-1,1504.4,432.2,55.1,126.1,1\n55,-1,1260.6,446.7,35.2,101.6,1\n55,-1,418.5,457.4,42,86.7,1\n55,-1,796.1,475.7,57.5,61.9,1\n55,-1,1091.5,479.5,33.5,117.9,1\n55,-1,1097.6,435.7,40.1,113.6,1\n55,-1,1007.5,444.1,41.4,115.6,1\n55,-1,1052.7,484.8,39.6,109.1,0.999\n55,-1,585.1,456.6,38.4,134,0.938\n55,-1,692.8,473.1,59,193.5,0.141\n145,-1,402.6,465.7,60.9,106.4,1\n145,-1,1208.3,447.3,38.4,102.4,1\n145,-1,1087.6,486.6,38.1,112.5,1\n145,-1,701.3,438.1,128.9,324,1\n145,-1,478,466.8,42.7,109.6,1\n145,-1,565.7,437,148.5,431.3,1\n145,-1,820.7,447.4,90.2,276.3,1\n145,-1,1002.7,444.7,38,100.8,1\n145,-1,372.8,445.1,43.9,107.3,1\n145,-1,915.3,483.9,93.3,114.3,1\n145,-1,1052.9,483.7,39.8,109.4,0.998\n145,-1,520,458.9,29,72.2,0.974\n145,-1,1115.6,450.6,40.9,93.1,0.973\n145,-1,541.8,456.4,26.3,70.9,0.278\n145,-1,501.1,458.1,34.6,96.4,0.153\n596,-1,915.4,483.3,94.6,111.9,1\n596,-1,835.6,472.8,53.4,77.1,1\n596,-1,722.6,446.8,45,110.4,1\n596,-1,1246.6,447,107,272.6,1\n596,-1,1099.1,412.4,101.2,291,1\n596,-1,1026.6,431.5,83.8,239.1,1\n596,-1,664,456,39.1,103.8,1\n596,-1,797.1,475.9,55.6,62.1,1\n596,-1,381.4,461.8,47.8,116.1,1\n596,-1,553.9,460.3,31.4,84.8,1\n596,-1,416.1,466.9,42.4,106.4,1\n596,-1,630.6,455.5,34.2,100.4,0.997\n596,-1,992.6,448.6,34.7,97.3,0.984\n596,-1,581,456.5,33.2,83.6,0.926\n596,-1,519.7,455.1,20.2,55.5,0.052\n25,-1,914,483.5,96.6,112.3,1\n25,-1,836.4,472.7,53.7,77.1,1\n25,-1,1416.5,429.9,68.8,133.6,1\n25,-1,1486.9,404.5,227.6,422.4,1\n25,-1,375,445.9,43.7,107.9,1\n25,-1,461.1,440.9,120.4,296.5,1\n25,-1,1256.6,448.6,35.1,100.8,1\n25,-1,593.3,445.6,90.8,271.2,1\n25,-1,794.9,475.9,57.3,61.3,1\n25,-1,1091.3,481.4,33.5,119.2,1\n25,-1,417.9,457,42.4,87.2,1\n25,-1,1053.9,483.9,38.5,112,1\n25,-1,1012.4,437,42.1,117.5,1\n25,-1,1098.5,439,40.4,111.5,0.999\n25,-1,1628.8,413.5,146.4,391.9,0.353\n10,-1,914.7,482.4,95.6,112.2,1\n10,-1,835.8,472.7,53.7,76.9,1\n10,-1,440.4,445.6,128.4,282.5,1\n10,-1,375.6,446.4,41.6,105.5,1\n10,-1,586,442.5,87.9,271,1\n10,-1,1013.8,434.1,42.2,113.6,1\n10,-1,1256.6,447.1,34.8,101.4,1\n10,-1,1055,485.8,38.6,108.4,1\n10,-1,1419.3,405,127.4,404.6,1\n10,-1,796.2,475,56.9,62.8,1\n10,-1,1099.2,438.7,42.2,107.8,1\n10,-1,1091.3,481.4,33.7,118.1,1\n10,-1,1378.6,436.9,66.4,129.9,0.993\n10,-1,1505.6,419.6,149.9,359.5,0.991\n10,-1,418.9,461,40.9,89.1,0.547\n10,-1,657.9,465.9,50,173,0.07\n91,-1,914.3,482.8,96.9,112.2,1\n91,-1,835.5,473.1,54.4,77,1\n91,-1,373.2,446.7,45.3,105.3,1\n91,-1,1260.7,448.5,35.2,100.3,1\n91,-1,1088.2,483.3,37.1,118.6,1\n91,-1,461.4,467.4,42.8,103.7,1\n91,-1,728.9,453.1,90.5,233.9,1\n91,-1,550.4,443.8,113.5,341.9,1\n91,-1,1005.8,443.3,40.1,107.2,1\n91,-1,1052.5,482.4,39.6,111.3,0.999\n91,-1,629.9,446.3,100.5,294.4,0.998\n91,-1,424.2,457.9,38,87.3,0.992\n91,-1,508.1,462.7,29.6,102,0.619\n192,-1,632.2,421.5,167.1,525.4,1\n192,-1,567.3,454.5,59.1,161.8,1\n192,-1,405.4,468.6,52.6,107.8,1\n192,-1,939.8,448,105.6,309.7,1\n192,-1,804.2,440.3,110,358,1\n192,-1,370.5,445,45,106.3,1\n192,-1,508.9,455,34.8,109.9,1\n192,-1,1145.8,448.7,41.8,100.8,0.999\n192,-1,1087.8,482.2,40.8,117.5,0.999\n192,-1,459.1,468.3,41.2,108.9,0.999\n192,-1,1099.4,440.9,39.2,102.2,0.944\n192,-1,1173.4,450.7,33.6,94.8,0.771\n192,-1,582.3,430.5,23.7,41.9,0.749\n192,-1,1005.1,443.7,76.5,275.2,0.514\n192,-1,549.7,433.9,20.1,44.4,0.114\n192,-1,603.6,413.7,22.1,47.4,0.064\n192,-1,562.3,394.4,37.5,105.6,0.058\n489,-1,648.6,433,120.5,274.2,1\n489,-1,808.3,443.4,125.6,283.8,1\n489,-1,1376.6,392.6,279.4,688.4,1\n489,-1,568,456,34.1,80.6,1\n489,-1,1200.4,428.2,198.7,592.9,1\n489,-1,921.3,434.9,105.3,241.6,1\n489,-1,1031.9,439.3,41.6,114.5,1\n489,-1,1598.2,412,156.5,426.2,1\n489,-1,1183.7,450,33.8,90.3,0.999\n489,-1,1112.7,437.2,38.8,150,0.998\n489,-1,1084.7,455.3,41.6,142.4,0.997\n489,-1,533.6,457.6,27.8,74.5,0.99\n489,-1,461.3,458.5,26.3,80.3,0.984\n489,-1,629.4,460.9,27.5,70.3,0.619\n489,-1,439.7,463.6,30.2,86.8,0.431\n80,-1,912.5,484.1,98,111.1,1\n80,-1,835.2,472.3,53.7,77.4,1\n80,-1,374.5,446.9,43.4,105.1,1\n80,-1,1260,447.2,36.2,101.1,1\n80,-1,1088,485.7,36.9,115.8,1\n80,-1,419.7,456.9,41.5,85.8,1\n80,-1,533.2,444.5,113.9,333,1\n80,-1,708.9,452.2,94.8,229.3,1\n80,-1,1004.4,443,42.4,111.2,1\n80,-1,1054.1,483.4,40.1,109.9,1\n80,-1,469.9,466.1,35,100.5,1\n80,-1,615.2,441.6,94.4,291.1,0.999\n80,-1,1096.7,447.9,39.6,105.3,0.485\n80,-1,501.2,461.6,27.5,97.2,0.226\n80,-1,797.6,480.7,55.1,56.3,0.142\n80,-1,403.4,452.8,31.3,90,0.058\n80,-1,514.2,468.6,32.8,119.8,0.052\n482,-1,1182.8,419.8,166.3,586,1\n482,-1,1358.6,385.4,268,695.6,1\n482,-1,638.3,435.3,86.4,271.3,1\n482,-1,1038.2,441.5,37.7,105.3,1\n482,-1,564.9,454.2,34.9,82.1,1\n482,-1,783.8,436.3,94.8,290.5,0.999\n482,-1,747.4,446.5,45.2,129.8,0.999\n482,-1,875.3,433,133.4,257,0.998\n482,-1,1086.2,465.7,40.6,132.9,0.998\n482,-1,1114.2,441.1,39.7,145.2,0.992\n482,-1,534.9,459.4,26.2,73.1,0.951\n482,-1,851.5,411.1,73.6,308.3,0.93\n482,-1,463.6,462.6,32,73.4,0.848\n482,-1,1523.2,416,202.6,409.6,0.65\n482,-1,997.8,450.4,27.7,91.5,0.428\n482,-1,549.2,458.2,26.6,73.9,0.362\n482,-1,1070,451.9,34,117.7,0.115\n271,-1,1360.9,443.2,194,402,1\n271,-1,511.8,455,34.5,110.5,1\n271,-1,822.6,437.3,137.2,482.1,1\n271,-1,690.5,448,60.2,195,1\n271,-1,954.2,406,169.6,644.6,1\n271,-1,1637.3,418.4,132,335.8,1\n271,-1,374.3,447.7,42.4,111.8,1\n271,-1,651,462.5,25.7,69.8,0.997\n271,-1,460.1,460.8,31.7,105.9,0.996\n271,-1,585.7,459.3,23.5,62.4,0.993\n271,-1,559.5,461.8,23.3,60.9,0.932\n271,-1,634.9,461.3,26.7,63.2,0.859\n271,-1,414.1,466.3,31.5,104.7,0.085\n271,-1,784.5,459.6,25.3,69.6,0.055\n82,-1,912.8,483.3,97.2,112.1,1\n82,-1,835.2,471.4,53.6,78.8,1\n82,-1,374.7,447.4,43.5,105.2,1\n82,-1,1260.5,447.5,35.4,100,1\n82,-1,1088.3,487.4,36.2,113.9,1\n82,-1,712.3,454.3,100,226.9,1\n82,-1,1004.2,442.1,42.1,110.2,1\n82,-1,539.7,441.3,109.5,338.8,1\n82,-1,418.7,457.6,41.6,86.6,1\n82,-1,468.5,465.4,36.1,104,1\n82,-1,1054.4,485.3,39.6,108.7,1\n82,-1,620.2,441.6,94.4,284.1,0.998\n82,-1,500.5,460.3,26.3,94.2,0.577\n82,-1,1097.8,449.8,38,106.4,0.336\n95,-1,914,483.2,97,111.8,1\n95,-1,836.2,472.6,53.3,77,1\n95,-1,372.6,446.6,45,105,1\n95,-1,457.4,469.6,43.8,103.9,1\n95,-1,1259.2,445.3,37.3,103.7,1\n95,-1,1088.6,484.4,36.6,116.8,1\n95,-1,742.1,454,81.1,233.4,1\n95,-1,549.8,443.7,115.4,356,1\n95,-1,1004.5,442.4,41.4,108.6,1\n95,-1,1052,482.7,40.2,110.2,1\n95,-1,639.3,443.6,104.4,295,0.999\n95,-1,435.5,461.8,37,83.9,0.637\n95,-1,511.8,464.8,29.8,100.8,0.175\n398,-1,835.9,472.7,52.8,76.8,1\n398,-1,111,432.5,194.5,362.9,1\n398,-1,1075.3,427.6,217,583.5,1\n398,-1,609.5,406.1,123.3,345,1\n398,-1,315.8,443.8,172.2,356.4,1\n398,-1,796.7,476.3,55.6,61.8,1\n398,-1,910.7,437.7,61.1,179.5,1\n398,-1,976.6,423.6,132.4,514.7,0.998\n398,-1,562.9,463.2,19.2,52.8,0.922\n398,-1,432.7,441.6,116.1,299.7,0.808\n363,-1,835.3,472.4,53.7,77.4,1\n363,-1,1069,405.8,210,611.8,1\n363,-1,401,409.6,197.5,389.3,1\n363,-1,1.2,446,221.2,404.2,1\n363,-1,1538.4,434.5,47.9,115,1\n363,-1,928.3,420,140.8,517.3,1\n363,-1,796.9,475.9,56.9,61.4,1\n363,-1,627.6,459.1,28.7,73.5,0.999\n363,-1,181.6,435.5,119.3,340.6,0.991\n363,-1,596.2,459.4,22,56.7,0.881\n363,-1,565.7,461.1,17.5,59.1,0.872\n363,-1,884.3,454,31.4,67.6,0.869\n363,-1,657.9,460.4,25.2,72.4,0.741\n363,-1,374.4,459.2,43.1,105.2,0.053\n560,-1,836.4,472.8,54.5,76.7,1\n560,-1,718.1,448.7,37.8,99.5,1\n560,-1,1570.6,385.8,266.6,695.2,1\n560,-1,900.5,432.1,95,251.3,1\n560,-1,1000.1,414.1,116.2,281.5,1\n560,-1,643.4,452.9,38.7,112.8,1\n560,-1,381.6,464.1,48.7,113.9,1\n560,-1,797,476.4,56.5,61.2,1\n560,-1,415.7,467.2,45.2,103.5,1\n560,-1,1093.5,439.5,121.1,276.3,0.999\n560,-1,578.7,456.8,40,84.6,0.999\n560,-1,547.7,460.8,30,80.1,0.999\n560,-1,509.8,457.8,24,55.6,0.919\n560,-1,1200.3,446.4,47.6,112.1,0.21\n222,-1,1067.6,447,128.8,337.4,1\n222,-1,724.4,410.7,208.6,581,1\n222,-1,602.9,452.9,54.7,176.5,1\n222,-1,372.1,447.7,43.4,104,1\n222,-1,514.7,454.1,35.2,110.4,1\n222,-1,431.3,465.6,46.5,110.7,1\n222,-1,890,426.2,134,414.4,1\n222,-1,1217.2,452.7,38.6,96.2,0.993\n222,-1,552.1,455.6,24.1,65.3,0.936\n222,-1,659.1,465.1,23.4,70,0.895\n222,-1,1056.4,478.3,39.1,129,0.477\n222,-1,412.6,467,33.5,96.9,0.32\n222,-1,595.9,422.9,18.9,36.4,0.156\n327,-1,1446.3,439.9,54.1,111,1\n327,-1,490.6,454.1,43.5,111.6,1\n327,-1,896.7,417.1,144.4,532.4,1\n327,-1,1051.6,403.8,198.7,610,1\n327,-1,86,408.2,237.9,433.9,1\n327,-1,410.5,467.8,46.8,106.6,1\n327,-1,796.8,477.1,53.1,59.9,1\n327,-1,658.5,463.2,25.7,72.3,1\n327,-1,380.6,463,44.8,113.7,1\n327,-1,836.3,442.6,86.7,225.6,1\n327,-1,1755.8,398.6,165.2,468.8,0.999\n327,-1,585.2,459.3,21.4,58.3,0.956\n327,-1,624.8,459.4,24.3,61.3,0.954\n327,-1,560.1,459.5,21.9,59.3,0.948\n327,-1,1203.4,432.8,86.8,252.6,0.732\n568,-1,837.2,472.6,52,76.3,1\n568,-1,720.3,447.9,40.4,102.3,1\n568,-1,1145.7,439.1,101.5,281.3,1\n568,-1,797.4,475.9,54.7,61.9,1\n568,-1,1012.7,417.8,129.9,284.8,1\n568,-1,1639.4,407.7,248,673.3,1\n568,-1,382.5,465.3,48.8,112.9,1\n568,-1,416.8,467.7,44.2,103.8,1\n568,-1,641,452.6,38.7,111.3,1\n568,-1,552.2,459.3,29.7,82.9,0.999\n568,-1,946.1,432,73.3,240.3,0.999\n568,-1,580.4,458.6,42.1,83.3,0.998\n568,-1,665.6,450.9,35.9,102.5,0.978\n568,-1,517.4,458.3,21.1,53.6,0.491\n568,-1,498.8,461.9,22.7,54.7,0.427\n572,-1,836.4,472.2,52,77,1\n572,-1,1153,441.7,125.3,278.3,1\n572,-1,719.5,447.1,41.6,104.6,1\n572,-1,1662.1,400,245.7,681,1\n572,-1,382.3,464.3,48.5,114.2,1\n572,-1,797.4,476.3,54.7,61,1\n572,-1,416.5,467.1,43.2,104.7,1\n572,-1,1018.4,416.8,127.4,284.7,1\n572,-1,552.2,458.7,30.8,83.3,1\n572,-1,958.1,431.5,89.5,251.4,0.999\n572,-1,665.7,451.7,38.2,102.9,0.998\n572,-1,639.4,452.6,36.2,107.5,0.997\n572,-1,582.9,458.3,40.7,82.6,0.994\n572,-1,519.2,458.7,19.9,53.1,0.092\n470,-1,914.5,483.7,96.5,110.6,1\n470,-1,601.7,431.3,81.5,278.3,1\n470,-1,735.1,436.6,96.2,301.2,1\n470,-1,1294.7,392.1,194.8,688.9,1\n470,-1,837.7,404.4,84.6,303,1\n470,-1,995.2,446.2,37.3,99.6,1\n470,-1,1082.9,472.7,45.2,124.4,0.999\n470,-1,1139.2,424.4,147.8,574.5,0.999\n470,-1,25.7,387.2,398.1,693.8,0.999\n470,-1,1047.9,439.7,39.7,110.1,0.998\n470,-1,1476.5,421.2,111.5,379.7,0.997\n470,-1,380.5,461.9,45.7,116.3,0.997\n470,-1,563.6,453.7,29.3,79.6,0.976\n470,-1,709.2,472.9,24.6,71.7,0.736\n470,-1,720.1,474.3,30.6,96.7,0.079\n298,-1,762.7,444.1,65.2,203.6,1\n298,-1,1391,431,125,282.9,1\n298,-1,1557.4,432.5,205,465.3,1\n298,-1,508,456,35.8,108.1,1\n298,-1,1163.5,442.6,48.9,111.8,1\n298,-1,874.2,436.9,155.9,492.6,1\n298,-1,1009.4,405.1,155.5,617.5,1\n298,-1,410.5,469.7,47.1,104.9,1\n298,-1,833.8,478.4,53.6,68.4,1\n298,-1,382.5,462.2,43,113,1\n298,-1,660.2,462.3,25.2,72.6,0.998\n298,-1,579,460.3,26.3,60.1,0.992\n298,-1,552.3,459.9,26.3,63.7,0.914\n298,-1,596.9,458,25.8,58.7,0.697\n298,-1,440.7,461.9,29.9,97.6,0.449\n558,-1,1091.4,444.9,115.4,279.6,1\n558,-1,836.1,472.6,53.9,77.8,1\n558,-1,717.3,448.2,39.4,101.7,1\n558,-1,1566.9,395.2,254.8,685.8,1\n558,-1,645.4,452.4,39,114.2,1\n558,-1,381.9,464,48.6,114.1,1\n558,-1,895.8,435.4,100.1,255.4,1\n558,-1,1000.5,413,99,292.2,1\n558,-1,797.1,476.1,55.7,61.4,1\n558,-1,578.7,456.1,39.4,86.4,1\n558,-1,415.7,466.7,44.9,103.3,1\n558,-1,547.7,460.6,29,78.7,0.997\n558,-1,508,456.2,24.4,57.1,0.908\n558,-1,1193.6,444.6,49.5,114,0.721\n290,-1,736.9,444.1,72.5,207.4,1\n290,-1,848.7,428.6,168.2,494.8,1\n290,-1,1352.7,440.1,52,111.7,1\n290,-1,1496.2,436.6,242.8,442.6,1\n290,-1,509.2,455.6,34.6,108.4,1\n290,-1,998.4,404.4,157.6,640.4,1\n290,-1,659.5,459.2,26.6,76.3,1\n290,-1,408.6,470.1,47.4,105.2,1\n290,-1,383.1,461.3,43.5,111.7,0.997\n290,-1,1152.1,448.4,48.8,106.4,0.994\n290,-1,577,462.5,26,60.6,0.982\n290,-1,450.2,459.6,30.7,101.9,0.962\n290,-1,560,462,25.6,61.5,0.928\n290,-1,596.4,459.8,24.6,57.4,0.912\n290,-1,544.8,461.2,26.9,69.4,0.859\n462,-1,913.3,484.2,97.8,109.1,1\n462,-1,827.4,406.5,90.1,305,1\n462,-1,677.5,434.9,120.2,304.9,1\n462,-1,1167.3,405.7,309.8,675.3,1\n462,-1,1051.2,440.9,37.7,109.6,1\n462,-1,995.6,445.3,37.1,103,1\n462,-1,1398.6,431.7,170.7,360,0.998\n462,-1,251.7,369.5,386.3,711.5,0.998\n462,-1,1085.8,479.6,35.7,104.7,0.607\n462,-1,569.5,421.8,88.6,345.6,0.328\n462,-1,797.5,448.5,37.5,147.4,0.082\n275,-1,1377.8,439.1,194.8,408.6,1\n275,-1,511.4,454.8,34.9,111.2,1\n275,-1,699.1,445.8,72.5,198.7,1\n275,-1,391.7,465.5,41.7,113,1\n275,-1,824.7,430,143.6,490.6,1\n275,-1,967.4,401.6,161.7,654.1,1\n275,-1,1590.6,415.8,126.4,336.8,1\n275,-1,457.5,456.7,31.4,109.8,0.999\n275,-1,655.1,460.8,27.1,72.5,0.992\n275,-1,582,460.7,23,60.6,0.988\n275,-1,629.9,460.4,25.8,61,0.943\n275,-1,556,460.6,24,61.6,0.937\n275,-1,671.5,464.8,35.4,79.8,0.074\n529,-1,795.9,431.6,110.5,265.2,1\n529,-1,671.9,454.7,43.4,117.2,1\n529,-1,1435.7,422.3,194,636,1\n529,-1,996.6,439.6,102.2,287.9,1\n529,-1,574.2,455.7,34.4,85.9,1\n529,-1,382.5,463.5,49.5,114.8,1\n529,-1,908.6,405.9,81.6,305.6,1\n529,-1,1086.7,440,93,229.1,0.999\n529,-1,717.6,452.3,32.3,89.9,0.999\n529,-1,1613.4,366.5,307.6,714.5,0.999\n529,-1,1178.5,448,36.3,89.5,0.999\n529,-1,416.2,467.8,45.4,103.3,0.999\n529,-1,544.7,461.8,28.1,75.8,0.979\n529,-1,458.5,462.2,28.9,71,0.868\n529,-1,654.4,455.7,35.5,102.7,0.241\n529,-1,566.6,432.6,20.5,39.3,0.081\n32,-1,913.8,484.3,97.6,111,1\n32,-1,835.5,472.6,54.2,77.2,1\n32,-1,375.8,447,42,105.5,1\n32,-1,473.5,445.8,114.5,297.3,1\n32,-1,1444,432.1,63,129.2,1\n32,-1,1257.3,448.6,34.6,99.8,1\n32,-1,417.8,457.1,41.7,88.4,1\n32,-1,1011.4,439.2,42.1,116.8,1\n32,-1,1090.8,480.9,34.6,120.3,1\n32,-1,795.6,475.3,57.2,62.2,1\n32,-1,1605.4,396.7,178.5,432.5,1\n32,-1,600.7,445.2,89.5,275,1\n32,-1,1098.3,439,40.9,111.2,1\n32,-1,1054.1,485.6,39.1,109.6,0.999\n32,-1,1704.6,412.4,201.6,397.2,0.863\n538,-1,658.6,450.7,42.7,118.7,1\n538,-1,1456.9,412,237.6,669,1\n538,-1,809,429.5,127.1,262.5,1\n538,-1,716.2,450.4,33.2,94.3,1\n538,-1,381.1,463,50.5,115.9,1\n538,-1,1024.1,445.9,114.7,275.2,1\n538,-1,574.2,454.7,36,86.6,1\n538,-1,918.3,414.3,128,301.8,1\n538,-1,415,467.9,46.4,103.1,0.999\n538,-1,545,460.3,29.1,78.7,0.993\n538,-1,1733.9,365.9,187.1,715.1,0.974\n538,-1,1099.3,444.1,87.7,231.6,0.96\n538,-1,456.1,462,30,72.5,0.569\n538,-1,1171.7,451.4,43.2,84.9,0.159\n538,-1,568.5,433.4,20.7,38.5,0.055\n333,-1,1058.4,400.5,195.2,606.1,1\n333,-1,490.3,453.9,39.2,111.2,1\n333,-1,1466.3,441.8,46.2,109.3,1\n333,-1,835.3,472.8,53.6,78.3,1\n333,-1,208,404.8,149.3,423.6,1\n333,-1,903.2,422.9,143.1,526.1,1\n333,-1,409.9,469.6,46.3,104.9,1\n333,-1,797.1,476.3,59.1,60.8,1\n333,-1,659.8,462.1,26.5,74.2,1\n333,-1,382.5,464.4,45.4,112.1,0.999\n333,-1,629.1,460.1,25.1,64.1,0.969\n333,-1,558.3,462.7,20.8,58.3,0.952\n333,-1,583.3,459.8,21.9,59,0.912\n333,-1,1775.5,404.4,145.5,453.3,0.762\n333,-1,515.5,455.1,35.7,81.7,0.111\n266,-1,673.9,449.7,68.1,194.7,1\n266,-1,821.9,441.7,129.5,478.3,1\n266,-1,512.2,454.8,34.6,109.5,1\n266,-1,1667.7,416.2,205.4,351.5,1\n266,-1,946.4,410.2,166.4,640,1\n266,-1,1342.1,437.5,130,398.1,1\n266,-1,402.2,464.6,43.1,110.7,1\n266,-1,370.3,445,45,107.9,1\n266,-1,1300.5,443.4,41.5,104.7,0.997\n266,-1,463.6,460.3,31.1,102.8,0.995\n266,-1,585.8,459.6,23.6,63,0.993\n266,-1,781.4,452.4,26.9,73.3,0.983\n266,-1,555.7,461.4,24,61.3,0.939\n266,-1,610.3,460.3,22.9,59.6,0.912\n431,-1,914.8,484.8,94.6,108.7,1\n431,-1,397.3,434.4,106.2,311.8,1\n431,-1,1066.1,390.3,203.5,689.4,1\n431,-1,734.6,414.8,118.2,313.2,1\n431,-1,538,439.2,124.6,319.2,1\n431,-1,830.8,436.9,56,164.8,1\n431,-1,640.9,429.8,110.1,287.2,0.999\n431,-1,1534.5,267.2,386.5,813.8,0.945\n431,-1,523.2,467,24.3,67.1,0.667\n431,-1,499.7,470.7,26.1,66.6,0.628\n260,-1,1263.1,443.2,175.1,383.2,1\n260,-1,407.5,464.1,43.3,112.3,1\n260,-1,662.1,451.3,63.4,188.8,1\n260,-1,935.8,404.4,169.4,638.4,1\n260,-1,512.1,453.1,34.6,109.7,1\n260,-1,1735.2,397.4,185.8,386.8,1\n260,-1,371.5,446.3,44.3,105.4,1\n260,-1,815.3,429.8,128,481,1\n260,-1,589.5,459.4,23.2,63.4,0.996\n260,-1,471,459.8,29.6,104.1,0.993\n260,-1,775.5,453.6,25.3,73.2,0.987\n260,-1,554,461.2,23.3,60.8,0.936\n260,-1,605.8,459.1,23.4,62.3,0.899\n260,-1,493,457.4,22.6,104.4,0.508\n260,-1,757.5,454.6,22.5,74.1,0.097\n483,-1,1355.2,386.5,279.2,694.5,1\n483,-1,640.7,436.9,92.9,270.9,1\n483,-1,1188,419.6,163.2,589.8,1\n483,-1,1036.7,440,38.6,106.3,1\n483,-1,565,454.7,34.9,81.9,1\n483,-1,790.8,435.8,99.5,296.6,1\n483,-1,744,446.6,44.7,131,0.999\n483,-1,1086,468.4,39.3,131.6,0.999\n483,-1,880.5,434.7,129.2,253.5,0.999\n483,-1,1113.2,442.7,40.1,142.7,0.992\n483,-1,1544.5,410.6,184.5,421.3,0.983\n483,-1,467.5,459.9,28.6,77.5,0.981\n483,-1,535.2,459.3,26.5,72.1,0.958\n483,-1,1001.6,448.4,27.1,94.2,0.632\n483,-1,855.8,418.2,64.4,287.1,0.382\n483,-1,1068,448.1,34.5,115.8,0.101\n483,-1,1155.8,454.4,24.9,90.6,0.051\n93,-1,914.3,483.2,96.9,112,1\n93,-1,836.3,472.8,53.6,78,1\n93,-1,373,446.5,45.2,104.8,1\n93,-1,1260,446.8,36.2,101.9,1\n93,-1,1088.7,483.9,37,117.6,1\n93,-1,461.3,468.6,42.1,104.9,1\n93,-1,733.9,452.5,86.8,235.3,1\n93,-1,551.4,443,112.2,354.1,1\n93,-1,1005,442.5,40.7,108.4,1\n93,-1,1052.1,482.8,40.4,110.7,1\n93,-1,639.1,443.8,102.5,297.8,0.999\n93,-1,426.7,457.5,35.3,86.2,0.974\n93,-1,506.3,465.7,29.7,91.4,0.358\n245,-1,630.4,451.6,75.2,185.1,1\n245,-1,855.3,417.6,200.7,605.6,1\n245,-1,417.9,464.8,37.3,110.2,1\n245,-1,370.4,446.4,45,105.7,1\n245,-1,1200,445,113.6,353.5,1\n245,-1,513.7,452.8,32.9,112.3,1\n245,-1,1083.8,481,43.4,118.4,1\n245,-1,589.8,460,21.7,64.7,0.997\n245,-1,1115.6,446.4,40.3,101.3,0.996\n245,-1,474.9,456,33.1,107.8,0.986\n245,-1,553.1,458.4,24.5,62.4,0.921\n245,-1,774.7,440.5,140.5,422.3,0.772\n245,-1,442.7,461.9,40.3,102,0.072\n179,-1,570.3,425.7,195.2,484.8,1\n179,-1,408.6,469.1,49.7,104.5,1\n179,-1,780,439.8,105.8,355.3,1\n179,-1,1159,446.9,39.5,101.8,1\n179,-1,894.3,443.8,111.2,299.4,1\n179,-1,370.4,443.8,45.5,108.6,1\n179,-1,507,454.9,38.9,107.6,1\n179,-1,1086.4,484.2,39.8,115.5,1\n179,-1,464.9,467.4,35.2,110,0.998\n179,-1,958.3,441.4,115.7,261.3,0.995\n179,-1,1054.8,481.7,34.1,113.1,0.954\n179,-1,555.6,458.6,26.3,67.8,0.947\n179,-1,535.7,452,28.7,88,0.615\n179,-1,565.6,453.4,37,86.2,0.255\n179,-1,578.6,432.5,21.8,40.9,0.103\n4,-1,915.6,481.8,94.4,113.5,1\n4,-1,836.9,472.5,52.8,77,1\n4,-1,376.3,447.1,41.3,104.5,1\n4,-1,440.5,447.7,111.4,277.6,1\n4,-1,1346.8,416.3,177.8,380.7,1\n4,-1,588,446.4,85.9,263.5,1\n4,-1,1257.2,448.6,33.9,102.1,1\n4,-1,1090.3,482.5,34.6,117.7,1\n4,-1,796.8,474.9,55.7,62.5,1\n4,-1,1014.4,431.3,43.9,117.7,1\n4,-1,1054.3,484.6,38.8,108.5,0.999\n4,-1,1099.2,439.3,40.5,107.9,0.999\n11,-1,914,482.3,97.2,112.5,1\n11,-1,835.8,472.6,53.7,77.1,1\n11,-1,586.8,443.6,86.1,271,1\n11,-1,441.2,446.4,127.9,282.4,1\n11,-1,376.3,447.2,41.6,104.5,1\n11,-1,1425.4,405.6,131.1,394.2,1\n11,-1,1014.1,433.3,42.7,115.4,1\n11,-1,1257,446.9,34.8,101.6,1\n11,-1,1090.5,483.8,34.2,117.1,1\n11,-1,796,475.5,56.7,62.6,1\n11,-1,1055.1,487.3,37.3,106.3,1\n11,-1,1099.4,438.2,41.7,108.5,1\n11,-1,1381.6,436.5,62.4,130.3,0.998\n11,-1,1522.9,422.7,149.2,353.8,0.994\n11,-1,417.2,460.4,39.1,85.3,0.825\n11,-1,659.6,465.1,49.6,173,0.057\n77,-1,913.2,483.5,97.5,111,1\n77,-1,835.4,472,53.5,77.3,1\n77,-1,374.9,447.3,43.3,105,1\n77,-1,1260.4,447.5,35.4,100.5,1\n77,-1,1088.3,485.2,36.3,116.3,1\n77,-1,529.5,449.5,118,325.1,1\n77,-1,418.9,457.1,41.8,85.4,1\n77,-1,1004.5,442.8,41.9,111.4,1\n77,-1,703.5,455.6,83.9,224.6,1\n77,-1,1053.5,481.5,40.4,113.8,0.999\n77,-1,612.1,442.3,97.7,291,0.999\n77,-1,472.7,465.6,34.1,102.9,0.999\n77,-1,798.3,476.2,52,60,0.948\n77,-1,1097.2,443.6,39.9,105.8,0.829\n277,-1,390.2,465.2,41.3,112.5,1\n277,-1,823.8,433.8,145.9,483.9,1\n277,-1,511.8,455.6,34.4,110.2,1\n277,-1,703.5,444.9,76.8,204.2,1\n277,-1,1393.6,441.1,201.8,405.6,1\n277,-1,972.6,398.9,156.7,662.4,1\n277,-1,456.1,457.2,31.5,107.3,0.999\n277,-1,1563.8,418.5,139.8,329,0.998\n277,-1,657.2,462.2,27.2,71.7,0.995\n277,-1,581.8,460.7,23.6,61,0.992\n277,-1,629.2,459.8,25.5,61.2,0.943\n277,-1,558.3,461.2,24.1,60.6,0.936\n277,-1,1319.1,447.5,49.7,106.5,0.466\n505,-1,382.9,463.4,52,116.2,1\n505,-1,711,436.2,81.6,269.6,1\n505,-1,885.3,436.2,125.8,292.6,1\n505,-1,1503.9,375.4,258.7,705.6,1\n505,-1,637.1,456,35.7,87.8,1\n505,-1,996.4,447,91.1,236.6,1\n505,-1,1292.5,418.9,194.2,595.3,1\n505,-1,834.9,473.5,52.5,73.2,1\n505,-1,1177.2,449.7,36.4,87.2,1\n505,-1,571.1,457.2,32.6,82.2,1\n505,-1,1092.6,446.6,54.8,147.9,1\n505,-1,1713.7,406.9,207.1,497.4,1\n505,-1,793.8,477.9,59.2,60.2,0.999\n505,-1,536.6,460.2,30.7,76.2,0.995\n505,-1,459.5,459.5,25.2,75.2,0.986\n505,-1,669.9,460.8,28.9,79.6,0.924\n505,-1,683.1,468.6,35.1,79,0.535\n250,-1,641.4,447.4,67.4,190.1,1\n250,-1,415.2,464.3,39,110.9,1\n250,-1,1215,444.2,178.4,373.7,1\n250,-1,371.2,445.7,44.6,106.8,1\n250,-1,903.4,405.5,168.5,653.8,1\n250,-1,513.8,453.1,32.6,112,1\n250,-1,792.4,438.9,141.3,449.2,0.999\n250,-1,586.2,459.2,21.6,62.7,0.995\n250,-1,472.5,457.9,33.1,106.2,0.989\n250,-1,545.5,457.9,24.8,65.2,0.884\n250,-1,1079.5,473.7,46.9,121,0.627\n250,-1,1100.4,441.1,45.1,123,0.115\n466,-1,909.8,483.2,101.2,109.7,1\n466,-1,716.1,437.5,89.4,298.4,1\n466,-1,830.9,402.4,90,309.4,1\n466,-1,562.4,429.3,111.1,284.5,1\n466,-1,1237.9,392.2,234.6,688.6,1\n466,-1,1083.9,484.7,45.7,113.5,1\n466,-1,995.2,445.2,37.2,100.5,1\n466,-1,1047.9,438.6,40.4,110.6,1\n466,-1,1421.6,423.4,161.4,373.6,0.999\n466,-1,137.2,363.5,397.3,717.5,0.997\n466,-1,1129.8,421,150.6,562.3,0.993\n466,-1,685.2,472.4,25.2,72.2,0.759\n466,-1,468.5,458.1,28.1,72.3,0.368\n406,-1,834.9,471.6,54.4,80.2,1\n406,-1,642.9,415.2,150.8,329.9,1\n406,-1,177.5,432.2,175.3,357.4,1\n406,-1,1070.5,409.5,212.5,602.1,1\n406,-1,795.5,475.6,56.5,62,1\n406,-1,889,438,58.2,178.4,1\n406,-1,397.4,440,102.4,341.5,1\n406,-1,490.5,437.2,144.2,292.3,0.999\n406,-1,982,423.4,135.7,523.1,0.996\n586,-1,835.8,472.2,53.3,77.6,1\n586,-1,722.4,447.7,43.2,106.2,1\n586,-1,1224.2,440.6,91.2,272.7,1\n586,-1,980.5,433.2,99.8,244.5,1\n586,-1,665,455.3,39.7,101.6,1\n586,-1,797.3,475.6,55.7,62.1,1\n586,-1,381.3,464.3,48.3,113.2,1\n586,-1,912.4,484.7,99.3,109.5,1\n586,-1,1089,413.1,90,288.4,1\n586,-1,416.5,467.5,42.2,104.9,1\n586,-1,556.2,459.1,30.6,84.1,0.999\n586,-1,631.4,454.9,36.7,103.3,0.996\n586,-1,1696.4,402,224.6,679,0.993\n586,-1,583.5,457.4,37.4,87.2,0.967\n349,-1,836.9,472.1,53.1,77.2,1\n349,-1,1071,408.8,192.7,606.7,1\n349,-1,908.5,423.8,143.4,519,1\n349,-1,485.6,452.8,33.8,114.7,1\n349,-1,796.5,475.5,57.6,61.4,1\n349,-1,310.3,399.8,160.6,412.8,1\n349,-1,1506,436.3,42.4,111.9,1\n349,-1,63.7,435.4,147.4,346.8,1\n349,-1,659.3,462.6,27,73,0.999\n349,-1,628.4,460.2,29.6,68.1,0.978\n349,-1,555.9,459.3,20,59.3,0.939\n349,-1,587.9,458.7,22.1,57.9,0.894\n417,-1,681.2,405.7,128.2,330.7,1\n417,-1,286.8,440.5,151.2,331.3,1\n417,-1,863,436.4,59.5,176.5,1\n417,-1,1055.1,402.7,199.3,616.1,1\n417,-1,437.7,449.4,165.2,325.1,1\n417,-1,913,482.6,95.2,112,0.999\n417,-1,569.8,430.4,102.2,290.6,0.997\n417,-1,793.4,477.6,67.3,59.4,0.711\n417,-1,1002.9,430.5,110.8,496.7,0.181\n177,-1,563.9,426.7,203.5,478.9,1\n177,-1,410.4,468.2,50.8,105.5,1\n177,-1,775.4,435.9,112.7,359.7,1\n177,-1,1087,483.7,39.5,115.9,1\n177,-1,1164.1,447,42.1,101.7,1\n177,-1,370.7,445.1,45,106.9,1\n177,-1,886.2,449.2,113.6,297.6,1\n177,-1,507.1,453.6,38.2,110.4,1\n177,-1,1050.7,482.7,38.8,110.5,0.998\n177,-1,465.7,464.4,36.6,111.1,0.995\n177,-1,543.7,459.3,25.3,66.5,0.632\n177,-1,1142.2,449.8,29.8,93.7,0.517\n177,-1,948.3,441.7,91.4,267.5,0.45\n177,-1,490.6,459.8,23.8,111.4,0.366\n177,-1,559.8,460.6,23.1,62.6,0.279\n566,-1,836.3,472.9,52.8,76.9,1\n566,-1,1140.7,439.7,95.4,277.1,1\n566,-1,719.3,447.6,41.2,103.8,1\n566,-1,1007.9,412.2,129.5,293.3,1\n566,-1,797.6,476.9,54,60.6,1\n566,-1,934,435.8,81.2,238.8,1\n566,-1,1609,392.5,268.1,688.5,1\n566,-1,416.2,466,44.5,105.5,1\n566,-1,381.4,463.4,48.8,114.1,1\n566,-1,642,451.9,38.2,112.9,1\n566,-1,550.8,458.7,30.8,82.2,1\n566,-1,581.7,457.9,41.2,82.9,0.999\n566,-1,1217.8,441.7,48.1,112.8,0.994\n566,-1,664.2,451.3,35.2,102.5,0.916\n566,-1,507.1,458,23.1,55.1,0.9\n566,-1,522.2,458.7,21.7,55.2,0.798\n546,-1,654,453.3,39.3,114.6,1\n546,-1,1066.7,444.3,92.9,275.9,1\n546,-1,716.4,450,35.5,97.9,1\n546,-1,858.2,441.4,90.7,242.3,1\n546,-1,381.5,463.6,49.7,114.4,1\n546,-1,579.3,455.3,37.6,85.6,1\n546,-1,1523.6,405.4,209.9,662.2,1\n546,-1,935.7,414.8,119.1,294.3,1\n546,-1,1179.7,443.9,51.3,107.3,1\n546,-1,795.9,477.1,60.1,59.3,1\n546,-1,415.4,468.4,45.1,102.8,0.999\n546,-1,546.1,459.8,30.4,79.4,0.999\n546,-1,504.1,458,22.6,56.4,0.88\n546,-1,832.6,474.7,60.6,73.4,0.848\n546,-1,457.5,462.6,30.7,71.4,0.552\n546,-1,1042.9,454.8,38.4,98.1,0.401\n546,-1,565.4,457.7,26.9,81.9,0.271\n422,-1,848.7,435,58.6,171.4,1\n422,-1,306.9,444.6,171.5,328.1,1\n422,-1,913.3,484.2,96.6,109.8,1\n422,-1,1052.6,412.7,200.7,616.1,1\n422,-1,709.1,406.4,114.3,326.3,1\n422,-1,604.1,433.8,117.7,279.7,1\n422,-1,468.2,445.8,138.8,322.3,1\n422,-1,442.3,457.4,45.4,132.5,0.186\n272,-1,1362.3,440.4,197.4,406,1\n272,-1,822.6,436,140.2,482.8,1\n272,-1,511.6,455,34.7,111.1,1\n272,-1,691.3,448.3,64.3,196.2,1\n272,-1,394.1,465.9,42.4,112.7,1\n272,-1,954.9,405.4,165.6,640.9,1\n272,-1,1630.7,412.7,118.9,333.1,1\n272,-1,461.3,460.5,31,106.8,0.997\n272,-1,652.4,462.8,26.8,70.7,0.994\n272,-1,584.5,459.9,23.4,61.2,0.989\n272,-1,559.4,461.4,23.2,60.7,0.927\n272,-1,637.4,461.6,26.8,63.1,0.926\n134,-1,914,484.3,97.4,110.1,1\n134,-1,412.3,468,61.3,103.1,1\n134,-1,800.7,449.7,93.8,261.7,1\n134,-1,1221.6,447.3,40.7,99.8,1\n134,-1,373.7,446.2,42.6,105.1,1\n134,-1,1087.2,485.4,37.8,114.7,1\n134,-1,1003.4,443.4,39.2,104.6,1\n134,-1,571.9,441.5,146.5,400.2,1\n134,-1,490.3,467.3,38.5,105.6,1\n134,-1,688.6,437.1,99.7,318.9,1\n134,-1,1054,484.7,38.4,107.7,1\n134,-1,530.5,455.5,32.1,78.5,0.993\n113,-1,913.7,483.4,96.6,111.9,1\n113,-1,373.6,445.9,43.1,107.6,1\n113,-1,442.2,469.1,43.5,101.7,1\n113,-1,1244.9,446,40.3,102.8,1\n113,-1,1088.3,484,37.2,118,1\n113,-1,558.8,431.9,129.8,376.9,1\n113,-1,764.7,453.9,83.4,242.9,1\n113,-1,502.2,466.3,33.9,104.3,1\n113,-1,669,441.5,99.4,300.7,1\n113,-1,834.4,471.5,54.6,77.3,1\n113,-1,1051.2,483.1,40.9,110,1\n113,-1,1005.2,445.8,39.6,102.7,0.999\n58,-1,913.7,483.9,97.5,111.5,1\n58,-1,835.9,472.6,54.2,77.4,1\n58,-1,478.4,442.6,129.3,318.8,1\n58,-1,375.1,445.2,43.2,106.5,1\n58,-1,1261.1,446.4,34.8,102.8,1\n58,-1,623.7,441.9,91.7,282.2,1\n58,-1,1512.1,433,53.9,126,1\n58,-1,418.2,458.3,42.7,86.5,1\n58,-1,1098,435.2,41,114.6,1\n58,-1,1091.1,480.4,34,117.4,1\n58,-1,1006.2,442.6,41.4,115.2,1\n58,-1,798,475.8,56.3,61.4,1\n58,-1,1053.7,485.4,39.3,108.3,0.999\n58,-1,693.7,464.4,63.2,205.1,0.591\n58,-1,587.9,460.4,33.8,130.8,0.246\n553,-1,837.2,471.8,52,79.8,1\n553,-1,1087.6,442,110.3,281.2,1\n553,-1,651.1,451.5,38.4,115,1\n553,-1,716.2,448,37.9,100.9,1\n553,-1,891.5,433.1,90.1,253.1,1\n553,-1,381.4,463.6,49.6,114.9,1\n553,-1,581.2,456.6,38.1,85.3,1\n553,-1,986.8,414.2,76.9,292.8,1\n553,-1,415.7,467.3,45.9,103.1,1\n553,-1,1559.1,393.1,228.7,687.9,1\n553,-1,795.5,476,56,61.8,1\n553,-1,548.1,460.8,30.3,79.1,0.999\n553,-1,1195.6,437.2,40.9,113.7,0.995\n553,-1,501.6,457.7,24,58.3,0.92\n553,-1,565.7,459.2,24.9,80.7,0.35\n397,-1,835.2,472.6,54,77.3,1\n397,-1,106.8,434.4,183.1,363.9,1\n397,-1,606.3,407.2,120.8,345.9,1\n397,-1,1078.5,406.8,216.8,596.9,1\n397,-1,313.4,446.9,169.6,355.9,1\n397,-1,796.7,476.1,55.6,61.9,1\n397,-1,915.4,439.6,59.6,178.1,0.999\n397,-1,977.5,424.5,132,511.6,0.999\n397,-1,426.7,444.2,119.7,299.9,0.836\n397,-1,557.4,462.6,19.5,55.1,0.789\n397,-1,532.1,465.1,23.5,55.3,0.736\n228,-1,744.9,413,267.8,585.5,1\n228,-1,372.4,447.5,42.5,106.8,1\n228,-1,1113.4,444.2,109.6,334.7,1\n228,-1,610.8,453,51.9,177.3,1\n228,-1,426.1,465.8,45.4,112.6,1\n228,-1,513.6,453.9,34.9,110.8,1\n228,-1,1051.4,489.6,41.6,100.8,0.998\n228,-1,551.9,455.5,24.4,63.7,0.926\n228,-1,657.8,466.5,29.5,74.8,0.92\n228,-1,1082.3,488.8,36,108.9,0.813\n228,-1,532.9,457.9,27.2,76.1,0.768\n228,-1,478,452.1,31.7,106.2,0.411\n316,-1,1035.3,411.7,208.9,604.1,1\n316,-1,492.9,454.9,48.4,109.6,1\n316,-1,1265.7,426.5,87.7,265.4,1\n316,-1,896,416,140.3,529.8,1\n316,-1,11.8,404.3,217.2,466.6,1\n316,-1,1420.2,440.4,48.1,110.2,1\n316,-1,409,467.6,47.8,107.3,1\n316,-1,658.1,462.7,26.2,72.8,1\n316,-1,809.9,439.7,72.4,219.8,1\n316,-1,1710.9,419.8,210.1,516.1,1\n316,-1,381.7,464.4,43.9,111.7,0.999\n316,-1,579.6,460.3,22.6,56.5,0.982\n316,-1,548.8,460.8,23.4,58,0.956\n316,-1,627.6,459.9,23.9,58.8,0.949\n316,-1,1197.4,448.3,38.1,96.7,0.924\n316,-1,591.2,459.2,34.6,57.6,0.097\n242,-1,629.5,450.1,75,183,1\n242,-1,369.9,446.6,44.7,105.2,1\n242,-1,837.3,416.2,208.3,565.8,1\n242,-1,1179.4,434.5,118.7,367,1\n242,-1,419.6,462.7,37.3,112.2,1\n242,-1,512.9,452.5,33.4,112.5,1\n242,-1,1085.9,484.2,42,112.8,1\n242,-1,1118.5,445.8,39.8,101.3,0.998\n242,-1,591,458.5,21.8,65.2,0.993\n242,-1,474.1,456.4,32.2,105.5,0.984\n242,-1,555.6,458.7,23.9,61.6,0.938\n242,-1,443.6,459.1,45.3,104.4,0.354\n242,-1,1051.6,486.2,38.4,104.1,0.243\n389,-1,836,472.3,53.5,76,1\n389,-1,1080.3,405.4,219.8,616.3,1\n389,-1,35.1,422.6,178.4,381,1\n389,-1,554.5,413.2,138,351.1,1\n389,-1,796.6,476.5,56.4,60.4,1\n389,-1,358.5,439.6,175.1,310.5,1\n389,-1,974,419.6,131.6,521.2,0.999\n389,-1,277.3,441.8,116.1,361,0.999\n389,-1,519.2,462.6,23.4,63.2,0.95\n389,-1,935.5,434.6,65.8,187.8,0.902\n389,-1,490.6,461.4,29,81.2,0.323\n578,-1,836.9,471.9,53.1,78.7,1\n578,-1,721.8,447.7,41.4,107.3,1\n578,-1,1169.5,440.2,123.2,276.2,1\n578,-1,963.3,437.7,111.3,237.2,1\n578,-1,797.5,475.9,55.2,61.4,1\n578,-1,381.1,465.1,49.1,112.8,1\n578,-1,415.6,470.7,42.5,102.2,1\n578,-1,1054.4,410.9,100.4,286.9,0.999\n578,-1,1668.7,398.5,252.3,682.5,0.999\n578,-1,553.5,461.3,31.2,80.8,0.999\n578,-1,666.7,452.6,38.2,105.2,0.999\n578,-1,637.9,451.2,34.5,109.2,0.994\n578,-1,579.3,460.3,46.2,84.6,0.984\n441,-1,914.6,483.6,94.9,111.9,1\n441,-1,559.2,434.9,137.4,319.1,1\n441,-1,438.4,433.6,128.2,311.2,1\n441,-1,776.8,415.2,95,298.4,1\n441,-1,1036.4,351.5,406.4,729.5,1\n441,-1,717.9,432.9,87.5,272.2,0.549\n441,-1,1001,450.5,37.7,107.4,0.38\n441,-1,698.1,461.8,31.1,81,0.368\n441,-1,428.3,463.6,27.1,85.8,0.085\n401,-1,836,472.9,53.1,76.2,1\n401,-1,1081.6,411,209.4,615.7,1\n401,-1,129.2,430.8,207.7,369.7,1\n401,-1,626.5,406.5,136.3,346.3,1\n401,-1,334.6,455.7,146.7,335.3,1\n401,-1,797,476,56.1,62.7,1\n401,-1,907.1,435.8,58.6,175,1\n401,-1,471.1,436.3,104.5,299.9,0.999\n401,-1,977.1,427.7,140.1,511,0.999\n401,-1,582.2,460.4,19.1,56,0.636\n401,-1,558.7,464.3,21.7,56.6,0.495\n321,-1,1435.9,439.5,48.7,113.3,1\n321,-1,492,453.8,46.1,111.2,1\n321,-1,27.3,398.4,274.5,459.7,1\n321,-1,1047.6,412.2,199.3,605.7,1\n321,-1,898.5,423.7,142,521.9,1\n321,-1,409.8,468.6,47.4,105.7,1\n321,-1,380.9,463.8,44.6,112.6,1\n321,-1,657.9,462.7,26.6,73.1,1\n321,-1,824.4,441.3,77.4,214.1,1\n321,-1,1218.2,428.6,118.1,264.1,0.999\n321,-1,1712.1,405.4,171.3,441.7,0.998\n321,-1,582.1,459.6,22.6,57.3,0.982\n321,-1,623,457.8,24.4,59.3,0.941\n321,-1,553.8,459.5,22.5,58.6,0.937\n321,-1,1211.9,450.5,36.3,109.2,0.245\n491,-1,648.2,434.6,123.9,273.1,1\n491,-1,809.2,440.4,136,289.7,1\n491,-1,1379.9,393.3,284.5,687.7,1\n491,-1,937.9,435.5,100.4,234.8,1\n491,-1,569.2,456.3,34.7,81.1,1\n491,-1,1200.8,430,206.7,584,1\n491,-1,1182.2,448.8,35.5,89.1,1\n491,-1,1112.3,439.8,40.1,150.1,0.999\n491,-1,1084.9,451.9,42.2,147.2,0.999\n491,-1,1613.3,408.3,153.5,434.9,0.999\n491,-1,1030.5,441.4,39.3,113.1,0.999\n491,-1,536.1,459.4,28,73.2,0.99\n491,-1,463.5,460.2,25.6,80.7,0.976\n491,-1,407.6,471.7,43.3,101.5,0.93\n491,-1,632.5,459.9,29.5,78.7,0.83\n96,-1,913.2,483.6,98.3,111.8,1\n96,-1,836.2,472.4,53.1,77.8,1\n96,-1,373,445.8,44.5,105.3,1\n96,-1,1258.6,445.7,38,102.9,1\n96,-1,455.8,467.8,44.2,104.8,1\n96,-1,1089.2,483.3,35.7,116.8,1\n96,-1,547.6,445.7,120.6,351.9,1\n96,-1,745.2,454.2,80.3,234.5,1\n96,-1,1004.8,442.7,41,108.4,1\n96,-1,1052.1,481,41,112.7,1\n96,-1,643.4,443,98.5,302.4,0.999\n96,-1,512.6,466.4,31,101.9,0.075\n472,-1,914.8,486.4,96.4,108.3,1\n472,-1,742.7,435.5,99.9,297,1\n472,-1,834,405.3,89.4,304.6,1\n472,-1,1145.2,419.8,148.6,588.5,1\n472,-1,609.1,429,79.8,281.3,1\n472,-1,1315.1,390.5,188.1,686.9,1\n472,-1,1045.1,440.7,40.3,111.8,1\n472,-1,1490.4,411.4,115.4,387.7,0.999\n472,-1,1083.7,474.7,44.7,124.5,0.999\n472,-1,992.7,446.3,37.8,98.7,0.998\n472,-1,3.5,373.8,365.6,707.2,0.996\n472,-1,379.8,465,43.7,104.8,0.995\n472,-1,563.7,457.3,31.8,76,0.993\n472,-1,1108.6,445.3,39.2,134.3,0.917\n472,-1,712.7,474.2,21.2,63.4,0.909\n359,-1,835.6,471.3,54.1,78.9,1\n359,-1,1069.8,411.6,204.6,598.9,1\n359,-1,1531.5,436.5,45.5,113.7,1\n359,-1,920.9,420.8,142.1,515.8,1\n359,-1,1.1,452.1,208.9,413.9,1\n359,-1,395.1,407.2,172.7,390.5,1\n359,-1,797.4,475.7,56.7,61.9,1\n359,-1,659.8,464,27.2,75.7,0.996\n359,-1,631.9,458.4,26.7,71.1,0.992\n359,-1,557.8,460.5,18.7,57.9,0.937\n359,-1,121.3,440,177.6,341.6,0.93\n359,-1,878.3,453.3,31.1,70.8,0.919\n359,-1,574.6,459.3,22.7,59.1,0.862\n359,-1,525,457.9,22.6,66.6,0.273\n359,-1,1051.1,434.8,47.5,229.1,0.085\n224,-1,733.9,410.1,225.4,581.6,1\n224,-1,372.4,447.2,43.5,104.4,1\n224,-1,1089.5,445.3,110.9,335.8,1\n224,-1,605.6,452.2,55,179.3,1\n224,-1,514.9,453.6,34.9,111.7,1\n224,-1,430.7,466.4,45.6,111,1\n224,-1,1052.4,481.1,40.8,112.4,0.999\n224,-1,899.1,430.2,133.6,412.5,0.993\n224,-1,660.4,461.5,27.8,77.7,0.947\n224,-1,552.2,457.7,26.7,70.9,0.898\n224,-1,598,425.2,19.7,37.7,0.28\n224,-1,574.8,437.2,19,40.2,0.094\n224,-1,417.7,467.9,32.2,98.8,0.081\n594,-1,835.7,472.5,53.5,77.4,1\n594,-1,914.3,483.2,97.1,112.5,1\n594,-1,723.1,446.1,44.2,110,1\n594,-1,1246.4,442.9,101,277.5,1\n594,-1,1099,407,99.9,289.9,1\n594,-1,664.3,455.2,38.9,105.2,1\n594,-1,796.9,475.9,55.5,62,1\n594,-1,1027,433.2,78.9,239.8,1\n594,-1,381.8,462.7,46.9,115.6,1\n594,-1,416,466.7,42.3,106.3,1\n594,-1,554.2,460.6,30.8,83.7,1\n594,-1,629.2,454.4,34.2,101.1,0.995\n594,-1,990.6,448.8,34.7,105.6,0.973\n594,-1,583.6,457.3,32.8,82.9,0.941\n594,-1,601.3,455.6,33,89.1,0.876\n248,-1,895,408.8,165.1,626.2,1\n248,-1,636.6,449.2,72,188.1,1\n248,-1,417.7,465.5,38.1,110.3,1\n248,-1,1211.5,442.4,136.1,364.2,1\n248,-1,370.2,447.2,45.3,105.1,1\n248,-1,513.4,451.6,33.3,113.6,1\n248,-1,588.6,459.6,21.1,64,0.995\n248,-1,779,437.8,150.9,439.7,0.995\n248,-1,1081.9,471.4,45.6,126.6,0.989\n248,-1,472.2,456.3,34.7,108.8,0.988\n248,-1,546.8,457.9,24.9,63.7,0.892\n248,-1,1113.8,439.2,39,112.8,0.5\n380,-1,836.2,472.5,54.6,76.8,1\n380,-1,1077.8,419.3,216.9,590.7,1\n380,-1,531.1,405.8,130.5,369.9,1\n380,-1,166.1,446.5,206.4,373.1,1\n380,-1,796.6,476.7,56.3,60.6,1\n380,-1,2.4,443.6,163.4,373,1\n380,-1,967.4,426.3,135.2,510.6,1\n380,-1,469.7,453.7,39.7,110.9,0.999\n380,-1,412.1,470.9,44.3,104.8,0.992\n380,-1,289.8,436.3,140,317.1,0.068\n583,-1,834.8,473.2,54.5,76.2,1\n583,-1,722.1,447.4,42.6,108.1,1\n583,-1,1195.5,441.3,112.5,275.3,1\n583,-1,976.8,436.2,97.8,241.3,1\n583,-1,1077,412.4,88.8,288.8,1\n583,-1,797.3,475.1,55.8,63.1,1\n583,-1,416.2,468.1,41.6,105.2,1\n583,-1,665.8,453.5,39.3,104.8,1\n583,-1,381.2,464.6,48.7,112.4,1\n583,-1,555.6,459.8,29.3,82.2,0.999\n583,-1,1674.2,406.1,246.8,674.9,0.998\n583,-1,911.4,482.5,99.9,112.4,0.998\n583,-1,633.9,452.8,37.5,104.5,0.994\n583,-1,578.4,458.2,49,86.4,0.977\n341,-1,245,413.5,208.9,407.7,1\n341,-1,1064,408.7,192.5,585.3,1\n341,-1,834.9,472.6,53.5,77.9,1\n341,-1,486.6,452.8,34.3,113.7,1\n341,-1,904.3,425.7,146.7,520.1,1\n341,-1,1482.6,436.7,56,113,1\n341,-1,796,475,56.6,63.8,1\n341,-1,659.5,464,25.9,72.4,0.999\n341,-1,5,444.6,143.2,346.5,0.999\n341,-1,412.6,470.7,42.9,109.7,0.988\n341,-1,633.7,460.4,24.6,64.4,0.97\n341,-1,579.1,459.6,22.6,58.6,0.912\n341,-1,558,460.7,19.5,58.8,0.903\n341,-1,609.5,457.1,39.2,63.5,0.759\n221,-1,720.7,407.9,203.5,583.9,1\n221,-1,602.1,453.1,54.2,171.8,1\n221,-1,1059.1,443.9,133.7,338.2,1\n221,-1,514.5,453.8,35.5,111.1,1\n221,-1,372.5,447.6,43.6,104.4,1\n221,-1,432.1,466,46.6,109.6,1\n221,-1,891.8,426.2,129.3,406.2,0.999\n221,-1,1212.7,453.1,39.3,98.2,0.998\n221,-1,658.3,462.8,25.8,73.5,0.977\n221,-1,551.3,455.6,24.2,64.8,0.936\n221,-1,405.6,466.2,40.2,94.5,0.462\n221,-1,594.9,422.6,18.7,36.7,0.171\n458,-1,914.8,483,95.1,110.6,1\n458,-1,380.9,462.5,49.7,116.2,1\n458,-1,823.1,407.9,86.2,303.3,1\n458,-1,1167.5,410.4,276.8,670.6,1\n458,-1,994.5,446.2,36.8,100.4,1\n458,-1,1052.5,440.7,39,111.9,1\n458,-1,375.4,395.1,382.4,685.9,0.998\n458,-1,1381.5,425.5,138.7,352.4,0.997\n458,-1,412.5,467.1,39.8,116.5,0.171\n171,-1,405.9,468.6,55.7,102.1,1\n171,-1,535,423.3,222.8,476.7,1\n171,-1,1088.6,484.7,38.1,114.9,1\n171,-1,761.9,435.9,118.1,357.4,1\n171,-1,371.8,445.8,43.5,104.4,1\n171,-1,868.8,445.6,125.7,296.4,1\n171,-1,1172.2,449.1,41.5,97.9,1\n171,-1,1052,482.5,38.5,110.2,1\n171,-1,469.2,466.7,34.4,106.7,0.998\n171,-1,506.8,456.3,34,108.6,0.994\n171,-1,1149.6,453.2,33,91.1,0.97\n171,-1,488.6,463.6,32,106.2,0.145\n318,-1,17,401.6,263.3,459.2,1\n318,-1,492.2,454.6,47.8,110.5,1\n318,-1,1042.8,413.3,204.2,598.2,1\n318,-1,1426.9,439.2,47.1,111.2,1\n318,-1,897,421.8,141.1,525.3,1\n318,-1,409.5,469,47,105.5,1\n318,-1,1250.6,428,93.8,257.8,1\n318,-1,659,463.4,25.9,71.4,1\n318,-1,381.3,464.6,44.8,112.1,1\n318,-1,815,439.9,75,219.2,1\n318,-1,1746,421.6,175,514.6,0.998\n318,-1,577.4,460,22.9,57.1,0.981\n318,-1,1204.6,449.6,35.6,95.4,0.979\n318,-1,630.3,459.5,25.3,61.4,0.965\n318,-1,551.7,460.4,23.2,58.3,0.944\n318,-1,600.9,456.5,39.8,61.1,0.762\n400,-1,835.4,473,53.7,75.6,1\n400,-1,1081.1,415.9,209.6,612.5,1\n400,-1,127.4,442.9,200.6,359.1,1\n400,-1,621.9,405.2,125.2,345.8,1\n400,-1,796.2,476.5,57.7,61,1\n400,-1,327.8,445,156.9,348,1\n400,-1,907.3,436.2,60.7,177.6,1\n400,-1,976.2,426.7,140.4,513,0.999\n400,-1,455.8,439.2,112.7,296,0.997\n400,-1,580,459.6,20.3,59.2,0.735\n400,-1,557.5,463.7,22.8,58.3,0.696\n543,-1,655.1,452.5,39.9,117.5,1\n543,-1,1489.9,398.1,227.6,682.9,1\n543,-1,829.6,432.7,107.2,254.8,1\n543,-1,381.8,463,49.7,115.7,1\n543,-1,1038.4,441.4,110.6,284.3,1\n543,-1,713,450.5,35.9,96.1,1\n543,-1,574.7,455,39.2,86.7,1\n543,-1,922.7,410.5,132.1,299.2,1\n543,-1,1175,441.7,50.5,112,1\n543,-1,415.9,467.8,44.5,102.9,0.999\n543,-1,794.8,477.3,60.2,60.1,0.996\n543,-1,545.6,460.2,30.9,79.5,0.995\n543,-1,503.5,458.6,22.5,55.5,0.878\n543,-1,1117.8,450.5,69.5,222.6,0.848\n543,-1,462.1,462.3,28.5,67.6,0.565\n312,-1,1278.1,434.8,121,260.9,1\n312,-1,497,456.2,44,108.5,1\n312,-1,1681,428.5,240,509.1,1\n312,-1,1023.4,405.5,213.3,612.3,1\n312,-1,895,421.3,137.1,534.2,1\n312,-1,411.3,468.6,46.1,105.1,1\n312,-1,4.3,397,140,470.7,1\n312,-1,800.1,442.3,65.4,210.4,1\n312,-1,381.4,465.7,44.5,110.8,1\n312,-1,657.6,462.1,25.7,72.9,1\n312,-1,1402.9,435.7,54.8,119.5,0.999\n312,-1,1195.7,449.9,37,94.3,0.998\n312,-1,582.4,460.5,22.7,56.8,0.986\n312,-1,548.8,461.4,23.4,59.5,0.938\n312,-1,617.1,458.8,23.4,57.9,0.915\n312,-1,852.8,472.1,44.5,89.9,0.186\n312,-1,522.7,454.1,34.1,84,0.124\n149,-1,558.5,436.4,148.3,447,1\n149,-1,1202.9,445.5,38.3,102.6,1\n149,-1,402.1,465.2,61.9,108.1,1\n149,-1,712,434.2,128,339.6,1\n149,-1,1087.9,482.9,39,116.1,1\n149,-1,1002.3,443.9,38.5,100.3,1\n149,-1,828.4,454.2,91.2,267.3,1\n149,-1,372.5,445.3,43.5,107.4,1\n149,-1,1051.5,484.2,40.1,109.3,1\n149,-1,474.4,463,42.1,112.2,0.999\n149,-1,1126,454.8,35.2,89.2,0.998\n149,-1,503.6,454.8,35.6,104.7,0.986\n149,-1,883.1,459.2,78.5,212.6,0.172\n357,-1,835.9,470.6,53.8,79.1,1\n357,-1,1073.4,404.4,198.1,597.9,1\n357,-1,918.7,421.4,139.8,514.8,1\n357,-1,387.4,406.4,155,396,1\n357,-1,1527.4,440.3,44.6,109.2,1\n357,-1,797.5,474.8,56,63.3,1\n357,-1,1,444.6,182,405.3,1\n357,-1,120.1,437,175.7,338.2,0.998\n357,-1,660.1,462.5,27,75.8,0.997\n357,-1,631,459.1,27.1,69.9,0.99\n357,-1,557.2,459.1,20.8,59,0.96\n357,-1,879.1,456.5,30.8,69,0.918\n357,-1,583.9,458.8,22.4,57.8,0.866\n357,-1,520.1,457.7,23.1,66.5,0.824\n357,-1,502.1,457.6,26.2,89.5,0.142\n410,-1,227.8,429.8,140,349.3,1\n410,-1,646.1,409.9,149.4,330.9,1\n410,-1,835.7,472.7,54.1,77.2,1\n410,-1,1074.2,417,196.5,603.7,1\n410,-1,878.9,439.8,64,172.7,1\n410,-1,794.7,476.4,60.2,59,1\n410,-1,377.8,465.4,54.7,110,1\n410,-1,425.5,444.6,120.5,327.4,0.999\n410,-1,501.3,432.3,148.2,298.9,0.998\n410,-1,985.1,417.8,130.9,526.6,0.995\n311,-1,496.8,456.1,45.2,109.3,1\n311,-1,1282.9,431.4,130,268.4,1\n311,-1,1022.1,403.4,213.5,617.1,1\n311,-1,1682.8,427.4,238.2,503.2,1\n311,-1,896.3,420.8,136.1,536.3,1\n311,-1,796.8,441.5,66.5,213.6,1\n311,-1,411.4,468.6,46.1,105.4,1\n311,-1,381.1,465.3,45,112.1,1\n311,-1,657.2,462.4,25.9,73.2,1\n311,-1,2.5,390.5,131.7,482.1,0.999\n311,-1,1399.6,436.2,54.4,120,0.994\n311,-1,576.8,461.6,24.3,57.3,0.991\n311,-1,1195.3,450.7,36.4,92.9,0.986\n311,-1,554.6,461.6,23.9,58.2,0.939\n311,-1,618.4,460.3,23.4,56.6,0.897\n311,-1,851.3,469.6,45.8,82.9,0.24\n174,-1,547.6,424.2,214.8,483.8,1\n174,-1,409.8,469,51.8,103.3,1\n174,-1,881.7,444.6,119.4,295.9,1\n174,-1,768,436.6,119.7,360.1,1\n174,-1,371.2,445.9,44.2,106.2,1\n174,-1,1087.5,484.7,38.6,114.7,1\n174,-1,1165.4,449.5,43.2,96.9,1\n174,-1,506.3,454,37,111.9,0.999\n174,-1,1053.3,481.4,37.3,112.2,0.999\n174,-1,467.5,463,34.8,110.8,0.992\n174,-1,1136.4,452.6,43.8,91.2,0.828\n174,-1,540.7,459.6,24.9,70.3,0.147\n174,-1,554.3,457.5,21.7,58.4,0.079\n565,-1,836.3,473.6,53.2,76.7,1\n565,-1,1133.8,438.1,99.9,278.2,1\n565,-1,719.4,447.8,40,102.1,1\n565,-1,924.3,432.2,85.1,244.6,1\n565,-1,1598.8,403.7,285.8,677.3,1\n565,-1,797.5,477.2,54.7,60.2,1\n565,-1,1006.6,414.2,131.6,294.3,1\n565,-1,381.8,464,49.2,113.6,1\n565,-1,416.5,466.1,45.1,103.8,1\n565,-1,643.4,452.7,37.3,111.8,1\n565,-1,582.1,457.1,40.3,82.9,1\n565,-1,550.6,458.6,30.4,81.1,1\n565,-1,1219.1,444.4,46.1,108.6,0.999\n565,-1,503.9,457.5,23.2,56.4,0.873\n565,-1,519.7,457.5,22.2,55.2,0.831\n548,-1,653.3,453.2,38.7,115.5,1\n548,-1,834.8,472.6,54.1,76.7,1\n548,-1,1080.2,439.3,92.3,282.8,1\n548,-1,715.4,450.2,36.3,96.1,1\n548,-1,1185.4,440.2,47.7,108.4,1\n548,-1,579.5,455.6,38,85.2,1\n548,-1,381.2,463.7,49.4,114.2,1\n548,-1,944.5,415,109.1,298,1\n548,-1,1543.6,405.4,203.7,675.6,1\n548,-1,878,437,76.6,249.1,1\n548,-1,794,476.2,59.3,60.2,1\n548,-1,415,468,45.4,103.5,1\n548,-1,546.3,460.7,30.1,78.5,0.999\n548,-1,1044.1,445.5,35.1,94,0.949\n548,-1,505.5,457.5,23.2,57.3,0.907\n548,-1,456.6,462.8,31.2,72.3,0.448\n548,-1,565.5,458.3,26.7,80.7,0.265\n445,-1,472.9,435.8,106.8,308.3,1\n445,-1,594.8,438.1,110.7,311.4,1\n445,-1,791.8,405.8,90.1,316.3,0.999\n445,-1,856.8,348.8,375.9,732.2,0.998\n445,-1,379.6,466.4,53.3,113.7,0.997\n445,-1,416.5,467.6,41.3,102.6,0.984\n445,-1,723,439.3,100.3,267.7,0.942\n445,-1,1155.3,418.1,200.9,533.4,0.19\n445,-1,1326.6,435.8,122.3,332.2,0.105\n468,-1,912.5,482.9,99.2,110.8,1\n468,-1,833.3,407.4,89.2,306,1\n468,-1,585.3,427.5,91.4,286.7,1\n468,-1,725.2,433.3,94.5,305.3,1\n468,-1,1084.9,478.1,43.7,121.6,1\n468,-1,1250.9,396.2,226.3,684.8,1\n468,-1,994.8,446.5,36.9,97.9,1\n468,-1,1132.4,422,154.5,574.3,0.999\n468,-1,1047.7,441,40.1,107.6,0.999\n468,-1,60.7,387.2,412.3,693.8,0.999\n468,-1,1450.7,419.7,132.7,373.5,0.981\n468,-1,569.1,463.9,26.7,73.2,0.485\n468,-1,675.8,470.2,27.6,73.9,0.463\n468,-1,704.8,473.1,29.3,80.3,0.056\n94,-1,914.7,483.1,96.4,112.3,1\n94,-1,836.7,472.4,53.1,78.2,1\n94,-1,373,446.3,45.2,105.1,1\n94,-1,1259.5,446.5,36.7,102.1,1\n94,-1,459.7,468.5,43.1,105.7,1\n94,-1,738.5,454.4,84.2,228.4,1\n94,-1,1089.1,483.5,36.4,117.5,1\n94,-1,548.7,442.8,115.2,353.4,1\n94,-1,1004.6,442.7,40.9,107.7,1\n94,-1,1051.9,482.3,40.5,111.3,1\n94,-1,636.2,441.1,101.2,304.2,1\n94,-1,427.4,457.4,36,84.6,0.97\n94,-1,505.1,465,29.2,90.9,0.164\n160,-1,536.5,428.3,165.2,460.8,1\n160,-1,1186.6,445.3,39.9,100.6,1\n160,-1,399.6,468.8,63,105.5,1\n160,-1,1087.7,484.2,38.9,115.6,1\n160,-1,737.4,434.7,114.9,342.8,1\n160,-1,371.5,446.1,44.1,104.9,1\n160,-1,1000,443.5,37.7,102.1,1\n160,-1,469.9,466.6,35.6,111.1,1\n160,-1,843.6,446.4,89.1,289.2,1\n160,-1,1053.3,482.6,38.4,111.1,0.999\n160,-1,911.8,439.8,80.5,244.6,0.999\n160,-1,1133.9,452.4,33,92.9,0.989\n362,-1,834.9,472.2,54.6,78.1,1\n362,-1,1,447.8,226,410.7,1\n362,-1,1069.9,413.3,203.7,603.6,1\n362,-1,395.9,418.5,196.4,378.4,1\n362,-1,1535.9,436.1,46.8,112.8,1\n362,-1,926.3,419.1,140,518.4,1\n362,-1,796.8,475.7,56.8,61.6,1\n362,-1,627,458.6,28.6,75.1,1\n362,-1,152.3,438.3,146.7,339.1,0.957\n362,-1,881.3,455,32.2,68.7,0.905\n362,-1,599.8,458.5,23.2,57.7,0.816\n362,-1,563.8,459.2,16.4,58.8,0.804\n362,-1,657.7,460,25,69.9,0.667\n452,-1,1147.7,395.6,258,685.4,1\n452,-1,508.3,434.8,118,293.5,1\n452,-1,379,463.7,51.2,114.7,1\n452,-1,913,485.1,96.5,110.4,1\n452,-1,994.7,446,37.3,101.9,1\n452,-1,412.3,467.9,46,105.1,0.999\n452,-1,602.7,356.4,382.2,724.6,0.998\n452,-1,1049.4,438.9,170.1,516.2,0.974\n452,-1,473.6,460.1,28,78.5,0.939\n452,-1,1344.7,439.9,122.1,333.4,0.855\n452,-1,456.3,463.2,24.3,80.5,0.808\n452,-1,1028.3,436.8,24.7,87.9,0.523\n140,-1,914,484,96.1,110.4,1\n140,-1,406.6,466.6,63,103.7,1\n140,-1,1214.3,445.4,40.9,104.1,1\n140,-1,569,444.6,149.3,411.4,1\n140,-1,1088,487.3,37.7,113.2,1\n140,-1,1002.7,443.5,38.7,103.7,1\n140,-1,815.4,449.4,88.2,262.4,1\n140,-1,696.2,435.3,109.8,331.9,1\n140,-1,374.3,446,41.8,105,1\n140,-1,484,467.1,41.1,107.7,1\n140,-1,1051.8,484.6,39.6,108.7,0.994\n140,-1,532.6,453.7,28.8,75.2,0.977\n140,-1,1108.6,459.4,35,85.6,0.673\n137,-1,913.4,484.7,97.3,110.3,1\n137,-1,573.7,446.5,145.3,401.4,1\n137,-1,408.9,466.3,62.1,104.3,1\n137,-1,807.7,453.6,88,261.5,1\n137,-1,1217.8,445.3,40.1,102.8,1\n137,-1,1088.4,485,37.9,115.9,1\n137,-1,1003.4,444.2,38.4,103.2,1\n137,-1,373.3,445.9,42.9,105.4,1\n137,-1,486,467.7,41.1,107.1,1\n137,-1,690.6,433.9,102,328.2,1\n137,-1,1051.3,483.1,39.2,110.5,0.995\n137,-1,530.8,454.5,29.1,75.3,0.975\n137,-1,1102.4,461.4,37.4,93.2,0.179\n366,-1,836.2,471.5,54,79.1,1\n366,-1,1069.5,405,213.6,613.3,1\n366,-1,406.9,410.4,198.3,382,1\n366,-1,933.7,421.4,143.8,528.2,1\n366,-1,31.2,443.9,197.1,404.1,1\n366,-1,1544.5,435.1,46.2,113.8,1\n366,-1,796.4,476,57.1,61.3,1\n366,-1,628.6,458.2,28.2,72.1,1\n366,-1,379.8,462.1,46.8,114.3,1\n366,-1,218.2,445.4,109.7,318.7,1\n366,-1,593.8,460.6,20.4,55.6,0.928\n366,-1,889.4,451.4,27.4,64.3,0.823\n366,-1,562.8,463.6,18.9,57,0.7\n366,-1,655.1,459.4,23,68.8,0.144\n531,-1,1446,417.6,193.9,663.4,1\n531,-1,668.3,453.2,41.4,117.3,1\n531,-1,999.9,441.2,113.7,286,1\n531,-1,796.4,431.6,126.6,260.9,1\n531,-1,381.8,463.5,50,115,1\n531,-1,573.4,456.1,33.4,84.9,1\n531,-1,715.7,451.5,33.1,92.5,1\n531,-1,1180.9,445.8,35.9,91,1\n531,-1,1641.7,362.3,279.3,718.7,1\n531,-1,911.4,409.6,87.8,302.8,0.999\n531,-1,1087.9,438.2,99.4,234.9,0.999\n531,-1,414.3,468.3,46,103,0.999\n531,-1,543.4,461.5,29.1,76.3,0.985\n531,-1,463.7,462.6,25.9,65,0.583\n531,-1,642.1,452.8,26.7,92.7,0.162\n531,-1,699.8,451.8,28.6,104,0.077\n531,-1,569.2,430.3,20.3,37.1,0.061\n288,-1,1350.7,443,47.2,107.9,1\n288,-1,1492.6,435.1,219.9,440.7,1\n288,-1,728.8,443.8,81.2,207.4,1\n288,-1,840.2,435.4,175.7,500.2,1\n288,-1,509.8,456.6,34.1,107.5,1\n288,-1,997.4,414.2,155.9,628.9,1\n288,-1,659.2,461,26.5,72.2,1\n288,-1,408.4,470.5,46.7,105.3,0.999\n288,-1,383.4,461.3,42.7,111.5,0.998\n288,-1,578.3,461.6,25.9,60.1,0.994\n288,-1,449.6,459.1,31,103.1,0.976\n288,-1,597.1,458.9,24.7,58.3,0.94\n288,-1,560,461.3,25.5,61,0.922\n288,-1,546,461.1,26.6,68.3,0.842\n288,-1,1143.8,450.4,52.4,102.2,0.062\n45,-1,912.5,483,99.1,112,1\n45,-1,835.7,472.8,54.3,76.9,1\n45,-1,480.5,444.9,112.1,312.7,1\n45,-1,1469.3,429.1,63.4,130.1,1\n45,-1,374.5,446.5,43.6,105.4,1\n45,-1,618.1,441.1,89.9,277.7,1\n45,-1,1258.9,447.1,35.4,102.2,1\n45,-1,1008.1,441.2,41.4,114.7,1\n45,-1,417.6,457.5,42.8,87.2,1\n45,-1,1686.2,392.2,234.8,487.8,1\n45,-1,795.9,476.4,57.2,60.4,1\n45,-1,1053,483.7,40.9,111.9,1\n45,-1,1097.2,436.2,41.6,110.3,1\n45,-1,1090.7,480.8,33.5,118.3,1\n45,-1,584.5,462.7,34.1,131.5,0.477\n45,-1,689.3,471.4,58.1,199.6,0.064\n123,-1,916.2,483.7,92.9,110.6,1\n123,-1,374.1,446,41.7,106.1,1\n123,-1,783.8,458.4,98.2,245,1\n123,-1,566,437.8,132.6,382.8,1\n123,-1,434.8,470,45,104,1\n123,-1,1088.6,485,37.4,116.3,1\n123,-1,681.4,440.2,98,317.2,1\n123,-1,1237,445.1,39,103.1,1\n123,-1,1006.5,443.5,39.4,104.4,1\n123,-1,498.7,469.5,34,103.2,1\n123,-1,1052.1,484.1,39.9,109.2,1\n123,-1,531.3,457.3,32.1,77,0.947\n570,-1,836.7,471.8,52.3,77.1,1\n570,-1,720,447.1,41.1,104.3,1\n570,-1,1147.2,442.2,114.5,277.1,1\n570,-1,1653.8,412.6,247.1,668.4,1\n570,-1,382.1,465.1,48.7,114,1\n570,-1,797.3,476.6,54.4,60.2,1\n570,-1,417.5,466.8,43.9,104.5,1\n570,-1,1018.1,413.8,123.5,292.4,1\n570,-1,552,459.5,30,82.6,0.999\n570,-1,639.8,452.9,36.2,108.1,0.998\n570,-1,666.7,451.3,37.4,103.4,0.997\n570,-1,582.4,458.4,40.1,82.8,0.997\n570,-1,954.8,432.7,77.8,247.1,0.997\n570,-1,502.5,461.9,22.4,53.7,0.526\n570,-1,517,459.1,21.1,53.3,0.507\n256,-1,655.5,447.1,61.3,189.9,1\n256,-1,1228,441.9,206.7,374,1\n256,-1,412.1,464,39.6,112.5,1\n256,-1,932.2,410.1,161.8,633.2,1\n256,-1,807.5,443,130.3,452.9,1\n256,-1,514.2,452.6,32.5,112.4,1\n256,-1,371.1,446,44.6,106.4,1\n256,-1,1791.2,399.7,129.8,376.7,0.998\n256,-1,590.2,459.6,24.1,62.9,0.997\n256,-1,470.3,460.5,32.8,104.1,0.995\n256,-1,765.3,455.1,23.1,71.2,0.985\n256,-1,607.9,460.4,23,59,0.909\n256,-1,548.3,460.4,24.3,63.6,0.879\n256,-1,563.7,459.1,41,65.7,0.473\n256,-1,491.6,458.1,23.1,104,0.418\n256,-1,779.2,455.1,24.8,68.3,0.192\n256,-1,1104.5,447.4,45.4,109.1,0.07\n373,-1,835.9,471.9,53.3,78.3,1\n373,-1,1074.8,407.2,212.8,609.8,1\n373,-1,457.2,410,161.8,374.3,1\n373,-1,796.2,475.6,55.9,62.3,1\n373,-1,948.5,427,139,513.1,1\n373,-1,410.9,471.2,44.4,105.9,1\n373,-1,625.8,456,29.8,75.7,0.999\n373,-1,145.1,445.8,147.8,374,0.999\n373,-1,241.7,439.8,178.9,313.6,0.994\n373,-1,378.4,461.8,43.8,120.7,0.99\n373,-1,1555,441,45.4,109.3,0.95\n373,-1,887.1,458.1,25.1,53.7,0.24\n190,-1,622.5,425.2,174.1,509.1,1\n190,-1,406.9,469.3,51.9,105.3,1\n190,-1,568,456.5,58.8,158.7,1\n190,-1,799,439.9,109.1,352.8,1\n190,-1,938,444,96.5,310,1\n190,-1,370.6,445.5,45.3,105.9,1\n190,-1,510,455.8,35.1,108.7,1\n190,-1,1149.8,449,40.1,100.2,1\n190,-1,1086.1,485.8,40.1,115.6,1\n190,-1,1004.1,435.5,83.9,276.8,0.999\n190,-1,459.6,469.9,40.3,107.5,0.999\n190,-1,1098.6,443.9,37.7,107.5,0.865\n190,-1,588.5,424.9,23.4,44.6,0.711\n190,-1,549.3,437.3,19.9,44.9,0.152\n190,-1,603,414,22.3,47.3,0.071\n190,-1,559.4,398.5,36.9,103.7,0.056\n533,-1,665.2,450.2,42,121.6,1\n533,-1,804.8,434.2,120,260.2,1\n533,-1,1001.9,441.6,121,282,1\n533,-1,1449.5,418.6,212.7,662.4,1\n533,-1,381.3,462.6,50.1,115.8,1\n533,-1,716.5,452.8,33,94.2,1\n533,-1,918.4,412.2,90.6,302.1,1\n533,-1,574.2,454.9,34.4,86.4,1\n533,-1,414.7,468.5,45.2,102.9,0.999\n533,-1,1662,375.2,259,705.8,0.998\n533,-1,1093.8,435.4,94,237.1,0.998\n533,-1,1178.4,447.6,35.9,87.1,0.992\n533,-1,543.7,462,29.4,77,0.986\n533,-1,461.9,462.4,26.6,66.1,0.539\n533,-1,568.5,432.4,19.8,36.3,0.069\n217,-1,595.8,454.6,57.3,168.9,1\n217,-1,1030.3,448.8,160,333.5,1\n217,-1,716.6,419.9,181.2,560.5,1\n217,-1,514.2,454.5,34.3,111.1,1\n217,-1,882.2,437.6,130.6,385.5,1\n217,-1,410,468.1,49.3,106.2,1\n217,-1,371.2,447.6,44.2,103.9,1\n217,-1,442.8,470.4,41.7,105.1,0.999\n217,-1,658.2,466.1,25.7,70.4,0.992\n217,-1,1204.4,448.1,41.2,101.3,0.99\n217,-1,547.4,454.8,25.3,65.5,0.937\n217,-1,593.5,421.6,18.4,37,0.166\n217,-1,559.3,452.6,46.3,75.9,0.071\n19,-1,913.5,484.5,97.3,110.3,1\n19,-1,836.5,472,53.2,78,1\n19,-1,1459.3,410.5,225.9,412.9,1\n19,-1,448.8,441.7,125.7,291.3,1\n19,-1,1413,435,54.4,132,1\n19,-1,586,443.4,92.1,271.7,1\n19,-1,1257.2,448.1,34.8,100.1,1\n19,-1,375.1,446.7,43,104.8,1\n19,-1,795.9,476,56.8,61.2,1\n19,-1,1013.3,437.7,42.3,113.4,1\n19,-1,1090.3,482.9,34.1,117.8,1\n19,-1,1054.9,485.9,38.2,108.9,1\n19,-1,1099.5,438.1,40,109.1,0.999\n19,-1,417.7,458.2,41.4,86.3,0.999\n281,-1,1444.7,432.5,159.2,419.3,1\n281,-1,389.5,465.6,43.1,111,1\n281,-1,510,456.2,35,109.2,1\n281,-1,829.2,427.8,155.8,494.8,1\n281,-1,982.9,406.6,157,648.2,1\n281,-1,716,445.8,89.5,195.6,1\n281,-1,451.9,461.2,31,105.5,0.999\n281,-1,658,461.7,26,74.9,0.999\n281,-1,1331.8,442.4,43.8,104.9,0.992\n281,-1,578.5,461.7,25.7,61,0.986\n281,-1,1543.9,419.1,125,338.3,0.968\n281,-1,563.9,462,25.7,60.6,0.9\n281,-1,550.1,460,25.8,65.7,0.891\n281,-1,614,460.1,24,56.8,0.863\n197,-1,647.7,421.7,166.1,531.4,1\n197,-1,406.3,468.1,51.9,106.6,1\n197,-1,568.7,450.6,62.9,171.4,1\n197,-1,371,445.4,44.2,106.1,1\n197,-1,810.8,431.8,144.3,377.6,1\n197,-1,953.9,445.1,111.1,323.8,1\n197,-1,510.5,455.4,34,110.1,1\n197,-1,1138.8,449.9,40.2,99.4,0.999\n197,-1,1177.5,449.6,36.9,97.4,0.999\n197,-1,458.6,467.4,38,108.1,0.998\n197,-1,1035.6,440.7,83.5,269.7,0.984\n197,-1,590.2,420,23.4,44.8,0.79\n197,-1,579.7,430.4,23.3,40.3,0.742\n197,-1,547.6,436.7,19.7,45.7,0.234\n197,-1,602.7,411.3,22.7,48.8,0.185\n197,-1,553.5,425.7,37.8,94.9,0.123\n490,-1,650.4,435,115.9,269.6,1\n490,-1,807.4,443.3,135,287.8,1\n490,-1,1375.6,391.2,283.1,689.8,1\n490,-1,568.8,456.4,34,80.9,1\n490,-1,934.4,433.5,97.8,246.1,1\n490,-1,1203.1,424.9,197.5,581.4,1\n490,-1,1182.9,449.7,35,89.6,1\n490,-1,1607.7,409.5,150.8,435.6,0.999\n490,-1,1085.7,458.2,39.9,141.4,0.998\n490,-1,1112.9,435.9,40.3,155.7,0.997\n490,-1,1031,439.5,41.4,116,0.997\n490,-1,534.5,457.9,27.8,74.3,0.992\n490,-1,462.7,459.8,26.5,80.5,0.983\n490,-1,417.8,474.9,35.3,96.6,0.841\n490,-1,631.6,460.7,28.8,76,0.802\n207,-1,405.8,466.1,52,108.3,1\n207,-1,686,421,165.4,562.1,1\n207,-1,582.6,456.8,61.3,167.4,1\n207,-1,1192.2,448.8,34.8,98.2,1\n207,-1,1004.4,446,114.8,321.9,1\n207,-1,836,433.5,151.4,383.7,1\n207,-1,513.1,457,32.8,108.5,1\n207,-1,371.2,446.1,43.9,106.3,1\n207,-1,454.6,465.3,34,108,0.996\n207,-1,659,463.4,26.8,75.2,0.994\n207,-1,559.2,460.9,26.3,66.7,0.863\n207,-1,538,458.4,25.2,79.4,0.696\n207,-1,590.4,421.2,19.3,37.6,0.355\n207,-1,577.8,429,19.3,36.4,0.34\n326,-1,1445.9,441,51.6,110.5,1\n326,-1,490.7,454.3,44.5,111,1\n326,-1,896.3,416.8,144.9,533.4,1\n326,-1,1058.3,412,187.8,599.4,1\n326,-1,68.6,411.6,252.6,437.4,1\n326,-1,410.1,468.7,46.5,105.9,1\n326,-1,658.7,463.3,26.1,72.8,1\n326,-1,380.8,463.4,44.2,112.8,1\n326,-1,830.6,444,93.2,224.7,1\n326,-1,1750.1,395.9,170.9,477.2,0.999\n326,-1,1206.9,447.7,103.3,227.9,0.999\n326,-1,797.2,477.9,50.7,59.1,0.998\n326,-1,587.7,459.5,21.5,58.7,0.96\n326,-1,628.8,459.4,24.3,61.4,0.951\n326,-1,558,459.6,22,59.3,0.936\n106,-1,913.6,482.3,96.8,113.2,1\n106,-1,373.5,446.1,43.5,107,1\n106,-1,834.6,472.6,54.5,77,1\n106,-1,447.4,466.8,45.1,105.4,1\n106,-1,1251.4,446.8,38.8,100.7,1\n106,-1,1088.6,483.6,36.7,118.6,1\n106,-1,554,443.4,124.9,362.7,1\n106,-1,760.1,457.8,83.5,236.8,1\n106,-1,1004.8,442.2,40.2,107.6,1\n106,-1,659.1,438.9,103.1,308,0.999\n106,-1,1050.8,482.7,40.3,110.2,0.999\n106,-1,506,464.9,34.3,105.1,0.999\n63,-1,913.1,484.1,97.5,111.6,1\n63,-1,836.6,472,53.5,78.8,1\n63,-1,487.1,442.6,133.7,327.5,1\n63,-1,374.7,446.1,43.5,106,1\n63,-1,1260.3,446.9,35.8,101.7,1\n63,-1,1526.2,430.7,52.1,125.2,1\n63,-1,418.8,457.8,41.7,85.6,1\n63,-1,620.5,446.2,92.3,281,1\n63,-1,1055.2,483.8,38.8,110.5,1\n63,-1,1004.6,442,41.5,114.6,1\n63,-1,796.3,475.9,56.8,63.3,1\n63,-1,1089.6,482,34.3,115.9,1\n63,-1,1096.1,438.8,41.3,110,0.999\n63,-1,690.3,456.4,77,221.5,0.998\n112,-1,913.7,482.3,97,112.8,1\n112,-1,373.7,445.9,42.9,107.3,1\n112,-1,443.5,469,44,101.8,1\n112,-1,1244.8,446.4,40.5,102.5,1\n112,-1,1088.5,483.7,36.6,118.6,1\n112,-1,554.8,439.5,132.8,364.3,1\n112,-1,764.7,453.1,81.8,246.8,1\n112,-1,834.8,471.1,53.6,77.4,1\n112,-1,666.5,442.2,99.5,304.6,1\n112,-1,503.9,463.4,32.9,105.6,1\n112,-1,1004.3,444.7,40.1,103.7,0.999\n112,-1,1052.8,483.1,39.9,110.2,0.998\n112,-1,533.1,465.7,23.8,75.8,0.054\n15,-1,913.3,483.5,97.8,111.1,1\n15,-1,836.8,472.5,52.8,77.2,1\n15,-1,442.7,444.5,129.3,286.5,1\n15,-1,375.3,445.8,42.8,106.4,1\n15,-1,587,442.4,87.8,272,1\n15,-1,1013.7,434.2,42.9,116.1,1\n15,-1,1257.1,447.4,34.2,101.7,1\n15,-1,795.9,476.1,56.1,61.1,1\n15,-1,1090.3,483.4,34.1,116.9,1\n15,-1,1448.4,405.4,162.1,396.8,1\n15,-1,1100.2,438.8,40.5,108,0.999\n15,-1,1397,436.1,61.1,131.2,0.999\n15,-1,1056.2,485.5,37.2,109.8,0.999\n15,-1,1556.7,412.2,152.9,382.9,0.996\n15,-1,417.9,458,39.9,85,0.988\n15,-1,663.1,466.1,49.1,177.2,0.051\n132,-1,914.7,483.1,96.3,112.2,1\n132,-1,797.4,451,91.8,261.2,1\n132,-1,1223.9,445.3,42.6,101.1,1\n132,-1,414.4,466.6,62.7,104.5,1\n132,-1,374.3,446.5,42.3,105.6,1\n132,-1,571.9,441.9,142.7,400.9,1\n132,-1,1086.8,483.6,38.9,116.2,1\n132,-1,1005,443.5,39.1,104.7,1\n132,-1,491.2,468.7,37.2,106.5,1\n132,-1,687.2,434.2,100.2,324.2,0.999\n132,-1,1052.9,483.6,38.9,109.6,0.997\n132,-1,527.9,456.9,31.1,73.3,0.993\n241,-1,821.3,412.3,214.2,602.2,1\n241,-1,627.9,448.5,77.6,185,1\n241,-1,1171.4,438.9,123.2,356.7,1\n241,-1,369.9,447.3,44.9,104.8,1\n241,-1,419.5,463.7,37.5,111.3,1\n241,-1,513,452.9,33.7,112.4,1\n241,-1,1085,482.6,42.5,117,0.999\n241,-1,1117.2,444.4,40.4,104.3,0.997\n241,-1,592.5,457.1,22,67.8,0.988\n241,-1,474.4,455.6,32.7,107.2,0.984\n241,-1,552,458.2,25.3,63.3,0.935\n241,-1,1050.6,488,37.5,102.8,0.763\n241,-1,445.7,459.3,42.4,104.4,0.327\n305,-1,777.2,446.1,73.4,211.6,1\n305,-1,503.6,456.6,39.3,108.2,1\n305,-1,1014.4,406.8,181,614.4,1\n305,-1,1329.4,428,118.4,277.1,1\n305,-1,892.8,424.9,141.6,524.9,1\n305,-1,410.2,468.1,48.9,106.7,1\n305,-1,1656.8,419.7,163.6,484.9,1\n305,-1,658,461.9,25.8,73.3,1\n305,-1,834.9,471.4,52.9,79.1,1\n305,-1,1182.2,447.6,40.3,103.4,1\n305,-1,381.9,463,44,112,0.999\n305,-1,575.7,461.3,25.5,59.6,0.983\n305,-1,555.8,460.9,25,60.9,0.929\n305,-1,609.3,459.3,24.1,56.6,0.882\n305,-1,532.5,453.4,36,74,0.184\n71,-1,912.7,483.5,97.7,111.5,1\n71,-1,836.3,472.3,53.7,77.5,1\n71,-1,375,447.7,42.8,105.4,1\n71,-1,1260.9,447.3,35.2,101,1\n71,-1,418.9,457.9,41.1,85.8,1\n71,-1,505.3,438.9,132.4,328.1,1\n71,-1,1546.5,428.7,52.3,129.2,1\n71,-1,1087.6,485.3,35.7,115.7,1\n71,-1,1004.5,442.2,41.8,111.1,1\n71,-1,615,438.6,99.3,295.5,1\n71,-1,1052.3,480.6,40,114.9,1\n71,-1,795.5,476.1,57.7,61.4,0.999\n71,-1,700.6,456.1,73.5,220,0.999\n71,-1,473.7,465.4,34.9,103.1,0.998\n71,-1,1098.2,438.6,37.8,114.5,0.993\n146,-1,401,464.9,62.3,106.3,1\n146,-1,1208,446.3,37.5,102.4,1\n146,-1,565.3,438.3,147.8,434.5,1\n146,-1,1088.1,486.2,37.6,113.5,1\n146,-1,824.5,449,86.9,274,1\n146,-1,705.6,437.4,129.9,337,1\n146,-1,476.9,466.6,42.6,109.9,1\n146,-1,1002.4,444.2,38.1,103.7,1\n146,-1,373,445.8,43.5,105.4,1\n146,-1,1053.4,484,38.4,110.3,0.996\n146,-1,1116.6,448.8,40.2,94.3,0.982\n146,-1,516.7,457.5,30.5,76.8,0.978\n146,-1,917.3,487.4,87.3,111.5,0.965\n146,-1,535,456.2,31,76,0.112\n203,-1,405.7,465.8,51.8,108.1,1\n203,-1,667.2,424,170.9,536.1,1\n203,-1,824.7,437.5,155.8,372.2,1\n203,-1,1188.2,448.1,36.1,97,1\n203,-1,576.6,451.6,66.9,172,1\n203,-1,986.4,441.6,97.7,321.2,1\n203,-1,370.1,446.8,45.7,105.3,1\n203,-1,510.3,455.4,33.7,110.5,1\n203,-1,1136.2,450.5,38.5,99.8,0.999\n203,-1,1051.4,434.5,90.8,284,0.999\n203,-1,459.2,464.4,34.8,110.5,0.996\n203,-1,581.2,430.2,22,38.6,0.79\n203,-1,591.6,422.5,22.5,43.6,0.775\n203,-1,530.5,455,26.8,95,0.174\n203,-1,553.8,420.4,35.2,90.2,0.172\n203,-1,605.9,414.4,21.8,47.1,0.141\n203,-1,657.3,472.2,23.1,71.3,0.14\n183,-1,588.4,424.6,192.8,493.1,1\n183,-1,407.2,469.5,51.2,104.2,1\n183,-1,783.3,435.3,110.7,361.9,1\n183,-1,1086.6,485.9,39.9,114,1\n183,-1,370.4,445.1,45.6,106.6,1\n183,-1,507.2,455,37.6,107.4,1\n183,-1,1155.4,449.9,37.7,99.5,1\n183,-1,911.3,443.6,100.9,309.1,0.999\n183,-1,462.4,468.2,37.4,109.2,0.999\n183,-1,973.4,434.3,104,270.5,0.999\n183,-1,553.4,455.2,34.3,89.3,0.596\n183,-1,572.2,455.9,37.8,104.8,0.394\n183,-1,581.6,436,23.1,42.1,0.299\n162,-1,534.2,424.4,170.4,469.8,1\n162,-1,400.2,467,61.6,105.5,1\n162,-1,1184,446.4,39.4,101.1,1\n162,-1,743.3,435.2,111.4,343.9,1\n162,-1,1000.2,442.7,38.1,104.7,1\n162,-1,1088,484.4,38.9,115.7,1\n162,-1,371.7,446.6,44.2,104.9,1\n162,-1,470.2,463.2,35.2,112.4,1\n162,-1,1052.9,482.6,38.9,112.5,1\n162,-1,849.1,451.5,91.2,283.9,1\n162,-1,916.2,445.7,82.4,247.8,0.999\n162,-1,1136.7,450.8,32.8,95.3,0.987\n446,-1,606.4,439.6,104.7,308.6,1\n446,-1,479.8,437.4,104.7,293.6,1\n446,-1,375.7,464.2,55.7,117.2,1\n446,-1,836.1,335.5,354.7,745.5,0.999\n446,-1,1132.9,409.8,238.7,624.5,0.999\n446,-1,415,468.8,43.2,104.3,0.994\n446,-1,794.9,412.9,92,310.6,0.938\n446,-1,722.8,461.4,31.7,85.4,0.229\n446,-1,736.6,437.4,103.7,268.2,0.09\n263,-1,667.2,452,67.6,192.1,1\n263,-1,404.3,463.3,43,113.3,1\n263,-1,945.7,403.9,166.4,646.2,1\n263,-1,1683.8,409.5,223.9,376.4,1\n263,-1,512.4,454.5,33.4,109.6,1\n263,-1,1312.5,439.9,139.3,383.3,1\n263,-1,818.2,430.4,129.2,487.7,1\n263,-1,370.2,446.1,45.5,107.9,1\n263,-1,591,460.7,23.2,62.8,0.995\n263,-1,470,459.1,28.1,104,0.991\n263,-1,778.4,453.5,24.8,71,0.981\n263,-1,555.8,462,23.4,61,0.929\n263,-1,606.8,460.8,23.4,60.7,0.908\n263,-1,1295.5,452,47.1,97.9,0.242\n263,-1,766.3,453.7,22.4,71.8,0.152\n185,-1,600.2,426.2,185.1,495,1\n185,-1,406.8,469.5,52,104.3,1\n185,-1,786.5,433.7,111.2,363.2,1\n185,-1,508.2,455.7,36.1,108.1,1\n185,-1,370.7,445.5,45.4,106.9,1\n185,-1,1087.4,484.5,39.5,115.8,1\n185,-1,1153.3,450.9,39,98.8,1\n185,-1,924.2,438.2,92.9,317.7,1\n185,-1,460.8,469.3,38,108,0.999\n185,-1,984.2,434.1,98,278.1,0.999\n185,-1,571.3,457,52.1,147.4,0.998\n185,-1,587,425.6,22,39.5,0.596\n185,-1,559.7,426.1,36.4,85.3,0.054\n195,-1,406.8,467.4,51.3,106.5,1\n195,-1,639,418.9,168.4,536.5,1\n195,-1,945.8,452.6,117.6,304.6,1\n195,-1,567.3,452.8,62,167.3,1\n195,-1,371.1,444.9,44.3,106.7,1\n195,-1,808.5,433.7,125.7,375.9,1\n195,-1,509.8,454.9,33.7,111,1\n195,-1,1173.5,451.4,38.6,96.6,0.999\n195,-1,459.2,466.1,40.5,110.1,0.998\n195,-1,1139.4,450.5,39.7,98.8,0.996\n195,-1,589.5,421,22.8,44.3,0.78\n195,-1,1015.5,443.5,85.5,264.4,0.443\n195,-1,1113.2,447,33.6,96.1,0.432\n195,-1,549.9,436.6,19.6,45.5,0.367\n195,-1,1089.7,476.9,37.2,117.6,0.209\n195,-1,603.5,411.7,22.4,48.8,0.108\n195,-1,562.8,394.4,37.6,105.4,0.096\n278,-1,706.1,444.6,81.5,206.7,1\n278,-1,390.2,465.3,42.1,112.9,1\n278,-1,511,455.7,34.7,110.2,1\n278,-1,824.6,429.2,149.4,493,1\n278,-1,977.6,401.3,158,638.3,1\n278,-1,1406.6,430,191.3,417.9,1\n278,-1,455.3,458.3,31.6,107.6,0.999\n278,-1,1550.4,420.1,147.4,331.9,0.998\n278,-1,658.6,462.2,26.4,71.7,0.998\n278,-1,580.1,461.1,24.2,61,0.99\n278,-1,1324.8,445.9,47.4,105.4,0.984\n278,-1,560.5,461.8,24.1,60.8,0.939\n278,-1,617.1,459.7,24,57.9,0.907\n418,-1,857.2,436.1,59.9,172.2,1\n418,-1,691.9,403.9,120.3,332.8,1\n418,-1,293.1,437.4,156.5,333.2,1\n418,-1,447,435.7,155.7,334.6,1\n418,-1,1051.5,402.9,198,612.4,1\n418,-1,908.8,483.9,101.3,110.5,0.999\n418,-1,581.1,427.4,95.3,291.3,0.998\n418,-1,785.4,478.2,68,59.6,0.653\n418,-1,427.1,467.6,28.8,98.5,0.111\n564,-1,836.2,474,53.3,76.2,1\n564,-1,1586.4,400,278.1,681,1\n564,-1,918.1,428.9,89.3,254.5,1\n564,-1,1122.9,439.9,108,272.6,1\n564,-1,719,447.7,40.1,102.6,1\n564,-1,1003.3,417.8,133.6,291.3,1\n564,-1,797.6,477.3,54.8,60.3,1\n564,-1,581.8,457,40.3,83.8,1\n564,-1,642.9,451.5,38.1,113.9,1\n564,-1,416.7,466.1,45.4,104.3,1\n564,-1,381.8,463.8,48.8,113.6,1\n564,-1,549.4,460,29.6,80,0.999\n564,-1,1217.8,443.7,47.7,109.1,0.999\n564,-1,510.2,458.8,23.2,53.3,0.819\n352,-1,835.8,471.8,52.7,76.8,1\n352,-1,1070.2,402.7,195.1,613.7,1\n352,-1,913.1,419.6,142.8,518.2,1\n352,-1,355.5,403.6,121.8,406.7,1\n352,-1,796.5,474.9,57.1,63.4,1\n352,-1,484.4,453.3,33.3,113.9,1\n352,-1,79.1,439.4,181.7,336.7,1\n352,-1,1514.3,437.8,40.6,110.1,0.999\n352,-1,659.5,462.7,27.7,74.4,0.999\n352,-1,635.8,461.2,25.7,65.9,0.964\n352,-1,558.1,459.5,20.6,59,0.957\n352,-1,578.4,459.8,23,58.6,0.944\n352,-1,604.4,457.3,44,63.8,0.773\n352,-1,507.7,455.6,27.7,81.3,0.325\n352,-1,883.7,457.7,27.3,67.2,0.311\n352,-1,867.1,457.5,30,72.6,0.147\n525,-1,786.1,434.8,83.9,259.6,1\n525,-1,1391.4,426,216.7,636.9,1\n525,-1,382,461.9,49.5,116.2,1\n525,-1,973.3,443.8,105.2,278.8,1\n525,-1,1583.9,374.5,311,706.5,1\n525,-1,894.4,412.3,89.8,296.5,1\n525,-1,572.7,458,33.6,84,1\n525,-1,676.5,450.3,45.4,122.8,1\n525,-1,1181.5,447,36.3,85.9,1\n525,-1,1067.2,437.8,97.1,241.9,0.999\n525,-1,416.6,468.1,45.5,103.2,0.998\n525,-1,718.5,448.6,32,91.8,0.995\n525,-1,648.6,455,31,93.2,0.989\n525,-1,542.3,461.9,29.3,76,0.986\n525,-1,459.8,461.2,28.4,70.8,0.919\n525,-1,666.6,454,27,106.3,0.664\n158,-1,541.1,431.3,159.2,457.2,1\n158,-1,1190.3,445.8,40.6,102.5,1\n158,-1,731.4,434.5,118.1,342.9,1\n158,-1,400,468.2,61.5,105.3,1\n158,-1,1087.3,482.6,39.5,116.8,1\n158,-1,1000.8,443.8,38.5,103.7,1\n158,-1,371.3,445.4,44.7,107.2,1\n158,-1,843.1,446.4,83.6,286.7,1\n158,-1,471,464.9,37,112.6,0.999\n158,-1,1051.8,483.7,39.7,110.7,0.999\n158,-1,905.7,438.4,78.2,247.1,0.999\n158,-1,1129.5,452,35.7,94.2,0.997\n158,-1,505.8,452.6,24.3,88.6,0.12\n46,-1,912.6,483.9,98.6,111.1,1\n46,-1,836,473,54.4,77,1\n46,-1,477.5,446.1,114.8,308.6,1\n46,-1,615.8,442,93.6,275.3,1\n46,-1,1473.9,428.4,61.6,129.2,1\n46,-1,374.4,445.7,44,106.3,1\n46,-1,1259.2,446.3,35.5,102.8,1\n46,-1,1008,441.6,41.7,115.1,1\n46,-1,418.3,457,42.8,87.8,1\n46,-1,796.3,476.6,56.6,60.7,1\n46,-1,1054.9,483.8,38.8,111,1\n46,-1,1697.7,382.8,223.3,491.9,1\n46,-1,1096.9,435.6,41.7,111.3,1\n46,-1,1090,481.8,33.7,117.6,1\n46,-1,583.7,457.1,39.5,138.4,0.984\n46,-1,692.5,478.7,54.9,190.9,0.106\n498,-1,675.6,431.5,99.8,276.9,1\n498,-1,836.8,440.3,133.7,290.5,1\n498,-1,381.4,462.3,54,119.6,1\n498,-1,966.6,429.9,112.3,252.4,1\n498,-1,1444.6,370.2,249,710.8,1\n498,-1,570.3,455.8,33.4,83.3,1\n498,-1,1081.8,449.3,54.5,152.7,1\n498,-1,1658.6,401.6,184.1,467.3,1\n498,-1,1217.6,428,228.4,592.3,1\n498,-1,1178,448.6,37.1,86.1,1\n498,-1,635.1,454.3,33.1,90,0.999\n498,-1,798.1,478,56.8,58.2,0.998\n498,-1,536.9,459.6,28.8,75.3,0.995\n498,-1,460.4,459.4,25.4,76.5,0.993\n432,-1,913.6,484.8,96.1,109.1,1\n432,-1,742.7,415.3,114.4,300.4,1\n432,-1,537.2,438.4,138.8,320.8,1\n432,-1,400.5,435,104.1,311.5,1\n432,-1,1062,398.6,203.4,647.6,1\n432,-1,829.4,436.2,52.8,164.5,0.997\n432,-1,656,434.5,100.8,279.1,0.997\n432,-1,1477,329.5,444,751.5,0.983\n432,-1,522.4,469.6,24.1,68,0.795\n432,-1,502.1,469,27.6,68.4,0.452\n348,-1,837.2,472.5,52.6,76.4,1\n348,-1,1070.4,393.2,192.1,616.7,1\n348,-1,906.9,422.6,145.2,522.7,1\n348,-1,485.1,452.6,34.5,114.8,1\n348,-1,1503.8,435.2,44.5,114.2,1\n348,-1,294.6,399.5,175.7,416.1,1\n348,-1,796.3,475.3,57.7,62,1\n348,-1,61.6,445.4,135.2,325.4,1\n348,-1,659.7,462.6,26.9,73.1,0.999\n348,-1,629.2,460.4,29.2,67.9,0.97\n348,-1,554.9,459.1,19.8,59.6,0.919\n348,-1,586.8,457.9,22.1,59.1,0.887\n168,-1,539.4,421.4,203.6,479.1,1\n168,-1,404.9,467.2,56.9,104.5,1\n168,-1,755.5,438.5,115.9,347.7,1\n168,-1,862.4,444.5,126.8,294.5,1\n168,-1,1088.6,484,38.8,115.9,1\n168,-1,1178.2,448.6,41,101,1\n168,-1,372.7,445.7,42.6,104.9,1\n168,-1,1051.8,483.2,40.5,110.7,1\n168,-1,998.6,442.1,38.3,106.4,1\n168,-1,470.3,466.7,34.9,108.6,0.999\n168,-1,1142.3,449.3,34.2,98.6,0.996\n168,-1,502.6,456.4,28.7,96,0.919\n87,-1,914.2,482.7,96.3,112.5,1\n87,-1,836.7,470.7,52.1,80.6,1\n87,-1,373.5,446.7,44.3,105.1,1\n87,-1,1261.1,446.9,35.2,101.6,1\n87,-1,1088.8,483.6,36.4,119.1,1\n87,-1,721.7,459.1,92.6,219.7,1\n87,-1,544.2,445.1,111.4,334.9,1\n87,-1,1005.4,443.2,41,107.1,1\n87,-1,1054.6,482.3,39.6,111.8,0.999\n87,-1,466.3,468,38.5,103.1,0.999\n87,-1,625.3,442.9,100.8,297.7,0.999\n87,-1,424.6,458.6,37.8,88.2,0.997\n87,-1,506.9,461.9,30,101.3,0.938\n87,-1,1100.2,452.3,37.6,103.1,0.174\n439,-1,914.7,484.1,94.6,112.6,1\n439,-1,548.3,441.7,146.5,314.6,1\n439,-1,767.1,418.1,99.8,307.4,1\n439,-1,431.1,433,130.3,313.7,1\n439,-1,1109.2,352.4,468.7,728.6,0.999\n439,-1,710.8,436.7,86.6,270.5,0.955\n439,-1,543,470.6,25.6,74.6,0.282\n439,-1,679.5,470.2,31.2,94.2,0.052\n584,-1,835.2,472.6,54.3,77.1,1\n584,-1,722.1,447.8,42.7,107.3,1\n584,-1,1204,446.2,103.2,270.8,1\n584,-1,976.2,432,102.6,246.3,1\n584,-1,1080.1,414.4,89.2,288.5,1\n584,-1,797.3,475.2,55.7,62.5,1\n584,-1,415.9,467.6,42.3,105.8,1\n584,-1,665.4,453.9,40,104.2,1\n584,-1,381.6,464.6,48.6,112.5,1\n584,-1,913.1,482.9,96.5,112,0.999\n584,-1,556,459.4,29.6,83.2,0.999\n584,-1,632.8,453.6,38,104.7,0.998\n584,-1,1679.5,405.1,241.5,675.9,0.996\n584,-1,582.8,457.7,40.2,85.8,0.97\n527,-1,793.7,435.7,94.1,258.9,1\n527,-1,1409.2,419.4,206.5,650.7,1\n527,-1,381.9,461.6,49.5,116.6,1\n527,-1,985.6,443.8,100.8,278.6,1\n527,-1,573.3,456.1,33.8,85.7,1\n527,-1,901,406.4,84.7,311.2,1\n527,-1,673,453,46.5,117.9,1\n527,-1,1595.2,378.4,325.8,702.6,1\n527,-1,1071.3,437.5,105.5,239,1\n527,-1,1178.9,446.4,36.2,88.7,1\n527,-1,717.2,448.7,34.6,93.6,0.999\n527,-1,416.4,467.7,46,103.8,0.998\n527,-1,543.1,461.2,29.4,76.5,0.984\n527,-1,652.1,452.9,32,95,0.921\n527,-1,459.9,460.9,28.5,70.8,0.895\n527,-1,567.6,432.2,20.3,38.9,0.093\n47,-1,912.6,482.8,98.8,111.9,1\n47,-1,835.7,472.6,53.8,77.5,1\n47,-1,477.6,445,114.6,316.2,1\n47,-1,374.5,445.9,43.6,105.7,1\n47,-1,1480,430,59,125.6,1\n47,-1,619.4,441.3,88.8,277.9,1\n47,-1,1259.7,446.1,35,102.8,1\n47,-1,1007.4,441.9,41.4,113.5,1\n47,-1,418.3,457.2,42.2,87.8,1\n47,-1,796.2,476.4,56,60.6,1\n47,-1,1054.3,483.9,38.6,110.8,1\n47,-1,1724.6,384.9,196.4,490,1\n47,-1,1097.8,435.9,40.8,109.5,1\n47,-1,1090.8,481.8,33.1,116.9,1\n47,-1,581.6,456.2,41.9,137.8,0.996\n47,-1,692.2,472,55.5,202.5,0.351\n57,-1,914.3,483.7,96.1,111.7,1\n57,-1,836.2,472.5,53.5,77.5,1\n57,-1,481.8,446.5,123.8,311.4,1\n57,-1,374.5,445.1,44,107.2,1\n57,-1,1260.8,446.2,35.3,102.3,1\n57,-1,622.9,444.6,92.3,278.3,1\n57,-1,418.6,457.5,41.5,86.6,1\n57,-1,1511,433.6,52.5,124.5,1\n57,-1,1054.9,485.2,39.3,109,1\n57,-1,1006.7,443.1,41.7,114.9,1\n57,-1,1096.7,434.9,41.8,114.2,1\n57,-1,797.7,476.1,56.2,61.3,1\n57,-1,1090.4,481.7,34.6,115.1,0.998\n57,-1,587.9,457.9,37,133.8,0.776\n57,-1,692.8,462.8,62.1,207.8,0.214\n267,-1,512.5,454.6,34.5,109.6,1\n267,-1,675.6,448.1,66.5,194.2,1\n267,-1,824.3,436.7,131.2,481.2,1\n267,-1,949.6,409.6,165.4,641.8,1\n267,-1,400.5,465,43.6,111.7,1\n267,-1,1662.8,418.5,192.9,345.1,1\n267,-1,1346.9,435.3,140.3,403.3,1\n267,-1,370.7,445.5,44.9,107.4,1\n267,-1,1302,444.9,40.6,105,0.998\n267,-1,463,461.3,31.4,102.4,0.994\n267,-1,585.1,459.6,23.2,61.6,0.991\n267,-1,781.6,452,27.2,74.2,0.988\n267,-1,618.5,460.6,22.8,58.9,0.943\n267,-1,553.5,461.2,24.5,62,0.935\n267,-1,648.1,456.4,35.1,73.6,0.071\n355,-1,836.9,470.6,52.9,79,1\n355,-1,1067.7,394,199.9,609.6,1\n355,-1,912.1,422.1,149.4,528.5,1\n355,-1,797.2,474.3,55.7,64.1,1\n355,-1,1522.9,436.8,46,113.3,1\n355,-1,378.5,403.6,134.3,403.2,1\n355,-1,99.3,439,188.2,338.5,0.999\n355,-1,659.1,462.3,27.7,74.8,0.999\n355,-1,3.2,438.2,130.1,421.7,0.998\n355,-1,634.3,460.3,26.5,68.9,0.983\n355,-1,558.7,458.9,20.3,59.4,0.961\n355,-1,587.4,459.1,22.2,57.8,0.899\n355,-1,875.3,454.6,31.8,74.7,0.884\n355,-1,518.3,456.9,24,68.1,0.711\n355,-1,483.9,454.3,29.2,119.4,0.631\n355,-1,502,457.5,24.9,90.7,0.122\n261,-1,1274,439.3,172.2,383.9,1\n261,-1,662.8,451,65.7,188.6,1\n261,-1,406.3,464.2,41.9,112.3,1\n261,-1,942.3,410.5,162.5,634,1\n261,-1,512.5,453.2,33.9,110.6,1\n261,-1,1700.9,400.6,220.1,381.1,1\n261,-1,369.9,444.7,44.8,108.2,1\n261,-1,816.3,433.7,129.1,482.7,1\n261,-1,589.6,459.7,23,63.9,0.992\n261,-1,470.6,459.3,29.6,103.4,0.991\n261,-1,775.9,454.3,24.8,72.7,0.967\n261,-1,555.9,461.9,23.1,60.4,0.934\n261,-1,604.7,460.1,23.5,62.4,0.79\n261,-1,488.5,458.6,23.6,101.7,0.631\n428,-1,913.8,484.4,94.7,108.9,1\n428,-1,358.7,434.7,133.3,320.8,1\n428,-1,1060.3,400.5,197.7,655.2,1\n428,-1,723.8,405.8,120,327,1\n428,-1,840.3,436.4,55.6,166.9,1\n428,-1,532.7,443,95.8,320.1,1\n428,-1,619.2,434.2,133.4,284,1\n428,-1,489.7,462.6,24.6,71.1,0.389\n33,-1,914.2,483.6,95.9,111.9,1\n33,-1,835.2,473,53.9,76.5,1\n33,-1,474.5,445,118.3,290.1,1\n33,-1,375.4,446.5,42.6,106.1,1\n33,-1,1445.8,432,65.3,128.4,1\n33,-1,604.3,443.6,89,275.9,1\n33,-1,1256.9,448.5,35.2,100.4,1\n33,-1,418.2,457.2,42.2,88.4,1\n33,-1,1604.5,390.6,194.5,459,1\n33,-1,1010.3,439.6,42.8,117.3,1\n33,-1,795.9,475.7,57.3,61.7,1\n33,-1,1090.7,479.9,34,120.3,1\n33,-1,1055.6,485,38.8,110,1\n33,-1,1098.5,440,40.7,107.7,1\n186,-1,407.3,469.9,52.1,104.7,1\n186,-1,607.1,425.8,178.4,495.9,1\n186,-1,789.4,434.5,109.7,363.3,1\n186,-1,508,455.1,36.2,110.1,1\n186,-1,1088,485.2,39.4,114.4,1\n186,-1,370.1,445.5,45.3,106.7,1\n186,-1,1153.5,449.9,38.1,99.2,1\n186,-1,927.5,441.7,90.9,313.3,1\n186,-1,569,456.3,57.2,153.3,1\n186,-1,985.9,436.2,95.2,276.1,0.998\n186,-1,459.9,468.6,38.5,108.7,0.998\n186,-1,585.9,426.4,22.5,41.2,0.661\n186,-1,550.1,438.4,19.4,43.8,0.192\n186,-1,559.2,426.5,35.7,85.6,0.064\n102,-1,914.1,482.9,96.9,112.2,1\n102,-1,374,446.6,43.6,104.5,1\n102,-1,1256.1,445.6,38.8,102.7,1\n102,-1,836,472.7,53.3,75.6,1\n102,-1,450.9,467.5,45.3,105,1\n102,-1,754.9,451,82.5,243.1,1\n102,-1,553,446,119.9,362.1,1\n102,-1,1088.3,484.1,36.9,116.7,1\n102,-1,1004.7,443.1,40.6,108.4,1\n102,-1,654.8,441.8,98.4,294.5,1\n102,-1,1051,482.8,40.5,109.6,0.999\n102,-1,505.6,464.5,27.4,95.9,0.845\n102,-1,488.1,464,30.5,97.5,0.229\n521,-1,759.4,433.1,92.6,262.9,1\n521,-1,382.4,462.2,49.9,116.8,1\n521,-1,1567.4,375.7,305.1,705.3,1\n521,-1,1335.1,419.7,256.4,645.2,1\n521,-1,941.5,443.6,123.1,282.6,1\n521,-1,683.2,451.2,40.6,123.7,1\n521,-1,571.9,458.9,33.2,81.4,1\n521,-1,1180.1,449.2,34.6,86.1,1\n521,-1,1050.8,442.3,102.3,235.5,1\n521,-1,647.6,452.7,32.7,98.4,0.998\n521,-1,835.3,472.8,55.9,77.6,0.996\n521,-1,541.9,463.4,29.4,73.8,0.99\n521,-1,884,417,87.8,282.9,0.98\n521,-1,722.9,448.4,29.5,89.3,0.972\n521,-1,447.2,462.7,30.7,79,0.951\n521,-1,417.8,470.6,45,97.1,0.868\n17,-1,914.6,483.8,95.1,111.1,1\n17,-1,836.6,472.2,53,77.4,1\n17,-1,446.5,443.6,124.6,288.1,1\n17,-1,1453.1,411.3,202.2,406.5,1\n17,-1,1257.2,447.5,34.7,101.8,1\n17,-1,374.6,447,43.5,104.9,1\n17,-1,1405,437.5,58.4,129.7,1\n17,-1,587.1,440.9,89.1,273.8,1\n17,-1,1013.3,435.8,43.2,115.9,1\n17,-1,1090.4,483.6,33.9,118,1\n17,-1,795.8,475.7,56.3,61.7,1\n17,-1,1100.5,437.9,39.1,108.7,1\n17,-1,1055.7,486.6,36.7,107.6,0.999\n17,-1,417.1,459.2,42.8,85.1,0.997\n187,-1,407.2,469.5,52,105.2,1\n187,-1,602.9,424.8,181.6,502.8,1\n187,-1,790.9,434.1,111.3,363.4,1\n187,-1,1152.5,450,39.2,99.1,1\n187,-1,1088.6,484,39.7,117.3,1\n187,-1,508.2,455.3,36.2,109.8,1\n187,-1,370.4,445.7,44.9,106.5,1\n187,-1,568.8,453.9,58,153.4,1\n187,-1,931,442.9,91.1,313.9,1\n187,-1,459.8,468.5,39,108.7,0.999\n187,-1,988.2,442.4,99.5,263.1,0.998\n187,-1,581.8,434.4,22.9,39.4,0.647\n187,-1,550.3,439.5,19.3,43.4,0.154\n187,-1,1101.6,451.1,35.6,104.6,0.14\n181,-1,575.9,426,201.1,483.6,1\n181,-1,406.9,469.1,51.5,105.4,1\n181,-1,781.8,437.9,107,359.6,1\n181,-1,1155.8,446,38.9,103.7,1\n181,-1,1087.2,484.1,39.5,115.6,1\n181,-1,370.2,444.8,45.6,107.7,1\n181,-1,507.4,454.7,37.5,107.9,1\n181,-1,905.5,446.7,105.8,299.2,1\n181,-1,465,467.6,36.2,109.8,0.999\n181,-1,968.9,437,106.2,270.6,0.999\n181,-1,556.6,456.2,25.4,69.6,0.958\n181,-1,541.5,452.1,28.2,86.6,0.775\n181,-1,580,433.6,21.5,42.3,0.312\n181,-1,569.9,453.4,31.5,91.3,0.258\n181,-1,1046.8,471.3,41.3,141.3,0.205\n181,-1,591,426.8,20.1,39.7,0.056\n238,-1,622.6,451.4,71.9,183,1\n238,-1,800.3,403.3,240.4,608.1,1\n238,-1,370,446.9,44.4,106.3,1\n238,-1,1142.4,444.8,144.4,356.5,1\n238,-1,420.5,464,40.6,110.1,1\n238,-1,512.9,453.5,34.1,110.6,1\n238,-1,1086.1,483.1,43.3,115.1,1\n238,-1,587.9,459.4,22.5,61.4,0.989\n238,-1,472.7,456.3,32.4,105.8,0.985\n238,-1,1050,485.4,40.7,106.6,0.972\n238,-1,1114.9,460,37.6,92.4,0.93\n238,-1,548.6,457.9,25.9,64.1,0.929\n239,-1,805,413.7,234.3,589.6,1\n239,-1,624.8,450.3,74.6,182.4,1\n239,-1,370,446.8,44.4,105.8,1\n239,-1,1149.5,446,135.4,356.1,1\n239,-1,1086.9,485.3,41.7,112.4,1\n239,-1,513.1,453.7,33.9,110.3,1\n239,-1,420.3,463.3,39.4,111.9,1\n239,-1,1117.2,452.7,38.3,94.8,0.994\n239,-1,585.1,457.6,22.7,64.2,0.993\n239,-1,472.7,456.8,33.6,106.2,0.986\n239,-1,1050.9,487.2,39.5,105,0.953\n239,-1,550.3,458.4,25.8,63.9,0.94\n239,-1,602.9,462.8,26.8,64,0.273\n284,-1,837.8,428.4,165.2,499.1,1\n284,-1,510.2,456.3,34.5,109.2,1\n284,-1,987,399,158.2,656.4,1\n284,-1,1475.6,434.7,154.3,421.6,1\n284,-1,386.7,464.4,44.1,113.2,1\n284,-1,716.8,450.7,93.4,196.2,1\n284,-1,1342.4,441.7,41.1,109.2,1\n284,-1,660.6,462.5,25.2,74.6,0.999\n284,-1,450.4,459.8,32.8,106.1,0.999\n284,-1,581,461.2,25.8,61,0.997\n284,-1,555.5,461.3,25.7,66.2,0.818\n579,-1,836.6,472,53.6,78.7,1\n579,-1,721.8,448.5,41.3,106.2,1\n579,-1,965.7,436.7,106.2,240.2,1\n579,-1,1168.8,442.5,127.7,273,1\n579,-1,381.6,464.7,48.7,113.5,1\n579,-1,797.3,475.9,55.4,61.5,1\n579,-1,1060.4,412.8,97,289.2,1\n579,-1,415.9,470.3,42.3,102.4,1\n579,-1,554,461.5,31.6,82.1,0.999\n579,-1,666.3,452.2,38.7,105.7,0.999\n579,-1,1669.5,406.8,251.5,674.2,0.998\n579,-1,635.6,451.5,37.5,108,0.995\n579,-1,584.6,458.8,37.2,84,0.977\n9,-1,914.3,482.4,96.1,113,1\n9,-1,836.2,472.7,53.7,76.8,1\n9,-1,375.5,446.5,41.9,105.3,1\n9,-1,441.3,447,125.5,282.4,1\n9,-1,584.3,443.1,88.4,270.5,1\n9,-1,1013.3,433.1,42.1,117.4,1\n9,-1,1256.7,447.3,34.9,101.8,1\n9,-1,1398.7,406.5,145,399.2,1\n9,-1,795.9,475.3,56.7,62.6,1\n9,-1,1091.2,481.8,33.8,117.9,1\n9,-1,1099.4,438.7,42,107.7,1\n9,-1,1054.4,487.7,38.3,106.3,1\n9,-1,1502.6,415.7,144.6,366.6,0.997\n9,-1,418.5,460.8,40.8,86.5,0.491\n9,-1,654.6,470.9,51.5,170.9,0.063\n494,-1,815.3,440.6,137.7,292.3,1\n494,-1,654.3,437.8,116.3,265,1\n494,-1,955.7,432.5,96.4,252.4,1\n494,-1,382,463.5,53.2,115,1\n494,-1,1399.7,376.7,264.3,704.3,1\n494,-1,1083.9,450.6,45.8,148.6,1\n494,-1,568.1,457.5,35.1,81.2,1\n494,-1,1214.2,437.7,211.4,571.5,1\n494,-1,1181.3,450.1,35.2,84.1,0.999\n494,-1,634.2,454.9,34.5,90.4,0.998\n494,-1,1631.6,403,156.6,446.9,0.995\n494,-1,460.4,459.8,25.4,79.2,0.987\n494,-1,538.7,461.1,27.6,71.3,0.982\n494,-1,1111.6,449.7,37.9,136.5,0.973\n511,-1,834.1,471.3,53.6,81.9,1\n511,-1,382.4,462.6,52,116.9,1\n511,-1,722.5,434.2,111.2,265.6,1\n511,-1,902.6,441.9,148.9,288.1,1\n511,-1,1528.6,378.9,323.4,702.1,1\n511,-1,637.8,457.2,34.6,88.2,1\n511,-1,1178,449.5,35.7,86.2,1\n511,-1,1317.8,412.9,213.9,638.2,1\n511,-1,572.6,457.3,32.3,82.3,1\n511,-1,1033.5,439.5,81,238.3,0.999\n511,-1,539.3,460.8,29.4,76.4,0.993\n511,-1,696.4,452.7,42.4,119.8,0.983\n511,-1,460.9,460.2,25.3,72.9,0.981\n511,-1,1097.2,451.3,51.7,146.6,0.979\n511,-1,1759.4,398.5,161.6,514.4,0.798\n511,-1,412.4,470.8,48.5,97.5,0.363\n511,-1,658,458.6,41.6,84.1,0.137\n569,-1,836.9,472,51.7,77.3,1\n569,-1,720.7,447.5,40.8,103.3,1\n569,-1,1146.1,445.7,110.9,272.6,1\n569,-1,797.5,476.1,54.6,61.4,1\n569,-1,1654.8,400.3,238.1,680.7,1\n569,-1,417.2,466.5,44.3,105.7,1\n569,-1,1013.2,414.3,130,286.9,1\n569,-1,381.9,465.2,49,113.2,1\n569,-1,552.3,458.9,30.2,83.6,0.999\n569,-1,641.8,452.5,37.3,108.6,0.999\n569,-1,583.2,456.9,38.8,83.6,0.997\n569,-1,951,432.6,77,245.6,0.997\n569,-1,665.2,450.7,37.5,103.6,0.994\n569,-1,516.2,458.5,21.2,53.3,0.441\n569,-1,499.5,462.2,22.6,54.3,0.425\n420,-1,854.3,437.9,56.9,168.3,1\n420,-1,700.4,404.3,119,327.4,1\n420,-1,456.1,439.5,148.6,328.5,1\n420,-1,297.8,429.4,172.3,343.6,1\n420,-1,1053.1,408.5,196.5,616.5,1\n420,-1,911.6,483.8,101.5,109.1,1\n420,-1,599.6,436.7,94.2,282.7,1\n53,-1,913.4,482.5,97.6,112.5,1\n53,-1,836.4,472.8,53.5,76.6,1\n53,-1,1497.7,428.7,56,132.7,1\n53,-1,479.3,442.5,116.1,316.8,1\n53,-1,624,448.2,87.8,269.6,1\n53,-1,374.3,444.6,44.3,108.1,1\n53,-1,1260.3,446.8,35.2,101.9,1\n53,-1,418.4,456.4,42.7,88.2,1\n53,-1,1054.5,485,39.6,109.3,1\n53,-1,1006.7,442.5,43.1,115,1\n53,-1,796.4,474.9,56.1,62.8,1\n53,-1,1096.2,435.9,42.5,111.9,1\n53,-1,1091.4,482.4,33.2,115.1,0.997\n53,-1,580.9,452.6,43.5,134.7,0.996\n200,-1,404.7,467.2,51.2,105.9,1\n200,-1,661.4,428.7,167.4,525.4,1\n200,-1,570.8,449.6,64.9,173.6,1\n200,-1,814.6,434,155.3,384.2,1\n200,-1,970.3,448.4,104.5,318,1\n200,-1,371.2,445.9,45.2,105.8,1\n200,-1,1139.1,446.9,37.8,106.2,1\n200,-1,510.4,456.5,34.8,109,1\n200,-1,1180.7,447.7,36.8,98.2,0.999\n200,-1,1035.8,438.3,105.2,280.5,0.999\n200,-1,458.2,466.5,36.1,109,0.998\n200,-1,592.6,423.7,24.2,46,0.727\n200,-1,582.1,433.3,23.5,41.2,0.679\n200,-1,604,413.4,22.6,49.4,0.271\n200,-1,553,425.8,36.9,92.1,0.137\n116,-1,913.7,484.3,97.5,110.1,1\n116,-1,374,446.2,43.2,107.1,1\n116,-1,441.3,467.3,43.1,103.6,1\n116,-1,1242.1,444.9,40.1,102.1,1\n116,-1,1088.5,483.7,36.8,118.4,1\n116,-1,561.1,440.5,130.3,372.6,1\n116,-1,770.6,457.7,84.6,240,1\n116,-1,499.8,466.4,35.1,106.7,1\n116,-1,672.7,438.6,101.4,315.8,1\n116,-1,1051.5,482.9,40.5,110.1,1\n116,-1,1006.6,445.9,38.1,99.9,1\n116,-1,830.4,468.7,56.8,84.7,0.951\n111,-1,913.5,483,97.5,112.2,1\n111,-1,373.9,446.1,42.7,106.9,1\n111,-1,1246.9,447.2,40.8,101.4,1\n111,-1,443,469,45.2,101.3,1\n111,-1,835.7,472.4,53.2,76,1\n111,-1,1088.4,483.5,36.5,119.2,1\n111,-1,763.7,455.6,81.4,239.7,1\n111,-1,668.3,440.9,97.3,296.3,1\n111,-1,555.5,440,130.6,370.4,1\n111,-1,505.2,464.6,33.3,104.4,1\n111,-1,1004.4,444.4,40.4,103,1\n111,-1,1051.1,483.1,40.8,110.9,0.998\n286,-1,1482.6,436.1,179.2,428.3,1\n286,-1,991.1,402,159.4,653.4,1\n286,-1,510.1,456.6,34.2,108.2,1\n286,-1,1349.6,443.4,40.6,109.6,1\n286,-1,836.8,431,172.2,495.8,1\n286,-1,721.4,446.2,85.9,203.4,1\n286,-1,386.4,466.2,46.5,110.3,1\n286,-1,659.6,460.8,26.2,75.2,1\n286,-1,449,459.6,32.4,104.5,0.991\n286,-1,578.7,461.6,26.1,61.5,0.978\n286,-1,593.6,459.7,24.8,58.8,0.935\n286,-1,563.8,461.3,25.7,61.2,0.89\n286,-1,546.4,460.4,26.8,70.2,0.766\n286,-1,424.6,468.2,29.3,104.5,0.476\n120,-1,914.6,484.8,95.4,109.5,1\n120,-1,373.2,446,42.4,106.5,1\n120,-1,560.2,436.1,133.6,383.9,1\n120,-1,1088.5,483.4,37.6,118,1\n120,-1,436.8,468.2,44.8,104.5,1\n120,-1,679.1,440.9,99.3,309.8,1\n120,-1,1238.9,442.1,40.1,105.2,1\n120,-1,775.4,446.8,93.5,252.9,1\n120,-1,498.3,467.4,35,105.4,1\n120,-1,1051.9,483.1,40.4,110.4,1\n120,-1,1006.7,444.5,39.4,104.9,0.999\n120,-1,531.8,460.9,28.9,75.9,0.86\n79,-1,912.9,483.9,97.8,111.2,1\n79,-1,835.4,472,53.1,76.5,1\n79,-1,374.2,446.4,43.9,106,1\n79,-1,1259.8,448.2,35.9,100,1\n79,-1,1088.2,485.6,37.2,115.7,1\n79,-1,419.3,457.4,41.8,86.1,1\n79,-1,704.4,454.7,89.7,227.4,1\n79,-1,533.6,443.9,113.6,333.5,1\n79,-1,1053.7,482.3,40.1,111.1,1\n79,-1,1004,443.8,42.3,109,1\n79,-1,614.2,440.2,96.6,292.4,1\n79,-1,469.4,466.3,35.4,100.5,1\n79,-1,798.9,478.9,53.3,56.6,0.594\n79,-1,1097,448.5,39.6,104.8,0.464\n550,-1,835.6,471.2,53.2,79.9,1\n550,-1,651.8,452.5,38.3,113,1\n550,-1,1084.1,440.9,103.7,281.2,1\n550,-1,1188.4,436.4,47.9,113.7,1\n550,-1,715.8,450,37.3,98.5,1\n550,-1,958.6,421.3,98.2,286.6,1\n550,-1,381.3,464.2,49.2,113.7,1\n550,-1,578.8,455.9,38.6,84.5,1\n550,-1,1543.2,396.3,217.9,684.7,1\n550,-1,794.1,475.9,57.9,60.8,1\n550,-1,415.7,468.1,45.6,102.6,1\n550,-1,883.6,436.1,79.9,249.6,1\n550,-1,547.3,461.1,29.8,77.9,0.998\n550,-1,510.7,456.5,23.5,57.5,0.92\n550,-1,1049.3,446.7,35.7,95.9,0.813\n550,-1,453.8,462.5,31.9,74.4,0.251\n589,-1,835.5,472.6,53.5,77.3,1\n589,-1,722.3,447,45.4,108.8,1\n589,-1,1237.2,436.1,86.3,278.7,1\n589,-1,997.8,433.8,86.8,240.4,1\n589,-1,911.8,483.5,100,112.4,1\n589,-1,664.4,454.9,40.7,103.9,1\n589,-1,1091.9,412.5,103.3,288.6,1\n589,-1,381.2,463.6,48.5,114.9,1\n589,-1,797.3,475.6,54.7,61.7,1\n589,-1,416.5,467.4,41.5,106.1,1\n589,-1,556.2,459.3,29.3,85.1,0.999\n589,-1,630.6,455.3,34.5,102.6,0.995\n589,-1,586.9,456.6,34.9,85.4,0.968\n189,-1,613.1,420.2,181.8,516.1,1\n189,-1,405.9,469,53,106.3,1\n189,-1,795.7,437.7,112.2,361.3,1\n189,-1,567.1,455.1,59.1,158.2,1\n189,-1,936.6,443.5,94.2,312.5,1\n189,-1,370.2,445.1,45.3,106.2,1\n189,-1,509.9,456,35.1,108.5,1\n189,-1,1086.8,484,40.7,116.4,1\n189,-1,1152.6,450,39.4,98.7,1\n189,-1,459.5,470.4,40,107.8,0.999\n189,-1,996.5,439.7,92.8,271.7,0.999\n189,-1,580.7,433.2,23.3,40.2,0.674\n189,-1,1102.9,444.4,34.1,97.8,0.648\n189,-1,549.2,438.3,19.5,44.2,0.105\n367,-1,836.5,471.8,54.4,79.1,1\n367,-1,405.4,410.8,202.2,383.8,1\n367,-1,1069.4,405.6,212.2,601.5,1\n367,-1,375.6,462.2,49.3,116,1\n367,-1,40,441,191.9,398.5,1\n367,-1,937.9,423,141.1,524.1,1\n367,-1,797,476.3,56.7,60.7,1\n367,-1,1546.3,436.1,46.9,112.4,1\n367,-1,628.9,458.5,27.9,72.2,1\n367,-1,225.8,441.5,115.6,327.6,0.999\n367,-1,592.2,460.1,21,56.9,0.934\n367,-1,887.4,454,28,62.3,0.786\n367,-1,579.2,461.2,23.2,58,0.356\n367,-1,653,459.3,23.2,69.1,0.128\n367,-1,867.4,457.5,33.1,75.4,0.094\n88,-1,913.9,482.9,97,112.5,1\n88,-1,835.7,472,52.9,77.9,1\n88,-1,373.2,446.4,44.3,105.3,1\n88,-1,1261.3,448,34.8,100.8,1\n88,-1,1088.6,483.4,36.2,118.6,1\n88,-1,547.9,441.9,109.9,336.4,1\n88,-1,724.2,456.6,91.2,228.4,1\n88,-1,1052.8,482,39.9,113,1\n88,-1,1005.1,444,41.3,106,1\n88,-1,461.9,468.2,41,99.4,1\n88,-1,627.3,444.1,101.7,291.9,0.998\n88,-1,427.4,458.4,36.8,87.7,0.998\n88,-1,507.1,461.4,29.9,100.5,0.904\n88,-1,522.6,467.8,40.6,135.2,0.067\n416,-1,283.9,433.9,139.9,340.5,1\n416,-1,1061.3,409.3,197,595.9,1\n416,-1,675.5,402.5,130.7,333.7,1\n416,-1,866.1,439.1,59.7,170.7,1\n416,-1,442.1,450.2,158.3,323.3,1\n416,-1,559.8,428.8,100.8,297.7,0.995\n416,-1,908.7,480.4,101.8,115.7,0.972\n416,-1,824,473.1,63.1,71,0.854\n416,-1,796.8,476.1,53.4,60.8,0.69\n416,-1,996.8,420,120.5,511.7,0.337\n416,-1,378,461.7,51.6,135.1,0.086\n164,-1,536.5,419.9,182,474.2,1\n164,-1,400.6,466.6,61.9,105.7,1\n164,-1,1182.3,447.9,40,100.3,1\n164,-1,751.2,435.2,112.9,343.4,1\n164,-1,1088.2,483.3,39.9,117.6,1\n164,-1,1000.1,441.2,37.5,106.7,1\n164,-1,372.3,446.9,43.4,104,1\n164,-1,470.2,465.4,34.1,108.4,1\n164,-1,1051.7,482.1,40,112.6,1\n164,-1,851.7,447.5,103.2,289.6,0.999\n164,-1,1141,453.4,30.4,90.2,0.983\n164,-1,908.7,444.2,85.3,263.6,0.977\n164,-1,506,452.5,24.6,92,0.4\n576,-1,836.8,472.5,52.6,76.7,1\n576,-1,720.9,446.8,41.9,107.2,1\n576,-1,1035.3,415.3,114.5,286.8,1\n576,-1,381.9,465.5,48.4,112.6,1\n576,-1,1164.3,439.4,121.8,273.8,1\n576,-1,797.5,476.9,55.6,59.9,1\n576,-1,1667,387.4,254,693.6,1\n576,-1,962.4,430.6,108,247.1,1\n576,-1,416.8,470.4,41.9,102.2,1\n576,-1,554.3,460.4,30.3,82.4,0.999\n576,-1,666.3,453,36.9,104,0.998\n576,-1,637.4,452.5,37.1,107.4,0.997\n576,-1,580,460.4,44.6,83.2,0.983\n513,-1,723.1,433.1,115.7,271,1\n513,-1,382,463.7,51.9,116,1\n513,-1,835,471.6,53.4,78.4,1\n513,-1,1540.7,379.8,319.2,701.2,1\n513,-1,907.3,444,142.8,285.5,1\n513,-1,572.3,456,33.5,83.3,1\n513,-1,1178.2,448.7,35.9,88.6,1\n513,-1,1035.7,437.2,99.1,242.5,1\n513,-1,640.6,456.1,34.6,88.4,1\n513,-1,1333.4,408.8,225.7,666.8,1\n513,-1,693.3,448.8,42.4,128.9,0.999\n513,-1,538.8,461.4,29.3,75.1,0.993\n513,-1,460.7,460.5,25,72.2,0.979\n513,-1,410.1,471,49.7,97.9,0.302\n513,-1,1777,401.1,144,503.7,0.098\n595,-1,836,472.6,53.4,77.3,1\n595,-1,914.3,483.3,96.4,112.3,1\n595,-1,722.6,446.7,44.8,110.1,1\n595,-1,1245.4,442.6,109.6,278.4,1\n595,-1,1098.9,416,102,285.5,1\n595,-1,664.2,456.1,39.2,104.2,1\n595,-1,796.9,475.7,55.8,62.3,1\n595,-1,381.7,462,47.5,116.1,1\n595,-1,1026.2,432.8,83.1,238.8,1\n595,-1,554.7,459.9,31.1,84.6,1\n595,-1,416.6,467.2,41.6,105.8,1\n595,-1,629.4,454.5,34.6,101.7,0.997\n595,-1,992.5,450.3,34.8,103.7,0.973\n595,-1,582.2,456.6,32.9,83.7,0.932\n595,-1,649.7,455,27.8,102.5,0.543\n237,-1,791.9,411.9,249.8,592,1\n237,-1,619.8,448.4,67.7,185.5,1\n237,-1,369.5,447,44.7,106.7,1\n237,-1,420.6,463.8,40.3,110.8,1\n237,-1,1143.1,440.5,139.3,357.3,1\n237,-1,512.9,453.1,34.5,111.5,1\n237,-1,1085.6,481.9,43.5,117,1\n237,-1,590.3,460.7,24.4,61.7,0.987\n237,-1,1046.9,484.7,42.1,108.4,0.984\n237,-1,472.5,455.1,32.2,106.5,0.982\n237,-1,545.8,458,26.2,66.2,0.916\n237,-1,444.1,458.1,47.1,106.1,0.673\n237,-1,1122.7,465.7,34,81.8,0.649\n381,-1,836.2,472.6,54.3,76.1,1\n381,-1,1079.2,395.9,212.7,618.9,1\n381,-1,534.6,408.3,134.7,356.7,1\n381,-1,166.9,448.9,210.9,368.2,1\n381,-1,795.8,476.6,56.7,60.7,1\n381,-1,471.4,454,39.5,110.4,1\n381,-1,1,438,179.9,381.5,1\n381,-1,970.6,426.9,132.7,515.1,1\n381,-1,416,469.5,41,109.9,0.964\n381,-1,298.9,434.2,140.7,315.5,0.199\n486,-1,647,433,104.9,266,1\n486,-1,1362.4,399.9,287.2,681.1,1\n486,-1,1195.6,425.7,172.4,596.4,1\n486,-1,566.2,453.5,36.2,82.7,1\n486,-1,802.3,438.1,108.9,288.8,1\n486,-1,1034.1,439.2,39.8,110.8,1\n486,-1,890.9,432.1,123.4,253.7,0.999\n486,-1,463.8,460.2,28.5,80,0.998\n486,-1,1086.3,460.3,39.1,138.1,0.998\n486,-1,741.2,443.3,45.3,130.6,0.997\n486,-1,1567.6,412,180.8,421.9,0.996\n486,-1,1111.9,438.4,40.1,149.2,0.996\n486,-1,532.1,456.8,27.4,74.8,0.992\n486,-1,625,462.1,27.7,77.7,0.683\n486,-1,1176.2,456.8,23.7,85,0.055\n338,-1,487.5,452.8,35.8,113.7,1\n338,-1,836.4,472.6,53.7,79.1,1\n338,-1,227,409.1,211.1,415.5,1\n338,-1,1067.2,395.5,189,624,1\n338,-1,1476.4,438.3,50.2,113.1,1\n338,-1,900.8,420,149.7,532.1,1\n338,-1,795.8,475.6,56.7,61,1\n338,-1,414.3,472.3,42.2,107,1\n338,-1,1,444,149.9,347.1,1\n338,-1,658.9,463.8,26,72.4,0.999\n338,-1,634.1,460.2,24.7,65.6,0.97\n338,-1,559.8,461,20.1,58.8,0.959\n338,-1,583.8,459.3,22.2,58.1,0.852\n338,-1,525.9,455.9,34.9,67.2,0.36\n387,-1,835.6,471.7,52.8,77.3,1\n387,-1,1079,394.7,215.1,630.8,1\n387,-1,547.2,413.3,147.3,354,1\n387,-1,13.5,428.9,198.8,377.2,1\n387,-1,261,449.4,123.9,353.4,1\n387,-1,796.4,475.9,56.4,61.6,1\n387,-1,359,438.4,150.4,304.9,0.999\n387,-1,972.5,424.5,138.8,524.9,0.999\n387,-1,470.1,455,38.8,104.3,0.996\n387,-1,515.7,459.7,24.1,64.7,0.959\n387,-1,941.5,437.1,63.1,196.8,0.214\n131,-1,915.2,483.9,95.6,110.4,1\n131,-1,571.1,442.2,144.8,397.2,1\n131,-1,417.8,465.6,58.5,106.8,1\n131,-1,794.5,451.1,94.3,261.3,1\n131,-1,374.1,447.1,42.7,105.1,1\n131,-1,1224.8,447.2,41.2,99.5,1\n131,-1,1087.3,482.2,39.1,117.4,1\n131,-1,1005,444.5,39.4,103.7,1\n131,-1,1052.5,483.1,38.7,109.5,1\n131,-1,493,467.9,36.3,106.5,1\n131,-1,686.1,434.6,101.5,328.1,1\n131,-1,529.2,456.5,31.7,73.3,0.992\n463,-1,911.5,484,100.2,109.2,1\n463,-1,682.2,440.6,117.2,294.4,1\n463,-1,830.9,403.6,88.1,305.3,1\n463,-1,1198.6,405.5,267.9,675.5,1\n463,-1,995.7,446.6,36.4,100.8,0.999\n463,-1,1051.8,441.7,38.4,108.1,0.999\n463,-1,1082.2,483.1,45.9,113.1,0.999\n463,-1,1405.7,428.4,165,367.3,0.999\n463,-1,573.2,425.3,91.4,288,0.998\n463,-1,237.6,341.5,371.4,739.5,0.997\n463,-1,789.1,449.7,37.9,143.7,0.144\n463,-1,528.8,454.9,32.6,98.9,0.136\n463,-1,674.1,473.5,31.4,89,0.135\n463,-1,1132.8,423.2,136.4,521.2,0.064\n317,-1,492.6,454.3,47.6,111.1,1\n317,-1,11.8,403,241.4,457.5,1\n317,-1,1036.2,408.8,206.6,605.1,1\n317,-1,1260,424.6,88.7,264.3,1\n317,-1,1421.7,438.3,48.7,112.2,1\n317,-1,410.5,468.2,46.4,106.5,1\n317,-1,897.6,422.6,140.5,526.3,1\n317,-1,658.5,463.3,26,72.4,1\n317,-1,381.6,464.2,44.1,112.3,1\n317,-1,812.4,441.9,76.5,216.4,0.999\n317,-1,1740.8,419.9,180.2,511.8,0.999\n317,-1,578.5,460.5,22.9,56.8,0.981\n317,-1,1201.9,448.6,36.1,95.7,0.969\n317,-1,627.4,459.5,25,59.9,0.959\n317,-1,550.8,460.6,23.2,58.2,0.946\n317,-1,598.7,457.7,37.5,59.5,0.458\n315,-1,1030.8,406.2,212.4,615.3,1\n315,-1,492.6,454.8,49.1,109.9,1\n315,-1,1272,427.6,87.1,265,1\n315,-1,1414.5,440.4,50.1,111.3,1\n315,-1,9.1,401.8,192.5,459.8,1\n315,-1,409.1,467.9,47.8,106.8,1\n315,-1,1696.4,416,224.6,527.6,1\n315,-1,898.3,425.6,139.3,522.7,1\n315,-1,808.3,440.4,71,216.5,1\n315,-1,657.8,462.1,25.9,73.3,1\n315,-1,381.4,464.2,44.3,112.4,0.999\n315,-1,1196.8,448.5,38.5,97.8,0.994\n315,-1,579.5,460.2,23,56.7,0.984\n315,-1,549,461,23.5,58.2,0.955\n315,-1,626.5,459.9,23.9,58.3,0.947\n315,-1,590.2,459.6,34.3,57.3,0.072\n430,-1,914.1,484.4,93.9,108.6,1\n430,-1,1057.6,398.1,206.7,660.7,1\n430,-1,731,412.6,117.5,317.7,1\n430,-1,386.6,435.2,110.7,318.7,1\n430,-1,536.4,439.7,118.2,318.4,1\n430,-1,833.8,437.9,56.5,163.7,1\n430,-1,629.3,428.9,122.2,295,0.999\n430,-1,491.8,466.9,24.4,70.2,0.389\n430,-1,1584.6,309.5,336.4,771.5,0.341\n430,-1,518.9,467.4,24.3,64.5,0.253\n393,-1,836.4,471,53.1,78.5,1\n393,-1,75.7,430.5,170.9,362,1\n393,-1,579.1,407.4,125.7,348.5,1\n393,-1,1069.3,419.9,231.7,591.6,1\n393,-1,796.5,475.9,56.3,61.6,1\n393,-1,975.1,424.6,132.2,511.4,0.998\n393,-1,926.6,437.1,63.5,181.1,0.998\n393,-1,301.8,444,140.1,353.8,0.998\n393,-1,377.3,434,183.2,314.6,0.984\n393,-1,532.4,458.9,22.7,63.9,0.968\n393,-1,554.1,458.9,23.1,64.3,0.753\n320,-1,492.5,454,46.7,111.1,1\n320,-1,21.8,404.6,275.1,450.5,1\n320,-1,1432.2,439.6,48.4,112,1\n320,-1,1045.2,411.5,203.1,605,1\n320,-1,409.7,468,47.3,106.3,1\n320,-1,897,422.8,142.3,523.5,1\n320,-1,658.7,463.2,25.9,72,1\n320,-1,381.6,464.4,44.8,112.3,1\n320,-1,818.2,439.2,78.7,220.8,1\n320,-1,1226.7,432.4,110.1,256.3,0.999\n320,-1,1702.2,408.4,167.3,452.1,0.998\n320,-1,579.9,459.9,22.8,57,0.978\n320,-1,627.9,458.7,25.4,60.5,0.963\n320,-1,552.8,460,22.8,58.1,0.941\n320,-1,1211.4,449.1,35.5,100.5,0.79\n320,-1,602.4,456.1,39.9,61.3,0.774\n320,-1,1803.5,412.2,117.5,493.7,0.08\n313,-1,1272.4,432.7,111.6,262.9,1\n313,-1,494.6,456.3,47.3,108.8,1\n313,-1,1024.1,405.6,212.7,618.3,1\n313,-1,1683,430,238,493.3,1\n313,-1,410.3,467.5,47.4,106.2,1\n313,-1,899.2,426.1,134.8,523.6,1\n313,-1,1407,437.5,55.4,117.1,1\n313,-1,657.9,462.5,25.6,73.7,1\n313,-1,802.6,443.7,66.2,208.8,1\n313,-1,3.9,403.3,158.9,465.9,1\n313,-1,381.1,464.6,44.4,112.6,1\n313,-1,1197,447.8,36.9,97.6,1\n313,-1,579.5,460.8,23.3,56.8,0.99\n313,-1,553.8,461.6,22.9,57.9,0.946\n313,-1,620.8,459.4,24.4,57.8,0.94\n313,-1,540.7,461.3,24.1,61.3,0.915\n24,-1,914.8,483.5,95.2,111.9,1\n24,-1,837.1,472.3,53,77.8,1\n24,-1,1478.1,409.5,242.2,424.4,1\n24,-1,1414.7,430.8,68.9,132.5,1\n24,-1,457.6,444.4,121.2,293.4,1\n24,-1,375.3,446.4,43.3,106,1\n24,-1,591.6,445.5,93.1,270.2,1\n24,-1,1256.6,448.8,34.9,100.1,1\n24,-1,1012.2,435,43.7,120.5,1\n24,-1,1090.7,482.8,33.8,117.5,1\n24,-1,795.6,475.7,56.7,60.8,1\n24,-1,418.5,457.3,43,86.3,1\n24,-1,1053.8,485.1,38.6,109.7,0.999\n24,-1,1098.9,439.1,40.1,110.3,0.999\n409,-1,214.7,431.9,150.2,345.5,1\n409,-1,642.8,410.8,155.4,338,1\n409,-1,879.9,440.7,62,175,1\n409,-1,1075.2,408.6,193.2,592.6,1\n409,-1,833.5,471.7,56.7,79.5,1\n409,-1,793.9,476.2,61.1,59.1,1\n409,-1,419.2,443.5,116.8,321.6,0.999\n409,-1,377.4,465,54,110.7,0.999\n409,-1,502.1,429.8,144.4,296.6,0.999\n409,-1,983.4,426.6,135.7,514.7,0.997\n409,-1,626.5,452.1,25.8,80.8,0.058\n156,-1,540.7,430,158.8,460,1\n156,-1,1192.8,447.9,40.3,100,1\n156,-1,399.4,467.9,62.5,106.1,1\n156,-1,1088.3,481.6,38.7,118,1\n156,-1,726.3,436.1,118,338.8,1\n156,-1,1001.4,443.1,38.3,103,1\n156,-1,837.4,443.9,84.4,292.1,1\n156,-1,371.2,446.7,45.4,104.9,1\n156,-1,1052.2,482.9,41.5,112.9,1\n156,-1,470.9,465.2,38.6,115.1,1\n156,-1,1128.7,454.5,32.9,92.8,0.997\n156,-1,898.1,440.5,74.9,240.4,0.995\n156,-1,500.4,456.1,27.4,92.1,0.185\n156,-1,516,454.8,26.3,83,0.081\n423,-1,846.9,436.3,56.7,169.4,1\n423,-1,479.2,442.7,129,319.9,1\n423,-1,305,439,179.2,327.7,1\n423,-1,912,484.2,101.6,110.5,1\n423,-1,713.7,402.8,116,329.1,1\n423,-1,1056,410.7,189.7,630,1\n423,-1,603.9,438,133,282.2,1\n423,-1,448.7,457.4,37,116.2,0.272\n331,-1,1059.7,399.7,187.3,612.1,1\n331,-1,898.1,421.7,146.5,527.2,1\n331,-1,1457.2,442,47.4,107.6,1\n331,-1,489.4,453.2,41.4,111.1,1\n331,-1,797.7,476.3,58.9,61.7,1\n331,-1,410.7,469.6,46.1,104.5,1\n331,-1,658.5,463.4,26.9,73.6,1\n331,-1,380,462.6,45.3,114.7,1\n331,-1,173.7,403.8,164.8,429.9,1\n331,-1,840.2,473.5,52.2,79.6,0.997\n331,-1,1771.2,398.8,149.8,469.5,0.993\n331,-1,562.7,459.9,21.4,60,0.955\n331,-1,635.2,461.1,25.4,65.4,0.947\n331,-1,584.2,459.1,21.9,59.6,0.907\n331,-1,609,457.6,40.8,64.9,0.895\n297,-1,1543.5,429.8,215,459.2,1\n297,-1,761.1,443.8,64.9,205.4,1\n297,-1,508.1,455.3,35.8,109.1,1\n297,-1,1162.2,442.9,50.5,112.4,1\n297,-1,1006.6,407.2,155.5,618.8,1\n297,-1,1388.3,429.2,138.3,285.4,1\n297,-1,859.2,426.6,174.4,506.8,1\n297,-1,412.1,469,47.5,105,1\n297,-1,381.9,461.9,43.7,113.4,1\n297,-1,659.5,460.7,25.7,73.7,0.999\n297,-1,831.4,479,57.7,66.6,0.998\n297,-1,577.9,461.2,26.3,59.8,0.988\n297,-1,553.3,460.5,26.3,62.8,0.902\n297,-1,594,459.6,24.1,57.5,0.868\n535,-1,662.6,450.6,42.1,119.9,1\n535,-1,1458.8,421.2,214.4,659.8,1\n535,-1,806.1,428.1,123.1,266.2,1\n535,-1,1014.2,446.6,115,274.3,1\n535,-1,574.7,455.2,36,85.7,1\n535,-1,381.3,462.7,50.6,115.8,1\n535,-1,717.3,452.7,31.6,94,1\n535,-1,916.5,410.6,104.6,301.3,1\n535,-1,414.5,467.2,46.5,103.7,0.999\n535,-1,1695.5,368.1,225.5,712.9,0.998\n535,-1,544.7,462,28.7,76.2,0.988\n535,-1,1099.6,438.4,85.8,238.2,0.986\n535,-1,1173.1,443,40,98.2,0.917\n535,-1,459.1,461.5,28.6,70.8,0.632\n535,-1,567.3,433.4,20.4,36.6,0.05\n477,-1,752,439.8,103.9,297.4,1\n477,-1,622.7,438.7,87.1,268.3,1\n477,-1,1344.3,389.2,217,691.8,1\n477,-1,1161.8,414.4,161,591.2,1\n477,-1,1039.2,437.3,41.1,107.1,1\n477,-1,839.1,415.7,85.6,296.2,1\n477,-1,991.3,447.8,37,98.2,1\n477,-1,564.7,453.7,33.8,81.5,0.999\n477,-1,1085.3,469.8,40.7,130,0.998\n477,-1,528.9,458.3,30.6,73.8,0.996\n477,-1,1112.1,434.9,41.2,149.6,0.996\n477,-1,1506.6,406.6,182.3,417.2,0.992\n477,-1,915.2,452.8,67.5,228.3,0.783\n477,-1,715.6,463.7,22.4,71.3,0.646\n273,-1,511.4,455.2,35,111.3,1\n273,-1,1367.3,440.8,198.7,408.2,1\n273,-1,692.6,447.1,65.3,195.4,1\n273,-1,393.4,465.3,41.4,113.1,1\n273,-1,822.9,431.9,141.3,485.2,1\n273,-1,957.5,402.6,166,649.2,1\n273,-1,1620.8,408.3,108.8,342.7,1\n273,-1,459.4,458.8,31.6,107.5,0.996\n273,-1,654.8,463.9,28.3,70.7,0.992\n273,-1,584.6,459.4,23.2,61.3,0.988\n273,-1,638.5,461.6,26.4,63.3,0.959\n273,-1,558.2,460.4,23.3,61.3,0.93\n218,-1,716.8,417,186.2,573.3,1\n218,-1,597.2,454.9,56.3,169.9,1\n218,-1,1035.1,448.7,155.8,333.7,1\n218,-1,514.1,454.4,34.6,110.9,1\n218,-1,885.7,431.5,129.5,392.5,1\n218,-1,371,447.4,44.9,103.9,1\n218,-1,441.7,468.6,42.6,106.9,0.999\n218,-1,413.5,467,49.8,105.6,0.998\n218,-1,1206.1,450,41.2,101.5,0.991\n218,-1,657.6,464.9,25.4,71.4,0.988\n218,-1,552.1,455.5,24.4,65.6,0.946\n218,-1,546.5,442.2,20.7,52,0.462\n218,-1,592.7,421.2,18.1,35.7,0.072\n41,-1,913.6,484.2,96.1,110.9,1\n41,-1,834.9,472.8,54.6,77.1,1\n41,-1,1640.1,402.4,266.7,479.1,1\n41,-1,1457.4,426.7,68.1,131.8,1\n41,-1,482.5,446.6,110.5,295,1\n41,-1,374.9,446.3,43.3,105.9,1\n41,-1,1258.4,446.9,35.4,102.7,1\n41,-1,1009,439.9,43.3,117.1,1\n41,-1,614.8,442.9,87.5,275.7,1\n41,-1,418.1,457.8,42.6,86.6,1\n41,-1,1054.2,484.8,39.7,110.1,1\n41,-1,796,475.8,56.4,61.6,1\n41,-1,1091.2,481.2,33.2,117.6,1\n41,-1,1097.2,436.9,41.2,113.9,1\n41,-1,584.3,465.8,32.9,131.4,0.061\n262,-1,663.1,451.6,68.3,190.5,1\n262,-1,405.7,464,42.1,112.8,1\n262,-1,938.1,410,171.3,636,1\n262,-1,1690.6,398.3,226.4,379.6,1\n262,-1,1299.7,442.9,146,380.7,1\n262,-1,512.4,454.1,33.6,109.9,1\n262,-1,818.3,430.6,130.7,490.5,1\n262,-1,369.3,446.7,46.1,107.6,1\n262,-1,592,460.9,23.8,62.7,0.996\n262,-1,470.8,459.2,28.2,103.8,0.992\n262,-1,777.8,453.3,25.9,73.4,0.986\n262,-1,558,462.8,22.9,60.2,0.925\n262,-1,607.6,461.4,24,60.8,0.925\n262,-1,763.2,453,24.5,73.4,0.193\n262,-1,1109.6,450.1,45.7,99.3,0.082\n72,-1,912.7,482.6,97.9,111.8,1\n72,-1,836.3,471.9,53.6,77.8,1\n72,-1,374,447.1,43.8,105.5,1\n72,-1,419.6,457,41.3,85.6,1\n72,-1,1260.9,447,35.2,101.1,1\n72,-1,510,439.5,129.5,326.5,1\n72,-1,1548,427.8,53.7,131.4,1\n72,-1,1004.3,443.3,41.4,111.5,1\n72,-1,1087.9,484.1,35.7,116.7,1\n72,-1,613.2,438.5,100.6,294.8,1\n72,-1,1052.1,480.9,40.7,115.2,1\n72,-1,700.6,456.4,76.8,220.4,1\n72,-1,475.4,467.4,33.9,106.8,0.999\n72,-1,794.7,476,57.4,61.9,0.999\n72,-1,1098,439.3,37.7,115.3,0.994\n35,-1,912.9,483.5,97.8,112,1\n35,-1,836.3,471.9,54,79.3,1\n35,-1,475.8,445.6,114.7,297.9,1\n35,-1,1620.3,393.5,222.8,473.3,1\n35,-1,375.3,446.5,42.3,106,1\n35,-1,1451.9,430.5,64.2,130.4,1\n35,-1,604.6,443.1,90.4,275.4,1\n35,-1,418.7,457.7,42,87.7,1\n35,-1,1257.1,448.6,35.3,100.7,1\n35,-1,1089.8,484.2,34.4,116.9,1\n35,-1,795.5,476,57.8,61.8,1\n35,-1,1009,441.4,42.3,118.5,1\n35,-1,1054.5,484.7,39.3,110.7,1\n35,-1,1097.7,439.8,39.7,108.9,0.999\n303,-1,773.1,446,72.3,210.7,1\n303,-1,504.9,454.6,38.1,109.6,1\n303,-1,1639.7,423.9,156.4,476.3,1\n303,-1,1015.1,412.2,170.7,614.4,1\n303,-1,1356.7,422,96.1,286.4,1\n303,-1,410.3,468.5,48.6,105.7,1\n303,-1,1174.4,445.5,45.8,108.7,1\n303,-1,835.1,474.4,53.1,76.5,1\n303,-1,658.5,462,26,74.4,1\n303,-1,893,436.1,144.1,501.1,1\n303,-1,382.8,464.2,44.3,111.3,1\n303,-1,575.8,461.1,26.5,60.7,0.977\n303,-1,610.4,459.2,24.5,57.6,0.911\n303,-1,554.8,460.8,25.6,62.4,0.902\n303,-1,620.7,458.7,40.6,63.1,0.074\n587,-1,836,472.3,53,77.9,1\n587,-1,722.6,447.4,43.7,107.7,1\n587,-1,985.6,436.4,96.9,240.3,1\n587,-1,1231.3,438.4,87.2,275.2,1\n587,-1,664.9,455.4,40.4,101.6,1\n587,-1,1091.8,411.6,93.4,292.4,1\n587,-1,797.5,475.9,54.7,61.3,1\n587,-1,910.7,484.7,100,109.9,1\n587,-1,381.8,465.6,48.4,112,1\n587,-1,416.1,467.7,41.7,104.8,1\n587,-1,557,459.9,28.2,84.3,0.999\n587,-1,630.9,454.9,35.9,103,0.997\n587,-1,585.7,457.8,34.8,86.2,0.967\n587,-1,1713,379.6,208,701.4,0.885\n346,-1,836.1,472.4,53.1,77.1,1\n346,-1,1065.6,397,196.9,606.4,1\n346,-1,907,421.1,144.7,526.9,1\n346,-1,485.1,452.6,35.3,114.3,1\n346,-1,272.4,403.6,191.9,418.4,1\n346,-1,796.1,475.1,56.5,63.4,1\n346,-1,1501.2,437,46.4,112.7,1\n346,-1,658.7,462.7,26.8,74.9,1\n346,-1,34.6,439.2,139.6,344.7,1\n346,-1,639.2,462.1,24.7,65.5,0.946\n346,-1,583.6,458.9,22.1,59,0.926\n346,-1,559.8,460.2,19.1,58.9,0.9\n346,-1,609.5,457.9,42.1,64.4,0.855\n448,-1,493.8,435.5,98.7,291.8,1\n448,-1,623.2,439.2,89.6,310.6,1\n448,-1,1130.3,406.6,259.2,660.1,1\n448,-1,376,463.2,54.5,115.1,1\n448,-1,738.3,317.5,392.5,763.5,0.999\n448,-1,413.4,470.3,46.5,102.9,0.997\n448,-1,718.9,456,33.7,87.8,0.982\n448,-1,471.1,461.8,27.3,72.4,0.82\n448,-1,580.3,465.4,23.6,67.9,0.083\n358,-1,835.9,471.3,53.7,78.8,1\n358,-1,1072.6,404.8,200.6,599,1\n358,-1,394.6,409.7,160.8,392.4,1\n358,-1,918.6,420.2,143.4,520.1,1\n358,-1,1530,438.2,45.1,111.6,1\n358,-1,1,445.6,202.1,407.4,1\n358,-1,797.6,475.3,56,62.6,1\n358,-1,660.3,464.2,27.2,73.8,0.996\n358,-1,632.6,459.4,27,71.3,0.992\n358,-1,116.4,442,182,335.7,0.977\n358,-1,558.6,460.3,20.1,57.7,0.965\n358,-1,648.3,460.4,23.1,71.9,0.943\n358,-1,875.6,454.7,30.6,70.1,0.867\n358,-1,573.9,459.6,23.2,58.3,0.86\n358,-1,519.2,457.4,23.7,68.5,0.715\n358,-1,502,457.6,27.4,90.9,0.076\n358,-1,1058.9,433.9,46.6,227.3,0.05\n339,-1,487,452.9,34.8,113.8,1\n339,-1,835.3,472,54.6,79.1,1\n339,-1,234.4,414.2,208.5,414.7,1\n339,-1,1062,418.7,196,589.4,1\n339,-1,1479.7,439.6,51.5,111.4,1\n339,-1,904.7,423.7,144.6,524.8,1\n339,-1,796.2,474.7,56.1,62.5,1\n339,-1,415.4,473,41.1,106.9,1\n339,-1,659.5,463.7,25.8,72.3,0.999\n339,-1,2.1,459.7,144.8,326.1,0.999\n339,-1,632.4,460.1,24.8,65.7,0.975\n339,-1,559.2,460.9,20,58.9,0.954\n339,-1,572.7,460.3,23.2,58.3,0.848\n339,-1,531.1,457.3,35,64.8,0.313\n98,-1,913.7,482.7,97.4,112.4,1\n98,-1,836,472.2,52.7,77.5,1\n98,-1,373.1,446.1,44.3,105.8,1\n98,-1,1257.8,445.8,38.3,103.1,1\n98,-1,749.1,453.6,82,230,1\n98,-1,454.6,467.5,43.8,105.9,1\n98,-1,1088.6,485.7,36.2,115.7,1\n98,-1,548.8,443.4,120.5,356.3,1\n98,-1,1004.5,444,41.3,106,1\n98,-1,1052.2,481.6,40.4,111.8,1\n98,-1,642,440,100.3,303.6,1\n402,-1,836.5,473.5,53,75.3,1\n402,-1,134.5,437.3,214.1,360.2,1\n402,-1,1080.9,415.7,209.5,609.1,1\n402,-1,631.7,406.2,139.7,344.4,1\n402,-1,796.5,476.3,56.8,62.2,1\n402,-1,902.6,435.4,57.9,176.2,1\n402,-1,349.3,443,138,350.9,1\n402,-1,477.1,435.6,105,293.3,1\n402,-1,977.8,422.1,133.5,514,0.999\n402,-1,580.6,469.9,22.9,58,0.276\n499,-1,845.3,437.4,128.4,292.8,1\n499,-1,682.5,432.9,94.1,274.1,1\n499,-1,381.5,463.4,53.4,117.8,1\n499,-1,967,434.5,115.2,246.7,1\n499,-1,1452.5,377.4,252,703.6,1\n499,-1,1081.3,445.1,56.8,154.9,1\n499,-1,1221.7,435.7,225.3,579.7,1\n499,-1,570.6,456,33,82.8,1\n499,-1,1177.9,448.6,37.2,87,1\n499,-1,635.4,454,33.4,88.5,1\n499,-1,796.9,477.2,57.7,59.6,1\n499,-1,1661.7,415.8,196,469.5,0.999\n499,-1,536.4,459.9,29.4,74.8,0.994\n499,-1,460.5,459.5,25.2,76.2,0.99\n86,-1,913.7,482.6,96.8,112.4,1\n86,-1,837.2,470.9,52.2,80.2,1\n86,-1,373.5,446.6,44.7,105.2,1\n86,-1,1261.5,447.1,35.2,100.7,1\n86,-1,1088.6,483,36.7,119.3,1\n86,-1,720.2,456.8,92.7,225.6,1\n86,-1,542.7,446,109.8,330.7,1\n86,-1,1004.8,444,41.5,107.9,1\n86,-1,625.5,442,100.2,296.5,1\n86,-1,1054.1,480.6,39.5,112.7,0.999\n86,-1,466.4,467.8,38.1,99.8,0.999\n86,-1,425.4,458.6,38.8,87.4,0.998\n86,-1,510.2,462.3,29.7,99.6,0.922\n86,-1,491.4,462.3,30.2,96.8,0.799\n285,-1,840.4,418.7,162.9,510.5,1\n285,-1,1479.3,436.5,166.1,421.2,1\n285,-1,510.5,456.1,34,108.9,1\n285,-1,989.4,401.7,153.8,648.8,1\n285,-1,385.8,465.1,44.9,111.7,1\n285,-1,717.7,447.9,90.1,200.8,1\n285,-1,1345.3,442.5,42.2,108.2,1\n285,-1,659.9,462,25.8,74.9,1\n285,-1,449.2,459.7,32.3,104.7,0.995\n285,-1,579.2,461.4,25.9,61.8,0.976\n285,-1,564.4,461.2,25.7,61.2,0.881\n285,-1,595.2,459.7,25.8,58.6,0.793\n285,-1,545.3,459.3,26.6,71.4,0.771\n285,-1,431.3,466.3,26.6,102.9,0.506\n76,-1,913.5,483.7,96.8,111.1,1\n76,-1,835.5,472.1,53.5,76.7,1\n76,-1,375,447.2,43.2,104.9,1\n76,-1,1260.4,447.4,35.5,100.4,1\n76,-1,1087.7,486.3,36.8,115.4,1\n76,-1,1004.5,442.4,41.8,111.2,1\n76,-1,419.1,457.1,41.8,85.3,1\n76,-1,525.6,444.7,121.1,323.4,1\n76,-1,704.2,455.5,80.2,224.6,1\n76,-1,472.5,466.3,33.1,101.8,0.999\n76,-1,1053.4,481.2,40.3,113.6,0.999\n76,-1,610.8,439.9,98.7,295.5,0.999\n76,-1,795.9,476.1,55.2,60.2,0.986\n76,-1,1097.5,443,40.3,104,0.763\n234,-1,772.8,414.6,262.4,593.5,1\n234,-1,371,447.3,44.3,107.2,1\n234,-1,616.5,446.4,60.6,185,1\n234,-1,421.9,464.9,42.7,110.8,1\n234,-1,1126,439.7,153.5,358.7,1\n234,-1,514.1,454.8,34.3,110.7,1\n234,-1,1086,484,41.5,113.5,1\n234,-1,1048.3,483.8,41.3,110.3,0.996\n234,-1,466.8,455,30.9,105.8,0.936\n234,-1,549,458.7,24.5,63.1,0.919\n234,-1,493.9,454.4,26.6,107,0.441\n234,-1,600.5,465.1,32.4,75.8,0.062\n456,-1,914.6,482.7,96.4,111.9,1\n456,-1,1163.1,406.5,272.7,674.5,1\n456,-1,379.1,463.2,51,114.9,1\n456,-1,817.3,407,89.7,307.2,1\n456,-1,994.6,445.2,38.1,102.4,1\n456,-1,452.1,379.7,404.7,701.3,0.999\n456,-1,1382.3,419.8,120.9,361.6,0.996\n456,-1,417,469.2,39.7,103.6,0.977\n456,-1,1047.9,444.9,29.7,90.4,0.799\n561,-1,836.4,473.1,54.5,77.2,1\n561,-1,718.6,448.9,38.5,100.5,1\n561,-1,1574.3,384.7,265.6,696.3,1\n561,-1,1101.6,441.2,116.8,277.9,1\n561,-1,905.4,429.7,95.9,251.9,1\n561,-1,797.1,476.7,56,61.5,1\n561,-1,1001.2,413.4,121.4,288.2,1\n561,-1,415.6,466.8,46,104.2,1\n561,-1,382.2,463.8,48.9,114.7,1\n561,-1,644.4,454.4,36,111.1,1\n561,-1,581,456.7,38.8,84.2,1\n561,-1,547.7,461.1,30.1,80.2,0.998\n561,-1,505,457.9,24.2,57.1,0.925\n561,-1,519.2,458.6,23.2,56,0.907\n561,-1,1202.6,444.4,46.6,112.3,0.62\n180,-1,571.8,428.1,198,479.8,1\n180,-1,407.3,469.5,50.8,104.9,1\n180,-1,779,437.5,109.9,362.7,1\n180,-1,1157.2,446.1,38.6,102.9,1\n180,-1,1087.2,485,39.7,115.2,1\n180,-1,370.1,445.1,45.8,106.9,1\n180,-1,506.9,454.9,38.2,106.9,1\n180,-1,900,444.7,107.8,300.3,1\n180,-1,464.7,468.5,37.4,108.6,0.999\n180,-1,960.5,440.2,116.3,262.6,0.998\n180,-1,555.1,457.5,25,66.7,0.951\n180,-1,1051.2,480.5,36,122,0.823\n180,-1,536.4,451.5,27.7,89.6,0.524\n180,-1,566.8,458.9,28.7,77.2,0.462\n180,-1,580.3,434.1,21.5,42,0.268\n100,-1,913,483.5,97.9,111.5,1\n100,-1,834.9,472.7,54,77.1,1\n100,-1,373.8,445.8,43.6,105.8,1\n100,-1,1257.3,445.5,38.5,103.1,1\n100,-1,452.1,467.1,44.4,106.5,1\n100,-1,751.8,455.1,83,230.7,1\n100,-1,1089.3,485.8,35.8,115.7,1\n100,-1,549.2,446.7,121.5,360.2,1\n100,-1,1004.6,443.9,40.9,107,1\n100,-1,651.2,441.3,99.4,294.5,1\n100,-1,1051.5,481.9,40.7,111.6,1\n100,-1,511.8,465.2,29.1,103.7,0.114\n356,-1,836.2,471.1,53.5,78.2,1\n356,-1,1068.1,395.1,201.3,607.3,1\n356,-1,384.1,404,143.6,403.3,1\n356,-1,913.7,421.2,148.6,526.5,1\n356,-1,1524.3,437.8,46.2,112.4,1\n356,-1,797.2,474.6,55.9,63.5,1\n356,-1,2.4,440.5,151.5,411.3,1\n356,-1,660.6,461.7,27.3,75.6,0.998\n356,-1,104.1,429.5,186.1,350.1,0.996\n356,-1,632.5,459.4,27.1,70,0.986\n356,-1,558,458.5,20.6,59.8,0.971\n356,-1,586.5,458.5,22.5,58.1,0.895\n356,-1,880.9,454.1,30.5,72.7,0.892\n356,-1,521.8,457.6,23.2,65.8,0.785\n356,-1,481.6,453.5,34.8,120.4,0.237\n356,-1,501,457,25.7,94.2,0.061\n484,-1,1362.7,383.9,282.9,697.1,1\n484,-1,1035.7,440.8,39.1,107.6,1\n484,-1,644.5,433.1,94.9,275.8,1\n484,-1,1192.6,418,165.3,601.4,1\n484,-1,795.2,438.2,101.6,292.1,1\n484,-1,566.9,453.7,34.1,81.4,1\n484,-1,742.5,445.5,47.3,135.4,1\n484,-1,1086.1,469.6,38.6,131,0.999\n484,-1,881.2,430.9,128.1,256.2,0.998\n484,-1,1111,440.4,41.5,145.9,0.995\n484,-1,463.1,459.9,29.3,79.7,0.994\n484,-1,533.4,457.8,28.2,73.4,0.99\n484,-1,1540,407.9,204.7,428.4,0.986\n484,-1,999.5,450.8,27.1,94.7,0.39\n484,-1,620.5,463.5,28.6,81.4,0.098\n484,-1,1165.7,454,23.9,84.2,0.057\n27,-1,914.5,483.2,95.5,112.5,1\n27,-1,836,473.1,53.9,76.3,1\n27,-1,1420.7,429.4,70,132.7,1\n27,-1,375.6,446.2,42.7,107.2,1\n27,-1,1520.6,403.2,201.9,430.2,1\n27,-1,463.9,445.4,118.8,293.9,1\n27,-1,595.2,443,89.8,272.2,1\n27,-1,796,475.6,56.2,62.2,1\n27,-1,418.2,457.4,42.5,89.8,1\n27,-1,1256.6,448.6,34.6,99.7,1\n27,-1,1053.7,484.2,39.5,110.8,1\n27,-1,1091.7,478.8,33,119.9,1\n27,-1,1012,438.8,42.1,114.1,1\n27,-1,1098.4,440,40.3,109.6,1\n27,-1,1647.4,421.3,138.2,384.2,0.121\n105,-1,913.8,482.2,96.2,113,1\n105,-1,374.2,446.2,42.8,106.2,1\n105,-1,834.7,473,54.7,75.4,1\n105,-1,1252.3,447.1,38.7,99.6,1\n105,-1,447.7,467.1,45.8,106.2,1\n105,-1,1088.8,482.3,36.5,119.4,1\n105,-1,552.7,441.8,124,362.2,1\n105,-1,758.5,456.3,84.9,239.1,1\n105,-1,1004.4,443.3,40.8,106.3,1\n105,-1,1052,482.1,40.1,111.2,1\n105,-1,658.4,439.1,100.3,301.4,1\n105,-1,505.3,464.6,34.3,102.8,0.999\n488,-1,644.8,432.8,121.7,273.3,1\n488,-1,805.8,441,122.2,289.6,1\n488,-1,1368.2,389.5,287.3,691.5,1\n488,-1,1199.6,424,190.8,600.6,1\n488,-1,568.3,455.4,34.5,81.1,1\n488,-1,1031.6,440.5,39.8,112.5,1\n488,-1,907.6,433.6,113.6,252.1,1\n488,-1,1590.3,411.2,168.7,424.9,0.999\n488,-1,460,461.5,28.8,77.5,0.999\n488,-1,1086.4,458.9,39.4,139.5,0.998\n488,-1,1111.1,437.9,39.3,149.3,0.997\n488,-1,532.8,456.8,27.3,76.6,0.995\n488,-1,1183.5,451.8,34,90.4,0.99\n488,-1,627.3,460.6,27.2,74.2,0.675\n184,-1,591.7,424.5,194.1,490.8,1\n184,-1,406.5,469.6,52.2,103.8,1\n184,-1,785.4,434.7,110.9,362.8,1\n184,-1,1153.9,449.3,38.5,100.9,1\n184,-1,370.4,445.2,45.7,106.7,1\n184,-1,506.6,453.9,37.9,109.5,1\n184,-1,1086.7,485.6,39.9,113.3,1\n184,-1,974.5,432.4,103.3,275.2,1\n184,-1,917.6,441.8,97.4,310.8,0.999\n184,-1,461.2,467.1,37.7,110.1,0.998\n184,-1,580.7,434.5,22.7,41,0.435\n184,-1,544.9,457.4,40,87.3,0.245\n184,-1,572.4,456.5,44,127.1,0.132\n364,-1,836.2,471.8,53.7,78.3,1\n364,-1,1072.2,414.1,211.9,608.4,1\n364,-1,404.6,412.8,198.1,384.5,1\n364,-1,1.8,444.4,229.9,405.7,1\n364,-1,928.7,418,143.6,526.1,1\n364,-1,796.6,475.7,56.6,61.9,1\n364,-1,1542.4,435.9,46.5,113.6,1\n364,-1,627.4,458.5,28.7,73.9,1\n364,-1,197.9,438.7,119.3,330.2,0.998\n364,-1,888,452.2,27.4,65.9,0.852\n364,-1,595.1,460,20.6,55.4,0.846\n364,-1,562.8,461,17.4,59.3,0.788\n364,-1,657.5,462.1,24,69.5,0.31\n211,-1,698.5,425.6,164,556,1\n211,-1,587.2,454.8,58.9,166.6,1\n211,-1,1014.2,442,161.5,327.8,1\n211,-1,513.4,455.7,34,109,1\n211,-1,1195.2,451.9,37.4,97.3,1\n211,-1,849.3,433.4,146.8,389.5,1\n211,-1,370.5,446.6,45,105.1,1\n211,-1,407.3,467.7,49.7,106.9,1\n211,-1,445.3,468.3,41.6,105.8,0.999\n211,-1,656.6,462.8,26.1,74.6,0.991\n211,-1,561.8,457.9,23.7,61,0.954\n211,-1,594.7,421.3,20.4,39.2,0.567\n211,-1,639.6,457,30,86.7,0.528\n211,-1,580.1,431.9,19.7,37.3,0.425\n16,-1,914,483.4,97,111.5,1\n16,-1,836.6,471.9,52.9,77.6,1\n16,-1,446,445.2,122.1,284.9,1\n16,-1,375.4,446,42.7,105.9,1\n16,-1,1401.5,440.2,57.9,125.6,1\n16,-1,1453.9,408.7,179.7,400.6,1\n16,-1,587.4,441.7,88.7,273.2,1\n16,-1,1257.5,447,34.3,101.3,1\n16,-1,1013,434.4,43.1,117.4,1\n16,-1,795.3,475.5,56.2,61.5,1\n16,-1,1090.3,483.7,34.1,116.9,1\n16,-1,1100.6,437.8,40.1,108.5,1\n16,-1,1056.6,486.9,35.9,107,0.999\n16,-1,417,459.1,41.2,84.6,0.992\n16,-1,1563.7,419.8,155.5,384,0.699\n16,-1,662,465.9,51.9,176.9,0.074\n110,-1,913.7,483,97.1,112.4,1\n110,-1,373.8,446.3,43.1,106.4,1\n110,-1,1249.3,448.5,39.4,99.2,1\n110,-1,443.9,468.6,45,100.1,1\n110,-1,834.8,471.9,54.3,77.7,1\n110,-1,1088.9,483.3,36.1,119.2,1\n110,-1,556.5,443.9,130.1,365.4,1\n110,-1,763.6,453.2,83.1,244.3,1\n110,-1,666.4,443,97.7,292.6,1\n110,-1,504.4,465.5,34.6,102.9,1\n110,-1,1051.3,482.8,40.9,110.1,1\n110,-1,1004.9,443.6,40.5,105.2,1\n75,-1,913.2,483.6,97.6,111.4,1\n75,-1,835.8,472.4,53.8,76.7,1\n75,-1,374.9,447.4,42.8,104.5,1\n75,-1,1260.3,447.4,35.6,100.5,1\n75,-1,1087.6,486.8,36.6,115.1,1\n75,-1,517.6,442.3,125.3,330.8,1\n75,-1,419.3,457.2,41.8,84.6,1\n75,-1,1005.5,442.4,41.1,110.7,1\n75,-1,703.1,454.3,78.5,226.3,1\n75,-1,473.3,466.6,32.7,104.1,0.999\n75,-1,1053.7,480.4,40,114.1,0.999\n75,-1,610.3,440.1,98.9,293.7,0.999\n75,-1,795.5,475.8,56.4,61.4,0.997\n75,-1,1097.7,441.5,40.3,103.8,0.794\n75,-1,1554.2,431.4,53.1,125,0.665\n43,-1,913.2,483.6,97.3,111.7,1\n43,-1,835.2,472.7,54.9,77.9,1\n43,-1,1461.9,426.7,66.5,131.3,1\n43,-1,1648.3,401.1,272.5,479.9,1\n43,-1,480.7,444.5,113.6,311.2,1\n43,-1,374.4,445.7,43.7,107.1,1\n43,-1,1009.4,439,42.2,116.8,1\n43,-1,1258.5,447.2,35.3,102,1\n43,-1,615.1,442.1,88.6,276.8,1\n43,-1,417.8,456.8,42.2,86.8,1\n43,-1,795.8,475.9,56.7,61,1\n43,-1,1054.8,485.4,38.8,110.3,1\n43,-1,1090.4,480.8,33.4,119.7,1\n43,-1,1097.8,437.1,40.3,110.2,1\n43,-1,584.2,465.3,33,135.6,0.374\n59,-1,913.8,484.2,97.8,110.9,1\n59,-1,836.2,472.8,53.3,77.2,1\n59,-1,481,443,128.7,318.5,1\n59,-1,375.3,445.7,43.1,106.7,1\n59,-1,1261.1,446.1,35.3,103,1\n59,-1,418.4,458,43.4,87.8,1\n59,-1,1515.9,432.6,55.4,125.8,1\n59,-1,624.2,442.4,90.3,281.5,1\n59,-1,1097.9,435.8,41,113.5,1\n59,-1,1054.4,484.8,39.2,108.8,1\n59,-1,797.6,475.1,56,62.7,1\n59,-1,1091.6,477.7,33.7,119.7,1\n59,-1,1005.5,442.5,41.6,113,0.999\n59,-1,686.5,457.4,74.4,218.5,0.979\n59,-1,588,460.7,34.1,135.5,0.053\n220,-1,721.6,410.7,194.3,581.4,1\n220,-1,600.2,453.1,55.6,174,1\n220,-1,1048.4,443.6,145.2,338.7,1\n220,-1,514.1,454,35.5,111.3,1\n220,-1,372.3,447.2,44.2,104.3,1\n220,-1,436.7,467.1,44.5,108.7,1\n220,-1,886.1,430.4,134.9,397.5,1\n220,-1,1210.6,451.9,39.1,99.9,0.999\n220,-1,658.6,462.1,28.5,76.1,0.991\n220,-1,555.1,456.6,24.8,67,0.932\n220,-1,409.1,467.8,44.4,98.4,0.687\n220,-1,593,422.6,18.7,37.2,0.232\n220,-1,575.2,435,19.2,40.4,0.121\n143,-1,918.2,482.5,89.6,113.2,1\n143,-1,403.3,466,62.4,105.6,1\n143,-1,568.2,437.5,152.7,428.6,1\n143,-1,1210,445.2,40.5,104,1\n143,-1,1087.5,485.9,38.4,113.1,1\n143,-1,818.6,448.1,89.2,268.2,1\n143,-1,1002.7,444.2,38.3,101.1,1\n143,-1,697.3,434.2,122.5,328.9,1\n143,-1,372.7,444.7,43.1,107,1\n143,-1,481.2,466.1,42.2,107.7,1\n143,-1,1052,484,39.8,108.6,1\n143,-1,531.7,456.1,26.6,72.4,0.948\n143,-1,513.8,462.5,31.3,74.2,0.913\n143,-1,1108.9,451.4,37.6,95.1,0.865\n42,-1,912.5,483.8,98.3,111.2,1\n42,-1,835.1,472.8,54.7,77.5,1\n42,-1,1459.4,426.6,66.9,131.5,1\n42,-1,1646.8,399.3,260.8,476.1,1\n42,-1,374.6,446.3,43.7,106,1\n42,-1,478.6,444.6,115.2,310.3,1\n42,-1,1009.1,439.1,42.6,116.9,1\n42,-1,1258.5,446.7,35.4,103.1,1\n42,-1,614.8,442.2,89.1,276.3,1\n42,-1,417.9,456.5,42.9,87.1,1\n42,-1,796.1,475.7,55.8,61.5,1\n42,-1,1054.6,485.1,39,109.1,1\n42,-1,1097.8,437.3,40.8,110.6,1\n42,-1,1091,479.6,33.2,119.1,1\n121,-1,913.9,485.4,96.6,109,1\n121,-1,373.8,446.5,42.2,105.7,1\n121,-1,1088.8,482.1,37.7,119.9,1\n121,-1,435.8,469,45.7,104.3,1\n121,-1,560.4,451.7,133.2,369.5,1\n121,-1,677.2,441.7,100.5,311.1,1\n121,-1,498,469.1,35.4,102.9,1\n121,-1,777.7,451.4,95.6,251.3,1\n121,-1,1237.9,442.4,40.5,105.2,1\n121,-1,1051.6,483.1,40.5,111.2,1\n121,-1,1007,444.6,39.1,104,0.999\n121,-1,534.2,459.2,28.9,66.9,0.861\n209,-1,583.3,456.2,61.8,166.4,1\n209,-1,692.9,413.3,159.9,566.2,1\n209,-1,406.6,466.2,52,108.3,1\n209,-1,1014,438.2,138.9,329.3,1\n209,-1,835,433.5,155.9,384.7,1\n209,-1,1193.4,451.4,35,96.2,1\n209,-1,513.7,456.5,32.6,108.4,1\n209,-1,371.8,446.1,43.6,104.9,1\n209,-1,450.2,465.9,36.9,108.4,0.997\n209,-1,657.6,461.8,27.1,77.7,0.986\n209,-1,560.5,459.4,25.5,64,0.931\n209,-1,591.5,423.4,20.3,40.2,0.679\n209,-1,578.4,432.1,19.8,37.8,0.522\n209,-1,535.1,457.5,25.2,85.6,0.512\n209,-1,612.3,416.1,20.6,46,0.237\n551,-1,834.9,472.4,52.8,76.8,1\n551,-1,651.1,451.4,39.4,114.1,1\n551,-1,1084.2,440,110.5,282.9,1\n551,-1,715.3,449.4,36.9,99.7,1\n551,-1,382,463.9,49.5,114.7,1\n551,-1,968.7,412.1,90.5,296.7,1\n551,-1,1546.1,398.2,223.9,682.8,1\n551,-1,579.4,456.2,38.4,84.9,1\n551,-1,885,435.1,82.4,250,1\n551,-1,796.1,476.1,57,60.5,1\n551,-1,416.5,467.7,44.9,102.3,1\n551,-1,1190.1,438.5,44.5,111.5,0.999\n551,-1,548.7,460.3,29.5,78.6,0.998\n551,-1,511,456.6,23.4,57.3,0.9\n551,-1,1046.4,442.6,37.7,100.6,0.814\n551,-1,452.7,462.4,32.2,76.2,0.222\n304,-1,776.5,446.7,70.4,210.2,1\n304,-1,504.5,455.8,38.6,109.9,1\n304,-1,1646.4,435,162,464.2,1\n304,-1,1013.8,409.5,177,613.2,1\n304,-1,410.8,468.8,48.4,105.9,1\n304,-1,1343.3,428.9,104.9,271.7,1\n304,-1,1177.7,446.8,42.9,106.2,1\n304,-1,835.3,475.5,54.1,75.3,1\n304,-1,890,430,148.4,512.2,1\n304,-1,658.3,462.3,25.9,73.2,1\n304,-1,382.2,463.3,44.5,112.2,0.999\n304,-1,575.4,461.2,26.1,60.7,0.976\n304,-1,610.3,459.3,24.3,57.5,0.916\n304,-1,554.7,461,25.2,62.4,0.908\n304,-1,4.3,485,87.3,365.5,0.188\n287,-1,1349.3,444,42.3,107.4,1\n287,-1,841,429.3,164.9,491,1\n287,-1,509.8,455.9,33.9,109,1\n287,-1,1484,434.5,198.3,431.6,1\n287,-1,728.9,443.9,80.3,207.4,1\n287,-1,992.1,407.8,158.2,623.4,1\n287,-1,658.3,460.6,26.3,74.2,1\n287,-1,406.8,471.4,46.6,104,0.999\n287,-1,383.8,461.7,43,111.6,0.998\n287,-1,577.8,461,26.1,61.2,0.972\n287,-1,451.5,459,30.5,102.3,0.971\n287,-1,561.2,460.8,25.2,61.3,0.905\n287,-1,601.1,458.7,25.6,58.4,0.872\n287,-1,542.9,459.3,26.7,72.4,0.736\n287,-1,615.2,457.5,42.6,62.4,0.059\n585,-1,836,472.4,53.6,77.2,1\n585,-1,722,448.3,42.8,106.7,1\n585,-1,1217.7,445.4,95.5,271.4,1\n585,-1,979.7,428.4,95.5,247.6,1\n585,-1,1085.8,412.5,89.5,290.2,1\n585,-1,797.8,475.4,55.4,61.9,1\n585,-1,665.1,455.3,39.3,102.4,1\n585,-1,416.7,466.6,42.9,105.9,1\n585,-1,380.4,463.8,48.5,113.3,1\n585,-1,914.2,484.8,96.3,109.4,1\n585,-1,556.9,458.3,29.7,84.3,0.999\n585,-1,631.4,454.3,38.2,104,0.998\n585,-1,1686.7,401.7,234.3,679.3,0.996\n585,-1,584.2,457.2,36.7,86.8,0.964\n223,-1,1079.6,447.4,119.9,336.3,1\n223,-1,372.2,447.4,43.3,104.5,1\n223,-1,733.6,408.6,214.6,579.3,1\n223,-1,603.3,451.4,55.7,180.9,1\n223,-1,515,454.1,34.7,110.2,1\n223,-1,431.5,466.7,45.5,110.4,1\n223,-1,894.3,433,134.3,402.7,0.996\n223,-1,1053.7,477.9,38.8,118.2,0.995\n223,-1,553.3,458.2,24.9,67.2,0.931\n223,-1,660.1,464.6,24,72.3,0.905\n223,-1,1215.8,450.6,41,100.7,0.346\n223,-1,598.6,424.4,19.8,37.1,0.341\n223,-1,407.3,466,30.3,93.4,0.169\n427,-1,912.9,482.8,96.6,109.4,1\n427,-1,341,436,148.5,323.5,1\n427,-1,841.3,436.3,55.8,171.5,1\n427,-1,524.2,442.6,96,320.2,1\n427,-1,724.1,405.8,117.3,325.6,1\n427,-1,1060.6,395,190.3,663.5,1\n427,-1,617.1,432.8,136.5,287.9,1\n427,-1,482.3,460.6,27,78.5,0.301\n465,-1,703.3,441.2,98.7,300.1,1\n465,-1,911.2,484.8,98.8,108.5,1\n465,-1,831.1,408.6,89.6,300.2,1\n465,-1,1219.4,396.8,248.2,684.2,1\n465,-1,554.4,429.9,118.5,284.1,1\n465,-1,996.1,445.6,37.6,101.4,1\n465,-1,1048.7,438,40,109.8,0.999\n465,-1,1082.1,484.2,44.3,112.9,0.999\n465,-1,167.9,355.6,389.2,725.4,0.999\n465,-1,1418.9,419.2,160.4,383.4,0.998\n465,-1,1131,418.4,154.6,562.2,0.955\n465,-1,680.6,473.1,25.3,75.8,0.438\n465,-1,788.1,452.9,37.6,152.3,0.056\n153,-1,544.9,432.2,157.2,458.5,1\n153,-1,1197.4,446.8,39.5,101.3,1\n153,-1,398.6,468.7,64.8,104.3,1\n153,-1,721,439.3,119.2,330.7,1\n153,-1,1088.3,481.5,39.6,118.4,1\n153,-1,1002.5,441.8,38.1,105.8,1\n153,-1,835.3,449.3,87.7,283.1,1\n153,-1,372.6,446.2,44.4,105.2,1\n153,-1,1051.7,482.9,40.4,111.2,1\n153,-1,473.3,467.6,39.8,109.4,1\n153,-1,1127.7,456.8,33.9,89.9,0.998\n153,-1,891.7,440.4,74.3,231.9,0.924\n153,-1,499.7,454.5,32.6,107.1,0.882\n532,-1,666.2,451.3,42.4,120.1,1\n532,-1,1000.4,442.3,121.6,283.9,1\n532,-1,1447,418.3,204.3,662.7,1\n532,-1,381.7,463.2,49.7,115.1,1\n532,-1,801.7,431,122.8,267.2,1\n532,-1,715.3,452.6,33.7,91.1,1\n532,-1,573.6,455.5,34.3,85.9,1\n532,-1,915.3,412,88.8,302.1,1\n532,-1,414.5,468.3,45.7,102.9,0.999\n532,-1,1656.5,378.3,264.5,702.7,0.999\n532,-1,1091.2,435,92.6,240.3,0.999\n532,-1,1179.7,446.7,35.8,90.8,0.998\n532,-1,543.2,461.7,29.5,76.8,0.987\n532,-1,462,462.8,26.8,65.7,0.629\n532,-1,568.1,431.7,20,36.6,0.08\n309,-1,496.9,455,45.8,109.5,1\n309,-1,1022,413.5,212.2,604.3,1\n309,-1,1293.9,431.8,137.9,266.7,1\n309,-1,1677.3,434.8,233.7,492.2,1\n309,-1,792.6,445.1,65.2,210.2,1\n309,-1,410.8,468.3,47.7,106.2,1\n309,-1,894.5,423.1,139.1,529.5,1\n309,-1,657.6,462.8,26.8,73.5,1\n309,-1,381.7,464.8,44.3,111.6,0.999\n309,-1,1194.6,450.3,35.1,94.6,0.998\n309,-1,1.3,386.2,119.8,480.1,0.998\n309,-1,578.4,462.2,24.8,57.7,0.992\n309,-1,843.1,472.4,52.3,74.4,0.968\n309,-1,560.8,462.2,24,58.5,0.905\n309,-1,619,460.9,23.1,56,0.89\n309,-1,546,461.9,25.4,61.8,0.88\n309,-1,1401.8,434.3,57,137.1,0.115\n309,-1,523.9,453.8,36.6,80.7,0.101\n269,-1,511.4,455,35,110.4,1\n269,-1,682.4,449.5,62.1,191,1\n269,-1,823.9,436.4,132.9,482.9,1\n269,-1,946.6,406.1,170,644.6,1\n269,-1,1347.9,441.1,176.7,399.3,1\n269,-1,1652.1,417.1,162.9,339.5,1\n269,-1,372.2,446.3,43.5,109.9,1\n269,-1,396.4,465,42.9,112.6,1\n269,-1,584.9,460.2,23.9,62.7,0.993\n269,-1,461.7,459.6,30.6,107.2,0.989\n269,-1,655.6,464.5,24.6,67.5,0.978\n269,-1,559.9,462.4,23.7,60.4,0.941\n269,-1,610.6,460.4,24.2,58.6,0.899\n269,-1,783.7,452.6,26.8,75.3,0.659\n269,-1,1305.2,448.1,42.2,101.7,0.066\n386,-1,835.7,472.6,53.2,75.9,1\n386,-1,1080.4,402.6,218.3,603,1\n386,-1,549.3,405.6,136.3,361.1,1\n386,-1,5.7,430.7,201.7,377.9,1\n386,-1,240.3,452,139.7,356.4,1\n386,-1,796.6,476.5,56.5,60.6,1\n386,-1,467.5,453.9,38.9,104.6,0.999\n386,-1,974.5,433.4,131.8,507.6,0.999\n386,-1,359.4,438.6,131.8,300.3,0.998\n386,-1,513.9,459.7,25.4,63.6,0.956\n1,-1,915.1,481.5,94.7,113.5,1\n1,-1,836.7,472.8,53.5,76.2,1\n1,-1,376,446.6,42.7,104.8,1\n1,-1,442.4,448.3,109.1,275.4,1\n1,-1,586.4,445,87.8,265.6,1\n1,-1,1340.1,415.1,166.4,376.9,1\n1,-1,796.5,474.9,54.9,61.6,1\n1,-1,1090.5,481.4,34.8,118.8,1\n1,-1,1055.1,485.2,38.4,107.9,1\n1,-1,1256.8,449.2,34.1,99.5,1\n1,-1,1014.4,431.1,44.4,122.4,1\n1,-1,1099,437.3,42.4,111,1\n1,-1,1463.8,414.5,120.2,353.2,0.094\n469,-1,912.9,482.4,98.6,111.6,1\n469,-1,731.9,434.5,90.5,305.2,1\n469,-1,835.1,406.8,86.6,303.5,1\n469,-1,595,431.2,85.4,280.8,1\n469,-1,1135.6,418.2,149.8,577.5,1\n469,-1,1278.2,392,202.6,689,1\n469,-1,994.4,446.2,37.4,98.9,1\n469,-1,1083.9,475.3,44.7,122,0.999\n469,-1,1047.4,439.8,40.8,110.9,0.998\n469,-1,25.5,389.8,429.8,691.2,0.998\n469,-1,1466.3,418.9,121.2,371.6,0.99\n469,-1,563.7,455.7,29.1,76,0.853\n469,-1,379.6,463.1,42.7,117.8,0.686\n469,-1,709.4,473.7,25.9,70.7,0.511\n522,-1,382,462.5,50.1,116.2,1\n522,-1,952,447.9,112.7,279.6,1\n522,-1,767.8,431.9,85.2,263.3,1\n522,-1,1341.2,425.4,255.1,644.6,1\n522,-1,1573.5,377.5,308.4,703.5,1\n522,-1,682,451.4,40.9,123.6,1\n522,-1,572,459,32.8,81.3,1\n522,-1,1179.6,448.8,35.6,86.5,1\n522,-1,1051.4,441.3,105.3,234.2,1\n522,-1,881.3,409.6,93.1,297.3,0.999\n522,-1,648.2,452.8,30,99.5,0.998\n522,-1,542.3,463.6,28.9,73.5,0.986\n522,-1,720.8,449.9,29.7,89.9,0.982\n522,-1,447.8,462.3,30.2,78.6,0.95\n522,-1,416.6,471.1,45.6,96.9,0.838\n522,-1,836.8,474.4,58.8,88.2,0.82\n522,-1,463.8,460.9,26.8,67.8,0.552\n274,-1,511.5,454.5,34.9,111.8,1\n274,-1,1368.3,438,206.4,414.1,1\n274,-1,825.4,432,139.6,484.2,1\n274,-1,696,445.6,69.4,200.8,1\n274,-1,392.6,465.4,41.4,112.8,1\n274,-1,962.8,400.5,160.5,651.2,1\n274,-1,1610.8,405,109.6,350.1,1\n274,-1,458.1,457.3,32.2,109,0.997\n274,-1,657.4,463.1,28.8,72.6,0.99\n274,-1,582.9,459.4,22.9,61.6,0.988\n274,-1,632.3,460.8,25.7,61.1,0.955\n274,-1,556.3,459.5,23.6,62.2,0.938\n378,-1,835.9,472.7,54.2,77.5,1\n378,-1,1079,411,213.3,597.6,1\n378,-1,519,402,128.1,362.6,1\n378,-1,159.5,443.8,208,386,1\n378,-1,796.6,476.5,55.7,61,1\n378,-1,963.5,425,139.3,508.8,1\n378,-1,410.9,470.1,47.9,106.3,1\n378,-1,2.4,429.2,129.7,387.1,0.998\n378,-1,471.1,451.7,37.8,118.3,0.998\n376,-1,835.1,472.9,54.4,77.8,1\n376,-1,499.6,407.8,133.8,361.5,1\n376,-1,1079,408.6,213.1,603.7,1\n376,-1,796.8,476.3,54.9,61.8,1\n376,-1,410.1,468.5,47.2,108.9,1\n376,-1,156.2,444,193.9,383.4,1\n376,-1,954.8,424.1,143.4,523.6,1\n376,-1,475.1,454.7,32.7,110.3,0.991\n376,-1,624.6,457,31.8,72.6,0.977\n376,-1,377.3,463.3,39.9,121,0.626\n376,-1,7.6,459.9,70.9,350.4,0.148\n230,-1,754.2,419.6,269.9,579.1,1\n230,-1,1120.9,443.4,119.2,347.3,1\n230,-1,372.8,447.8,42.4,107,1\n230,-1,424.3,465.6,46.1,112.7,1\n230,-1,613.8,447.3,53.5,184.9,1\n230,-1,513.9,455.5,34.7,108.8,1\n230,-1,1047.5,486.3,42.3,105.4,0.999\n230,-1,1085.2,486.2,42.2,113.4,0.998\n230,-1,552,459.3,24.5,65.6,0.908\n230,-1,457.9,457.6,35.5,107.1,0.799\n230,-1,662.4,461.1,28.6,80.5,0.691\n230,-1,484.3,452.8,29.3,106.1,0.385\n310,-1,497.6,456,44.9,110,1\n310,-1,1284.1,431.9,139.4,270.3,1\n310,-1,1681.2,429.4,239.8,501.8,1\n310,-1,1021.3,402.4,214.4,618.3,1\n310,-1,793.4,443.1,66.6,211.9,1\n310,-1,894.3,423,138,529.3,1\n310,-1,410.3,468,47.3,106.6,1\n310,-1,657,462.4,26.7,73.1,1\n310,-1,381.6,465,43.7,111.4,0.999\n310,-1,2.2,391,121.8,475.9,0.999\n310,-1,578.2,461.9,23.7,56.8,0.99\n310,-1,1195.1,452,35.4,91.4,0.986\n310,-1,555.7,461.9,23.8,58.3,0.936\n310,-1,621.5,460.7,23,56.4,0.913\n310,-1,843,472.6,49.8,75.6,0.873\n310,-1,538.9,461.9,24.8,64.2,0.867\n310,-1,1408.8,441.7,47.5,117.9,0.325\n476,-1,620.9,436.3,86.3,270.7,1\n476,-1,1336.6,390.4,211.5,690.6,1\n476,-1,751.5,432.5,103.2,304.5,1\n476,-1,1152.8,419.5,171.1,586.7,1\n476,-1,840.8,409.5,85.7,306.2,1\n476,-1,992.5,448.9,37.5,97.3,1\n476,-1,565.5,454.6,33,80.1,0.999\n476,-1,1040.1,439.1,40.1,105.7,0.998\n476,-1,527.1,458.4,32.5,75,0.998\n476,-1,1111.3,435.6,43.3,148.4,0.998\n476,-1,1085.4,466.5,40.9,131.8,0.996\n476,-1,1507.2,414.9,162.4,394,0.985\n476,-1,713.2,467.5,21.9,69.2,0.816\n476,-1,910.6,456,71.2,219.8,0.759\n476,-1,1.5,398.5,265.1,682.5,0.359\n329,-1,1058.2,409.7,194.7,606.6,1\n329,-1,1452.3,442.3,49.7,108.2,1\n329,-1,489.5,453.4,41.8,111.6,1\n329,-1,900.1,424.1,143.6,521.3,1\n329,-1,134.7,407.8,191.1,429.7,1\n329,-1,799,477.9,53.4,60.3,1\n329,-1,410.3,469.1,45.7,105.5,1\n329,-1,380.2,462.6,45.1,114.2,1\n329,-1,658.3,463.8,26.1,72.3,1\n329,-1,1762,398.9,159,463.4,0.984\n329,-1,563.4,460.2,21.8,59.7,0.966\n329,-1,626.6,459.7,24.2,62.1,0.96\n329,-1,582.6,460,21.9,58.6,0.941\n329,-1,852.1,453,67,186.9,0.367\n444,-1,582.6,441.5,117.7,311.3,1\n444,-1,463.5,440.3,113,300.2,1\n444,-1,890.9,368.6,381.4,712.4,1\n444,-1,789.3,405.3,87.9,311.4,1\n444,-1,376.7,465.4,56.1,117.6,0.995\n444,-1,917.6,484.2,95.8,109.5,0.903\n444,-1,717.7,436,103.4,270.7,0.882\n444,-1,421,465.6,33.2,103.7,0.799\n444,-1,1327,433.1,121.4,345.6,0.321\n109,-1,914.1,482.4,96.2,113.2,1\n109,-1,373.9,446.5,43.3,106.4,1\n109,-1,835.1,471.8,53.8,78.1,1\n109,-1,1249.8,447.7,38.9,99.9,1\n109,-1,1088.1,483.3,36.9,120.1,1\n109,-1,762.8,455,83.8,241.8,1\n109,-1,445.9,468.3,44.3,101.2,1\n109,-1,554.7,444.7,129.1,362.6,1\n109,-1,504,465.2,36.9,104.6,1\n109,-1,665.1,438.3,98.4,309.8,1\n109,-1,1005.2,443.1,41.2,107.5,1\n109,-1,1052.8,482.3,40.9,110.6,1\n495,-1,818.2,440.1,137.4,293.2,1\n495,-1,658.1,437.5,118.3,270.9,1\n495,-1,959.1,431.7,99.3,251.2,1\n495,-1,1082.9,448.8,48.5,149.8,1\n495,-1,382.5,462.9,51.9,115.4,1\n495,-1,1409.8,372.7,272.6,708.3,1\n495,-1,568.4,456.3,34.1,82.8,1\n495,-1,1214.6,435.6,225.1,579.8,1\n495,-1,1179.1,449.8,36.3,84.3,1\n495,-1,1641.6,415.8,155.8,424.7,0.999\n495,-1,635,454.5,33.6,93.5,0.999\n495,-1,461,459,26,78.3,0.99\n495,-1,537.5,460.3,27.8,72.4,0.988\n495,-1,1117.3,447.3,36,117.8,0.445\n495,-1,799.1,476.7,45.1,57,0.178\n196,-1,642.9,426.3,168.9,526.1,1\n196,-1,406.2,468.2,51.5,106.6,1\n196,-1,567.6,451.4,62.6,170,1\n196,-1,949.3,449.2,117.8,318.3,1\n196,-1,370.9,445.3,44.6,106.1,1\n196,-1,811.1,429.9,132.9,381.2,1\n196,-1,510,455.4,33.7,110.3,1\n196,-1,1138.2,450.1,42.4,98.8,0.999\n196,-1,1176.7,451,36.9,95.2,0.998\n196,-1,459,467.2,40.6,108.6,0.998\n196,-1,589.8,420.7,23.4,45.3,0.791\n196,-1,1020.2,439.6,88.1,273.9,0.714\n196,-1,1121.7,451.8,35.5,88.5,0.348\n196,-1,549.2,437.8,19.8,45.3,0.312\n196,-1,602.5,411.3,22.6,49.4,0.218\n196,-1,563.8,392.9,38,106.2,0.112\n196,-1,1082.1,476.2,45.5,140.2,0.05\n563,-1,836.7,473.7,53.6,75.9,1\n563,-1,718.9,448.4,39.5,101.4,1\n563,-1,913.1,430.9,90.7,248.7,1\n563,-1,1117,440.4,110.4,275,1\n563,-1,1583,387.1,272.2,693.9,1\n563,-1,797.1,477,55,60.7,1\n563,-1,1003.6,417.4,133.2,287.8,1\n563,-1,381.8,464.1,48.4,113.3,1\n563,-1,416.7,466.9,44.8,104,1\n563,-1,581.9,457.2,39.9,83.9,1\n563,-1,642.7,453.5,36.3,110.6,1\n563,-1,1216,444.3,46.2,108.1,0.999\n563,-1,549.2,460.7,29.7,79.1,0.998\n563,-1,510.2,458.7,23.5,54.1,0.87\n557,-1,717.3,447.6,39.4,102.6,1\n557,-1,836.4,473.7,53.9,76.7,1\n557,-1,1092,445.9,111.5,279.2,1\n557,-1,892.9,437.3,100.7,252.8,1\n557,-1,1564.1,394.9,246.5,686.1,1\n557,-1,646.4,452.3,39.8,115,1\n557,-1,381.8,464,49.3,114.3,1\n557,-1,999.8,413.3,94.4,292.1,1\n557,-1,797.1,476,55.4,61.7,1\n557,-1,580,456.7,38.7,85.2,1\n557,-1,415.8,467.3,45,102.8,1\n557,-1,548.5,460.6,28.6,78.6,0.998\n557,-1,507.9,456.5,23.9,56.3,0.859\n557,-1,1190.2,442.3,48.9,116.3,0.7\n67,-1,912.1,484,98.3,111.7,1\n67,-1,836,472.7,53.8,77.9,1\n67,-1,497,441.9,131.9,324.1,1\n67,-1,419.1,457.7,41.5,85.9,1\n67,-1,374.2,447,43.1,105,1\n67,-1,1260.3,446.6,35.6,101.6,1\n67,-1,1535.8,431.8,51.3,125.2,1\n67,-1,1053.7,480.9,39.4,113.6,1\n67,-1,1004.7,441.3,41.7,113.6,1\n67,-1,1089.3,481.5,35,117.3,1\n67,-1,797,475.1,55.8,63.6,1\n67,-1,620.5,447.6,90.9,283.4,1\n67,-1,1096.5,439,40.5,108.8,0.999\n67,-1,692.8,456,75.3,222.9,0.998\n67,-1,479.7,466.8,31.9,96.7,0.71\n204,-1,406.1,465.5,52.1,108.6,1\n204,-1,669.1,423,174.2,539,1\n204,-1,1188,449.7,36.4,95.7,1\n204,-1,578.6,453.7,64.6,170.1,1\n204,-1,990.7,446.9,94.7,311.3,1\n204,-1,822.9,436.6,160.5,377.8,1\n204,-1,370.7,446.9,45,105.8,1\n204,-1,512.2,456,32.8,109.4,1\n204,-1,1052.9,434.6,92.9,287.4,0.998\n204,-1,1133.9,450.6,37.8,99.6,0.998\n204,-1,457.5,464.5,33.1,110.8,0.995\n204,-1,592.2,419.8,21.8,43.4,0.649\n204,-1,579.5,426.8,21.4,39.3,0.642\n204,-1,658,469.4,23.8,72.4,0.516\n204,-1,533,455.7,26.3,89.2,0.261\n204,-1,551.3,418.4,36.4,93.4,0.184\n48,-1,912.9,483,99.3,111.6,1\n48,-1,835.9,472.8,53.8,77.3,1\n48,-1,477.4,443.6,115.4,312.7,1\n48,-1,1484.2,428.5,57.5,129.4,1\n48,-1,374.6,446.1,43.7,106,1\n48,-1,621.1,441.4,89.9,277.4,1\n48,-1,1260.7,445.8,34.8,103.8,1\n48,-1,1006.8,442.3,41.7,115.1,1\n48,-1,418.3,457.8,44.3,88,1\n48,-1,1055.3,483.8,38.2,112.6,1\n48,-1,1098.1,436.1,41,109.3,1\n48,-1,796.4,475.3,56.5,61.3,1\n48,-1,1092.4,478.2,32.5,119.7,0.999\n48,-1,1740.3,398.7,180.7,474,0.998\n48,-1,581.7,454.6,42,137,0.996\n48,-1,695.2,481.8,51.4,185.5,0.06\n176,-1,561.7,425.3,203.1,480.1,1\n176,-1,409.9,468.2,51.5,105,1\n176,-1,772.2,438.2,115.9,359.9,1\n176,-1,878.5,445.3,121.2,303.9,1\n176,-1,1088,483.9,39.3,115.6,1\n176,-1,1164.9,447.7,42.5,100.7,1\n176,-1,370.9,445.3,44.3,106.5,1\n176,-1,506.6,454.6,38.4,109.7,1\n176,-1,1051.2,482.4,38.6,111.1,0.998\n176,-1,465.8,464.5,37.2,110.7,0.997\n176,-1,1138.4,450.1,29.6,92.1,0.662\n176,-1,948.9,434.6,84.5,273.1,0.521\n176,-1,542,459.1,25.1,68.8,0.341\n176,-1,560.3,458,21.7,58.3,0.06\n503,-1,383,463.7,51.8,115.9,1\n503,-1,868.4,437.3,132,293.3,1\n503,-1,705,432.4,77.5,270.8,1\n503,-1,1504.8,374.2,223.3,706.8,1\n503,-1,1273.8,422.5,185.9,599.7,1\n503,-1,977.7,436.4,106.2,245.7,1\n503,-1,1085.5,449,57.4,150.5,1\n503,-1,636.7,455.8,34.7,87.7,1\n503,-1,1177.8,449.8,36.1,85.6,1\n503,-1,795.9,478.2,59.3,59.7,1\n503,-1,570.5,457.7,32.6,81.1,1\n503,-1,1692.8,406.7,219.7,488.5,0.999\n503,-1,537.7,460.7,30.5,75.3,0.993\n503,-1,459,460,25.8,75.9,0.991\n503,-1,678.9,464.9,31.9,82.9,0.86\n503,-1,833,477.5,50.6,59.4,0.31\n178,-1,564,427,199.8,485.3,1\n178,-1,407.9,468.8,50.9,104.4,1\n178,-1,775.1,441,111,352.8,1\n178,-1,1160.9,447.2,40.8,101.3,1\n178,-1,370.6,444.9,45.6,107.2,1\n178,-1,892.1,445.7,110,297.1,1\n178,-1,1087.1,483.9,39.8,116,1\n178,-1,507.2,454.7,38.7,108,1\n178,-1,465.1,466.1,35.5,110.4,0.998\n178,-1,961.4,437,103.9,266.6,0.997\n178,-1,1053.9,480.8,34.8,114.2,0.974\n178,-1,555.6,458.8,24.8,64.9,0.866\n178,-1,540.3,451.2,29.1,83.6,0.353\n178,-1,569,459.3,27.3,72.3,0.055\n421,-1,851.3,434.5,58.5,170.5,1\n421,-1,699.1,406,121.4,329.4,1\n421,-1,912.7,484.6,99.3,108.2,1\n421,-1,1054,406.1,191.4,611.8,1\n421,-1,298,435.6,183.8,334.1,1\n421,-1,460.3,439.1,143.6,324.9,1\n421,-1,602,433.8,110.3,284.4,1\n421,-1,446.2,458.6,40.3,126.7,0.264\n54,-1,914.2,482.9,96.6,112,1\n54,-1,836.3,473.3,54,76.3,1\n54,-1,477.4,442.6,121.5,316.4,1\n54,-1,1501,431.2,54.7,130.1,1\n54,-1,623.6,448.9,88.3,269.3,1\n54,-1,374.7,445,43.8,107.4,1\n54,-1,1260.3,446.5,35.5,102.1,1\n54,-1,418.4,457.4,42.2,87.4,1\n54,-1,796.6,475.3,56.3,62.6,1\n54,-1,1007.1,444.3,41.6,114.5,1\n54,-1,1053,484.6,39.5,110.8,1\n54,-1,1097.3,435.7,40.8,113.3,1\n54,-1,1091.6,479,33.1,118.7,1\n54,-1,582.7,454.3,41.7,133.9,0.982\n342,-1,835,472.2,53.7,79.2,1\n342,-1,1067.3,408.4,188.4,587.7,1\n342,-1,486.5,453.1,34.3,112.1,1\n342,-1,252,413.1,209.5,416.3,1\n342,-1,905.7,425.9,145.2,520.7,1\n342,-1,1485.1,438.3,55.3,111.2,1\n342,-1,796.1,475.4,56.2,62.3,1\n342,-1,1,447,146.8,331.6,1\n342,-1,659,463.1,26.1,74.4,1\n342,-1,633.4,460.1,24.7,64.8,0.965\n342,-1,581.7,459.7,22.6,58.8,0.928\n342,-1,559.5,460.5,19.7,59,0.916\n342,-1,607.5,456.9,39,63.5,0.738\n342,-1,409.9,471.8,46,114.9,0.61\n342,-1,537.1,458.7,34.7,63,0.416\n308,-1,497.6,454.9,45.1,109.7,1\n308,-1,1294.2,428.6,141.6,272.7,1\n308,-1,1018.9,401.3,206.7,617,1\n308,-1,1674.8,427.6,209.2,489.3,1\n308,-1,787.9,442.8,67,214,1\n308,-1,410.9,468.9,48,106.4,1\n308,-1,894.6,425.7,138.9,521,1\n308,-1,657.7,463.1,26.8,73.3,1\n308,-1,1193.7,447.4,34.1,97,1\n308,-1,381,464.3,44.7,111.6,0.999\n308,-1,835.6,472.9,55.6,76.2,0.996\n308,-1,578.8,461.9,24.6,58.3,0.993\n308,-1,559.5,462.1,24.2,59.1,0.917\n308,-1,617.6,460.5,23,56.3,0.869\n308,-1,14.9,405.3,93.3,461,0.791\n308,-1,520.9,453.9,36.9,85.4,0.068\n283,-1,837,430.1,156.9,496.1,1\n283,-1,1468.1,425.3,141.3,429.6,1\n283,-1,510.1,456.4,34.7,109.4,1\n283,-1,984.2,400.2,157.6,654.6,1\n283,-1,388.5,466.2,43.7,110.8,1\n283,-1,715.9,450,95.3,198.1,1\n283,-1,1339.9,441.5,41.5,108.1,1\n283,-1,658.8,461.5,25.3,75.1,0.999\n283,-1,580.8,460.9,26,60.6,0.997\n283,-1,452.1,460.1,30.4,105.5,0.997\n283,-1,552.9,460.8,26.2,66.7,0.801\n283,-1,598.3,458.9,24.7,58.4,0.796\n283,-1,437.2,465.6,23.9,101.8,0.193\n172,-1,407.7,467.8,53.9,103,1\n172,-1,535.2,428,221.9,475.2,1\n172,-1,1088.3,485.2,37.7,114.1,1\n172,-1,872.3,450.8,124.6,291,1\n172,-1,372,445.6,43.4,105.5,1\n172,-1,761.4,434.4,121.3,358.4,1\n172,-1,1169.7,449.8,42.6,97.2,1\n172,-1,1051.8,481.2,38.6,111.6,0.999\n172,-1,508.3,455.8,35.6,109.8,0.998\n172,-1,467.3,464.5,35,109.3,0.997\n172,-1,1149.9,452.3,33.2,93.5,0.962\n172,-1,491.2,460.1,25.6,109.5,0.339\n368,-1,836.6,471.8,53.9,79.3,1\n368,-1,408.3,411.1,196.8,383.2,1\n368,-1,1075,406.2,209.1,610.2,1\n368,-1,376,462,49.9,115.7,1\n368,-1,797,476.3,56.4,60.6,1\n368,-1,626.3,457.9,29.3,72.9,1\n368,-1,937.5,425.1,144.1,520.4,1\n368,-1,1547.7,436.9,47.2,110.1,1\n368,-1,68.3,441.3,163.3,397.7,0.999\n368,-1,231.7,437.2,126.5,330.4,0.999\n368,-1,594.9,459.4,21.8,56.7,0.939\n368,-1,886.1,456.4,27.6,60.3,0.697\n368,-1,579.4,460.3,22.6,58.9,0.689\n368,-1,650.1,459.1,22.8,67.6,0.07\n62,-1,913.3,483.7,97.2,111.1,1\n62,-1,836.7,471.6,52.7,79.9,1\n62,-1,485.9,444.2,130.1,324.1,1\n62,-1,374.3,446,44.3,106.2,1\n62,-1,1260,446.5,36.1,101.9,1\n62,-1,1523.8,431.3,52.2,125.9,1\n62,-1,1055,484,39.2,109.6,1\n62,-1,1004.4,440.8,41.6,114.9,1\n62,-1,418.1,458.1,42.6,84.5,1\n62,-1,620.3,449.7,91.3,277,1\n62,-1,1089.7,479.1,34.5,117.6,1\n62,-1,796.5,475.1,56.6,63.3,0.999\n62,-1,1096,436.5,41.3,113.3,0.999\n62,-1,687.7,456.4,78.1,223.2,0.996\n419,-1,856.4,436.4,56.5,172.8,1\n419,-1,1051.5,403.3,191.3,605,1\n419,-1,693.5,403.2,121.9,334.5,1\n419,-1,448.4,440.2,158.2,328.7,1\n419,-1,292.8,432.2,172.7,344.9,1\n419,-1,588.8,428.2,97.5,294.5,1\n419,-1,909.6,483.5,103.7,111.1,1\n173,-1,541.9,419.9,219.4,485.8,1\n173,-1,409.3,468.9,51.9,103.2,1\n173,-1,875.8,449.7,122.1,292.8,1\n173,-1,1088.5,484.5,37.1,114.8,1\n173,-1,764.9,432.7,119.2,359.2,1\n173,-1,371.1,445.8,44.2,105.9,1\n173,-1,1169,449.8,41.3,98,1\n173,-1,507.9,454.9,36.5,110.8,0.999\n173,-1,1053.1,481.3,37.7,110.8,0.999\n173,-1,467.4,463.9,34.6,111.5,0.995\n173,-1,1147.9,453.4,33.4,92.8,0.961\n173,-1,490.8,458.3,33.2,112,0.233\n173,-1,552.7,461,22.9,62.5,0.092\n173,-1,947.8,436.4,82.9,242.5,0.064\n150,-1,552.8,434.8,151.5,451.4,1\n150,-1,1202.2,445.7,38.2,102.5,1\n150,-1,401.3,466,62.3,105.5,1\n150,-1,1089,481.7,38.2,118.1,1\n150,-1,1001.6,444,37.9,99.4,1\n150,-1,712.1,436.8,124.5,332.1,1\n150,-1,372.4,446,44.1,106.7,1\n150,-1,832.2,451.4,87.2,279.9,1\n150,-1,1051.9,483.6,39.9,110.4,1\n150,-1,1125.9,454.5,34.3,91.6,0.998\n150,-1,474.6,464.3,39.9,110.7,0.997\n150,-1,503.6,456,36.4,107.2,0.994\n150,-1,887.5,454.1,76.4,222,0.362\n150,-1,526.4,452.7,27.9,90.3,0.132\n480,-1,1350.7,391,249.8,690,1\n480,-1,1175.8,420.8,159.2,589.8,1\n480,-1,632.7,431.6,85.8,273.3,1\n480,-1,771,436.4,95.8,299,1\n480,-1,563.7,454.7,36.2,82,1\n480,-1,1038.8,440.5,38.6,107.2,1\n480,-1,843.8,409.9,80.1,305.1,0.999\n480,-1,870.5,435.1,140,252.9,0.998\n480,-1,1112.7,435.6,40.5,149.7,0.995\n480,-1,1085.9,465.3,39.4,132.9,0.991\n480,-1,747.9,447,44.2,130.5,0.991\n480,-1,991.6,450.7,32.1,97.8,0.969\n480,-1,532.6,460.4,28,72,0.967\n480,-1,1516.4,420.3,201.4,397.8,0.928\n480,-1,1023.4,444.1,28,97.9,0.212\n480,-1,1068.5,456.9,35.7,118.2,0.177\n161,-1,536.2,428.1,165.1,462.6,1\n161,-1,399.3,467.7,63.2,105.9,1\n161,-1,1186.3,446.1,39.1,100.1,1\n161,-1,740.3,435,113.3,339.8,1\n161,-1,1088.1,484.6,38.8,115.6,1\n161,-1,1000,444.4,37.4,99.8,1\n161,-1,371.8,446.6,44,104,1\n161,-1,845,446.5,90.7,292.4,1\n161,-1,469.8,465.3,35.5,111.5,1\n161,-1,1053,481.9,38.8,112.3,1\n161,-1,914.7,443.5,82.9,245.8,1\n161,-1,1134.4,450.7,33.8,94.9,0.994\n379,-1,835.9,472.9,54.3,76.3,1\n379,-1,1081.2,408.3,210.8,599.9,1\n379,-1,159.4,447.7,214.8,378.8,1\n379,-1,525.9,404.2,125.9,364.4,1\n379,-1,963.5,420.6,138.3,516.3,1\n379,-1,796.5,476.5,56.4,61.1,1\n379,-1,1.3,438.3,150.7,373.5,1\n379,-1,411.2,471,45.5,104.8,0.999\n379,-1,469.8,453.3,39,115.1,0.999\n216,-1,594.2,454.7,57.2,168,1\n216,-1,713,412.9,174.1,571.8,1\n216,-1,1028.2,445,164.6,330.6,1\n216,-1,513.5,454.8,34.5,110.4,1\n216,-1,877.6,431.1,132.3,394.7,1\n216,-1,408.2,467.8,51.4,106.5,1\n216,-1,371.4,447.9,44.4,103.4,1\n216,-1,444.8,470.7,41.3,104.3,0.999\n216,-1,1202.1,448,40.6,100.8,0.996\n216,-1,658.5,464.3,27.3,74.4,0.992\n216,-1,554.5,456,24.7,64,0.955\n216,-1,592.8,422.6,19.4,38.7,0.474\n216,-1,576.5,433.4,19.1,39.4,0.185\n216,-1,561.7,453.8,48.5,82.2,0.094\n353,-1,1069.3,393.8,196.6,609.6,1\n353,-1,835.9,471,52.2,78.3,1\n353,-1,914.1,421.8,142.1,519.9,1\n353,-1,86.5,431.4,185.3,345.4,1\n353,-1,365.4,402.9,119.9,408.5,1\n353,-1,796.8,474,56.4,64.9,1\n353,-1,484.3,455,32.4,109.8,1\n353,-1,1518.5,438.8,41.5,108.5,1\n353,-1,659.9,462.6,28,76.1,0.999\n353,-1,635.7,460.8,26.6,67.8,0.972\n353,-1,557.5,458.1,20.5,59.8,0.948\n353,-1,586.6,458.8,22.3,58.2,0.923\n353,-1,884.1,454.6,26.9,68.8,0.726\n353,-1,511.9,456.5,26,74.1,0.602\n388,-1,836.2,471.8,53.4,77,1\n388,-1,552.5,407.9,139.6,355.6,1\n388,-1,1077.9,406.2,221.7,612.2,1\n388,-1,25.6,425.9,186.8,378.6,1\n388,-1,361.6,437.2,164.7,300.2,1\n388,-1,796.6,476.4,56.4,60.5,1\n388,-1,974.9,419.6,130.3,520.8,0.999\n388,-1,269.5,442.5,119.6,363.3,0.999\n388,-1,515.6,462.7,24,64.1,0.961\n388,-1,470.3,458.7,39.4,101.4,0.671\n388,-1,939.3,437.1,63.1,195.7,0.462\n198,-1,406.3,468,51.2,106.4,1\n198,-1,652.7,418.6,169,542.4,1\n198,-1,568.8,451.1,64.2,171.2,1\n198,-1,811.9,432,152,379.5,1\n198,-1,371.7,445.2,44.2,106.6,1\n198,-1,511.2,456.8,34.1,107.6,1\n198,-1,1139.4,449.4,39.4,101.2,1\n198,-1,959.1,443.9,110.8,318.3,1\n198,-1,1031.9,432.9,101.3,283.4,0.999\n198,-1,1177.7,449.2,37.2,98.5,0.999\n198,-1,458.3,466.6,37.6,109.2,0.998\n198,-1,589.5,420,23.3,45,0.811\n198,-1,549.5,437.6,19.6,45.5,0.362\n198,-1,551.5,422.9,37.2,92.5,0.262\n198,-1,603.1,410.5,22.5,49.8,0.182\n375,-1,835.3,473.1,54.5,78.1,1\n375,-1,489.9,405.3,136.6,365.9,1\n375,-1,1077.1,407.9,215.1,603.8,1\n375,-1,951.3,425.9,144.9,514.7,1\n375,-1,148.8,444.2,182.8,381.6,1\n375,-1,410.7,470.6,46.3,106.9,1\n375,-1,796.8,476.7,55.3,60.7,1\n375,-1,625.9,456.3,30.4,72.3,0.996\n375,-1,378.4,462.5,44,119.7,0.969\n375,-1,464,459.9,26.4,84.3,0.824\n375,-1,267.6,441.9,147.7,300.4,0.282\n375,-1,886.3,461.4,25.1,49.8,0.076\n429,-1,913.8,484.4,94.5,109,1\n429,-1,1057.4,400,197.9,669.6,1\n429,-1,375.4,437.9,115.3,312.3,1\n429,-1,727.1,409,119.1,322.2,1\n429,-1,837.1,440.5,55.5,155.8,1\n429,-1,531,441.3,113.1,317.9,1\n429,-1,620.1,433.1,134.5,281,0.999\n429,-1,491.5,476.6,20.8,68.4,0.133\n429,-1,1636.2,367.5,284.8,713.5,0.058\n372,-1,836.3,472.2,53.8,78.1,1\n372,-1,1074.8,409.5,207.9,593.4,1\n372,-1,441.9,409.6,171.5,381.7,1\n372,-1,796.4,475.7,56.6,62.4,1\n372,-1,946.8,426.1,139.6,515.6,1\n372,-1,134.9,442.7,143.2,382.7,1\n372,-1,625.6,455.9,29.8,74.4,1\n372,-1,378.4,462.4,46.5,117.4,0.999\n372,-1,411.7,469.2,43.4,107.4,0.999\n372,-1,239.3,439,168.8,313.3,0.999\n372,-1,1554.4,439.4,47,109.6,0.998\n372,-1,888.3,456.9,26.1,56.7,0.226\n536,-1,661.6,450.2,42.4,119.6,1\n536,-1,1459.6,420.1,222.6,660.9,1\n536,-1,807.1,438,124.5,255,1\n536,-1,716.9,451.8,32.1,94.3,1\n536,-1,1015,444.8,118.2,278.4,1\n536,-1,574.9,454.9,36.1,85.7,1\n536,-1,380.9,462.9,49.9,115.2,1\n536,-1,916.9,407.8,113.7,307.3,1\n536,-1,414.8,467.7,46.7,103.7,0.999\n536,-1,1708.4,370.5,212.6,710.5,0.998\n536,-1,1101.2,444.3,86.8,230.9,0.997\n536,-1,544.1,461.2,28.5,77,0.99\n536,-1,457.1,462.1,29.3,72,0.585\n536,-1,1173.8,449.3,38,86.5,0.311\n18,-1,914.8,483.5,94.8,111.5,1\n18,-1,836.7,472.3,53.1,77.1,1\n18,-1,1457.9,417.6,220.2,403.6,1\n18,-1,447,442.9,125,288.8,1\n18,-1,587.1,441.1,90.3,274.8,1\n18,-1,1409.6,435.9,55.1,132.1,1\n18,-1,1257.3,447,34.8,101.7,1\n18,-1,374.5,446.3,43.4,105.9,1\n18,-1,1012.8,437.3,42.7,115.5,1\n18,-1,1090.3,483.7,34.2,118,1\n18,-1,795.6,475.6,56.7,61.2,1\n18,-1,1099.8,438.6,39.6,109.2,0.999\n18,-1,417.6,458.8,41.4,86,0.999\n18,-1,1055.7,485,37.9,110.9,0.998\n18,-1,664,472.5,51.1,171.1,0.058\n97,-1,913.3,484,97.4,111.5,1\n97,-1,836.1,472.3,53,78.1,1\n97,-1,373.1,445.9,44.7,105.9,1\n97,-1,1258.5,445.7,38,102.6,1\n97,-1,455.2,468,44,105.5,1\n97,-1,747.9,455.5,79.9,227.6,1\n97,-1,1088.9,484.3,35.9,116,1\n97,-1,548.7,443.9,121.4,354.7,1\n97,-1,1004.7,442.9,41.3,107.7,1\n97,-1,1051.8,481.6,41,112.7,1\n97,-1,644.3,441.8,100.5,303,1\n562,-1,837.1,473.4,54,76.6,1\n562,-1,718.5,448.3,38.8,101,1\n562,-1,1581,385.8,267.3,695.2,1\n562,-1,1108.7,441.3,110.2,276,1\n562,-1,906.4,433.4,95.7,252.7,1\n562,-1,797,477.2,55.2,59.6,1\n562,-1,416.2,467.4,45,103.7,1\n562,-1,382.1,464.2,48.8,114.4,1\n562,-1,1000.5,416.2,133.4,289,1\n562,-1,644.1,454.7,35.1,110,1\n562,-1,581,457.6,39.2,83.5,1\n562,-1,1212.4,443.7,45.4,109.5,0.999\n562,-1,548.9,461.3,29.9,79.9,0.998\n562,-1,505.6,458,23.8,55.9,0.897\n562,-1,520.1,458.4,22.7,55.3,0.874\n577,-1,836.4,472.3,53.4,78.1,1\n577,-1,721.3,446.7,41.9,107.7,1\n577,-1,381.7,464.9,48.7,113,1\n577,-1,1165.3,441,123.9,275.5,1\n577,-1,962.3,432,109.8,245.9,1\n577,-1,797.7,477.1,55.3,60,1\n577,-1,1047.6,415.2,106.7,283.2,1\n577,-1,416.8,470.5,41.2,101.4,1\n577,-1,553.8,461.3,31.3,82.6,0.999\n577,-1,667.1,452.6,37.9,104.8,0.999\n577,-1,1674.7,402.3,246.3,678.7,0.998\n577,-1,635.4,452.4,38.3,108.6,0.998\n577,-1,583.8,459.4,37.4,83.3,0.98\n295,-1,755.8,442.2,66.8,204.5,1\n295,-1,508.6,455.5,35.4,109.2,1\n295,-1,1522.5,421,241.8,454.5,1\n295,-1,1003.6,406.2,158.3,612.1,1\n295,-1,1160.9,443.5,46.9,112.5,1\n295,-1,861.2,430.6,164.1,497.5,1\n295,-1,409.9,470.9,49.1,103.8,1\n295,-1,659.7,460.1,25.9,74.5,1\n295,-1,1360.9,439.9,54.1,111.4,0.999\n295,-1,382.7,463.2,44.7,111.5,0.999\n295,-1,1397.3,426.4,154.6,284.4,0.999\n295,-1,576.6,462.6,26.1,59.2,0.988\n295,-1,553,461.6,26.2,62.8,0.907\n295,-1,445.8,460.2,31.2,97.7,0.885\n295,-1,596.3,460,23.4,56.2,0.839\n295,-1,826.2,480.6,52.4,62.3,0.501\n295,-1,475.4,457.7,33.3,94.6,0.068\n255,-1,653.6,448,63,189.2,1\n255,-1,1227.1,436.4,203.5,380.8,1\n255,-1,411.9,464,40.8,112.7,1\n255,-1,923.8,413.7,162.5,630.2,1\n255,-1,804.1,446.5,133.3,440.9,1\n255,-1,371.7,446.1,44.6,106.8,1\n255,-1,514,452.2,32.6,112.8,1\n255,-1,588.8,458.5,23.9,65.3,0.997\n255,-1,470.6,461,31.6,103.8,0.994\n255,-1,767.9,452.9,24.5,71.5,0.987\n255,-1,1809,405,112,368.5,0.986\n255,-1,548.3,460.1,24.2,63.6,0.892\n255,-1,606,459,23.3,61.4,0.817\n255,-1,620.1,461.2,24.5,60.6,0.779\n255,-1,495,457.6,21.7,105.2,0.409\n255,-1,1106.1,447.5,44.3,106,0.147\n453,-1,915.4,483.4,97.5,110.5,1\n453,-1,1148,399.1,263,681.8,1\n453,-1,379.2,463.8,51.9,115,1\n453,-1,995.9,446.7,37.7,101.4,1\n453,-1,579.3,361.5,365.6,719.5,0.999\n453,-1,412.7,467.8,45.4,104.2,0.997\n453,-1,512.3,429.3,130.6,309.8,0.969\n453,-1,476.2,462.3,28.2,78.8,0.962\n453,-1,1364.4,433.9,112.6,336.4,0.944\n453,-1,459.5,465.1,25.4,78.7,0.774\n453,-1,1061.8,436.5,160.4,527.1,0.705\n453,-1,1032.2,438.6,25.2,85.9,0.301\n193,-1,634.7,417.5,170.9,533.4,1\n193,-1,942.1,448.3,114.1,311.3,1\n193,-1,406.4,468.5,51.2,107,1\n193,-1,568.4,452.3,58.9,164.6,1\n193,-1,804.9,436.5,114.9,359.2,1\n193,-1,370.8,444.9,44.7,106.3,1\n193,-1,509,455.2,35,110.4,1\n193,-1,458.1,468.2,42.1,109.3,0.999\n193,-1,1142.8,449.7,42.2,100.1,0.998\n193,-1,1088,483.4,39.7,111.2,0.992\n193,-1,1175.1,450.8,36.2,94.8,0.985\n193,-1,1099.5,438.8,42.4,102.5,0.978\n193,-1,589.7,422.5,23.4,45.2,0.685\n193,-1,550.4,433.3,19.9,44.9,0.16\n193,-1,603.7,414,22.3,47.8,0.078\n193,-1,562.2,394.1,37.1,105.2,0.058\n515,-1,726.6,434.5,115.6,267.4,1\n515,-1,382.6,463.8,51,115.7,1\n515,-1,836.4,472.2,54.1,78.9,1\n515,-1,913.2,444.8,143.1,280,1\n515,-1,1546.9,376.5,323.3,704.5,1\n515,-1,1042.5,442.6,102.8,238.7,1\n515,-1,1178.5,448.1,36.2,89.1,1\n515,-1,689.2,448.3,42.9,127.9,1\n515,-1,1328.7,424.2,244,646.5,1\n515,-1,572.2,455.5,32.7,84.3,1\n515,-1,641.8,454.6,34.3,92.7,1\n515,-1,539,461.8,29.3,74.5,0.993\n515,-1,458.6,460.1,26.1,73.7,0.983\n515,-1,1787.3,373,133.7,549.8,0.479\n515,-1,413,471.4,48.3,96.7,0.423\n526,-1,790.9,433.3,86.9,264,1\n526,-1,980,442,105.6,281.6,1\n526,-1,381.9,461.6,49.5,116.7,1\n526,-1,895.6,406.9,89.2,305.1,1\n526,-1,573.1,456.2,33.5,85.6,1\n526,-1,675.6,451.5,45.2,121,1\n526,-1,1067,438.8,102.6,239.2,1\n526,-1,1394,421.5,216.9,639.4,1\n526,-1,1178.6,447.1,37.1,90.7,1\n526,-1,1580.4,369.2,339.1,711.8,1\n526,-1,719.6,448.7,32.3,92.1,0.998\n526,-1,416.5,467.8,45.6,104,0.998\n526,-1,542.4,461.1,29.3,76.7,0.987\n526,-1,650.2,454.7,31.4,91.4,0.962\n526,-1,460.3,460.6,28.4,70.6,0.923\n526,-1,567,432.5,19.9,38.1,0.076\n474,-1,1327.4,383.5,193,697.5,1\n474,-1,1149.7,415.3,156.5,595.6,1\n474,-1,745.3,439.4,99.9,289,1\n474,-1,617.2,431.5,77.1,278.5,1\n474,-1,836.7,411.4,86,296.7,1\n474,-1,911,489.9,100.9,107.9,0.999\n474,-1,1044.6,442.6,40.6,108.7,0.999\n474,-1,562.8,455.5,32.3,78.4,0.999\n474,-1,1084.6,470.8,42.4,127.5,0.998\n474,-1,992.2,447,38.1,100.2,0.995\n474,-1,1111.1,440.2,42.6,140.9,0.993\n474,-1,1502.4,417.6,127.5,386.4,0.992\n474,-1,717,471.4,20.9,65.6,0.915\n474,-1,542.1,458.2,26.9,70.6,0.85\n474,-1,1,420,303.9,661,0.812\n474,-1,520.7,457.8,27.7,72,0.208\n474,-1,372.5,459,50.2,100.5,0.106\n229,-1,1115.5,444.2,115.8,345.8,1\n229,-1,747,416.9,271.8,584.4,1\n229,-1,372.3,447.9,42.6,106.9,1\n229,-1,612.2,451.9,51.9,180.2,1\n229,-1,426.2,466.1,46.1,111.1,1\n229,-1,513.6,454.7,34.7,109.5,1\n229,-1,1049.6,487.1,41.3,106,0.998\n229,-1,1085.9,484.3,40.3,114.9,0.99\n229,-1,551.2,456.7,24.8,64.4,0.917\n229,-1,658.5,464.6,30.8,80.6,0.891\n229,-1,534.3,458.9,26.6,74.7,0.737\n229,-1,454.1,458.3,37.7,108.9,0.719\n229,-1,481.6,452.6,30.5,106.9,0.452\n56,-1,914.6,482.9,96.6,112.4,1\n56,-1,836.5,472.6,53.7,77.3,1\n56,-1,477.3,442.6,127.2,320,1\n56,-1,374.9,445.1,43.5,107.3,1\n56,-1,622,446.2,90.8,276.1,1\n56,-1,1260.8,446.2,35,102.6,1\n56,-1,1507.3,433,54.9,125.6,1\n56,-1,418.5,457.4,42.2,87.8,1\n56,-1,1053.6,484.6,39.2,108.8,1\n56,-1,796.7,475.8,57.2,61.7,1\n56,-1,1097.4,435.4,40.6,113.4,1\n56,-1,1006.9,442.9,41.4,115.6,1\n56,-1,1091.2,482.6,34.2,114.8,0.999\n56,-1,585.2,456.2,37,135.5,0.83\n56,-1,695.4,462.2,60.4,204,0.16\n205,-1,406.5,465.6,51.5,107.9,1\n205,-1,1189.1,449.3,36,96.1,1\n205,-1,578.7,454.1,63.1,168.4,1\n205,-1,671.9,424.2,177.2,545.4,1\n205,-1,828.9,436.2,156.8,378.8,1\n205,-1,370.9,447.2,44.9,105.1,1\n205,-1,995.7,446.6,101.4,314.9,1\n205,-1,511.1,456.4,32.9,108.6,1\n205,-1,1132,451,37,97.2,0.996\n205,-1,456.3,464.8,33.4,110.6,0.995\n205,-1,1058.1,436.2,89,281.8,0.991\n205,-1,657.3,466.7,28.4,74.1,0.951\n205,-1,592.2,418.3,20.4,41.3,0.409\n205,-1,533,454.8,25.8,86.5,0.398\n205,-1,578.7,425.2,20.4,38.2,0.373\n205,-1,563.2,458.5,27.5,68,0.339\n205,-1,635.6,455.3,31.7,98.2,0.103\n84,-1,913.7,482.4,96.6,112.8,1\n84,-1,835.7,472,53.8,78.4,1\n84,-1,374.1,446.7,44.3,105.1,1\n84,-1,1260.8,446.9,35.9,101.5,1\n84,-1,716.8,459.9,92.3,217.5,1\n84,-1,1088.3,485.5,36.2,116.5,1\n84,-1,1004.7,443,42.2,110.4,1\n84,-1,465.6,466.7,38.8,106.8,1\n84,-1,541,441.9,108.2,335.9,1\n84,-1,1052.4,481.5,40,112,1\n84,-1,624.6,445.2,96.5,289.8,0.999\n84,-1,421.7,458.2,39.4,85.6,0.998\n84,-1,504.3,462.7,29.1,95.3,0.713\n84,-1,1096.9,445.8,38.9,108.8,0.638\n84,-1,521.2,462.3,31,93,0.088\n455,-1,915.2,484,97.1,110.6,1\n455,-1,378.1,463,51.2,115.7,1\n455,-1,1154.3,398.8,269.9,682.2,1\n455,-1,994.8,445.1,37.5,101.9,1\n455,-1,497,372.4,394.7,708.6,0.999\n455,-1,414.8,467.8,41.5,104,0.987\n455,-1,1378.1,429.4,116.3,347.6,0.984\n455,-1,812.9,400.1,86.7,328.2,0.844\n455,-1,1039.8,441.9,27.5,82.5,0.498\n455,-1,453.7,464.1,27.3,85.3,0.435\n455,-1,477.8,460.5,28.1,85.4,0.343\n455,-1,1060.4,445.3,29.6,88.7,0.236\n455,-1,1075.1,421.1,160.7,547,0.092\n99,-1,913.6,483.7,96.6,111.2,1\n99,-1,1257.2,445.2,38.8,103.6,1\n99,-1,373.4,445.4,44.1,106.2,1\n99,-1,834,473,55.3,76.6,1\n99,-1,453.3,467.4,44.8,107.1,1\n99,-1,751.5,454.3,83.6,231.4,1\n99,-1,547.6,440.6,119.9,359.6,1\n99,-1,1088.5,484.8,35.9,116.5,1\n99,-1,643.9,442,100.1,301.2,1\n99,-1,1004.3,443.7,41.8,107.6,1\n99,-1,1051.9,481.3,41.4,113,1\n99,-1,512,465.5,30.3,104.9,0.051\n350,-1,1071.5,405,193.9,610.3,1\n350,-1,836.4,472.6,53.4,76.1,1\n350,-1,908.7,420.4,145.8,520,1\n350,-1,485.2,452.9,33.3,114.3,1\n350,-1,327.4,396.3,144.7,408.3,1\n350,-1,75.8,442.2,152.6,339.4,1\n350,-1,796.9,475.5,57.4,61.9,1\n350,-1,1509.7,437.2,41.5,110.3,1\n350,-1,660,462.7,26.8,73.7,1\n350,-1,636.1,461.8,24.8,64.5,0.962\n350,-1,557.3,459.1,20,59,0.942\n350,-1,578.8,459.1,22.7,58.4,0.922\n350,-1,607.3,457.8,42.3,63,0.665\n350,-1,875.3,458.7,30.1,67.2,0.118\n227,-1,739.9,411.5,262.4,588,1\n227,-1,372.4,447.4,43.1,107.1,1\n227,-1,608.7,452,53.4,181,1\n227,-1,426.2,465.1,45.6,113.3,1\n227,-1,1110.2,442.6,102.7,342.7,1\n227,-1,514,453.7,34.6,110.6,1\n227,-1,1052.3,486.9,41.3,105,0.999\n227,-1,551.4,455.8,24.4,64.1,0.93\n227,-1,658.1,465.4,27.7,74.3,0.925\n227,-1,532.7,458.2,27.2,77.9,0.726\n227,-1,1076.6,489.2,34.5,103.8,0.624\n227,-1,891.1,431.3,142.4,423.4,0.54\n227,-1,481,451.8,31,105.7,0.326\n571,-1,836.2,472.3,52.7,76.5,1\n571,-1,1149.7,442,119.5,277,1\n571,-1,720,447.8,41,102.6,1\n571,-1,1653.9,404.1,254.8,676.9,1\n571,-1,382.2,464.2,49,115.1,1\n571,-1,797.2,476.6,55.1,60.3,1\n571,-1,1020.2,412.2,121.4,294.8,1\n571,-1,416.5,467,43.4,104.5,1\n571,-1,551.9,459,30,82.9,0.999\n571,-1,955,430.2,86.6,257.3,0.999\n571,-1,640.6,451.7,36.6,109.8,0.998\n571,-1,581.9,457.8,40,83.8,0.997\n571,-1,666.6,450.9,37.2,103.5,0.996\n571,-1,517.8,458.8,20.4,53.3,0.167\n571,-1,498.3,461.9,22,56.2,0.062\n34,-1,914,484,96.1,111.4,1\n34,-1,835.4,472.3,54.4,77.7,1\n34,-1,474.7,447.3,116.2,296.3,1\n34,-1,375.9,446.9,42.2,105.6,1\n34,-1,606.1,444.5,88.7,275.1,1\n34,-1,418.9,457.7,41.6,87.1,1\n34,-1,1619,392.6,207.8,459.7,1\n34,-1,1257.1,448.4,35.3,101.2,1\n34,-1,795.9,475.8,56.7,61.9,1\n34,-1,1447.9,430.3,64.3,130.9,1\n34,-1,1089.9,481.8,34.1,119.3,1\n34,-1,1009.8,440,43,119.7,1\n34,-1,1055,484.1,38.6,110.7,1\n34,-1,1098.1,439.4,39.5,108.4,0.999\n202,-1,666.2,428.4,168.8,527.5,1\n202,-1,405.7,466.4,50.9,107.4,1\n202,-1,1186.4,446.7,36.1,99.3,1\n202,-1,820.3,439.3,159.9,369.6,1\n202,-1,370.5,446.3,46,106.4,1\n202,-1,982.9,447.5,98.1,319.1,1\n202,-1,576.1,452.3,64.2,169.6,1\n202,-1,510.6,456.2,35.2,109.7,1\n202,-1,1137.3,449.9,38,103,1\n202,-1,1042.1,433.4,106.8,286.8,0.998\n202,-1,456.9,465.6,36,109.3,0.997\n202,-1,590.8,422.4,22.9,43.7,0.771\n202,-1,554.6,421,35.8,89,0.197\n202,-1,530.8,455.5,27.2,94.7,0.177\n202,-1,605.1,413.1,21.9,47.5,0.153\n202,-1,1173.5,448.8,28,95.8,0.063\n138,-1,912.5,483.9,98.5,110.9,1\n138,-1,1216.8,444.8,41.2,103.8,1\n138,-1,406.7,467.6,64.2,103.8,1\n138,-1,571,446.5,148.8,406.7,1\n138,-1,1088.1,484.7,38.1,115.7,1\n138,-1,810.6,449.9,87,266.2,1\n138,-1,373.5,445.2,42.7,107,1\n138,-1,1002.3,443.5,38.8,102.9,1\n138,-1,485.4,466.9,39.8,106.9,1\n138,-1,692.4,434.2,104.2,330.2,1\n138,-1,1053.5,482.3,37.7,110.5,0.999\n138,-1,531.5,453.1,28.1,75.7,0.97\n138,-1,1103.8,460.3,37,93.1,0.355\n235,-1,785.5,412.4,248.7,596.3,1\n235,-1,1131.1,445,145.3,352.2,1\n235,-1,370.5,447.1,43.9,106.2,1\n235,-1,617.6,446.3,61.2,187.1,1\n235,-1,421.4,464.7,41.5,110.9,1\n235,-1,514.3,453.5,33.5,111.3,1\n235,-1,1086.6,482.2,40.9,116.5,1\n235,-1,1047.6,484,40.9,111.8,0.994\n235,-1,470.2,453.9,29.7,106.7,0.955\n235,-1,548.3,457.4,25.1,64.3,0.921\n235,-1,597.1,465.2,29.3,65.3,0.496\n235,-1,497.9,453,27,109.9,0.361\n231,-1,372.3,447.7,42.7,106.1,1\n231,-1,757,420.2,275,579.8,1\n231,-1,1122.9,443.2,123.9,347.5,1\n231,-1,423.9,466,46.1,111.6,1\n231,-1,615.2,449.8,53.2,184.3,1\n231,-1,514.2,455.3,34.6,109.9,1\n231,-1,1084.6,488.2,42.6,112.1,1\n231,-1,1048.6,482.5,41.2,111.1,0.997\n231,-1,555.4,458.2,23.9,65.1,0.917\n231,-1,539.8,459.4,25.4,70.8,0.761\n231,-1,453,459,37.3,107.5,0.68\n231,-1,659.3,462.1,28.4,81.4,0.608\n231,-1,481.3,452.3,29.7,105.7,0.388\n231,-1,596.9,449.8,32.4,83.9,0.079\n530,-1,797.8,433.9,117.8,264,1\n530,-1,669.2,453.8,42,117.2,1\n530,-1,382,463.2,49,115.4,1\n530,-1,1437.5,420.5,196.6,656.9,1\n530,-1,997.4,436.1,108.3,291.8,1\n530,-1,573.7,454.6,34.6,87.3,1\n530,-1,715.4,450.8,33.1,93.6,1\n530,-1,1087.8,430.5,98,240.7,1\n530,-1,910.8,401.9,83,308.4,1\n530,-1,1179.5,449,35.6,88,0.999\n530,-1,1625.1,344.3,295.9,736.7,0.999\n530,-1,415.5,468,45.4,103,0.999\n530,-1,544.7,461.3,28.7,76.6,0.98\n530,-1,461,461.9,27.6,68,0.812\n530,-1,569.6,433.2,21.1,38.8,0.107\n530,-1,693.5,452.1,30.7,107.4,0.082\n493,-1,813.3,440.1,135.7,289.7,1\n493,-1,654.3,434.1,117,272.9,1\n493,-1,1396.2,384.7,269.4,696.3,1\n493,-1,952.2,434.2,96.6,242.8,1\n493,-1,1208.4,429.5,214.8,595.9,1\n493,-1,568.2,457.4,35.4,81.1,1\n493,-1,380.6,463.4,54.2,117.7,1\n493,-1,1180.9,450.7,35.8,84.2,0.999\n493,-1,1632.9,401.1,149.7,458.6,0.999\n493,-1,1084.2,450.8,42.8,147.9,0.999\n493,-1,1113.2,447.6,37.7,141,0.996\n493,-1,632.2,456.5,34.5,86.1,0.994\n493,-1,460.8,459.7,25.3,81.1,0.987\n493,-1,540,461.3,27.3,71.5,0.981\n493,-1,1039,447.2,32.3,121.4,0.417\n328,-1,1449.6,441.3,51,110.3,1\n328,-1,490.9,454,41.6,111.6,1\n328,-1,1057.6,402.8,189.5,611,1\n328,-1,116.8,400.8,211,443.5,1\n328,-1,900.3,422.1,142.5,524.7,1\n328,-1,410.5,468.8,45.9,105.9,1\n328,-1,799,477.8,54.8,59.5,1\n328,-1,380.8,462.8,44.7,114,1\n328,-1,658.6,463.7,26,72,1\n328,-1,1754,402.6,167,450.6,0.997\n328,-1,841.7,449.4,81.7,212.8,0.996\n328,-1,560,459.9,22.1,60,0.966\n328,-1,625.8,459.5,24.1,61.9,0.958\n328,-1,582.5,459.5,21.8,58.4,0.929\n70,-1,912.8,483.4,97.7,111.7,1\n70,-1,836.1,471.9,53.9,77.5,1\n70,-1,374.3,447.4,43.5,105.4,1\n70,-1,419.3,458.2,42.6,85.8,1\n70,-1,1261,447.4,34.9,100.8,1\n70,-1,505.7,446,128.3,317.9,1\n70,-1,1543.6,431.1,52,126.2,1\n70,-1,1004.4,442.8,42.1,110.6,1\n70,-1,1088.6,482.7,35.4,117.5,1\n70,-1,615.4,437.3,98,296.6,1\n70,-1,1053.2,481.2,39.5,114.1,1\n70,-1,795.1,475.7,57.8,62.5,0.999\n70,-1,696.6,455.7,74.9,221.2,0.999\n70,-1,1095.9,442.6,39.3,108.5,0.998\n70,-1,474.6,465,34.8,103.9,0.998\n240,-1,816.3,417.5,223.7,591.1,1\n240,-1,626.8,448.6,75.8,183.3,1\n240,-1,369.9,447.8,44.7,104,1\n240,-1,419,463.9,39,110.7,1\n240,-1,1157.8,439,132.6,362.3,1\n240,-1,513.4,453.1,33.2,111.3,1\n240,-1,1085.2,483.4,42.2,115.7,1\n240,-1,1118.2,446.6,39.7,101.8,0.997\n240,-1,587.6,457.8,21.7,66.6,0.991\n240,-1,474.3,455.9,32.3,107,0.985\n240,-1,550.3,457.6,25.6,64.1,0.928\n240,-1,1053.2,488.4,36.8,102.9,0.917\n240,-1,599,460.9,25.9,66.9,0.351\n240,-1,442.3,460.7,42.9,104.4,0.256\n60,-1,913.3,484.5,97.8,110.2,1\n60,-1,836.4,473.3,53.8,76.9,1\n60,-1,482.7,443.7,128.7,319.8,1\n60,-1,374.5,445,43.7,107.1,1\n60,-1,1261,446.2,35.3,103.1,1\n60,-1,622.3,447.2,91.2,279.5,1\n60,-1,418.6,457.3,42.6,85.8,1\n60,-1,1055.2,484,39.2,109.4,1\n60,-1,1518.8,433.4,53.4,123.2,1\n60,-1,1005.6,441.9,40.7,114.8,1\n60,-1,1097.2,436.1,42.4,112.6,1\n60,-1,797.6,475.2,56.3,63.1,1\n60,-1,1090.1,481.7,34.9,116.3,0.998\n60,-1,688.3,456.2,75.6,219.8,0.993\n166,-1,537,423.6,194.3,476.4,1\n166,-1,403.5,466.8,58.8,105.1,1\n166,-1,1179.8,447,40.7,101,1\n166,-1,753.5,441.8,113.6,338.3,1\n166,-1,857.1,449.7,115.3,287.2,1\n166,-1,372.4,446,42.8,104.9,1\n166,-1,1087.9,484.7,39.2,115.9,1\n166,-1,1000.3,443.4,38.1,103.7,1\n166,-1,470.3,466.8,34.8,107,1\n166,-1,1051.1,482.8,40.2,111.4,1\n166,-1,1142.5,453.6,32.2,91.1,0.991\n166,-1,507.7,456.5,27.8,87.5,0.756\n270,-1,511.6,454.7,34.9,110.8,1\n270,-1,1355.2,438.2,183.7,406.7,1\n270,-1,686.6,448.8,61,191.5,1\n270,-1,1643.2,413.3,152,339.7,1\n270,-1,823.9,432.9,131.2,482.3,1\n270,-1,946.9,401.6,170.2,646.3,1\n270,-1,373.4,447,42.8,111,1\n270,-1,392.7,464,42.8,113,0.999\n270,-1,461.9,460.5,30.2,106.6,0.994\n270,-1,585.3,459.6,23.8,62.4,0.994\n270,-1,653.8,463.6,24,69.9,0.989\n270,-1,559.5,461.9,23.6,60.4,0.941\n270,-1,618,461,24.3,59,0.899\n270,-1,782.4,454.4,25.7,73.3,0.173\n534,-1,664.6,451.1,41.2,119.4,1\n534,-1,803.2,437.6,126.2,254.6,1\n534,-1,1453.3,427.5,214.8,652.7,1\n534,-1,381.3,462.8,50.5,116,1\n534,-1,1009.7,441.2,119.7,285.2,1\n534,-1,717.9,452.9,32.1,93.7,1\n534,-1,920.1,415.6,98.1,298.5,1\n534,-1,574.9,454.6,35.6,86.5,0.999\n534,-1,415.1,467.7,46,103.1,0.999\n534,-1,1681.9,367.1,239.1,713.9,0.996\n534,-1,1095.4,435.6,90.2,235,0.994\n534,-1,543.7,461.4,30,77.2,0.989\n534,-1,1177.1,445,37,88.4,0.965\n534,-1,460.1,462.1,27.9,68.8,0.552\n534,-1,569,433.5,20.7,38.4,0.056\n454,-1,915,483.1,98.3,111,1\n454,-1,1149.8,397.9,270,683.1,1\n454,-1,378.2,463.5,51.9,115.7,1\n454,-1,995.5,445,37.3,101.9,1\n454,-1,542.9,363.2,381.6,717.8,0.998\n454,-1,413.9,468.8,43.7,102.7,0.992\n454,-1,1371.2,431.8,115,347,0.977\n454,-1,478.4,458.7,28.3,84.3,0.965\n454,-1,462.6,464.1,25.5,80.1,0.748\n454,-1,1037.5,440.2,26.2,83.1,0.491\n454,-1,1070.6,428.5,156.3,530.7,0.378\n500,-1,849.8,433.8,131,298,1\n500,-1,381.5,463.2,53.8,118,1\n500,-1,689.6,432.3,89.1,276.1,1\n500,-1,1467.6,374.6,241.5,706.4,1\n500,-1,966.5,434.6,116.4,248.6,1\n500,-1,1081.9,444,56.5,157,1\n500,-1,569.9,457.4,32.9,82,1\n500,-1,1227,435.5,221.2,581.8,1\n500,-1,635.8,454.3,33.7,90.2,1\n500,-1,796.9,476.5,57.4,61.1,1\n500,-1,1178.4,450.1,35.9,85.2,1\n500,-1,1675.5,402.9,209.8,483.1,0.999\n500,-1,536.6,460.1,30.4,75.5,0.995\n500,-1,460.2,459.8,25.9,76,0.994\n282,-1,828.6,425.6,159.5,495.3,1\n282,-1,510.2,456.2,34.5,109.2,1\n282,-1,1457,425.3,147.1,433.6,1\n282,-1,388,466.1,44.5,110.5,1\n282,-1,984.9,401,155.1,654.6,1\n282,-1,716.2,451.8,92,196.5,1\n282,-1,1336.7,441.2,42.2,107.3,1\n282,-1,658.8,461.2,25.9,75.7,0.999\n282,-1,451.8,461.4,30.3,105.3,0.998\n282,-1,579.2,461.3,25.8,61,0.985\n282,-1,549.6,460,26.5,68.5,0.766\n282,-1,604.4,459.2,24.3,57.6,0.733\n282,-1,1527.9,421.6,148.9,343.1,0.603\n29,-1,914,484.7,96,111.3,1\n29,-1,836,473.4,53.8,75.7,1\n29,-1,1429.9,430.6,67.3,130.5,1\n29,-1,1555,397.7,186.9,437.7,1\n29,-1,376.1,447,42.3,105.5,1\n29,-1,596.6,442,90.6,270.5,1\n29,-1,469.2,444.7,120.9,295.2,1\n29,-1,418.4,458.5,43.2,89.2,1\n29,-1,795.5,475.1,56.8,62.7,1\n29,-1,1011.6,437.5,43.7,118.4,1\n29,-1,1256.4,448.1,34.7,100,1\n29,-1,1090.7,479.3,33.8,120.9,1\n29,-1,1055,485.2,38.6,108.9,1\n29,-1,1098.9,439.1,40.4,107.9,1\n29,-1,1688.1,442.5,168.3,357.6,0.187\n233,-1,767.5,411.2,269.7,594.9,1\n233,-1,371.6,447.3,43.8,106.9,1\n233,-1,1122.9,444.3,142.8,351.1,1\n233,-1,615.8,447.8,56.6,184,1\n233,-1,514.8,455.1,33.9,110.3,1\n233,-1,422.2,465.8,45.3,110.6,1\n233,-1,1086.1,486.6,40.9,110.8,1\n233,-1,1047.8,483,41.9,110.9,0.997\n233,-1,548,459,25.5,65,0.919\n233,-1,459.7,458.5,33.2,105.5,0.845\n233,-1,486.8,454.2,28.3,105.2,0.455\n233,-1,598.3,464.2,31.2,72.5,0.156\n519,-1,749.5,434.5,96.7,263.4,1\n519,-1,382.9,463.9,50.7,115.6,1\n519,-1,925.5,439.5,136.7,288.1,1\n519,-1,835.7,471.9,52.7,79.3,1\n519,-1,1323.3,430.9,261.6,616.6,1\n519,-1,1561.3,372.8,307.1,708.2,1\n519,-1,572.2,459.2,32.8,81.2,1\n519,-1,1178.7,447.9,36.5,88.4,1\n519,-1,688.1,452.3,39.7,122.7,1\n519,-1,1051.4,441.8,100.7,237,1\n519,-1,647.1,453.3,31.6,97.1,0.999\n519,-1,540.4,462.8,28.9,73.9,0.993\n519,-1,456.2,460,26.8,75.6,0.975\n519,-1,413.1,471.5,47.5,97.6,0.541\n519,-1,896.7,418.6,74,291.5,0.085\n519,-1,729.2,452.6,35.7,99.9,0.063\n461,-1,911.6,484.6,98.9,109.3,1\n461,-1,825.8,408.2,90.4,302.4,1\n461,-1,1173.2,388.7,294.6,692.3,1\n461,-1,665.1,434.5,133.3,306.8,1\n461,-1,1052,439.5,37.6,112.7,1\n461,-1,996,446,36.6,102.7,1\n461,-1,1396.9,430.9,165.4,362.9,0.999\n461,-1,281.4,370.9,396.9,710.1,0.997\n461,-1,644.9,460.8,32,91.6,0.15\n461,-1,580.3,431.2,71.3,273.1,0.099\n461,-1,790.5,445.4,41.2,155.2,0.056\n289,-1,731.5,444.2,77.8,207.1,1\n289,-1,1352.1,442.8,50.2,107.6,1\n289,-1,1486.8,435.2,235.1,447.2,1\n289,-1,845.4,433.7,174.2,503,1\n289,-1,509.8,455.8,34.1,109.1,1\n289,-1,998.6,408.7,153.5,637.8,1\n289,-1,659,459.6,27,75.3,1\n289,-1,409.3,471.8,47.1,103.7,0.999\n289,-1,383.4,462.2,43.7,110.8,0.998\n289,-1,576.7,461.3,26,61.2,0.974\n289,-1,450.7,459.4,30.3,100.8,0.963\n289,-1,597.5,458.7,23.3,58.5,0.92\n289,-1,561.3,461.2,25.4,61.5,0.915\n289,-1,543.5,460.1,26.8,70.6,0.827\n289,-1,1147.4,449.3,51.8,100.8,0.291\n588,-1,835.7,472.4,53.4,77.4,1\n588,-1,722.7,447.3,44.6,108.1,1\n588,-1,991.9,433.3,88.6,241,1\n588,-1,1236.7,436.3,84,278.8,1\n588,-1,664.7,456.2,40,102.1,1\n588,-1,912.2,482.9,97.5,112.1,1\n588,-1,1089.2,413,104.2,288.5,1\n588,-1,381.7,464.5,48.2,113.8,1\n588,-1,797.5,475.7,54.9,61.5,1\n588,-1,416.5,467.2,41.4,105.1,1\n588,-1,557,459.2,28.9,85.5,0.999\n588,-1,630.3,455.8,35.6,102.8,0.997\n588,-1,584.5,457.7,34.9,86.5,0.96\n588,-1,1725.8,330.7,195.2,750.3,0.522\n244,-1,1193.6,439.3,114.3,359.9,1\n244,-1,631.5,450.1,74.5,186.3,1\n244,-1,848,418.1,202.9,601.2,1\n244,-1,370.1,447.1,44.9,104.7,1\n244,-1,418.3,462.9,37.7,111.9,1\n244,-1,513.4,453,32.8,111.9,1\n244,-1,1084.6,481.5,41.9,116.8,0.999\n244,-1,1117.6,444.9,38.9,104,0.997\n244,-1,590.9,457.9,21.2,65.6,0.995\n244,-1,475.5,456.6,31.7,106,0.985\n244,-1,551.8,457.2,24.5,63.4,0.93\n244,-1,774.1,446,141.1,421,0.247\n244,-1,444.9,460,42.6,102.5,0.184\n232,-1,758.6,413.8,274.5,592.2,1\n232,-1,372.2,447.5,42.9,106.8,1\n232,-1,1120.9,443.4,138.6,349.6,1\n232,-1,615.9,449.1,54.2,184.2,1\n232,-1,423,466.9,45.8,110.8,1\n232,-1,514.6,456.1,34.5,109.1,1\n232,-1,1085.4,489.6,40.3,108.5,1\n232,-1,1048.1,483,41.3,109.4,0.995\n232,-1,557.6,459.5,23.6,63.7,0.936\n232,-1,454.7,459.9,35.4,105,0.672\n232,-1,483,453.7,29.4,103.8,0.337\n232,-1,658.3,460.4,28.7,86.8,0.155\n151,-1,550.8,433.4,154.3,452.7,1\n151,-1,1201.7,447.2,37.2,100.8,1\n151,-1,401,466.6,63.2,105.5,1\n151,-1,716.1,438.2,122.1,335.7,1\n151,-1,1088.3,481.7,38.5,118.9,1\n151,-1,372,446,44.3,106.4,1\n151,-1,832.5,450.9,89.2,282.5,1\n151,-1,1002,442.1,38.6,103.3,1\n151,-1,1051.8,483.6,39.6,111.1,1\n151,-1,1127.4,455.6,34,90,0.998\n151,-1,473.8,465.8,40.3,109.9,0.998\n151,-1,503.4,455.2,36.2,108.6,0.989\n151,-1,524.8,453.3,28,92.7,0.21\n151,-1,893.8,454.2,70.8,214,0.165\n73,-1,912.6,483,98.1,111.3,1\n73,-1,836.2,472,53,76.4,1\n73,-1,374.7,447.7,43.1,104.8,1\n73,-1,1261,447.1,34.9,101,1\n73,-1,511.9,442.3,130,330.9,1\n73,-1,419.7,457.6,41,84.4,1\n73,-1,1088.1,482.8,35.8,118,1\n73,-1,1003.8,443.2,42,110.9,1\n73,-1,1549.2,428.4,53.3,130.1,1\n73,-1,1053.1,480.9,40.8,115.2,1\n73,-1,699.6,456.2,78,223.9,0.999\n73,-1,473.7,469,32.3,100.4,0.999\n73,-1,794.8,475.4,57.3,62.4,0.999\n73,-1,616.1,437.2,97.9,293.3,0.999\n73,-1,1098,439.1,37.5,116.6,0.988\n258,-1,657.9,448.3,63.8,193.4,1\n258,-1,407.8,463.6,42.7,112.3,1\n258,-1,1242.7,437.9,192,384.3,1\n258,-1,937.5,391.5,164.1,661.5,1\n258,-1,810.7,435.7,132.8,463.8,1\n258,-1,513.3,452.9,33.3,111.1,1\n258,-1,371.2,445.5,44.3,106.2,1\n258,-1,1756,396.6,165,381.3,1\n258,-1,587.2,459.8,24,62.9,0.996\n258,-1,773.6,448.9,26,79.2,0.994\n258,-1,471.8,460.5,30.9,103,0.992\n258,-1,604.8,460.4,22.9,58.5,0.948\n258,-1,552.7,462.2,23.4,60.7,0.932\n258,-1,625.4,462,25,61,0.521\n258,-1,496.2,456.6,21.6,106.2,0.459\n258,-1,762.3,451.4,22.6,76.6,0.141\n258,-1,1108,447.3,41.7,105.5,0.107\n404,-1,153.4,436.8,201,353.5,1\n404,-1,835.6,473.7,53.4,76.3,1\n404,-1,1079.8,415.9,206,610.9,1\n404,-1,632.8,407.9,152.8,343.7,1\n404,-1,373.6,441.4,122.8,343.5,1\n404,-1,795.2,475.5,56.7,62.9,1\n404,-1,894.9,439.1,58.1,176.8,1\n404,-1,484.4,430.9,126.2,301.6,0.999\n404,-1,978.9,422.5,140,520.6,0.999\n31,-1,913.9,484.7,96.4,110.6,1\n31,-1,835.6,472.8,54,76.5,1\n31,-1,375.9,447.2,42.1,104.9,1\n31,-1,1440.3,431.1,62.3,129.2,1\n31,-1,1257,447.9,34.7,100.3,1\n31,-1,598.7,443.7,90.9,275.2,1\n31,-1,418.5,458.5,42.1,86.8,1\n31,-1,472,442,117.7,292.1,1\n31,-1,1091.1,480.6,34,120,1\n31,-1,795.8,475.5,57.1,61.9,1\n31,-1,1592.1,396.8,172.5,440.1,1\n31,-1,1011.7,439,42.5,117.8,1\n31,-1,1098.4,438.9,39.9,111.9,1\n31,-1,1053.9,485.4,38.7,110.4,1\n31,-1,1681.3,422.4,220.3,390.7,0.996\n399,-1,835.4,473.2,52.7,76.1,1\n399,-1,124,434.2,198.2,360.8,1\n399,-1,1077.7,407.1,213.6,600.2,1\n399,-1,620.4,408.4,122.9,339.6,1\n399,-1,317,455.4,167.1,341,1\n399,-1,796.5,476.4,56,61.4,1\n399,-1,909.3,436.9,60.9,179.7,1\n399,-1,978.5,423.4,130.2,512.7,0.999\n399,-1,450,431.6,111.3,306.7,0.997\n399,-1,562.3,462.2,21.3,56.2,0.873\n399,-1,579.6,460.5,22.4,60.1,0.505\n301,-1,769.1,443.4,71.4,211.1,1\n301,-1,1604.6,431.5,178.3,458.2,1\n301,-1,506.4,454.8,37,108.8,1\n301,-1,885.9,424.5,144.8,508.8,1\n301,-1,1013.7,398.7,156.8,627.9,1\n301,-1,1172,445.8,46.2,108.4,1\n301,-1,834.1,473.7,52.2,76,1\n301,-1,1372.5,414.8,101.3,297.5,1\n301,-1,411,470.8,46.9,104.4,1\n301,-1,659,462.2,26.2,74.4,1\n301,-1,382.6,463.2,43.6,112.5,1\n301,-1,578.3,460.8,26.2,58.5,0.987\n301,-1,553.3,459.9,26.1,63.7,0.91\n301,-1,598,457.6,24.8,59.2,0.904\n64,-1,912.4,484.2,98.4,112,1\n64,-1,836.2,472,53.8,78.8,1\n64,-1,374.1,446.1,43.6,106,1\n64,-1,1260.4,446.2,35.8,101.9,1\n64,-1,487.4,444.2,134.7,324.6,1\n64,-1,418.7,458.1,42.2,85.4,1\n64,-1,1004.4,440.7,41.8,114.7,1\n64,-1,1528,427.9,52.9,128.2,1\n64,-1,622.9,445.9,89.8,282.7,1\n64,-1,1054.5,483.5,39.4,111.2,1\n64,-1,1089.6,482.4,34.5,115.6,1\n64,-1,795.8,475.2,56.4,64.3,1\n64,-1,1096.7,438.3,40.8,111.2,0.999\n64,-1,691.6,457.2,75.2,221.8,0.999\n541,-1,656.1,452.3,40.8,117,1\n541,-1,1031.9,442.5,113.9,282.8,1\n541,-1,816.8,433.8,117.3,252,1\n541,-1,1466.1,411.2,238.8,666.8,1\n541,-1,381.7,463,49.8,116,1\n541,-1,574.9,454.3,37.9,87.4,1\n541,-1,714,450.9,35.5,95.3,1\n541,-1,918.3,414.2,134.2,298.1,1\n541,-1,415.7,468.1,44.7,102.8,0.999\n541,-1,543.6,459.5,30.2,79.1,0.994\n541,-1,1172.7,445.8,45.7,102.1,0.989\n541,-1,797.1,478.2,48.7,65,0.778\n541,-1,459.7,462.2,28.6,68.2,0.583\n541,-1,507,457.6,21.7,53.7,0.521\n541,-1,1762.2,372.3,158.8,708.7,0.519\n541,-1,1101.3,445.5,80.9,238.5,0.142\n152,-1,549,434.3,155.6,455.5,1\n152,-1,1198.6,446.3,38.9,101.2,1\n152,-1,398.3,467.2,66.1,104.9,1\n152,-1,1088.6,479.6,38.8,120.2,1\n152,-1,719.8,440.4,116.9,326.4,1\n152,-1,1002,442.4,38.8,104.7,1\n152,-1,830.6,455.2,92.6,277,1\n152,-1,372.6,446.2,45.1,105.8,1\n152,-1,1052.4,483.1,39.8,112,1\n152,-1,1127.2,456.3,33.7,89.3,0.999\n152,-1,474.3,466,38.9,110.6,0.999\n152,-1,501.4,454.2,36.6,111.3,0.974\n152,-1,887.6,441.7,77.5,222.5,0.195\n152,-1,526.4,454,28,93.1,0.166\n40,-1,912.8,484.8,97.1,110.3,1\n40,-1,835.1,472.7,54.2,77.6,1\n40,-1,1455.8,427.9,66.9,131.5,1\n40,-1,1642.6,399.5,258.3,478.1,1\n40,-1,375.4,446.3,42.6,105.6,1\n40,-1,1258.1,447.4,35.5,102.2,1\n40,-1,481.9,445,110.9,304.8,1\n40,-1,1009.4,440.5,43.2,116.7,1\n40,-1,417.5,458.4,42.9,87.1,1\n40,-1,615.5,441.1,86,277.9,1\n40,-1,1053.9,485.5,40.1,109.5,1\n40,-1,796,475.5,56.2,61.9,1\n40,-1,1092,480.4,32.9,117.9,1\n40,-1,1097.3,437.4,41.1,112.8,1\n459,-1,914.2,483.3,95.5,110.1,1\n459,-1,1167.5,408.6,283.6,672.4,1\n459,-1,826.4,411.5,83.4,301,1\n459,-1,1052.5,440.3,39.4,113.2,1\n459,-1,994.4,445.6,37.5,102,1\n459,-1,1387.9,425.4,146.7,351.6,0.997\n459,-1,341.6,385.2,379,695.8,0.995\n459,-1,665.4,439.2,122.1,316.8,0.831\n459,-1,383.6,463.5,55.1,127.9,0.777\n459,-1,793.6,440.9,43.8,173.2,0.064\n597,-1,915.5,483.7,94.4,112.1,1\n597,-1,835.6,473.1,52.9,76.7,1\n597,-1,722.8,446.8,45,111.3,1\n597,-1,1249.8,445.5,106.1,273.5,1\n597,-1,664.6,456.3,38.3,103.5,1\n597,-1,1099.8,419,100.7,284.6,1\n597,-1,797.3,475.8,55,62.2,1\n597,-1,381.6,462.5,47.6,115.6,1\n597,-1,1029.3,435.5,89.5,240.2,1\n597,-1,416.4,467.2,42,106.2,1\n597,-1,554.9,460.8,30.6,84.3,1\n597,-1,629.6,454.9,35.4,100.2,0.997\n597,-1,584,453.3,39.7,83.5,0.924\n597,-1,992.9,450.9,34.6,93.9,0.783\n5,-1,914.5,482.5,96.3,112.9,1\n5,-1,836.9,472.5,52.7,77,1\n5,-1,442.1,447.9,114,276.5,1\n5,-1,376.2,447.1,41.3,104.3,1\n5,-1,588.2,445,85.4,265.6,1\n5,-1,1357.1,411.8,175.9,384.1,1\n5,-1,1257.4,448.3,34.2,102.4,1\n5,-1,1090.5,482.5,34.3,117.5,1\n5,-1,1013.7,431,44.5,118,1\n5,-1,796.9,474.7,55.6,62.9,1\n5,-1,1054.1,485,39.1,108,0.999\n5,-1,1099.5,438.5,40.2,108.2,0.999\n5,-1,419.6,464.1,43.2,91.1,0.079\n391,-1,836.9,471.7,53.1,77.8,1\n391,-1,58.9,436.2,170.4,362.8,1\n391,-1,1075.8,414.1,229.9,605.3,1\n391,-1,567.9,405.8,125.7,357,1\n391,-1,796.7,475.9,55.9,61.2,1\n391,-1,370.2,436.5,177.3,306.9,0.999\n391,-1,978.7,418,128.6,519.3,0.999\n391,-1,929.1,435.1,66.2,180.2,0.999\n391,-1,299.7,452.3,124,341.3,0.997\n391,-1,524.9,459.9,23.5,63.8,0.954\n391,-1,544.4,459.1,22.8,62.9,0.653\n391,-1,495,460.2,29.1,80.2,0.161\n14,-1,914.9,482.5,94.9,111.8,1\n14,-1,836.4,472.4,53.4,76.7,1\n14,-1,442.2,447.2,128.5,282.8,1\n14,-1,585.8,444.5,88.3,268.5,1\n14,-1,375.4,447,43.2,104.7,1\n14,-1,1256.9,447.2,34.7,102.3,1\n14,-1,1012.8,435.3,42,114.2,1\n14,-1,1090.4,484.5,34.3,116.7,1\n14,-1,1443.2,396.7,148.3,408.9,1\n14,-1,796.5,475.2,55.7,62.6,1\n14,-1,1100,438.9,40.2,109.4,0.999\n14,-1,1055.4,485.4,38,109.5,0.999\n14,-1,1391.3,436.6,61.8,130.5,0.999\n14,-1,1545.8,412.1,148.5,378.6,0.996\n14,-1,417,458.1,40,86.4,0.973\n520,-1,751.8,434.3,95.7,261.7,1\n520,-1,382.4,462.8,50.5,116.2,1\n520,-1,1566.5,375.7,302.3,705.3,1\n520,-1,927.6,443.2,139.3,284.9,1\n520,-1,1330.8,432.7,259.2,623.5,1\n520,-1,685.1,451.2,40.6,122.7,1\n520,-1,572.2,459,33.8,81.4,1\n520,-1,1179.7,449.3,34.8,86,1\n520,-1,1050.1,442.1,102.3,234.9,1\n520,-1,835.5,472.6,53.5,75.5,1\n520,-1,647.3,452.5,29.7,99.6,0.998\n520,-1,540.5,462.9,29.8,74.3,0.994\n520,-1,725.1,449.6,30,91.2,0.954\n520,-1,448.9,462.9,29.4,78.2,0.945\n520,-1,415.8,471,46,97.5,0.814\n520,-1,886.2,417.6,82.8,283.1,0.794\n520,-1,465.1,461.5,26.3,67.9,0.719\n574,-1,836.2,472.6,53.5,77.8,1\n574,-1,719.5,447,41.5,104.9,1\n574,-1,1157.2,437.3,128.3,279.9,1\n574,-1,1664.2,387.7,256.8,693.3,1\n574,-1,381.6,465.3,48.3,113.1,1\n574,-1,797.4,476.9,54.8,60.5,1\n574,-1,417.1,468.3,42.2,103.8,1\n574,-1,1032.4,411.3,117.4,287.1,1\n574,-1,553.1,459.5,31.1,83.2,0.999\n574,-1,665.1,453,39.8,102,0.999\n574,-1,960.6,432.5,106.9,249.3,0.999\n574,-1,639.8,453.4,34.3,105.4,0.99\n574,-1,583.9,457.8,38.6,83.4,0.986\n574,-1,616.8,458.6,24.8,87.6,0.115\n504,-1,383,463.1,52.1,116.6,1\n504,-1,873.7,435.6,131.4,296.5,1\n504,-1,708.3,433.8,79.1,268.4,1\n504,-1,1508.6,380.9,240.7,700.1,1\n504,-1,636.6,455.3,34.9,88.3,1\n504,-1,987.3,438.8,98.2,240.6,1\n504,-1,794.2,478.1,59.5,59.8,1\n504,-1,1177.5,450,36.4,85.5,1\n504,-1,571.8,456,33.5,83.1,1\n504,-1,1282.9,417.9,190,607.1,1\n504,-1,1707.3,417.5,209.8,471.3,1\n504,-1,1085,449.3,61.8,149.5,1\n504,-1,536.7,460.5,30.7,75.3,0.995\n504,-1,459.9,459.5,25.4,74.7,0.986\n504,-1,835.7,476,52.6,64.8,0.98\n504,-1,668.2,460.1,27.7,78.1,0.924\n504,-1,410.5,469.8,49.6,98.4,0.184\n44,-1,912.9,483.7,97.9,111.5,1\n44,-1,835.2,472.8,54.8,77.5,1\n44,-1,1465.4,429.4,63.7,128.9,1\n44,-1,374.2,445.9,43.7,106.8,1\n44,-1,479.5,443.9,114.3,316.1,1\n44,-1,1668.5,391.6,252.5,487.8,1\n44,-1,1008.9,439.8,42.3,116.8,1\n44,-1,1258.5,447.1,35.4,102.1,1\n44,-1,617.7,443,89.1,275.4,1\n44,-1,417.8,456.9,42.4,87,1\n44,-1,1055,484.8,38.9,110.5,1\n44,-1,795.9,475.7,56.7,61.5,1\n44,-1,1090.2,480.5,33.6,119.7,1\n44,-1,1097.4,437.4,40.8,110.1,1\n44,-1,583.7,466.5,32.4,133.7,0.356\n12,-1,914.9,482.7,93.9,112.1,1\n12,-1,836.3,472.2,52.8,77,1\n12,-1,587.6,443.2,84.2,265.5,1\n12,-1,440.4,444.4,127.8,285.3,1\n12,-1,375.3,447.2,43,104.8,1\n12,-1,1014,434.5,42.1,115.1,1\n12,-1,1256.9,447.8,34.6,101,1\n12,-1,796.3,475,55.7,63,1\n12,-1,1435.6,405.9,132.3,400.9,1\n12,-1,1090,483.1,34.2,117.9,1\n12,-1,1383.8,437.7,59.9,126.6,1\n12,-1,1055.2,485.9,38.3,108.1,1\n12,-1,1099.5,438.2,41.1,108.1,1\n12,-1,1531.1,424.2,143.7,355.7,0.974\n12,-1,416.6,458.3,41.6,86.4,0.946\n12,-1,658.6,465.6,50.4,174.9,0.079\n280,-1,1430.8,431.7,171.5,420.5,1\n280,-1,389.8,465.7,42.4,111.5,1\n280,-1,825.4,429.8,153,486.6,1\n280,-1,509.9,455.9,35,109.7,1\n280,-1,709.3,443.4,92.9,207.6,1\n280,-1,981.5,401.9,158.2,646.2,1\n280,-1,452.9,460.1,32.2,105.6,1\n280,-1,1329.1,443.7,44.2,105.9,0.999\n280,-1,658.6,462.5,25.9,72.8,0.999\n280,-1,578.1,462.2,25.5,60.5,0.987\n280,-1,621,461.3,23.9,57.7,0.92\n280,-1,1547.1,414.7,142.4,330.2,0.907\n280,-1,564.5,462.5,25.1,60.1,0.903\n280,-1,546.4,460.4,27,70.1,0.771\n497,-1,830,442,135.6,292.1,1\n497,-1,670.2,438.5,103.8,264.7,1\n497,-1,381.9,462.1,53.5,120,1\n497,-1,967.8,428,105.5,253.7,1\n497,-1,1429.2,378.2,261.7,702.8,1\n497,-1,1080.9,445.3,55.9,153,1\n497,-1,1219.6,417.7,216.3,602.8,1\n497,-1,569,455.7,33.9,83.5,1\n497,-1,1177.8,450.5,36.9,83.1,1\n497,-1,634.3,454.2,33.6,90.7,1\n497,-1,1653.1,407.4,166.7,450,1\n497,-1,460,459,25.1,78,0.992\n497,-1,538.9,460.6,27.8,72.8,0.983\n497,-1,795.2,478.4,55.4,55.7,0.97\n302,-1,770.6,444.7,73.1,210.4,1\n302,-1,505.6,455.1,37.3,108.3,1\n302,-1,1016.3,411.7,165.1,615.3,1\n302,-1,1172.4,445,46.9,109.1,1\n302,-1,1618.3,431.5,166.5,457.3,1\n302,-1,410.2,469.2,47.3,105.9,1\n302,-1,835.2,473.2,52.3,76.1,1\n302,-1,1365.8,418.9,95,284.1,1\n302,-1,658.7,462.5,25.5,74.2,1\n302,-1,888.5,431.6,147.9,505.1,1\n302,-1,382.5,463.7,44,111.8,1\n302,-1,577.2,461.1,26.4,58.5,0.988\n302,-1,554,460.3,25.8,62.9,0.908\n302,-1,609.6,458.5,24.6,58.1,0.901\n302,-1,621.1,458.5,41.3,63.6,0.086\n507,-1,382.6,463.2,51.4,116.5,1\n507,-1,883.3,439.8,145.5,290.8,1\n507,-1,718.4,434.2,86.7,266.1,1\n507,-1,835.3,471.7,50.9,77.8,1\n507,-1,1514.7,383.3,273.7,697.7,1\n507,-1,1311.1,415.9,177.5,609.9,1\n507,-1,638.8,456.4,35.6,87.5,1\n507,-1,1176.9,449,36.8,88.1,1\n507,-1,572.3,457.3,32.2,82.5,1\n507,-1,1010.1,438.8,85.3,243,0.999\n507,-1,1090.3,447.6,57.8,148.3,0.999\n507,-1,1738.3,403.4,177,503,0.999\n507,-1,538,462.2,30.3,74.5,0.989\n507,-1,460.2,459,25.2,73.3,0.97\n507,-1,670.5,457.2,28.9,78.2,0.946\n507,-1,801.9,478.2,55,60.6,0.762\n507,-1,414,469.3,46.9,98.5,0.335\n351,-1,1071.2,403.9,195.6,614,1\n351,-1,836,472.6,52.9,76.3,1\n351,-1,912.8,423.2,142.1,513.1,1\n351,-1,485.6,452,32.8,114.4,1\n351,-1,341.6,402.6,130.8,406.8,1\n351,-1,78,440.5,167.8,340.3,1\n351,-1,796.6,475.6,57.7,61.9,1\n351,-1,1511.6,437.2,41.5,109.9,1\n351,-1,659.4,463,27.6,73.9,0.999\n351,-1,636.2,462.2,25.4,65.6,0.963\n351,-1,557,459.4,20.5,58.7,0.952\n351,-1,579,459.5,22.9,58.2,0.927\n351,-1,610.7,458.9,41.9,63.8,0.781\n351,-1,871.9,459,29.4,69.5,0.066\n478,-1,627.5,442.2,86.4,264.6,1\n478,-1,1163.1,419.2,166.2,582.9,1\n478,-1,1345.3,387.6,227.2,693.4,1\n478,-1,753.9,430.7,102.4,305.1,1\n478,-1,1039,439.2,40.1,107.6,1\n478,-1,840.4,408,83.3,303.2,1\n478,-1,563.9,454,34.3,81.9,0.999\n478,-1,526.7,457.7,31.3,76.9,0.998\n478,-1,990.9,449,34.9,97,0.997\n478,-1,1111.7,436.1,40.4,150.3,0.996\n478,-1,1085.9,470.8,39.9,128,0.995\n478,-1,1508.2,403.9,186,414.8,0.986\n478,-1,898.9,443.6,88.7,234.1,0.805\n478,-1,708.1,464.1,24.3,78.8,0.356\n478,-1,1020.5,444.8,24.8,93.9,0.336\n478,-1,1063.6,451.4,37.1,115.3,0.111\n124,-1,915.5,483.6,94.8,110.8,1\n124,-1,374.8,447,41,104.2,1\n124,-1,785.1,455,95,247.7,1\n124,-1,432.7,469.5,45.7,104.3,1\n124,-1,564.4,440.2,137,391.8,1\n124,-1,1088.4,484.6,37.5,116.8,1\n124,-1,1236.9,446.2,38.7,101.8,1\n124,-1,497.2,470.8,35.1,103.5,1\n124,-1,682.1,437.7,99.2,316,1\n124,-1,1005.8,443.5,39.2,105.2,1\n124,-1,1052.2,484,39.4,109.2,1\n124,-1,530.9,458.5,30.9,73.3,0.962\n74,-1,913.1,483.2,97.5,111.1,1\n74,-1,836.4,471.4,53.1,77.7,1\n74,-1,374.8,447.4,42.9,104.8,1\n74,-1,1260.5,446.9,35.8,101.1,1\n74,-1,1088.2,485.3,36,116.7,1\n74,-1,514.6,446.9,128.6,322.1,1\n74,-1,419.2,457.4,41.8,84.6,1\n74,-1,1004.3,443.5,42.1,111.3,1\n74,-1,701.2,457.2,79.4,219.4,1\n74,-1,1552.3,429.5,52.5,126.9,1\n74,-1,1052.7,480.3,40.7,114.6,1\n74,-1,472.4,467,32.9,102.4,0.999\n74,-1,613.7,440.2,95,295.4,0.999\n74,-1,796,475.7,55.2,61.7,0.998\n74,-1,1097.5,438.5,40.3,108.2,0.981\n567,-1,836.4,472.9,52.3,76.8,1\n567,-1,1144.3,440.6,97.8,279.2,1\n567,-1,719.9,448.4,40.5,102.4,1\n567,-1,797.7,476.8,54,60.6,1\n567,-1,1009.7,415.9,130.8,287.6,1\n567,-1,382.3,463.4,48.2,114.6,1\n567,-1,1626.5,399.1,260.3,681.9,1\n567,-1,416.7,466.1,44.1,105.2,1\n567,-1,937.2,433.8,79.5,236.4,1\n567,-1,642.9,453.2,36.5,109.4,1\n567,-1,551.7,458.3,30.3,83.1,1\n567,-1,581.2,458.3,41.4,82.8,0.999\n567,-1,666.9,451.1,34.4,99.8,0.944\n567,-1,503.3,458.9,22.7,56.2,0.818\n567,-1,520.3,458.3,21.6,54.8,0.737\n567,-1,1214.9,444.3,52.6,113.9,0.59\n502,-1,383,463.7,52.2,116.6,1\n502,-1,700.2,434.2,82.2,272.7,1\n502,-1,864.6,437.3,127.8,292.8,1\n502,-1,1488,374.3,236.3,706.7,1\n502,-1,1260.4,419.6,193.3,606.7,1\n502,-1,975.3,434.9,111.4,246,1\n502,-1,1084.5,446.3,57.2,151.9,1\n502,-1,636.6,456.1,33.3,87.7,1\n502,-1,571.2,457.5,32.8,82,1\n502,-1,1689,408.3,219.7,484.4,1\n502,-1,795.1,477.3,57.8,59.7,1\n502,-1,1178.7,450.1,35.5,84.8,1\n502,-1,459.9,459.6,26.4,77.7,0.994\n502,-1,537.1,461.1,30.3,74.2,0.993\n502,-1,671.5,463.1,31,86.5,0.254\n38,-1,914.5,483.8,95.1,111.9,1\n38,-1,835.2,472.1,54.2,78.8,1\n38,-1,1635.1,399.1,245.9,466.5,1\n38,-1,1453.7,427.8,64.3,131.5,1\n38,-1,375,446.4,42.9,106.1,1\n38,-1,1257.9,447.5,35.3,101.7,1\n38,-1,481,443.9,114.2,305.6,1\n38,-1,609.5,442.4,90.3,277.2,1\n38,-1,418.1,457.1,42,87.1,1\n38,-1,1009.6,440.6,43,118.4,1\n38,-1,795.7,475.1,56.7,62.7,1\n38,-1,1090.8,483.1,33.4,116.8,1\n38,-1,1053.9,485.3,39.2,109.4,1\n38,-1,1097.7,438.7,40.5,111.6,0.999\n144,-1,401.6,466.1,63.1,105.5,1\n144,-1,564.6,440.9,154.1,429,1\n144,-1,1209.6,447.9,39.1,100.9,1\n144,-1,915.6,484.5,92.9,113,1\n144,-1,1087.6,487.4,38.2,112.5,1\n144,-1,699.3,439.1,127.3,324.7,1\n144,-1,819.3,449.6,88.7,266.2,1\n144,-1,1002.5,444.8,38.2,101.1,1\n144,-1,479,467.3,42.5,107.9,1\n144,-1,372.8,445.4,44.2,106.6,1\n144,-1,1052.2,483.8,39,108.6,0.999\n144,-1,516.2,462.3,30.2,72.8,0.955\n144,-1,1114.7,449,39,96.6,0.952\n144,-1,534.4,454.9,27.3,70.6,0.845\n384,-1,835.7,472.3,53,77.6,1\n384,-1,1085.3,398.3,205.4,626.7,1\n384,-1,541.4,398.9,141.2,372.3,1\n384,-1,2.3,434.2,201.1,381,1\n384,-1,200.9,435.4,175.8,379,1\n384,-1,796.9,476.6,55,61.1,1\n384,-1,968.8,423.1,136.6,516.6,1\n384,-1,469.7,452.5,39.4,109.8,1\n384,-1,353.1,443.7,106.3,300.3,0.999\n384,-1,515.2,459.3,27.2,69.4,0.94\n28,-1,914.3,483.6,95.7,112.6,1\n28,-1,836.1,473.4,53.8,76.3,1\n28,-1,1424.4,428.3,70.3,131.9,1\n28,-1,375.5,447.1,43,105.7,1\n28,-1,1533.1,407.1,204.2,422.3,1\n28,-1,594.4,442.6,91.2,275.9,1\n28,-1,466.6,446.8,117.2,287.5,1\n28,-1,795.8,475.5,57,62.3,1\n28,-1,1256.6,448.2,34.5,100.4,1\n28,-1,418.2,458.7,42,88.3,1\n28,-1,1012,437.6,42.9,116.8,1\n28,-1,1055.6,486.2,38,107.7,1\n28,-1,1091.5,477.6,33,121.4,1\n28,-1,1098.3,438,40.8,110.7,1\n28,-1,1665.5,421.1,147.7,388.7,0.368\n395,-1,836.3,471.6,54,78.5,1\n395,-1,82.3,429.5,182.5,365.2,1\n395,-1,593,406.8,121.1,345,1\n395,-1,1072,406.2,234,605.2,1\n395,-1,306.6,446.1,169.8,355.8,1\n395,-1,797.2,476.2,55.9,62,1\n395,-1,920.2,436.9,61.6,180.6,0.999\n395,-1,977.6,420.2,128.3,522.9,0.999\n395,-1,529.7,460.8,21.7,61.3,0.939\n395,-1,558.5,460.5,20.8,59.5,0.896\n395,-1,569.5,464.7,24.5,72.5,0.13\n485,-1,1364.5,396.7,285.2,684.3,1\n485,-1,645.3,434,101.4,267.8,1\n485,-1,1193.1,419.1,167.4,594,1\n485,-1,1036.2,440.1,39.7,108.2,1\n485,-1,566.5,453.8,35.1,81.7,1\n485,-1,800.6,435.9,103.8,294.4,1\n485,-1,884.9,432.5,126.5,255.6,0.999\n485,-1,742.1,445,46.8,135.3,0.999\n485,-1,1086.8,464.8,37.5,135,0.999\n485,-1,462.9,460.4,29,80.9,0.998\n485,-1,1111.9,440.2,39.7,146,0.997\n485,-1,533.1,456.8,26.8,73.7,0.989\n485,-1,1542,407.7,215.8,428.6,0.96\n485,-1,623.6,465.4,27.8,79.2,0.137\n485,-1,1171.2,456.1,22.4,84.5,0.053\n471,-1,915.9,484.1,94.4,110.5,1\n471,-1,741,438.9,96.9,300.3,1\n471,-1,604.3,429.8,81.8,280.6,1\n471,-1,1300.5,396.6,201.3,677.7,1\n471,-1,1143.9,422.2,149.6,569,1\n471,-1,836.2,407.5,86.4,300.2,1\n471,-1,1082.7,475.5,44.9,122.2,1\n471,-1,994.1,447.1,37.4,97.9,0.999\n471,-1,1047.4,440.3,40.1,111.6,0.999\n471,-1,8.6,368.4,384.8,712.6,0.996\n471,-1,1485.4,421.6,114.5,378,0.996\n471,-1,562.3,456.4,32.9,77.4,0.994\n471,-1,381.7,460.6,42.5,114.1,0.993\n471,-1,713,473.5,21.9,67.6,0.891\n471,-1,1107.2,458.5,35.6,120.8,0.397\n299,-1,764.4,444.9,66.3,206.1,1\n299,-1,507.1,455.3,36,108.4,1\n299,-1,1574.3,430.9,196.7,456.6,1\n299,-1,1165.7,443,48.1,110.9,1\n299,-1,875.3,425.2,152.7,509.9,1\n299,-1,1384.1,423.6,115.8,286,1\n299,-1,1014.5,406.5,158.8,630.2,1\n299,-1,833.1,476.4,53.3,71,1\n299,-1,410.3,471.4,46.4,104.5,1\n299,-1,382.1,462.1,42.9,113.1,1\n299,-1,659.2,462.8,25.6,71.6,0.999\n299,-1,579.1,460.4,26,59.5,0.991\n299,-1,560.6,460.8,25.4,60.5,0.906\n299,-1,599.7,458.1,25.3,58,0.716\n299,-1,438.4,463.9,29.3,96.6,0.244\n3,-1,916.2,481.4,93.5,113.6,1\n3,-1,836.7,472.7,53,77.1,1\n3,-1,1346.8,417.5,172.8,379.6,1\n3,-1,375.7,446.6,42.3,104.8,1\n3,-1,441.1,448.3,110.7,274.8,1\n3,-1,586.7,442.4,86.6,269.8,1\n3,-1,796.2,474.8,56.1,62.7,1\n3,-1,1256.7,448.9,34,101.1,1\n3,-1,1090.2,482.2,34.9,117.9,1\n3,-1,1015.5,430.3,43.3,119.4,1\n3,-1,1054.7,484.2,39.1,108.6,1\n3,-1,1099.1,438.7,41.7,109.8,0.999\n3,-1,1489,448.8,111.2,324.4,0.052\n6,-1,914.3,483.5,96.2,111.7,1\n6,-1,836.1,473.1,53.3,76.4,1\n6,-1,376.2,447,41.6,105.5,1\n6,-1,586.4,443.9,87.8,267.6,1\n6,-1,441.5,444.1,117.7,285.6,1\n6,-1,1361.5,409.3,172.1,387.6,1\n6,-1,1257.4,447.2,34.1,102.9,1\n6,-1,1090.8,482.5,34.4,117.8,1\n6,-1,1014.4,431.4,43.7,117.2,1\n6,-1,796.3,475.3,56.6,61.6,1\n6,-1,1055.6,485.4,38.6,108.5,1\n6,-1,1099.8,438.4,40.9,109,0.999\n6,-1,1484.7,431.7,131,344.4,0.364\n8,-1,914.2,482.2,96.2,113.3,1\n8,-1,836.7,472.6,53,76.7,1\n8,-1,375.5,446.8,42.4,104.9,1\n8,-1,439.2,446.1,124,285.2,1\n8,-1,585.6,444.3,87.1,268.6,1\n8,-1,1388.5,411.3,155,389.4,1\n8,-1,1013.9,434.2,41.4,114.3,1\n8,-1,1256.8,448.1,34.4,101,1\n8,-1,1091.2,481.8,34,118.6,1\n8,-1,1054.2,485.6,38.8,108.4,1\n8,-1,796.4,475.1,56.1,62.8,1\n8,-1,1099.9,438.6,41.7,106.6,1\n8,-1,1483.5,417.4,145.5,366.1,0.993\n8,-1,418.5,463.3,46.5,95,0.064\n13,-1,914.8,482.8,95.1,112,1\n13,-1,836.1,471.9,53.5,77.8,1\n13,-1,441.5,445.1,130.6,283.8,1\n13,-1,587.2,440.2,86.6,275.5,1\n13,-1,376.3,448,42.9,103.2,1\n13,-1,1257.2,447.6,34.7,101.2,1\n13,-1,1445.2,403.6,133,398.1,1\n13,-1,1090.3,484,34.3,117.2,1\n13,-1,1013.8,434.9,42.4,112.9,1\n13,-1,796,475.2,56,62.8,1\n13,-1,1054.7,485.7,38,107.9,1\n13,-1,1100,437.4,40.2,109.4,0.999\n13,-1,1387.1,437.6,62.3,127.6,0.999\n13,-1,1540.1,426.9,145.3,364.1,0.992\n13,-1,416.5,458.9,39,87,0.979\n21,-1,914,484.4,96.2,110.3,1\n21,-1,836.3,472.6,53.9,77.2,1\n21,-1,1460.7,414.7,240.9,408,1\n21,-1,451.1,442.4,125.6,294.2,1\n21,-1,375,446.2,43.4,106.5,1\n21,-1,1417.7,438,55.2,127.3,1\n21,-1,1256.8,448.8,35.1,99.6,1\n21,-1,1012.1,436.6,43.6,117.8,1\n21,-1,589.7,442.3,90.8,272.2,1\n21,-1,796,476.1,57,60.4,1\n21,-1,1091.3,480.9,33.6,118.2,1\n21,-1,1099.2,438.9,39.2,112.8,1\n21,-1,1056.9,485.7,37.2,111,0.999\n21,-1,419.1,457.3,39.8,84.5,0.999\n22,-1,914,483.8,97.1,111.6,1\n22,-1,836.5,472.6,53.6,77.4,1\n22,-1,452.9,440.6,121.9,295.9,1\n22,-1,1471.6,409.1,239.9,421,1\n22,-1,375.1,446.2,43.2,106.4,1\n22,-1,1256.9,448.5,34.8,100.1,1\n22,-1,1415.8,433.3,59,131.5,1\n22,-1,589.8,443.6,91.7,270.4,1\n22,-1,1012,435.2,44.1,120.5,1\n22,-1,795.7,475.8,56.8,61.3,1\n22,-1,1090.8,481.5,33.8,117.5,1\n22,-1,1098.6,439.2,40.4,111.2,0.999\n22,-1,1054.3,485.9,38.5,108.4,0.999\n22,-1,418.2,457.4,42.1,85.4,0.999\n23,-1,914.7,483.6,95.1,112.1,1\n23,-1,837.3,472.3,52.8,77.6,1\n23,-1,1473.4,413.8,233.6,416.6,1\n23,-1,455,443.5,122.9,295.1,1\n23,-1,375.2,446.8,43.5,105.6,1\n23,-1,1415.3,432.7,64.2,129.8,1\n23,-1,1257,449,34.7,99.2,1\n23,-1,590.5,442.1,91.5,273.2,1\n23,-1,1010.5,434.4,45.4,123.2,1\n23,-1,1091,480.8,33.7,118.8,1\n23,-1,795.5,475.6,56.6,61,1\n23,-1,1054.6,485.7,38.3,108.8,1\n23,-1,418.5,458.3,42.7,85.4,1\n23,-1,1098.7,438.8,40.3,111.7,0.999\n26,-1,914.8,483.1,94.7,112.7,1\n26,-1,836.3,473.2,53.8,76.5,1\n26,-1,1420.9,429.1,68.7,133.3,1\n26,-1,1504,403.7,218.6,428.4,1\n26,-1,375.3,446.1,43.4,107.4,1\n26,-1,460.5,443.6,121.1,290.3,1\n26,-1,593.5,441.2,89.5,274,1\n26,-1,795.8,475.7,57.2,62,1\n26,-1,1256.7,448,34.9,100.6,1\n26,-1,1012.3,436.8,43.3,117.9,1\n26,-1,418.4,458.1,42,88,1\n26,-1,1091.8,478.6,33,121.1,1\n26,-1,1053.9,483.6,39.1,112.1,1\n26,-1,1098.1,439.8,40.7,109.7,1\n26,-1,1640.9,416.2,145.9,387.9,0.154\n36,-1,912.7,483.4,98.6,112.1,1\n36,-1,835.8,471.9,54.1,79.2,1\n36,-1,1626,390.4,232.1,478.9,1\n36,-1,375.1,446.5,42.6,105.6,1\n36,-1,1451.9,428.9,63.2,132.8,1\n36,-1,1257.2,448,35.7,102.3,1\n36,-1,605.9,445.9,90.1,273.9,1\n36,-1,418.9,457.6,41.7,87.7,1\n36,-1,477,445.7,115.9,292.5,1\n36,-1,1089.8,484.4,34.1,116.8,1\n36,-1,1009.1,440.8,42.6,118.6,1\n36,-1,795.2,476.3,56.3,61.4,1\n36,-1,1054.1,484.4,39.8,110.4,1\n36,-1,1097.6,438.7,39.5,110.5,0.999\n36,-1,670.5,482.4,54.6,190.8,0.093\n39,-1,914.2,484,95.6,111.7,1\n39,-1,835.1,472.6,54.7,77.7,1\n39,-1,1636.9,399.3,249.3,470,1\n39,-1,1452.9,427.1,67,132.9,1\n39,-1,374.6,446,43.4,106.3,1\n39,-1,1258.1,447.3,35.4,102.7,1\n39,-1,611.9,441.6,88.8,277.8,1\n39,-1,1009.7,439.9,42.9,118,1\n39,-1,479.5,445.1,114.4,303.4,1\n39,-1,417.7,457.2,43,86.5,1\n39,-1,796.3,475.6,56.1,61.5,1\n39,-1,1091.1,481.8,33.2,117.3,1\n39,-1,1053.8,485.4,40.1,108.7,1\n39,-1,1098,436.6,40,112.9,1\n49,-1,913.2,483.2,98.4,111.6,1\n49,-1,835.9,472.8,53.7,77,1\n49,-1,478.9,440.9,113.9,315.4,1\n49,-1,374.8,445.2,43.4,107.6,1\n49,-1,622.8,444.2,89.7,274.6,1\n49,-1,1260.5,445.7,35.3,103.7,1\n49,-1,1489.1,429.8,56.4,129.6,1\n49,-1,418.6,457,42.9,88.4,1\n49,-1,1007.6,442.9,41.8,114.3,1\n49,-1,1091.3,481.5,33.1,117.6,1\n49,-1,1053.5,483.3,38.8,111.6,1\n49,-1,795.6,474.9,56.3,61.7,1\n49,-1,1098.6,437.2,40.5,109,1\n49,-1,580.3,454.2,43.5,136,0.999\n49,-1,1762.5,392.7,158.5,478.5,0.969\n50,-1,912.8,483.9,98.6,110.9,1\n50,-1,835.8,472.9,53.7,76.8,1\n50,-1,480.1,441.7,112,314.8,1\n50,-1,374.3,445.8,43.9,106.9,1\n50,-1,1491.3,430.4,55.8,131.7,1\n50,-1,624,444.5,89.3,274,1\n50,-1,1260.5,446.1,35.4,102.7,1\n50,-1,418.3,456.2,43.3,89.8,1\n50,-1,1008.8,443.7,40.4,111.6,1\n50,-1,1099,437.9,40.6,106.7,1\n50,-1,795.6,475.4,57.1,61.3,1\n50,-1,1053.9,483.2,38.8,112.2,1\n50,-1,1091.7,478.7,33.1,120.2,1\n50,-1,580.5,453.6,44,135.6,0.998\n50,-1,1777.7,391.1,143.3,477.8,0.952\n61,-1,914,483.9,96.9,111.8,1\n61,-1,836.4,471.4,53.1,80,1\n61,-1,483.1,443,129.4,324.5,1\n61,-1,374.4,444.6,43.5,107.9,1\n61,-1,1260.5,445.9,36.3,102.3,1\n61,-1,1521.1,429.5,53.5,127.6,1\n61,-1,1055.1,483.9,39.1,109.9,1\n61,-1,418.7,458.5,42.4,85.3,1\n61,-1,1005.7,440.5,40.5,114.5,1\n61,-1,624.3,443.1,89.3,283,1\n61,-1,1096.6,436,42.4,115.4,1\n61,-1,797.3,475.7,56.3,62.2,0.999\n61,-1,689.2,456.7,75.5,221.6,0.996\n61,-1,1087.6,479.2,34.6,113.4,0.679\n66,-1,912.3,483.8,97.8,111.8,1\n66,-1,835.9,472.6,53.7,78.4,1\n66,-1,491.2,448.1,136.4,317,1\n66,-1,374.6,447.1,43.1,104.4,1\n66,-1,418.9,458.2,40.9,84.7,1\n66,-1,1260.4,446.7,35.5,101.3,1\n66,-1,1533.6,430.1,52.3,127.1,1\n66,-1,1004.3,441.7,42.1,114.6,1\n66,-1,1054.9,481.3,38.9,113.8,1\n66,-1,796.7,474.9,56.4,63.9,1\n66,-1,621.1,444.6,91.7,286.6,1\n66,-1,1088.8,482.3,35.1,116.2,1\n66,-1,1095.9,440.8,41,108.1,0.998\n66,-1,692.9,456.9,74,221.4,0.998\n68,-1,912.8,483.8,97.4,111.8,1\n68,-1,835.7,472.8,54.1,76.5,1\n68,-1,374.4,447.3,43.3,104.8,1\n68,-1,419.5,458.2,42,85.7,1\n68,-1,500,440.8,133,329,1\n68,-1,1260.8,447.5,35.1,101,1\n68,-1,1539.3,432.5,49.8,126.4,1\n68,-1,1089,483,35.3,116.5,1\n68,-1,1053.6,481,39.4,113.7,1\n68,-1,796.2,475.5,57.2,63,1\n68,-1,1005.4,441.4,40.9,111.3,1\n68,-1,616.1,442.5,96.6,290.2,1\n68,-1,1096.2,441.8,40.1,107.3,0.999\n68,-1,694.8,455.2,76,221.5,0.998\n68,-1,477.9,465.6,31.8,94.4,0.98\n68,-1,462.7,464,26.8,81.4,0.073\n78,-1,913,484,97.4,111.3,1\n78,-1,836,472,52.6,76.6,1\n78,-1,374.8,446.4,43.1,105.7,1\n78,-1,1259.5,448.1,36.5,99.9,1\n78,-1,1088.5,485.5,37.2,116,1\n78,-1,704.4,456.4,86.9,224.5,1\n78,-1,418.8,457.4,41.7,86.3,1\n78,-1,529.9,448,118,325.6,1\n78,-1,1052.7,481.3,40.2,112.9,1\n78,-1,1003.8,443.5,42.6,109.5,1\n78,-1,469.9,465.8,35.3,100.3,0.999\n78,-1,617.6,441.1,93.2,288.6,0.998\n78,-1,799.1,477,51.1,58.6,0.699\n78,-1,1097.6,447.2,39.8,104,0.525\n85,-1,913.7,483.6,96.5,111.6,1\n85,-1,836.4,471.1,52.8,80.1,1\n85,-1,373.8,446.8,44.6,105,1\n85,-1,719,457.8,91.8,221.4,1\n85,-1,1261.5,447,35.2,101.1,1\n85,-1,1089.2,482.7,36,119.3,1\n85,-1,542.8,443.6,108,335.3,1\n85,-1,1004.6,443.4,41.8,109.6,1\n85,-1,1053.6,481.7,40.3,112,1\n85,-1,422.3,459.3,41.1,85,1\n85,-1,624.3,441.9,98.7,297.1,0.999\n85,-1,467,466.6,37.5,105.1,0.999\n85,-1,504.3,460.8,30.4,98.4,0.915\n89,-1,913.5,483.4,97.5,112,1\n89,-1,836.7,471.9,52.4,78.4,1\n89,-1,373.4,446.3,44.7,105.8,1\n89,-1,1261.2,448.2,34.7,100.8,1\n89,-1,1087.8,483.2,37.7,119.4,1\n89,-1,546.4,447.8,115.6,332.4,1\n89,-1,724.9,452.5,94.1,233.7,1\n89,-1,1005.1,443.5,41.4,106.7,1\n89,-1,462.8,467.7,40.6,100.3,1\n89,-1,1053.8,483.9,40.1,109.9,1\n89,-1,628.7,444.5,102.9,294.1,0.999\n89,-1,425.8,458.4,38.2,88.3,0.998\n89,-1,505.9,461.4,29.4,97.5,0.858\n89,-1,486.2,462.5,33.4,96.5,0.481\n90,-1,913.9,482.6,97,112.4,1\n90,-1,836.2,472.2,51.7,78,1\n90,-1,373,446.7,45.2,105.3,1\n90,-1,1261,448.2,35,100.6,1\n90,-1,1088,483.9,37.3,118.4,1\n90,-1,727.2,453.1,91.2,233.7,1\n90,-1,546.1,445.2,114.7,336.4,1\n90,-1,462.8,467.7,42,103.9,1\n90,-1,1005.2,443.9,41.1,106.1,1\n90,-1,1054.5,483.5,40,110.3,0.999\n90,-1,635.2,445.4,99.8,290.7,0.999\n90,-1,426.1,457.3,36.9,88.6,0.995\n90,-1,505.4,461.8,30,97.6,0.858\n92,-1,914.2,483.3,97.1,111.7,1\n92,-1,835.5,473.1,54.9,77.8,1\n92,-1,373.6,446.8,44.6,104.5,1\n92,-1,1260.2,447.2,36.2,101.4,1\n92,-1,1088.6,483.9,37.1,117.7,1\n92,-1,550.7,444.4,115.6,346.7,1\n92,-1,731.8,455.1,88.9,225.2,1\n92,-1,1004.8,442.4,40.4,108.1,1\n92,-1,462,468.4,42.4,103.3,1\n92,-1,1052.3,482.4,39.3,110.9,1\n92,-1,633,436.1,103,306.1,0.999\n92,-1,424.8,456.2,39.2,90,0.996\n92,-1,508.6,462.7,28.8,101.7,0.614\n103,-1,913.5,483,97.4,112.3,1\n103,-1,373.9,446.9,43.2,105,1\n103,-1,835.5,473.3,54.6,74.7,1\n103,-1,1255.3,446.5,38.8,101.3,1\n103,-1,450.3,467.1,45.9,106.3,1\n103,-1,1088.7,483.5,36.8,118,1\n103,-1,757.2,454.1,82.2,236.6,1\n103,-1,553.8,446,120.1,360.8,1\n103,-1,1005.2,442.9,40.7,107.8,1\n103,-1,655.2,438.8,99.5,307.6,1\n103,-1,1052.8,482.1,39.9,110,1\n103,-1,505.8,464.3,30.7,104.5,0.951\n103,-1,479.3,466.3,31.4,96.1,0.161\n104,-1,913.4,482.5,96.8,112.7,1\n104,-1,374.5,446.6,42.9,105.1,1\n104,-1,835.9,472.5,54.6,76,1\n104,-1,448.4,466.5,45.3,105.6,1\n104,-1,1253.8,446.2,39.4,101,1\n104,-1,552.8,441.7,123.8,364.6,1\n104,-1,757.6,455.1,84.4,239.2,1\n104,-1,1089.2,483.2,36.2,118.2,1\n104,-1,1004.8,443.4,40.3,106.3,1\n104,-1,1051.3,482.4,40.7,110.4,1\n104,-1,657.3,437.3,101.3,303,0.999\n104,-1,507.9,464.8,31.7,101.2,0.992\n104,-1,489.4,465.5,27.9,86.5,0.579\n107,-1,914,482.9,96.5,113.2,1\n107,-1,374.3,446.5,43.1,106,1\n107,-1,835.2,472.5,54.6,77.4,1\n107,-1,1249.7,446.5,39.7,101.6,1\n107,-1,1088.2,482.4,37,118.9,1\n107,-1,446.3,468.4,45.5,102.1,1\n107,-1,554.1,442.1,126.1,366,1\n107,-1,759.5,458.3,84.4,238.2,1\n107,-1,1005.7,442.8,40.2,107.3,1\n107,-1,663.5,438.7,99,303.9,1\n107,-1,1053,482,40.4,109.8,1\n107,-1,505.9,465.5,34.9,105.2,0.999\n108,-1,913.6,482.4,96.8,113.3,1\n108,-1,374.2,446.5,43,106.1,1\n108,-1,835,471.8,54.3,78.2,1\n108,-1,1249.5,447.3,39.5,100.4,1\n108,-1,1088.3,482.6,37.1,119.8,1\n108,-1,446.6,468.5,44.8,102.6,1\n108,-1,761,455.2,83.7,241.3,1\n108,-1,553.7,443,128.3,363.5,1\n108,-1,662.5,438.2,101.3,307.9,1\n108,-1,1052.5,482.4,40.8,110,1\n108,-1,1005.6,443.2,40.1,107,1\n108,-1,504.1,464.9,37.3,108.3,1\n117,-1,914.2,484.2,97.2,109.8,1\n117,-1,373.5,445.4,43.4,107.4,1\n117,-1,439.2,466.9,42.3,104.4,1\n117,-1,1088.4,482.7,37.6,119.3,1\n117,-1,554,443,135.4,378.9,1\n117,-1,1240.6,443.8,40.5,103,1\n117,-1,671.6,440.3,100.8,315.4,1\n117,-1,498.7,466,36.6,108.4,1\n117,-1,772.6,450.5,86.3,250.7,1\n117,-1,1051.3,483.5,39.8,109.5,1\n117,-1,1006.9,446.6,38.6,99.9,0.999\n117,-1,536.3,462.6,27.3,69,0.631\n117,-1,832.1,468.5,52.1,85.3,0.089\n117,-1,553.1,466.1,25.8,74.4,0.066\n126,-1,914.8,482.5,95.9,111.4,1\n126,-1,373.5,446.8,42.4,104.4,1\n126,-1,786.8,459,95.2,250.6,1\n126,-1,427.1,467.9,52.1,105.2,1\n126,-1,1232.7,447.2,39.2,101.6,1\n126,-1,570.3,450.8,136.4,376,1\n126,-1,1087.8,483.3,37.9,117.1,1\n126,-1,1004.7,445.7,39.4,101.1,1\n126,-1,496.8,469.8,34.6,105.6,1\n126,-1,1052.3,483.3,39.3,109.7,1\n126,-1,682.7,437,98.4,319.1,0.999\n126,-1,528.3,457.8,30.5,69.5,0.986\n128,-1,912.5,484.2,95.7,111.4,1\n128,-1,424.3,464.9,53.6,109.4,1\n128,-1,373.2,446.7,43,105.5,1\n128,-1,1228.6,445.4,41,102.3,1\n128,-1,786.8,451.6,97.9,259.4,1\n128,-1,1086.7,482.3,39.4,117.5,1\n128,-1,569.8,438.5,138.5,392.4,1\n128,-1,494.8,468.6,35.2,106.5,1\n128,-1,1004.6,445.7,39.3,101,1\n128,-1,1053,483.3,40,109.2,0.999\n128,-1,682.2,440.4,100.5,323.2,0.999\n128,-1,531.5,455.3,30.8,70.6,0.976\n129,-1,914,484.3,96.2,110.5,1\n129,-1,421.8,463.9,54.6,110,1\n129,-1,789,454.7,96.8,251.1,1\n129,-1,373.3,446.9,43.6,105,1\n129,-1,1087.3,481,39.3,118.8,1\n129,-1,1227.5,447.9,40.4,99.3,1\n129,-1,569.4,439.6,141.3,391.1,1\n129,-1,493.4,469.1,36.1,104.8,1\n129,-1,1005.5,444.5,38.6,102.6,1\n129,-1,1052.3,482.5,39.5,110.1,1\n129,-1,686.2,436.6,97.9,327.2,0.999\n129,-1,530.8,455.6,30.6,71.6,0.988\n130,-1,914.1,484.5,96.8,110.2,1\n130,-1,573.2,439.9,136.2,393.4,1\n130,-1,420.8,464.3,55,108.9,1\n130,-1,792.5,453.7,93,258.3,1\n130,-1,373.7,446.9,43.1,104.9,1\n130,-1,1226.8,448.9,40.6,97.8,1\n130,-1,1087.2,481.9,39.5,118.2,1\n130,-1,492.6,469.4,36.7,105.8,1\n130,-1,1006.3,444.5,38.8,102.3,1\n130,-1,1051.6,482.3,39.6,109.2,1\n130,-1,685.1,439.3,101.5,325.1,0.999\n130,-1,530.6,455.1,30.9,74.3,0.986\n135,-1,913.4,484.6,97.4,110.4,1\n135,-1,803.3,448.3,90.6,264,1\n135,-1,410.4,468.7,62.3,102.1,1\n135,-1,1219.8,446,40,102.4,1\n135,-1,575.4,449.9,140.6,387.5,1\n135,-1,373.2,446.2,42.8,105.7,1\n135,-1,1087.4,485.2,38,115.6,1\n135,-1,1003.4,444.2,38.6,103.3,1\n135,-1,488.4,468,38.9,104,1\n135,-1,1054.1,484.5,38.2,108.4,0.999\n135,-1,689,427.5,100.2,330.6,0.999\n135,-1,529.6,456.3,31.1,75.4,0.984\n135,-1,465.7,470.4,27.5,90.8,0.185\n136,-1,914.7,484.9,95,109.5,1\n136,-1,410.3,468.2,62,103.4,1\n136,-1,806.2,448.6,89.7,264.6,1\n136,-1,1219.8,446.5,39.2,101.8,1\n136,-1,574.5,447.2,140.6,396.5,1\n136,-1,1087.5,484.9,38.4,116.4,1\n136,-1,373.3,447.2,43,104.9,1\n136,-1,1002.9,444.1,38.4,102.8,1\n136,-1,487.2,467.9,40.1,104,1\n136,-1,689.5,438.5,101.5,317.6,1\n136,-1,1053,483.9,37.6,109.3,0.999\n136,-1,530.3,455.8,31,76.5,0.987\n136,-1,469.1,471.2,27.5,92.1,0.106\n141,-1,912.2,482.9,98.2,111.9,1\n141,-1,1212.9,446.3,40.6,103.4,1\n141,-1,405.9,466.8,62.7,103.8,1\n141,-1,567.6,437.8,155.3,427.7,1\n141,-1,1087.5,487.5,38,112.9,1\n141,-1,1003.1,443,38.3,103.4,1\n141,-1,697.7,433.9,113.8,331.8,1\n141,-1,373.9,446.1,42.8,105.6,1\n141,-1,482.4,468.3,41.5,105.8,1\n141,-1,816.4,449.6,89.8,266.9,1\n141,-1,1053.2,484.5,39.8,108.6,0.998\n141,-1,532.9,455.4,29.1,71.3,0.971\n141,-1,1107.8,458.3,36.1,86.3,0.686\n142,-1,913,482.5,97.7,112.9,1\n142,-1,405.6,466.4,60.6,104.3,1\n142,-1,1212,445.6,40.1,103.1,1\n142,-1,1088.1,486.9,38.1,113.9,1\n142,-1,569.6,444.8,148,414.9,1\n142,-1,1003.6,443.4,37.8,103.1,1\n142,-1,481.6,466,42.2,107.6,1\n142,-1,373.6,446.3,43,105.3,1\n142,-1,815.6,448.7,91.8,274.2,1\n142,-1,697.5,437.7,121.5,335.3,1\n142,-1,1052.9,484.3,39.8,109,0.998\n142,-1,526.9,459.3,29.7,69.7,0.967\n142,-1,1105.6,460.8,36.8,88.5,0.533\n154,-1,543.5,429.9,159.1,458.4,1\n154,-1,1196.2,447.7,39.4,100.3,1\n154,-1,399.2,468.3,64.4,104.3,1\n154,-1,722.2,436.2,120.8,337.1,1\n154,-1,1087.7,482.3,39.9,117.4,1\n154,-1,472,467,40.3,111.1,1\n154,-1,372.5,446.5,44.3,105.1,1\n154,-1,1002.2,443.1,38.2,103.9,1\n154,-1,832.2,446.9,90.2,289.7,1\n154,-1,1051.5,482.9,40.4,111.2,1\n154,-1,1128.7,458,34.2,87.5,0.999\n154,-1,891.4,439.2,76.3,235,0.971\n154,-1,500.6,455,29.3,98.6,0.54\n155,-1,541.6,427.9,160.6,461.1,1\n155,-1,1194.9,448.2,39.3,99.6,1\n155,-1,398.9,468,63.5,105.3,1\n155,-1,723.5,434.7,120.5,341,1\n155,-1,1088.1,482.6,39.4,117.2,1\n155,-1,1002.2,442.7,39,105,1\n155,-1,372,446.1,45,105.8,1\n155,-1,838.2,447.1,82.9,288.3,1\n155,-1,471.4,466.3,40,112.8,1\n155,-1,1051.7,483.1,40.1,111.3,1\n155,-1,1129.2,455.2,34.2,91.5,0.999\n155,-1,898.2,437.4,72.1,238.6,0.993\n155,-1,502,455.9,29.3,94.2,0.506\n157,-1,540.8,430.2,160.4,458.8,1\n157,-1,1191.3,447.4,40.1,100.3,1\n157,-1,399.6,468.7,62,104.7,1\n157,-1,1088.1,482.6,38.8,117.1,1\n157,-1,728,434.5,118.6,343.3,1\n157,-1,1000.7,443.5,38.5,102.7,1\n157,-1,371.2,445.9,45.1,106,1\n157,-1,841.2,446.1,82.6,287.6,1\n157,-1,1051.7,484.1,40.3,111,1\n157,-1,470.8,464.7,37.9,114.2,1\n157,-1,903.4,439.5,71.5,245.2,0.998\n157,-1,1128.3,450.7,35.6,93.8,0.998\n157,-1,500.3,454.9,25.1,90.2,0.062\n163,-1,538.7,424.7,176.2,469.1,1\n163,-1,400.5,466.2,62.1,106.3,1\n163,-1,1182.7,445.5,41,103.3,1\n163,-1,999.3,442.5,38.6,106.4,1\n163,-1,747.3,433.9,111.2,343.9,1\n163,-1,1087.5,484.1,39.4,116.3,1\n163,-1,372.4,446.8,43.3,104.2,1\n163,-1,469.4,465.4,34.9,108.6,1\n163,-1,1052.1,482.3,39.1,112.9,1\n163,-1,850,453.4,95.9,281.6,0.999\n163,-1,915,447.9,84.6,250.9,0.999\n163,-1,1140,452,31.1,93.2,0.988\n163,-1,506.6,452.3,24.2,87.7,0.217\n170,-1,534.4,428.3,221.5,470.2,1\n170,-1,405.3,468.2,56.5,102.9,1\n170,-1,1088.8,484.8,38.2,115.2,1\n170,-1,758.2,438,118.5,352.3,1\n170,-1,868.7,446.1,125.5,296.1,1\n170,-1,372.1,445.4,43.2,105,1\n170,-1,1174.4,449.3,41.1,98.8,1\n170,-1,1052,481.1,39.4,111.6,1\n170,-1,469.2,467.4,34.8,106.7,0.999\n170,-1,1146.4,453,33.8,92.1,0.985\n170,-1,503.2,457.7,30.2,99.4,0.966\n170,-1,995.3,441.8,40.7,106.1,0.717\n182,-1,577.1,421.1,203.1,492.1,1\n182,-1,406.9,469.6,50.8,105.4,1\n182,-1,782.9,435.1,109.9,361.8,1\n182,-1,1087,485.9,39.5,114.3,1\n182,-1,1156.1,446.8,38.2,102.5,1\n182,-1,506.9,455.1,37.8,107.2,1\n182,-1,370.6,446.1,45.2,105.2,1\n182,-1,907.5,447.1,105.8,298.4,1\n182,-1,464.2,467.5,36.7,109.7,0.999\n182,-1,972.2,435.6,104.7,272.4,0.998\n182,-1,552.8,453.5,31.7,88.3,0.779\n182,-1,571.1,454.4,34.3,99.3,0.607\n182,-1,581.3,434.3,21.9,43.2,0.337\n191,-1,625.8,421.2,170.7,521.2,1\n191,-1,406.5,468.4,51.9,107.2,1\n191,-1,566.7,455.4,60.2,160,1\n191,-1,799.1,437.2,113.3,357.9,1\n191,-1,941.2,444.3,97.3,309.1,1\n191,-1,371,445.3,44.6,106.2,1\n191,-1,509.6,454.2,35.1,111.1,1\n191,-1,1086.6,481.8,40.7,115.3,1\n191,-1,1147.9,449.6,40.3,99.2,0.999\n191,-1,459.9,467.9,40,109,0.999\n191,-1,1006,437,82.9,271.3,0.996\n191,-1,1097.8,441.3,39.4,103.6,0.971\n191,-1,588.1,422.8,23.4,45.5,0.746\n191,-1,1171.8,450.5,32.9,95.5,0.606\n191,-1,548.7,433.8,19.8,44.7,0.13\n191,-1,602.3,413.7,22.3,48,0.116\n191,-1,559.6,395.8,37.3,105.4,0.058\n206,-1,405.7,465.7,51.7,108.2,1\n206,-1,1190.7,449.5,34.8,96.3,1\n206,-1,580.3,455.6,64.3,170.5,1\n206,-1,833.4,433.9,151.7,379.6,1\n206,-1,680,421.4,164.6,557,1\n206,-1,998.9,445,108.2,321.7,1\n206,-1,370.3,446.2,44.5,105.6,1\n206,-1,511.8,456.8,32.9,108.7,1\n206,-1,456.2,465.2,32.9,109.5,0.997\n206,-1,659.2,464.3,26.5,73.7,0.969\n206,-1,1126.7,453.4,41.8,96.6,0.847\n206,-1,536.2,456.1,25,80.4,0.686\n206,-1,590.7,420.1,19.9,39.2,0.579\n206,-1,578.6,428.5,20,37.4,0.559\n206,-1,563.4,459.1,26,64.9,0.504\n206,-1,1060.2,441.1,84.3,268.1,0.282\n206,-1,547.4,419.5,36.6,93.1,0.079\n206,-1,610.3,414.1,20.7,44.6,0.062\n208,-1,406.9,466.1,52.4,107.4,1\n208,-1,582.8,455.1,61.9,169.7,1\n208,-1,691.6,419.1,159.9,562.5,1\n208,-1,1193,450.5,34.6,97.1,1\n208,-1,836.8,433.8,153.4,383.9,1\n208,-1,1010.5,440.5,127.6,327.2,1\n208,-1,513.8,456.5,33.1,107.2,1\n208,-1,371.8,446.6,43.9,104.9,1\n208,-1,449.5,465.5,37.8,108.3,0.998\n208,-1,658.5,462.3,25.6,77.1,0.987\n208,-1,558.8,459.2,25.4,64.4,0.935\n208,-1,591.6,423.6,20.2,40.7,0.701\n208,-1,578.5,432.2,19.6,38.3,0.575\n208,-1,534.1,457.9,25.6,87.1,0.457\n208,-1,610.2,416,20.4,46.1,0.253\n210,-1,585.9,457.5,59.3,164.7,1\n210,-1,1014.2,446,151.8,321.2,1\n210,-1,697.2,417.1,159.8,564.9,1\n210,-1,513.3,456,33.7,108.3,1\n210,-1,841.3,434.6,151.4,385,1\n210,-1,1194.4,452.8,35.5,96.1,1\n210,-1,370.5,447.4,44.7,104.6,1\n210,-1,406.3,468.3,50.8,106.2,1\n210,-1,447,470.2,40.7,104.3,0.999\n210,-1,656.3,462.4,24.5,74.2,0.984\n210,-1,562.1,458.7,23.8,61.8,0.943\n210,-1,595.4,421.6,21,40.9,0.663\n210,-1,580.4,431.5,19.9,37.9,0.448\n210,-1,533,456.4,26.1,90.6,0.217\n212,-1,700.9,419.3,164,566.5,1\n212,-1,590,456,57.3,165.1,1\n212,-1,1017.8,444.4,167,328.8,1\n212,-1,512.9,455,34.2,111.5,1\n212,-1,1196.5,451.8,37.4,96.7,1\n212,-1,858.7,429.5,144.1,390,1\n212,-1,406.8,466.8,50.6,107.6,1\n212,-1,370.1,446.3,45.6,105.2,1\n212,-1,447.7,466.7,39,106.7,0.998\n212,-1,659.5,463.2,27.1,75.5,0.993\n212,-1,557.5,457.3,23.9,62,0.953\n212,-1,595.6,421.1,20.2,38.6,0.336\n212,-1,578.1,431.6,19.1,37.5,0.141\n212,-1,563.8,455.3,39.2,88.6,0.102\n213,-1,700.3,415.8,167,571.1,1\n213,-1,591.4,453.3,56.3,169,1\n213,-1,1018.3,450,164,323.8,1\n213,-1,514.4,455,33.7,110.1,1\n213,-1,864.2,430.4,140.5,382.3,1\n213,-1,1196.3,450.9,37.7,96.8,1\n213,-1,408.2,467.3,50.3,108.1,1\n213,-1,370.7,446.9,45,104.6,1\n213,-1,442.9,467,42.7,106.7,0.998\n213,-1,657.8,463.6,25.1,72.9,0.993\n213,-1,555.5,456.8,24.1,63.1,0.948\n213,-1,594.9,420.6,20.2,39.1,0.362\n213,-1,538.5,451.2,30.3,89.5,0.134\n213,-1,577.4,431.4,19.2,37.7,0.111\n214,-1,592.4,452.1,56.2,168.1,1\n214,-1,710.2,410.5,163.2,572.6,1\n214,-1,1021.3,446.8,161.9,326.7,1\n214,-1,513.9,455.2,33.9,109.9,1\n214,-1,869.2,433.1,135.7,382.4,1\n214,-1,370.8,447.3,45.5,104.2,1\n214,-1,1198.2,450.8,38.3,96.1,1\n214,-1,408.3,467.3,49.3,108,1\n214,-1,443.9,467.8,42,106.4,0.999\n214,-1,659.7,464.9,26.9,74.1,0.992\n214,-1,556.8,457.7,23.3,61.4,0.958\n214,-1,594.7,420.1,19.6,38.2,0.398\n214,-1,578.6,431.8,19.2,37.9,0.184\n214,-1,536.5,452.2,29.3,90.1,0.117\n215,-1,593.8,452.7,56.2,167.3,1\n215,-1,711,413.5,171.6,572.1,1\n215,-1,1028.5,442.7,160,330.1,1\n215,-1,512.9,455.8,34.9,110.1,1\n215,-1,872.9,435.7,134.1,387.5,1\n215,-1,408.4,467.9,51.2,106.4,1\n215,-1,371.1,447.6,45.6,104.4,1\n215,-1,443.6,470.1,41.2,104.2,0.999\n215,-1,1200.6,446.5,39.2,101.2,0.998\n215,-1,659.9,464.5,25.7,73.4,0.996\n215,-1,552.9,457.3,23.7,61.6,0.957\n215,-1,594.4,422.1,19.2,36.8,0.34\n215,-1,575.4,433.7,18.4,36,0.078\n215,-1,562.7,454.6,48.6,83.2,0.06\n219,-1,1039.5,443.5,153.7,334.9,1\n219,-1,598,451.4,56.7,174.4,1\n219,-1,719.6,416.8,189.7,571.4,1\n219,-1,514.5,454.3,35.5,111,1\n219,-1,371.7,447.4,44.3,103.8,1\n219,-1,888.4,434.4,126.2,391,1\n219,-1,437.4,467.1,44.5,108.4,1\n219,-1,1209.2,451.3,39.5,100.3,0.998\n219,-1,658.2,465.3,24.7,70,0.979\n219,-1,551.2,457,24.9,66.8,0.936\n219,-1,413.1,467.5,45,101.8,0.8\n219,-1,594,422.3,18.9,37.5,0.23\n219,-1,558.9,452.2,45.7,75.4,0.084\n225,-1,372.7,446.8,43.3,106,1\n225,-1,733.4,406.9,246.6,588.1,1\n225,-1,1096.5,449.7,104.6,333.5,1\n225,-1,605.9,452,55.8,181.5,1\n225,-1,514.7,453.4,34.7,111.7,1\n225,-1,429.6,465.9,44.8,112.4,1\n225,-1,1051.7,483.3,41,110.9,0.999\n225,-1,897.6,428.7,133.1,415.6,0.967\n225,-1,551.1,457.4,25,65,0.938\n225,-1,660,465.2,27.5,74,0.937\n225,-1,536.2,457.3,27,74.4,0.819\n225,-1,463.9,456.4,36.9,107.4,0.445\n225,-1,598.5,424,19.9,37,0.198\n236,-1,790.6,410.6,248.2,595.6,1\n236,-1,619.6,448.1,63.7,187.1,1\n236,-1,1134.4,447.3,147.7,351.7,1\n236,-1,370.7,447.5,44.4,106.2,1\n236,-1,420.8,464.4,42.2,110.8,1\n236,-1,513.4,453,34.2,111.8,1\n236,-1,1087.5,483.6,40.3,114.1,1\n236,-1,1048.4,485.5,40.9,109,0.991\n236,-1,592.1,463,25.7,60,0.979\n236,-1,468.8,454.7,32,106.1,0.967\n236,-1,547.4,457.7,26,65.8,0.92\n243,-1,631.2,451.5,74.3,185.4,1\n243,-1,1185.2,439.3,118.7,359.4,1\n243,-1,837.4,413.7,205.4,597.8,1\n243,-1,370.4,446.8,44.4,105.3,1\n243,-1,419.1,463,37,112.7,1\n243,-1,513.3,452.9,33,112,1\n243,-1,1084.9,481.2,42.1,117.1,1\n243,-1,1117.7,444.6,40.6,103.2,0.997\n243,-1,592.7,457.2,22.7,68.3,0.996\n243,-1,475.1,456.4,32.1,105.4,0.983\n243,-1,555.3,458.1,23.9,62.2,0.933\n243,-1,443.4,459.4,44,103.9,0.277\n243,-1,1050.9,488,38.9,104.4,0.071\n243,-1,770.6,447.5,129.8,415.6,0.071\n246,-1,632.4,449.8,77.2,188.8,1\n246,-1,875.7,405,175.7,615,1\n246,-1,416.9,465,37.6,110.2,1\n246,-1,370.4,447,44.9,104.5,1\n246,-1,1207.1,442.4,114.5,356.8,1\n246,-1,513.4,453.1,33.2,111.8,1\n246,-1,1083.5,484.9,43.4,113.5,1\n246,-1,590,460.3,22,65.1,0.996\n246,-1,1115.2,445.5,40.5,102.5,0.995\n246,-1,777.2,438.5,149.8,437.8,0.993\n246,-1,474.8,456.7,33.4,107.5,0.986\n246,-1,552.2,458.8,24.5,62.2,0.924\n247,-1,881.6,402.5,173.9,632,1\n247,-1,635.2,448.4,74,189.3,1\n247,-1,1210.4,442.3,121.4,360.1,1\n247,-1,418,465.5,37.8,110,1\n247,-1,370.1,446.7,45,105.4,1\n247,-1,513.8,452.2,32.7,112.6,1\n247,-1,1083.8,479.4,43.9,118,0.999\n247,-1,589.6,460,21.6,64.3,0.995\n247,-1,779.6,439.5,153.1,439.1,0.994\n247,-1,473.4,456.4,34,108.5,0.989\n247,-1,1114.2,443.6,39.1,106.8,0.977\n247,-1,547.1,458.6,25.2,64.8,0.888\n249,-1,899.3,402,168.1,644.8,1\n249,-1,639.5,447.3,69.9,190.9,1\n249,-1,417.3,466.1,38.7,109.6,1\n249,-1,370.7,447.3,45,104.4,1\n249,-1,1212.8,439.5,152.1,372.8,1\n249,-1,513.5,451.2,32.5,114.3,1\n249,-1,587.3,458.1,22.1,64.2,0.996\n249,-1,470.3,457.2,34.9,109.2,0.996\n249,-1,784,436.5,147.5,451.1,0.995\n249,-1,549,457.6,24.4,63,0.91\n249,-1,1080.3,469.9,47.9,126.4,0.881\n249,-1,1108,441.1,41.9,116.6,0.46\n249,-1,492.2,454.8,26.3,109.4,0.175\n252,-1,1217.6,441.7,198.5,379.7,1\n252,-1,646.4,450.5,66.1,184.8,1\n252,-1,370.6,446,44.6,106.8,1\n252,-1,415.4,463.4,39,112.8,1\n252,-1,917.4,402.5,166,649.8,1\n252,-1,513.5,451.8,32.9,113.2,1\n252,-1,798.1,436.2,140.9,450.4,0.999\n252,-1,591,459.2,23,62.8,0.997\n252,-1,470.1,458.5,32.7,105.8,0.994\n252,-1,549.3,459.2,24.2,62.8,0.91\n252,-1,763.9,447.2,25.1,76.4,0.472\n252,-1,495.2,455.6,22.5,107.8,0.348\n252,-1,621.1,466.9,25.9,58.7,0.246\n252,-1,1076.1,488.3,49.7,107,0.16\n252,-1,1106.7,446.4,42.1,109.3,0.15\n253,-1,1228.6,437,197.4,384,1\n253,-1,651.4,448.7,61.3,187.8,1\n253,-1,414.3,462.8,39.6,113.3,1\n253,-1,371.1,445.6,44.4,107.8,1\n253,-1,918.8,406.7,162.3,640.3,1\n253,-1,513.4,451.8,33.7,113.8,1\n253,-1,798,435.6,138.1,451.1,0.998\n253,-1,589.8,458.1,24.2,63.9,0.998\n253,-1,471.6,459,31.8,105.6,0.991\n253,-1,547.9,459.4,24.7,64.5,0.89\n253,-1,764.8,449.8,24,75.5,0.879\n253,-1,618.1,461.5,23.6,60.1,0.696\n253,-1,497.3,454.9,22.5,109.2,0.301\n253,-1,1856.4,486.9,64.6,281.1,0.218\n253,-1,1104.5,448.3,44.9,107.7,0.112\n253,-1,1078.7,486.8,48.4,104.1,0.056\n264,-1,668.1,452.5,67.1,190.8,1\n264,-1,1320.6,435,136,382.3,1\n264,-1,1675.6,412.6,218.6,361.4,1\n264,-1,512,454,33.8,109.3,1\n264,-1,940.6,407,172.8,641.4,1\n264,-1,402.8,465,42.6,111.9,1\n264,-1,822.3,433.6,128,484.6,1\n264,-1,370.4,445.8,44.5,107.9,1\n264,-1,1298,447.5,44.4,99.6,0.995\n264,-1,591.3,461.3,23.1,61.9,0.995\n264,-1,468,458.7,28,103.4,0.991\n264,-1,778.3,453.2,24.7,71.1,0.974\n264,-1,606.3,461.7,23.8,60.1,0.932\n264,-1,556.6,461.9,23,60.9,0.922\n268,-1,511.7,454.6,35.1,110.1,1\n268,-1,678.7,450,65,190,1\n268,-1,1657.2,416.2,177.2,344.3,1\n268,-1,823.3,436.2,131.9,481.6,1\n268,-1,949.8,410.2,167.4,642.4,1\n268,-1,1351.4,438.8,145.9,399.3,1\n268,-1,397.4,464.9,43.9,113,1\n268,-1,370.3,446.7,45.3,108.4,1\n268,-1,462.1,460.2,31.5,105.9,0.993\n268,-1,583.6,459.4,23.8,62.7,0.991\n268,-1,653.2,467.5,26.2,62.8,0.971\n268,-1,559.4,462.3,23.7,60.1,0.945\n268,-1,620.5,460.3,23.9,59.5,0.94\n268,-1,782,451.4,25.7,76.7,0.932\n268,-1,1304.9,447.6,43.3,101.3,0.089\n291,-1,741.2,444.3,70,208,1\n291,-1,850.5,431,168.5,494.5,1\n291,-1,509.6,454.9,34.4,109,1\n291,-1,1354.5,439.6,51.7,112.9,1\n291,-1,1496.2,434.4,248.6,442.8,1\n291,-1,1003.1,402,153,633.7,1\n291,-1,406.7,470.5,48.1,105.2,1\n291,-1,659.2,458.5,26.7,76.2,1\n291,-1,1154.1,446.2,48.7,110.8,1\n291,-1,383,461.7,43.6,111.3,0.997\n291,-1,577.7,462.8,25.7,60.2,0.986\n291,-1,451.3,459.6,31.2,100.4,0.975\n291,-1,561.5,462,25.3,60.5,0.918\n291,-1,545.3,461.2,27,68.4,0.837\n291,-1,598,460,24.5,56.8,0.757\n291,-1,469.5,458.6,35.6,95.5,0.536\n292,-1,746.8,445,66.1,206.4,1\n292,-1,850.3,433.3,171.7,491.5,1\n292,-1,1355.8,439.7,50.3,113.4,1\n292,-1,508.7,455,35.5,109.5,1\n292,-1,1505.5,436.2,250,447.4,1\n292,-1,998.1,407.2,156.1,631.6,1\n292,-1,1154.9,444.7,48,112.5,1\n292,-1,658.2,460,27,74.6,1\n292,-1,408,470.9,46.7,104.4,1\n292,-1,383.3,462.4,43.5,111.7,0.999\n292,-1,577.1,462.6,25.6,58.9,0.989\n292,-1,448.1,460.7,30.3,99.7,0.976\n292,-1,558,461.7,25.5,60.4,0.934\n292,-1,542.2,460.7,27.5,69.6,0.853\n292,-1,599.9,459.7,24.7,56.3,0.72\n292,-1,822.7,479.3,50,70.5,0.401\n292,-1,473,458,34.5,95.9,0.305\n292,-1,1420.4,418.1,144.7,305.7,0.25\n300,-1,767.3,443.6,69.2,211.2,1\n300,-1,507.7,455.4,35.9,108.4,1\n300,-1,1587.3,429.8,189.2,461,1\n300,-1,881.1,423.5,147.6,515.3,1\n300,-1,1379.9,417.2,109.3,298.2,1\n300,-1,1168.5,443.3,48.7,111.5,1\n300,-1,1014.6,404.2,150.9,628.4,1\n300,-1,835,475.3,51.2,73.3,1\n300,-1,410.7,471.2,45.9,104.2,1\n300,-1,658.9,463.9,26.5,72,1\n300,-1,382.9,463.2,43.5,112.2,1\n300,-1,579.2,460.2,25.9,58.9,0.988\n300,-1,559.8,460.5,25.1,61,0.918\n300,-1,546.1,459.1,26.1,68.5,0.878\n300,-1,598.7,457.7,24.8,59,0.834\n306,-1,502.1,456.1,40.9,109,1\n306,-1,781.8,443.9,69.8,213.5,1\n306,-1,1015,409.1,188.8,617,1\n306,-1,1662.3,422,180.6,480.2,1\n306,-1,1321.4,428.5,122.5,274.8,1\n306,-1,410.4,468.9,48.4,105.6,1\n306,-1,893.7,422.9,139.9,525.3,1\n306,-1,657.7,462.3,25.7,72.5,1\n306,-1,835.6,471.9,54.5,77,1\n306,-1,1187.9,449.2,37.3,99.4,0.999\n306,-1,381.8,463.8,44.1,111.4,0.999\n306,-1,578.8,461.6,24.6,58.3,0.989\n306,-1,558.3,461,24.6,60.1,0.928\n306,-1,542.3,460.5,25.8,66.8,0.874\n306,-1,609.9,459.5,24,56.8,0.855\n306,-1,9,459.8,89.9,397.5,0.161\n307,-1,501.1,456,42.2,109,1\n307,-1,1666.2,420.9,193.1,491,1\n307,-1,785,441.7,68.9,217.1,1\n307,-1,1304.8,425.7,137.2,276.2,1\n307,-1,1017,403.9,195.2,607.8,1\n307,-1,410.8,470.3,47.7,105,1\n307,-1,898.9,422.1,133,525.5,1\n307,-1,658,462.7,26.1,73.1,1\n307,-1,1191.1,450,35,96.2,0.999\n307,-1,380.9,464.4,44,110.6,0.999\n307,-1,835.6,471.7,54,76.8,0.997\n307,-1,578.7,461.9,24.6,58.8,0.989\n307,-1,557.9,461.8,24.8,60.2,0.931\n307,-1,542.3,461,25.5,66.3,0.884\n307,-1,611.4,460.1,23.9,56.2,0.845\n307,-1,14.1,388.5,78.8,502.9,0.501\n319,-1,491.9,454.9,48.1,110.6,1\n319,-1,896.8,413.9,142.6,538.7,1\n319,-1,15.7,399.5,275.7,455.4,1\n319,-1,1429.9,438.9,47.8,111.8,1\n319,-1,1038.6,412.7,207.3,605,1\n319,-1,409.4,468.6,47.2,105.9,1\n319,-1,658.8,463.1,26,71.9,1\n319,-1,817.1,440.5,76.6,216.5,1\n319,-1,1237.4,431.9,104.4,253.6,1\n319,-1,381.4,464.7,44.7,112,1\n319,-1,580.5,459.5,22.6,57.6,0.98\n319,-1,628.8,458.8,25.2,61.1,0.961\n319,-1,1207.9,448.3,34.4,98.2,0.948\n319,-1,1777.7,418.6,143.3,510.2,0.948\n319,-1,551.9,460,22.7,58,0.939\n319,-1,601.3,456.3,39.2,61.1,0.76\n322,-1,1437.7,439,48.7,113.7,1\n322,-1,32.5,398.8,274.4,458,1\n322,-1,491.4,454.4,46.1,110.4,1\n322,-1,896.2,414.8,143.4,537.5,1\n322,-1,1049.9,412.4,196.6,606.6,1\n322,-1,1210.9,432.8,121.9,254.4,1\n322,-1,824,441.9,82.6,218.5,1\n322,-1,409.8,468.8,47.2,105.3,1\n322,-1,657.8,462.8,26.9,73.6,1\n322,-1,380.8,464,44.7,112.6,1\n322,-1,1721.7,402.9,160.9,451.3,0.998\n322,-1,583.6,459,22.6,58,0.974\n322,-1,623.8,458.1,25,60.2,0.953\n322,-1,554,459.4,22.3,58.6,0.936\n322,-1,800.6,471.2,41.8,70.8,0.428\n323,-1,1439.8,438.5,51.8,114.6,1\n323,-1,490.9,454,46,110.9,1\n323,-1,28.4,405.5,286.9,449.9,1\n323,-1,895.8,411.4,143.8,544.6,1\n323,-1,1049.9,412.2,193.3,605.2,1\n323,-1,410.2,470.8,46.6,102.9,1\n323,-1,1732.7,402.4,159.3,447.5,1\n323,-1,380.3,465.1,45.7,112.3,1\n323,-1,658.2,463,26.3,73.6,1\n323,-1,827.4,442.7,83.2,216.9,1\n323,-1,1210.3,439.9,123,247.5,0.999\n323,-1,583.8,459.2,22.7,57.6,0.976\n323,-1,623,458.3,24.7,59.5,0.949\n323,-1,556.8,460.3,22.2,58.7,0.938\n323,-1,799.7,472.5,43.3,66.4,0.854\n330,-1,1057,400.4,190.5,611.1,1\n330,-1,489.1,453,42.9,111.7,1\n330,-1,1455.4,441.1,48,108.5,1\n330,-1,898.7,422.4,144.9,525.3,1\n330,-1,797.9,477.5,54.8,60.7,1\n330,-1,411,469.3,45.5,104.8,1\n330,-1,151.8,405.7,180.7,424.8,1\n330,-1,380.4,462.7,44.8,114.5,1\n330,-1,658.1,463.3,26.8,73.3,1\n330,-1,1767.7,402,153.3,466.2,0.994\n330,-1,631.5,459.8,25.4,64.1,0.96\n330,-1,562.2,460.5,20.2,58.7,0.945\n330,-1,582.9,459.3,21.7,59,0.918\n330,-1,845,472.9,48.7,86.8,0.535\n332,-1,1058,393.8,198.2,617.3,1\n332,-1,489.8,453.3,40.4,110.8,1\n332,-1,1461.5,442.7,46.7,108.4,1\n332,-1,410.1,468.9,46.6,105.9,1\n332,-1,796.6,475.8,59.8,62,1\n332,-1,192,399.9,151.8,422.7,1\n332,-1,902.7,423,142.9,525,1\n332,-1,834.9,471.9,54.7,81.2,1\n332,-1,659.4,462.8,27,73.6,1\n332,-1,379,461.1,46.6,115.2,1\n332,-1,1769.9,401.7,151.1,456.8,0.987\n332,-1,631.2,459.7,26,64.3,0.969\n332,-1,556.5,462.3,20.8,58.2,0.942\n332,-1,585.4,460.6,21.3,57.8,0.847\n332,-1,514.7,455.2,36.7,81.5,0.088\n332,-1,2,442,72.6,353.2,0.07\n334,-1,490.7,454.4,38.7,110.5,1\n334,-1,1468.5,439.2,45.9,111.7,1\n334,-1,1059.3,404.4,193.7,611.9,1\n334,-1,903.4,422.3,143.4,523.2,1\n334,-1,833.1,472.4,56.1,77,1\n334,-1,215.7,405.4,153.7,424.4,1\n334,-1,410.8,469.9,46,104.6,1\n334,-1,797.1,476.6,59.3,60.8,1\n334,-1,659.4,460.5,27.1,76.7,1\n334,-1,383.4,464.2,44.1,112.2,0.999\n334,-1,631.6,460.1,25.2,64.8,0.957\n334,-1,559.9,462.5,21.2,58.4,0.953\n334,-1,586.9,459.2,22.1,59.8,0.926\n334,-1,1.1,430.5,127.7,339.3,0.92\n334,-1,607.2,456.6,38.6,65.1,0.855\n334,-1,1777.6,411.6,143.4,442.2,0.621\n334,-1,512.1,455.1,36.5,84.4,0.057\n336,-1,488.4,453.1,37.1,112.7,1\n336,-1,223.6,405.7,180.9,424,1\n336,-1,835.9,471.3,53.1,79.6,1\n336,-1,1473.1,438.7,46,113.5,1\n336,-1,1066.7,390.5,188.9,630.3,1\n336,-1,903,418.9,146.6,530,1\n336,-1,795.7,475.6,56.3,61.3,1\n336,-1,412.1,472.8,44.3,103.1,1\n336,-1,659.1,463.1,26.1,74.1,1\n336,-1,1,445.9,142.2,346.4,0.998\n336,-1,382.2,465.3,40.3,114.3,0.983\n336,-1,632.1,459.5,24.7,64,0.965\n336,-1,560.2,461.5,20.5,58.1,0.957\n336,-1,581.4,459.9,22.3,58,0.887\n336,-1,519.7,454.8,34,72.8,0.29\n344,-1,835,473.4,53.6,77.4,1\n344,-1,261,412.8,202.6,409.5,1\n344,-1,1067.3,416.7,197.5,591.8,1\n344,-1,486.9,453.6,33.9,112.1,1\n344,-1,905.7,422.6,151.4,524.5,1\n344,-1,9.9,446.1,151.9,344,1\n344,-1,796.3,475.7,56.2,63.3,1\n344,-1,1488.7,436.7,52.7,112.7,1\n344,-1,658.3,462.8,26.6,74.4,1\n344,-1,634.2,460.3,24.5,63.8,0.959\n344,-1,579.5,459.6,22.6,58.7,0.937\n344,-1,559.3,460.3,20,59.3,0.927\n344,-1,607.2,457,39.6,62.7,0.712\n344,-1,535.9,458.1,34.7,63.6,0.505\n345,-1,835.7,472.7,53.2,77.1,1\n345,-1,1068.1,410.6,190.8,607.4,1\n345,-1,264.7,406.5,201.9,414.6,1\n345,-1,485.3,452.7,34.3,114,1\n345,-1,905.5,422.9,147.8,522.4,1\n345,-1,796.5,475.2,56.1,63.1,1\n345,-1,658.4,463,27.2,76.2,1\n345,-1,1493.1,436.8,50.2,112.3,1\n345,-1,23.4,436.3,144.8,359.3,1\n345,-1,635.5,460.6,24.4,64.8,0.961\n345,-1,581.8,459.2,21.9,58.5,0.925\n345,-1,557.5,460.3,19.1,58.7,0.883\n345,-1,608.7,457.4,41.4,64,0.854\n347,-1,836,472.1,53.7,77.7,1\n347,-1,1072.6,410.7,192.3,607,1\n347,-1,906.4,419.8,145.9,528.2,1\n347,-1,484.8,452.9,35.2,113.6,1\n347,-1,1500.9,437.3,46,112.8,1\n347,-1,280.6,400.1,186.9,419.8,1\n347,-1,796.2,475.4,56.7,63.1,1\n347,-1,53.4,440.1,132.2,328.7,1\n347,-1,659.4,462.7,26.9,75.2,1\n347,-1,639.1,461.9,25.2,66.7,0.951\n347,-1,584.9,457.7,22.3,59.7,0.912\n347,-1,558.1,459.6,19.6,58.9,0.894\n354,-1,1071.9,397.5,194.4,604.3,1\n354,-1,836.9,471,52,78.8,1\n354,-1,914.4,422.5,142.5,516.6,1\n354,-1,797.3,474.1,55.8,64.8,1\n354,-1,1520.8,437.1,44,112,1\n354,-1,372.3,398,127.5,408.8,1\n354,-1,90.6,442.5,190.5,336.2,1\n354,-1,660.1,462.1,28.2,75.8,0.999\n354,-1,484.1,456.3,29.8,106.5,0.998\n354,-1,633.5,460.3,26.9,68.8,0.983\n354,-1,556.8,459.2,20.6,59,0.957\n354,-1,586.1,459.1,22.4,57.7,0.905\n354,-1,514.2,457.4,25,68.7,0.767\n354,-1,869.5,456.2,29.9,72.5,0.696\n354,-1,6.8,452.4,68,397.2,0.203\n361,-1,835.2,471.5,54.9,78.8,1\n361,-1,1070.1,406.4,204.3,609.3,1\n361,-1,1533.4,436.9,46.9,113.6,1\n361,-1,2.4,447,227.5,413.8,1\n361,-1,926.5,417.8,143.6,526.2,1\n361,-1,397.9,407.2,188.4,389.1,1\n361,-1,797.4,475.7,56.4,62.1,1\n361,-1,630.1,457.1,28.5,75.1,0.998\n361,-1,881.3,457.3,32.5,69.5,0.936\n361,-1,564.1,459.1,17.3,59.2,0.844\n361,-1,658,462.6,25.9,71.8,0.82\n361,-1,595.4,458.3,21.6,56.5,0.799\n361,-1,137.4,440.2,158.3,340.9,0.123\n365,-1,835.9,471.3,54.1,79,1\n365,-1,1070.9,404.7,209.6,602.7,1\n365,-1,406,410.6,196.5,382.2,1\n365,-1,10.4,438.1,217.7,410.1,1\n365,-1,1546.1,435.5,46.4,113.9,1\n365,-1,796.5,475.8,56.8,61.4,1\n365,-1,932.7,418.7,141.4,531.9,1\n365,-1,629.5,458.4,27.7,72.5,1\n365,-1,210,442.2,109.8,324.5,0.999\n365,-1,589.6,460.9,19.6,55.9,0.877\n365,-1,889.7,452,27.3,65.2,0.827\n365,-1,563.7,462.8,17.7,58.5,0.814\n365,-1,380.9,463.5,41.9,103.6,0.74\n365,-1,656.3,460.6,23.6,69.1,0.217\n369,-1,836.9,472.2,53.7,78,1\n369,-1,1075.1,409,208.5,603.7,1\n369,-1,410,411.5,199.8,381.3,1\n369,-1,376.9,463,49.8,115.3,1\n369,-1,797.6,475.8,55.9,62.1,1\n369,-1,938,427.1,144.6,518.4,1\n369,-1,626.5,458.5,29.5,73.5,1\n369,-1,232.3,440.2,141.1,321.7,1\n369,-1,1549.1,435.2,48.1,111.7,1\n369,-1,92.1,445.2,141,387.1,1\n369,-1,590.6,458.9,22.1,58.8,0.918\n369,-1,886.8,456.1,26.7,59.8,0.613\n369,-1,417.8,466.2,33.2,100.4,0.35\n370,-1,836.7,471.8,53.2,78.9,1\n370,-1,1073.8,407.8,211.4,610.4,1\n370,-1,376.4,463.6,50.5,115.1,1\n370,-1,942.4,426.4,141.4,514.5,1\n370,-1,414.9,409.1,190.4,382.3,1\n370,-1,797,475.6,56.5,62.8,1\n370,-1,625.7,458.4,30,73.5,1\n370,-1,1550.9,435.8,47.7,112,1\n370,-1,115.7,438.7,126.2,387.8,1\n370,-1,235.2,435.8,158.3,327.7,1\n370,-1,412.4,466,37.9,105.3,0.92\n370,-1,594.9,458.3,21.8,58.6,0.887\n370,-1,889.1,455.6,26.1,58.5,0.474\n371,-1,836.3,472,53.2,78.6,1\n371,-1,1072.5,411.4,213.3,605.1,1\n371,-1,426.5,409.8,179.3,379.6,1\n371,-1,947.4,426.3,136.6,515.8,1\n371,-1,796.6,476.1,56.4,62.1,1\n371,-1,378.5,462.5,48,117.6,1\n371,-1,123.5,440.2,130.5,387.1,1\n371,-1,626.4,457.9,29.6,72.6,1\n371,-1,230.1,431.8,167,325.1,1\n371,-1,1550.8,437.3,48,110.6,0.999\n371,-1,414.2,466.7,39.5,108.2,0.979\n371,-1,889.9,455.5,26,58.7,0.345\n371,-1,580.7,457.4,26.4,72.4,0.239\n374,-1,835.1,473,54.1,77.9,1\n374,-1,1078,406.2,214.6,607.5,1\n374,-1,474.7,404,147.3,377,1\n374,-1,952.1,426.5,137.7,514.8,1\n374,-1,411.7,467.3,45.2,108.9,1\n374,-1,796.4,476.2,55.8,61,1\n374,-1,148.9,446.3,162.5,376.1,1\n374,-1,627,455.2,30.4,76.5,0.999\n374,-1,381,459.7,42.9,121.3,0.988\n374,-1,234.2,441.8,182.1,308.6,0.548\n374,-1,452,458.6,27.8,91.5,0.366\n382,-1,835.8,472.7,53.3,76,1\n382,-1,1081.4,399.7,209.3,608.8,1\n382,-1,536.5,408.8,137.2,358.2,1\n382,-1,181.5,446.8,199.9,370.9,1\n382,-1,1,452.8,185.5,368.8,1\n382,-1,796.6,476.2,55,61.7,1\n382,-1,471.1,453.3,40.2,112.9,1\n382,-1,967.4,427.7,139.8,521.2,1\n382,-1,520.3,457.3,26.8,72.1,0.727\n382,-1,315.9,438.7,125.3,309.6,0.672\n382,-1,424.9,469.6,34.5,97.3,0.441\n383,-1,836.4,472.6,52.9,76.7,1\n383,-1,1081.4,414.4,215,599.6,1\n383,-1,540.4,410.9,136.6,360.5,1\n383,-1,4,449.8,192.4,366.1,1\n383,-1,191.3,453.6,186.4,365.2,1\n383,-1,796.3,476,55.3,61.8,1\n383,-1,470.8,454.4,39,108,1\n383,-1,969.8,421.2,134.5,520,1\n383,-1,338.7,452.4,106.9,290.3,0.977\n383,-1,516.4,461.6,25.7,66.9,0.899\n383,-1,427,468.9,33.7,98,0.298\n390,-1,836.4,471.6,53.3,78.1,1\n390,-1,45.5,432.2,172.7,372.1,1\n390,-1,1072.4,407.4,226.5,601.5,1\n390,-1,560.3,409.4,133.8,345.2,1\n390,-1,796.6,476.2,56.2,60.8,1\n390,-1,975.9,421.1,130.5,515.3,1\n390,-1,368,434.7,173.7,313.3,0.999\n390,-1,290.4,448,115.1,355.4,0.996\n390,-1,932.9,435.4,64,184.2,0.995\n390,-1,518,460.4,23.3,63.6,0.954\n390,-1,491.5,459.9,29.6,80.9,0.264\n390,-1,532.5,463.2,26.4,64.5,0.208\n390,-1,551.8,459.4,26.5,68.5,0.171\n392,-1,836.2,471.4,52.9,77.7,1\n392,-1,65.5,424,170.8,371.3,1\n392,-1,1074.8,417.7,227.9,588.8,1\n392,-1,570.8,404.4,129.6,357.7,1\n392,-1,796.4,475.9,55.9,61.1,1\n392,-1,301.7,441.4,129,356.7,1\n392,-1,977.8,420.1,128.2,521.3,0.999\n392,-1,927.4,439,62.9,173.9,0.999\n392,-1,368.9,441.7,183,302.2,0.998\n392,-1,521,459.9,21.1,64.2,0.918\n392,-1,554.2,460.3,22.6,63.4,0.657\n392,-1,537,461,24.2,64.2,0.178\n394,-1,836.1,470.8,53.4,79.2,1\n394,-1,76,429.4,180.9,360,1\n394,-1,586.7,411.4,120.6,346.7,1\n394,-1,1074.2,403.5,234,606.1,1\n394,-1,796.4,476,55.8,61.4,1\n394,-1,304.5,447.4,157.5,346.1,1\n394,-1,923.4,436.1,62.4,184.5,0.999\n394,-1,976,423.9,135.4,513.4,0.997\n394,-1,532.8,459.9,22.3,62.3,0.966\n394,-1,557.3,459.8,21.8,61.5,0.847\n394,-1,388.8,430.9,156.7,316.5,0.653\n405,-1,162.6,435.5,193.8,353.8,1\n405,-1,835.2,472.9,54.5,78.6,1\n405,-1,634.3,410,155.9,340.6,1\n405,-1,1075.3,419,209.2,596.7,1\n405,-1,381.7,441.1,115,344.1,1\n405,-1,892.6,436.6,59.1,177.6,1\n405,-1,795.4,475.9,56.1,61.9,1\n405,-1,981.5,422.1,131.2,512.9,0.999\n405,-1,487.3,440.1,138.4,291.3,0.999\n407,-1,835,471.8,54.3,79.9,1\n407,-1,186.2,429,168.6,359.5,1\n407,-1,1073.3,416.3,206.7,601.8,1\n407,-1,637.5,413.7,155.8,334.6,1\n407,-1,884.7,441.3,60.8,172.4,1\n407,-1,794.7,475.4,58,61.6,1\n407,-1,406,440.6,101.4,340.7,1\n407,-1,493.1,433.2,148.6,298.3,0.999\n407,-1,984.7,423.6,133.5,523.2,0.994\n407,-1,617.3,456.6,20.9,70.5,0.058\n411,-1,243.4,427.9,133.3,348.1,1\n411,-1,1071.4,410.2,193,600,1\n411,-1,643,408.3,153.1,338.2,1\n411,-1,875.7,440.5,64.5,169.2,1\n411,-1,430.7,445.8,132.4,327.5,1\n411,-1,836.5,471.7,56.2,81.6,1\n411,-1,794.5,476.7,60.7,59.3,0.999\n411,-1,379.9,465.8,52.3,112.3,0.999\n411,-1,985.4,415.5,128.3,533.2,0.992\n411,-1,505.1,432.3,149.1,300.4,0.991\n413,-1,267.8,433.1,119.1,345.2,1\n413,-1,1071,415.1,192.4,587.8,1\n413,-1,653.9,405.9,144.4,339.3,1\n413,-1,875.1,440.5,64.4,170.4,1\n413,-1,427.3,444.5,166.9,331.5,1\n413,-1,378.6,468.4,54.1,108.4,0.999\n413,-1,835.8,471.8,56.1,79.5,0.999\n413,-1,791.7,477.4,66.2,59.7,0.996\n413,-1,985.3,420.9,134.1,529,0.983\n413,-1,534.8,434.7,121.8,284.3,0.862\n414,-1,277.8,431.8,114.2,350.4,1\n414,-1,663.1,406.7,142.1,334.8,1\n414,-1,1071.2,414.8,188.3,612.5,1\n414,-1,874,439.2,61.7,174.7,1\n414,-1,433.5,445,161.5,333,1\n414,-1,834.5,473.6,55.9,77.4,0.999\n414,-1,984.8,425.5,130.5,508.4,0.996\n414,-1,376.6,470.5,55.9,104.6,0.994\n414,-1,548.6,433.6,111.2,294.9,0.98\n414,-1,788.8,477,68.4,60.7,0.97\n424,-1,845.6,436.3,57.1,171.1,1\n424,-1,913.7,485.3,96.2,108.5,1\n424,-1,313,438.8,173,326.9,1\n424,-1,499.5,439.7,112.3,325,1\n424,-1,711.7,406.4,118.3,323.3,1\n424,-1,1056.4,407.6,195.8,633,1\n424,-1,604,438.1,143.7,282.5,1\n424,-1,458.5,464.1,33.1,107.5,0.073\n425,-1,843.6,438.4,54.8,167.7,1\n425,-1,319.7,435.4,172.2,325.6,1\n425,-1,913.6,484.1,97.2,109.3,1\n425,-1,1057.1,403.4,199.6,642.8,1\n425,-1,505.5,437.6,111,323.5,1\n425,-1,719.1,406.6,115.6,324.4,1\n425,-1,608.2,434.6,142.6,286.2,1\n425,-1,480.8,463.6,28.1,84.9,0.077\n426,-1,328,435.9,163.8,323.5,1\n426,-1,912.8,483.2,98.5,109.2,1\n426,-1,843.2,436.5,55.1,171.5,1\n426,-1,1060.2,403.7,195.3,651.1,1\n426,-1,513.8,439,107.2,322.3,1\n426,-1,721.8,406.2,115,324.5,1\n426,-1,611,427.8,140.8,293,1\n426,-1,480.3,460.4,27.7,91.2,0.064\n434,-1,914.7,485.3,94.5,109.7,1\n434,-1,414.4,429.6,113,314.8,1\n434,-1,543.4,442.2,140.7,306.9,1\n434,-1,745.5,410.6,115.2,321.3,1\n434,-1,1069.3,402.9,217.8,646.7,1\n434,-1,677.6,431.7,82,286.2,0.998\n434,-1,1372.3,260.1,510.4,820.9,0.995\n434,-1,519.8,464.1,25.4,70.2,0.931\n434,-1,827.8,434.3,55.4,165.8,0.073\n438,-1,915.2,483.2,94,112.7,1\n438,-1,762.6,415.4,101.5,310.5,1\n438,-1,426.6,437.8,130,315.5,1\n438,-1,544.5,436.4,148.4,318.9,1\n438,-1,1150.2,328.3,488.3,752.7,0.998\n438,-1,706.5,432.5,81.6,275.2,0.989\n438,-1,1098.7,408.8,190.5,656.5,0.857\n438,-1,541.6,465.6,25.1,70.7,0.149\n440,-1,915.2,483.5,93.9,112.9,1\n440,-1,554.6,432.7,143,322.5,1\n440,-1,775.1,413.4,95.7,310,1\n440,-1,437.6,436,125.8,310.1,1\n440,-1,1081.8,347,407.8,734,0.999\n440,-1,716.1,438.6,77.1,266.5,0.548\n440,-1,1002.8,448.3,31.4,102.3,0.169\n440,-1,705.5,457.3,31.4,99.7,0.095\n442,-1,914.2,487.4,92.2,110.6,1\n442,-1,440.9,433.9,125.7,316.1,1\n442,-1,566.2,440.2,136.5,313,1\n442,-1,781.9,407.3,91.7,305.2,1\n442,-1,988.5,361.1,392.4,719.9,1\n442,-1,718.6,434.3,95,269.7,0.472\n442,-1,426.2,464.1,26.7,84.1,0.232\n443,-1,575.4,445.1,125.6,313.3,1\n443,-1,915.2,487,90.6,109,1\n443,-1,451.6,427.5,117.5,325.7,1\n443,-1,934.8,366.3,404.9,714.7,0.999\n443,-1,787.4,410.3,87.8,303,0.999\n443,-1,734.6,433,97.3,273.1,0.479\n443,-1,380.6,467.6,56.2,113.5,0.415\n443,-1,425.1,466.2,28.9,93.7,0.378\n443,-1,1328.7,438.9,115.9,336.2,0.122\n447,-1,489.1,436,95.3,289.4,1\n447,-1,615.1,435.5,100.6,310.3,1\n447,-1,1132.6,402.8,246.6,657.3,1\n447,-1,375.8,462.5,52.9,117.4,1\n447,-1,414.7,469.2,45.1,104.1,0.998\n447,-1,745.5,332.4,412.4,748.6,0.997\n447,-1,718.2,456.2,32.8,86.8,0.858\n447,-1,464.9,465,30,83.2,0.354\n447,-1,1326,441.5,124.9,323.9,0.052\n464,-1,911.2,484.5,99.5,108.8,1\n464,-1,690,437.5,111.5,301.5,1\n464,-1,831.6,404,88.4,304.7,1\n464,-1,1215.7,400.1,248.5,680.9,1\n464,-1,1050.1,438.6,38.5,110.8,0.999\n464,-1,996.3,445.6,36.3,99.9,0.999\n464,-1,203,353,375.4,728,0.999\n464,-1,554.6,427.9,120.7,290.1,0.999\n464,-1,1081.6,483.9,47.2,115.8,0.998\n464,-1,1410.4,419.4,165.1,382.4,0.998\n464,-1,1131.6,419.8,143.9,552.9,0.819\n464,-1,677.4,476.2,31.9,83.5,0.236\n464,-1,790,451.1,34.6,143.2,0.071\n467,-1,911.1,483.8,100.3,109.2,1\n467,-1,724.1,438.6,89.7,296.9,1\n467,-1,1250,397.3,222.2,683.7,1\n467,-1,576.8,424.6,98.9,291.5,1\n467,-1,833.6,404.8,86.8,312,1\n467,-1,1084.5,483,44.8,117.1,1\n467,-1,994.7,446.5,37.9,98.6,1\n467,-1,1130.2,422.2,149.8,570.1,1\n467,-1,1047.9,438.9,39.7,108.2,1\n467,-1,87.7,376.6,424.9,704.4,0.998\n467,-1,1430.7,418,153.6,384.4,0.995\n467,-1,673,472.2,25.6,72.3,0.626\n467,-1,473.3,453.8,28.5,79.7,0.136\n475,-1,747.8,443.3,100.3,292.7,1\n475,-1,1335.1,387.8,200,693.2,1\n475,-1,620.7,437.7,81.3,271.9,1\n475,-1,838.3,407.7,86.5,302.7,1\n475,-1,1153.9,418,158.3,585,1\n475,-1,991.2,448.3,38.1,98.3,0.999\n475,-1,1044.6,439.9,40,108.3,0.999\n475,-1,565.3,453.3,32.3,81.1,0.998\n475,-1,1109.5,438.4,44.5,145.8,0.998\n475,-1,1085.8,469.9,40.3,127,0.996\n475,-1,1503.8,411,143.1,394,0.993\n475,-1,524.8,458.6,33.2,75.9,0.983\n475,-1,714.4,470.3,21.6,66.6,0.9\n475,-1,1,382.2,267.3,698.8,0.617\n475,-1,548.4,458,27,74.2,0.114\n492,-1,809.2,437.6,140.9,292,1\n492,-1,651.7,431.4,117.7,273.7,1\n492,-1,945,437.4,99.2,234.8,1\n492,-1,1386.6,379.1,281.1,701.9,1\n492,-1,568.7,456,34.8,81.9,1\n492,-1,1207.8,425.5,209.8,603.8,1\n492,-1,1181.3,448.5,35.8,88.7,0.999\n492,-1,1620.4,408.4,154.5,436,0.999\n492,-1,382.6,464.6,55.7,116.1,0.999\n492,-1,1112.1,439.7,38.9,151.9,0.998\n492,-1,1089.3,449,41,150.3,0.996\n492,-1,537.7,460.1,28,72.9,0.986\n492,-1,462.5,460.7,25.6,79,0.98\n492,-1,632.9,455.9,32,86.6,0.977\n492,-1,1034.6,443.3,34.1,121.2,0.917\n492,-1,1058.1,447.1,47.7,128.5,0.209\n496,-1,823.3,436.6,138.4,299.3,1\n496,-1,963.3,432.9,102.8,250.2,1\n496,-1,660.7,434.8,112.7,270.6,1\n496,-1,382.6,462.9,53.1,116.3,1\n496,-1,569.2,455.4,33.8,82.9,1\n496,-1,1082.4,448.8,52.2,149.5,1\n496,-1,1419.1,373.2,269.1,707.8,1\n496,-1,1216.2,431.4,220.3,581.7,1\n496,-1,1644.2,415.5,164.7,433.8,0.999\n496,-1,1177.5,449,36.5,84.8,0.999\n496,-1,636.9,455.2,33.4,91.7,0.999\n496,-1,461.6,459.4,25.6,78.3,0.987\n496,-1,538.5,460.5,27.5,71.8,0.983\n496,-1,795.7,476.8,52.8,56.3,0.817\n496,-1,1113.5,449.1,39.5,121.8,0.156\n496,-1,421.2,469.4,45.4,93.5,0.07\n501,-1,695.6,431.9,86.3,277.4,1\n501,-1,382.3,463.6,53.2,117.5,1\n501,-1,857.7,438.2,128.1,291.6,1\n501,-1,1477.5,372.6,239.9,708.4,1\n501,-1,1083.2,448.4,56.7,151.8,1\n501,-1,969.9,438.7,115.5,245.7,1\n501,-1,1241.7,411.8,214.5,616.1,1\n501,-1,570.4,457.7,32.1,81.7,1\n501,-1,637.9,456.4,34,87.5,1\n501,-1,1683.2,406.9,215.2,479.9,1\n501,-1,796.3,476.9,58.4,60.2,1\n501,-1,1177.9,449.5,35.8,86.2,1\n501,-1,460,459.4,26.4,76.7,0.995\n501,-1,537.9,460.8,29.9,74.2,0.991\n506,-1,382.8,463.5,51.7,116.1,1\n506,-1,888.7,430.6,130.5,299.2,1\n506,-1,1513.7,374.8,261.7,706.2,1\n506,-1,716.5,432.7,83.1,271.4,1\n506,-1,1306.3,416.3,176.5,613.6,1\n506,-1,833.9,471.8,51.9,77.1,1\n506,-1,638.1,456.5,35.1,87.6,1\n506,-1,1092.8,447.7,54.9,147.9,1\n506,-1,1177.2,449.1,36.9,88.3,1\n506,-1,572.2,456.6,33.3,83,1\n506,-1,1729.1,417.8,190.9,485.3,1\n506,-1,1004.2,442.1,87.5,240.8,0.999\n506,-1,536.8,460.7,30.6,75.7,0.994\n506,-1,459.2,459.2,25.3,74.5,0.975\n506,-1,677.2,460.7,29.7,78.2,0.95\n506,-1,794.3,478.5,61.1,59.2,0.936\n506,-1,411.9,469.4,48.4,98.4,0.277\n510,-1,382.2,463.4,52.6,116.3,1\n510,-1,722.2,430.5,108.3,268.5,1\n510,-1,901.8,441.3,145.8,285.9,1\n510,-1,835.6,470.6,51.2,81.7,1\n510,-1,637.6,456.9,34.7,89.3,1\n510,-1,1315.8,430.5,214.2,620.8,1\n510,-1,1521.1,383.8,315.9,697.2,1\n510,-1,572.4,456.7,33.9,83.5,1\n510,-1,1178.4,449.3,36,86.3,1\n510,-1,1032.3,439.4,77.1,241.7,0.999\n510,-1,1755.2,394.4,165.8,523.1,0.998\n510,-1,539,461.5,29.7,75.4,0.991\n510,-1,462.1,460.4,24.8,72.8,0.98\n510,-1,1097.6,452.1,51.7,139.9,0.979\n510,-1,681.6,458.9,27.8,87,0.815\n510,-1,697,456.3,39.7,110.2,0.656\n510,-1,409.3,470.3,49.5,98.7,0.24\n510,-1,880.9,451.3,33.9,88.5,0.081\n512,-1,382.3,463.9,51.8,115.7,1\n512,-1,834.1,471.6,53.7,78.5,1\n512,-1,723.2,435.8,111.9,263.8,1\n512,-1,905.3,443.1,145.4,286.2,1\n512,-1,1534.7,375.1,317.1,705.9,1\n512,-1,638.8,455.7,34.9,89.7,1\n512,-1,572.6,455.6,33.7,83.8,1\n512,-1,1177.7,448.2,36,89,1\n512,-1,1316.6,418,224,633.8,1\n512,-1,1034.9,437.7,92,242.4,1\n512,-1,538.3,461,29.4,76.2,0.994\n512,-1,694.8,449.9,43,125.9,0.991\n512,-1,460.8,460.4,24.9,72.4,0.978\n512,-1,1759.9,401,161.1,513.2,0.747\n512,-1,408.8,471.1,50.3,98.1,0.295\n512,-1,1092.7,443.9,57.1,169.7,0.263\n523,-1,382,462.2,49.1,116.3,1\n523,-1,959.4,446.9,109.1,281.9,1\n523,-1,777.4,433.7,80.5,262.4,1\n523,-1,1574.1,379.7,309.3,701.3,1\n523,-1,1179.9,447.8,35.6,89.1,1\n523,-1,572.6,458.6,33.7,82.6,1\n523,-1,1358.7,423.3,240.4,647,1\n523,-1,679.2,450.9,43.7,124.3,1\n523,-1,1056,441.5,105.9,236.5,1\n523,-1,881,408.7,98.2,295.2,0.999\n523,-1,414.6,469.8,44.5,102.6,0.994\n523,-1,650.3,453.6,28.7,95.4,0.988\n523,-1,723.7,449,32,90.3,0.988\n523,-1,543.7,463.1,28.2,74.1,0.978\n523,-1,438.6,464.5,33.3,86.8,0.868\n523,-1,463.4,460.8,26.8,69.2,0.536\n523,-1,838.7,473,54.3,94.6,0.053\n524,-1,381.6,461.5,49.9,117.2,1\n524,-1,782.6,431.8,78.4,264.5,1\n524,-1,969.3,444.5,103.6,279.4,1\n524,-1,1365.2,429.7,237.3,633.3,1\n524,-1,1576.8,380.7,316.2,700.3,1\n524,-1,1180.6,447.5,35.5,87.4,1\n524,-1,572.5,457.5,33.7,84.7,1\n524,-1,890,407,93.2,302.4,1\n524,-1,677,449.6,45.6,123.9,1\n524,-1,1060.4,438.2,103.7,240,0.999\n524,-1,416.3,469.1,44.5,102.1,0.994\n524,-1,719.8,447.1,32.7,93.9,0.993\n524,-1,647.7,454,32,94.1,0.993\n524,-1,544,462.3,28.2,75.2,0.977\n524,-1,461.6,461.2,27.5,69.7,0.774\n528,-1,795.2,435.3,102.8,258.7,1\n528,-1,381.9,463,50.3,115.7,1\n528,-1,673.1,452.9,44,118.9,1\n528,-1,573.6,455.8,34.5,85.6,1\n528,-1,990.5,435.2,101.4,289.5,1\n528,-1,904.4,406.3,80.4,303.1,1\n528,-1,1072.5,434.3,106.3,243.1,1\n528,-1,1593.2,368.7,327.8,712.3,1\n528,-1,718.1,449.3,33.7,92.8,1\n528,-1,1421.4,413,206.8,661,0.999\n528,-1,1178.4,446.6,36.4,88.6,0.999\n528,-1,416.6,467.9,46.1,102.3,0.999\n528,-1,546.4,461.9,27.4,75.7,0.971\n528,-1,455.8,463.3,30.7,72.8,0.805\n528,-1,647.7,455.2,30.4,91.5,0.694\n528,-1,568.2,432.9,20.5,37.5,0.096\n544,-1,654.7,451.6,39.8,118.3,1\n544,-1,714,450.6,35.5,94.7,1\n544,-1,1497.6,405.3,223.5,674,1\n544,-1,381.7,463.3,49.5,114.9,1\n544,-1,837.9,433.8,103.7,252,1\n544,-1,1050.4,441.7,100.3,281.3,1\n544,-1,928.9,408.3,125.5,299,1\n544,-1,577.1,455.2,38.6,85.3,1\n544,-1,415.6,468.1,44.5,103,1\n544,-1,1174,441.8,53.6,112.8,0.999\n544,-1,794.4,477.6,59.8,57.4,0.998\n544,-1,546.2,459.6,31.2,80.1,0.998\n544,-1,1117.8,448.2,72.6,225.2,0.991\n544,-1,503.6,458.1,22.4,56,0.839\n544,-1,461.3,462.9,28.8,67.9,0.531\n545,-1,654.4,451.9,39.4,116.8,1\n545,-1,714.4,450.2,36.2,96.3,1\n545,-1,1058.3,441.5,95.4,280.6,1\n545,-1,845.4,433.8,102.6,250.8,1\n545,-1,381.4,463.8,49.7,114.3,1\n545,-1,577.8,455.2,37.3,85.4,1\n545,-1,1511.7,407.5,213.2,668.1,1\n545,-1,1177.1,441.6,52.8,110.7,1\n545,-1,930.3,412.7,123.1,294.4,1\n545,-1,415.3,468.1,44.8,103.6,1\n545,-1,795.6,477.9,60.4,57.4,0.999\n545,-1,546.1,460.5,30.5,79,0.998\n545,-1,1118.1,443.6,67.4,234,0.893\n545,-1,503.8,458,22.6,56.5,0.849\n545,-1,458.7,463,30.1,70.6,0.422\n545,-1,1039.3,452.2,41.3,110.9,0.093\n545,-1,824.9,476,64.9,73.6,0.054\n549,-1,652.4,452.9,38.5,114.3,1\n549,-1,1080.2,437.6,99.1,286.9,1\n549,-1,834.8,471.9,53.5,78,1\n549,-1,715.2,450.2,37.1,97.6,1\n549,-1,951.5,416.5,102.8,292.1,1\n549,-1,1186.6,439.1,47.5,109.9,1\n549,-1,578.7,455.8,38.5,85,1\n549,-1,381.4,464,49.5,114.1,1\n549,-1,1546.4,408.6,208.7,672.4,1\n549,-1,794.2,475.9,57.8,61.1,1\n549,-1,415.3,467.9,45.7,103.2,1\n549,-1,879.9,434.6,82.4,250.8,1\n549,-1,547.3,460.2,30.1,78.2,0.997\n549,-1,1045.1,446.3,37.3,92.1,0.933\n549,-1,507.5,456.7,23.4,57.7,0.916\n549,-1,455.6,462.3,31.5,73.6,0.356\n555,-1,1091.1,441.6,109.5,282.1,1\n555,-1,836.1,473.8,52.9,77.2,1\n555,-1,716.9,447.4,38.3,101.8,1\n555,-1,648.4,453.2,38.4,113.7,1\n555,-1,1558.4,412.4,246.9,668.6,1\n555,-1,381.5,463.4,49.3,115.1,1\n555,-1,893.4,428.2,96.1,261.4,1\n555,-1,581.2,457,37.4,84.2,1\n555,-1,993.7,411,83.9,296.3,1\n555,-1,415.8,466.8,45.1,103.5,1\n555,-1,796.8,476.1,54.4,61.7,1\n555,-1,548.3,461.1,29.4,78.6,0.998\n555,-1,506.7,457.4,23.9,57.3,0.92\n555,-1,1190.8,441.7,45.5,110,0.678\n555,-1,1078.4,457.9,34.7,103.4,0.23\n556,-1,836.3,474.2,53.5,75.9,1\n556,-1,1091.1,444.3,111.9,279.3,1\n556,-1,1562.1,398.1,243.3,682.9,1\n556,-1,717.1,447.8,38.9,101.3,1\n556,-1,647.2,452.1,39.1,115.4,1\n556,-1,893.6,432.7,96.6,251.7,1\n556,-1,381.2,463.2,49.2,115.1,1\n556,-1,994.3,411.8,91.8,293.4,1\n556,-1,796.8,476.4,55.2,61.4,1\n556,-1,416,467.1,45.3,103.4,1\n556,-1,580.4,456.7,38.1,84.8,1\n556,-1,547.8,461,28.8,78.6,0.998\n556,-1,506.9,457.8,23.8,56.2,0.895\n556,-1,1189.8,443.1,49.1,112.7,0.381\n556,-1,1077.6,454.6,36.6,116.5,0.162\n559,-1,836.3,472.7,54.6,77.7,1\n559,-1,717.7,448,39.1,101.3,1\n559,-1,1570.9,386.5,259.9,694.5,1\n559,-1,1091.5,444.1,121.5,278.1,1\n559,-1,896.3,435.2,101.5,253.3,1\n559,-1,644.6,452.4,38.9,113.5,1\n559,-1,381.8,464.1,48.8,113.9,1\n559,-1,1001.9,414.4,107.4,289.6,1\n559,-1,796.8,476.1,55.8,61.5,1\n559,-1,415.7,467.3,44.9,102.8,1\n559,-1,578.1,456.8,39.9,84.9,1\n559,-1,547.8,461.2,29,77.9,0.997\n559,-1,509.8,455.9,24.8,57.4,0.933\n559,-1,1195.9,449.1,48.1,106.8,0.181\n581,-1,835.7,472.9,53.7,77.2,1\n581,-1,721.8,448.3,42.3,107.5,1\n581,-1,971.7,436.6,103.3,241.6,1\n581,-1,1178,439.6,121.7,275.5,1\n581,-1,1070.3,414.8,91.3,285.8,1\n581,-1,797.1,475.5,55.7,62.1,1\n581,-1,416.4,469.3,41.3,103.7,1\n581,-1,381.3,464.8,48.6,112.4,1\n581,-1,665.8,453.9,39.7,103.7,1\n581,-1,1676.1,397.7,244.9,683.3,0.999\n581,-1,553.7,460.1,31.5,83.3,0.999\n581,-1,636.2,451.5,33.6,107,0.986\n581,-1,585.4,457.9,37.9,85,0.982\n581,-1,909.5,486.6,100.2,105.2,0.927\n581,-1,621.3,457.1,30.6,93.7,0.187\n590,-1,835.5,472.5,53.7,77.7,1\n590,-1,722.4,446.7,45.6,109.7,1\n590,-1,1004.2,431.2,86.8,244.2,1\n590,-1,914,483.1,96.9,113,1\n590,-1,1091.9,414.2,107.1,288,1\n590,-1,1239.8,439.7,89.5,276,1\n590,-1,664.7,454.7,39.7,105.7,1\n590,-1,381.3,463.1,48.6,115.7,1\n590,-1,797,475.6,55.9,61.8,1\n590,-1,416,466.7,42,106.1,1\n590,-1,557.1,459.4,28.2,84.6,0.999\n590,-1,629.6,454.1,35.3,102.5,0.995\n590,-1,586.3,457.4,33.1,84.3,0.962\n593,-1,835.8,472.3,53.5,77.6,1\n593,-1,913.7,482.8,97.8,112.6,1\n593,-1,722.6,446,44.4,110.2,1\n593,-1,1244.4,441.9,97.3,276.6,1\n593,-1,1098.5,406.5,100.8,294,1\n593,-1,1023.2,432.5,77.4,239.6,1\n593,-1,664.6,455.5,38.5,105,1\n593,-1,382,462.6,47.8,116.2,1\n593,-1,796.7,476.1,55.8,61.3,1\n593,-1,554.4,459.9,30.7,84.1,1\n593,-1,416.5,466.4,42.2,105.9,1\n593,-1,628.9,454.6,33.9,100.9,0.997\n593,-1,585.2,457.2,32.6,83,0.946\n593,-1,604.7,456.2,31.7,90.1,0.863\n593,-1,992.9,450.6,31.3,106.1,0.622\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-02-FRCNN/gt/gt.txt",
    "content": "1,1,912,484,97,109,0,7,1.0\n2,1,912,484,97,109,0,7,1.0\n3,1,912,484,97,109,0,7,1.0\n4,1,912,484,97,109,0,7,1.0\n1,2,1338,418,167,379,1,1,1.0\n2,2,1342,417,168,380,1,1,1.0\n3,2,1346,417,170,380,1,1,1.0\n4,2,1351,417,171,381,1,1,1.0\n1,3,586,447,85,263,1,1,1.0\n2,3,586,446,85,264,1,1,1.0\n3,3,586,446,85,264,1,1,1.0\n4,3,586,446,85,264,1,1,1.0\n1,4,1585,-1,336,578,0,9,0.98153\n2,4,1585,-1,336,578,0,9,0.97777\n3,4,1585,-1,336,578,0,9,0.974\n4,4,1585,-1,336,578,0,9,0.97023\n1,5,1163,441,33,89,0,8,1.0\n2,5,1163,441,33,89,0,8,1.0\n3,5,1163,441,33,89,0,8,1.0\n4,5,1163,441,33,89,0,8,1.0\n1,6,1308,431,34,118,0,8,0.85714\n2,6,1308,431,34,118,0,8,0.97143\n3,6,1308,431,34,118,0,8,1.0\n4,6,1308,431,34,118,0,8,1.0\n1,8,1416,431,184,336,1,1,0.51351\n2,8,1422,431,183,337,1,1,0.5163\n3,8,1428,431,182,338,1,1,0.51366\n4,8,1434,431,181,339,1,1,0.51099\n1,9,1056,484,36,110,1,1,0.94595\n2,9,1055,483,36,110,1,1,0.94643\n3,9,1055,483,36,110,1,1,0.94643\n4,9,1055,483,36,110,1,1,0.94643\n1,10,1091,484,31,115,1,1,1.0\n2,10,1090,484,32,114,1,1,1.0\n3,10,1090,484,32,114,1,1,1.0\n4,10,1090,484,32,114,1,1,1.0\n1,11,734,487,29,68,0,2,0.31884\n2,11,733,487,30,68,0,2,0.31884\n3,11,733,487,30,69,0,2,0.31429\n4,11,732,487,31,69,0,2,0.31429\n1,12,679,492,53,105,0,2,0.30573\n2,12,679,492,52,105,0,2,0.29263\n3,12,679,492,52,105,0,2,0.28622\n4,12,679,492,52,105,0,2,0.28622\n1,13,738,458,27,75,0,2,0.3985\n2,13,737,457,27,75,0,2,0.40273\n3,13,737,457,27,75,0,2,0.40273\n4,13,737,457,27,75,0,2,0.40273\n1,14,1255,447,33,100,1,1,1.0\n2,14,1255,447,33,100,1,1,1.0\n3,14,1255,447,33,100,1,1,1.0\n4,14,1255,447,33,100,1,1,1.0\n1,15,1016,430,40,116,1,1,0.98687\n2,15,1015,430,40,116,1,1,0.98666\n3,15,1015,430,40,116,1,1,0.98666\n4,15,1015,431,40,116,1,1,0.98645\n1,17,1101,441,38,108,1,1,0.65843\n2,17,1100,440,38,108,1,1,0.64832\n3,17,1100,440,38,108,1,1,0.64832\n4,17,1100,440,38,108,1,1,0.64832\n1,18,935,436,42,114,1,1,0.41739\n2,18,934,435,42,114,1,1,0.42609\n3,18,934,435,42,114,1,1,0.42609\n4,18,934,435,42,114,1,1,0.42609\n1,19,442,446,105,283,1,1,1.0\n2,19,442,446,107,282,1,1,1.0\n3,19,442,446,109,282,1,1,1.0\n4,19,442,446,111,282,1,1,1.0\n1,20,636,458,61,187,1,1,0.41935\n2,20,636,458,61,187,1,1,0.41935\n3,20,636,458,62,187,1,1,0.42857\n4,20,637,458,61,187,1,1,0.43548\n1,21,1364,434,51,124,1,1,0.0\n2,21,1365,434,52,124,1,1,0.0\n3,21,1366,434,54,124,1,1,0.0\n4,21,1368,435,55,124,1,1,0.0\n1,22,1478,434,63,124,1,1,0.0\n2,22,1480,433,62,125,1,1,0.0\n3,22,1483,433,60,125,1,1,0.0\n4,22,1486,433,59,126,1,1,0.0\n1,23,473,460,89,249,1,1,0.16667\n2,23,473,460,89,249,1,1,0.14444\n3,23,474,460,89,249,1,1,0.13333\n4,23,475,460,89,249,1,1,0.12222\n1,24,835,473,52,75,0,7,1.0\n2,24,835,473,52,75,0,7,1.0\n3,24,835,473,52,75,0,7,1.0\n4,24,835,473,52,75,0,7,1.0\n1,25,796,476,55,60,0,7,0.69643\n2,25,796,476,55,60,0,7,0.69643\n3,25,796,476,55,60,0,7,0.69643\n4,25,796,476,55,60,0,7,0.69643\n1,26,548,465,35,93,1,1,0.52778\n2,26,547,464,35,93,1,1,0.52778\n3,26,547,464,35,93,1,1,0.5\n4,26,547,464,35,93,1,1,0.47222\n1,30,376,446,41,104,0,7,1.0\n2,30,375,446,41,104,0,7,1.0\n3,30,375,446,41,104,0,7,1.0\n4,30,375,446,41,104,0,7,1.0\n1,31,418,459,40,84,1,1,0.58537\n2,31,418,459,40,84,1,1,0.58537\n3,31,418,459,40,84,1,1,0.58537\n4,31,418,459,40,84,1,1,0.58537\n1,36,582,456,35,133,1,1,0.11111\n2,36,582,455,34,134,1,1,0.11429\n3,36,582,455,34,134,1,1,0.11429\n4,36,582,455,34,134,1,1,0.11429\n1,39,972,456,32,77,1,1,0.29371\n2,39,972,456,32,77,1,1,0.30458\n3,39,973,456,32,77,1,1,0.31546\n4,39,974,456,32,77,1,1,0.32634\n1,46,693,462,20,67,0,7,0.32633\n2,46,693,462,21,67,0,7,0.29078\n3,46,694,462,21,67,0,7,0.28075\n4,46,694,462,23,67,0,7,0.25735\n1,47,713,478,19,57,0,7,0.24138\n2,47,712,477,20,57,0,7,0.27258\n3,47,712,477,20,57,0,7,0.27258\n4,47,712,477,20,57,0,7,0.25452\n1,50,734,505,31,44,0,4,0.0055556\n2,50,733,504,31,45,0,4,0.0033967\n3,50,733,504,31,45,0,4,0.0033967\n4,50,733,504,31,45,0,4,0.0033967\n1,51,911,408,26,129,0,9,0.55897\n2,51,910,408,26,129,0,9,0.5735\n3,51,910,408,26,129,0,9,0.5735\n4,51,910,408,26,129,0,9,0.5735\n1,52,730,509,37,60,0,4,0.92105\n2,52,730,509,37,60,0,4,0.94737\n3,52,730,509,37,61,0,4,0.94737\n4,52,730,509,37,62,0,4,0.94737\n1,53,679,528,46,79,0,4,0.59574\n2,53,679,528,46,79,0,4,0.59574\n3,53,679,528,46,79,0,4,0.57447\n4,53,679,528,46,79,0,4,0.57447\n1,66,1004,454,18,61,0,7,0.44482\n2,66,1003,453,18,61,0,7,0.39983\n3,66,1003,453,18,61,0,7,0.37606\n4,66,1003,453,18,61,0,7,0.35229\n1,68,578,432,20,43,1,1,0.45779\n2,68,578,431,20,43,1,1,0.45779\n3,68,578,431,20,43,1,1,0.45779\n4,68,578,431,20,43,1,1,0.45779\n1,69,596,429,18,42,1,1,0.36353\n2,69,595,428,18,42,1,1,0.34517\n3,69,595,428,18,42,1,1,0.34517\n4,69,595,428,18,42,1,1,0.34517\n1,70,1036,453,25,67,1,1,0.08767\n2,70,1035,452,25,67,1,1,0.08767\n3,70,1035,452,25,67,1,1,0.08767\n4,70,1035,452,25,67,1,1,0.08767\n1,72,663,451,34,86,1,1,0.05977\n2,72,664,451,34,85,1,1,0.074086\n3,72,665,451,34,85,1,1,0.076412\n4,72,666,451,34,85,1,1,0.090033\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-02-FRCNN/gt/gt_temp.txt",
    "content": "1.000000,1.000000,912.000000,484.000000,97.000000,109.000000,0.000000,7.000000,1.000000\n2.000000,1.000000,912.000000,484.000000,97.000000,109.000000,0.000000,7.000000,1.000000\n3.000000,1.000000,912.000000,484.000000,97.000000,109.000000,0.000000,7.000000,1.000000\n4.000000,1.000000,912.000000,484.000000,97.000000,109.000000,0.000000,7.000000,1.000000\n1.000000,2.000000,1338.000000,418.000000,167.000000,379.000000,1.000000,1.000000,1.000000\n2.000000,2.000000,1342.000000,417.000000,168.000000,380.000000,1.000000,1.000000,1.000000\n3.000000,2.000000,1346.000000,417.000000,170.000000,380.000000,1.000000,1.000000,1.000000\n4.000000,2.000000,1351.000000,417.000000,171.000000,381.000000,1.000000,1.000000,1.000000\n1.000000,3.000000,586.000000,447.000000,85.000000,263.000000,1.000000,1.000000,1.000000\n2.000000,3.000000,586.000000,446.000000,85.000000,264.000000,1.000000,1.000000,1.000000\n3.000000,3.000000,586.000000,446.000000,85.000000,264.000000,1.000000,1.000000,1.000000\n4.000000,3.000000,586.000000,446.000000,85.000000,264.000000,1.000000,1.000000,1.000000\n1.000000,4.000000,1585.000000,-1.000000,336.000000,578.000000,0.000000,9.000000,0.981530\n2.000000,4.000000,1585.000000,-1.000000,336.000000,578.000000,0.000000,9.000000,0.977770\n3.000000,4.000000,1585.000000,-1.000000,336.000000,578.000000,0.000000,9.000000,0.974000\n4.000000,4.000000,1585.000000,-1.000000,336.000000,578.000000,0.000000,9.000000,0.970230\n1.000000,5.000000,1163.000000,441.000000,33.000000,89.000000,0.000000,8.000000,1.000000\n2.000000,5.000000,1163.000000,441.000000,33.000000,89.000000,0.000000,8.000000,1.000000\n3.000000,5.000000,1163.000000,441.000000,33.000000,89.000000,0.000000,8.000000,1.000000\n4.000000,5.000000,1163.000000,441.000000,33.000000,89.000000,0.000000,8.000000,1.000000\n1.000000,6.000000,1308.000000,431.000000,34.000000,118.000000,0.000000,8.000000,0.857140\n2.000000,6.000000,1308.000000,431.000000,34.000000,118.000000,0.000000,8.000000,0.971430\n3.000000,6.000000,1308.000000,431.000000,34.000000,118.000000,0.000000,8.000000,1.000000\n4.000000,6.000000,1308.000000,431.000000,34.000000,118.000000,0.000000,8.000000,1.000000\n1.000000,8.000000,1416.000000,431.000000,184.000000,336.000000,1.000000,1.000000,0.513510\n2.000000,8.000000,1422.000000,431.000000,183.000000,337.000000,1.000000,1.000000,0.516300\n3.000000,8.000000,1428.000000,431.000000,182.000000,338.000000,1.000000,1.000000,0.513660\n4.000000,8.000000,1434.000000,431.000000,181.000000,339.000000,1.000000,1.000000,0.510990\n1.000000,9.000000,1056.000000,484.000000,36.000000,110.000000,1.000000,1.000000,0.945950\n2.000000,9.000000,1055.000000,483.000000,36.000000,110.000000,1.000000,1.000000,0.946430\n3.000000,9.000000,1055.000000,483.000000,36.000000,110.000000,1.000000,1.000000,0.946430\n4.000000,9.000000,1055.000000,483.000000,36.000000,110.000000,1.000000,1.000000,0.946430\n1.000000,10.000000,1091.000000,484.000000,31.000000,115.000000,1.000000,1.000000,1.000000\n2.000000,10.000000,1090.000000,484.000000,32.000000,114.000000,1.000000,1.000000,1.000000\n3.000000,10.000000,1090.000000,484.000000,32.000000,114.000000,1.000000,1.000000,1.000000\n4.000000,10.000000,1090.000000,484.000000,32.000000,114.000000,1.000000,1.000000,1.000000\n1.000000,11.000000,734.000000,487.000000,29.000000,68.000000,0.000000,2.000000,0.318840\n2.000000,11.000000,733.000000,487.000000,30.000000,68.000000,0.000000,2.000000,0.318840\n3.000000,11.000000,733.000000,487.000000,30.000000,69.000000,0.000000,2.000000,0.314290\n4.000000,11.000000,732.000000,487.000000,31.000000,69.000000,0.000000,2.000000,0.314290\n1.000000,12.000000,679.000000,492.000000,53.000000,105.000000,0.000000,2.000000,0.305730\n2.000000,12.000000,679.000000,492.000000,52.000000,105.000000,0.000000,2.000000,0.292630\n3.000000,12.000000,679.000000,492.000000,52.000000,105.000000,0.000000,2.000000,0.286220\n4.000000,12.000000,679.000000,492.000000,52.000000,105.000000,0.000000,2.000000,0.286220\n1.000000,13.000000,738.000000,458.000000,27.000000,75.000000,0.000000,2.000000,0.398500\n2.000000,13.000000,737.000000,457.000000,27.000000,75.000000,0.000000,2.000000,0.402730\n3.000000,13.000000,737.000000,457.000000,27.000000,75.000000,0.000000,2.000000,0.402730\n4.000000,13.000000,737.000000,457.000000,27.000000,75.000000,0.000000,2.000000,0.402730\n1.000000,14.000000,1255.000000,447.000000,33.000000,100.000000,1.000000,1.000000,1.000000\n2.000000,14.000000,1255.000000,447.000000,33.000000,100.000000,1.000000,1.000000,1.000000\n3.000000,14.000000,1255.000000,447.000000,33.000000,100.000000,1.000000,1.000000,1.000000\n4.000000,14.000000,1255.000000,447.000000,33.000000,100.000000,1.000000,1.000000,1.000000\n1.000000,15.000000,1016.000000,430.000000,40.000000,116.000000,1.000000,1.000000,0.986870\n2.000000,15.000000,1015.000000,430.000000,40.000000,116.000000,1.000000,1.000000,0.986660\n3.000000,15.000000,1015.000000,430.000000,40.000000,116.000000,1.000000,1.000000,0.986660\n4.000000,15.000000,1015.000000,431.000000,40.000000,116.000000,1.000000,1.000000,0.986450\n1.000000,17.000000,1101.000000,441.000000,38.000000,108.000000,1.000000,1.000000,0.658430\n2.000000,17.000000,1100.000000,440.000000,38.000000,108.000000,1.000000,1.000000,0.648320\n3.000000,17.000000,1100.000000,440.000000,38.000000,108.000000,1.000000,1.000000,0.648320\n4.000000,17.000000,1100.000000,440.000000,38.000000,108.000000,1.000000,1.000000,0.648320\n1.000000,18.000000,935.000000,436.000000,42.000000,114.000000,1.000000,1.000000,0.417390\n2.000000,18.000000,934.000000,435.000000,42.000000,114.000000,1.000000,1.000000,0.426090\n3.000000,18.000000,934.000000,435.000000,42.000000,114.000000,1.000000,1.000000,0.426090\n4.000000,18.000000,934.000000,435.000000,42.000000,114.000000,1.000000,1.000000,0.426090\n1.000000,19.000000,442.000000,446.000000,105.000000,283.000000,1.000000,1.000000,1.000000\n2.000000,19.000000,442.000000,446.000000,107.000000,282.000000,1.000000,1.000000,1.000000\n3.000000,19.000000,442.000000,446.000000,109.000000,282.000000,1.000000,1.000000,1.000000\n4.000000,19.000000,442.000000,446.000000,111.000000,282.000000,1.000000,1.000000,1.000000\n1.000000,20.000000,636.000000,458.000000,61.000000,187.000000,1.000000,1.000000,0.419350\n2.000000,20.000000,636.000000,458.000000,61.000000,187.000000,1.000000,1.000000,0.419350\n3.000000,20.000000,636.000000,458.000000,62.000000,187.000000,1.000000,1.000000,0.428570\n4.000000,20.000000,637.000000,458.000000,61.000000,187.000000,1.000000,1.000000,0.435480\n1.000000,21.000000,1364.000000,434.000000,51.000000,124.000000,1.000000,1.000000,0.000000\n2.000000,21.000000,1365.000000,434.000000,52.000000,124.000000,1.000000,1.000000,0.000000\n3.000000,21.000000,1366.000000,434.000000,54.000000,124.000000,1.000000,1.000000,0.000000\n4.000000,21.000000,1368.000000,435.000000,55.000000,124.000000,1.000000,1.000000,0.000000\n1.000000,22.000000,1478.000000,434.000000,63.000000,124.000000,1.000000,1.000000,0.000000\n2.000000,22.000000,1480.000000,433.000000,62.000000,125.000000,1.000000,1.000000,0.000000\n3.000000,22.000000,1483.000000,433.000000,60.000000,125.000000,1.000000,1.000000,0.000000\n4.000000,22.000000,1486.000000,433.000000,59.000000,126.000000,1.000000,1.000000,0.000000\n1.000000,23.000000,473.000000,460.000000,89.000000,249.000000,1.000000,1.000000,0.166670\n2.000000,23.000000,473.000000,460.000000,89.000000,249.000000,1.000000,1.000000,0.144440\n3.000000,23.000000,474.000000,460.000000,89.000000,249.000000,1.000000,1.000000,0.133330\n4.000000,23.000000,475.000000,460.000000,89.000000,249.000000,1.000000,1.000000,0.122220\n1.000000,24.000000,835.000000,473.000000,52.000000,75.000000,0.000000,7.000000,1.000000\n2.000000,24.000000,835.000000,473.000000,52.000000,75.000000,0.000000,7.000000,1.000000\n3.000000,24.000000,835.000000,473.000000,52.000000,75.000000,0.000000,7.000000,1.000000\n4.000000,24.000000,835.000000,473.000000,52.000000,75.000000,0.000000,7.000000,1.000000\n1.000000,25.000000,796.000000,476.000000,55.000000,60.000000,0.000000,7.000000,0.696430\n2.000000,25.000000,796.000000,476.000000,55.000000,60.000000,0.000000,7.000000,0.696430\n3.000000,25.000000,796.000000,476.000000,55.000000,60.000000,0.000000,7.000000,0.696430\n4.000000,25.000000,796.000000,476.000000,55.000000,60.000000,0.000000,7.000000,0.696430\n1.000000,26.000000,548.000000,465.000000,35.000000,93.000000,1.000000,1.000000,0.527780\n2.000000,26.000000,547.000000,464.000000,35.000000,93.000000,1.000000,1.000000,0.527780\n3.000000,26.000000,547.000000,464.000000,35.000000,93.000000,1.000000,1.000000,0.500000\n4.000000,26.000000,547.000000,464.000000,35.000000,93.000000,1.000000,1.000000,0.472220\n1.000000,30.000000,376.000000,446.000000,41.000000,104.000000,0.000000,7.000000,1.000000\n2.000000,30.000000,375.000000,446.000000,41.000000,104.000000,0.000000,7.000000,1.000000\n3.000000,30.000000,375.000000,446.000000,41.000000,104.000000,0.000000,7.000000,1.000000\n4.000000,30.000000,375.000000,446.000000,41.000000,104.000000,0.000000,7.000000,1.000000\n1.000000,31.000000,418.000000,459.000000,40.000000,84.000000,1.000000,1.000000,0.585370\n2.000000,31.000000,418.000000,459.000000,40.000000,84.000000,1.000000,1.000000,0.585370\n3.000000,31.000000,418.000000,459.000000,40.000000,84.000000,1.000000,1.000000,0.585370\n4.000000,31.000000,418.000000,459.000000,40.000000,84.000000,1.000000,1.000000,0.585370\n1.000000,36.000000,582.000000,456.000000,35.000000,133.000000,1.000000,1.000000,0.111110\n2.000000,36.000000,582.000000,455.000000,34.000000,134.000000,1.000000,1.000000,0.114290\n3.000000,36.000000,582.000000,455.000000,34.000000,134.000000,1.000000,1.000000,0.114290\n4.000000,36.000000,582.000000,455.000000,34.000000,134.000000,1.000000,1.000000,0.114290\n1.000000,39.000000,972.000000,456.000000,32.000000,77.000000,1.000000,1.000000,0.293710\n2.000000,39.000000,972.000000,456.000000,32.000000,77.000000,1.000000,1.000000,0.304580\n3.000000,39.000000,973.000000,456.000000,32.000000,77.000000,1.000000,1.000000,0.315460\n4.000000,39.000000,974.000000,456.000000,32.000000,77.000000,1.000000,1.000000,0.326340\n1.000000,46.000000,693.000000,462.000000,20.000000,67.000000,0.000000,7.000000,0.326330\n2.000000,46.000000,693.000000,462.000000,21.000000,67.000000,0.000000,7.000000,0.290780\n3.000000,46.000000,694.000000,462.000000,21.000000,67.000000,0.000000,7.000000,0.280750\n4.000000,46.000000,694.000000,462.000000,23.000000,67.000000,0.000000,7.000000,0.257350\n1.000000,47.000000,713.000000,478.000000,19.000000,57.000000,0.000000,7.000000,0.241380\n2.000000,47.000000,712.000000,477.000000,20.000000,57.000000,0.000000,7.000000,0.272580\n3.000000,47.000000,712.000000,477.000000,20.000000,57.000000,0.000000,7.000000,0.272580\n4.000000,47.000000,712.000000,477.000000,20.000000,57.000000,0.000000,7.000000,0.254520\n1.000000,50.000000,734.000000,505.000000,31.000000,44.000000,0.000000,4.000000,0.005556\n2.000000,50.000000,733.000000,504.000000,31.000000,45.000000,0.000000,4.000000,0.003397\n3.000000,50.000000,733.000000,504.000000,31.000000,45.000000,0.000000,4.000000,0.003397\n4.000000,50.000000,733.000000,504.000000,31.000000,45.000000,0.000000,4.000000,0.003397\n1.000000,51.000000,911.000000,408.000000,26.000000,129.000000,0.000000,9.000000,0.558970\n2.000000,51.000000,910.000000,408.000000,26.000000,129.000000,0.000000,9.000000,0.573500\n3.000000,51.000000,910.000000,408.000000,26.000000,129.000000,0.000000,9.000000,0.573500\n4.000000,51.000000,910.000000,408.000000,26.000000,129.000000,0.000000,9.000000,0.573500\n1.000000,52.000000,730.000000,509.000000,37.000000,60.000000,0.000000,4.000000,0.921050\n2.000000,52.000000,730.000000,509.000000,37.000000,60.000000,0.000000,4.000000,0.947370\n3.000000,52.000000,730.000000,509.000000,37.000000,61.000000,0.000000,4.000000,0.947370\n4.000000,52.000000,730.000000,509.000000,37.000000,62.000000,0.000000,4.000000,0.947370\n1.000000,53.000000,679.000000,528.000000,46.000000,79.000000,0.000000,4.000000,0.595740\n2.000000,53.000000,679.000000,528.000000,46.000000,79.000000,0.000000,4.000000,0.595740\n3.000000,53.000000,679.000000,528.000000,46.000000,79.000000,0.000000,4.000000,0.574470\n4.000000,53.000000,679.000000,528.000000,46.000000,79.000000,0.000000,4.000000,0.574470\n1.000000,66.000000,1004.000000,454.000000,18.000000,61.000000,0.000000,7.000000,0.444820\n2.000000,66.000000,1003.000000,453.000000,18.000000,61.000000,0.000000,7.000000,0.399830\n3.000000,66.000000,1003.000000,453.000000,18.000000,61.000000,0.000000,7.000000,0.376060\n4.000000,66.000000,1003.000000,453.000000,18.000000,61.000000,0.000000,7.000000,0.352290\n1.000000,68.000000,578.000000,432.000000,20.000000,43.000000,1.000000,1.000000,0.457790\n2.000000,68.000000,578.000000,431.000000,20.000000,43.000000,1.000000,1.000000,0.457790\n3.000000,68.000000,578.000000,431.000000,20.000000,43.000000,1.000000,1.000000,0.457790\n4.000000,68.000000,578.000000,431.000000,20.000000,43.000000,1.000000,1.000000,0.457790\n1.000000,69.000000,596.000000,429.000000,18.000000,42.000000,1.000000,1.000000,0.363530\n2.000000,69.000000,595.000000,428.000000,18.000000,42.000000,1.000000,1.000000,0.345170\n3.000000,69.000000,595.000000,428.000000,18.000000,42.000000,1.000000,1.000000,0.345170\n4.000000,69.000000,595.000000,428.000000,18.000000,42.000000,1.000000,1.000000,0.345170\n1.000000,70.000000,1036.000000,453.000000,25.000000,67.000000,1.000000,1.000000,0.087670\n2.000000,70.000000,1035.000000,452.000000,25.000000,67.000000,1.000000,1.000000,0.087670\n3.000000,70.000000,1035.000000,452.000000,25.000000,67.000000,1.000000,1.000000,0.087670\n4.000000,70.000000,1035.000000,452.000000,25.000000,67.000000,1.000000,1.000000,0.087670\n1.000000,72.000000,663.000000,451.000000,34.000000,86.000000,1.000000,1.000000,0.059770\n2.000000,72.000000,664.000000,451.000000,34.000000,85.000000,1.000000,1.000000,0.074086\n3.000000,72.000000,665.000000,451.000000,34.000000,85.000000,1.000000,1.000000,0.076412\n4.000000,72.000000,666.000000,451.000000,34.000000,85.000000,1.000000,1.000000,0.090033\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-02-FRCNN/seqinfo.ini",
    "content": "[Sequence]\nname=MOT17-02-FRCNN\nimDir=img1\nframeRate=30\nseqLength=600\nimWidth=1920\nimHeight=1080\nimExt=.jpg\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-04-FRCNN/det/det.txt",
    "content": "375,-1,1222,31.4,61,118.8,1\n375,-1,686.4,206,79.7,113.1,1\n375,-1,1632.7,15.3,59.8,162.8,1\n375,-1,1079.3,447.2,68.5,202.7,1\n375,-1,358.8,110.2,55.7,176.5,1\n375,-1,445.8,308,73.6,214.7,1\n375,-1,285,130.4,54.7,168.9,1\n375,-1,828.5,1,55.8,113.1,1\n375,-1,109,350.7,53,189.7,1\n375,-1,455,545.4,71.9,233,1\n375,-1,1719.1,455,78.5,214.2,1\n375,-1,953.1,41.1,61.6,176.7,1\n375,-1,445.3,75.7,69.2,197,1\n375,-1,1590,632.3,83.1,243.1,1\n375,-1,795.9,150.3,59.3,171.1,1\n375,-1,348.2,529.4,88.2,246.3,1\n375,-1,508.4,86.8,51,168.9,1\n375,-1,215.8,139.5,58.3,158.4,1\n375,-1,1018.4,52.6,54.8,164.2,1\n375,-1,1434.3,2,52.3,97.2,1\n375,-1,562.9,566,99.4,253.7,1\n375,-1,1803.1,449.2,64.2,214,1\n375,-1,380.9,2.2,47.5,92.3,1\n375,-1,212.1,306.5,53.4,180.2,1\n375,-1,850.4,488.2,84.6,232.2,1\n375,-1,911.3,500.3,78.1,212.6,1\n375,-1,756.5,97.5,46.8,142.8,1\n375,-1,1767.7,104.3,53.6,154.4,0.999\n375,-1,1810.5,69.2,64.4,165.5,0.999\n375,-1,969.5,916.2,86.2,164.8,0.997\n242,-1,1220.8,30.7,63.6,119.6,1\n242,-1,686.3,207.5,79.9,111.6,1\n242,-1,1163.6,120.3,53,160.5,1\n242,-1,795.4,150.9,59.8,176.4,1\n242,-1,1592.6,2.1,57.8,145.1,1\n242,-1,1483.3,59.7,52.9,151,1\n242,-1,446.1,175.5,74.8,209.5,1\n242,-1,1083.9,120.4,59.9,182.2,1\n242,-1,1363.1,568,110.2,244.7,1\n242,-1,288.8,127.8,55.1,172.2,1\n242,-1,1720.8,457.1,77.9,212.3,1\n242,-1,387.5,523.2,86.9,236.9,1\n242,-1,109.3,350.3,49.7,191,1\n242,-1,704.4,1,54.9,160.1,1\n242,-1,355.5,104.7,54.2,179.6,1\n242,-1,212.1,125.6,55.5,167.1,1\n242,-1,929.4,120,69,185.2,1\n242,-1,495.8,356.4,73.2,224.5,1\n242,-1,222,475.7,62.3,204.3,1\n242,-1,196.3,717.6,86,253.1,1\n242,-1,844.9,345.4,79.5,193.6,1\n242,-1,516.2,118.1,52.1,181,1\n242,-1,589.8,366.6,61.8,194.9,1\n242,-1,787.2,332.6,80.9,206,1\n242,-1,111.2,563.6,87.4,243,0.999\n242,-1,931,894.7,72.4,186.3,0.979\n242,-1,156.7,667.7,61.7,198.4,0.089\n583,-1,1221.4,30.7,61.8,119.6,1\n583,-1,687,206.1,79.6,113.5,1\n583,-1,1480.8,4.7,60.4,144.5,1\n583,-1,801.3,143.7,62.8,175,1\n583,-1,377.4,253.1,65.8,198.8,1\n583,-1,1646.6,1,55.3,129.1,1\n583,-1,1650.4,245.1,79.6,201.3,1\n583,-1,288.5,123.8,52.6,173.1,1\n583,-1,1718.1,452.8,82.9,214.2,1\n583,-1,873.9,2.7,50.3,100.9,1\n583,-1,558.9,112.6,51.2,175.1,1\n583,-1,1576.1,588.7,92.1,234.5,1\n583,-1,217.1,275.2,64.1,190.9,1\n583,-1,216.5,135,51.1,160.3,1\n583,-1,358.2,109,53.5,176.6,1\n583,-1,754,80,44.1,155.5,1\n583,-1,157.4,253.2,60.5,209.5,1\n583,-1,460.6,117.5,51.3,158.2,1\n583,-1,1849.1,263.2,68.6,177.3,1\n583,-1,1050.3,833.8,127.4,247.2,0.999\n583,-1,426.7,61.9,44.7,169,0.999\n583,-1,696.8,569,85.3,256.4,0.999\n583,-1,1132.4,844.4,91.4,236.6,0.244\n583,-1,1004.2,926.9,70.8,154.1,0.085\n542,-1,1221.4,30.5,62.6,119.9,1\n542,-1,687.3,206,78.1,113.9,1\n542,-1,1488.9,2.6,58.2,142.2,1\n542,-1,780.2,143.8,66.4,174.5,1\n542,-1,387.2,208.5,62.1,192.6,1\n542,-1,1677.8,287.3,80,206,1\n542,-1,1717.1,457,82.3,210.1,1\n542,-1,878.9,1.2,52.6,112,1\n542,-1,991.4,1.5,53,105.1,1\n542,-1,289.7,124.4,53,171.2,1\n542,-1,1660.5,2.6,53.8,160,1\n542,-1,176.8,307.4,65.6,191.8,1\n542,-1,788.7,597.5,85.1,257.1,1\n542,-1,455.6,105.7,69.4,186.5,1\n542,-1,525.2,106.2,60.2,177.9,1\n542,-1,1778.5,228,68.1,177.2,1\n542,-1,1598.4,1,54.1,155.1,1\n542,-1,217.6,134.8,59.6,158.2,1\n542,-1,1590.5,582.1,69.1,242.2,1\n542,-1,359.7,112.5,52.9,170.8,1\n542,-1,200.9,811.3,97.1,269.7,0.999\n542,-1,406.9,46.9,49,158.8,0.999\n542,-1,926.9,1.2,58,104.3,0.999\n542,-1,260.6,849.8,76.3,231.2,0.999\n542,-1,129.9,271.8,54.1,216.3,0.994\n542,-1,984.2,756.2,118,250.3,0.992\n542,-1,1063.7,769,88.3,241.7,0.986\n542,-1,756.5,83.5,44.7,151.6,0.956\n518,-1,1221.5,30.6,61.9,119.6,1\n518,-1,1490.5,1,59.4,140.4,1\n518,-1,686.6,207,80.1,113.3,1\n518,-1,994.7,1,55.3,122.8,1\n518,-1,1672.6,22.5,54.9,165.3,1\n518,-1,161.7,324.9,66.7,190.4,1\n518,-1,391.9,185.1,62.1,187.7,1\n518,-1,884.3,1.8,52.6,120.4,1\n518,-1,827.4,610.6,73.5,254.8,1\n518,-1,1735.1,627.6,70.2,217.3,1\n518,-1,788.4,145.3,55.7,174.6,1\n518,-1,1567.3,599.1,63.7,239.9,1\n518,-1,1612.5,13.8,54.6,175.6,1\n518,-1,459.6,131.8,68.4,185.6,1\n518,-1,1719.9,461.7,79.5,203.3,1\n518,-1,930.5,2.5,57.7,117.8,1\n518,-1,1850.9,215.5,70.1,186,1\n518,-1,287,128.8,54.3,166.1,1\n518,-1,346.3,171,48.4,163.6,1\n518,-1,1604,298,63,202.2,1\n518,-1,946.4,710.9,122.8,264.6,1\n518,-1,1708.1,319.7,90.6,200,1\n518,-1,195.9,778.4,93.9,271.9,1\n518,-1,732.7,92.4,66.1,169.1,1\n518,-1,515.7,95.6,57.8,181.4,1\n518,-1,216.8,136,63.9,160.7,1\n518,-1,451.3,3.3,75.1,179.4,1\n518,-1,274.4,804.5,82.6,264.5,1\n518,-1,1760.1,206.4,58.3,168.3,1\n518,-1,398.7,25.5,47.3,162.1,0.999\n518,-1,574.2,67.7,43.8,151,0.998\n518,-1,1046,931.2,74.4,149.8,0.084\n977,-1,686.8,206.4,79.2,112.9,1\n977,-1,793,140.5,74.5,172.2,1\n977,-1,1221.9,31.2,60.9,118.7,1\n977,-1,1171.5,106.2,59.2,166.4,1\n977,-1,411.3,259.1,68.5,195.7,1\n977,-1,1575.8,589.9,102.1,235.9,1\n977,-1,1469.1,155.1,68.9,167.3,1\n977,-1,493.7,246.4,67.1,189,1\n977,-1,1780.7,167.8,70.1,182.3,1\n977,-1,230.4,138.3,55.2,163,1\n977,-1,307.3,436.6,83.9,202,1\n977,-1,1658.7,128.9,57.3,170.3,1\n977,-1,752.4,72.6,55.2,163.8,1\n977,-1,335,813.2,93.1,267.8,1\n977,-1,846,332.3,64.4,205.2,1\n977,-1,1720.3,451.7,79.6,216.7,1\n977,-1,325.3,253.6,62.3,198.8,1\n977,-1,549.9,120.2,52.1,166.8,1\n977,-1,926.8,319.7,67.4,212.9,1\n977,-1,1454.2,1,58.8,102,1\n977,-1,1199.6,696.6,91.7,274.8,1\n977,-1,391.3,429.8,65.4,217.2,1\n977,-1,1739.1,676.1,98.5,252.6,1\n977,-1,313.8,1,47.3,129,1\n977,-1,448.5,62.8,54.7,183.9,1\n977,-1,290.6,127.2,53,174.6,1\n977,-1,1393.6,1,46.6,97.1,1\n977,-1,348.5,166.3,69.2,187,1\n977,-1,380.4,1,54.5,131.5,0.999\n977,-1,488,62.3,53.2,156.4,0.998\n580,-1,1221.3,30.7,62,118.8,1\n580,-1,686.7,205.6,79.5,114.2,1\n580,-1,1480.8,5.5,60.4,144.1,1\n580,-1,1647.2,1,54.6,131.8,1\n580,-1,800,146.1,63.6,172.4,1\n580,-1,377.5,247.8,67.3,196.1,1\n580,-1,1715.6,453.4,85.8,213.7,1\n580,-1,214.3,273.6,63,192.6,1\n580,-1,288.3,125.2,52.7,169.6,1\n580,-1,1650.9,245.5,78.9,203.3,1\n580,-1,1574.5,588.6,93.6,233.6,1\n580,-1,216.3,137.8,50.6,156.8,1\n580,-1,556.9,113.6,52.2,173.6,1\n580,-1,155,252.7,61.7,209.9,1\n580,-1,874.6,2.8,51.2,101,1\n580,-1,754.4,79.8,44,155.5,1\n580,-1,457.9,119.4,50.6,153.7,1\n580,-1,358.4,109.6,53.1,175.2,1\n580,-1,1844.5,259.4,67.6,179.9,1\n580,-1,1045.1,825.7,130.1,255.3,1\n580,-1,706.5,574.8,81.4,252,1\n580,-1,423.9,58.5,46.1,170.8,0.998\n580,-1,1011,932.3,67.6,148.7,0.27\n580,-1,1126,838.5,89.3,241.7,0.051\n423,-1,1221.6,30.3,62.5,119.7,1\n423,-1,686.9,205,78.6,115.6,1\n423,-1,1668.8,73.7,67.7,175,1\n423,-1,942.9,11.4,61.8,164.3,1\n423,-1,359.2,110.6,54,174.7,1\n423,-1,1251.9,508.4,88.9,208.6,1\n423,-1,1719.7,457.7,79.1,207.5,1\n423,-1,110.6,351.1,52.4,185.8,1\n423,-1,451.6,242.5,78,204.2,1\n423,-1,839.1,1,52,133.6,1\n423,-1,1008.9,25.8,53.8,157.4,1\n423,-1,1577.9,614.8,96.3,243,1\n423,-1,286.4,127.9,54.5,165.2,1\n423,-1,544.3,70.4,56.6,164.9,1\n423,-1,734.4,561.2,75.2,240.3,1\n423,-1,1765.1,135.2,55.5,164.9,1\n423,-1,284.6,610.2,95.7,248.8,1\n423,-1,864.3,546.5,103.1,242.1,1\n423,-1,798.5,149.7,54.3,174,1\n423,-1,216,255.9,53.1,182.2,1\n423,-1,220.9,139.9,72.5,162.9,1\n423,-1,389.8,631.8,74.1,239.3,1\n423,-1,358.9,1.9,67,120.4,1\n423,-1,428.4,108.6,52.7,164.5,1\n423,-1,942.5,566.3,83.6,223,1\n423,-1,714.1,91.4,62.3,172.6,1\n423,-1,424.9,1.6,44.1,124.7,0.999\n423,-1,718.7,1.8,51.3,121.6,0.999\n423,-1,455.5,59.5,71.5,195.8,0.999\n423,-1,1805.4,70.2,75.7,175.5,0.993\n423,-1,987,930.6,81.1,150.4,0.164\n423,-1,1869.1,429.6,51.9,185.9,0.144\n355,-1,1222.3,31.1,61,119.2,1\n355,-1,688.2,206.9,76.9,113.3,1\n355,-1,1616.5,1,70.2,153,1\n355,-1,1440.1,2.6,50,110.5,1\n355,-1,1749,83.6,58.8,154.8,1\n355,-1,1014.1,420.8,69.7,196.7,1\n355,-1,427.7,333.9,81.8,212.5,1\n355,-1,287.4,131.2,55.7,172.8,1\n355,-1,1032,60.5,54.6,169.3,1\n355,-1,109.6,350.7,53,189,1\n355,-1,1720.7,456.6,77.6,214.3,1\n355,-1,1823.1,478.7,69.5,206.6,1\n355,-1,445.8,86.7,69.9,203.7,1\n355,-1,964.4,54.6,63.5,174.7,1\n355,-1,364.4,107.4,54.9,179.6,1\n355,-1,1556,619.8,93,246.6,1\n355,-1,208.1,137.7,57.4,162.5,1\n355,-1,489.7,580.4,100.5,238.1,1\n355,-1,796.7,149.8,60.9,175.1,1\n355,-1,223,329.2,55.5,184.8,1\n355,-1,387.6,503,83.8,233.1,1\n355,-1,514.4,90.5,43.1,168.7,1\n355,-1,923,8,65,165.3,1\n355,-1,1858.3,58.5,53.9,164.9,1\n355,-1,903.1,478,78.2,207.8,1\n355,-1,842.6,1.8,49.7,98,1\n355,-1,841.8,462,85.5,226.7,0.999\n355,-1,764.1,92.6,43.9,152.9,0.999\n355,-1,953.8,927.8,80.4,153.2,0.79\n355,-1,710.4,91.6,54.8,169.9,0.209\n976,-1,686.7,206.3,79.2,112.8,1\n976,-1,1221.9,30.8,61.5,119.8,1\n976,-1,793.1,141.1,73.1,170.7,1\n976,-1,305,436.4,87.3,197.2,1\n976,-1,1168.5,104.7,59.7,167.8,1\n976,-1,1656,128.1,58.4,169.5,1\n976,-1,1780,166.3,67.8,182,1\n976,-1,412.3,257.6,67.6,194.7,1\n976,-1,493,244.5,67.9,191,1\n976,-1,229.6,138.1,56.3,162.8,1\n976,-1,1576.6,589.8,101.5,236.2,1\n976,-1,1469.7,153.7,68.8,168.2,1\n976,-1,846.2,333.1,66.1,207.4,1\n976,-1,334,812,92.5,269,1\n976,-1,752.2,72.8,55.4,162.9,1\n976,-1,1721.5,453.7,77.7,213.4,1\n976,-1,326.6,249.3,61.8,204.6,1\n976,-1,550.8,116.8,49.8,170.6,1\n976,-1,928.2,320.6,65.9,213.1,1\n976,-1,1454.5,1,58.4,102,1\n976,-1,1201.2,700.4,91.1,270.9,1\n976,-1,391.3,429.1,66.1,216.9,1\n976,-1,448.2,61.3,55.1,184.8,1\n976,-1,1740.3,677.1,96.5,251,1\n976,-1,314,1,47.2,128.7,1\n976,-1,290.2,127.7,53,171.7,1\n976,-1,1394.8,1,46.4,95.7,1\n976,-1,344.9,165.6,69.8,187.8,1\n976,-1,379.7,1,55.9,130.9,0.999\n976,-1,485.9,61.9,56,157.4,0.999\n803,-1,1221.5,29.9,62,118.1,1\n803,-1,686.7,205.7,79.8,114.2,1\n803,-1,282,530.7,78,236,1\n803,-1,1723.6,451.4,75,215.7,1\n803,-1,1613.6,1,57.7,133.5,1\n803,-1,785.2,130.7,50.6,180.4,1\n803,-1,549,114.3,63.3,177,1\n803,-1,1574.7,590,100.2,235.7,1\n803,-1,278.3,166.7,59.5,196.8,1\n803,-1,478.7,99.7,62.2,177.2,1\n803,-1,1478.6,30.3,60.5,150.3,1\n803,-1,232.4,134.6,51.9,165,1\n803,-1,385.4,241.3,70.2,175.5,1\n803,-1,1076.7,585.5,81.5,245.7,1\n803,-1,439.4,231.8,58.2,198.8,1\n803,-1,1005.4,612.5,78.8,243.7,1\n803,-1,750.5,70.9,56.9,163.4,1\n803,-1,347.3,180.5,50.2,178.3,1\n803,-1,254.1,1.5,53,123.2,1\n803,-1,1439,56.9,49.8,156.1,1\n803,-1,422,99.1,58.6,167.9,1\n803,-1,442.2,1.9,43.4,83.5,0.999\n803,-1,614.2,582.1,91.4,236.1,0.533\n251,-1,1221.5,31.3,62.7,117.5,1\n251,-1,1603.9,7,66.9,148.3,1\n251,-1,686.6,207.3,79.1,112.6,1\n251,-1,391.8,512.3,90.1,244.1,1\n251,-1,212,127.2,55.7,165.6,1\n251,-1,1480.9,57.6,53.8,151.2,1\n251,-1,797.1,154.2,59,173.3,1\n251,-1,287.5,127.3,55.5,170.9,1\n251,-1,1378.3,569.2,104.4,238.4,1\n251,-1,355.9,105.7,54,181.6,1\n251,-1,1720.1,457.4,79.1,211,1\n251,-1,1151.2,112.8,50.9,164.6,1\n251,-1,224.8,462.8,59.9,197.2,1\n251,-1,449.3,172.2,76.3,208.1,1\n251,-1,108.9,349.9,50.7,190.2,1\n251,-1,704.4,1.5,53.9,155.7,1\n251,-1,219.9,735.6,91.1,258.8,1\n251,-1,1073.8,115.1,57.4,182.7,1\n251,-1,935.3,109.8,71.3,180.4,1\n251,-1,488,365.4,76.1,228.7,1\n251,-1,127.6,570.1,84.4,240.9,1\n251,-1,512.6,116.9,55.8,178,1\n251,-1,855.1,352.4,79.5,198.9,1\n251,-1,582.2,379.4,64.5,206.4,1\n251,-1,791.4,345.5,83.3,207,1\n251,-1,764.7,100.9,52.8,170.4,0.999\n251,-1,928.2,906.2,77.1,174.8,0.997\n251,-1,908,111,47.2,152.1,0.989\n1025,-1,1221.6,29.8,62,120.2,1\n1025,-1,686.9,206.7,79.5,112.9,1\n1025,-1,373.1,304.6,75,201.4,1\n1025,-1,793.5,141.7,72,171.7,1\n1025,-1,491.7,298.4,68.3,192.8,1\n1025,-1,1699.7,182.9,61.3,183.2,1\n1025,-1,289,128.1,52.2,166.6,1\n1025,-1,930.1,256.6,69.2,207.1,1\n1025,-1,843,268.6,66.5,194.7,1\n1025,-1,1249.8,169.1,62.9,173.9,1\n1025,-1,1143.5,589.3,90.5,257.9,1\n1025,-1,232.5,140.8,57.2,161.5,1\n1025,-1,1721.8,455.7,77.8,211.4,1\n1025,-1,287.9,504.2,89.5,204.4,1\n1025,-1,378.7,491.2,63,227.5,1\n1025,-1,294.3,304.7,66.5,206.6,1\n1025,-1,750.8,75.2,54.1,159.7,1\n1025,-1,1839.5,229.7,61,187.4,1\n1025,-1,1576.3,589.5,101.8,239.9,1\n1025,-1,539.3,118.9,61.6,176.6,1\n1025,-1,1702.3,684.2,92.4,238.1,1\n1025,-1,1468.8,197.3,65.3,161.7,1\n1025,-1,463.6,164.5,76.5,198,1\n1025,-1,580.9,554.9,75.3,234.4,1\n1025,-1,418.3,170.5,57.7,161.1,1\n1025,-1,374.7,103.9,59.2,176.2,1\n1025,-1,312.6,2,36.1,130.6,0.999\n1025,-1,361,921.1,91.8,159.9,0.415\n76,-1,1221.9,30.5,61.2,118.3,1\n76,-1,1247.3,174.7,68.6,157.8,1\n76,-1,1487,69.7,55.7,147.2,1\n76,-1,704.1,1,56.3,159.8,1\n76,-1,686.8,206.1,79.7,116.8,1\n76,-1,411,329.6,83.2,230.4,1\n76,-1,356.7,106.2,54.5,178.2,1\n76,-1,1722.6,456.3,75.8,210,1\n76,-1,1361.4,566.7,105.3,244.5,1\n76,-1,489.8,201,80.3,196.3,1\n76,-1,986,186.5,70.2,186.2,1\n76,-1,10.6,729.5,71.5,232.7,1\n76,-1,1429.8,200,76.1,195.4,1\n76,-1,102.7,546,85.4,253.9,1\n76,-1,290,129.5,53.4,165.7,1\n76,-1,776.5,191.8,70.8,179.3,1\n76,-1,135.1,357.8,49.8,185.8,1\n76,-1,1334.8,203.2,40,164.6,1\n76,-1,211.9,131.9,51.4,162,1\n76,-1,538.4,63.1,48.7,169.6,1\n76,-1,840.6,171.8,57.8,185.1,1\n76,-1,434.8,25.4,52.2,161,1\n76,-1,885.8,192,55.6,170.6,1\n76,-1,380.7,28.2,53.9,166.3,0.999\n76,-1,472.3,121.4,61.6,149.5,0.999\n76,-1,389.5,900.1,97.1,180.9,0.999\n76,-1,253.3,98.3,57.6,174.1,0.996\n76,-1,1502,210.4,41,154.9,0.182\n475,-1,1222.2,30.6,61.9,118.3,1\n475,-1,687,205.9,78.9,113.8,1\n475,-1,1000.9,1,57.6,149.7,1\n475,-1,451.3,177.9,72.7,194.5,1\n475,-1,288.4,206.7,52.4,167.2,1\n475,-1,934.1,1,57.4,143.8,1\n475,-1,360,110.7,55.4,174.9,1\n475,-1,1696.3,457.1,105.3,210.4,1\n475,-1,1503.9,1,58.6,118.8,1\n475,-1,1788.4,364.5,88.8,211.1,1\n475,-1,878,1.3,51.2,133.5,1\n475,-1,1535.5,599.9,78.8,242.5,1\n475,-1,803.8,144.1,47.6,177.5,1\n475,-1,1724.6,177.2,65.7,162,1\n475,-1,230.5,696.6,89.7,267.5,1\n475,-1,809.8,591.5,94.2,256.9,1\n475,-1,1640.3,341,63.2,199.3,1\n475,-1,124.6,343.2,58.6,187.7,1\n475,-1,217.9,136.1,63.6,162.4,1\n475,-1,325,728.6,75.4,253.3,1\n475,-1,905.9,626.5,115.6,247.9,1\n475,-1,1774.4,148.9,83.2,176.7,1\n475,-1,514.1,85.4,60.7,172.5,1\n475,-1,446.3,32.3,71.9,180.2,1\n475,-1,1708.4,53.6,51.8,167.7,1\n475,-1,1659.8,43.5,58,173.3,0.999\n475,-1,714.3,94.2,54.1,162.4,0.999\n475,-1,753.2,99,53.3,139.8,0.999\n475,-1,412.9,7.1,46.2,152.2,0.998\n475,-1,1023.2,925.6,83.1,155.4,0.954\n475,-1,989.5,653,77.4,229.7,0.951\n475,-1,430.5,152.7,56,180.6,0.33\n700,-1,1221.6,30.3,61.9,118,1\n700,-1,687.2,206.4,79.2,113.7,1\n700,-1,1482.4,6.3,58.6,146.1,1\n700,-1,1604,140.9,70.9,182.7,1\n700,-1,1710.6,457.5,98.2,206,1\n700,-1,1477.8,135.3,52,171.9,1\n700,-1,561.9,110.3,53.6,178.7,1\n700,-1,299.4,378.9,73.9,215.4,1\n700,-1,417.3,150,71.1,164.5,1\n700,-1,383.7,536.7,72.8,253.2,1\n700,-1,1574.9,588.8,97.7,236.6,1\n700,-1,485.6,137.6,48,184.2,1\n700,-1,1315.8,803.2,92.6,271.2,1\n700,-1,802.9,139.3,48.4,180.3,1\n700,-1,360.3,109.1,49.7,175.3,1\n700,-1,477.4,26,45.4,141.5,1\n700,-1,749.8,78.5,50.4,157.7,1\n700,-1,1022.6,1.7,65.4,90.7,1\n700,-1,1232.1,822,87.6,259,1\n700,-1,408.6,23.1,57.1,161.2,1\n700,-1,304.8,212.1,57.2,180.4,1\n700,-1,254.9,199.4,60.1,195.7,1\n700,-1,226.7,134.2,53,163.8,1\n700,-1,831.4,928.5,81.9,152.5,0.726\n97,-1,1222,30.3,61.6,116.7,1\n97,-1,704.8,1,55.8,161,1\n97,-1,397.8,841.6,99.6,239.4,1\n97,-1,1487.4,69.2,55.2,149,1\n97,-1,356.5,107.2,54.7,176.9,1\n97,-1,424.8,305.4,76.5,233.1,1\n97,-1,958.1,199,73.3,188.6,1\n97,-1,1358.5,566,105,246.3,1\n97,-1,1181.8,155.6,79.3,172.3,1\n97,-1,1722.2,456.7,76.4,211.3,1\n97,-1,101.9,546.3,86.8,254.8,1\n97,-1,111.6,350.7,49.9,191.4,1\n97,-1,292.2,123.4,54.9,174.2,1\n97,-1,209.8,128.9,49.8,167.2,1\n97,-1,504.4,220.5,69.2,197,1\n97,-1,714.4,188.7,58.3,163.2,1\n97,-1,1280.9,194.5,47.5,169.7,1\n97,-1,29.9,695.2,65.7,228.7,1\n97,-1,539.6,65.2,47.4,165.8,1\n97,-1,1449.1,190.7,60.2,179.7,1\n97,-1,438.1,9.1,51.5,157.1,1\n97,-1,863.2,211,53.8,164.2,1\n97,-1,377.2,14.8,50.4,159.6,1\n97,-1,819.9,193.8,60.3,184.1,1\n97,-1,1402.8,192.6,59.1,192.5,1\n97,-1,482.2,136.5,57.6,163.8,0.999\n97,-1,256,90,64,186.4,0.998\n97,-1,482.3,37.2,59.8,157,0.993\n53,-1,1221.2,29.8,62.6,117.7,1\n53,-1,686.5,206.4,79.5,113.3,1\n53,-1,399.4,350.8,86.5,232.7,1\n53,-1,490.1,179.4,87.9,196.1,1\n53,-1,1487.2,70.1,55.1,148.8,1\n53,-1,1361.9,567,103.8,244.7,1\n53,-1,704.6,1,55.2,157.9,1\n53,-1,213.6,127.2,50,165.5,1\n53,-1,354.6,110.5,55.2,173.3,1\n53,-1,1721.8,457.4,77.1,208.9,1\n53,-1,160.4,361.1,63.6,194.8,1\n53,-1,1008.3,170.1,72.8,183.1,1\n53,-1,284.4,127.6,54.3,168.8,1\n53,-1,102.4,546.5,85.3,252.8,1\n53,-1,793.2,147.2,63.5,181,1\n53,-1,876.1,193.2,64.9,183.4,1\n53,-1,4.8,780.9,71,237,1\n53,-1,431.7,97.6,57.4,157.9,1\n53,-1,1316.8,173.6,57.1,172.7,1\n53,-1,540.4,62.9,45.2,169.1,1\n53,-1,485.8,45.4,55.8,158.6,0.999\n53,-1,1478.7,215.2,61.7,198.1,0.999\n53,-1,1375.1,213.8,41.1,169.9,0.999\n53,-1,1858.4,270.6,62.6,197.7,0.999\n53,-1,391.9,53.7,49.3,161.3,0.991\n132,-1,1221.5,30.3,61.9,117.6,1\n132,-1,1488.1,68.7,55.5,149.4,1\n132,-1,356.6,104.3,56.3,180.5,1\n132,-1,704.1,1,56.1,157.5,1\n132,-1,393.8,751.5,99,273.1,1\n132,-1,108.1,353.1,50.5,183.9,1\n132,-1,1722.1,456.1,76.8,210.8,1\n132,-1,287.6,127.1,55.6,169.4,1\n132,-1,423.7,274.2,75.5,224.8,1\n132,-1,1359.1,566.7,104.6,246.1,1\n132,-1,687.8,206.2,78,114.5,1\n132,-1,538.4,67.3,50.4,161.3,1\n132,-1,1085.5,140,55.4,177.4,1\n132,-1,894.5,209.4,74.6,197.9,1\n132,-1,219.3,127.7,50.5,163.3,1\n132,-1,1208.6,172.7,45.5,165.1,1\n132,-1,527.5,252.9,68.4,210.9,1\n132,-1,477,175.9,59.6,170.7,1\n132,-1,378.9,1,48.8,139.7,1\n132,-1,120.4,647.9,68.4,215.3,1\n132,-1,822.4,237,57.1,175.6,1\n132,-1,477.2,46.8,55.9,156.4,1\n132,-1,776.3,226.8,62,189.2,1\n132,-1,1328.4,182.6,54.5,179.2,1\n132,-1,448,1,50.5,139.7,0.998\n132,-1,1078.2,924.3,83.5,156.7,0.938\n539,-1,1221.4,30,62.4,121.1,1\n539,-1,1487.6,2.4,58.1,141.6,1\n539,-1,687.3,206.3,77.9,114.1,1\n539,-1,779.9,146.9,63.5,172.6,1\n539,-1,387.9,202.9,63.5,192.8,1\n539,-1,992.8,1.2,52.9,107.2,1\n539,-1,288.6,122.6,54.1,173.6,1\n539,-1,1717.4,457,82.5,209.6,1\n539,-1,879.2,2,52.3,112.5,1\n539,-1,1684.2,294.8,73.6,202.6,1\n539,-1,1660.4,3,53.7,161.4,1\n539,-1,173.8,308.9,66.9,195.4,1\n539,-1,1774.9,226.9,69.7,175.5,1\n539,-1,520.9,103.4,59.7,180.5,1\n539,-1,458.3,111.2,68.2,177.1,1\n539,-1,797.4,598.4,80.6,264.1,1\n539,-1,1599.5,1,54.8,161.7,1\n539,-1,214.5,133.6,64.8,165,1\n539,-1,929.5,1.4,55.4,107.1,1\n539,-1,1590,587.4,66.7,240.4,1\n539,-1,261.7,843.8,78.5,237.2,1\n539,-1,406,44.3,49.7,154.6,0.999\n539,-1,974.7,746.7,126,257.7,0.999\n539,-1,196.9,802.9,98.1,278.1,0.999\n539,-1,361.9,115.8,53,169.6,0.999\n539,-1,450.9,1.6,66.7,156.9,0.972\n539,-1,1064.1,767.7,79.9,244,0.446\n539,-1,133.4,273.6,42.7,209.3,0.279\n498,-1,1221.4,30.3,62.5,118.5,1\n498,-1,686.4,206.2,79.8,112.8,1\n498,-1,1496.8,1,57.9,129.6,1\n498,-1,998.9,1,55.6,132,1\n498,-1,1821.2,178.2,83.2,190.6,1\n498,-1,794.4,141.4,61.6,179.5,1\n498,-1,467.2,154.5,64,192,1\n498,-1,1734.1,190.9,69.1,174.5,1\n498,-1,1542.7,597.8,86.7,243.5,1\n498,-1,931.7,1,55.8,129.5,1\n498,-1,1647.4,599,69,214.6,1\n498,-1,211.6,739.9,95.2,266,1\n498,-1,1686.1,39.4,55.5,165.4,1\n498,-1,1623,323.8,61.4,190.5,1\n498,-1,1724.4,456.4,76.4,210.9,1\n498,-1,878.3,1,51.7,126.3,1\n498,-1,405.9,165.5,60.5,186.7,1\n498,-1,298.8,771.6,77.5,263,1\n498,-1,816.7,607.8,83.6,258.5,1\n498,-1,141.5,336.5,64.5,187.8,1\n498,-1,923.7,672.7,115.3,252.2,1\n498,-1,316.1,189.7,48.9,165.1,1\n498,-1,1624.9,29.5,58.3,174.3,1\n498,-1,217.3,134.3,63.4,163.7,1\n498,-1,1750.3,340.4,78.2,217,1\n498,-1,715.8,92.9,60.1,166.6,1\n498,-1,507.8,96,60.8,174.6,1\n498,-1,449.4,15.7,74.6,181.6,1\n498,-1,360.2,113.1,53.9,171.8,1\n498,-1,403,16.1,48.3,161.8,0.999\n498,-1,286.3,126.7,54.3,168.2,0.999\n498,-1,1011.7,689.5,83.8,231.4,0.999\n498,-1,1020.4,936,83.7,145,0.091\n872,-1,1221.4,29.3,61.8,118.8,1\n872,-1,687.1,206.2,79.2,113.1,1\n872,-1,1478.6,79.6,57.9,153.2,1\n872,-1,794.6,137.8,77.5,176.3,1\n872,-1,480.2,1.4,48.9,125.6,1\n872,-1,1087.5,2.6,56.6,139.3,1\n872,-1,277.8,631.9,86.5,258.8,1\n872,-1,1690.6,48.8,53.1,162.5,1\n872,-1,333.8,313.3,85.3,179,1\n872,-1,1722.1,454.6,77.3,211.8,1\n872,-1,1575.5,588.8,103.1,237.2,1\n872,-1,300.1,160.5,70.3,196.6,1\n872,-1,558,117.7,58.9,175.1,1\n872,-1,1579.1,23.7,50.9,144.6,1\n872,-1,476.5,159,63.4,190.4,1\n872,-1,901.8,485.1,70.2,229.7,1\n872,-1,1417.3,12.7,50.5,154.3,1\n872,-1,988.2,469.7,73.8,234.5,1\n872,-1,753.4,72.2,54.1,162.2,1\n872,-1,238.9,132.4,53.5,167.1,1\n872,-1,253.5,1,54.1,119.4,1\n872,-1,429.7,306.6,57.3,200.8,1\n872,-1,412.7,158.5,57.4,174.6,1\n49,-1,396.2,358.7,86.6,233.7,1\n49,-1,1220.5,29.4,63.5,116.2,1\n49,-1,685.9,206.4,79.9,113.6,1\n49,-1,1362.1,566.6,104.5,245.8,1\n49,-1,1487.7,70.2,54.8,149.5,1\n49,-1,490.1,175.2,89.2,198,1\n49,-1,705,1,55.3,157.3,1\n49,-1,1722.2,456.2,76.7,210.8,1\n49,-1,354.9,107.8,55.5,176.4,1\n49,-1,893.4,198.7,65.7,176.8,1\n49,-1,165.3,364.4,65.2,191.8,1\n49,-1,213.3,125.8,49.4,166.9,1\n49,-1,1006.5,164.8,78.9,189.7,1\n49,-1,794.7,147.6,62.9,178.3,1\n49,-1,102.3,547,85.9,252.4,1\n49,-1,283.8,126.3,54.2,170.3,1\n49,-1,422.3,97.5,54.4,154.3,1\n49,-1,3.6,783.6,70.5,246,1\n49,-1,1325.4,178.5,54.3,167.7,1\n49,-1,1855.3,275.3,65.7,190,1\n49,-1,485.5,45.7,56.9,155.3,1\n49,-1,1484.2,215.7,62.8,198.2,0.999\n49,-1,1378.3,224.3,44.5,160.5,0.999\n49,-1,540.6,62.8,44.6,172.6,0.999\n49,-1,859.4,155.3,64.3,183.4,0.994\n49,-1,446.3,43.6,42.1,161.2,0.088\n1039,-1,1221.6,29.8,61.1,119.8,1\n1039,-1,687.1,206.5,79.4,114.5,1\n1039,-1,794,142,70.1,172,1\n1039,-1,482.3,316.2,75.2,197.8,1\n1039,-1,1720.3,455.8,80.2,215.2,1\n1039,-1,289.7,127.6,52.2,169.3,1\n1039,-1,232,139,55.5,163.9,1\n1039,-1,937.6,237.8,66.1,205.2,1\n1039,-1,1127.8,561.6,90.5,256,1\n1039,-1,1285.4,188.1,64,165.5,1\n1039,-1,363.3,322.2,74.4,196.4,1\n1039,-1,279.7,534.3,94.9,203.9,1\n1039,-1,751.7,74.9,54.1,161.4,1\n1039,-1,850,250.7,63.8,198.3,1\n1039,-1,293,317.6,70.1,205.9,1\n1039,-1,1712.6,206.1,59.2,180.5,1\n1039,-1,445.6,170.7,64.4,170.2,1\n1039,-1,374.4,506.4,66.3,234.1,1\n1039,-1,370.5,104.5,58.5,175.2,1\n1039,-1,1855.4,241,65,198.4,1\n1039,-1,1468.4,210,74.5,168.8,1\n1039,-1,1664.1,674.7,89.4,236.8,1\n1039,-1,1573.7,589,103.8,241.7,1\n1039,-1,307.6,2.6,37.4,127.3,1\n1039,-1,580.7,538.7,69.4,252.9,1\n1039,-1,498.6,169,72.4,189.8,1\n1039,-1,539.4,117.1,58.6,177.3,0.994\n1039,-1,431.7,67.1,66,190.8,0.984\n417,-1,1221.8,29.9,61.3,119.3,1\n417,-1,686.7,205.7,78.8,114.4,1\n417,-1,1719.9,458.6,77.8,205.3,1\n417,-1,551.6,70.6,55.7,165.4,1\n417,-1,453.8,245.6,80.8,205.9,1\n417,-1,944.3,15.4,61.4,167.6,1\n417,-1,359,110.7,54.4,174.5,1\n417,-1,1662.6,66.3,72.7,172.1,1\n417,-1,109.8,348,53,190.2,1\n417,-1,1006.3,30,55.3,161.1,1\n417,-1,1582.3,616.3,101.2,241,1\n417,-1,287.1,130.1,54,164.2,1\n417,-1,1232.8,502.9,78.5,204.2,1\n417,-1,836,1.3,51.2,131.3,1\n417,-1,1769.2,133.3,52.2,159.4,1\n417,-1,210.2,261,54.5,179.7,1\n417,-1,397.2,624.4,78,233.7,1\n417,-1,357.8,1,68.9,117.8,1\n417,-1,290,595.8,89.4,248.7,1\n417,-1,796.8,149.6,57.1,173.4,1\n417,-1,219.8,141.5,71.9,157.8,1\n417,-1,859.7,541.5,110.7,247.6,1\n417,-1,1830.6,75.8,77.5,179.2,1\n417,-1,716.8,1,50.6,127.9,1\n417,-1,426.4,97.7,53.7,170.6,1\n417,-1,715.1,556.2,87.2,247.5,1\n417,-1,424,1.1,46.4,119.6,1\n417,-1,460.4,64.4,67.1,196.5,0.999\n417,-1,713.9,89.6,62.4,174.4,0.999\n417,-1,938,555.9,80.8,221.1,0.997\n417,-1,983.2,926.1,81.6,154.9,0.456\n223,-1,1221.2,30.5,61.1,120.1,1\n223,-1,686.3,206.8,79.2,113.5,1\n223,-1,795,143,66,180.6,1\n223,-1,109,346.9,51.4,191.1,1\n223,-1,1492.4,68.3,53.8,149.4,1\n223,-1,705.5,1.1,55.2,159.9,1\n223,-1,1195,131.6,45.6,164.6,1\n223,-1,212.1,127.7,55,165.6,1\n223,-1,289,126.6,55.1,173.1,1\n223,-1,431.2,190,74.3,215.5,1\n223,-1,400,567.2,85.4,244.7,1\n223,-1,356.8,107.2,53.4,178.4,1\n223,-1,1721.6,456.6,77.5,212.2,1\n223,-1,1356.6,567.2,104.8,244.7,1\n223,-1,903.9,138.7,75.5,184.1,1\n223,-1,1115.4,129.4,60.5,183.8,1\n223,-1,134.7,672.3,102,258.9,1\n223,-1,507.1,334.9,73,221.6,1\n223,-1,518.9,123.4,47.3,175.8,1\n223,-1,216.8,503.7,60.7,200.1,1\n223,-1,765.5,317.4,77.8,202.2,1\n223,-1,825.9,324.1,74.7,191.1,1\n223,-1,68.6,626.3,102.8,244.3,1\n223,-1,984.9,127,39.7,153.1,1\n223,-1,1572.8,2.4,53.3,138.4,0.999\n223,-1,596.1,347.2,59.5,198.6,0.997\n223,-1,940.1,908.1,71.2,172.9,0.994\n157,-1,1221.8,30.9,62.6,118.3,1\n157,-1,996.5,131.5,74.7,168.9,1\n157,-1,1488.4,68.1,55.5,150.2,1\n157,-1,356.1,103.7,54.7,180.3,1\n157,-1,441.5,37.4,60.9,164.2,1\n157,-1,109.7,349.8,49.6,188.4,1\n157,-1,704.7,1,55.6,158.6,1\n157,-1,287.9,123.7,55.5,174.1,1\n157,-1,213.7,123.8,55.4,168.9,1\n157,-1,1357.9,567.3,106.7,244.3,1\n157,-1,1721.8,457.2,77,211.3,1\n157,-1,686.4,206.8,79.6,113.6,1\n157,-1,408.3,706.9,89.4,262.1,1\n157,-1,538.8,65,50.3,165.2,1\n157,-1,1151.7,160.4,46.2,157,1\n157,-1,420.2,249.6,79.4,223.8,1\n157,-1,101.2,545.1,85.6,254.5,1\n157,-1,198.9,609.4,64.1,217.7,1\n157,-1,592.4,263.6,61.2,196.1,1\n157,-1,857.5,203,71.9,192.4,1\n157,-1,387.3,4.4,45.7,116.5,1\n157,-1,1261.7,173,65.8,169.8,1\n157,-1,530.6,271.1,63.1,209,1\n157,-1,802.6,263.3,62.7,180.8,1\n157,-1,492.9,204.5,60.5,168.5,1\n157,-1,754.6,253.3,68.8,185.4,1\n157,-1,795.1,147.4,61.5,180.1,0.999\n157,-1,1035.8,909.4,70.4,171.6,0.981\n396,-1,1222.3,30.2,61.2,118.9,1\n396,-1,686.5,206.4,79.3,113.3,1\n396,-1,1639.3,36.9,63.3,173.6,1\n396,-1,451.4,275.2,78.4,207.6,1\n396,-1,358.8,105.8,55.3,179.5,1\n396,-1,1772.6,114.5,67.9,164.7,1\n396,-1,948,25.4,65.3,173.2,1\n396,-1,1150.2,473,71.9,202.1,1\n396,-1,794.7,152.3,60.4,170.6,1\n396,-1,828,2,55.6,119.5,1\n396,-1,315.8,562.8,91.1,248.1,1\n396,-1,283.3,128.1,55.3,166.4,1\n396,-1,108.6,349.4,52.5,190.2,1\n396,-1,220.2,142.3,61.9,155.4,1\n396,-1,1717.1,458.8,82.2,211,1\n396,-1,364.4,2.7,62.9,100,1\n396,-1,432.7,585.5,72.1,239,1\n396,-1,205.1,283.9,54.5,182.2,1\n396,-1,1010.3,40.4,55,160.4,1\n396,-1,1593.6,621.9,89.8,254.4,1\n396,-1,463.2,71.7,69,189.3,1\n396,-1,922.2,526.5,79.7,217.4,1\n396,-1,546.9,66.6,55.9,171.2,1\n396,-1,851.9,515.8,91.6,234.2,1\n396,-1,712.8,1.3,51.5,139.1,0.999\n396,-1,430.1,83.7,47.2,171.7,0.998\n396,-1,979.9,906.8,87.5,174.2,0.99\n396,-1,711.6,100.9,58.7,165.9,0.988\n396,-1,1767.6,425.4,68.5,212.9,0.98\n513,-1,1221.1,29.8,62,119.4,1\n513,-1,1492.9,1,60.1,135.7,1\n513,-1,686,207,80.9,113.5,1\n513,-1,997,1,54.7,123.5,1\n513,-1,396.8,185.1,63.3,186.5,1\n513,-1,157.4,328.6,66.2,189,1\n513,-1,1700.3,624.3,89.6,213.8,1\n513,-1,338.9,169.3,51.3,173.1,1\n513,-1,1674.5,25.5,54.3,166.8,1\n513,-1,789.8,140.8,56.1,179.8,1\n513,-1,931,1,56.1,120.4,1\n513,-1,941.4,696,123,269.3,1\n513,-1,1614,15.2,55.6,176.1,1\n513,-1,460.3,139.6,71.3,186.7,1\n513,-1,884,1,52.1,121.8,1\n513,-1,1710.8,328,95.4,196.8,1\n513,-1,1609.3,302.2,62.1,198.5,1\n513,-1,1559.1,598.8,72.2,238.6,1\n513,-1,828.7,609.6,72.5,256.5,1\n513,-1,1721,460.4,77.6,207.4,1\n513,-1,288.4,120.6,53,177.2,1\n513,-1,1844.4,200.8,75.4,194.1,1\n513,-1,201.2,765.5,91.4,274,1\n513,-1,217,134.3,62.9,160.7,1\n513,-1,283.4,800.5,79.6,259.6,1\n513,-1,726.6,96.6,67,162.4,1\n513,-1,451.3,6.1,72.6,181.6,1\n513,-1,515.8,93.3,57.2,175.9,1\n513,-1,1750.8,202.7,60.8,175.5,0.999\n513,-1,398.3,22.6,46.4,163.6,0.991\n513,-1,1039.5,724.1,66.8,229.4,0.189\n513,-1,360.9,108.6,48.1,197.9,0.136\n513,-1,1041.6,935.8,77.7,145.2,0.125\n669,-1,1221.4,29.2,61.7,119,1\n669,-1,687,205.9,79.5,113.7,1\n669,-1,1481.4,6,60.2,142.5,1\n669,-1,801.1,144.2,64,173.1,1\n669,-1,315.7,343.7,71.1,209.2,1\n669,-1,1709.8,457.7,98.5,206.4,1\n669,-1,480.5,114.1,48.5,177.6,1\n669,-1,359.8,117.9,49.4,164.8,1\n669,-1,1121.7,1,63,108,1\n669,-1,557.9,109.6,53.1,178.6,1\n669,-1,1574.5,588.2,97.7,235.6,1\n669,-1,1493.1,163.3,57.2,175.2,1\n669,-1,751.7,80,47.2,155,1\n669,-1,1622.8,158.9,76,188,1\n669,-1,1405.4,877.7,98.8,203.3,1\n669,-1,415.5,125.7,74.5,161.2,1\n669,-1,413,523.9,83.2,254.9,1\n669,-1,408.9,4.1,55.5,155.2,1\n669,-1,226,207.5,62.1,204.1,1\n669,-1,277.1,222.4,56.3,186.7,1\n669,-1,1328.5,901.8,81.7,179.2,1\n669,-1,352.7,3.9,53.6,152.6,0.999\n669,-1,290.2,123.8,49.6,168.8,0.997\n669,-1,864.7,931.4,69.1,149.6,0.184\n669,-1,300.9,5.4,45.3,131.6,0.133\n263,-1,1221.4,30.8,62,118.9,1\n263,-1,287.7,129.6,56.4,169.4,1\n263,-1,1628.5,18.8,62.6,145.8,1\n263,-1,687.7,205.6,77.9,113.9,1\n263,-1,796.3,153.9,60.2,172,1\n263,-1,452.7,155.3,75.8,215.9,1\n263,-1,1055.2,107.9,62.1,184.7,1\n263,-1,356.2,109,53.3,176.2,1\n263,-1,1479.5,48.1,52.5,150.2,1\n263,-1,379.7,484,92.2,237.9,1\n263,-1,108.9,350,50.5,191.6,1\n263,-1,1721.1,457.5,77.8,210.9,1\n263,-1,938.2,96.2,69.4,178.4,1\n263,-1,704.7,1,54.7,156.3,1\n263,-1,692.2,316.6,59.6,188.5,1\n263,-1,215.5,127.6,54.8,164.9,1\n263,-1,1403.1,563.1,98.2,249.2,1\n263,-1,1131.7,99.1,53.5,165.6,1\n263,-1,878.4,110.7,46.7,152.4,1\n263,-1,375.6,7.1,56.8,162,1\n263,-1,244.6,758.5,89.8,271.9,1\n263,-1,869.6,366.7,78.7,191.7,1\n263,-1,798.8,349.3,86.2,213.3,1\n263,-1,160.3,565.3,80.4,245.9,1\n263,-1,483.3,383.7,73.2,221.2,1\n263,-1,230.6,447.4,60.3,196.6,1\n263,-1,513.4,117.5,56.3,174.4,1\n263,-1,757.2,101.1,48.6,172.1,0.999\n263,-1,572.2,390.6,63.4,210.8,0.999\n263,-1,937,917.8,84.7,163.2,0.976\n752,-1,1221.4,29.9,61.6,118.8,1\n752,-1,687.4,205.7,78,114.5,1\n752,-1,546.8,117.9,63.9,174.7,1\n752,-1,1461.8,94.5,56.1,166.8,1\n752,-1,781.4,134.1,61,178.4,1\n752,-1,262,183.5,60.7,201.1,1\n752,-1,304.2,448.4,73.4,226.1,1\n752,-1,1714.3,456.6,88.3,207.4,1\n752,-1,1576.4,589.9,98.7,233.7,1\n752,-1,333.3,198.3,54.3,172.1,1\n752,-1,463.4,189.9,53.4,187.3,1\n752,-1,1594.1,88.4,60.2,180,1\n752,-1,402.3,198.8,66.2,174.2,1\n752,-1,1494.2,17,57.6,139.1,1\n752,-1,1109.3,709.1,78.9,263.4,1\n752,-1,446.2,62.2,55.7,166.5,1\n752,-1,468.5,564.2,100.5,251,1\n752,-1,750.5,76.4,49,155.9,1\n752,-1,1175,681.3,89.1,256.4,1\n752,-1,257.6,1.1,49.7,123,1\n752,-1,358.7,107.8,50.3,176.8,0.999\n752,-1,395.8,60.5,57.5,167.3,0.997\n752,-1,236.1,142.2,50.2,149.7,0.991\n752,-1,293,132.9,43.9,157.2,0.823\n670,-1,1221.4,29.5,61.6,119.6,1\n670,-1,687,206.1,79.2,113.6,1\n670,-1,1481.5,5.9,59.9,142.6,1\n670,-1,315.6,345.9,70.3,208.8,1\n670,-1,1119.6,1.7,60.9,105.2,1\n670,-1,801.9,145.3,62.9,171.8,1\n670,-1,359.6,116.6,49.6,166.8,1\n670,-1,559.3,110.6,53.2,175.7,1\n670,-1,481,116.4,48.4,175,1\n670,-1,1709.9,455.9,100.5,211.3,1\n670,-1,1575.3,588.4,96.7,235.6,1\n670,-1,751.4,79,47.5,157,1\n670,-1,1623.5,158,76.2,188.8,1\n670,-1,1491.2,163,56.9,177.6,1\n670,-1,406.2,528.2,87.6,249,1\n670,-1,415,127.6,74.3,161.4,1\n670,-1,1402.6,873.9,99.5,207.1,1\n670,-1,407.9,3.7,56.5,156.6,1\n670,-1,227.1,209.1,63.3,201.9,1\n670,-1,277.6,222.7,55.7,184.1,1\n670,-1,1325,903.2,81.7,177.8,1\n670,-1,353.9,4,52.9,150.9,0.999\n670,-1,289.9,122.7,49.8,172.2,0.991\n670,-1,300,6.4,46.4,130.4,0.358\n670,-1,863,931.4,69.4,149.6,0.085\n828,-1,1221,29.3,62.4,118.6,1\n828,-1,687.3,206.3,78.4,112.9,1\n828,-1,1638.6,3.5,55.9,157.6,1\n828,-1,791.7,134.9,66.3,180.4,1\n828,-1,275.2,563.3,80.8,237.4,1\n828,-1,1035.1,547.6,95.8,241,1\n828,-1,558.2,115.8,60.7,175.6,1\n828,-1,1723.2,453.2,75.1,213.5,1\n828,-1,1575.5,588.1,101.8,236,1\n828,-1,1476.6,44.4,59.1,157,1\n828,-1,751.6,71.9,57,162.4,1\n828,-1,373.7,271.5,74.1,174.5,1\n828,-1,438.1,257.8,54.8,192.4,1\n828,-1,473.5,124.7,60.4,174.4,1\n828,-1,238.6,135,49.7,164.8,1\n828,-1,960.9,563.7,74,235.9,1\n828,-1,1423.2,39.8,50.9,157.2,1\n828,-1,290.5,162,66.9,198.2,1\n828,-1,422.9,121.8,57.1,172.1,1\n828,-1,348.4,172.3,46.3,178.3,0.998\n828,-1,251.8,1,56.5,116.7,0.656\n147,-1,1221.8,31.2,61.8,118,1\n147,-1,1032.2,134.9,69.5,172.2,1\n147,-1,1488.1,67.9,55.8,150.4,1\n147,-1,356.9,102.9,55.8,179.8,1\n147,-1,704.5,1,55.9,157.1,1\n147,-1,398.6,719.8,92.7,266.6,1\n147,-1,420.8,257.8,76.7,222.6,1\n147,-1,1722.7,456.6,75.6,210.7,1\n147,-1,109.3,351.4,48.2,184.1,1\n147,-1,287.2,122.6,55.9,175.2,1\n147,-1,539,65.2,49.3,164.1,1\n147,-1,1358,566.1,106.1,245.8,1\n147,-1,685.2,206.2,82.7,114.6,1\n147,-1,218.7,127.5,52.3,163.4,1\n147,-1,867,203.1,70.3,195.8,1\n147,-1,810.4,251.5,58.8,182.3,1\n147,-1,1172.3,164.4,50.3,164.5,1\n147,-1,381.7,1.1,47.8,128.5,1\n147,-1,530,264.5,60.5,205,1\n147,-1,485.3,195,58.2,170.2,1\n147,-1,762,239.7,66.1,191.2,1\n147,-1,100.2,543.4,88.2,258,1\n147,-1,168.3,623.1,75.3,213.7,1\n147,-1,1294,174.8,57.3,176.4,1\n147,-1,587.5,258,58.2,193,1\n147,-1,465.3,37.4,49.7,161.1,1\n147,-1,1055.1,920.9,70.9,160.1,0.987\n147,-1,796.7,153.2,62,197.5,0.146\n850,-1,1221.2,29.8,62.2,118.7,1\n850,-1,687.2,206.3,79,113.7,1\n850,-1,795.2,139.9,78.8,174,1\n850,-1,1071.1,2,60.1,116.5,1\n850,-1,560.2,116.1,58.5,174.3,1\n850,-1,1721.5,452.8,78,214,1\n850,-1,1574.8,590.1,103.2,235.2,1\n850,-1,1470.7,61.3,60,156.4,1\n850,-1,752.9,71,55,162.1,1\n850,-1,296.3,160.3,73.4,198.1,1\n850,-1,265.7,598.3,82.8,242.7,1\n850,-1,1414.3,29,53.9,153.9,1\n850,-1,1662.1,29.6,51.6,158.3,1\n850,-1,352.9,293,72.6,179.9,1\n850,-1,253.2,1,54.9,120.3,1\n850,-1,930.3,527.6,70.3,236.7,1\n850,-1,239.8,132.4,53.5,165.6,1\n850,-1,434.5,277.2,54.1,198.4,1\n850,-1,1012.4,503.7,73,238.8,1\n850,-1,471.8,141.1,60.4,179.9,1\n850,-1,492.4,1,47.7,110.8,1\n850,-1,417.2,140.1,61,168.8,1\n651,-1,687.3,206.6,79.1,112.5,1\n651,-1,1480.3,3.3,61,146.2,1\n651,-1,547.2,112.6,62.8,174.1,1\n651,-1,1710.5,456.4,97.1,209.7,1\n651,-1,1221.1,30.8,62.3,120.3,1\n651,-1,801.3,145.5,65.5,172.1,1\n651,-1,454.1,537.5,89,242.8,1\n651,-1,359.4,110.2,51.5,175.1,1\n651,-1,334.1,326.6,69.6,207.5,1\n651,-1,1575.8,588.3,96.4,237.5,1\n651,-1,1616.2,176,68.5,187.1,1\n651,-1,411,1,58.8,151.5,1\n651,-1,216.8,221.3,56.4,201,1\n651,-1,268.4,236.5,59.8,184.4,1\n651,-1,751.6,77.6,45.7,157.6,1\n651,-1,469.8,102.8,47.7,174.4,1\n651,-1,424.1,117.2,55.3,159.9,1\n651,-1,287.4,125.1,52,173.4,1\n651,-1,1176.3,1,70,122.1,0.999\n651,-1,1459.7,926,81.9,155,0.86\n651,-1,1375.1,945.5,89.1,135.5,0.603\n647,-1,687.4,206.6,78.9,113.2,1\n647,-1,1481.7,5.2,59.5,144.8,1\n647,-1,1221,30.4,63.4,122.6,1\n647,-1,546.2,112.4,64.1,173.6,1\n647,-1,802.1,144.6,64.5,172.7,1\n647,-1,359.2,111.1,52.3,173.6,1\n647,-1,1710,454.1,99.1,214.6,1\n647,-1,338.1,322.5,69.1,202.5,1\n647,-1,412,1,59,146.9,1\n647,-1,1575.1,588.7,96.2,236.1,1\n647,-1,213.5,223.5,59.5,200.8,1\n647,-1,1617.3,185.4,67.7,188.9,1\n647,-1,267.6,238.8,59.1,182.9,1\n647,-1,469.1,535.7,85.8,246.7,1\n647,-1,423.8,116.5,56.1,159.6,1\n647,-1,752,84.2,44.6,152,1\n647,-1,467.5,102.7,49.3,173.8,1\n647,-1,287.4,125.9,51.7,170.1,1\n647,-1,1481.3,945.3,71.2,135.7,0.915\n647,-1,1186.1,12.7,56.1,111.7,0.12\n738,-1,1221.3,29.8,62.6,119.5,1\n738,-1,686.5,205.9,79.4,114.2,1\n738,-1,255.9,187,59.7,197.2,1\n738,-1,1481.6,8,60.6,146,1\n738,-1,1465.3,106.5,53.9,169.5,1\n738,-1,550.5,111.8,60.8,178.6,1\n738,-1,781.9,137.5,54.2,177.4,1\n738,-1,295.8,426.7,77.6,222.1,1\n738,-1,476.1,169.5,48.3,185.8,1\n738,-1,1713.2,456.3,93.2,209.4,1\n738,-1,401.6,188.2,75.5,162.7,1\n738,-1,1575.3,590.9,99.5,234.2,1\n738,-1,435.3,557.1,83.6,246.5,1\n738,-1,1599.9,103.8,58.9,177.9,1\n738,-1,329.2,198,58.1,177.9,1\n738,-1,750.2,83.2,50.4,151.6,1\n738,-1,1134.9,736.4,89.3,268,1\n738,-1,434.2,51.6,57.3,165.6,1\n738,-1,1216,712.9,87.5,266.8,1\n738,-1,360.2,110,48.8,171.9,1\n738,-1,291.6,130.5,46.2,161.5,0.968\n738,-1,316.9,3.5,45.4,135.5,0.055\n570,-1,1221.3,30.2,62.3,119.3,1\n570,-1,686.7,205.8,80,114.5,1\n570,-1,1481,4.2,59.7,145.9,1\n570,-1,791.3,145.4,70.8,172.6,1\n570,-1,379.1,235.6,65.6,195.9,1\n570,-1,1828,253.1,71.3,177.8,1\n570,-1,1712.2,452.2,88.5,214.3,1\n570,-1,1650.6,1,57.3,139.1,1\n570,-1,1664,263.4,67.7,202.7,1\n570,-1,871.9,1,52.5,105.5,1\n570,-1,549.5,116.2,52.9,169.7,1\n570,-1,288.2,121.3,52,173.8,1\n570,-1,219.1,136.7,55.5,166.2,1\n570,-1,754.8,79.6,44.2,155.5,1\n570,-1,1589.1,590.5,79,235.2,1\n570,-1,205.8,283.5,64.2,195.2,1\n570,-1,147,256.5,61.2,212,1\n570,-1,1573.4,3.5,52.9,132.5,1\n570,-1,444.2,130.2,51.9,161.1,1\n570,-1,468.8,75.8,62.7,176.7,1\n570,-1,1021.4,806.9,132,274.1,1\n570,-1,358.9,109.7,52.9,177.1,1\n570,-1,724.4,584.1,85.3,255.3,1\n570,-1,421,57.6,47.7,172.2,0.999\n570,-1,251.1,913.4,80.9,167.6,0.993\n570,-1,1012.6,931.2,73.2,149.8,0.502\n570,-1,982.7,2,52.3,79.5,0.2\n740,-1,1221.6,29.8,62.5,118.7,1\n740,-1,686.4,205.8,79.8,114.5,1\n740,-1,1484.4,9.8,59.2,144.7,1\n740,-1,255.4,185.2,60.9,198.2,1\n740,-1,550.6,114.4,60.8,177.1,1\n740,-1,780.3,137.8,56.3,176.2,1\n740,-1,1464.3,106.9,53.2,165.4,1\n740,-1,296.4,429.9,77.6,223.3,1\n740,-1,474.5,172.9,49.6,183.8,1\n740,-1,1711.8,455.6,96.3,207.9,1\n740,-1,1575.2,590.5,99.9,233,1\n740,-1,1600,103.7,57.5,178.8,1\n740,-1,399.1,189.8,76.4,168,1\n740,-1,331.7,199,56.2,173.5,1\n740,-1,441,555.9,83.3,253.5,1\n740,-1,1129.4,738,84.8,255.4,1\n740,-1,1210.4,712.8,83.1,260.4,1\n740,-1,434.3,53,58,167.2,1\n740,-1,750.2,81.8,50.6,152.1,1\n740,-1,357.7,111.6,48.7,174.8,0.999\n740,-1,291.2,126.2,47.5,164.9,0.992\n740,-1,239.2,148.6,49.2,163.3,0.586\n740,-1,259.3,4.7,45.9,114.8,0.057\n637,-1,1221.8,31.5,62.2,116.7,1\n637,-1,687.5,206,78.6,113.9,1\n637,-1,1481.8,5.2,60.4,144.3,1\n637,-1,341,311,67.8,205.7,1\n637,-1,1709.3,456.5,97.5,208.8,1\n637,-1,801.2,145.2,65.5,172.4,1\n637,-1,546.2,113.7,63.7,173.1,1\n637,-1,359.3,110.5,51.2,173,1\n637,-1,496.3,538.2,103.3,242.6,1\n637,-1,1575.2,588.2,96.1,236.5,1\n637,-1,1622.5,195.7,68.9,186.8,1\n637,-1,259.4,242.2,60.7,189.4,1\n637,-1,203.3,229.8,62.2,201.1,1\n637,-1,417.4,112.7,54.8,156.4,1\n637,-1,752.2,85.2,45.4,151.3,1\n637,-1,287.5,124.9,51.6,170.3,1\n637,-1,419.6,3,56.3,138.5,1\n637,-1,461.2,94.1,47.9,169.6,0.999\n637,-1,493.3,71,46,147.4,0.999\n637,-1,353.3,1,55.5,129.8,0.998\n637,-1,234.7,136.3,46.7,162.1,0.991\n637,-1,1509.1,968.2,74.5,112.8,0.05\n915,-1,1221.5,30.2,61.7,119.2,1\n915,-1,686.4,206.3,80.1,113.4,1\n915,-1,794,139.8,75.8,173.8,1\n915,-1,1112.8,33.2,63.7,164.9,1\n915,-1,464.9,202.4,69.9,189.5,1\n915,-1,1432.8,2,48,136.4,1\n915,-1,557.1,116.6,57.9,173.1,1\n915,-1,1574.2,589.8,104.8,236,1\n915,-1,1721.8,452.2,78.5,214.9,1\n915,-1,1476.4,105.4,63.1,157.4,1\n915,-1,307.4,699.3,89.7,268.4,1\n915,-1,329,365.3,83.1,192.3,1\n915,-1,1605.3,64.8,53.5,162.4,1\n915,-1,1297.3,857.1,95.6,223.9,1\n915,-1,869.4,424.6,62.3,221.3,1\n915,-1,960.8,406.9,65.9,221.6,1\n915,-1,752.1,77,55.3,156.4,1\n915,-1,412.7,349.2,58.4,208.3,1\n915,-1,376.3,200.3,58.8,178.2,1\n915,-1,301.8,162.5,68.9,199.4,1\n915,-1,1721,93.2,55.1,172.5,1\n915,-1,240.8,133.5,56.2,164.8,1\n915,-1,421,65.6,61.4,177,1\n915,-1,469.3,16.8,51.1,147.6,1\n915,-1,1750.6,686.1,90.4,237,1\n915,-1,1498.8,1.8,58.1,133.9,1\n915,-1,253,2,54.7,120.5,1\n915,-1,313.6,1,47.2,133.8,1\n648,-1,687.1,206.5,79.4,113,1\n648,-1,1481.6,5.2,59.9,144.7,1\n648,-1,546.7,112.3,64.1,174.5,1\n648,-1,1219,30.5,64.3,121.4,1\n648,-1,359.5,109.9,52.2,175.5,1\n648,-1,1708.8,454.9,99.9,213.7,1\n648,-1,801.2,145,65.5,172.4,1\n648,-1,463.8,532.7,86.1,244.7,1\n648,-1,1574.6,588.1,97.5,237.4,1\n648,-1,336.8,321.8,68.9,205.9,1\n648,-1,411.8,1,59,149.2,1\n648,-1,215.2,224.2,57.7,197.1,1\n648,-1,1616.4,182.9,68.7,188.5,1\n648,-1,267.5,238.5,59.1,183.2,1\n648,-1,752.1,80.9,45,154.4,1\n648,-1,468,105.8,48.8,171.3,1\n648,-1,424,116.3,55.3,160.1,1\n648,-1,287.6,126.7,51.7,168.2,1\n648,-1,1185.2,7.9,63.5,118.8,0.928\n648,-1,1475.4,942.3,72.4,138.7,0.79\n954,-1,686.5,206,80,113,1\n954,-1,1471.4,138.8,65.3,165.8,1\n954,-1,793.8,139.8,73.4,174.2,1\n954,-1,1221.6,30.3,62.4,118.6,1\n954,-1,1478.3,1,55,110.3,1\n954,-1,928.4,345.9,72.9,220.4,1\n954,-1,1575,587.5,102.7,238.5,1\n954,-1,1719.6,453.7,79.4,214.4,1\n954,-1,1148.1,79.4,59,168.5,1\n954,-1,320,770.3,96.9,272.1,1\n954,-1,1639.1,109.1,53.8,166.3,1\n954,-1,852.8,363,68.2,209.4,1\n954,-1,751,72.6,55.9,160.8,1\n954,-1,392.1,392.1,67.8,217.7,1\n954,-1,1759.6,139.8,65.6,180.5,1\n954,-1,552.9,116.1,55.8,172.9,1\n954,-1,321.1,413.7,82.5,193.8,1\n954,-1,1237,753.3,93.9,264.3,1\n954,-1,1412.3,2.5,45.6,111.2,1\n954,-1,424,235.6,68.5,190.4,1\n954,-1,232.1,136.7,57.1,167.2,1\n954,-1,436.1,74.9,56,175.5,1\n954,-1,340.9,236.8,64,186.7,1\n954,-1,482.8,222.7,59.7,179.1,1\n954,-1,1742.5,676,95,251,1\n954,-1,480.2,41.6,54.6,158.8,1\n954,-1,245.5,2.6,53.7,123.3,1\n954,-1,288.7,125.4,53.6,167.8,0.999\n954,-1,320.8,166.8,55.1,201,0.906\n954,-1,313.6,1,42.8,132.1,0.114\n321,-1,1221.3,31.4,62,118.8,1\n321,-1,1455.7,2,57.4,142.1,1\n321,-1,332.6,581,111,255.3,1\n321,-1,687.1,206.8,79,113,1\n321,-1,108.6,350.7,52.4,190.6,1\n321,-1,1719.7,458.4,79.3,212,1\n321,-1,1713.3,51.2,56.8,161.3,1\n321,-1,795.5,147.5,59.2,177.1,1\n321,-1,453.2,114.9,72.7,202.4,1\n321,-1,359.7,108.1,58.5,181.9,1\n321,-1,1512.2,600.2,89.9,249.6,1\n321,-1,420.1,45.1,55.9,170.8,1\n321,-1,992.3,76,61.7,177.8,1\n321,-1,433.6,453.9,70.4,243.4,1\n321,-1,237.6,371.4,58,190.4,1\n321,-1,894,439.7,69.7,204.6,1\n321,-1,280.6,130.8,54.5,172.6,1\n321,-1,929,46,61.1,172.4,1\n321,-1,1576.4,2.1,59,109.3,1\n321,-1,213.2,132.8,57,166.5,1\n321,-1,518.8,474.6,66.6,218.2,1\n321,-1,1049.9,77.6,52.6,163.8,1\n321,-1,829.3,434.9,76.9,208.8,1\n321,-1,728,99.8,48.8,175,1\n321,-1,706.3,4.2,52.8,153.9,1\n321,-1,515.2,100.8,42.3,168.4,0.999\n321,-1,362.7,897.1,98.9,183.9,0.997\n321,-1,927.7,907.7,78.2,173.3,0.983\n844,-1,1221.5,29.4,62,118.6,1\n844,-1,687.4,206.2,79.1,113.3,1\n844,-1,793.8,138.6,79.5,175.1,1\n844,-1,557.2,116.4,60.3,178.8,1\n844,-1,1721.1,452.5,78.7,213.8,1\n844,-1,1578.1,594.9,97.9,231.3,1\n844,-1,1651.9,18,57,161.7,1\n844,-1,265.9,587.4,83.9,245.1,1\n844,-1,1469.7,60.8,60.7,154.9,1\n844,-1,752.7,70.8,55.1,163.1,1\n844,-1,1069.6,1.4,57.7,106.9,1\n844,-1,240.6,131,51.7,167.3,1\n844,-1,295.9,161.3,71.9,196.3,1\n844,-1,1414.8,29.8,54,158.1,1\n844,-1,937.2,535.6,71.2,238.2,1\n844,-1,353.7,285.1,78,181.2,1\n844,-1,436.6,269.4,55.5,205.6,1\n844,-1,474,136.9,60.5,182.3,1\n844,-1,414.7,136.1,60.5,172.6,1\n844,-1,1023.9,515,72.8,240.9,1\n844,-1,253.7,1.1,54.4,123,1\n792,-1,1220.9,29.3,62.8,119.4,1\n792,-1,687.4,205.5,78.5,113.8,1\n792,-1,783.1,129.5,51.9,182.3,1\n792,-1,1722.5,451.9,76.7,216.3,1\n792,-1,549.5,114.5,59.4,178.5,1\n792,-1,1485.6,26.4,59.1,147.8,1\n792,-1,1574.8,591.4,100.5,234.2,1\n792,-1,477.8,96.5,60,173.3,1\n792,-1,290.8,506.7,78.6,233.4,1\n792,-1,277.1,167.4,58.4,196.4,1\n792,-1,750.1,70.2,55,160.4,1\n792,-1,232.9,132.4,51.4,168.3,1\n792,-1,1086.3,605.2,97.3,256.9,1\n792,-1,1442.2,67,49,161,1\n792,-1,339.3,187.6,50.1,176.6,1\n792,-1,445.6,228.1,53.5,185.7,1\n792,-1,392.5,228.4,65.3,181.8,1\n792,-1,253.5,1.3,52.5,123.1,1\n792,-1,597.4,580.8,73,244.6,1\n792,-1,422.5,92.7,56.6,165.7,1\n792,-1,1028,628.9,73.9,242.3,1\n792,-1,449.6,2.8,44.6,89.9,0.989\n991,-1,686.4,206.1,80,113.7,1\n991,-1,793.1,140.7,75,171.5,1\n991,-1,1795,183.2,71.2,183.8,1\n991,-1,1220.8,31.2,62.1,119.1,1\n991,-1,401.9,271.7,67.3,199,1\n991,-1,1193.9,125.3,54.1,165.2,1\n991,-1,1471.3,170.2,64.4,166.1,1\n991,-1,497.7,261.2,66.8,185.2,1\n991,-1,838.8,311.9,68.5,205.3,1\n991,-1,300.3,454.3,85.8,204.3,1\n991,-1,289.5,123.4,53.7,171.7,1\n991,-1,327.8,844.1,97.5,236.9,1\n991,-1,1573.7,589.1,104.5,236.7,1\n991,-1,1722.4,452.9,76.9,215.7,1\n991,-1,1673.2,145.8,56.2,172.1,1\n991,-1,752.1,72.9,55.3,161.8,1\n991,-1,545.3,118.1,57.7,170,1\n991,-1,230.7,134.3,54.4,166.5,1\n991,-1,315.2,271.8,63.2,195.9,1\n991,-1,919.8,303,71.7,208.7,1\n991,-1,1187.4,663.5,89.5,264.2,1\n991,-1,445,65.5,57.8,177.3,1\n991,-1,389.2,442.2,66.1,223.6,1\n991,-1,1739.5,673.2,94,250.8,1\n991,-1,503.5,76.1,51.8,154,1\n991,-1,314.6,1.6,43.9,130.3,1\n991,-1,381.3,166.1,64.9,189.1,0.998\n991,-1,1444.4,1,55.9,86.7,0.998\n991,-1,385.6,1,49.7,142.8,0.854\n834,-1,1221.5,29.2,62.4,119.2,1\n834,-1,687.2,205.8,78.4,114,1\n834,-1,791.1,136.9,71.3,178.4,1\n834,-1,559.1,114.9,60.2,176,1\n834,-1,1641.8,10.8,59.5,159.5,1\n834,-1,1577.6,593.9,99,233.5,1\n834,-1,1722.4,453.3,76.6,213.2,1\n834,-1,271.2,575.5,83.2,244.9,1\n834,-1,1474.8,48.7,59.4,159.4,1\n834,-1,1032.6,532.6,82.9,236.1,1\n834,-1,753.1,70.7,56.3,163.6,1\n834,-1,355.2,270.2,86.2,185.2,1\n834,-1,475.9,127.3,59.2,179.8,1\n834,-1,239.7,134,51.2,162.2,1\n834,-1,293.9,162.5,67.4,197.5,1\n834,-1,1421.7,39.3,50,156.8,1\n834,-1,436.6,261.2,56.3,201.2,1\n834,-1,953.4,556.7,71.3,237.5,1\n834,-1,420.7,122.7,56.7,175.5,1\n834,-1,254,1.8,53.2,120.3,1\n834,-1,1064.2,4.5,63,90,0.814\n834,-1,356.8,171,36.6,167.7,0.277\n938,-1,1221.4,30,61.6,119.5,1\n938,-1,686.6,205.9,79.9,113.3,1\n938,-1,793.9,139.5,74.3,173.4,1\n938,-1,1127.6,59.4,63.7,170.7,1\n938,-1,444.3,220.8,68.2,186.6,1\n938,-1,1485.7,1,60.4,122.5,1\n938,-1,1476.7,124.9,60.4,156.3,1\n938,-1,1574.1,589.1,104.2,236.9,1\n938,-1,1623.8,90.6,56.5,170,1\n938,-1,555.2,116.2,57.3,172.4,1\n938,-1,750.1,69.7,56.9,163.9,1\n938,-1,1720.7,454.9,78,212.3,1\n938,-1,238.1,135.9,58,166,1\n938,-1,321.5,745.4,90.5,257.5,1\n938,-1,1259.1,786.2,96.9,284,1\n938,-1,329.5,392.2,79.1,186.2,1\n938,-1,474.8,27.3,54.2,154.5,1\n938,-1,397,376.6,64.2,213.9,1\n938,-1,858.4,388.5,64.7,214.4,1\n938,-1,943.7,368.9,69.7,221.9,1\n938,-1,1741.2,120.3,57.3,179.5,1\n938,-1,1745.4,675.2,91.7,249.8,1\n938,-1,358.8,225.4,60.9,182.6,1\n938,-1,254.8,1,53.1,120.9,1\n938,-1,306.5,162.2,65.5,196.7,1\n938,-1,1420.4,3.5,46.5,117.2,1\n938,-1,434.1,71.2,54.2,178.8,1\n21,-1,687.3,206,78.9,113.4,1\n21,-1,1487,69.8,55.3,148.1,1\n21,-1,704,1.8,56.4,157,1\n21,-1,493.6,151.6,95.5,189.1,1\n21,-1,1361.6,567.4,104.9,245.5,1\n21,-1,1207,33.9,70.5,117.3,1\n21,-1,1724.8,455.6,76.7,211.8,1\n21,-1,794.7,150.2,62.8,173.8,1\n21,-1,380.8,385.8,85.5,240,1\n21,-1,1015.2,200.6,71.2,183.1,1\n21,-1,354.8,102.6,55.4,181.7,1\n21,-1,102.2,547.7,85.4,250.7,1\n21,-1,201.6,381.1,68.1,199.2,1\n21,-1,216.1,130.6,48,161.8,1\n21,-1,284.5,123.7,55,171.7,1\n21,-1,1817.2,228.5,63.7,187.8,1\n21,-1,1610.9,242.1,58,190,1\n21,-1,457.9,60.6,52.4,170.1,1\n21,-1,416.9,79.8,54.2,163.4,1\n21,-1,875.9,140.5,59.4,179.4,1\n21,-1,1383.6,190.4,52.5,177.8,0.999\n21,-1,1,838.5,49.1,242.5,0.998\n21,-1,917.9,146.2,50.4,160.8,0.994\n21,-1,1427.6,236,43.4,177.8,0.145\n459,-1,1221.9,31.1,62.2,118.6,1\n459,-1,445.7,196.6,71.6,197.8,1\n459,-1,937,1,58,152.1,1\n459,-1,687.1,205.5,78.2,114.5,1\n459,-1,1736,163.9,60.8,164.3,1\n459,-1,1009.3,4.1,53.3,155.8,1\n459,-1,360.3,106.4,53.8,181.2,1\n459,-1,870.8,1,56.5,136.7,1\n459,-1,1706.3,458.5,94.4,207.8,1\n459,-1,269.3,217.3,48.5,176.3,1\n459,-1,115.4,348.5,55.8,191.9,1\n459,-1,1827.3,382.7,78.7,204.2,1\n459,-1,522.4,76.3,55.1,170.1,1\n459,-1,1544.2,609.1,76.1,245.9,1\n459,-1,1507.2,1.2,56.9,109.6,1\n459,-1,243.8,667.9,97.3,263.6,1\n459,-1,803.2,151.3,46,173.9,1\n459,-1,1656.6,358.7,64.2,194.8,1\n459,-1,340.5,698.8,73.3,250.2,1\n459,-1,284.8,124.1,55.3,173.3,1\n459,-1,1444.4,547,82.8,219.3,1\n459,-1,1690,55.1,63.5,178.8,1\n459,-1,803.3,580.1,86.9,252.7,1\n459,-1,218.3,139.5,60.7,156.9,1\n459,-1,753.4,94.8,53.8,146.2,1\n459,-1,889,604.4,119.7,243.9,1\n459,-1,976.9,623.5,88.6,226.4,0.999\n459,-1,418.5,1.1,44.4,160.3,0.999\n459,-1,1027.7,922.7,84.4,158.3,0.998\n459,-1,442.4,43.1,72.5,190,0.998\n459,-1,713.3,95.6,51.8,160.3,0.98\n459,-1,430.2,134.5,51,159.7,0.258\n201,-1,1221.3,31.4,61,118.8,1\n201,-1,399.4,608.3,92.1,243.8,1\n201,-1,687.7,207.2,77.5,112.4,1\n201,-1,1490.8,68.8,54.5,149.3,1\n201,-1,211,127.3,56.7,168,1\n201,-1,108.6,349.8,50,187.6,1\n201,-1,705.2,1.2,55.3,158.5,1\n201,-1,61,640.1,118.8,258.2,1\n201,-1,521.8,133.6,63.4,166.3,1\n201,-1,1721.2,457.3,77.1,209.6,1\n201,-1,1357.5,568.7,105.5,244,1\n201,-1,423.6,210,75.2,215.9,1\n201,-1,509.5,311.7,79.4,220.2,1\n201,-1,888.9,157.2,73.4,186.8,1\n201,-1,797.2,151,58.6,172.9,1\n201,-1,288.9,127.2,55,173,1\n201,-1,355.9,108.4,54.6,176.6,1\n201,-1,1154.7,142.1,61,185.9,1\n201,-1,1040,139.4,51.8,158.3,1\n201,-1,1208.8,143.5,56.2,169.8,1\n201,-1,229.7,539.3,61.4,217.6,1\n201,-1,389.9,37.9,63.4,169.9,1\n201,-1,800.9,308.9,74.5,184.7,1\n201,-1,753,292.8,68.8,207.7,0.999\n201,-1,966.2,916.9,74.1,164.1,0.98\n1029,-1,1221.4,29.7,62,119.5,1\n1029,-1,686.9,206.7,79.4,113.8,1\n1029,-1,1253.7,176,64,167.7,1\n1029,-1,792.3,141.6,72.9,170.8,1\n1029,-1,1699.3,193.1,63.9,182.6,1\n1029,-1,490.4,304.2,69.5,188.2,1\n1029,-1,372.3,313.9,71.1,201.9,1\n1029,-1,1721,456.8,78.5,207.1,1\n1029,-1,289.3,127.2,52.5,168.4,1\n1029,-1,233.8,139.7,56.7,164.2,1\n1029,-1,934,252.7,67.5,205,1\n1029,-1,844.3,260.5,66.7,194.9,1\n1029,-1,1140.3,582.2,86.2,254.8,1\n1029,-1,1574.3,590,103.4,239,1\n1029,-1,751,74.7,53.9,161.3,1\n1029,-1,1845,235.5,62.7,193.4,1\n1029,-1,539.2,120.7,62.9,175.3,1\n1029,-1,293.5,311.9,66.8,206.1,1\n1029,-1,1696.8,684.6,82.3,234.3,1\n1029,-1,427.2,166.9,59.6,173.7,1\n1029,-1,374.4,497.5,69.3,230.1,1\n1029,-1,288.9,509.4,88.3,208.7,1\n1029,-1,372.4,100.6,59.2,179.2,1\n1029,-1,578.5,544.8,75.4,245,1\n1029,-1,1471.6,207.4,67.5,160.8,1\n1029,-1,475.6,162.1,69.7,198.7,0.999\n1029,-1,310.4,1.3,35.6,131.3,0.999\n45,-1,1213,31,72.1,117.2,1\n45,-1,686.3,205.7,79.6,114.3,1\n45,-1,393.6,363,85.1,236.6,1\n45,-1,1487,70.4,55.1,148.3,1\n45,-1,486.4,171.7,93.9,195.5,1\n45,-1,704.6,1,55.7,158.2,1\n45,-1,1362.1,565.5,104.1,246.8,1\n45,-1,1721.9,456.7,76.8,210.6,1\n45,-1,901.7,199.1,86.5,179.5,1\n45,-1,1010.2,159.9,78.2,187.2,1\n45,-1,353.1,105.8,55.5,178,1\n45,-1,169.4,367.5,69.3,193,1\n45,-1,214.1,126.9,49.7,164.1,1\n45,-1,102.3,548.9,85.6,249.3,1\n45,-1,795.1,148.1,62.6,176.4,1\n45,-1,407.8,88.2,52.5,160.8,1\n45,-1,2.7,795,67.6,235.3,1\n45,-1,283.3,126.2,54.4,170.3,1\n45,-1,1337.5,185.1,51.6,162.3,1\n45,-1,860.9,148.7,61.2,183.3,1\n45,-1,1849.7,270.5,69.7,189.8,1\n45,-1,1489.4,218.4,63.1,202.2,1\n45,-1,485.7,43.7,55.3,157.9,0.996\n45,-1,445.2,42.2,53.1,163.3,0.994\n45,-1,542,61.2,41.8,176.2,0.972\n45,-1,1388.5,219,42.3,172.4,0.884\n778,-1,1221,29,62.8,119.3,1\n778,-1,687.8,204.4,78.7,115.1,1\n778,-1,545.9,115.6,63.8,176.1,1\n778,-1,782.9,134.6,58.8,174.5,1\n778,-1,1723.8,452.5,75.6,213.8,1\n778,-1,1574.6,589.9,101.6,235.2,1\n778,-1,1490.3,16.5,59.1,149.5,1\n778,-1,292.2,484.4,76.8,229.2,1\n778,-1,1444.6,75.3,54.1,169,1\n778,-1,449.1,208.1,55,189.1,1\n778,-1,390.5,217.9,70.6,177,1\n778,-1,329.1,189.7,57.5,174.1,1\n778,-1,277.9,170.4,55.3,192,1\n778,-1,749.6,73.7,53.8,157.3,1\n778,-1,1572.3,77.5,59.8,172.3,1\n778,-1,1121.1,634.8,82.9,256.1,1\n778,-1,234,134.3,50.8,164.4,1\n778,-1,255.4,1,51.9,118.6,1\n778,-1,472.1,80.7,61.3,165.7,1\n778,-1,558.4,571,78,252.3,1\n778,-1,1050,648.9,77.8,252.4,1\n778,-1,418.5,77.9,54.9,167.8,1\n778,-1,356.7,109.9,49.7,187.4,0.882\n118,-1,1221.5,30,62.8,119.1,1\n118,-1,1119.3,148.6,76.8,171.5,1\n118,-1,356.1,104.7,57.1,179.1,1\n118,-1,393,785.4,103,278.4,1\n118,-1,1488.3,68.5,55.7,150.4,1\n118,-1,704.1,1,56,159,1\n118,-1,107.8,350.9,50.2,187.6,1\n118,-1,211.5,126.6,51.5,165.5,1\n118,-1,924.5,206.9,70.4,195.8,1\n118,-1,1721.4,457,76.8,210.4,1\n118,-1,288.8,126.1,54.5,168.9,1\n118,-1,1358.1,566.7,105.6,244.3,1\n118,-1,426.6,288.9,78.4,225.9,1\n118,-1,477.6,167.8,57.5,156,1\n118,-1,520.6,241.8,70.8,203.3,1\n118,-1,789,207.1,66,189,1\n118,-1,539.3,64,49.3,168.6,1\n118,-1,1358,182.4,68.1,184.3,1\n118,-1,71.9,661.7,75.6,222.4,1\n118,-1,1239.7,177.5,42.4,169.2,1\n118,-1,445.4,1,54.2,148.5,1\n118,-1,376,1.8,48.9,151.4,1\n118,-1,103.5,543.9,85.5,257.8,1\n118,-1,482.4,39.6,59.7,165.9,1\n118,-1,836.3,227.2,56.1,174.9,1\n118,-1,1119.5,929.1,79.7,151.9,0.573\n690,-1,1222,30.1,61.9,119.1,1\n690,-1,687.9,206.7,78.4,112.5,1\n690,-1,1481.6,5.5,59.4,146.3,1\n690,-1,1488.9,134.9,53.1,178.7,1\n690,-1,366.3,531.6,95.8,251.7,1\n690,-1,1613.4,145.1,68.3,183.7,1\n690,-1,803.3,145.1,55.2,171.2,1\n690,-1,563.1,111.6,51.9,177.9,1\n690,-1,1709.4,457,98.7,207.7,1\n690,-1,488.2,132.2,46.7,179.7,1\n690,-1,422.4,145.4,62.6,164.3,1\n690,-1,310.4,373.4,66.3,207.6,1\n690,-1,361.1,114.5,49.1,170.4,1\n690,-1,1576,589.8,95.8,235.8,1\n690,-1,749.5,78.9,51.1,159,1\n690,-1,1336.7,825.9,102.8,255.1,1\n690,-1,1255.7,853,87.8,228,1\n690,-1,247,201.4,60.2,195.7,1\n690,-1,1051.5,1,61.7,99.9,1\n690,-1,300.5,216.5,57.5,177.5,1\n690,-1,406.1,22.1,54.7,163.1,1\n690,-1,481.4,35.9,48.4,145.5,1\n690,-1,224.9,132.4,51.9,165.2,1\n690,-1,822.4,922.7,82.9,158.3,0.71\n23,-1,687.1,206.3,79.1,113.4,1\n23,-1,1487,69.5,55.2,148.4,1\n23,-1,704.1,1.1,56.3,157.1,1\n23,-1,1207,32.5,70.9,117.1,1\n23,-1,1361.8,566.9,105.2,245.2,1\n23,-1,1003.7,201.6,76.1,178.5,1\n23,-1,493.8,152.8,92.3,190.2,1\n23,-1,794.1,150,62.8,175.8,1\n23,-1,1724.7,456.5,75.7,210,1\n23,-1,102.3,547.9,85.2,251.5,1\n23,-1,355.4,101.4,54.6,182.5,1\n23,-1,383.1,382.7,82.3,243.2,1\n23,-1,1819.6,230,64.5,192.6,1\n23,-1,215.6,130.3,49.4,162.4,1\n23,-1,199.6,378.4,67.3,201.6,1\n23,-1,1606.3,242.5,60.2,188.3,1\n23,-1,283.6,125.4,56.5,168,1\n23,-1,416.1,79.5,55.7,164,1\n23,-1,455.4,61.9,53.1,168.6,1\n23,-1,874.7,141.2,58.4,179.9,1\n23,-1,1.8,841.9,51.5,235.9,1\n23,-1,915.7,149.4,51.1,162.7,0.999\n23,-1,1379.7,186.8,52.8,178.5,0.999\n23,-1,1425.3,233.6,44.5,178,0.05\n363,-1,1222.4,31.5,61.5,118.3,1\n363,-1,687.2,206.1,78.5,113.5,1\n363,-1,1623,1,66.2,160.2,1\n363,-1,1024.8,58.1,54.8,168.1,1\n363,-1,1432.6,2.3,51.4,101.9,1\n363,-1,1042.3,434.9,66.2,193.4,1\n363,-1,1754.5,92.5,62,161.5,1\n363,-1,208,142,59.8,159.3,1\n363,-1,512.7,570.6,103.8,244.6,1\n363,-1,432.3,328.1,80.6,207.4,1\n363,-1,1841.2,63.8,57.7,162.6,1\n363,-1,443.9,85.5,69.8,200,1\n363,-1,375,512.5,85.5,241.2,1\n363,-1,511.5,93.1,47.6,163,1\n363,-1,110.1,352.4,51.4,186.8,1\n363,-1,1719.9,456.5,78.3,213.1,1\n363,-1,834,1,54.2,103.7,1\n363,-1,1815.6,466.2,65.9,208,1\n363,-1,795.9,149.8,60.7,173.3,1\n363,-1,957.6,51.5,61.2,171.7,1\n363,-1,286.8,130.1,54.7,170.9,1\n363,-1,219.3,318.7,53.9,187.3,1\n363,-1,362.6,111.5,54.7,174.6,1\n363,-1,1572.9,625.6,83.5,249.9,1\n363,-1,908.9,486,83.9,210.3,1\n363,-1,843.9,475.2,85.9,227.9,0.999\n363,-1,381.1,1.5,41.2,87.1,0.999\n363,-1,474.1,530.1,66,231.8,0.998\n363,-1,924.8,1.8,62.3,157.7,0.998\n363,-1,764,97.2,41.2,143.4,0.992\n363,-1,957.4,922.9,78.2,158.1,0.977\n363,-1,497.9,933.2,101.2,147.8,0.277\n736,-1,1221.3,29.9,62.7,119.4,1\n736,-1,686.8,205.6,79.2,114.9,1\n736,-1,256.7,188.7,59.5,194.9,1\n736,-1,1480.9,9.2,60.5,143.7,1\n736,-1,552.2,113.1,58.5,179.6,1\n736,-1,296.4,424.8,76.7,223.4,1\n736,-1,780.6,138,55.3,178.2,1\n736,-1,1467.3,109.3,53.1,167.7,1\n736,-1,475.2,169.6,50,183.9,1\n736,-1,401.4,184.7,76.7,163.9,1\n736,-1,1713.8,455.1,92.3,208.4,1\n736,-1,428.8,554.2,85.6,248.9,1\n736,-1,1575,591.6,99.3,232.6,1\n736,-1,1599.3,103.4,58.7,178.8,1\n736,-1,327.1,196.3,58.1,180.6,1\n736,-1,1144.5,746,82.6,257,1\n736,-1,1220.7,720,87.9,252.7,1\n736,-1,434.2,48,56.4,166.9,1\n736,-1,359.9,109.4,48.6,176.2,1\n736,-1,751,85.9,49.6,148.5,1\n736,-1,316.4,1,48.7,133.6,0.938\n736,-1,290.4,130.6,46.2,160.1,0.874\n741,-1,1221.5,30.2,62.3,118.5,1\n741,-1,686.6,205.9,79.4,114.3,1\n741,-1,1484.4,10.1,59.8,144.5,1\n741,-1,256.1,183.4,61.9,201.1,1\n741,-1,550.1,115.1,61.6,177.7,1\n741,-1,780.5,137.2,56.5,174.9,1\n741,-1,1465,107.2,53.1,163.4,1\n741,-1,1712,457.6,93.9,205.8,1\n741,-1,296.4,431.7,76.9,222.2,1\n741,-1,1600.1,103.5,58,178.2,1\n741,-1,474,172.4,49.6,184.1,1\n741,-1,1575.8,589.7,99.7,235.3,1\n741,-1,400.2,188.5,75.4,171.9,1\n741,-1,332.1,199.5,55.4,174.8,1\n741,-1,1127.1,732.8,85.4,255.9,1\n741,-1,1206.7,710.8,85,260,1\n741,-1,435.2,54.1,58.2,167.4,1\n741,-1,750.4,82.6,50.7,150.9,1\n741,-1,444.3,556.1,81.3,254.2,1\n741,-1,357.8,111,49.8,176.8,0.999\n741,-1,290.3,125.4,49.5,167.9,0.995\n741,-1,239.2,152.2,48.8,162.6,0.312\n741,-1,259,3.8,46.5,116.3,0.151\n697,-1,1221.4,29.9,62.2,118.6,1\n697,-1,687.2,206.6,79.1,113.4,1\n697,-1,1481.8,6.4,58.9,143.9,1\n697,-1,1606.6,140.1,70.7,182.3,1\n697,-1,1480.1,135.3,52.7,177.6,1\n697,-1,561.5,111.4,53.9,177.6,1\n697,-1,1710.7,455.9,96.9,209.5,1\n697,-1,1573.8,588.8,98.5,236.2,1\n697,-1,381.8,536,76.2,249.7,1\n697,-1,421,149.2,65.5,165.9,1\n697,-1,301,378,71.7,214.1,1\n697,-1,487.9,134.7,46.4,185.9,1\n697,-1,1031.6,2.4,66.2,91.9,1\n697,-1,1319.4,815,98,266,1\n697,-1,802.6,142,51.6,177.5,1\n697,-1,750.4,80.7,49.2,154.8,1\n697,-1,409.1,21.7,56.6,159.1,1\n697,-1,479.2,26.5,46.5,139.3,1\n697,-1,251.7,198.4,62.5,198.4,1\n697,-1,360.4,112.4,49.2,172.5,1\n697,-1,304.2,212,58.3,181.6,1\n697,-1,1240.5,835.7,85.2,245.3,1\n697,-1,226.7,134.4,53.2,163.6,1\n697,-1,828.2,929.1,81.5,151.9,0.529\n772,-1,1221,29.7,62.7,119.1,1\n772,-1,687.4,205.1,78.9,114.9,1\n772,-1,546.6,116.7,61.5,174.5,1\n772,-1,782.4,134.1,63.4,174.6,1\n772,-1,1722.7,452.9,76.8,214.2,1\n772,-1,1575.8,590.8,100.4,233.5,1\n772,-1,294.4,476.3,78.3,226.9,1\n772,-1,1450,77.2,53.7,169.7,1\n772,-1,1492.9,18.1,58.5,148,1\n772,-1,531.2,574.1,97.3,245.2,1\n772,-1,1572.7,76.4,61.8,175,1\n772,-1,452.6,207,53.4,183.8,1\n772,-1,391.9,211.8,71.2,170.3,1\n772,-1,750.5,72.5,51.7,161.6,1\n772,-1,328.9,190.1,57.5,175.9,1\n772,-1,466.4,70.7,61.2,175.7,1\n772,-1,275.8,173.8,57,194.7,1\n772,-1,255.4,1.3,51.8,120.8,1\n772,-1,232.4,137.6,50.9,163.2,1\n772,-1,1136.1,637.7,79.7,259,1\n772,-1,1063.4,664.3,79.1,251.1,1\n772,-1,409.8,76.3,58.3,169.3,0.999\n772,-1,357.8,108.8,53.2,176,0.999\n780,-1,1220.7,28.8,63,118.5,1\n780,-1,687.5,204.8,78.9,113.9,1\n780,-1,546.1,115.5,63.8,176.1,1\n780,-1,1488.9,16.1,59.9,152.4,1\n780,-1,1723.2,452.3,76.8,214.3,1\n780,-1,783.3,134.7,57.3,172.4,1\n780,-1,1576,589.5,99.5,234.6,1\n780,-1,292.3,490.2,77.1,228.8,1\n780,-1,1444.5,73.9,51.7,165.6,1\n780,-1,277.5,169.6,55.9,194.8,1\n780,-1,448.7,211.5,54,189.8,1\n780,-1,389.4,221.4,71.7,177.2,1\n780,-1,749.7,73.2,54.3,159.9,1\n780,-1,330.2,189.3,55.3,175.6,1\n780,-1,1572.8,78.3,58.9,168.9,1\n780,-1,233.7,133.7,50.7,163.9,1\n780,-1,473.8,78.3,58.8,170,1\n780,-1,254.6,1.2,52.9,120.2,1\n780,-1,1049.2,647.6,73.5,254.5,1\n780,-1,419,77.4,56.1,170.3,1\n780,-1,1114.9,626.9,82.7,256.3,1\n780,-1,566.3,571.4,72.1,255.8,1\n780,-1,358.2,110.8,45.9,191.5,0.643\n257,-1,1221.4,30.9,61.7,117.8,1\n257,-1,1621.4,10.3,59,150,1\n257,-1,686.9,206.1,79.7,113.7,1\n257,-1,1479.4,53.1,54,154.1,1\n257,-1,211.3,126.1,57.4,167,1\n257,-1,286.9,129.6,57.6,170.4,1\n257,-1,357.3,105.7,52.3,181,1\n257,-1,389.2,494.9,87.3,238.7,1\n257,-1,797.9,153.8,60.3,173.8,1\n257,-1,1720.3,458.2,78.3,210.3,1\n257,-1,450.2,162.3,78.2,212,1\n257,-1,1392.6,567.2,102,246.1,1\n257,-1,938.3,105.6,69.8,184,1\n257,-1,704.1,1,54.8,157.9,1\n257,-1,1142,104.5,52.3,170,1\n257,-1,108,350.5,51.5,191.5,1\n257,-1,227.3,455.2,61.3,200.7,1\n257,-1,1064.2,112.9,59.5,181.1,1\n257,-1,864.1,357.1,77.8,193.3,1\n257,-1,236,745.4,87.6,270.3,1\n257,-1,892.3,107.4,47.9,160.6,1\n257,-1,796,349.8,84.8,208.2,1\n257,-1,141,566.5,89.9,247.6,1\n257,-1,487.8,372.1,72.9,230,1\n257,-1,513.4,117.2,54.9,174.9,1\n257,-1,576.8,383.6,66.4,211.4,1\n257,-1,369.9,3.2,55.2,161.2,1\n257,-1,760.5,100.5,50.2,173.4,0.999\n257,-1,934.4,911.7,77,169.3,0.994\n966,-1,686,206.4,80,113.5,1\n966,-1,1769.1,151.6,67.3,182.8,1\n966,-1,1152.5,90.7,66.1,171.5,1\n966,-1,1221.6,30.6,60.9,119.9,1\n966,-1,792.5,140.7,74.6,172.7,1\n966,-1,1648.3,117.7,58.1,172.9,1\n966,-1,926.4,330.2,72.4,215.7,1\n966,-1,1574.2,589.6,103.4,237.2,1\n966,-1,328.4,795,90.3,273.8,1\n966,-1,416.4,244.5,72.4,200.7,1\n966,-1,442.2,72.1,55.6,179.7,1\n966,-1,1471.9,150.8,66.3,163.2,1\n966,-1,848.5,343.8,66.3,203.4,1\n966,-1,1721.4,453.5,78.1,214.4,1\n966,-1,229.7,137,55.5,164.1,1\n966,-1,752,72.8,54.8,161.8,1\n966,-1,488.9,231.3,65,181.3,1\n966,-1,1402.9,1.7,46.8,102.5,1\n966,-1,1458.6,1,63.3,104,1\n966,-1,332.4,242.5,64.9,195.7,1\n966,-1,310.4,423.9,87.6,202.3,1\n966,-1,1216.9,721.6,90.5,267.9,1\n966,-1,550.1,118.4,54.2,171.9,1\n966,-1,392,415.6,65.6,213.4,1\n966,-1,1742.5,677.4,94.9,248.8,1\n966,-1,289.5,124.5,54.4,172.4,1\n966,-1,484.2,51.9,54.3,160.4,0.999\n966,-1,313.6,1,47.7,130.2,0.999\n966,-1,383.1,1.6,53.5,123,0.916\n966,-1,433.9,4.3,51.3,147.9,0.91\n319,-1,1221.4,31.2,61.6,118.5,1\n319,-1,328.1,585.1,107.2,247.6,1\n319,-1,1456.5,3.2,55.7,144.4,1\n319,-1,687,206,78.7,114.3,1\n319,-1,108.4,350.1,52.5,191.6,1\n319,-1,1710.6,52.6,55.4,156.6,1\n319,-1,797.4,147.7,58.1,176.9,1\n319,-1,453.3,115.6,74.2,203.9,1\n319,-1,1720.9,457.8,78.6,211.9,1\n319,-1,358.6,107.8,58.3,182.5,1\n319,-1,237.5,374,57.7,189.3,1\n319,-1,1508.6,601.9,88.9,244.7,1\n319,-1,434.6,449.2,72.6,239.4,1\n319,-1,995,77.6,61.2,177.3,1\n319,-1,893.9,440.7,69.3,197.5,1\n319,-1,930.4,49.6,60.8,170.5,1\n319,-1,419.4,44.4,56.6,169.7,1\n319,-1,1051.8,76.6,54,169.5,1\n319,-1,213.7,130.9,56.9,168.5,1\n319,-1,281.4,129.9,54.2,174.8,1\n319,-1,826.3,433,79.3,206.4,1\n319,-1,520.4,473.1,65.7,215.6,1\n319,-1,705.5,3.1,53,153.7,1\n319,-1,725.9,98.5,48.9,179.3,1\n319,-1,355.1,892.9,98.1,188.1,1\n319,-1,1573.3,2.2,57.1,109.8,0.999\n319,-1,515,101.1,40.1,168.3,0.998\n319,-1,927.5,908.2,79.2,172.8,0.994\n260,-1,1221.1,31.5,61.9,118.2,1\n260,-1,686.8,205.7,79.6,114.7,1\n260,-1,1624.9,14.7,62.5,145.1,1\n260,-1,385.4,496.8,86.7,224.3,1\n260,-1,287.5,130.7,56.1,169.8,1\n260,-1,1479.9,51,53.8,148.7,1\n260,-1,356.5,107.7,53.2,178,1\n260,-1,452.2,156.3,76.1,216.3,1\n260,-1,1720.4,458.5,78.6,210.4,1\n260,-1,797.9,155.6,58.8,172.1,1\n260,-1,213.9,127.8,56,166.3,1\n260,-1,108,350.4,51.8,191.4,1\n260,-1,1396.4,564,103,250.5,1\n260,-1,938,102.1,71.5,178.9,1\n260,-1,242.5,753.9,86.4,267.3,1\n260,-1,1059,110.2,60.8,183.1,1\n260,-1,705,1.6,54,156.1,1\n260,-1,1138.7,101.2,50.5,167.2,1\n260,-1,867.1,362.2,78,190.7,1\n260,-1,227.8,451.7,61.4,202.4,1\n260,-1,884.2,110.1,49.6,157.5,1\n260,-1,489.4,377.5,69.1,225.3,1\n260,-1,797.7,348.5,84.5,210.6,1\n260,-1,145.3,570.4,92.4,244.8,1\n260,-1,372.7,4.6,56,160.5,1\n260,-1,684.7,318.2,52.9,159.9,1\n260,-1,514.2,118.6,54.7,173.9,1\n260,-1,575.9,385,64.2,212.1,0.999\n260,-1,757,104.4,54,168.4,0.999\n260,-1,937.1,915.1,79.3,165.9,0.994\n692,-1,1221.5,30,62,119.8,1\n692,-1,687.3,206.5,78.9,112.5,1\n692,-1,1481.8,6.1,59.4,146.1,1\n692,-1,562.1,111.4,53.3,178,1\n692,-1,803.5,144.9,53.6,171.5,1\n692,-1,1611,143.9,70.5,182,1\n692,-1,1710,457.1,99,207.8,1\n692,-1,1485.5,136.5,53,178.4,1\n692,-1,373.6,531.5,88.2,253.7,1\n692,-1,1574.6,588.7,96.9,235.2,1\n692,-1,422,146.3,63.6,165.7,1\n692,-1,487.6,132,47.6,184.8,1\n692,-1,749,78.9,51.6,158.1,1\n692,-1,360.7,115.5,49.7,171.5,1\n692,-1,308.3,377.2,68.4,208.5,1\n692,-1,248.2,201.1,61.7,198,1\n692,-1,1329.1,820.6,99.8,260.4,1\n692,-1,480.5,30.3,47.9,140.5,1\n692,-1,406.4,19.7,56.2,164.2,1\n692,-1,301,213.7,58.4,180.8,1\n692,-1,224.4,133.3,54.3,165.1,1\n692,-1,1045.9,1,62.9,95,1\n692,-1,1251.5,847.4,88.1,233.6,1\n692,-1,825.2,923.3,78.6,157.7,0.711\n795,-1,1221.2,29.3,62.6,119.1,1\n795,-1,687.1,205.6,79.1,113.7,1\n795,-1,783.2,130.3,52.5,181.5,1\n795,-1,1723,451.8,75.9,215.2,1\n795,-1,288.7,509.5,78.8,239.7,1\n795,-1,547.9,115,61.7,176.9,1\n795,-1,478.4,95.5,60.4,172.7,1\n795,-1,1574.6,589.7,100.7,235.9,1\n795,-1,1483.7,27.7,60,148.7,1\n795,-1,278.6,167.7,57.9,194,1\n795,-1,750.1,68,56,163.2,1\n795,-1,233.1,132.9,51,167.1,1\n795,-1,1441.2,64.6,48.4,160.4,1\n795,-1,342,187.4,49.5,176.5,1\n795,-1,391.8,234.9,65.1,178.2,1\n795,-1,253.6,1.5,53.3,121.5,1\n795,-1,444.1,226.8,54.8,187.7,1\n795,-1,1604.9,1,52.4,126.9,1\n795,-1,1019.2,618.8,80.2,249.4,1\n795,-1,1082.3,600.1,94.7,259.4,1\n795,-1,422.2,93,55.5,163.7,1\n795,-1,602.2,578.6,78.7,242.9,1\n795,-1,446.4,2.1,44.4,91.5,0.999\n91,-1,1221.9,30.8,61.7,116.2,1\n91,-1,704.6,1,55.9,158.1,1\n91,-1,1487.6,69.5,54.6,147.7,1\n91,-1,356,109.2,54.7,174.4,1\n91,-1,401.3,859.3,103.5,221.7,1\n91,-1,420.5,311,80.1,228.6,1\n91,-1,727.8,189.7,70.5,175.2,1\n91,-1,1721.6,457.3,77.4,208.6,1\n91,-1,1358.7,564.7,105.8,247.3,1\n91,-1,969,194.5,73.5,187.9,1\n91,-1,501.2,213.3,73.3,198.6,1\n91,-1,1209.6,157.9,59.3,174.8,1\n91,-1,102.4,547.5,86.3,252.2,1\n91,-1,295.6,126.7,53.1,170.9,1\n91,-1,24.3,705.4,68,227.5,1\n91,-1,210.2,130.7,50.5,164.5,1\n91,-1,1296.9,200.5,47.2,168.3,1\n91,-1,119.9,354.1,47.9,192,1\n91,-1,437.7,11.5,53.1,160.4,1\n91,-1,538.6,62.8,48.9,168.4,1\n91,-1,1411.9,195.7,60.7,192.8,1\n91,-1,375.9,19.1,53.1,158.6,1\n91,-1,1467.6,190.3,55.9,175.6,1\n91,-1,255.4,91.6,60.9,182.7,1\n91,-1,869.3,206.4,56.7,167,1\n91,-1,826.6,187.9,63.9,181.2,0.999\n91,-1,481.8,134.6,56.3,160.1,0.999\n91,-1,795.4,155.3,60.1,170.5,0.983\n91,-1,485,36.5,54.3,161.9,0.968\n709,-1,1221.9,30.1,61.6,118.9,1\n709,-1,686.8,206.1,79.9,113.6,1\n709,-1,1481.2,6.8,57.4,145.7,1\n709,-1,1602.1,128.4,68,180.9,1\n709,-1,1710.9,455,97,210.3,1\n709,-1,559.4,110.8,56.2,177.4,1\n709,-1,1574.6,587.6,99.4,236.6,1\n709,-1,411.5,160.3,77,166.8,1\n709,-1,295.3,393.3,74.6,215.1,1\n709,-1,481.6,146.9,50.4,181.9,1\n709,-1,1475,119.9,53.5,179.7,1\n709,-1,1290.3,778.9,92.4,274.9,1\n709,-1,360,109.7,49.8,172.7,1\n709,-1,749.6,80.5,50.1,154.9,1\n709,-1,800.7,139.1,47.6,172.5,1\n709,-1,472.1,24.7,44.6,134.7,1\n709,-1,1203.3,801.4,90.4,270.8,1\n709,-1,996.2,2.6,66.1,87.4,1\n709,-1,391.2,544.6,66.7,244.9,1\n709,-1,259.7,197.2,56.1,195.3,1\n709,-1,306.3,208.1,59.1,177.8,1\n709,-1,411.6,28.8,61.1,159.3,1\n709,-1,230.3,133.8,51.6,165,1\n709,-1,849.1,934.2,78,146.8,0.066\n300,-1,1221.6,31.9,61.8,118.5,1\n300,-1,1681.9,45.5,56.7,152,1\n300,-1,686.4,206.3,80.3,115.3,1\n300,-1,1459.9,19.3,51.9,148.8,1\n300,-1,238.3,393.5,59.3,195.8,1\n300,-1,108.4,350.5,51.9,191.9,1\n300,-1,936.9,62.2,64.8,175.1,1\n300,-1,1720.5,459.3,78.2,210.3,1\n300,-1,409.9,33.4,55.2,161.6,1\n300,-1,250,577.8,108.5,255.3,1\n300,-1,354.3,110.9,55,177.4,1\n300,-1,704.9,1,54.4,159.4,1\n300,-1,794.7,149.4,61.4,177.7,1\n300,-1,453.6,129.5,75.1,204.3,1\n300,-1,1007.3,86.1,60.7,184.4,1\n300,-1,284.1,131.9,53.2,170,1\n300,-1,1470.1,594,93.1,242.7,1\n300,-1,218.4,131.7,59.6,165.5,1\n300,-1,533.7,441.7,70,219.8,1\n300,-1,1077.4,86.9,49.9,161.1,1\n300,-1,383.6,423,83.2,226.7,1\n300,-1,823.2,395.4,88.5,219.3,1\n300,-1,304.8,842.1,99.8,238.9,1\n300,-1,742.5,101.9,45.2,172.2,1\n300,-1,888.2,414.2,72.5,198.7,1\n300,-1,461.5,426,62.9,228.9,0.999\n300,-1,511.9,103.2,47.9,175.3,0.999\n300,-1,936.5,913.1,66.8,167.9,0.988\n300,-1,832.3,116,44.7,150.8,0.123\n369,-1,1221.8,31.7,61.6,117.7,1\n369,-1,686.4,206.2,79.5,112.9,1\n369,-1,1062.1,435,66.9,199.5,1\n369,-1,443.5,82.5,68.4,196,1\n369,-1,442.9,309.6,73.3,220.1,1\n369,-1,1020.5,56.2,55.1,165.5,1\n369,-1,1627.9,9.3,57,161.3,1\n369,-1,1760.8,98.7,58,155,1\n369,-1,1432.3,2.4,52.6,100.2,1\n369,-1,359.3,524,86.3,233.1,1\n369,-1,210.5,140.2,59.9,160.6,1\n369,-1,511.7,89.8,48.2,166,1\n369,-1,109.6,350.3,52.3,190.4,1\n369,-1,361.8,109.8,53.6,174.5,1\n369,-1,1719.5,455.6,79.5,214.3,1\n369,-1,286,131.6,53.4,169.4,1\n369,-1,830.8,1,55.8,111,1\n369,-1,796.2,150.5,59.3,172.6,1\n369,-1,1824.8,76.2,61.8,154.7,1\n369,-1,953.2,43.4,63.3,175.9,1\n369,-1,1809.3,458.1,63.7,207.9,1\n369,-1,911.7,492.7,78.6,209.2,1\n369,-1,541.6,572.1,97.5,246.5,1\n369,-1,213.3,312.2,53.7,183.6,1\n369,-1,1581.1,628.2,83.4,246.5,1\n369,-1,466,540.9,66,231.3,1\n369,-1,380.7,2.2,46.1,89.2,1\n369,-1,846.2,479.4,87.9,228.1,1\n369,-1,760.4,96.6,43,141.5,1\n369,-1,965,920,79.4,161,0.997\n369,-1,928.6,3.2,59.7,148.7,0.48\n953,-1,685.8,206.2,81.1,113.2,1\n953,-1,794,139.6,73.4,173.6,1\n953,-1,1473.1,139.9,63.4,165.3,1\n953,-1,1221.4,30.1,62.2,119,1\n953,-1,1479.7,1,54.6,111.2,1\n953,-1,1574.6,588.3,103.1,236.5,1\n953,-1,320,769.1,96.8,273.2,1\n953,-1,750.3,72.1,56.3,160.9,1\n953,-1,1720.5,453.7,78.1,214.4,1\n953,-1,1147.2,78.4,59.3,167.2,1\n953,-1,1757.8,138.1,65.5,180.3,1\n953,-1,1639.5,110.3,51.8,164.2,1\n953,-1,930.9,348,70.6,216.7,1\n953,-1,1413,2.3,46,112.2,1\n953,-1,553,116.7,55.2,172,1\n953,-1,852.5,362.8,69.1,210.2,1\n953,-1,391.7,390.8,66.9,214.7,1\n953,-1,1240,755.7,91.8,264.2,1\n953,-1,424,232.9,69.5,190.4,1\n953,-1,322.4,414.7,79.2,190.7,1\n953,-1,232.7,135.5,57.5,170,1\n953,-1,436.4,75.8,55.2,176.3,1\n953,-1,482.2,220.1,60.1,181.7,1\n953,-1,343,235.3,62.8,185.8,1\n953,-1,1742.8,675.6,94.1,251.3,1\n953,-1,479.4,41,54.9,157.5,1\n953,-1,246,2.1,54.7,124,1\n953,-1,288.8,126.4,53.4,165.5,0.998\n953,-1,320.9,164.4,56,205.2,0.961\n432,-1,1221.5,30.5,62.5,119.3,1\n432,-1,939.3,5.2,62.7,166.1,1\n432,-1,686.2,206,80.1,113.4,1\n432,-1,843.5,1,55.1,136,1\n432,-1,358.8,109.2,53,178.3,1\n432,-1,447,227.8,81,204.4,1\n432,-1,1306,517.7,69.1,206.6,1\n432,-1,111.7,349.3,53.7,189.6,1\n432,-1,1679.1,87,67.2,174.7,1\n432,-1,1716.9,459.1,81.5,206.4,1\n432,-1,1009.2,21.7,53.9,159.4,1\n432,-1,281.8,619.9,93,255.9,1\n432,-1,1756.5,146.8,57.6,162.7,1\n432,-1,284.8,129.2,54.1,166.4,1\n432,-1,754.3,562.4,87.9,248.2,1\n432,-1,798.3,150.8,53.6,172.2,1\n432,-1,379.6,651.4,70.2,240.1,1\n432,-1,225.9,245.6,51.1,173.5,1\n432,-1,534.3,72.7,56.9,166.3,1\n432,-1,1568.6,613.6,89.4,247.3,1\n432,-1,1849,417.3,72,191.3,1\n432,-1,871.3,568.2,107.1,241.1,1\n432,-1,360,1,66.7,130,1\n432,-1,950.3,578.1,85.6,219.8,1\n432,-1,429.7,111.1,59.2,170.4,1\n432,-1,221.9,137.4,72.3,160.3,1\n432,-1,713.8,89.1,60.8,172,1\n432,-1,422.3,1,43.9,128.3,1\n432,-1,1766.2,70.1,93.9,177.4,0.998\n432,-1,724.9,2.7,48.9,107.3,0.976\n432,-1,996.4,932.8,85.1,148.2,0.967\n432,-1,759.2,86.5,40.7,151.4,0.917\n432,-1,460.4,54.3,61.8,184.8,0.424\n601,-1,1221.7,30.7,61.6,119.4,1\n601,-1,687.7,205.5,78,113.9,1\n601,-1,1480.5,3.6,61.2,145.5,1\n601,-1,801.3,143.1,63.7,174.9,1\n601,-1,366.5,273.5,63.4,196.4,1\n601,-1,1711,456.8,91.9,209,1\n601,-1,235,265.1,64.6,188.8,1\n601,-1,1651.1,226.9,71.8,200.1,1\n601,-1,1626.2,1.5,54.4,113.1,1\n601,-1,563.8,110.1,49.3,180.4,1\n601,-1,1574.1,588.7,97.9,235.9,1\n601,-1,166.8,245,61.9,208.9,1\n601,-1,287,126.9,51.3,169.5,1\n601,-1,361.8,110.7,51.3,178.7,1\n601,-1,484.2,99.4,47.6,159.4,1\n601,-1,431.5,72.9,47.4,167.8,1\n601,-1,216.4,138,55.7,158.5,1\n601,-1,752.1,79.2,44.9,156.3,1\n601,-1,1080.1,871.6,120,209.4,0.999\n601,-1,395.8,91.2,43.6,156.7,0.931\n601,-1,1876.9,282.9,44.1,180.3,0.554\n601,-1,1160.6,883.8,96,197.2,0.231\n165,-1,1221.6,30,61.8,118.7,1\n165,-1,978,127.9,68.8,173.7,1\n165,-1,211.9,125.5,55,168,1\n165,-1,1489.1,68.9,55.3,149.3,1\n165,-1,109,347.9,50.7,190.4,1\n165,-1,1720.6,456.5,78.7,213.1,1\n165,-1,356.6,103.4,55,179.6,1\n165,-1,288.7,127.8,54.7,169.8,1\n165,-1,686.8,207.8,79.5,111.2,1\n165,-1,704.4,1,56.5,159.6,1\n165,-1,433.6,39.5,60.6,164.8,1\n165,-1,1359.2,568.6,103.7,243.1,1\n165,-1,1134.8,156.6,48.9,160.1,1\n165,-1,403.2,681,97.2,258.4,1\n165,-1,419.5,241.3,81.1,220,1\n165,-1,538,64,51.7,171.6,1\n165,-1,101.3,547.8,86.1,252.6,1\n165,-1,527.9,280.7,64.1,214.2,1\n165,-1,562.7,158.2,68.1,168.7,1\n165,-1,212.6,590,67.8,219,1\n165,-1,799.4,274.7,62.3,178.9,1\n165,-1,854,192.6,73.3,187.3,1\n165,-1,750.9,259.2,66.9,200.2,1\n165,-1,795.7,148.3,61.6,172.6,1\n165,-1,499.6,212.1,56.8,170.9,1\n165,-1,1247.7,169.8,52.1,164.8,0.999\n165,-1,393.4,7.2,47.2,112,0.999\n165,-1,1283.3,168.3,54.3,167.8,0.999\n165,-1,1022.2,905.7,74,175.3,0.987\n165,-1,603.3,273,52,187,0.346\n100,-1,1221.5,30.7,62.4,118.1,1\n100,-1,1173.1,154.5,83.8,171.5,1\n100,-1,704.5,1,56.1,161.2,1\n100,-1,395.1,831.3,98.5,249.7,1\n100,-1,1487.6,68.9,55.4,149.2,1\n100,-1,426.2,303.3,77,233.8,1\n100,-1,110.4,352,48.2,187.7,1\n100,-1,356.8,107.3,55,177.3,1\n100,-1,1721.3,457,78,211,1\n100,-1,1359,566.9,104.5,244.9,1\n100,-1,503.9,225.8,72,195.2,1\n100,-1,101.7,547.8,86.8,251.9,1\n100,-1,952.8,199.6,71.7,187.6,1\n100,-1,1276,193,46.1,168.7,1\n100,-1,293.2,124.7,54.9,173.5,1\n100,-1,210,128.9,49.2,166.7,1\n100,-1,814.5,196.3,59.9,185.8,1\n100,-1,711.3,188.1,55.7,167.7,1\n100,-1,31.4,689.4,65.2,230.1,1\n100,-1,1397.4,189.9,59,190.8,1\n100,-1,538.9,66.1,47.6,166.9,1\n100,-1,438.7,7.9,50.9,155.5,1\n100,-1,1445.1,187.9,58.3,179.7,1\n100,-1,376.9,11.1,50.6,163.2,1\n100,-1,859.4,212.9,55.3,163.8,0.999\n100,-1,480.5,37.4,62.8,159.4,0.999\n100,-1,483.9,138.5,55.8,166.5,0.998\n100,-1,256.2,90,65.2,186.8,0.998\n208,-1,1221.3,30.8,61.8,119,1\n208,-1,686.8,206.9,79,113.4,1\n208,-1,211.3,127.2,55.7,167.2,1\n208,-1,355.4,106.5,55,178.8,1\n208,-1,397.1,594.1,92.3,245,1\n208,-1,705.5,1.5,55.1,158.8,1\n208,-1,288,125.9,55.9,172.2,1\n208,-1,1207.2,144.4,50.9,165.2,1\n208,-1,1492.4,70.4,53,146.6,1\n208,-1,109.8,351.2,49.5,185.2,1\n208,-1,1358.5,567.6,103.9,245.4,1\n208,-1,81.7,649.9,114.1,252.7,1\n208,-1,1721.2,456.6,76.9,211.6,1\n208,-1,424.3,203.1,77.2,218,1\n208,-1,506,319.6,75.4,216.9,1\n208,-1,795.1,151,60.6,171.4,1\n208,-1,521.5,130.7,53.4,165.6,1\n208,-1,1019.5,135.1,49.2,156,1\n208,-1,226.4,522.6,61.3,208.8,1\n208,-1,897.7,152.7,68,189.5,1\n208,-1,1144,137.5,59.4,183.9,1\n208,-1,808.1,312.8,72.3,189.6,1\n208,-1,379.3,37.7,59,167.2,1\n208,-1,2.5,617.4,93.7,226.5,1\n208,-1,861.9,108.1,54.1,173.3,0.999\n208,-1,756.7,298.4,70.2,203,0.999\n208,-1,556.4,258.6,55.4,186.1,0.999\n208,-1,958.6,912.7,73.9,168.3,0.993\n687,-1,1222,29.6,62,120.5,1\n687,-1,687.6,206.8,78.8,112.8,1\n687,-1,1481,6.3,60.3,146.2,1\n687,-1,360.8,529.3,104.4,251.7,1\n687,-1,1489.3,142.8,52.1,178.2,1\n687,-1,485.5,131.4,47.5,180.9,1\n687,-1,804.1,146.4,55.9,169.8,1\n687,-1,1615.5,148.2,69.5,187.3,1\n687,-1,311.4,364,69.4,216.2,1\n687,-1,561.9,111.6,52.3,178.1,1\n687,-1,1710.3,455.7,98.2,212.4,1\n687,-1,420.7,141.1,63.3,164.1,1\n687,-1,1063,1,63.2,98.3,1\n687,-1,1574.1,588.5,97.9,238.9,1\n687,-1,360.1,115.9,48.3,169.6,1\n687,-1,1262.6,859.2,92.5,221.8,1\n687,-1,750.1,80.1,50,158.5,1\n687,-1,1351.4,830.2,93.6,250.8,1\n687,-1,405.6,19.9,54.6,163.2,1\n687,-1,242.3,199.5,62.3,200.3,1\n687,-1,295.9,217.8,60.4,178,1\n687,-1,481.9,35.2,47.5,146,1\n687,-1,224.3,125.3,51.8,173.6,0.998\n687,-1,823,920.6,85.2,160.4,0.883\n1050,-1,1221.5,30.2,61.9,119.2,1\n1050,-1,687.2,206.6,79.8,114.5,1\n1050,-1,794.3,141.5,71.6,173,1\n1050,-1,476.2,324.8,76.1,200,1\n1050,-1,1720.2,455.3,79.8,215.8,1\n1050,-1,287.9,126.5,54.2,173.4,1\n1050,-1,355.9,338.5,75.6,204.2,1\n1050,-1,1315.2,202.3,56.8,163.3,1\n1050,-1,276.8,547.7,89.9,213.3,1\n1050,-1,229.1,140.2,54.1,161.4,1\n1050,-1,935,227.6,65.9,195.8,1\n1050,-1,374.5,523.2,68.3,236,1\n1050,-1,852.2,235.4,67.5,193.2,1\n1050,-1,750.8,74.2,54.9,163.1,1\n1050,-1,1113.3,544.4,84.3,241.7,1\n1050,-1,1648.1,677.5,90.1,232.1,1\n1050,-1,374.9,99.2,61.4,180.7,1\n1050,-1,1725.7,222.1,56.5,174.9,1\n1050,-1,286.5,335.9,73.8,207,1\n1050,-1,308.2,1.9,39.9,129.7,1\n1050,-1,1474.7,219.9,72.1,170.1,1\n1050,-1,1571.9,588.6,101.6,242.4,1\n1050,-1,515,172,76.3,193,1\n1050,-1,473.3,168.3,57.2,179.5,1\n1050,-1,584.6,535.6,62.1,255.2,1\n1050,-1,433.9,67.5,62.5,175.7,0.999\n1050,-1,1867.4,262.7,53.6,202.7,0.977\n1050,-1,875.1,927.3,70.8,153.7,0.059\n36,-1,1209.2,30.7,74.1,119.3,1\n36,-1,686.5,205.6,80.2,114.5,1\n36,-1,388.9,369.4,89.5,238,1\n36,-1,1361.8,566.2,105.9,246.5,1\n36,-1,1486,69.1,57,151,1\n36,-1,704.6,1,56,157.7,1\n36,-1,1722.6,456.6,75.9,210.9,1\n36,-1,185,372.8,66.4,191.3,1\n36,-1,214.7,126.6,48.9,165.3,1\n36,-1,483.7,162.4,90.5,198.4,1\n36,-1,795,149.3,61.7,173.4,1\n36,-1,944.7,196.7,82.3,179.8,1\n36,-1,102.9,547.8,84.3,251.2,1\n36,-1,448.6,56.4,52.8,171.4,1\n36,-1,1010.5,154.9,78.5,186.8,1\n36,-1,284,123.3,54.2,174,1\n36,-1,865.8,140.9,60.3,184.4,1\n36,-1,355.9,110,55.1,172.5,1\n36,-1,1840.2,250.7,69.7,193.1,1\n36,-1,2.5,810.5,61.7,241.2,1\n36,-1,1356.6,189.6,50.9,161.5,0.999\n36,-1,400.6,75.4,44.4,164.8,0.979\n36,-1,1585.9,236.4,52.9,169.5,0.972\n36,-1,912.6,159.1,42,170,0.733\n36,-1,1504.5,241.1,49.4,167.3,0.204\n24,-1,687,206,79.2,113.6,1\n24,-1,1487.2,69.1,55.4,149.3,1\n24,-1,997.3,201.5,79.6,177.3,1\n24,-1,704.8,2.2,55.4,156.4,1\n24,-1,1362.1,567.2,104.3,244.5,1\n24,-1,492.8,154.7,92.4,188.3,1\n24,-1,794.3,149.9,62.6,174.2,1\n24,-1,1724.2,456.1,75.5,210.8,1\n24,-1,1207.1,33.8,71.5,117,1\n24,-1,355,101.9,55,182.4,1\n24,-1,102,547.8,85.7,251.5,1\n24,-1,382.8,382.6,82.5,241.7,1\n24,-1,199,376.9,67.1,203.7,1\n24,-1,1821.1,232,64.5,192.8,1\n24,-1,216.1,130,49.2,163.8,1\n24,-1,284.3,125.1,55.8,169.7,1\n24,-1,1603.9,241.8,60.9,187.8,1\n24,-1,415.9,77.3,56.2,166.4,1\n24,-1,874.9,140.8,56.1,180.1,1\n24,-1,455.9,61.6,50.6,168.1,1\n24,-1,915.9,148,51.3,165,1\n24,-1,3,840.1,50.4,229.4,0.999\n24,-1,1379.4,187.2,51.8,180.6,0.999\n175,-1,1221.2,30.6,61.9,119,1\n175,-1,108.6,350.7,49.2,187.9,1\n175,-1,1489.3,69.1,54.7,148.5,1\n175,-1,355.6,104.5,55.6,178.8,1\n175,-1,703.8,1,56.5,160.1,1\n175,-1,1358,567.7,104.9,244.2,1\n175,-1,404.5,661,94.8,260.3,1\n175,-1,289.2,127.2,53.7,170.6,1\n175,-1,212.3,125.7,54.7,167.6,1\n175,-1,947.4,122.5,66.6,174,1\n175,-1,1721.3,457.4,77.4,210.9,1\n175,-1,421.8,38.8,57.9,162.3,1\n175,-1,687.6,207.8,77.8,111.1,1\n175,-1,420.4,233.1,78.9,219.9,1\n175,-1,229.7,582,66.6,211,1\n175,-1,101.3,552.3,86.7,247.3,1\n175,-1,527.7,284.2,61.1,214.4,1\n175,-1,548.5,150.6,65,173.4,1\n175,-1,3.1,608.1,79.4,233.6,1\n175,-1,793.9,149.6,62.1,174.5,1\n175,-1,1216.9,163.5,56.4,174.5,1\n175,-1,863.6,184.6,73.7,188.1,1\n175,-1,796.5,279.2,63.7,182.9,1\n175,-1,1114.4,150.7,43.7,161,1\n175,-1,745.5,264.3,65.6,197.8,1\n175,-1,1261.5,162.9,48.7,156.6,0.999\n175,-1,1005.6,912.1,71.9,168.9,0.969\n175,-1,537.7,67.1,50.4,172.3,0.912\n546,-1,1221.8,30.3,61.4,119.1,1\n546,-1,687,205.8,79,114.4,1\n546,-1,1490.8,4,58.4,142,1\n546,-1,385,217.2,62.3,189.6,1\n546,-1,781.6,144.1,68.5,173,1\n546,-1,1665.3,286.5,90.4,205.1,1\n546,-1,1716.2,456,83.6,212.7,1\n546,-1,990.6,1.6,51.7,102.5,1\n546,-1,875.7,1.2,53.4,109.5,1\n546,-1,289.6,124,52,171.8,1\n546,-1,776,598.3,92.8,253.3,1\n546,-1,1785,226.5,66.7,180.3,1\n546,-1,1660,2.9,52.9,157.5,1\n546,-1,180,305.2,67.2,192.3,1\n546,-1,1595.3,1,55.4,156.2,1\n546,-1,527.6,108.5,59.9,176.5,1\n546,-1,454,103.6,67.4,185.4,1\n546,-1,219.6,134.5,58.2,158.6,1\n546,-1,1593.3,585.4,69,238.5,1\n546,-1,253.2,866.3,81.2,214.7,1\n546,-1,929.5,1.5,54.9,101,1\n546,-1,358.5,116,57,168.3,1\n546,-1,133,273.1,56.1,215.4,0.999\n546,-1,1067.2,770.8,92,246.1,0.996\n546,-1,410.8,40.9,49.1,172,0.995\n546,-1,755.8,85.5,48.4,155,0.983\n546,-1,994.5,763.4,114.6,240.6,0.756\n546,-1,1876.4,236,44.6,196.4,0.052\n532,-1,1221.6,30.6,61.6,120.2,1\n532,-1,1485.9,1,58.7,141.6,1\n532,-1,687.1,205.5,78.6,115.3,1\n532,-1,384.7,201.5,66.8,189.3,1\n532,-1,288.8,124.7,54.3,172.3,1\n532,-1,780.2,142.9,57.9,175.2,1\n532,-1,992.2,1,55.4,111.1,1\n532,-1,170.6,313.5,67.3,195.4,1\n532,-1,1718.4,456.5,81.2,210.7,1\n532,-1,1699.2,304.1,73.4,198.5,1\n532,-1,1667.6,12.1,52.4,161.1,1\n532,-1,1766.8,219.9,69.7,171,1\n532,-1,464.3,117.1,62.6,186.5,1\n532,-1,1604.7,2.4,56.9,168.4,1\n532,-1,881.9,1.7,52.4,115.8,1\n532,-1,1583.4,592.5,62.9,241.5,1\n532,-1,517.3,102.2,60.4,179.3,1\n532,-1,218.1,138.9,62.6,160.4,1\n532,-1,263.4,831.2,82.7,249.8,1\n532,-1,812,604.4,76.1,254,1\n532,-1,928.7,1,57.1,110.7,1\n532,-1,192.2,797.4,96.1,277.1,1\n532,-1,450.2,1.8,69,169,1\n532,-1,402.4,35.1,51.2,165.1,1\n532,-1,960.9,735.9,123.6,258.7,1\n532,-1,1793.8,661.8,63.8,212.6,0.997\n532,-1,1589.1,286.6,58.5,201.1,0.922\n532,-1,1875.4,224.9,45.6,212,0.625\n532,-1,1050.2,760.2,87.4,236,0.075\n1019,-1,1221.3,29.8,62.5,119.1,1\n1019,-1,686.7,206.6,80,113.1,1\n1019,-1,380.4,299,75.7,198.7,1\n1019,-1,792.3,141.3,74.3,172.5,1\n1019,-1,1237.8,160.5,61.2,175.1,1\n1019,-1,290,128.3,52.2,167.5,1\n1019,-1,929.3,263.6,66.1,202.3,1\n1019,-1,298.3,297.6,63.9,204.1,1\n1019,-1,295.7,496.9,83,211.9,1\n1019,-1,494.3,288.9,68.3,195.3,1\n1019,-1,231.6,139.6,55.5,163.2,1\n1019,-1,538.4,120.3,61.8,171.3,1\n1019,-1,1468.7,186.4,64.5,167.8,1\n1019,-1,1721.7,457.5,78.1,205.5,1\n1019,-1,1574.7,590.2,103.3,237.8,1\n1019,-1,840.8,276.7,69.6,199,1\n1019,-1,1700.7,178.5,54.6,172.9,1\n1019,-1,381,478.3,64.2,225.1,1\n1019,-1,1836.4,226.2,59.3,183.2,1\n1019,-1,750.8,73.7,54.7,161.5,1\n1019,-1,1150.8,597.4,89.3,253.7,1\n1019,-1,1709.7,685.4,102.5,232.3,1\n1019,-1,447.6,167.1,76.1,193.3,1\n1019,-1,584.3,555.2,78.8,237.9,1\n1019,-1,314.5,2.1,37.1,133.4,1\n1019,-1,370.6,99.1,61.4,185.5,0.998\n1019,-1,399.8,168.3,59,167.2,0.996\n1019,-1,359.8,912.3,95.5,168.7,0.895\n1019,-1,501.2,115.7,41.3,133.6,0.508\n762,-1,1221.7,29.6,61.7,119.6,1\n762,-1,687.2,205.5,78.7,113.7,1\n762,-1,543.8,114.2,66.6,177.9,1\n762,-1,781.4,135.4,65,176.7,1\n762,-1,1719.4,453.1,79.7,213.2,1\n762,-1,303.9,466.5,76.9,225.4,1\n762,-1,1574.9,590.7,99.6,233.7,1\n762,-1,1460.6,85.3,52.6,164.6,1\n762,-1,270.5,180.5,55.6,198.3,1\n762,-1,331.4,192.5,55.5,181.7,1\n762,-1,457.8,191.9,54.8,188.5,1\n762,-1,398.2,208.1,66.7,176.2,1\n762,-1,1579.5,85.2,63.5,176.9,1\n762,-1,1494.7,14.2,60.6,146.9,1\n762,-1,457.3,62.1,57.3,170.9,1\n762,-1,752.4,80.5,48.5,154.1,1\n762,-1,515.9,565.1,77.5,251,1\n762,-1,257.1,1.1,50.3,121.3,1\n762,-1,1150.8,664.5,94.6,268.2,1\n762,-1,235.5,134.9,49,162.7,1\n762,-1,399.2,64.7,58.4,170.7,1\n762,-1,359.5,110.6,53.7,170.1,1\n762,-1,1086.9,682.5,79.4,258.2,1\n230,-1,1221.9,31,61.3,118.6,1\n230,-1,686,206.9,80.4,112.7,1\n230,-1,381.7,548,96.6,240.3,1\n230,-1,1491.7,67,53.7,149.2,1\n230,-1,797,148,59.1,181.1,1\n230,-1,356.4,105.9,53.6,180.4,1\n230,-1,705.2,1,55.3,158.7,1\n230,-1,435,186,76.3,214.7,1\n230,-1,288.7,126.3,54.7,172.8,1\n230,-1,1578.5,1.3,59.6,140.5,1\n230,-1,109.1,350.2,50.2,190.5,1\n230,-1,211.4,126.2,55.9,167.8,1\n230,-1,1182.5,131.6,49.1,153.8,1\n230,-1,1721,457.4,77.6,211.1,1\n230,-1,1358.8,568.4,103.9,242.9,1\n230,-1,1101.1,125.7,63.9,183,1\n230,-1,517.1,120.9,48.1,175.7,1\n230,-1,917.6,130.6,75.1,178.2,1\n230,-1,507.4,343.7,70.2,218.5,1\n230,-1,218.4,493.9,60.6,204.9,1\n230,-1,832.9,331.4,74.7,192.9,1\n230,-1,158,691.3,102.4,260.3,1\n230,-1,778.1,320,73.5,208.2,1\n230,-1,591.3,350.5,60.9,195.5,0.999\n230,-1,105.3,631.5,90.1,254.8,0.997\n230,-1,935.3,902.2,72.5,178.8,0.991\n10,-1,687.4,205.9,78.6,113.6,1\n10,-1,1050.9,210.4,94.1,180.4,1\n10,-1,1487.2,70,55.4,147.6,1\n10,-1,1361.8,567.8,105.6,243.4,1\n10,-1,504.8,145.1,105.6,191.3,1\n10,-1,704.4,1,56.7,157.6,1\n10,-1,377,401.4,85.4,239.6,1\n10,-1,1198.5,37.9,75.7,112.4,1\n10,-1,796.4,148.8,60.9,175.5,1\n10,-1,102.3,547.4,85.3,250.5,1\n10,-1,1724.9,459.4,77.1,205,1\n10,-1,1802.4,215.4,64.3,183.7,1\n10,-1,356,106.4,53.7,176.9,1\n10,-1,285.8,120.8,55.3,175.7,1\n10,-1,212.9,385.4,67.3,202.7,1\n10,-1,219.2,127,47.5,167.1,1\n10,-1,415.5,89.7,56,167.4,1\n10,-1,878.3,128.1,61,177.4,1\n10,-1,1627.9,257.2,61.6,183.4,1\n10,-1,460.2,69.9,53.6,175.2,1\n10,-1,1039.1,1,45.9,79.9,1\n10,-1,1439.5,241.9,52.3,172.4,0.999\n10,-1,1405.9,188.6,47.5,179.9,0.99\n4,-1,687.6,206.3,78.6,113.8,1\n4,-1,704.4,1.1,56,156.1,1\n4,-1,1487.1,69.7,55.8,147.9,1\n4,-1,1361.5,567.2,106.1,245.2,1\n4,-1,1084.3,211.2,75.7,184.6,1\n4,-1,286.3,125.3,56.4,169.9,1\n4,-1,101.9,545,85.8,255.6,1\n4,-1,1731.4,455.9,76.4,214.8,1\n4,-1,1794.4,205.2,66.4,185.7,1\n4,-1,511.7,144.2,96.7,182.9,1\n4,-1,796.3,147.8,61.3,175.2,1\n4,-1,220.9,129.6,49,162.1,1\n4,-1,872.9,125.8,61.1,176.5,1\n4,-1,373,408.3,85.4,240.5,1\n4,-1,1197.9,34.9,74.5,118.4,1\n4,-1,355.5,104.9,53.5,177.9,1\n4,-1,1632.5,259.8,65.2,187.2,1\n4,-1,415.8,92.7,55,169.3,1\n4,-1,1033.5,136.5,81.1,182.6,1\n4,-1,222.1,390.9,65.1,206.2,1\n4,-1,465.3,80.6,50.8,168.9,1\n4,-1,1446.6,248.6,55,173.3,1\n4,-1,1039.2,1,50.6,83.2,0.999\n4,-1,259.7,363.8,61.3,225.5,0.978\n4,-1,1414.3,196.3,50.2,168.1,0.394\n4,-1,915,131.6,43.1,160.8,0.237\n4,-1,1007.2,1.8,47.3,77.3,0.069\n990,-1,686.5,206.4,80,112.9,1\n990,-1,1221.4,31.5,61,117.6,1\n990,-1,793.9,141,73.4,170.7,1\n990,-1,1795.6,183.8,70.3,180.7,1\n990,-1,1192.6,125.3,54.1,166.2,1\n990,-1,401.5,270.8,68.8,193.4,1\n990,-1,497.2,260,66.2,185.1,1\n990,-1,838.3,312.6,70.6,206.7,1\n990,-1,1469,166.7,67.4,168.9,1\n990,-1,299.2,454.9,87.7,204.4,1\n990,-1,1720.7,456.4,79.1,211,1\n990,-1,1575.3,590.4,103.3,235.3,1\n990,-1,229.7,134.9,55.8,165.5,1\n990,-1,330.2,843.1,94.1,237.9,1\n990,-1,1672.5,145.3,55,170.2,1\n990,-1,290.2,124.7,53,170,1\n990,-1,751.4,72.5,55.7,163.4,1\n990,-1,543.9,118.9,59.1,168.3,1\n990,-1,315.5,270.7,63.1,196.2,1\n990,-1,919.3,301,72.8,212.2,1\n990,-1,1188.2,663.5,90.1,265.9,1\n990,-1,389.7,441.5,65.9,222.7,1\n990,-1,1739.3,673.4,94.4,250.5,1\n990,-1,501.7,74.5,52.3,155.2,1\n990,-1,446.3,65,57.2,178.5,1\n990,-1,314,1.7,44.8,129.6,1\n990,-1,1444,1,56.6,86.6,0.999\n990,-1,383.7,1,50.9,136.6,0.998\n990,-1,380.8,166.4,63.7,190.8,0.998\n990,-1,1382.2,4.2,43.8,84.9,0.852\n677,-1,1221.2,29.5,61.9,122.1,1\n677,-1,687.6,206.7,78.5,113.9,1\n677,-1,1481.1,5.3,60.8,144.6,1\n677,-1,1710.2,456.1,97.4,210.1,1\n677,-1,483.3,129.7,46.2,172.3,1\n677,-1,1095.1,1,65.4,103.3,1\n677,-1,801.4,145,63.9,172.9,1\n677,-1,563.7,111.3,50,177.9,1\n677,-1,360.3,115.3,50.8,167.9,1\n677,-1,380.5,528.8,103.3,253.8,1\n677,-1,315.3,355.4,68.8,211.3,1\n677,-1,1575.3,590.3,97.1,235,1\n677,-1,1492.9,159.3,51.5,176,1\n677,-1,1622,153,74.3,191.8,1\n677,-1,416.7,139.2,71.4,162.2,1\n677,-1,750.1,79.8,49.5,157,1\n677,-1,405.6,7,57.3,161.3,1\n677,-1,1380.8,863.7,99.8,217.3,1\n677,-1,1297.9,882.6,84.4,198.4,1\n677,-1,286.4,223.8,56.3,177,1\n677,-1,232,212.2,63.4,195.9,1\n677,-1,299.1,1,53.5,134.8,1\n677,-1,350.7,9.6,54.2,150.8,0.983\n677,-1,843,924.1,68.9,156.9,0.499\n517,-1,1221.3,30.4,62,119.3,1\n517,-1,1490.5,1,59.7,139.4,1\n517,-1,687.5,206.7,78.4,114.5,1\n517,-1,994.4,1,56.3,121.7,1\n517,-1,161.8,326.1,65.9,189.5,1\n517,-1,393.2,184.6,61.6,187.5,1\n517,-1,788.9,144.1,56.2,174.6,1\n517,-1,1673,22.5,54.4,165.8,1\n517,-1,882.7,1.9,54.3,119.9,1\n517,-1,1718.7,460.2,81.4,203.6,1\n517,-1,1564,600.6,67.1,236.3,1\n517,-1,1613.5,13.2,54.8,177.2,1\n517,-1,459.2,135,70.7,185.9,1\n517,-1,827.5,608.3,73.5,256.8,1\n517,-1,1603.8,300.3,65,199.5,1\n517,-1,930,2.3,57.8,117.7,1\n517,-1,343.8,170.6,49.9,166.6,1\n517,-1,289.4,120.9,54.2,177.2,1\n517,-1,1731.2,627.1,71.2,220.1,1\n517,-1,947.6,709.6,122.1,263,1\n517,-1,1852.6,214.5,68.4,186.7,1\n517,-1,1706.9,321.5,94.3,199.9,1\n517,-1,732.2,92.5,65.2,167.4,1\n517,-1,217.5,136.9,63.3,159.8,1\n517,-1,516.8,95.2,57.1,179.7,1\n517,-1,196.6,772.8,93.4,273.8,1\n517,-1,1758.9,206.2,58.1,167.1,1\n517,-1,451.6,3.3,76.2,181.4,1\n517,-1,275,801,81.3,273.8,1\n517,-1,397.9,26.5,47.3,157.3,0.998\n517,-1,572.5,68.1,43.6,155.1,0.983\n517,-1,1039.2,728.5,66.4,231.6,0.115\n517,-1,1045.6,931,74,150,0.052\n969,-1,686.2,206.3,79.9,112.9,1\n969,-1,1221.4,30.9,61.7,119.9,1\n969,-1,793.6,140.2,73.9,172.2,1\n969,-1,1155.6,100.2,64.8,166.5,1\n969,-1,1471.2,151,65.7,165.5,1\n969,-1,1771.2,154.8,68.1,187.7,1\n969,-1,1649.9,124,58.8,172.3,1\n969,-1,415.8,248.6,71,192.3,1\n969,-1,1574.7,589,103.7,236.1,1\n969,-1,927.8,325.6,71.3,214.6,1\n969,-1,1719.6,455.4,79.4,210.4,1\n969,-1,491.2,235.4,65.3,183.3,1\n969,-1,331,802.1,90.8,273.3,1\n969,-1,751.6,72.6,56.1,162.3,1\n969,-1,549.8,119.9,53.5,168.5,1\n969,-1,445.3,69.5,55.5,180.9,1\n969,-1,230.1,138.4,55.3,161.5,1\n969,-1,309.4,430,86.3,198.6,1\n969,-1,329.9,246.1,65.3,198.5,1\n969,-1,847.7,339.6,64.5,210.3,1\n969,-1,1454.7,1,64.3,101.9,1\n969,-1,1400.1,1.6,46.9,101.8,1\n969,-1,1211.8,709.4,92.5,269.6,1\n969,-1,389.7,412.5,67.4,218.1,1\n969,-1,1738.6,672.9,97.9,253,1\n969,-1,290.3,126.4,54.2,169.9,1\n969,-1,312.7,1.2,48.3,129.3,1\n969,-1,485.8,53.6,53.6,158.4,0.999\n969,-1,381.5,1.1,54,128.4,0.998\n969,-1,327.1,161.4,65.5,159.3,0.062\n292,-1,1221.5,31.7,62.1,119.9,1\n292,-1,686.4,206.7,79.3,113.7,1\n292,-1,1672.6,35.5,56.8,156.6,1\n292,-1,1466.2,22.6,54.7,148.3,1\n292,-1,352.6,108.4,55.1,180.1,1\n292,-1,796.4,146,59.9,177.2,1\n292,-1,938.6,72.6,64.2,175.5,1\n292,-1,1719.6,458.9,79.7,209.2,1\n292,-1,108.1,351.8,52.3,188.4,1\n292,-1,236.2,407.6,60.5,193.1,1\n292,-1,286.5,129.7,53.4,172.7,1\n292,-1,454.2,138.6,75.4,200,1\n292,-1,1088.2,90.8,52.3,162.5,1\n292,-1,233.9,579.7,95.3,256.7,1\n292,-1,704.3,1.2,54.1,156.4,1\n292,-1,404.5,22.1,56,169.1,1\n292,-1,1016.8,93.9,58.7,180,1\n292,-1,294.4,830.5,100.6,250.5,1\n292,-1,385.7,434.2,84.9,228.8,1\n292,-1,1456,584.4,94.2,248,1\n292,-1,816.9,388.3,91.5,219.8,1\n292,-1,221.7,130.8,55.2,164.7,1\n292,-1,746.7,105.7,47.8,168.8,1\n292,-1,515.5,105.4,49.7,179.4,1\n292,-1,541.5,430.1,67.3,215.2,1\n292,-1,884.6,404.7,80.9,194.4,1\n292,-1,463.2,415.9,62.9,233.2,0.999\n292,-1,825.2,105.6,62.7,160.1,0.998\n292,-1,940.8,921,78.8,160,0.995\n555,-1,1221.1,30.1,62.9,120.8,1\n555,-1,687.1,205.9,78.9,114.8,1\n555,-1,1489.9,4,59,145.1,1\n555,-1,535.1,111.3,61.8,175.3,1\n555,-1,786.8,144.3,66.1,176.7,1\n555,-1,379,221.2,64,192.4,1\n555,-1,1662.6,279.6,84,199,1\n555,-1,1801.4,234.4,73.2,182.8,1\n555,-1,1717.5,455.7,83.3,209,1\n555,-1,1588.4,3.7,55.3,145.1,1\n555,-1,194.8,296.9,63.6,193.9,1\n555,-1,288.5,122.4,53.8,173.6,1\n555,-1,873.9,1,52.8,110.2,1\n555,-1,1658.7,1,55.7,150.4,1\n555,-1,755.9,593.1,93.3,260.2,1\n555,-1,140,268.7,54.6,212.6,1\n555,-1,987,1.7,52.5,95.8,1\n555,-1,219.5,138,57.3,157.4,1\n555,-1,1596,585.8,70.5,242.4,1\n555,-1,245.6,882.9,83.8,198.1,1\n555,-1,753.6,83.2,48,154,1\n555,-1,457.7,91.3,65.8,186.7,1\n555,-1,359.2,110.5,53.8,170.4,1\n555,-1,420.6,142,49.1,159,1\n555,-1,1012.1,779.4,124.7,258.9,0.993\n555,-1,1092.8,794.9,82.7,244.8,0.975\n555,-1,929.4,1.6,58.1,95.5,0.919\n555,-1,1025.5,947,76.8,134,0.186\n199,-1,1221.3,30.4,61.8,120.4,1\n199,-1,687.5,207.1,78.1,113.2,1\n199,-1,401.4,609.3,94.5,247.6,1\n199,-1,211.6,127.6,55.9,167.5,1\n199,-1,1490,68.4,54.9,150.5,1\n199,-1,58.4,640.5,116.9,245.1,1\n199,-1,108.6,347.6,50.8,190.1,1\n199,-1,704.6,1,56.1,159.2,1\n199,-1,524.5,135.3,62.5,162.9,1\n199,-1,1719.9,457.7,79,210,1\n199,-1,1357.7,567.5,104.6,245.9,1\n199,-1,289.2,126.8,55,172.6,1\n199,-1,355.8,105.4,54.3,180,1\n199,-1,421.5,212.6,76.4,215.4,1\n199,-1,796.5,151.3,59,172,1\n199,-1,512.4,308.4,77.7,219,1\n199,-1,883.8,158.1,75,186.4,1\n199,-1,229.9,542,62.8,215.8,1\n199,-1,391.3,40,63.1,169.2,1\n199,-1,1047.9,139.1,49.3,158.8,1\n199,-1,800.8,307.5,73,186,1\n199,-1,1159,144.1,62.3,185,1\n199,-1,1212.3,143,56.9,173.7,1\n199,-1,751.8,292,70.1,208,1\n199,-1,967.8,917.4,73.9,163.6,0.97\n460,-1,1222.4,31.1,61.4,118.4,1\n460,-1,448.1,195.2,69,197,1\n460,-1,936.6,1,58.2,149.1,1\n460,-1,686.6,205.8,79.7,114.2,1\n460,-1,1008.5,2.9,54.2,156.2,1\n460,-1,1735.3,163.4,58.4,165.3,1\n460,-1,1704.9,459.5,94.6,207.3,1\n460,-1,870.4,1,56.6,135.4,1\n460,-1,360.5,107.6,52.8,179.5,1\n460,-1,271,216.5,49.5,172.6,1\n460,-1,242.8,669.7,98.2,265.5,1\n460,-1,1507.4,1.3,57.1,110.8,1\n460,-1,1827.9,380.5,77.3,203.8,1\n460,-1,521.5,75.2,56.2,172.5,1\n460,-1,1544.2,612,77,242.2,1\n460,-1,115.1,348.2,56.2,190.4,1\n460,-1,339.3,702.5,73.9,249.1,1\n460,-1,803.3,150.6,46.3,172.9,1\n460,-1,1656.9,358.2,63.4,192.5,1\n460,-1,1451.4,548.7,78.4,220,1\n460,-1,1685.2,55.8,66.3,177.8,1\n460,-1,218.1,138.7,62.8,158.7,1\n460,-1,804.5,580.7,85.6,251.1,1\n460,-1,284.8,124.5,55.1,172.3,1\n460,-1,753,94,53.7,147.8,1\n460,-1,889.1,605,117.2,246.5,1\n460,-1,418.3,2.1,44.8,159.3,0.999\n460,-1,978.2,624.9,89.4,227,0.999\n460,-1,1027.7,921.8,83.7,159.2,0.996\n460,-1,442,44.3,71.7,187.6,0.996\n460,-1,713.8,94.7,51.6,163,0.982\n460,-1,430.4,146.3,50.7,150.1,0.26\n261,-1,1221.3,31.7,62.1,117.9,1\n261,-1,1626.8,16.2,62,144.8,1\n261,-1,687.3,205.3,78.6,114.7,1\n261,-1,385.5,495.9,86.3,224.6,1\n261,-1,287.2,130.2,56.3,169,1\n261,-1,1479.7,49.6,53.7,150,1\n261,-1,453.4,156.8,75.5,215.5,1\n261,-1,356.1,107.7,53.2,177.7,1\n261,-1,797.2,154.2,59.4,172.5,1\n261,-1,1721,457.8,78.2,210.7,1\n261,-1,1058.1,108.2,61.1,186.1,1\n261,-1,108.1,350,51.9,192.7,1\n261,-1,704.3,1.2,54.9,156.8,1\n261,-1,214.9,129.1,55,163.1,1\n261,-1,937.9,100.9,72.2,177.6,1\n261,-1,1398.8,564.3,101.7,248.1,1\n261,-1,1136.5,100,52.2,166.2,1\n261,-1,243.3,756.1,88.7,273,1\n261,-1,881.7,110.9,49.2,155.3,1\n261,-1,686.3,315.7,54.7,178.8,1\n261,-1,373.3,3.9,57.8,163.7,1\n261,-1,488.1,375.4,70.4,227.7,1\n261,-1,228.5,449.1,61.1,201.3,1\n261,-1,797.2,347.8,88.4,213.8,1\n261,-1,867.6,360.8,79.9,195.3,1\n261,-1,153.5,567.3,83.6,250.3,1\n261,-1,513.7,118.5,55.7,174.2,1\n261,-1,573.6,388.7,65.2,209,1\n261,-1,758.5,102.4,49.6,170.2,0.999\n261,-1,936.8,916.6,82.1,164.4,0.993\n599,-1,1221.5,30.9,61.4,119.2,1\n599,-1,686.9,205.7,79.5,113.4,1\n599,-1,1481.2,3.6,61.5,145,1\n599,-1,801.1,143.2,64.1,174.8,1\n599,-1,368.2,268.5,63.3,198.6,1\n599,-1,1714.7,454.6,86.3,212.7,1\n599,-1,1652.8,227,72.8,203.1,1\n599,-1,1630,1,53.5,115,1\n599,-1,562.4,111,50.4,179.7,1\n599,-1,234.1,267.2,62,184.9,1\n599,-1,360,108.7,52.7,177.8,1\n599,-1,164.6,246.2,62.1,207.8,1\n599,-1,1574.3,589.6,97.5,234.4,1\n599,-1,431.2,72.9,46.7,168.7,1\n599,-1,286.9,126.1,52.4,170.7,1\n599,-1,482.5,100.9,49.3,160.3,1\n599,-1,216.3,138.2,55.1,157.2,1\n599,-1,752.4,79.9,44.4,154.4,1\n599,-1,1072.4,864.5,125.8,216.5,1\n599,-1,1874.8,277.3,46.2,182.1,0.798\n599,-1,393.7,96.9,35.6,145.5,0.725\n599,-1,1159,881.3,89.1,199.7,0.361\n599,-1,307.1,909.1,117.2,171.9,0.062\n243,-1,1221.1,31,63.7,118.8,1\n243,-1,686.5,207.1,79.6,111.5,1\n243,-1,796.8,151.3,60,175.7,1\n243,-1,1594.1,1.8,57.5,146.7,1\n243,-1,1483,59.6,53.2,150.1,1\n243,-1,109.5,349.8,49.9,192.7,1\n243,-1,1161.9,117.9,52.8,162.3,1\n243,-1,928.8,120.3,70.6,184.2,1\n243,-1,1364.3,566.9,109.7,245.3,1\n243,-1,288.5,128.4,55.8,171.8,1\n243,-1,446.9,176.2,74.7,208.6,1\n243,-1,212.3,125.1,55.6,170.5,1\n243,-1,1720.2,457.3,79.1,211,1\n243,-1,704.7,1,54.3,158.8,1\n243,-1,390.2,522.4,86.5,238.2,1\n243,-1,355.4,105.5,54.5,178.5,1\n243,-1,1082.7,120.4,59.3,181.1,1\n243,-1,221.8,474.3,62.4,206.1,1\n243,-1,495.6,361.8,71.7,219,1\n243,-1,197.9,720.2,88.1,254.7,1\n243,-1,846.6,343.2,79.1,192.2,1\n243,-1,516.6,116.9,51.7,183.8,1\n243,-1,787.7,334.4,82.2,204.7,1\n243,-1,589.2,366,63.1,198.4,1\n243,-1,112.7,563.6,85.6,242.6,1\n243,-1,931.4,897.4,70.9,183.6,0.996\n243,-1,157.1,658,60.2,191.1,0.345\n243,-1,773.3,110,46.4,163,0.155\n445,-1,1221.2,30.6,62.7,118.8,1\n445,-1,936.5,1,60,159.6,1\n445,-1,1006.6,11.8,55.1,159.2,1\n445,-1,687.2,206,78.4,113.3,1\n445,-1,359,106.8,53.7,179.8,1\n445,-1,450.1,215.7,73.3,197.9,1\n445,-1,1367.5,536.9,79.3,207,1\n445,-1,1717.8,454.4,81.2,214.9,1\n445,-1,113.1,348.7,53.5,191.5,1\n445,-1,286.2,125.3,54,171.3,1\n445,-1,1747.3,151.6,68.6,172.3,1\n445,-1,858.2,1.7,51.4,138,1\n445,-1,799.7,151.8,50.9,171.3,1\n445,-1,246.4,232,50.1,182.1,1\n445,-1,1560.2,612.3,74.4,241.5,1\n445,-1,359.6,674.8,74.9,242.1,1\n445,-1,262.8,642.5,90.8,260.2,1\n445,-1,880.7,585.6,118.5,243.2,1\n445,-1,1672.2,366.5,69.6,194.8,1\n445,-1,779.6,572.7,78,250.4,1\n445,-1,1845,393.5,76,208.2,1\n445,-1,528.3,71.1,54.3,168.9,1\n445,-1,221.4,137.7,56.2,155.6,1\n445,-1,422.8,1,44.1,137.6,1\n445,-1,428.6,119.7,60.2,171,1\n445,-1,729.5,1.2,48.4,94.2,0.999\n445,-1,1701.3,104.2,71.6,171.5,0.999\n445,-1,361.4,3.6,61.7,133,0.999\n445,-1,963.4,600.7,84.3,223.2,0.999\n445,-1,754.1,87.8,47.9,152.1,0.997\n445,-1,711.5,89.1,58.5,173.4,0.996\n445,-1,1016.3,921.4,85.7,159.6,0.984\n445,-1,451.9,39.4,65.7,206.3,0.116\n836,-1,1220.8,29.6,63,118.3,1\n836,-1,687.4,206,78.3,113.6,1\n836,-1,791.8,136.3,72.9,178.9,1\n836,-1,1642.5,10.3,58.3,162,1\n836,-1,559.3,114.8,59.8,177,1\n836,-1,271.3,580.7,81.9,242.8,1\n836,-1,1575.4,590.3,101.8,233.1,1\n836,-1,1472.7,52.3,61.3,159.5,1\n836,-1,1721.7,453,77.3,214.3,1\n836,-1,752.8,70,57,164,1\n836,-1,476.1,128.6,59.2,179.2,1\n836,-1,437.9,262.6,55,205.7,1\n836,-1,239.9,133.3,51.2,164.8,1\n836,-1,358.5,276.1,82.5,182.1,1\n836,-1,294.3,162,70.2,197.1,1\n836,-1,1419.7,36.7,52.1,157,1\n836,-1,949,553.2,71.1,229.4,1\n836,-1,1032.8,524.3,79.5,241.7,1\n836,-1,253.8,1.2,54.9,123.2,1\n836,-1,418.5,124,57.7,178.6,1\n836,-1,1067,3.2,60.3,93.5,0.999\n276,-1,1221.4,31.7,62.6,118.1,1\n276,-1,687.6,207.2,77.8,110.9,1\n276,-1,391.3,16.7,58.5,157.3,1\n276,-1,389.5,466.7,84.8,227.1,1\n276,-1,1644.3,22.5,56.8,155.6,1\n276,-1,1032.7,102.7,65,185.7,1\n276,-1,289.7,129,55,171.6,1\n276,-1,355.2,106.8,52.6,178.4,1\n276,-1,455.7,149.5,74,204.3,1\n276,-1,1471.6,37.6,54.5,148.6,1\n276,-1,1719.8,456.8,79.5,212.2,1\n276,-1,108,348.8,51.1,190.2,1\n276,-1,704.1,1.5,54.7,157.9,1\n276,-1,795.9,149.8,60.3,170.6,1\n276,-1,942.8,84.1,66.7,180.5,1\n276,-1,220.5,130.7,53.2,161.2,1\n276,-1,1109.9,95.9,54.1,167.2,1\n276,-1,191.2,574.8,93.3,250.3,1\n276,-1,731.2,336.3,67.6,185.9,1\n276,-1,265.8,791.7,91.3,261.8,1\n276,-1,232.3,429.9,59.9,195.7,1\n276,-1,809.6,370.7,88,213,1\n276,-1,1425.1,575.5,96.4,246.6,1\n276,-1,559.9,407.8,67.6,209.1,1\n276,-1,751.5,102.6,46.9,171.2,1\n276,-1,878.5,384.6,77.3,192.8,1\n276,-1,857.8,111.9,42.5,156.6,1\n276,-1,513.4,113.1,51.1,176.7,1\n276,-1,471.8,402.1,69.5,220.8,0.999\n276,-1,944.1,918.8,86.1,162.2,0.915\n439,-1,1221.5,29.7,61.9,119.2,1\n439,-1,937.3,3.1,62.1,162.5,1\n439,-1,1008.3,17,54.7,155.5,1\n439,-1,359.2,109,53.5,178.2,1\n439,-1,686.8,206.4,78.4,112.6,1\n439,-1,111.2,349,54.7,190.9,1\n439,-1,849.9,1.5,53.7,136.5,1\n439,-1,449.4,224.5,76.2,200.1,1\n439,-1,1346.5,531.9,65.2,198.3,1\n439,-1,1718.7,456.9,79.3,211.7,1\n439,-1,233.8,241.4,53.9,176.2,1\n439,-1,285.4,130.5,54.6,166.9,1\n439,-1,1750.5,147.8,68.5,170.2,1\n439,-1,272.1,630.9,92.2,261,1\n439,-1,798.3,150.8,52.9,172.2,1\n439,-1,763.1,567,83,251.7,1\n439,-1,366,661.8,75.9,239.2,1\n439,-1,878.1,573.2,111.5,242.8,1\n439,-1,1564,613.6,80.1,244,1\n439,-1,1846.4,407.3,74.6,196.3,1\n439,-1,531.9,70.6,56.1,172.1,1\n439,-1,432.5,116.5,56.9,169.3,1\n439,-1,1691.3,91.6,72,172.3,1\n439,-1,423.1,1,43.6,131.7,1\n439,-1,363.1,2.1,61.1,129.3,1\n439,-1,220.1,138.1,60.6,151.8,1\n439,-1,725.3,1,50.3,103.4,1\n439,-1,959.4,594.2,82,220.9,0.999\n439,-1,711.4,85.1,61.3,182,0.999\n439,-1,1682.5,377,72.7,198.3,0.999\n439,-1,756.7,84.6,44.9,159,0.991\n439,-1,1004.6,925.3,86.3,155.7,0.981\n926,-1,1221.4,30.2,61.7,118.9,1\n926,-1,686.5,206.2,79.5,113,1\n926,-1,793.2,141.1,74.6,171,1\n926,-1,1277.8,828.4,97.2,252.6,1\n926,-1,453.6,209.8,69.6,191.9,1\n926,-1,1574.1,588.7,104.4,236.1,1\n926,-1,556.8,116.8,58.6,173,1\n926,-1,1126.5,47.4,55.1,163.3,1\n926,-1,1618,77.8,52.9,166,1\n926,-1,1476.3,116.6,60.4,161.5,1\n926,-1,1488.7,1,62,126,1\n926,-1,750.2,72.8,56.5,160.5,1\n926,-1,1720.9,452.5,78.8,214.3,1\n926,-1,301.4,162,69.3,199.9,1\n926,-1,1428.3,1.3,48.4,127.7,1\n926,-1,945.4,393.3,82.2,223.9,1\n926,-1,312,722.2,85.6,257.1,1\n926,-1,239.8,131.4,55,167.9,1\n926,-1,471.4,20.8,54.2,156.2,1\n926,-1,403.3,366.1,61.7,208.8,1\n926,-1,863.2,410,64.3,215.8,1\n926,-1,328.8,374.6,79.1,191.6,1\n926,-1,1732,108.1,53.2,175.2,1\n926,-1,1749.2,678,92.1,243.8,1\n926,-1,253.9,1.2,55,121,1\n926,-1,370.1,208.3,60.2,183.9,1\n926,-1,425.7,66.8,62.7,179,1\n926,-1,313.9,2.2,47.3,127.5,0.999\n764,-1,1221.7,29.3,62,119.1,1\n764,-1,687.4,205.6,78.5,114,1\n764,-1,544.2,114.6,65.9,176.5,1\n764,-1,782.6,135.2,63.1,176,1\n764,-1,1720.8,452.2,79.1,214,1\n764,-1,1575,589.5,99.5,234.8,1\n764,-1,302.3,470,77.3,226.6,1\n764,-1,1456.8,82.6,53.6,168.5,1\n764,-1,272,178.6,56,195.8,1\n764,-1,455.9,193.1,54.4,189.4,1\n764,-1,329.8,193.7,56.3,178.8,1\n764,-1,398.9,209.3,66.5,176.9,1\n764,-1,1577.2,83.4,64.8,178.3,1\n764,-1,1494.1,17.9,59.8,145.9,1\n764,-1,459.2,64.2,58.2,170.4,1\n764,-1,752.2,78.8,50,155.5,1\n764,-1,256.6,1.4,50.9,122.1,1\n764,-1,1081,678.7,81.4,257.4,1\n764,-1,517.9,565.6,81.8,252.9,1\n764,-1,235.3,135.7,49.2,163.6,1\n764,-1,1146,659.7,95.6,264.9,1\n764,-1,403.5,67.3,56.3,166.3,1\n764,-1,359.9,110.9,52.1,170.8,0.999\n934,-1,1221.3,29.7,61.9,119.4,1\n934,-1,686.4,206,80.1,113.5,1\n934,-1,793.2,140.2,76,173.5,1\n934,-1,447.5,216.1,69.6,190.9,1\n934,-1,1485.9,1,60.4,123.3,1\n934,-1,555.9,116.3,57.9,172.6,1\n934,-1,1129,53.5,59,167.8,1\n934,-1,1478,121.1,59.7,160.8,1\n934,-1,1575.6,591.7,102.5,236.3,1\n934,-1,1620.5,83.1,57.2,168.4,1\n934,-1,1721.1,453.2,78.3,215.2,1\n934,-1,1423.5,3.1,45.2,123.5,1\n934,-1,238.2,134,57.4,167.8,1\n934,-1,750.2,72.4,56.9,161.9,1\n934,-1,1265.8,799.1,99.7,278.3,1\n934,-1,473.9,23.5,55.6,151.5,1\n934,-1,946.2,377.2,74.4,218.6,1\n934,-1,317.6,733.9,93.5,266.5,1\n934,-1,329.6,390.8,79.6,187.7,1\n934,-1,860.2,395.2,64,210.7,1\n934,-1,1736.4,113.6,56.9,176.1,1\n934,-1,1747.6,676.2,91.5,247,1\n934,-1,302.8,161.2,67.5,199.8,1\n934,-1,399.8,372,63.3,208.7,1\n934,-1,363.2,218.3,62.3,184.8,1\n934,-1,429.8,68.7,58.6,180.1,1\n934,-1,254.7,1,53.1,120.2,1\n934,-1,315.4,4.9,40.8,120.7,0.11\n568,-1,1221.3,30.2,61.7,119.5,1\n568,-1,687.2,205.8,79.5,115,1\n568,-1,1481.9,4.1,59.6,146.2,1\n568,-1,379.1,234.5,65.7,196,1\n568,-1,1825.4,251.5,70.9,175.4,1\n568,-1,1664.9,265.7,68.8,201,1\n568,-1,791.3,147,70.1,173.2,1\n568,-1,549.5,119.4,51.9,165.8,1\n568,-1,1714.8,453.6,85.6,212.8,1\n568,-1,1651.7,1,56.7,142.5,1\n568,-1,872.6,1,52,105.5,1\n568,-1,217.6,136.7,57.5,165.6,1\n568,-1,1574.6,2.8,54.9,134.9,1\n568,-1,288.1,122.5,52.6,171.7,1\n568,-1,204.8,286.3,63.6,192.2,1\n568,-1,1590.1,591.5,78.2,234.4,1\n568,-1,755,79.6,44.7,155.4,1\n568,-1,441.8,135.1,53.2,157.4,1\n568,-1,146.6,257.2,59.7,212.6,1\n568,-1,466.7,80.5,64.6,175.4,1\n568,-1,1018.4,802.7,131.2,274.6,1\n568,-1,359.1,110.2,53.3,177.5,1\n568,-1,727,586.2,88.9,250.1,1\n568,-1,249,912.4,82,168.6,0.998\n568,-1,420.6,50.5,46.5,176.3,0.997\n568,-1,1108.4,822.2,88.3,234.4,0.487\n568,-1,983,1.8,52,80.9,0.433\n568,-1,1014,930.8,76.8,150.2,0.135\n130,-1,1221.4,30.5,62.4,118,1\n130,-1,356.3,103.9,56.1,180.9,1\n130,-1,1488.1,68.8,55.7,149.9,1\n130,-1,398.2,761.8,93.4,267,1\n130,-1,703.9,1,56.2,158.4,1\n130,-1,287.9,127.2,55.4,168.4,1\n130,-1,108,349.5,50.2,187.1,1\n130,-1,1722.4,455.7,75.9,211.6,1\n130,-1,424.5,276.6,75,222.8,1\n130,-1,687.8,206.1,77.9,114.2,1\n130,-1,1358.8,566.8,104.4,245.3,1\n130,-1,900.1,210.9,73.8,193,1\n130,-1,538.1,65.6,50.5,165.6,1\n130,-1,1092,138.7,56.5,180.4,1\n130,-1,1211.3,174.9,44.8,163.9,1\n130,-1,218.8,127.7,50.6,164,1\n130,-1,1333.5,181.4,54.8,181.8,1\n130,-1,525.8,248.6,68.5,207,1\n130,-1,477.4,171.3,57.3,173,1\n130,-1,115.7,649.6,60.3,213,1\n130,-1,378.9,1,46.9,142,1\n130,-1,479.1,44.2,55.1,159.8,1\n130,-1,779,223.9,63.5,188.2,1\n130,-1,447.7,1,51.3,144,0.999\n130,-1,825.9,235.3,52,173.1,0.999\n130,-1,1080.5,924.8,85.7,156.2,0.938\n130,-1,578.4,255.5,46.1,171,0.502\n1016,-1,1221.9,30,61.2,116.9,1\n1016,-1,686.4,206.5,80.1,113,1\n1016,-1,793.2,141,74.5,171.4,1\n1016,-1,383,297.6,75.7,193.8,1\n1016,-1,1232.5,159,60.4,168.3,1\n1016,-1,496,287.7,65.6,186.4,1\n1016,-1,289.6,126.4,53.3,171.2,1\n1016,-1,842.4,279.5,67.8,195.4,1\n1016,-1,300.3,297.8,63.4,200.7,1\n1016,-1,537.9,121.2,62.6,171.2,1\n1016,-1,231.9,141,54.3,161.9,1\n1016,-1,926.7,268.7,68.5,204.4,1\n1016,-1,1574.3,589.8,103.7,236.6,1\n1016,-1,1831.1,219.3,60.1,188.5,1\n1016,-1,1468.6,186.1,65,163.7,1\n1016,-1,293.4,492.2,88.8,209.7,1\n1016,-1,750.8,72.6,54.7,163.2,1\n1016,-1,1721.1,456.7,78.2,208.1,1\n1016,-1,1156.8,609.6,87.8,250.1,1\n1016,-1,1695.4,178.5,55.1,169.2,1\n1016,-1,1719.5,683.1,100.6,234,1\n1016,-1,380.6,475.5,64.3,224.7,1\n1016,-1,438.8,166.3,71.7,194.2,1\n1016,-1,314.8,1.9,37.6,131.7,1\n1016,-1,585.3,553.6,84,241.9,1\n1016,-1,394.7,167.2,52.5,170.9,0.997\n1016,-1,357.2,903.4,96.6,177.6,0.996\n1016,-1,502.9,116,51.2,135.3,0.934\n1016,-1,433.9,79.1,63.7,173.1,0.109\n1016,-1,385.5,1.8,59.2,161.6,0.077\n706,-1,1221.2,30,62.4,118.3,1\n706,-1,687.2,206.2,79.3,113.9,1\n706,-1,1481.9,5.9,57.9,147.8,1\n706,-1,561.6,109.7,54,179.1,1\n706,-1,411.3,156.9,78,165.1,1\n706,-1,1711.5,455.9,95.4,209.2,1\n706,-1,1574,588,98.7,235.2,1\n706,-1,1602.6,135.5,67.2,183.8,1\n706,-1,295,385.8,75.2,219,1\n706,-1,1475.2,128.2,51.2,174.2,1\n706,-1,483.4,144.1,49.2,179.8,1\n706,-1,473.2,23.9,44.4,138.1,1\n706,-1,749.6,79.9,50.7,155.4,1\n706,-1,801.1,139.1,47.7,175,1\n706,-1,387.4,545.1,68.5,244,1\n706,-1,1213.4,816.8,92.1,257.7,1\n706,-1,1004.3,1,66.4,89.7,1\n706,-1,359.6,108.7,50.3,173.7,1\n706,-1,1302.4,785,86.8,276.8,1\n706,-1,257.7,197.3,58.6,196,1\n706,-1,410.6,28.8,59.7,162.2,1\n706,-1,306.4,208.6,58.1,179.8,1\n706,-1,228.9,133.2,51.7,165.1,0.999\n706,-1,847.8,934.5,72.5,146.5,0.285\n588,-1,1222,31.4,60.9,119,1\n588,-1,687.3,206.1,78.7,113.5,1\n588,-1,1481.6,4.7,60.1,144.2,1\n588,-1,800.5,145.9,65.2,172.2,1\n588,-1,1652.2,242.5,78.2,200.4,1\n588,-1,1642,1,55.3,122.3,1\n588,-1,560.9,113,49.7,176.7,1\n588,-1,223.1,277.2,64.5,187,1\n588,-1,374,258.3,64.6,197.4,1\n588,-1,358.1,113,53.3,173.8,1\n588,-1,287.7,126.9,52.3,168.9,1\n588,-1,214.6,133,54,165.3,1\n588,-1,1720.2,455.6,81.6,211.9,1\n588,-1,1575.3,588.3,93.4,235.9,1\n588,-1,160.6,252.9,60.4,206,1\n588,-1,754.4,81.2,42.7,153.3,1\n588,-1,469.6,111.6,50.2,163.4,1\n588,-1,873,3,50.2,97.7,1\n588,-1,428.4,67,45.6,172.3,1\n588,-1,1854.8,266.7,66.2,179,1\n588,-1,1060.3,844.1,123.7,236.9,1\n588,-1,1147.8,850,91.2,231,0.575\n341,-1,1221.5,30.8,62.3,119.7,1\n341,-1,687.5,205.8,77.9,114.2,1\n341,-1,1446.7,1,57.5,125.7,1\n341,-1,1730.4,70.3,55.5,161.8,1\n341,-1,1597.7,1,55.3,131.9,1\n341,-1,446.6,104.2,72.8,196.2,1\n341,-1,421.4,577.6,106.3,251.5,1\n341,-1,1829.4,497.9,68.8,203.9,1\n341,-1,287,130.9,53.7,173.1,1\n341,-1,1720.1,457,79.5,214,1\n341,-1,108.2,349.9,52.2,189.4,1\n341,-1,974,405.1,65.4,191.9,1\n341,-1,797.1,155.3,57.7,169.3,1\n341,-1,364.3,104.9,57.4,181.5,1\n341,-1,974.2,63.5,64.8,176.9,1\n341,-1,520.1,100.8,40.6,167.6,1\n341,-1,1545.2,615.7,84.7,243.5,1\n341,-1,211,140.5,55.6,162.4,1\n341,-1,1036.6,69.3,53.2,163.9,1\n341,-1,928,21.9,61.5,164.6,1\n341,-1,843,450.2,83.4,224.2,1\n341,-1,231.4,341.5,56.9,185,1\n341,-1,902.4,460.2,64.8,207.1,1\n341,-1,426.2,359.9,84.3,215.4,1\n341,-1,502.1,497.8,67.5,219.1,0.999\n341,-1,714.7,96.8,57.2,168.7,0.999\n341,-1,772.8,96.7,40.1,157,0.998\n341,-1,944.8,919.9,74.9,161.1,0.97\n341,-1,421.9,54.2,53.7,161.6,0.72\n341,-1,405.3,455.8,81.9,294.1,0.073\n629,-1,686.8,206,79.4,113.7,1\n629,-1,1221.5,29.8,62.7,118.8,1\n629,-1,1480,5.8,61.1,143.5,1\n629,-1,800.8,144.6,65.7,171.9,1\n629,-1,343.2,296.4,68.5,203.7,1\n629,-1,1712.4,453.6,92.6,210.9,1\n629,-1,1573.9,588.3,98.4,236.4,1\n629,-1,358.4,111.8,52.3,172.9,1\n629,-1,548,111.7,61.3,175.5,1\n629,-1,513.3,540.5,107,241.8,1\n629,-1,1624.7,198.8,75.1,197.1,1\n629,-1,286.6,123.8,53.4,169.7,1\n629,-1,188.1,233.3,70.5,203.5,1\n629,-1,501.4,78.3,47.4,151.1,1\n629,-1,754,79.9,45.1,154,1\n629,-1,252,248.2,61.2,185.4,1\n629,-1,414.5,105.2,53.4,156,1\n629,-1,352.2,1.1,54.7,124.4,1\n629,-1,419.8,1,59.3,126.6,1\n629,-1,235,133.5,48,160.7,0.999\n629,-1,449.6,84.5,49.9,173.2,0.999\n629,-1,1584.7,1,57.1,91.2,0.993\n629,-1,1110.1,922.5,106.9,158.5,0.98\n629,-1,1192.9,935.6,82.6,145.4,0.075\n543,-1,1221.5,30.6,62.6,119.8,1\n543,-1,687,206,78.8,114.2,1\n543,-1,1489.4,3,58.5,142.5,1\n543,-1,781.5,145.9,65.9,171.2,1\n543,-1,387.2,209.5,61.8,192.6,1\n543,-1,1676.2,287.3,79.3,205.6,1\n543,-1,991.3,1.2,52.3,105.4,1\n543,-1,877.6,1,52.2,111.3,1\n543,-1,1716.7,457.6,83,210,1\n543,-1,1659.9,2.4,54.1,160.3,1\n543,-1,289.7,124.4,52.4,171.5,1\n543,-1,177.1,307.4,66.3,192.4,1\n543,-1,1780.7,227.1,68,177.7,1\n543,-1,525,106.6,60.6,176.7,1\n543,-1,786.7,597.3,85.4,257.6,1\n543,-1,454.4,105.7,70.5,185.2,1\n543,-1,1597.5,1,53.8,155.2,1\n543,-1,1590.8,583.9,69.9,240.5,1\n543,-1,218.3,135.4,58.9,157.7,1\n543,-1,928.9,1,55.7,103.5,1\n543,-1,359.7,112.7,53,171.6,1\n543,-1,258.1,852.5,79.9,228.5,0.999\n543,-1,409,42.7,47.9,168,0.999\n543,-1,204.9,813.9,93.2,267.1,0.998\n543,-1,130.9,272.4,52.9,215.3,0.998\n543,-1,1064.1,769.3,90.3,248,0.988\n543,-1,756.6,84.7,45.1,154.9,0.984\n543,-1,986.4,760.5,115.1,253.2,0.947\n739,-1,1221.4,30.3,62.5,118.4,1\n739,-1,686.6,205.7,79.2,114.3,1\n739,-1,1482,8.5,60.5,145,1\n739,-1,256.1,187,59.2,197.7,1\n739,-1,550.7,114.9,60.3,175.9,1\n739,-1,1465.3,108,52.7,166.7,1\n739,-1,781.6,137.5,54.1,177,1\n739,-1,296.3,427.7,77.4,223.7,1\n739,-1,476.3,170.9,48.6,185.9,1\n739,-1,1575.3,590.1,99.9,234.2,1\n739,-1,1600.3,104.2,57.9,178,1\n739,-1,1712.7,457.7,95.3,206.7,1\n739,-1,400.6,189.5,75.4,164.1,1\n739,-1,330.7,198.6,57.8,177.1,1\n739,-1,437.2,559.8,84.7,244.8,1\n739,-1,1131.8,735.5,88.8,261.6,1\n739,-1,750.1,81.5,50.8,153,1\n739,-1,433.9,53.1,58.9,165.6,1\n739,-1,1213.3,713.7,82.8,262.6,1\n739,-1,358.8,111.5,49.9,173.7,1\n739,-1,291.1,127.8,47.6,163.7,0.991\n739,-1,239.8,147.9,48.3,160.7,0.684\n371,-1,1221.9,31.3,61.2,117.6,1\n371,-1,685.9,206.7,80.4,112.8,1\n371,-1,1630,12.8,58.2,159.3,1\n371,-1,1067,438.4,67.8,199.6,1\n371,-1,443.3,311.1,71.5,216.6,1\n371,-1,354.9,528.3,86.5,235.4,1\n371,-1,443.6,80.1,69,196,1\n371,-1,109.5,351,52.3,189.6,1\n371,-1,360.4,112,54.3,174.1,1\n371,-1,1430.9,1,54,99.7,1\n371,-1,286.7,131.1,53.2,169.3,1\n371,-1,510.6,89.3,48.9,166.6,1\n371,-1,1762.1,94.9,57.6,162.6,1\n371,-1,544.7,570.5,107.1,249.4,1\n371,-1,1019.4,53.5,55,166.6,1\n371,-1,211.3,141.1,59.6,159.1,1\n371,-1,952.6,41.5,63.8,176.4,1\n371,-1,795.8,151.1,59.8,172.8,1\n371,-1,1720.4,455.4,78.2,214.5,1\n371,-1,1582.5,628.9,84.1,245.4,1\n371,-1,832.9,1,55.6,110.8,1\n371,-1,380.6,2.2,46.3,90.8,1\n371,-1,1807.9,453.2,62.4,210,1\n371,-1,213.6,309.2,52.4,181.1,1\n371,-1,463.1,542,65.8,234.3,1\n371,-1,910.8,496.4,75.8,206.5,1\n371,-1,1819.4,70.2,62.9,162.1,1\n371,-1,759.1,95,45.2,143.2,1\n371,-1,846.8,481.7,87.4,230,1\n371,-1,966.7,918.8,82.6,162.2,0.997\n371,-1,927.1,3.2,57.4,145.5,0.265\n275,-1,1221.1,31,62.7,118.7,1\n275,-1,687,207,78.8,110.8,1\n275,-1,389.6,16.9,59.8,155.2,1\n275,-1,1642.3,21.8,57.8,155.7,1\n275,-1,1033.8,102.6,65,184.3,1\n275,-1,289.8,128.5,54.4,171.2,1\n275,-1,354.9,106.6,53.3,178.7,1\n275,-1,107.9,348.5,51.1,190.7,1\n275,-1,454.7,150.2,75.3,204.3,1\n275,-1,1720.7,457.2,78.2,211.7,1\n275,-1,941.1,85.4,69,182.5,1\n275,-1,704.2,1.3,54.8,157.4,1\n275,-1,1110.4,96.1,56.6,167.8,1\n275,-1,796.1,150.1,60.8,169.2,1\n275,-1,189.3,574.6,92.6,250.5,1\n275,-1,220.7,130.5,53.5,161.6,1\n275,-1,389.5,463.2,84.7,232.9,1\n275,-1,1472.3,37.7,54.7,150,1\n275,-1,730.3,336.8,68.4,181.4,1\n275,-1,232.5,431.3,60.9,200.2,1\n275,-1,265.5,795.2,89.3,258.8,1\n275,-1,808.1,368.4,88.4,214.9,1\n275,-1,1423,575.9,98.3,244.1,1\n275,-1,878.5,388.2,77.5,188.1,1\n275,-1,562,406,65.3,212,1\n275,-1,471.4,399.8,69.7,221.9,1\n275,-1,752.4,104.1,46.3,170.6,1\n275,-1,859.4,108.4,44.2,157.4,1\n275,-1,514.5,112.6,50.9,177.7,1\n275,-1,943.9,919.9,85.8,161.1,0.935\n182,-1,1221.5,30.7,62.8,118.2,1\n182,-1,410.8,38.5,60.2,165.9,1\n182,-1,1489.5,68.3,54.4,149.1,1\n182,-1,211.7,126.1,55.7,169.5,1\n182,-1,109.7,348.9,48.9,189.5,1\n182,-1,356.3,105.1,55.2,179.5,1\n182,-1,704.7,1,55.6,158.8,1\n182,-1,1720.2,456.8,78.8,212.9,1\n182,-1,412.1,648.4,91.4,250.2,1\n182,-1,687.8,207.8,77.7,112.2,1\n182,-1,1358.6,567.4,104.6,244.4,1\n182,-1,1093.5,147.3,48.2,158.4,1\n182,-1,528.5,299.1,60,202.1,1\n182,-1,1.2,617.8,114.3,246.3,1\n182,-1,289.6,128.9,54.6,167.9,1\n182,-1,420,226.2,78.2,220.1,1\n182,-1,925.6,123.9,75.2,170.9,1\n182,-1,540.7,140.9,65.8,173.8,1\n182,-1,235.2,567,62.5,213.2,1\n182,-1,869.5,174.4,73.7,191.5,1\n182,-1,793.8,151.5,63.8,173.4,1\n182,-1,1202,153.9,60.2,184.1,1\n182,-1,97.8,548.2,88.4,252.1,1\n182,-1,798.4,292.2,70.6,181.1,1\n182,-1,744.9,274.6,73.2,201.9,1\n182,-1,1249.7,155.4,47.8,168.9,0.998\n182,-1,992,915.4,70.2,165.6,0.985\n640,-1,687.2,206.2,79.7,113.6,1\n640,-1,1220.8,32.1,62.2,116.8,1\n640,-1,1481.5,4.9,60.5,144.7,1\n640,-1,801.5,145.3,63.5,172.1,1\n640,-1,544.9,113.4,65.5,173.5,1\n640,-1,1708.3,454.8,100.3,214.2,1\n640,-1,359.1,109.3,51.7,175.6,1\n640,-1,491.1,537.7,95.3,245.9,1\n640,-1,340.2,313.8,67.9,207.5,1\n640,-1,1574.1,588.3,96.9,237.5,1\n640,-1,264.3,241.8,57.6,187.5,1\n640,-1,1622.2,193.9,67.9,187.7,1\n640,-1,206.8,227.5,62.6,203.1,1\n640,-1,751.9,81.9,45,155.5,1\n640,-1,417,119.2,57.8,152.1,1\n640,-1,415.8,1.9,60.7,143.4,1\n640,-1,287.6,127.5,50.5,169.9,1\n640,-1,461,95.5,50.5,176,0.999\n640,-1,353.6,1,55,130.7,0.995\n640,-1,491.2,60,44.4,161.6,0.991\n640,-1,237.5,134.1,41.5,161.6,0.9\n640,-1,1498.2,959.7,83.3,121.3,0.487\n294,-1,1222.2,31.9,60.1,118.9,1\n294,-1,1674.9,40.1,57.3,154.6,1\n294,-1,686.3,206.6,79.7,113.7,1\n294,-1,1464.9,21.2,54.6,148.7,1\n294,-1,237.7,579.8,99.9,256,1\n294,-1,1719.8,457.6,79.3,211.3,1\n294,-1,235.8,403.5,61,191.8,1\n294,-1,796.1,146.4,60.7,177.1,1\n294,-1,354.5,108.4,54.8,179.4,1\n294,-1,938.6,69,64.1,175.7,1\n294,-1,285.1,128,53.7,173.5,1\n294,-1,704.9,1.2,53.9,155.7,1\n294,-1,453.6,135.9,75.8,200.6,1\n294,-1,1013,92.8,58.4,181.6,1\n294,-1,404.7,23.2,56.7,169.2,1\n294,-1,1084.3,90,53.5,162.9,1\n294,-1,219.3,129.6,56.3,165.9,1\n294,-1,108.4,351.5,52,188.6,1\n294,-1,383.7,432,85.5,229.5,1\n294,-1,298.7,834.4,96.4,246.6,1\n294,-1,817,386.2,91.7,223.1,1\n294,-1,1458.9,587.1,93.6,248.2,1\n294,-1,539.9,431.6,66.6,219,1\n294,-1,515.7,105.6,48.2,177,1\n294,-1,744.9,102.3,47.3,174,1\n294,-1,885.7,406.3,79.2,193.1,1\n294,-1,462.5,418.3,64.4,231.6,1\n294,-1,940.4,917.3,73.8,163.7,0.99\n294,-1,828.1,106.6,56,155.3,0.988\n875,-1,1221.6,29.5,62.1,118.9,1\n875,-1,687.3,206.3,78.6,112.9,1\n875,-1,478.5,1,48.8,127.6,1\n875,-1,794.1,138.4,77.2,176.6,1\n875,-1,1086.4,2.8,60.5,144.1,1\n875,-1,1478.6,83.4,60.4,156.4,1\n875,-1,280.7,638.5,85.5,257.9,1\n875,-1,1575.6,589.5,103.4,235.8,1\n875,-1,336.4,314.7,79.7,180.3,1\n875,-1,559.5,117.9,58.7,176.1,1\n875,-1,899.3,481.8,70.9,233,1\n875,-1,300.5,162.6,70.3,192.8,1\n875,-1,1722.2,454.6,78.1,212.1,1\n875,-1,478.7,166.3,61.5,183.5,1\n875,-1,1692.7,46.6,53.1,167.7,1\n875,-1,1576.8,26.6,55,152.1,1\n875,-1,753.3,72.1,54.7,162.9,1\n875,-1,1419.6,8.8,51.1,154.9,1\n875,-1,253.4,1.3,54.6,121.1,1\n875,-1,988.2,466.8,68.7,234,1\n875,-1,409.3,161.3,58.9,176.7,1\n875,-1,239.5,133.8,51.4,164.3,1\n875,-1,429.9,306.7,56.1,201.8,1\n875,-1,1770,698,88.1,218.5,0.385\n982,-1,1221.7,29.7,62.9,120.5,1\n982,-1,686.7,206.6,79.7,112.9,1\n982,-1,793.3,141,73,170.9,1\n982,-1,408.1,268.7,70.3,188.3,1\n982,-1,1179.9,117.2,57.6,163.3,1\n982,-1,493.5,248,68,187.9,1\n982,-1,335,830.4,94.4,250.6,1\n982,-1,840.8,321.3,70.7,201.1,1\n982,-1,1574.7,590.3,103.9,235.1,1\n982,-1,1469.4,165.2,67.6,165.5,1\n982,-1,1720.8,452.7,78,215.7,1\n982,-1,1196,680,87,263.5,1\n982,-1,320,259.3,62.6,197.6,1\n982,-1,751.7,73.2,55.7,162,1\n982,-1,1787.6,173.3,69.4,178.4,1\n982,-1,1665.4,141.7,55,166.6,1\n982,-1,923.8,311.4,67,207.5,1\n982,-1,230.4,137.9,54.8,164.5,1\n982,-1,306.2,446.3,83.9,205.6,1\n982,-1,547.9,119.4,53.1,167.9,1\n982,-1,289.9,125.4,53.5,174.8,1\n982,-1,393.3,435.9,64,213.1,1\n982,-1,313.8,1,48.2,130.2,1\n982,-1,1739.2,674.5,95.4,249.3,1\n982,-1,445.6,60.5,56.1,184.6,1\n982,-1,1451.9,1,57.2,95.4,1\n982,-1,381.6,1,54.6,132.5,1\n982,-1,364.2,166.9,66,195.1,1\n982,-1,1389.1,1.9,47,94.3,0.999\n982,-1,491.8,63.1,52.8,159.8,0.999\n1009,-1,1220.8,30,62.3,117.9,1\n1009,-1,686.2,206.5,80.4,112.8,1\n1009,-1,497.5,281.4,68.4,190.1,1\n1009,-1,792.6,140.2,75.2,173.1,1\n1009,-1,289.4,127.5,53.4,168.9,1\n1009,-1,1721,454.4,80.4,216.1,1\n1009,-1,1221.9,143.3,61,174.7,1\n1009,-1,392.1,288.6,71.2,195.3,1\n1009,-1,1471.3,184.7,65.1,162.5,1\n1009,-1,1575.9,590.3,101.8,235.9,1\n1009,-1,1822.2,205,61,185.8,1\n1009,-1,929,276.9,67.3,209.6,1\n1009,-1,232.2,139.7,53.2,163.3,1\n1009,-1,1688.3,167.5,58.5,175,1\n1009,-1,844.5,287.7,66,200.8,1\n1009,-1,540.3,120.5,61.1,171.3,1\n1009,-1,751.5,73.5,54.1,161.7,1\n1009,-1,380.3,466.3,68,229.3,1\n1009,-1,1740.9,678.4,92.7,245.7,1\n1009,-1,298.5,481.4,88.2,201.3,1\n1009,-1,1158.6,624.8,95.6,262,1\n1009,-1,306.8,287.2,66.1,205.2,1\n1009,-1,591.5,551.2,98.2,246.6,1\n1009,-1,313.8,2.6,42.4,127.7,1\n1009,-1,508.1,89,53.5,158.9,1\n1009,-1,348.3,885.5,95.6,195.5,1\n1009,-1,429.9,167.9,59.5,187.4,1\n1009,-1,380,175,52.9,164.2,0.999\n1009,-1,434.7,66.7,63.9,170.4,0.997\n1009,-1,384.8,1,55.4,160.3,0.971\n681,-1,1221.5,29.6,62.2,122.2,1\n681,-1,686.6,206.9,80.6,113.4,1\n681,-1,1480.6,4.2,60.8,147.1,1\n681,-1,1709.7,457.7,97.6,207.3,1\n681,-1,563.9,111.8,50,177,1\n681,-1,365.5,529.8,110.7,252,1\n681,-1,485.9,132.4,46.1,174.2,1\n681,-1,803.9,144.6,59.5,175.7,1\n681,-1,1490.1,156.6,52.4,174.6,1\n681,-1,314,356.8,69.2,215.4,1\n681,-1,1619.8,153.3,72.1,186.3,1\n681,-1,416.2,141.7,70.1,160.5,1\n681,-1,1575,589.1,96.9,236.4,1\n681,-1,360.6,114.6,50,169.1,1\n681,-1,1078.6,1,78.4,102.8,1\n681,-1,750,80,49.7,156.9,1\n681,-1,1279,872.1,92,208.9,1\n681,-1,402.9,9.6,59.2,163.9,1\n681,-1,235.2,210.1,64.2,193.9,1\n681,-1,1368.4,858,96.5,223,1\n681,-1,291.8,222.8,58.4,172.2,1\n681,-1,480.7,39.1,46.6,143.2,0.995\n681,-1,837.8,925.1,71.4,155.9,0.956\n681,-1,299,1,57.8,138.3,0.267\n708,-1,1221.6,30.1,61.8,118.6,1\n708,-1,686.4,206.6,80.5,113.2,1\n708,-1,1481.6,6.3,57.3,146.3,1\n708,-1,1603.2,131.3,67.6,180.9,1\n708,-1,410.9,159.6,78.2,166.7,1\n708,-1,560.9,111.1,55.4,178.2,1\n708,-1,1574.5,588.8,98.3,235.3,1\n708,-1,295.1,390.9,74.2,215.8,1\n708,-1,1710.2,456.1,97.5,207.9,1\n708,-1,1475.3,123,52.1,178.7,1\n708,-1,482.2,146.6,49.6,180.8,1\n708,-1,472.9,25.1,46.3,135.2,1\n708,-1,801.6,138.7,47.1,174.8,1\n708,-1,1290.9,781.4,95.3,272.3,1\n708,-1,750.1,81.6,49.3,154,1\n708,-1,999.5,2.5,64.8,89.3,1\n708,-1,258.2,196.1,58,197.6,1\n708,-1,359.8,109.8,50.8,172.3,1\n708,-1,1206,804.1,91.8,271.3,1\n708,-1,390.5,542.8,66.1,246.6,1\n708,-1,306,208.8,58.8,177.9,1\n708,-1,410.5,27.6,60,160.9,1\n708,-1,229.9,134,51.1,165.4,0.999\n708,-1,849.4,933.7,77,147.3,0.069\n291,-1,1221.2,31.3,62.4,120.8,1\n291,-1,686.8,206.6,78.4,113.7,1\n291,-1,1671.8,33.6,56.7,157,1\n291,-1,1720.9,458,77.8,210.8,1\n291,-1,797.1,147.4,59.9,175.3,1\n291,-1,938.5,73.8,63.9,177.7,1\n291,-1,352.9,110,54.9,178.2,1\n291,-1,1466.4,25,55.1,146.2,1\n291,-1,286.6,129.5,53.7,174.3,1\n291,-1,1089,92,53.4,162.4,1\n291,-1,236,409.2,60,196.6,1\n291,-1,107.9,353.5,52.2,186.4,1\n291,-1,455.5,139.4,74.1,200.8,1\n291,-1,231.9,582.9,90.4,249.4,1\n291,-1,404,21.6,56,166.1,1\n291,-1,704.6,1.2,53.7,155.5,1\n291,-1,385.1,440.2,84,222,1\n291,-1,1017.8,94.6,58.9,179.8,1\n291,-1,221.5,128.6,54.5,166,1\n291,-1,816.8,387.9,92,217.6,1\n291,-1,292.9,825.9,99.2,255.1,1\n291,-1,1454.5,585.3,94.4,246.7,1\n291,-1,515.6,105.6,50,178.8,1\n291,-1,747.5,105.4,46.5,168,1\n291,-1,542.3,430.1,67.4,212,1\n291,-1,463.7,416.3,63.7,231.9,1\n291,-1,884.7,404.9,82.3,194,1\n291,-1,825.8,105.3,62.9,162.2,0.999\n291,-1,938.7,920,80.7,161,0.984\n291,-1,793.2,353.2,67.2,198.1,0.323\n378,-1,1222.2,31.3,61.1,119.8,1\n378,-1,686.2,206.4,79.4,113.9,1\n378,-1,1090,450.5,67.5,202,1\n378,-1,1633.3,15.9,64.9,167,1\n378,-1,358.7,103.4,55.6,182.7,1\n378,-1,450.2,301.8,71.3,213.7,1\n378,-1,827.2,1,55.9,112.8,1\n378,-1,108.9,350.1,52.1,189.6,1\n378,-1,284,128.5,55,169.8,1\n378,-1,343.8,533.1,85.8,246,1\n378,-1,953.4,38,61.5,172.7,1\n378,-1,454,551.5,70.7,233,1\n378,-1,445.1,75.7,69,195.9,1\n378,-1,1719.8,456.7,77.3,213,1\n378,-1,794.6,149.7,61.5,174.1,1\n378,-1,1798.1,449.9,67.3,204,1\n378,-1,577.4,558.4,95.6,258.2,1\n378,-1,507.3,84.5,52,169.5,1\n378,-1,217.6,140,59.1,158.9,1\n378,-1,1017.1,51.9,54.4,162.4,1\n378,-1,208.7,304.5,55.2,182.7,1\n378,-1,1596.4,633.8,80.5,245,1\n378,-1,1434.5,2.4,54.1,92.9,1\n378,-1,851.4,493.2,87.2,234.6,1\n378,-1,383.9,1.1,46.8,90.9,1\n378,-1,756.2,100.1,49.9,138.1,0.999\n378,-1,1771.2,101.7,56.3,158.8,0.999\n378,-1,908,505.4,77.4,206,0.999\n378,-1,972.8,913.2,85.9,167.8,0.999\n378,-1,1797,71.6,74.4,167.7,0.996\n56,-1,1221.6,29.4,61.6,117.4,1\n56,-1,685.9,205.8,80.8,114.3,1\n56,-1,1487.5,69.9,55,151.4,1\n56,-1,1362.5,566.8,104.2,244.9,1\n56,-1,401.5,349.7,82.4,230.3,1\n56,-1,486.7,181.3,88.2,197.2,1\n56,-1,704.5,1,55.6,158.7,1\n56,-1,1723,456.3,75.7,210.4,1\n56,-1,212.5,129.8,49.3,165.1,1\n56,-1,793.6,146.5,63.3,182.4,1\n56,-1,1002.8,176.9,74.4,178.9,1\n56,-1,355.1,111.1,55.2,174.9,1\n56,-1,102.6,546.1,84.9,253.7,1\n56,-1,8,774.3,67.5,230.6,1\n56,-1,856.9,193.9,73.5,178.8,1\n56,-1,154.8,361.7,63.2,191.4,1\n56,-1,439.4,102.5,56.5,158.2,1\n56,-1,284.2,126,54.5,170.1,1\n56,-1,1311,176.5,58.6,168.8,1\n56,-1,1370.1,207.4,43.1,171.7,1\n56,-1,388.2,44.8,53.5,168.5,1\n56,-1,540.2,63,44.4,169.1,1\n56,-1,1475.3,216.9,59.9,192.7,0.999\n56,-1,485.5,42.9,56.2,165,0.998\n56,-1,1867.5,277.1,53.5,204.6,0.987\n56,-1,906.6,188.1,41.1,161.6,0.298\n576,-1,1221,30.1,62.3,120,1\n576,-1,687.2,205.7,78.9,113.9,1\n576,-1,1481.4,5.3,59.6,144.8,1\n576,-1,377,240,68.6,198.8,1\n576,-1,797.4,148.5,66,168,1\n576,-1,1650.1,1,55.4,135.6,1\n576,-1,552.9,113.8,52,171.8,1\n576,-1,1715.9,453.2,84.6,213.7,1\n576,-1,1836.2,255.4,69.3,181.1,1\n576,-1,288,122,51.9,172.7,1\n576,-1,219,134.5,51.7,160.7,1\n576,-1,454.5,118.2,50.5,166,1\n576,-1,1654.8,250.3,73,202.9,1\n576,-1,1580.1,588.9,89,236.7,1\n576,-1,754.5,78.2,43.7,156.7,1\n576,-1,210.5,277.1,64.2,194.8,1\n576,-1,872.2,1,52.9,104.4,1\n576,-1,714.5,579.6,83.3,251.8,1\n576,-1,151.8,255,61,210.3,1\n576,-1,358,109.6,54.8,175.6,1\n576,-1,1039.7,818.4,127.9,262.6,1\n576,-1,423.3,61.5,46.1,164.7,0.998\n576,-1,1010.1,933.3,65.5,147.7,0.786\n576,-1,250.9,925.7,83.9,155.3,0.479\n576,-1,1119.8,832.3,88,248.7,0.166\n576,-1,296.6,870.4,95.9,210.6,0.097\n123,-1,1220.7,30.5,62.6,118.9,1\n123,-1,1104.7,143.8,78,173.3,1\n123,-1,356.3,105,56.8,180.5,1\n123,-1,1488,68.3,56.1,150.9,1\n123,-1,704.5,1,56,158.5,1\n123,-1,398.4,778.9,99.7,279.4,1\n123,-1,109.3,352.9,49,184.4,1\n123,-1,1721.3,456.8,77.3,210.7,1\n123,-1,425.2,283.9,78.4,226.6,1\n123,-1,213.6,125.4,52.4,169.6,1\n123,-1,288.8,129.2,54,166.3,1\n123,-1,1359.2,567.3,104.2,243.4,1\n123,-1,918.7,209.8,68.4,191.3,1\n123,-1,1226.2,178.9,45,164.6,1\n123,-1,524.1,244.7,73.3,202.2,1\n123,-1,539.2,65.8,49.8,169.9,1\n123,-1,1345.6,180.4,64.9,183.8,1\n123,-1,478.2,167.7,57.2,159.9,1\n123,-1,377.5,1.9,47.6,145.9,1\n123,-1,785.7,210.5,63.6,188.4,1\n123,-1,447.2,1,53.4,145.5,1\n123,-1,832.6,228.4,55.1,178.1,1\n123,-1,480,40.1,60.9,165,1\n123,-1,92.7,654.7,64.8,220.9,1\n123,-1,103.7,548.4,84.1,235.6,1\n123,-1,1102.1,927.9,84.5,153.1,0.251\n385,-1,1222.2,30.8,61.1,118.7,1\n385,-1,686.1,206.6,80,112.4,1\n385,-1,1635.8,24.7,75.4,173.8,1\n385,-1,1107.9,457.3,72.9,206.5,1\n385,-1,358,105.6,55.4,180.7,1\n385,-1,372.7,1,60,102.1,1\n385,-1,447.1,289.5,78.4,209.8,1\n385,-1,108.1,349.6,53.6,191,1\n385,-1,1774.1,103,64.6,161.3,1\n385,-1,828.5,1.1,53.9,114.1,1\n385,-1,331.6,541.6,89.4,244.3,1\n385,-1,950.5,27.1,64.3,178.9,1\n385,-1,1599.5,634.1,81.9,245.6,1\n385,-1,281.9,127.5,55.7,168.2,1\n385,-1,446.2,568.7,70.1,234.6,1\n385,-1,796.2,150.1,58.7,173.2,1\n385,-1,207.9,295.9,55.3,182.4,1\n385,-1,219.5,139.2,58.5,158.7,1\n385,-1,1015,45.8,54,165.8,1\n385,-1,1718,455.7,78.4,212.8,1\n385,-1,1436.6,1.6,51.9,85.6,1\n385,-1,450.1,71.3,72.5,197.5,1\n385,-1,849.1,497.6,87.9,229.2,1\n385,-1,756,105.5,49.2,136.1,0.999\n385,-1,914.8,515.9,76.2,207.3,0.999\n385,-1,1784.4,435.6,69.7,207,0.999\n385,-1,504.2,78.5,50.9,172.1,0.998\n385,-1,977.9,906.4,87.2,174.6,0.993\n385,-1,619.2,563.8,86.2,236,0.294\n914,-1,1221.4,30.6,61.7,118.7,1\n914,-1,686.3,206.4,79.9,112.8,1\n914,-1,793.2,139.9,76.3,173.4,1\n914,-1,1112,34,63.4,163.3,1\n914,-1,466.4,203,70,188,1\n914,-1,1432.1,1.4,48.8,138,1\n914,-1,1574.3,589.6,104.5,236.4,1\n914,-1,556.8,116,58.5,173.9,1\n914,-1,1723.1,453,76.7,214.3,1\n914,-1,1298.5,861.4,97,219.6,1\n914,-1,328.9,363.6,83.1,195.7,1\n914,-1,869.4,427.6,63.2,222.7,1\n914,-1,306.5,697.6,88.3,267.1,1\n914,-1,1476.5,106.7,63.2,156.2,1\n914,-1,751.9,75.3,55.6,157.9,1\n914,-1,1604.6,66.1,52,160.9,1\n914,-1,413.7,347.3,58.6,209,1\n914,-1,301.9,163.1,69.5,198.8,1\n914,-1,961.8,408.3,66.2,224.2,1\n914,-1,241.2,133.3,56.3,165.4,1\n914,-1,1747.4,680.9,95.6,239.5,1\n914,-1,376.7,198.4,58,177.6,1\n914,-1,421.7,66,60.4,175.6,1\n914,-1,1719.6,92.2,55.4,173.4,1\n914,-1,469.3,16.5,50.9,148.6,1\n914,-1,253.2,2,55.1,119.9,1\n914,-1,1499.1,1.6,58.2,134.5,1\n914,-1,313.3,1,47.1,132.8,1\n742,-1,1221.1,29.8,63,119.2,1\n742,-1,686.2,205.8,80,114.4,1\n742,-1,1485.2,10.3,59.5,144.2,1\n742,-1,255.6,183.6,61.5,201.1,1\n742,-1,550.9,114.7,59.8,176.8,1\n742,-1,780.2,138,56.6,173.8,1\n742,-1,1465.2,105.7,53.5,161.4,1\n742,-1,296.3,433.9,76.4,222.5,1\n742,-1,1600,102.7,57.6,177.5,1\n742,-1,1713.4,457.7,94,208,1\n742,-1,1575.1,590,100.2,235.4,1\n742,-1,401.3,191.7,73.4,170.2,1\n742,-1,472,175.3,49.7,184.8,1\n742,-1,331.9,200.9,55.7,173,1\n742,-1,1126.2,733.3,82.6,251.6,1\n742,-1,437.6,53.1,57.8,168.3,1\n742,-1,750.6,83.3,50.1,150.7,1\n742,-1,447.9,557.1,82.8,253.2,1\n742,-1,1205.7,711.4,82.3,254.1,1\n742,-1,359.2,111.4,49.8,177.6,0.999\n742,-1,290.2,126.9,49.8,167.2,0.996\n742,-1,257.9,2.3,47.5,118.3,0.463\n742,-1,238.5,151.5,49,158.8,0.449\n742,-1,391.1,54.4,49.1,169.6,0.288\n757,-1,1221.3,29.5,62,119.6,1\n757,-1,686.7,205.6,79.3,114,1\n757,-1,546.2,116.1,65.2,176.5,1\n757,-1,1715.4,453.8,85.8,211.7,1\n757,-1,781,135.2,65.3,177.4,1\n757,-1,304.5,456.4,76.6,223.9,1\n757,-1,1574.2,589.2,101.4,234.3,1\n757,-1,264.5,183.3,58.7,199.4,1\n757,-1,1463.2,91.9,52.2,168.2,1\n757,-1,460.9,188.8,52.5,190.3,1\n757,-1,496.8,564.8,79.2,250.3,1\n757,-1,331,195.5,56.1,175.2,1\n757,-1,1585.4,88.7,63.2,178,1\n757,-1,402.5,203.3,64.4,171.9,1\n757,-1,1495.6,16.9,58.9,143,1\n757,-1,258,1,50,122.1,1\n757,-1,1161,670.2,93.5,263.3,1\n757,-1,452.6,65.6,56.7,169.2,1\n757,-1,751.6,81.6,49.3,152.5,1\n757,-1,398.3,63.5,56.7,173.1,1\n757,-1,1098.7,696.1,79.2,256.2,1\n757,-1,236.4,137.7,51.1,154.7,0.999\n757,-1,359.8,108,50.4,171.6,0.999\n757,-1,293.1,141.1,41.6,159.5,0.072\n264,-1,1221.2,30.8,62.3,118.7,1\n264,-1,687.7,206.2,78,112,1\n264,-1,287.4,129.1,57.4,171.2,1\n264,-1,1629.3,19.1,62.9,147.9,1\n264,-1,453.7,155.2,74.9,214.6,1\n264,-1,796.9,154.5,59.1,170.6,1\n264,-1,381.3,485.9,89.8,235.8,1\n264,-1,356.2,107.4,52.6,177.2,1\n264,-1,1721.1,457.6,77.7,211.2,1\n264,-1,1479.3,48.5,52.1,148.4,1\n264,-1,109,350.2,49.9,190.7,1\n264,-1,937.8,93.7,70,184.8,1\n264,-1,705,1,54.7,156.3,1\n264,-1,1053.9,108,59.5,180.9,1\n264,-1,1128.8,99.2,55.6,166.7,1\n264,-1,1403.7,564.6,100.3,248.8,1\n264,-1,216.3,128.5,54.3,164.3,1\n264,-1,694.2,318.7,60.4,186.5,1\n264,-1,376.6,8.3,56.8,159.7,1\n264,-1,230.3,444.6,61.1,195,1\n264,-1,245.1,760.2,92,272.2,1\n264,-1,161.7,567.9,83.8,241.5,1\n264,-1,875.4,109.8,48,154.5,1\n264,-1,870.2,369.3,78.7,192,1\n264,-1,801,350.9,86.1,213.7,1\n264,-1,484.1,381.5,73,224.2,1\n264,-1,513.1,118.4,56.8,174.7,1\n264,-1,757.1,102,47.7,170.4,0.999\n264,-1,569.3,394.1,64.9,210,0.999\n264,-1,939.1,918.1,82.6,162.9,0.984\n502,-1,1221.7,30,62.1,118.9,1\n502,-1,686,205.8,80.6,114.8,1\n502,-1,999.1,1,53.9,129,1\n502,-1,1496.1,2.2,58.1,132.8,1\n502,-1,467,149.5,65.1,192.2,1\n502,-1,791.1,142.4,61.2,177.7,1\n502,-1,1828.5,184.8,81.6,193.3,1\n502,-1,1682,34,56.1,169.1,1\n502,-1,1665.8,603.3,68.9,215.9,1\n502,-1,144,331.6,67.5,192.5,1\n502,-1,931.7,1,55.9,127.1,1\n502,-1,1735,196.1,68.5,166.7,1\n502,-1,879.4,1,53,125.5,1\n502,-1,404.3,168.8,61.1,184.5,1\n502,-1,925.9,684.4,123.2,250.1,1\n502,-1,1726,458.1,75,209.3,1\n502,-1,821.9,609.5,77.9,254,1\n502,-1,319.7,188.3,49.1,164.8,1\n502,-1,1549.5,598.6,80.1,238.9,1\n502,-1,296.9,776.6,74.4,256.9,1\n502,-1,209.7,748.7,94,258.8,1\n502,-1,218.1,134.3,64,165.1,1\n502,-1,1620.3,25.7,58.5,175.9,1\n502,-1,1622.5,315.4,62.4,190.8,1\n502,-1,1738.8,336.9,76.5,208.8,1\n502,-1,715.2,92.4,62.2,167.6,1\n502,-1,450.2,11.1,75.3,183.6,1\n502,-1,359.8,110.9,55.8,180,1\n502,-1,288.1,123.6,52.2,168.3,0.999\n502,-1,510.6,92.9,59.2,177.9,0.999\n502,-1,402.7,18,46.4,158.7,0.999\n502,-1,1020.5,697.5,81.3,234.5,0.996\n502,-1,1024.4,931.9,82.1,149.1,0.054\n295,-1,1221.8,32,60.9,118.7,1\n295,-1,686.1,206.3,80,114,1\n295,-1,1675.7,41.3,57.4,155.8,1\n295,-1,1464.9,20.8,54,148.5,1\n295,-1,241.4,578.2,99.2,258.9,1\n295,-1,237.3,402.6,60.4,189.8,1\n295,-1,937.6,66.6,63.5,176.9,1\n295,-1,1719.7,459.2,79.3,208.6,1\n295,-1,796,147.5,59.6,175.4,1\n295,-1,353.8,108.2,54.8,179.8,1\n295,-1,1011.8,91.4,58.4,181.7,1\n295,-1,704.7,1.2,54,155.4,1\n295,-1,406.3,24.2,55.9,167.4,1\n295,-1,453,135,74.6,199.5,1\n295,-1,108.9,351.6,51.9,189.1,1\n295,-1,284.2,127.8,54.3,173.8,1\n295,-1,1083,89.5,53.2,163.3,1\n295,-1,219.2,129.6,58.2,167.5,1\n295,-1,383.2,430.3,84.8,229.5,1\n295,-1,815.9,384.9,93.1,223.4,1\n295,-1,300.8,836.2,94.7,244.8,1\n295,-1,538,434.1,66.4,218,1\n295,-1,1462,587.9,94,248,1\n295,-1,514.9,105.5,48.1,174.8,1\n295,-1,886.2,404.9,77.6,196.8,1\n295,-1,462.1,420.2,65.7,231.1,1\n295,-1,745.1,101.7,47.1,172.4,1\n295,-1,829,108.5,53.4,151.4,0.991\n295,-1,938.2,916,74.8,165,0.987\n886,-1,1220.8,29.7,62.2,119.6,1\n886,-1,1481.6,88.5,59,156.4,1\n886,-1,686.8,206.2,79.8,113.2,1\n886,-1,1095.7,1.3,58.7,159.9,1\n886,-1,794.5,138.7,74.3,173.4,1\n886,-1,332.2,335.1,81.1,182.1,1\n886,-1,1576.3,593.2,102.4,236.5,1\n886,-1,478,170.7,62.9,185.6,1\n886,-1,302.1,160.5,69.3,198.3,1\n886,-1,1722.2,453.3,77.6,214.5,1\n886,-1,1702.4,56.5,53.7,170.4,1\n886,-1,557.9,117.6,58.9,174.5,1\n886,-1,425.5,318.2,57.5,202.2,1\n886,-1,753.1,71.6,54.4,163.7,1\n886,-1,290.4,652.1,85.1,252.7,1\n886,-1,974.9,448.8,72.2,226.1,1\n886,-1,890.4,466.2,70.4,223.9,1\n886,-1,1423.8,4.2,52.3,153.3,1\n886,-1,472.7,1,47.5,138.2,1\n886,-1,254.3,1.6,53.4,120.9,1\n886,-1,1582.1,33.9,55.2,154,1\n886,-1,239.4,133.3,53.1,166.9,1\n886,-1,405.8,170.1,56.5,181.5,1\n886,-1,1752,682.7,90.2,233.9,1\n886,-1,1494.9,1,60.9,145,1\n886,-1,1356.1,938.7,98.1,142.3,0.548\n886,-1,315.4,2,42.4,123.7,0.454\n227,-1,1221.5,30.9,60.7,118.1,1\n227,-1,685.7,206.7,80.7,113.2,1\n227,-1,795.7,150.4,60.5,174.7,1\n227,-1,1492.2,67.3,53.5,148.9,1\n227,-1,1188.8,129.5,45.4,157.7,1\n227,-1,387.4,552.4,94.2,243.2,1\n227,-1,433.8,188.9,75.1,211.6,1\n227,-1,356.2,105.5,54.2,180.7,1\n227,-1,705.2,1,55.5,158.7,1\n227,-1,109.6,350.7,48.6,189.5,1\n227,-1,288.2,127.3,55.6,172,1\n227,-1,1721.6,456.4,77.6,213.2,1\n227,-1,1358.2,567.8,104.2,244.7,1\n227,-1,212.2,125.8,55.4,167.8,1\n227,-1,1576.1,1,57.4,140.7,1\n227,-1,148.4,685,105,257.8,1\n227,-1,518.2,121.4,47.8,176.1,1\n227,-1,1107.4,126.4,62.5,185.4,1\n227,-1,908.2,134.6,73.9,180.4,1\n227,-1,507.2,341.3,71.5,215.4,1\n227,-1,217.3,497.3,59.4,204.6,1\n227,-1,769.4,316.4,75.1,206.1,1\n227,-1,830.9,328.2,72.8,189.2,1\n227,-1,89.5,627.7,91.8,250.3,1\n227,-1,593,346.4,61.4,199.4,0.999\n227,-1,937,904.6,72.8,176.4,0.994\n227,-1,973,125.8,42.2,155.2,0.989\n389,-1,1222.4,31.1,60.9,117.7,1\n389,-1,686.3,206.2,79.3,113.3,1\n389,-1,366.8,1.1,64.8,102.9,1\n389,-1,358,107.2,55.5,177.8,1\n389,-1,1636.5,28.1,74.5,173.8,1\n389,-1,445.4,286.8,82.8,210.7,1\n389,-1,1773.1,105.6,70,165.6,1\n389,-1,1120.3,464.8,73,202.7,1\n389,-1,828,1,55.8,118.3,1\n389,-1,439.7,571.1,72.6,235.4,1\n389,-1,108.6,350.4,53.1,190.8,1\n389,-1,324.6,548.3,95.3,252.5,1\n389,-1,948.9,24.7,64.6,177.7,1\n389,-1,455.1,72.3,69.7,195,1\n389,-1,282.7,128.1,54.8,165.8,1\n389,-1,795.2,150.4,59.8,172.9,1\n389,-1,219.2,141.5,59.6,156.1,1\n389,-1,1596.8,628.2,84.3,251.2,1\n389,-1,208.7,290.5,53.6,183.2,1\n389,-1,1013.6,41.9,54.3,164.7,1\n389,-1,1718.8,454.1,80.4,215.2,1\n389,-1,916.4,518.7,78.1,214.6,1\n389,-1,850,503.4,83.5,226.8,1\n389,-1,1775.5,430.3,71.9,210.8,0.999\n389,-1,978.1,905.8,89.1,175.2,0.994\n389,-1,1436.3,4.3,53.5,79.9,0.992\n389,-1,756.4,107.9,49.1,135.9,0.981\n389,-1,515.2,87.2,37.9,161.2,0.514\n389,-1,706.4,1.9,54.6,148.8,0.191\n11,-1,687.4,206,78.7,113.5,1\n11,-1,1046.4,210.6,94.6,179.5,1\n11,-1,504,143.3,105,196.2,1\n11,-1,1486.9,70.2,55.3,148.1,1\n11,-1,1361.2,567.8,105.7,244.2,1\n11,-1,704.4,1.1,56.7,158.2,1\n11,-1,795.3,148.9,62.2,174.5,1\n11,-1,377.7,399.7,84.7,237.6,1\n11,-1,102.5,547.1,84,250.9,1\n11,-1,1724.8,459.2,76.1,204.4,1\n11,-1,1803.5,219.7,65,178.9,1\n11,-1,1201,37.2,74.3,115.6,1\n11,-1,355.9,105.2,53.6,177.6,1\n11,-1,210.2,386.4,67,198.2,1\n11,-1,285.8,120.6,55.9,176.2,1\n11,-1,218.7,127.1,47.1,167.4,1\n11,-1,415.6,89.3,56.1,168.2,1\n11,-1,1626.2,255.2,60.4,182.2,1\n11,-1,461.8,71.9,51.2,172,1\n11,-1,881.6,129.5,58.1,177.5,1\n11,-1,1040.2,1,44.8,79.3,1\n11,-1,1438.3,241.4,51.1,170.5,0.999\n11,-1,1403.7,189.4,50.3,176.7,0.999\n11,-1,251.1,365.6,48,197.2,0.069\n883,-1,1220.9,29.7,62.3,119.3,1\n883,-1,1089.3,1.1,63.4,158.5,1\n883,-1,686.7,206.1,79.5,113.3,1\n883,-1,1481.3,87.3,58.3,154.7,1\n883,-1,795.2,138.8,73.5,175.4,1\n883,-1,1574.8,589.9,103.4,237.1,1\n883,-1,474,1,49.1,136.8,1\n883,-1,301.3,161.2,70.7,196.8,1\n883,-1,1722,454.3,77.5,212.9,1\n883,-1,335.2,330,79.6,184.5,1\n883,-1,288.3,648.3,85.4,250.7,1\n883,-1,558.4,116.6,58.7,176.6,1\n883,-1,478.4,170.3,61.5,184.6,1\n883,-1,752.5,71.5,55.7,163.8,1\n883,-1,1698.2,59.8,53.3,165,1\n883,-1,978.4,453.6,69.6,230.3,1\n883,-1,893,474.4,69.6,219.9,1\n883,-1,1422,4,52.2,156.1,1\n883,-1,427.2,311.7,55.4,200.4,1\n883,-1,254,1.1,53.7,121.4,1\n883,-1,1578.8,33.2,57.7,153,1\n883,-1,1494.4,1.5,58.9,150,1\n883,-1,240.1,132.1,51.9,167.3,1\n883,-1,405.7,170,56.8,179,1\n883,-1,1752.9,682.7,91.2,233.3,1\n63,-1,1221.4,29.8,61,116.9,1\n63,-1,686.2,205.9,80.4,114.2,1\n63,-1,1487.1,70.2,55.3,150.9,1\n63,-1,1361.4,566.3,105.3,245.7,1\n63,-1,404.2,338.8,83.8,236.7,1\n63,-1,704.7,1,55.6,158,1\n63,-1,1722,456.9,76.8,209.6,1\n63,-1,355.6,109.1,55,175.7,1\n63,-1,487.8,188.1,81.2,196.5,1\n63,-1,102.9,546.4,84.9,253.1,1\n63,-1,997.9,184.7,71.3,173.8,1\n63,-1,827.8,195.9,78.4,182.5,1\n63,-1,211.5,129.5,49.8,165,1\n63,-1,1292.3,180.3,61.7,164.1,1\n63,-1,1462.2,205.3,65.2,197.7,1\n63,-1,287.1,127.3,54.2,168,1\n63,-1,148,357.6,55.6,196.1,1\n63,-1,10.6,753.8,70.2,236.1,1\n63,-1,1360.2,211,41.6,167.2,1\n63,-1,384.7,37.5,53.1,162.9,1\n63,-1,892.5,184.3,53.5,164.6,1\n63,-1,541.5,63.1,44.3,165.7,1\n63,-1,457.8,113.4,50.5,146.1,1\n63,-1,483.1,38.7,58.4,170.7,0.999\n63,-1,438.7,32.7,52.8,154,0.997\n63,-1,795.5,143.7,62.4,184.3,0.996\n63,-1,256.3,93.7,46.1,176.1,0.911\n63,-1,1871.3,282.2,49.7,201.9,0.085\n487,-1,1221.5,31,61.8,117.4,1\n487,-1,686,205.7,80.5,112.9,1\n487,-1,998.6,1,56.4,143,1\n487,-1,1499.5,1,58.3,122.3,1\n487,-1,302.1,195.6,50.9,171.6,1\n487,-1,931,1,56.9,135.2,1\n487,-1,1686.7,459.1,111.4,209.4,1\n487,-1,1801.1,167.9,70,181.8,1\n487,-1,875.9,1,53.2,130.5,1\n487,-1,459.7,162.2,63.5,194,1\n487,-1,801.6,598.1,91.8,258.8,1\n487,-1,1729.5,178.6,70.5,174.2,1\n487,-1,1539.7,599.7,84,239.7,1\n487,-1,135.1,338.3,62.2,190.3,1\n487,-1,802.4,143.2,51.5,177.3,1\n487,-1,411.4,155.6,58.4,176.7,1\n487,-1,307.2,749,77.3,254.6,1\n487,-1,214.4,715.7,97.3,261.4,1\n487,-1,359,108.6,54,178.3,1\n487,-1,1697.7,46.4,52.6,166.6,1\n487,-1,217.6,137.2,64,159.5,1\n487,-1,917.9,651.3,113.5,253.2,1\n487,-1,1773.1,346.6,76.5,220.8,1\n487,-1,447.5,21.6,75.2,178.4,1\n487,-1,504.7,89.2,62.5,172.7,1\n487,-1,1631.1,327.3,63.3,191.4,1\n487,-1,1640.2,36.3,59.1,175.9,1\n487,-1,712.4,92.9,59.2,168.4,1\n487,-1,410.6,7.1,46.5,158.5,0.999\n487,-1,1004.4,673.9,75.1,227.3,0.991\n487,-1,753.8,99,49.4,141.9,0.991\n487,-1,1596.2,579.5,67,175.6,0.818\n487,-1,1017.6,937.2,84.7,143.8,0.129\n487,-1,289,137.5,47.4,145.9,0.089\n603,-1,1221.7,30.9,61.3,119.5,1\n603,-1,687.6,205.4,78.4,114.8,1\n603,-1,1480.6,3.6,61.2,145.8,1\n603,-1,800.4,143.6,65.2,175.3,1\n603,-1,365.7,275.6,64.1,197,1\n603,-1,1709.3,457,94.7,210,1\n603,-1,1622.5,2.7,55,108.6,1\n603,-1,237.4,265.3,63.7,187.4,1\n603,-1,1649.6,227.1,70.5,199.5,1\n603,-1,1573.6,588.8,98.3,235.6,1\n603,-1,168.3,242.6,61.4,210.2,1\n603,-1,287.2,126.1,51.9,172.8,1\n603,-1,562.7,110.5,49.2,180.3,1\n603,-1,432.7,71.4,49.3,172.2,1\n603,-1,217.6,137.2,54.6,159.6,1\n603,-1,487.1,97.1,46.2,161.6,1\n603,-1,362.4,113.5,49.9,174.6,1\n603,-1,752,79.7,45.1,155.1,1\n603,-1,1080.3,878,122,203,1\n603,-1,394.6,92.7,46.9,157.3,0.944\n652,-1,686.9,206.6,79.7,113.4,1\n652,-1,1480.5,3.5,60.2,146.1,1\n652,-1,547.3,112.5,62.8,174.7,1\n652,-1,800.1,145.4,66.3,173.2,1\n652,-1,451.6,536.7,89,243.6,1\n652,-1,1221.4,30.6,62.7,121.3,1\n652,-1,1710.1,455.5,98.2,212.9,1\n652,-1,359.7,111.5,50.2,173.1,1\n652,-1,333.9,327.9,69.4,206.2,1\n652,-1,1576.6,587.6,95.1,238.7,1\n652,-1,1615.7,175.3,69.5,186.1,1\n652,-1,216.5,220.3,57.8,202.1,1\n652,-1,268.4,235.5,60.5,183.9,1\n652,-1,410.6,1,58.6,153.1,1\n652,-1,751.6,82.5,45.1,151.6,1\n652,-1,469.9,101.5,47.1,177.3,1\n652,-1,423.7,118.2,57.5,160.6,1\n652,-1,288.3,126.6,51.4,170.2,0.999\n652,-1,1174.1,1,67.1,120,0.999\n652,-1,1454.1,922.6,86.2,158.4,0.967\n652,-1,1373.3,938.1,89.1,142.9,0.084\n652,-1,360.1,6.4,41.7,135.5,0.075\n885,-1,1220.9,30.2,62.2,119.5,1\n885,-1,1481.7,88.8,58.4,155.6,1\n885,-1,1092.9,2.1,60.2,159.3,1\n885,-1,686.7,206.5,79.7,112.9,1\n885,-1,794.9,138.9,72.9,175.5,1\n885,-1,333.5,332.7,80.3,184.5,1\n885,-1,1575.3,591.4,102.9,233.4,1\n885,-1,1700.1,59.6,53.6,167.6,1\n885,-1,478.3,173.2,61.8,183.7,1\n885,-1,300.5,160.2,70.8,198.3,1\n885,-1,1722.4,454.2,76.7,213.5,1\n885,-1,558.7,115.9,58.7,175.9,1\n885,-1,473.6,1,48,138.4,1\n885,-1,426.2,314.9,56.8,204,1\n885,-1,975.4,449.5,72.3,228.5,1\n885,-1,753.6,72.4,54.9,162.5,1\n885,-1,289.8,649.8,86.4,253,1\n885,-1,891.9,468.8,70.3,222.4,1\n885,-1,1423.1,4.6,52.9,155.3,1\n885,-1,1581.7,33.5,54.4,150.8,1\n885,-1,254.2,1.6,53,120.4,1\n885,-1,239.8,131.9,53.3,169,1\n885,-1,1494.7,1,60.6,149.2,1\n885,-1,406.3,172.3,55.7,176.8,1\n885,-1,1752.4,683.6,91.4,232.3,1\n885,-1,1355.8,939.2,99.7,141.8,0.484\n449,-1,1221.8,30.5,61.9,118.6,1\n449,-1,937.3,1,59.2,157.3,1\n449,-1,447.7,211.2,72.5,198.7,1\n449,-1,686.8,206.3,79,114.1,1\n449,-1,358.6,107.8,53.9,178.1,1\n449,-1,1006.9,11.6,54,157.9,1\n449,-1,1716.8,454.5,83.2,212.3,1\n449,-1,1378.1,548.6,96.3,200.1,1\n449,-1,112.2,352.2,53.9,187.1,1\n449,-1,1555.3,612,75.9,243.9,1\n449,-1,287.5,127.5,53.5,168.6,1\n449,-1,252.3,223.9,50.7,184.6,1\n449,-1,862.7,3.3,53.3,137.6,1\n449,-1,1668.7,360.2,68.6,196,1\n449,-1,800.5,152.4,48.7,169,1\n449,-1,1747.5,156.7,59.5,165.3,1\n449,-1,884,591.8,118.9,248.3,1\n449,-1,1838.9,391.3,82.1,206.6,1\n449,-1,350.9,683.3,74.4,241.6,1\n449,-1,526.5,74.2,53.8,171,1\n449,-1,254.1,649.9,93.2,255.7,1\n449,-1,427,123.8,59.9,164.6,1\n449,-1,788.6,574.1,81.2,250,1\n449,-1,221.9,139.5,56.6,156.2,1\n449,-1,730.7,1.3,49.9,94,1\n449,-1,423.1,1,43.4,136,1\n449,-1,757.4,90.2,46.3,150.2,0.999\n449,-1,359.5,4.2,63.3,131.4,0.999\n449,-1,1705.1,107.7,67.3,177.2,0.998\n449,-1,1509.6,1,55.4,102.9,0.997\n449,-1,1021.1,919.8,84.7,161.2,0.993\n449,-1,709.5,88,56.9,174.7,0.99\n449,-1,964.2,605.8,84.5,218.7,0.987\n449,-1,454,38,60.7,198.1,0.297\n812,-1,1221.6,29.8,62.5,118.6,1\n812,-1,686.6,205.5,79.1,114.4,1\n812,-1,1620.5,3,60.4,144,1\n812,-1,554,117.1,63.9,175.3,1\n812,-1,1723.2,453.3,75.5,214.3,1\n812,-1,1575.2,589.9,101,234.3,1\n812,-1,788.9,130.7,54.6,182.9,1\n812,-1,277.3,531.3,78.1,245.3,1\n812,-1,279.5,165.5,62.7,197.6,1\n812,-1,441.3,238.5,54.8,195.5,1\n812,-1,475.9,107.3,63,178.1,1\n812,-1,1472.4,33.8,62.5,156.6,1\n812,-1,379.4,255.7,71.8,175.3,1\n812,-1,751.3,72.9,58.2,160.8,1\n812,-1,234.4,136.1,51,164.8,1\n812,-1,347.6,180.6,52.5,171.3,1\n812,-1,990.7,591.1,71.8,246.7,1\n812,-1,1065.7,567,72.3,254.3,1\n812,-1,1433.5,53.5,49.4,156.3,1\n812,-1,426.3,107.6,60,169.8,0.998\n902,-1,1221.6,30.2,60.8,118.9,1\n902,-1,687.2,206.1,78.8,113,1\n902,-1,478.3,192.3,63.6,182.6,1\n902,-1,298,676.5,96.1,257.9,1\n902,-1,794.2,140.7,75.7,172.5,1\n902,-1,1430.6,1,50,145.8,1\n902,-1,1485.8,103.6,56.9,147.5,1\n902,-1,1576,593.8,102.5,233.7,1\n902,-1,1722.7,453.5,76.3,214.5,1\n902,-1,558.9,114.9,57.9,174.5,1\n902,-1,1596.9,50.5,52.8,162.7,1\n902,-1,302.2,162.3,68.3,195.2,1\n902,-1,1712.4,82,54.7,167.1,1\n902,-1,333.1,350.6,81.4,186.3,1\n902,-1,390.7,190.2,58.1,176.2,1\n902,-1,1109.3,21.6,56.5,157.8,1\n902,-1,753.2,74.3,55.1,159.1,1\n902,-1,971.3,420.8,70.6,228.3,1\n902,-1,875.9,441.7,67.6,217.7,1\n902,-1,469.7,3.6,50.3,149,1\n902,-1,417.9,334.1,58.7,207.1,1\n902,-1,254.3,1.1,52.8,118,1\n902,-1,242.6,133.6,57.3,168.6,1\n902,-1,1747.1,680.6,94.2,240.4,1\n902,-1,1502.3,2.4,57.4,142.2,1\n902,-1,313.5,1.6,46.8,129.4,1\n902,-1,1322.4,889.4,96.2,191.6,1\n902,-1,419.5,60.6,52,178.7,1\n730,-1,1221.3,30.1,62,119.1,1\n730,-1,686.7,205.5,79.5,114.9,1\n730,-1,1479,7.3,59.9,144.9,1\n730,-1,1470.2,110.3,52.2,169.5,1\n730,-1,259.7,188.6,55.7,201,1\n730,-1,552.2,113,58.7,178.5,1\n730,-1,411.3,187.9,66.9,161.6,1\n730,-1,1710.8,457.7,96.7,205.7,1\n730,-1,1573.9,589.5,99.7,233.6,1\n730,-1,476.7,166.8,50.7,182.9,1\n730,-1,299.3,421.8,74.5,224.1,1\n730,-1,784.3,136.3,54.2,177.4,1\n730,-1,409.6,552.8,94.8,249,1\n730,-1,320.4,197.8,62.3,180.6,1\n730,-1,1226,736.3,100.4,268.6,1\n730,-1,1597.4,107.7,58.7,181.3,1\n730,-1,426.6,40.9,59.9,170,1\n730,-1,750.6,82.8,50.3,151.4,1\n730,-1,362.1,111.4,47.3,173.5,1\n730,-1,1159.6,753,80.8,260.5,1\n730,-1,320.1,1,49.6,132.1,0.999\n730,-1,236.9,139.5,53.3,165.4,0.996\n730,-1,465.5,7.5,43.8,134.2,0.35\n52,-1,1221,29.4,62.6,117.2,1\n52,-1,686.2,206.4,79.6,113.2,1\n52,-1,398.8,352,84.5,235.5,1\n52,-1,1487.5,70.4,54.8,147.9,1\n52,-1,489.9,178.6,88.3,196.9,1\n52,-1,1361.7,566.6,104.5,244.7,1\n52,-1,704.7,1,55.2,157.1,1\n52,-1,355.2,110.7,55.3,172.6,1\n52,-1,1722.5,456.4,76,211.6,1\n52,-1,161.4,362.7,64.3,194,1\n52,-1,213.6,126.4,49.6,167.2,1\n52,-1,881.9,191.7,61,185,1\n52,-1,1006.8,169.8,74.2,184,1\n52,-1,102.1,546.4,86.1,254.1,1\n52,-1,284.1,125.7,53.5,172.1,1\n52,-1,793.5,147.4,63.2,178.1,1\n52,-1,5.4,781.8,69.8,239.2,1\n52,-1,428.5,100.2,56,155.6,1\n52,-1,1318.9,177.3,56.5,168.1,1\n52,-1,485.8,47,55.6,154.8,1\n52,-1,540.8,65.2,44.5,167.5,0.999\n52,-1,1857.8,272.7,63.2,193.4,0.999\n52,-1,1480.3,215.4,61.3,199.5,0.999\n52,-1,1374.9,216.9,41.5,165.2,0.999\n52,-1,394.3,64.3,45.9,148.2,0.817\n661,-1,1221.2,29.5,61.8,119.7,1\n661,-1,686.8,205.9,80,113.8,1\n661,-1,1481.5,4.1,60.8,144.7,1\n661,-1,1711.3,456.2,95.7,208.2,1\n661,-1,801.3,144,64.2,172.5,1\n661,-1,359.5,114,50.7,169.2,1\n661,-1,551.6,110,59.8,178.3,1\n661,-1,324.2,331.9,69.3,211.3,1\n661,-1,1140.9,1.8,72.8,113.5,1\n661,-1,1575.7,588.7,96.4,233.9,1\n661,-1,440.6,529.2,76,247.2,1\n661,-1,408.1,1,57.5,153.5,1\n661,-1,1614.7,169.9,77.7,184.1,1\n661,-1,224.6,208.6,55.7,206.8,1\n661,-1,476.5,111.6,47.4,177,1\n661,-1,751.2,78.7,46.6,155.9,1\n661,-1,424.9,124.1,59.9,160,1\n661,-1,275.9,230.1,57.6,182.3,1\n661,-1,1420.5,904.9,102.6,176.1,1\n661,-1,286.8,122.6,54,172.2,0.999\n661,-1,354.6,1.3,51.6,143.4,0.999\n661,-1,1349.6,923.6,81.7,157.4,0.989\n661,-1,1502.1,170.5,47,168.5,0.053\n1043,-1,1221.8,29.9,61.5,119.5,1\n1043,-1,687.3,206.9,79.5,114.3,1\n1043,-1,793.6,140.5,71.4,175.2,1\n1043,-1,1123.2,563.3,85.7,247.1,1\n1043,-1,288.7,126.6,52.7,171.4,1\n1043,-1,476.9,322.6,77.9,196.8,1\n1043,-1,275.1,536,96.2,200.6,1\n1043,-1,230.2,138.5,55.9,164.6,1\n1043,-1,1720.3,455.4,80.3,215.5,1\n1043,-1,363,325.9,72.3,199.6,1\n1043,-1,1654,683.1,95.8,230.4,1\n1043,-1,1295.2,194.9,62.6,165.2,1\n1043,-1,937.9,235.8,64.4,204.6,1\n1043,-1,751.6,74.8,54,162.3,1\n1043,-1,373.9,514.2,68.8,236.5,1\n1043,-1,851.3,243.6,64.6,192.1,1\n1043,-1,1470.2,213.7,74.3,168.1,1\n1043,-1,292,323.3,71.3,211.2,1\n1043,-1,373.6,102.6,57.2,176.4,1\n1043,-1,1718.1,214.3,59.1,175.9,1\n1043,-1,307.9,3,37.9,127.2,1\n1043,-1,1574.3,589.6,101.3,240.7,1\n1043,-1,582.5,536.4,64.9,254.3,1\n1043,-1,1860.2,251.9,60.8,199.1,1\n1043,-1,502.3,167.9,76.1,199.3,1\n1043,-1,461.5,170.7,54.5,170.2,0.999\n1043,-1,433,64.8,62.7,177,0.998\n623,-1,687,206,79.7,113.2,1\n623,-1,1481.4,5.9,60.6,143.4,1\n623,-1,1221.5,29.3,61.8,118.9,1\n623,-1,1621.9,207.4,82,197,1\n623,-1,350.3,295.3,67,201.4,1\n623,-1,800.8,144.6,65.4,171.8,1\n623,-1,1711.8,456.1,90.9,208.8,1\n623,-1,1574.3,589.2,96.7,235.3,1\n623,-1,553,112.3,56.6,174.3,1\n623,-1,358.6,114.5,52.5,172.4,1\n623,-1,288.7,127.6,51.5,167.9,1\n623,-1,177.7,236,74.4,206.7,1\n623,-1,498,83.1,46,157.5,1\n623,-1,248.4,247.5,61.5,190.2,1\n623,-1,351.9,1,54.2,122.6,1\n623,-1,556.2,546.3,78.7,239,1\n623,-1,1594.2,1,52.9,94.2,1\n623,-1,753.6,82.3,43.9,150.5,1\n623,-1,231.6,134.8,50.5,162.3,1\n623,-1,409.9,102.8,50.8,158.5,0.999\n623,-1,446.4,83.5,48,169.3,0.998\n623,-1,1113.3,919,98.2,162,0.997\n623,-1,1204.7,943.7,64.5,137.3,0.059\n802,-1,1221.1,29.1,62.9,119.4,1\n802,-1,686.7,205.9,79.8,113.7,1\n802,-1,286.1,527.1,76.5,237.9,1\n802,-1,1573.5,589.3,102.2,235.4,1\n802,-1,1723.3,451.3,75.1,216.4,1\n802,-1,784.3,130.8,49.9,180.8,1\n802,-1,1612.6,1,57.3,133.5,1\n802,-1,548.8,114.7,62.6,175.7,1\n802,-1,278.4,165.5,60.3,198.2,1\n802,-1,479.2,96.7,61.7,175.2,1\n802,-1,1479,29.2,61.2,152.2,1\n802,-1,231.9,134.7,52.2,167,1\n802,-1,750.5,70.4,56.5,164.4,1\n802,-1,387.4,241.6,70.6,175.7,1\n802,-1,1075.3,588.1,85.9,245.2,1\n802,-1,254.6,1.3,53.2,122.7,1\n802,-1,439.7,231.5,58.8,198.6,1\n802,-1,346.4,180.6,50.1,177.2,1\n802,-1,422,96.6,57.8,168.3,1\n802,-1,1009.6,612.2,74.7,247.9,1\n802,-1,1440.9,57,48.7,156.4,1\n802,-1,443.3,1,41.9,85.9,1\n802,-1,614.1,581.3,87.2,234.4,0.961\n408,-1,1221.4,29.6,62.5,119.9,1\n408,-1,686.5,205.4,79.2,115.3,1\n408,-1,1649.8,55.9,66.8,169.7,1\n408,-1,459.1,265.3,75.8,205.5,1\n408,-1,357.7,105.1,54.4,179.3,1\n408,-1,1770.2,123.4,64.4,171.2,1\n408,-1,110.4,346.3,53.1,193.8,1\n408,-1,1719.7,454.1,80.7,211.9,1\n408,-1,413.5,605.7,74.8,236.4,1\n408,-1,551.5,68,58,171.6,1\n408,-1,1199.6,491.5,62.3,200.6,1\n408,-1,945.6,17,62.9,171.3,1\n408,-1,361.8,1,64.6,114.9,1\n408,-1,285.6,128.7,54.8,167,1\n408,-1,221.1,141.5,65,157,1\n408,-1,793.9,150.9,61,173.5,1\n408,-1,1586.2,615.2,100.9,249.7,1\n408,-1,831.1,1,56.4,130.3,1\n408,-1,1004.9,31.4,56.5,161.5,1\n408,-1,466.2,69.9,65.5,188.7,1\n408,-1,302.7,580.5,81.6,254.8,1\n408,-1,204.8,269.7,55.2,182,1\n408,-1,425.2,92,50.9,172.5,1\n408,-1,857.2,527.9,99.3,238.3,1\n408,-1,695.8,560.8,86.3,238.6,1\n408,-1,718.1,1,51.2,135.1,1\n408,-1,930,545.3,80.7,221.3,1\n408,-1,710.7,90.3,62.2,167.7,1\n408,-1,426.8,1.3,44,111.9,0.995\n408,-1,1873.6,64.5,47.4,183.4,0.986\n408,-1,978.5,920.3,84.1,160.7,0.88\n377,-1,1221.9,31.5,60.9,119.7,1\n377,-1,686.3,206.7,79.6,113.2,1\n377,-1,1085.4,450.4,68.4,201.8,1\n377,-1,1633.4,15.5,63.9,166.3,1\n377,-1,359,105.6,55.1,180.4,1\n377,-1,447.9,304.1,72.9,214.7,1\n377,-1,284.7,129.3,54.4,168.1,1\n377,-1,454.7,549.4,71.4,233.1,1\n377,-1,109.3,350.9,51.7,189.4,1\n377,-1,344.2,533.6,88.2,243.1,1\n377,-1,828.4,1,56.1,112.6,1\n377,-1,795.6,149.9,60.7,173.2,1\n377,-1,1718.5,455.6,79,213.6,1\n377,-1,954.6,41,62.2,173.2,1\n377,-1,444.9,75.8,69.7,196.8,1\n377,-1,507.8,85.8,51.6,169,1\n377,-1,1800.2,450.4,65.8,204.5,1\n377,-1,218.2,139.4,58.6,159.3,1\n377,-1,572.4,561.2,95.7,259.8,1\n377,-1,1017.5,50.9,54.4,165,1\n377,-1,1593.8,632.4,80.7,244.2,1\n377,-1,209.8,305.3,53.5,181.8,1\n377,-1,1434.6,2.8,52.4,93.3,1\n377,-1,850.8,492.4,85.5,233.8,1\n377,-1,756.7,98.4,48.5,142.6,1\n377,-1,1768.7,101.2,55.1,157.7,1\n377,-1,383.8,1.1,46.9,91.3,0.999\n377,-1,1802,69.6,70.4,170,0.999\n377,-1,909.7,504.4,78.1,209.1,0.999\n377,-1,971.5,913.2,87,167.8,0.998\n796,-1,1221.4,29.4,61.7,119.6,1\n796,-1,687,205.8,79.6,113.5,1\n796,-1,288.4,512.2,79.2,239.1,1\n796,-1,1723.1,452.4,75.9,214.3,1\n796,-1,783.3,130.6,50.7,181.3,1\n796,-1,1575,590,100.9,235.3,1\n796,-1,548.9,114.3,61.6,179.5,1\n796,-1,478.6,96.6,61.8,174.7,1\n796,-1,1484.5,28,58.9,148.5,1\n796,-1,278.5,166.7,58.3,196.1,1\n796,-1,750.2,69.9,56,161.2,1\n796,-1,1441,63.4,49.7,158.9,1\n796,-1,232.3,133.1,52.1,169.3,1\n796,-1,1607.1,1,52.6,126.3,1\n796,-1,254,1.3,53.2,120.8,1\n796,-1,392.2,237.6,65.1,179,1\n796,-1,342.6,186.6,49.3,177.5,1\n796,-1,442.9,225.3,54.8,190.1,1\n796,-1,1081.4,598.2,95.1,261.7,1\n796,-1,1017.9,618,79,249.8,1\n796,-1,422.5,93,56.1,163.9,1\n796,-1,447.1,1,44.3,89.8,1\n796,-1,605.2,577.7,77.8,240.2,0.999\n298,-1,1221.2,31.8,61,117.5,1\n298,-1,1679.2,44,57.9,153.9,1\n298,-1,686.8,206.8,79.5,114.2,1\n298,-1,936.7,63.5,64.7,176.5,1\n298,-1,1462,21.2,52.2,147.7,1\n298,-1,248.3,581.3,99.4,250.7,1\n298,-1,238.1,395.3,60.3,195.9,1\n298,-1,1720,458.3,78.9,211,1\n298,-1,354.2,110.7,54.8,177.6,1\n298,-1,408.3,27.5,55.7,166.7,1\n298,-1,453.2,131.1,75.3,203.6,1\n298,-1,704.4,1,54.4,158.6,1\n298,-1,796.1,148.8,59.7,180.4,1\n298,-1,108.6,351.1,51.5,189.6,1\n298,-1,1010.4,88.6,59.8,181.5,1\n298,-1,283.3,131.4,53.4,170.2,1\n298,-1,1079.2,87.5,51,163.9,1\n298,-1,382.6,428.4,84.1,224,1\n298,-1,218.3,131.4,59.6,166.3,1\n298,-1,534.4,438.9,69.3,217.9,1\n298,-1,1467.9,591.6,92,243.7,1\n298,-1,886.9,410.4,74.5,200.4,1\n298,-1,740.7,101.6,49.3,172.5,1\n298,-1,301.4,842.2,100.1,238.8,1\n298,-1,816.8,390.6,92.5,221.2,1\n298,-1,462.3,423.1,62.5,229.1,0.999\n298,-1,512.5,105,48.3,175.3,0.999\n298,-1,938.6,913.3,69.5,167.7,0.977\n298,-1,832,111,45.9,152.5,0.429\n906,-1,1221.5,29.8,61.3,119.3,1\n906,-1,687.2,206.1,79.1,112.8,1\n906,-1,474,191.3,70,189.5,1\n906,-1,793.6,140.1,75.8,172.8,1\n906,-1,1431.9,1,49.6,146.2,1\n906,-1,304.1,685.4,93.9,261.6,1\n906,-1,1482.6,104.1,59.6,151.7,1\n906,-1,1574.5,590.2,104,235.6,1\n906,-1,1110.3,27.9,60.8,159.2,1\n906,-1,1713.7,84.1,55.9,172.3,1\n906,-1,1721.9,453.1,77.2,214.4,1\n906,-1,558.2,115.4,57.9,172.8,1\n906,-1,385.7,191.1,57.4,178.7,1\n906,-1,326.7,351.3,87.5,188.7,1\n906,-1,301.7,162.3,70.1,199.1,1\n906,-1,751.9,74.4,55.9,158.9,1\n906,-1,416.1,345.6,59.5,202.9,1\n906,-1,1597,56.4,54.2,163.2,1\n906,-1,873,434.6,66.3,224.2,1\n906,-1,469.5,5.6,50.2,150.6,1\n906,-1,1312,881.8,98.4,199.2,1\n906,-1,971.2,416,65,227,1\n906,-1,1745.3,680.5,95.5,238.7,1\n906,-1,242.2,134.2,56.9,166.6,1\n906,-1,1503,2.4,57,139.3,1\n906,-1,253.7,1.2,54,119.1,1\n906,-1,312.6,1,48.4,131.3,1\n906,-1,422.1,62.5,51.5,177.8,1\n678,-1,1221.4,29.7,61.5,121.8,1\n678,-1,687.5,206.6,78.6,113.6,1\n678,-1,1480.9,4.5,60.9,145.3,1\n678,-1,1088.8,1,68.7,102.4,1\n678,-1,801,145.3,63.5,172.7,1\n678,-1,1491.8,157.8,52.2,175.7,1\n678,-1,563.8,111.6,49.6,178.8,1\n678,-1,484.2,131.4,45.2,170.7,1\n678,-1,360.4,115.4,49.9,167.6,1\n678,-1,314.9,356.2,68.4,212.3,1\n678,-1,1711,456.2,97.7,212,1\n678,-1,375,526,106.1,253.8,1\n678,-1,1574.9,589.3,96.8,234.6,1\n678,-1,1621,152.8,74.1,193,1\n678,-1,416.2,139.1,72,160.9,1\n678,-1,749.6,78.8,50.3,158.3,1\n678,-1,1374.8,862.9,102,218.1,1\n678,-1,1291,879.8,90.6,201.2,1\n678,-1,405,7.2,57.4,163.1,1\n678,-1,286.9,222.7,58.5,179.7,1\n678,-1,234.1,212.2,62.5,194.5,1\n678,-1,299.2,1,54.7,135.8,1\n678,-1,349.6,12,54.6,151.1,0.972\n678,-1,842,924.3,70.2,156.7,0.638\n619,-1,1221.9,29.2,62.2,119.5,1\n619,-1,687.2,206.2,78.8,113.5,1\n619,-1,1480.8,4.4,60.1,143.7,1\n619,-1,1627.5,208.6,77.2,194,1\n619,-1,801.8,144.5,66.2,172,1\n619,-1,1710.8,457.4,93.2,208.3,1\n619,-1,355.7,293.4,65.8,199.5,1\n619,-1,358.5,114.7,53.4,174,1\n619,-1,1575,589,95.7,236.6,1\n619,-1,555.5,113.2,54.4,175.4,1\n619,-1,288.8,128.3,51.2,168.2,1\n619,-1,174,239.2,72.4,203.3,1\n619,-1,243.1,251.7,63.6,188.2,1\n619,-1,571.7,543.2,78,241.9,1\n619,-1,753.8,81,44.1,152.5,1\n619,-1,495.9,88.8,47.6,159.2,1\n619,-1,226.4,135.9,53.5,162.2,1\n619,-1,354.2,1,52.6,118.8,1\n619,-1,1603.6,1.1,51.6,94.9,1\n619,-1,443.1,81.7,47.3,168.7,0.999\n619,-1,404.8,96.5,52.6,162.8,0.998\n619,-1,1109.4,909.3,108.1,171.7,0.997\n619,-1,1192,921,85.8,160,0.155\n240,-1,1220.5,30.5,63.4,119.2,1\n240,-1,686.2,206.7,79.6,113.1,1\n240,-1,1484.6,60.7,54,154.8,1\n240,-1,795.9,152.7,60.2,173.9,1\n240,-1,1590.2,1.9,57.2,140.3,1\n240,-1,1087.1,121,61.1,184.7,1\n240,-1,211.6,126.7,55.5,168,1\n240,-1,382.6,528,91.3,236.3,1\n240,-1,108.9,348.5,51,191.7,1\n240,-1,1167.1,122.7,52,163.2,1\n240,-1,288.4,126.9,56.1,172.3,1\n240,-1,704.4,1,55.3,158.5,1\n240,-1,185.3,711.3,91.4,255.9,1\n240,-1,445.4,176.2,74.7,209.7,1\n240,-1,355.6,104.4,54.7,181.4,1\n240,-1,926,120.2,72.3,186.9,1\n240,-1,1720.5,455.7,78.7,213.7,1\n240,-1,1362.6,566.6,108.5,244.8,1\n240,-1,498.4,356.1,72.1,220,1\n240,-1,222.3,478.1,59.9,205,1\n240,-1,517.2,118.2,51.2,181.1,1\n240,-1,843.6,337.6,82.2,198.7,1\n240,-1,785.7,332.6,81.7,206,1\n240,-1,590.3,364.6,62.2,200,1\n240,-1,108.8,564.6,87.1,238.7,0.997\n240,-1,932.7,895.9,72,185.1,0.987\n240,-1,149.1,666.2,65.6,208.1,0.25\n410,-1,1221.7,29.7,62.1,119.2,1\n410,-1,685.9,205.1,80.2,115.6,1\n410,-1,459.7,262.7,75.6,203.4,1\n410,-1,358.6,105.8,53.9,180.2,1\n410,-1,1653,55.8,68.2,170.1,1\n410,-1,1770.6,125,61.9,169.1,1\n410,-1,551.5,68.7,58.1,171.2,1\n410,-1,109.7,347.4,52.8,191.9,1\n410,-1,1719.9,453.8,79.1,209.9,1\n410,-1,411.8,611.4,74.4,235.9,1\n410,-1,946.4,16.7,61.7,171.3,1\n410,-1,285.6,129.6,54.8,166.3,1\n410,-1,1583.2,615.1,105.6,248.5,1\n410,-1,831,1,56.9,130.6,1\n410,-1,1209.9,494.5,60.9,205.4,1\n410,-1,1004.7,31.2,56.3,162.6,1\n410,-1,301.5,583.8,82.1,253.5,1\n410,-1,204.8,268.7,55.5,183.4,1\n410,-1,219.2,141.4,67.1,157.2,1\n410,-1,795.1,150.7,59.3,172.3,1\n410,-1,360.8,1,64.4,114.9,1\n410,-1,464.3,69.1,66.1,193.2,1\n410,-1,425.5,90.6,51.9,174.5,1\n410,-1,698.2,559,92.8,239.1,1\n410,-1,858.6,532.2,100.4,237.9,1\n410,-1,1860,66.3,61,181.6,1\n410,-1,718.2,1,51.2,135.9,1\n410,-1,930.3,548,81.4,223.5,1\n410,-1,711.5,91,63.7,169.3,0.999\n410,-1,426.7,1.6,41.7,111.2,0.972\n410,-1,979.7,920.3,82.6,160.7,0.666\n720,-1,1221.6,30,62,118.7,1\n720,-1,686.6,205.9,80.1,113.1,1\n720,-1,1480.2,8.4,58.9,143.7,1\n720,-1,551.4,114.1,59.9,176.2,1\n720,-1,1600.2,121.5,60.9,178.6,1\n720,-1,1574.5,590.8,99,231.4,1\n720,-1,1710.2,457.4,98.2,205.7,1\n720,-1,1475,114.1,52,178.5,1\n720,-1,390.1,549,97.1,244.3,1\n720,-1,479.5,161.6,50.5,180,1\n720,-1,300.3,404.7,73.8,219.2,1\n720,-1,413,173.1,68.2,162.6,1\n720,-1,261.3,192.8,56.9,197.4,1\n720,-1,749.9,82.9,49.1,151.8,1\n720,-1,312.7,202.4,63.9,178.1,1\n720,-1,1258.1,750.9,90.1,269.8,1\n720,-1,1179.3,778.8,85.5,266.2,1\n720,-1,416.3,37.9,62.4,166.9,1\n720,-1,789.3,136.8,49.4,180.5,1\n720,-1,361,111.7,47.5,168.1,1\n720,-1,466.7,17.5,48,138.5,1\n720,-1,236.6,131.6,49.4,172.1,0.998\n720,-1,961.6,2.4,65,74.8,0.276\n139,-1,1221.7,30.7,62.2,118.3,1\n139,-1,1049,137,83.2,176.4,1\n139,-1,389.9,746.4,99.9,266.4,1\n139,-1,356.8,103.4,55.7,182.5,1\n139,-1,1488,69,55.7,149.6,1\n139,-1,704.1,1,56.5,158.2,1\n139,-1,1721.7,457.3,78,210,1\n139,-1,287.5,125.4,54.8,170,1\n139,-1,685.8,206.7,81.8,115.6,1\n139,-1,1358.8,567.5,104.9,244,1\n139,-1,1192,168.7,52.3,164.6,1\n139,-1,537.5,64.7,51,164.2,1\n139,-1,878.6,209.6,82.4,193.5,1\n139,-1,423.4,267.1,74.6,227,1\n139,-1,109.3,351.8,48.4,184,1\n139,-1,477.4,180.8,62,171.9,1\n139,-1,219.9,128.2,51,161.2,1\n139,-1,381.5,1.1,48,133.9,1\n139,-1,1317,180.8,52.6,177.8,1\n139,-1,531.5,263.6,56.4,204.1,1\n139,-1,811.9,244.3,57,174.1,1\n139,-1,474.4,46.3,52.7,160.2,1\n139,-1,146.1,636,81.6,210.3,1\n139,-1,578,246.8,58.1,195,1\n139,-1,771.3,232.8,59.5,182.7,0.999\n139,-1,98.3,544.9,85.3,251.2,0.999\n139,-1,1068.6,927,79.7,154,0.961\n905,-1,1221.5,29.7,61.4,120,1\n905,-1,687,206.1,79.1,113.9,1\n905,-1,474.2,189.9,68.5,189.3,1\n905,-1,794,140.6,75.6,172.8,1\n905,-1,1432,1,49.5,146.5,1\n905,-1,302.7,683.5,95.2,259.4,1\n905,-1,1713.8,84,55.6,169.8,1\n905,-1,1483.7,106.4,58.3,149.7,1\n905,-1,1574,590.4,104.6,235.1,1\n905,-1,1722.5,453.6,75.9,214.3,1\n905,-1,1109.6,24.7,60.8,161.9,1\n905,-1,558,115.7,58.7,174.2,1\n905,-1,386.2,190.7,57.4,176.1,1\n905,-1,1596.8,55.1,53.8,163.7,1\n905,-1,302.6,161.8,69.3,199.5,1\n905,-1,327.9,351,85.8,186.1,1\n905,-1,752.7,73.7,55.7,159.4,1\n905,-1,470.8,4.7,49.4,150.1,1\n905,-1,874.4,435.6,67.3,225.1,1\n905,-1,1745.3,680,95.4,239.7,1\n905,-1,417.2,341.3,57.6,206.8,1\n905,-1,970.3,416.1,67.2,226.5,1\n905,-1,1503.4,2.7,56.8,138.9,1\n905,-1,1314.3,883.1,97,197.9,1\n905,-1,243.7,134.3,56,167.5,1\n905,-1,312.5,1.2,47.3,130.6,1\n905,-1,254.1,1.3,53.9,119.1,1\n905,-1,422.2,62.3,50.7,180.8,1\n268,-1,1221.5,30.9,62.1,119,1\n268,-1,687.8,206.2,77.6,112.3,1\n268,-1,379.1,483.5,90.2,230.6,1\n268,-1,289.4,128.1,56.7,172.1,1\n268,-1,378.1,8.7,60.8,160.4,1\n268,-1,1478.3,47.5,51.6,146.3,1\n268,-1,1633.4,20.6,62.1,146.6,1\n268,-1,454.2,156.7,75.3,210.9,1\n268,-1,1121.7,98.8,55.9,168.8,1\n268,-1,356.5,104.6,51.8,181.3,1\n268,-1,938.9,91.2,69.7,183.3,1\n268,-1,796.5,151.1,59.8,172.2,1\n268,-1,1721.5,457.1,77.1,212.2,1\n268,-1,108.4,351,50.6,189.3,1\n268,-1,705.1,1,53.9,156.5,1\n268,-1,233.2,435.9,60,199.5,1\n268,-1,217.5,125.1,55.8,168,1\n268,-1,1411.6,568,95.9,244.4,1\n268,-1,1047.7,105,60.3,184.5,1\n268,-1,702.2,328.5,69.1,195,1\n268,-1,252.5,762.1,90.3,279.6,1\n268,-1,870.9,373.2,77.8,199.4,1\n268,-1,804.4,358.6,87.7,219.5,1\n268,-1,173.1,568.6,86.4,254.5,1\n268,-1,479.5,387.6,73.2,223.4,1\n268,-1,514,117.1,54.1,173.4,1\n268,-1,869.9,105.2,44.3,159.4,1\n268,-1,567.9,398.9,64.7,214.4,1\n268,-1,755.2,101.3,48.3,172.2,0.999\n268,-1,937.8,915.3,84.6,165.7,0.894\n559,-1,1221.3,30.4,62.1,120.1,1\n559,-1,687,206.2,79.1,114.3,1\n559,-1,1487.4,3.5,59.1,146.4,1\n559,-1,1583.5,4.9,54.7,139.1,1\n559,-1,538.6,115,59.4,173.2,1\n559,-1,788.9,146.2,65.3,175.2,1\n559,-1,377,224.4,64.9,193.6,1\n559,-1,1664.4,272.8,78.6,200.3,1\n559,-1,1658.3,1.5,53.8,147.1,1\n559,-1,1720.3,454.4,81.6,212,1\n559,-1,872.2,1,53.6,109.6,1\n559,-1,195.7,293.7,67,191.7,1\n559,-1,1812.1,234.3,69.8,184.9,1\n559,-1,289,119.7,52.1,175.5,1\n559,-1,985.5,2.4,51.6,93.8,1\n559,-1,749.7,593.3,87.3,254.3,1\n559,-1,218.6,135.1,57.5,162.7,1\n559,-1,141.4,264.4,53.3,211,1\n559,-1,424.7,145,51.4,152.4,1\n559,-1,1596.4,588.5,72.7,241,1\n559,-1,753.9,79,47.6,156.6,1\n559,-1,461.9,87.7,65.6,184.2,1\n559,-1,358.6,107.8,53.9,171.9,1\n559,-1,243.4,897.3,82.1,183.7,1\n559,-1,1016.9,784.2,119.6,253.2,0.999\n559,-1,415.4,42.8,50.1,185.8,0.998\n559,-1,1095.6,797.8,90.3,248.1,0.984\n559,-1,929.7,2.7,53.2,92.7,0.771\n559,-1,1028,947.3,71.9,133.7,0.145\n480,-1,1221.9,30.7,62.5,117.7,1\n480,-1,686.6,206.1,79.6,114.3,1\n480,-1,1000.5,1,57.1,146,1\n480,-1,932.6,1,56.8,141,1\n480,-1,294.6,196.8,51.7,175.1,1\n480,-1,1680.6,457.3,121.8,211.7,1\n480,-1,1502.7,1,58.3,121.2,1\n480,-1,1788,147.1,79.1,187.5,1\n480,-1,876.2,1,53.8,132.9,1\n480,-1,452.4,169.8,73,193.8,1\n480,-1,1785.5,357.8,84.1,217,1\n480,-1,360.9,111.2,55.1,174.2,1\n480,-1,804.7,591.2,89.6,259,1\n480,-1,128.9,341.8,58.3,188.5,1\n480,-1,1537.9,594.1,78.3,247.6,1\n480,-1,219.7,137.2,61.7,160.2,1\n480,-1,221.1,706,92.8,264.2,1\n480,-1,803.2,143.6,47.8,178.5,1\n480,-1,1728.8,174.3,63.8,169.1,1\n480,-1,316.2,738.1,73.2,258.3,1\n480,-1,912,637.9,119.4,254.1,1\n480,-1,1634.7,334.4,63.3,202,1\n480,-1,1703.8,52.1,50.2,166.4,1\n480,-1,446.4,26.4,73.8,185,1\n480,-1,509,85.8,62.3,173,1\n480,-1,1650.9,41.6,56.6,174.4,1\n480,-1,411.7,7.6,45.2,155.2,0.999\n480,-1,713.5,92.5,55.6,163.7,0.999\n480,-1,753,97.5,53.4,141.8,0.998\n480,-1,420,152.6,55.7,181.6,0.994\n480,-1,991.5,664.6,77.2,216.8,0.713\n480,-1,1019.9,930.1,81.7,150.9,0.453\n196,-1,1221.8,31.1,61.3,118.8,1\n196,-1,687.5,207.1,78.2,111.6,1\n196,-1,48.1,635.6,115.3,248.5,1\n196,-1,211.1,127.4,56.4,166.6,1\n196,-1,108.3,347.6,50.3,189.8,1\n196,-1,704.3,1,56,159.5,1\n196,-1,1490.2,68.3,54.3,150.3,1\n196,-1,405.7,615.5,91.9,249.7,1\n196,-1,526.8,136.3,62.2,163.7,1\n196,-1,289.2,126.6,55.1,172,1\n196,-1,1720.8,457,77.8,211,1\n196,-1,355.6,104.4,55.3,181,1\n196,-1,1358,566.3,104.2,247.1,1\n196,-1,420.9,214.6,76.7,219.9,1\n196,-1,517.3,307.4,73.5,212.7,1\n196,-1,880.6,162.2,76.5,188.1,1\n196,-1,1055.4,140.8,49,157.9,1\n196,-1,394.5,40.1,62.5,167,1\n196,-1,801.1,301.6,71,187.2,1\n196,-1,795.8,151.7,59.8,171.2,1\n196,-1,1164,146.3,65,183.4,1\n196,-1,1223,142.5,50.8,172.3,1\n196,-1,231.6,544.1,61.7,212.8,1\n196,-1,750.6,285.5,70.8,205.4,1\n196,-1,463.4,4.3,50.2,91.7,0.997\n196,-1,972.4,915.3,72.9,165.7,0.963\n923,-1,1221.2,30.1,62.3,118.8,1\n923,-1,686.1,206.2,80.3,113.4,1\n923,-1,793.8,140.5,74.7,172.2,1\n923,-1,1122.9,43.3,58,165.6,1\n923,-1,1283.2,832,96.9,249,1\n923,-1,1476,111.3,62.5,163.6,1\n923,-1,1575.4,589.5,102.9,235.9,1\n923,-1,1722.7,456.6,77.8,207.3,1\n923,-1,1614.5,74.9,51.9,164.5,1\n923,-1,329.5,372.9,79.7,189.5,1\n923,-1,556.7,116.6,57,171.4,1\n923,-1,457,203.5,69.3,195.6,1\n923,-1,1428.9,2.4,48,129.7,1\n923,-1,750.3,73.9,56.2,160.4,1\n923,-1,300.5,161.3,70.9,201.8,1\n923,-1,1490.1,1,61.7,125.7,1\n923,-1,949.5,390.3,76.9,230.1,1\n923,-1,864.7,411.1,65.1,215.2,1\n923,-1,405.6,363.7,60.9,207.2,1\n923,-1,239.8,132.2,54.3,165.4,1\n923,-1,308.6,713.6,86.7,259.1,1\n923,-1,1747.6,678.3,94.7,244.5,1\n923,-1,1727.8,104,54.8,172.6,1\n923,-1,470.9,19.3,52.2,151.4,1\n923,-1,372.2,206.2,58.9,184.1,1\n923,-1,254.6,1.7,53.4,121.2,1\n923,-1,426.5,69.6,63.7,171.6,1\n923,-1,313,1.5,48,132.6,1\n161,-1,1221.8,30.6,62.2,118.5,1\n161,-1,984.1,130.7,81.3,171.4,1\n161,-1,1488.5,68.1,55.5,150.7,1\n161,-1,433.9,38.5,64.2,166.6,1\n161,-1,212.8,124.6,54.4,169.5,1\n161,-1,109.3,348.9,50.7,190.3,1\n161,-1,288.4,125.8,55,172.5,1\n161,-1,356.5,104.1,54.2,178.9,1\n161,-1,704.1,1,56.3,158.4,1\n161,-1,686.9,207.2,78.6,112.5,1\n161,-1,1721.7,456.9,77.5,212.2,1\n161,-1,1359.3,567.6,104.5,244.4,1\n161,-1,419.3,244.7,81.4,223.5,1\n161,-1,408.1,694.6,91.4,259.6,1\n161,-1,538.5,64.2,50.1,167.6,1\n161,-1,101.4,547.2,85.5,252.9,1\n161,-1,207.8,603.6,63.2,215.5,1\n161,-1,1141.9,157.6,49.8,165.2,1\n161,-1,388.6,3.7,48.3,116.9,1\n161,-1,528.5,274.8,65.4,213.7,1\n161,-1,801.3,271.9,63.7,178.2,1\n161,-1,752.2,253.9,68.5,198,1\n161,-1,497.1,207.9,57.7,168.1,1\n161,-1,1254.2,170.8,60.1,170.2,1\n161,-1,795.7,147.8,61.9,173.7,1\n161,-1,596.7,266.5,58.3,195.9,1\n161,-1,851.8,198.1,73.3,185.4,1\n161,-1,1028.6,906.1,72.8,174.9,0.987\n161,-1,566.4,150,64.8,193.9,0.542\n161,-1,1292.7,172.4,56.7,172.5,0.152\n641,-1,687,206.3,79.8,114,1\n641,-1,1221,32.6,62.6,116.7,1\n641,-1,1481.8,4.5,60.2,145.4,1\n641,-1,491.7,536,87.3,243.3,1\n641,-1,546.1,113.2,63.8,173.9,1\n641,-1,801.9,145.6,63.8,172.6,1\n641,-1,359.2,109.9,51.6,175.5,1\n641,-1,1709.3,455.3,98.4,213,1\n641,-1,339.4,315.2,68,207.5,1\n641,-1,1574,588.6,97.3,235.8,1\n641,-1,1622.1,192.4,67.3,189.8,1\n641,-1,265,241.7,56.7,185.5,1\n641,-1,207.7,227.1,62.2,201.7,1\n641,-1,751.8,80.5,45,156.9,1\n641,-1,415.2,1.7,61,147.4,1\n641,-1,420,117.5,55,155.2,1\n641,-1,287.3,127.8,50.7,168.4,1\n641,-1,461.7,95.3,50.4,177.3,1\n641,-1,354.2,1,52.8,132.6,0.997\n641,-1,490.4,64.1,43,158.3,0.974\n641,-1,237.8,135.1,43.3,162.5,0.512\n641,-1,1493.2,956.6,87.3,124.4,0.169\n225,-1,1221.5,30.4,61.4,119.3,1\n225,-1,794.7,148,63.2,177.4,1\n225,-1,685.9,206.7,80.1,114.2,1\n225,-1,391.5,558,95.9,241.9,1\n225,-1,1492.8,67.9,52.9,149.4,1\n225,-1,1192.9,128.9,44.9,162.8,1\n225,-1,431.8,188.9,74.7,216.2,1\n225,-1,108.7,347.5,50.4,191,1\n225,-1,211.9,126.1,55.2,169,1\n225,-1,705.5,1,55.3,160.2,1\n225,-1,356.5,105.4,53.8,181.1,1\n225,-1,288,126.2,55.7,173.4,1\n225,-1,1721.1,456,77.8,213.7,1\n225,-1,141.6,679.4,103.9,261.7,1\n225,-1,1357.8,567.9,104.1,244,1\n225,-1,1109.8,127.8,63.7,185.9,1\n225,-1,1573.5,1,55.5,141.3,1\n225,-1,517.7,122.9,48.4,174.9,1\n225,-1,903.1,136.2,78.6,184.6,1\n225,-1,508.2,339.6,71.5,217.6,1\n225,-1,216.9,499.9,60.5,203.9,1\n225,-1,769.9,315.2,75.3,202,1\n225,-1,829,324.6,73.2,190.9,1\n225,-1,979.5,123.6,39.4,152.2,1\n225,-1,75.4,628,99.5,241.8,0.999\n225,-1,594.5,346.4,60.1,198.2,0.998\n225,-1,938.6,907,71.7,174,0.994\n863,-1,1221.3,29.9,62,118.8,1\n863,-1,687.2,206.3,79.6,113.4,1\n863,-1,484.7,1.1,50.8,119.6,1\n863,-1,273.7,619.8,85.5,243.3,1\n863,-1,795.8,139.3,76.6,175,1\n863,-1,1474,71.7,60.7,152.2,1\n863,-1,1082.7,1,57.2,126.4,1\n863,-1,342.4,304.4,77.9,182.3,1\n863,-1,1682.9,38.2,53.1,164.9,1\n863,-1,1575,591.1,103.1,233.3,1\n863,-1,1721.4,453.4,78.3,213,1\n863,-1,476.1,151.6,60,183.8,1\n863,-1,752.7,70.5,55.2,164.2,1\n863,-1,991.8,489.8,90.2,239.3,1\n863,-1,558.4,116.6,59.5,174.1,1\n863,-1,254.5,1.2,53.9,120.4,1\n863,-1,298.9,159.4,72.1,198.6,1\n863,-1,431.1,295.9,56.4,196,1\n863,-1,1414.2,20.2,51.3,151.9,1\n863,-1,240.5,132.4,52.6,165.3,1\n863,-1,1576.1,19.3,48.7,139.5,1\n863,-1,416.1,152.9,60.3,176.7,1\n863,-1,913.8,506.3,71.4,234.6,1\n239,-1,1221.1,30.6,63.1,119.7,1\n239,-1,685.8,207,80.4,112.9,1\n239,-1,795.8,152.1,59.9,173.8,1\n239,-1,1485.8,62.6,53.8,153.3,1\n239,-1,1088.6,121,61.1,185.9,1\n239,-1,211.6,125.8,55.2,170.2,1\n239,-1,705,1,55.2,160,1\n239,-1,380.1,532.3,92,233.2,1\n239,-1,108.8,348,51.1,192,1\n239,-1,288.1,128,55.4,171.4,1\n239,-1,444.9,176.2,74.2,213.9,1\n239,-1,356.2,105.7,54,179.7,1\n239,-1,1361.1,567.4,107.9,243.4,1\n239,-1,1721.3,456.9,78.3,211.7,1\n239,-1,1169.4,124,50.9,161.7,1\n239,-1,1588.4,2.3,57.5,140.3,1\n239,-1,925.9,121.9,70.8,186.2,1\n239,-1,180.3,704.7,93.2,256.7,1\n239,-1,222.6,479.3,58.4,204.4,1\n239,-1,497.7,354,74.1,219.3,1\n239,-1,516.7,119.5,51.3,178.9,1\n239,-1,841.9,340.2,80.2,194.7,1\n239,-1,784.1,330.2,80.3,208.7,1\n239,-1,590,363.8,63.1,201.4,1\n239,-1,931.8,898.2,72.8,182.8,0.991\n239,-1,116.8,552.1,86.9,290,0.98\n265,-1,1221.3,31.1,62.2,118.7,1\n265,-1,287.8,129.6,57.7,170.5,1\n265,-1,688.2,206.5,77,111.6,1\n265,-1,453.6,155.8,74.9,214,1\n265,-1,381.5,485.3,90.2,235.6,1\n265,-1,1630.4,19.7,63.7,147.4,1\n265,-1,356.4,105.9,52.4,178.6,1\n265,-1,1721.4,457.7,77,211.2,1\n265,-1,797,154,59,172.3,1\n265,-1,1479.6,48.3,51.3,146.1,1\n265,-1,1126.7,99.4,55.2,167.3,1\n265,-1,705.2,1,54.2,157,1\n265,-1,108.8,350.4,49.8,189.2,1\n265,-1,937.4,93.4,69.9,183.9,1\n265,-1,1051.7,107.5,60.8,181.8,1\n265,-1,376.4,8.7,58.3,158.3,1\n265,-1,217.5,128.6,54.2,165.1,1\n265,-1,1406.1,565.2,97.7,248.1,1\n265,-1,231.5,443.6,60.6,194.5,1\n265,-1,695,320.8,61.8,184.3,1\n265,-1,248.7,763.4,89.9,272.9,1\n265,-1,869.7,371,78.1,194.3,1\n265,-1,163.1,567.6,86.1,247.2,1\n265,-1,802.9,353.8,85.8,214.2,1\n265,-1,512.5,118.4,56.2,174.4,1\n265,-1,481.9,383,74.5,222.7,1\n265,-1,875.9,110.6,44.1,151,1\n265,-1,755.7,102.5,47.6,169.5,0.999\n265,-1,569.8,394.2,63.9,210.8,0.999\n265,-1,939.9,918.3,82.1,162.7,0.956\n313,-1,1221.4,31.4,62.1,118.6,1\n313,-1,686.9,207.4,79,112.7,1\n313,-1,1457.4,8.2,54.5,144.9,1\n313,-1,416,37.9,60.6,171.9,1\n313,-1,1719.9,459.7,78.3,208.6,1\n313,-1,358.1,109.7,56.4,179.9,1\n313,-1,1698.8,48.1,58.3,161.8,1\n313,-1,1494.2,598.6,94.3,244.1,1\n313,-1,933.6,50.4,62.4,173,1\n313,-1,108.3,350.5,52.3,191.1,1\n313,-1,236.5,376.2,57.3,191.8,1\n313,-1,451.3,124.1,76.3,200.2,1\n313,-1,312.8,582,97.4,247.9,1\n313,-1,796.1,151.2,58.8,173.8,1\n313,-1,1000.9,77.7,62.7,180.9,1\n313,-1,278.5,130.2,55.7,172.5,1\n313,-1,888.4,432.3,73.8,196.9,1\n313,-1,216.8,130.6,55.9,165.9,1\n313,-1,704.9,3.2,53.9,156,1\n313,-1,526.4,459.1,68.8,223.6,1\n313,-1,1056,79,56.1,166.5,1\n313,-1,828.3,421.4,80.6,209.8,1\n313,-1,734,100.4,45.8,168.4,1\n313,-1,442.4,438.3,71.4,237,0.999\n313,-1,333.2,878.1,102.4,202.9,0.999\n313,-1,511.4,102.2,43.9,171.4,0.998\n313,-1,394.1,404.6,81.4,228.4,0.995\n313,-1,926.5,908.8,80.5,172.2,0.992\n214,-1,1220.7,30.2,62,119.7,1\n214,-1,686.8,207.1,79,113.2,1\n214,-1,356.7,106,52.1,179.3,1\n214,-1,705.2,1.3,55.6,159.2,1\n214,-1,211.8,126.1,56.1,166.5,1\n214,-1,1493,69.4,52.9,149.2,1\n214,-1,109.2,349.5,50.2,187.3,1\n214,-1,1356.8,567.7,103.7,245,1\n214,-1,404.2,580.6,84.4,247.2,1\n214,-1,288.7,128.3,54.4,170.4,1\n214,-1,1721.8,456.8,76.5,212.2,1\n214,-1,1132,134.1,62.1,188.4,1\n214,-1,900.5,143.6,71.8,186.4,1\n214,-1,106.9,667,101.9,247.7,1\n214,-1,794.8,152.7,59.9,167.7,1\n214,-1,1203.8,137.8,45.7,163.5,1\n214,-1,505.4,325.5,73.6,215.7,1\n214,-1,1005.8,132.2,49.1,158.2,1\n214,-1,427.4,199.9,75,216.5,1\n214,-1,223.7,518.4,59.8,207.2,1\n214,-1,521.5,125.1,49.2,175.6,1\n214,-1,845.2,110.3,58.7,171,1\n214,-1,812.6,321.4,75.3,189.3,1\n214,-1,20.7,609.5,107.9,242.2,1\n214,-1,566,265.4,57.9,178,1\n214,-1,758.1,304.1,75.4,207.3,0.999\n214,-1,947.5,910.4,73.2,170.6,0.979\n214,-1,103,557.3,64.7,186,0.06\n674,-1,1222.2,29,60.8,120.1,1\n674,-1,687.1,206.4,79.7,113.6,1\n674,-1,1481.6,6.5,59.9,142.5,1\n674,-1,563.8,110.7,50.2,177.3,1\n674,-1,315.2,353.5,69.4,210.9,1\n674,-1,481.6,124.4,47.9,173.5,1\n674,-1,391.3,528.2,94.1,251.9,1\n674,-1,801.3,144.2,64.1,174.6,1\n674,-1,360.6,116.3,48.9,164.4,1\n674,-1,1710.4,455.7,98.6,209.6,1\n674,-1,1573.8,589.1,98.9,234.8,1\n674,-1,1493.3,161.2,53.4,174.4,1\n674,-1,1623.1,155.1,75.9,189,1\n674,-1,415.7,134.4,74,163.4,1\n674,-1,1108.5,1.1,60.3,104.2,1\n674,-1,750.8,79.6,48.6,156.5,1\n674,-1,406.4,5.8,56.3,155.9,1\n674,-1,229.1,211.1,63.8,198.1,1\n674,-1,1392.2,866.1,96.9,214.9,1\n674,-1,1305,894.1,89.7,186.9,1\n674,-1,283.7,222.3,54.9,181.1,1\n674,-1,353.8,6.1,53.1,151.7,0.999\n674,-1,296.7,1,53.6,135.2,0.997\n674,-1,290.1,119.4,48.6,172.5,0.174\n719,-1,1221.7,30.5,61.5,118.3,1\n719,-1,687,205.9,79.2,113.8,1\n719,-1,1479.8,7.7,58.6,144.8,1\n719,-1,551.8,114.1,60.8,177.1,1\n719,-1,1712.8,457.5,94.1,206,1\n719,-1,1475.1,115.2,52.6,181.2,1\n719,-1,1599,120.8,63.3,181.4,1\n719,-1,479.9,161,50.6,181.4,1\n719,-1,390.1,547.8,95.7,244.6,1\n719,-1,1574.3,589.7,99.9,235.4,1\n719,-1,299.1,402.4,75.2,219.2,1\n719,-1,412.2,171.7,70,163.4,1\n719,-1,261,192.4,55.2,197.9,1\n719,-1,749.9,82.3,49.4,153.7,1\n719,-1,360.8,109.7,48.7,172.7,1\n719,-1,415.7,36.1,61.6,165.7,1\n719,-1,311.8,204.7,63.9,177.8,1\n719,-1,1263.2,755.4,90.5,264.1,1\n719,-1,1183.9,779.8,83,268.5,1\n719,-1,791.3,137.5,48.2,178.6,1\n719,-1,466.8,16.4,48,141,1\n719,-1,236.1,133.4,49.3,169.7,0.999\n719,-1,961.7,1,76.6,79.4,0.169\n209,-1,1221.9,30.5,61.5,119.9,1\n209,-1,686.9,207.2,78.3,113.1,1\n209,-1,211.5,127.4,55.6,165.8,1\n209,-1,355.7,107.1,54.4,179.5,1\n209,-1,397.6,589.8,90.6,247.4,1\n209,-1,705,1.2,55.3,160,1\n209,-1,1492.3,70.2,53.3,146.9,1\n209,-1,288.2,125.9,56,172.8,1\n209,-1,1721.8,456.2,77.1,212,1\n209,-1,109.9,350.4,49.4,185.4,1\n209,-1,1357.6,567.4,104.4,245.4,1\n209,-1,87.3,655.6,109.9,251,1\n209,-1,424.4,204.5,77.2,213.5,1\n209,-1,1205.7,141.7,50.9,164.6,1\n209,-1,506.3,320.5,74.8,215.9,1\n209,-1,795.1,150.9,61.1,171.5,1\n209,-1,226.7,521.6,60.9,209.6,1\n209,-1,521.7,129.5,51.8,167.9,1\n209,-1,897.7,150.4,68.1,192,1\n209,-1,1142,138.2,60.5,181.3,1\n209,-1,1019.5,133.1,46.1,156.8,1\n209,-1,807.6,312.6,75.2,191.8,1\n209,-1,1.4,614.1,102.1,232.4,1\n209,-1,559.9,262.5,54.5,182,0.999\n209,-1,755.4,300.5,72.3,202.1,0.999\n209,-1,858.7,108.3,55.9,172.2,0.999\n209,-1,377.2,37.2,58.2,167.2,0.999\n209,-1,954.6,914.5,75.5,166.5,0.993\n691,-1,1221.4,29.3,62.4,120,1\n691,-1,687,206.7,79.4,112.8,1\n691,-1,1481.5,5.5,59.2,147,1\n691,-1,1486.9,135.9,54.1,179,1\n691,-1,1612.2,144.7,69.3,182.8,1\n691,-1,563.2,112.1,51.4,177.8,1\n691,-1,803.7,145.7,53.8,170.2,1\n691,-1,370.6,531.8,92,251,1\n691,-1,1711.2,454.9,97.6,213.2,1\n691,-1,1575.8,589.5,96.2,235.3,1\n691,-1,421.7,144.9,63.7,166.7,1\n691,-1,749.7,79.4,50.2,158.1,1\n691,-1,361,113.9,49.7,172.6,1\n691,-1,487.5,132.1,46.6,181.6,1\n691,-1,309.1,376.9,67.4,206.1,1\n691,-1,248.6,201.2,59.4,197.9,1\n691,-1,1332,821.4,101.9,259.6,1\n691,-1,1254.7,851.4,86.5,229.6,1\n691,-1,224,134.4,53.3,162.1,1\n691,-1,300.4,214.7,59.2,180.4,1\n691,-1,480.2,32,48.1,144.1,1\n691,-1,406.2,21.1,55.8,161.4,1\n691,-1,1049.5,1,61.5,99.5,1\n691,-1,820.8,924.4,83.1,156.6,0.498\n929,-1,1221.8,29.7,61.3,119.9,1\n929,-1,686.4,206,79.9,113.7,1\n929,-1,794.3,140.5,74,171.9,1\n929,-1,453.1,213.8,68.5,188.2,1\n929,-1,1127.6,48.2,58.3,168.8,1\n929,-1,1487,1,62.4,125.3,1\n929,-1,1475.6,119.8,61.7,159.6,1\n929,-1,1272.9,817.1,98,263.9,1\n929,-1,1574.3,588.6,104.6,235.3,1\n929,-1,749.8,69.7,57,163.1,1\n929,-1,557.1,115.1,58.6,173.8,1\n929,-1,944.5,389.7,81.4,222.5,1\n929,-1,1719.2,454.2,80.5,213,1\n929,-1,1427.4,2.3,47.6,125,1\n929,-1,314.5,728.6,84.2,258,1\n929,-1,1619.7,77.9,54.5,165.5,1\n929,-1,301,161.7,68.6,199.1,1\n929,-1,253,1,55.2,120.4,1\n929,-1,402.4,370.1,62.1,206.8,1\n929,-1,330.3,375.1,77.7,198,1\n929,-1,863.1,406.2,63.6,215,1\n929,-1,473.1,24.1,53.9,152.9,1\n929,-1,239.6,131.9,54.7,167.8,1\n929,-1,1733.8,112.7,53.4,173.9,1\n929,-1,1750.1,680.9,88.8,246,1\n929,-1,367.5,213.4,63.5,181.7,1\n929,-1,426.5,65.7,62.7,181,1\n929,-1,313.7,2.1,47.1,126.4,0.996\n727,-1,1221.5,29.9,62.6,118.6,1\n727,-1,686.9,206,79.6,114.3,1\n727,-1,1470.6,111.1,54,171,1\n727,-1,551.5,111.4,59.4,178.3,1\n727,-1,1479.8,7.8,58.7,143.6,1\n727,-1,260.8,186.1,56.3,204.2,1\n727,-1,413.9,180.1,66.1,166.3,1\n727,-1,477.4,162.4,52.2,186.8,1\n727,-1,1712.3,454.8,96.9,210.7,1\n727,-1,1574,590.5,99,234,1\n727,-1,300.7,417.6,72.5,220.4,1\n727,-1,317.6,199.3,63.2,181.3,1\n727,-1,1597.7,112.6,59.4,181.9,1\n727,-1,402.2,552,96.3,249.1,1\n727,-1,786.2,138.5,51.3,177,1\n727,-1,1237.5,741.7,98.9,271.1,1\n727,-1,359.3,107.2,48.9,180.4,1\n727,-1,749.8,80.8,50.5,154.4,1\n727,-1,1165.1,762.6,80.6,255,1\n727,-1,424.5,41.8,57.2,167.1,0.999\n727,-1,320.2,1,51,133.7,0.999\n727,-1,465.3,8.6,46.6,142.6,0.999\n727,-1,236.6,136.6,54.2,170,0.997\n727,-1,260.7,5.1,45.5,117.9,0.067\n493,-1,1221.3,30.6,62.3,118.6,1\n493,-1,686.1,205.8,79.8,114.6,1\n493,-1,998.6,1,55.1,135,1\n493,-1,1498.5,1,57.4,126.6,1\n493,-1,1733.9,185.2,67.6,174,1\n493,-1,1815.3,172.7,74.3,185.6,1\n493,-1,803.2,604.4,92.5,256.6,1\n493,-1,1700.4,459.6,98.8,207.6,1\n493,-1,875,1,53.5,128.4,1\n493,-1,464.3,150.7,65.4,200.7,1\n493,-1,931.1,1,56,131.1,1\n493,-1,800.3,144.2,54.2,174.4,1\n493,-1,138.9,337.3,67.3,189,1\n493,-1,307.4,189.8,49.8,167.9,1\n493,-1,408,162.5,61.2,183.9,1\n493,-1,1691.7,41.8,54.4,167.3,1\n493,-1,1538.6,600.3,90.8,239.2,1\n493,-1,301.2,760.9,79,259.6,1\n493,-1,920.8,660.3,112.8,251.1,1\n493,-1,214.7,731.3,99.7,271,1\n493,-1,217.6,136.1,63.4,164.2,1\n493,-1,1631.8,29.1,58.6,175.4,1\n493,-1,713.9,94,60.3,163.7,1\n493,-1,1621.6,588.7,76.1,217,1\n493,-1,450.6,18.5,72.3,176.5,1\n493,-1,1628.7,324.6,61.3,197,1\n493,-1,1760.9,343.5,76.3,215,1\n493,-1,360.6,107.5,54.8,179.5,1\n493,-1,406.9,9.1,47.5,164.8,1\n493,-1,503.8,93.1,63.3,170,1\n493,-1,1009.9,677.5,80.2,236.9,0.997\n493,-1,288.4,129.3,50.8,170.8,0.995\n493,-1,753.8,97.9,43.5,141.3,0.406\n590,-1,1221.8,31.3,60.8,119.3,1\n590,-1,687.2,206,79.3,113.9,1\n590,-1,1481,4.6,60.8,144.3,1\n590,-1,800.4,144.1,65.8,173.7,1\n590,-1,1640.8,1,55.6,121,1\n590,-1,359.5,111,53.1,173.7,1\n590,-1,371,257.8,66.2,197.4,1\n590,-1,560.5,113.2,50.3,174.2,1\n590,-1,1651.3,238.4,78.9,205,1\n590,-1,225,275.4,63.3,185.7,1\n590,-1,288.7,125.6,52,170.2,1\n590,-1,1719.6,455.6,82.3,212.2,1\n590,-1,1574.6,589.2,94.6,234.5,1\n590,-1,471.7,110.4,49.8,163.7,1\n590,-1,163.6,251.7,59,206.9,1\n590,-1,754,81.9,43.4,152.9,1\n590,-1,214.3,134.3,54.9,164.3,1\n590,-1,428.4,63.6,45.7,176.3,1\n590,-1,872.1,1.8,50.8,99.2,1\n590,-1,1065.1,847.8,122.3,233.2,1\n590,-1,1857.2,270.6,63.8,171.4,1\n590,-1,298.1,895.7,103.5,185.3,0.681\n590,-1,1157.4,856.1,87.4,224.9,0.412\n760,-1,1221.8,29.7,61.6,119.5,1\n760,-1,686.7,205.9,79.6,113.5,1\n760,-1,544.8,115.7,65.9,177.3,1\n760,-1,1717,453.8,82,212.8,1\n760,-1,782.2,134.6,63.6,177.5,1\n760,-1,303.9,463.1,77.9,226.5,1\n760,-1,1575.2,590.2,100.5,234.5,1\n760,-1,1462.5,87,52.8,164.5,1\n760,-1,1582.8,88.7,62.5,176.7,1\n760,-1,267.2,180.8,57.8,200.3,1\n760,-1,329.7,192.4,56.6,180.3,1\n760,-1,459.5,189.3,54.4,188.2,1\n760,-1,1496,15,59.9,149.5,1\n760,-1,402.5,205.8,62.5,173.9,1\n760,-1,509.6,564.4,75.9,252.6,1\n760,-1,257.3,1.1,50.1,122.6,1\n760,-1,752.5,82.8,48.6,152.4,1\n760,-1,455.7,64.1,56.8,171.2,1\n760,-1,1156.9,666.5,92.8,270.7,1\n760,-1,1092.5,687.9,79,251.2,1\n760,-1,235.9,135.5,49.2,159.4,1\n760,-1,399.5,65.1,56.2,167,1\n760,-1,358.9,109.7,52.5,168,1\n32,-1,686.8,206.4,79.4,112.6,1\n32,-1,1206.3,29.6,73.4,121.6,1\n32,-1,387.2,373.3,90,238.4,1\n32,-1,704.3,1,56.2,157.8,1\n32,-1,1486.9,69.7,55.2,150,1\n32,-1,1361.2,566.8,105.7,244.4,1\n32,-1,1723.8,455.9,75.5,211.6,1\n32,-1,188.9,369.2,68.4,198.4,1\n32,-1,794.9,149.6,62.2,173.9,1\n32,-1,215.2,127.9,47.1,163,1\n32,-1,488.9,164.8,85.4,190.9,1\n32,-1,102,547.1,86.1,253,1\n32,-1,968.3,199.1,77.6,180.3,1\n32,-1,283.6,123.7,55,171.8,1\n32,-1,356.2,105.8,52.8,178.6,1\n32,-1,1833.6,248,68,190.8,1\n32,-1,869.1,141.7,57.3,182,1\n32,-1,1363.6,187.8,49.4,165.9,1\n32,-1,1.7,818.1,60.4,236.7,1\n32,-1,410.1,84.8,53.4,156.5,1\n32,-1,454.7,58.8,46.1,163.5,1\n32,-1,917.6,154.7,48,160.4,1\n32,-1,1590.7,233.7,55.9,177.5,0.999\n32,-1,1009.6,155.9,79,183.9,0.997\n16,-1,687.7,206.4,78,113.3,1\n16,-1,498,150.1,104.6,191.1,1\n16,-1,1203.6,33.5,72.7,119.7,1\n16,-1,1486.5,69.7,56,148.5,1\n16,-1,1361.6,567,105.3,244.8,1\n16,-1,704.4,1.5,56.9,157.5,1\n16,-1,794.7,149.9,61.6,174.8,1\n16,-1,1724.9,457.1,75.4,209.1,1\n16,-1,380.1,391.3,85.7,236.9,1\n16,-1,102.1,547.2,85.3,251.5,1\n16,-1,355.3,104.9,54.7,178.4,1\n16,-1,217.6,125.7,48.1,166.8,1\n16,-1,417.2,86.3,55.2,166.4,1\n16,-1,1807.7,225,65.9,186.4,1\n16,-1,1618.6,249.3,60.8,179.6,1\n16,-1,878.4,132.9,61.3,182.3,1\n16,-1,1034.1,207.1,75.2,175.5,1\n16,-1,284.9,124.3,53.8,171.6,1\n16,-1,207.4,382.3,65.1,194.5,1\n16,-1,461.6,67.1,48.4,173.9,1\n16,-1,1432.5,240.4,49.1,168.9,0.999\n16,-1,1393.4,188,52.9,178.3,0.999\n16,-1,246.5,367.4,53.5,197.7,0.723\n16,-1,1,845,42.7,236,0.491\n949,-1,686.3,206.1,80.2,113.5,1\n949,-1,1221.4,30.2,62.4,118.5,1\n949,-1,794.4,139.4,72.4,174.5,1\n949,-1,1473.9,133.6,63.6,170.2,1\n949,-1,1484.4,1,56.4,112.8,1\n949,-1,322.5,762.5,97.3,275.2,1\n949,-1,749.9,69.7,56.9,164,1\n949,-1,1245.6,763.2,91.6,270.3,1\n949,-1,1574.4,587.5,104.5,237.7,1\n949,-1,1141.3,68.3,59.4,173,1\n949,-1,934.1,357,69,215.5,1\n949,-1,1721,454.5,77.6,212.4,1\n949,-1,1636,100.7,53.3,171,1\n949,-1,553.6,117.7,53.9,168.5,1\n949,-1,394.8,385.3,65.3,214.7,1\n949,-1,322.9,405,80,200.3,1\n949,-1,1415.9,1,47.9,117.2,1\n949,-1,858.9,369.7,63.9,212.1,1\n949,-1,346.4,232.6,62.6,182.5,1\n949,-1,430.4,231.6,68,188.4,1\n949,-1,235.2,133.6,58.5,172.2,1\n949,-1,436.5,76.6,55.4,174.2,1\n949,-1,1744.1,674.1,93.3,251.2,1\n949,-1,478.7,37.7,54.7,152.9,1\n949,-1,250.2,1.8,53.5,119.6,1\n949,-1,479.9,218.5,61,182.7,1\n949,-1,1756.3,133,61.5,178.3,1\n949,-1,312.1,172.3,61.3,177.6,0.997\n949,-1,288.3,129.3,53,163.6,0.851\n749,-1,1221.5,30.4,62.2,118.5,1\n749,-1,686.7,206.1,79,113.5,1\n749,-1,1464.2,96.5,54.8,167.2,1\n749,-1,259.4,182.4,59.3,202.6,1\n749,-1,548.9,115.8,62.4,175.1,1\n749,-1,779.8,136.2,59.9,176.3,1\n749,-1,1576.4,588.7,98.8,234.4,1\n749,-1,1716.2,456.7,87.1,207.8,1\n749,-1,459.5,560.8,99.4,252.8,1\n749,-1,301.7,446.4,72.1,222.3,1\n749,-1,1492.7,15.4,58.5,141.3,1\n749,-1,1595.4,93.7,59.7,181.9,1\n749,-1,331.6,199.2,57.1,174.3,1\n749,-1,465.9,186.8,53.6,185.2,1\n749,-1,443.4,56.5,57.1,169.8,1\n749,-1,399.7,197.7,68.9,175.6,1\n749,-1,1112.2,712.7,80,261.4,1\n749,-1,749.8,82.3,50.4,151.1,1\n749,-1,1181.9,692.5,87.4,258,1\n749,-1,258.3,1,48.7,121.1,1\n749,-1,361,112.6,46.8,166,0.999\n749,-1,391,48.4,53.7,182.1,0.991\n749,-1,291.2,131.1,44.6,160.4,0.97\n749,-1,238.3,144.5,50.2,161.8,0.969\n299,-1,1221.7,32,60.7,117.8,1\n299,-1,1680.5,45.4,57.3,152.4,1\n299,-1,686.7,206.9,79.8,114.4,1\n299,-1,936.9,62.5,64.3,176.7,1\n299,-1,238,394.1,60,195.8,1\n299,-1,353.8,107.9,55,180.7,1\n299,-1,1720,459.8,78.6,209.3,1\n299,-1,1461.2,20,52.3,147.5,1\n299,-1,109.2,351.3,50.6,190.6,1\n299,-1,248.1,578.7,104.4,255.5,1\n299,-1,409,31.2,55.5,163.4,1\n299,-1,452.8,129.9,76.4,204.6,1\n299,-1,705,1,54.4,158.9,1\n299,-1,795,148.7,61.6,180.8,1\n299,-1,1008.8,87.5,60.7,183.9,1\n299,-1,283.7,131.1,53.3,171.3,1\n299,-1,218.4,130.4,59.7,167.4,1\n299,-1,533.6,442.3,70,217.1,1\n299,-1,1078.2,86.7,51.3,164,1\n299,-1,1469.4,593.9,91.6,240.3,1\n299,-1,382.9,425.2,84.1,227,1\n299,-1,741.3,102.8,47,171.2,1\n299,-1,820.4,395,91,217.5,1\n299,-1,887.5,412.8,74.1,201.1,1\n299,-1,302.2,843.4,100.7,237.6,1\n299,-1,512,104.6,48.2,175.2,0.999\n299,-1,461.4,423.8,63.3,230.5,0.999\n299,-1,937.9,912.9,68.2,168.1,0.937\n299,-1,832.2,110.8,46.9,150,0.585\n814,-1,1221.3,29.7,62.7,119.2,1\n814,-1,687.6,205.4,78.1,114.6,1\n814,-1,788.8,134.3,58.4,176.2,1\n814,-1,1622.9,1.3,58.7,146.6,1\n814,-1,554.9,116.9,63.7,173.6,1\n814,-1,1723.6,453.3,74.7,214.1,1\n814,-1,1577.7,594,97.5,232.6,1\n814,-1,276,538.7,77.4,241.7,1\n814,-1,440.9,238.4,54.5,197,1\n814,-1,280,165.6,63.3,198.4,1\n814,-1,474.2,108.7,63.4,178.2,1\n814,-1,1471.8,33.6,64.1,157.7,1\n814,-1,379,259.7,71.7,177.3,1\n814,-1,234.5,135.4,51,164.7,1\n814,-1,751,73.1,57.8,159.3,1\n814,-1,988.4,586.6,70.1,246.7,1\n814,-1,347.1,179.6,52.1,172.1,1\n814,-1,1431.1,53.4,50.9,157.1,1\n814,-1,1062.1,563.9,72.6,248.9,1\n814,-1,425.8,108.2,60.5,167.1,0.998\n309,-1,1220.8,30.9,61.9,118.8,1\n309,-1,686.4,207,79.2,113.2,1\n309,-1,1457.2,11.3,54.7,146.2,1\n309,-1,415.6,35.5,59,164,1\n309,-1,1718.8,457.3,81.4,212.4,1\n309,-1,1693.3,46.6,58.6,159.6,1\n309,-1,303.4,581,84,247.5,1\n309,-1,108.6,353.1,52.1,186.5,1\n309,-1,357.7,112,55.4,174.6,1\n309,-1,934.3,54,63.3,171.9,1\n309,-1,795.5,146.9,59.3,177.4,1\n309,-1,235.1,384.6,59.2,190.2,1\n309,-1,453.8,123.8,73.1,204.2,1\n309,-1,1486.6,597.5,89.8,242.6,1\n309,-1,1001.2,80.7,62,183.3,1\n309,-1,530.5,454.2,66.8,213.6,1\n309,-1,705.5,1,52.8,158.9,1\n309,-1,216.9,130.3,55.1,165.5,1\n309,-1,278.8,131,56,172.4,1\n309,-1,889,426.4,70.4,194.8,1\n309,-1,1060.6,80.3,54.7,167.6,1\n309,-1,326.9,868.9,90.2,212.1,1\n309,-1,734.7,98.5,45.6,169.2,1\n309,-1,827.9,417.1,81.3,212.1,1\n309,-1,445.7,436.8,69.5,235.3,0.999\n309,-1,392.8,404.6,82.4,234.7,0.999\n309,-1,511.4,103.8,44.2,171.7,0.997\n309,-1,367.7,788.6,98.1,276.9,0.996\n309,-1,928.8,910.5,78,170.5,0.995\n924,-1,1221.3,30.9,62.2,117.9,1\n924,-1,686.2,206.3,80.3,113.1,1\n924,-1,794.1,140.5,75,172.2,1\n924,-1,1280.1,831.2,97.6,249.8,1\n924,-1,1125.1,44.6,56.3,163.6,1\n924,-1,1574.2,588.5,103.9,237,1\n924,-1,1475.7,112.6,62.1,162.7,1\n924,-1,457.8,201.9,68.8,198,1\n924,-1,1721.6,453.4,77.4,212.6,1\n924,-1,557,116.4,58,172.5,1\n924,-1,1616.3,76.1,52,164.6,1\n924,-1,750.9,73.4,56.3,160.1,1\n924,-1,1428.5,2.1,48.2,128.4,1\n924,-1,300.1,161.5,71.7,201.6,1\n924,-1,1489.8,1.1,60.9,124.6,1\n924,-1,405,366.2,61.1,207.8,1\n924,-1,329.7,373.6,78.2,188.3,1\n924,-1,946.9,392,81.9,228.8,1\n924,-1,308.6,716,88.3,259.1,1\n924,-1,239.8,131.6,54.3,165.9,1\n924,-1,864,411,65.1,217.3,1\n924,-1,471.3,20.5,52.9,152.8,1\n924,-1,1729.1,103.3,55.1,175.7,1\n924,-1,1748.8,678.3,93.8,243.9,1\n924,-1,371.8,206,58.8,186.5,1\n924,-1,255.3,1.8,53.1,120.8,1\n924,-1,424.3,67.2,65.1,175.2,1\n924,-1,313.5,1.6,47,130.3,1\n575,-1,1221.5,30,61.7,119.5,1\n575,-1,687,205.6,79.1,114.3,1\n575,-1,1481.4,4.5,59.7,145,1\n575,-1,377.4,238.3,68.1,198.4,1\n575,-1,796.8,149.4,66.3,167.2,1\n575,-1,1650.4,1,56.4,135.4,1\n575,-1,1715.9,453.5,85.3,213,1\n575,-1,551.9,114.1,51.9,171.8,1\n575,-1,1833.8,255.8,71.1,181.4,1\n575,-1,219.6,133.9,51.6,160.9,1\n575,-1,1656,254.1,72.1,203,1\n575,-1,452.5,123.1,50.4,163.4,1\n575,-1,288.4,121.3,51.9,173.9,1\n575,-1,754.2,79,43.9,155.6,1\n575,-1,873.6,1,51.7,104.6,1\n575,-1,209.8,279.2,63.4,193.5,1\n575,-1,1580.2,588.7,88,235.5,1\n575,-1,151.9,255.5,61.9,211.5,1\n575,-1,1036.1,815.5,133.9,265.5,1\n575,-1,358.5,107.6,54.8,177.2,1\n575,-1,717.2,580.2,83,255,1\n575,-1,423.5,62.3,45.8,164.8,0.998\n575,-1,251.3,926.2,82,154.8,0.83\n575,-1,1005.6,939.1,75,141.9,0.786\n575,-1,1122.4,834.7,89.7,237.2,0.055\n30,-1,686.9,206.1,79.4,113.2,1\n30,-1,1205.5,29.9,73,120.3,1\n30,-1,386.1,374.6,87.3,240.2,1\n30,-1,1361.1,566.3,105.2,246,1\n30,-1,1486.4,69.3,56,149.3,1\n30,-1,703.9,1.8,56.2,157.1,1\n30,-1,1724.2,456.2,75.9,212.1,1\n30,-1,794.6,149.3,63,175.2,1\n30,-1,215,128.7,48.2,163.8,1\n30,-1,492.7,165.6,85.3,189.6,1\n30,-1,976.9,198.7,76.9,178.5,1\n30,-1,193.4,373.7,66.2,195.8,1\n30,-1,102.2,546.4,85.9,254.4,1\n30,-1,1831.7,245.1,63.4,187.5,1\n30,-1,355.7,105.4,54.2,182.2,1\n30,-1,284,123.7,54.6,173.2,1\n30,-1,871.4,139.6,57.5,184.2,1\n30,-1,411.2,83.3,52.5,158.4,1\n30,-1,1368.9,190.3,46,168.2,1\n30,-1,1,824.1,58.7,233.9,1\n30,-1,455.6,58.7,47.8,162.4,1\n30,-1,1594.9,236.9,55.2,184,1\n30,-1,915.8,153.9,50.8,163.1,0.999\n30,-1,1013.7,155,74.3,182.9,0.932\n854,-1,1221.1,29.8,62.6,118.5,1\n854,-1,687,206.1,79.2,114.1,1\n854,-1,796.7,140.1,76.5,175,1\n854,-1,488.7,1,49.6,114.8,1\n854,-1,1669.4,31.1,52.6,160.5,1\n854,-1,559.1,116,59.9,175.1,1\n854,-1,1574.9,591.2,103,233.9,1\n854,-1,1720.8,454.3,79,210.9,1\n854,-1,1073.3,1,60.8,119.1,1\n854,-1,343.4,299.3,77.6,176.2,1\n854,-1,1471.8,61.5,59.6,159,1\n854,-1,268.5,608,82.4,242.1,1\n854,-1,1412.1,28.2,52.5,153.2,1\n854,-1,297.8,160.5,72.4,197,1\n854,-1,753.4,71.4,54.2,162.6,1\n854,-1,434.9,282.6,54.3,201,1\n854,-1,253.2,1,56,122.2,1\n854,-1,238.9,131.5,54.7,166.4,1\n854,-1,924.8,517.5,70.7,230.2,1\n854,-1,472.8,139.9,61.9,189.8,1\n854,-1,1003.7,494.6,79.6,240.6,1\n854,-1,416.2,142.6,59.9,171.7,1\n1002,-1,1221.4,30,61.5,119.1,1\n1002,-1,685.9,206.4,80.8,112.3,1\n1002,-1,794.3,139.5,73.6,173.6,1\n1002,-1,504.3,269.7,64.1,188.5,1\n1002,-1,1203.9,139.5,65.1,175.8,1\n1002,-1,1474.8,184.5,62.9,157.5,1\n1002,-1,1677.3,165.2,59.6,173,1\n1002,-1,231.5,136.7,54.7,167.7,1\n1002,-1,393.8,288.1,72.9,196,1\n1002,-1,290.2,126.3,51.1,168.8,1\n1002,-1,1809.6,199.8,68.3,187.1,1\n1002,-1,1575.4,590.4,103.6,234.5,1\n1002,-1,1721.9,453.6,76.6,216.5,1\n1002,-1,309.3,280.3,65.2,195,1\n1002,-1,926.7,282.9,68.6,210.3,1\n1002,-1,751.1,73.4,55.3,160.9,1\n1002,-1,540.6,120.8,60.8,169,1\n1002,-1,301.3,472.1,84.5,208.2,1\n1002,-1,842.1,294.3,65.5,205.9,1\n1002,-1,1173.5,632.5,87.6,262.4,1\n1002,-1,341.9,875.1,88.9,205.9,1\n1002,-1,1741.9,674.4,91.3,249.3,1\n1002,-1,381.9,458.9,68.7,221.7,1\n1002,-1,314.2,1.3,43.5,129.7,1\n1002,-1,438.1,65.7,62.1,173.5,1\n1002,-1,597.5,550.5,107.1,247.9,1\n1002,-1,508.7,87,51.1,150.8,0.999\n1002,-1,395.9,169.9,73.4,183.7,0.999\n1002,-1,381.7,1,55.1,148.7,0.072\n253,-1,1220.4,30.8,62.7,118.7,1\n253,-1,1610,6.3,63.4,150.7,1\n253,-1,686.3,206.8,80,113.4,1\n253,-1,287.5,128.3,56.3,171.2,1\n253,-1,211.4,126.9,56.6,167.2,1\n253,-1,1480.5,56.9,53.8,150.3,1\n253,-1,393,508.8,85.7,238.5,1\n253,-1,356.6,106.9,52.8,179.6,1\n253,-1,797.9,153.6,59.2,175.2,1\n253,-1,1720.3,457.4,78.8,211.7,1\n253,-1,108.2,349.7,51.1,191.1,1\n253,-1,225.2,458,60.6,202.6,1\n253,-1,1148.4,111.2,51.3,164.6,1\n253,-1,1382.8,566.5,105.3,243.5,1\n253,-1,449.3,169.7,78,209.7,1\n253,-1,704.1,1,54.8,157.3,1\n253,-1,936.2,109.7,70.8,181.6,1\n253,-1,223.3,736.5,90.7,262.1,1\n253,-1,1070.6,114.9,56.9,178.6,1\n253,-1,130.7,576.3,85.4,229.6,1\n253,-1,858.1,355.8,77.9,195.5,1\n253,-1,487.4,369.2,74.7,229,1\n253,-1,792,350.6,83.1,206.3,1\n253,-1,513.6,117.3,55.1,177.9,1\n253,-1,579.7,379.9,65.9,210.9,1\n253,-1,898.8,110.3,48.2,154.5,1\n253,-1,762.7,98.7,51.2,173.6,1\n253,-1,930.8,906.4,76.4,174.6,0.99\n253,-1,362.7,1,59.2,170.2,0.916\n912,-1,1222.1,29.9,61.1,118.9,1\n912,-1,687.3,206.2,78.7,113.3,1\n912,-1,469.2,203.5,67.9,188.7,1\n912,-1,794.2,140.3,75.5,172.5,1\n912,-1,1431.7,1,49.3,139.9,1\n912,-1,1110.7,34.3,63.6,162.9,1\n912,-1,558.6,115.7,57.1,172.6,1\n912,-1,1575.3,590.6,103.4,234.2,1\n912,-1,1301.1,869.6,96.2,211.4,1\n912,-1,1721.9,452.2,77,215.3,1\n912,-1,307.4,696.3,89.8,267.7,1\n912,-1,1478,106.8,61.9,155.2,1\n912,-1,413.7,347,58.9,208.7,1\n912,-1,328.5,359.6,83.6,194.7,1\n912,-1,871.7,430.1,62.9,219.1,1\n912,-1,752.4,73.9,55.3,160.1,1\n912,-1,1718.2,90.5,55.7,173.6,1\n912,-1,301.4,163,70.2,200.3,1\n912,-1,1601.8,64.3,52.6,161.9,1\n912,-1,378.2,195.2,58.6,178,1\n912,-1,241.2,133.8,56.8,165.3,1\n912,-1,1746.3,680.1,96.6,242.1,1\n912,-1,470.1,13.2,49.9,148.9,1\n912,-1,422.2,66,58.1,174.2,1\n912,-1,965,412.1,64.5,225.7,1\n912,-1,1501.7,2.6,58.5,134.7,1\n912,-1,253.9,1.4,53.9,118.8,1\n912,-1,312.7,1,48.3,133.6,1\n732,-1,1221.6,29.7,62,119.3,1\n732,-1,686.8,205.7,79.1,114.6,1\n732,-1,1479.6,5.6,59.9,148.4,1\n732,-1,257.8,185.5,58,203.7,1\n732,-1,1470.9,111.2,51.5,166.7,1\n732,-1,406.1,187.6,73.5,162,1\n732,-1,551.7,111.9,58.9,181.3,1\n732,-1,297.8,423.2,76.1,223.3,1\n732,-1,1226.8,731.9,94.3,271.5,1\n732,-1,415.9,553.3,92.4,250.3,1\n732,-1,1711.3,455.4,96.9,208.6,1\n732,-1,1574.9,589.6,98.5,234.8,1\n732,-1,783.8,137.3,55,177.7,1\n732,-1,476.8,167.5,49.2,182.9,1\n732,-1,1597.9,104.7,58.8,181.6,1\n732,-1,322.1,197,61.5,181.6,1\n732,-1,750.4,83.5,50.6,151.5,1\n732,-1,360.6,108.7,48.3,174.9,1\n732,-1,429.3,41.8,59.6,171.4,1\n732,-1,1152.5,750.8,82.2,261.7,1\n732,-1,318.4,1,50.5,131.6,0.999\n732,-1,239,142.6,54.3,173.3,0.96\n968,-1,686.1,206.4,80.1,113.1,1\n968,-1,793.1,140.6,73.8,172.3,1\n968,-1,1221.9,31.4,61,119.6,1\n968,-1,1153.9,96.6,66.6,168.5,1\n968,-1,1649.9,122.7,58.2,171.6,1\n968,-1,1770.4,156.5,67.7,185.1,1\n968,-1,1472.6,151.6,64.8,165.4,1\n968,-1,927.3,326.6,71.6,216.6,1\n968,-1,415.3,247.5,72.7,196.7,1\n968,-1,1574.8,589,103.1,236.3,1\n968,-1,490.8,233.1,65,183.6,1\n968,-1,751.3,71.2,56.2,164.1,1\n968,-1,1720.6,453.6,78.7,213.1,1\n968,-1,329.8,798.4,91.4,275.3,1\n968,-1,307.7,429.1,87.3,199.6,1\n968,-1,443,70.9,57.3,178.9,1\n968,-1,229.9,137.6,55.9,162.8,1\n968,-1,550,119,53.6,169.3,1\n968,-1,1213.9,722.2,92.1,259.7,1\n968,-1,331.1,244.8,64.4,196.2,1\n968,-1,847.6,342.3,65.1,206.8,1\n968,-1,1401.2,1.8,46.8,101.5,1\n968,-1,1455.5,1,63.8,103,1\n968,-1,390.4,414.3,67.4,214.8,1\n968,-1,1740.2,673.5,95.7,252.2,1\n968,-1,313.4,1,48.1,130.1,1\n968,-1,289.2,126,54.8,169.8,1\n968,-1,484.5,52.8,54.5,159,0.999\n968,-1,382.1,1.1,53.4,127.8,0.997\n968,-1,326.5,162.5,63.1,155.1,0.052\n561,-1,1221.3,30.2,62.2,120.1,1\n561,-1,687.2,206.2,79,114.1,1\n561,-1,1485.2,3.3,59.8,147,1\n561,-1,1663.5,270.5,77.8,203.6,1\n561,-1,789.4,145.3,65.1,176.4,1\n561,-1,1581.7,3.7,55.5,140,1\n561,-1,376.5,226.4,64.9,193.2,1\n561,-1,540.1,115.7,59.5,173.1,1\n561,-1,1720.5,453.9,81.2,212,1\n561,-1,1816.6,235.6,70.4,186.1,1\n561,-1,872.6,1,53.8,108.6,1\n561,-1,198.2,291.5,66.4,190.3,1\n561,-1,1658.3,2,52,144.4,1\n561,-1,142,260.5,55,211.1,1\n561,-1,218.9,135.1,57.5,163.5,1\n561,-1,984,3.7,53,93.5,1\n561,-1,289,121.8,52.4,171.8,1\n561,-1,754.6,78.8,47.2,155.7,1\n561,-1,1598,588.5,69.8,237.8,1\n561,-1,745.7,590,80.8,252.4,1\n561,-1,428.9,140.9,51.5,156.2,1\n561,-1,358.5,108.2,52.2,171.6,1\n561,-1,463,90,64.4,175.3,1\n561,-1,245.1,903.1,78.8,177.9,1\n561,-1,417.3,49.2,49.7,174.6,0.999\n561,-1,1018.1,783.4,118.2,268.4,0.999\n561,-1,1099.6,804,90.5,235.8,0.993\n561,-1,1025.2,950.3,69.2,130.7,0.638\n541,-1,1221.4,30.6,62.2,120,1\n541,-1,687.3,206.2,78.3,113.7,1\n541,-1,1488.5,2.9,58.1,141.9,1\n541,-1,780.1,144.8,65,174.5,1\n541,-1,387,206.2,63.5,193.7,1\n541,-1,1717.5,457.4,82,208.5,1\n541,-1,1681.7,290.2,75.1,202.7,1\n541,-1,878.5,1.5,53,111.9,1\n541,-1,289.9,125.8,52.9,171.5,1\n541,-1,991.7,1.4,53.2,106,1\n541,-1,1661,2.7,53.5,159.8,1\n541,-1,176.2,307.1,65.5,193.2,1\n541,-1,1776.7,227.4,69.3,178.8,1\n541,-1,791.7,598.5,83.2,257.6,1\n541,-1,456,107,69,185.5,1\n541,-1,1599,1,54.3,158,1\n541,-1,523.5,104.7,60.7,177.5,1\n541,-1,216.5,135.3,61.8,162.4,1\n541,-1,1590,583.4,67.4,242.7,1\n541,-1,927.1,1,56.4,106.1,1\n541,-1,197.8,808.1,99.8,272.9,1\n541,-1,360,111.8,52.2,171,0.999\n541,-1,261.8,846.5,77.1,234.5,0.999\n541,-1,407.7,47.3,48.8,156.6,0.999\n541,-1,130.8,275.1,51.6,210.7,0.988\n541,-1,1061.7,765.2,88.2,248.9,0.984\n541,-1,980,754.8,131.5,248.7,0.974\n541,-1,756.2,84,46.1,153.1,0.95\n541,-1,452.2,6.4,63.4,160.9,0.104\n1038,-1,1222.3,30.2,61,118.6,1\n1038,-1,686.8,206.9,79.8,114.5,1\n1038,-1,794,141.4,70.8,172.7,1\n1038,-1,483.9,313.7,75.2,198.4,1\n1038,-1,1719.4,455.5,80.4,215.3,1\n1038,-1,1280.3,186.2,64.5,165.1,1\n1038,-1,288.8,127,52.4,170.3,1\n1038,-1,232.5,138.1,55.2,165.7,1\n1038,-1,1129,563.2,91.1,254.2,1\n1038,-1,937.3,238.7,66.7,205.3,1\n1038,-1,364.8,326.5,73.6,190.7,1\n1038,-1,751.5,74.9,53.5,162,1\n1038,-1,849.3,251.4,64.2,198.2,1\n1038,-1,282.2,529.8,93.6,210.7,1\n1038,-1,1710,204.5,61,179.8,1\n1038,-1,293.6,317.1,68.9,206.8,1\n1038,-1,374.9,505.2,66.2,234.1,1\n1038,-1,1574,588.3,104.1,242.4,1\n1038,-1,1469.2,210.6,72.9,166.8,1\n1038,-1,1671.1,675.8,82.8,237.6,1\n1038,-1,444.1,172.9,65,165.4,1\n1038,-1,372.1,105.2,57.7,176.2,1\n1038,-1,1854.4,240.2,65.2,200.2,1\n1038,-1,580.7,538.2,69.5,253.4,1\n1038,-1,308.1,2.6,36.4,127.4,1\n1038,-1,496.2,169.5,70.6,189.6,0.999\n1038,-1,538.1,117.2,60.7,179.3,0.998\n1038,-1,431.1,68.5,63.4,207.5,0.924\n659,-1,1220.7,28.6,62.9,121.1,1\n659,-1,687.4,206.2,79.3,113.8,1\n659,-1,1481.2,4.7,60.6,144.3,1\n659,-1,1148.4,2.9,71.4,114.7,1\n659,-1,550.3,111.4,61,176,1\n659,-1,1710.9,455.7,97.2,209.4,1\n659,-1,801.7,145.1,64.6,172.8,1\n659,-1,359.2,114.6,50.1,168.8,1\n659,-1,326.4,332.1,70.7,209.3,1\n659,-1,1612.6,170.8,78.1,185.3,1\n659,-1,1575.5,588.7,96.6,236,1\n659,-1,444.1,529,79.3,250.2,1\n659,-1,409,1.5,57.2,153.9,1\n659,-1,751.3,80.5,46.5,154.8,1\n659,-1,425.6,122.4,59.1,161,1\n659,-1,474.9,108.9,47.1,177.1,1\n659,-1,222.6,215.6,58.1,202.9,1\n659,-1,273.7,232.2,58.1,181.4,1\n659,-1,1428,907.4,93.7,173.6,1\n659,-1,352.7,1,53.6,143.9,1\n659,-1,287.3,123.4,53.1,174.4,0.999\n659,-1,1354.6,927.4,83.6,153.6,0.977\n945,-1,1221.1,30.2,62.7,119.8,1\n945,-1,686.5,206.2,79.9,113.4,1\n945,-1,1485,1,59.1,115.5,1\n945,-1,793.1,140.7,75.4,172.9,1\n945,-1,1476.4,129.7,60.2,164.1,1\n945,-1,1574.8,588.4,104.4,238.2,1\n945,-1,323.6,756.2,95.4,270.4,1\n945,-1,1134.5,68.5,62.6,169.5,1\n945,-1,749.8,71.4,57.1,161.8,1\n945,-1,1629.8,93.4,56.9,168.8,1\n945,-1,350.7,227.3,60.8,180.6,1\n945,-1,553.4,116.7,57.6,172.3,1\n945,-1,1719.8,453.7,79.4,213,1\n945,-1,437.2,227.5,66.2,194,1\n945,-1,236.4,132.2,58.8,172.6,1\n945,-1,938.2,362,67.7,220.2,1\n945,-1,1417.5,1,46.7,118.7,1\n945,-1,1249.4,775.3,94.7,286.2,1\n945,-1,325.5,397.7,82,199,1\n945,-1,858.4,378.9,64.3,216.2,1\n945,-1,396,384.5,63.7,217.2,1\n945,-1,253.4,1,53.5,119.6,1\n945,-1,1748.9,133.7,59.6,173.6,1\n945,-1,477.7,38.1,52.8,150.4,1\n945,-1,1744.7,675.2,92.2,250.7,1\n945,-1,435.3,77.2,55,176,1\n945,-1,309.4,164.2,62.7,193.3,1\n945,-1,477.5,215,63.2,184.3,0.999\n801,-1,1221,29.4,62.5,119.4,1\n801,-1,687.2,205.6,79,113.9,1\n801,-1,287,525,77.1,238.1,1\n801,-1,1723.9,451.9,74.9,215.2,1\n801,-1,783.6,131.8,51.1,179.9,1\n801,-1,548.9,113.3,62.9,177.6,1\n801,-1,1574.2,589.9,101.4,235.4,1\n801,-1,1612.7,1,56.2,129.6,1\n801,-1,479.2,93.6,62.3,177.4,1\n801,-1,278.2,166.6,60.1,195.4,1\n801,-1,1479.9,29.6,60.7,151.2,1\n801,-1,232.1,134.5,52.1,167.5,1\n801,-1,387.8,242.6,70.4,175.3,1\n801,-1,750.4,71,56.2,161.6,1\n801,-1,254.6,1.3,53.1,122.2,1\n801,-1,440.6,231.6,57.6,195.5,1\n801,-1,1077.5,586.5,88.3,252.3,1\n801,-1,346.9,181.1,49.2,178.3,1\n801,-1,422.6,95.8,56.6,168.1,1\n801,-1,1009.9,614.1,77.2,247.6,1\n801,-1,1441.8,57.3,48.9,157.6,1\n801,-1,444.4,1,41.8,87.1,0.999\n801,-1,611.4,580.1,88.2,234.2,0.962\n391,-1,1222.4,31.1,61.1,118.6,1\n391,-1,686.3,206.3,79.6,113.3,1\n391,-1,1637,28.1,73.2,175.1,1\n391,-1,359.1,106.5,54.9,178.7,1\n391,-1,366.5,1.7,63.4,101.5,1\n391,-1,1125.6,469.6,78.3,201.5,1\n391,-1,1773.5,109.1,68.3,165.4,1\n391,-1,828.3,1,55,120.3,1\n391,-1,446.8,284.5,82.6,210.8,1\n391,-1,438.3,573.8,72.5,234,1\n391,-1,323.4,554.8,95.4,249.7,1\n391,-1,108.8,349,53,191.7,1\n391,-1,794.7,151.8,59.7,171.5,1\n391,-1,457.8,72.1,68.6,193.8,1\n391,-1,219.5,142.7,59.9,155.4,1\n391,-1,948.9,25.4,64.4,175.7,1\n391,-1,282.2,126.9,55.5,167,1\n391,-1,207.6,287.5,53.6,186,1\n391,-1,1595,627.8,86.6,250.8,1\n391,-1,1012.7,40.4,55.5,162.5,1\n391,-1,918.2,522.3,81.3,215.6,1\n391,-1,1719.7,454.4,77.8,215.2,1\n391,-1,849.3,506.8,87.6,231.3,1\n391,-1,1774.3,430,71.8,212.2,0.999\n391,-1,978.7,905,90.5,176,0.993\n391,-1,708.9,1,54.6,147.8,0.99\n391,-1,537,74.2,45.7,161.5,0.905\n391,-1,759.2,106.4,45.5,135.4,0.84\n391,-1,434.9,81.1,46.1,169,0.539\n391,-1,712.9,86.5,52.1,178.3,0.219\n391,-1,924.3,9.3,50,118.2,0.123\n403,-1,1222.2,30.9,61.3,118.3,1\n403,-1,686,206,80.1,115,1\n403,-1,1644.1,49.4,65.4,170.4,1\n403,-1,357.6,105.2,55.6,180,1\n403,-1,457.7,268.7,75.3,206.1,1\n403,-1,1771.9,118.3,65.6,167.5,1\n403,-1,361.8,1,66.3,109,1\n403,-1,945.6,21.1,62.4,169.9,1\n403,-1,827.9,1,56.5,127.9,1\n403,-1,305.9,574.1,85.4,242,1\n403,-1,218.6,141.4,64.4,156.9,1\n403,-1,549.1,67.5,60.6,172.7,1\n403,-1,108.8,347.6,52.3,193.2,1\n403,-1,1718.2,460.5,80.6,205.7,1\n403,-1,795.9,151.9,58.9,171.7,1\n403,-1,1179.6,483,63.2,205,1\n403,-1,284.2,129.9,55.3,164.4,1\n403,-1,1006.1,36.5,56.7,160.5,1\n403,-1,425.4,597.4,67.3,237.4,1\n403,-1,205.1,272,52.6,184.4,1\n403,-1,1588.7,618.2,98.6,252.5,1\n403,-1,424.8,89.6,53.7,173.7,1\n403,-1,853.5,522.3,99.7,236.4,1\n403,-1,925.7,539.9,80.9,213.2,1\n403,-1,467.4,70.6,64.9,190.2,1\n403,-1,710.3,91.4,64.9,170.5,1\n403,-1,717.8,1,51.6,134.5,1\n403,-1,979.4,916.3,85,164.7,0.988\n403,-1,430.4,4.2,28.7,100.4,0.303\n403,-1,681.6,589.9,77.1,211.6,0.277\n911,-1,1221.9,30.2,61.5,118.6,1\n911,-1,686.2,206.1,80.5,113.1,1\n911,-1,794,140.5,75.7,171.3,1\n911,-1,471.9,203.3,66.3,185.2,1\n911,-1,1431.7,1,49.5,140.5,1\n911,-1,1111.3,33.9,63,160.6,1\n911,-1,1576,590.3,103.5,235.5,1\n911,-1,556.9,115.3,58.4,173.9,1\n911,-1,308.9,695.9,90.2,265.4,1\n911,-1,1303,874.6,96.6,206.4,1\n911,-1,1720.9,453.8,78.3,213.4,1\n911,-1,1478.8,107.5,61.5,153.9,1\n911,-1,871,431,65.7,222.3,1\n911,-1,414.2,347.5,59,206.4,1\n911,-1,1600.1,63.6,53,163.1,1\n911,-1,329.4,357.7,83.2,191.6,1\n911,-1,1717.3,91.1,56.2,172.6,1\n911,-1,752.1,73.6,55.2,160.2,1\n911,-1,379.3,194.3,58.9,179.4,1\n911,-1,301.7,162.9,69.9,200.3,1\n911,-1,469.7,11.9,50.4,150.4,1\n911,-1,241.4,133.7,56.7,165.4,1\n911,-1,1746.4,680.9,96.7,239.3,1\n911,-1,966,414.1,65.3,224.6,1\n911,-1,421.9,66.5,56.5,173.3,1\n911,-1,1502.8,3.5,57.3,131.5,1\n911,-1,253.8,1.7,54.6,119.2,1\n911,-1,313,1.3,46.6,132.5,1\n614,-1,1221.3,31.2,62.2,119.3,1\n614,-1,687,206.1,78.8,113.4,1\n614,-1,1480.2,4.8,60.6,145.3,1\n614,-1,801.2,143.3,67.6,172.1,1\n614,-1,1635.3,210.6,71.3,194.3,1\n614,-1,360,283.9,67.2,203,1\n614,-1,1711.4,457.3,91.6,210,1\n614,-1,356.3,113.1,54.3,174.9,1\n614,-1,1574.9,589.3,96.8,233.7,1\n614,-1,172.8,241.2,66.1,199.9,1\n614,-1,579.5,551.3,88.8,234.8,1\n614,-1,244.2,258.1,61.4,185.1,1\n614,-1,1607.2,1,53.7,103,1\n614,-1,287.9,127.2,51,168.9,1\n614,-1,558.2,107.6,53.4,180.7,1\n614,-1,224,136.7,54,159.4,1\n614,-1,491.8,90.1,51.7,158.2,1\n614,-1,754.3,83,42.5,152.7,1\n614,-1,442.8,81.2,48.7,163.6,1\n614,-1,1101.2,894,117.2,187,1\n614,-1,398.1,91.5,52.9,162.4,0.997\n614,-1,354.5,5.9,51.2,111.2,0.141\n610,-1,1221.3,30.5,62.2,119.5,1\n610,-1,687.2,205.7,78.6,113.9,1\n610,-1,1481.2,3.5,60.1,145.1,1\n610,-1,801.5,146.7,65.5,167.9,1\n610,-1,361.1,279.5,69.5,198.3,1\n610,-1,1611.6,2.1,54.8,103.8,1\n610,-1,1709.1,456.2,93.8,210.7,1\n610,-1,1640.1,220.4,70.2,196,1\n610,-1,172.1,242.5,60.9,199.2,1\n610,-1,1573.8,589.7,97.5,234.6,1\n610,-1,587.6,555.3,104.4,229,1\n610,-1,242.4,262.7,60.8,181,1\n610,-1,559.6,109.1,51.6,179.3,1\n610,-1,491.7,89.4,46.5,158.5,1\n610,-1,358,109.3,51.8,178.9,1\n610,-1,220.6,136.5,56.2,162.7,1\n610,-1,288.4,126.2,51,172.2,1\n610,-1,439.5,79.9,47.2,162.4,1\n610,-1,1094.8,886.7,120.6,194.3,1\n610,-1,753.9,82.6,42.8,152.4,1\n610,-1,395.7,89.2,52.9,161.4,0.988\n1004,-1,1221.3,30.4,61.6,118,1\n1004,-1,686.1,206.3,79.9,113.1,1\n1004,-1,1206.5,140.6,66,177.9,1\n1004,-1,501.5,273.7,67.5,192.3,1\n1004,-1,794.5,140,74.1,172.8,1\n1004,-1,396,285.4,70.4,191.8,1\n1004,-1,290.2,125.5,51.6,168.2,1\n1004,-1,1474.4,183.9,63.5,156.8,1\n1004,-1,1810.5,204.1,68.1,180.4,1\n1004,-1,231.4,136.2,55.5,168.4,1\n1004,-1,1575.3,590.4,103.2,236.3,1\n1004,-1,1721.3,452.4,79.5,218.9,1\n1004,-1,311.1,281.9,64.5,196.7,1\n1004,-1,927.2,280.9,68.4,210,1\n1004,-1,1679.5,166,60.1,172.7,1\n1004,-1,299.3,474.5,88.4,205.4,1\n1004,-1,541.4,120.6,60.2,172.3,1\n1004,-1,842.4,293.1,65.5,205.2,1\n1004,-1,751,74.3,54.5,160.6,1\n1004,-1,1740.4,674.2,91.7,250.4,1\n1004,-1,1170.5,630.4,87.9,260.7,1\n1004,-1,380.8,460.6,68.8,222.4,1\n1004,-1,594.9,550.7,105.2,247.2,1\n1004,-1,343.8,879.6,89.3,201.4,1\n1004,-1,313.9,1.9,42.7,129.1,1\n1004,-1,437.5,65.9,62.5,172.4,0.999\n1004,-1,507.2,85.9,52.2,153.1,0.999\n1004,-1,408.9,166.3,67.5,196.9,0.998\n1004,-1,378.8,167,46.8,188.6,0.809\n1004,-1,382.5,1,53.8,149.1,0.245\n979,-1,686.5,206.4,79.8,113.1,1\n979,-1,1221.9,30.9,61.6,119.3,1\n979,-1,794.2,140.9,73.1,169.9,1\n979,-1,1469,156.6,69.2,169.4,1\n979,-1,409.3,262.6,70.3,192.2,1\n979,-1,1176.3,111,58,168.3,1\n979,-1,493.4,248.5,67.2,187.6,1\n979,-1,334.4,818.7,94.8,262.3,1\n979,-1,1783.8,163,69.2,186.2,1\n979,-1,1575.7,590.1,102,236.1,1\n979,-1,1660.6,132.5,56.6,171.1,1\n979,-1,229.9,137.9,55.4,163,1\n979,-1,323.1,256,62.9,197.3,1\n979,-1,844.8,329.7,66.4,199.6,1\n979,-1,752,72.2,55.3,163.5,1\n979,-1,1719.6,453.3,79.7,214.1,1\n979,-1,305.1,439.3,86.5,206.2,1\n979,-1,1452.5,1,58.8,100.3,1\n979,-1,926.3,316.6,65.9,212.8,1\n979,-1,548,119.7,52.4,167.8,1\n979,-1,1200.8,693.8,85.4,273.6,1\n979,-1,392.3,430.7,65.6,218.4,1\n979,-1,1738.3,674,97.3,251.7,1\n979,-1,314,1.3,47,128.6,1\n979,-1,290,125.8,52,175,1\n979,-1,448.7,61.5,53.7,186,1\n979,-1,380.7,1,54.6,133.9,1\n979,-1,1390.5,1.5,46.9,97.1,1\n979,-1,355.5,168.7,68.3,181.5,0.999\n979,-1,489.6,61.2,52.2,159.1,0.998\n745,-1,1221.7,29.7,62.2,119,1\n745,-1,686.5,205.9,79.8,114,1\n745,-1,1464.3,100.4,54.5,163,1\n745,-1,255.9,181.3,61.8,205.2,1\n745,-1,779.5,136.4,58.3,176.2,1\n745,-1,552.3,116.9,59.1,174.7,1\n745,-1,1488.4,16.5,59.1,139.4,1\n745,-1,1575.8,589.6,99.8,234.3,1\n745,-1,468,179.1,53.2,188.6,1\n745,-1,1714.4,455.9,91.2,209.3,1\n745,-1,299.3,441.2,74.6,222.1,1\n745,-1,331.9,201,56.8,172.4,1\n745,-1,1598.9,99.1,57.5,181.2,1\n745,-1,454.4,558.9,92.4,251.6,1\n745,-1,404.1,196.2,68.1,172,1\n745,-1,440.2,54.1,58,168.3,1\n745,-1,1193.4,700.7,87.2,267,1\n745,-1,1118.9,719.5,81.8,259.3,1\n745,-1,750.1,84.2,50,147.8,1\n745,-1,360,112.6,50.8,172.5,0.999\n745,-1,258.6,1.6,47.9,121.7,0.998\n745,-1,290.6,125.9,48.3,166.5,0.996\n745,-1,392.4,53.9,50.9,166.8,0.831\n745,-1,237.9,147.3,49.2,157.6,0.531\n33,-1,686.6,205.9,80.1,113.4,1\n33,-1,1207,29.6,73.1,121.4,1\n33,-1,387.5,373,89.9,237.2,1\n33,-1,1486.6,69.6,55.8,150.2,1\n33,-1,1362.4,567.2,104.3,244.5,1\n33,-1,704.4,1.5,55.8,157.7,1\n33,-1,1723.2,456.1,75.5,211.8,1\n33,-1,188.4,370.4,67.9,200.6,1\n33,-1,214.9,127.4,48.1,164.1,1\n33,-1,487.6,164.3,86.9,191,1\n33,-1,794.9,150,62.3,174.1,1\n33,-1,963.2,199.2,75.3,180.6,1\n33,-1,102.4,548.3,84.8,251.2,1\n33,-1,1834.1,250,68.1,191.9,1\n33,-1,284,124,54.2,171.6,1\n33,-1,356.2,107.6,53.4,177.4,1\n33,-1,868.1,142.3,57.2,181.5,1\n33,-1,1360.4,185.7,50.1,167.7,1\n33,-1,1.7,814.6,61.2,241.5,1\n33,-1,918.1,156.7,47.9,161.4,1\n33,-1,1012.7,156.4,76.4,182.7,1\n33,-1,411.2,83,51.6,157.4,1\n33,-1,453.4,58.8,45.6,167.8,0.999\n33,-1,1589.1,234.6,56.4,172.3,0.999\n170,-1,1221.1,31.2,61.5,116.2,1\n170,-1,109.1,350.9,48.8,187.9,1\n170,-1,1489.7,70.1,54.6,147.2,1\n170,-1,401.9,672.6,95.7,260.8,1\n170,-1,212.2,126.7,54.4,167.1,1\n170,-1,356.4,104,55.3,179.3,1\n170,-1,704.3,1,55.9,159.7,1\n170,-1,1720.4,457,78.8,212.1,1\n170,-1,970.9,124.3,53.8,173,1\n170,-1,1358.8,568,104.5,243.6,1\n170,-1,687.5,207.9,77.7,111.2,1\n170,-1,288.5,126.4,54.2,169.1,1\n170,-1,1123.5,153.2,47.8,161.4,1\n170,-1,431.3,41.1,57.1,162.1,1\n170,-1,100.6,548.6,87.8,252.3,1\n170,-1,421.6,237.1,77.6,223,1\n170,-1,528.7,282.2,62,216.8,1\n170,-1,554.5,154.5,66.8,175.5,1\n170,-1,223.9,589.3,68.6,213.1,1\n170,-1,1224.8,165,60.5,172.8,1\n170,-1,795.5,148.2,61.5,173.8,1\n170,-1,536.9,65.3,53.2,175,1\n170,-1,854.9,192.9,77.3,184.8,1\n170,-1,747.2,263,66.9,198.8,1\n170,-1,797.7,274.8,61.7,177.2,1\n170,-1,503.3,215.4,58.3,173.5,0.999\n170,-1,1271.4,164.6,49.2,165.9,0.996\n170,-1,1015.7,908,73.9,173,0.982\n781,-1,1221.7,29.4,62,118.1,1\n781,-1,687.3,204.7,79.2,114.7,1\n781,-1,546.9,114.1,62.5,177.5,1\n781,-1,1723.6,452.7,76,213.2,1\n781,-1,1487.2,17.9,59.7,149.8,1\n781,-1,783.5,133,55.7,174,1\n781,-1,1575.6,590.1,99.2,234.8,1\n781,-1,291.9,492.6,77.4,229.3,1\n781,-1,1444.6,73.4,51.2,164.8,1\n781,-1,276.7,169.3,57.5,197.3,1\n781,-1,390.6,223.4,71.8,177.4,1\n781,-1,472.4,77.3,61.1,177.4,1\n781,-1,449.2,213.9,53.6,189.3,1\n781,-1,749.5,72.6,54.2,158.2,1\n781,-1,331.5,188.8,55.3,175.6,1\n781,-1,234.2,132.1,50.5,166.8,1\n781,-1,1573.1,77.1,58.6,170.4,1\n781,-1,254.8,1.1,52.5,120.1,1\n781,-1,570.2,572.6,69.2,257.5,1\n781,-1,421.3,77.7,55.5,171.4,1\n781,-1,1112.4,630.1,80.1,246.6,1\n781,-1,1047.6,646.3,75.3,253.9,1\n781,-1,359.2,111.5,44.6,192.8,0.109\n788,-1,1221.1,29.2,62.6,119.9,1\n788,-1,687,205,79.5,114.3,1\n788,-1,1723.4,452.5,75.7,214.8,1\n788,-1,548.2,113.6,61.1,176.8,1\n788,-1,1575.2,589.5,100.3,234.8,1\n788,-1,1486.3,27,59.3,147.6,1\n788,-1,291.6,502.8,80,231.3,1\n788,-1,476.7,85.8,60.6,178.1,1\n788,-1,782.6,130,53.3,179.6,1\n788,-1,276.9,166.8,58.1,199.6,1\n788,-1,1442.2,66,50.3,164.5,1\n788,-1,749.4,70.8,55,162,1\n788,-1,233.5,132.9,50.2,166.7,1\n788,-1,337,189.1,50.5,175,1\n788,-1,389.5,226,69.6,179.1,1\n788,-1,446.1,222.6,53.9,189,1\n788,-1,1099.2,607.8,81.1,257.2,1\n788,-1,586.6,582.6,70.9,240,1\n788,-1,254.4,1.3,52.3,121.2,1\n788,-1,1035.8,635.9,75.6,247.3,1\n788,-1,423.3,88.4,56.9,164.4,1\n788,-1,450.9,5.3,45.5,93.4,0.065\n41,-1,685.9,206.2,80.5,113.7,1\n41,-1,1209.2,31.7,75.3,117.7,1\n41,-1,1486.6,69.6,56.1,150,1\n41,-1,391.1,366.3,86.2,238.5,1\n41,-1,1362.3,566.9,104.5,245.9,1\n41,-1,704.6,1,55.6,157.6,1\n41,-1,915.2,194.3,92.6,184.8,1\n41,-1,483.3,166.7,94.9,197.7,1\n41,-1,1722.4,457.4,76.8,209.4,1\n41,-1,214.3,128.8,49,162.9,1\n41,-1,1009.3,158.4,80.4,186.6,1\n41,-1,102,548.8,85.8,250.5,1\n41,-1,176.2,370,67.7,190.9,1\n41,-1,795.4,148.4,61.9,175.9,1\n41,-1,354.4,107.7,54,174.3,1\n41,-1,284.4,126,53.6,168.9,1\n41,-1,863.6,146.9,57.8,184.6,1\n41,-1,445.8,49.2,52.8,168.5,1\n41,-1,2.1,802.7,65,236.7,1\n41,-1,1843.6,255.9,74.4,197,1\n41,-1,1344.4,189.4,55.6,170.8,0.999\n41,-1,393.2,80.1,55.2,165.7,0.999\n41,-1,1498.1,221.2,52.4,190.4,0.99\n41,-1,490.9,42.9,46.6,150.1,0.592\n41,-1,543.4,58.8,38.9,192.5,0.054\n654,-1,687.3,206.4,78.9,113.6,1\n654,-1,1480.4,3.4,60.8,146.1,1\n654,-1,547.8,111.3,62.8,174.7,1\n654,-1,1711.3,456,95.6,210.5,1\n654,-1,1221.4,29,63,122.2,1\n654,-1,801,144.5,65.6,173,1\n654,-1,359.6,111.3,50.8,172.1,1\n654,-1,332.7,330.3,68.2,205.9,1\n654,-1,1613.9,171.2,72.6,187.5,1\n654,-1,1577.4,589.4,94.5,235.6,1\n654,-1,449.4,535.3,86.5,244.8,1\n654,-1,1169.5,1.4,67.5,121.3,1\n654,-1,751.4,80.4,46.6,155.7,1\n654,-1,269.2,235.5,61.5,181.8,1\n654,-1,409.1,1,60.2,156.5,1\n654,-1,472.4,105.2,47.1,174.9,1\n654,-1,423.5,120,57.3,159.4,1\n654,-1,218.1,218.9,56.3,204.4,1\n654,-1,288.5,125.7,51.2,168.2,0.999\n654,-1,1449.5,914.5,83.4,166.5,0.971\n654,-1,353.9,1,52.3,145.1,0.927\n654,-1,1365.5,936.1,87.7,144.9,0.281\n247,-1,1221.3,30.8,62.3,117.5,1\n247,-1,686.5,207.1,79,113,1\n247,-1,1596.8,8.2,64.7,142.2,1\n247,-1,796.3,152.3,60.9,173.9,1\n247,-1,392.3,516.1,86.9,242.2,1\n247,-1,107.8,348.9,52.2,192.2,1\n247,-1,211.7,126.4,56.1,168.9,1\n247,-1,1481,57.3,54.8,153.3,1\n247,-1,1155.5,113.3,53.7,166,1\n247,-1,223.4,470.5,58.5,200.4,1\n247,-1,288,128.3,55.5,171.5,1\n247,-1,1720.2,456.7,79,211.7,1\n247,-1,448.8,174.9,75.3,210.7,1\n247,-1,1373.6,566.4,102.2,247,1\n247,-1,207.5,731.9,90.6,254.2,1\n247,-1,704.5,1,54.4,157,1\n247,-1,933.8,114.3,72,178.2,1\n247,-1,355.8,106.5,53.8,177.9,1\n247,-1,1077.8,116.8,58.6,181.1,1\n247,-1,492.5,358.7,72.9,228.7,1\n247,-1,515.8,117.5,54.8,182.3,1\n247,-1,851.5,347.7,78.8,198,1\n247,-1,121.4,564.4,84.6,245.7,1\n247,-1,585.1,371.9,65.5,205.2,1\n247,-1,788,336.3,85.8,212,1\n247,-1,767.9,101.5,52.2,164.8,0.999\n247,-1,930.3,900.9,71.7,180.1,0.997\n187,-1,1221.8,30.2,61.9,119.2,1\n187,-1,211.5,126,56,169.9,1\n187,-1,1490.4,68.3,54,149.9,1\n187,-1,21.8,623.9,107.7,240.9,1\n187,-1,686.5,207.6,80.3,111.5,1\n187,-1,416.8,640.6,91.7,256.8,1\n187,-1,109.2,348.3,50.4,190.3,1\n187,-1,704.4,1,55.7,159.7,1\n187,-1,1358.7,567.7,104.6,245.4,1\n187,-1,356.7,108.1,54.3,175.4,1\n187,-1,869.5,173.6,87.4,192.6,1\n187,-1,1720.6,457.8,77.7,211.1,1\n187,-1,289.6,129,54.3,168.4,1\n187,-1,402.1,38.8,65,165.1,1\n187,-1,420.3,222.3,76.5,218.9,1\n187,-1,234.5,562.2,61.7,209.4,1\n187,-1,527.9,305.4,61,207.4,1\n187,-1,1186.1,148.6,62.5,184.3,1\n187,-1,539.4,141.3,60.2,162.9,1\n187,-1,794.8,150.5,62.6,175.9,1\n187,-1,796.8,294.2,70.6,185,1\n187,-1,1241.4,148.7,46.3,164.1,1\n187,-1,1081.6,144.6,48.9,161.2,1\n187,-1,745.1,278.5,71.6,201.6,1\n187,-1,98.6,550.3,85.3,245.2,0.999\n187,-1,983.7,919.2,74.9,161.8,0.99\n187,-1,916.4,118.6,61.5,173.2,0.575\n187,-1,454.5,5.1,54.4,85.9,0.176\n761,-1,1221.7,29.5,61.7,119.3,1\n761,-1,687,205.5,78.9,114.1,1\n761,-1,544.4,114.4,66.8,177,1\n761,-1,781.2,135.4,65.9,176.5,1\n761,-1,1718,453.4,81.4,212.8,1\n761,-1,304.3,464.5,76.4,225.6,1\n761,-1,1575.2,589.2,100.3,235,1\n761,-1,1462.2,86.4,51.9,164.6,1\n761,-1,268.7,182,56.4,197.4,1\n761,-1,330,192.8,55.3,180.6,1\n761,-1,458.7,190,54.5,188.4,1\n761,-1,512.9,566.2,75.8,250.5,1\n761,-1,401.2,206.4,64.2,175.5,1\n761,-1,1154.8,667.6,93.9,265.8,1\n761,-1,1581.5,85.9,62.8,177.8,1\n761,-1,1494.7,15.4,60.8,147.1,1\n761,-1,456.5,63,57.4,170.5,1\n761,-1,752.2,81.6,48.8,152.8,1\n761,-1,257.3,1.2,50,122.2,1\n761,-1,235.5,136,48.9,161,1\n761,-1,1089.5,684.6,78.8,257.8,1\n761,-1,358.9,110.2,53.2,170.1,1\n761,-1,400.2,64.8,57.1,170.1,1\n649,-1,687.2,206.4,79.2,113.3,1\n649,-1,1481.4,5.5,60,144.5,1\n649,-1,545.9,112.2,64.9,174.4,1\n649,-1,1709.9,453.8,99.7,215.5,1\n649,-1,1221.9,31.7,62.5,118.9,1\n649,-1,360,110.9,50.6,173.8,1\n649,-1,802.3,145.3,64.8,172,1\n649,-1,1573.5,589.2,98.1,236,1\n649,-1,460.6,536,86.2,244.1,1\n649,-1,336.1,323.9,68.5,206.4,1\n649,-1,411.3,1,59.3,150.3,1\n649,-1,1616.4,180.9,68.2,187.3,1\n649,-1,216,223.6,57.2,197.1,1\n649,-1,751.3,80,45.4,156,1\n649,-1,268.2,238.9,58.9,180.9,1\n649,-1,424.3,116.3,55.6,159.4,1\n649,-1,467.9,104.1,47.4,172.7,1\n649,-1,288.4,125.8,50.8,172,1\n649,-1,1183.1,9.5,63.4,112.2,0.941\n649,-1,1469,937.8,78.4,143.2,0.748\n649,-1,1386.6,952.2,84.2,128.8,0.142\n649,-1,358.4,4.4,46.8,140.6,0.08\n524,-1,1221.5,30.5,62.4,119.9,1\n524,-1,1486.1,1,59.6,141,1\n524,-1,686.8,206.4,79.2,113.8,1\n524,-1,1720,460.9,79.2,207.4,1\n524,-1,994.7,1.4,54,118.9,1\n524,-1,1670.9,17,52.7,163.4,1\n524,-1,164.6,322.8,66.1,194.4,1\n524,-1,288.6,123.8,54.1,172.5,1\n524,-1,392.5,190.5,58.1,189.6,1\n524,-1,1706.1,304.2,82.3,216.3,1\n524,-1,928.3,1.9,57.3,115.2,1\n524,-1,465.1,122,65.5,186.1,1\n524,-1,785.7,143.2,55.8,177.3,1\n524,-1,1608.8,5.8,56.7,169.9,1\n524,-1,883.5,2.2,53.1,114.7,1\n524,-1,822.7,604.9,72.9,259.1,1\n524,-1,1572.8,594.5,63.7,245.7,1\n524,-1,216.3,135.5,64.6,162.8,1\n524,-1,356.5,158,51.5,171.8,1\n524,-1,514.9,99,59.6,182,1\n524,-1,1761.9,645.7,71.1,209.5,1\n524,-1,269,815.6,81.7,265.4,1\n524,-1,450.3,2.3,74.3,169.3,1\n524,-1,193.2,791.3,93.9,264.7,1\n524,-1,955,722.9,120.8,252.2,1\n524,-1,1763.9,209.6,64.4,174.6,1\n524,-1,1598.1,290.1,60.7,193.4,1\n524,-1,745.8,85.5,61.3,169.9,0.999\n524,-1,400.5,31.2,46.1,164,0.999\n524,-1,1866,217.6,55,198.4,0.989\n524,-1,1038,740.8,79.9,237.8,0.175\n524,-1,1046.8,938.2,71,142.8,0.075\n841,-1,1221,29.2,62.6,120,1\n841,-1,687.6,206,79,114.2,1\n841,-1,792.6,137,76.7,179.2,1\n841,-1,1647.9,15.6,58.7,160.8,1\n841,-1,557.1,115.9,60.4,175.6,1\n841,-1,1721.3,453.7,77.9,212.5,1\n841,-1,266.5,584.3,83.6,247.4,1\n841,-1,1471.4,62,59.1,151.8,1\n841,-1,1574.6,590.3,102.3,234.8,1\n841,-1,751.7,71.6,56.5,162.4,1\n841,-1,355.5,280.2,79.5,179.8,1\n841,-1,296.5,161.1,69.8,195.8,1\n841,-1,1070.5,1.3,55.3,103.4,1\n841,-1,240.9,131.1,51.3,166.9,1\n841,-1,1416.9,30.5,54,159.4,1\n841,-1,475.7,137.1,58.8,179.8,1\n841,-1,253.9,1.2,54.9,121.1,1\n841,-1,437.2,270.5,55.4,202.5,1\n841,-1,941.9,538,70.8,241.8,1\n841,-1,415.6,130.8,59.9,177.7,1\n841,-1,1026.5,516.7,74.4,243.8,1\n463,-1,1221.9,31.1,61.8,118.6,1\n463,-1,686.7,205.9,79.5,113.5,1\n463,-1,935.9,1,58.2,148.9,1\n463,-1,1007.4,1.9,54,157.7,1\n463,-1,449.8,188.1,67.9,202.9,1\n463,-1,1728.7,167.5,62.7,163.1,1\n463,-1,241.5,675.4,98.4,265.7,1\n463,-1,873.6,1,55.6,132.5,1\n463,-1,272.4,209.7,52.6,175.8,1\n463,-1,359.3,110,53.7,177,1\n463,-1,1817.7,373.4,80.1,212,1\n463,-1,1649.5,352.7,66,200.2,1\n463,-1,1705,458.4,94.4,207.9,1\n463,-1,1507.7,2.2,57.2,110.6,1\n463,-1,1543.4,609.1,75,244.3,1\n463,-1,803.8,148.5,47.8,174.1,1\n463,-1,519.8,78.1,58,172.7,1\n463,-1,116.1,348.6,55,187,1\n463,-1,1676.2,53,68.4,176.1,1\n463,-1,217.2,136.5,62.9,161.1,1\n463,-1,337,707.3,72.7,254.5,1\n463,-1,808.5,581.5,89.3,250.8,1\n463,-1,899.7,616.9,105.8,245.4,1\n463,-1,752.9,94.1,52.6,146.2,1\n463,-1,1465.7,562.2,83.7,200.6,1\n463,-1,980.1,632.5,90.1,217.8,0.999\n463,-1,445.4,43.9,69.9,181.5,0.999\n463,-1,416.8,2.1,43.1,154,0.999\n463,-1,285.1,125.3,52.3,173.3,0.998\n463,-1,711.6,92.2,54.4,167.6,0.998\n463,-1,1025.9,921.2,86.2,159.8,0.991\n645,-1,687.3,206.5,79.3,113,1\n645,-1,1481.4,4.5,60.2,145.5,1\n645,-1,1221.1,29.7,62.4,120.8,1\n645,-1,1710.8,455.5,96.4,209.9,1\n645,-1,546.6,112.2,63.7,175,1\n645,-1,359.2,111.7,52.4,173.2,1\n645,-1,801.3,144.9,65.2,172.8,1\n645,-1,338.3,319.5,68.5,203.4,1\n645,-1,1574.8,590.4,97.2,236.3,1\n645,-1,413.4,1,58.4,146,1\n645,-1,1620.2,187.4,66.2,191.3,1\n645,-1,267.5,239.8,57.2,183.9,1\n645,-1,211.5,225.3,59.7,201,1\n645,-1,478.3,540.1,83.9,242.4,1\n645,-1,751.6,78.8,45.3,157.9,1\n645,-1,422.6,117.7,53.9,158.7,1\n645,-1,466.2,100.3,49.1,176.2,1\n645,-1,287.9,126.2,50.8,171,1\n645,-1,1487.3,948,73.2,133,0.541\n645,-1,357.9,3.2,48.6,127.1,0.168\n645,-1,239.2,148.5,41.2,178.7,0.061\n213,-1,1221,31,61.4,119.4,1\n213,-1,687.1,207,78.7,113.1,1\n213,-1,356.1,106.1,51.6,178.9,1\n213,-1,211.7,127,55.9,164.7,1\n213,-1,705,1,55.5,159.6,1\n213,-1,109.1,349.3,50.1,187.5,1\n213,-1,288.3,128,55.3,170.8,1\n213,-1,101.1,661.9,104.6,251.5,1\n213,-1,1492.8,70.4,53,147.3,1\n213,-1,402.3,583,83.6,245.8,1\n213,-1,1355.6,567,106.1,245.1,1\n213,-1,1720.5,457.5,78.3,210.3,1\n213,-1,1203.1,141.2,48.1,162.8,1\n213,-1,1133.1,136.2,61.6,187.2,1\n213,-1,900.4,144.6,70.6,187.7,1\n213,-1,1009.8,134.1,49.5,155.6,1\n213,-1,426.7,201.7,74.1,214.8,1\n213,-1,504.1,324.7,75.7,215.2,1\n213,-1,796.7,152.4,59,170.1,1\n213,-1,223.7,518.5,61.3,207.9,1\n213,-1,522.7,125.8,49.2,174.3,1\n213,-1,18.2,609.7,107.5,243.5,1\n213,-1,809.1,318.3,75.2,193.5,1\n213,-1,564.5,266.8,58.7,181.9,1\n213,-1,848.7,110.1,54.4,169.5,1\n213,-1,757.2,300.6,75.1,209.6,0.999\n213,-1,949.2,911.6,74.6,169.4,0.984\n213,-1,375.2,42.8,50.5,172.6,0.29\n207,-1,1221.7,30.4,61.6,120.3,1\n207,-1,687.1,206.4,78.8,114.2,1\n207,-1,211.5,126.6,55.6,168.6,1\n207,-1,1207.6,143.3,52,169.5,1\n207,-1,397,597.6,90.1,245,1\n207,-1,705.3,1.1,55.3,159.8,1\n207,-1,1721.1,455.8,77.8,212.2,1\n207,-1,77.3,647.6,114,251.9,1\n207,-1,355,107.2,55.4,178.3,1\n207,-1,1491.6,70,53.4,147.6,1\n207,-1,110.4,351.1,49.2,184.5,1\n207,-1,288.1,124.8,55.6,173.2,1\n207,-1,1358.5,568.2,103.4,244,1\n207,-1,424.1,204,77.4,218.1,1\n207,-1,507.3,318.8,75.5,217.5,1\n207,-1,796.4,150.6,58.5,171.5,1\n207,-1,521.2,132.5,54.4,162.7,1\n207,-1,1144.4,138,59.8,186.7,1\n207,-1,896.6,153.4,68.8,188.1,1\n207,-1,227.5,525,60.7,208.1,1\n207,-1,807.3,313,71.8,187,1\n207,-1,1024.7,135.2,46.3,153.7,1\n207,-1,1,615.1,85.1,215.9,1\n207,-1,381,38.6,59.2,168.5,1\n207,-1,755,296.7,71.8,205.2,1\n207,-1,863.3,107.8,53.7,175.4,0.998\n207,-1,961.8,914,71.7,167,0.996\n207,-1,558,252.5,51.3,189.6,0.982\n816,-1,1221.3,29.3,62.5,119.3,1\n816,-1,687.7,205.5,77.8,114.6,1\n816,-1,788.7,136.3,62.2,175.7,1\n816,-1,1625.6,1,55.6,148.7,1\n816,-1,556.8,117.9,61.9,173.3,1\n816,-1,1723.3,452.7,75.3,215.1,1\n816,-1,1575.6,589.5,100.8,233.7,1\n816,-1,275.6,545.6,78.8,241.9,1\n816,-1,439.7,239.2,54.6,199.8,1\n816,-1,281.8,165.2,63.4,196.6,1\n816,-1,473.3,109.7,62.9,176.2,1\n816,-1,376.3,260,73,178.4,1\n816,-1,1471.7,35.3,63.5,158.2,1\n816,-1,751.6,71.9,57.3,160.9,1\n816,-1,234.7,137.4,50.7,162.5,1\n816,-1,1429.9,49.3,51.2,159.1,1\n816,-1,982.4,586.5,76.3,243.7,1\n816,-1,1058.7,560.7,70.7,246.1,1\n816,-1,348.2,179.5,51.3,168.4,1\n816,-1,426,109.2,58.3,166.5,0.998\n79,-1,1221.6,30.2,60.9,119.3,1\n79,-1,1238.5,171.7,73.4,158,1\n79,-1,703.9,1,56.6,159.4,1\n79,-1,1487,68.7,55.8,149.7,1\n79,-1,413,326.9,83.1,232.6,1\n79,-1,356.5,105.6,55.2,178.9,1\n79,-1,1360.8,566.9,105.1,243.5,1\n79,-1,491.7,203.9,78.2,195.4,1\n79,-1,1722.5,455.7,76.1,211.5,1\n79,-1,981,188.3,71.8,184.5,1\n79,-1,686.7,205.8,80.9,116.1,1\n79,-1,102.9,546.6,85,253.5,1\n79,-1,12.8,725.6,69.8,234.5,1\n79,-1,771,184.9,60.6,186,1\n79,-1,291.8,125.5,52,169.2,1\n79,-1,1327.5,204.5,41.7,167.1,1\n79,-1,1425.6,200.9,73.3,192.1,1\n79,-1,212.3,132.1,51,163.2,1\n79,-1,131.8,353.3,48.1,197.4,1\n79,-1,538.7,62.1,48.7,173.5,1\n79,-1,839.1,173.7,57.9,185.7,1\n79,-1,881.7,195.3,55.1,166.9,1\n79,-1,433.1,23,54.8,162.1,1\n79,-1,389,892.6,95.2,188.4,1\n79,-1,474.7,121.9,59.3,160.7,0.999\n79,-1,380,27.3,55.2,160.5,0.999\n79,-1,1490.4,200.6,52.7,185.2,0.999\n79,-1,252.8,96,59.8,178.8,0.998\n685,-1,1221.9,29.8,62.2,120.9,1\n685,-1,687.2,207.2,79.5,112.8,1\n685,-1,360.9,530,111.2,251.3,1\n685,-1,1481,5.5,60.4,147.2,1\n685,-1,1489.1,150.8,52.8,174.4,1\n685,-1,1708.6,456.8,100.1,209.3,1\n685,-1,486,131.8,46.9,176.6,1\n685,-1,1067.7,1.2,68.4,95.4,1\n685,-1,804.8,146.4,56.5,171.2,1\n685,-1,563.5,112.4,50.1,177.8,1\n685,-1,311.8,360.8,69.7,216.4,1\n685,-1,360.6,116.3,48.8,168.5,1\n685,-1,1617.4,149.4,71.3,189.7,1\n685,-1,1573.9,589.4,97.6,235.3,1\n685,-1,418.1,139.9,66.1,164.3,1\n685,-1,750.6,80,48.6,158.1,1\n685,-1,1266.8,864.2,92.7,216.8,1\n685,-1,1359.6,840.3,92.9,240.7,1\n685,-1,404.4,14.6,56.4,161.4,1\n685,-1,240.3,204.1,62.6,200.3,1\n685,-1,295.4,220.1,57.8,177.7,1\n685,-1,483.7,36.6,45.3,145.2,1\n685,-1,223.6,127,50.6,166.2,0.994\n685,-1,828.3,921.2,80.6,159.8,0.916\n1036,-1,1222,30.4,61.5,118.1,1\n1036,-1,686.7,206.9,79.7,113.8,1\n1036,-1,793.3,141.4,72,172.7,1\n1036,-1,1273.5,184.2,64.2,164.2,1\n1036,-1,1720,455.9,80.6,213.1,1\n1036,-1,288.6,127.6,52.9,169,1\n1036,-1,484.6,312.1,76.3,195.3,1\n1036,-1,848,255.3,63.7,196.5,1\n1036,-1,936.7,241.5,66.3,203.2,1\n1036,-1,233.5,139.7,56.4,163.8,1\n1036,-1,1131.8,571.6,89.3,242.4,1\n1036,-1,751.3,76,53.5,160.4,1\n1036,-1,286.4,526.7,90.3,210.8,1\n1036,-1,363.5,321.2,75,197.6,1\n1036,-1,1706.6,202.2,63.2,181.1,1\n1036,-1,1575,589.1,101.7,239.5,1\n1036,-1,375.8,503.8,65,233.1,1\n1036,-1,295.5,315.8,67.7,207.6,1\n1036,-1,1679.1,679,81.1,236.3,1\n1036,-1,1469.5,207.3,70.7,165.6,1\n1036,-1,1851.7,240.7,64.8,197.7,1\n1036,-1,440.2,172.5,62.8,166.4,1\n1036,-1,581.5,543.5,68.5,248.9,1\n1036,-1,371.8,102.5,59.4,177.7,1\n1036,-1,308.2,2.5,35.9,127.3,1\n1036,-1,492,165.2,68.6,195.5,1\n1036,-1,539.8,118.6,58.7,172.6,0.998\n598,-1,1221.4,31,62.6,119.4,1\n598,-1,686.9,205.9,79.7,113.9,1\n598,-1,1481,3.6,61.6,145.2,1\n598,-1,801.4,144.5,63.4,173.8,1\n598,-1,368.3,266,63.8,200.1,1\n598,-1,1630.1,1.3,54.2,114.2,1\n598,-1,561.7,110.9,51.3,178.3,1\n598,-1,1573.2,589.4,96.9,233.5,1\n598,-1,233.1,266.9,62.3,186,1\n598,-1,1654.3,228,72.1,203,1\n598,-1,1714.4,455.5,86.9,210.2,1\n598,-1,429.5,69.3,48.8,173.2,1\n598,-1,358.6,109.5,53.8,179.9,1\n598,-1,165.4,246.3,60.8,207,1\n598,-1,286.8,127.3,52.3,170.7,1\n598,-1,482.1,100.5,49.1,160.3,1\n598,-1,216.4,138.2,54.7,158.9,1\n598,-1,752.8,79.2,44,154.5,1\n598,-1,1073.6,861.8,123.5,219.2,1\n598,-1,1872.7,275.7,48.3,181.8,0.929\n598,-1,1159.3,876.6,91.8,204.4,0.848\n598,-1,394.6,96.6,34.1,140.9,0.124\n598,-1,307.4,909.4,113.7,171.6,0.106\n453,-1,1221.5,30.6,62.1,118.9,1\n453,-1,937.1,1,58,156.5,1\n453,-1,445.9,210.6,72.4,195.7,1\n453,-1,687.1,205.9,78.5,113.7,1\n453,-1,111.8,349.8,57.2,189.7,1\n453,-1,358.7,106.8,54.4,180.5,1\n453,-1,1007.6,11.5,54,154.3,1\n453,-1,1711.1,455.4,89.2,211.1,1\n453,-1,1405.1,548.9,90.9,206.3,1\n453,-1,1743.8,154.3,59.3,171.3,1\n453,-1,1551,611.5,76.9,244.5,1\n453,-1,287.5,127,54,169.6,1\n453,-1,523.7,75.2,55.4,171.6,1\n453,-1,865.2,2.3,54.8,137.8,1\n453,-1,346.4,683.4,73,247.1,1\n453,-1,1834.5,389.4,84,208.9,1\n453,-1,257.4,224,53.2,176.4,1\n453,-1,800.5,152,48.4,169.4,1\n453,-1,1663.2,358.4,66,197.8,1\n453,-1,887.4,598.1,115.8,245.8,1\n453,-1,248.4,653.9,97.5,258.7,1\n453,-1,793.8,577.8,86.1,247.4,1\n453,-1,753.2,90.8,53.3,154.3,1\n453,-1,219.9,137.6,58.3,160.8,1\n453,-1,420.2,1,45.1,144,1\n453,-1,427.1,131.9,54.9,157.8,0.999\n453,-1,1508.4,1,56.6,105.4,0.999\n453,-1,974,613.6,82.8,228.6,0.999\n453,-1,1024.1,921.1,84.2,159.9,0.998\n453,-1,714.3,91.1,51.1,172,0.992\n453,-1,359.6,6.5,62,134.7,0.992\n453,-1,444.7,33.7,72.6,206.4,0.971\n195,-1,1222.1,30.8,60.8,119,1\n195,-1,45.5,633.2,117.4,251.2,1\n195,-1,211.3,127.9,56.1,165.6,1\n195,-1,686.8,207.1,79.1,111.9,1\n195,-1,405.9,617.1,91.6,250.1,1\n195,-1,108.5,346.8,50.6,191.5,1\n195,-1,1488.9,68.6,55.2,149.2,1\n195,-1,705,1,55.5,159.8,1\n195,-1,288.5,126.5,55.6,171.5,1\n195,-1,528.4,138.5,60.8,160.1,1\n195,-1,356.3,105.1,54.7,178.4,1\n195,-1,1720.4,455.8,78.3,212.9,1\n195,-1,1358.2,566,104.8,247.4,1\n195,-1,1058.3,143.3,50.6,158.2,1\n195,-1,1166.2,147.6,64.5,182.1,1\n195,-1,518.3,305.9,71.8,211.5,1\n195,-1,421.2,215.7,76.1,219.6,1\n195,-1,879.8,166,78.1,186.2,1\n195,-1,396.5,40.7,62,165.1,1\n195,-1,794.5,150.7,62.3,173.1,1\n195,-1,800.4,300.3,71.6,187.8,1\n195,-1,229.8,543.7,63.2,214.5,1\n195,-1,1226.5,145.8,49.4,171.3,1\n195,-1,752.5,283.1,67.6,205.5,1\n195,-1,461,2.2,51.6,94.4,0.999\n195,-1,973.2,917.4,73.8,163.6,0.98\n908,-1,1222.1,29.8,61,118.8,1\n908,-1,686.8,206.1,79.4,113.8,1\n908,-1,473,193.8,68.4,190.6,1\n908,-1,794.5,140.2,74.1,171.7,1\n908,-1,1431.9,1,49.3,144,1\n908,-1,308.5,690.6,89.4,263.2,1\n908,-1,1110,29.8,63,162,1\n908,-1,1575.3,591,103.3,232.9,1\n908,-1,1722.5,453.6,76.4,214,1\n908,-1,1715.4,85.4,54.1,175.3,1\n908,-1,1482.7,104.6,59.8,153.1,1\n908,-1,381.8,191.6,58.2,178.5,1\n908,-1,557.6,116.4,57.8,173.1,1\n908,-1,1597,62.4,53.8,159.8,1\n908,-1,752.6,73.9,55.2,159.9,1\n908,-1,872.8,434.8,66.2,223.1,1\n908,-1,301.9,162.8,69.4,198.9,1\n908,-1,327.8,352.9,85.9,189.6,1\n908,-1,470.1,8.4,49.7,150.1,1\n908,-1,415.8,346.7,58.1,204.3,1\n908,-1,1744.8,680,97.2,240.5,1\n908,-1,1309.2,878.9,94.9,202.1,1\n908,-1,242.1,134.8,57.2,165.1,1\n908,-1,312,1.8,48.6,130,1\n908,-1,967.8,414.9,66,227.4,1\n908,-1,1502.6,3.3,56.8,135.7,1\n908,-1,253.9,1.1,54.5,119,1\n908,-1,422.6,65.3,52.7,173.5,1\n86,-1,1221.7,30.1,61.6,116.9,1\n86,-1,417.5,318.2,84,231.4,1\n86,-1,704.2,1,56.1,159,1\n86,-1,497.9,209.2,75.4,200.2,1\n86,-1,1722.4,456.4,76.8,210.6,1\n86,-1,1487.6,69.4,54.7,147.5,1\n86,-1,356.1,106.7,54.8,177.4,1\n86,-1,974.2,193,73.6,187.5,1\n86,-1,394.3,869.7,103.4,211.3,1\n86,-1,1358.8,566.1,105.5,244.2,1\n86,-1,102.3,547.4,85.7,252.1,1\n86,-1,1221.7,160.2,64.7,172.1,1\n86,-1,295.2,127.3,51.2,169.4,1\n86,-1,745.1,185.4,62.9,183.4,1\n86,-1,18.4,719.7,69.7,225,1\n86,-1,1314.2,196.4,46.3,175.6,1\n86,-1,210.6,131.2,50.2,162.9,1\n86,-1,1419,196.5,63.6,193.1,1\n86,-1,127,353.7,43.3,191.2,1\n86,-1,538.7,64,48.6,169.4,1\n86,-1,1479.4,194.7,52.4,175.1,1\n86,-1,435.9,17.8,53.4,159.9,1\n86,-1,690.9,205.9,65.4,118.6,1\n86,-1,376.6,23,55.4,162.9,1\n86,-1,255.1,95,59.6,181.4,1\n86,-1,834.9,173.6,55.6,191.4,0.999\n86,-1,481.2,123.3,54.3,166.2,0.999\n86,-1,875.1,198.7,54.6,170.9,0.999\n728,-1,1221.3,29.8,62.6,118.9,1\n728,-1,687,205.7,79.3,114.3,1\n728,-1,1711.2,456.5,96,207.7,1\n728,-1,1479.7,8.4,58.6,142.5,1\n728,-1,1470.6,113.3,52.3,168.2,1\n728,-1,552.4,112.8,58.6,177.2,1\n728,-1,261.2,188.1,54.7,202.4,1\n728,-1,476.8,162.9,52.5,187.7,1\n728,-1,412.7,183.6,65.7,164.4,1\n728,-1,1574.5,590.1,99.2,234,1\n728,-1,318.3,198.1,63.5,181.6,1\n728,-1,299.6,419.5,73.4,221.7,1\n728,-1,1597,110.3,59.6,183.1,1\n728,-1,405.6,551.6,95.8,250.3,1\n728,-1,785.4,138.3,52.7,177.3,1\n728,-1,750,82.1,50.2,152.6,1\n728,-1,361.1,108.1,46.8,179,1\n728,-1,1235.7,743.7,92.2,264.8,1\n728,-1,1164.2,761.1,80,257.5,1\n728,-1,425.2,40.8,58,166.4,1\n728,-1,320.1,1,51.2,132.4,0.999\n728,-1,236.4,136.7,53.4,168,0.998\n728,-1,466.4,4.5,45.3,144.4,0.998\n27,-1,686.5,205.7,80.1,113.7,1\n27,-1,1207.2,30.7,72.6,118.8,1\n27,-1,1486.9,69.3,55.8,150,1\n27,-1,703.6,1.4,56.6,158,1\n27,-1,1362.5,566.7,105.3,245.6,1\n27,-1,1723.5,456.1,76.4,211.6,1\n27,-1,492,159.7,89.8,190,1\n27,-1,795,150.3,61.7,173.3,1\n27,-1,987.3,199.7,79,178.9,1\n27,-1,102.1,547.1,85.5,252.9,1\n27,-1,384.1,378.6,83.5,241.1,1\n27,-1,195.2,374.9,69.5,201.2,1\n27,-1,354.4,103.4,53.9,180.7,1\n27,-1,216.1,128.8,48.4,163.6,1\n27,-1,1826,238.1,64.3,189.1,1\n27,-1,284.1,124,55,171.3,1\n27,-1,415.1,80.4,53.7,160.2,1\n27,-1,1601,239.2,58.4,188.9,1\n27,-1,455.7,60.3,48.8,166.5,1\n27,-1,873.5,139.6,54.5,181,1\n27,-1,2.3,829.3,54.6,238.6,1\n27,-1,915.8,151.4,50.7,163.3,0.999\n27,-1,1374.7,185.5,47.7,172.3,0.997\n328,-1,1221.6,31.4,62.1,118.4,1\n328,-1,686.2,207.2,80.2,112.2,1\n328,-1,1451.5,1.1,56,135.9,1\n328,-1,1717.9,61.3,62.4,159.9,1\n328,-1,452.1,115.5,72.3,195.4,1\n328,-1,108.1,350.6,52.7,189.1,1\n328,-1,377.4,575.6,86.7,255.4,1\n328,-1,1719.7,457.9,78.7,212.7,1\n328,-1,795,149.4,61.3,172.7,1\n328,-1,987,66.1,61.6,178.6,1\n328,-1,282,133.1,54.6,171.8,1\n328,-1,927.5,31.7,63.6,174.6,1\n328,-1,1580.2,3.1,65.1,118.1,1\n328,-1,363,107.5,58.3,180.1,1\n328,-1,238.2,358.2,58.2,190.2,1\n328,-1,835.2,440.5,81.4,212.3,1\n328,-1,212.9,137.2,55.4,163.2,1\n328,-1,897.4,444.5,72,198.4,1\n328,-1,725,87.5,49.8,182.2,1\n328,-1,1522.4,603.7,87.3,246.2,1\n328,-1,421.6,46.8,55.9,168.3,1\n328,-1,1044.4,77.6,51.5,161,1\n328,-1,1832.8,510.4,72.5,209.7,1\n328,-1,513.1,483.4,68,223.3,1\n328,-1,519.1,103.2,37.9,163,0.999\n328,-1,419.5,462.5,81.7,238.2,0.999\n328,-1,934.7,910.4,70.2,170.6,0.969\n328,-1,373.2,915.9,88.9,165.1,0.477\n328,-1,931.3,390.5,67.3,191.5,0.322\n285,-1,1221.7,32.1,62.2,118.9,1\n285,-1,686.9,207.5,78.6,111.7,1\n285,-1,1468.7,29.7,54.9,150.7,1\n285,-1,353.3,108.7,53.6,177.1,1\n285,-1,1021.5,97.8,61.2,183.3,1\n285,-1,1097.7,93.5,51.9,163.9,1\n285,-1,456.8,143.5,71.3,204.9,1\n285,-1,287.8,129.5,55.6,174,1\n285,-1,1720.2,458.5,78.5,209.8,1\n285,-1,940.3,80.5,63.5,176.5,1\n285,-1,216.1,585.4,88.4,247.8,1\n285,-1,399.9,22.1,55.4,164.2,1\n285,-1,390,449.1,83.9,231.2,1\n285,-1,704.2,1,54.8,157.8,1\n285,-1,108,352,51.2,189.7,1\n285,-1,1660,30.7,56.8,154.7,1\n285,-1,797.8,148.7,59.6,175,1\n285,-1,1444.4,585.6,95.4,240.9,1\n285,-1,222.4,131.3,53.3,162.2,1\n285,-1,286.5,812.7,91.5,268.1,1\n285,-1,234.2,414,59.4,196.2,1\n285,-1,514.5,108.6,52.6,175.8,1\n285,-1,749.6,106.8,47.4,163.5,1\n285,-1,549.9,425.2,68,212.1,1\n285,-1,885,401.2,76.8,195.2,1\n285,-1,812.1,378.9,88.4,221,1\n285,-1,838.1,110.3,53.4,159.6,1\n285,-1,465.8,407.8,64.7,224.4,1\n285,-1,771.7,350.8,63,180.3,0.999\n285,-1,944.9,920.2,82.5,160.8,0.879\n525,-1,1221.5,30.5,61.5,119.7,1\n525,-1,1485.9,1,59.6,142,1\n525,-1,687,206.7,78.6,113.3,1\n525,-1,1718.8,459.2,80.4,209,1\n525,-1,994.4,1.6,54.1,116.8,1\n525,-1,1670.2,15.8,52.6,163.5,1\n525,-1,288.2,122.2,54.2,175.3,1\n525,-1,164.4,320.9,66.9,195.4,1\n525,-1,391.8,191.3,58.8,189.8,1\n525,-1,785.1,144.5,55,175.9,1\n525,-1,927.7,2.1,57.7,112.8,1\n525,-1,821.8,604.1,74,258.7,1\n525,-1,465.6,123,65.1,185,1\n525,-1,1706,303.1,81.6,216.1,1\n525,-1,883.9,1.8,52.8,114.3,1\n525,-1,1765.7,647.4,70.4,214.5,1\n525,-1,1608.7,4.5,56.9,170.1,1\n525,-1,217.2,134.5,62.8,162,1\n525,-1,449.8,2.2,74,168.4,1\n525,-1,515.7,100.6,59.4,181.1,1\n525,-1,1575.2,594.2,62.3,244.3,1\n525,-1,193.7,791.5,94.4,266.5,1\n525,-1,956.2,724.1,119.6,250.6,1\n525,-1,269,817.8,80.8,263.2,1\n525,-1,1765.5,209.6,62.8,172.5,1\n525,-1,1596.6,288.7,62.1,197,1\n525,-1,746.2,84.4,60.7,174.5,0.999\n525,-1,359.8,156.4,49.8,173.9,0.999\n525,-1,400.7,32.5,46.4,163.5,0.999\n525,-1,1867.3,217.8,53.7,198.4,0.978\n525,-1,1047.3,939.9,69,141.1,0.102\n525,-1,1038.3,740.6,82.6,239.9,0.085\n946,-1,1221.6,30.1,61.8,118.9,1\n946,-1,686.3,206.7,80.3,112.8,1\n946,-1,1484.6,1,58.1,114.8,1\n946,-1,794.5,139.5,74,174.5,1\n946,-1,1475.8,131.9,60.6,163.5,1\n946,-1,323.5,757.2,94,274.2,1\n946,-1,1136.8,68.2,61.9,168.6,1\n946,-1,1574.5,588,104,238.7,1\n946,-1,749.8,70.1,57.1,163.2,1\n946,-1,1721,454,78.1,212.8,1\n946,-1,349.5,227.5,60.2,182.2,1\n946,-1,1248,771.9,94.9,284,1\n946,-1,1416.7,1,47.9,118.9,1\n946,-1,936.6,361.5,67.2,218.4,1\n946,-1,1632.1,95.3,56.5,168.3,1\n946,-1,554.4,116.5,54.4,170.6,1\n946,-1,435.4,228.9,66.1,188.8,1\n946,-1,235.7,130.5,60,175.7,1\n946,-1,857.1,377.9,65.3,211.5,1\n946,-1,394.6,383.9,65.9,219.5,1\n946,-1,326.1,400.6,79.7,197.3,1\n946,-1,252.6,1,53.5,119.6,1\n946,-1,1742.7,674.5,92.4,248.5,1\n946,-1,435.9,76.4,56.7,178.6,1\n946,-1,478,37.8,53.5,149.6,1\n946,-1,1751.5,133.1,59.1,176.6,1\n946,-1,310.4,165.3,61.7,192.7,1\n946,-1,476.9,215.7,63.4,184.3,0.999\n686,-1,1221.8,29.8,62.1,120.7,1\n686,-1,687,207,79.7,112.8,1\n686,-1,360.4,529.9,108.7,250.8,1\n686,-1,1481.1,6.4,60.4,146.2,1\n686,-1,1488.6,148.2,52.6,175.1,1\n686,-1,485.6,130.8,47.5,180.1,1\n686,-1,803.9,147.9,55.8,168.2,1\n686,-1,563.1,111.1,51.6,178.2,1\n686,-1,1710.3,454.6,98.6,213.1,1\n686,-1,1066.2,1.1,64.5,96.6,1\n686,-1,1616,148.3,71.2,190.3,1\n686,-1,312,362.6,68.8,216.1,1\n686,-1,418.7,140.2,65.8,165.6,1\n686,-1,360.2,115.6,48.7,169.9,1\n686,-1,1574.3,589.2,97.8,237,1\n686,-1,749.9,79.5,49.9,159.2,1\n686,-1,1263.4,861.5,95.1,219.5,1\n686,-1,1356.2,836,93.5,245,1\n686,-1,242.1,202.7,62,200.5,1\n686,-1,405.1,18.6,55.2,160.3,1\n686,-1,295.9,218.9,58.6,177.5,1\n686,-1,482.6,35.1,46.1,143.8,1\n686,-1,223.7,129,49.7,165,0.998\n686,-1,825.9,921,82.6,160,0.898\n204,-1,1221.8,30.9,61.2,119.8,1\n204,-1,687.1,207.3,77.8,112.8,1\n204,-1,211.2,127.1,56.2,167.5,1\n204,-1,397.2,603.5,91.5,246.1,1\n204,-1,66,642.7,116.7,254,1\n204,-1,1491.2,69.8,54.2,148.9,1\n204,-1,704.9,1,55.6,159,1\n204,-1,1720.6,456.7,78.6,210.9,1\n204,-1,109.2,350.1,49.5,187,1\n204,-1,1358.5,568.3,104.2,244.6,1\n204,-1,288.7,125.9,55.4,172.3,1\n204,-1,1208.9,145.9,53.6,165.8,1\n204,-1,424.1,206.9,77.4,215.8,1\n204,-1,522,132,58.2,165.1,1\n204,-1,798,150.3,59.3,174.8,1\n204,-1,1032.7,138.3,50.3,158.5,1\n204,-1,355.2,107.6,55.3,178.1,1\n204,-1,509.5,317.6,77.7,218.4,1\n204,-1,893.2,154.6,72.3,187.8,1\n204,-1,1148.6,141.3,60.4,183,1\n204,-1,386.3,42.1,62.5,165.4,1\n204,-1,804.4,312,72.2,186,1\n204,-1,228.6,534,60,213.4,1\n204,-1,754.9,296.2,68.7,204.8,1\n204,-1,1,607.4,68.6,226.9,0.999\n204,-1,965.6,914.3,71.6,166.7,0.977\n421,-1,1221.8,30.4,62.4,118.4,1\n421,-1,686.6,205,79,116.1,1\n421,-1,1665.7,70.7,71.7,177.1,1\n421,-1,359,109.7,54.1,175.3,1\n421,-1,943.7,12.2,61.5,167.1,1\n421,-1,1239.3,507.8,90.6,201.3,1\n421,-1,1720.3,455.5,78.6,211.5,1\n421,-1,453.7,245.8,79.9,202.5,1\n421,-1,546.6,69.5,56.2,168.8,1\n421,-1,110.8,349.1,51.7,189.1,1\n421,-1,286.1,129.4,54.6,165.9,1\n421,-1,1008,26.3,53.6,161.3,1\n421,-1,837.5,1,51.2,133.5,1\n421,-1,1580.6,616.9,96.3,240.4,1\n421,-1,1766.5,135.9,54.2,164.5,1\n421,-1,393.3,626.9,73.7,240.2,1\n421,-1,284.4,602.2,98.6,248.7,1\n421,-1,862.4,545.1,106.5,242.3,1\n421,-1,798.2,148.9,54.8,175.6,1\n421,-1,214.9,256.6,52.7,183.6,1\n421,-1,220.8,141.2,72.3,160,1\n421,-1,726.5,560.1,78.7,241,1\n421,-1,358.8,1,67.4,121,1\n421,-1,427.1,108.1,52.3,164.5,1\n421,-1,717.6,1,50.9,123.9,1\n421,-1,941.3,562.5,79.9,220.8,1\n421,-1,1812.3,71.9,79.5,182.2,1\n421,-1,424,1.4,45.3,124,1\n421,-1,459.7,60.4,65.2,196.5,0.999\n421,-1,713.9,89.3,61.6,175.3,0.999\n421,-1,750.3,89,44.7,159.8,0.505\n421,-1,984.8,929.5,81.4,151.5,0.079\n843,-1,1221,29.3,62.5,119.6,1\n843,-1,687.8,206.3,78.5,113.1,1\n843,-1,794.4,138.2,76.5,176.6,1\n843,-1,557.4,117.2,60.6,176.3,1\n843,-1,1721.6,453.7,78.4,211.9,1\n843,-1,1573.5,590.6,103.7,234,1\n843,-1,1650.1,16.9,58,160.6,1\n843,-1,266.4,586.7,82.6,244.5,1\n843,-1,1068.9,1,56.4,105.6,1\n843,-1,1469.2,60.7,60.8,153.7,1\n843,-1,752.6,70.3,56,163.3,1\n843,-1,296.9,161.8,69.7,194.8,1\n843,-1,241,130.3,51.2,169,1\n843,-1,1415.3,30.1,53.2,157.4,1\n843,-1,436.9,267.3,55,206.6,1\n843,-1,1024.4,518.8,75.2,236.7,1\n843,-1,353.6,283.5,81.6,177.8,1\n843,-1,939.1,536.7,71.8,240.9,1\n843,-1,414.4,134.7,61.2,172.1,1\n843,-1,474.4,136.6,59.5,180.5,1\n843,-1,253.8,1.1,54.5,122,1\n839,-1,1221,29.2,62.6,120,1\n839,-1,687.8,206.1,78,113.2,1\n839,-1,793.1,138.1,74.8,177.3,1\n839,-1,557.2,116.5,60.7,174.7,1\n839,-1,266.8,582.1,85,249.2,1\n839,-1,1645.5,13.4,57.6,161.1,1\n839,-1,1721,452.5,78.1,215.1,1\n839,-1,1574.8,591.1,102.3,232.8,1\n839,-1,752.6,70.6,56.2,164,1\n839,-1,1470.6,56.9,61.1,154.1,1\n839,-1,475.5,132.5,59.8,181.6,1\n839,-1,354.1,277.3,83.4,180.1,1\n839,-1,437,267.2,56.1,203.6,1\n839,-1,1418.4,32.4,54,159.6,1\n839,-1,239.6,129.1,51.9,171.2,1\n839,-1,296.6,161.6,68.5,195.6,1\n839,-1,1069.5,1.9,56.2,100.7,1\n839,-1,944.1,543.5,70.1,234.6,1\n839,-1,254.1,1.5,55,120.3,1\n839,-1,1033.6,524.1,70.2,237.4,1\n839,-1,416.4,128.5,59.2,178,1\n707,-1,1221.4,29.8,61.8,118.6,1\n707,-1,686.7,206.3,80.1,113.9,1\n707,-1,1482,5.7,57.3,147.6,1\n707,-1,561.1,110,54.8,178.4,1\n707,-1,1602.8,132,66.1,185,1\n707,-1,411.8,158.1,77.7,166.7,1\n707,-1,1710.6,456.5,95.6,207.3,1\n707,-1,295.1,388.3,74.3,217.2,1\n707,-1,482.5,147.3,49.4,178.7,1\n707,-1,1574.5,588.3,99,236,1\n707,-1,1475,125.3,52.2,175.5,1\n707,-1,801.3,139.5,48.1,173.9,1\n707,-1,1298,782,89.1,278.6,1\n707,-1,750,81.3,49.4,153.7,1\n707,-1,473.4,24.8,45.5,135.2,1\n707,-1,1211.6,811.1,89.6,266.5,1\n707,-1,1001.1,1.8,67.4,89.7,1\n707,-1,389.5,544.8,65.5,245.1,1\n707,-1,258.9,196.3,57.7,196.8,1\n707,-1,359.2,108,50.6,173.9,1\n707,-1,306.6,210,58.4,176.4,1\n707,-1,410.8,27.9,59.5,160.6,1\n707,-1,229.1,134.9,52.4,164.5,0.999\n707,-1,848.2,933.3,76.8,147.7,0.101\n511,-1,1221.7,30.1,61.5,119.1,1\n511,-1,1494.6,1,59.9,133.7,1\n511,-1,686.4,207.1,80.2,113.9,1\n511,-1,997.7,1,54.7,124.5,1\n511,-1,398,182.2,63.7,186,1\n511,-1,154.7,328.2,66.4,189.9,1\n511,-1,1691,623,89.1,215.6,1\n511,-1,335.5,171,51.5,170.5,1\n511,-1,1675.6,24.7,54.9,170.7,1\n511,-1,931.8,1,55.7,120.4,1\n511,-1,458.9,137.3,74.1,191.4,1\n511,-1,883.2,1.5,51.4,123.4,1\n511,-1,789.9,141.1,57.3,178.2,1\n511,-1,1718.8,460.8,81.9,206.6,1\n511,-1,1611.7,301.6,63.1,198.2,1\n511,-1,1615,15,55.4,176.4,1\n511,-1,1713.6,329.2,95.2,194.4,1\n511,-1,826.6,608.6,73.8,256.7,1\n511,-1,1558.7,599.4,72.2,237.7,1\n511,-1,937.4,693.3,123.8,257.8,1\n511,-1,217.1,134.7,62.8,161.6,1\n511,-1,286,797,77.8,257.9,1\n511,-1,1842.4,193.6,75.7,200.2,1\n511,-1,289,120,52.8,176.8,1\n511,-1,202.3,768.1,92.3,272,1\n511,-1,515.1,93.6,56.3,172.8,1\n511,-1,725,97.2,67.6,161.4,1\n511,-1,450.8,5.9,72.6,181.2,1\n511,-1,1749,200.9,58.8,174.8,0.999\n511,-1,397.5,23.1,48.5,162.3,0.997\n511,-1,1034.8,719.4,74.5,246.6,0.35\n511,-1,1042.6,936.2,75.5,144.8,0.21\n511,-1,362.9,110.2,44.9,183.5,0.127\n927,-1,1221.8,30.4,62,118.5,1\n927,-1,686.2,206.2,79.9,113.1,1\n927,-1,794.1,141.9,73.3,169.5,1\n927,-1,1126.9,48.1,56.2,165,1\n927,-1,453.4,211.5,69.2,190,1\n927,-1,1487.1,1,63.3,126.3,1\n927,-1,1573.9,587.5,103.8,235.2,1\n927,-1,1475.5,117.6,60.9,161.5,1\n927,-1,1719.9,452.9,80,214.2,1\n927,-1,1276,822.8,96.7,258.2,1\n927,-1,750.4,72.2,56.5,161.1,1\n927,-1,557.5,115.8,58.1,172.4,1\n927,-1,1618.6,79,53.3,163.6,1\n927,-1,1428.1,2.3,47.7,125.6,1\n927,-1,300.9,161.7,70,199.8,1\n927,-1,945.1,392.4,82,223.7,1\n927,-1,312.7,723.6,84.7,257.6,1\n927,-1,472.5,23.2,53.1,153.7,1\n927,-1,328.8,375.7,79.5,193.2,1\n927,-1,863.7,410.4,64.2,213.4,1\n927,-1,1731.9,109.5,53.3,174.2,1\n927,-1,403.5,367.9,61.3,206.8,1\n927,-1,240.1,132.8,54.5,166.9,1\n927,-1,253.7,1,54.9,120.8,1\n927,-1,1748,678,92.5,243.1,1\n927,-1,369.6,209.7,60.6,184.9,1\n927,-1,425.7,67,63.4,179.7,1\n927,-1,313,2,48.1,127.9,0.999\n930,-1,1221.7,30.4,61.3,119.2,1\n930,-1,686.1,206.2,80.2,112.8,1\n930,-1,794.7,139.9,74.5,172.8,1\n930,-1,451.7,213,69.3,189.4,1\n930,-1,1486.9,1,61.5,124.6,1\n930,-1,1127.1,49.6,58.9,168.9,1\n930,-1,1476.4,117.4,61.2,162.3,1\n930,-1,1576,591.7,102,236.9,1\n930,-1,1271.9,813.8,97,267.2,1\n930,-1,557.1,116.4,57.9,172,1\n930,-1,1720.1,454.2,79.2,213.8,1\n930,-1,749.4,70.2,57.1,162.1,1\n930,-1,944,386.8,82,223.7,1\n930,-1,1426.7,2.5,46.7,125.1,1\n930,-1,1619.9,77.8,56,167,1\n930,-1,863,404.5,63.3,213.8,1\n930,-1,301,160.6,69.5,200.4,1\n930,-1,401.3,370.4,63.3,208.4,1\n930,-1,315.4,729.7,84.4,259.6,1\n930,-1,472.3,23.6,55.2,154.3,1\n930,-1,253.8,1,54.6,120.2,1\n930,-1,329.4,376.1,77.6,201.9,1\n930,-1,239.3,132.9,55.1,167.8,1\n930,-1,1750.5,681.3,89.4,245.6,1\n930,-1,366.7,213.3,63.8,184.5,1\n930,-1,1734.6,114.8,52.4,173.7,1\n930,-1,428.1,66.3,60.8,180.1,1\n930,-1,314.9,2.4,44.4,125.8,0.954\n411,-1,1221.7,30.2,62,119.2,1\n411,-1,685.7,205.8,80.2,114.6,1\n411,-1,358.7,105.4,54.1,179.6,1\n411,-1,458.8,258.9,76.5,203.7,1\n411,-1,1653.3,57.2,71.2,171.8,1\n411,-1,551.1,69.9,58.1,170.4,1\n411,-1,109.5,348.3,53.1,190.6,1\n411,-1,1719.6,454.4,79.4,210.3,1\n411,-1,285.8,129.6,55,166.5,1\n411,-1,407.4,610.6,77.4,241.3,1\n411,-1,1770.7,121.9,60.7,171.4,1\n411,-1,947.9,17.4,60.6,170.7,1\n411,-1,831.1,1.1,56.7,130.3,1\n411,-1,794.7,151.2,59.5,172.2,1\n411,-1,298.7,584.9,83.9,254.2,1\n411,-1,220.2,141.5,65.8,155.6,1\n411,-1,1004.7,31,56.1,162.7,1\n411,-1,1581.8,614.7,105.6,247.1,1\n411,-1,205.2,267.4,55.7,185,1\n411,-1,360,1,65.3,112.4,1\n411,-1,1217.2,490.3,59.9,210,1\n411,-1,426.3,90.9,51.9,174.6,1\n411,-1,462.7,69.6,67.8,190.6,1\n411,-1,857.2,533.5,104.4,241.9,1\n411,-1,701.8,558,91.4,238.8,1\n411,-1,1855.5,68.2,65.5,178.6,1\n411,-1,718.3,1,51.2,135.6,1\n411,-1,930.1,549.2,83.6,222.1,1\n411,-1,712.3,92.4,62.8,167.2,0.999\n411,-1,425.4,1.7,43,112.6,0.989\n411,-1,979.5,921.5,83.7,159.5,0.724\n59,-1,1221.7,29.9,61.4,116.7,1\n59,-1,686.5,206.8,79.3,113.5,1\n59,-1,1487.1,69.6,55.2,153.5,1\n59,-1,488.2,185.9,82.3,192.9,1\n59,-1,402.4,346.4,82.5,233.2,1\n59,-1,1361.6,566.5,104.8,243.9,1\n59,-1,704.6,1,55.5,157.5,1\n59,-1,355.4,112.7,54.6,172.9,1\n59,-1,1722.7,456.9,75.9,209.8,1\n59,-1,1002.8,180.4,71.2,179.2,1\n59,-1,212.2,129,49.5,164.5,1\n59,-1,103.2,546.9,84.1,252.5,1\n59,-1,10.4,761.5,67.9,234.2,1\n59,-1,447.6,110.3,52.4,150.4,1\n59,-1,285.3,126.3,54.2,169.8,1\n59,-1,795.4,144.7,63.9,184.8,1\n59,-1,1365.7,212.6,42.4,166.5,1\n59,-1,151.3,360,57.5,191.4,1\n59,-1,840.8,198.5,85.8,174.6,1\n59,-1,1305,177.3,58.2,167.9,1\n59,-1,385.3,40.4,54.1,170.6,1\n59,-1,1470.5,212.9,60.8,194.6,1\n59,-1,540.7,63.7,44.1,164.6,1\n59,-1,484.4,41.9,58.4,163.1,1\n59,-1,1871.4,285.7,49.6,198.8,0.979\n59,-1,893.1,188.7,53.1,167,0.797\n59,-1,439.2,47.9,49.8,146.4,0.332\n333,-1,1220.9,31.5,63.2,118.7,1\n333,-1,389.9,577.6,97.9,252.9,1\n333,-1,686.6,206.8,78.6,112.4,1\n333,-1,1586.9,1,60,128.1,1\n333,-1,449.9,111.6,72.6,190.5,1\n333,-1,1448.4,1.4,55.7,130.7,1\n333,-1,108.2,350.6,52.9,190.9,1\n333,-1,1722.8,69,58.8,154.2,1\n333,-1,1721,459,77.6,210.7,1\n333,-1,795.7,149,61.8,173.6,1\n333,-1,283.5,132.9,55.1,172.6,1\n333,-1,984.7,65.7,60.4,178.3,1\n333,-1,235.3,354.3,58.2,190.1,1\n333,-1,362.9,104.8,57.6,180,1\n333,-1,1829.5,502.4,70.8,210,1\n333,-1,927.3,27.1,65,175.9,1\n333,-1,213.8,141.5,53.6,158.8,1\n333,-1,1533.7,608.3,84.8,243.9,1\n333,-1,897.8,446.3,69.7,207.7,1\n333,-1,520.9,99.3,40.4,168,1\n333,-1,1041.6,74.3,51.3,161.8,1\n333,-1,721,95.4,52.2,170.1,1\n333,-1,507.5,491.1,69.9,224.8,1\n333,-1,840.1,439.1,81.7,218,1\n333,-1,945.3,398.2,69,194.2,1\n333,-1,420.1,48.4,58.1,168.8,0.999\n333,-1,779.4,95.3,41.6,157.6,0.996\n333,-1,939.4,913.8,69.1,167.2,0.96\n333,-1,375.8,924.9,98.5,156.1,0.44\n333,-1,433.9,870.6,79.6,210.4,0.223\n75,-1,1221.6,30.6,61.3,118.1,1\n75,-1,1251.9,173.3,66.9,164.8,1\n75,-1,1486.9,69.6,55.6,149.4,1\n75,-1,686.6,206.9,79.2,114.8,1\n75,-1,410.7,329.8,83.7,230.5,1\n75,-1,704.9,1,56,159.9,1\n75,-1,356.5,105.8,55.5,180,1\n75,-1,1361.4,565.8,104.6,246.5,1\n75,-1,1720.9,456.2,78.3,211.1,1\n75,-1,491.5,200.5,78.3,194.2,1\n75,-1,986.2,185,70.2,187.6,1\n75,-1,1432.3,200.5,75.6,195.8,1\n75,-1,10.5,731.9,71,232.5,1\n75,-1,134.5,354.8,52.5,189.2,1\n75,-1,103,546.3,85.3,254.7,1\n75,-1,289.2,128.3,53.6,167.3,1\n75,-1,776.7,192.3,74.4,179.2,1\n75,-1,211.9,131.9,50.8,163.9,1\n75,-1,1334.8,203.6,43.2,165.8,1\n75,-1,537.6,64.7,48.8,168.1,1\n75,-1,434.2,26,52.1,160.6,1\n75,-1,839.6,168.4,59.2,187.2,1\n75,-1,381.9,29.8,52.2,164.8,1\n75,-1,886.2,190.1,56.6,168.7,1\n75,-1,472,117.8,60.5,162.9,0.999\n75,-1,389.3,901.5,98.7,179.5,0.998\n75,-1,255.3,95.7,56.8,173.4,0.997\n855,-1,1221.1,29.9,62.6,118.5,1\n855,-1,686.7,206.1,79.9,113.2,1\n855,-1,487.8,1,50.3,116.2,1\n855,-1,796,140.3,76.4,174.3,1\n855,-1,1671.1,31.5,52.5,160.5,1\n855,-1,1721.7,453.6,77.5,212.4,1\n855,-1,341.9,299,79.6,177.1,1\n855,-1,1575.5,590.2,103.4,235.2,1\n855,-1,559.1,115.9,59.5,175.8,1\n855,-1,1073.3,1,61,119.2,1\n855,-1,1471.4,62.2,60.3,159.4,1\n855,-1,268.7,607.1,82.3,245.3,1\n855,-1,1411.5,27,53.1,153.9,1\n855,-1,753.1,70.9,54.9,162.7,1\n855,-1,238.1,132.8,54.6,167.9,1\n855,-1,253.9,1,55.2,121.7,1\n855,-1,433.6,283.1,54.8,200.9,1\n855,-1,298,161.2,71.8,195.3,1\n855,-1,922.5,514.5,72.4,233.5,1\n855,-1,473,143.5,61.2,189.2,1\n855,-1,1000.1,494.1,82.8,239.2,1\n855,-1,415.8,143.3,60.5,172.3,1\n621,-1,1221.7,30.1,62.2,118.7,1\n621,-1,686.9,206.1,80.1,113.3,1\n621,-1,1480.9,5.2,60.5,143.5,1\n621,-1,1624.2,209.8,79.3,193,1\n621,-1,353,294,67.4,201.6,1\n621,-1,801.3,146,65.9,170,1\n621,-1,1710.8,456.7,92.9,209.7,1\n621,-1,1573.9,589,97.3,236.4,1\n621,-1,358,115.9,52.2,171.3,1\n621,-1,556.5,111.3,53.8,176.4,1\n621,-1,288.6,127.4,51.4,168.2,1\n621,-1,352.6,1,53.9,120.8,1\n621,-1,246.2,250.1,61.6,189.9,1\n621,-1,174.7,238,75.4,203.8,1\n621,-1,497.2,88,47.2,158.3,1\n621,-1,754.4,82.1,42.2,152.6,1\n621,-1,566.5,541.9,73.1,240.5,1\n621,-1,1598.1,1.4,52.5,94.5,1\n621,-1,229.3,134,51.7,162.8,1\n621,-1,405.8,99.8,52.1,161.7,0.999\n621,-1,445.4,82.4,47.6,166.8,0.999\n621,-1,1113.3,914.6,101.5,166.4,0.995\n272,-1,1222.3,31.7,60.9,118.5,1\n272,-1,385.6,11.3,61,159.9,1\n272,-1,687.5,206.5,78.3,111.8,1\n272,-1,1638,21.1,60.2,152.7,1\n272,-1,289.9,129.6,55.3,170.6,1\n272,-1,455.8,153.7,74.2,209.4,1\n272,-1,1114.1,97.2,58.3,169.2,1\n272,-1,942.1,89.2,69.1,181.7,1\n272,-1,1720.7,457.2,77.9,212,1\n272,-1,219.4,129.5,54.6,164.1,1\n272,-1,796.1,149.8,62.3,175.3,1\n272,-1,381.9,468.8,89.9,232.7,1\n272,-1,354.5,105.5,53.4,180.1,1\n272,-1,107.9,349.9,50.9,189.8,1\n272,-1,704,1.3,54.6,158.2,1\n272,-1,186.7,573,87.8,254.1,1\n272,-1,1041.6,102,62.2,185.4,1\n272,-1,1472.9,41.2,55.3,153.3,1\n272,-1,719.9,334.9,68.1,194.5,1\n272,-1,232.8,433.3,61.5,199.4,1\n272,-1,1416.8,568.1,101.6,250.7,1\n272,-1,259.7,775.9,87.9,269.4,1\n272,-1,805.7,365.7,90.3,217.2,1\n272,-1,875.5,378.7,77.9,195.4,1\n272,-1,753.8,102.9,47.1,172,1\n272,-1,565.3,403.9,64.1,215.5,1\n272,-1,513.1,115.7,53,174.6,1\n272,-1,473.7,395,73.8,224.5,1\n272,-1,864.4,108.8,43.4,155.3,1\n272,-1,944.4,918,82.6,163,0.93\n660,-1,1220.5,28.6,62.8,121.1,1\n660,-1,687,206.2,79.8,113.1,1\n660,-1,1481.6,5.2,60.6,143.4,1\n660,-1,1710.8,456.4,96.1,208.5,1\n660,-1,802.5,144.4,63.5,172.2,1\n660,-1,550.9,111.2,60.5,177.5,1\n660,-1,1145.8,2.8,71.8,112.2,1\n660,-1,359.3,114.7,50.8,168.9,1\n660,-1,325.6,332.5,69.8,209.5,1\n660,-1,1575.6,588.2,96.6,234.3,1\n660,-1,440.9,529.6,78.9,245.6,1\n660,-1,1612.9,170.8,78.4,184.2,1\n660,-1,408.4,1,57.7,155.2,1\n660,-1,475,110.2,48,175.9,1\n660,-1,223.1,214.1,56.7,202.8,1\n660,-1,751.2,80.9,46.3,154.3,1\n660,-1,426.2,124.8,59.9,159.1,1\n660,-1,275.1,231.5,58,181.9,1\n660,-1,1424.5,906.1,97.4,174.9,1\n660,-1,354.5,1.3,52.2,142.9,0.999\n660,-1,287.6,123.2,53,173.7,0.999\n660,-1,1352.7,926.1,81.2,154.9,0.989\n660,-1,1503.1,169,46.1,169.5,0.176\n113,-1,1220.8,30,63.5,119.8,1\n113,-1,355.7,105.4,56.9,178.1,1\n113,-1,210.2,129.1,51.5,163.7,1\n113,-1,391.7,798.7,98.2,277.5,1\n113,-1,704.2,1,55.6,159.8,1\n113,-1,1487.1,68.5,56.4,151.2,1\n113,-1,108,350.3,50.2,187.4,1\n113,-1,934.1,206.8,68.9,191.4,1\n113,-1,1721.1,457.1,78,210.6,1\n113,-1,290.3,124.2,56.3,171.5,1\n113,-1,1145.1,151.2,57.1,169.9,1\n113,-1,1358,566.6,106.1,244.9,1\n113,-1,1249.9,184.1,46.7,168.2,1\n113,-1,425.5,290.3,80.9,226.9,1\n113,-1,514.5,235.4,71.6,203.2,1\n113,-1,1370,181.4,63,193.9,1\n113,-1,538.5,65,49.2,167.2,1\n113,-1,480.5,153.4,55.2,164.7,1\n113,-1,53.8,674,82.4,223,1\n113,-1,103.3,544.9,83.3,257.3,1\n113,-1,840,220.6,57,174.4,1\n113,-1,441.4,1,54.4,154.3,1\n113,-1,795.9,204.2,60.4,190.5,1\n113,-1,481.4,40.4,60.2,158,0.999\n113,-1,376.9,2.9,46.5,157.9,0.998\n113,-1,1130.5,928.8,82.2,152.2,0.274\n1033,-1,1221.6,30.1,61.7,118.7,1\n1033,-1,687.1,206.8,79.1,113.2,1\n1033,-1,792.7,141.3,72.8,172.6,1\n1033,-1,487.9,307.9,73.6,194.1,1\n1033,-1,1719.3,455.6,82.3,211.6,1\n1033,-1,288.9,128.6,53,168.3,1\n1033,-1,1701.6,200.6,64.3,180.9,1\n1033,-1,234.1,139.9,56.9,165.5,1\n1033,-1,847.2,256.8,63.9,196.4,1\n1033,-1,366.6,321.3,74,198.5,1\n1033,-1,936.2,247.1,67.3,200.3,1\n1033,-1,1265.8,180.3,65,169.5,1\n1033,-1,1574.1,590.2,103.6,239.4,1\n1033,-1,294,316.1,67.6,203,1\n1033,-1,751.1,76.4,53.8,160.6,1\n1033,-1,1138,574.2,84.1,248.4,1\n1033,-1,1687.1,684,77.1,234.4,1\n1033,-1,288.8,519.9,87.3,211.7,1\n1033,-1,371.4,104.7,59.1,178.7,1\n1033,-1,374.7,504.1,64.8,228.3,1\n1033,-1,1848.3,242.1,63.7,194.5,1\n1033,-1,1469.5,207.5,68.6,160,1\n1033,-1,580.7,541.8,71,249.2,1\n1033,-1,308.4,2.3,37,129.5,1\n1033,-1,435.8,172.6,61.9,165.3,1\n1033,-1,539.1,120.8,61.3,170.9,1\n1033,-1,485.8,165.2,65.7,190.5,1\n278,-1,1221.3,31.5,62,118.2,1\n278,-1,686.5,207.1,78.6,112.5,1\n278,-1,1471.6,35.6,54.5,149.4,1\n278,-1,1647.4,22.8,57.2,156.3,1\n278,-1,390.9,465.7,83.8,225.4,1\n278,-1,394.9,17,57.7,164,1\n278,-1,288.9,128.5,55.2,172.7,1\n278,-1,1031.5,100.1,62.5,186.9,1\n278,-1,355.3,108.6,53.4,177.5,1\n278,-1,454.3,146.6,75.9,206.4,1\n278,-1,1720.3,457.1,79.1,211.6,1\n278,-1,108.2,351.2,51.4,188.4,1\n278,-1,941.3,83.8,67.5,179,1\n278,-1,795.4,149.1,60.6,174.1,1\n278,-1,704.3,1.2,54.6,158.7,1\n278,-1,1108.3,96.9,52,164,1\n278,-1,222.5,132,52.7,161.1,1\n278,-1,198.1,576.4,90.5,251.7,1\n278,-1,740.2,332.7,68,187.5,1\n278,-1,269.4,795.4,89.6,263,1\n278,-1,809.5,371.9,86.6,212,1\n278,-1,232.8,424.3,59,201.6,1\n278,-1,881.1,387,76.6,194.5,1\n278,-1,559.2,412.4,64.6,213.1,1\n278,-1,752.2,105.2,46,168.6,1\n278,-1,515.6,111.4,51.3,177.3,1\n278,-1,1427.9,577.7,98.2,246.5,1\n278,-1,853,111.1,43.9,158.5,1\n278,-1,470,398.8,69.3,223.3,1\n278,-1,944.7,920.5,85.8,160.5,0.761\n481,-1,1221.8,30.9,62.1,117.9,1\n481,-1,686.8,206.4,79.2,113.6,1\n481,-1,999.8,1,57.2,145.6,1\n481,-1,931.8,1,57,140.5,1\n481,-1,1791.6,149,73.6,187.5,1\n481,-1,1502.2,1,58.8,121,1\n481,-1,294.3,197.3,52.1,172.9,1\n481,-1,1686.1,458.4,114.8,209.7,1\n481,-1,803.8,589.6,89.3,256.8,1\n481,-1,453.1,169.4,71.4,193.7,1\n481,-1,876.4,1,53.7,132.7,1\n481,-1,131.1,341,57.9,189.5,1\n481,-1,1783.9,359.7,82,213.8,1\n481,-1,315,737.2,74.4,262.3,1\n481,-1,361.6,109.3,54.9,176.1,1\n481,-1,1728.6,174.9,63.6,168.6,1\n481,-1,803.3,142.4,47.7,179,1\n481,-1,220.2,137.9,60.7,160.1,1\n481,-1,1634.3,332.6,62.9,199.4,1\n481,-1,219.9,706.8,94.3,265.7,1\n481,-1,913.8,641.4,119.3,253.6,1\n481,-1,1704,51.2,49.2,165.5,1\n481,-1,1536.1,595.9,79.6,246.2,1\n481,-1,447.5,25.5,72.7,185.3,1\n481,-1,1649.2,41.8,56.5,175,1\n481,-1,507.8,87.1,62,173.1,1\n481,-1,411.3,5.7,47.1,157,0.999\n481,-1,713.4,93.2,56.3,164.4,0.999\n481,-1,417.2,154.2,58.6,179.4,0.999\n481,-1,752.3,98.6,53.9,141.2,0.999\n481,-1,988.9,660.8,79.9,224.3,0.502\n481,-1,1019.7,930.8,79.4,150.2,0.243\n711,-1,1221.5,30.3,62.3,118.7,1\n711,-1,687,206.3,79.5,113.3,1\n711,-1,1481.1,6.7,57.2,145,1\n711,-1,1601,125.1,68.9,184.1,1\n711,-1,556.4,111,58.2,178,1\n711,-1,481.3,151.3,50.2,179.3,1\n711,-1,1573.2,587.9,101.8,237.4,1\n711,-1,1474.9,119.5,53.3,180,1\n711,-1,1197.7,797,92.7,265.8,1\n711,-1,1712.1,455.4,95.8,208.6,1\n711,-1,411.2,165.1,76.5,166.5,1\n711,-1,294.7,396.6,76.7,218.9,1\n711,-1,360.1,110.4,50.7,174,1\n711,-1,260.3,194.8,56.2,198,1\n711,-1,749.7,80.3,49.7,156.1,1\n711,-1,391.3,546.2,72.5,240.1,1\n711,-1,1287.3,772.9,89.6,279.3,1\n711,-1,800.2,138.6,47.3,172.2,1\n711,-1,471.3,21.9,45.3,145.5,1\n711,-1,412.2,30.5,61.8,162,1\n711,-1,307,207.6,59,176.2,1\n711,-1,231.6,133.7,50.9,167,1\n711,-1,981.9,2.6,80.1,84.7,0.998\n58,-1,1221.8,29.7,61,116.1,1\n58,-1,686.2,206.8,80.2,113.2,1\n58,-1,1487.3,69.5,55.2,153.7,1\n58,-1,487.9,182.2,85.1,196.4,1\n58,-1,401.7,346.4,82.3,233.2,1\n58,-1,1361.9,566.2,104.3,245.5,1\n58,-1,705.2,1,55.1,158.4,1\n58,-1,1721.4,456.5,77.4,210.4,1\n58,-1,1002.7,178.8,72.2,178.1,1\n58,-1,445.4,108.6,54.7,152.9,1\n58,-1,355.9,114.2,53.7,171.9,1\n58,-1,102.7,546.4,84.5,253.3,1\n58,-1,212.6,129.4,49.5,164.8,1\n58,-1,794.9,145.7,63.4,185.9,1\n58,-1,10.4,766.3,67.1,231.2,1\n58,-1,284.7,126.3,54.2,169.5,1\n58,-1,153,361.2,59.3,192,1\n58,-1,1307.9,177.6,59.8,167.8,1\n58,-1,847.2,195.8,79.6,176.3,1\n58,-1,385.1,41.5,55.4,169.5,1\n58,-1,1367.6,210.6,41.6,171.4,1\n58,-1,540.7,62.5,44,166.7,1\n58,-1,1472.6,215.3,60.2,192.9,1\n58,-1,484.4,43.1,57.6,161.5,0.999\n58,-1,1869.7,282.2,51.3,201.9,0.988\n58,-1,895,187.2,50.1,173.5,0.746\n58,-1,241.9,93.7,47.6,178.5,0.157\n682,-1,1221.6,29.4,61.7,121.6,1\n682,-1,687,207,79.8,113.3,1\n682,-1,1480.9,4.3,60.6,146.8,1\n682,-1,366.5,532.4,109.3,249.7,1\n682,-1,1488.6,155,53.3,175.7,1\n682,-1,485.3,131.8,46.1,174.7,1\n682,-1,1709.9,456.1,98.1,210.8,1\n682,-1,563.3,112.7,50,177.1,1\n682,-1,804.2,145.4,58.8,173.9,1\n682,-1,314.3,357.4,69.5,213.3,1\n682,-1,1619.1,152.7,72.2,187.7,1\n682,-1,1574.4,589.7,97.2,233.3,1\n682,-1,417.4,141.2,67.7,161.8,1\n682,-1,360.7,115.5,49.5,168.8,1\n682,-1,750,80.1,49.8,156.9,1\n682,-1,1277.4,870.4,91.2,210.6,1\n682,-1,1072.8,1,80.9,102.2,1\n682,-1,403.1,12.3,58.7,161.8,1\n682,-1,237.1,206.6,64.2,198.6,1\n682,-1,1364.7,855.1,97.1,225.9,1\n682,-1,291.7,220.8,59.4,176.4,1\n682,-1,480.1,38.9,48.2,141.4,0.999\n682,-1,835.1,924.6,73.5,156.4,0.938\n682,-1,294.3,1,62.6,134.8,0.186\n682,-1,225.6,137.9,48,167.3,0.103\n222,-1,1221.4,31,60.8,120.1,1\n222,-1,686,206.7,79.5,113.7,1\n222,-1,401,570.2,83.9,246,1\n222,-1,108.7,347.2,51.5,190.7,1\n222,-1,1194.9,131.9,46.6,166.4,1\n222,-1,1491.6,68.4,54.4,148.9,1\n222,-1,705.6,1,55.1,160.2,1\n222,-1,356.7,105.8,53.5,180.4,1\n222,-1,289.2,128.8,54.7,171.9,1\n222,-1,212.3,127.5,54.8,165.7,1\n222,-1,1117.9,130.1,58.6,182.1,1\n222,-1,429.6,190.3,74.6,214.9,1\n222,-1,1720.8,456.8,78.1,212.2,1\n222,-1,902.8,139,76.8,185.7,1\n222,-1,1356.6,566.7,105.2,245.6,1\n222,-1,131.4,672,103.8,255.7,1\n222,-1,795,150.1,61.6,169.3,1\n222,-1,519.2,123.7,46.7,176,1\n222,-1,506.8,335.2,72.8,220.4,1\n222,-1,216.1,505.1,61.2,200.9,1\n222,-1,824.1,325,75.9,190.4,1\n222,-1,62.3,625.1,108.9,243,1\n222,-1,987.7,126.3,39,154.1,1\n222,-1,765.5,312.9,76.1,204,1\n222,-1,940.1,908.4,71.8,172.6,0.993\n222,-1,595.7,344.5,60.8,201.1,0.949\n222,-1,1571.4,2.9,52,137.6,0.948\n413,-1,1221.8,30.2,61.7,118.4,1\n413,-1,685.9,205.7,80.3,114.5,1\n413,-1,455,250.8,80.1,207.4,1\n413,-1,358.4,108,54.3,176.7,1\n413,-1,551.7,71.2,56.2,165.7,1\n413,-1,1720.9,452.3,77.3,213.6,1\n413,-1,1656.3,61.3,70.8,169.5,1\n413,-1,1771.1,125.5,59.1,168.3,1\n413,-1,404.2,615.2,76.3,242,1\n413,-1,296.2,592.5,83.3,246.7,1\n413,-1,286.9,130.2,55,165,1\n413,-1,358.2,1,67.9,112.1,1\n413,-1,946.9,17.3,59.9,169.8,1\n413,-1,110.4,349.8,51.9,189.5,1\n413,-1,831.5,1.5,54.1,131.3,1\n413,-1,1005.5,30.6,55.4,162.1,1\n413,-1,796.3,150.5,57.7,172.3,1\n413,-1,219.8,143,67.5,155.1,1\n413,-1,1583.2,615.2,102.3,241.8,1\n413,-1,206,265.3,55.4,185.6,1\n413,-1,1223.9,492,63,207.9,1\n413,-1,858.9,538.8,103.9,241.7,1\n413,-1,460.5,68.5,70.6,196.1,1\n413,-1,426.2,93.2,53.4,173.1,1\n413,-1,707.9,558.4,88.8,244.1,1\n413,-1,1847.5,70.2,73.5,179.8,1\n413,-1,711.5,88.1,64.7,174.8,1\n413,-1,717.7,1,51.5,130.1,1\n413,-1,933,554.6,81.9,216.1,0.999\n413,-1,426,1,40.7,112.4,0.984\n413,-1,980.7,923.1,81.2,157.9,0.741\n718,-1,1221.5,29.9,61.9,118.4,1\n718,-1,686.8,206,79.5,113.4,1\n718,-1,1479.9,7.9,58.3,145.2,1\n718,-1,553.3,113.1,59.2,177.5,1\n718,-1,1474.5,115,52.4,182.7,1\n718,-1,1711.7,456.6,95.2,207.1,1\n718,-1,1598.8,120.4,64.2,183.7,1\n718,-1,1575.2,590.2,98.8,234.8,1\n718,-1,299.3,402.6,75.2,216.7,1\n718,-1,479,160.5,52.5,181.8,1\n718,-1,413.2,170,67.5,163.4,1\n718,-1,391.2,548.3,92.2,243.2,1\n718,-1,261.3,192.5,56.5,198.6,1\n718,-1,1265.6,757.9,90.9,267.7,1\n718,-1,415.4,34.7,60.8,164.8,1\n718,-1,360.2,113.7,49.6,168.6,1\n718,-1,750.1,82,49.2,153.3,1\n718,-1,792.8,136.1,47.8,178.3,1\n718,-1,1183.8,780.9,84.3,266.4,1\n718,-1,468.3,18.3,46.5,138.3,1\n718,-1,312,206.2,62.2,175.7,1\n718,-1,235.4,133.7,49.8,167.9,0.999\n718,-1,966.5,1,73.8,78.8,0.096\n980,-1,686.6,206.5,79.5,112.5,1\n980,-1,1221.5,30.1,62.4,120.1,1\n980,-1,794.5,140.5,71,171.5,1\n980,-1,1177.5,113.7,57.7,165.3,1\n980,-1,493.7,249.4,67.1,186.6,1\n980,-1,334.1,822.3,95.5,258.7,1\n980,-1,410.1,265.4,69.2,190.9,1\n980,-1,1786.5,165.1,68.4,182.6,1\n980,-1,1574.3,590.7,103.9,234.7,1\n980,-1,1662.7,133.9,56.1,170.6,1\n980,-1,1469.3,159.5,70.1,167.7,1\n980,-1,230.6,137.9,54.8,163,1\n980,-1,842.5,326.3,69.2,201.3,1\n980,-1,322.1,256.9,63.1,198,1\n980,-1,1719.3,452.2,79.8,216,1\n980,-1,751.6,72.3,56.3,163.5,1\n980,-1,304.6,440.1,87,209.3,1\n980,-1,547,119.5,54.3,168.8,1\n980,-1,925.1,313.7,66.7,213.3,1\n980,-1,1452.1,1,57.9,98.2,1\n980,-1,393.7,432.8,64,216.2,1\n980,-1,290.3,126.2,53.2,175.7,1\n980,-1,1198.3,687.3,87.3,270.5,1\n980,-1,447.1,60.2,54.5,186,1\n980,-1,1739.3,673.5,96,250.6,1\n980,-1,313.6,1.4,47.4,128.8,1\n980,-1,362.1,168.7,65.5,183.4,1\n980,-1,381,1,54.9,132.4,0.999\n980,-1,1389.8,1.7,46.9,95.9,0.999\n980,-1,491,61.9,51.7,157.9,0.998\n150,-1,1221.5,31.4,62.2,118.1,1\n150,-1,1488.2,68.2,55.4,149.2,1\n150,-1,704.4,1,56.2,157.8,1\n150,-1,356.5,102.1,55.5,180.5,1\n150,-1,1722.3,456,76.4,211.7,1\n150,-1,1027.7,133.2,58.5,176.2,1\n150,-1,420.8,255,76.8,222.3,1\n150,-1,109.2,352.7,49,183.9,1\n150,-1,1163.7,163.5,52.6,162.9,1\n150,-1,288.3,121.8,54.7,175.1,1\n150,-1,1358.4,565.7,105.8,246.7,1\n150,-1,216.7,126,54.5,165.3,1\n150,-1,539,65.7,50.6,163.1,1\n150,-1,403.2,714.9,93.9,262.7,1\n150,-1,686.6,205.8,81.7,114.8,1\n150,-1,1282.7,176,64.6,179.3,1\n150,-1,809.7,258.3,62.6,180.3,1\n150,-1,100.7,541.3,88.3,261.6,1\n150,-1,530.9,270.7,59.7,203.1,1\n150,-1,591.2,259.2,58.3,194,1\n150,-1,863.3,203.3,69.9,195.5,1\n150,-1,382.4,1.1,47.7,126.3,1\n150,-1,487,197.9,59.6,166.8,1\n150,-1,758,245.9,69.1,191.2,1\n150,-1,460.5,36.3,50,162.7,1\n150,-1,178.5,614,72.5,215.9,1\n150,-1,1049.8,916.9,69.6,164.1,0.991\n249,-1,1220.7,30.9,62.8,117.9,1\n249,-1,686.8,207.1,78.6,113.6,1\n249,-1,1598.9,8.7,67.1,144.9,1\n249,-1,796.5,153.3,59.8,172.4,1\n249,-1,393,514,89.3,248.7,1\n249,-1,1375,568.2,102.9,241.5,1\n249,-1,212.1,127.5,55.3,164.5,1\n249,-1,1480.8,57.5,54.3,152.2,1\n249,-1,223.9,465.9,59,199.4,1\n249,-1,1152.9,112,52.6,167.4,1\n249,-1,1720.5,456.1,78,212.5,1\n249,-1,288,129.5,54.5,168.7,1\n249,-1,355.3,104.8,55.5,181.4,1\n249,-1,108,350.5,51.1,190.4,1\n249,-1,449.9,173,75.9,210.4,1\n249,-1,704.2,1,54.4,157.3,1\n249,-1,1075.1,116.4,59.1,183.1,1\n249,-1,934.3,109.8,71.8,182.9,1\n249,-1,215.7,734.3,89.2,253.1,1\n249,-1,490.5,361.6,73.5,228.5,1\n249,-1,515.9,117.2,54.1,183.5,1\n249,-1,855.3,352,79.3,196.9,1\n249,-1,123.6,568.1,81.4,241.8,1\n249,-1,585.1,376.6,63.4,204.2,1\n249,-1,789.7,340.6,83.2,209.5,1\n249,-1,765.8,99.7,53,169,0.999\n249,-1,928.8,904,75.7,177,0.997\n249,-1,908,118.1,44.7,141,0.278\n87,-1,1222,30.4,60.9,116.6,1\n87,-1,418.3,316.9,82.4,231.4,1\n87,-1,704.1,1,56.3,158,1\n87,-1,1487.2,69.5,54.8,147.5,1\n87,-1,355.4,106.2,56.6,178.7,1\n87,-1,394.1,868.3,104,212.7,1\n87,-1,1721.6,456.8,77.3,209.9,1\n87,-1,499.5,209.5,74.4,199.9,1\n87,-1,1220.4,160.4,62.6,169.4,1\n87,-1,973.3,193.9,72.8,187.7,1\n87,-1,1359.2,566.1,105,244.8,1\n87,-1,102.4,547.5,85.7,252,1\n87,-1,294.8,127.5,51.5,168.6,1\n87,-1,742,186.6,64.5,182.3,1\n87,-1,210.8,130.8,50.3,163.3,1\n87,-1,124.9,352.2,45.8,192,1\n87,-1,1416.5,196.5,66,192.3,1\n87,-1,20.4,715.1,69,227.5,1\n87,-1,1311.2,200,44.3,170.8,1\n87,-1,1476.9,193.1,53,176.8,1\n87,-1,539,63.3,48.6,172.1,1\n87,-1,437.6,15.9,52.8,159.3,1\n87,-1,873.6,200.6,55.8,169.7,1\n87,-1,377.9,21.1,53.9,162.4,1\n87,-1,480.5,127.3,56.9,168.8,0.999\n87,-1,255,93.6,60.4,181,0.999\n87,-1,834.7,177.2,56.8,187.1,0.999\n87,-1,691.9,206.1,62.3,120.3,0.999\n87,-1,798.6,160.9,47.1,153.3,0.397\n87,-1,485.7,34,50.4,175,0.083\n128,-1,1221.5,29.7,62.3,119.4,1\n128,-1,356.1,103.5,56.8,181.4,1\n128,-1,1487.7,69.8,56,147.9,1\n128,-1,704.1,1,56.5,158.5,1\n128,-1,108.4,350.4,49.3,187.1,1\n128,-1,399,763.7,96.2,273.4,1\n128,-1,1097.8,139.9,59,174.4,1\n128,-1,287.9,126.9,54.6,168.9,1\n128,-1,1358.3,566.7,105.1,244.4,1\n128,-1,425.4,278.5,74.3,220.3,1\n128,-1,1722.2,457.5,75.8,209.7,1\n128,-1,905,211,71.9,190.8,1\n128,-1,1337.8,181.6,56.5,180.4,1\n128,-1,688.5,203.5,76.5,115.5,1\n128,-1,539.2,66,50.6,166.8,1\n128,-1,1214.7,177.8,45.9,163.8,1\n128,-1,218.5,128.5,50.8,165.4,1\n128,-1,524.4,246.8,71.1,204.9,1\n128,-1,779.9,221.4,66.1,191.7,1\n128,-1,477.3,167.1,57.8,174.2,1\n128,-1,378.9,2.2,46.1,142.6,1\n128,-1,478.8,43.8,56.4,161.5,1\n128,-1,448,1,51.7,144.7,1\n128,-1,112.6,648,60.1,224.8,1\n128,-1,826.9,234.8,54.5,170.8,0.999\n128,-1,1088.4,926,83.2,155,0.925\n332,-1,1220.8,31.2,63.9,118.8,1\n332,-1,686.5,206.9,79,112.2,1\n332,-1,389.9,576.5,90.9,255.4,1\n332,-1,1721.8,66.6,59.8,155.4,1\n332,-1,449.4,112.3,74.2,191.6,1\n332,-1,1585,1.3,61.4,127.1,1\n332,-1,1448.7,1.5,55.7,131.8,1\n332,-1,109,350.5,51.7,190.2,1\n332,-1,1720.1,458.5,79,211.2,1\n332,-1,361.5,104.5,58.6,182.4,1\n332,-1,282.7,132.5,55.3,172.6,1\n332,-1,984.2,64.7,61.7,181.3,1\n332,-1,235.7,354.6,59,190.3,1\n332,-1,927.7,27.1,64.9,176.6,1\n332,-1,796.8,151.9,58.4,171.2,1\n332,-1,1830.6,503.1,69.7,210.7,1\n332,-1,897.5,445.7,70.8,205.4,1\n332,-1,213.8,141.9,53.4,158.1,1\n332,-1,720.8,94.3,52.9,173.5,1\n332,-1,1533.4,606.6,83.9,246,1\n332,-1,1042.4,75.9,52.1,160.9,1\n332,-1,508.8,489,69.5,228.6,1\n332,-1,838.3,438.5,83,217.4,1\n332,-1,521.1,100.6,39.5,167.2,1\n332,-1,419.4,48.6,57.6,167.1,1\n332,-1,939.4,397.6,72.6,191.8,0.999\n332,-1,780.9,94.6,40.7,161,0.989\n332,-1,938.8,913.1,67.6,167.9,0.966\n332,-1,410.5,467.7,86.1,229.1,0.638\n332,-1,375.5,919.4,88.8,161.6,0.117\n433,-1,1221.8,30.7,62.1,118.2,1\n433,-1,938.8,6.5,62.9,165.3,1\n433,-1,685.9,205.8,80.8,112.9,1\n433,-1,1313.2,519.1,67.4,207.7,1\n433,-1,359,108.4,52.5,179,1\n433,-1,447.6,227.2,79.5,202.2,1\n433,-1,844.8,1,54.2,135.6,1\n433,-1,1009.6,21.3,53.7,160.4,1\n433,-1,1681.1,87.5,66.3,174.2,1\n433,-1,111.7,351,53.6,187.8,1\n433,-1,1715.5,459.1,83.5,207.2,1\n433,-1,281.5,620.8,90.5,254.8,1\n433,-1,285.8,130,52.9,165.8,1\n433,-1,755.6,562.4,87.2,248.9,1\n433,-1,1755.9,145.7,58.6,164.4,1\n433,-1,798,150.9,53.5,173.8,1\n433,-1,226.4,245,52.3,173.7,1\n433,-1,379.2,651.1,70.2,244,1\n433,-1,1567.9,614.7,88.9,244.5,1\n433,-1,535.6,73.3,56.6,165.6,1\n433,-1,361.2,1,65.3,130,1\n433,-1,871.2,568.9,107.5,241.3,1\n433,-1,1848.2,418.8,72.8,188.3,1\n433,-1,430.5,109.8,58.6,172.1,1\n433,-1,952.9,581.1,84.6,218.7,1\n433,-1,222.3,137.6,69.7,157.7,1\n433,-1,713.5,87.6,60,174.4,1\n433,-1,422.2,1,44.8,127.9,1\n433,-1,1766.3,69,89.8,177.2,0.997\n433,-1,760.1,85.2,41.1,152.8,0.976\n433,-1,725.9,2.6,48.1,111.1,0.974\n433,-1,997.3,930.6,83.8,150.4,0.959\n433,-1,469.5,54.9,52.3,175.7,0.448\n573,-1,1221.1,30.2,62.5,119.5,1\n573,-1,686.9,205.8,79.5,114.3,1\n573,-1,1481,4.9,59.5,144.4,1\n573,-1,793.2,146.2,69.6,171.6,1\n573,-1,378.1,237.3,67.8,195.6,1\n573,-1,1650.4,1,56.8,136.2,1\n573,-1,1715,454.6,86.2,212,1\n573,-1,1830.9,254.2,70.5,180.3,1\n573,-1,550.9,115.6,51.4,170.5,1\n573,-1,1658,258.2,70.8,202.4,1\n573,-1,218.2,134.7,54.4,163.2,1\n573,-1,288.3,120.5,52.5,175.8,1\n573,-1,872.6,1,52.1,104.5,1\n573,-1,754.7,79.8,43.2,154.9,1\n573,-1,448.9,128.5,51.1,162.2,1\n573,-1,1582.9,590.4,85.2,231.3,1\n573,-1,208.8,281.9,63.2,192.3,1\n573,-1,148.6,256.5,62.4,213.7,1\n573,-1,1029.2,812.3,137.4,268.7,1\n573,-1,720,583.7,84.1,253.4,1\n573,-1,360.3,108.4,52.2,174.7,1\n573,-1,422.6,58.1,46.6,169.1,0.999\n573,-1,465.2,75,61,173.4,0.999\n573,-1,250.5,921.2,81.5,159.8,0.988\n573,-1,1005.9,941.8,76.8,139.2,0.688\n472,-1,1221.8,30.4,62.6,118,1\n472,-1,686.8,206.1,78.9,112.8,1\n472,-1,1003.5,1,55.8,152.8,1\n472,-1,934.5,1,57.8,145.8,1\n472,-1,283.8,208.1,54.3,173.9,1\n472,-1,453.3,185.5,71.2,194.1,1\n472,-1,1791.5,363.1,90.9,213.1,1\n472,-1,1506.3,1,58.6,115.7,1\n472,-1,1698.9,458.5,100.1,209.9,1\n472,-1,359.6,112.1,53.5,174.5,1\n472,-1,1539,600.5,76.6,243.8,1\n472,-1,877.5,1,51.4,132.5,1\n472,-1,804.6,143.4,48.3,175.6,1\n472,-1,1642.4,341.8,63.9,197.6,1\n472,-1,121,342.4,58.6,190.8,1\n472,-1,809.1,587.1,99.5,260.5,1\n472,-1,328.7,720.4,74.8,249.9,1\n472,-1,234.6,689.3,92.1,269.9,1\n472,-1,1725.3,169.1,63.9,167.3,1\n472,-1,217.6,137.1,64.5,159.9,1\n472,-1,515,82.9,59.4,172,1\n472,-1,902.6,626.9,117.3,241.9,1\n472,-1,445.2,32.9,73.6,182.8,1\n472,-1,1663.2,47.5,58.4,175,1\n472,-1,1764.1,144.5,86.8,181.8,1\n472,-1,712.6,93.6,54.8,163.4,0.999\n472,-1,752.6,97.8,55.7,140.2,0.999\n472,-1,1714.2,57.7,51.7,170.7,0.998\n472,-1,414.4,5.3,46.3,150.8,0.997\n472,-1,988.7,649.7,79.2,226.8,0.995\n472,-1,1025.2,922.8,84.6,158.2,0.948\n472,-1,428.4,142.4,49,172.3,0.939\n218,-1,1220.8,30.5,62.4,120.1,1\n218,-1,687,206.2,78.7,114.6,1\n218,-1,403.1,576.2,89,252.2,1\n218,-1,108.5,347.2,50.8,189.5,1\n218,-1,212.7,126.6,54.7,167.1,1\n218,-1,705.1,1.5,55.5,159.3,1\n218,-1,1492,68.7,53.9,149.3,1\n218,-1,357.4,104.9,52.9,180.7,1\n218,-1,117.3,667.7,105.6,255.8,1\n218,-1,1125.5,129.4,59,188.7,1\n218,-1,902.2,142.6,74.7,181.4,1\n218,-1,793.2,152.3,62.8,169.4,1\n218,-1,427.6,195.8,74.6,216,1\n218,-1,288,126.4,55.6,173.4,1\n218,-1,1356.9,566.7,103.1,244.9,1\n218,-1,1721.3,457.4,77.9,210.3,1\n218,-1,1199.8,134.5,42.9,167.1,1\n218,-1,518.8,122.4,50.9,178.8,1\n218,-1,507.8,330.6,73,221.7,1\n218,-1,998.8,128.7,42.3,158.8,1\n218,-1,219.8,512.5,60.4,204.3,1\n218,-1,818,321.6,74.8,193.6,1\n218,-1,761.5,311,78.3,206.9,0.999\n218,-1,38.8,615.3,111.2,252.3,0.999\n218,-1,829.4,111.1,67,168.2,0.998\n218,-1,943.5,910.6,71.4,170.4,0.992\n218,-1,597.6,339,60,202,0.595\n202,-1,1221.4,31.2,61.5,118.4,1\n202,-1,399.6,605.9,90.7,246.3,1\n202,-1,687,207.1,78.5,112.6,1\n202,-1,210.7,127.5,56.8,166.9,1\n202,-1,1490.4,69.1,54.7,149.7,1\n202,-1,108.8,349.2,49.5,188.6,1\n202,-1,704.8,1.2,55.3,159,1\n202,-1,521.6,132.8,62.6,166.3,1\n202,-1,1721.3,456.8,77.6,211.1,1\n202,-1,1359.1,569.7,103.1,242.9,1\n202,-1,288.7,126.6,55.2,172.8,1\n202,-1,511.3,313.9,76.7,218.4,1\n202,-1,65.5,641.4,116.8,256.1,1\n202,-1,423.4,209.4,76.4,215.6,1\n202,-1,797,150.3,59.6,177,1\n202,-1,1034.7,136.9,54.2,160.7,1\n202,-1,1208.9,144.3,55,169.6,1\n202,-1,355.8,108.2,54.3,177.6,1\n202,-1,889.9,156.4,73,186.6,1\n202,-1,1153.1,142,59.8,184.3,1\n202,-1,388.9,39.9,62.4,167.5,1\n202,-1,803.7,310.3,71.6,185.2,1\n202,-1,229.3,538.4,61.3,217.5,1\n202,-1,753.1,293.8,69,206.6,1\n202,-1,966,914.6,73.6,166.4,0.965\n646,-1,687.3,206.3,79.2,113.5,1\n646,-1,1481.6,4.2,60,145.7,1\n646,-1,1221.3,31.7,62.5,119.9,1\n646,-1,547.3,112.5,63.1,175,1\n646,-1,801.7,145.1,65.5,172.3,1\n646,-1,1709,454.7,99,214.1,1\n646,-1,359.1,110.9,52.2,173.9,1\n646,-1,338.2,319.8,69.1,204.9,1\n646,-1,1574.6,589.2,97.3,236.6,1\n646,-1,472.8,538,84.2,244.1,1\n646,-1,212.6,224.2,59.9,202.6,1\n646,-1,412.8,1,58.9,146.6,1\n646,-1,1619.1,186.6,67.1,189.6,1\n646,-1,423,116.1,55.5,161.3,1\n646,-1,267.4,239.7,57.8,182.8,1\n646,-1,751.6,85.2,44.2,150.5,1\n646,-1,467.3,102.4,49.2,175.4,1\n646,-1,287.5,127.8,51.6,167.6,1\n646,-1,1490.8,948.7,64.8,132.3,0.977\n99,-1,1222,30.4,61.8,117.7,1\n99,-1,704.5,1,56,161.3,1\n99,-1,1174.4,154.3,84.8,173.4,1\n99,-1,396,834.9,98.2,246.1,1\n99,-1,1487.7,69.6,55.1,148.8,1\n99,-1,356.6,106.9,55.3,178,1\n99,-1,425.7,304.5,76.3,232.8,1\n99,-1,110.2,351.3,49.6,190.4,1\n99,-1,1721.8,456.1,77.1,212.1,1\n99,-1,1358.8,566.3,104.9,246,1\n99,-1,951.9,199.2,74.9,189.7,1\n99,-1,101.7,546.9,87,253.2,1\n99,-1,504.1,224,70.8,197.6,1\n99,-1,293.2,125.4,54.4,172.3,1\n99,-1,1276.1,195.5,48.2,168.2,1\n99,-1,210.4,129.1,49.2,166.5,1\n99,-1,31.1,691.6,64.1,229.6,1\n99,-1,714.5,188.5,53.8,163.8,1\n99,-1,1445.7,188.6,57.8,180.4,1\n99,-1,816.5,193.7,59.3,186.2,1\n99,-1,438.6,7.4,51,158.4,1\n99,-1,539,65.7,46.8,167.6,1\n99,-1,376.5,11.1,50.6,162.2,1\n99,-1,1400.4,190.8,57.6,192.6,1\n99,-1,859.9,212.1,55,164.6,1\n99,-1,484.1,137,56.8,163.9,0.999\n99,-1,255.1,91.5,64,182.3,0.999\n99,-1,480.5,36.7,63.5,159.6,0.998\n127,-1,1222,30.2,61.8,118.7,1\n127,-1,356.3,104.4,56.4,179.8,1\n127,-1,1488,69,55.9,150,1\n127,-1,703.8,1,56.6,158.8,1\n127,-1,108.8,350,49.1,188.5,1\n127,-1,424.3,279.3,76.7,220.9,1\n127,-1,288.4,126.4,54.4,170.2,1\n127,-1,1099.1,141.4,62.1,172.1,1\n127,-1,400,769.4,98.5,271.1,1\n127,-1,1359,566.8,104.4,244,1\n127,-1,1721.8,456.4,76.1,211.2,1\n127,-1,907.5,209.7,71.5,191.7,1\n127,-1,1217.4,177.4,45.5,166.2,1\n127,-1,217.4,127.5,50.5,166.7,1\n127,-1,689.9,204.1,74.8,114.8,1\n127,-1,539.8,65.3,49.5,166.4,1\n127,-1,779.9,215,65.5,197.4,1\n127,-1,524.8,247.4,70.2,202.6,1\n127,-1,1337.4,181.9,57.7,183.3,1\n127,-1,478.4,165.5,57.7,177.9,1\n127,-1,447.6,1,52.7,145,1\n127,-1,376.5,1,48.6,147.1,1\n127,-1,478.5,43.4,57.1,162.9,1\n127,-1,107.3,653.3,62.2,220.6,0.999\n127,-1,829.7,232.6,53.7,173.5,0.999\n127,-1,1091.1,929,82.9,152,0.865\n12,-1,687.2,205.7,78.9,114.3,1\n12,-1,1044,206.2,92.3,184.5,1\n12,-1,504.5,146.4,103.2,192,1\n12,-1,1361.4,567.8,106.1,244.5,1\n12,-1,1486.8,70.1,55.9,148.2,1\n12,-1,704.4,1.1,56.3,157.6,1\n12,-1,378.2,398.5,84.1,234.6,1\n12,-1,794.7,148.8,62.4,175.4,1\n12,-1,1725.2,457.7,75.7,208.7,1\n12,-1,102,547.2,85.5,250.6,1\n12,-1,1201.4,36,74,117.6,1\n12,-1,1804,220.4,65.3,178.2,1\n12,-1,355.7,106.4,54,176.6,1\n12,-1,218.5,126.2,47.2,166.6,1\n12,-1,210.3,385.1,65.9,197.7,1\n12,-1,285.8,121.9,54.5,175,1\n12,-1,1623.7,255.3,61.3,180.4,1\n12,-1,416,90.2,55,165.3,1\n12,-1,461.4,69.4,52.2,174.5,1\n12,-1,880.5,131,57.8,176.1,1\n12,-1,1039.5,1,46.7,77.6,0.999\n12,-1,1437.6,243.2,51.1,166.9,0.999\n12,-1,1402.7,190.5,48.6,169.5,0.999\n12,-1,250,365.8,49.2,196.6,0.195\n1021,-1,1221.2,29.9,61.9,118.6,1\n1021,-1,686.7,206.5,79.3,113.2,1\n1021,-1,378.5,301,74.4,201.3,1\n1021,-1,791.9,142.3,74,169.5,1\n1021,-1,929.3,259.6,69.8,203.9,1\n1021,-1,1243.3,163.2,59.5,174.5,1\n1021,-1,289.1,128.6,52.9,168.3,1\n1021,-1,841.3,275.6,68.6,197.6,1\n1021,-1,296.6,298.9,65.6,207.8,1\n1021,-1,290.4,501.2,86.8,203.9,1\n1021,-1,1701.8,180.4,55.2,175.2,1\n1021,-1,1721.7,457.8,78.1,203.6,1\n1021,-1,492.7,293.9,69.6,191.3,1\n1021,-1,1468.2,188.5,65.1,168.6,1\n1021,-1,380.4,482.8,63.1,222.1,1\n1021,-1,1575.9,589,102.4,238.9,1\n1021,-1,538,120.7,61.6,171.6,1\n1021,-1,232,140.7,54.8,161,1\n1021,-1,751.3,74.7,54.1,160.8,1\n1021,-1,1147.7,593.2,90.8,257.9,1\n1021,-1,1835.9,226.8,63,188.8,1\n1021,-1,1706.6,687.1,99.6,231.7,1\n1021,-1,581.7,551.2,82.2,240.9,1\n1021,-1,449.6,167.5,80.9,195.8,1\n1021,-1,313.5,2,36.9,128.7,0.999\n1021,-1,371.7,103.1,60.6,177.2,0.999\n1021,-1,408.2,172.6,58.5,168.3,0.999\n1021,-1,358.8,915,95.4,166,0.621\n1021,-1,503.9,129,40.7,119.7,0.091\n383,-1,1222.2,31.1,61,118.8,1\n383,-1,686,206.5,80,113.1,1\n383,-1,1636.6,22.9,72.2,170.4,1\n383,-1,357.8,103.1,56.6,183.6,1\n383,-1,448.9,294.4,74.4,205.1,1\n383,-1,1102.2,455.9,69.7,199.9,1\n383,-1,828,1,54,113.6,1\n383,-1,334.7,539.2,87.7,245.8,1\n383,-1,952.9,32.5,62.8,173.8,1\n383,-1,1599.3,633.8,80,246.5,1\n383,-1,109.2,351,52.9,189.1,1\n383,-1,795.1,150.7,60.2,171.5,1\n383,-1,282.6,126.8,55.2,170.1,1\n383,-1,376,1,57.8,99.6,1\n383,-1,1015.1,48.3,54.9,166,1\n383,-1,449.3,564.1,70.6,236,1\n383,-1,1775.1,103.3,61.4,157.4,1\n383,-1,219.2,136.8,57.6,159.7,1\n383,-1,1718.1,455.1,78.2,215.2,1\n383,-1,209.3,299.4,53.7,184.6,1\n383,-1,450.1,73.8,70.1,195.2,1\n383,-1,1436,1,52.5,89.6,1\n383,-1,507,81,51.6,168.6,1\n383,-1,849.3,499.3,90.7,228,1\n383,-1,1788.9,440.1,67.8,206.6,1\n383,-1,755.6,104.9,50.9,134.3,0.999\n383,-1,911.4,513.5,75.4,206.4,0.999\n383,-1,609.2,562.5,88.4,238.3,0.998\n383,-1,976.6,908.8,88.4,172.2,0.996\n776,-1,1220.8,29.4,62.9,119,1\n776,-1,687.6,205.2,78.9,114.3,1\n776,-1,546.6,115.6,61.3,177.1,1\n776,-1,784.1,133.6,58,175.1,1\n776,-1,1723.2,452.2,76.4,215,1\n776,-1,1575.3,589.2,100.9,234.4,1\n776,-1,1491.1,16.8,59.3,149.7,1\n776,-1,292.5,480.5,77.7,228.8,1\n776,-1,1444.8,76.7,54.6,170.1,1\n776,-1,277.5,173,56.2,193.1,1\n776,-1,451.1,206.5,54.1,188.2,1\n776,-1,389.8,215.3,73,176,1\n776,-1,233,135.1,51.9,164.7,1\n776,-1,1572.8,75.8,60.3,174.5,1\n776,-1,750.3,74.9,52.5,156.8,1\n776,-1,329.1,188.2,55.6,176.6,1\n776,-1,469,80.7,61.2,169.1,1\n776,-1,1125.4,637,83,250,1\n776,-1,550,568.8,82.8,254.8,1\n776,-1,255.5,1.2,51.7,118.6,1\n776,-1,1053.2,656.6,77.9,245.7,1\n776,-1,414.5,78.5,57.4,166.8,1\n776,-1,355.3,108,52.5,182.6,0.992\n402,-1,1222.6,30.9,61.3,118,1\n402,-1,686.3,206.1,79.9,114.8,1\n402,-1,1643.7,47.8,64.3,170.2,1\n402,-1,362.4,1,66.8,108.4,1\n402,-1,457.1,268.1,76.4,207.8,1\n402,-1,357.6,105.1,55.7,179.8,1\n402,-1,945.6,21.6,63.2,170.5,1\n402,-1,1771.8,115.8,65.2,168.5,1\n402,-1,1175.1,480.2,65.5,203.6,1\n402,-1,828.3,1.2,55.9,125.8,1\n402,-1,218.9,140.8,63.9,157.7,1\n402,-1,108.5,347.5,53,193,1\n402,-1,1718.8,458.6,81.1,208.1,1\n402,-1,548.7,67.6,60.6,173.2,1\n402,-1,795.9,152.4,59.4,171.8,1\n402,-1,306.8,568.8,87.5,246.8,1\n402,-1,284.8,130.7,54.6,166,1\n402,-1,1006,38,56.6,160.5,1\n402,-1,204.3,274.7,53.2,181.7,1\n402,-1,426,596.7,68.1,235.9,1\n402,-1,1590.1,619.8,97.5,252.1,1\n402,-1,426.3,90.7,52.6,173.2,1\n402,-1,466.9,71.4,65.9,186.5,1\n402,-1,853.7,520.4,99.6,238.3,1\n402,-1,924.8,536.7,81.3,214.2,1\n402,-1,716.9,1,52,136.1,1\n402,-1,709.5,87.6,65.3,177.3,0.999\n402,-1,979,912.4,87,168.6,0.987\n402,-1,429.3,5.7,24,91.7,0.324\n959,-1,686.4,206.1,80.1,112.3,1\n959,-1,1221.2,30.6,62.4,119.3,1\n959,-1,792.6,141.2,74.3,171.6,1\n959,-1,1471,143.1,65.2,158.7,1\n959,-1,1764.4,150.3,66.8,175,1\n959,-1,1154.5,83.8,56.4,169.7,1\n959,-1,1645.9,109,53.6,169.1,1\n959,-1,750.4,70.4,56.4,162.7,1\n959,-1,927,343.5,74.4,218.4,1\n959,-1,1226,738.4,95.1,274.5,1\n959,-1,1575.6,589.2,102.3,235.8,1\n959,-1,1719.8,454.3,79.1,213,1\n959,-1,420.6,238.7,69.5,194.5,1\n959,-1,322.3,780.5,95.3,267.9,1\n959,-1,1471.5,1,58.4,108.4,1\n959,-1,850.3,358.1,68.5,210.7,1\n959,-1,391.3,404.6,67.9,217,1\n959,-1,1406.2,1.3,47.9,105.9,1\n959,-1,549.8,118.7,54.7,171.5,1\n959,-1,485.4,229.3,63.4,181,1\n959,-1,335.7,241,65.2,190.7,1\n959,-1,230.1,135.5,55.8,168,1\n959,-1,439.1,74.5,55.1,177.8,1\n959,-1,318.1,413.1,81.7,198.6,1\n959,-1,1742.4,677,93.9,249.2,1\n959,-1,288.7,124.7,53,174.1,1\n959,-1,482.6,50.8,53.9,158.1,1\n959,-1,242.5,1.9,53.7,118,0.999\n959,-1,313.4,1,47.5,132.8,0.987\n246,-1,1221.3,31.3,63.2,116.7,1\n246,-1,686.4,207.4,79.4,111.8,1\n246,-1,392.8,518.8,85.7,239,1\n246,-1,796.6,152.7,60.6,171.4,1\n246,-1,1596.6,7.3,62.9,143,1\n246,-1,211.5,125.3,56.8,170.7,1\n246,-1,1481.8,57.3,54.3,153.1,1\n246,-1,108.1,349.5,51.7,191,1\n246,-1,1157.3,114,52.8,164.2,1\n246,-1,222.8,471.7,59.9,204.5,1\n246,-1,287.8,127.9,56,172.8,1\n246,-1,448,174.9,76.1,209.8,1\n246,-1,1721.1,456.4,77.7,213,1\n246,-1,1371.4,566.3,103.8,246.8,1\n246,-1,934.5,115.7,68.9,178.9,1\n246,-1,704.6,1,54.6,157.1,1\n246,-1,356.1,104.9,53.2,178.4,1\n246,-1,1079,117.3,58.9,182.2,1\n246,-1,207.5,731.6,86.8,253.6,1\n246,-1,493,357.9,72.2,227.8,1\n246,-1,850.1,346.2,79.5,199.2,1\n246,-1,516.1,117.7,53.7,180.8,1\n246,-1,118.9,561.2,83.1,247.7,1\n246,-1,786.9,336.6,84.7,208.8,1\n246,-1,586.1,371.3,65,202.4,1\n246,-1,769.4,102.1,51.7,164.2,0.998\n246,-1,930.6,900,72.6,181,0.996\n789,-1,1221.3,29.4,62.3,118.9,1\n789,-1,687.2,205.3,79.7,113.7,1\n789,-1,1723.8,452.8,75.6,214.9,1\n789,-1,548.6,114.4,59.9,177.9,1\n789,-1,477.1,87.3,60.9,177,1\n789,-1,1575,590.9,100.3,233.8,1\n789,-1,291.8,503.1,79.5,231.4,1\n789,-1,1485.6,26.5,59.9,148.4,1\n789,-1,277.3,168.4,57.5,197.2,1\n789,-1,784,129.5,51.1,179.6,1\n789,-1,1441.9,66.5,49.6,163,1\n789,-1,233.3,133.1,50.6,165.8,1\n789,-1,749.4,71.4,55.1,160.2,1\n789,-1,338.2,188,49.6,176.3,1\n789,-1,388.6,227.3,70.8,178.5,1\n789,-1,446.5,223.9,54.2,188.9,1\n789,-1,1094.8,606.4,87,257.2,1\n789,-1,589.3,581.2,70.9,242.3,1\n789,-1,253.4,1.3,52.7,122,1\n789,-1,423,90.4,56.2,160.3,1\n789,-1,1033.2,636.1,79.2,242.2,0.999\n443,-1,1221.3,30.6,62.9,118.3,1\n443,-1,936.5,1,60.2,159,1\n443,-1,1006.8,12.8,55.8,158.9,1\n443,-1,687.5,205.8,77.4,113.4,1\n443,-1,359.6,107.8,53,179,1\n443,-1,450.4,220,74.4,197.1,1\n443,-1,112.1,349.6,53.1,190,1\n443,-1,1717.3,455,81.7,213.8,1\n443,-1,1361.5,532.7,68.8,206,1\n443,-1,285.8,126.5,54.7,172.3,1\n443,-1,855.7,1,52.2,140.6,1\n443,-1,799.7,151.9,51.7,168.6,1\n443,-1,775.2,570.1,73.8,254.1,1\n443,-1,1752.4,153.9,63.7,168.5,1\n443,-1,881.3,579.4,118,246.1,1\n443,-1,360.6,669.7,76.5,242.4,1\n443,-1,241,236.4,51.9,179.8,1\n443,-1,266,642,89.8,259.8,1\n443,-1,1563.2,614.4,73.2,236.4,1\n443,-1,1698.3,100.2,69.4,173.5,1\n443,-1,1841.7,398.6,79.3,208.4,1\n443,-1,1673,369.3,72,197.9,1\n443,-1,219.9,136.9,57.9,154,1\n443,-1,423,1,43.1,136.5,1\n443,-1,428,119.9,60.9,172,1\n443,-1,530,68.9,53.4,172.7,1\n443,-1,362.8,2.7,60.9,132.1,0.999\n443,-1,711.4,87.9,60.6,175.6,0.999\n443,-1,728.8,1.5,48.6,94.3,0.998\n443,-1,966,600.1,78.6,219.8,0.998\n443,-1,756.7,87.6,48,149.6,0.995\n443,-1,1010.5,922.2,88.3,158.8,0.972\n92,-1,1222.2,31.4,61.8,115.7,1\n92,-1,705,1,55.4,158.8,1\n92,-1,1487.7,69.8,54.6,147.1,1\n92,-1,725,188.1,69.5,173.1,1\n92,-1,356.4,109.6,54.2,174.1,1\n92,-1,1721.5,456.8,77.6,209.6,1\n92,-1,968,195.9,72.6,187.4,1\n92,-1,402.1,856.4,101.6,224.6,1\n92,-1,421.1,308.9,79.8,230.5,1\n92,-1,1204.2,157.2,62.4,173.4,1\n92,-1,1358.7,565.3,104.6,246,1\n92,-1,102.2,547.1,86.2,253.5,1\n92,-1,210.2,130.5,50.5,165.1,1\n92,-1,501.2,214.3,73.7,197.9,1\n92,-1,294.8,126.5,54.5,170.6,1\n92,-1,25.2,704.4,67.1,226.9,1\n92,-1,1298.1,202.5,43.7,162.2,1\n92,-1,119.4,351.2,47.5,195.5,1\n92,-1,538.2,63.6,49,165.6,1\n92,-1,375.1,18.7,53.7,160.4,1\n92,-1,439,12.9,51.5,157.5,1\n92,-1,1463.4,191.1,57.4,173.7,1\n92,-1,827.7,191.5,61,182.1,1\n92,-1,1412.1,195.7,58.3,192.9,1\n92,-1,256.1,90.9,60.1,183.4,0.999\n92,-1,867.9,205.6,56.1,169.3,0.999\n92,-1,481.9,134.7,56.6,158.6,0.999\n92,-1,796.5,156.8,58.5,166.2,0.961\n92,-1,483.7,36.4,56.1,163.1,0.96\n101,-1,1221.9,30.4,62.4,117.5,1\n101,-1,1170.2,152.7,86.4,174,1\n101,-1,704.8,1,55.5,159.9,1\n101,-1,393,827.6,99.3,253.4,1\n101,-1,1487.4,68.7,55.5,149.2,1\n101,-1,109.5,350.7,50.2,189.8,1\n101,-1,357.3,107.9,54.8,176.5,1\n101,-1,425.9,303.4,77.8,232.8,1\n101,-1,1722,456.6,76.3,211.5,1\n101,-1,1358.9,566.3,104.2,246.2,1\n101,-1,505.2,227.7,72.7,193.7,1\n101,-1,951.3,200.2,72,186.3,1\n101,-1,102.1,549.1,86.6,249.9,1\n101,-1,291.8,125.2,55.4,172.6,1\n101,-1,210.1,129.3,49.4,165.8,1\n101,-1,811.8,194.7,60.8,189.1,1\n101,-1,1273.5,196.8,44,167.3,1\n101,-1,707.6,187.1,57.2,168.2,1\n101,-1,1395,189.6,59.7,188.7,1\n101,-1,32.3,690,66,227,1\n101,-1,538.9,65.6,47.9,167,1\n101,-1,375.9,8.3,51.2,165.4,1\n101,-1,856.9,213,56.5,168.1,1\n101,-1,439.9,6.3,50.7,153.6,1\n101,-1,1441.8,188.7,60.5,178.2,1\n101,-1,481.1,39.2,61.9,158.9,0.999\n101,-1,483.6,140.4,54,166,0.999\n101,-1,257.1,89.3,65.8,186.7,0.997\n508,-1,1221.7,30.2,62.6,119.1,1\n508,-1,686.1,206.3,81.2,114.9,1\n508,-1,1495.3,1,59.1,135.1,1\n508,-1,997.8,1,54.9,128.2,1\n508,-1,151.8,331,66.2,190.5,1\n508,-1,400.7,179.5,61.5,184.3,1\n508,-1,1677.9,26.5,55.6,168.3,1\n508,-1,1681.8,617.6,87.5,210.2,1\n508,-1,932.5,1,55.6,121.3,1\n508,-1,882.7,1.2,51.3,123.7,1\n508,-1,331.2,176.2,50.6,167.7,1\n508,-1,460.3,138.3,71.4,193.3,1\n508,-1,789,142.8,60.8,178.5,1\n508,-1,1555.3,598.1,73.9,239.6,1\n508,-1,1723.6,330,88.3,199.4,1\n508,-1,934.3,689.3,116.3,253,1\n508,-1,1617.3,17.1,55.6,177.7,1\n508,-1,1615.8,304.6,63.3,193,1\n508,-1,1722.2,458.3,78.3,208.8,1\n508,-1,825.8,609.2,74.6,251.8,1\n508,-1,1838.7,188.7,79,198.8,1\n508,-1,216.4,134.5,64.2,161.8,1\n508,-1,204.8,754.4,94.6,281.5,1\n508,-1,288.9,122.3,54.2,173,1\n508,-1,289.9,789,77.6,261,1\n508,-1,513.6,92.2,58.1,179.8,1\n508,-1,1742.4,195.8,63.5,179.4,1\n508,-1,723.3,95.6,68.3,165.2,1\n508,-1,449.6,6.4,73.9,181,0.999\n508,-1,360.2,103.6,53.3,191.7,0.998\n508,-1,399.2,20.6,46.8,162.8,0.993\n508,-1,1029,710.5,73.6,247.5,0.425\n508,-1,1034.2,931.4,80,149.6,0.054\n889,-1,1221.6,29.7,61.9,119.3,1\n889,-1,687.1,206,79.1,114.1,1\n889,-1,1100.3,4.1,56.1,159.3,1\n889,-1,1482.2,91.1,59,156.1,1\n889,-1,793.1,138.8,77.2,174,1\n889,-1,478.7,177.4,62.6,183.8,1\n889,-1,1703.4,58.7,54.5,170.5,1\n889,-1,332.1,335.8,81.3,182.1,1\n889,-1,1574.8,590.5,103.5,234.3,1\n889,-1,1722,452.7,77.6,215.6,1\n889,-1,558.4,116.8,59.1,176.1,1\n889,-1,300.5,159.5,69.2,196.9,1\n889,-1,292.6,659.9,84.4,249.1,1\n889,-1,1587.3,37.6,52.2,156.1,1\n889,-1,753.8,72,53.7,162.7,1\n889,-1,1425,3.6,51.4,154,1\n889,-1,471.3,1,49.5,140.3,1\n889,-1,889.4,461.5,68.8,223.8,1\n889,-1,423.9,323.2,58.8,203.1,1\n889,-1,971.9,447.1,78.2,229.4,1\n889,-1,240.2,132.5,54.3,169.1,1\n889,-1,254.3,1.6,54.3,119.9,1\n889,-1,404.8,172.3,58,179.8,1\n889,-1,1749.5,681.6,90.5,235.1,1\n889,-1,1493.6,1,63.6,146.9,1\n889,-1,405.9,56.9,59.2,173.9,0.996\n889,-1,312.9,1,45.4,125.6,0.969\n889,-1,1353,925.4,92,155.6,0.962\n889,-1,358.6,167.2,35.1,163.3,0.336\n133,-1,1221.4,30.6,62.1,117.9,1\n133,-1,356.5,103.7,56.2,181.4,1\n133,-1,1488.1,69,55.4,148.7,1\n133,-1,393.7,753.9,95.7,265.1,1\n133,-1,287.3,125.7,55.4,170,1\n133,-1,704,1,56,157.7,1\n133,-1,108.5,354,50.1,183.5,1\n133,-1,1359.9,567.1,104.2,244.1,1\n133,-1,1721.7,456.7,77.5,210.7,1\n133,-1,687.3,206.4,78.2,115.1,1\n133,-1,423.5,273,76,226.1,1\n133,-1,538.5,66.2,50.3,161.7,1\n133,-1,891.6,207.7,77.2,198.9,1\n133,-1,219.3,127.1,50.1,164,1\n133,-1,1207.1,171.2,48.1,168.2,1\n133,-1,1080.3,139.4,57.9,175.4,1\n133,-1,529,255.7,66.4,207.4,1\n133,-1,477.3,177,60.1,171,1\n133,-1,123.7,646.3,70.3,213,1\n133,-1,379.8,1,47.7,137.9,1\n133,-1,1326.4,185,54.7,177.7,1\n133,-1,820.4,240.6,56.6,172,1\n133,-1,775.5,227.1,61.5,189.2,1\n133,-1,478.2,44.4,54.5,164.1,1\n133,-1,447.7,1,51,139.1,0.998\n133,-1,1075,924.5,85.3,156.5,0.949\n133,-1,572.8,245,52.7,190.1,0.75\n1045,-1,1221.6,29.8,61.2,118.9,1\n1045,-1,686.3,206.7,80.4,114.2,1\n1045,-1,795.4,142.6,70.6,171.1,1\n1045,-1,274.4,539,93.7,201.8,1\n1045,-1,476,322.9,76.6,197.4,1\n1045,-1,1721,455.6,79.2,214.4,1\n1045,-1,287.7,125.3,53.9,174,1\n1045,-1,359.8,325.8,73.6,211.5,1\n1045,-1,229.9,137.9,55.4,164.8,1\n1045,-1,1301,199.1,60.2,162.8,1\n1045,-1,937.1,234.6,65.1,201.7,1\n1045,-1,751.2,73.6,53.9,164.1,1\n1045,-1,1121.3,555,86.6,253.6,1\n1045,-1,851,239.1,66.9,194.4,1\n1045,-1,1720.3,216.8,59.6,175.4,1\n1045,-1,1651.3,678.3,95.2,233.5,1\n1045,-1,374.6,517,68,238.1,1\n1045,-1,373.1,99.6,58.8,180.4,1\n1045,-1,506.6,171.4,76.4,196.5,1\n1045,-1,1468.4,218.5,77.5,168.7,1\n1045,-1,290.6,328.5,72.4,209.2,1\n1045,-1,1573.5,589.5,103.1,242.1,1\n1045,-1,309.1,2.1,37.6,129.5,1\n1045,-1,583.5,535.4,64,255.4,1\n1045,-1,467.2,175.7,55,164.2,1\n1045,-1,1861.5,254.1,59.5,202.6,0.999\n1045,-1,432.5,72.2,62.7,169.7,0.998\n387,-1,1222.4,31.3,61.4,118.4,1\n387,-1,686.2,206.3,80,113.7,1\n387,-1,1636,26.1,76.2,175.1,1\n387,-1,1115.9,461.2,71.6,206.5,1\n387,-1,358.2,108.2,55.3,177.7,1\n387,-1,445.7,287.1,81.8,210.6,1\n387,-1,369,1,62,102.6,1\n387,-1,1773.1,104.9,67.8,163.7,1\n387,-1,827.4,1,56.1,116.4,1\n387,-1,949.6,25.1,64.3,179.3,1\n387,-1,442.8,569.1,70.9,235.5,1\n387,-1,108.2,349.3,53.6,190.7,1\n387,-1,208.4,293.3,54.9,180.4,1\n387,-1,1599.6,631,80.6,249.3,1\n387,-1,328,543.1,92.3,251.1,1\n387,-1,282.4,127.9,54.9,165.4,1\n387,-1,219.9,141.5,58.1,155.7,1\n387,-1,795.4,148.9,59.5,176.2,1\n387,-1,1015.4,43.4,53.8,165.1,1\n387,-1,452.1,70.7,71.9,197.1,1\n387,-1,1719.3,454.2,78.5,216,1\n387,-1,914.2,516.7,78.2,211.9,1\n387,-1,847.8,499,86.6,229.2,1\n387,-1,1437.3,2.7,52.4,84.8,0.999\n387,-1,1779.8,436,70.2,209.1,0.999\n387,-1,756.3,105.2,50.1,136.9,0.998\n387,-1,978.9,905.7,87.3,175.3,0.995\n387,-1,505,79.7,48.5,172.7,0.988\n314,-1,1221.2,31.9,62.1,118.5,1\n314,-1,687.2,207,79,113.9,1\n314,-1,1456.6,7.4,55.6,145.7,1\n314,-1,416.5,38.9,59.5,170.7,1\n314,-1,1700,48.9,58.3,160.1,1\n314,-1,1497.5,599.6,92.2,244,1\n314,-1,311.8,582.1,105.6,247.2,1\n314,-1,1720.7,456.9,77.7,212.3,1\n314,-1,932.8,49.3,63.1,173.8,1\n314,-1,358.2,108.7,56.6,181.1,1\n314,-1,451.4,123,76.9,199.6,1\n314,-1,108.7,350.5,51.6,190,1\n314,-1,796.1,149.8,58.4,176.7,1\n314,-1,1000,77.4,62.5,180.2,1\n314,-1,280.1,130.8,54.8,173.3,1\n314,-1,705.1,2.5,53.6,157.3,1\n314,-1,889.3,433.5,72.7,197.4,1\n314,-1,1055.1,79,55.2,166.5,1\n314,-1,527.2,463,66.9,222.9,1\n314,-1,236.3,374.9,59.2,190.9,1\n314,-1,216,130.8,56.1,166.5,1\n314,-1,827.3,421.9,80.2,211,1\n314,-1,732.7,101.3,47.1,166,1\n314,-1,440.1,440.3,73.2,235.8,1\n314,-1,341,883.9,96.7,197.1,0.999\n314,-1,510.9,101.9,44,172.1,0.997\n314,-1,926.9,909.4,79.8,171.6,0.994\n314,-1,398.1,409.8,77.3,216.5,0.945\n441,-1,1221.3,30.1,62.6,117.7,1\n441,-1,936.9,2.1,60.2,159.6,1\n441,-1,686.9,205.9,78.2,113.4,1\n441,-1,1007.5,14.8,55.5,155,1\n441,-1,448.8,223.7,75.9,197.4,1\n441,-1,359.2,106.4,53.4,180.7,1\n441,-1,111.6,347.9,53.9,191.1,1\n441,-1,852.6,1,52.4,136.8,1\n441,-1,1717.9,457.2,80.6,212.8,1\n441,-1,1352.8,530.6,68.7,207.6,1\n441,-1,286,129.5,53.8,167.8,1\n441,-1,236.6,238.5,53.7,178.8,1\n441,-1,768.1,567.4,81.1,254.3,1\n441,-1,797.1,150.3,54.1,171.7,1\n441,-1,1750.2,149.3,66.4,170.4,1\n441,-1,365.1,665.6,75.7,241.3,1\n441,-1,1565,617.2,73.4,236.3,1\n441,-1,270.7,637.3,87.6,264.3,1\n441,-1,881.6,575.3,108.9,242.6,1\n441,-1,531.6,68.7,54.2,173.2,1\n441,-1,430.7,118.1,59.3,171.3,1\n441,-1,726.3,1,50.7,99.8,1\n441,-1,1696.2,96.4,69.7,173.2,1\n441,-1,423.7,1,42.4,133.1,1\n441,-1,1678.7,370.8,72.2,206.1,1\n441,-1,1846.6,403.4,74.4,200.1,1\n441,-1,363.7,1.9,59.7,131.3,1\n441,-1,220.3,137.8,60,153.2,1\n441,-1,711.5,87.7,60.8,173.9,0.999\n441,-1,958,599.2,87.4,222.5,0.999\n441,-1,756.5,85.5,47.4,150.9,0.991\n441,-1,1005.9,923.3,88.7,157.7,0.98\n673,-1,1221.8,29,61.2,119.3,1\n673,-1,687.5,206.8,78.9,113.1,1\n673,-1,1481.7,6.9,59.7,141.7,1\n673,-1,800.6,144.7,64.5,174.1,1\n673,-1,315.5,353.1,68.6,208.6,1\n673,-1,482.2,123.1,45.3,172,1\n673,-1,395.2,526.8,93.8,253,1\n673,-1,562.4,111.6,51.8,176.4,1\n673,-1,359.9,116.6,49.2,165.2,1\n673,-1,1112.4,1,59.8,105.7,1\n673,-1,1574.5,589,97.8,235,1\n673,-1,414.8,131.1,74.7,162.9,1\n673,-1,1709.3,456.1,100.7,208.7,1\n673,-1,1493,161.9,53.5,175.5,1\n673,-1,1624.2,154.3,75.2,189.9,1\n673,-1,750.7,79.1,48.6,156.6,1\n673,-1,407,6.5,56.1,154.4,1\n673,-1,229,210.8,61.4,198.7,1\n673,-1,282,222.3,54.5,179.8,1\n673,-1,1311.8,896.3,86.1,184.7,1\n673,-1,1396.2,866.9,95.2,214.1,1\n673,-1,353.8,4.7,52.7,150.5,0.999\n673,-1,295.6,1,53.2,132.3,0.996\n673,-1,290.2,121.5,49.3,173.6,0.952\n334,-1,1221,30.9,63.1,118.7,1\n334,-1,686.9,206.7,78.9,113.4,1\n334,-1,392.4,580.9,100.5,247.2,1\n334,-1,1723.2,68.6,62,155.4,1\n334,-1,449.9,110.8,72,192.3,1\n334,-1,108.2,351.3,52.6,189.1,1\n334,-1,1449.3,2,54.7,127.7,1\n334,-1,1587.8,1.3,58.8,123.7,1\n334,-1,1719.8,457.9,79.5,212.5,1\n334,-1,796.6,150.2,61.3,170.9,1\n334,-1,284.9,131.5,54.4,174.2,1\n334,-1,234.8,353.6,57.7,189.4,1\n334,-1,362.5,105.1,58.2,180.3,1\n334,-1,982.6,66.6,60.5,178.4,1\n334,-1,927.1,26,65.5,175.1,1\n334,-1,1829.9,501.1,70.4,210.1,1\n334,-1,1534.8,612.5,85.8,242.8,1\n334,-1,899,447.1,70.7,209.6,1\n334,-1,521.3,99.2,40.2,167.9,1\n334,-1,1040.8,74.4,52.3,162,1\n334,-1,212.6,139.1,54.4,161.9,1\n334,-1,506.5,491.7,70.6,225.5,1\n334,-1,720.4,94.7,53.9,169.6,1\n334,-1,948.7,397.7,67.5,192.4,1\n334,-1,839.6,440.4,83.6,218.5,1\n334,-1,419.6,47.1,59.6,174.4,0.999\n334,-1,775.6,96.2,42.3,158.3,0.997\n334,-1,939.7,915.3,69.4,165.7,0.968\n334,-1,378.8,925.9,104.8,155.1,0.241\n334,-1,434.6,869.1,84.3,211.9,0.174\n217,-1,1221.8,30.6,61.7,119.7,1\n217,-1,687.1,206.9,78.6,113,1\n217,-1,211.9,126.8,55.5,166,1\n217,-1,108.7,348.3,50.8,187.9,1\n217,-1,403.3,579.1,89.5,250.6,1\n217,-1,1492.2,69.2,53.3,148.3,1\n217,-1,705.5,1.2,54.6,159,1\n217,-1,1127.4,130.8,59.2,188.9,1\n217,-1,357,104.8,52.3,180.6,1\n217,-1,115.1,666.8,103.7,253.4,1\n217,-1,1720.9,456.4,78.6,211.5,1\n217,-1,288.3,126.8,55.3,173.1,1\n217,-1,1356.8,566.4,104.4,245.3,1\n217,-1,901.6,142,76.2,183.5,1\n217,-1,428.5,199.5,74.1,211.9,1\n217,-1,795.1,152.5,60.6,170.6,1\n217,-1,506.1,328.7,73.9,220.9,1\n217,-1,1001.1,130.8,44.6,157.2,1\n217,-1,519.8,122.7,50.6,179.5,1\n217,-1,1202.7,138.4,41.3,162.8,1\n217,-1,220.2,514.6,61,206.1,1\n217,-1,815.4,322.7,74.8,191,1\n217,-1,41,617.5,103.6,241.2,1\n217,-1,830.3,109.7,67.3,174.4,0.999\n217,-1,760.7,311.7,77.3,202.6,0.999\n217,-1,943.7,910.5,71.9,170.5,0.988\n217,-1,574.5,267.9,49,178.3,0.959\n217,-1,598.3,333.4,58.3,205.7,0.321\n105,-1,1221.5,30.5,62.1,118.7,1\n105,-1,1165,157.1,69.9,166.6,1\n105,-1,704.3,1,56.1,159.6,1\n105,-1,390.5,819.1,99.5,261.9,1\n105,-1,356.2,105.6,55.7,179,1\n105,-1,1487.4,69.3,55.3,149.4,1\n105,-1,108.5,351.4,49.3,188.5,1\n105,-1,1722,456.6,77.2,211.3,1\n105,-1,425.8,298.5,79.5,227.5,1\n105,-1,1358.1,566.7,105.4,245.9,1\n105,-1,507.4,228.8,72.5,197.5,1\n105,-1,944.7,203.6,72.5,188.3,1\n105,-1,291.1,125.5,58.5,173.1,1\n105,-1,209.2,129.8,50.5,166,1\n105,-1,39.2,686.7,71.9,218.8,1\n105,-1,103.2,546.4,84,254.3,1\n105,-1,701.4,182.9,59.3,166.5,1\n105,-1,808.2,196.1,62.5,189.2,1\n105,-1,538.8,66.1,48.7,164.3,1\n105,-1,1266.8,194.6,43.7,164.6,1\n105,-1,440,3.9,53.3,152.8,1\n105,-1,852.7,220,57.1,163.4,1\n105,-1,482.4,39.7,59.4,162.4,1\n105,-1,376,6.9,49,162.3,0.999\n105,-1,480.2,152.5,57.7,161.4,0.999\n105,-1,1429.9,186.4,61.8,180,0.999\n105,-1,1386.3,185.9,61.7,189,0.998\n105,-1,255.8,86.1,66.8,185.1,0.935\n105,-1,1147.1,936.2,74.9,144.8,0.137\n181,-1,1221.1,30.7,63.2,118.4,1\n181,-1,412.2,38.6,60.2,164.7,1\n181,-1,110.2,348,48.2,190.6,1\n181,-1,356.5,105,54.6,179.5,1\n181,-1,212,125.9,55.2,168.7,1\n181,-1,704.3,1,55.9,159.4,1\n181,-1,1488.9,69.3,54.9,147.7,1\n181,-1,686.7,207.9,79.2,110.9,1\n181,-1,925.4,124.2,78.6,172.7,1\n181,-1,1720.1,457.7,79.2,212.1,1\n181,-1,1358.6,568,105.1,243.6,1\n181,-1,540.5,143,66.2,172.1,1\n181,-1,289.2,128.2,54.7,168.2,1\n181,-1,528.2,297.2,60.6,203.6,1\n181,-1,1,617.7,114.2,240.8,1\n181,-1,420.5,230.6,78.9,219,1\n181,-1,412.1,646.7,92.4,257.6,1\n181,-1,1097.2,150.2,47.1,160.6,1\n181,-1,235.1,568,63.4,211.7,1\n181,-1,869.6,175.5,71.4,190.3,1\n181,-1,793.4,151.8,63.4,171.4,1\n181,-1,1203.2,153.4,62.2,187.9,1\n181,-1,98.5,549.6,87.5,251.8,1\n181,-1,797.3,290.8,71.3,184.9,1\n181,-1,743.8,274.2,73.2,201,1\n181,-1,1251.8,155.7,48,169.9,0.998\n181,-1,994.8,913.9,69.3,167.1,0.978\n399,-1,1222.1,30.1,61.3,118,1\n399,-1,686.4,206.1,79.3,113.9,1\n399,-1,364.5,1,64.3,107.5,1\n399,-1,1641.9,45.4,59.7,165.8,1\n399,-1,945.9,23.3,64.5,172.5,1\n399,-1,1772.2,116,64.8,165.9,1\n399,-1,313.1,565.4,88,242.6,1\n399,-1,358.1,106.7,55.6,179.4,1\n399,-1,454.3,267.7,77.8,209.2,1\n399,-1,1718.1,460.9,79.4,207.1,1\n399,-1,218.3,141.2,64.3,155.3,1\n399,-1,796.4,152.9,58.1,169.4,1\n399,-1,826.4,1,57.1,121.4,1\n399,-1,467.3,71.3,67.4,190.6,1\n399,-1,109.1,349.5,52.3,190.7,1\n399,-1,1163.7,474.9,66.7,200.1,1\n399,-1,431.4,592.5,69.6,237.5,1\n399,-1,283.5,128.8,55,167.1,1\n399,-1,550.2,67.4,56.8,173.2,1\n399,-1,1007.7,40.7,55.7,161.6,1\n399,-1,1596.8,625.5,88.6,247.9,1\n399,-1,203.8,280.3,56,182.8,1\n399,-1,851.3,518.5,98.3,233.6,1\n399,-1,922.4,531.2,81.1,217,1\n399,-1,427.4,87,49.3,171,1\n399,-1,716.1,1,51.3,137.9,1\n399,-1,709.6,87.4,61.9,178.6,0.998\n399,-1,980.4,909.5,89,171.5,0.99\n399,-1,1768.9,431.3,58.4,198.1,0.222\n331,-1,1221.1,31.1,63.1,119.2,1\n331,-1,687,206.9,78.3,112.5,1\n331,-1,389.7,578.9,85.5,251.9,1\n331,-1,449.4,114.5,74.2,191.3,1\n331,-1,1719.7,65.2,61.8,157.1,1\n331,-1,1448.5,1.3,56.7,132.7,1\n331,-1,109.6,349.6,50.7,190.7,1\n331,-1,1720.1,457.9,79.1,213,1\n331,-1,1583.4,1,63.4,126.4,1\n331,-1,282.2,132.1,55.4,173.4,1\n331,-1,362.2,105.8,58.3,182.2,1\n331,-1,984.8,65.4,61,182.1,1\n331,-1,237,355.3,59,189.9,1\n331,-1,927.5,27.9,64.7,176.5,1\n331,-1,796.8,151.6,59.5,169.7,1\n331,-1,721.9,90.5,52.9,176.8,1\n331,-1,213,139.8,54.9,161.1,1\n331,-1,1042.9,76.1,51.6,163,1\n331,-1,1829.9,506.6,69.4,206.4,1\n331,-1,837.3,438.8,83,214.1,1\n331,-1,898.6,446.1,70.2,203.5,1\n331,-1,1532.7,606.6,82.8,244.9,1\n331,-1,509.8,490.7,67.2,225.1,1\n331,-1,520.4,100.7,39.7,167.2,1\n331,-1,420.4,47.4,57.4,169.8,1\n331,-1,412.6,466.5,82.7,236.7,0.999\n331,-1,937.8,393.7,68.4,193.4,0.999\n331,-1,937.6,911,67.4,170,0.912\n331,-1,781.8,98.1,43.9,157,0.787\n331,-1,374.4,921.7,85.1,159.3,0.093\n435,-1,1221.6,30.4,61.5,118.1,1\n435,-1,938.4,4.5,62.7,165.8,1\n435,-1,686.7,206.2,79.1,112.8,1\n435,-1,359.1,109,53.4,177.4,1\n435,-1,449.5,227.3,78.4,201.9,1\n435,-1,1320.1,525.7,73.1,198,1\n435,-1,1008.8,20.6,54.2,159.5,1\n435,-1,846,1,54.3,134.9,1\n435,-1,111.1,351.7,53.9,188,1\n435,-1,1716.4,458.6,81.9,208.9,1\n435,-1,1684.4,86.8,66.3,177.6,1\n435,-1,276.3,624.3,91.3,255.5,1\n435,-1,284.6,130.6,55.6,166.7,1\n435,-1,799.1,150.8,52.4,172.3,1\n435,-1,760.2,563,81.4,248.6,1\n435,-1,376.9,653.6,69.9,242.6,1\n435,-1,1755.5,144.8,61.3,168.1,1\n435,-1,229.7,244.2,51.8,175.2,1\n435,-1,1848.3,417.5,72.7,188.2,1\n435,-1,1565.8,614,86.3,246.9,1\n435,-1,536.2,71.8,54.1,166.4,1\n435,-1,873.8,570.8,108.3,242.3,1\n435,-1,422.3,1,42.8,128.4,1\n435,-1,430.8,111.8,58.9,173.7,1\n435,-1,360.9,1.1,64.5,129.1,1\n435,-1,954.6,583.6,86.4,220.6,1\n435,-1,713.4,87.1,58.4,178.4,1\n435,-1,221.5,139.5,68.1,154,0.999\n435,-1,726.7,2.1,47,106.7,0.997\n435,-1,759.3,83.9,43.1,153.5,0.986\n435,-1,1766.6,72.2,81.2,166.3,0.981\n435,-1,997.8,928.3,84.7,152.7,0.966\n530,-1,1221.5,30.7,61.7,119.8,1\n530,-1,1485.8,1,59.2,141.8,1\n530,-1,687.1,205.8,78.1,114.5,1\n530,-1,386,200.8,65.1,187.7,1\n530,-1,780,143.7,56.7,174.3,1\n530,-1,1718,457,82.2,209.5,1\n530,-1,993.1,1,55.5,112.7,1\n530,-1,1670.5,14.3,51.7,161.4,1\n530,-1,288.3,125.8,53.2,171,1\n530,-1,169.7,316,66,195.4,1\n530,-1,464.5,118.6,64.5,187,1\n530,-1,882.9,1,53.1,117.2,1\n530,-1,1605.3,2.2,57.9,171.1,1\n530,-1,264.9,827.3,82.5,253.7,1\n530,-1,1766,218.2,68.5,171.3,1\n530,-1,929.3,1,56.5,111.2,1\n530,-1,1701.1,302.3,77.2,205,1\n530,-1,516.9,101.8,59.2,179.1,1\n530,-1,1579.1,593.8,64.4,238.7,1\n530,-1,815.7,600.5,74,257.9,1\n530,-1,218.9,138.8,60.7,158.1,1\n530,-1,190.8,786.8,93.9,287.3,1\n530,-1,1784.1,655.7,71,212.8,1\n530,-1,450.9,2.9,69.8,169.4,1\n530,-1,959.6,728,122.6,266.7,1\n530,-1,401.7,38.2,48.3,158.6,1\n530,-1,1591.5,284,58.4,205.3,0.992\n530,-1,1875.6,223.2,45.4,206.7,0.968\n530,-1,1048.6,752.3,86.5,242.4,0.306\n530,-1,1042.7,937.7,70.4,143.3,0.217\n530,-1,760.2,106.2,53,165.9,0.094\n241,-1,1221.1,31.1,62.9,119.5,1\n241,-1,686.3,207,80.1,112.2,1\n241,-1,1485,61.2,53.3,152.2,1\n241,-1,1165.2,122.6,52.5,160.3,1\n241,-1,1085.5,121.2,59.7,182.8,1\n241,-1,796.3,152.8,59.3,173,1\n241,-1,1591.1,1.6,57.1,143.3,1\n241,-1,383.6,525.7,90.6,236.6,1\n241,-1,288.9,128.1,55.5,172.2,1\n241,-1,211.9,126.2,55.6,168.7,1\n241,-1,704.6,1,55.1,159,1\n241,-1,109.2,350,50,190.6,1\n241,-1,1362.6,566.8,110.9,245.9,1\n241,-1,927.9,120.7,69.9,186.5,1\n241,-1,355,103.4,54.3,182.1,1\n241,-1,446.5,176.4,73.6,208.1,1\n241,-1,192,714.8,88.8,252.8,1\n241,-1,1721.2,456.1,78.3,213.5,1\n241,-1,223,477.5,60.7,203.9,1\n241,-1,496.4,353.6,74,225.4,1\n241,-1,516.4,116.8,51.5,183,1\n241,-1,843.6,344.5,81,194.9,1\n241,-1,590.1,365.4,62.4,198,1\n241,-1,786.7,331.8,80.6,207.8,0.999\n241,-1,109.3,564.2,86.9,239.1,0.999\n241,-1,934.2,895.8,69.8,185.2,0.985\n994,-1,686.8,206.3,79.5,112.7,1\n994,-1,1797.6,184.6,72,185.5,1\n994,-1,793.1,140.5,75.3,172.6,1\n994,-1,1220.7,30.6,62.2,121.9,1\n994,-1,399.9,278.1,67.7,197,1\n994,-1,1194.9,126.7,59.9,173.7,1\n994,-1,1671.7,149.1,59.1,172.2,1\n994,-1,502.6,263.5,64.6,184.8,1\n994,-1,1471.6,177.1,64,159,1\n994,-1,329.3,849.4,96.4,231.6,1\n994,-1,289.7,125.1,51.8,169.4,1\n994,-1,838.4,306.9,70.1,204.1,1\n994,-1,1720.7,453,79.3,216.2,1\n994,-1,231.3,134.8,54.5,166.2,1\n994,-1,1576.2,589.6,102.7,238.3,1\n994,-1,752,71.4,55.1,163.6,1\n994,-1,543.7,119.7,58.6,170.1,1\n994,-1,301.6,462.8,83.8,198.8,1\n994,-1,920.6,300.3,71.4,208.3,1\n994,-1,1182,658.8,91,262.9,1\n994,-1,386.7,449.1,67.1,220.5,1\n994,-1,314.2,274.5,63.8,197.7,1\n994,-1,314.4,1.7,45.4,129.5,1\n994,-1,504,79.2,55.1,156,1\n994,-1,1739.6,675.3,94.1,247.1,1\n994,-1,442.5,66.5,58.3,175.1,1\n994,-1,387.1,165.5,67.9,195.1,0.999\n994,-1,1440.8,3,56.2,77,0.902\n307,-1,1221.5,31.4,61.9,118.4,1\n307,-1,1457.6,11.3,54.3,146.8,1\n307,-1,686.3,206.9,79.1,113.4,1\n307,-1,415,33.9,56.3,162.7,1\n307,-1,288.5,582.1,86.9,244.4,1\n307,-1,1691.1,44.4,57.7,158.3,1\n307,-1,1719.3,457,80,213.1,1\n307,-1,355.6,108.7,56.7,178.7,1\n307,-1,108.6,352.4,51.8,187.5,1\n307,-1,934,54.8,65.5,178.2,1\n307,-1,235.7,387,60.8,194.4,1\n307,-1,795.5,147.3,59.9,178.1,1\n307,-1,454,126.2,72.2,202.8,1\n307,-1,216.1,127.3,55.9,168.2,1\n307,-1,532,450.6,67.9,214.6,1\n307,-1,1483.2,596.3,87.9,244.6,1\n307,-1,706.4,1,51.9,156.6,1\n307,-1,280.2,130.5,54.5,172.4,1\n307,-1,1003.5,79.7,61.7,184.4,1\n307,-1,322.7,864.8,92.3,216.2,1\n307,-1,1063.9,81.5,54.7,167.4,1\n307,-1,826.2,414.4,88.4,213.8,1\n307,-1,887.4,426.3,71.8,190.6,1\n307,-1,734.9,99.4,47.2,169.5,1\n307,-1,389.6,404.1,84.1,231.4,0.999\n307,-1,450.8,436.6,65.9,231.5,0.999\n307,-1,510.5,102.2,45.4,173.9,0.999\n307,-1,930.2,910.1,75.3,170.9,0.99\n307,-1,366.7,788.8,93.5,261,0.975\n329,-1,1221.4,31.3,62.5,118.4,1\n329,-1,686.3,206.6,80,112.9,1\n329,-1,382.8,579.4,84.9,251.6,1\n329,-1,1450.2,1.1,56.6,135.2,1\n329,-1,1718.4,62.7,63.7,159.9,1\n329,-1,451.2,115.4,73.4,193.4,1\n329,-1,1720.1,457.5,78.5,212.7,1\n329,-1,109.2,349.9,51,189.1,1\n329,-1,362.3,106.9,58.2,180.3,1\n329,-1,795.5,150.9,61,171.9,1\n329,-1,281.6,133.3,55.3,171.3,1\n329,-1,986.3,64.6,61.5,180.4,1\n329,-1,927.3,30.8,63.8,175.5,1\n329,-1,1582.6,1.9,66.1,122.2,1\n329,-1,723.5,86.1,51.7,185.2,1\n329,-1,212.5,138.6,56.1,161.6,1\n329,-1,237.8,356.9,59.2,191.8,1\n329,-1,1832,507.4,69.8,205.4,1\n329,-1,835.3,439.9,82.9,211.9,1\n329,-1,898.3,446.9,72.2,198.1,1\n329,-1,1524.6,608.2,86.8,241.4,1\n329,-1,420.7,47.9,57.1,168.4,1\n329,-1,1043.9,76.9,51.8,162.1,1\n329,-1,511,485.2,69.1,226,1\n329,-1,518.8,103.3,38.9,165.2,0.999\n329,-1,419.4,464.2,78.9,231.8,0.998\n329,-1,934.1,911.7,70.3,169.3,0.965\n329,-1,936.6,389.3,65.2,193.2,0.732\n329,-1,376.1,917.2,84.4,163.8,0.182\n232,-1,1221.9,31.1,62.1,117.9,1\n232,-1,685.9,206.7,80.8,112.7,1\n232,-1,1490.4,65.6,54.7,150.6,1\n232,-1,381.2,546.4,95.1,239.7,1\n232,-1,1179.3,127.4,51.3,160.8,1\n232,-1,799.4,149.3,58.2,177.8,1\n232,-1,356.3,105.4,53.6,180.3,1\n232,-1,436.4,183.6,78.5,217.1,1\n232,-1,705.7,1,55.4,158.7,1\n232,-1,288.5,125.7,55.8,172.9,1\n232,-1,108.5,350.1,50.8,190.1,1\n232,-1,1580.2,1,58.1,142.6,1\n232,-1,211.7,125.3,56.1,168.7,1\n232,-1,1096.7,125.3,66.8,183,1\n232,-1,1358.8,569.1,104.9,241.3,1\n232,-1,1721.3,457.5,77.5,211,1\n232,-1,516.7,120.9,50,178.8,1\n232,-1,921.1,129.3,70.3,180.4,1\n232,-1,836.6,332.7,75.4,195,1\n232,-1,162,696.7,101.6,259.8,1\n232,-1,220.8,490.5,57.8,204.4,1\n232,-1,504.5,344.1,73.3,223.5,1\n232,-1,778.3,324,74.1,208.6,1\n232,-1,591.1,355.5,60.5,191.4,1\n232,-1,110.9,631.4,88,254.6,0.999\n232,-1,934,900.6,72.6,180.4,0.993\n1037,-1,1222.1,29.9,61.4,118.6,1\n1037,-1,686.9,206.9,79.5,114.3,1\n1037,-1,794.2,141.5,69.9,172.5,1\n1037,-1,1277.7,186.1,64.6,163.7,1\n1037,-1,484.8,312.8,74,196.3,1\n1037,-1,1719.8,456,80.6,214.8,1\n1037,-1,288.8,127.4,52.4,169.4,1\n1037,-1,1130,570.9,90.3,243.9,1\n1037,-1,233.2,138.8,55.9,164.5,1\n1037,-1,751.8,75,53.3,162.6,1\n1037,-1,283.4,527.5,92.1,211.2,1\n1037,-1,848.7,254.2,64,196.3,1\n1037,-1,937,240.4,66,204.4,1\n1037,-1,1708.5,202.8,61.6,181.6,1\n1037,-1,363.3,319.8,74.8,203.2,1\n1037,-1,1469.2,209.5,70.1,163.3,1\n1037,-1,1572.8,588.5,104.3,239.7,1\n1037,-1,440.7,172.3,66.3,167.5,1\n1037,-1,294.3,316.6,68.5,207.7,1\n1037,-1,375.2,504.5,65.8,233.6,1\n1037,-1,1674.5,675.4,81.5,239.9,1\n1037,-1,1852.4,240.2,66.1,200.6,1\n1037,-1,580.9,541.8,68.5,250.2,1\n1037,-1,372.1,105,58.5,175.1,1\n1037,-1,307.8,2.4,36.1,126.9,1\n1037,-1,494.4,167.2,71.7,196.6,1\n1037,-1,539.7,119,58,172.1,0.997\n957,-1,686.3,206.3,80.5,113,1\n957,-1,793.4,139.9,74.7,173.1,1\n957,-1,1471.2,138,66.4,163,1\n957,-1,1221.4,30,62.4,119,1\n957,-1,1762.9,148.4,65.2,173.3,1\n957,-1,1643,109.9,54.7,167.4,1\n957,-1,1152.2,83.2,57.3,165.6,1\n957,-1,1577.2,591.8,99.4,236,1\n957,-1,928,343.9,73.9,220.8,1\n957,-1,1720.8,453.7,78.6,212.9,1\n957,-1,1408,1.5,47,108.9,1\n957,-1,850.1,359.8,70.5,213,1\n957,-1,751.5,73,56,161,1\n957,-1,1230.1,743.4,95.9,273.2,1\n957,-1,388.3,396.2,70.5,220.2,1\n957,-1,321.8,776.6,95.8,268.2,1\n957,-1,551,120.1,54.7,169.7,1\n957,-1,420.9,235.2,70.3,196.3,1\n957,-1,231.1,135.9,56.3,166.5,1\n957,-1,319,411,79.3,195.7,1\n957,-1,437,74.6,56.9,179.1,1\n957,-1,1474.2,1,56.9,111,1\n957,-1,482.9,225,64.4,182.5,1\n957,-1,337.5,239,65.4,183.9,1\n957,-1,1742.9,677.5,93.1,249.4,1\n957,-1,480.5,46.4,54.4,163.5,1\n957,-1,288.2,126,53.8,172.9,1\n957,-1,242.6,2.2,54.3,120.4,0.998\n957,-1,312.3,1,47.4,132.8,0.895\n957,-1,324.9,164.9,46.8,198.4,0.073\n364,-1,1222.2,31.6,60.9,117.9,1\n364,-1,686.4,206.3,80.1,113.3,1\n364,-1,434.1,329,77.6,203.8,1\n364,-1,1433.7,2.8,50.3,101.4,1\n364,-1,1624.3,1,62.6,161,1\n364,-1,1023.6,57.5,55,167.8,1\n364,-1,208.3,141.6,59.6,160.2,1\n364,-1,1754.9,94.2,62.6,160.5,1\n364,-1,443.7,84.6,70.4,200.1,1\n364,-1,109.6,352.1,51.5,186.7,1\n364,-1,512,92.6,47,163,1\n364,-1,372.7,511.9,85.9,244.1,1\n364,-1,1719.5,456.3,79.5,212.8,1\n364,-1,1841,64.6,57.6,162.1,1\n364,-1,796,150.3,60.5,173,1\n364,-1,833.6,1,53.5,106.5,1\n364,-1,1046.5,436.5,66.1,195.4,1\n364,-1,1815.6,465,64.5,205.8,1\n364,-1,286.7,130.3,53.6,170.1,1\n364,-1,956.9,49.1,61.3,172.7,1\n364,-1,219,318.7,53,186.2,1\n364,-1,362.4,112.4,53.9,173.7,1\n364,-1,1573,624.8,84.2,249.5,1\n364,-1,519,570.2,103.6,248,1\n364,-1,909.2,486.2,82.2,210.8,1\n364,-1,381.3,1,41.7,87.6,1\n364,-1,844.8,476.1,84.7,228.4,1\n364,-1,471.6,533,64.6,228.8,0.999\n364,-1,927.3,4.1,59.9,153.6,0.996\n364,-1,763.2,95.5,41.3,143.3,0.995\n364,-1,959.3,923.1,77.7,157.9,0.99\n492,-1,1221.3,30.6,62.3,118,1\n492,-1,686,206.3,80.4,113.5,1\n492,-1,999.6,1,54.8,137.6,1\n492,-1,1498.7,1,57.4,125.6,1\n492,-1,1733,184.5,68.5,171.5,1\n492,-1,1700,458.9,98.7,209.4,1\n492,-1,1814.5,172.7,70.2,182.8,1\n492,-1,802.1,602.5,93,259.3,1\n492,-1,875,1,54.5,129.1,1\n492,-1,305.8,190.4,50.1,168.8,1\n492,-1,464.8,154.1,64.3,197.4,1\n492,-1,931.2,1,55.9,131.2,1\n492,-1,801.1,144,53.9,175.6,1\n492,-1,138.2,336.8,66.8,190.1,1\n492,-1,408.8,160.8,60,184,1\n492,-1,1692,42.7,53.3,167.3,1\n492,-1,301.4,759,79.1,260.5,1\n492,-1,1539,600.8,88.8,238.8,1\n492,-1,920,659,113,248,1\n492,-1,1633.2,29.3,59.7,176.7,1\n492,-1,219.4,136.7,62.2,164.7,1\n492,-1,216.3,732.2,98.3,266.3,1\n492,-1,359.8,107.6,55,178.3,1\n492,-1,449.2,18.8,74.2,179.8,1\n492,-1,1627.4,325.8,61,194.6,1\n492,-1,715,93.9,58.1,165.1,1\n492,-1,1763.3,344.5,75.1,216.6,1\n492,-1,408.1,8.6,47,166.7,1\n492,-1,504.1,92.3,64,169.2,1\n492,-1,1617.3,590.5,74.7,217.3,0.999\n492,-1,1007.2,676.3,80,234.1,0.997\n492,-1,288.8,129.4,50.2,169,0.959\n492,-1,753.3,97.7,46.2,142.6,0.79\n492,-1,1019.1,938.7,85,142.3,0.071\n777,-1,1221,29.5,62.6,118.9,1\n777,-1,688.1,204.9,78.1,114.9,1\n777,-1,546,115.6,62.2,176.1,1\n777,-1,1723.5,452.5,75.5,214.3,1\n777,-1,783.5,133.3,59.4,174.6,1\n777,-1,1490.4,15.8,59.9,149.7,1\n777,-1,1575.4,590.3,100.3,234.5,1\n777,-1,292.1,482.1,77.5,230.6,1\n777,-1,1445.2,75.8,53.9,168.6,1\n777,-1,449.7,207.1,54.5,188.1,1\n777,-1,389.4,215.4,73.7,177.9,1\n777,-1,554.6,570.9,80.8,252.2,1\n777,-1,276.3,173,57.2,193.2,1\n777,-1,329.3,189.1,56.5,175.4,1\n777,-1,749.6,75.7,53.6,157,1\n777,-1,1573.1,77.1,59.7,173.1,1\n777,-1,469.8,78.3,62,173.7,1\n777,-1,255.7,1.1,51.7,118.1,1\n777,-1,233.6,135.3,51.4,165.1,1\n777,-1,1050.7,653.8,78.6,250,1\n777,-1,1121.5,632.5,83.6,256.6,1\n777,-1,415.9,78.1,56.4,167.8,1\n777,-1,355.5,108.4,51.5,186.2,0.966\n613,-1,1221.8,31.5,60.6,118.1,1\n613,-1,687.4,205.5,78.1,113.4,1\n613,-1,1480.7,5.4,60,144.8,1\n613,-1,802.2,145.4,65.9,169.1,1\n613,-1,361.3,283.7,67.8,201.9,1\n613,-1,1710.3,456.9,92.6,209.9,1\n613,-1,1637.1,212.3,69.8,197.4,1\n613,-1,1574.3,589.5,97.3,234.7,1\n613,-1,1608.7,1.2,54,103,1\n613,-1,581,554.6,94.6,228.4,1\n613,-1,173,243.3,64.9,198.4,1\n613,-1,357,112.2,52.1,172.5,1\n613,-1,244.5,260.1,60,182.3,1\n613,-1,558,110,52.6,180.2,1\n613,-1,288.3,127.4,51,168.4,1\n613,-1,494.2,90.7,48.7,157.1,1\n613,-1,223.4,137,54.6,158.8,1\n613,-1,754,82,42.6,153.8,1\n613,-1,444.2,82.2,47.3,161.2,1\n613,-1,1099.3,889.6,119.4,191.4,0.999\n613,-1,398.3,91.5,52.9,162.3,0.998\n613,-1,355.1,1.5,51.8,118.7,0.206\n984,-1,1222.1,29.5,62,119.1,1\n984,-1,686.8,206.2,79.3,113.1,1\n984,-1,794.2,140.9,72,170.4,1\n984,-1,407.9,266.8,72.3,193.3,1\n984,-1,1183.5,120.1,56,163.8,1\n984,-1,1576.7,590.2,102.9,234.4,1\n984,-1,495.3,249.4,66.7,186.8,1\n984,-1,1787.9,177.2,72.3,179,1\n984,-1,333.9,836.1,95,244.9,1\n984,-1,839.4,316.7,72.7,206.1,1\n984,-1,1469.6,166,66.8,167.4,1\n984,-1,318.3,259.9,63.5,197.9,1\n984,-1,304.2,451.5,84.4,202.4,1\n984,-1,1720.5,452.7,79.7,215.8,1\n984,-1,751.2,71.7,56,163.4,1\n984,-1,1194.2,674,87.5,260.3,1\n984,-1,230.3,137.2,55.3,164.7,1\n984,-1,289.7,125.4,52.9,172.7,1\n984,-1,1451.2,1,56.4,94.1,1\n984,-1,1667.7,142.2,54.3,166.8,1\n984,-1,546.4,119.2,55,166.5,1\n984,-1,921.4,308.9,68.3,205,1\n984,-1,1739.6,673.9,95.4,249.9,1\n984,-1,314.2,2,46.4,129,1\n984,-1,391.9,434.9,65.3,217.6,1\n984,-1,445.2,61.7,56.4,184.7,1\n984,-1,495.5,68,51.9,155.8,1\n984,-1,383,1,53.7,133.2,1\n984,-1,367.5,166.3,64,197.3,0.999\n984,-1,1388.2,1.6,46.1,92.1,0.999\n679,-1,1222,29.5,61.5,121.7,1\n679,-1,687.3,206.8,79.1,113.5,1\n679,-1,1481.5,4.5,60.2,146.1,1\n679,-1,1083.6,1,73.8,101.4,1\n679,-1,1621.9,153,72,189,1\n679,-1,1709.3,458.1,97.9,207.3,1\n679,-1,801.3,145.6,63,172.3,1\n679,-1,563.7,111.5,49.5,178.3,1\n679,-1,314.7,355.9,68.4,214.6,1\n679,-1,485.1,131.2,46.3,172,1\n679,-1,1288.7,879.5,87,201.5,1\n679,-1,1492.3,157.7,51.1,173,1\n679,-1,360.2,114.4,49.5,169.4,1\n679,-1,370,530.3,110,251.7,1\n679,-1,1575.3,589.6,97.3,235,1\n679,-1,750.1,79.7,49.2,157.1,1\n679,-1,416.7,140.1,71.3,160.9,1\n679,-1,1372.8,863,99.6,218,1\n679,-1,403.6,8.7,59.3,162,1\n679,-1,232.9,211.9,64.2,196.2,1\n679,-1,288.5,223,58.2,176.1,1\n679,-1,299.4,1,54.8,135,0.999\n679,-1,840.9,926.4,71,154.6,0.922\n679,-1,482.8,45.5,43,134.1,0.846\n679,-1,353.7,14.6,49.4,146,0.544\n486,-1,1221.5,30.9,61.8,117.1,1\n486,-1,686.7,205.9,80,113.4,1\n486,-1,998.5,1,57.1,143.9,1\n486,-1,1499.7,1,58.1,121.7,1\n486,-1,299.5,196.2,51.1,170.2,1\n486,-1,931.5,1,56.4,136,1\n486,-1,1685.5,460.2,114.1,207.5,1\n486,-1,458.6,164,65,194.1,1\n486,-1,876.1,1,53.7,132.1,1\n486,-1,1799,166.2,71.2,184.1,1\n486,-1,1729.5,178.2,69.7,172.9,1\n486,-1,803.6,597.8,90.2,258.9,1\n486,-1,134.9,340,60.1,189,1\n486,-1,803.2,142.8,50,177.2,1\n486,-1,1699.4,47,51.5,167.4,1\n486,-1,216,712.5,95.4,261.8,1\n486,-1,915.6,648.1,114.7,256.2,1\n486,-1,358.3,110.1,53.9,175.5,1\n486,-1,219.4,138,62.9,160.8,1\n486,-1,1539.1,599.3,83.2,241.5,1\n486,-1,309,744.7,76.5,257.8,1\n486,-1,412.9,153.6,57.5,178.4,1\n486,-1,1777.2,349.2,74.7,215.8,1\n486,-1,1632.4,327.2,62.8,193.2,1\n486,-1,447.6,22.8,75.2,177,1\n486,-1,505.4,89.6,62.4,171,1\n486,-1,1641.1,38.8,57.8,174.2,1\n486,-1,711.8,93.5,59.1,168.8,0.999\n486,-1,410.8,7,47.6,158.8,0.999\n486,-1,754.3,98.5,50.8,143.1,0.998\n486,-1,1004.7,674,74.9,224.3,0.979\n486,-1,1592.2,573.8,65.8,213.1,0.627\n486,-1,1017.6,937.2,83.9,143.8,0.2\n615,-1,1221.5,30.8,62.1,119.1,1\n615,-1,687.2,205.9,78.9,113.8,1\n615,-1,1479.9,4.8,60.4,145,1\n615,-1,801.3,144.7,66.7,171,1\n615,-1,1633.5,209,72.8,194.9,1\n615,-1,359.2,286.3,66.5,200.5,1\n615,-1,1710.5,456.9,92.7,210.3,1\n615,-1,173.4,242.3,66.8,200.2,1\n615,-1,1606.8,1,51.9,99.7,1\n615,-1,358,115.5,51.9,175.4,1\n615,-1,1574.8,589.3,97,235,1\n615,-1,579,549.4,87.6,236.2,1\n615,-1,245.2,258.5,59.6,183.8,1\n615,-1,288.2,127.2,50.8,169.1,1\n615,-1,556,111.8,54.8,177.5,1\n615,-1,224.1,136.8,53.9,159.7,1\n615,-1,754.1,82.5,43.1,152.8,1\n615,-1,495.1,91.3,47.7,155.6,1\n615,-1,444.8,80.8,47.3,164.5,1\n615,-1,1101.7,897,115.5,184,1\n615,-1,398.3,93.2,54,164.8,0.999\n615,-1,354.2,3.4,52.6,114.8,0.825\n615,-1,1196.8,910.8,74.9,170.2,0.076\n206,-1,1221.5,31,62.5,119.1,1\n206,-1,687.2,207,78.3,113.6,1\n206,-1,211.5,127,55.7,167.2,1\n206,-1,704.8,1,55.8,158.9,1\n206,-1,397.7,600.1,88.3,244.4,1\n206,-1,1491.3,70.4,54,147.4,1\n206,-1,108.8,349.8,49.9,186.9,1\n206,-1,1208.9,146.1,52.4,164.9,1\n206,-1,1721.1,456.8,77.6,211.4,1\n206,-1,1358.7,568.6,103.1,244.5,1\n206,-1,287.9,125.8,55.9,171.9,1\n206,-1,354.6,106.9,55.7,178.9,1\n206,-1,72.8,644.8,112.6,257,1\n206,-1,521.3,132.4,56.3,163.9,1\n206,-1,423.9,205.1,77.6,216.6,1\n206,-1,1146.1,140,61.4,183.1,1\n206,-1,507.6,319,76.9,216.3,1\n206,-1,796.9,150.2,59,173.7,1\n206,-1,896,155.1,69.5,184.1,1\n206,-1,1026,135.4,47.4,156,1\n206,-1,228,529.2,59.3,207.1,1\n206,-1,806.9,311.9,71.5,187.8,1\n206,-1,381.6,38.8,61.9,167.9,1\n206,-1,1,604.6,80,234.8,1\n206,-1,755.5,295,70.3,206.2,0.999\n206,-1,963.7,913.1,69.8,167.9,0.991\n206,-1,866.7,109.2,51.7,168.6,0.989\n206,-1,474.2,4,42.2,75.5,0.148\n825,-1,1221.5,29.8,62.2,118.3,1\n825,-1,687.4,205.7,78.1,114.1,1\n825,-1,275.4,558.4,80.5,239,1\n825,-1,1036.5,547.9,96.3,244.6,1\n825,-1,791.4,134.9,64.7,178.6,1\n825,-1,1635.9,2.3,56.2,158,1\n825,-1,1723.6,453.5,74.8,213.2,1\n825,-1,1575.4,589.8,100.8,234.6,1\n825,-1,556.5,116.6,63.1,174.4,1\n825,-1,437.7,256.8,55.8,194.5,1\n825,-1,1476.7,42.5,58.9,158,1\n825,-1,1423.4,40,51.6,161.1,1\n825,-1,751.7,71.4,57,162.2,1\n825,-1,286.4,163.1,70,196.8,1\n825,-1,474.2,122.7,58.7,176.4,1\n825,-1,374.1,264.9,73.9,174.7,1\n825,-1,966.2,567.6,75,237.7,1\n825,-1,238.2,134.2,49.1,167,1\n825,-1,423.3,117.9,58,176.4,1\n825,-1,347.4,172.8,50.4,176.2,0.999\n910,-1,1222.2,30.4,60.9,118.4,1\n910,-1,686.5,206.3,79.7,113.1,1\n910,-1,472.6,198.2,67.3,190.1,1\n910,-1,794,140.6,74.9,171.7,1\n910,-1,1433,1,48.6,141.7,1\n910,-1,1110.9,31.9,62.6,162.2,1\n910,-1,308.6,694.3,89.6,267.1,1\n910,-1,871.7,434.1,65.1,218.5,1\n910,-1,1575.2,590.5,104.5,234.9,1\n910,-1,557.2,114.4,57.8,173.9,1\n910,-1,1721.7,452.9,77.7,214.9,1\n910,-1,1716.1,89.5,56.4,172.8,1\n910,-1,1480,107.1,60.7,153.2,1\n910,-1,413.9,347.8,59.3,206.5,1\n910,-1,300.8,165.2,67.3,198.5,1\n910,-1,1598.4,63.3,54,161.1,1\n910,-1,1304.1,876.8,96.8,204.2,1\n910,-1,379.2,192.4,58.5,180,1\n910,-1,329.6,356.7,82.1,190.8,1\n910,-1,752.2,73.5,55.5,160,1\n910,-1,1744.9,680.8,97.1,239.4,1\n910,-1,470.3,11.2,49.5,149.3,1\n910,-1,967.4,414.3,65,226.1,1\n910,-1,241.5,134.6,57.2,165,1\n910,-1,1502.3,2.7,57.7,133.9,1\n910,-1,421.9,66.5,56,171.9,1\n910,-1,253.8,1.3,54.7,118.8,1\n910,-1,312.7,1.1,47.7,132.4,1\n1041,-1,1221.7,29.2,61.4,119.7,1\n1041,-1,686.9,206.4,79.9,115.2,1\n1041,-1,793.4,141.3,70.8,172.6,1\n1041,-1,478.4,320.2,77.3,196.7,1\n1041,-1,1720.3,454.2,80.7,218.3,1\n1041,-1,289.1,126.9,52.4,171.8,1\n1041,-1,1126.1,560.2,88.7,256.6,1\n1041,-1,937.3,236.9,66.3,206.1,1\n1041,-1,277.3,533.9,97.1,203.6,1\n1041,-1,230.9,138.6,55.5,164.2,1\n1041,-1,1289.8,191.8,64.5,163.9,1\n1041,-1,1660.4,682.1,92.2,233.7,1\n1041,-1,751.2,74.9,54.2,161.3,1\n1041,-1,362.3,323.8,73.7,200.6,1\n1041,-1,292.8,319.7,70.6,208.1,1\n1041,-1,374.7,509.5,66.5,237.5,1\n1041,-1,1468.9,212.7,75.2,169,1\n1041,-1,1716.7,209.4,58.3,179.2,1\n1041,-1,372,102.8,58.3,177.6,1\n1041,-1,851.6,249.1,62.3,191,1\n1041,-1,307.2,2.9,37.2,126.5,1\n1041,-1,1573.7,589.9,102.9,240.2,1\n1041,-1,582.5,536.1,64.9,254.5,1\n1041,-1,454.2,167.8,60.8,175.2,1\n1041,-1,1857.7,242,63.3,199.3,1\n1041,-1,501.7,168.1,75,196.9,1\n1041,-1,433.2,66.7,62.2,176.7,0.998\n1041,-1,541.3,114.6,56.9,175.7,0.371\n782,-1,1221.6,29.5,62,117.7,1\n782,-1,686.9,204.6,79.7,114.2,1\n782,-1,1724.1,452.7,75.2,212.8,1\n782,-1,782.4,132.4,57.7,175.4,1\n782,-1,546.7,114.8,62,178.2,1\n782,-1,1488.1,21,58.7,146.8,1\n782,-1,1574.6,590.2,100,234.2,1\n782,-1,292.9,494.8,76.9,228.6,1\n782,-1,277.2,170.5,57.3,193.7,1\n782,-1,1445.4,69.8,49.4,164.8,1\n782,-1,447.8,212.6,55.2,192.5,1\n782,-1,472.7,78.2,61.1,177.7,1\n782,-1,332.6,188,53.9,176.7,1\n782,-1,391.1,221.9,70.4,179.9,1\n782,-1,233.3,130.7,50.8,168.8,1\n782,-1,750,74.5,53.3,156.2,1\n782,-1,254.2,1,53,120.4,1\n782,-1,1109.6,626.3,83.1,247.8,1\n782,-1,1572.5,76.2,59.5,171.9,1\n782,-1,421.6,78.7,55.5,170.5,1\n782,-1,573.4,572.6,68.7,259.4,1\n782,-1,1047.3,646.4,73.9,250.4,0.999\n1048,-1,1221.8,29.6,61.9,119.6,1\n1048,-1,686.9,206.5,79.7,114.6,1\n1048,-1,794.5,141.9,71.1,172.7,1\n1048,-1,1720.2,455.6,79.4,215.1,1\n1048,-1,357.6,335.4,73.4,204.7,1\n1048,-1,476.4,324.9,75.5,197.5,1\n1048,-1,287.7,125.9,54.6,173.5,1\n1048,-1,1312.3,200.2,56.5,163.8,1\n1048,-1,1649,679.1,96.7,233.7,1\n1048,-1,1117.9,550.1,84.6,244.3,1\n1048,-1,935.5,232,65.2,196.6,1\n1048,-1,229.1,138.1,53.9,163.2,1\n1048,-1,751.5,74.7,53.9,162.2,1\n1048,-1,851.9,236.9,66.7,193.7,1\n1048,-1,274.6,541.7,94.9,213.8,1\n1048,-1,1724.9,222.3,57.2,172.6,1\n1048,-1,374.3,99.2,58.9,180.6,1\n1048,-1,373.1,519.3,68.9,240,1\n1048,-1,288.9,332.6,72,207.4,1\n1048,-1,308.1,2.8,38.7,130.6,1\n1048,-1,1471.3,219.8,74.1,166.6,1\n1048,-1,513.6,170.5,75.2,194.1,1\n1048,-1,471.5,169.1,53.9,172.7,1\n1048,-1,1573.1,588.8,102.1,241,1\n1048,-1,583.8,536.8,62.7,255.1,1\n1048,-1,433.4,67.7,62.3,177.9,0.999\n1048,-1,1865.1,262,55.9,201.8,0.992\n489,-1,1221.5,31,61.9,118.1,1\n489,-1,686.4,206.3,80.2,112.7,1\n489,-1,998.9,1,56.1,141.1,1\n489,-1,1499.4,1,57.6,122.6,1\n489,-1,1690.4,458.8,107.9,210,1\n489,-1,931.3,1,56.8,135.1,1\n489,-1,303.3,192.3,49.4,169.8,1\n489,-1,460.6,158.1,65.3,195.4,1\n489,-1,800.5,600.4,94.4,258.8,1\n489,-1,1730.8,179.8,70.8,174.3,1\n489,-1,875,1,53.9,130.3,1\n489,-1,802.2,143.5,52.1,176.7,1\n489,-1,1805.2,171.2,69.7,179.9,1\n489,-1,410.8,155.2,60.2,185.2,1\n489,-1,214.8,716.8,97.9,267.8,1\n489,-1,1694.6,44.2,53.3,165.5,1\n489,-1,358.1,108.9,54.1,173.9,1\n489,-1,136.9,337.6,64.4,188.7,1\n489,-1,218.6,137.4,62.5,160.8,1\n489,-1,303.7,752.9,79.7,252.4,1\n489,-1,448.1,19.2,75.4,180,1\n489,-1,920.7,655.4,109,247.2,1\n489,-1,1538.8,600.3,85.1,239.7,1\n489,-1,1630.5,323.4,61.8,196.4,1\n489,-1,1766.1,351.1,78.8,208,1\n489,-1,713.8,92.4,60.1,167.6,1\n489,-1,1636.6,33.7,60.7,176.1,1\n489,-1,505,89.7,62.3,172.7,0.999\n489,-1,409.7,8.4,46.5,158,0.999\n489,-1,1598,579.4,77.3,225.9,0.997\n489,-1,1004.9,673.6,78.3,231.4,0.996\n489,-1,754.7,98.5,47.1,143.5,0.947\n489,-1,291.1,137.7,47.9,148,0.067\n489,-1,1017.8,937.5,84.5,143.5,0.052\n726,-1,1221.7,30.4,62.3,118.1,1\n726,-1,687.2,205.8,79,114.2,1\n726,-1,550.6,112.3,59.8,176.8,1\n726,-1,1471.6,111.2,52.8,169.8,1\n726,-1,1710.7,456.1,96.6,207.6,1\n726,-1,260.4,188.8,56.9,202.5,1\n726,-1,1479.9,8.3,58.7,143.5,1\n726,-1,477.2,160.3,51.8,184.3,1\n726,-1,1574.2,590.9,99.7,232,1\n726,-1,414.1,178.6,65.3,165.2,1\n726,-1,1598.2,113.9,59.5,182.3,1\n726,-1,301.6,415.9,72.5,220.8,1\n726,-1,317.3,199.3,63.4,180.5,1\n726,-1,400.4,552.5,96.4,247.4,1\n726,-1,787,140.2,50,176.8,1\n726,-1,749.2,81.2,50.5,153.2,1\n726,-1,360.1,106.4,47.8,177.9,1\n726,-1,1237.9,738.6,99.8,267.8,1\n726,-1,1168,768.1,79.1,250.7,1\n726,-1,422.9,38.9,59.5,168.2,1\n726,-1,464.6,8.4,46.8,143.8,0.999\n726,-1,320.8,1,50.5,133,0.998\n726,-1,237.3,134.4,52.1,171.7,0.998\n153,-1,1221.4,31.3,62.6,116.9,1\n153,-1,356.3,103.1,54.2,180.8,1\n153,-1,1488.4,68.5,55.5,151.3,1\n153,-1,108.9,351.2,49.1,186,1\n153,-1,1721.8,456.2,77.1,211.3,1\n153,-1,1159.2,162.3,50,163.7,1\n153,-1,704.3,1,56.4,158.5,1\n153,-1,287.6,122.8,55.8,173.1,1\n153,-1,1275.5,177.1,63,171.7,1\n153,-1,214.5,125,55.3,168.1,1\n153,-1,1358.7,566.7,105.5,244.6,1\n153,-1,420.9,253.6,78.2,223,1\n153,-1,687.3,206.1,79,115.3,1\n153,-1,454.4,34.5,50.6,164.5,1\n153,-1,405.9,710.6,93.5,265.2,1\n153,-1,539,64.5,50.6,166.6,1\n153,-1,100.9,544.1,86.4,257.9,1\n153,-1,1017.9,131.3,57.5,174.8,1\n153,-1,592.2,262.6,61.1,190.3,1\n153,-1,190.8,614.1,65.4,214,1\n153,-1,806,260.2,62.5,181.7,1\n153,-1,531.1,275.5,59.8,201.7,1\n153,-1,756.4,249.1,69.3,190.7,1\n153,-1,859.5,202.9,71.6,195.4,1\n153,-1,489.9,201.1,59.1,167.4,1\n153,-1,385.8,2.4,45.2,122.5,1\n153,-1,1043.1,914.2,72,166.8,0.993\n153,-1,793.4,144.7,63.9,185.2,0.99\n419,-1,1221.8,29.8,61.7,118.7,1\n419,-1,686.2,204.9,79.8,115.4,1\n419,-1,1663.6,67.4,74.5,179.5,1\n419,-1,452.4,245.7,81,202.2,1\n419,-1,550.1,70.7,55.2,165.2,1\n419,-1,359,109.5,54.4,176.1,1\n419,-1,944.8,14.3,60.3,165.7,1\n419,-1,109.5,347.1,53.6,191.4,1\n419,-1,1719.5,458.1,78.4,206.8,1\n419,-1,1768.4,133.6,54.4,163.6,1\n419,-1,1007,28,55.2,162,1\n419,-1,1582.4,617.8,98.6,241.5,1\n419,-1,1240.1,508.1,83.2,201.9,1\n419,-1,837.3,1.4,51,129.9,1\n419,-1,286.5,129.8,54.7,165.2,1\n419,-1,212.6,258.4,54,179.7,1\n419,-1,394,626.4,77.9,234.7,1\n419,-1,288.7,599.2,92.2,250.3,1\n419,-1,798.2,150.5,54.7,171.7,1\n419,-1,860,541.6,107.5,247,1\n419,-1,425.1,105.9,54.2,163.4,1\n419,-1,219.7,142.2,72.2,157.4,1\n419,-1,723,559.2,79.5,241.3,1\n419,-1,1820.9,72.5,78.4,181.5,1\n419,-1,358.4,1,66.7,118.5,1\n419,-1,424.2,1.5,45.6,121.1,1\n419,-1,717.6,1,50.2,127.2,1\n419,-1,459.7,63,66.1,194.9,0.999\n419,-1,712.7,90.7,63.4,176.6,0.999\n419,-1,937.8,560,80.8,222.7,0.998\n419,-1,752.9,90.6,43.6,159,0.537\n419,-1,984.5,929.7,81.8,151.3,0.236\n419,-1,918.6,7.9,38.4,99,0.209\n811,-1,1221.6,29.8,62.7,118.3,1\n811,-1,686.9,205.5,78.6,114.4,1\n811,-1,277,535.7,78.9,235.5,1\n811,-1,553.1,116.3,64.8,177.7,1\n811,-1,1723,452.9,75.5,214.5,1\n811,-1,1577.8,594.1,97.1,233.9,1\n811,-1,441.6,237.8,54.7,195.7,1\n811,-1,1619.4,2.2,61.2,146,1\n811,-1,788.7,130.3,53.3,181.9,1\n811,-1,279.1,164.8,61.7,198.5,1\n811,-1,991.4,592.4,72.3,245.2,1\n811,-1,1472.7,35.5,62.9,156.3,1\n811,-1,475.7,105.9,64.8,180.2,1\n811,-1,378.6,253,73.9,178.5,1\n811,-1,750.5,73.2,57.7,161.7,1\n811,-1,234.2,135.8,51.2,164.4,1\n811,-1,1066.2,570.1,73.9,251.1,1\n811,-1,346.8,179.9,51.9,171.8,1\n811,-1,1434.7,54,48.2,155.8,1\n811,-1,425.7,107,60.6,166.6,0.997\n611,-1,1221.2,31.4,61.3,119,1\n611,-1,687.5,205.8,78,113.8,1\n611,-1,1480.9,4.5,59.7,144.5,1\n611,-1,361.5,279.9,69.1,200,1\n611,-1,801.7,146.4,66.2,168.7,1\n611,-1,1709.2,456.9,93.7,210,1\n611,-1,171.8,243.3,63.1,198.5,1\n611,-1,1610.5,1.6,55.1,103.2,1\n611,-1,1574,590.1,97.8,233.7,1\n611,-1,585.6,553.8,102,230.7,1\n611,-1,243.4,262.7,60.6,180.8,1\n611,-1,1639.4,217.1,69.9,195.9,1\n611,-1,559.4,108.8,52.1,181.2,1\n611,-1,221.7,138.2,55.9,160.2,1\n611,-1,288.6,126.8,50.7,170,1\n611,-1,357.6,111.6,52.1,178,1\n611,-1,493,88,47.5,159.9,1\n611,-1,753.8,83.2,42.7,152,1\n611,-1,441.7,80.2,47.8,162.1,1\n611,-1,1097.5,887.2,115.9,193.8,1\n611,-1,396.6,88.7,53.3,163.4,0.995\n110,-1,1221,30.2,63.7,118,1\n110,-1,356.7,105.1,55.4,177.9,1\n110,-1,209.7,127.9,51.4,165.8,1\n110,-1,704.6,1,55.3,158.1,1\n110,-1,108.7,352,49.2,185.1,1\n110,-1,388.9,808.7,101.1,272.3,1\n110,-1,1487,68.7,56.2,149.4,1\n110,-1,1721.7,457.4,77,209.6,1\n110,-1,290.7,124.8,56.9,172.5,1\n110,-1,1154.2,148,55.8,177.1,1\n110,-1,1358.5,567.3,104.9,244,1\n110,-1,936.7,204.1,70.4,191.3,1\n110,-1,510.9,232.6,71.7,198.3,1\n110,-1,425.9,292.2,78.5,226.5,1\n110,-1,1255.3,184.9,46.6,171.5,1\n110,-1,44.6,678.9,85.7,218.8,1\n110,-1,1374.3,182.9,65.6,190.4,1\n110,-1,102.5,545.1,84.3,255,1\n110,-1,537.8,65.7,48.7,168.2,1\n110,-1,478.5,154.6,58.5,159.6,1\n110,-1,843.3,222.4,54.8,168.4,1\n110,-1,441.9,1,51.4,155.3,1\n110,-1,802.1,195.6,62.1,194.2,1\n110,-1,698.9,185,55.8,159.6,0.999\n110,-1,375.9,4.5,48.3,160.5,0.999\n110,-1,482.8,38.8,60.8,162.7,0.999\n110,-1,1421.3,189,42,167.2,0.072\n13,-1,1042.2,206.9,89.1,181.2,1\n13,-1,687,206.2,79.5,113.7,1\n13,-1,1487,69.8,55.7,148.5,1\n13,-1,504.3,149.7,103.2,189.7,1\n13,-1,704.6,1.7,55.9,156.7,1\n13,-1,1360.9,566.5,105.9,244.6,1\n13,-1,379.1,396.9,83.3,233.7,1\n13,-1,796.1,148.8,61.4,174.1,1\n13,-1,1725.2,457.6,76.7,209.2,1\n13,-1,102.3,547.9,84.8,249.8,1\n13,-1,1803.4,222.5,66.3,178.2,1\n13,-1,1201.3,35.7,73.4,116.6,1\n13,-1,217.6,125.3,48.3,168.2,1\n13,-1,356.1,105.8,53.8,177.9,1\n13,-1,210.1,384.9,65.2,194.3,1\n13,-1,285.4,121.6,54.8,174.5,1\n13,-1,1622.6,253.8,61.9,181.9,1\n13,-1,880.6,130.4,58.1,178.5,1\n13,-1,416.8,89.4,53.4,163.7,1\n13,-1,460.7,71.6,52.4,171.8,1\n13,-1,1438.9,240.8,50.6,173.2,0.999\n13,-1,1400.3,189.9,50.4,172.7,0.997\n13,-1,1039,1,47.5,73.9,0.994\n13,-1,250.5,364.4,49.9,197.9,0.399\n551,-1,1221.2,30.7,62.2,119.6,1\n551,-1,687,205.9,78.3,114.6,1\n551,-1,1491.2,4.2,58.5,143.4,1\n551,-1,1660.8,285,88.6,205.8,1\n551,-1,382,222.6,63.1,190.6,1\n551,-1,785.7,145.1,66.6,174.3,1\n551,-1,1715.1,455.5,85.5,209.5,1\n551,-1,762,595.9,99.4,256.4,1\n551,-1,1793.6,232.8,70.7,182.6,1\n551,-1,873.8,1,53.9,108.9,1\n551,-1,532,109.8,60.7,176.8,1\n551,-1,988.3,2.2,50.9,98.7,1\n551,-1,289.3,121.3,51.6,175.1,1\n551,-1,1659.1,2.1,54.7,155.2,1\n551,-1,188,300.1,66.4,194.8,1\n551,-1,1593.4,1.7,54.3,153.4,1\n551,-1,219.6,134.9,57.6,160.4,1\n551,-1,245.9,879.4,83.6,201.6,1\n551,-1,1596,584.9,67.3,238.4,1\n551,-1,456.3,97.2,65.8,182.4,1\n551,-1,753,82.6,48.1,153.9,1\n551,-1,359,109.8,55.3,174.5,1\n551,-1,134.1,268.8,57.7,219.2,1\n551,-1,412.3,140.6,49.3,163.6,1\n551,-1,1076.7,785.7,93.6,247.8,0.997\n551,-1,927.9,1.2,56.3,97.4,0.995\n551,-1,1005.5,781,105.7,231.1,0.648\n680,-1,1221.7,29.2,61.3,122.3,1\n680,-1,687.3,206.8,79.2,113.3,1\n680,-1,1481.3,4,60.6,147.3,1\n680,-1,1079.2,1,77.3,102,1\n680,-1,486.5,132.5,45.1,173.1,1\n680,-1,1708.3,457.8,100.1,206.8,1\n680,-1,801.1,145.7,61.2,173.5,1\n680,-1,1620.7,153.4,72.2,188,1\n680,-1,1490.8,156.9,52,175.7,1\n680,-1,563.6,111.8,49.1,179.6,1\n680,-1,368.3,529.8,109.3,253.1,1\n680,-1,314.6,356.5,69,215.1,1\n680,-1,416.2,141.2,71.2,159.9,1\n680,-1,360.6,114.2,49.9,169.5,1\n680,-1,1575.6,589.2,96.5,235.8,1\n680,-1,1285.1,875.2,86.4,205.8,1\n680,-1,750.3,80,49.1,157.5,1\n680,-1,1369.2,860.3,101,220.7,1\n680,-1,402.6,10.1,59.6,163.4,1\n680,-1,233.8,209.8,65.1,196.7,1\n680,-1,290.1,222.7,58.5,174.9,1\n680,-1,480.8,40.6,46.7,148,0.989\n680,-1,839.3,926.7,70.9,154.3,0.974\n680,-1,296.4,1.4,58.1,136.5,0.952\n96,-1,1222.1,30.6,61,117.1,1\n96,-1,704.8,1,55.6,159.7,1\n96,-1,400.2,844.9,98.9,236.1,1\n96,-1,356.9,108.2,54.3,176.3,1\n96,-1,1487.5,69.7,55,148.2,1\n96,-1,424.1,307.2,77.3,231.5,1\n96,-1,1721.3,456.4,78,210.7,1\n96,-1,960.2,198.4,72.2,188.9,1\n96,-1,1358.6,565.7,105.6,247.3,1\n96,-1,1186.6,156.2,73.6,173,1\n96,-1,101.7,547,86.9,254.1,1\n96,-1,113.1,351.2,48.9,192.3,1\n96,-1,293.2,125.5,53.8,170.8,1\n96,-1,503.7,219.4,71.1,196.2,1\n96,-1,209.8,129,49.9,166.7,1\n96,-1,715.6,190.2,60.5,167.3,1\n96,-1,29.2,696.7,66.5,228.9,1\n96,-1,538.9,64.2,48.2,167.1,1\n96,-1,438.8,12.1,51.8,156.5,1\n96,-1,1284.7,197,45.8,168.3,1\n96,-1,1453.1,189.8,58.9,174.3,1\n96,-1,820.8,188.7,60.9,187.1,1\n96,-1,376.6,17,50.5,159.8,1\n96,-1,863.6,209.4,54.2,166.7,1\n96,-1,1405.4,192.8,59.8,192,0.999\n96,-1,482.4,136.3,57.1,160.4,0.999\n96,-1,256,91,62.8,185.8,0.999\n96,-1,483.2,37.9,58.8,161,0.99\n847,-1,1221.2,29.7,62.4,119.5,1\n847,-1,687.7,206,78.4,113.6,1\n847,-1,794.4,138.4,78.6,174.9,1\n847,-1,1720.5,452.4,79.6,213.8,1\n847,-1,558.4,115.9,60.3,176.6,1\n847,-1,1068.6,1,59,112.2,1\n847,-1,1575.6,590.4,102.2,234.8,1\n847,-1,265.7,590.4,83.2,245.8,1\n847,-1,1470,60.8,60.8,154.6,1\n847,-1,752.6,70.6,54.9,163.3,1\n847,-1,296,160.9,72.7,196.3,1\n847,-1,353.7,288.6,73.4,182.1,1\n847,-1,240.1,131.7,52.3,166.7,1\n847,-1,1414.8,28.9,54.4,158.2,1\n847,-1,1657.2,24.4,54.1,162.1,1\n847,-1,933.7,532.7,72.7,239.7,1\n847,-1,474.1,136.1,59.6,181.8,1\n847,-1,436.8,271.8,54.8,202.7,1\n847,-1,1018.5,513.1,72.8,235.6,1\n847,-1,416,139.2,60.9,169.3,1\n847,-1,253.7,1.1,53.7,121.2,1\n847,-1,494.5,1,43.7,106,0.753\n119,-1,1221.1,29.9,63,119.3,1\n119,-1,1114.5,148.1,80.1,173,1\n119,-1,355.9,105.7,56.8,178.5,1\n119,-1,394.8,783.4,103.4,280.4,1\n119,-1,1487.6,68.1,56.1,151.5,1\n119,-1,704,1,56.2,159.1,1\n119,-1,212.6,127.4,50.9,165.2,1\n119,-1,108.4,349.8,49.8,187.8,1\n119,-1,925.1,207.9,67.3,195.2,1\n119,-1,1721.3,457.1,77.5,209.7,1\n119,-1,289.5,126.4,54.2,168.6,1\n119,-1,1358.3,567.1,105,244.4,1\n119,-1,478.4,167.4,57.1,157.1,1\n119,-1,426.6,287.8,78.6,225.2,1\n119,-1,522.4,241.7,69.3,204.3,1\n119,-1,538.3,64.3,50.3,169.8,1\n119,-1,1237.4,179.1,43.6,168.7,1\n119,-1,788.7,208.5,65.6,189.6,1\n119,-1,76.3,656.6,71.5,226.3,1\n119,-1,1354.8,182.1,68.7,182.2,1\n119,-1,445.8,1,54.4,148.7,1\n119,-1,101.1,544,87.5,258.9,1\n119,-1,377.1,1.5,48.4,150.6,1\n119,-1,834.5,228.5,57.5,176.7,1\n119,-1,482.6,39.4,59.3,166.2,0.999\n119,-1,1114.7,926.8,83.6,154.2,0.148\n184,-1,1221.5,31,62.4,117.4,1\n184,-1,211.3,125.8,55.9,170.1,1\n184,-1,1489.4,68.1,54.9,149.6,1\n184,-1,406.3,37.7,63,167.6,1\n184,-1,109,349.7,48.8,188.6,1\n184,-1,356.6,105.8,54.2,179.2,1\n184,-1,686.9,207.7,79.4,111.7,1\n184,-1,704.5,1,55.7,159,1\n184,-1,1720.1,456.5,78.8,212.5,1\n184,-1,414,642,91.7,259.3,1\n184,-1,289.8,129.5,54.6,167.7,1\n184,-1,1358.3,567.9,104.3,243.6,1\n184,-1,540.5,141.5,63,167.9,1\n184,-1,5.1,616.9,117.7,255.6,1\n184,-1,234.1,565.5,63.3,214.1,1\n184,-1,528.7,302.7,60.3,204.1,1\n184,-1,420.6,224,76.9,219.7,1\n184,-1,869.5,175,78.1,191.8,1\n184,-1,1087.8,145.6,50.8,163.5,1\n184,-1,794.9,151.8,61.5,172.6,1\n184,-1,923.5,123.8,72.8,169.8,1\n184,-1,1196.1,152.9,60.2,188.2,1\n184,-1,798.7,292.1,70.4,185.8,1\n184,-1,98.7,548.3,86.2,251.4,1\n184,-1,746.2,276.1,71.1,202.8,1\n184,-1,1248.6,156.3,45,164.2,0.999\n184,-1,989.3,917,73.5,164,0.974\n318,-1,1221.4,30.9,61,118.9,1\n318,-1,687.6,206.7,77.5,113.7,1\n318,-1,324.8,585.2,105.2,245.5,1\n318,-1,1456.5,4.3,55.6,143.7,1\n318,-1,1707.4,52.9,57,155,1\n318,-1,796.4,146,58.3,178.1,1\n318,-1,1719.7,457.2,79.6,213.3,1\n318,-1,108.9,349.5,51.8,191.1,1\n318,-1,1507.5,601.2,88.9,245.6,1\n318,-1,452.9,115.5,75.1,204.1,1\n318,-1,930.4,48.8,62.1,173.7,1\n318,-1,357.8,108.4,58.4,181.6,1\n318,-1,892,438.6,70.1,196.3,1\n318,-1,237,374.6,58,189.7,1\n318,-1,435.1,447.7,72.3,237.3,1\n318,-1,419.3,44.2,56,170.1,1\n318,-1,996.5,77.7,60.4,177,1\n318,-1,1051.8,76.9,55.5,169.2,1\n318,-1,213.5,129,56.7,170.4,1\n318,-1,281.6,129.4,53.3,174.4,1\n318,-1,522.4,472.9,65.3,217,1\n318,-1,705.7,2.3,52.1,154.7,1\n318,-1,828.2,432.5,77.3,206.5,1\n318,-1,727.6,98.5,47.5,175.9,1\n318,-1,352.5,888.7,99.3,192.3,0.999\n318,-1,514.2,101.9,40.9,165.9,0.998\n318,-1,926.9,910.5,78.9,170.5,0.996\n318,-1,1572.2,3.2,56.7,107.6,0.931\n765,-1,1221.5,29,62.1,119.9,1\n765,-1,687.4,205.5,78.2,114.3,1\n765,-1,544,115,64.9,177.2,1\n765,-1,782.3,135.6,63.9,176.5,1\n765,-1,1721,452.6,78.3,214,1\n765,-1,1575.4,590.5,99.3,233.6,1\n765,-1,1455,79.8,53.9,169.8,1\n765,-1,301.7,471.9,76.1,223.9,1\n765,-1,456.3,197.9,55,184.7,1\n765,-1,272.7,177.4,56.2,197.8,1\n765,-1,329.6,193,56.7,179.6,1\n765,-1,397,210.2,68.3,177.5,1\n765,-1,460.4,64.9,59.3,171.4,1\n765,-1,1493.8,19.2,60.4,145.3,1\n765,-1,1575.6,83.6,65.3,177.3,1\n765,-1,752,77.9,50.4,155.3,1\n765,-1,256.5,1.1,50.9,122.2,1\n765,-1,517.8,568.5,86,248.9,1\n765,-1,235,136,48.8,163,1\n765,-1,1141.6,658.4,99.4,262.5,1\n765,-1,1078.3,678.6,81.1,257.8,1\n765,-1,403.5,68,57.1,166.4,1\n765,-1,361.1,113.4,51.5,167.3,0.999\n746,-1,1221.4,29.8,62.2,118.8,1\n746,-1,686.4,205.9,79.5,114.3,1\n746,-1,257.4,182.4,61.2,202,1\n746,-1,1463.9,97.6,54,166.1,1\n746,-1,779.6,137.2,58.8,175.3,1\n746,-1,551.3,116.8,59.8,175.2,1\n746,-1,1714.4,456.8,90.9,208,1\n746,-1,1576.3,589.5,99.2,234.1,1\n746,-1,455.2,559.7,96,251.4,1\n746,-1,1489.4,16.3,59.1,139.9,1\n746,-1,299.5,443.8,74,219.7,1\n746,-1,332.2,199.4,56.7,175.2,1\n746,-1,1597.7,96.4,58.6,182.8,1\n746,-1,441.3,55.2,57.8,167.5,1\n746,-1,467.5,182.1,53,187.1,1\n746,-1,404.2,196.5,68,173.4,1\n746,-1,1117.3,717,82.9,260.3,1\n746,-1,1191.4,698.8,84.3,262.9,1\n746,-1,750.1,84.1,49.5,147.8,1\n746,-1,358.9,113.6,49.6,168.1,0.999\n746,-1,258.5,1.6,48.1,121.1,0.999\n746,-1,291,127.8,46.8,166.4,0.988\n746,-1,393.9,48.1,49,175.9,0.945\n746,-1,237.5,145.8,49.5,158.3,0.614\n501,-1,1221.4,30.1,62.4,119.1,1\n501,-1,686.1,206.5,80.7,114.1,1\n501,-1,999.1,1,54.5,130,1\n501,-1,1495.3,1.3,59.3,133.9,1\n501,-1,793.2,141.6,61.1,179.1,1\n501,-1,1828.2,183.2,80.8,192.1,1\n501,-1,468.3,154.9,64.2,191,1\n501,-1,1663.1,604.4,63.8,207.4,1\n501,-1,931.6,1,55.9,127.4,1\n501,-1,143.9,332.1,64.9,191.7,1\n501,-1,1681.3,35.8,57,168.7,1\n501,-1,925.3,682.2,119.3,251.5,1\n501,-1,1732.9,194.3,71,171.1,1\n501,-1,879.4,1.5,51.8,124.7,1\n501,-1,317.9,186.9,51.9,166.5,1\n501,-1,208.7,743.5,94.7,263,1\n501,-1,821.2,608.5,79.3,255.6,1\n501,-1,405.2,168.6,59.5,184.4,1\n501,-1,1549.4,598.2,79.9,240.8,1\n501,-1,1725.9,458,75.4,208.1,1\n501,-1,218.3,134.2,64.2,164.5,1\n501,-1,299.4,775,74.1,258.5,1\n501,-1,1622.6,315.3,62.5,193.3,1\n501,-1,716,92.3,60.7,167.3,1\n501,-1,1622.6,27.3,57.2,173.9,1\n501,-1,449.6,12.3,75.4,181.5,1\n501,-1,1741.6,336.1,74.5,211.7,1\n501,-1,510.3,94.5,61.8,181.2,1\n501,-1,360,111.3,56.5,179.7,0.999\n501,-1,286.7,124.7,51.6,166.9,0.999\n501,-1,402.2,20.4,46.3,155,0.998\n501,-1,1019.8,697.9,79.2,228.8,0.997\n501,-1,1024.1,933.9,82.6,147.1,0.075\n382,-1,1221.7,31.3,61.4,118.4,1\n382,-1,686.2,206.7,79.6,113.1,1\n382,-1,1636.1,20.2,69.9,170.7,1\n382,-1,1099.6,454.4,69.4,201.9,1\n382,-1,358.2,102.7,56,183.9,1\n382,-1,450.2,295.8,73.4,207.9,1\n382,-1,828.2,1,54.4,113.6,1\n382,-1,952.7,33.1,62.5,173.8,1\n382,-1,336.1,537.8,86.5,247,1\n382,-1,1597.8,632.5,80.4,246.5,1\n382,-1,794.2,150.3,61.5,172.3,1\n382,-1,108.9,350.7,52.4,189.1,1\n382,-1,282.4,126.9,55.1,169.5,1\n382,-1,375.7,1,55.5,95.9,1\n382,-1,1015.5,49,53.2,165.7,1\n382,-1,1718.9,454.8,77.6,215,1\n382,-1,451.2,562.9,69.8,236.3,1\n382,-1,219.7,137.4,57.1,159.8,1\n382,-1,209.4,300.4,53.3,182.6,1\n382,-1,1434.9,1,53.8,90.8,1\n382,-1,1773.7,103.6,59.1,155.1,1\n382,-1,447.6,73.7,70.5,195.9,1\n382,-1,506.1,82.9,52.9,167.9,1\n382,-1,848.4,499.4,94.7,228.9,1\n382,-1,1789.3,442.9,67.5,203.6,1\n382,-1,756.1,104.6,50.2,134,1\n382,-1,603.2,560.5,92.7,244,0.999\n382,-1,908.4,513.1,75.7,204.9,0.999\n382,-1,976.6,907.7,86.9,173.3,0.995\n710,-1,1221.4,30.4,62.5,118.5,1\n710,-1,687,206.2,79.4,114.1,1\n710,-1,1481,6.3,57.2,145.5,1\n710,-1,1601.3,127.3,69.2,182.3,1\n710,-1,558.6,110.6,56.7,178.2,1\n710,-1,294.9,394.2,75.4,217.1,1\n710,-1,1712.1,456.7,94.8,206.8,1\n710,-1,1474.6,121.5,54.4,177.4,1\n710,-1,481,151.2,50.3,180.3,1\n710,-1,1574.2,588.9,100.6,236.5,1\n710,-1,1289.1,776.4,89.8,276,1\n710,-1,412.2,164.3,74.9,163.9,1\n710,-1,360.5,108.7,49.8,175.8,1\n710,-1,750.2,81.4,49.3,154.2,1\n710,-1,800.8,139.6,47,172.2,1\n710,-1,260.7,195.9,56.4,196.7,1\n710,-1,1203.5,797.3,89.8,270.1,1\n710,-1,391,544.1,71.1,244.5,1\n710,-1,471.5,22.9,44.9,137.4,1\n710,-1,411.9,30.1,61.9,160.2,1\n710,-1,306.5,206.2,59.2,179.6,1\n710,-1,984,2.2,77.3,88.1,1\n710,-1,231.1,135,51.3,163.7,1\n60,-1,1221.3,30,61.8,117.9,1\n60,-1,686.8,206.5,79.4,113.8,1\n60,-1,1488,69.4,54.5,154.1,1\n60,-1,488.7,185.3,82.4,194.3,1\n60,-1,1362.2,566.1,103.9,245,1\n60,-1,704.7,1,55.4,157.9,1\n60,-1,403.6,345,81.6,235,1\n60,-1,1000.7,181.5,72.5,178.9,1\n60,-1,356,114.4,53.5,171.2,1\n60,-1,1722.4,456.4,76.3,210.6,1\n60,-1,103,546.3,84.9,253.2,1\n60,-1,212.7,130.1,48.7,162.2,1\n60,-1,285.5,126.8,54.3,169.5,1\n60,-1,10.4,758.1,67.5,234.6,1\n60,-1,151.2,364.4,55.3,187.1,1\n60,-1,451.3,108.5,50,151,1\n60,-1,833,202.6,88.8,169.6,1\n60,-1,794.7,145.5,63.5,180.1,1\n60,-1,1362.3,209,43.6,171.9,1\n60,-1,1302.8,179,58,168.8,1\n60,-1,540.6,62.8,43.9,165.5,1\n60,-1,384.9,39.2,53.7,172,1\n60,-1,1467.9,211.5,63.1,194.1,1\n60,-1,481.9,41.2,60.5,165.9,0.999\n60,-1,1872.3,286.8,48.7,199.7,0.962\n60,-1,887.7,185,57.3,174.6,0.958\n60,-1,437.9,31.6,52,162.3,0.899\n60,-1,237.7,108.6,44.8,165.9,0.143\n210,-1,1221.7,30.6,61.7,119.9,1\n210,-1,687.2,207.1,77.7,113.7,1\n210,-1,211.2,126.7,55.9,167.1,1\n210,-1,705.4,1.4,54.9,159,1\n210,-1,356.1,108.5,54,176.5,1\n210,-1,1492.5,70.9,53.5,146.4,1\n210,-1,109.6,351.7,49.4,184.7,1\n210,-1,287.5,125.7,56.5,172.6,1\n210,-1,1721.5,456.3,77,212,1\n210,-1,91.2,657.9,106.4,245.3,1\n210,-1,1357.6,567.1,104.2,245.7,1\n210,-1,399.5,586.6,88,247.7,1\n210,-1,795.5,151.1,60.7,171.2,1\n210,-1,425,203.5,75.8,214.5,1\n210,-1,1204.9,140.1,50.9,166.2,1\n210,-1,505,321,76.7,216.3,1\n210,-1,1017.2,134.1,46.8,154.8,1\n210,-1,522.4,128.6,51.1,169,1\n210,-1,227.4,520.8,61.1,210.7,1\n210,-1,1140.2,137,58.2,183.1,1\n210,-1,897.2,148.1,70.3,193.5,1\n210,-1,2.8,612.4,103.9,250.1,1\n210,-1,809,315.1,75.1,189.8,1\n210,-1,858.6,106.8,53.3,175.4,0.999\n210,-1,561.6,263.7,53.8,181.2,0.999\n210,-1,757.1,300.8,71.1,202.2,0.999\n210,-1,379.1,38.1,55.2,162.6,0.999\n210,-1,953.3,914.7,75.4,166.3,0.995\n210,-1,474.9,5.7,41.9,76,0.131\n340,-1,1220.9,30.8,62.9,119.3,1\n340,-1,687.2,206,78.4,113.6,1\n340,-1,1730.4,70.2,55.6,160.2,1\n340,-1,1447.7,1.4,57.5,125.5,1\n340,-1,1596.6,1,55.7,130.7,1\n340,-1,417.7,580.1,107.7,249.6,1\n340,-1,287.6,130.8,52.9,173.2,1\n340,-1,446.8,104.4,73.2,196.1,1\n340,-1,1719.7,456.7,80,213.9,1\n340,-1,108.1,350.5,52.6,189.9,1\n340,-1,1830,499.5,68.7,204.1,1\n340,-1,796.1,149.7,60.3,174.4,1\n340,-1,519.9,100.2,41,167.8,1\n340,-1,363.8,104.7,56.6,180.9,1\n340,-1,969,401,67.7,196.1,1\n340,-1,975.5,64.9,65.1,177.8,1\n340,-1,210.5,141.4,55.7,164.4,1\n340,-1,1542.9,614,85,246.1,1\n340,-1,928.6,22,62,165.2,1\n340,-1,231.3,343.4,57.3,185.9,1\n340,-1,1037.4,70.1,52.9,163.6,1\n340,-1,902,453.8,67.3,213.6,1\n340,-1,843.3,448.9,84.9,222.7,1\n340,-1,502.4,496.8,69.4,220.8,1\n340,-1,422.1,358.8,87.1,221.7,1\n340,-1,716.4,96,56.1,168.1,0.999\n340,-1,772.7,97.4,39.6,153.8,0.995\n340,-1,945.7,919.7,73.5,161.3,0.98\n340,-1,422.8,52.4,54.8,163.9,0.958\n340,-1,849,5,46.2,81.4,0.162\n340,-1,451.8,882.1,93.2,198.9,0.05\n450,-1,1221.6,31,62.7,118.4,1\n450,-1,936.2,1,59.1,156.2,1\n450,-1,446.6,211,73.3,198,1\n450,-1,687,206.4,78.4,112.9,1\n450,-1,358.6,107.9,53.8,177.6,1\n450,-1,1007,11.7,53.8,157.2,1\n450,-1,1375.4,549.7,105,202.7,1\n450,-1,1716.8,453.8,83,213.5,1\n450,-1,112.4,351.4,53.6,188.3,1\n450,-1,254.9,226.7,50.1,180,1\n450,-1,862.3,2.4,53.8,136.9,1\n450,-1,287.1,126.9,53.5,169.1,1\n450,-1,1553.9,610.1,75,243.8,1\n450,-1,800.2,151.9,49.3,171,1\n450,-1,1836.6,389.8,84.4,208.5,1\n450,-1,348,684.2,74.6,242.4,1\n450,-1,1667.2,360,67.6,196.6,1\n450,-1,883.7,593.1,117.4,247.2,1\n450,-1,525.9,76.6,54.5,169.7,1\n450,-1,253.1,651.5,93.1,256.3,1\n450,-1,1746.7,155.7,57.7,166.9,1\n450,-1,426.5,125.2,59.1,161.9,1\n450,-1,788.1,575.1,84.6,248.6,1\n450,-1,221.7,138.5,57,156.4,1\n450,-1,755.5,90.7,48.5,150,0.999\n450,-1,732,2.4,48.5,90.8,0.999\n450,-1,422.4,1,43.9,137.6,0.999\n450,-1,1507.6,1,57.2,104.4,0.999\n450,-1,359,4.7,64.1,133.8,0.999\n450,-1,1022.7,921.9,84,159.1,0.998\n450,-1,966.9,608.3,83,220.7,0.996\n450,-1,1709.4,107.5,62.6,177.7,0.988\n450,-1,711.6,90.2,54.5,170.9,0.984\n450,-1,451.9,35.7,64.6,200.8,0.517\n174,-1,1220.9,30.8,62.5,118.2,1\n174,-1,108.7,350.3,49.8,188.9,1\n174,-1,1489,68.7,55.3,148.5,1\n174,-1,356.2,103.7,55.6,179.2,1\n174,-1,703.9,1,56.6,158.9,1\n174,-1,1357.8,567.7,105.5,245,1\n174,-1,212.7,125.4,54.5,167.3,1\n174,-1,289.3,128.1,53.7,169.2,1\n174,-1,1721,457.2,77.6,211.8,1\n174,-1,403.2,664.5,96.6,258.9,1\n174,-1,2.1,604,77,239.1,1\n174,-1,424.7,41.6,56.9,158.7,1\n174,-1,688.2,207.9,76.6,111.1,1\n174,-1,421.7,234.5,78.2,221.6,1\n174,-1,953.5,123.1,61.5,177.3,1\n174,-1,100.5,548.9,86.6,252,1\n174,-1,548.7,150.9,65.5,173,1\n174,-1,229.8,583,65.7,212.3,1\n174,-1,528.5,284.9,60.5,215,1\n174,-1,1217.9,162.9,58.5,176.4,1\n174,-1,861.3,185.4,76.1,188.8,1\n174,-1,794.9,149.3,61.8,173.5,1\n174,-1,797.4,278.5,63.7,177.9,1\n174,-1,1113.8,151.6,45,157.4,1\n174,-1,746.5,265.4,68.7,194.3,1\n174,-1,1263.2,160.2,50.2,159.7,0.999\n174,-1,537.3,65.6,51.7,167.3,0.998\n174,-1,1007.3,911.8,73.1,169.2,0.971\n174,-1,515.3,230.1,45.5,151.5,0.448\n589,-1,1221.5,30.7,61.6,119.4,1\n589,-1,687.4,206.1,78.5,113.5,1\n589,-1,1481.4,4.4,60.5,144.4,1\n589,-1,801.2,142.9,65.3,175.6,1\n589,-1,1642.2,1,55.4,121.9,1\n589,-1,1651.5,241.7,78.5,202.3,1\n589,-1,224.6,276.5,63.5,187.3,1\n589,-1,561.1,112.6,50.3,175.9,1\n589,-1,358.1,110.8,53.5,175.2,1\n589,-1,372.4,258.5,65,196.7,1\n589,-1,1719.7,455.7,81.9,211,1\n589,-1,288,126.8,52.2,169.1,1\n589,-1,1575.4,589.5,93.5,236.4,1\n589,-1,161.2,252.2,60.4,206.8,1\n589,-1,469.3,111.4,50.9,162.7,1\n589,-1,213.9,134.5,54,164,1\n589,-1,754.3,82.1,43.1,152.9,1\n589,-1,428.2,65.2,45.5,173.7,1\n589,-1,872.8,2.9,50.8,98.3,1\n589,-1,1063.3,846.3,122.9,234.7,1\n589,-1,1855.8,266.2,65.2,178.4,0.999\n589,-1,1156.6,854.7,87.3,226.3,0.59\n589,-1,291,891.2,110.5,189.8,0.057\n549,-1,1221.4,30.2,62.8,120.4,1\n549,-1,687.2,205.9,78.1,114.5,1\n549,-1,1491.3,4.3,58.3,141.7,1\n549,-1,383.4,219.3,62.9,192.7,1\n549,-1,782.9,144.5,67.1,175.6,1\n549,-1,1663.3,286.1,91.7,208.4,1\n549,-1,1789.4,232.1,69.6,180.5,1\n549,-1,988.8,1,51.7,98.7,1\n549,-1,1715.6,456.7,84.7,211.2,1\n549,-1,875.1,1,53.7,108.6,1\n549,-1,530.1,107.5,60.4,178.7,1\n549,-1,288.8,121.7,52.3,174.2,1\n549,-1,1659.8,1.8,53.6,156.7,1\n549,-1,249.1,875.4,83.4,205.6,1\n549,-1,767.2,596.9,98.4,254.3,1\n549,-1,184.1,304.2,70,193,1\n549,-1,1594.3,1,55.6,155.3,1\n549,-1,1595.9,583.6,66.8,238.7,1\n549,-1,219.5,136.4,57.9,158.3,1\n549,-1,453.7,100.5,67.1,185.6,1\n549,-1,134.2,270.6,57.2,218.1,1\n549,-1,359.3,111,55.6,176.4,1\n549,-1,928.5,1,56.4,100,0.999\n549,-1,753.4,84.4,48.8,153.4,0.999\n549,-1,1070.7,779.6,97.4,241.7,0.997\n549,-1,414.5,145.1,43.4,164.4,0.956\n549,-1,414.3,39.8,45.6,183,0.776\n549,-1,1002.9,773.1,111.5,243.4,0.445\n549,-1,1029.7,946.4,80.3,134.6,0.072\n424,-1,1221.8,30,61.6,119.4,1\n424,-1,686.8,205.3,78.8,114.8,1\n424,-1,941.1,9.9,63.8,166.5,1\n424,-1,360,108.6,53.7,176.7,1\n424,-1,1669.7,73.2,65.1,175.8,1\n424,-1,450.5,240.9,77.7,202.6,1\n424,-1,110.2,350.8,52.8,187.1,1\n424,-1,1719.3,458.5,79.8,206.6,1\n424,-1,1258.8,507,86.8,211.3,1\n424,-1,838.7,1,52,133.4,1\n424,-1,1008.7,24.5,54.5,159.7,1\n424,-1,285.2,129,54.8,165.6,1\n424,-1,1576,615,98.1,243.5,1\n424,-1,738.8,559.6,76.7,242.2,1\n424,-1,544.2,71.7,54.7,165,1\n424,-1,1764.4,135.8,54,165.9,1\n424,-1,798.3,150.4,54.9,172.4,1\n424,-1,285.6,613.2,93.5,249,1\n424,-1,865,549.3,103.9,239.3,1\n424,-1,358.5,1.7,68.5,122.9,1\n424,-1,216.8,256.2,52.9,180.6,1\n424,-1,388.6,635.8,74.8,239.9,1\n424,-1,221.3,139.3,71,161.2,1\n424,-1,713.8,91.6,62,172.7,1\n424,-1,942.9,569.1,85.4,222.6,1\n424,-1,430.4,108.8,53.4,164,1\n424,-1,424.7,1.5,44,124.7,1\n424,-1,719,2.8,50.8,119.9,0.999\n424,-1,454.5,60.3,74.2,193.1,0.999\n424,-1,1801.8,69.8,76,179.3,0.996\n424,-1,1863.4,425.8,57.6,194.3,0.823\n424,-1,987.4,927.8,81.8,153.2,0.183\n464,-1,1221.6,31.1,62.7,117.8,1\n464,-1,687.1,205.7,79,113.5,1\n464,-1,935.2,1,58.5,148.5,1\n464,-1,1006.9,1,54.6,158.6,1\n464,-1,451.7,190.5,68.4,199,1\n464,-1,240.3,677.5,97.2,260.9,1\n464,-1,1730.9,167.7,63.4,164.4,1\n464,-1,1649.7,351,62.8,194.7,1\n464,-1,274.1,207.9,53.1,179.4,1\n464,-1,1812.8,369.6,84.5,214,1\n464,-1,359.3,110.1,54.9,177.7,1\n464,-1,875.7,1,54.1,132.8,1\n464,-1,1701,458.5,97.7,208.7,1\n464,-1,1506.7,2.2,58,109.9,1\n464,-1,804.2,148.4,46.8,175.1,1\n464,-1,1541.5,607.2,76.9,246.7,1\n464,-1,519.3,78.6,57.9,173.5,1\n464,-1,1674.8,53.3,68,175.5,1\n464,-1,118.4,348.9,53.2,183.8,1\n464,-1,899.7,618.9,108.3,248.8,1\n464,-1,217.7,136.2,61.6,160.8,1\n464,-1,338.1,707.7,71,256,1\n464,-1,809.4,582.4,88.7,251,1\n464,-1,753.4,94.7,51.9,145.5,1\n464,-1,1469.3,564,82.3,200.2,1\n464,-1,445.4,41.4,72.3,184.6,0.999\n464,-1,981.6,632.8,88.2,219.1,0.999\n464,-1,713.2,90.8,52.8,167.5,0.998\n464,-1,285.2,125.9,53.1,171.8,0.998\n464,-1,416.9,1.9,42.8,157.5,0.998\n464,-1,1026.6,920.9,85.3,160.1,0.991\n464,-1,432,144.9,45.7,164.2,0.702\n46,-1,686.4,206,79.3,114.4,1\n46,-1,1215.5,31.2,69.5,114.1,1\n46,-1,395.2,363.1,84.8,234.4,1\n46,-1,1487.6,70.7,54.6,147.5,1\n46,-1,489.1,172.3,91.1,198.2,1\n46,-1,1362.1,566.4,104,246.4,1\n46,-1,704.5,1,55.7,156.9,1\n46,-1,1721.3,455.7,77.2,211.4,1\n46,-1,900.5,199.3,79,178.3,1\n46,-1,213.7,126.1,50.1,166.4,1\n46,-1,354.1,105.4,55.1,177.8,1\n46,-1,167.9,367.5,68.8,190.8,1\n46,-1,1009.5,160.9,77.7,188.9,1\n46,-1,2.9,790.8,66.5,240.2,1\n46,-1,101.6,548.2,86.9,250.8,1\n46,-1,407.7,88.9,53.9,158.8,1\n46,-1,283.6,125.4,53.8,169.8,1\n46,-1,795.2,148.2,61.6,177,1\n46,-1,860.6,149.5,61.2,185.3,1\n46,-1,1850.4,267.4,70.5,196.8,1\n46,-1,1335.1,181.8,52.5,163.1,1\n46,-1,1488.9,216.8,62.4,201.8,0.999\n46,-1,443.3,41.9,56.8,167.6,0.998\n46,-1,484.1,42.7,57.8,157.5,0.997\n46,-1,541.8,61.9,42.2,174.5,0.987\n46,-1,1384.2,217,45.2,176.6,0.875\n818,-1,1221.2,29.1,62.5,119.6,1\n818,-1,688.4,205.7,76.7,114.3,1\n818,-1,789.9,134,62.8,176.7,1\n818,-1,557.4,116.4,61.8,174.2,1\n818,-1,1629,1,53.5,150.2,1\n818,-1,1723.3,452.9,75.3,214.9,1\n818,-1,1575.4,590,100.6,235.8,1\n818,-1,274.8,550,79.5,242.6,1\n818,-1,282.9,163.1,64.8,198.1,1\n818,-1,439.4,245.8,55.6,197.3,1\n818,-1,377.3,261.3,69.9,176.9,1\n818,-1,1471.1,37.1,63.3,158.4,1\n818,-1,1428.1,46.7,51.4,163.1,1\n818,-1,474,111,59.9,180.2,1\n818,-1,1052.2,557.1,76.2,246,1\n818,-1,751.3,72.7,58.7,160.2,1\n818,-1,236.1,137,49.6,162.9,1\n818,-1,980.1,583.4,71,238,1\n818,-1,346.5,178.2,51.6,170.8,1\n818,-1,425.5,110.1,59.9,170.8,0.999\n1017,-1,1222,30.1,61.4,118.1,1\n1017,-1,686.4,206.6,79.7,113.2,1\n1017,-1,791.8,140.6,76.2,172.9,1\n1017,-1,381.8,297.9,75.3,193.7,1\n1017,-1,1233.1,160,60.5,169.3,1\n1017,-1,289.3,127.2,53.8,170.9,1\n1017,-1,495.6,287.5,66,188.9,1\n1017,-1,538.4,121.3,61.6,169.9,1\n1017,-1,927.8,267,67.3,203.2,1\n1017,-1,299.6,297.4,63.4,202.7,1\n1017,-1,1575.4,589.5,102.6,237.8,1\n1017,-1,841.7,277.2,69.7,200.6,1\n1017,-1,1721.4,455.7,78.3,210.5,1\n1017,-1,231.2,141.3,54.5,161.5,1\n1017,-1,1832.4,221.5,60.1,188.1,1\n1017,-1,1468.1,185.9,65.6,165.5,1\n1017,-1,1156.6,606.1,87.4,247.6,1\n1017,-1,295.2,493.1,86.1,210.8,1\n1017,-1,1697.3,178.4,54.9,168.8,1\n1017,-1,751.4,73.2,53.9,162.3,1\n1017,-1,380.5,476.8,63.9,227,1\n1017,-1,1715.9,684,102.5,234.2,1\n1017,-1,441.3,166,74.4,194.6,1\n1017,-1,314.7,2.2,37.8,131,1\n1017,-1,586.1,552.6,82.7,243,1\n1017,-1,396.1,170.9,53.4,163.8,0.997\n1017,-1,357.4,907.4,98,173.6,0.993\n1017,-1,503.3,112.5,50.5,140.9,0.961\n1017,-1,374.3,102.9,58.2,184.3,0.211\n425,-1,1221.5,30.6,62.6,119.1,1\n425,-1,686.9,205.4,79,114.7,1\n425,-1,359.2,107.7,54.5,179.4,1\n425,-1,941.3,9.1,63.3,165.9,1\n425,-1,1671.4,74.8,63.1,176,1\n425,-1,450.2,241.1,78.9,200.9,1\n425,-1,1718.9,457.1,80.3,208.5,1\n425,-1,109.9,348.6,53.5,191.4,1\n425,-1,1008.6,23.7,54.9,160.9,1\n425,-1,839.6,1,52.3,133.8,1\n425,-1,1762.3,141.5,55.7,160.7,1\n425,-1,1575.4,616.2,96.2,244,1\n425,-1,543.5,73.1,54.1,162.7,1\n425,-1,1265.9,507,82.7,211.1,1\n425,-1,285.7,129.5,54.7,165.7,1\n425,-1,741.9,558.9,78.7,243.7,1\n425,-1,864.3,553.3,104.1,236.7,1\n425,-1,797.8,150,55.1,172.2,1\n425,-1,285.1,616.5,93.9,249.9,1\n425,-1,215.8,255,54.1,178.8,1\n425,-1,357.5,1.7,70.1,123.3,1\n425,-1,221.2,140.5,73.5,160.9,1\n425,-1,387.1,637.3,74.3,242.9,1\n425,-1,712.9,90.9,62.9,174.9,1\n425,-1,431.5,107.5,53.5,166.7,1\n425,-1,943.9,567.6,86,223.1,1\n425,-1,425.1,2,43.1,124,0.999\n425,-1,718.9,1,50.9,118.9,0.999\n425,-1,1799,68.5,76.5,182.5,0.999\n425,-1,452.2,62.1,74.3,191.9,0.999\n425,-1,1861.4,425.2,59.6,195,0.969\n425,-1,988.9,930.4,81.1,150.6,0.722\n425,-1,752.9,90.3,39.6,153.6,0.156\n425,-1,915.9,11.1,39.3,92.1,0.051\n84,-1,1221.3,30.2,61.8,117.8,1\n84,-1,1487.5,69.3,54.8,147.7,1\n84,-1,703.9,1.2,55.9,156.6,1\n84,-1,416.6,321,83.3,230.6,1\n84,-1,356.3,103.2,55.7,181.5,1\n84,-1,497.4,208.1,74.3,199.9,1\n84,-1,1358.7,565.5,105.3,244.8,1\n84,-1,1721.6,456,77.3,210.6,1\n84,-1,976.8,191.9,73.9,184,1\n84,-1,1223.5,161.9,72.3,172.3,1\n84,-1,102.1,544.8,85.6,257.3,1\n84,-1,294.4,127.6,51.7,168.6,1\n84,-1,14.9,721.1,70.2,231.8,1\n84,-1,393.2,875.7,100.2,205.3,1\n84,-1,754.5,183.7,60.4,179.9,1\n84,-1,210.6,131.5,51.5,164,1\n84,-1,1422.1,199.1,65.1,191.6,1\n84,-1,686.5,205.8,76.3,116.5,1\n84,-1,1482.8,197.1,53.6,178.8,1\n84,-1,1318.7,202.3,42.3,167.8,1\n84,-1,127.4,353.7,43.6,189.3,1\n84,-1,539.2,64.4,48.1,171.5,1\n84,-1,875.9,197,55.4,167.7,1\n84,-1,435.1,19,53.3,163.3,1\n84,-1,478.3,123.5,56.7,161.6,0.999\n84,-1,256.2,97.5,58.1,175.2,0.999\n84,-1,378.2,25,54.7,161,0.999\n84,-1,834.6,171.4,56.7,191.9,0.999\n84,-1,799.2,160.9,50.5,169.9,0.398\n798,-1,1221.6,29.2,61.4,119.1,1\n798,-1,686.9,205.6,79.9,113.7,1\n798,-1,287.7,518.2,78.3,237.5,1\n798,-1,547.8,114.2,63.3,178.1,1\n798,-1,783.1,132.1,51.5,180.4,1\n798,-1,1723.7,452.7,75.1,214.3,1\n798,-1,1574.4,589.8,101.6,234.8,1\n798,-1,278.6,167.3,59,196.3,1\n798,-1,479.3,91.6,61.2,176.8,1\n798,-1,1483,28.7,59.3,148.5,1\n798,-1,1609.9,1,53.4,126.1,1\n798,-1,749.7,70.1,56.4,160.6,1\n798,-1,233,133.1,51.4,167.5,1\n798,-1,253.9,1.2,53.2,121.8,1\n798,-1,391,241,65.6,176.5,1\n798,-1,442,227,55.2,193.4,1\n798,-1,1078.3,594.4,93.4,264.7,1\n798,-1,345,186.2,47.5,177.4,1\n798,-1,1441.4,60.8,48.7,157,1\n798,-1,444.6,1.9,42.8,88.1,1\n798,-1,1013.8,617.3,80,248.8,1\n798,-1,423.3,93,54.8,164.6,1\n798,-1,609.6,577.9,77.6,239.4,1\n1006,-1,1221.2,30.5,61.9,118.3,1\n1006,-1,686.3,206.3,80,112.7,1\n1006,-1,395.4,287.4,69.4,190.2,1\n1006,-1,1212.7,139.7,63,176.8,1\n1006,-1,793.6,140.2,75.1,172.8,1\n1006,-1,501.3,275.9,68,191.2,1\n1006,-1,290,125.7,52.2,169.1,1\n1006,-1,1473.5,182.8,63.2,159.6,1\n1006,-1,1575.8,590.6,102.2,235.1,1\n1006,-1,231.4,137.9,54.8,166.3,1\n1006,-1,1721.9,453.4,79.9,216.6,1\n1006,-1,1815.5,204.7,64.6,183.2,1\n1006,-1,927.4,277.4,68.8,210.7,1\n1006,-1,309.4,285.7,65.2,198.8,1\n1006,-1,843,291.5,65.2,205,1\n1006,-1,541.6,122.9,59.7,169.1,1\n1006,-1,751,73.7,54.3,161.4,1\n1006,-1,301.1,477.7,85.3,199.8,1\n1006,-1,1685.2,165.1,57.9,175,1\n1006,-1,380.1,461,68.5,227.5,1\n1006,-1,1166.1,628.3,90.6,261.9,1\n1006,-1,346.5,882.7,91.5,198.3,1\n1006,-1,1742.8,676.7,92.2,247.2,1\n1006,-1,594,551.7,100.8,244.8,1\n1006,-1,313.8,2,42.6,128.5,1\n1006,-1,507.9,86.9,52.3,157.9,1\n1006,-1,417.4,167,62.7,188.9,0.999\n1006,-1,437,66.7,61.8,170.8,0.999\n1006,-1,376,174.2,48.6,164.1,0.998\n1006,-1,385,1,52.9,156.4,0.857\n922,-1,1221.6,30.3,61.7,118.2,1\n922,-1,686.1,206,80.7,113.8,1\n922,-1,1122.3,42,58,163.7,1\n922,-1,793.4,141.6,75.2,171.8,1\n922,-1,1284.9,832.4,97.7,248.6,1\n922,-1,459.1,206.5,68.1,189.6,1\n922,-1,1475.7,108.3,64.1,163.9,1\n922,-1,1613,73.4,52.2,163.5,1\n922,-1,1574.3,588.9,103.9,235.8,1\n922,-1,556.6,115.2,58.1,173,1\n922,-1,1721.3,453.9,77.4,212.7,1\n922,-1,327.1,372.5,80.6,191,1\n922,-1,1430.7,2.2,46.8,129.4,1\n922,-1,750.3,73,56.4,160.8,1\n922,-1,301,162.1,69.5,199.7,1\n922,-1,407.2,360.7,60.1,209,1\n922,-1,951.2,391.6,75.4,228.9,1\n922,-1,865,413.7,65.1,213.1,1\n922,-1,308.2,711.2,88.6,258.7,1\n922,-1,1747.8,678.1,95.8,244.1,1\n922,-1,239.9,133.1,54.1,165.4,1\n922,-1,1492.3,1.4,60.7,125.3,1\n922,-1,1728,101.2,53.3,171.9,1\n922,-1,372.1,207.6,59.5,180.4,1\n922,-1,470.6,18.6,52.9,151.8,1\n922,-1,254.6,1.7,53,120.6,1\n922,-1,426.1,69.2,61.9,172.3,1\n922,-1,313.3,1.8,48.6,131.6,1\n693,-1,1221.2,30,62.4,118.9,1\n693,-1,687.5,206.6,78.4,112.9,1\n693,-1,1481.7,6.9,59.2,145.3,1\n693,-1,562.7,111.2,53.3,178.4,1\n693,-1,1610.1,141.9,69.7,181.9,1\n693,-1,1711.9,454.1,97.5,212.6,1\n693,-1,803.7,145.4,52.6,172.1,1\n693,-1,1483.9,134.7,54.5,179.9,1\n693,-1,374.8,531.8,87.5,257.5,1\n693,-1,1575.5,590,95.7,233.4,1\n693,-1,486.7,134.9,48.5,183,1\n693,-1,749.4,79,50.8,157.3,1\n693,-1,422.4,148.7,62.6,164.7,1\n693,-1,360.9,112,50,174.8,1\n693,-1,305.8,376.7,70.6,212,1\n693,-1,480.3,30.7,48.1,138.7,1\n693,-1,249.7,198.7,61.2,201,1\n693,-1,407.3,20.6,56.2,165.7,1\n693,-1,1042.5,1.4,64.1,94.3,1\n693,-1,300.9,212.1,59,181.2,1\n693,-1,1327.1,817.7,98.8,263.3,1\n693,-1,224.9,133.1,54.1,165.2,1\n693,-1,1250.2,837.7,87.1,243.3,1\n693,-1,825.3,924.4,78.8,156.6,0.446\n269,-1,1221.7,31.1,61.9,119,1\n269,-1,687.4,206.5,78.9,111.7,1\n269,-1,379.7,8.3,61.6,162.5,1\n269,-1,381.2,480.5,87.7,234.3,1\n269,-1,290.2,127.8,55.6,171.6,1\n269,-1,1634.8,19.5,61.1,148.5,1\n269,-1,1120.1,98.6,56.9,169.6,1\n269,-1,454.8,154.8,74.4,212.1,1\n269,-1,939.4,91.7,69.1,181.9,1\n269,-1,108.7,351,50.8,188.5,1\n269,-1,1721,457.2,77.3,211.2,1\n269,-1,1476.7,45.6,53.1,148.1,1\n269,-1,355.8,105.4,52.4,180,1\n269,-1,796.9,150.3,60.5,173.2,1\n269,-1,704.8,1,54,156.9,1\n269,-1,1045.8,104.2,61.6,184.7,1\n269,-1,217.5,125.3,56.2,167.4,1\n269,-1,233.9,435,59.5,198.8,1\n269,-1,703.5,331.6,67.3,196.1,1\n269,-1,1413.3,567.9,97.4,246.4,1\n269,-1,252.5,766.9,90.7,273.5,1\n269,-1,177,571.3,88.1,250.9,1\n269,-1,872,373,77.9,201,1\n269,-1,805.2,360.6,87.5,217.8,1\n269,-1,566.2,404.1,65.2,209.8,1\n269,-1,479.2,393.6,73.4,224.3,1\n269,-1,513.5,116.9,54.1,172.2,1\n269,-1,868.7,107.8,44.7,155.7,1\n269,-1,755.6,102.3,46.6,170.1,0.999\n269,-1,940.3,914.3,87,166.7,0.677\n721,-1,1221.8,30.3,62.2,118.9,1\n721,-1,686.4,206.1,80.5,113.4,1\n721,-1,1480.2,7.8,58.9,145.7,1\n721,-1,1474.7,112.9,52.7,174.3,1\n721,-1,1572.6,589.8,101.9,232.4,1\n721,-1,1711,456.3,96.4,207.4,1\n721,-1,551.5,113.2,59.6,176.4,1\n721,-1,1600.1,121.1,60.1,178.4,1\n721,-1,390.2,548.2,99.3,247,1\n721,-1,412.5,172.8,68.2,162.5,1\n721,-1,479.4,161.1,49.4,180.7,1\n721,-1,299.9,405.2,75.1,222.2,1\n721,-1,312.3,201.4,66.1,181.6,1\n721,-1,260.9,192.5,55.8,198.6,1\n721,-1,1253.1,746.5,95.3,274.7,1\n721,-1,750.3,82.2,48.8,153.2,1\n721,-1,1177.3,775.9,84.2,265,1\n721,-1,787.8,137.8,49.8,178.7,1\n721,-1,416.8,37.4,62.3,168.6,1\n721,-1,360.4,109.3,47.4,170.9,1\n721,-1,464.9,15.7,48.3,141.5,1\n721,-1,236.5,132.7,50,170.6,0.998\n144,-1,1221.2,30.8,62.6,117.9,1\n144,-1,1037.6,136.6,81.1,171.4,1\n144,-1,356.7,102.9,55.8,181.3,1\n144,-1,1487.6,68.6,56.1,149.9,1\n144,-1,108.6,351.2,48.6,186.6,1\n144,-1,395.3,732.4,93,261,1\n144,-1,420.3,261.9,77.7,221.4,1\n144,-1,704.5,1,56,157.2,1\n144,-1,288.1,125.7,54.6,169.4,1\n144,-1,1721.8,457.1,77.4,210.3,1\n144,-1,1359.1,566.6,105.2,244.7,1\n144,-1,538.1,64.5,51.1,165.8,1\n144,-1,1302.1,175.2,55.9,181.3,1\n144,-1,686.4,205.6,80.9,117,1\n144,-1,218.9,128.1,51.8,162.5,1\n144,-1,869.5,205.6,74.5,192.7,1\n144,-1,1180.3,167.1,51,165,1\n144,-1,810.9,247.5,55.8,177.1,1\n144,-1,531.3,263.6,58.8,200.3,1\n144,-1,101,551.5,83.5,243,1\n144,-1,383.5,1.8,46.4,132.6,1\n144,-1,469.2,36.1,51.4,161.4,1\n144,-1,481.9,188.8,59.8,172.8,1\n144,-1,583,252.1,57.7,194.1,1\n144,-1,159.6,630.4,75.2,216.2,1\n144,-1,766.3,234.3,63.2,190,1\n144,-1,1058.4,921.5,78,159.5,0.976\n1027,-1,1221.3,29.8,62.3,120.1,1\n1027,-1,686.8,206.8,79.7,113.4,1\n1027,-1,1249.5,173.1,64.9,171,1\n1027,-1,373.5,311.3,71.8,199.6,1\n1027,-1,1699,187.6,63.1,184.2,1\n1027,-1,792.6,140.9,74,173,1\n1027,-1,491.3,301.1,68.2,188.8,1\n1027,-1,289,127.6,52.5,167.5,1\n1027,-1,932.2,255.4,68.3,208,1\n1027,-1,1721.5,457.2,78.1,206.3,1\n1027,-1,844.2,263.7,64.8,193.1,1\n1027,-1,1143,586.7,87.2,255.9,1\n1027,-1,233.5,139.6,57.1,163.4,1\n1027,-1,750.3,74.4,54.9,161.8,1\n1027,-1,293,307.6,69.4,210,1\n1027,-1,1575.2,588.8,103.2,240.5,1\n1027,-1,1699.1,684,84.8,237.8,1\n1027,-1,538.6,121.4,63.2,176.1,1\n1027,-1,1840.8,232.6,63.2,191.9,1\n1027,-1,376.9,495,66,229.1,1\n1027,-1,289.1,507.6,87.8,201.5,1\n1027,-1,422.4,171.2,59,167.7,1\n1027,-1,578.5,547.2,76,242.6,1\n1027,-1,1470.7,210,67.2,157.2,1\n1027,-1,374.3,101,57.6,177.9,1\n1027,-1,472.6,163.3,69.8,197.7,1\n1027,-1,311.5,2,35.7,129.5,0.999\n1027,-1,365.5,924.5,86.3,156.5,0.47\n381,-1,1222,31.3,61.3,118.7,1\n381,-1,686,206.7,80.1,113.4,1\n381,-1,1098.4,453.1,67.2,201.5,1\n381,-1,1635.5,19.2,67.6,168.7,1\n381,-1,358.4,102,55.6,184.4,1\n381,-1,449.5,297.5,74.6,208.9,1\n381,-1,827.5,1,54.5,112.7,1\n381,-1,1597.3,634.9,81.6,243.1,1\n381,-1,794.5,149.8,61,173.3,1\n381,-1,952.6,34.8,62,175.2,1\n381,-1,338.8,534.9,85.1,249.1,1\n381,-1,1718.5,455.4,77.8,214.6,1\n381,-1,109.4,351,52.3,189.3,1\n381,-1,282.2,127.6,55.9,169.1,1\n381,-1,219,138.6,58.4,158.9,1\n381,-1,377.8,2.6,52.9,93.9,1\n381,-1,208.8,300.9,54.2,185.4,1\n381,-1,452.1,559.5,70,238.8,1\n381,-1,1016.3,49.1,53.7,166.2,1\n381,-1,1435.3,1,53.3,90.2,1\n381,-1,847.7,496.6,95.9,233.3,1\n381,-1,446.7,73.5,71.9,197.7,1\n381,-1,1773.3,104.5,58.1,155.6,1\n381,-1,504.4,83.4,54.3,168.9,1\n381,-1,1790.5,445.7,68,202.5,1\n381,-1,599.2,561.5,90.9,248.7,1\n381,-1,756,104,50.5,134.2,0.999\n381,-1,906.7,511.5,73.7,206.4,0.999\n381,-1,975.6,910.5,87.2,170.5,0.997\n407,-1,1221.3,29.5,62.4,119.2,1\n407,-1,686.1,205.1,79.9,116.1,1\n407,-1,1649.1,51.4,68,171.9,1\n407,-1,458.2,266.3,75.9,206.1,1\n407,-1,1770.1,120.4,65.2,173.8,1\n407,-1,358.1,106.2,54.3,179.6,1\n407,-1,110.4,346.1,52.6,193.6,1\n407,-1,416,603.7,73.2,235.8,1\n407,-1,1720.1,455.9,80.7,210.4,1\n407,-1,795.9,151.5,58.3,170.5,1\n407,-1,551.1,68.4,59.3,171.7,1\n407,-1,946,18.5,62.2,170.9,1\n407,-1,285.2,129,55.1,165.7,1\n407,-1,362.3,1,64.1,116.2,1\n407,-1,220.4,142,64.6,156.4,1\n407,-1,1587.5,614.9,99.8,251.8,1\n407,-1,1005.4,32.3,55.5,160.6,1\n407,-1,303.2,578.8,82.9,257.1,1\n407,-1,830.3,1,56.2,129.3,1\n407,-1,1198.1,488.9,60.2,201.6,1\n407,-1,204.7,269.6,55.1,182,1\n407,-1,466.4,69.3,64.7,188.8,1\n407,-1,425.1,90.9,51,173.5,1\n407,-1,855.1,525.8,102,236.7,1\n407,-1,930,544.4,82.7,222.7,1\n407,-1,718.2,1,51.4,133.7,1\n407,-1,709.9,90.6,63.2,171.7,0.999\n407,-1,689.3,559.3,89.4,238.9,0.999\n407,-1,427.4,1,43,110.9,0.99\n407,-1,978.2,919.3,84.4,161.7,0.955\n407,-1,1875.6,60.7,45.4,192.1,0.854\n31,-1,1206.6,29.1,72.5,122,1\n31,-1,686.1,206.5,80.7,112.5,1\n31,-1,385.9,375.2,89.4,238,1\n31,-1,703.8,1.8,56.1,156.4,1\n31,-1,1487,69.8,55.3,150,1\n31,-1,1362.2,566.9,104.1,243.9,1\n31,-1,1724.1,455.6,75.1,212.1,1\n31,-1,491,164.4,86.7,191.2,1\n31,-1,214.9,127.9,47.8,162.6,1\n31,-1,973.7,199.5,77.5,178.4,1\n31,-1,794.7,149.3,62.9,174.5,1\n31,-1,190.5,370,67.1,197.3,1\n31,-1,102.1,546.8,85.3,253.1,1\n31,-1,355.8,106.5,53.4,179.8,1\n31,-1,283.5,123.2,54.4,172,1\n31,-1,1832.7,245.9,65.2,191.5,1\n31,-1,1365.9,187.7,48.2,171.8,1\n31,-1,870.7,139.9,57.3,185.9,1\n31,-1,410.3,81.5,55.4,160.1,1\n31,-1,1,819.9,59.3,233.3,1\n31,-1,914.2,153.2,51.1,162.8,1\n31,-1,455.7,58.9,45,161.6,1\n31,-1,1593,234.5,55.5,178.7,0.999\n31,-1,1010.7,155.2,77.3,187.6,0.97\n310,-1,1221,31.3,61.9,118.1,1\n310,-1,1456.7,10.2,55.4,146.5,1\n310,-1,686.6,207.4,79.2,112.2,1\n310,-1,308.5,578.3,82.8,255.2,1\n310,-1,415.7,36.3,59.5,167.4,1\n310,-1,1719.7,456.6,79.5,213.4,1\n310,-1,1695.8,47.6,57.6,159.2,1\n310,-1,108.2,352.6,52.3,187.7,1\n310,-1,357.8,110.5,55.4,177.1,1\n310,-1,795.9,148.2,58.5,174.3,1\n310,-1,235.9,382.6,58.4,188.4,1\n310,-1,933.9,53,62.8,172.7,1\n310,-1,452.9,123.1,74.7,203.1,1\n310,-1,1489.9,597.8,90,243.4,1\n310,-1,217.8,133.3,55.5,163.7,1\n310,-1,279.3,131.5,54.5,171,1\n310,-1,530.2,459,67,207.5,1\n310,-1,1002.7,77.9,62.2,184.3,1\n310,-1,705.7,1.5,52.4,156.4,1\n310,-1,887.5,426.2,71.6,196.7,1\n310,-1,1058.5,80.2,55.9,167.8,1\n310,-1,326.6,872.7,96.2,208.3,1\n310,-1,733.8,98.2,46.7,173.8,1\n310,-1,826.4,418,82.6,215.8,1\n310,-1,445.6,436.6,69.5,234.6,0.999\n310,-1,390.9,404.5,84.7,235.8,0.999\n310,-1,511.1,102.3,43.4,171.7,0.996\n310,-1,928.8,909.2,78.1,171.8,0.994\n310,-1,367.8,790.9,104.3,259.5,0.978\n948,-1,686.5,206.2,80.2,113.5,1\n948,-1,1221.4,30.1,62.4,118.7,1\n948,-1,1474,133.2,63.6,168.9,1\n948,-1,794.5,140.6,72.7,172.7,1\n948,-1,1485,1,56.1,113.2,1\n948,-1,749.4,68.5,57.4,165.5,1\n948,-1,323.1,762.5,95.6,273.7,1\n948,-1,1575.5,588.5,103.1,235.7,1\n948,-1,1139.7,67.1,60.8,170.7,1\n948,-1,1720.1,453.9,77.7,214,1\n948,-1,1246.8,766.1,91.5,276.4,1\n948,-1,1634,97.8,55.6,170.9,1\n948,-1,934.7,359.6,69.2,217.2,1\n948,-1,1415.9,1.3,48,118.1,1\n948,-1,347.2,230.2,61.2,181.4,1\n948,-1,554.2,116.9,53.4,170.9,1\n948,-1,394.2,383.4,66,216.4,1\n948,-1,431.2,229.4,67.8,192.4,1\n948,-1,325.3,406.1,78.7,197.2,1\n948,-1,857.5,373.2,64.3,208.6,1\n948,-1,235,132.9,58.8,173.7,1\n948,-1,435.1,74.9,58.3,178.9,1\n948,-1,251.2,1.4,52.3,120,1\n948,-1,1744.7,673.7,92.3,252.1,1\n948,-1,1753.8,133.3,60.1,179.4,1\n948,-1,478.5,38.3,53.9,149.8,1\n948,-1,480.5,215.4,61.7,186.2,1\n948,-1,311.6,172,61.7,181,0.999\n948,-1,291.4,132.4,50.9,167.6,0.231\n446,-1,1221.5,30.4,62.1,118.6,1\n446,-1,936.8,1,59.2,158.6,1\n446,-1,449,214.9,72.4,197,1\n446,-1,1006.2,12.6,55.3,159.2,1\n446,-1,687.6,206.1,77.8,113.1,1\n446,-1,359.5,107.8,53,178.2,1\n446,-1,1368.9,539.9,85.8,203.6,1\n446,-1,1719.6,453.8,80,214.2,1\n446,-1,111.4,351.1,53.7,188.3,1\n446,-1,859.6,3.1,51.4,139.5,1\n446,-1,287.5,124.7,53.4,173.7,1\n446,-1,1746.6,153.2,68.4,170.3,1\n446,-1,1559.9,613.6,73.9,241.9,1\n446,-1,799.6,151.7,50.7,171.6,1\n446,-1,248.2,226.7,50.8,185.8,1\n446,-1,258.9,643.8,95.3,260.4,1\n446,-1,882.7,586.5,118.6,245.7,1\n446,-1,1673.6,363.5,68.7,193.9,1\n446,-1,528.6,72.4,53.4,168.7,1\n446,-1,1843.6,393.9,77.4,207.7,1\n446,-1,358.5,676,72.7,246.2,1\n446,-1,221.7,138.2,55.6,154.7,1\n446,-1,783.9,572.6,77.4,249.5,1\n446,-1,422.8,1,43.9,136.6,1\n446,-1,427.4,120.4,62.2,171.2,1\n446,-1,730.1,1.3,48.5,94.5,1\n446,-1,1702.5,105.8,70.1,173.4,0.999\n446,-1,360.3,3.5,63.2,133.3,0.999\n446,-1,753.9,86.9,49,152.2,0.998\n446,-1,711,89.3,58.6,173.7,0.997\n446,-1,963.6,603.1,83.2,219.9,0.997\n446,-1,1015.9,919.3,87.5,161.7,0.977\n446,-1,1507.1,2.7,60.7,94.8,0.177\n446,-1,456.8,40.1,59.3,198.5,0.126\n635,-1,1221.1,30.4,63.2,118.1,1\n635,-1,687.3,205.8,78.8,113.6,1\n635,-1,1481.4,6.1,60.4,143,1\n635,-1,801.1,145.1,65.9,171.2,1\n635,-1,1709.7,455.9,99.6,210.4,1\n635,-1,341.2,306.2,68.3,206.5,1\n635,-1,546.5,114.3,63,172.2,1\n635,-1,358.9,111.2,51.1,172.8,1\n635,-1,1574.2,589.4,96.8,234.6,1\n635,-1,499,539.2,104.9,242.6,1\n635,-1,199.8,228.6,65.6,203.5,1\n635,-1,1625.3,197.9,70.3,186.7,1\n635,-1,257.9,245.1,60.5,185.7,1\n635,-1,417.3,109.1,53.3,157.4,1\n635,-1,288.1,124.5,51.4,169.3,1\n635,-1,752.2,83.7,44.2,151.5,1\n635,-1,419.8,1,58.5,134.9,1\n635,-1,460,92.5,49.5,170.2,0.999\n635,-1,351.9,1,56.9,127,0.999\n635,-1,496.7,68.1,45.3,152.6,0.999\n635,-1,234.7,136,48.2,159.7,0.994\n635,-1,1122.1,935.6,95.2,145.4,0.38\n635,-1,1580.7,4,48.9,79.3,0.08\n325,-1,1221.5,31.4,61.7,117.9,1\n325,-1,1453.5,1,55.8,138.4,1\n325,-1,686.2,207.4,80.8,112,1\n325,-1,355.8,581.5,99.2,248.4,1\n325,-1,1715.5,55.7,61.3,163.1,1\n325,-1,109.1,350.4,51.8,189.6,1\n325,-1,452.5,116.7,73.6,198.9,1\n325,-1,1718.7,457.3,80.4,212.4,1\n325,-1,795.3,149.3,59.6,174.1,1\n325,-1,362.3,107.5,57.7,181.1,1\n325,-1,989.4,69.8,62.5,179.5,1\n325,-1,420.5,45.4,56.1,170.1,1\n325,-1,898.1,442.8,69,197,1\n325,-1,928.9,38.6,62.2,170.9,1\n325,-1,1517.7,602.7,85.9,247.2,1\n325,-1,237.7,362.7,57.6,185.1,1\n325,-1,281.4,133.4,54.3,171.2,1\n325,-1,1576.6,1,67.3,116.5,1\n325,-1,213.7,135.3,55.3,164.1,1\n325,-1,833.1,438.5,78.6,208.2,1\n325,-1,516.4,475.5,67.6,221.1,1\n325,-1,1046.7,77.2,51.5,160.5,1\n325,-1,726.5,98.7,50.5,171,1\n325,-1,427.1,461.9,74.7,237.6,1\n325,-1,514.3,99.6,43.8,171.6,0.999\n325,-1,1840,515.9,62.4,216.4,0.993\n325,-1,929.8,910.3,77.3,170.7,0.985\n325,-1,369.2,911.3,93.4,169.7,0.882\n325,-1,710.1,6.7,48.1,152.8,0.61\n193,-1,1222.4,30.4,60.7,118.5,1\n193,-1,211.7,127.2,55.7,167.3,1\n193,-1,108.8,346.3,49.8,192.8,1\n193,-1,686.5,207.6,79.2,111.3,1\n193,-1,412.9,630,87.9,245.8,1\n193,-1,1489.3,68.4,55.1,149.4,1\n193,-1,705.1,1,55.3,159,1\n193,-1,1358.1,566.6,105.7,246.3,1\n193,-1,1720.3,457.1,78.8,211.5,1\n193,-1,357.3,105,53.7,178.1,1\n193,-1,43.1,627.5,112.7,250.7,1\n193,-1,288.6,126.9,55.2,171,1\n193,-1,1166.7,148.7,68.2,184.2,1\n193,-1,398,41.2,62.4,164.9,1\n193,-1,1063.5,144.3,51.4,158.7,1\n193,-1,520.9,303.7,69.3,212.1,1\n193,-1,420.4,219.1,76.8,214.8,1\n193,-1,875.8,165.3,80,194,1\n193,-1,530.7,137.4,60.7,158.4,1\n193,-1,795.1,149.9,62.3,174.6,1\n193,-1,801,296.6,71.4,189.6,1\n193,-1,232.4,547,61.2,210.4,1\n193,-1,1230,145.2,48.1,175.2,1\n193,-1,750.7,281.5,70,203.5,1\n193,-1,459.9,2,52.4,95.1,1\n193,-1,976.1,916.6,72.5,164.4,0.97\n20,-1,687.2,206.3,79,113.6,1\n20,-1,496.1,150.3,96.7,191.5,1\n20,-1,1486.8,70.1,55.3,147.6,1\n20,-1,1361.5,567.6,104.5,245,1\n20,-1,703.9,2.4,56.5,156.6,1\n20,-1,1725,457.6,76.7,209.9,1\n20,-1,1205.2,33.7,71.9,117.3,1\n20,-1,380,386.9,85.9,240.5,1\n20,-1,794.7,150.2,62.7,173.5,1\n20,-1,203.2,381.5,68,198.9,1\n20,-1,355.3,104.5,55.2,180.1,1\n20,-1,1020.1,200.3,67.8,183.3,1\n20,-1,102.2,548.3,84.8,250.4,1\n20,-1,216.5,128.2,48.2,165,1\n20,-1,1612.9,242.6,58.5,187.7,1\n20,-1,284.7,124.9,54.1,170.5,1\n20,-1,417.1,82.1,54.8,163.7,1\n20,-1,1815.2,227.4,64.2,187.9,1\n20,-1,877,139.1,60.3,180.4,1\n20,-1,457.7,64,49.8,168.6,1\n20,-1,1385.3,189.9,52.9,176.9,0.999\n20,-1,1.1,842.4,50.1,238.6,0.999\n20,-1,1427.9,234.8,46.4,181.4,0.771\n20,-1,911.2,143.7,50.7,163.2,0.757\n1030,-1,1221.4,29.7,61.8,119.7,1\n1030,-1,687.2,206.3,79.1,114.6,1\n1030,-1,793.5,141.6,72,171.3,1\n1030,-1,489.1,302.5,71.9,190.6,1\n1030,-1,1721.3,455.9,79.1,208.2,1\n1030,-1,1699.9,195.4,63.3,183.8,1\n1030,-1,1256.7,177.8,64,166.4,1\n1030,-1,371.4,316,71,201.2,1\n1030,-1,289.1,127.4,52.7,168,1\n1030,-1,234.4,139.4,57.3,165.9,1\n1030,-1,844.8,258.5,66,197.7,1\n1030,-1,935.5,252.5,65.9,202.2,1\n1030,-1,1574.5,589.5,104.1,241,1\n1030,-1,1139.2,579.8,86.8,253.4,1\n1030,-1,751.2,75.2,54.4,161.1,1\n1030,-1,1846.6,241.3,60.7,189.1,1\n1030,-1,294,312.2,66.1,207.9,1\n1030,-1,538.5,121.3,63.4,172,1\n1030,-1,375.4,501.3,67,222.9,1\n1030,-1,579.3,549.8,73.5,238.4,1\n1030,-1,371.8,104,58.9,178.2,1\n1030,-1,1694.9,684.8,78.2,233.1,1\n1030,-1,289.4,510.4,87.8,210.2,1\n1030,-1,430.9,169.7,59.1,172.8,1\n1030,-1,1469.3,205.8,68.8,161,1\n1030,-1,309.2,2.1,37.3,130.4,1\n1030,-1,477.8,159.8,69.6,199.4,1\n1030,-1,372.1,931.7,85,149.3,0.077\n770,-1,1221.1,29.7,62.8,119.3,1\n770,-1,687.3,205.3,78.2,114.4,1\n770,-1,547,117.7,61.6,174.1,1\n770,-1,782.3,134.6,64.4,174.2,1\n770,-1,1721.8,454.7,76.5,210.7,1\n770,-1,1575.2,589.7,101.2,236,1\n770,-1,294.8,474,78.6,226.9,1\n770,-1,1450,78.2,55.2,169.7,1\n770,-1,273.9,175.5,58,192.8,1\n770,-1,393.4,209.7,71,172.5,1\n770,-1,1492.3,17.2,59.5,147.4,1\n770,-1,328.3,190.9,58.5,175.7,1\n770,-1,750.8,75.6,51.6,157.7,1\n770,-1,255.9,1.1,51.6,122,1\n770,-1,465.5,69.7,62,176.8,1\n770,-1,452.9,202.9,54.9,187.3,1\n770,-1,1068.3,670.8,79.8,255.9,1\n770,-1,1573.5,78,63,175,1\n770,-1,233,138.1,50.4,160.8,1\n770,-1,527,573.2,94.5,246.3,1\n770,-1,1136.6,640.4,88.1,265.6,1\n770,-1,407.9,74.2,57,168.2,0.999\n770,-1,358.2,107.3,54.1,177.7,0.999\n415,-1,1221.8,30.2,61.6,119.7,1\n415,-1,686.3,206.1,79.6,113.6,1\n415,-1,358.9,109.5,54.3,175.7,1\n415,-1,454.8,246.8,78.5,206.2,1\n415,-1,551.6,71.8,55.6,164.6,1\n415,-1,1658,63,74.7,175.3,1\n415,-1,1720.2,457.5,77.9,207.4,1\n415,-1,945.7,16.4,60.5,169.4,1\n415,-1,110.2,348.2,52.8,191,1\n415,-1,1770.2,128.3,56,163.1,1\n415,-1,292.6,595.7,85.9,247.4,1\n415,-1,1005.9,30.1,54.9,161.7,1\n415,-1,359.3,1,66.7,114.7,1\n415,-1,1229.6,496.5,69.6,208.3,1\n415,-1,286.5,130.6,54.4,163.8,1\n415,-1,832.7,1.1,53.8,131.1,1\n415,-1,796.2,149.3,57.9,173.2,1\n415,-1,1582.8,619.6,100.3,239.6,1\n415,-1,399.8,619.9,76.9,238.3,1\n415,-1,219.4,141.4,71.4,157.9,1\n415,-1,859.6,539.5,107.4,244.1,1\n415,-1,208.3,262.6,55.2,182.7,1\n415,-1,425.6,97,54.5,170.4,1\n415,-1,712.1,556.8,87.7,246.3,1\n415,-1,1840.3,76.5,78.6,174.7,1\n415,-1,717.7,1,52.1,129.8,1\n415,-1,460.3,67.9,69,191.1,1\n415,-1,935.9,556.1,80.8,213.2,0.999\n415,-1,712.1,86.4,64.1,180.3,0.999\n415,-1,424.5,1,45.1,117.6,0.999\n415,-1,983,926.3,78.9,154.7,0.752\n192,-1,1221.9,30.1,61.2,119.8,1\n192,-1,211.8,126.5,55.7,167.5,1\n192,-1,108.8,346.3,50,193,1\n192,-1,1489.4,68.6,55.2,149.1,1\n192,-1,686.4,206.9,79.1,112.4,1\n192,-1,1357.7,566.8,106.5,246.8,1\n192,-1,705.1,1,55.5,160,1\n192,-1,357.1,105.9,54,178.7,1\n192,-1,1719.8,457.8,78.7,210.7,1\n192,-1,39.1,624.9,118,252.7,1\n192,-1,413.2,627.8,90.6,253.8,1\n192,-1,288.3,126.7,55.8,170.4,1\n192,-1,398.6,40.3,63.9,165.6,1\n192,-1,873.6,167.1,80.8,192.8,1\n192,-1,1167.9,147.5,69.5,185.5,1\n192,-1,421.9,223.6,75.4,215.5,1\n192,-1,522.2,304.4,68.2,211.7,1\n192,-1,533,138.4,59.1,158.2,1\n192,-1,1065.5,143.7,53.1,160.4,1\n192,-1,795.3,149.9,62.3,174.1,1\n192,-1,232.7,550.9,61.9,208.2,1\n192,-1,801.5,296.8,70.4,187.2,1\n192,-1,748.4,280.2,70,202.4,1\n192,-1,1231.8,146.5,47.5,168.5,1\n192,-1,460.1,1.9,52,92.4,0.999\n192,-1,976.5,916.7,73.8,164.3,0.98\n277,-1,1221.4,31.3,62.2,118.4,1\n277,-1,687,207,78.4,112.1,1\n277,-1,392.9,15.6,58,160.5,1\n277,-1,1470.9,34.4,55.2,149.9,1\n277,-1,1645.4,22.6,57.6,155.1,1\n277,-1,288.7,128.6,55.5,172.4,1\n277,-1,390.4,465.1,83.9,227.8,1\n277,-1,1032.7,100.7,63.9,188.1,1\n277,-1,355.5,107.7,52.9,178.3,1\n277,-1,455.4,146.7,73.9,205.6,1\n277,-1,1720.2,457.7,78.7,210.9,1\n277,-1,108.6,351,50.3,187.9,1\n277,-1,941.8,86,65.8,173.6,1\n277,-1,221.2,131.2,53.5,161.2,1\n277,-1,704.1,1.4,55.1,157.8,1\n277,-1,795.7,149.8,60.6,172.3,1\n277,-1,1109.3,97.7,52.5,162.9,1\n277,-1,268.4,795.5,89.9,260.5,1\n277,-1,233,426.7,59.7,197.8,1\n277,-1,736.5,333.2,66.4,188.6,1\n277,-1,197,583.4,89,241.6,1\n277,-1,810.7,371,85.5,212.1,1\n277,-1,1427.3,576.9,96.1,245.8,1\n277,-1,559.5,408.9,66.2,215.4,1\n277,-1,880.9,383.6,74.9,194,1\n277,-1,752,104.3,46.4,169.8,1\n277,-1,855.2,111.9,43.8,155.7,1\n277,-1,514.7,112.2,51,177.8,1\n277,-1,471.2,401.2,68.6,222,1\n277,-1,943.3,919.7,88,161.3,0.873\n111,-1,1221.2,30.1,62.6,119.1,1\n111,-1,356.7,106.1,55.5,176.7,1\n111,-1,704.1,1,55.5,158.6,1\n111,-1,209.8,127.9,51.7,165.6,1\n111,-1,108.6,352.5,48.7,184.2,1\n111,-1,1487.4,68.3,56.1,149.3,1\n111,-1,389.4,805.3,101,275.7,1\n111,-1,1722.3,456.7,76.7,210.8,1\n111,-1,290.3,125.8,56.6,171,1\n111,-1,935.8,204.9,71.2,190.6,1\n111,-1,1152.2,148.5,54.3,176.3,1\n111,-1,1357.7,567,105.9,244.4,1\n111,-1,425.5,291.2,79.9,226.7,1\n111,-1,1253.5,185.3,47.6,170.6,1\n111,-1,512.3,233.1,71.6,200.2,1\n111,-1,1372,183,67.3,190.6,1\n111,-1,47,677.4,86.4,221.8,1\n111,-1,538.4,65.6,49.6,166.2,1\n111,-1,478.2,155.9,58.3,157,1\n111,-1,103,544.8,83.9,256.5,1\n111,-1,797.2,195.9,64.4,195.3,1\n111,-1,441.4,1,52,155,1\n111,-1,844.4,222,53.8,169.1,1\n111,-1,376.2,5.1,48.3,161.1,0.999\n111,-1,482.2,39.1,60.1,161.5,0.999\n111,-1,698.1,187.6,56.4,151.4,0.999\n111,-1,1134.3,930.2,81.2,150.8,0.188\n212,-1,1221.6,31,61.4,118.3,1\n212,-1,686.3,207,79.7,113,1\n212,-1,356.6,106.8,52.2,179.1,1\n212,-1,211.7,127,55.8,165.9,1\n212,-1,705.3,1,55.8,159.6,1\n212,-1,288.5,127.8,55.4,171.2,1\n212,-1,108.5,350.2,50.3,186.1,1\n212,-1,1492.6,70.3,53.2,147.6,1\n212,-1,1720.5,456.7,78.4,211.8,1\n212,-1,1356.6,567.3,105.4,245.2,1\n212,-1,1203.7,143.4,48.1,160.7,1\n212,-1,401.5,585.6,86.4,243.9,1\n212,-1,97.7,662.2,104.9,246.9,1\n212,-1,522.1,125.8,50.1,173,1\n212,-1,426.6,202.6,74.8,214.7,1\n212,-1,1135.3,137.4,59.9,185.9,1\n212,-1,795.8,151.9,59.7,170.4,1\n212,-1,504.4,323.5,75.4,216.2,1\n212,-1,900.5,145.9,69.3,189,1\n212,-1,1012.2,135.5,48.3,155.1,1\n212,-1,225.5,518.9,60.2,207.9,1\n212,-1,9,615,111.9,240.4,1\n212,-1,809.3,317.6,75.2,192.5,1\n212,-1,562.9,265.5,57.3,181,1\n212,-1,852,109.7,53.7,170.8,1\n212,-1,757.1,301.2,72.5,204.5,0.999\n212,-1,949.9,912.6,75.6,168.4,0.991\n212,-1,373.8,36.6,56.2,173.2,0.925\n373,-1,1222.1,31.2,61.3,118.6,1\n373,-1,686.4,206.6,79.8,113.6,1\n373,-1,1631,14.2,59.8,163.1,1\n373,-1,1072.6,444.6,69.4,196.9,1\n373,-1,444.5,310,72.1,216.6,1\n373,-1,285.5,130.6,54.7,170.2,1\n373,-1,359.8,108.7,54.4,178.4,1\n373,-1,109.3,350.6,52.7,189.8,1\n373,-1,350.9,526.4,90.1,246.5,1\n373,-1,1433.1,2.3,53.2,98.1,1\n373,-1,443.1,78.4,70.5,195.3,1\n373,-1,508.9,89.6,50,167.1,1\n373,-1,954.3,39.9,60.9,178.5,1\n373,-1,553.1,568.3,102.5,249.3,1\n373,-1,1719.6,455.6,78.5,214.2,1\n373,-1,796.1,150.3,59.3,171.8,1\n373,-1,214.2,141.4,58,158.1,1\n373,-1,1018.6,53.2,55.3,166.3,1\n373,-1,459.5,543.1,68.4,234.4,1\n373,-1,1763.4,98.5,57.3,161.1,1\n373,-1,1585.7,630.2,82.4,244.1,1\n373,-1,1804.9,451.2,64.8,216.5,1\n373,-1,831,1.4,55.9,111.1,1\n373,-1,382.4,1.7,45.7,90.7,1\n373,-1,212.5,308.6,53.7,178.6,1\n373,-1,1816,68.1,62.9,166.2,1\n373,-1,756.7,97,46.7,142.7,1\n373,-1,912.9,498.8,73.4,208.9,1\n373,-1,849.4,484.1,85.6,232.4,1\n373,-1,967.4,917.3,85.7,163.7,0.997\n586,-1,1221.8,31.1,61.7,118.1,1\n586,-1,687.1,205.9,79.4,113.6,1\n586,-1,1481.3,4.2,60.2,144.4,1\n586,-1,1643.7,1,55.8,124,1\n586,-1,375.3,257.4,65.4,197.6,1\n586,-1,801.7,148,62.8,170.8,1\n586,-1,1649.8,245.6,80.3,201.4,1\n586,-1,873.3,2.6,50.1,100.3,1\n586,-1,560.2,113.7,50.4,175.3,1\n586,-1,358.3,110,53.6,175.9,1\n586,-1,287.6,125.9,52.2,168.4,1\n586,-1,220.2,277.1,64.5,189,1\n586,-1,1719.6,453.4,80.7,212.4,1\n586,-1,1575.7,588.8,92.6,234.9,1\n586,-1,214.7,133.1,53.6,164.2,1\n586,-1,754.1,80.2,42.8,154.6,1\n586,-1,465.7,113.8,49.7,162.5,1\n586,-1,161,254.5,59.3,206.5,1\n586,-1,1852.7,268.1,68.3,177.5,1\n586,-1,1055.8,840.8,125.1,240.2,1\n586,-1,427.4,62.2,45.5,172.9,1\n586,-1,1142,850.1,93,230.9,0.475\n520,-1,1221.6,30.3,60.9,119.3,1\n520,-1,1489.5,1.1,59.1,140.9,1\n520,-1,687.2,206.5,79,114.9,1\n520,-1,994.1,1,55.1,121.2,1\n520,-1,162.4,324.7,67.4,192.4,1\n520,-1,1672.4,23.2,54.3,159.5,1\n520,-1,391.7,185,60.4,188.8,1\n520,-1,1720,461.4,80.6,203.2,1\n520,-1,461.2,130.2,66.8,182.4,1\n520,-1,288.9,123.4,53.7,173.9,1\n520,-1,884,1,53.4,119.9,1\n520,-1,788.8,146.2,55.2,175,1\n520,-1,1743.6,631.4,69.7,219.7,1\n520,-1,1854.8,216.6,66.2,187.7,1\n520,-1,826.8,606.9,71.6,258.8,1\n520,-1,1569.7,597,63.5,243.5,1\n520,-1,1611,11.1,56.1,174.5,1\n520,-1,929.6,1.8,57.7,116.9,1\n520,-1,737.1,90.4,66.2,171.1,1\n520,-1,1599.6,297.4,64.2,198.3,1\n520,-1,217.4,138.7,64.2,159,1\n520,-1,1707.4,314.7,88.7,211.7,1\n520,-1,194.4,783.1,93.7,269.3,1\n520,-1,274.3,807.1,81.3,265.4,1\n520,-1,450.4,2.8,76.1,173.4,1\n520,-1,515.8,97.2,55.8,183.7,1\n520,-1,948.1,711.9,120.2,262.3,1\n520,-1,1762.2,206.3,58.6,174.2,1\n520,-1,353.4,167.7,46.1,160.1,1\n520,-1,400.4,26.9,46.4,161.2,0.999\n520,-1,577.7,70.4,41,153.1,0.993\n520,-1,1043.6,732.6,68.4,255.2,0.16\n520,-1,1046.6,930.3,72,150.7,0.133\n203,-1,1221.6,31,61.3,118.4,1\n203,-1,398,604.7,92.3,246.6,1\n203,-1,687,206.9,78.4,113,1\n203,-1,211.2,126.9,55.7,166.9,1\n203,-1,1490.5,69,54.4,149.7,1\n203,-1,704.6,1,55.7,158.3,1\n203,-1,109,351,49.2,186.6,1\n203,-1,64.5,642.8,116.7,255.8,1\n203,-1,1209.2,145.1,55.3,168.6,1\n203,-1,288.8,128,55,170.9,1\n203,-1,423,207.6,76.9,216.2,1\n203,-1,1721.3,456.5,76.9,212,1\n203,-1,1359.5,568.7,103,244.3,1\n203,-1,522,132.3,60.4,166.2,1\n203,-1,1032.5,139.1,52.9,158.6,1\n203,-1,510,316.6,78.4,218.4,1\n203,-1,797.3,150,59.2,175.8,1\n203,-1,891,156.2,74.2,185.6,1\n203,-1,355.4,107.5,54.7,177.6,1\n203,-1,1151.2,141.4,58.5,182.6,1\n203,-1,803.3,310.2,73.5,187.5,1\n203,-1,387.7,40.4,62,167.2,1\n203,-1,228.1,535.9,61.5,219.5,1\n203,-1,754.6,294.1,68.9,206.9,0.999\n203,-1,1,606.1,64.8,227.1,0.985\n203,-1,965.2,914.1,74.8,166.9,0.98\n83,-1,1221,30.5,61.4,117.6,1\n83,-1,703.7,1.3,57,158.2,1\n83,-1,1487.8,69.2,54.4,148,1\n83,-1,1225,161.7,75,171.2,1\n83,-1,496.4,207.8,74.9,198.4,1\n83,-1,1358.7,564.6,105.3,246.4,1\n83,-1,1722.6,455.9,76.3,210.7,1\n83,-1,415.9,321.6,82.5,231.3,1\n83,-1,977.5,190.8,73.9,184,1\n83,-1,356.7,105.6,55.2,178.8,1\n83,-1,102.1,545,85.4,256,1\n83,-1,14.9,721.8,68.8,232.7,1\n83,-1,392.2,878.5,99.2,202.5,1\n83,-1,757.2,184.9,61,178.2,1\n83,-1,295.1,128.1,50,169.3,1\n83,-1,210.4,131.7,52,164.1,1\n83,-1,686.5,205.8,77.7,117.3,1\n83,-1,127.3,355.6,45.3,187.5,1\n83,-1,1421.7,199.6,66.5,190.5,1\n83,-1,1484.7,200.5,52.8,174.2,1\n83,-1,1321.3,199.6,40.6,169.4,1\n83,-1,538.4,64.7,49,171.1,1\n83,-1,835.9,170.5,56.6,192,1\n83,-1,254.3,93.7,59.2,183.3,1\n83,-1,475.6,123.8,59.6,155,1\n83,-1,879.6,195.6,55.7,167.5,1\n83,-1,435.1,21,53.7,163.5,1\n83,-1,378.9,25.5,54.7,165,0.999\n702,-1,1221.6,29.9,62,118,1\n702,-1,687.2,206.3,79.1,113.2,1\n702,-1,1481.7,7.2,58.9,146.2,1\n702,-1,1604.1,140.4,70.2,182.5,1\n702,-1,562.2,109.7,53.6,178.6,1\n702,-1,1711.7,456.5,95.4,208,1\n702,-1,1477.7,132.1,52,175.2,1\n702,-1,415.4,151.2,73.3,163.4,1\n702,-1,1016.9,1.6,62.7,89.7,1\n702,-1,1574.4,587.9,97.9,236.3,1\n702,-1,485.8,138.7,47.3,182.8,1\n702,-1,360.4,111.5,49.6,171.8,1\n702,-1,297.8,380.6,74.4,214.4,1\n702,-1,384.3,538.1,68.9,250.3,1\n702,-1,1227.7,819.7,90.6,261.3,1\n702,-1,1308.9,792.1,95.6,275,1\n702,-1,475.5,23.7,46.5,144.5,1\n702,-1,750,79.5,50.4,156.6,1\n702,-1,802.4,139.4,46.8,177.3,1\n702,-1,254.2,199.1,60.4,195.6,1\n702,-1,306.2,211.4,57.2,180.9,1\n702,-1,408.9,23.9,57.5,164.7,1\n702,-1,227.3,132.5,52.9,167,1\n702,-1,833.2,928.1,81.6,152.9,0.231\n797,-1,1221.4,29.7,62.3,118.8,1\n797,-1,687,205.6,79.5,113.8,1\n797,-1,288.5,515.6,77.6,237.7,1\n797,-1,784.2,131.7,51,180,1\n797,-1,548,113.7,63.7,180.5,1\n797,-1,1723.4,452.2,76,214.8,1\n797,-1,1575.1,590.3,100.5,234.5,1\n797,-1,479.4,94,61.9,176,1\n797,-1,278.6,167.2,58.4,194.2,1\n797,-1,1483.3,27.6,59.2,149,1\n797,-1,1608,1,52.7,126.5,1\n797,-1,749.9,71.4,56.2,158.5,1\n797,-1,233.2,132.8,51,167.9,1\n797,-1,1441,60.7,48.7,160,1\n797,-1,253.9,1.2,53.1,120.9,1\n797,-1,391.1,240.5,65.2,177.2,1\n797,-1,443.1,226.9,54.8,190.8,1\n797,-1,344.4,186.8,48.1,176.1,1\n797,-1,422.8,93,54.9,163.9,1\n797,-1,446,1.6,43.1,88.8,1\n797,-1,1080.6,596.3,94,259.3,1\n797,-1,1014.7,618.6,80.9,247.9,1\n797,-1,608.3,577.5,76.4,243.5,1\n667,-1,1220.9,29.6,62,119.4,1\n667,-1,686.8,206,79.5,113.1,1\n667,-1,1480.8,6.7,60.6,140.5,1\n667,-1,801.2,144.4,64.1,171.4,1\n667,-1,1709.7,458.1,97.8,205.6,1\n667,-1,360.5,115.3,49.2,166.1,1\n667,-1,1125.3,1,67.7,109.2,1\n667,-1,317.8,341.5,71.3,205.8,1\n667,-1,1574.8,588.4,97.9,235.3,1\n667,-1,481.6,114.3,46.1,175.1,1\n667,-1,559.9,109.7,51.4,177.3,1\n667,-1,1619.9,163,76.2,184.9,1\n667,-1,750.8,79.9,47.8,155.8,1\n667,-1,417.1,122.9,72.8,161.7,1\n667,-1,225.7,208.7,60.6,203.1,1\n667,-1,409,2.3,54.9,156.9,1\n667,-1,277.6,223.2,55.7,186.9,1\n667,-1,420.1,526.1,77.9,251.1,1\n667,-1,1494.1,164.5,56,176.7,1\n667,-1,1405.9,884.5,104.3,196.5,1\n667,-1,1331.8,905,82.5,176,1\n667,-1,353.2,4.2,53.6,150.8,0.999\n667,-1,289.2,123.7,50.6,170.3,0.999\n667,-1,864.6,929.4,72.7,151.6,0.16\n667,-1,305.8,8.1,37.2,127.2,0.063\n468,-1,1222.1,30.3,62,118.2,1\n468,-1,687.1,206.1,78.5,113.4,1\n468,-1,934.9,1,57.7,147.4,1\n468,-1,1006,1,54.6,153.1,1\n468,-1,454.9,191.9,67.8,194.9,1\n468,-1,1801.9,364,87.3,216.7,1\n468,-1,359.5,107.8,56.3,178.5,1\n468,-1,278.8,209.7,50.8,174.1,1\n468,-1,1704,456.2,96.3,211.7,1\n468,-1,1506.2,1.1,58.9,112.8,1\n468,-1,117.6,344.6,58.2,188.9,1\n468,-1,804,145.6,47.4,175.5,1\n468,-1,237.3,682,93,258.9,1\n468,-1,877.7,1,51.9,134.1,1\n468,-1,1646,343.6,62.8,201.9,1\n468,-1,1668.3,49.8,62.1,175.4,1\n468,-1,218.5,138.5,63.4,159.9,1\n468,-1,333.2,713.4,72.9,251.3,1\n468,-1,516,82,60.7,172.6,1\n468,-1,1545.6,613,70.8,237.4,1\n468,-1,809.4,584.6,96.8,254.4,1\n468,-1,1725.5,165.8,68.7,171.8,1\n468,-1,898.7,619.8,116.2,246.4,1\n468,-1,753.6,96.5,53.8,141.4,1\n468,-1,985.1,639.6,86.7,225.4,0.999\n468,-1,445.6,33.9,75,185.1,0.999\n468,-1,1496,564.7,72,197.8,0.999\n468,-1,713.8,94.3,53,162.8,0.999\n468,-1,1726.4,66.3,52.3,157.5,0.997\n468,-1,414,3.6,44.4,154.5,0.996\n468,-1,1026.7,923,84.6,158,0.993\n468,-1,429.1,141.2,48.9,166.6,0.991\n468,-1,288.5,128.3,50.4,171.1,0.966\n468,-1,1766.3,139.7,69.3,177.3,0.921\n236,-1,1221.2,30.1,62.6,119.3,1\n236,-1,1487.4,63.8,55.5,152,1\n236,-1,685.8,207.5,80.7,111.7,1\n236,-1,795.5,151.9,60.3,175.2,1\n236,-1,379.3,539.5,93.7,237.9,1\n236,-1,108.6,350.1,51.1,189.6,1\n236,-1,705.3,1,54.9,160.5,1\n236,-1,1091.4,123.8,64.1,184.3,1\n236,-1,288.6,126.4,55.9,172.6,1\n236,-1,441.8,184,77.9,207.7,1\n236,-1,1583.6,1.2,58.2,145.8,1\n236,-1,211.5,125.3,55.6,168.8,1\n236,-1,356.8,107,53.6,178.4,1\n236,-1,1720.8,456.2,78.8,213.3,1\n236,-1,1360.5,568.8,105.7,243.5,1\n236,-1,1171.1,125.2,53.5,162.2,1\n236,-1,222.3,482.3,58.4,201.6,1\n236,-1,516.5,119.4,51.1,182,1\n236,-1,923.9,124,71.3,185.8,1\n236,-1,174.6,697,88.6,262.5,1\n236,-1,502.5,350.8,74.3,224.2,1\n236,-1,838.5,337.8,76.9,195.4,1\n236,-1,589.9,360.2,63,201.9,1\n236,-1,780.9,327.7,80.1,208.8,1\n236,-1,125.2,647.4,90.4,244.9,0.999\n236,-1,933.1,900.3,72.1,180.7,0.992\n109,-1,1221.1,30.5,62.3,117.9,1\n109,-1,356.9,106.5,55.2,177,1\n109,-1,387.8,812.4,103.4,268.6,1\n109,-1,704.4,1,55.6,159.2,1\n109,-1,108.8,350.9,49.4,187.4,1\n109,-1,209,128.1,51.5,164.9,1\n109,-1,1487.1,68.7,56.2,149.3,1\n109,-1,1721.6,456.8,76.8,210.6,1\n109,-1,1357.7,566.7,105.4,244.3,1\n109,-1,290.1,123.6,58.1,174.5,1\n109,-1,939,203.8,69.6,191.3,1\n109,-1,1157,149.2,57.2,174.5,1\n109,-1,510.2,231.6,72,200.5,1\n109,-1,426,292.7,77.7,225.9,1\n109,-1,43.4,680.3,83.6,218.8,1\n109,-1,1257.9,186.5,44.2,171.3,1\n109,-1,537.7,65.3,49.3,168.3,1\n109,-1,1375.7,180.6,64.5,197.3,1\n109,-1,102.9,545.8,84.6,255.5,1\n109,-1,478.1,154.1,59.7,162.6,1\n109,-1,844.7,220.9,57.8,167.6,1\n109,-1,698.1,185.5,57.8,161.9,1\n109,-1,441.2,2.3,53.6,154,1\n109,-1,376.1,4.7,48.8,161.1,0.999\n109,-1,802.3,194.8,63.6,193.5,0.999\n109,-1,482.9,39.4,59.3,159.8,0.999\n109,-1,259.6,89.1,54.4,168.6,0.819\n109,-1,1423.9,187.7,43,169.6,0.315\n219,-1,1220.9,30,61.9,120.6,1\n219,-1,687.3,206.2,78.4,114.1,1\n219,-1,1122.6,131.8,59.2,183.9,1\n219,-1,427.6,193.4,75.2,213.9,1\n219,-1,108.6,347.7,50.7,188.6,1\n219,-1,400.9,573.6,91.4,252.8,1\n219,-1,705,1,55.7,160,1\n219,-1,1491.7,69,54,149,1\n219,-1,288.3,126.5,55.4,174.5,1\n219,-1,357.8,105.6,51.8,179.2,1\n219,-1,901.8,141.7,77.4,184.7,1\n219,-1,212.1,127.1,55.8,164.5,1\n219,-1,1721.2,456.9,77.7,211.2,1\n219,-1,122.5,668.9,100.6,253.1,1\n219,-1,1356.9,567.7,103.9,243.8,1\n219,-1,794.2,153.5,60.7,167.8,1\n219,-1,518.8,123.8,48.9,176.1,1\n219,-1,1200.8,133.5,41.7,165.8,1\n219,-1,508.4,332,72.2,221.4,1\n219,-1,218.7,510.1,59.4,202.7,1\n219,-1,996.2,126.6,39.7,156.3,1\n219,-1,819.3,322.1,76,195.2,1\n219,-1,761.6,311.5,79.2,206,1\n219,-1,42.4,620.4,110.3,241.2,1\n219,-1,825.7,111.8,68.4,171.4,0.999\n219,-1,942.7,911.4,71.4,169.6,0.997\n219,-1,595.7,341.6,60.8,198.9,0.847\n219,-1,1565.9,6.8,50.7,124.4,0.122\n219,-1,483.5,4.6,35.3,60.3,0.083\n676,-1,1222.2,29.4,61.3,120.5,1\n676,-1,687.4,206.8,78.9,113.8,1\n676,-1,1481,4.9,60.3,144.8,1\n676,-1,801.7,146.4,62.8,170.4,1\n676,-1,483.1,129.5,45.9,171.4,1\n676,-1,564.4,110.7,49.3,177.3,1\n676,-1,359.5,115.9,50.1,166,1\n676,-1,1711.3,456.5,95.9,208.7,1\n676,-1,315.4,355.4,69.2,209.5,1\n676,-1,384.6,528.3,99,254,1\n676,-1,1097.7,1.4,64.8,104.6,1\n676,-1,1493,159.7,51.9,173.8,1\n676,-1,1575.2,589.1,97,236.4,1\n676,-1,1622.9,153.5,74.7,192.7,1\n676,-1,417,138.5,71.6,160.8,1\n676,-1,750,78.7,49.4,158.4,1\n676,-1,405.9,6.8,57.2,158.6,1\n676,-1,1385.2,865.5,95.9,215.5,1\n676,-1,232.2,212.4,62.7,195.5,1\n676,-1,1300.8,885.3,84.7,195.7,1\n676,-1,285.8,224.2,55.8,176,1\n676,-1,297.2,1,54.6,135.6,1\n676,-1,352.2,7.9,54.6,154.7,0.99\n676,-1,845.3,923.9,67.4,157.1,0.41\n676,-1,292.5,119.9,48.4,170,0.08\n393,-1,1222.4,31.4,60.6,117.9,1\n393,-1,685.9,206.7,80.2,112.9,1\n393,-1,1639.4,30.4,68.2,172.4,1\n393,-1,1774.3,112.3,66.8,165.9,1\n393,-1,358.8,104.5,54.6,180.9,1\n393,-1,447.3,280.8,82.3,211.7,1\n393,-1,1135.1,472.6,74.7,202.5,1\n393,-1,363.8,2.1,63.1,102.6,1\n393,-1,795.4,152.1,60,171.1,1\n393,-1,828.5,1,54.6,120.7,1\n393,-1,949.9,26,63.4,173.7,1\n393,-1,435.1,577.5,72.8,234.3,1\n393,-1,282.5,127.4,56.1,166.8,1\n393,-1,321.4,556.7,92.4,253.5,1\n393,-1,219.6,142.8,61.1,154.9,1\n393,-1,1593.2,622.7,88.7,255.1,1\n393,-1,108.8,349,52.7,192.1,1\n393,-1,207,287.1,53.9,184.7,1\n393,-1,1010.8,41.2,56.4,162.1,1\n393,-1,461,72.7,67.6,191.4,1\n393,-1,920.8,525.8,78.2,215.6,1\n393,-1,1720.5,455.6,77.4,214.4,1\n393,-1,847.8,510.5,89.8,232.5,1\n393,-1,709.4,1,52.1,142.5,0.999\n393,-1,542.4,65.1,53.1,170.2,0.997\n393,-1,1769.5,429.6,74.1,211,0.996\n393,-1,979.1,906.6,88.7,174.4,0.996\n393,-1,433.1,80.8,44.1,173.3,0.979\n393,-1,712.5,87.6,52.6,177.7,0.656\n393,-1,759.6,107.3,40.7,136.6,0.252\n393,-1,922.7,8.4,48.6,114.6,0.208\n429,-1,1221.5,30.6,61.9,118.8,1\n429,-1,938.6,4.5,64.6,168.3,1\n429,-1,686.7,206,79.7,113.5,1\n429,-1,447.6,233.6,80.3,200.2,1\n429,-1,359.1,109.5,53.9,177.1,1\n429,-1,842,1,52.7,136.3,1\n429,-1,110,347.8,54.8,192.7,1\n429,-1,1292.9,509.2,70.3,211.3,1\n429,-1,1674.4,83.7,65.6,173.7,1\n429,-1,1718,457.8,80.5,208.1,1\n429,-1,1009.1,21.8,54.5,163.2,1\n429,-1,750.7,560.1,79.7,250.6,1\n429,-1,283.4,617,94.6,258.7,1\n429,-1,798.3,150.9,53.4,172.5,1\n429,-1,285.4,129.7,53.8,167,1\n429,-1,537,70.3,57.2,166.2,1\n429,-1,1573,613.3,91.9,246.8,1\n429,-1,220.4,248.3,54.2,180.6,1\n429,-1,1759,142.2,55.6,163.9,1\n429,-1,382,647,71.9,239.9,1\n429,-1,430.4,106.9,56.9,169.5,1\n429,-1,869.2,560.7,105.4,238,1\n429,-1,714.9,89.4,62.3,174.8,1\n429,-1,357.9,2,68.5,127,1\n429,-1,221.3,139,74.2,159.6,1\n429,-1,945.7,572.8,88,223.8,1\n429,-1,1853.4,420.2,67.6,189.6,1\n429,-1,422.9,1,44.1,127.9,1\n429,-1,724.4,1.5,50.1,112.2,0.999\n429,-1,1784.6,71.2,81.4,175.7,0.999\n429,-1,991.1,930.1,82.7,150.9,0.906\n429,-1,456.4,57.9,67.6,184.8,0.682\n874,-1,1221.5,29.9,61.7,118.4,1\n874,-1,687.3,206.3,78.7,113.5,1\n874,-1,478.9,1,48.7,125.6,1\n874,-1,794.3,138,77.3,175.8,1\n874,-1,1478.8,82.4,59.4,154.2,1\n874,-1,278.6,636.8,86,256.1,1\n874,-1,1086.7,2.6,58.5,141.9,1\n874,-1,1574.5,590.5,104.3,234.9,1\n874,-1,1690.6,46.8,54.8,166.3,1\n874,-1,334.4,313.4,82.2,179.2,1\n874,-1,1722.7,454.6,76.8,212.4,1\n874,-1,300.7,162.2,69.9,194.1,1\n874,-1,558.1,116.9,59.4,177.3,1\n874,-1,1578.4,25.8,52.7,148.4,1\n874,-1,900.6,481.4,70.7,235.1,1\n874,-1,477.6,164.2,62.7,185.3,1\n874,-1,752.8,69.9,54.8,165.5,1\n874,-1,1419.2,10.2,50.8,153.4,1\n874,-1,988.8,466.2,69.8,237.3,1\n874,-1,253.4,1.6,54.7,120.4,1\n874,-1,410.4,160.3,58.5,177.8,1\n874,-1,240.1,133.6,51.5,164.9,1\n874,-1,429.7,306.2,56.7,202.2,1\n729,-1,1221.4,29.5,62.1,119.5,1\n729,-1,687,205.8,79.2,114.1,1\n729,-1,1471.4,110.9,52.4,169.9,1\n729,-1,1479.3,8.2,58.8,142.4,1\n729,-1,552.2,112.3,58.7,178.9,1\n729,-1,260.5,189.1,55.1,201.1,1\n729,-1,1711.4,456.1,96.7,207.9,1\n729,-1,412,185.6,66.4,162.9,1\n729,-1,1573.6,590,99.4,234,1\n729,-1,299.5,420.4,74.2,223.9,1\n729,-1,477.6,166.3,51,184.1,1\n729,-1,784.8,138.7,53,175.4,1\n729,-1,319.5,198.5,62.5,180.3,1\n729,-1,406.6,553,96.5,249.1,1\n729,-1,1597.2,108,59,183.8,1\n729,-1,1160.8,760.4,82.8,255.7,1\n729,-1,751,84.5,49.9,150.1,1\n729,-1,361.7,109.8,46.9,175.5,1\n729,-1,1234.5,742.6,90.7,264.6,1\n729,-1,426.1,40.4,59,168.1,1\n729,-1,319.8,1,50.7,131.7,0.999\n729,-1,236.5,138,53.6,165.5,0.998\n729,-1,464.6,6.7,46.6,144.1,0.99\n747,-1,1221.4,29.6,62.1,119,1\n747,-1,686.7,205.6,79.3,114.7,1\n747,-1,258.4,182.7,61.3,200.8,1\n747,-1,779.2,137.3,59.6,175.1,1\n747,-1,551,116.4,60.4,176,1\n747,-1,1463.8,98.5,54.4,163.4,1\n747,-1,1714.7,457.3,90.5,207.1,1\n747,-1,1490.3,14.1,59.5,142.7,1\n747,-1,1576.3,589.3,98.4,234.2,1\n747,-1,456.6,560.3,97.9,251.6,1\n747,-1,1597.6,95.3,58.9,180.8,1\n747,-1,331.5,199.4,57.9,175.4,1\n747,-1,300.2,445.5,73.3,220.9,1\n747,-1,467.2,184.9,53.3,185.9,1\n747,-1,442.6,58.5,57.9,166.7,1\n747,-1,404,197.2,66.8,173,1\n747,-1,1113.8,713,84.5,263.2,1\n747,-1,1188.7,697.8,86.4,261.2,1\n747,-1,750.1,84.3,49.5,148.1,1\n747,-1,359.8,112.6,49.8,169.1,0.999\n747,-1,258.3,1.5,48.4,120.5,0.999\n747,-1,394,50.2,51.7,174.9,0.988\n747,-1,291,127.8,45.9,168.4,0.983\n422,-1,1222,30.4,61.5,118.8,1\n422,-1,686.6,204.9,79.2,115.5,1\n422,-1,1667.7,70.6,67.9,176,1\n422,-1,359.1,109.5,53.7,175.8,1\n422,-1,943.3,12.9,61.3,162.9,1\n422,-1,1244.3,508.3,90.7,202.9,1\n422,-1,1720.2,457.8,78.6,207.5,1\n422,-1,453.6,245.8,77.4,201.2,1\n422,-1,110,347.3,52.5,190.7,1\n422,-1,544,67.3,56.4,170.3,1\n422,-1,838.3,1,52.3,134.2,1\n422,-1,286.1,127.3,54.7,167.7,1\n422,-1,1008,26.4,54,157.9,1\n422,-1,1577.5,614.6,97.4,244.9,1\n422,-1,1765.3,133.1,55,167.8,1\n422,-1,392,629.6,73.4,240.1,1\n422,-1,865.1,545.5,104.8,242.5,1\n422,-1,285.8,606.6,95.9,252.6,1\n422,-1,215.5,255,53,184.5,1\n422,-1,798.1,150.3,54,172.9,1\n422,-1,730.6,559.9,75.7,239.2,1\n422,-1,427.5,108.5,53.4,165.1,1\n422,-1,220.7,141.3,73.9,162.5,1\n422,-1,358.7,1.1,67.1,120.6,1\n422,-1,713.3,91.3,63.2,173.7,1\n422,-1,424.3,1.4,44.5,124.8,1\n422,-1,942.8,567,80.4,219.6,1\n422,-1,717.9,1,50.2,124.4,0.999\n422,-1,457.7,60.3,68.8,194.5,0.999\n422,-1,1802.9,69,84.9,181,0.993\n422,-1,985.8,930.2,82.1,150.8,0.5\n1026,-1,1221.8,29.6,61.9,119.9,1\n1026,-1,686.6,206.7,80.1,113.5,1\n1026,-1,373.7,306.3,73,200.8,1\n1026,-1,1699,183.9,62.8,184.4,1\n1026,-1,491.8,299.3,68.2,190.4,1\n1026,-1,794.2,141.7,71.7,171.7,1\n1026,-1,1249.6,172.8,63.5,168.8,1\n1026,-1,289.3,128.6,52.2,166.5,1\n1026,-1,930.8,256,69,208.2,1\n1026,-1,1144.6,588.3,86.9,257.3,1\n1026,-1,843.6,266.6,65.8,192.3,1\n1026,-1,232.8,140.3,57.9,162.8,1\n1026,-1,293.8,306.7,67.7,206.1,1\n1026,-1,1721.3,454.5,77.4,212.9,1\n1026,-1,378.2,493.5,63.9,227,1\n1026,-1,1575,589.5,103.3,238.3,1\n1026,-1,750.3,73.9,54.3,161.9,1\n1026,-1,539.7,120.1,62,175.7,1\n1026,-1,1699.5,684,89.1,236.6,1\n1026,-1,288.8,506.2,88.6,201.9,1\n1026,-1,1840.3,229.6,62,187.6,1\n1026,-1,1469.4,201.8,66.8,161.4,1\n1026,-1,420.4,170.1,58.3,164,1\n1026,-1,468.7,164.2,70.3,198,1\n1026,-1,579.9,555.1,75.6,234.2,1\n1026,-1,374.3,102.6,57.9,175.4,1\n1026,-1,312,1.7,35.9,130.7,0.999\n1026,-1,363.2,921.8,89.8,159.2,0.192\n748,-1,1221.5,30,62.5,119.1,1\n748,-1,686.6,206,79.2,113.8,1\n748,-1,258.5,183.5,60.1,200.8,1\n748,-1,780,136.2,59.7,175.6,1\n748,-1,550.4,116.4,61.5,174.5,1\n748,-1,1463.3,97.7,53.5,164.7,1\n748,-1,1713.4,457.1,92.2,207.1,1\n748,-1,1575.4,589.4,100.3,236,1\n748,-1,332,198.4,57.5,176.2,1\n748,-1,1491.9,15.1,59.1,142.4,1\n748,-1,301.4,445.5,72.3,221.6,1\n748,-1,1596.4,94.6,58.4,181.1,1\n748,-1,459.7,562.4,95.5,247.7,1\n748,-1,466.1,186.8,53.5,184.2,1\n748,-1,400,197.8,68.8,175.4,1\n748,-1,442.1,56.3,57.5,169,1\n748,-1,1112.6,715.5,83.4,258.3,1\n748,-1,1184.4,698.5,88.4,258.1,1\n748,-1,750.3,82.4,50.2,150.4,1\n748,-1,258.5,1.6,48.8,120,0.999\n748,-1,358.9,110.9,49.3,169.8,0.999\n748,-1,391.9,52.5,58.9,169.2,0.99\n748,-1,291.4,129.2,45.4,162.5,0.981\n858,-1,1221.4,28.7,62.3,119.7,1\n858,-1,686.9,206.1,80.2,113.9,1\n858,-1,1675.5,33.3,53.9,160.9,1\n858,-1,796.8,139.6,75.8,175.5,1\n858,-1,272.1,611.5,84.6,247.4,1\n858,-1,487,1.5,48.9,115.3,1\n858,-1,1472.3,65.7,60.9,158.8,1\n858,-1,1575.8,590.1,101.9,234.3,1\n858,-1,1413.4,22.9,51.5,156.2,1\n858,-1,342.2,299,78.4,181.3,1\n858,-1,1720.7,454.2,78.6,211.8,1\n858,-1,559.7,116.3,58.4,174.8,1\n858,-1,1077.3,1,58,121.8,1\n858,-1,752.5,70.8,55.2,164.5,1\n858,-1,995.3,498,85.2,238.8,1\n858,-1,432.6,287.9,55.8,202.7,1\n858,-1,297,160.9,74.2,195.4,1\n858,-1,254.3,1.4,54.2,121.2,1\n858,-1,474.2,148.1,61.2,187.1,1\n858,-1,239.9,133,54.2,163.6,1\n858,-1,416.5,145.5,61.5,176.4,1\n858,-1,919.9,510.9,71.2,232.9,1\n858,-1,1571.2,14.8,48.4,142.9,0.998\n933,-1,1221.2,29.9,62.2,119.8,1\n933,-1,686.8,205.8,79.4,113.1,1\n933,-1,793.1,140.8,75.5,172.3,1\n933,-1,448.7,214.8,69.7,190.3,1\n933,-1,555.6,117,58.5,172,1\n933,-1,1486.1,1,60.6,123.8,1\n933,-1,1576.2,591.4,101.7,237.4,1\n933,-1,1478.1,122.4,59.4,158.9,1\n933,-1,1268.9,807.6,96.2,273.4,1\n933,-1,1128,51.3,59.4,169.9,1\n933,-1,1620.9,80.6,55.9,167.7,1\n933,-1,1720.7,454.6,78.9,212,1\n933,-1,749.9,69.9,56.8,163.3,1\n933,-1,1423.5,1.9,47.1,124.5,1\n933,-1,316.6,732.6,88.6,262,1\n933,-1,860.7,398.6,63.2,210.4,1\n933,-1,946.8,379.7,74.4,218.1,1\n933,-1,238.7,133.3,56.9,168.5,1\n933,-1,1734.3,112.8,58.1,177.2,1\n933,-1,473.7,23.4,55.5,152.2,1\n933,-1,329.7,385.7,78.8,192.1,1\n933,-1,302.3,160.8,67.8,200.5,1\n933,-1,400.5,371.8,62.9,209.3,1\n933,-1,1748,675.4,91.6,246.3,1\n933,-1,363.8,218,62.9,183,1\n933,-1,253.8,1,53.9,120.1,1\n933,-1,427.5,66.9,61.6,181.8,1\n933,-1,316.4,4.2,40.6,122.4,0.23\n116,-1,1221.7,30.1,62.7,118.5,1\n116,-1,1128.7,149.3,68,170.9,1\n116,-1,356.3,105.8,56.2,177.8,1\n116,-1,704.3,1,55.9,159.5,1\n116,-1,394.7,790.3,100,275.9,1\n116,-1,107.8,348.3,50.3,189.7,1\n116,-1,1488.3,68.7,55.6,151,1\n116,-1,211.5,128.7,50.7,163.2,1\n116,-1,928.3,208.2,68.7,192.8,1\n116,-1,1358.5,566.5,105.3,245,1\n116,-1,1721.9,457.1,77.2,210.1,1\n116,-1,289.5,124.8,55.2,171.3,1\n116,-1,426.7,290.1,79.3,227.6,1\n116,-1,518.4,240.2,72.5,203.8,1\n116,-1,64.2,671.6,79.2,217.9,1\n116,-1,1244.9,183.6,41.8,160.7,1\n116,-1,790.8,207,64.9,188.1,1\n116,-1,478.7,163.3,58,157.2,1\n116,-1,539.3,63.8,49,167.1,1\n116,-1,1362.1,182.3,64.8,191.3,1\n116,-1,443.4,1,55.1,152.3,1\n116,-1,375.9,3.1,48.6,153.4,1\n116,-1,103.1,545.1,85.1,255.5,1\n116,-1,836.2,223.2,55.4,176.2,1\n116,-1,481.6,41.1,61,161,1\n116,-1,1122,927.8,83.7,153.2,0.122\n564,-1,1221.1,30.2,62,119.8,1\n564,-1,687.3,206,79,114.1,1\n564,-1,1483.3,3.4,59.7,146.8,1\n564,-1,543.6,117.5,56.6,169.1,1\n564,-1,377.6,232.5,65,192.6,1\n564,-1,1822.2,241.6,66.8,182.4,1\n564,-1,791.6,147.4,66.1,173.9,1\n564,-1,1665.1,267.8,73,203.5,1\n564,-1,1577.1,1.3,56.5,140.1,1\n564,-1,1721.4,454.4,79.1,211,1\n564,-1,1656.4,1,53.1,144.7,1\n564,-1,873.2,1,52.5,108.4,1\n564,-1,200.8,289.4,64.5,191.4,1\n564,-1,289.4,121.1,51.5,173,1\n564,-1,144,258.1,57.7,213.5,1\n564,-1,432.8,140.7,54.2,153,1\n564,-1,986.4,3.5,51.5,91.8,1\n564,-1,218.2,134.7,57.6,164.2,1\n564,-1,755.7,79.3,44.7,154.2,1\n564,-1,1593.7,590.2,75.4,234.9,1\n564,-1,737.4,586.8,81.1,256.4,1\n564,-1,464.3,88.1,63.5,172.7,1\n564,-1,358.3,107.3,51.5,178.2,1\n564,-1,1021.5,792.6,116.7,274.9,1\n564,-1,246.6,914.6,78.2,166.4,0.999\n564,-1,417.2,49.9,49.4,170.3,0.999\n564,-1,1098.9,811.2,92.8,234.8,0.998\n564,-1,1020.7,936.1,72.6,144.9,0.297\n928,-1,1221.5,30,62,120.1,1\n928,-1,686.1,206.3,80.4,112.8,1\n928,-1,794.2,140.9,73.2,172,1\n928,-1,453.5,212.1,68,190,1\n928,-1,1127.6,48.8,56.5,166.7,1\n928,-1,1487.1,1,62.3,126.5,1\n928,-1,1475.9,117.4,60.7,161.9,1\n928,-1,1574.3,588.5,103.8,235.9,1\n928,-1,750.5,72.5,56.2,160.1,1\n928,-1,557.5,116.2,57.6,172.1,1\n928,-1,1720.1,453.8,79.6,213.3,1\n928,-1,1619.3,79.6,53.6,163.5,1\n928,-1,1274,820.5,96.3,260.5,1\n928,-1,944.6,391.8,82.6,222.5,1\n928,-1,300.7,161.4,69.3,199,1\n928,-1,1428.4,2.6,46.1,125.4,1\n928,-1,313.2,727.2,84.6,256.8,1\n928,-1,472.5,22.8,54,154.8,1\n928,-1,329.2,374.7,78.6,196.7,1\n928,-1,239.4,132.5,55.1,166.8,1\n928,-1,864,408,63.1,214.1,1\n928,-1,253.8,1,54.6,120.2,1\n928,-1,402.7,369.5,62.1,206.3,1\n928,-1,1732.4,110.3,53.8,176.1,1\n928,-1,1748.5,677,92.7,244.9,1\n928,-1,368.6,212.3,61.9,181.2,1\n928,-1,426,67.4,63.5,179.7,1\n928,-1,313.4,2,47.4,127.2,0.998\n892,-1,1221.1,29.8,62.3,119.2,1\n892,-1,687.1,206,79.3,113.6,1\n892,-1,1103.2,9.8,55.8,158.3,1\n892,-1,792.7,139.4,76.9,172.8,1\n892,-1,1482.6,95.8,59.3,151.9,1\n892,-1,479.8,186,62.1,178.5,1\n892,-1,1574.4,590.7,104.5,234.1,1\n892,-1,299.1,666.1,81.3,247.4,1\n892,-1,1706.3,64.6,53.2,171.2,1\n892,-1,557.8,117.2,59.9,175.2,1\n892,-1,334.1,340.6,80.1,179.4,1\n892,-1,1721.2,454.5,78.1,212.6,1\n892,-1,1426.1,1.7,51,154.8,1\n892,-1,470.3,1,50.5,142.6,1\n892,-1,421.8,327,58,204.3,1\n892,-1,969.4,444.1,82.4,231.3,1\n892,-1,753.9,70.4,54.4,163.6,1\n892,-1,1591.9,45.6,49.8,152.4,1\n892,-1,301.8,161.3,68,192.6,1\n892,-1,886.2,456.6,68.7,227.5,1\n892,-1,253.9,1.6,54.7,119.6,1\n892,-1,241,132.6,55.2,169.9,1\n892,-1,1746.8,682.5,91.5,232.4,1\n892,-1,403.1,174.8,55.2,178.7,1\n892,-1,1493.5,1,63.9,149,1\n892,-1,314.2,1.5,47.2,125.5,1\n892,-1,411.2,57.5,55.5,171.5,0.999\n892,-1,1343.2,921.7,96.4,159.3,0.965\n892,-1,351.6,165.6,44.1,175.3,0.594\n324,-1,1221.7,31.3,61.9,118.4,1\n324,-1,1453.5,1,56.4,140.5,1\n324,-1,350.8,582.4,99.2,248.2,1\n324,-1,686.7,207.1,79.9,112.3,1\n324,-1,1714,54.1,60.9,162.9,1\n324,-1,109.1,350.4,51.7,190,1\n324,-1,453,116.2,72.7,200.5,1\n324,-1,1720.3,455.6,78.3,215.1,1\n324,-1,794.8,149,60.2,174.9,1\n324,-1,361.9,108.3,57.7,180.3,1\n324,-1,896.4,442.3,70.8,200.2,1\n324,-1,420.3,45,55.7,170.8,1\n324,-1,990.4,70.8,62,179.6,1\n324,-1,1514.5,601.7,87.5,249.1,1\n324,-1,238.4,364.5,58.1,186.3,1\n324,-1,1576.7,1.2,64.9,115.7,1\n324,-1,281.6,132.3,54.1,172.6,1\n324,-1,928,41.8,62.6,170.2,1\n324,-1,212.8,134.7,56.8,165.7,1\n324,-1,516.4,474.9,68.1,221.2,1\n324,-1,831.7,437.1,79,207.9,1\n324,-1,1047.2,78.8,52.2,160.7,1\n324,-1,727.7,97.3,49.2,175,1\n324,-1,426.7,460.7,76.2,237.7,1\n324,-1,514.7,100.5,40.8,169,0.999\n324,-1,1839.2,516.9,63.5,217.3,0.997\n324,-1,708.1,5.9,49.7,156.3,0.991\n324,-1,930.5,908.6,75.8,172.4,0.986\n324,-1,365.4,906.8,98.9,174.2,0.92\n592,-1,1221.6,30.5,61.2,118.9,1\n592,-1,687,206.1,79.6,113.7,1\n592,-1,1481.7,5,60.5,143.8,1\n592,-1,800.3,143,64.3,175.3,1\n592,-1,1638.7,1,55.3,119.9,1\n592,-1,561.8,112.7,49.3,175,1\n592,-1,368.8,259.8,66.8,194,1\n592,-1,359.8,110.8,51.7,171.4,1\n592,-1,1652.6,237.2,77.6,201.7,1\n592,-1,1718.9,455.4,81.1,210.6,1\n592,-1,227.8,273,62.7,186.2,1\n592,-1,288.3,126.7,51.9,170.3,1\n592,-1,1575.2,589.8,94,234.2,1\n592,-1,753.8,82.3,43.5,151.8,1\n592,-1,428,67.3,49.7,171.6,1\n592,-1,164.4,250.8,58.2,203.5,1\n592,-1,476.3,104,49.2,163.3,1\n592,-1,213.7,135.7,55.3,163.4,1\n592,-1,1066.4,849.9,121.4,231.1,1\n592,-1,871.2,2,53.9,96.1,0.999\n592,-1,1863.6,274.4,57.4,168.5,0.995\n592,-1,306.3,903.8,98.8,177.2,0.954\n592,-1,1158.4,859,89.5,222,0.893\n1007,-1,1221.8,30.3,61.4,118.2,1\n1007,-1,686.5,206.4,79.7,113.3,1\n1007,-1,794.3,139.8,74.5,173.6,1\n1007,-1,395.4,288.4,67.6,190.2,1\n1007,-1,1214.6,141.7,62.3,175.6,1\n1007,-1,500.2,279,68.5,190.2,1\n1007,-1,289.7,126.8,52.6,169.2,1\n1007,-1,1471.5,182.8,65.2,162.5,1\n1007,-1,1720.9,452.8,80.7,217.6,1\n1007,-1,231.3,138.8,54.4,165.2,1\n1007,-1,1576.7,591.3,100.5,234.1,1\n1007,-1,308.6,285.7,65.9,200.6,1\n1007,-1,927.5,277.7,68.6,209.7,1\n1007,-1,843.7,290.4,65.3,203.5,1\n1007,-1,1818.1,204.2,63.8,184.6,1\n1007,-1,1685.6,165.3,58.2,175.2,1\n1007,-1,299.5,477.7,88.1,201.7,1\n1007,-1,381.2,462.4,67.4,229.6,1\n1007,-1,751.1,73.3,54.2,162.2,1\n1007,-1,540.4,120.2,60.7,171.1,1\n1007,-1,1164.3,627.6,90.5,263.4,1\n1007,-1,1742,676.1,92.8,249.5,1\n1007,-1,594.2,552.7,96.9,243.3,1\n1007,-1,314.5,2.3,41.7,128.5,1\n1007,-1,347.2,881.8,92.6,199.2,1\n1007,-1,507.4,87.7,53.1,156.4,1\n1007,-1,418.6,164,62.8,194.2,0.999\n1007,-1,435.8,66.3,63.1,169.9,0.999\n1007,-1,377.4,175.2,49.3,162.3,0.999\n1007,-1,385.9,1,51.8,152.2,0.97\n800,-1,1221.3,29.3,62,119.1,1\n800,-1,687,205.6,79.5,113.9,1\n800,-1,287.3,523.9,76.7,237.9,1\n800,-1,783.3,133,51.6,178,1\n800,-1,548.3,113.9,63.1,176.7,1\n800,-1,1723.5,453,75.1,213.9,1\n800,-1,1574.6,589.6,99.9,234.6,1\n800,-1,478.9,93.5,62.5,175.4,1\n800,-1,278.2,167.6,58.8,195.4,1\n800,-1,1612.1,1,55,128.4,1\n800,-1,1480.3,30.2,60.5,151.3,1\n800,-1,750.5,71.1,55.7,161.2,1\n800,-1,232.3,134.4,51.8,166.3,1\n800,-1,388.8,243.5,68.6,174.7,1\n800,-1,254.6,1,53.2,123.2,1\n800,-1,441.7,229.3,56.4,196.1,1\n800,-1,1079.7,589.4,88.9,254.6,1\n800,-1,346.6,183.4,49.4,177.2,1\n800,-1,422.8,95,55.4,166.4,1\n800,-1,1440.8,59,48.8,157.5,1\n800,-1,1010.8,616,77.4,246.3,1\n800,-1,444.4,1,42.6,88.1,0.999\n800,-1,610.9,578.2,83.8,234.2,0.999\n74,-1,1221.7,31,61.2,117.2,1\n74,-1,1487.5,69.2,55.4,149.2,1\n74,-1,409.3,330.6,84,230.6,1\n74,-1,686.6,206.5,79.5,115.4,1\n74,-1,1256.8,172.8,65.7,169.2,1\n74,-1,704.5,1,56.2,158.8,1\n74,-1,356.1,106.2,55.3,178.8,1\n74,-1,1361.8,566.3,104.4,245.9,1\n74,-1,1721.8,456.6,77.1,209.8,1\n74,-1,490.4,200.3,79,194,1\n74,-1,9.6,737.4,71.3,227.5,1\n74,-1,987.8,186.3,69.3,185.6,1\n74,-1,103.8,547.3,84.4,252.6,1\n74,-1,135.4,355.2,53.4,191.2,1\n74,-1,290,128,52.5,167.6,1\n74,-1,778.4,192.5,79.3,178.9,1\n74,-1,211.3,131.3,51.6,164.3,1\n74,-1,1336.7,204.4,42.5,162.6,1\n74,-1,1434.8,200.2,76.2,197.1,1\n74,-1,537.6,64.1,48.9,169.9,1\n74,-1,885.8,190.3,57.6,167,1\n74,-1,435.4,25.3,51.4,161.7,1\n74,-1,467.7,116.3,63.7,161.2,1\n74,-1,382,29.7,52.3,165.2,1\n74,-1,386.2,904.3,101.7,176.7,0.999\n74,-1,841,168,57.3,181.1,0.998\n74,-1,256.3,94,55.2,172.3,0.996\n473,-1,1221.8,30.5,62.7,118.1,1\n473,-1,686.8,206.3,79.3,113.1,1\n473,-1,1003.6,1,55.6,151.6,1\n473,-1,934.2,1,57.7,144.9,1\n473,-1,453.3,182.8,71,194.6,1\n473,-1,285.2,208.5,53.5,169.8,1\n473,-1,360.3,109.5,54.8,176.7,1\n473,-1,1696.4,458.1,103.9,211.3,1\n473,-1,1789.8,363,89.7,213.8,1\n473,-1,878.1,2,50.8,132.7,1\n473,-1,1505.3,1.4,58.5,116.8,1\n473,-1,1642.1,342.3,64.5,198.3,1\n473,-1,1539,597.9,78,248.1,1\n473,-1,121.2,341.4,60.4,189.9,1\n473,-1,803.4,141.6,47.9,179.1,1\n473,-1,1723.2,172.1,68,165.4,1\n473,-1,809.4,587.6,96.6,259.7,1\n473,-1,218.1,138,63.5,159.6,1\n473,-1,514.5,85.4,59.2,171,1\n473,-1,326.9,724.4,74.3,249.3,1\n473,-1,233.8,688.6,95.5,271.7,1\n473,-1,905.8,626.3,116.8,248.3,1\n473,-1,446.5,33.8,71.1,181.4,1\n473,-1,1661.6,43.8,56.8,178.1,1\n473,-1,1767.8,143.9,86.6,182.4,0.999\n473,-1,1713.1,57.3,51.2,169.4,0.999\n473,-1,712.3,92.8,55.6,164.8,0.999\n473,-1,753.2,97.6,54.6,140.3,0.999\n473,-1,413.3,5.1,47.4,151.8,0.998\n473,-1,988,649.7,77.8,228.7,0.981\n473,-1,1026.4,924,82.7,157,0.976\n473,-1,429.1,146.5,49,170.9,0.741\n735,-1,1221.7,30,62,118.9,1\n735,-1,686.7,205.6,79.4,115.1,1\n735,-1,257.7,189.5,59.4,194.2,1\n735,-1,1481.1,9.9,60.3,144.4,1\n735,-1,781.6,138.7,54.4,176.8,1\n735,-1,552.3,111.8,58.4,181,1\n735,-1,297,423.6,76.1,224.3,1\n735,-1,1469.5,107.9,52.4,170.1,1\n735,-1,403.2,185.9,75.4,163.7,1\n735,-1,424.5,555.7,87.8,248,1\n735,-1,1712.1,455.8,95.6,210.7,1\n735,-1,475.9,170.2,48.5,182.2,1\n735,-1,1574.9,591.7,99.8,232.6,1\n735,-1,326.3,196.9,59.7,180.9,1\n735,-1,1598.4,103.4,58.4,179.7,1\n735,-1,1222.5,725.4,88.3,250.1,1\n735,-1,432.9,45.2,57.7,168.4,1\n735,-1,1146,746.7,83.7,260.4,1\n735,-1,360.1,108.2,50.7,175.5,1\n735,-1,750.9,85,50,148.7,1\n735,-1,319.3,1.2,47.4,131.5,0.991\n735,-1,240.4,147.8,53.1,164.3,0.775\n664,-1,1220.5,29.6,61.9,120,1\n664,-1,686.7,205.7,80.2,113.4,1\n664,-1,1480.8,3.2,61.1,144.3,1\n664,-1,1711.1,456.3,98.2,208.6,1\n664,-1,801.8,143.7,64,173,1\n664,-1,360.6,114.3,48.9,167.1,1\n664,-1,557.8,111.2,53.3,177,1\n664,-1,1576.2,587.7,97,236.2,1\n664,-1,1616.6,167.2,77.6,184.7,1\n664,-1,320.4,334.2,70.7,211.3,1\n664,-1,431.1,528.1,76.5,244.6,1\n664,-1,224.8,210.9,58.4,197.1,1\n664,-1,478.5,112.2,46.5,178.4,1\n664,-1,1134.7,1.9,65.9,111.2,1\n664,-1,407.7,1,57.2,156.1,1\n664,-1,421.3,121.8,65.4,161.1,1\n664,-1,750.6,79.9,47.2,155.5,1\n664,-1,277.2,226.8,56.3,183.3,1\n664,-1,1418,896.3,102.1,184.7,1\n664,-1,287.3,123.7,53,171,0.999\n664,-1,353,2.4,53.7,148.4,0.999\n664,-1,1499.7,159,49.3,177.9,0.998\n664,-1,1341.7,909.3,83.2,171.7,0.996\n664,-1,869.7,929.2,72.3,151.8,0.056\n112,-1,1221.2,30.5,62.8,118.7,1\n112,-1,356.1,105.1,55.8,178.2,1\n112,-1,210,127.8,51.9,165.3,1\n112,-1,704.5,1,55,159.4,1\n112,-1,108.3,352,49,186.4,1\n112,-1,1487.2,68.1,56.3,151.6,1\n112,-1,389.6,802.9,101,277.1,1\n112,-1,1721.9,457,77,210.5,1\n112,-1,1149.1,151.6,55.3,169.7,1\n112,-1,290,125.6,56.4,171,1\n112,-1,936.1,205.9,68.9,188.9,1\n112,-1,1358.7,566.9,105,243.2,1\n112,-1,1250.9,185.6,47.4,167,1\n112,-1,424.8,290.8,81.7,226.9,1\n112,-1,1370.1,182.6,67.8,191.3,1\n112,-1,513.9,234.6,71.5,200.5,1\n112,-1,538.1,66.2,49.5,166.7,1\n112,-1,480.6,154.2,55.2,163.7,1\n112,-1,102.7,546.1,84.1,255.6,1\n112,-1,51.1,675,81.9,222.1,1\n112,-1,796,199.6,63.3,194.6,1\n112,-1,441.7,1,52.7,155.7,1\n112,-1,843.1,221.5,55.4,173.1,1\n112,-1,482.1,40,60,159.9,0.999\n112,-1,376.4,3.9,47.6,160,0.999\n112,-1,697.2,190.8,54.4,131.1,0.963\n112,-1,1133.3,929.8,82.4,151.2,0.198\n149,-1,1221.5,31.4,61.8,117,1\n149,-1,1488.4,68.1,55.5,149.3,1\n149,-1,704.1,1,56.2,157.5,1\n149,-1,356.4,101.4,55.6,180.8,1\n149,-1,1031.4,132.8,59.2,172.9,1\n149,-1,421.4,257.2,76.5,220,1\n149,-1,109.1,352.1,49.1,184.7,1\n149,-1,1721.6,458.2,77.1,208.9,1\n149,-1,1359,566.6,105.2,244.5,1\n149,-1,287.4,124.3,55.3,173.3,1\n149,-1,401,715.7,95.4,264,1\n149,-1,538.2,64.8,51.1,163.6,1\n149,-1,217.7,126.6,53.4,164.7,1\n149,-1,686,206.7,82.1,113,1\n149,-1,1166,162.3,51,163.8,1\n149,-1,1286.2,175.2,62.5,178,1\n149,-1,102.9,553,83.8,246.3,1\n149,-1,531.1,269.5,59,201.7,1\n149,-1,808.2,257.7,64.4,180.8,1\n149,-1,864.4,203.9,70.2,192.6,1\n149,-1,590.3,259,57.5,194,1\n149,-1,382.9,1.3,47.7,125.3,1\n149,-1,757.7,245.2,70,190.3,1\n149,-1,486.8,197.1,58.4,167.9,1\n149,-1,175.2,616.8,73,213.4,1\n149,-1,463.7,34.7,47.7,163.1,1\n149,-1,1052,919.6,69.6,161.4,0.988\n149,-1,795.6,150,61.7,192.4,0.08\n89,-1,1222.2,30.5,61.5,116.5,1\n89,-1,419.1,314.3,82.6,230.4,1\n89,-1,355.4,106.5,56.6,177.6,1\n89,-1,704.2,1.3,56.3,157.8,1\n89,-1,1487.3,69.6,55,146.8,1\n89,-1,1360.5,566.4,103.4,245.2,1\n89,-1,1721.2,457.1,78.1,208.8,1\n89,-1,1214.7,156.3,59.2,178.4,1\n89,-1,397.8,863.9,105.7,217.1,1\n89,-1,969.5,192.7,74.9,189.1,1\n89,-1,501,212.4,74,199.8,1\n89,-1,733.9,185.5,69.9,179.8,1\n89,-1,102.4,547.5,85.6,252.7,1\n89,-1,295,126.5,52.2,169.6,1\n89,-1,210.4,131.3,50.5,164.1,1\n89,-1,23.9,709.6,68.6,225.5,1\n89,-1,1415.7,196.4,61.3,189.1,1\n89,-1,538.5,64.4,48.7,168.8,1\n89,-1,437.4,12.5,52.5,159.6,1\n89,-1,830.3,180.9,61.4,181.6,1\n89,-1,1473,192.5,54.6,166.1,1\n89,-1,122.3,354.9,46.1,189.9,1\n89,-1,376.7,20.7,53.2,159.6,1\n89,-1,1305.3,204.3,41.8,167,1\n89,-1,874.1,202.5,53,168.7,1\n89,-1,482.2,130.6,54.9,163.1,1\n89,-1,255.2,93.1,60.3,179.5,0.999\n89,-1,691.6,208.4,58,111.5,0.854\n89,-1,486.3,38.5,54.7,169.8,0.703\n89,-1,800,155.5,49.2,165.5,0.694\n38,-1,686.1,206.3,80.4,112.9,1\n38,-1,1210.5,28.7,74.4,122.5,1\n38,-1,389.6,367.9,89.1,237.9,1\n38,-1,1486.6,69.2,56.6,150.7,1\n38,-1,704.2,1.4,56.4,156.8,1\n38,-1,1361.5,566.8,104.8,244.8,1\n38,-1,933.8,195.5,82.3,184.2,1\n38,-1,484.2,163.8,92.5,197.7,1\n38,-1,1722.3,456.2,76.7,211.1,1\n38,-1,181.5,373.4,70.5,191.4,1\n38,-1,795.4,149,61.5,175.1,1\n38,-1,214.4,127.6,49.1,163.1,1\n38,-1,355.5,110.4,54.5,171.4,1\n38,-1,102.3,547.9,85,251.1,1\n38,-1,866.2,144.3,60.4,187.5,1\n38,-1,1009.9,155.4,80.1,189.2,1\n38,-1,448.3,50.6,52.3,169.5,1\n38,-1,284.6,123.4,53,172.2,1\n38,-1,1.3,810,66.1,241.1,1\n38,-1,1841.2,250.8,73.1,197.1,1\n38,-1,1353.6,189.2,52.5,163.7,0.999\n38,-1,390.1,77.6,53.8,165.3,0.998\n38,-1,1580.8,235.7,54.4,178.4,0.586\n38,-1,1401.1,220.5,39,172.5,0.274\n38,-1,1504.6,224.7,50,187.1,0.14\n38,-1,499,46.3,42.3,142.9,0.058\n404,-1,1222.1,30.7,61.6,118.1,1\n404,-1,686.1,205.7,80.1,115.2,1\n404,-1,1645.8,50.3,65.2,171.4,1\n404,-1,357.4,104.2,55.5,180.5,1\n404,-1,457.6,268.3,75.6,205.5,1\n404,-1,945.7,19.3,62.7,172.3,1\n404,-1,1770.7,117.9,66.4,169.6,1\n404,-1,361.6,1,66.7,111.5,1\n404,-1,829.2,1.2,56.1,127.1,1\n404,-1,549.6,69.3,60.4,171.9,1\n404,-1,1718.8,460.2,79.5,205.7,1\n404,-1,305.8,575.9,84.3,244.4,1\n404,-1,219.5,141.1,63.4,155.7,1\n404,-1,796.1,152.5,58.6,171.1,1\n404,-1,283.6,129.4,55.5,164.9,1\n404,-1,423.2,599.4,69,235,1\n404,-1,108.5,346,53.1,195.7,1\n404,-1,1589.8,619.1,96.3,249.9,1\n404,-1,1185.7,483.5,60.4,204.8,1\n404,-1,1006.6,35.3,55.4,159.1,1\n404,-1,424.4,89.9,52.7,173.1,1\n404,-1,205.5,270.9,52.9,182.2,1\n404,-1,853.7,523.6,101,236,1\n404,-1,467.4,69.7,65,189.9,1\n404,-1,925.7,540.8,81.6,218.1,1\n404,-1,717.7,1,52.1,132.2,1\n404,-1,708.5,90.7,66.4,173,0.999\n404,-1,977.4,917.9,86.2,163.1,0.988\n404,-1,424.6,1.6,44.4,110.5,0.981\n404,-1,678.8,564,89.8,241.7,0.976\n973,-1,686.3,206.1,79.9,113.3,1\n973,-1,1221.8,31,61.2,119.5,1\n973,-1,794.9,140.9,71.4,172,1\n973,-1,413.2,255.3,70.7,187.9,1\n973,-1,1775.7,163.8,67.3,180.1,1\n973,-1,305.8,432.1,88,196.5,1\n973,-1,491.3,238.9,68.2,187.8,1\n973,-1,1161.2,106.1,64.4,166.7,1\n973,-1,1471,153.1,66,164.3,1\n973,-1,1652.8,126.1,59.1,172.1,1\n973,-1,1575.8,590.2,102.3,235.6,1\n973,-1,928.8,322.4,68.7,212.7,1\n973,-1,229.5,137.3,56.2,163.2,1\n973,-1,329.8,249.2,62.9,201.3,1\n973,-1,751.4,71.9,55.6,163.3,1\n973,-1,846.3,337,66.6,211,1\n973,-1,333,805.8,92.9,275.2,1\n973,-1,1720.3,455.4,79.3,209.4,1\n973,-1,550.4,119,52.7,169.6,1\n973,-1,390.6,422.4,68.9,220.5,1\n973,-1,448.2,68,55.2,178.9,1\n973,-1,1396.4,2.5,46,97.6,1\n973,-1,1738.6,674.1,97.9,251.5,1\n973,-1,1205,704.9,92,270.5,1\n973,-1,1454.1,1,60.9,102.1,1\n973,-1,289.9,128.5,54,170.9,1\n973,-1,314.1,1,46.7,129.8,1\n973,-1,380.7,1,53.8,126.3,0.999\n973,-1,484.7,60.4,55.8,157.8,0.999\n973,-1,340.2,166.1,65.2,177.1,0.951\n873,-1,1222.2,29.6,61.5,118.4,1\n873,-1,686.8,206.2,79.7,112.7,1\n873,-1,479.8,1,48.6,125.2,1\n873,-1,794.7,138.4,77.6,175,1\n873,-1,1478.3,80,59.7,155.4,1\n873,-1,278.1,635,86.5,257.7,1\n873,-1,335.7,314.3,82.5,178.8,1\n873,-1,1086.4,3,57.4,138.5,1\n873,-1,1575.2,589.5,103.4,236.3,1\n873,-1,1689.8,47,55,165.6,1\n873,-1,1722.5,454.4,76.7,212,1\n873,-1,557.8,117.2,59.3,175.9,1\n873,-1,300.3,161.6,70.7,195.4,1\n873,-1,477.2,161.4,61.9,187.4,1\n873,-1,901,483,70.8,233.6,1\n873,-1,1579,24.1,51.5,147.2,1\n873,-1,987,469.5,73.9,233.6,1\n873,-1,753.3,71.4,54.3,163,1\n873,-1,1418.1,11.6,50.8,154.5,1\n873,-1,239,132.7,52.9,166.5,1\n873,-1,253.5,1.3,54.3,121.3,1\n873,-1,411.8,159.2,57.9,174.7,1\n873,-1,430.4,306.9,55.8,200.7,1\n967,-1,685.7,206.4,81,113.1,1\n967,-1,1153.6,95,66.4,169,1\n967,-1,792.8,140.8,73.7,172.7,1\n967,-1,1221.8,30.5,61.4,120.4,1\n967,-1,1768.9,150.3,69.5,188.7,1\n967,-1,1649.3,120.2,58,170.7,1\n967,-1,927.3,328.4,72.4,216.9,1\n967,-1,1574.5,589.7,103.7,236.9,1\n967,-1,1721.3,456.4,78.1,208.3,1\n967,-1,328.7,797.7,91.4,270.2,1\n967,-1,489.6,231.9,65.1,181.1,1\n967,-1,751.7,72.9,55.7,162.3,1\n967,-1,230.1,137.3,55.4,163.3,1\n967,-1,415.5,247.2,72.3,197.6,1\n967,-1,1472.6,152,65.8,163.6,1\n967,-1,443.4,72.3,55.7,178.9,1\n967,-1,1215.1,723.2,91.7,265.8,1\n967,-1,1401.4,1.8,47.4,103.2,1\n967,-1,332.6,244.9,64,192.5,1\n967,-1,848.1,343.2,65.6,203.4,1\n967,-1,309.5,426.4,89.4,200.5,1\n967,-1,1457.7,1,64.4,102.7,1\n967,-1,550.2,119,53.6,169.7,1\n967,-1,390.8,415.2,66.4,215.3,1\n967,-1,1741.5,673.2,94,251.5,1\n967,-1,290.2,126.1,54.2,170.3,1\n967,-1,313.6,1,48,129.8,1\n967,-1,483.9,51.1,55.2,161,1\n967,-1,381.7,1,53.3,125.1,0.986\n967,-1,432.9,4.9,53.7,145,0.618\n705,-1,1221.6,30.2,61.6,117.6,1\n705,-1,686.7,206.5,80.2,112.7,1\n705,-1,1482,6.6,58,147.1,1\n705,-1,562.3,108.1,54.4,181.1,1\n705,-1,1711.3,456.6,97.7,208.2,1\n705,-1,1604.2,137.2,66.7,183.2,1\n705,-1,1475.7,129.9,51.4,174.2,1\n705,-1,412.4,155.5,76.5,164,1\n705,-1,294.7,383.8,76.2,217.5,1\n705,-1,474.3,22.1,45,140.5,1\n705,-1,1573.1,587.5,99,235.7,1\n705,-1,1219.1,818.2,91.4,258.2,1\n705,-1,484.5,141.8,46.9,180.4,1\n705,-1,802.5,138.6,47.4,174.8,1\n705,-1,1305.6,784.9,87.7,266.4,1\n705,-1,387.1,546.1,68,242.5,1\n705,-1,359.6,109.8,50.5,172.5,1\n705,-1,749.9,81,50,155.4,1\n705,-1,257.9,198.2,58.5,197.2,1\n705,-1,1005.6,1,66.8,89.1,1\n705,-1,304.8,208.7,59.2,180.8,1\n705,-1,409.4,27.6,58.3,161.6,1\n705,-1,229.1,133.7,51.1,163.2,1\n705,-1,844.6,932.6,72.4,148.4,0.517\n534,-1,1221.8,30.4,61.7,120.1,1\n534,-1,1486.2,1,58.5,141.4,1\n534,-1,687.9,206.1,77.1,114.5,1\n534,-1,780.5,144.2,58,174.5,1\n534,-1,386.2,203.6,63.7,189.2,1\n534,-1,288.4,126.4,54.1,169.5,1\n534,-1,992,1.2,54.2,109.3,1\n534,-1,1717.9,457.3,82.4,210,1\n534,-1,171.2,311.7,68.2,194.8,1\n534,-1,1694.3,301.4,73.4,200.4,1\n534,-1,1767.4,220.9,73.8,174,1\n534,-1,463.4,114.4,63.4,186.9,1\n534,-1,1583.6,591.8,67.2,244.1,1\n534,-1,1663.3,8.6,54.4,164.2,1\n534,-1,1604,1,55.3,166.8,1\n534,-1,808.2,603.8,77.5,255.8,1\n534,-1,880.2,1.8,52.8,114,1\n534,-1,217.4,138,63.1,161.6,1\n534,-1,517.9,103.3,61.8,175.6,1\n534,-1,264,834.4,80.2,246.6,1\n534,-1,928.8,1,56.8,109.3,1\n534,-1,965.1,742.1,126.6,256.7,1\n534,-1,403.7,38.5,49.8,161.8,1\n534,-1,192.3,800.1,97.4,275.3,1\n534,-1,449.3,1,68.6,168.7,0.999\n534,-1,1796.3,671.5,60.6,202.6,0.661\n534,-1,1588.5,284.9,55.5,195.9,0.637\n534,-1,1874.5,222.4,46.5,214.6,0.324\n461,-1,1222,30.7,61.6,118.6,1\n461,-1,687,205.4,78.5,114.3,1\n461,-1,936.5,1,57.8,148.7,1\n461,-1,449.9,192,67.4,199.4,1\n461,-1,1732.6,164.5,59.1,164.2,1\n461,-1,1008.5,2.2,53.3,156.4,1\n461,-1,871.5,1,56.8,134.9,1\n461,-1,359.5,107.8,53.9,179.2,1\n461,-1,1704.4,459.5,95,206.5,1\n461,-1,116.3,349.1,55.5,190,1\n461,-1,242.7,671.2,99.5,265.2,1\n461,-1,1823.1,377,78.7,211.5,1\n461,-1,1507.8,1.8,56.3,110.4,1\n461,-1,1543.5,610.8,76.7,242.5,1\n461,-1,271.3,214.9,50,171.9,1\n461,-1,520.9,77.6,57.1,171.8,1\n461,-1,1654.3,357.7,65,194.9,1\n461,-1,803.3,149.7,45.4,173.4,1\n461,-1,889.4,605.8,114.6,249.4,1\n461,-1,218,137.9,60.9,159.3,1\n461,-1,339.3,703.8,72.2,254,1\n461,-1,1681,56.5,69.7,174.6,1\n461,-1,284.6,126.5,54.4,171.3,1\n461,-1,807.6,580.5,85.1,251.8,1\n461,-1,1455.4,553.5,80.6,206.6,1\n461,-1,753.4,95.3,53.6,145.5,1\n461,-1,979.3,626.8,92.4,225.4,0.999\n461,-1,444.9,43.2,69.8,187.6,0.999\n461,-1,418.1,1.7,42.9,158.5,0.998\n461,-1,712.9,93.7,52.8,166.2,0.997\n461,-1,1028.6,922.1,83.2,158.9,0.997\n273,-1,1222.3,31.8,61.3,117.4,1\n273,-1,687.4,206.7,78.1,111.1,1\n273,-1,386.7,12.9,61.5,161.7,1\n273,-1,1639.6,21.4,59.4,152.7,1\n273,-1,289.9,129.8,54.9,170.5,1\n273,-1,455.7,152.9,74.5,208.1,1\n273,-1,940.8,87.2,69.9,183.7,1\n273,-1,1039.5,101.6,63,185.3,1\n273,-1,355,107.7,53.2,177.6,1\n273,-1,1112.5,96.4,57.4,168.2,1\n273,-1,108.3,349,50.5,190.7,1\n273,-1,188.2,573.5,88.2,252,1\n273,-1,1721.4,456.5,77.3,212.7,1\n273,-1,219.7,128.9,54.2,164.1,1\n273,-1,795.8,151.3,61.8,172.1,1\n273,-1,704.3,1.5,53.9,157.1,1\n273,-1,386,467.1,85.5,230.6,1\n273,-1,1473,40.7,54.7,153.3,1\n273,-1,232.1,432.4,61.5,200.1,1\n273,-1,262,776.3,88.3,273.3,1\n273,-1,721.6,337.3,69.3,185.7,1\n273,-1,1421.4,570.9,99.7,249.6,1\n273,-1,806.6,367.8,88.9,214.1,1\n273,-1,875.9,381.5,78.6,192.6,1\n273,-1,565.1,404.9,63.5,212.7,1\n273,-1,753,102.1,46.4,172,1\n273,-1,862.2,109.1,43,156.3,1\n273,-1,513.8,114.6,52.1,175.7,1\n273,-1,473.6,395.6,73,223,1\n273,-1,945.3,919,82,162,0.945\n921,-1,1221.5,30.5,61.8,118.5,1\n921,-1,686.2,206.4,80.4,113,1\n921,-1,793.6,141.2,75.1,171.3,1\n921,-1,1121.6,39.8,58.2,164.1,1\n921,-1,308.6,712,88,256.2,1\n921,-1,1287.5,835.1,95.8,245.9,1\n921,-1,1611.6,73.3,52.4,161.6,1\n921,-1,459.8,203.3,68.1,196.9,1\n921,-1,1574.9,589.9,103.1,235.1,1\n921,-1,1721.9,451.6,78.4,216.6,1\n921,-1,1476,107.3,63.5,163.3,1\n921,-1,557.2,116.4,58.4,171.7,1\n921,-1,328,372,79.9,193.5,1\n921,-1,300.9,161.8,71.2,200,1\n921,-1,751.4,73.9,55.5,159.4,1\n921,-1,952.5,392,73.8,229,1\n921,-1,865.4,414.6,65.5,215,1\n921,-1,1431.3,2.8,46.7,129.9,1\n921,-1,408.5,357.1,59,211.1,1\n921,-1,1492.7,1,61,127.8,1\n921,-1,1748.9,678.8,94,243.6,1\n921,-1,240.2,133,54.7,165.3,1\n921,-1,1727.9,96.5,51.9,175.1,1\n921,-1,373.4,209,57.3,175.4,1\n921,-1,470.5,18.2,52.1,151.3,1\n921,-1,253.6,2,53.8,120.4,1\n921,-1,424.8,67.2,61.9,176.5,1\n921,-1,313,1.6,47.2,132.6,1\n897,-1,1221,29.9,62.1,118.8,1\n897,-1,686.8,205.7,79.5,114.9,1\n897,-1,478.9,186.7,63.8,184.6,1\n897,-1,793.9,140.3,74.6,172,1\n897,-1,297.9,667.7,91.4,255.9,1\n897,-1,1486.1,102.9,57,148.7,1\n897,-1,1427.2,1,51.4,148.6,1\n897,-1,1107.9,18.1,54.1,157.9,1\n897,-1,1721.7,454.2,77.6,212.4,1\n897,-1,1574.3,590.4,103.1,234.4,1\n897,-1,559.3,117,58.7,174.3,1\n897,-1,338.4,348.5,78.7,185.3,1\n897,-1,1595.2,47.4,50.6,158.7,1\n897,-1,964.9,437.4,87.9,224.7,1\n897,-1,421.5,331.3,55.7,203.6,1\n897,-1,1708.9,73.3,54.8,172.6,1\n897,-1,753.6,72.8,54,161.3,1\n897,-1,468.3,3.2,51.9,150.1,1\n897,-1,303,161.4,67,190.9,1\n897,-1,882,451.1,66.2,227.6,1\n897,-1,394.7,186.2,60.5,177.6,1\n897,-1,1747.8,679.3,89.6,235.4,1\n897,-1,254.1,1,53.1,119.4,1\n897,-1,241.8,132.9,57.2,170.8,1\n897,-1,313.7,1,48.5,129.6,1\n897,-1,1499.2,1,60.2,145.7,1\n897,-1,416.8,56.8,55.3,178.9,1\n897,-1,1330.5,910.8,95.7,170.2,0.999\n666,-1,1220.8,29.6,61.8,119.1,1\n666,-1,687.1,206,79.5,113.1,1\n666,-1,1480.8,5.1,61.1,142.4,1\n666,-1,1711,457.6,97.5,206.7,1\n666,-1,360.4,113.5,49.2,167.1,1\n666,-1,802.4,143.8,63.5,172.8,1\n666,-1,1128,1,67.4,111.1,1\n666,-1,558.9,111.3,52.7,176.7,1\n666,-1,480.2,115.3,45,174.3,1\n666,-1,1574.5,587.2,98.1,236.3,1\n666,-1,319,339.7,71.4,206.2,1\n666,-1,1618.8,164.8,77.1,185.5,1\n666,-1,224.4,209,60.6,201.7,1\n666,-1,750.8,79.7,47.2,156.5,1\n666,-1,409.6,1.4,55.2,155.3,1\n666,-1,419.2,122.5,70.4,161.3,1\n666,-1,1494.9,164,56.1,175.5,1\n666,-1,278,225.8,56.8,184.2,1\n666,-1,423.9,525.1,78.3,254.8,1\n666,-1,1407.9,887.6,104.9,193.4,1\n666,-1,1334.1,907.6,81.6,173.4,1\n666,-1,288.2,122.1,52.2,172.1,0.999\n666,-1,354,4,53.2,150.9,0.999\n666,-1,867.7,929.1,71.1,151.9,0.14\n666,-1,299.6,5.6,46.4,128.2,0.078\n48,-1,396.1,358.9,85.7,235.6,1\n48,-1,686.8,206.1,78.2,114.2,1\n48,-1,1219.2,29.5,65.8,115.1,1\n48,-1,1487.4,70.1,54.9,149.2,1\n48,-1,490.7,174.5,89.6,197.4,1\n48,-1,1361.8,566.8,104.2,246,1\n48,-1,704.6,1,55.7,156.6,1\n48,-1,1722.4,455.9,75.6,211.8,1\n48,-1,354.9,108.1,54.4,175.1,1\n48,-1,897.4,199.5,67,175.3,1\n48,-1,166.4,363.9,66,194.7,1\n48,-1,213.9,125,49.3,168.7,1\n48,-1,283.7,125.5,54.5,170.2,1\n48,-1,102,547.6,85.9,251.6,1\n48,-1,1007.5,163.2,78.9,190.6,1\n48,-1,794.8,148.3,61.6,177,1\n48,-1,3.8,785,67.8,244.1,1\n48,-1,418.3,95.7,55,148.7,1\n48,-1,1853.1,271.3,67.9,193.3,1\n48,-1,1328.1,177.9,53.9,165.7,1\n48,-1,486.5,44.5,56.4,156.1,1\n48,-1,859.8,151.7,59.5,180.3,1\n48,-1,1485.9,215.2,61.3,200.4,0.999\n48,-1,1380,223.4,43.9,164.9,0.999\n48,-1,541.1,63.8,43.8,170.3,0.998\n48,-1,440.6,42.5,52.3,168.7,0.977\n495,-1,1221.4,30.8,62,117.9,1\n495,-1,686.2,206.1,79.7,113.4,1\n495,-1,1497.5,1,58.2,127.3,1\n495,-1,1733.9,187.5,70.8,175,1\n495,-1,999.1,1,54.8,133.6,1\n495,-1,1816.9,174.4,77.1,184.6,1\n495,-1,930.5,1.1,56.6,132.1,1\n495,-1,875.8,1,52.9,127.1,1\n495,-1,808,605.1,89.9,258.5,1\n495,-1,799.2,141.9,54.5,175.9,1\n495,-1,1714.2,458.5,86.8,206.5,1\n495,-1,463.8,150.8,64.6,199.7,1\n495,-1,1631.9,596.8,76.9,214,1\n495,-1,139.2,335.3,66.2,191.7,1\n495,-1,213.8,729.5,97.9,273.1,1\n495,-1,406.6,163,63.7,187.5,1\n495,-1,300.2,766.8,77.7,261.7,1\n495,-1,1689.7,42.9,54.6,164.5,1\n495,-1,1540.5,599.7,88.9,240.5,1\n495,-1,217.3,135.5,63.5,164.1,1\n495,-1,312.9,190.9,48.9,167.8,1\n495,-1,922.5,664,111.5,253.8,1\n495,-1,1628.7,30.1,59.1,173.5,1\n495,-1,1756.6,343.8,77.2,216.8,1\n495,-1,1625.2,327.1,62.6,189.8,1\n495,-1,715.8,92.4,59.1,164.7,1\n495,-1,449.7,19.1,73.4,177.5,1\n495,-1,360.9,109.8,53.2,176.6,1\n495,-1,505.1,95.3,61.9,169.7,1\n495,-1,404.7,15.2,46.5,160.9,1\n495,-1,286.4,126.4,53,168.1,0.999\n495,-1,1012.2,685.6,80.2,227.6,0.999\n495,-1,749.4,97.2,46.5,144.9,0.504\n495,-1,1019.5,937.1,86.3,143.9,0.075\n876,-1,1221.8,29.9,61.3,118.2,1\n876,-1,687,206,79.2,113.4,1\n876,-1,477.5,1,48.9,128.5,1\n876,-1,1086.4,2.7,61.5,146.7,1\n876,-1,1479,82.5,60.7,158,1\n876,-1,794.9,138.2,75.9,175.4,1\n876,-1,1722.4,454,78.1,213.3,1\n876,-1,283.1,639,84.4,259,1\n876,-1,1574.6,589.7,104.2,235.6,1\n876,-1,335.9,315.4,80,182.9,1\n876,-1,559.2,117.3,58.9,176.7,1\n876,-1,898.5,481.9,70.6,231.5,1\n876,-1,300.1,162.7,70.4,192.7,1\n876,-1,479.1,167.4,62.2,182.6,1\n876,-1,1693.2,48.6,52.1,168.9,1\n876,-1,753,70.3,55.2,164,1\n876,-1,1576,29.3,56.6,152.4,1\n876,-1,1420.1,8.4,50.4,153.6,1\n876,-1,985.6,465.2,71,234.6,1\n876,-1,408.9,162.1,58,175.2,1\n876,-1,253.1,1.3,55.2,122,1\n876,-1,430,306.7,55.3,203,1\n876,-1,240,132.2,51.4,165.8,1\n876,-1,1765.2,689.6,97.8,229.6,0.89\n655,-1,687.2,206.5,79.3,112.7,1\n655,-1,1481,3.3,60.4,145.9,1\n655,-1,547.6,111.7,62.5,174.1,1\n655,-1,1161.8,1,69.4,122.6,1\n655,-1,1710.3,456.2,98,208.9,1\n655,-1,801.6,144.4,65.2,173.6,1\n655,-1,1222.2,27.7,62.3,124.1,1\n655,-1,359,113.8,51.3,170.2,1\n655,-1,330.9,331.8,69,206.9,1\n655,-1,1614,171.6,72.7,187.1,1\n655,-1,1576.2,589.2,96,236.6,1\n655,-1,448.8,533.5,84.6,246.3,1\n655,-1,751.6,79.6,46.4,156.3,1\n655,-1,271.1,236.9,60,178.9,1\n655,-1,410,1,58.2,156.9,1\n655,-1,218.7,219.2,56.5,203.5,1\n655,-1,471.2,105.2,47.5,175.9,1\n655,-1,425.7,118.7,54.9,161.2,1\n655,-1,288.4,125.5,51.9,169.3,0.999\n655,-1,1442.6,910.9,88.1,170.1,0.995\n655,-1,353.1,1,53.3,144.3,0.992\n655,-1,1363.2,935,85.2,146,0.671\n655,-1,893.7,930.2,70.6,150.8,0.054\n694,-1,1221.5,30.3,62.1,117.6,1\n694,-1,687,206.4,79.6,113.1,1\n694,-1,1481.6,6.9,59.1,145.3,1\n694,-1,377.5,534.7,82.8,250.5,1\n694,-1,563.1,111.2,52.7,179.4,1\n694,-1,1710.3,456.8,98.4,208.2,1\n694,-1,1483.7,132.6,54.4,181.8,1\n694,-1,1609.2,140.9,69.5,183.3,1\n694,-1,1575.6,589.1,95.4,233.8,1\n694,-1,802.7,145,52.4,173.4,1\n694,-1,422.4,150,62,164.2,1\n694,-1,487.4,135.5,49.5,183.2,1\n694,-1,749.7,79.9,50.6,155.5,1\n694,-1,407.1,19.8,57.2,166.7,1\n694,-1,304.4,377.5,71.2,212.4,1\n694,-1,1038.5,2,65.9,93.8,1\n694,-1,360.1,114.4,50.2,172.4,1\n694,-1,251.1,200.3,60,197.7,1\n694,-1,1320.2,816.9,102.3,264.1,1\n694,-1,225.5,134.9,54.1,161.6,1\n694,-1,479.7,30.1,47.2,137.1,1\n694,-1,300.7,211.8,59.1,181.3,1\n694,-1,1248,840.2,85.3,240.8,1\n694,-1,824.9,924.5,80.3,156.5,0.622\n271,-1,1222.1,31.3,61.4,118.3,1\n271,-1,384.1,11.2,60.1,159.7,1\n271,-1,687.7,206.7,77.9,111.8,1\n271,-1,290.9,129.4,55.2,170.7,1\n271,-1,1636.6,19.7,60.9,153.4,1\n271,-1,456.4,154.4,73.5,210.2,1\n271,-1,380.5,474.5,89.8,229.5,1\n271,-1,1116.8,97.5,56.8,170.1,1\n271,-1,940.9,90.1,70.3,181.7,1\n271,-1,354.9,105.7,53.6,179.9,1\n271,-1,219.5,128.6,54.7,163.5,1\n271,-1,796.9,151,59.3,172.1,1\n271,-1,108.2,350.7,50.5,189.2,1\n271,-1,711.8,332.3,72.1,195,1\n271,-1,704.2,1.6,54.7,156.3,1\n271,-1,1042.5,102.5,62.6,186.2,1\n271,-1,1721.6,456.6,77.2,213,1\n271,-1,1474.4,42.8,54.3,151.8,1\n271,-1,185,570.6,86,254.6,1\n271,-1,1415.2,568,100.3,249.7,1\n271,-1,233.2,433.6,60.6,199.3,1\n271,-1,806.3,365.3,86.8,216.9,1\n271,-1,255,774.7,91.1,269,1\n271,-1,874.8,377.8,76.6,196.2,1\n271,-1,564.6,404.4,64.7,211.3,1\n271,-1,754.3,102.5,47.1,170.6,1\n271,-1,513.1,115.9,52.8,174.2,1\n271,-1,475.8,397.8,72.5,220.2,1\n271,-1,865.5,108.8,42.8,153,0.999\n271,-1,943.4,918.8,83.9,162.2,0.968\n596,-1,1221.6,30.7,60.7,118.9,1\n596,-1,687.4,206,78.5,113.4,1\n596,-1,1480.6,3.7,60.9,144.5,1\n596,-1,800.8,143.2,64.4,175.5,1\n596,-1,232.8,268.8,62.8,185.8,1\n596,-1,367.1,261.8,66.2,203.1,1\n596,-1,1633,1,54.3,116.7,1\n596,-1,1716.7,457,84.9,209.6,1\n596,-1,358.9,110,53.1,174.9,1\n596,-1,562.8,113.1,48.8,174.1,1\n596,-1,1654.4,230.1,73.3,200.6,1\n596,-1,164.4,248.3,60.2,205.3,1\n596,-1,1574.7,589.5,93.8,230.3,1\n596,-1,287.7,126.9,52,170.9,1\n596,-1,429.3,66.7,50.6,174.5,1\n596,-1,753.3,81.2,44.3,153.4,1\n596,-1,479.8,104.3,50.2,159.1,1\n596,-1,215.9,138,55.7,161.2,1\n596,-1,1074.6,857.1,118.4,223.9,0.999\n596,-1,1164.5,870.3,84.3,210.7,0.983\n596,-1,1869.6,272.4,51.4,180.2,0.944\n596,-1,307.2,907.4,109.6,173.6,0.12\n90,-1,1222,30.4,61.7,115.6,1\n90,-1,355.9,107.7,55.8,176.8,1\n90,-1,703.9,1.6,56.3,157.5,1\n90,-1,420.2,311.3,81.1,230.1,1\n90,-1,1487.5,69.9,54.6,146,1\n90,-1,968.9,194,74.6,188.5,1\n90,-1,399.1,860.9,105.2,220.1,1\n90,-1,1359.4,565.1,104.7,247.9,1\n90,-1,1212.7,155.1,57.7,182.1,1\n90,-1,1721.1,457.9,77.7,207.8,1\n90,-1,730.4,188.1,71,176.7,1\n90,-1,501.7,211.7,72.8,200.5,1\n90,-1,102.3,548.1,85.6,251.1,1\n90,-1,210.3,131.5,50.3,163.5,1\n90,-1,294.9,126.6,52.6,169.5,1\n90,-1,24.4,706.6,68.3,226.7,1\n90,-1,1301.1,203.3,44,168,1\n90,-1,1413.9,196.8,59.5,190.3,1\n90,-1,437,13.7,53.1,158.5,1\n90,-1,538.9,64,48.1,167,1\n90,-1,376.2,19.7,53,157,1\n90,-1,1469.5,190.5,56.5,174,1\n90,-1,870.7,203.4,56.8,168.5,1\n90,-1,122.1,354.3,46.4,191.6,1\n90,-1,255.4,93,60.2,180.9,1\n90,-1,482.6,131.4,54,163.2,0.999\n90,-1,830.3,188.1,61.3,175.4,0.998\n90,-1,795.6,155.6,58.9,172.3,0.985\n90,-1,485.6,40.5,55.4,165.5,0.883\n211,-1,1221.5,30.9,62.2,118.1,1\n211,-1,686.9,207.2,78.9,113.6,1\n211,-1,212,126.6,55.4,166.8,1\n211,-1,704.6,1.1,55.9,160.3,1\n211,-1,398.5,583,88.5,247,1\n211,-1,356.4,109.9,52.6,174.8,1\n211,-1,1492.4,70.4,53.4,146.8,1\n211,-1,288.1,126.8,56,172.3,1\n211,-1,108.9,351,50.4,184.7,1\n211,-1,1720.3,456.4,79.1,211.5,1\n211,-1,1356.2,566.8,105.8,245.8,1\n211,-1,1204.6,141.9,48.9,163.2,1\n211,-1,522.5,126.7,50.1,172.5,1\n211,-1,426,203,75,213.9,1\n211,-1,95.5,659.3,105,247.1,1\n211,-1,504.7,322.8,75.4,215.2,1\n211,-1,795.5,152.1,59,170.5,1\n211,-1,1138.3,137.3,58.5,183.4,1\n211,-1,1015.9,134.2,46.8,156.5,1\n211,-1,899.4,145.8,68.4,192.5,1\n211,-1,225.9,520.7,61.2,205.7,1\n211,-1,1,614.9,111.5,240.4,1\n211,-1,809.1,316.7,75.7,189.8,1\n211,-1,562.9,265.6,56.2,177.8,1\n211,-1,853,107.5,56.1,175.1,1\n211,-1,757.2,301.4,72.6,202.5,0.999\n211,-1,377.9,38.7,54.1,161.7,0.991\n211,-1,950.8,912.8,76.6,168.2,0.99\n211,-1,477.5,6.6,38.1,72.3,0.104\n849,-1,1221.1,30.2,62.8,118,1\n849,-1,687.4,206,78.9,113.5,1\n849,-1,794.9,139.3,79.3,174.5,1\n849,-1,1070.4,1,60,116.5,1\n849,-1,1574.8,590.1,103.6,235.2,1\n849,-1,559.2,115.3,60.2,176.9,1\n849,-1,1721.7,452.7,78.1,213.9,1\n849,-1,1470.8,62.1,60.1,156,1\n849,-1,752.9,71.7,55.1,161.2,1\n849,-1,265.3,596.2,82.2,243.5,1\n849,-1,297.2,160.7,72.2,197.4,1\n849,-1,1659.7,28.2,52.6,159.6,1\n849,-1,1413.3,29.5,54.7,155.4,1\n849,-1,352.4,291,73.5,183,1\n849,-1,931,530.4,70.6,235.7,1\n849,-1,239.9,132.5,53.1,165.9,1\n849,-1,252.5,1,54.7,120.5,1\n849,-1,435.4,276.3,53.7,195.4,1\n849,-1,472.5,140.2,60,180.8,1\n849,-1,1014.3,506.1,72.9,238.7,1\n849,-1,416.8,139.1,61.5,169.7,1\n849,-1,492.9,1,47.2,109.6,1\n832,-1,1221.1,29.2,62.5,119.3,1\n832,-1,686.9,205.8,79.1,113.8,1\n832,-1,791.1,136.3,69.1,177.7,1\n832,-1,272.5,569.8,81.9,244.9,1\n832,-1,1640.7,7.4,59.6,157.7,1\n832,-1,558.8,114.9,61.1,175.9,1\n832,-1,1034.9,541.1,88.2,236.2,1\n832,-1,1722.9,452.7,75.5,214.4,1\n832,-1,1475.7,48.1,58.3,155.2,1\n832,-1,1575.6,589.5,101.8,235.2,1\n832,-1,752.3,71.8,56.4,163.5,1\n832,-1,292.8,162.1,68.2,200.5,1\n832,-1,358.2,274.1,86.1,182.4,1\n832,-1,1423,40.7,49.2,155.3,1\n832,-1,955.6,562.1,71.7,234.9,1\n832,-1,239.4,134.5,51,161.8,1\n832,-1,474.8,124.4,60,179.8,1\n832,-1,437.7,259.8,55.7,195.8,1\n832,-1,422.8,122.8,56.4,175.9,1\n832,-1,253.8,1,53.2,121.5,1\n832,-1,354,169.1,39.6,175.2,0.71\n767,-1,1221.5,29.4,62,119.3,1\n767,-1,687.2,205.1,78.4,115.2,1\n767,-1,543.9,116.3,65.9,174.6,1\n767,-1,781.8,134,64.8,177.4,1\n767,-1,1722.1,452.8,76.7,214,1\n767,-1,1574.8,590.5,101,235,1\n767,-1,298.4,472.2,78.1,227.5,1\n767,-1,273.6,177.1,56.7,194.5,1\n767,-1,396.6,211.4,69.3,174.1,1\n767,-1,1452.8,79.7,54.8,168.9,1\n767,-1,328.8,191.8,57.6,178.4,1\n767,-1,456.1,197.3,52.7,187.9,1\n767,-1,1493.5,17.6,60.4,147.1,1\n767,-1,751.2,79.2,51.3,155.8,1\n767,-1,1074.2,678.1,81.4,254.8,1\n767,-1,256.5,1.2,50.9,122.3,1\n767,-1,233.9,136,50.3,161.8,1\n767,-1,463,70.4,60.5,169.4,1\n767,-1,520.1,570.1,92.8,248,1\n767,-1,1574.6,82.3,64.3,174.7,1\n767,-1,1138.4,653.4,95.1,261.9,1\n767,-1,405.1,70,57.1,168.6,0.999\n767,-1,358.4,109.8,53.3,174.3,0.999\n917,-1,1221.9,29.6,61.8,119.6,1\n917,-1,686.5,206,79.9,113.1,1\n917,-1,794.2,141.4,75.6,170.8,1\n917,-1,1115.8,32.6,61.6,167.5,1\n917,-1,1432.8,3.8,47.3,133.1,1\n917,-1,1476,107.2,62.5,157.2,1\n917,-1,462.7,203.9,68.4,188.3,1\n917,-1,557.4,117.2,58.4,171.5,1\n917,-1,1575.2,589.3,103.2,236.1,1\n917,-1,1606.5,66.9,53.3,162,1\n917,-1,1296.4,848.5,95.5,232.5,1\n917,-1,305.7,701.5,90.4,267.4,1\n917,-1,301,161.4,69.8,200.6,1\n917,-1,867.3,418.9,65,224.6,1\n917,-1,1721.6,452.4,78.2,215.2,1\n917,-1,751.8,75.5,54.9,157.9,1\n917,-1,327.3,371.9,83.5,188.6,1\n917,-1,1722.1,96,55.2,169.8,1\n917,-1,958.8,402.5,68.3,219.5,1\n917,-1,241.3,134,54.1,164.3,1\n917,-1,410.5,350.9,58,206.5,1\n917,-1,376.1,203.5,57.4,174.9,1\n917,-1,469.7,16.2,51.9,148.9,1\n917,-1,422.6,66.2,61.6,175.7,1\n917,-1,1747.6,680.1,95.8,241.5,1\n917,-1,1497.7,1.6,59.1,133,1\n917,-1,253.9,2,54.2,121.2,1\n917,-1,313.3,1.3,48.1,133.2,1\n143,-1,1221.7,30.7,61.7,118.2,1\n143,-1,1039,135.9,83.3,173.3,1\n143,-1,356.9,102.5,54.9,181.8,1\n143,-1,1488.3,68.5,55.7,150,1\n143,-1,704.2,1,56.1,158.6,1\n143,-1,109,351.6,49.2,185,1\n143,-1,420.9,263.7,76.1,222.2,1\n143,-1,287.9,126.5,55.1,168.8,1\n143,-1,1303.8,176.3,58,183.8,1\n143,-1,393.5,735.5,95.1,261.6,1\n143,-1,1722.2,457.4,77,210,1\n143,-1,537.5,64.4,51.2,164.3,1\n143,-1,1182.4,168.4,52.1,164.1,1\n143,-1,1358.2,566.6,105.8,244.2,1\n143,-1,686.6,206.3,79.7,116.2,1\n143,-1,871.1,210.5,74,187.1,1\n143,-1,218.8,127.8,51.9,162.2,1\n143,-1,811.9,248.6,55.7,173,1\n143,-1,532,263.7,57.9,200.7,1\n143,-1,480.6,185.5,61.8,177.3,1\n143,-1,384.2,2.1,45.7,134.4,1\n143,-1,99.9,550.3,84.2,243.8,1\n143,-1,470.2,37.6,52.8,162.8,1\n143,-1,157.1,629.5,77.8,222,1\n143,-1,766,234.4,62.3,185.5,1\n143,-1,580.7,250.5,57.9,194.1,1\n143,-1,1059.1,920.7,78.5,160.3,0.976\n343,-1,1221.6,30.8,62.2,119.6,1\n343,-1,686.8,205.7,79.3,114.3,1\n343,-1,1733.7,75.1,55.8,158.3,1\n343,-1,1827.2,493.7,70.8,203.9,1\n343,-1,287.1,132.1,53.4,171.8,1\n343,-1,446.5,102.9,71.9,197.7,1\n343,-1,1445,1,56.5,124.2,1\n343,-1,1602.9,1.6,54,131.8,1\n343,-1,430.7,573.3,103.5,253,1\n343,-1,1720.6,458.1,78.7,212.5,1\n343,-1,108,348.9,52.3,190.4,1\n343,-1,208.8,141.4,57.3,162.8,1\n343,-1,796.3,153.9,59.6,169.4,1\n343,-1,519.5,99.3,40.5,169.7,1\n343,-1,980.1,408.3,66.1,188.7,1\n343,-1,971.1,62.4,63.3,174.8,1\n343,-1,364.5,106.5,56.4,180.8,1\n343,-1,1036.5,68.4,53.4,163.8,1\n343,-1,1547.4,615.8,85.4,242.7,1\n343,-1,842.7,450.5,84.2,227.6,1\n343,-1,928.1,18.9,62.3,167.9,1\n343,-1,901.8,462.7,65.2,205.6,1\n343,-1,429.1,359.7,79.6,210.1,1\n343,-1,230.5,339.3,56.5,185.3,1\n343,-1,714.1,95.5,58.2,171.9,0.999\n343,-1,771.7,96,39.6,157,0.996\n343,-1,501.6,498.2,63.5,222.5,0.993\n343,-1,402.6,475.7,80.1,250.1,0.991\n343,-1,947.7,923,74.8,158,0.981\n343,-1,1883.3,63.4,37.7,171.2,0.665\n343,-1,422.6,55.7,52.2,161.7,0.608\n343,-1,846.2,4.2,48.3,85.8,0.064\n287,-1,1221.6,31.5,63.3,120,1\n287,-1,687,207.4,78.3,112.7,1\n287,-1,353.2,111,54.1,176,1\n287,-1,456.2,143.8,71,202.6,1\n287,-1,939.9,79.6,63.3,176.5,1\n287,-1,287.4,130.7,55.1,173.6,1\n287,-1,1467.4,29.4,56.8,149,1\n287,-1,108,351.1,52.2,189.1,1\n287,-1,1720.6,459.4,77.5,209.9,1\n287,-1,1095.2,92.6,51.1,163.8,1\n287,-1,1663.6,32.7,57.8,153,1\n287,-1,400.4,21.6,56.5,165.7,1\n287,-1,796.8,148.9,59.6,174.8,1\n287,-1,222.5,585.2,88.9,245.5,1\n287,-1,1019.7,95.6,60.9,184.7,1\n287,-1,704.2,1,54.6,157.5,1\n287,-1,233.5,415.3,61.6,193.5,1\n287,-1,387.9,448.7,84.9,225.6,1\n287,-1,1447.2,585.5,92.7,238.3,1\n287,-1,222.3,130.2,53.8,163.4,1\n287,-1,515.5,107.9,51.8,176.8,1\n287,-1,285.9,805,96.8,276,1\n287,-1,546.3,428.7,69.4,209.7,1\n287,-1,749,104,47.6,166,1\n287,-1,882.8,395.7,79.6,203.7,1\n287,-1,811.7,383.2,93.1,218.6,1\n287,-1,835.7,106.9,54.6,161.9,1\n287,-1,464.2,409.9,66.2,231,1\n287,-1,778,350.2,64.7,179.1,0.999\n287,-1,942.4,920.8,83.5,160.2,0.846\n15,-1,687.2,206.4,78.9,113.4,1\n15,-1,497.8,149.9,106.6,189.5,1\n15,-1,1487,69.7,55.7,148.9,1\n15,-1,1361.8,566.6,104.9,246,1\n15,-1,1725.3,457.5,76.7,209.6,1\n15,-1,704.4,2.1,56.3,156.6,1\n15,-1,1203.6,34.7,73.2,118.1,1\n15,-1,795.3,149.4,60.7,174.3,1\n15,-1,1038.5,207.9,78,177.2,1\n15,-1,380,392.3,86.2,236.3,1\n15,-1,102.3,548,85.3,249.8,1\n15,-1,355.5,105.4,54.6,178.2,1\n15,-1,217.8,123.8,48.1,169.3,1\n15,-1,1807.7,225.1,64.3,182.5,1\n15,-1,286,121.9,54.2,174.3,1\n15,-1,1618.9,250.3,62.7,186.3,1\n15,-1,876.9,130.6,61.2,182.8,1\n15,-1,209.2,382.3,64.6,194.4,1\n15,-1,417.2,88.6,53.2,162.7,1\n15,-1,461,70.9,51.6,172,1\n15,-1,1434.5,240.2,50.8,174.2,0.999\n15,-1,1396.6,188.3,50.2,175.9,0.998\n15,-1,1040,1,48.4,66.9,0.574\n15,-1,1,849.3,42.8,231.7,0.431\n15,-1,252.5,368.2,46.7,188.4,0.179\n15,-1,916,138,47.2,164.4,0.059\n9,-1,687.2,205.7,79,114.2,1\n9,-1,1057.3,209,89.4,181.2,1\n9,-1,1486.4,70,56,148.3,1\n9,-1,504.2,144.3,105.6,190.8,1\n9,-1,1362.2,567.9,105.1,243.6,1\n9,-1,704.4,1.2,56.9,157.4,1\n9,-1,1199.9,38.1,75,113.4,1\n9,-1,1801.2,209.3,64.6,187.9,1\n9,-1,377.6,402.5,84.5,241,1\n9,-1,1726,457.5,77.6,207.4,1\n9,-1,102.5,546.9,84.9,251.3,1\n9,-1,795.9,147.7,61.7,174.9,1\n9,-1,218.4,128.3,49.4,165.8,1\n9,-1,355.9,107,53.2,176.3,1\n9,-1,284.8,119.5,55.8,177.2,1\n9,-1,877.5,128.7,63.8,178.1,1\n9,-1,216,386.9,65.3,202.6,1\n9,-1,415.4,89.7,55.7,168.9,1\n9,-1,462.3,72.9,51.4,172.8,1\n9,-1,1628.5,257.7,60.7,183.5,1\n9,-1,1038.3,1,47.7,80.2,0.999\n9,-1,1441.8,243.7,50.3,171.1,0.999\n9,-1,1408.3,188,46.1,179.8,0.982\n528,-1,1221.5,30.3,62.3,120.4,1\n528,-1,1486.1,1,58.9,142.6,1\n528,-1,687.3,206.4,77.4,114.4,1\n528,-1,388,198,62.5,185.9,1\n528,-1,1718.7,458.1,82,208.7,1\n528,-1,993.1,1.3,56,114.8,1\n528,-1,1671.3,15.8,52.7,161.2,1\n528,-1,167.5,319.4,66.7,193.5,1\n528,-1,781.9,145.4,55.4,173.8,1\n528,-1,288,124.8,53.5,172.6,1\n528,-1,465.8,118.5,62.7,189.5,1\n528,-1,883.5,1,53.4,116.5,1\n528,-1,191.9,783,94,289.8,1\n528,-1,1701.9,302.6,80.4,212.9,1\n528,-1,928.7,1,56.8,112.5,1\n528,-1,1765.4,215.1,67.3,169.5,1\n528,-1,1606.8,3.1,57,171.8,1\n528,-1,268.2,832.5,79.7,248.5,1\n528,-1,1577,590.1,66.5,246.8,1\n528,-1,218.4,135.6,60.3,159.7,1\n528,-1,817.9,600.6,73.7,259.2,1\n528,-1,516.2,101,58.9,181,1\n528,-1,451.1,2.6,70.2,165.8,1\n528,-1,958.3,725.6,120.6,252.3,1\n528,-1,1779.9,654.1,65.7,220.2,1\n528,-1,401,34.9,47.8,160.9,0.999\n528,-1,1594.4,287.3,58.5,193.5,0.999\n528,-1,750.4,88,56,169,0.995\n528,-1,1869.7,221.1,51.3,204.3,0.969\n528,-1,1047.6,748,80.4,240.5,0.498\n528,-1,1045,939.8,70.2,141.2,0.165\n528,-1,361,169.8,48.4,152.7,0.066\n362,-1,1222,30.7,61,119.4,1\n362,-1,687.1,206.3,78.9,113,1\n362,-1,1433.9,3.6,50.3,101.9,1\n362,-1,1621,1,68,160.5,1\n362,-1,1025.7,59,54.8,166.6,1\n362,-1,1037.7,433.9,69.3,195.2,1\n362,-1,1841.1,61.6,58.2,167.5,1\n362,-1,207.9,141.6,59.6,161,1\n362,-1,1755.2,92.7,61.3,161.5,1\n362,-1,430.5,326.5,82.6,211.9,1\n362,-1,512.4,92.5,46.7,164.7,1\n362,-1,441.9,84.8,72.6,201.3,1\n362,-1,1719.7,456.3,79.3,212.8,1\n362,-1,835.3,1,53.5,102.8,1\n362,-1,1816.3,468.5,68.5,206.2,1\n362,-1,109.9,351.8,52.1,187.4,1\n362,-1,796,149.9,60.4,174.6,1\n362,-1,958,53,61,171.8,1\n362,-1,286.7,129.8,54.5,171,1\n362,-1,378.5,512.7,82.8,239.6,1\n362,-1,220,318.6,55.1,188,1\n362,-1,362.6,110.8,54.8,176,1\n362,-1,509.4,572.9,104.6,246.1,1\n362,-1,1571.6,626.3,84.8,250.3,1\n362,-1,907.5,483,86,211.7,1\n362,-1,841.7,474.4,87.4,225.5,0.999\n362,-1,925,1.5,62.9,158.8,0.998\n362,-1,764.2,96.2,41.6,143.8,0.997\n362,-1,383.4,1,39.5,85.4,0.994\n362,-1,476.1,526.7,69.4,240.7,0.988\n362,-1,955.5,922,80,159,0.949\n362,-1,497.2,932.6,98.5,148.4,0.544\n535,-1,1222,30.3,61.7,120.1,1\n535,-1,1486.2,1.3,59,141.5,1\n535,-1,687.7,206.1,77.4,114.6,1\n535,-1,387.6,204.8,61.5,186.8,1\n535,-1,780.6,144.4,59.3,175,1\n535,-1,288.5,127.6,54.4,168.5,1\n535,-1,992.1,1,55,109.3,1\n535,-1,1717.1,457.1,83.1,210.1,1\n535,-1,170.9,311.3,69.7,194.1,1\n535,-1,1692.6,301.8,72.1,197.8,1\n535,-1,462.5,115.4,62.8,181.4,1\n535,-1,1768.6,223,74.1,173.9,1\n535,-1,1661.9,7.1,53.7,168.2,1\n535,-1,805.4,603.4,78.1,254,1\n535,-1,880.4,1.9,52.3,113.3,1\n535,-1,1584.9,590.6,67.7,243.6,1\n535,-1,1602,1,55.8,168.5,1\n535,-1,518.5,103.1,61.4,176.8,1\n535,-1,264,836.9,80.2,244.1,1\n535,-1,217.8,137.8,62.3,160.7,1\n535,-1,928.4,1,57,109.1,1\n535,-1,405.2,42.3,48.8,155.4,1\n535,-1,448.8,1,68.8,168.5,1\n535,-1,967.6,745.4,125.7,254.4,0.999\n535,-1,191.6,804,99.3,270.8,0.999\n535,-1,1588.4,285.8,54.3,195.1,0.419\n535,-1,1874.2,228.4,46.8,208.1,0.268\n535,-1,1060,763.3,86.9,235.5,0.102\n5,-1,687.2,206.2,78.9,113.7,1\n5,-1,1074.3,213.8,83.5,180.7,1\n5,-1,1487.1,69.5,55.7,147.6,1\n5,-1,704.5,1.1,55.9,157.2,1\n5,-1,1362.4,567.8,105,244.7,1\n5,-1,1729.6,456,78.4,215.9,1\n5,-1,507.9,140.9,99.7,188.6,1\n5,-1,102,545.4,85.5,255.3,1\n5,-1,795.2,148.2,62.3,175.1,1\n5,-1,1198.7,38.4,73,113.3,1\n5,-1,1795.9,203.5,67,188.2,1\n5,-1,285.6,124.4,55.8,170.4,1\n5,-1,872.3,127.5,64.7,178,1\n5,-1,372.8,407.8,86.2,238.8,1\n5,-1,220.3,129.6,49.1,162.7,1\n5,-1,355.5,104.8,53.9,178.8,1\n5,-1,415.6,91.3,55.5,170.2,1\n5,-1,1630.8,259.6,64.4,188.2,1\n5,-1,1039.6,1.9,48.2,82.5,1\n5,-1,222.5,389.8,65.1,206.6,1\n5,-1,463.2,76.8,51.8,172.9,1\n5,-1,1444.5,248.8,54.1,173.4,1\n5,-1,1035,136,79,185.3,1\n5,-1,257.4,366.2,61.5,221.2,0.922\n5,-1,1413.8,206.6,46.6,159.6,0.094\n418,-1,1222,30,61.8,118.6,1\n418,-1,686.3,205.2,79.4,114.8,1\n418,-1,1663.6,67.5,73.3,173.7,1\n418,-1,551.7,72.1,54.1,163.2,1\n418,-1,453,245.3,81.1,204.8,1\n418,-1,944.8,14.2,61.2,167.4,1\n418,-1,359.2,111.2,53.4,173.8,1\n418,-1,1719.3,460.1,78.4,204.1,1\n418,-1,109.9,347.3,52.6,190.7,1\n418,-1,289.8,599.3,89.4,247.8,1\n418,-1,1580.2,615.3,102.4,242.9,1\n418,-1,287.2,130.1,54.5,165.2,1\n418,-1,211.5,258.9,54.5,180.7,1\n418,-1,1007.1,29.2,54.4,160.7,1\n418,-1,1234.8,503.3,82.1,205.2,1\n418,-1,836.3,1.3,51.1,131.6,1\n418,-1,395.5,625.7,78.7,234.2,1\n418,-1,796.5,149.3,56.7,173.7,1\n418,-1,859.3,541.9,108.2,245.6,1\n418,-1,1767.9,134.2,52.9,159.7,1\n418,-1,219,141.6,72.9,157.8,1\n418,-1,357.9,1,67,119.7,1\n418,-1,718.6,557.7,83.3,245.7,1\n418,-1,424.8,102,54.4,165.4,1\n418,-1,1827.1,72.2,77.6,182.2,1\n418,-1,458,63.7,69.8,196.4,1\n418,-1,717.7,1,51.1,127.2,1\n418,-1,713.4,90.2,64,175,0.999\n418,-1,424.6,1,44.7,121.8,0.999\n418,-1,939.1,557.3,79.4,221.7,0.997\n418,-1,986.1,927.7,79.8,153.3,0.165\n918,-1,1221.8,29.9,61.5,119,1\n918,-1,686.4,206.3,80.1,112.8,1\n918,-1,794.3,140.8,75.1,172.2,1\n918,-1,1117,33.8,60.4,166.8,1\n918,-1,1475.9,107.1,62.9,157.6,1\n918,-1,460.1,201.9,69.5,190.8,1\n918,-1,1432.9,4.1,46.2,131.6,1\n918,-1,1574.7,589.8,103.4,235.6,1\n918,-1,558.2,117,57.3,170.9,1\n918,-1,307.2,703.6,89.6,263.9,1\n918,-1,1292.4,844.9,97.7,236.1,1\n918,-1,1722.3,453.2,77.1,214.1,1\n918,-1,1607.8,67.5,54.1,165,1\n918,-1,866.2,417.3,66.3,222.7,1\n918,-1,327.1,371.7,82.1,189.5,1\n918,-1,301.7,161.8,68.8,199,1\n918,-1,1723.1,94.9,55.5,172.1,1\n918,-1,751.9,75.2,55.4,157.9,1\n918,-1,955.9,398.6,70.7,221.6,1\n918,-1,409.5,350.7,59,208.4,1\n918,-1,240.6,133.7,54.3,165.7,1\n918,-1,375.7,205,57.9,175,1\n918,-1,1748,680.4,95.6,239.4,1\n918,-1,1495.7,1.5,60.3,132.1,1\n918,-1,469.8,18,51.9,147.9,1\n918,-1,423.5,65.8,62.3,176.4,1\n918,-1,253.8,1.9,54,122,1\n918,-1,313.4,1.8,49.5,132.1,0.999\n336,-1,1221.2,30.4,62.4,119.6,1\n336,-1,686.8,206.7,78.9,113,1\n336,-1,1448.2,1,56.5,127.7,1\n336,-1,400.1,579.7,103.9,248.1,1\n336,-1,1592.1,1.4,56.9,125.5,1\n336,-1,448.9,106.5,73.1,196,1\n336,-1,1719.4,457.4,79.8,212.6,1\n336,-1,108.9,348.9,51.8,190.5,1\n336,-1,1725,70.9,58.5,153.3,1\n336,-1,285.5,131.1,54.5,173.1,1\n336,-1,899.7,451.3,71,211.1,1\n336,-1,232.8,350.7,58.1,192.1,1\n336,-1,979.5,66,63.2,180,1\n336,-1,363,107.2,57.5,177.3,1\n336,-1,796,147.7,60.3,175.7,1\n336,-1,926.7,24.3,65.8,175.6,1\n336,-1,956,395.6,66.7,193.7,1\n336,-1,1830.4,501.1,69.2,208.9,1\n336,-1,1537.9,612,82.9,246.4,1\n336,-1,1039.9,73.8,52,162.2,1\n336,-1,212.8,140,54.4,161.3,1\n336,-1,521.3,98.9,39.2,169.5,1\n336,-1,839.1,442.6,85.8,220.1,1\n336,-1,718.6,95,54.3,169,1\n336,-1,506.7,492.7,68.4,227.7,1\n336,-1,419.1,49.5,57.3,170.2,0.999\n336,-1,775.3,97.1,41.5,157.5,0.997\n336,-1,941.4,918,70.4,163,0.983\n336,-1,416.5,368.1,80.1,204.5,0.593\n336,-1,429.9,868.4,103.9,212.6,0.367\n154,-1,1221.4,30.7,62.9,117.7,1\n154,-1,356.4,103.9,53.6,180.4,1\n154,-1,1488,67.9,55.9,151.7,1\n154,-1,1721.3,456.3,78.2,211.2,1\n154,-1,704.5,1,56.1,157.8,1\n154,-1,109.1,351.7,49.2,185.9,1\n154,-1,451.1,34.4,53.5,164.3,1\n154,-1,215.4,125.6,53.9,167.5,1\n154,-1,288,123.4,55.3,172.9,1\n154,-1,1158.5,162.6,47.4,161.2,1\n154,-1,420.7,253.1,78.1,222.9,1\n154,-1,1358.7,566.9,104.6,244.9,1\n154,-1,1011.4,131.1,62.4,171.2,1\n154,-1,687.3,206.7,78.9,113.7,1\n154,-1,538.3,63.7,51.3,167.9,1\n154,-1,404.3,708,93.5,267.8,1\n154,-1,1269.3,175.7,66.3,173.3,1\n154,-1,101.4,544.3,85.4,256.4,1\n154,-1,192.9,613.8,65.3,213.3,1\n154,-1,531.3,277.3,59.3,200.6,1\n154,-1,593.3,263.5,60.9,194.4,1\n154,-1,804.3,259.9,61.2,181.9,1\n154,-1,860,202.9,70,194.9,1\n154,-1,755.7,250.9,70.7,187.1,1\n154,-1,489.9,198.5,60.6,167.3,1\n154,-1,386.2,2.4,45.6,121.9,1\n154,-1,793.5,145.4,63.6,183.9,0.993\n154,-1,1041.5,912.9,72.2,168.1,0.992\n683,-1,1221.7,30,61.8,121,1\n683,-1,686.8,206.8,80.3,113.2,1\n683,-1,1480.6,4.9,60.7,146.9,1\n683,-1,364.2,530.7,111.8,250.9,1\n683,-1,1489.3,156,53,170,1\n683,-1,486.3,130.6,45.4,177.3,1\n683,-1,1708.2,456.9,101.4,208.9,1\n683,-1,1618.1,151.4,73.1,190.8,1\n683,-1,312.9,357.5,70.1,214.7,1\n683,-1,804.2,145.2,57.9,173.7,1\n683,-1,562.9,112.9,50.5,177.6,1\n683,-1,1070.4,1,79.9,100.1,1\n683,-1,1574.4,590,96.7,234.3,1\n683,-1,361,114,49.8,171.3,1\n683,-1,417.2,141.2,67.7,163.1,1\n683,-1,750.6,79.3,49.2,158,1\n683,-1,1273.8,868.6,90.7,212.4,1\n683,-1,1361.9,848.5,95.4,232.5,1\n683,-1,404.6,14.4,56.4,160.6,1\n683,-1,238.3,205.1,64,199.2,1\n683,-1,293.6,220.4,58.4,176.2,1\n683,-1,481.5,37.5,47.8,144.5,1\n683,-1,833.8,924.6,74.9,156.4,0.955\n683,-1,225.3,133.4,48.3,163.4,0.148\n258,-1,1221.3,31.6,62,118.1,1\n258,-1,1622.5,11.8,58.9,148.5,1\n258,-1,686.8,206.1,80.1,114,1\n258,-1,1479.4,52.1,54,153.4,1\n258,-1,356.4,105,53.5,181.2,1\n258,-1,212.4,126.3,56.5,167,1\n258,-1,286.9,129.6,56.5,170,1\n258,-1,797.5,153.5,59.9,174.3,1\n258,-1,108,351.7,52,189.3,1\n258,-1,388.2,494.2,86.8,234.3,1\n258,-1,1720.6,458,78.1,210.5,1\n258,-1,452,160.2,75.8,212.6,1\n258,-1,1396,567.6,100.7,246.5,1\n258,-1,937.9,103.3,71.5,185.7,1\n258,-1,1140.9,104,51.3,168,1\n258,-1,704.5,1,54.5,157.1,1\n258,-1,1061.5,110.8,60.2,183.5,1\n258,-1,227.5,454.7,60.7,200.3,1\n258,-1,238.3,743.2,89.1,283.3,1\n258,-1,865.4,358.5,77.2,193.5,1\n258,-1,888.8,110.1,47.9,157.4,1\n258,-1,797.5,350,84.7,210.4,1\n258,-1,143,566.7,87.3,243.3,1\n258,-1,487.8,372.2,71,230.3,1\n258,-1,371,5.5,55.3,157,1\n258,-1,513.8,117.7,55.4,173.8,1\n258,-1,576.1,383.7,65.2,212.8,1\n258,-1,759.9,101,49.9,175.5,0.999\n258,-1,934.6,914.1,78.4,166.9,0.996\n451,-1,1221.5,30.7,62.4,119,1\n451,-1,936.6,1,59.1,156.7,1\n451,-1,446.4,211.1,72.9,196.1,1\n451,-1,687.4,206.2,77.9,113.6,1\n451,-1,358.2,109.1,54.3,177.2,1\n451,-1,1008,11.8,53.2,155.4,1\n451,-1,1713.7,454.7,86.4,211.8,1\n451,-1,111.4,352.4,54.7,187.4,1\n451,-1,1385.1,549.3,100.2,199.3,1\n451,-1,287.8,125.6,53.6,170.3,1\n451,-1,1553.3,610.5,75.9,245.1,1\n451,-1,799.8,151.6,49.9,170.7,1\n451,-1,863.2,2,53.9,138.5,1\n451,-1,524.9,75.8,55.6,171.8,1\n451,-1,346.9,683.2,73.1,245.6,1\n451,-1,256.3,225.3,50,177.7,1\n451,-1,1666.3,361,66.3,195,1\n451,-1,790.6,576.5,85.7,247.7,1\n451,-1,1838.3,389.5,82.7,204.2,1\n451,-1,251.9,652.1,92.5,257,1\n451,-1,886.2,595.7,117.1,246.8,1\n451,-1,1747.4,156.8,55.5,166.9,1\n451,-1,754.1,89.5,51,153,1\n451,-1,219,137.6,59.1,158.1,1\n451,-1,426.8,126.3,58.2,162.5,1\n451,-1,421.4,1,44.4,140.5,0.999\n451,-1,1508.5,1,56.1,104.4,0.999\n451,-1,360.1,5.2,62.6,132.7,0.998\n451,-1,967.3,609.1,82.6,224,0.998\n451,-1,1022.2,920.5,84.8,160.5,0.995\n451,-1,733.4,3,48.2,87.9,0.991\n451,-1,1710.6,113,62.7,174.4,0.988\n451,-1,716.1,90.9,50.3,169.7,0.978\n451,-1,447.1,37.6,66.7,205.4,0.699\n348,-1,1221.8,31,61.1,119,1\n348,-1,687.1,206.9,78.8,113.5,1\n348,-1,1737.2,77.2,59.5,155.4,1\n348,-1,1608.6,1,57.4,137.6,1\n348,-1,445.1,95.8,72.6,201.9,1\n348,-1,286.9,131.4,54.5,172,1\n348,-1,464.2,574.4,91.1,245.8,1\n348,-1,997.2,413.2,63.8,191.8,1\n348,-1,434.7,348,74.3,210.1,1\n348,-1,1033.2,64.4,54.5,167.6,1\n348,-1,109.5,347.7,51.7,191.6,1\n348,-1,1719.5,457.1,78.4,212.8,1\n348,-1,1551.6,617.3,87.3,240.7,1\n348,-1,796.7,153.8,58.9,170.6,1\n348,-1,968.6,56.2,62.5,176.6,1\n348,-1,207.8,140,58.7,162.2,1\n348,-1,1829.2,484,68.6,209.2,1\n348,-1,1444.2,2.1,52.6,111.9,1\n348,-1,365,107.2,55.2,179.8,1\n348,-1,226.6,336.7,57.5,190.2,1\n348,-1,519,97.2,39.2,167.9,1\n348,-1,901.6,468.4,72.7,205.1,1\n348,-1,394.3,492.5,82.4,230.7,1\n348,-1,926.4,18.2,60.1,163.6,1\n348,-1,842.1,453.8,86.1,223.8,1\n348,-1,845.6,1,46.4,95.3,0.999\n348,-1,768.8,94.1,40.9,156,0.999\n348,-1,710.6,95.8,58.6,171.3,0.998\n348,-1,1874.8,66.2,46.2,165,0.995\n348,-1,953.7,930.9,74.9,150.1,0.848\n986,-1,686.5,206.2,79.9,113.3,1\n986,-1,1222.1,30.1,61.3,119.9,1\n986,-1,793.1,139.4,73.2,172.8,1\n986,-1,405.8,264.8,70.9,200.6,1\n986,-1,1187.4,121.4,55.7,162.9,1\n986,-1,496.8,250.3,67.1,189.8,1\n986,-1,1574.8,590,104.8,236.3,1\n986,-1,1469.8,168.7,66.4,167.8,1\n986,-1,1790.5,178.1,71.1,184.2,1\n986,-1,839.1,315,71.1,207.1,1\n986,-1,303.2,452.1,81.8,204.5,1\n986,-1,333,839.2,93.1,241.8,1\n986,-1,1719.3,455.7,79.9,210.6,1\n986,-1,751.2,71.9,55.4,163.7,1\n986,-1,230.5,136,55.5,165.9,1\n986,-1,1669.8,143.8,54.3,167.7,1\n986,-1,1190.6,669.3,90.3,264.6,1\n986,-1,545.7,118.2,56.3,168.6,1\n986,-1,289.6,126,51.8,171.2,1\n986,-1,316.8,262.4,64.2,199.7,1\n986,-1,390.6,437.6,65.6,214.4,1\n986,-1,921.7,304.3,68.3,205.8,1\n986,-1,1740.3,673.8,93.1,250,1\n986,-1,1450,1,55.4,92,1\n986,-1,444.9,66.4,57.5,176.3,1\n986,-1,315.5,2.1,45.4,129.2,1\n986,-1,499.1,72.5,51.7,153.3,1\n986,-1,1387.3,2.5,44.5,90.4,1\n986,-1,371.6,165,64.6,194.8,0.999\n986,-1,382.5,1,53,134.8,0.999\n552,-1,1221.2,30.3,62.4,119.4,1\n552,-1,687.1,205.8,78.3,115,1\n552,-1,1490.5,3.8,58.9,143.7,1\n552,-1,1794.8,231.4,73.4,186.3,1\n552,-1,381.1,221.6,64.2,192.7,1\n552,-1,786.6,143.7,65.5,176.8,1\n552,-1,1661.5,283.6,89.9,208.1,1\n552,-1,1716,455.9,84.6,209.9,1\n552,-1,533,109.9,61.3,176.6,1\n552,-1,873.4,1,54.2,109.3,1\n552,-1,987.3,2.7,51.7,97.9,1\n552,-1,761.1,597.3,97.2,255.4,1\n552,-1,189.8,299.5,66,194.5,1\n552,-1,289.3,123.4,53.1,173.2,1\n552,-1,1658.9,1.5,55,154.2,1\n552,-1,246.2,878.9,81,202.1,1\n552,-1,220.1,137,57.7,158.2,1\n552,-1,1591.9,1.3,55.1,152.5,1\n552,-1,1595,585.3,71.3,242.3,1\n552,-1,456.8,96.1,64.5,181.6,1\n552,-1,136.3,269.3,55.5,217.7,1\n552,-1,414.1,137.4,49.3,163.2,1\n552,-1,752.7,81.5,48.3,153.6,1\n552,-1,359,111.8,54,170.4,1\n552,-1,1077.6,787.5,95.1,249.1,0.996\n552,-1,927.6,1.8,57.7,96.5,0.992\n552,-1,1007.8,779,108.7,244.1,0.532\n552,-1,1026.1,946.8,79.9,134.2,0.059\n997,-1,1221.6,30.8,61.8,120.1,1\n997,-1,686.7,206.1,79.6,113.1,1\n997,-1,792.9,140.7,75.8,172.4,1\n997,-1,400.4,284.5,67.6,196.7,1\n997,-1,1473.8,180.3,63.3,160,1\n997,-1,1803.5,190.1,68.2,188.1,1\n997,-1,1196.2,132.2,63.6,176.6,1\n997,-1,504.1,265.5,62.9,184.6,1\n997,-1,231.4,135.8,54.6,167,1\n997,-1,1673.8,155.5,59.9,171.3,1\n997,-1,290.3,125,50.3,168.7,1\n997,-1,1576.2,590.1,102.5,235.8,1\n997,-1,1722.3,452.5,77.8,217.6,1\n997,-1,751.4,70.6,54.4,164.5,1\n997,-1,841.1,301.9,66.8,197.8,1\n997,-1,922.3,295.4,71.3,206.2,1\n997,-1,331.7,857.2,94.2,223.8,1\n997,-1,541.5,120,60.6,169.4,1\n997,-1,301.1,463.4,85.6,207.4,1\n997,-1,1176.3,646.5,89.7,263.4,1\n997,-1,312.6,276.1,66.2,199.9,1\n997,-1,1739.1,675.7,93.9,246.9,1\n997,-1,383.5,453.7,67.7,220.2,1\n997,-1,314.5,1,45.3,131.2,1\n997,-1,439.2,64.7,60.8,173.1,1\n997,-1,506.7,81.8,54.4,157.3,1\n997,-1,602.2,544.7,104.6,251.1,0.999\n997,-1,386.5,168,74,186.3,0.999\n997,-1,1438.6,3.2,53.8,76.7,0.453\n409,-1,1221.3,30.5,62.2,118.8,1\n409,-1,686.3,205,79.2,114.9,1\n409,-1,1650.9,57.2,66.7,168.6,1\n409,-1,358,105.2,54.2,180.2,1\n409,-1,458.7,263.5,76.7,204,1\n409,-1,1769.4,123.2,65.1,172.2,1\n409,-1,109.8,347.1,53.2,192.9,1\n409,-1,1719.2,455.6,80.5,208.5,1\n409,-1,412.6,606.7,75,239.2,1\n409,-1,551.7,69.6,57.7,169.9,1\n409,-1,946,16.7,62.1,172,1\n409,-1,795.1,150.2,59.7,173.1,1\n409,-1,285.5,129.8,55.1,165.9,1\n409,-1,1586,615.5,100.9,249.1,1\n409,-1,830.8,1,56.8,130.3,1\n409,-1,1004.7,31.2,56.1,161.6,1\n409,-1,220.8,141.8,65,156,1\n409,-1,204.6,269,55.4,181.7,1\n409,-1,465.8,69.7,66.4,191,1\n409,-1,302.1,581.2,82.2,256.9,1\n409,-1,361.3,1,64.3,116.7,1\n409,-1,1206,492.7,61,204,1\n409,-1,425.6,90.8,50.3,173.1,1\n409,-1,697.9,558.7,88.6,239.2,1\n409,-1,860.1,528.6,97.6,240.2,1\n409,-1,930.7,546.6,80.8,219.9,1\n409,-1,718.4,1,50.7,135.3,1\n409,-1,710.9,92.7,62.3,168.1,1\n409,-1,1870.5,66,50.5,181.3,0.996\n409,-1,426.8,1,43,112.4,0.987\n409,-1,978.5,920.8,84.2,160.2,0.816\n974,-1,686.1,206.4,80.2,112.8,1\n974,-1,793.5,140.8,73.4,171.9,1\n974,-1,1221.9,31,61.3,120.1,1\n974,-1,1776.2,165.7,68.1,180.3,1\n974,-1,1163.5,106.4,62.6,166.3,1\n974,-1,491.3,240.9,68.9,189.8,1\n974,-1,1471.5,152.9,66.6,165.6,1\n974,-1,412,255.8,72,190.9,1\n974,-1,305.8,433.4,87.4,196.8,1\n974,-1,1576.2,589.8,101.3,234.9,1\n974,-1,1654.1,126.9,58.8,171.9,1\n974,-1,928.8,322.1,67.6,212.8,1\n974,-1,229.9,137.7,55.8,162.8,1\n974,-1,332.8,807.5,94,273.5,1\n974,-1,846.3,336.9,65.6,206.9,1\n974,-1,1721.2,454.3,78.3,212.6,1\n974,-1,328.8,249.3,62,204,1\n974,-1,751.9,72.1,55.3,163.3,1\n974,-1,391.5,425.1,68.2,218.5,1\n974,-1,550.7,118.4,52.2,169.4,1\n974,-1,1738.9,673.6,95.7,250.9,1\n974,-1,447.1,64.8,55.8,181.7,1\n974,-1,1396.2,2.5,45.7,95.9,1\n974,-1,1453.9,1,60.6,101.8,1\n974,-1,1203.9,704.9,92.8,271.7,1\n974,-1,314.2,1,46,131,1\n974,-1,290,128.4,54.2,171.5,1\n974,-1,487,61.2,55,156,0.999\n974,-1,380.9,1.2,54.7,126.3,0.999\n974,-1,343.2,164.6,63.9,181.8,0.998\n50,-1,1221.3,28.9,63.8,117.1,1\n50,-1,686.5,206.2,78.9,114,1\n50,-1,397.8,355.7,85,234.6,1\n50,-1,1487.6,70.4,55,149.2,1\n50,-1,489.9,176.6,89.4,197.2,1\n50,-1,1362.1,566.8,104.9,245.4,1\n50,-1,704.9,1,55.5,156.6,1\n50,-1,355.2,107,54.2,177,1\n50,-1,1722.1,456.5,76.6,210.6,1\n50,-1,164.8,364.1,64,191.5,1\n50,-1,213.7,125.4,49.3,167.2,1\n50,-1,794.2,148.1,62.5,177.4,1\n50,-1,893.6,195,60.8,181.5,1\n50,-1,1006.4,168.2,75.9,187.6,1\n50,-1,102.3,547.5,85.7,251.6,1\n50,-1,283.5,125.7,54.7,171,1\n50,-1,422.3,98.1,56.1,157.2,1\n50,-1,4.8,782.7,68.9,244.2,1\n50,-1,1324.1,177.5,55.7,169.5,1\n50,-1,484.4,46.7,55.4,155.8,1\n50,-1,1855.7,275.1,65.3,192.1,1\n50,-1,1483.7,211.7,60.6,205.6,1\n50,-1,541,63.8,44.7,169.5,1\n50,-1,1377.4,220.7,41.6,163.5,0.999\n50,-1,859.4,154.9,62.2,184.1,0.994\n69,-1,1221.9,31.1,61.3,116.8,1\n69,-1,406.4,334,86.8,230.9,1\n69,-1,686.5,206.9,79.8,113.2,1\n69,-1,1487.4,69.6,54.7,147.8,1\n69,-1,1361.9,566.2,104.1,245.4,1\n69,-1,355.7,107.4,56.2,176.7,1\n69,-1,705.3,1,55.3,159.4,1\n69,-1,1722.1,455.1,77.5,212.8,1\n69,-1,1273.2,177.1,59.4,163.7,1\n69,-1,140.2,355.6,57.9,196.9,1\n69,-1,799.5,194.5,74,175.6,1\n69,-1,102.7,547.1,86,252.3,1\n69,-1,210.7,129.2,51.5,165.5,1\n69,-1,493.6,193.8,75.8,196.4,1\n69,-1,992.7,185.3,68.9,179.2,1\n69,-1,287.1,125.9,53.8,170.3,1\n69,-1,1446.3,201.5,71.4,198.8,1\n69,-1,467.1,113.7,56.8,160.1,1\n69,-1,539.1,65.5,46.9,167.7,1\n69,-1,1347,207.1,39.9,162.1,1\n69,-1,889.3,188.7,55.7,162.6,1\n69,-1,10.5,745.3,70.4,238.8,1\n69,-1,435.9,25.8,52.1,159.8,1\n69,-1,383.5,32.9,53.3,163.8,1\n69,-1,257.6,89.9,56.8,182.6,0.966\n69,-1,387,910,104.2,171,0.955\n69,-1,859.5,177.8,42.6,158.5,0.115\n962,-1,686.1,206.1,80.2,113.7,1\n962,-1,1220.8,30.1,62.8,119.9,1\n962,-1,794.3,140.1,71.8,172.4,1\n962,-1,1768.1,154.7,68.3,172.5,1\n962,-1,926.1,339.9,76.3,217,1\n962,-1,1573.8,588.7,105.2,235.8,1\n962,-1,419,242.9,70.1,197.4,1\n962,-1,1472.8,149.8,65,161.1,1\n962,-1,1645.7,108.8,57.1,173.4,1\n962,-1,1721.3,453.5,77.7,214.6,1\n962,-1,751.8,70.7,55.4,164.8,1\n962,-1,1404.7,2.4,49,103.4,1\n962,-1,327.6,786.9,89.9,269.7,1\n962,-1,443.2,72.7,54.8,181.8,1\n962,-1,1221,733.7,93.2,267.4,1\n962,-1,847.7,352.2,68.5,206.4,1\n962,-1,229.2,137,55.6,166.9,1\n962,-1,1464.7,1,61.5,104.5,1\n962,-1,1153.8,84.2,59.8,170.7,1\n962,-1,334.8,242.3,64.8,193.6,1\n962,-1,392.1,413.8,66.7,214.2,1\n962,-1,486.7,231.5,64.8,180.6,1\n962,-1,549.8,118.5,56.1,172.6,1\n962,-1,318,417.7,80.1,202.2,1\n962,-1,1740.1,674.6,95.2,250.8,1\n962,-1,289.6,123,52.9,173.2,1\n962,-1,483.3,51.8,55.4,162.5,1\n962,-1,313.4,1,47.9,130.2,0.999\n962,-1,434.2,8.5,49.1,129.4,0.625\n962,-1,238.7,2.9,53.4,115.9,0.581\n177,-1,1221.6,31.1,61.8,117.6,1\n177,-1,108.3,350.5,50.1,187.6,1\n177,-1,355.6,104.2,55.1,179.4,1\n177,-1,1489.1,69.8,54.9,147.3,1\n177,-1,704,1,56.4,159.2,1\n177,-1,418.2,39.8,58.2,162.9,1\n177,-1,1358.8,568.2,103.7,242.5,1\n177,-1,212.6,125.6,54.7,167.1,1\n177,-1,1719.8,456.8,79.1,211.9,1\n177,-1,408.1,653.3,89.6,260.5,1\n177,-1,289,126.8,53.7,169.3,1\n177,-1,688,207.5,76.6,111.5,1\n177,-1,420.5,232.1,78.7,222.8,1\n177,-1,939.4,122.8,74.4,173,1\n177,-1,1,611.4,101.2,237.4,1\n177,-1,865.1,178.7,75.3,190.9,1\n177,-1,527.6,285.6,59.9,214.1,1\n177,-1,546.8,149.5,65.5,173.3,1\n177,-1,231.3,576.8,64.3,211.9,1\n177,-1,99.1,548.5,88.1,253.9,1\n177,-1,796.2,282.3,68.2,185.1,1\n177,-1,794.4,150.4,62.1,171.8,1\n177,-1,1213,158.1,57.1,180.7,1\n177,-1,742.9,266.6,70.8,202.9,1\n177,-1,1109.1,150,45.3,161.9,1\n177,-1,1257.8,158.8,50,162.9,0.999\n177,-1,1002.4,910.5,70.5,170.5,0.965\n177,-1,536.3,67.1,50.3,158.8,0.462\n359,-1,1222.2,31.1,60.4,118.3,1\n359,-1,687.6,207,77.9,112.3,1\n359,-1,1434.8,2,50.5,107.1,1\n359,-1,1618.8,1,71.7,159.5,1\n359,-1,1028.4,428.3,67,197.1,1\n359,-1,1029.4,60.6,53.8,167.1,1\n359,-1,1720.2,456,78.3,213.3,1\n359,-1,1752,87.4,62.1,158.8,1\n359,-1,426.9,330.8,83.6,212,1\n359,-1,208.7,140,57.5,160.2,1\n359,-1,287.1,130.7,54.2,171.1,1\n359,-1,961.1,54.5,63.9,172.8,1\n359,-1,1848.4,60.1,55.4,166,1\n359,-1,443.9,84.4,69.6,204.1,1\n359,-1,108.9,350.3,52.3,189.8,1\n359,-1,796.3,150.1,60.4,173.2,1\n359,-1,364.3,109.4,55,175.8,1\n359,-1,1820.2,474.5,67.2,202.1,1\n359,-1,513.7,91.3,45.2,164.1,1\n359,-1,1563.9,622.5,88.7,248,1\n359,-1,498.6,576.5,102.1,243.8,1\n359,-1,381,510.8,85.1,235.2,1\n359,-1,838.5,2.2,51.8,102.1,1\n359,-1,220.9,321.8,56.3,187.5,1\n359,-1,910.5,487.5,78,205.3,1\n359,-1,844.2,472.4,85.7,224.6,1\n359,-1,925.6,3.4,61.8,157.9,1\n359,-1,764.3,91.7,42.8,152.4,0.999\n359,-1,953.9,924.6,80.7,156.4,0.634\n359,-1,384.7,3.4,39.4,80,0.364\n359,-1,475.9,523.7,73.9,243.4,0.326\n374,-1,1221.7,31.6,61.7,118.6,1\n374,-1,686.1,206,80.7,113.4,1\n374,-1,1632,15,59.7,163.2,1\n374,-1,1076.2,446.8,68,197,1\n374,-1,445.2,309.5,72.2,215.9,1\n374,-1,285.3,130,55,170.6,1\n374,-1,108.7,351.1,53,189.1,1\n374,-1,359.2,111.4,55.4,175.1,1\n374,-1,348.8,528.5,89.5,245.8,1\n374,-1,1719.2,454.4,79,215.2,1\n374,-1,215.5,141.5,57.2,157.2,1\n374,-1,508.1,87.8,51.2,169.1,1\n374,-1,457.6,543.6,70.5,234.3,1\n374,-1,1587.4,631.1,82.9,245.6,1\n374,-1,444.5,77.1,69.7,196.4,1\n374,-1,1432.2,1,54.1,98.8,1\n374,-1,953.6,40.5,61.1,178.8,1\n374,-1,796.1,150,60.1,172.3,1\n374,-1,1017.9,52.7,55.7,165.6,1\n374,-1,829.3,1.5,55.7,111.5,1\n374,-1,382.8,2.1,47,91.4,1\n374,-1,555.5,566,103.3,252.3,1\n374,-1,1804.3,450.1,64.5,214.6,1\n374,-1,211.9,307.4,54.1,179.3,1\n374,-1,1766.2,101.2,55.4,157.8,1\n374,-1,1811.4,68.4,65.7,167.1,1\n374,-1,757,96,45.3,143.9,1\n374,-1,849.1,486.6,86.8,232,1\n374,-1,911.8,500.5,75.7,211.3,1\n374,-1,968.4,917.7,86.4,163.3,0.998\n437,-1,1221.9,29.9,62.2,119,1\n437,-1,938.1,3.3,62.6,164.7,1\n437,-1,359,108.8,53.6,178.4,1\n437,-1,687.6,206.1,77,113.2,1\n437,-1,449.3,227.3,77.2,199.6,1\n437,-1,847.3,1,54.1,135.3,1\n437,-1,1007.9,17.3,54.7,159.8,1\n437,-1,1334.4,527.1,67.9,198.8,1\n437,-1,111.6,352.5,54.1,187.5,1\n437,-1,1716.9,457.7,81.3,210.9,1\n437,-1,230.3,242.7,53.4,179.3,1\n437,-1,285,131.1,55.1,166.8,1\n437,-1,272.7,624.2,91.4,266.1,1\n437,-1,1751.7,146.7,65.4,167.4,1\n437,-1,371.2,659,73.5,237.8,1\n437,-1,797.9,150.3,53.8,173.2,1\n437,-1,1688.3,87,70.6,174.1,1\n437,-1,762.3,566.5,82.6,248.7,1\n437,-1,1846.5,415,74.5,188.1,1\n437,-1,533.7,72.3,54.8,167.6,1\n437,-1,1566.2,614.2,80,242.2,1\n437,-1,876.1,569.8,109.9,245.9,1\n437,-1,363.7,1,60.8,130.2,1\n437,-1,432,116.3,57.5,171.8,1\n437,-1,421.9,1,44.1,129,1\n437,-1,956.6,588.8,82.6,223.3,0.999\n437,-1,220.8,138.7,62.6,150.8,0.999\n437,-1,712.3,86.1,59,181.1,0.999\n437,-1,726.6,1.7,48.3,105.5,0.998\n437,-1,758.6,84.2,42.9,157.5,0.986\n437,-1,1001.5,928.1,83.7,152.9,0.975\n437,-1,1690.9,384,68.1,201.6,0.174\n8,-1,687.3,205.6,78.8,114.1,1\n8,-1,1487,70.2,55.5,147,1\n8,-1,704.1,1.5,56.8,156.9,1\n8,-1,1361.6,567.1,105.6,244.5,1\n8,-1,504.6,143.7,104.7,191.5,1\n8,-1,1064,208.3,85.3,182.9,1\n8,-1,375.6,403.8,86.4,239.7,1\n8,-1,1726.3,456.8,78.2,209,1\n8,-1,1799.6,207.2,65.7,188.6,1\n8,-1,102.1,545.5,85,254.1,1\n8,-1,1199.1,38.8,73.4,111.7,1\n8,-1,795.3,148,62.1,174.2,1\n8,-1,219.2,128.7,49.2,164.9,1\n8,-1,284.7,119.6,55.8,176.3,1\n8,-1,217.6,386.1,64.6,205.9,1\n8,-1,356.1,107.3,52.9,176.5,1\n8,-1,1629.5,257.1,62.3,186.5,1\n8,-1,875.8,128.7,62.1,175,1\n8,-1,415.4,91.2,55.1,168,1\n8,-1,462.1,75.5,51.7,170.3,1\n8,-1,1443,245.8,52.5,174.2,1\n8,-1,1037.9,1,48.5,81.4,0.999\n8,-1,1409.4,188.3,46.4,179.3,0.972\n8,-1,1034.8,145.1,79.1,185.5,0.914\n8,-1,255.5,367.1,50.3,197,0.059\n8,-1,911.8,133.2,50.1,163.2,0.059\n869,-1,1221.4,29.9,61.9,118.6,1\n869,-1,687.6,206.1,78.7,113.5,1\n869,-1,795.9,138.7,76.8,175.6,1\n869,-1,1474.7,73,61.5,158.8,1\n869,-1,480.1,1.2,49.1,126.8,1\n869,-1,1087.3,1.5,55.1,137.7,1\n869,-1,1721.2,453.5,79,213,1\n869,-1,337.3,311.2,83.1,183,1\n869,-1,1575.5,590.8,102.9,235.3,1\n869,-1,1689,46.1,53.4,161.8,1\n869,-1,989.8,472.5,78.9,238.5,1\n869,-1,276.5,625.7,87.5,255.6,1\n869,-1,557.8,116.9,60.1,174.8,1\n869,-1,477.4,157.5,60.3,182.8,1\n869,-1,299.7,161.4,69.4,193.2,1\n869,-1,1579.8,19.8,48.6,144.3,1\n869,-1,752.5,71.4,54.9,162.5,1\n869,-1,904.8,492.9,69.7,222.6,1\n869,-1,430.1,296.6,56.4,208.8,1\n869,-1,1417.1,16.9,49.9,152.5,1\n869,-1,239.2,133.1,52.3,165.6,1\n869,-1,253.6,1,54.4,119.4,1\n869,-1,412.6,158,59.5,176,1\n122,-1,1221.4,30.6,62.1,119.3,1\n122,-1,1106,144.3,81.4,173.6,1\n122,-1,355.9,104.1,57.1,181.6,1\n122,-1,1487.9,68.1,56,150.1,1\n122,-1,212.9,125.3,52.4,168.6,1\n122,-1,704.4,1,56,159,1\n122,-1,396.2,780.5,101.2,280.7,1\n122,-1,108.8,352.4,49.3,185.4,1\n122,-1,1721.7,457.1,76.4,210.3,1\n122,-1,425.8,285,77.6,225.7,1\n122,-1,289.1,129,53.8,167.3,1\n122,-1,917.9,210.5,70.6,190.4,1\n122,-1,1358,566.7,105.5,244.5,1\n122,-1,1228,179.9,45.5,163.6,1\n122,-1,523.7,243.9,73.3,202.2,1\n122,-1,538.7,65.5,49.4,170.6,1\n122,-1,1345.6,181.2,64,189,1\n122,-1,477.4,167.6,58.2,161.4,1\n122,-1,377.5,1.4,47.1,148.9,1\n122,-1,786.3,210.3,63.1,190.5,1\n122,-1,101.4,548.8,85.2,247.1,1\n122,-1,834.9,229.7,53.7,175.6,1\n122,-1,87.3,655.6,66.7,223.4,1\n122,-1,447,1,53.4,146.4,1\n122,-1,479.9,39.6,61.6,164.9,1\n122,-1,1103,926.6,87.1,154.4,0.183\n1011,-1,1221.2,30.3,62.5,116.7,1\n1011,-1,685.7,206.4,81,112.5,1\n1011,-1,495.3,282.6,69.3,189.9,1\n1011,-1,792.4,140.9,75.3,172.1,1\n1011,-1,289.3,126.7,53.4,170.6,1\n1011,-1,1223.9,146.7,62.3,172.4,1\n1011,-1,390,292.1,75.3,194.4,1\n1011,-1,1824.2,205.7,61.6,188.8,1\n1011,-1,1576.2,590.2,102.1,236.5,1\n1011,-1,1719.4,454.7,81.7,213.1,1\n1011,-1,540,120.4,61.3,169,1\n1011,-1,1156.6,620.4,94.5,263.7,1\n1011,-1,1469.4,185.7,65.8,162.5,1\n1011,-1,929.5,274.5,66,208.9,1\n1011,-1,232.2,140.2,52.5,162.5,1\n1011,-1,845.8,285.2,64.1,198.3,1\n1011,-1,751.2,74.1,54.2,160.6,1\n1011,-1,1735,679.2,94.7,241.8,1\n1011,-1,1691.4,172.3,55.7,168.5,1\n1011,-1,297.6,481.7,90.4,206.7,1\n1011,-1,303.7,292.6,66.6,202.4,1\n1011,-1,379.9,468.3,64.9,228.6,1\n1011,-1,433.7,168.5,61,190.1,1\n1011,-1,313.3,1.9,42,127.9,1\n1011,-1,589.8,552.6,96.8,243.5,1\n1011,-1,383.6,175.6,50.9,157.6,0.999\n1011,-1,351.7,887.7,95.4,193.3,0.999\n1011,-1,506.6,94.7,54.8,153.2,0.999\n1011,-1,435,67.5,62.5,172,0.99\n1011,-1,385.7,1.9,57.6,161.3,0.182\n360,-1,1221.8,31,61.5,118.5,1\n360,-1,687.3,207.2,78.6,112.5,1\n360,-1,1434.4,1.9,51.8,106.8,1\n360,-1,1027.8,59.4,55.1,167.6,1\n360,-1,1619,1,72.4,161.8,1\n360,-1,501,575.6,102.9,244.3,1\n360,-1,427.3,329,84.7,214.4,1\n360,-1,1753.6,90.9,62,156.5,1\n360,-1,1719.4,455.9,79.4,213,1\n360,-1,1846.1,60.9,55.7,165.3,1\n360,-1,443.2,84.8,70.8,203.4,1\n360,-1,109.3,350.7,52.8,189.2,1\n360,-1,208.4,139.8,58.1,160.2,1\n360,-1,1032.2,429.8,65.3,198.4,1\n360,-1,796.2,150.9,60.9,173.2,1\n360,-1,287.2,130.5,54,171.9,1\n360,-1,1818.1,472.6,67.7,203.1,1\n360,-1,960.6,54.6,63.2,172.2,1\n360,-1,363.9,109.5,55.3,176.4,1\n360,-1,514,92,44.6,162.3,1\n360,-1,838.1,1.6,51.8,102.9,1\n360,-1,220.9,321.4,56.2,187.2,1\n360,-1,1567.4,623.4,84.8,248.6,1\n360,-1,381,510.4,83.9,239.6,1\n360,-1,908.5,483.5,81.2,209.5,1\n360,-1,841.7,472.9,88,226.9,1\n360,-1,924.7,1.4,63.6,160.8,0.999\n360,-1,764.6,95.5,41.2,147.3,0.999\n360,-1,384.1,2.4,38.3,84.1,0.869\n360,-1,954.6,923.7,80.7,157.3,0.71\n360,-1,475.3,526.3,69.5,229.6,0.654\n26,-1,687,206.1,79.3,113.5,1\n26,-1,1206.7,30.7,72.8,120.1,1\n26,-1,703.6,1.3,56.6,158.3,1\n26,-1,1487.5,69.3,55.1,149,1\n26,-1,1362.7,566.9,105.3,244.7,1\n26,-1,491.9,158.4,91.4,189.3,1\n26,-1,794.3,150.2,63.1,173.7,1\n26,-1,989.2,201.9,80.1,176.3,1\n26,-1,1724.2,457,75.1,210.4,1\n26,-1,196.8,375.8,69.1,201.3,1\n26,-1,355,102.4,54.5,182.3,1\n26,-1,102.5,547.8,84.8,252,1\n26,-1,383.7,378.5,83.7,244.1,1\n26,-1,1823.8,235.9,64.5,191.8,1\n26,-1,283.1,124.6,57.2,169.5,1\n26,-1,216.6,129.3,48.5,163.8,1\n26,-1,415.3,79.5,53.8,162.5,1\n26,-1,1601.6,241.7,59.4,186.3,1\n26,-1,456.2,59.4,50.7,169.9,1\n26,-1,873.6,139.9,56.4,180.9,1\n26,-1,1.4,833,54.6,236.3,1\n26,-1,913.9,151.8,51.9,164.3,0.999\n26,-1,1377.7,188.5,48.7,170.2,0.998\n628,-1,1221,28.1,63.6,120.5,1\n628,-1,687,206,79.5,113.2,1\n628,-1,1480.2,5.9,60.4,143.1,1\n628,-1,800.4,144.6,66.3,171.5,1\n628,-1,520.7,539.6,103.7,243.4,1\n628,-1,343.5,294.7,69.1,205.1,1\n628,-1,1711.6,456.3,91.9,208.3,1\n628,-1,1574.2,588.4,97.1,235.7,1\n628,-1,357.6,114.5,52.4,169.9,1\n628,-1,548.3,111.5,61.3,175.9,1\n628,-1,1624,200.4,76.1,198.7,1\n628,-1,287.3,126.1,53.2,168.2,1\n628,-1,186.6,233.1,71,205,1\n628,-1,500.5,79.3,47.6,151.6,1\n628,-1,754.4,78.6,44.9,154.6,1\n628,-1,251.7,247.7,60.1,184.7,1\n628,-1,352.5,1,55.2,123.5,1\n628,-1,413.7,105.1,52.4,155.9,1\n628,-1,420.1,1,60.2,125.1,1\n628,-1,234.5,133.8,48.3,161.2,1\n628,-1,451.3,84.7,47.1,171.2,0.999\n628,-1,1585.3,1,55.7,92.2,0.999\n628,-1,1110,922.2,103,158.8,0.993\n628,-1,953.9,933.4,69.6,147.6,0.282\n628,-1,1194.3,933.3,80.1,147.7,0.242\n602,-1,1221.7,30.7,61.5,119.4,1\n602,-1,687.4,205.4,78.8,114.7,1\n602,-1,1480.7,3.4,61.5,146,1\n602,-1,800.7,144.7,65,174.1,1\n602,-1,366.3,273.7,63.7,197.6,1\n602,-1,1709.9,457.3,93.5,210.9,1\n602,-1,1649.9,227.2,71.4,199.9,1\n602,-1,1624.5,2.3,55.3,111,1\n602,-1,236.3,265.6,63.7,187.8,1\n602,-1,1572.9,588.3,100.6,237.2,1\n602,-1,166.8,242.8,63.7,211.3,1\n602,-1,286.8,126.4,51.8,171.4,1\n602,-1,562.2,110.7,49.8,178.9,1\n602,-1,432.5,69.3,48.6,171.3,1\n602,-1,217.5,138,54.3,159.1,1\n602,-1,484.9,98.7,47.7,160.7,1\n602,-1,362.6,110.5,51.1,176.9,1\n602,-1,752.1,80,44.2,154.4,1\n602,-1,1081.9,875.7,118.1,205.3,1\n602,-1,394.4,92,44.5,157.9,0.927\n602,-1,1879.3,280.8,41.7,183.5,0.355\n342,-1,1221.8,30.7,61.6,119.3,1\n342,-1,687,206,78.8,113.3,1\n342,-1,1731.5,70.9,55.8,162.6,1\n342,-1,1446.6,1,56.6,124.6,1\n342,-1,446.7,104.8,71.5,195.9,1\n342,-1,287.6,131.9,53.3,172.2,1\n342,-1,1828.2,495,70.1,203.4,1\n342,-1,1598.5,3.1,54.5,131.2,1\n342,-1,1720.6,457.3,78.4,213.7,1\n342,-1,425.3,575,104.7,253.1,1\n342,-1,796.6,154.8,57.9,170.1,1\n342,-1,108.2,349.5,52.3,189.9,1\n342,-1,975.8,406.3,67.8,191,1\n342,-1,364,104.8,57.5,182.5,1\n342,-1,520.3,99.3,40.4,168.5,1\n342,-1,210.1,141.7,56.3,161,1\n342,-1,971.5,62,64.8,176.1,1\n342,-1,1545.6,615.7,84.4,243.4,1\n342,-1,1036.6,69.4,53,163.7,1\n342,-1,843.5,450.6,81.8,226.6,1\n342,-1,230.8,339.5,56.7,186.3,1\n342,-1,903.1,461.7,63.7,206.2,1\n342,-1,928.2,21.4,61.6,165.1,1\n342,-1,428.4,360.3,79.9,207.8,1\n342,-1,502.5,498.9,65.2,216.3,0.999\n342,-1,714.2,94.8,57.4,171.8,0.999\n342,-1,770.6,93.7,41.5,157.6,0.999\n342,-1,947.1,920.1,73.8,160.9,0.958\n342,-1,405.3,472.8,81.8,269.8,0.84\n342,-1,423.4,54.2,52.5,164.5,0.682\n103,-1,1221.6,30.5,62.5,118.6,1\n103,-1,1165.9,157.1,81.2,168.2,1\n103,-1,391.5,822.1,101.3,258.9,1\n103,-1,704.5,1,56.1,158.7,1\n103,-1,1487.4,69.6,55.5,149.5,1\n103,-1,356.3,105,55.7,178.9,1\n103,-1,426.8,303.1,78.5,228.8,1\n103,-1,109.4,350.4,49.9,189.6,1\n103,-1,1720.6,457.1,78.8,210.2,1\n103,-1,1358.6,566.5,105.7,246,1\n103,-1,507.9,229.1,70.6,192.4,1\n103,-1,946.8,201.1,74.5,192,1\n103,-1,102.8,550.2,84.6,246.9,1\n103,-1,292.4,125.5,56.4,172.9,1\n103,-1,209.7,131.2,49.9,165.3,1\n103,-1,34.8,688.6,70.1,218.7,1\n103,-1,809.9,195.1,60.9,190.8,1\n103,-1,703.4,182.9,60,172.3,1\n103,-1,539.3,65.9,48.3,164.1,1\n103,-1,1268.7,193.2,45.4,168.1,1\n103,-1,853.3,215,58,168.7,1\n103,-1,439.9,3.5,52.9,154.3,1\n103,-1,1392.1,189.6,58.6,183.4,1\n103,-1,1436.1,188.4,60.2,179.3,1\n103,-1,375.1,7.1,51.1,164.6,1\n103,-1,481.3,40,60.5,159,1\n103,-1,482.9,150.6,54.7,162.3,0.999\n103,-1,258.6,89,60.4,182.2,0.991\n103,-1,1150.9,939.7,74.9,141.3,0.075\n414,-1,1222.2,30.4,61,119,1\n414,-1,686.2,205.9,79.8,113.8,1\n414,-1,454.1,247.1,80.5,209.9,1\n414,-1,358.2,109.4,55.1,176.2,1\n414,-1,552.2,68.5,55.5,168.8,1\n414,-1,1720,454.3,79.1,211.6,1\n414,-1,1657.4,61.4,74.4,173.9,1\n414,-1,110,348.2,52.5,190.5,1\n414,-1,1005.5,30.4,54.8,163.7,1\n414,-1,946.4,17.3,59.4,168.5,1\n414,-1,286.8,129.7,54.5,164.8,1\n414,-1,832.6,1.3,54.4,130,1\n414,-1,358.4,1,67.7,113.3,1\n414,-1,1770.7,125.6,56.6,166.3,1\n414,-1,795.6,150.2,58.6,171.9,1\n414,-1,403.3,616.9,75.4,240.4,1\n414,-1,1225.4,494.7,65.8,207.2,1\n414,-1,220.3,141.9,68.3,157.5,1\n414,-1,1581.8,615.2,102.8,241.6,1\n414,-1,859,538.5,105.5,244.6,1\n414,-1,293.7,589.8,87.6,252.9,1\n414,-1,207.6,263.5,54.8,185.5,1\n414,-1,1843.9,72.6,77.1,177.1,1\n414,-1,426.3,94.9,53.8,171.7,1\n414,-1,711.9,557,86.6,246,1\n414,-1,460.5,69,70.9,193.9,1\n414,-1,717.5,1,51.2,129.4,1\n414,-1,712.2,88.5,63.5,175.3,0.999\n414,-1,934.9,553.3,80.5,215.6,0.999\n414,-1,425.6,1.5,43.2,113.3,0.997\n414,-1,981.9,924.7,79.5,156.3,0.689\n326,-1,1221.4,31,62.4,118.9,1\n326,-1,1453.3,1,55.6,138.2,1\n326,-1,686.1,207.5,80.3,112,1\n326,-1,363.7,578.1,95,249.6,1\n326,-1,1716.9,58.8,60.9,159.4,1\n326,-1,452.5,116.8,73.3,198.4,1\n326,-1,1720.2,456.9,79,212.9,1\n326,-1,109.2,351.6,51.4,188.2,1\n326,-1,795.3,149,60.5,174.2,1\n326,-1,420,44.6,57.1,169.1,1\n326,-1,988.3,68.5,62.2,181.1,1\n326,-1,363.4,107.7,57.2,179.9,1\n326,-1,238.2,361.8,57.3,186.3,1\n326,-1,927.9,35.7,63.3,172.9,1\n326,-1,898,445.4,70.8,196.5,1\n326,-1,281,133.4,55,171.7,1\n326,-1,1577.2,1,67.4,118.8,1\n326,-1,212.8,135,56,164.9,1\n326,-1,1518.6,602.1,85.9,248.9,1\n326,-1,515.3,478.4,68,219.6,1\n326,-1,832,439.4,80.8,209,1\n326,-1,726,95.2,50.8,174.9,1\n326,-1,1046.1,77.5,51.7,161,1\n326,-1,1836.3,513.2,66.5,213.5,1\n326,-1,424.5,462.6,77.1,238,0.999\n326,-1,516.1,101.4,40.9,170.1,0.999\n326,-1,932.4,909.4,73.8,171.6,0.979\n326,-1,371.4,913.2,93.3,167.8,0.834\n326,-1,712.4,17.8,46.6,150.6,0.057\n51,-1,1220.5,29.3,63.8,117.2,1\n51,-1,686.1,206.4,79.8,113.4,1\n51,-1,398.7,352.9,83.2,236.6,1\n51,-1,1361.8,567.1,104.9,244.4,1\n51,-1,355.2,108.5,55.2,175.2,1\n51,-1,1487.2,70.5,55,148.8,1\n51,-1,489.4,177.4,89.6,197.9,1\n51,-1,704.6,1,55.4,157.4,1\n51,-1,1721.9,456.3,76.7,211.3,1\n51,-1,889.6,192.3,60.3,186,1\n51,-1,162.7,363,64.6,193.4,1\n51,-1,1005.7,168.5,76.4,186.4,1\n51,-1,213.7,125.9,49.7,167.5,1\n51,-1,102,546.4,86.1,253.3,1\n51,-1,793.5,147.5,63.7,176.7,1\n51,-1,284,125.9,53.9,170.9,1\n51,-1,5.5,782.2,68.6,241.8,1\n51,-1,427.5,100.2,54.7,155.3,1\n51,-1,1322.3,178.3,55.4,169.1,1\n51,-1,1376.6,219.5,42.5,163.8,1\n51,-1,485.2,47.5,54,154.4,1\n51,-1,541.2,65.3,44.8,167.5,1\n51,-1,1481.9,214.8,62.2,200.3,0.999\n51,-1,1858.2,272.1,62.8,193.5,0.999\n51,-1,858.8,165.6,54.1,170.4,0.895\n51,-1,395.6,68,42.6,141.9,0.296\n837,-1,1221.4,29.7,62.2,120.1,1\n837,-1,687.8,205.8,78,114.3,1\n837,-1,791.7,136.5,73.8,178.5,1\n837,-1,1644.5,9.8,59.1,165.1,1\n837,-1,558.6,116.3,60.5,175.6,1\n837,-1,270.3,582.2,82.1,242.5,1\n837,-1,1722.6,452.1,76,215.3,1\n837,-1,1577.2,593.6,98.5,234.1,1\n837,-1,1472.8,52.3,60.1,157.2,1\n837,-1,475.5,130.5,59.8,182,1\n837,-1,752.3,71.4,56.6,163.1,1\n837,-1,438.4,267.9,54.6,200.4,1\n837,-1,358.2,276.3,81.1,182.1,1\n837,-1,1032,527,73.3,234.7,1\n837,-1,239.1,131.9,51.6,169.3,1\n837,-1,295,162.3,69.4,196,1\n837,-1,1419.2,35.1,53.2,157.1,1\n837,-1,946.6,548.6,72.4,231.5,1\n837,-1,253.5,1.2,55.4,122,1\n837,-1,1067.5,3.3,58.6,94.9,1\n837,-1,416.8,125.7,57.9,182.1,1\n516,-1,1221.2,30.6,62.2,119,1\n516,-1,1490.7,1,60.1,138.2,1\n516,-1,686.8,207.1,79.5,113.9,1\n516,-1,995.6,1,55,121.5,1\n516,-1,789.2,142.6,57.2,175.4,1\n516,-1,392.8,184.2,62.9,188.3,1\n516,-1,1673.4,23.5,54.1,165.3,1\n516,-1,160,327.5,65.6,188.9,1\n516,-1,1724.8,625.5,74.7,215.3,1\n516,-1,883.3,1.3,53.5,121.3,1\n516,-1,1718.8,459.6,79.6,206,1\n516,-1,1563.8,599.9,67.6,235.7,1\n516,-1,460.1,136.4,70.8,186.1,1\n516,-1,930,2.2,57.1,118.9,1\n516,-1,340.5,169.8,50.9,166.5,1\n516,-1,828.8,608.3,73.3,256.4,1\n516,-1,948.7,703.3,115.8,262.5,1\n516,-1,1613.8,14.5,54.4,174.9,1\n516,-1,1604.3,300.5,63.8,202.6,1\n516,-1,287.3,126.7,53.9,173.1,1\n516,-1,215.9,135.8,64.9,162.2,1\n516,-1,1708.2,324.6,93.9,196.5,1\n516,-1,1850.2,211.8,70.8,187.5,1\n516,-1,731.2,94.8,64.6,164.6,1\n516,-1,196.8,771.9,94.4,270.8,1\n516,-1,451.5,3.4,75.5,182.5,1\n516,-1,516.2,95.8,57.1,177.5,1\n516,-1,1757.6,206.4,57.9,167.7,1\n516,-1,277,801.9,82.3,262.7,1\n516,-1,398.7,24.8,46.9,160.3,0.998\n516,-1,571.6,68.4,44.4,158.3,0.981\n522,-1,1221.8,30.5,61.5,120.2,1\n522,-1,1487.5,1.1,59.5,140.8,1\n522,-1,687,206.3,79.6,113.6,1\n522,-1,994.6,1.4,54.1,120,1\n522,-1,1719,462,80.3,204.3,1\n522,-1,1671.7,20.6,53.8,160.7,1\n522,-1,163.3,323,65.7,194.3,1\n522,-1,392.3,186.5,59.1,189.5,1\n522,-1,786.6,143.6,57.6,177.6,1\n522,-1,288,124.4,54.1,173.6,1\n522,-1,465.2,127.8,65.1,183.6,1\n522,-1,1608.9,7.4,56.9,173.4,1\n522,-1,929.5,1.3,58,117.4,1\n522,-1,826.1,607,70.4,259.4,1\n522,-1,1571.9,596.2,62.3,243.6,1\n522,-1,1707.6,310.7,86.2,212.1,1\n522,-1,886.4,1.3,51.3,117.3,1\n522,-1,1751.4,644.4,72.9,215.1,1\n522,-1,950.6,719.6,121.7,260,1\n522,-1,216.7,136.1,63.7,160.5,1\n522,-1,272.2,810.6,79.2,268.3,1\n522,-1,1763.3,208.1,60.7,171.9,1\n522,-1,1860.7,215.4,60.3,191.3,1\n522,-1,514.6,98.5,58.9,182.2,1\n522,-1,450.6,2.6,76.3,172.2,1\n522,-1,190.4,781.8,97.3,273,1\n522,-1,1598.2,291.3,63.5,199.3,1\n522,-1,740.6,91,61.9,170.2,1\n522,-1,357.2,165.8,46.6,164.2,0.999\n522,-1,401,27.6,47.6,163.1,0.999\n522,-1,1043,734.8,71.6,248.6,0.456\n522,-1,578,73.9,37.3,149.3,0.422\n522,-1,1046.7,933.5,71.2,147.5,0.074\n166,-1,1221.6,30.4,61.7,118.8,1\n166,-1,1489.2,69.1,54.6,149.1,1\n166,-1,977,127,64.7,171.2,1\n166,-1,109.1,350.7,50.2,187.1,1\n166,-1,212.2,125.6,55.3,167.9,1\n166,-1,356.7,103.8,54.9,178,1\n166,-1,704.1,1,56.4,159.6,1\n166,-1,1721.5,457.2,77.8,212,1\n166,-1,1359.1,568,104,243.2,1\n166,-1,288.8,126.7,54.5,170.3,1\n166,-1,1131.8,155.2,49.3,160.1,1\n166,-1,688,208,77.6,112.1,1\n166,-1,401.1,678.9,100.3,258.6,1\n166,-1,432.8,38.4,61.1,168,1\n166,-1,538,63.5,51.5,170.3,1\n166,-1,100.8,548,86.1,251.9,1\n166,-1,528.1,281.8,64.3,213.5,1\n166,-1,421.5,241.3,77.3,218.3,1\n166,-1,560.9,157.7,67.4,169,1\n166,-1,216,589.6,67.1,220.2,1\n166,-1,854.3,192.3,73.6,187.8,1\n166,-1,799.3,274.8,63.6,178.6,1\n166,-1,749.2,261.9,68.1,198.1,1\n166,-1,795.4,147.9,62,172.7,1\n166,-1,502,211,56.7,172.1,0.999\n166,-1,1278.5,166.5,55.6,168.6,0.999\n166,-1,1244.3,166.6,54.1,168.3,0.999\n166,-1,1021.8,904.9,73.1,176.1,0.99\n166,-1,394,8.6,47.9,110.9,0.985\n166,-1,604.4,272.8,51.6,189.1,0.133\n40,-1,686.4,206.3,80,113.4,1\n40,-1,1210.9,29.3,74.1,121.1,1\n40,-1,916,194.1,95.7,186.9,1\n40,-1,1486.5,69,56.1,152.2,1\n40,-1,390.6,366.7,87.5,238.6,1\n40,-1,1362.4,567.6,104.9,244.9,1\n40,-1,704,1,56.6,158.1,1\n40,-1,1722.8,457.7,76,209.7,1\n40,-1,483,166.5,94.7,196,1\n40,-1,177.7,370.5,68.9,190.5,1\n40,-1,1009.5,157.7,79.4,186.3,1\n40,-1,214.8,128.1,49.4,163.9,1\n40,-1,795.1,148.6,62,175.3,1\n40,-1,355.3,108.7,54.9,173.1,1\n40,-1,102.5,548.5,85.1,250.3,1\n40,-1,284,126.6,53.7,168.2,1\n40,-1,446.9,48,51.5,168.9,1\n40,-1,865.5,146.8,56.4,185,1\n40,-1,1.4,804.9,64.7,240.9,1\n40,-1,1843.6,253.5,73.9,195,0.999\n40,-1,390.8,78.7,55.5,163.5,0.999\n40,-1,1348.3,189.1,53.7,167.8,0.999\n40,-1,494.7,42.7,41.5,144.1,0.155\n40,-1,1502.2,217.2,50.8,195.7,0.136\n40,-1,1397.2,219.7,37.6,171,0.067\n82,-1,1221.6,30.4,61.4,117.6,1\n82,-1,704.4,1,56.3,159.1,1\n82,-1,1487.2,69.2,55.2,148.3,1\n82,-1,1228.6,164.3,73.2,166.7,1\n82,-1,1359,565.3,105.9,245.6,1\n82,-1,494.9,205.9,76,198.8,1\n82,-1,356.7,104.4,55,180.1,1\n82,-1,977.8,191.5,73.6,184.4,1\n82,-1,1722.3,456,76,211.8,1\n82,-1,414.2,324.5,83.5,229.1,1\n82,-1,102.6,547.4,85.3,251.9,1\n82,-1,1323,201.2,41.7,166.1,1\n82,-1,294.6,129,50.6,166.6,1\n82,-1,685.6,205.9,80.2,116.9,1\n82,-1,14.8,723.4,68.5,234,1\n82,-1,1422.7,200,69.1,190.7,1\n82,-1,389,882.6,102.3,198.4,1\n82,-1,211.3,131.9,51.3,163.3,1\n82,-1,128.3,355.9,45.5,190.3,1\n82,-1,762.6,184.4,58,180.2,1\n82,-1,1488.1,201.8,51.7,175.4,1\n82,-1,538,63.1,49.2,172.4,1\n82,-1,836,172,58,191.5,1\n82,-1,881.4,196.7,53.6,166.8,1\n82,-1,433.5,21.1,53.8,163.6,1\n82,-1,378,25.8,55.4,164.3,1\n82,-1,255.8,96.6,56.9,173,0.999\n82,-1,476.7,122.9,56.6,160.9,0.999\n860,-1,1221.3,29.4,61.9,119.4,1\n860,-1,687.1,206.5,79.7,113.3,1\n860,-1,270.4,610.8,88.6,250.4,1\n860,-1,486.6,1.1,48.7,116.5,1\n860,-1,797.3,138.8,75.2,176,1\n860,-1,1680.6,32.7,52,160.3,1\n860,-1,1472.1,69.3,61.4,155,1\n860,-1,1574.3,589.7,103.5,234.3,1\n860,-1,341.5,300.5,78.2,181.3,1\n860,-1,1079.1,1,58.4,123.3,1\n860,-1,559.4,117.1,58.9,172,1\n860,-1,1721,453.5,79.7,212,1\n860,-1,1413.9,21,51,153,1\n860,-1,753.1,70.3,54.9,164.9,1\n860,-1,297.4,160.4,73.4,197.7,1\n860,-1,475.8,150.7,57.9,178.5,1\n860,-1,433.6,295.8,55,194.1,1\n860,-1,239.8,134.8,53.4,162.1,1\n860,-1,254.4,1,53.8,120.9,1\n860,-1,994.2,495.4,86.3,238.9,1\n860,-1,415.3,148.9,62.3,175.1,1\n860,-1,1573.4,14.3,48.9,142.5,1\n860,-1,916.7,507.8,71.4,235.2,1\n566,-1,1221.3,30.6,61.8,119.3,1\n566,-1,686.9,206.1,79.4,113.5,1\n566,-1,1482.5,3.5,59.4,146.1,1\n566,-1,1824.6,247.4,68.6,175,1\n566,-1,545.5,117.4,54.8,168.1,1\n566,-1,377.6,233.5,65.4,195.1,1\n566,-1,791.3,147.2,68,173.6,1\n566,-1,1665.3,267.5,69.9,201.4,1\n566,-1,1718.1,453.5,83,213.7,1\n566,-1,1653.5,1,55.6,143.7,1\n566,-1,873.1,1,51.9,106.4,1\n566,-1,1575.6,2.2,55.9,137.4,1\n566,-1,289.3,121.1,52.3,173.9,1\n566,-1,203.3,289,64.2,191.2,1\n566,-1,218.3,137.2,56.5,162.8,1\n566,-1,438,137.4,53.3,155,1\n566,-1,1591.7,591,76.7,230.8,1\n566,-1,755.4,79.6,44.5,154.6,1\n566,-1,145.9,255.8,57.5,217,1\n566,-1,733.7,588.3,83.3,250.4,1\n566,-1,1020.1,797.5,123,268.6,1\n566,-1,465.8,84.1,63.1,170.9,1\n566,-1,359.5,110.4,50.8,174.1,1\n566,-1,987.2,1.7,49,86,0.999\n566,-1,418.6,47.1,50.4,179.2,0.996\n566,-1,246.8,911.6,83.7,169.4,0.995\n566,-1,1102.6,816.5,90.7,237,0.99\n566,-1,1019,934.4,77,146.6,0.083\n698,-1,1221.5,30.2,62.4,118.1,1\n698,-1,687.2,206.4,79.2,113.2,1\n698,-1,1482,6,59,145.3,1\n698,-1,1606.2,139.4,70.2,182.4,1\n698,-1,1479.5,135.8,52.8,173.5,1\n698,-1,1711.8,457,95.7,207.5,1\n698,-1,561.4,112.2,53.3,177.4,1\n698,-1,1575.1,588.9,96.5,235.7,1\n698,-1,300.3,378.6,71.9,214.4,1\n698,-1,382.2,534.8,76,253.7,1\n698,-1,421,148.3,65.8,166.5,1\n698,-1,486.8,137.7,47.8,184.7,1\n698,-1,1314.9,804.3,102.8,276.7,1\n698,-1,750.2,80.4,49.9,155.3,1\n698,-1,801.7,140.5,51.2,177.4,1\n698,-1,479.7,26.9,45.9,141.8,1\n698,-1,360.5,112.5,48.9,172.7,1\n698,-1,252.5,199.7,62.6,196.9,1\n698,-1,303.9,211.7,59.1,181.8,1\n698,-1,1029.9,2,66.7,91.4,1\n698,-1,408.4,21.9,57.4,161.5,1\n698,-1,1238.5,822.2,86.3,258.8,1\n698,-1,227.7,134.1,52,162,1\n698,-1,827.4,928,83.6,153,0.645\n909,-1,1222.4,30.3,60.3,118.6,1\n909,-1,686.9,206.2,79.5,113.6,1\n909,-1,473.8,194.8,67.1,191,1\n909,-1,794,140.3,75.2,171.5,1\n909,-1,309.6,693.6,88.6,265,1\n909,-1,1433,1,48.5,143.6,1\n909,-1,1110.1,31.2,62.8,159.7,1\n909,-1,1575,590.5,103.4,234.2,1\n909,-1,1721.7,452.5,77.3,215.7,1\n909,-1,557,114.4,58.5,175.2,1\n909,-1,380.9,192.5,57.3,177.2,1\n909,-1,1480.9,104.6,60.5,153,1\n909,-1,872.1,434.7,65.8,222.4,1\n909,-1,1716.8,87,53.3,174.9,1\n909,-1,1306.4,878.9,97.8,202.1,1\n909,-1,1597.7,62.2,53.5,160.7,1\n909,-1,301.7,162.7,69.3,198.5,1\n909,-1,414.7,346.7,58.9,207.4,1\n909,-1,752.9,73.4,54.9,159.7,1\n909,-1,1744.7,680.9,98.2,239.2,1\n909,-1,328.5,354.3,83.3,189.3,1\n909,-1,470.2,10.3,49.1,148.7,1\n909,-1,241.4,134.5,57.7,165.2,1\n909,-1,967.6,415,66.1,226.9,1\n909,-1,1502.6,3.6,57.1,134.2,1\n909,-1,312,1.3,47.8,133,1\n909,-1,254.3,1.4,53.8,118.5,1\n909,-1,422.8,65,53.5,172.8,1\n838,-1,1221.4,29.2,62.2,120,1\n838,-1,687.4,205.9,78.7,112.9,1\n838,-1,792.2,137.1,74.3,178.1,1\n838,-1,1644.9,12,59,162.4,1\n838,-1,557.4,117.1,61.1,175.6,1\n838,-1,1722.3,453.1,77,213.7,1\n838,-1,267.9,582.6,84.6,245.1,1\n838,-1,1577.1,594.6,98.8,232.1,1\n838,-1,475,130.7,60.5,183.1,1\n838,-1,752.5,70.9,56.2,162.4,1\n838,-1,1471.7,53.2,61.2,157.1,1\n838,-1,437.3,266.9,55.9,204.1,1\n838,-1,239,130.7,52.4,171.2,1\n838,-1,945.8,543.3,70.9,233.5,1\n838,-1,358.3,277.1,81,181.3,1\n838,-1,1418.5,33.7,53.7,160.3,1\n838,-1,1068.3,2.9,57,98.3,1\n838,-1,295.5,162,68.7,195.5,1\n838,-1,1034.6,521.9,71.7,241.3,1\n838,-1,254.3,1.5,54.5,119.9,1\n838,-1,417,127.5,57.2,178.7,1\n723,-1,1221.8,29.9,61.9,118.6,1\n723,-1,687,206,79.9,113.5,1\n723,-1,1480.3,7.2,59,145.9,1\n723,-1,550.7,111.8,59.9,177.7,1\n723,-1,1246.4,750.4,97.3,264.3,1\n723,-1,1599.7,119.1,59.7,178,1\n723,-1,1474.8,111,52.1,175.6,1\n723,-1,1710.9,454.9,96.4,208.8,1\n723,-1,412.9,175.7,68.5,163.4,1\n723,-1,1574.6,591,99.1,233.4,1\n723,-1,394.5,549,97.5,249.3,1\n723,-1,261.9,192.8,56,198.2,1\n723,-1,300.6,408.1,75.5,222.9,1\n723,-1,478,159.2,49.3,183.1,1\n723,-1,314.1,201.7,63.8,179.4,1\n723,-1,749.7,81.9,49.7,152.4,1\n723,-1,786.9,137.1,50.2,178.8,1\n723,-1,418.1,42.6,64.1,163.2,1\n723,-1,1169.7,771.9,87,264.6,1\n723,-1,361.6,108.9,46.8,171.2,1\n723,-1,466.2,13.2,45.6,139.6,0.999\n723,-1,235.3,133.7,51.4,167,0.999\n723,-1,320,1.4,52.9,132.5,0.326\n835,-1,1221.7,29.9,61.8,118.2,1\n835,-1,687.2,205.6,78.7,114,1\n835,-1,791.4,137.2,71.8,178.2,1\n835,-1,558.9,116,60.8,175.2,1\n835,-1,1641.6,11.1,59.4,158.9,1\n835,-1,271.3,577.6,82,244.2,1\n835,-1,1722.7,453,76.6,213.8,1\n835,-1,1574.9,590.4,101.9,233.9,1\n835,-1,1473.4,50.6,59.8,156.8,1\n835,-1,752.7,70.6,56.6,163.8,1\n835,-1,475.9,127.2,59.2,179.2,1\n835,-1,239.6,133.8,51.7,163.2,1\n835,-1,354.1,271.8,86.3,185.7,1\n835,-1,1421.7,37.4,50.7,158.4,1\n835,-1,294.5,163.2,68.3,195.2,1\n835,-1,1033.7,528.7,82.8,237.1,1\n835,-1,437.2,259.9,55.3,205.6,1\n835,-1,951.6,555.9,70.9,233.4,1\n835,-1,420.3,124.1,56.6,174,1\n835,-1,254.1,1.8,53.8,120.8,1\n835,-1,1064.7,4.9,61.5,92,0.638\n835,-1,357.8,174.4,34.6,156,0.153\n958,-1,686.5,206,79.7,113.2,1\n958,-1,1221,30,62.2,119.6,1\n958,-1,1470.4,137.6,67.1,163.6,1\n958,-1,793.6,139.4,74.2,174.2,1\n958,-1,1762.9,148.4,67.1,174.2,1\n958,-1,1644.4,109,54.5,168.5,1\n958,-1,1153,83.9,56.6,167.1,1\n958,-1,926.8,343.1,75,219.4,1\n958,-1,1721.2,454.6,77.6,212,1\n958,-1,751,72.3,56.4,161.1,1\n958,-1,1575.6,589.2,102.3,236.1,1\n958,-1,421.8,237.6,68.5,195.5,1\n958,-1,323.2,779.7,96.8,269.7,1\n958,-1,1227.6,741.8,94.8,273,1\n958,-1,849.9,358.6,70.3,212.3,1\n958,-1,1407.3,1.3,46.8,107.2,1\n958,-1,389.5,401.4,69.3,217.6,1\n958,-1,550.4,118.8,54.8,170.3,1\n958,-1,1472.2,1,57.5,110.5,1\n958,-1,230.5,137.4,56,165.8,1\n958,-1,484.5,227.5,63.9,181.9,1\n958,-1,322.2,417.7,78.1,191.1,1\n958,-1,438.6,74.1,56.7,177,1\n958,-1,336.5,241.8,64.4,182.7,1\n958,-1,1742.3,678.1,94.5,248.8,1\n958,-1,289.1,125.6,53.3,174.4,1\n958,-1,481.8,47.4,55,161.3,1\n958,-1,242.4,2.6,54,120.1,0.999\n958,-1,313.5,1,47,133.3,0.983\n810,-1,1221.2,29.3,62.8,118.7,1\n810,-1,687,205.4,78.5,114.2,1\n810,-1,277.6,536.1,79.5,233.4,1\n810,-1,551.3,116.5,65.5,177.4,1\n810,-1,1723.5,453.2,75,214.2,1\n810,-1,787.7,130.9,53.6,178.5,1\n810,-1,1574.8,590.7,100.9,234.5,1\n810,-1,1618.2,1,60.2,145.1,1\n810,-1,277.8,166.8,60.9,194.3,1\n810,-1,441.3,235.8,56.1,196,1\n810,-1,1472.6,34.4,63.3,155.6,1\n810,-1,377.7,247.9,75.4,180.3,1\n810,-1,991.7,590.8,74.9,247.5,1\n810,-1,1069.2,570.9,72.8,252.2,1\n810,-1,475.8,107.3,64.5,179.7,1\n810,-1,234.9,137.6,50.3,162.2,1\n810,-1,750.9,73.6,57.4,157.9,1\n810,-1,346.8,178.9,52.5,174.4,1\n810,-1,1435.8,53.7,49.1,155.1,1\n810,-1,424,107.4,60.7,167.1,0.998\n283,-1,1221.4,31.7,63,119.3,1\n283,-1,687.9,207.5,76.8,112,1\n283,-1,1023.6,98.9,62.2,182.7,1\n283,-1,1469.8,32.3,55,148.9,1\n283,-1,1654.1,28.5,58.5,155.5,1\n283,-1,287.5,129.6,56.1,173,1\n283,-1,353.8,109,53.3,177.1,1\n283,-1,940.4,81.2,64.6,176.3,1\n283,-1,455.5,144.9,73.5,206.1,1\n283,-1,399.6,20.8,56,164.7,1\n283,-1,1721.2,458.5,77,210.2,1\n283,-1,213.7,579.3,83.8,251.6,1\n283,-1,108.6,351.6,50.3,189.2,1\n283,-1,704.4,1.1,54.5,158,1\n283,-1,390,451.7,84.5,236.1,1\n283,-1,1102.2,93.5,50.2,163,1\n283,-1,796.1,148.9,61.3,172.6,1\n283,-1,1439.6,578.7,94.7,247.5,1\n283,-1,223.1,131.3,52.9,162.5,1\n283,-1,280.8,803,94.5,271.2,1\n283,-1,233.2,416.3,59,195.7,1\n283,-1,750.7,105.7,47.8,164.5,1\n283,-1,552.9,420.1,66.7,214,1\n283,-1,514.8,108.9,51.9,178.2,1\n283,-1,882,394.2,80.5,200.1,1\n283,-1,759.2,345.3,68,187.3,1\n283,-1,811.3,378.9,88.6,214.3,1\n283,-1,465.9,404.6,65.3,222.9,1\n283,-1,843.4,113.4,48.4,153.8,1\n283,-1,944.8,920.9,85.8,160.1,0.919\n724,-1,1221.6,29.8,62.3,119.6,1\n724,-1,686.5,206,80.4,113.6,1\n724,-1,1480.7,6.3,58.9,145.8,1\n724,-1,549.8,111.6,61.3,178.6,1\n724,-1,1474.5,110.6,51.9,175.5,1\n724,-1,1711.8,455.5,95.9,208.9,1\n724,-1,1599.3,117.4,58.4,179.6,1\n724,-1,1244.1,751.6,96,260.5,1\n724,-1,413.2,175.2,69.2,166.4,1\n724,-1,1574,589.9,99.4,234.3,1\n724,-1,262,192.6,54.9,198.6,1\n724,-1,478.5,158.7,49.1,184.1,1\n724,-1,395.8,550.7,97.2,248.3,1\n724,-1,315.7,201.6,63.2,179.4,1\n724,-1,300.1,410.5,75.6,222.8,1\n724,-1,786.2,138.8,51.5,176,1\n724,-1,419.5,38.4,62.5,168.1,1\n724,-1,749.7,83,49.4,150.6,1\n724,-1,360.9,107.7,46.7,174.2,1\n724,-1,1167.8,771.1,87.1,253.4,1\n724,-1,235.6,135,50.9,165.2,0.999\n724,-1,467.4,11.3,43.5,142.2,0.998\n724,-1,320,1,52.9,132.6,0.74\n829,-1,1221.2,29.1,62.4,118.9,1\n829,-1,687.1,205.6,78.7,114.7,1\n829,-1,1639.4,3.5,57.2,158.1,1\n829,-1,791.5,134.7,66.9,181.3,1\n829,-1,275.7,564.7,80.6,238,1\n829,-1,557.1,116,62,175.3,1\n829,-1,1036,545,93.7,244.4,1\n829,-1,1722.7,453.4,76.1,213.1,1\n829,-1,1575.1,588.6,102.3,236.4,1\n829,-1,1476.1,44.3,59.2,157.2,1\n829,-1,751.7,72.2,57.7,163.2,1\n829,-1,370.6,272.2,77.2,175.6,1\n829,-1,438.1,259.2,54.8,192.6,1\n829,-1,238.6,133.5,50.2,164.8,1\n829,-1,474,124.9,60.4,177.4,1\n829,-1,1424.3,39.8,49.8,154.9,1\n829,-1,289.6,161.3,68.5,199.5,1\n829,-1,959.5,563.3,74.1,236.9,1\n829,-1,423.1,122.7,56.2,172.5,1\n829,-1,349.6,171.8,46.1,179.8,0.996\n829,-1,252.3,1,55.5,118,0.969\n996,-1,686.7,205.9,79.7,113.2,1\n996,-1,1221.4,31.1,61.9,120.1,1\n996,-1,793.2,139.8,75.4,171.8,1\n996,-1,1801.2,187.2,70.2,188.1,1\n996,-1,1196.1,130.2,61.8,174.3,1\n996,-1,400.2,281.8,67.7,199.3,1\n996,-1,1472.5,178.1,64.3,160.9,1\n996,-1,503.5,264.6,64.3,184.2,1\n996,-1,1672.8,152.3,60.4,174.1,1\n996,-1,231.2,135.7,54.5,166.6,1\n996,-1,840.8,304.4,67.4,196.6,1\n996,-1,330.8,854.1,94.4,226.9,1\n996,-1,290.9,125,50.9,169.8,1\n996,-1,1575.9,590.4,103.8,237,1\n996,-1,1721.5,452.2,78.4,218.6,1\n996,-1,751.8,72.6,54.9,161.3,1\n996,-1,922.2,297.8,70.8,205.4,1\n996,-1,1178.4,650.6,90.2,263.3,1\n996,-1,300.5,461.3,86,205.8,1\n996,-1,543.1,119.2,59.6,169.9,1\n996,-1,313.8,276.4,64.6,198.4,1\n996,-1,384.7,452,68,221.2,1\n996,-1,504.3,79.8,55.5,158.2,1\n996,-1,315,1.4,45.3,129.6,1\n996,-1,1739.1,675.8,95.2,246.6,1\n996,-1,439.6,64.4,60.2,175.1,1\n996,-1,388,167.4,70.4,186.3,0.999\n996,-1,601.8,545.1,111.9,248.6,0.93\n996,-1,1438.4,2.3,56.2,79.1,0.705\n996,-1,1378.9,4.3,42,77.5,0.287\n853,-1,1221.2,29.9,62,119,1\n853,-1,687.2,205.6,78.7,114.8,1\n853,-1,795.5,140.1,77.5,173.9,1\n853,-1,1575.6,590.4,103.2,235.5,1\n853,-1,559.1,115.9,60.1,175.9,1\n853,-1,489.2,1,49.9,115.5,1\n853,-1,265.9,605.8,84,242.3,1\n853,-1,1722.1,453.4,77,213,1\n853,-1,1470.8,61.6,60.2,158.2,1\n853,-1,1072.3,1.1,60.1,118.9,1\n853,-1,344.2,298.3,77,176.7,1\n853,-1,1412.9,29.1,53.4,153.1,1\n853,-1,1667.2,31.2,52,159.5,1\n853,-1,298.1,160.6,72.3,197.5,1\n853,-1,253.7,1,55.5,122.4,1\n853,-1,753.4,71.9,54.1,161.8,1\n853,-1,925.9,521.7,71.9,223.7,1\n853,-1,472.6,140.7,61,187.2,1\n853,-1,238.9,132.2,54.7,165.7,1\n853,-1,435.4,283.6,54.2,198.3,1\n853,-1,1006.2,498.4,75.9,236.6,1\n853,-1,416.3,141.5,60,171.3,1\n102,-1,1222,30,62,118.9,1\n102,-1,391.1,824.5,102.3,256.5,1\n102,-1,1167.6,153.9,87.9,173.1,1\n102,-1,704.9,1,56.1,159.4,1\n102,-1,1487.7,69.4,55.2,148.2,1\n102,-1,357,107.1,55.6,176.9,1\n102,-1,1722.7,456.3,76.3,212,1\n102,-1,427.3,303.2,77.6,230.5,1\n102,-1,109.2,350.4,50.6,189.7,1\n102,-1,505.6,228.7,72.1,194.1,1\n102,-1,1358.2,566.6,105.2,246.1,1\n102,-1,948.9,200.7,73.7,188.1,1\n102,-1,292.1,126,55.9,172.6,1\n102,-1,102.3,549.6,85.8,248,1\n102,-1,209.9,130.8,50,165.7,1\n102,-1,810.9,192.3,60.3,192.7,1\n102,-1,1270,192.8,46.4,166.3,1\n102,-1,32.7,689,68.1,222.8,1\n102,-1,705.2,184.6,58.3,171.1,1\n102,-1,538.4,66.2,48.5,163,1\n102,-1,1394.2,190.2,59.3,185.3,1\n102,-1,854.5,213.7,57,168.3,1\n102,-1,375.2,8.7,51.6,162.4,1\n102,-1,440.3,4.2,51.8,152.7,1\n102,-1,480.9,39.6,62.1,160.2,1\n102,-1,1438.9,188.6,59.9,177,0.999\n102,-1,483.1,145.8,54.5,164.8,0.998\n102,-1,257,86.9,64.7,187.6,0.994\n102,-1,1152.5,941.8,75.7,139.2,0.066\n14,-1,687.6,206.3,78.4,113.5,1\n14,-1,1486.2,69.8,56.2,148.3,1\n14,-1,1040.3,207.7,83.2,176.1,1\n14,-1,502.5,150.2,104.4,190.9,1\n14,-1,1361.8,567.3,105.1,244.1,1\n14,-1,704.4,1.7,56.2,157.8,1\n14,-1,380,394.2,83.4,235,1\n14,-1,1202.9,34.7,73.1,118.5,1\n14,-1,1725.4,457,75.9,210.7,1\n14,-1,795.8,148.9,60.9,174.4,1\n14,-1,102,547.5,85.1,250,1\n14,-1,356.2,104.7,53.8,177.1,1\n14,-1,1805.7,223.9,64.9,178,1\n14,-1,217.7,125.7,47.9,167.3,1\n14,-1,285.6,122.1,54.4,173.5,1\n14,-1,1621,253.9,61.4,181,1\n14,-1,460.6,71.4,53.3,172.9,1\n14,-1,210.4,383.6,63.1,193.6,1\n14,-1,878,131.3,58.4,178.9,1\n14,-1,416.5,87.7,52.7,163.5,1\n14,-1,1397.6,187.3,52.5,178.7,0.999\n14,-1,1436.7,242.2,48.6,172.1,0.999\n14,-1,1039.6,1,49.4,70.9,0.928\n14,-1,247.4,365.5,51.2,199.8,0.462\n14,-1,1,854.4,42.1,226.6,0.171\n14,-1,913.8,139.7,49.7,163.9,0.115\n809,-1,1221.4,29.2,62.4,119,1\n809,-1,687.1,205.2,78.5,114.7,1\n809,-1,277.4,534,80.4,233.8,1\n809,-1,1617.8,1,60.1,142.8,1\n809,-1,786.9,131.5,52.5,178.3,1\n809,-1,1723.9,453.4,74.8,213.1,1\n809,-1,550.7,115.6,64.8,176.9,1\n809,-1,1574.2,590.8,101,234.4,1\n809,-1,277.8,166.3,61.3,194.8,1\n809,-1,441.3,235.9,56.2,194.8,1\n809,-1,1472.4,33.3,63,155.9,1\n809,-1,994.4,593.5,73.5,242.8,1\n809,-1,378.2,247.7,75.5,179.3,1\n809,-1,476.1,106.2,64.9,179.9,1\n809,-1,234.3,136.8,51.2,162.5,1\n809,-1,1069.6,572.5,74.1,251,1\n809,-1,751.2,73.2,57.7,159.3,1\n809,-1,346.2,179.5,52.6,174.4,1\n809,-1,1435.4,52.4,50.6,158.5,1\n809,-1,422.9,106.3,60.8,168.9,0.998\n809,-1,441.4,4.2,36.2,70.3,0.224\n235,-1,1221.6,30.4,62.2,119.2,1\n235,-1,1488.3,64.4,55.3,151.6,1\n235,-1,686.3,207.6,79.6,111.6,1\n235,-1,378.8,541.9,96.4,238.7,1\n235,-1,796.9,153.1,58.9,174.4,1\n235,-1,705.9,1.5,55.4,159.5,1\n235,-1,1582,1.3,58.5,145.6,1\n235,-1,1092.1,125,64.8,182.6,1\n235,-1,355.9,106.8,54.5,178.6,1\n235,-1,288.5,127,55.5,172,1\n235,-1,439.4,183.8,78.9,209.4,1\n235,-1,211.9,125.4,55.6,168.6,1\n235,-1,109.3,350.2,50,189.7,1\n235,-1,1362,567.4,104.4,243.4,1\n235,-1,1170.6,126.6,55,161.5,1\n235,-1,1720.3,457,79.1,212.2,1\n235,-1,516.9,121,49.9,181,1\n235,-1,221.5,484.1,58.9,201.5,1\n235,-1,923.6,125.3,70.4,185.8,1\n235,-1,173,704.4,89.8,248.1,1\n235,-1,502.9,348.7,73.4,223.7,1\n235,-1,837.5,337.8,77.7,193.9,1\n235,-1,590.1,359,62.1,200.9,1\n235,-1,780.6,328.2,78.5,207.8,1\n235,-1,120.8,644.9,89,243.4,0.999\n235,-1,933.5,900.6,71.7,180.4,0.993\n1046,-1,1222.1,30.2,61.2,118.8,1\n1046,-1,686.9,206.7,79.8,114.4,1\n1046,-1,795,141.8,71.4,172.1,1\n1046,-1,476.8,324.1,75.8,195.6,1\n1046,-1,288.1,125.2,53.8,173.7,1\n1046,-1,275.8,541.4,91.9,204.3,1\n1046,-1,1719.9,455.9,80.2,214,1\n1046,-1,1119.3,554,86.6,248.8,1\n1046,-1,357.7,327.5,76.2,211.6,1\n1046,-1,1304.5,199.8,60.8,164.8,1\n1046,-1,229.3,137.6,55.3,165.3,1\n1046,-1,1650.7,676.2,94.9,236.9,1\n1046,-1,1722.2,219.2,57.3,173.5,1\n1046,-1,936.8,233.6,65.6,201.5,1\n1046,-1,751.3,74.3,54.3,164,1\n1046,-1,851.5,238.5,65.8,193.8,1\n1046,-1,374.4,518,67.8,239,1\n1046,-1,374,100.5,57.6,179,1\n1046,-1,511.1,171.2,72.9,193.5,1\n1046,-1,289.4,329.5,72.5,208.1,1\n1046,-1,1470.7,219.2,73.4,167.2,1\n1046,-1,308.7,2,38.1,129.7,1\n1046,-1,1573.2,589.8,103.4,241.1,1\n1046,-1,583,536.4,64.7,254.7,1\n1046,-1,469.3,175.1,54,163.8,1\n1046,-1,433.9,66.6,61.8,176.2,0.999\n1046,-1,1863.1,258.8,57.9,198,0.996\n1046,-1,876.9,927.1,70.3,153.9,0.055\n1044,-1,1221.5,30.1,62,119.5,1\n1044,-1,686.4,206.8,80.5,114.8,1\n1044,-1,794.2,141.9,70.6,171.3,1\n1044,-1,272.9,537.3,97.2,200.6,1\n1044,-1,476.8,322.3,76.4,197.3,1\n1044,-1,361.5,325.6,73.1,206.7,1\n1044,-1,288.4,126,53.4,172.4,1\n1044,-1,1721,455,78.8,214.9,1\n1044,-1,230,137.6,55.9,166.1,1\n1044,-1,1121.1,557.1,87.5,253.1,1\n1044,-1,1651.8,678.3,97.3,234.8,1\n1044,-1,937.1,235.5,65,203.2,1\n1044,-1,751.3,73.8,54.7,162.8,1\n1044,-1,1296.9,198,62.3,163.2,1\n1044,-1,851.6,241,65.1,194.7,1\n1044,-1,373.4,514.6,69.2,239,1\n1044,-1,374,102,57.5,177.9,1\n1044,-1,1718.5,218,59,173.2,1\n1044,-1,308.5,2.6,38.1,128.1,1\n1044,-1,291.1,325.6,72.5,210.2,1\n1044,-1,1573.4,589.9,102.1,240.7,1\n1044,-1,1469.1,217.3,75.6,165.3,1\n1044,-1,503.7,168.2,77.7,201.5,1\n1044,-1,582.5,536.6,65.2,253,1\n1044,-1,1861.4,253.8,59.6,199.4,1\n1044,-1,464.7,172.3,55.6,168.9,1\n1044,-1,433.1,64.8,62.6,176,0.999\n395,-1,1222.5,30.7,60.9,118.7,1\n395,-1,686.3,206.7,79.6,113.5,1\n395,-1,1638.7,34.8,65.8,174.8,1\n395,-1,1773.4,115.2,67.7,164.7,1\n395,-1,1144.4,472.9,74,202.9,1\n395,-1,358.6,105.3,54.5,179.2,1\n395,-1,947.9,25.7,65.5,173.8,1\n395,-1,451.9,276.8,77.3,209.2,1\n395,-1,826.8,1.1,56.7,119.6,1\n395,-1,794.2,152.3,61.2,170.6,1\n395,-1,220,142.6,61.9,155.4,1\n395,-1,108.7,349.2,52.1,190.6,1\n395,-1,365.6,2.8,61.6,100.5,1\n395,-1,318.3,562.9,90.6,247.5,1\n395,-1,282.6,127.4,56,167,1\n395,-1,1594.3,622.6,88.9,255,1\n395,-1,205.4,284.8,54.8,181.9,1\n395,-1,1719.6,456.8,78.8,214.9,1\n395,-1,432.5,583.4,73.8,236.5,1\n395,-1,1010.8,41.3,55.1,162.1,1\n395,-1,920.5,522.5,80.5,219.4,1\n395,-1,850.5,515.2,94,231.7,1\n395,-1,461.7,71.3,70,189.7,1\n395,-1,543.9,66.2,56.6,170.7,1\n395,-1,712.4,1.2,51.4,138.5,0.999\n395,-1,430.8,80.8,47.4,175.2,0.997\n395,-1,980.4,906.3,88.3,174.7,0.993\n395,-1,1767.7,425.9,69.4,212.6,0.99\n395,-1,709.3,89.9,57.7,176.2,0.986\n395,-1,923.5,11,47.9,112.3,0.062\n868,-1,1221,29.9,62.2,118.4,1\n868,-1,687.1,206.2,79,113.3,1\n868,-1,480.6,1.7,49,125.8,1\n868,-1,1475.5,74.9,59.5,153,1\n868,-1,795,139.4,78.3,174.8,1\n868,-1,1087.4,1.1,54.7,138,1\n868,-1,1687.4,45.3,53.8,163.8,1\n868,-1,991.1,480.5,78.7,225.5,1\n868,-1,1574.9,589.9,103.6,235.7,1\n868,-1,1721,453.6,78.7,212.8,1\n868,-1,557.9,116.6,59.9,174.5,1\n868,-1,477.8,158.2,59.4,181.7,1\n868,-1,338.5,312.1,82.1,181.2,1\n868,-1,276.9,622.1,85.7,259,1\n868,-1,300.3,161.5,68.8,193.7,1\n868,-1,1578.6,20.7,48.8,143.7,1\n868,-1,752.9,70.5,55.1,163.7,1\n868,-1,254.6,1,53.9,119.1,1\n868,-1,239.3,134.1,52.5,164.3,1\n868,-1,1416.6,17.8,50.1,152.4,1\n868,-1,906.8,496.1,68.7,224.5,1\n868,-1,430.6,294.4,55.7,206.3,1\n868,-1,413.5,157.3,58.9,177.8,1\n868,-1,359,169.1,34,163.9,0.088\n1010,-1,1220.8,30.3,62.7,116.8,1\n1010,-1,686.1,206.6,80.4,112.4,1\n1010,-1,496.7,281.2,68.6,189.9,1\n1010,-1,793.8,140.1,73.8,172.5,1\n1010,-1,289.3,126.6,53.2,169.2,1\n1010,-1,390,289.6,74.7,197.2,1\n1010,-1,1223,144.9,60.9,173.2,1\n1010,-1,1719.5,454,83.1,216,1\n1010,-1,1470.1,184.2,66.8,164.3,1\n1010,-1,1576,590.1,102.8,236.8,1\n1010,-1,540.6,120.3,61.6,170.1,1\n1010,-1,231.8,138.9,53.5,164,1\n1010,-1,929.9,275.9,65.6,209.7,1\n1010,-1,1823.7,205.3,59.5,187.4,1\n1010,-1,1156.6,620.9,96.4,264.7,1\n1010,-1,1689.5,169.1,57.2,173.1,1\n1010,-1,751.2,74.2,54.5,161.3,1\n1010,-1,844.8,286,65.6,201.7,1\n1010,-1,298.3,481.4,88.9,204.3,1\n1010,-1,1740.1,678.8,91.7,243.8,1\n1010,-1,305.2,291.3,66.7,202.1,1\n1010,-1,379.8,466.2,66.2,231.3,1\n1010,-1,591.8,551.9,96.9,244.2,1\n1010,-1,313.6,2.3,42.5,127.7,1\n1010,-1,431.5,167.3,61.7,194.2,1\n1010,-1,348.7,887.9,97.9,193.1,1\n1010,-1,381.9,173.7,52.5,161.8,0.999\n1010,-1,507.9,93.8,52.9,154.4,0.999\n1010,-1,434.7,72.1,64,161,0.993\n1010,-1,384.4,1,56.4,157.1,0.973\n306,-1,1221.7,31.3,61.4,118.5,1\n306,-1,1457,12.4,54.2,147.2,1\n306,-1,686.8,207,79.2,112.9,1\n306,-1,414,33.3,56.6,164.2,1\n306,-1,1689.7,43.4,57.3,157.9,1\n306,-1,1719.1,458.4,80.1,210.9,1\n306,-1,284,577.1,86.6,249.2,1\n306,-1,934.9,55.6,65.8,177.9,1\n306,-1,354.3,108.9,57.1,178.9,1\n306,-1,108.6,351.9,51.9,187.7,1\n306,-1,236,388.3,60.6,194.6,1\n306,-1,794.1,148.4,61.7,178.2,1\n306,-1,454.8,127.7,71.5,201.4,1\n306,-1,217,128.9,54.8,167.5,1\n306,-1,705.4,1,53.3,158.4,1\n306,-1,533.3,449.8,67.6,215.1,1\n306,-1,1481.8,596.6,88.7,243.4,1\n306,-1,1004.4,80.5,60.9,184.2,1\n306,-1,280.4,130.4,54.4,172.4,1\n306,-1,1066.8,81.6,53.7,166.8,1\n306,-1,887,425.7,71.8,190.6,1\n306,-1,825.1,412.5,86.8,214.6,1\n306,-1,736.4,100.2,47.1,172.6,1\n306,-1,318.8,858.7,99.2,222.3,1\n306,-1,388.9,404.9,82.7,229.7,1\n306,-1,510.1,102.1,47.8,176.7,0.999\n306,-1,454.2,435.6,64.8,230.3,0.999\n306,-1,932.8,912.4,71.9,168.6,0.995\n306,-1,362.6,781.9,93.8,266.1,0.413\n224,-1,1221.7,30.8,60.7,119.7,1\n224,-1,686.1,206.5,79.5,113.5,1\n224,-1,795.2,145.9,64.1,178.3,1\n224,-1,1492.2,68.5,53.7,148.3,1\n224,-1,108.7,347.1,51.2,191.2,1\n224,-1,399.8,564.4,84.8,243.5,1\n224,-1,431.5,188.7,75.1,217.6,1\n224,-1,705.4,1,55.1,160.4,1\n224,-1,1194.9,129.6,44.9,165.4,1\n224,-1,288.5,126.7,55.5,173.4,1\n224,-1,356.8,105.8,53.3,180.3,1\n224,-1,1356.5,567.4,105.8,244.3,1\n224,-1,212.5,126.5,55.3,167,1\n224,-1,1721.8,457.2,77.3,211.2,1\n224,-1,137.4,672.6,105.8,261.9,1\n224,-1,1112.4,129.1,62.6,184.2,1\n224,-1,902.5,137.5,77.6,183.9,1\n224,-1,518.9,123.3,47.3,174.9,1\n224,-1,507.2,336.4,73,221.3,1\n224,-1,217.3,500.8,60.3,203.9,1\n224,-1,827.3,324.8,73.6,192.3,1\n224,-1,767.4,314.9,76.8,202.2,1\n224,-1,1572.1,1,54.7,141.1,1\n224,-1,982.7,125.7,40.5,154.4,1\n224,-1,71.2,628.8,104.1,240,0.999\n224,-1,595,347.6,59.2,198.4,0.996\n224,-1,939.5,907.1,71.3,173.9,0.994\n115,-1,1221.5,30,62.5,119.2,1\n115,-1,356.1,105.5,56.3,177.8,1\n115,-1,1131.9,148,66.7,172.8,1\n115,-1,393.4,792.5,99.5,275.9,1\n115,-1,1487.5,68.1,56.2,151.7,1\n115,-1,704.8,1,55.1,159.7,1\n115,-1,211,129.3,50.9,162.9,1\n115,-1,107.3,349.7,50.6,188.4,1\n115,-1,930.3,207.9,68,192.2,1\n115,-1,289.9,125.5,55.1,170.7,1\n115,-1,1358.4,566.4,105.6,245.6,1\n115,-1,1722,457.3,76.9,209.6,1\n115,-1,426.2,290.3,78.9,226.6,1\n115,-1,517.7,237.1,70.5,206.5,1\n115,-1,1366.1,183.9,64.6,189,1\n115,-1,1246.8,188.2,43.2,162.4,1\n115,-1,60.9,675.5,78.7,217.6,1\n115,-1,538.9,63.8,49.3,167.6,1\n115,-1,480.4,157.1,55,166.2,1\n115,-1,103.2,549.2,83.5,243.6,1\n115,-1,792.8,206.3,64.3,188.8,1\n115,-1,442.9,1,55.3,153.5,1\n115,-1,837.8,221.6,55.8,174.5,1\n115,-1,376.1,2.4,47.5,156.3,1\n115,-1,481.6,40.8,61.8,159.5,0.999\n115,-1,1124.8,926.6,84.3,154.4,0.173\n545,-1,1221.9,30.7,61.7,119.8,1\n545,-1,686.9,206,79.3,114.3,1\n545,-1,1490.7,3.9,58.7,142.5,1\n545,-1,781,145.9,67.8,170.7,1\n545,-1,385.9,214.7,61.7,190,1\n545,-1,1667.6,286.2,88.1,207.2,1\n545,-1,990.2,1.4,51.9,102.3,1\n545,-1,1715.8,456.7,83.6,210.8,1\n545,-1,875.7,1.1,53.3,109.3,1\n545,-1,1659.8,2.7,53.1,158.6,1\n545,-1,289.6,124.7,51.9,171.4,1\n545,-1,178.4,306.7,67.3,191.9,1\n545,-1,777.4,601.5,92.7,248.7,1\n545,-1,1784.4,226.6,66.1,178.9,1\n545,-1,526.6,108.4,59.8,175.4,1\n545,-1,1596.1,1,55.2,157.1,1\n545,-1,454.7,106.9,66.8,182.6,1\n545,-1,218.6,135.2,59.1,157.5,1\n545,-1,1591.8,586.3,69.4,238.6,1\n545,-1,929.3,1.4,54.9,101.4,1\n545,-1,256.4,863.6,80.5,217.4,1\n545,-1,358.7,116,56.7,168.9,1\n545,-1,409.9,46.2,48.4,161.4,0.999\n545,-1,132,270.9,54.4,217.3,0.998\n545,-1,1069,769.7,89.5,250.1,0.997\n545,-1,755.9,84.1,47.2,153.8,0.986\n545,-1,992.1,757.9,117.2,253.4,0.911\n117,-1,1221.6,30.1,62.4,118.5,1\n117,-1,355.9,104.9,57.2,179.8,1\n117,-1,1124.9,150.3,72.5,169.2,1\n117,-1,394.6,787.5,101.7,277.7,1\n117,-1,1488.2,68.5,55.8,150.8,1\n117,-1,108,349.5,50.1,189.3,1\n117,-1,704.7,1,55.4,158.9,1\n117,-1,928.4,206.7,67.9,196,1\n117,-1,211.8,128.4,50.6,164.3,1\n117,-1,1722,456.5,77,210.5,1\n117,-1,1359.2,566.5,104.9,245.5,1\n117,-1,288.7,126.1,55.5,169.4,1\n117,-1,427.1,288.9,78.2,228,1\n117,-1,519.6,242,72.5,201.4,1\n117,-1,68.3,670.1,76.8,214.7,1\n117,-1,1359.3,182.3,66,186.7,1\n117,-1,478.6,164.4,57.4,156.7,1\n117,-1,538.8,63.9,49.2,169.2,1\n117,-1,1241.2,180.8,44.1,163.6,1\n117,-1,790.8,205.9,65.5,189.2,1\n117,-1,444.4,1,54.8,150.2,1\n117,-1,376.1,1.8,48.8,152.2,1\n117,-1,103.6,544.3,84.7,257.1,1\n117,-1,836.8,225.2,56.2,176,1\n117,-1,482.2,40.4,60.1,162.4,0.999\n117,-1,1119.9,929.1,82.3,151.9,0.304\n477,-1,1222.2,30.9,62,118,1\n477,-1,686.6,206,79.8,113.5,1\n477,-1,999.9,1,57.9,148.8,1\n477,-1,291.1,202.6,51,168.8,1\n477,-1,359.5,107.2,56.6,178.9,1\n477,-1,934.3,1,57.1,141.3,1\n477,-1,1689.7,456.7,110.5,213.5,1\n477,-1,1503.6,1,59,120.8,1\n477,-1,876.9,1,53.2,132.5,1\n477,-1,451.9,171.4,71.5,194.8,1\n477,-1,1787.8,362.7,87.8,212.2,1\n477,-1,1723.8,177.7,66.9,162.3,1\n477,-1,808.2,590.9,91.1,256.4,1\n477,-1,1639.2,338.1,62.7,199.9,1\n477,-1,1782.1,152.6,81.9,175.6,1\n477,-1,227.9,700.4,88.8,267.3,1\n477,-1,1539.1,597,74.7,242.2,1\n477,-1,804.1,142.5,47.1,178.8,1\n477,-1,217.8,136.1,63.9,163.1,1\n477,-1,912.3,632.4,116.2,252.2,1\n477,-1,127.1,344.1,58.6,187.3,1\n477,-1,320.3,731.8,78.7,253.5,1\n477,-1,512.8,86.1,62.7,172.9,1\n477,-1,446.7,29.9,72.3,180.9,1\n477,-1,1704.4,51.4,52,168.3,1\n477,-1,1654.3,41.2,63.1,174.5,1\n477,-1,713.8,93.8,54.9,162.1,0.999\n477,-1,412.7,5.8,45.8,155.2,0.999\n477,-1,752.7,98.9,53.8,141.1,0.998\n477,-1,1024,926.8,78.6,154.2,0.921\n477,-1,994.4,659.1,71.9,218.1,0.875\n477,-1,426.3,148.6,54.6,190.4,0.792\n960,-1,686.7,206.3,79.7,112.8,1\n960,-1,1220.8,30.3,62.5,119.6,1\n960,-1,793.4,141,74.4,172.3,1\n960,-1,1764.2,150.6,69.1,176.5,1\n960,-1,1470.9,142.8,65.4,161.4,1\n960,-1,1153.9,85.5,58.6,167.8,1\n960,-1,1575.7,589.5,102.1,235.3,1\n960,-1,1645.9,108.9,55.4,171.8,1\n960,-1,750.9,70.5,56.1,163.7,1\n960,-1,925.5,342.1,76.3,220.2,1\n960,-1,420,240.7,69,195.2,1\n960,-1,1719.6,456,78.4,210.8,1\n960,-1,1224.5,736.5,95.5,272.7,1\n960,-1,323.8,781.5,93.8,270.3,1\n960,-1,1469.7,1,59,106.7,1\n960,-1,440.2,71.9,55.6,181.8,1\n960,-1,849.8,355.7,68.5,210.7,1\n960,-1,486.9,231.7,61.9,177.9,1\n960,-1,229.5,136.9,55.5,166.5,1\n960,-1,549.7,118.6,55.9,170.7,1\n960,-1,391,407.5,66.8,216.2,1\n960,-1,335.9,241.3,65,191.4,1\n960,-1,318.8,416.7,84.5,193.6,1\n960,-1,1406.6,1.5,47.8,105.7,1\n960,-1,1740.6,674.5,93.9,249.2,1\n960,-1,289.2,124.5,52.7,172.4,1\n960,-1,483.9,52.5,52.9,157.4,1\n960,-1,242.3,1.9,51.5,117.1,0.999\n960,-1,312.5,1,48.9,131.1,0.996\n470,-1,1221.9,30.8,62.3,117.6,1\n470,-1,451.6,189.2,71.7,195.8,1\n470,-1,686.9,206.4,79.1,112.5,1\n470,-1,1005.1,1,54.5,153.2,1\n470,-1,934.7,1,57.3,146.4,1\n470,-1,1793.1,366.4,90.4,211.3,1\n470,-1,359.9,108.4,53.7,178.2,1\n470,-1,1703.5,457.5,96.7,210.4,1\n470,-1,280.8,210.9,51.7,171.7,1\n470,-1,1506.7,1,58.5,113.8,1\n470,-1,1642.4,340.9,65.5,204.6,1\n470,-1,1541.8,609.6,72.9,239.7,1\n470,-1,878,1,52.1,132.1,1\n470,-1,803.9,144.2,48.2,174.8,1\n470,-1,330.2,717.4,73.8,247.8,1\n470,-1,218.5,137.3,63.4,158.4,1\n470,-1,235.3,684,92.4,265.4,1\n470,-1,120.7,345.7,56,185.8,1\n470,-1,515.1,80.3,60.5,173.7,1\n470,-1,1665.3,51.5,60.7,171.3,1\n470,-1,809.4,585.7,96.1,255.5,1\n470,-1,1725.1,167.2,66.2,168.5,1\n470,-1,901.5,626.4,113.9,240.9,1\n470,-1,446.5,33.9,72.1,181.5,1\n470,-1,753.7,97.3,55.3,139.2,1\n470,-1,712.4,93.7,54.5,163.9,0.999\n470,-1,1723.3,62.7,50.8,161.5,0.999\n470,-1,987.3,645.9,82.3,224.4,0.998\n470,-1,1761.5,141.7,78.7,174.5,0.998\n470,-1,414.4,5.6,45,146.9,0.994\n470,-1,1026.4,922.6,83.5,158.4,0.989\n470,-1,429.4,139.7,50,180.9,0.837\n470,-1,1501.6,572.7,80.1,205.2,0.108\n826,-1,1221.1,29.2,62.6,118.3,1\n826,-1,687.7,205.4,78,114.4,1\n826,-1,1035.1,549,98,241,1\n826,-1,1636.5,3.4,56.3,157.4,1\n826,-1,274.6,559.6,81.5,237.4,1\n826,-1,557.7,115,61.9,175.9,1\n826,-1,791.7,134.8,65.9,179.9,1\n826,-1,1575.6,589,101,237,1\n826,-1,1722.9,452.8,75.5,214.3,1\n826,-1,1476.7,43.7,59.1,157,1\n826,-1,437.4,257.2,56.1,194.1,1\n826,-1,751.3,71.8,57.2,161.7,1\n826,-1,1423.9,39.6,50.5,159,1\n826,-1,473.9,123.5,60,176.9,1\n826,-1,375.1,268.2,71.4,172.8,1\n826,-1,288.2,163.4,66.8,196.7,1\n826,-1,964.5,566.1,74.4,237.4,1\n826,-1,238,134.8,49,168,1\n826,-1,423.1,119.4,57.6,173.3,1\n826,-1,348,175.3,49.4,174.6,0.997\n826,-1,249.7,1.4,55.4,114.4,0.082\n431,-1,1221.5,30.3,62.4,118.6,1\n431,-1,686.1,206.2,80.2,113.3,1\n431,-1,938.8,4.4,63.8,168.1,1\n431,-1,843.2,1,53.7,136.5,1\n431,-1,358.8,109,54,178.5,1\n431,-1,448,229.5,79.3,203.8,1\n431,-1,110.8,348.1,54.4,190.4,1\n431,-1,1718.5,457.5,80.3,209.3,1\n431,-1,1679.5,85.6,65.1,173,1\n431,-1,1009.2,21.4,53.7,159.8,1\n431,-1,1301.3,514.2,69.2,210.8,1\n431,-1,282.9,618.1,92.1,259.2,1\n431,-1,1569.7,614.3,90.8,245.9,1\n431,-1,1757.3,143.4,56.7,165.3,1\n431,-1,534.9,74.2,57.2,165.3,1\n431,-1,753.1,561.5,86.7,248.4,1\n431,-1,798.4,151.1,53,173.2,1\n431,-1,284.5,129.2,54,166.3,1\n431,-1,225.9,247.6,50.6,175.9,1\n431,-1,379.7,650.7,71.1,238.8,1\n431,-1,360.3,1,66.4,128.9,1\n431,-1,870.9,567.3,107.5,240.2,1\n431,-1,714.2,89.7,62.3,171.9,1\n431,-1,429.7,108.6,59.6,173.2,1\n431,-1,950.1,577.3,85.4,219.8,1\n431,-1,1849.7,419.1,71.3,188.3,1\n431,-1,222,137.5,73.9,162.4,1\n431,-1,422.7,1,43.3,127.9,0.999\n431,-1,1768.6,71.9,93.3,179.7,0.998\n431,-1,724.7,1.6,49,108.4,0.988\n431,-1,995,932.9,85.2,148.1,0.945\n431,-1,755.5,88.3,40.8,150.1,0.477\n431,-1,461.4,53.4,59.7,187.1,0.206\n636,-1,1221.1,31.5,61.9,116.7,1\n636,-1,687.4,206.1,78.9,113.5,1\n636,-1,1481.1,6,60.6,142.6,1\n636,-1,1708.4,457,100.1,208.4,1\n636,-1,800.5,145.7,65.8,170.4,1\n636,-1,340.6,308.4,68.9,206.8,1\n636,-1,546.7,113.8,63.1,173.7,1\n636,-1,358.7,111.2,52,173.1,1\n636,-1,1574.8,588.8,96.3,234.4,1\n636,-1,497.4,537.9,104.1,243.6,1\n636,-1,202.6,228.7,62.6,202.4,1\n636,-1,259.1,243.4,60.9,187.5,1\n636,-1,1624.3,196.2,68.8,185.7,1\n636,-1,417.7,112.3,52.9,155,1\n636,-1,752.3,84.5,44.6,151.1,1\n636,-1,287.1,125,51.5,168.9,1\n636,-1,420.4,2.2,56.3,139,1\n636,-1,459.1,98,50.8,167.6,0.999\n636,-1,352.6,1,56,127.8,0.999\n636,-1,494.3,63.2,47.2,160.5,0.998\n636,-1,234.1,138.1,47.3,159.5,0.989\n636,-1,1121.6,939.4,97.7,141.6,0.082\n636,-1,936.4,925.4,67.8,155.6,0.058\n751,-1,1221.4,29.8,61.8,118.8,1\n751,-1,686.9,206,78.8,113.9,1\n751,-1,1464.1,95.2,54.4,168,1\n751,-1,548.9,116.7,61.6,175.6,1\n751,-1,261.9,184.5,59.8,201,1\n751,-1,303.2,447.4,72,225.6,1\n751,-1,1714.4,456.6,89,207.3,1\n751,-1,780.5,134.7,60.9,176.2,1\n751,-1,1576.2,589.2,98.9,234.1,1\n751,-1,464.2,188.5,54.2,187.7,1\n751,-1,1594.6,90.1,60.3,181.2,1\n751,-1,331.8,199.4,56.3,170.8,1\n751,-1,1494.3,16.6,57.2,139.1,1\n751,-1,445,59.2,56.8,168,1\n751,-1,403.1,199.1,64.9,170.7,1\n751,-1,464.6,562.2,102.7,252.1,1\n751,-1,749.8,79.1,50.4,154.8,1\n751,-1,257.5,1,49.9,123.6,1\n751,-1,1110.1,707.8,78.5,262.2,1\n751,-1,1176.3,683.9,88.2,259.7,1\n751,-1,359,108.6,49.6,174.3,0.999\n751,-1,236.5,143,51.3,152.3,0.994\n751,-1,394.9,58,56.9,168.9,0.993\n751,-1,293.9,135.8,42.2,157.3,0.719\n550,-1,1221.4,30.5,62.2,119,1\n550,-1,687.1,205.8,78.4,114.4,1\n550,-1,1491.1,3.7,58.3,142.9,1\n550,-1,383.1,220,62.4,192.9,1\n550,-1,784.8,144.7,67.5,175.2,1\n550,-1,1662.7,286.3,89.6,205.9,1\n550,-1,1790.4,232.1,71.4,182.8,1\n550,-1,531.1,108.3,60.6,177.3,1\n550,-1,1714.7,456.1,86,211.8,1\n550,-1,873.9,1,54.2,108.4,1\n550,-1,763.1,595.7,100,255.1,1\n550,-1,988.6,2.3,50.7,98.5,1\n550,-1,289,122.3,52.1,173.9,1\n550,-1,1659.5,2.3,54,155.8,1\n550,-1,247.4,878.7,82.4,202.3,1\n550,-1,1594.5,583.1,67.5,243.5,1\n550,-1,185.8,302.5,68.2,194.1,1\n550,-1,1593.8,1,55.3,156.2,1\n550,-1,220.1,135.7,57.2,158.6,1\n550,-1,456.1,98.6,66.1,183.9,1\n550,-1,135,269.5,57.9,219.4,1\n550,-1,358.9,109.6,55.6,177.2,1\n550,-1,753,84.1,48.4,153,0.999\n550,-1,412.1,142.1,47.2,167.2,0.999\n550,-1,927.7,1.2,56.2,98.7,0.999\n550,-1,1075,781.3,97.7,247.3,0.996\n550,-1,1001.3,775.8,107.5,241.5,0.78\n550,-1,1029.1,946.5,82.2,134.5,0.086\n1008,-1,1221,30.4,62.5,117.4,1\n1008,-1,686.4,206.4,80,112.9,1\n1008,-1,499.5,280.9,68.2,190.8,1\n1008,-1,793.2,140.3,75.2,173.2,1\n1008,-1,392.5,287.3,69.8,190.4,1\n1008,-1,1217.8,142,62.2,176.1,1\n1008,-1,289.5,127.5,53.1,167.9,1\n1008,-1,1720,453.6,82.1,216.7,1\n1008,-1,1575.2,589.7,103,237.1,1\n1008,-1,1471.4,182.8,64.9,164.3,1\n1008,-1,231.5,138.6,54.3,164.6,1\n1008,-1,1819.6,203.7,62.3,188,1\n1008,-1,928.2,277.4,68,209.4,1\n1008,-1,539.8,120.7,60.8,170.3,1\n1008,-1,1687,166.4,58.4,174,1\n1008,-1,296.9,480.3,90.7,201.3,1\n1008,-1,843.2,288.3,66.6,204.4,1\n1008,-1,381.3,464.8,67.4,229.5,1\n1008,-1,751.2,73.1,54.2,162.1,1\n1008,-1,307.8,287.3,65,199.7,1\n1008,-1,1161.8,627.2,93.3,263.2,1\n1008,-1,1739.8,675,93.9,250.1,1\n1008,-1,594,551.6,95.1,246,1\n1008,-1,348.8,884.2,93.1,196.8,1\n1008,-1,314,2.6,42.6,128.5,1\n1008,-1,423.8,163.5,61.1,195.8,1\n1008,-1,508,87.7,53.9,157.9,1\n1008,-1,379,176,51.4,161.5,0.999\n1008,-1,436.1,67.6,62.4,167.6,0.999\n1008,-1,385.5,1,53.4,155.5,0.967\n521,-1,1221.3,30.7,61.3,119.7,1\n521,-1,1488.8,1.6,59.2,140.3,1\n521,-1,686.7,205.9,80.3,115.2,1\n521,-1,994.4,1,54.6,120.6,1\n521,-1,1719.5,462.4,80,202.9,1\n521,-1,392.4,185.5,58.8,187.9,1\n521,-1,1672.3,23.1,53.1,159.3,1\n521,-1,162.3,324.6,67,192.3,1\n521,-1,289.1,124.3,53.4,172.6,1\n521,-1,464.1,128.7,65.3,184.4,1\n521,-1,788.2,145.8,55.3,176.4,1\n521,-1,1610.2,9.8,56.7,173.4,1\n521,-1,825.7,606.3,72.1,259,1\n521,-1,929.5,1.5,58.5,117.3,1\n521,-1,1748.5,634.4,69.7,222.6,1\n521,-1,1572.2,596.9,60.1,241.4,1\n521,-1,947.7,714.1,123,264.8,1\n521,-1,1858.9,215.7,62.1,190.2,1\n521,-1,886.3,1,52.1,118.6,1\n521,-1,188.5,781.9,101.4,263.2,1\n521,-1,1706.8,311.5,88.1,213.6,1\n521,-1,1762.8,207.1,59.3,173.7,1\n521,-1,216.4,136.1,64,162,1\n521,-1,354.4,164.6,47.8,164,1\n521,-1,273.4,810.7,79.6,262.9,1\n521,-1,515.1,98.7,58.3,181.1,1\n521,-1,737.5,91.1,65.9,172.5,1\n521,-1,450.9,3.2,76.1,173.8,1\n521,-1,1598.1,294.5,65.3,198.9,1\n521,-1,401.7,27.4,46.8,161.5,0.999\n521,-1,578.2,72.1,38.4,148.9,0.913\n521,-1,1044.4,732.5,70.1,252,0.236\n521,-1,1047.3,932,72.3,149,0.064\n632,-1,687.4,205.9,79,112.6,1\n632,-1,1221.7,30.3,61.5,117.9,1\n632,-1,1480.6,6.7,60.1,143.2,1\n632,-1,800.6,145.2,66.6,170.6,1\n632,-1,1710.8,455.5,94.4,209.3,1\n632,-1,503.6,538.2,111,245.3,1\n632,-1,341.6,298.5,68.5,208,1\n632,-1,1574,589.1,97.2,236.1,1\n632,-1,546.2,113.3,62.6,173.6,1\n632,-1,358.3,112.6,53.1,172.5,1\n632,-1,1627.1,197.3,71.4,186.9,1\n632,-1,195.5,227.8,69.7,205.9,1\n632,-1,286.8,122.8,52.8,169.9,1\n632,-1,255,245.8,59.9,186.9,1\n632,-1,753.5,83.2,44.5,150.9,1\n632,-1,351.4,1,55.9,127.8,1\n632,-1,418.7,103.3,50.6,157.3,1\n632,-1,419.8,1,59.2,130.4,1\n632,-1,500.4,77.6,45.3,150,1\n632,-1,457.8,88.1,47.6,173.5,0.998\n632,-1,235.9,133.4,47.2,162,0.996\n632,-1,1113.9,927.7,103.7,153.3,0.493\n632,-1,1580.2,1.4,55,83.6,0.329\n587,-1,1221.9,31.4,61.1,118.5,1\n587,-1,687.1,206,79.1,113.7,1\n587,-1,1481.6,4.3,60.1,144.5,1\n587,-1,1642.9,1,55.2,122.9,1\n587,-1,800.8,145.9,64.3,172.5,1\n587,-1,1651.1,244.5,78.7,199.9,1\n587,-1,374.2,257.5,64.9,197.4,1\n587,-1,561.2,112.7,49.7,177.3,1\n587,-1,221.2,277.7,64.9,186.6,1\n587,-1,357.4,111,54.1,177.2,1\n587,-1,1720.2,455.3,81.1,212.3,1\n587,-1,214.1,131.6,54.2,166.2,1\n587,-1,287.4,126.4,52.1,168.6,1\n587,-1,1575.3,588.6,92.5,235.9,1\n587,-1,873.9,3.1,49.9,98.4,1\n587,-1,467.1,111.5,50.1,165.1,1\n587,-1,754.3,80.1,43.1,154.3,1\n587,-1,161.9,254.2,58.7,204.6,1\n587,-1,1853.3,269.8,67.7,176.9,1\n587,-1,1058.6,842.9,125.6,238.1,1\n587,-1,428,66.9,45.5,169.7,1\n587,-1,1147.1,850.6,90.2,230.4,0.514\n989,-1,686.5,206.3,79.6,112.9,1\n989,-1,793.2,140.5,73.7,171.5,1\n989,-1,1221.8,31,60.8,119.8,1\n989,-1,1192.3,125.1,54.5,165.9,1\n989,-1,401.6,269.5,70.4,196.7,1\n989,-1,1794.3,180.5,69.9,182.4,1\n989,-1,496.2,254.9,66.5,189.8,1\n989,-1,1468.5,168.2,67.3,168.2,1\n989,-1,837.6,313.6,71.8,207,1\n989,-1,300.2,455.3,84.5,203.6,1\n989,-1,330.8,842.8,93.4,238.2,1\n989,-1,1575.1,589.5,103.3,236,1\n989,-1,230.2,135.6,55.4,165.2,1\n989,-1,751.1,70.4,55.8,164.8,1\n989,-1,1720.4,455.5,79.6,211.8,1\n989,-1,1672.5,146.5,54,167.9,1\n989,-1,544.3,117.8,57.9,169.5,1\n989,-1,290.2,125.7,53.1,169.7,1\n989,-1,1188.8,663.9,90.1,265.9,1\n989,-1,315.8,268.5,62,196.2,1\n989,-1,921.5,300.7,69.4,212.4,1\n989,-1,389.7,442.3,65.7,219.8,1\n989,-1,501.4,74.4,51,154.3,1\n989,-1,1739.4,673.9,94.5,249.5,1\n989,-1,446.8,62.7,56.3,181.1,1\n989,-1,313.8,2.2,45.3,128.8,1\n989,-1,1444.8,1,56,88.7,1\n989,-1,380.4,165.5,65.1,192.7,0.999\n989,-1,381.7,1,52.9,136.9,0.997\n989,-1,1384.1,3.5,45.3,85.7,0.947\n1015,-1,1221.9,29.7,61.1,117,1\n1015,-1,686.4,206.5,80,112.6,1\n1015,-1,792.8,141.1,74.6,171.8,1\n1015,-1,384.3,295.3,76.4,196.1,1\n1015,-1,496.6,286.3,66.3,187.9,1\n1015,-1,1230.2,158.4,59.8,165.9,1\n1015,-1,289.6,126,53.2,171,1\n1015,-1,537.2,120.6,62.8,173,1\n1015,-1,1574.9,590.3,103.5,235.8,1\n1015,-1,1468.5,185.2,65.1,165.1,1\n1015,-1,300.9,297.2,63.1,199.8,1\n1015,-1,842.6,280.3,67.7,196.3,1\n1015,-1,1830.2,218.4,59.7,185.3,1\n1015,-1,231.7,140.8,54.3,161.7,1\n1015,-1,294.5,487.5,88.9,209.9,1\n1015,-1,1720.4,455.9,79,211.2,1\n1015,-1,926.3,270.2,68.5,207,1\n1015,-1,1154.9,610.2,92.1,257.9,1\n1015,-1,1694.3,178.4,54.2,167,1\n1015,-1,751.2,73.7,54.5,162,1\n1015,-1,1723.4,680.7,103.6,237.4,1\n1015,-1,380.7,472.2,62.9,225.5,1\n1015,-1,438.1,166.5,70.8,193.3,1\n1015,-1,314.6,2.5,39,128.4,1\n1015,-1,587,552.6,85.1,244.1,1\n1015,-1,391.2,168.6,54.2,167.6,0.998\n1015,-1,356.9,900.8,95.2,180.2,0.997\n1015,-1,505.5,109.9,52.9,143.6,0.911\n1015,-1,434.8,75.7,62.3,171.7,0.138\n884,-1,1221.2,30.1,61.6,118.7,1\n884,-1,1090.7,2.2,62.5,158.6,1\n884,-1,686.9,206.1,79.5,113.7,1\n884,-1,1481.9,91.2,56.8,151.6,1\n884,-1,794.7,139.3,73.5,174.6,1\n884,-1,1574.9,589.9,104.2,236.8,1\n884,-1,335.3,332.7,78.9,183.3,1\n884,-1,478.9,172,60.1,183.8,1\n884,-1,300.9,160.6,70.7,197.9,1\n884,-1,1723.1,454.6,75.5,212.9,1\n884,-1,559.2,116.6,58.3,175.7,1\n884,-1,474.3,1,48,137.6,1\n884,-1,1699.9,59.2,52,166.6,1\n884,-1,289.1,648.3,86.2,253,1\n884,-1,753.3,71,55.8,164.6,1\n884,-1,977.3,452,69.9,225.8,1\n884,-1,426.9,316.1,55.2,199.6,1\n884,-1,1422.3,4.3,52.5,156.4,1\n884,-1,892,470.3,70.9,225,1\n884,-1,1580.3,33.5,56.6,152.1,1\n884,-1,253.9,1.8,53.1,120.8,1\n884,-1,1494.6,1.3,60.2,149.9,1\n884,-1,240,131.7,52.3,168.4,1\n884,-1,405.5,170.1,57,180.9,1\n884,-1,1752.4,683.3,91.5,233.8,1\n884,-1,1358.9,943.2,95.1,137.8,0.155\n488,-1,1221.5,31.2,61.7,118,1\n488,-1,686.1,205.8,80.8,113.6,1\n488,-1,1499.2,1,58.2,122.8,1\n488,-1,999,1,55.9,141.3,1\n488,-1,460.4,160.6,63.3,195.3,1\n488,-1,1685.5,458.7,113.4,210.2,1\n488,-1,931.1,1,57,135.5,1\n488,-1,302.4,194.4,49.2,169.3,1\n488,-1,1729.5,178.5,71.5,174.8,1\n488,-1,1802.9,171,69,176.3,1\n488,-1,801.1,598.9,92.8,259.8,1\n488,-1,875.6,1,53.4,131.2,1\n488,-1,213.4,717.5,98.6,265,1\n488,-1,918.2,651.8,110.4,249.4,1\n488,-1,801.7,143.1,51.8,178.2,1\n488,-1,136,338.6,62.7,188.2,1\n488,-1,411.4,155.2,58.9,182,1\n488,-1,219.5,137.9,62.6,159,1\n488,-1,358.8,108.4,53.8,175.4,1\n488,-1,307.6,751,75.3,253.1,1\n488,-1,1537.7,597.9,85.8,243.2,1\n488,-1,1695.5,45.7,52.9,164.8,1\n488,-1,447,20.7,76.3,181.1,1\n488,-1,1769.5,347.3,77.7,218,1\n488,-1,504.9,89.7,62.7,172.3,1\n488,-1,1630.7,326.2,63.6,193.4,1\n488,-1,1637.8,33.8,60.6,176.7,1\n488,-1,713.3,93.3,59.6,168.6,1\n488,-1,410.9,8.6,46.6,158.3,0.999\n488,-1,1003.9,674.5,76.8,228.6,0.988\n488,-1,756,99.8,46.9,143,0.986\n488,-1,1597,577.2,73.1,210.5,0.962\n488,-1,1017.5,933.9,83.4,147.1,0.084\n597,-1,1221.8,31,61.1,119,1\n597,-1,686.7,206.2,80.1,113.4,1\n597,-1,1481.1,4.1,61.1,144.6,1\n597,-1,801.3,143.8,63.7,173.5,1\n597,-1,367.5,263.7,65.3,202.1,1\n597,-1,232.9,268.5,62.3,185.9,1\n597,-1,1715.5,455.8,84.2,209.8,1\n597,-1,1631.3,1,54.8,115.9,1\n597,-1,563.1,112.7,49.3,175.3,1\n597,-1,358.5,109.8,53.4,175.7,1\n597,-1,1653.5,229.3,73.5,200.3,1\n597,-1,1574.1,589.1,95.8,233.1,1\n597,-1,429.6,66.8,49.8,174.9,1\n597,-1,287.1,127.3,52.1,170.4,1\n597,-1,165.4,248,59.8,206.9,1\n597,-1,216.1,137,55.8,160.9,1\n597,-1,481.5,103.1,49.1,158,1\n597,-1,752.8,80.9,44.3,153,1\n597,-1,1072.4,859.8,122,221.2,0.999\n597,-1,1161.9,873.4,87.6,207.6,0.972\n597,-1,1870.4,272.4,50.6,180.5,0.937\n597,-1,305.5,908.9,113.3,172.1,0.139\n597,-1,393.8,95.5,34.6,138.8,0.078\n935,-1,1221.4,30,61.8,119.3,1\n935,-1,686.6,206.3,79.9,113.3,1\n935,-1,793.3,140,75.1,173.6,1\n935,-1,446.1,218.2,67.9,188.6,1\n935,-1,1126.8,54.2,62.6,171.4,1\n935,-1,1485.9,1,60.9,123.7,1\n935,-1,1620.9,84.1,57.9,168.5,1\n935,-1,554.2,116.7,59.7,173.9,1\n935,-1,1477.6,122.4,59.6,159.3,1\n935,-1,1573.5,587.1,105.3,238.6,1\n935,-1,1719.4,454.1,79.7,213.9,1\n935,-1,750,70.7,56.5,162.5,1\n935,-1,474,23.6,56.1,153.2,1\n935,-1,328.9,391.6,79.8,188.1,1\n935,-1,238.2,135.1,57.7,166.7,1\n935,-1,945.1,373.3,74,220.4,1\n935,-1,318.8,735.9,92.8,264.3,1\n935,-1,1264.5,796,98.5,279.2,1\n935,-1,859.7,392.8,64.3,211.3,1\n935,-1,1423.2,3.3,45.4,121.1,1\n935,-1,1746.1,675.3,91.3,248.3,1\n935,-1,361.6,221.6,60.9,179,1\n935,-1,1738.2,117.6,56.1,173.6,1\n935,-1,399,371.7,64.4,210.1,1\n935,-1,303,160.6,69,200.2,1\n935,-1,431.2,69,56.7,179.8,1\n935,-1,254.8,1,53.4,121.4,1\n572,-1,1221.3,30.2,62.1,119.4,1\n572,-1,687.2,206.1,79.1,114.3,1\n572,-1,1481.1,4.8,59.6,144.7,1\n572,-1,378.2,236.7,67.5,195.7,1\n572,-1,792.7,147.5,70.1,170.3,1\n572,-1,1649.9,1,57.4,137.5,1\n572,-1,1713.8,454.2,87.9,211.8,1\n572,-1,550.6,114.8,51.9,171.3,1\n572,-1,1829.7,254.6,70.2,178.7,1\n572,-1,1660.2,259.7,69.8,203.4,1\n572,-1,872.2,1,51.3,105.1,1\n572,-1,288.8,119.9,51.9,176.5,1\n572,-1,218.8,134.7,54.2,163.7,1\n572,-1,754.5,80,44.3,155.4,1\n572,-1,1584.2,591,83.7,231.9,1\n572,-1,147.8,257.3,62.5,212.8,1\n572,-1,206.9,281.7,64.9,193.3,1\n572,-1,1025.4,811.1,136.4,269.9,1\n572,-1,448.3,127.5,51.3,163.2,1\n572,-1,465.6,73.4,62.9,177.8,1\n572,-1,360.5,110.4,51.4,176,1\n572,-1,722.8,583.7,82.4,255.1,1\n572,-1,421.7,61.3,46.6,166.8,0.999\n572,-1,250.5,918.5,81.9,162.5,0.993\n572,-1,1009.8,929.7,72.3,151.3,0.606\n572,-1,1572.3,5.6,45.9,128.7,0.32\n572,-1,1104.6,827.2,100.1,245.9,0.063\n572,-1,982.1,3.4,54.1,77.6,0.055\n1023,-1,1221.3,29.8,62.1,119.6,1\n1023,-1,686.5,206.6,79.7,113.7,1\n1023,-1,793.5,142.2,72.5,169.8,1\n1023,-1,375.3,302.6,74.5,200.2,1\n1023,-1,289.3,128.7,52.5,166.6,1\n1023,-1,1245.6,164.6,61,173.5,1\n1023,-1,842,272.6,68.8,197.8,1\n1023,-1,492.3,294.7,69.4,194.8,1\n1023,-1,929.1,257.2,70,208.6,1\n1023,-1,1837.8,228.2,60.8,183.1,1\n1023,-1,1146.6,591.5,89.4,257.9,1\n1023,-1,232.5,140.4,55.6,162.1,1\n1023,-1,1701.8,181.3,57,177.1,1\n1023,-1,751,74.9,53.8,161.2,1\n1023,-1,1722,455,77,213.4,1\n1023,-1,380.1,487.8,63.1,224.6,1\n1023,-1,1574.9,589.7,102.7,238.5,1\n1023,-1,296.1,302,64.1,204.6,1\n1023,-1,289.3,507.2,88.5,203.6,1\n1023,-1,538.8,118.8,62.1,173.8,1\n1023,-1,1468.7,192.6,64.9,165.6,1\n1023,-1,1704.3,685.6,94.7,235.9,1\n1023,-1,456.3,165.7,81,193.6,1\n1023,-1,581.9,554.4,76.7,235.8,1\n1023,-1,313.2,1.8,37.4,131.7,1\n1023,-1,410,180.2,58.4,149.7,1\n1023,-1,372.4,105.3,57.4,172.4,0.999\n1023,-1,362.1,917.5,90.7,163.5,0.219\n220,-1,1220.7,30,62.2,120.5,1\n220,-1,686.1,206.5,79.7,114.1,1\n220,-1,400.6,571.8,88.9,251.3,1\n220,-1,705,1,55.6,160.7,1\n220,-1,428,191.5,75.6,214.7,1\n220,-1,108.8,347.4,51.1,189,1\n220,-1,1491.4,68.6,54.4,148.5,1\n220,-1,1122.5,129.5,58.6,187.3,1\n220,-1,287.9,126.8,56,173.1,1\n220,-1,902.4,141,78,186.1,1\n220,-1,1720.6,456.7,78.2,212.1,1\n220,-1,212.3,127.3,56.2,164.8,1\n220,-1,357.7,106.2,52.5,179.9,1\n220,-1,1356.6,566.7,104.4,245.9,1\n220,-1,1197.2,132.8,42.9,163.9,1\n220,-1,794,153.1,60.5,167.7,1\n220,-1,518.9,123.9,48.7,175.6,1\n220,-1,123.6,670.2,106.4,258.9,1\n220,-1,507.7,334.7,72.6,219.1,1\n220,-1,216.5,508.1,60.6,203.1,1\n220,-1,993.1,124.9,38.9,155.4,1\n220,-1,822.5,323.1,75,192.5,1\n220,-1,53.2,620.8,107.5,245,1\n220,-1,762.9,311,77.9,206.6,1\n220,-1,825.4,112.5,68.8,170.8,0.998\n220,-1,941.9,910.6,71.6,170.4,0.996\n220,-1,594.6,343.3,61.6,199.9,0.948\n220,-1,483.6,4.6,35.8,60.2,0.133\n78,-1,1221.8,30.4,60.8,118.9,1\n78,-1,1239.9,174.8,73.1,156.9,1\n78,-1,411.4,330.1,84.5,228.9,1\n78,-1,1486.5,69.6,55.8,147.6,1\n78,-1,704.3,1,55.9,159.6,1\n78,-1,356.8,104,55.1,181.1,1\n78,-1,1360,566.9,105.2,244.6,1\n78,-1,1721.1,457.4,77.6,209.1,1\n78,-1,686.5,206,80.4,116.1,1\n78,-1,490.3,202.9,80.2,195.5,1\n78,-1,981.3,190.3,71.8,184,1\n78,-1,102.8,546.7,84.9,253.6,1\n78,-1,1427.7,200.4,73.7,194.4,1\n78,-1,11.4,726.6,70.1,232.4,1\n78,-1,772,188.7,65.3,184.1,1\n78,-1,291.2,125.5,52.4,169.4,1\n78,-1,1332.7,203,38.6,164.1,1\n78,-1,212.1,131.7,51.1,162.6,1\n78,-1,538.9,62.8,48.6,173,1\n78,-1,134.1,355.9,47.9,191.6,1\n78,-1,841.5,172.9,55.4,185.5,1\n78,-1,434.2,24.8,52.9,160,1\n78,-1,881.8,192.3,55.2,169.7,1\n78,-1,388.8,895.8,97.4,185.2,0.999\n78,-1,473.2,120.5,60,158.4,0.999\n78,-1,380.2,27.8,55.1,161.6,0.999\n78,-1,252.1,94.9,60.6,178.9,0.997\n78,-1,1495.4,203.2,46.7,175.6,0.946\n1024,-1,1221.8,30.1,61.6,118.5,1\n1024,-1,686.8,206.6,79.3,113.4,1\n1024,-1,793.2,141.9,72,171.6,1\n1024,-1,491.4,297.8,69.3,193.6,1\n1024,-1,374.3,303.7,73.7,201,1\n1024,-1,1248.6,165.6,61.6,172.8,1\n1024,-1,289.1,129.1,52.6,167.3,1\n1024,-1,1700.7,182.2,58.8,179.3,1\n1024,-1,842.6,269.3,68.2,198.6,1\n1024,-1,1146.6,590.4,88.2,257.6,1\n1024,-1,929.5,256.9,69.3,208.5,1\n1024,-1,232.1,140.4,56.2,161.4,1\n1024,-1,538.6,119.3,62.1,175,1\n1024,-1,1721.8,455.9,76.8,210.2,1\n1024,-1,1468.2,194.8,65.3,163.9,1\n1024,-1,751.2,75.1,53.7,159.9,1\n1024,-1,1575.1,589.3,102.6,238.2,1\n1024,-1,295.8,302.7,66.1,209.2,1\n1024,-1,1840.4,228.2,59,185.7,1\n1024,-1,380,489.6,62.5,225.3,1\n1024,-1,286.6,506.2,90.5,205.9,1\n1024,-1,1704.9,685.6,92.9,234.7,1\n1024,-1,460.6,164.8,77.1,193.4,1\n1024,-1,580.2,549.9,77.6,239,1\n1024,-1,413.7,173.2,59.8,159.7,1\n1024,-1,374.5,105.3,57.6,173.5,0.999\n1024,-1,313,2,36.1,129.7,0.999\n1024,-1,361.9,919.1,90.4,161.9,0.106\n353,-1,1221.6,30.6,61.8,119.8,1\n353,-1,687.5,206.7,77.9,113,1\n353,-1,1612.6,1,67.2,145.6,1\n353,-1,1008.2,418.4,68.5,196.3,1\n353,-1,1746.5,80.1,59.2,155.7,1\n353,-1,1442.1,1.2,52,112.2,1\n353,-1,1032.9,60.4,54.7,169.5,1\n353,-1,287.7,130.5,55.6,173.3,1\n353,-1,207.1,138.1,58.6,164.3,1\n353,-1,445.6,86.5,70.1,205.9,1\n353,-1,431.2,334,77.3,215.8,1\n353,-1,1719.9,455.3,78.8,216.6,1\n353,-1,364.6,106.2,55.2,180.9,1\n353,-1,795.7,150.6,62.2,173.3,1\n353,-1,109.6,350.1,52.3,189.7,1\n353,-1,965.4,54.4,63.8,176.4,1\n353,-1,1825.6,478.6,68.8,208.7,1\n353,-1,1554.8,618.9,91.6,246.3,1\n353,-1,482.7,577.3,97.9,245.5,1\n353,-1,224.1,331.8,55.8,187,1\n353,-1,389.4,501.9,83.8,227.8,1\n353,-1,842.7,1.6,49.3,96.4,1\n353,-1,516.8,92.7,40.9,167.8,1\n353,-1,901.7,472.6,76,210.7,1\n353,-1,1859.5,57,58.8,169.3,1\n353,-1,922.8,16,63.9,160.3,1\n353,-1,844.5,457.6,82.1,229.2,1\n353,-1,766.2,92.8,41.2,155.7,0.999\n353,-1,707.3,91.1,58.6,173.8,0.965\n353,-1,952.4,927.4,80.2,153.6,0.768\n1032,-1,1221.5,29.6,61.5,119.8,1\n1032,-1,687.2,206.7,79.2,113.2,1\n1032,-1,793.4,141.1,72.1,171.2,1\n1032,-1,1720.3,454.3,81.9,212.9,1\n1032,-1,1261.5,179.4,65.3,167.8,1\n1032,-1,488.3,306.3,72.7,193.1,1\n1032,-1,289.7,128.2,52.6,168.8,1\n1032,-1,1700.4,199.5,64.2,181,1\n1032,-1,233.9,139.3,57.2,166.6,1\n1032,-1,846.2,257.4,65.5,196.7,1\n1032,-1,368.1,320.6,72.4,199.3,1\n1032,-1,937.3,249.1,64.3,201.8,1\n1032,-1,1573.8,588.6,103.3,239.6,1\n1032,-1,293.6,315.2,67.1,203.4,1\n1032,-1,1137,576.3,86.1,249.2,1\n1032,-1,751.1,74.8,54.5,162.4,1\n1032,-1,1688.7,682,80.9,238.2,1\n1032,-1,289.6,516.5,86.3,212.8,1\n1032,-1,373.9,502,66.6,228.4,1\n1032,-1,371.5,104.1,60,177.5,1\n1032,-1,538.8,122.2,62.1,169.5,1\n1032,-1,1849.7,242.3,61.2,192.7,1\n1032,-1,432.9,170.8,62.4,169.2,1\n1032,-1,1470.1,205.6,69.5,164.1,1\n1032,-1,580.8,542.1,70.8,248.2,1\n1032,-1,309,2.4,36.7,130.7,1\n1032,-1,486.2,163.7,64.9,188.3,1\n1032,-1,374.3,940,85.2,141,0.063\n146,-1,1221.6,31.5,62,117.2,1\n146,-1,356.4,102.8,56.3,181.1,1\n146,-1,1035.2,136.8,70.4,170.7,1\n146,-1,1487.8,68.4,55.8,150.3,1\n146,-1,704.2,1,56.3,157.3,1\n146,-1,421.6,258.8,75.5,221.7,1\n146,-1,1721.4,457.3,77.9,209.9,1\n146,-1,397.2,723.5,93.7,264,1\n146,-1,109.8,351.4,47.8,186.4,1\n146,-1,287.4,125.3,55.4,171.2,1\n146,-1,537.9,63.7,50.4,167,1\n146,-1,1357.7,566.5,105.8,245.3,1\n146,-1,685.8,205.7,81.6,116.6,1\n146,-1,219.2,127.9,51.8,162.3,1\n146,-1,867.9,204.9,71.1,194.3,1\n146,-1,1175.3,164,50.3,165.7,1\n146,-1,808.7,248.6,60.1,183.7,1\n146,-1,381.4,1.2,47.4,129.3,1\n146,-1,1296.1,174.8,58.2,179.8,1\n146,-1,530.8,264.1,59.3,203.3,1\n146,-1,483.7,194.9,58.1,170.3,1\n146,-1,585.4,256,59.8,191,1\n146,-1,100.8,543.9,87.8,255.3,1\n146,-1,165.2,627.9,75.9,209.7,1\n146,-1,763.7,236.7,63.2,190.1,1\n146,-1,468,35.1,49.4,161.4,1\n146,-1,1056.9,919.9,72.6,161.1,0.986\n146,-1,798.5,151.3,60.4,192.5,0.206\n633,-1,1221.8,30.8,61.7,117.8,1\n633,-1,687.1,205.7,79.5,113.2,1\n633,-1,1480.9,6.6,60.1,143.2,1\n633,-1,799.9,146,66.8,170.6,1\n633,-1,1712.5,453.2,94.4,210.4,1\n633,-1,341.9,300.6,68.1,207.8,1\n633,-1,547.5,113,61.8,174.1,1\n633,-1,501.2,539.1,111.3,242.9,1\n633,-1,1574.7,588.9,96.7,236.6,1\n633,-1,359,111.5,51.9,173.7,1\n633,-1,1626.3,195.5,72.4,189.1,1\n633,-1,197.4,226.8,68.5,207.4,1\n633,-1,287,123.3,52.8,170.1,1\n633,-1,255.7,245.1,59.3,188.2,1\n633,-1,417.2,104.6,52.3,159.2,1\n633,-1,352.2,1,55.5,126.5,1\n633,-1,752.5,84.1,44.2,150.8,1\n633,-1,499.4,74.4,47.3,151.7,1\n633,-1,420.9,1,57.8,133.6,1\n633,-1,458.4,87.2,48,175.8,0.999\n633,-1,235.9,133,47.1,162.3,0.994\n633,-1,1583.9,2.4,50.4,81.7,0.963\n633,-1,1113.4,929.6,107.5,151.4,0.364\n633,-1,945.7,926.6,61.5,154.4,0.096\n799,-1,1221.3,29.1,62.1,119.4,1\n799,-1,687,205.5,79.3,114.7,1\n799,-1,783.3,132.4,51.5,179.4,1\n799,-1,288,520.9,77.5,237.5,1\n799,-1,1724.3,453.3,74.3,212.7,1\n799,-1,548,112.8,63.3,179,1\n799,-1,1574.5,590.3,101.7,234.4,1\n799,-1,1610.9,1,54.6,125.3,1\n799,-1,278.5,166,59.7,197.7,1\n799,-1,479.6,91.9,61.3,176.1,1\n799,-1,1481.5,29.1,60.5,149.4,1\n799,-1,750.4,71.3,55.6,160.3,1\n799,-1,232.7,134.4,51.3,166.8,1\n799,-1,390.1,240.9,66.2,177.6,1\n799,-1,1076.9,592.6,93.2,259.7,1\n799,-1,442.2,228.1,55.1,195.2,1\n799,-1,254.3,1.2,53,123.1,1\n799,-1,1012.2,617.5,79.7,247.9,1\n799,-1,346.8,182.6,48.2,179.3,1\n799,-1,1441.6,59.7,47.8,155.7,1\n799,-1,423,94,55.7,165.4,1\n799,-1,609.8,577.6,80.8,243.8,1\n799,-1,443.7,1.2,43,87.9,1\n901,-1,1221.8,30.2,60.5,118.7,1\n901,-1,477.8,190.2,63,182.8,1\n901,-1,686.9,206.2,79.2,113.6,1\n901,-1,795.2,140.8,74.3,172.1,1\n901,-1,296.9,673.3,95.9,258.5,1\n901,-1,1430.3,1,50.2,145.8,1\n901,-1,1485.8,103.9,57.1,147.1,1\n901,-1,559.9,117.1,56.6,172.3,1\n901,-1,1597.7,49.9,51.1,160.3,1\n901,-1,1574.3,590,103.8,235.9,1\n901,-1,1109.4,19.8,55.2,159.6,1\n901,-1,1722.5,454.1,76.4,213.5,1\n901,-1,391.2,189.7,58.4,176.2,1\n901,-1,752.3,71.7,55.6,162,1\n901,-1,302.6,163.1,67.8,194.6,1\n901,-1,335.2,350.3,78.9,188.3,1\n901,-1,1711.1,83.7,54.1,166,1\n901,-1,970.2,423,73.8,226.8,1\n901,-1,469,3.8,51.1,149.1,1\n901,-1,1746,679.5,92.6,239.5,1\n901,-1,876.8,442.3,68,219.5,1\n901,-1,418.8,333.7,56.9,205.9,1\n901,-1,243.3,134.1,56.3,168.1,1\n901,-1,313.5,2.8,47.3,126.5,1\n901,-1,254.4,1,52.8,118.4,1\n901,-1,1501.4,2,58.5,143.2,1\n901,-1,418.9,60.8,53,177.9,1\n901,-1,1324.5,891.4,93.3,189.6,0.999\n376,-1,1222,31.6,60.8,119.2,1\n376,-1,686.1,206.2,80.1,113.7,1\n376,-1,1082,447.7,68.1,203,1\n376,-1,1633.6,15.1,61.3,163.3,1\n376,-1,359,106.8,55,178.8,1\n376,-1,285.1,130.2,55.2,169,1\n376,-1,109.8,350.6,51.3,189.2,1\n376,-1,828.7,1.3,55,111.8,1\n376,-1,448.3,307.5,71.4,213.3,1\n376,-1,453.9,547.8,72.4,232.6,1\n376,-1,1718.7,456.4,78.7,213.3,1\n376,-1,953.8,40.1,60.5,175.1,1\n376,-1,346.6,532.1,88,244.7,1\n376,-1,567.3,565.1,97.2,253.2,1\n376,-1,445.3,75.7,70,196.3,1\n376,-1,795.7,150.6,59.5,172.9,1\n376,-1,1590.9,633.2,82.3,241.7,1\n376,-1,508.6,86.4,51.4,168.6,1\n376,-1,1801.1,450.7,64.7,203.3,1\n376,-1,217.5,141.9,58,157.5,1\n376,-1,1017.2,52.2,55.2,163.4,1\n376,-1,383.4,1.2,46.4,91.3,1\n376,-1,1434,2.5,53.5,94.3,1\n376,-1,210.6,305.2,54.4,182,1\n376,-1,850.6,490,85.3,233.6,1\n376,-1,757.3,98.2,47.1,140.6,1\n376,-1,910.6,503.6,78.4,210.5,1\n376,-1,1766.6,102.4,53.6,155.9,0.999\n376,-1,1807.5,69.8,66,166.8,0.999\n376,-1,970,915.4,86.2,165.6,0.998\n899,-1,1220.8,30.4,62.3,119.2,1\n899,-1,686.9,206,79.6,114.5,1\n899,-1,298,671.1,94,254.3,1\n899,-1,477.8,186.2,65.8,185.5,1\n899,-1,793.1,140.4,75.7,171.9,1\n899,-1,1428.4,1,51.5,145.7,1\n899,-1,1487.6,102.9,56.5,148.5,1\n899,-1,1573.7,590.1,104.1,236.4,1\n899,-1,560.3,117,56.9,172.2,1\n899,-1,1721.9,453.6,77.4,213.8,1\n899,-1,1597,49,49.8,160.5,1\n899,-1,1710.3,78.1,55.1,171.1,1\n899,-1,392.7,188.5,59.2,176.6,1\n899,-1,1110.2,22.2,54.2,155.8,1\n899,-1,969.4,429.4,78.6,226,1\n899,-1,338.6,353.1,75.1,184.3,1\n899,-1,304.3,163.3,65.6,190.5,1\n899,-1,754,72.2,54,161.3,1\n899,-1,468.3,3.7,50.8,150,1\n899,-1,419.6,332.6,56.2,203.7,1\n899,-1,878.7,446.6,66.7,221.5,1\n899,-1,314.3,1.4,47.7,127.8,1\n899,-1,1746.1,679.8,92.7,237.7,1\n899,-1,254.6,1.1,52.6,118.7,1\n899,-1,242.9,133.7,56.7,169.2,1\n899,-1,1500.4,1.4,58.4,145.1,1\n899,-1,1330,903.9,91.4,177.1,1\n899,-1,417.6,57.4,54.1,181.4,1\n992,-1,686.5,206.2,79.6,112.9,1\n992,-1,1796.7,185.7,71.4,180.9,1\n992,-1,793.9,140.3,74.3,172.8,1\n992,-1,1220.7,30.4,62.6,121.3,1\n992,-1,401.7,275.1,67,197,1\n992,-1,1471.6,171.4,63.8,164.6,1\n992,-1,499.6,260.9,65.4,186.7,1\n992,-1,1195.3,125.1,56,168.9,1\n992,-1,838.3,310,69,205.4,1\n992,-1,328.5,845.7,96.3,235.3,1\n992,-1,1576.1,590.1,102.8,235.8,1\n992,-1,1721.3,455.5,78.2,211.9,1\n992,-1,289.8,124.2,52.5,170.4,1\n992,-1,1671.7,145.6,57.5,172.1,1\n992,-1,231,134.7,54.7,166.6,1\n992,-1,301.5,458.4,83.4,199.3,1\n992,-1,751.7,71.8,55,163.6,1\n992,-1,544.2,119.4,58.5,168.5,1\n992,-1,919.8,302.8,71.8,209.1,1\n992,-1,314.8,272.2,63.2,198.4,1\n992,-1,1184.5,660.4,88.4,264.3,1\n992,-1,387.5,445.7,66.2,222.6,1\n992,-1,444.7,64.8,58,178,1\n992,-1,504.5,77.7,51.5,152.5,1\n992,-1,314.2,1.6,45,129.5,1\n992,-1,1741.9,676.7,93,251.6,1\n992,-1,385.4,167.1,63.8,190.7,0.998\n992,-1,1440.3,3.1,60.4,80.3,0.9\n992,-1,385.4,1.8,50.2,140.5,0.421\n1040,-1,1221.5,29.7,62,120.2,1\n1040,-1,686.8,206.5,80,114.5,1\n1040,-1,793.3,141.1,71.2,173.3,1\n1040,-1,479.6,318,77.6,198.3,1\n1040,-1,289.2,127.8,52.1,169.9,1\n1040,-1,232,138.4,54.8,164.3,1\n1040,-1,937.5,237.2,66.1,205.8,1\n1040,-1,1720.3,455.1,79.7,216.5,1\n1040,-1,1289,190.4,65.2,167,1\n1040,-1,1126.9,561.7,89.6,255.3,1\n1040,-1,292.6,319.4,70.6,206.8,1\n1040,-1,278.5,532.9,96.3,204.1,1\n1040,-1,363,327.1,73.4,191,1\n1040,-1,751.9,76.3,53.8,159.9,1\n1040,-1,1715.5,208.1,58.3,180.6,1\n1040,-1,374.4,506.8,67.2,235.9,1\n1040,-1,851.4,250.3,62.5,193.5,1\n1040,-1,370.9,104.6,58.1,176,1\n1040,-1,1468,213.4,75.7,164.3,1\n1040,-1,1663.1,675.4,88.4,240.1,1\n1040,-1,448.4,168.2,63.5,172.6,1\n1040,-1,1573.1,589.7,104.5,240.6,1\n1040,-1,1856.7,242.1,64.3,194.3,1\n1040,-1,307.9,2.6,36.1,127,1\n1040,-1,581.2,536.8,69.1,253.8,1\n1040,-1,497.4,168.9,78.1,191.6,1\n1040,-1,431.4,66.6,64.2,187.6,0.998\n1040,-1,539.7,117.4,59.7,179.8,0.994\n142,-1,1221.5,31.5,61.8,117.6,1\n142,-1,1040.8,135.9,84.6,175.4,1\n142,-1,355.9,103.8,55.7,180.8,1\n142,-1,1487.8,68.7,55.7,149.3,1\n142,-1,704.4,1,56.1,157.6,1\n142,-1,391.3,733.5,98.1,273.8,1\n142,-1,421.5,263.9,76.5,225.2,1\n142,-1,288.1,126.9,54.5,167.2,1\n142,-1,1721.6,456.8,77.8,210.9,1\n142,-1,109.5,352.6,48.3,184.1,1\n142,-1,1358.7,567.5,105.2,243.1,1\n142,-1,538,63.4,50.7,166.6,1\n142,-1,686,206.6,81.1,115.8,1\n142,-1,1305.9,176.1,56.1,181.1,1\n142,-1,1185.8,170.5,51.7,167.2,1\n142,-1,219.3,127.9,51.9,162.2,1\n142,-1,874.6,207.8,76.1,191.5,1\n142,-1,811.8,247.7,56.7,176,1\n142,-1,532.5,264.8,56.8,199.7,1\n142,-1,479.3,183.7,62.3,179.7,1\n142,-1,383.2,1.7,46.2,132.8,1\n142,-1,152.9,634,83,216.4,1\n142,-1,100.3,549.9,83.7,241.6,1\n142,-1,470.4,37.1,54.5,164.7,1\n142,-1,579.3,249.9,58.2,193.4,1\n142,-1,767.7,235,61.1,183.4,0.999\n142,-1,1062.6,922.3,78.8,158.7,0.978\n462,-1,1221.7,31,62.5,118.6,1\n462,-1,936.1,1,57.9,147.9,1\n462,-1,687.3,205.5,78,115.2,1\n462,-1,450.2,190.3,67,200.6,1\n462,-1,1008,2.1,53.6,156.4,1\n462,-1,1729.8,165.1,61,164.6,1\n462,-1,871.8,1,56.7,134,1\n462,-1,1821.1,374.5,80,215.1,1\n462,-1,241.2,675.8,98.6,259,1\n462,-1,271.8,213.3,50.4,174.2,1\n462,-1,359.3,110.5,54.2,176.5,1\n462,-1,337.8,707.5,73.1,251.6,1\n462,-1,1705.2,458.9,93.6,207.6,1\n462,-1,1507.8,2,56.6,109.5,1\n462,-1,115.5,349.3,55.3,188.7,1\n462,-1,1650.8,355.2,65.6,195.6,1\n462,-1,520.2,77.1,58.4,174.4,1\n462,-1,1543.8,609.1,75.3,245.2,1\n462,-1,804.1,148.9,45.7,172.5,1\n462,-1,1678.7,55.9,70.8,174.4,1\n462,-1,808.3,580.5,87.4,252.6,1\n462,-1,217.5,137.1,62.3,159.1,1\n462,-1,894.3,608.9,111.8,245.9,1\n462,-1,753.5,94.6,53.5,146,1\n462,-1,285.1,124.9,53.6,170.7,1\n462,-1,445,43.2,69.9,187.4,0.999\n462,-1,1458.8,559.6,85.4,206.2,0.999\n462,-1,979.4,628.5,92.2,222.3,0.999\n462,-1,417.5,1.9,42.9,155.8,0.998\n462,-1,712.4,93.5,53.3,164.7,0.998\n462,-1,1027.9,921.9,83.9,159.1,0.995\n317,-1,1221.5,31.1,61.1,119.2,1\n317,-1,686.9,207.4,79.1,113,1\n317,-1,1456.3,3.9,55.8,146.1,1\n317,-1,321.4,584.6,106.1,246,1\n317,-1,1704.2,51,58.8,157.6,1\n317,-1,109,349.3,51.9,191.2,1\n317,-1,1719.8,456.8,79.7,213.8,1\n317,-1,357.7,108,57.9,182.1,1\n317,-1,796.6,148.4,57.8,175.7,1\n317,-1,452.2,116.3,74.9,204.4,1\n317,-1,1504.5,600.6,89.2,246,1\n317,-1,930.9,49.6,62,173.4,1\n317,-1,237.1,374.4,57.7,191.4,1\n317,-1,1053.3,77.5,56.2,169.1,1\n317,-1,420.3,43.7,55.1,169.6,1\n317,-1,705.8,3.1,52,152.7,1\n317,-1,996.9,77.9,60.6,177.6,1\n317,-1,891.6,437.9,70.2,196.6,1\n317,-1,281.3,128.5,53.7,177,1\n317,-1,435.3,443,74.1,235.9,1\n317,-1,214.4,129.5,54.9,169.1,1\n317,-1,524,471.7,65.4,217.6,1\n317,-1,827.6,431.7,77,203.9,1\n317,-1,351.5,886,95.3,195,0.999\n317,-1,729.4,90.8,45.1,185.2,0.997\n317,-1,512.2,101.3,41.7,169.3,0.997\n317,-1,927,910.4,79.6,170.6,0.997\n317,-1,1568.8,3.1,59.5,111.3,0.511\n183,-1,1221.5,30.7,62.7,118.1,1\n183,-1,211.6,126.3,55.8,168.1,1\n183,-1,1489,68.3,55.1,149,1\n183,-1,109.1,349.4,49.2,188.8,1\n183,-1,357.1,104.2,54.7,179.5,1\n183,-1,408.6,38.3,61.8,166.7,1\n183,-1,704.9,1,55.1,158.7,1\n183,-1,1720.3,457.1,78.7,211.8,1\n183,-1,687.4,207.8,78.8,111.8,1\n183,-1,1358,567.4,104.8,244.3,1\n183,-1,414.2,643.3,91.4,258.8,1\n183,-1,290.3,130.1,54,166.4,1\n183,-1,540.5,140.8,63.9,170.8,1\n183,-1,528.4,299.5,60.1,207,1\n183,-1,5.9,617.5,113.9,250.3,1\n183,-1,420.2,225.7,77.6,219.1,1\n183,-1,235.7,566.7,62.1,213.4,1\n183,-1,1091,147.9,48.4,157.9,1\n183,-1,925.1,123.6,73.2,170.8,1\n183,-1,868.9,174.2,77.2,194,1\n183,-1,793.9,151.9,63.4,172.9,1\n183,-1,1199.7,152.7,60.6,185.8,1\n183,-1,98,549.1,87.4,251.9,1\n183,-1,798.7,291.9,71.5,184.2,1\n183,-1,745.1,275.6,71.9,203,1\n183,-1,1247.9,154.5,47.1,165.7,0.997\n183,-1,991.4,915.7,71.7,165.3,0.974\n1031,-1,1221.6,30,61.6,119.2,1\n1031,-1,687,206.5,79.4,113.9,1\n1031,-1,793.3,141.5,71.5,171.5,1\n1031,-1,1720.7,455.8,80.4,210.5,1\n1031,-1,488,302.5,73.3,194.3,1\n1031,-1,1700,197.1,64,182.8,1\n1031,-1,1257.1,178.6,66.5,169.1,1\n1031,-1,288.6,127.7,53,167.8,1\n1031,-1,936,250.2,65.7,202.3,1\n1031,-1,370.2,319.7,70.6,200.4,1\n1031,-1,234.7,139.3,57.1,166.3,1\n1031,-1,845.8,257.3,65.5,198.2,1\n1031,-1,1137.1,577,88.6,252.6,1\n1031,-1,293.5,314.5,66.3,203.9,1\n1031,-1,1573.4,589.6,104.5,240.1,1\n1031,-1,750.6,76.5,54.4,159.8,1\n1031,-1,1691.9,684.7,79.3,230.2,1\n1031,-1,374,499.8,68.9,230.5,1\n1031,-1,579.3,549.9,72.7,238.6,1\n1031,-1,371.8,103.5,59.1,180.6,1\n1031,-1,291,511.9,85.4,212.3,1\n1031,-1,539.5,120.8,62.7,170.4,1\n1031,-1,1849,242.3,60.9,189.1,1\n1031,-1,1471,206.7,68.8,161,1\n1031,-1,432.6,171.1,60.7,170.7,1\n1031,-1,308.6,2.4,37,130.1,1\n1031,-1,485.4,159.7,64.8,194.4,1\n1031,-1,374.4,937.7,83.5,143.3,0.08\n229,-1,1221.9,30.9,61.5,119.1,1\n229,-1,686.1,206.9,80.2,113.2,1\n229,-1,1491.9,66.8,53.6,148.6,1\n229,-1,383.1,548.6,95.3,241.9,1\n229,-1,796.9,149,57.6,180.8,1\n229,-1,356.3,105.6,53.5,180.4,1\n229,-1,433.8,186.7,76.4,214.6,1\n229,-1,705.7,1,55.1,159.6,1\n229,-1,108.7,350.9,50.4,190.4,1\n229,-1,1185.6,131.1,46.4,154.5,1\n229,-1,1577,1,58.9,139.6,1\n229,-1,288,126.8,55.9,172.4,1\n229,-1,211.7,125.7,55.8,166.6,1\n229,-1,1720.5,457.3,78.8,210.6,1\n229,-1,1358.4,568.3,104.1,243.6,1\n229,-1,517.4,119.9,48.6,177.5,1\n229,-1,1104.5,125.4,61.9,184,1\n229,-1,152.3,689,104.1,259.6,1\n229,-1,832.6,329.3,74.2,194.8,1\n229,-1,217.4,495.2,61.4,205.8,1\n229,-1,914.9,132,72.3,176.8,1\n229,-1,507.4,342.7,70.7,216.9,1\n229,-1,775.9,319.5,71.9,205.7,1\n229,-1,591.6,350.1,61.4,192.9,1\n229,-1,96.6,627.6,93.2,254.2,0.999\n229,-1,935.2,901.7,73.2,179.3,0.994\n229,-1,958.3,125,49.6,154.6,0.307\n985,-1,686.5,206.1,80,113.1,1\n985,-1,1221.7,29.8,61.9,120.2,1\n985,-1,793.1,140.8,72.2,171.5,1\n985,-1,407.3,267,70.8,195.4,1\n985,-1,1185.4,119.3,55.6,165,1\n985,-1,495.7,248.8,67.2,188.9,1\n985,-1,1788.9,176.7,72.1,180.3,1\n985,-1,333.8,839,92.9,242,1\n985,-1,1574.5,590.6,104.6,234.1,1\n985,-1,838.9,316.1,72.1,205.1,1\n985,-1,1719,455.5,80.4,211.1,1\n985,-1,303.5,452,82.4,203.3,1\n985,-1,1469.7,168.2,66.9,168.1,1\n985,-1,230.2,137.2,55.5,164,1\n985,-1,751.2,72.3,55.3,164,1\n985,-1,1668.5,143,54.1,166.3,1\n985,-1,1191.7,670.8,89.9,264.4,1\n985,-1,317.5,261.3,64.1,198.5,1\n985,-1,289.5,125.3,53.1,173.1,1\n985,-1,546.6,118.8,54.7,166.9,1\n985,-1,920.6,306.7,69.3,206.5,1\n985,-1,391.9,435.5,65,216.6,1\n985,-1,1739.6,674.2,93.3,249.5,1\n985,-1,1451.4,1,55.8,92.2,1\n985,-1,314.3,2.8,45.7,127.9,1\n985,-1,445.2,63.7,55.9,182.4,1\n985,-1,496.6,71.3,53,155.4,1\n985,-1,383.2,1.1,53.1,131.7,1\n985,-1,369,167.2,64,189,0.999\n985,-1,1386.9,3.9,44.2,87.7,0.999\n665,-1,1220.8,29.6,61.8,119.1,1\n665,-1,686.5,205.8,80.6,113.7,1\n665,-1,1480.7,3.6,61.5,144.6,1\n665,-1,1711.7,456.9,96.2,207.8,1\n665,-1,802.1,143.8,63.4,173.3,1\n665,-1,360.9,112.7,49,168,1\n665,-1,1131.2,1,66.9,112.5,1\n665,-1,1575.4,587.4,96.9,234.6,1\n665,-1,557.4,111.7,53,176.8,1\n665,-1,318.5,336.8,72.5,207.8,1\n665,-1,1617.7,165.9,77.7,185.6,1\n665,-1,479.8,114.2,44.2,174.8,1\n665,-1,225.4,210.6,59.9,197.8,1\n665,-1,750.8,79,47.1,156.7,1\n665,-1,426.9,525.6,77.1,249.5,1\n665,-1,419.7,122.1,69.6,161.9,1\n665,-1,408.5,1,56.1,154.2,1\n665,-1,277.4,225.4,56.2,183,1\n665,-1,1414.3,891.3,101.7,189.7,1\n665,-1,1498.1,164.7,53.2,168.9,1\n665,-1,288.6,123.4,51.5,171.6,0.999\n665,-1,353.6,3.6,53.8,148.7,0.999\n665,-1,1337,909.1,83.2,171.9,0.998\n665,-1,867,926.6,73.5,154.4,0.116\n671,-1,1221.8,29.5,61.2,118.9,1\n671,-1,687.2,206.2,79,113.4,1\n671,-1,1481.9,6.8,59.4,142.2,1\n671,-1,801.7,144.8,63.8,172.8,1\n671,-1,315.7,348.5,70.4,208.4,1\n671,-1,480.9,118.2,48,173.7,1\n671,-1,1710.2,456.8,98.6,207.5,1\n671,-1,359.7,116.9,49.1,165.5,1\n671,-1,1118,1.9,58.9,104.5,1\n671,-1,559.3,111.3,53.1,176.8,1\n671,-1,1575.1,587.6,97.3,236.5,1\n671,-1,402.2,528.9,90.1,248.9,1\n671,-1,1491.2,161.2,56.1,177.8,1\n671,-1,751.4,80.1,47.4,155.1,1\n671,-1,415.5,128.3,73.8,162.5,1\n671,-1,1623.7,156.2,77.1,190.7,1\n671,-1,1400.5,870.3,97.8,210.7,1\n671,-1,407.9,4.3,56,155.4,1\n671,-1,227.5,208.9,64.3,200,1\n671,-1,281.5,223,53.8,180.6,1\n671,-1,1319.2,902.1,83.5,178.9,1\n671,-1,353.9,3.6,52.8,151.1,0.999\n671,-1,289.9,121.3,50,174.7,0.989\n671,-1,301.2,3,44.8,135.1,0.763\n671,-1,860.4,929.7,71.3,151.3,0.103\n179,-1,1220.8,30.9,61.8,117,1\n179,-1,109,350.2,49.4,188.4,1\n179,-1,411.2,656.5,89.5,247.2,1\n179,-1,356.2,103.6,54.5,179.9,1\n179,-1,415.3,38.2,59.1,164.1,1\n179,-1,932.7,122.2,75.5,171.1,1\n179,-1,704.1,1,56,159.5,1\n179,-1,1488.9,70,55.3,147.1,1\n179,-1,212.1,125.4,54.8,168.9,1\n179,-1,1357.4,567.6,105.6,244.2,1\n179,-1,1720.6,456.7,78.4,211.7,1\n179,-1,687.7,207.4,77.4,112,1\n179,-1,289.3,126.9,54.1,170.2,1\n179,-1,421.1,228.7,77.6,224.6,1\n179,-1,1,616.9,105.7,236.2,1\n179,-1,527,292.9,61.6,208.5,1\n179,-1,543.9,147.2,66.8,172,1\n179,-1,233.3,572.1,63.5,210.9,1\n179,-1,866.7,176.3,74.8,193.2,1\n179,-1,1103.3,150.4,47.6,163.8,1\n179,-1,99.3,548.6,87.7,251.8,1\n179,-1,794.1,151.9,62.4,170.8,1\n179,-1,796.8,287.6,70.5,185,1\n179,-1,1210.2,155.3,58.9,183.3,1\n179,-1,745.3,269.3,69.2,202.1,1\n179,-1,1251.8,152.9,50.2,172.3,0.998\n179,-1,999.3,912.1,65,168.9,0.984\n983,-1,1222.1,29.6,62.6,119.8,1\n983,-1,686.8,206.1,79.3,113.8,1\n983,-1,793.4,141,72.5,171.6,1\n983,-1,407.9,268,70.5,190.1,1\n983,-1,1181.9,118.6,56.6,162.7,1\n983,-1,494.2,248.6,67.7,187.9,1\n983,-1,1574.6,589.8,104.2,234.9,1\n983,-1,334.7,833.6,94.2,247.4,1\n983,-1,1195.1,677,88,258.3,1\n983,-1,839.2,318.8,71.9,205.2,1\n983,-1,1787.5,174.8,71.1,181.6,1\n983,-1,1469.6,166,67.2,165.1,1\n983,-1,1720.5,452.4,79.8,216.4,1\n983,-1,319.5,259.2,64.2,197.9,1\n983,-1,230.9,136.9,54.7,165.8,1\n983,-1,305.4,449.7,83.2,204.1,1\n983,-1,751.7,72.6,55.3,162.6,1\n983,-1,546.2,119.7,54.2,169.6,1\n983,-1,1666.1,141.2,55.3,169,1\n983,-1,290.1,125.5,52.7,173.2,1\n983,-1,922.8,310.6,66.7,207.6,1\n983,-1,392.5,434.9,64.7,216.6,1\n983,-1,313.8,1.3,47.4,129.5,1\n983,-1,1451.5,1,57.1,93.3,1\n983,-1,1739.4,674.8,95.7,248.1,1\n983,-1,446.4,62.9,55.3,182.9,1\n983,-1,382.1,1.3,53.8,133,1\n983,-1,1388.7,1.3,46.5,93.2,0.999\n983,-1,366,164.9,65.9,200.1,0.999\n983,-1,493.3,64,52.4,158.5,0.999\n490,-1,1221.6,31,61.9,118,1\n490,-1,685.9,205.9,80,113.5,1\n490,-1,998.9,1,55.7,140.6,1\n490,-1,1499.4,1,57.2,123.6,1\n490,-1,1731.6,181,70.6,173.5,1\n490,-1,1692.6,459.2,104.9,210,1\n490,-1,801.1,601.4,92.3,258.4,1\n490,-1,462.9,155.7,65,196.4,1\n490,-1,304.1,192.7,49.6,168.9,1\n490,-1,875.2,1,53.7,129.2,1\n490,-1,931.3,1,56.1,132.3,1\n490,-1,1809.7,173.1,70.5,182.2,1\n490,-1,802.2,143.9,53.1,176.4,1\n490,-1,138.4,340.1,64.9,185.5,1\n490,-1,212.7,722.6,100.7,269.2,1\n490,-1,410.6,156.1,59.7,185.6,1\n490,-1,300.2,757.6,82.3,252.8,1\n490,-1,1693.6,42.5,53.2,167.4,1\n490,-1,919.8,656.1,111.3,247.4,1\n490,-1,357.6,109.6,55.3,174.9,1\n490,-1,1539.4,600.7,84.2,239.4,1\n490,-1,448.4,20,75.2,181.4,1\n490,-1,1635.4,32.8,61.3,174.9,1\n490,-1,218.1,136.1,62.9,165.5,1\n490,-1,1765.1,347.7,78,213.6,1\n490,-1,713.8,93.3,60,165.2,1\n490,-1,1629.2,324.6,62.1,196.6,1\n490,-1,409.5,8.5,46.6,159.9,0.999\n490,-1,503.9,89.4,64.4,174.8,0.999\n490,-1,1601.7,582,78.2,226.1,0.999\n490,-1,1006.9,674.7,74.2,231.5,0.998\n490,-1,753.5,98.8,44.5,142.3,0.733\n490,-1,291.3,138.5,47.9,152.5,0.238\n68,-1,1222,31,60.8,116.8,1\n68,-1,405,334.2,87.3,233.6,1\n68,-1,686.6,207,79.5,112.5,1\n68,-1,1487.9,70.3,54,145.4,1\n68,-1,1276.7,181.2,61.8,161.5,1\n68,-1,1362,566.7,104.8,244.4,1\n68,-1,356.5,106,56,177.7,1\n68,-1,705.1,1,55.3,158.9,1\n68,-1,142.3,361.8,57.9,190.8,1\n68,-1,1721.9,457,77.3,209.8,1\n68,-1,804.6,195,73.9,174.4,1\n68,-1,102.6,547,85.7,252.1,1\n68,-1,493,193.4,74.9,196.6,1\n68,-1,210.8,128.6,51.5,166.3,1\n68,-1,993.9,184.8,68.3,180.4,1\n68,-1,289,129,52.6,166.7,1\n68,-1,889.2,186,56.8,165,1\n68,-1,466.5,114.5,55.8,154.1,1\n68,-1,1448.7,200.3,70.7,202,1\n68,-1,539.2,65.3,46.9,168.4,1\n68,-1,9.6,745.3,71,242,1\n68,-1,1349.2,204.1,41.5,168.8,1\n68,-1,382.5,33.2,53.5,164.4,1\n68,-1,437.3,26.6,51.8,160,1\n68,-1,254.9,87,52.3,185.1,0.992\n68,-1,388.1,915.2,103.2,165.8,0.949\n68,-1,489.9,41.8,38.3,163.3,0.053\n442,-1,1221.4,30.1,62.3,118.9,1\n442,-1,937.2,1.5,59.6,158.8,1\n442,-1,1006.7,14.2,56.4,156.5,1\n442,-1,687,205.8,78.3,113.1,1\n442,-1,448.2,221.1,77.2,199.5,1\n442,-1,359.4,107.2,53.8,180.3,1\n442,-1,111.8,349.6,53.3,189.4,1\n442,-1,1717.5,456,80.9,213.3,1\n442,-1,1357.2,531.9,67.6,203.3,1\n442,-1,771.7,568.8,77,250,1\n442,-1,853.9,1,53.6,138.8,1\n442,-1,238.1,236.4,53.8,179,1\n442,-1,286.5,127.6,54,169.5,1\n442,-1,798.3,151.4,53.2,170.8,1\n442,-1,364.6,669.3,75.3,238.9,1\n442,-1,1751.8,152.1,65,168.2,1\n442,-1,1563.2,617.9,74.4,235.9,1\n442,-1,882.3,577.4,112.4,244.2,1\n442,-1,1844.4,400.2,76.6,204.9,1\n442,-1,269,640.4,87.3,262.7,1\n442,-1,1696,99.7,71.3,173.3,1\n442,-1,529.8,69.7,53.4,172.1,1\n442,-1,423.1,1,43.1,132.7,1\n442,-1,430.1,119,58.7,170.2,1\n442,-1,220.1,136.3,59,153.6,1\n442,-1,362.5,3.1,61.7,130.3,1\n442,-1,1677.1,369.2,70.5,198.8,1\n442,-1,711.8,88.5,60.9,174,0.999\n442,-1,726.8,1,50.7,100.4,0.998\n442,-1,960,596.4,83.6,226.2,0.997\n442,-1,756.2,87.7,47.4,149.6,0.988\n442,-1,1007.2,922.9,89.5,158.1,0.975\n950,-1,686.3,206.1,80.4,113.5,1\n950,-1,1221.6,29.7,61.8,119.4,1\n950,-1,794.1,140.1,73.1,173.2,1\n950,-1,1474.8,135.9,63.3,168.1,1\n950,-1,1483.3,1,55.8,111.9,1\n950,-1,1143.5,71,58.8,171.5,1\n950,-1,321.7,764.8,96,273.6,1\n950,-1,1574,587.4,104.1,236.6,1\n950,-1,750,72,56.6,161.9,1\n950,-1,1246.2,761.8,92,269.5,1\n950,-1,1637.7,104.4,52.1,167.4,1\n950,-1,933.3,354.3,68.9,215,1\n950,-1,1722.2,452.5,76.6,215.7,1\n950,-1,552.8,117.4,55,169.2,1\n950,-1,393.8,386.5,65.5,217.1,1\n950,-1,855.1,365.7,67.5,215,1\n950,-1,322.4,405.9,80.5,199.2,1\n950,-1,428.9,231.4,70,187.7,1\n950,-1,1415.3,1,47.8,115.8,1\n950,-1,235,134.8,58.3,170.3,1\n950,-1,346.2,234.2,62.9,185.1,1\n950,-1,1741.9,674.4,95.6,251.4,1\n950,-1,436.3,76.4,55.2,175.9,1\n950,-1,478.1,37.4,55.5,155.5,1\n950,-1,480.1,216.2,62.4,184.9,1\n950,-1,1756.7,133.1,62.8,178.7,1\n950,-1,249,2.7,54.2,120,1\n950,-1,317.6,167.8,59.6,194.6,0.995\n950,-1,287.1,126.2,53,164.4,0.992\n831,-1,1221,29.6,62.4,119,1\n831,-1,687,205.9,78.9,114.4,1\n831,-1,1640.4,6.3,59.2,157.1,1\n831,-1,273.8,567.6,81.6,245.4,1\n831,-1,790.7,135.2,69.1,180.1,1\n831,-1,557.9,116.1,61,175.3,1\n831,-1,1722.3,452.3,76.5,214.5,1\n831,-1,1574.6,589.3,102.5,234.3,1\n831,-1,1475.7,47.6,59.1,155.1,1\n831,-1,1033.7,541.3,92.4,244.3,1\n831,-1,751.8,71.6,57.3,163.2,1\n831,-1,1423.5,41,48.6,154.5,1\n831,-1,360.4,274.4,85.1,181.5,1\n831,-1,292.1,161.9,68.3,200.3,1\n831,-1,474.9,125.2,59.5,179.1,1\n831,-1,437.7,258.3,54.6,195.3,1\n831,-1,957.3,561.4,71.6,236,1\n831,-1,239.5,134.4,50.4,162.5,1\n831,-1,422.4,122.6,56.6,176.4,1\n831,-1,253.2,1,53.5,120.5,0.999\n831,-1,350.8,171.3,42.7,175.2,0.894\n485,-1,1221.8,30.9,62.2,117.9,1\n485,-1,686.7,205.3,79.8,114.7,1\n485,-1,998.7,1,56.5,144.2,1\n485,-1,1500.2,1,58.5,122.2,1\n485,-1,298.8,197.4,51.1,168.6,1\n485,-1,1682.8,458.8,118.2,208.8,1\n485,-1,456.5,165,69.6,197.1,1\n485,-1,931.6,1,56.3,135.4,1\n485,-1,1798.7,165.9,68.2,176.3,1\n485,-1,876.7,1,53.8,132.4,1\n485,-1,134.1,340.8,59.8,188.8,1\n485,-1,1729.7,177.4,67,170.6,1\n485,-1,803.8,597.6,90.4,256.8,1\n485,-1,802.2,142.6,51.1,177,1\n485,-1,1700.1,46,49.8,170.1,1\n485,-1,1780.4,353.3,73.5,209.7,1\n485,-1,359.6,112.2,52.9,172.5,1\n485,-1,1539.7,598.2,81,242.5,1\n485,-1,217,713.4,96.4,263,1\n485,-1,1633.2,329.9,62.9,190.7,1\n485,-1,310.5,742.2,75.4,259.5,1\n485,-1,220,139.6,62,157.8,1\n485,-1,913,649.8,117.6,254.9,1\n485,-1,414.2,155.6,55.3,173.6,1\n485,-1,446.6,23.6,76.2,179.5,1\n485,-1,1643.2,39.6,56.9,174.3,1\n485,-1,504.7,87.8,62.6,172.4,1\n485,-1,711.6,94,59.9,167.1,0.999\n485,-1,410.8,7.2,46.8,157.5,0.999\n485,-1,753.2,98.8,51.4,141.6,0.992\n485,-1,1001.9,671.9,75.6,227.3,0.949\n485,-1,1592.1,577.9,65.2,191.4,0.416\n485,-1,1017.4,933,83.1,148,0.174\n763,-1,1221.5,29.3,62.3,118.9,1\n763,-1,687,205.5,79.1,114,1\n763,-1,543.9,114.9,66.2,177.1,1\n763,-1,781.4,135.5,63.7,176.9,1\n763,-1,1719.7,453.1,80.2,213.1,1\n763,-1,1575.2,591.1,100,233.6,1\n763,-1,303.2,468,77.4,226.6,1\n763,-1,1458.5,83.1,52.9,170.2,1\n763,-1,270.9,177.2,56.6,200.6,1\n763,-1,456.7,193.6,54,187.8,1\n763,-1,329.9,192.6,56.2,180.7,1\n763,-1,397.6,209.7,66.8,174.6,1\n763,-1,1578.2,84.8,63.8,176.3,1\n763,-1,1493.8,15.1,61,148.6,1\n763,-1,459.4,63.7,56.4,167.8,1\n763,-1,752.3,82.2,49.3,151.5,1\n763,-1,257.1,1.5,50.1,121.3,1\n763,-1,517.6,566,80.3,252.9,1\n763,-1,1147.3,662.5,97.9,266.3,1\n763,-1,1083.8,680.3,80.6,256.8,1\n763,-1,235.5,134.8,48.8,164.8,1\n763,-1,401.9,66.3,56.8,167.4,1\n763,-1,359.4,110.8,53,169.6,1\n808,-1,1221.5,29.9,62.3,118.6,1\n808,-1,687,205.2,79,114.1,1\n808,-1,1617.3,1,58.1,140.3,1\n808,-1,278.2,528.6,80.7,240.8,1\n808,-1,1723.9,452.4,75,215,1\n808,-1,787.4,130.8,51,178.6,1\n808,-1,549.7,114.6,65.9,178.9,1\n808,-1,1574.4,591.6,100.7,232.5,1\n808,-1,277,166.7,61.6,196.6,1\n808,-1,440.9,234.1,56.6,197.2,1\n808,-1,1473.4,34.4,62.4,154.2,1\n808,-1,379.7,247.4,73.6,176.2,1\n808,-1,476.1,105.6,64.7,179.5,1\n808,-1,997.8,599.9,71.5,235.6,1\n808,-1,751.3,73.1,56.5,160.8,1\n808,-1,1070.1,573.6,75.9,250.9,1\n808,-1,345.5,179.8,53.2,174,1\n808,-1,234.8,135.9,50.8,163.9,1\n808,-1,1435.7,52.9,50.6,159,1\n808,-1,422.6,105.2,59.9,168.5,0.999\n808,-1,441.4,1,42.4,83.6,0.995\n1034,-1,1221.5,29.7,61.5,118.9,1\n1034,-1,686.8,206.7,79.4,113.5,1\n1034,-1,794,141.1,70.9,171.6,1\n1034,-1,1718.8,455.8,82.6,211.6,1\n1034,-1,486.3,309.8,73.4,195.6,1\n1034,-1,288.8,128,53.1,168.4,1\n1034,-1,234,139.3,57.1,165.8,1\n1034,-1,1265.4,182.6,65.2,167.9,1\n1034,-1,846.6,256.4,65,196.6,1\n1034,-1,937,244.7,66,201.7,1\n1034,-1,750.9,75.5,54.6,161.6,1\n1034,-1,365.1,321.5,75.7,200,1\n1034,-1,1573.9,589.9,103.4,239.1,1\n1034,-1,1703.6,201.4,62.2,180.5,1\n1034,-1,1135.1,570.6,86.9,250,1\n1034,-1,295,316.4,67.5,202.8,1\n1034,-1,375.3,504.3,64.6,230.1,1\n1034,-1,1683.7,682,81.9,237.6,1\n1034,-1,288.5,523,87.8,210.9,1\n1034,-1,372,105.6,58.2,175.3,1\n1034,-1,1849.6,240.4,64,198.1,1\n1034,-1,1470.6,208.7,69,162.5,1\n1034,-1,581.3,542.4,69.3,247,1\n1034,-1,308.5,2.3,36.6,128.8,1\n1034,-1,436.4,174.1,61.8,163.5,1\n1034,-1,539.6,120.5,61.5,171.9,1\n1034,-1,488,164.2,66.6,196.7,0.999\n254,-1,1220.5,31.2,63.2,117.7,1\n254,-1,1614.1,6.3,61.1,150.4,1\n254,-1,686.8,206.6,78.9,114.3,1\n254,-1,390.8,505.1,88.4,238.5,1\n254,-1,1479.9,55.4,54.2,151.9,1\n254,-1,287,128,56.2,171.4,1\n254,-1,211.4,126.1,57.3,168.6,1\n254,-1,798.2,152,59.6,175.6,1\n254,-1,356.8,108.2,52.7,178.2,1\n254,-1,1720.4,457.6,78.5,210.7,1\n254,-1,108.4,349.6,51.4,192.3,1\n254,-1,1385.7,568.2,103.3,240,1\n254,-1,704.2,1,54.6,157.8,1\n254,-1,1147,109.5,50.2,167.4,1\n254,-1,226,456.6,60.9,202.8,1\n254,-1,450.4,167.8,76.9,210.6,1\n254,-1,937.4,109.4,69.9,182.7,1\n254,-1,131.5,572.4,93,231.2,1\n254,-1,1067.9,114.7,58.4,180.7,1\n254,-1,898.2,107.7,48.5,158.7,1\n254,-1,859,356.8,76.9,196.6,1\n254,-1,224.7,737.9,91.3,258.9,1\n254,-1,793.9,347.6,82.5,206.7,1\n254,-1,513.8,118.7,56.1,177.1,1\n254,-1,487.7,370.5,74.2,230.1,1\n254,-1,580,382.2,64,210.2,1\n254,-1,761.9,99.9,50.9,172.5,0.999\n254,-1,363.9,1,58.6,166.1,0.997\n254,-1,931.1,909.7,76.7,171.3,0.991\n939,-1,1221.4,29.9,61.8,119.7,1\n939,-1,686.5,206.2,79.8,113.2,1\n939,-1,794.4,139.5,73.6,173.4,1\n939,-1,1485.6,1,61.1,121.5,1\n939,-1,322.7,746.6,90.8,259.4,1\n939,-1,443.2,223.4,69.2,189.2,1\n939,-1,1476.4,125.6,60.7,157.3,1\n939,-1,1128.8,62.1,63.5,169.6,1\n939,-1,555.4,116.9,57.4,171.7,1\n939,-1,1575.4,588,103.7,237.5,1\n939,-1,1624.2,91.7,57.4,170.6,1\n939,-1,1721.8,455.4,77.3,211.2,1\n939,-1,750,70.8,56.5,162.2,1\n939,-1,237.7,134,59.3,169.5,1\n939,-1,395.4,376.9,65.3,217.5,1\n939,-1,1262.1,787.3,93.6,285.9,1\n939,-1,1741,125.2,58.6,177.6,1\n939,-1,475.7,28.6,54.1,154.2,1\n939,-1,1745.2,675.5,92.2,248.3,1\n939,-1,329.4,391.9,80.7,190.1,1\n939,-1,858.1,388.1,65.1,212.9,1\n939,-1,357.6,225,61.2,183.2,1\n939,-1,943.9,369.1,68.8,222.6,1\n939,-1,254.6,1,53.2,120.1,1\n939,-1,1420,2.9,46,117.4,1\n939,-1,307,162,64.7,197.2,1\n939,-1,434.8,71.2,54,181.1,1\n626,-1,687.2,205.9,79.3,113.1,1\n626,-1,1221.3,28.8,63.2,118.8,1\n626,-1,1480.8,6.6,60.4,142.6,1\n626,-1,346.2,295,68.6,203.8,1\n626,-1,800.4,144.3,66.9,172.2,1\n626,-1,1624,203.8,78.4,194.8,1\n626,-1,1573.5,588.1,99,236.4,1\n626,-1,357.3,114,53.6,172.4,1\n626,-1,540.2,541.5,85,243.6,1\n626,-1,550.9,111.7,58.9,175.8,1\n626,-1,184.9,239.7,71.5,201.6,1\n626,-1,1712.1,455.9,92,208.6,1\n626,-1,288,126.3,52.5,169.6,1\n626,-1,498.2,78.6,47.1,158.1,1\n626,-1,251.3,248.8,58.6,184.7,1\n626,-1,352,1.5,54.9,122,1\n626,-1,753.5,78.6,44.5,153,1\n626,-1,1589.2,1,54.2,93.2,1\n626,-1,233.6,133.7,48.8,162.2,1\n626,-1,450.9,84.3,46.8,172,0.999\n626,-1,411.3,105,50.9,156.2,0.999\n626,-1,421.2,2.8,60.3,122.3,0.999\n626,-1,1111.6,921.4,101.1,159.6,0.994\n817,-1,1221.2,29.2,62.5,119.3,1\n817,-1,687.6,205.8,78,113.8,1\n817,-1,790.4,133.8,61.3,176.6,1\n817,-1,1723.7,452.6,74.7,214.5,1\n817,-1,557.3,115.8,62.2,176,1\n817,-1,1626.3,1,55.8,151.3,1\n817,-1,1575.1,591.2,100.5,232.4,1\n817,-1,275.3,548.6,79.1,240.6,1\n817,-1,282.8,164.2,63.9,196.8,1\n817,-1,439.7,243.4,55.4,198.2,1\n817,-1,376,261.7,73.1,176.5,1\n817,-1,474.2,108.5,61.2,180.3,1\n817,-1,751.2,72.7,58.7,161.1,1\n817,-1,1471.4,36.4,62.9,158.1,1\n817,-1,1429.5,48.5,50.9,159.6,1\n817,-1,235.6,135.5,50.5,164.4,1\n817,-1,981,583.6,74.3,243.9,1\n817,-1,1056.3,563.2,71.9,239.1,1\n817,-1,348.2,178.7,50.4,167.7,1\n817,-1,425.8,109.7,58.1,167.8,0.999\n817,-1,443.5,7.7,34.5,69.9,0.12\n384,-1,1222.3,31.5,61.8,118.7,1\n384,-1,686.1,206.9,80,111.8,1\n384,-1,1636.6,23.8,73,172.1,1\n384,-1,357.7,106.6,56.2,179,1\n384,-1,447.3,291.3,77.4,206.4,1\n384,-1,1104.8,455.9,69.5,203.7,1\n384,-1,373.1,2.6,58.9,98.6,1\n384,-1,827.7,1,54.6,113.4,1\n384,-1,108.4,350,52.6,190.8,1\n384,-1,332.6,539.7,89.4,245.2,1\n384,-1,951.5,30,64,176.7,1\n384,-1,1774.2,102.2,64.8,159.7,1\n384,-1,446.7,566.4,71.5,235.9,1\n384,-1,1599.4,633.9,80.9,244.6,1\n384,-1,282.7,127.4,55.1,169.5,1\n384,-1,1014.7,48.6,55.7,163.7,1\n384,-1,795.9,149.6,59.5,172.8,1\n384,-1,1717.4,456.1,77.7,211.6,1\n384,-1,208.7,297.8,53.6,184.3,1\n384,-1,219.9,138.1,57.7,159,1\n384,-1,449.1,73.6,71.8,195.7,1\n384,-1,847.4,496.7,90.2,230.6,1\n384,-1,1436.5,1,52.5,87.4,1\n384,-1,1786.2,437.5,67.5,209.9,1\n384,-1,506.4,79.6,50.9,170.2,1\n384,-1,913,515,76.1,208.1,0.999\n384,-1,755.8,105.1,50.8,135.6,0.999\n384,-1,978,907.9,87,173.1,0.995\n384,-1,615.6,563.8,82.6,236.7,0.857\n759,-1,1221.7,29.7,62.2,119,1\n759,-1,686.6,205.8,79.9,113.3,1\n759,-1,545.7,116.5,64.8,176.5,1\n759,-1,781.1,134.6,65.4,177.1,1\n759,-1,1716.9,453.6,82.3,212.5,1\n759,-1,304.2,460.1,77.3,226.1,1\n759,-1,1463.3,87,52.5,169.2,1\n759,-1,1575.1,589.1,100.4,235,1\n759,-1,1582.8,89.3,63.5,175.3,1\n759,-1,266.8,182.3,57.8,199,1\n759,-1,331.4,195.5,54.2,174.4,1\n759,-1,458.9,188.3,54.9,189.6,1\n759,-1,1495.3,17.1,61.1,146.9,1\n759,-1,401.2,202.9,65.2,174.6,1\n759,-1,257.6,1,49.7,122.5,1\n759,-1,1158.1,667.7,90.9,267.6,1\n759,-1,453.6,66.2,57.9,169.2,1\n759,-1,505.7,564.8,74.5,250.3,1\n759,-1,752.1,80.2,49.1,152.3,1\n759,-1,1094.3,689.8,77.7,251.1,1\n759,-1,236.3,136.4,48.8,158.7,1\n759,-1,398.6,63.7,56.8,167.3,1\n759,-1,360.5,110.7,50.5,166.8,0.999\n351,-1,1221.9,30.6,61.7,119.5,1\n351,-1,687.3,206.6,78.6,113.2,1\n351,-1,1741.6,82.2,58.6,151.1,1\n351,-1,1609.9,1,64.4,140.4,1\n351,-1,1444.2,1,51.4,113.4,1\n351,-1,287.8,129.7,54.6,174.2,1\n351,-1,445.6,89.4,71.1,203,1\n351,-1,1033.3,61.9,54.9,168.2,1\n351,-1,434.1,342.2,73.3,213.5,1\n351,-1,207.7,138.2,58.1,163.7,1\n351,-1,109,349.6,52.4,189.2,1\n351,-1,1005.8,414.5,63.9,195.1,1\n351,-1,364.5,106.7,54.8,179.9,1\n351,-1,1719.2,457,78.9,212.9,1\n351,-1,966.5,55.3,63.4,178.4,1\n351,-1,1553.9,617.1,94.5,246.2,1\n351,-1,226.1,333.9,57.2,189.9,1\n351,-1,796.7,153.6,59.2,169.7,1\n351,-1,1826.9,480.2,69,212.9,1\n351,-1,478.8,576.9,89.7,245.7,1\n351,-1,843.7,1,49.6,96,1\n351,-1,519.3,95.6,38.5,168.1,1\n351,-1,391.4,496.2,85.6,231.5,1\n351,-1,902.6,472.1,74.3,206.4,1\n351,-1,843.1,455.1,83,228.1,1\n351,-1,924.3,17.3,61.7,161.5,1\n351,-1,766.7,96.2,40.9,151.5,0.999\n351,-1,709.5,91.9,59.7,174.4,0.996\n351,-1,1867.2,64.2,53.8,164.2,0.995\n351,-1,953.8,929.6,77.4,151.4,0.871\n245,-1,1221,30.5,63.1,117.6,1\n245,-1,686.8,207.2,79.1,112.7,1\n245,-1,108.3,349.6,51.8,191.8,1\n245,-1,797.3,151.9,59.3,174.8,1\n245,-1,1595.4,4.7,60,146.1,1\n245,-1,1482.1,59,54.2,151.5,1\n245,-1,391.6,517.5,86.7,239.9,1\n245,-1,211.7,124.7,56.3,171.2,1\n245,-1,1366.9,567,106.8,244.6,1\n245,-1,932,117.4,70.8,178.9,1\n245,-1,448.2,175,74.7,209.3,1\n245,-1,1720.6,456.5,78.7,212,1\n245,-1,704.5,1,54.5,158.2,1\n245,-1,1158.8,115.4,52.4,162.8,1\n245,-1,222.6,473,60.8,206.3,1\n245,-1,287.8,127.5,56.1,172.4,1\n245,-1,493.6,358.3,72.2,225.5,1\n245,-1,1081.1,118.7,57.8,180.7,1\n245,-1,355.9,105.7,53.6,178.2,1\n245,-1,202.9,726.5,89,252,1\n245,-1,116.4,564.1,86.2,246.4,1\n245,-1,847.6,345.7,80.6,196,1\n245,-1,516.8,117.5,53,183.4,1\n245,-1,787.3,335.2,84.4,204.3,1\n245,-1,587.7,369.7,64.1,201.9,0.999\n245,-1,930,898.8,73.3,182.2,0.995\n245,-1,769.6,103.2,50.4,167.2,0.985\n426,-1,1221.8,30.9,61.8,118.8,1\n426,-1,686.9,205.4,79,115.1,1\n426,-1,940.6,7.8,64,166.6,1\n426,-1,358.8,108.7,54.7,177.4,1\n426,-1,1672.5,78,63.2,175.3,1\n426,-1,449.6,238.9,78.1,200,1\n426,-1,109.7,347.3,53.9,193.6,1\n426,-1,1718.4,456.6,80.3,209.1,1\n426,-1,840.2,1,53,134.2,1\n426,-1,1008.8,24,54.6,159.5,1\n426,-1,1574.8,616.9,95.2,241.9,1\n426,-1,742.9,558.1,80.6,248.3,1\n426,-1,1275.2,509.6,76.2,206.6,1\n426,-1,542.1,70.4,54.9,163.8,1\n426,-1,285.5,130.9,54.7,164.2,1\n426,-1,1760.7,143,56.5,158.5,1\n426,-1,283,617.8,95.5,249,1\n426,-1,798.8,150.2,54.1,173.1,1\n426,-1,865.8,554.9,105.1,238.6,1\n426,-1,216.4,253.8,53.9,178.8,1\n426,-1,220.9,141.4,74.2,159.5,1\n426,-1,357.1,2.1,69.7,124.5,1\n426,-1,385.7,639.3,73.6,243.8,1\n426,-1,430.5,108.6,54.5,164,1\n426,-1,713.5,88.8,62,176.7,1\n426,-1,944.9,567.9,86.3,223.7,1\n426,-1,425.4,1.8,42.1,125.6,1\n426,-1,721.1,1,49.5,115.6,0.999\n426,-1,1856.7,424.7,64.3,192.2,0.994\n426,-1,1791.5,69.3,83.2,179.5,0.993\n426,-1,452.5,58.2,71.8,194.2,0.991\n426,-1,990.4,932.7,82.4,148.3,0.761\n426,-1,753,87.2,41.1,158.8,0.406\n999,-1,1221.6,30.7,61.8,119.1,1\n999,-1,686.7,206.2,79.3,113,1\n999,-1,794,140.6,74.4,171.3,1\n999,-1,398.8,289.2,67,189.6,1\n999,-1,1473,180.8,65,161.3,1\n999,-1,231.8,136.3,54.3,166.1,1\n999,-1,1198.7,137.5,64.7,173.1,1\n999,-1,1674.6,160.5,62,171.4,1\n999,-1,290.8,126,50.4,168.4,1\n999,-1,502.9,264.4,64.6,186.2,1\n999,-1,1575.9,589.5,102.8,236.2,1\n999,-1,1806,194.2,68.9,187.5,1\n999,-1,1722.7,452.7,77.8,216.8,1\n999,-1,841.6,297.1,65.6,202.6,1\n999,-1,923.8,289.9,70.4,208.4,1\n999,-1,751.4,71.7,54.3,162.6,1\n999,-1,301.3,465.5,85.3,210.8,1\n999,-1,541.4,119.3,59.5,169.7,1\n999,-1,311.3,277.2,66.5,198.5,1\n999,-1,336.3,866.4,89.4,214.6,1\n999,-1,1740.4,675.8,93.2,248.1,1\n999,-1,1175.8,638.9,87.3,265.2,1\n999,-1,314,1,43.7,131.3,1\n999,-1,382.2,458.2,68.6,218,1\n999,-1,439.8,65.9,60.8,171,1\n999,-1,598.6,548,108.2,247.7,1\n999,-1,508.2,84.9,53.2,156.2,1\n999,-1,390.9,167.2,73.8,185.7,0.999\n823,-1,1221.7,29.4,62,118.3,1\n823,-1,687.5,205.4,78.3,114.9,1\n823,-1,790.9,135.4,64,178.4,1\n823,-1,275.6,555.3,79.3,240.7,1\n823,-1,556.6,116,63,175.9,1\n823,-1,1722.9,453.3,75.4,214,1\n823,-1,438.3,253.6,55.6,195.6,1\n823,-1,1040.6,547.1,90.2,246.7,1\n823,-1,1634.6,3.4,52.3,153.3,1\n823,-1,1575.5,589.2,101.1,234.7,1\n823,-1,1474.8,41.5,58.8,156.8,1\n823,-1,1424.6,42.9,51.1,158.9,1\n823,-1,284.9,163.4,68.1,193.7,1\n823,-1,375.8,263.3,69.8,175,1\n823,-1,752.4,71.1,56.7,162.5,1\n823,-1,473.3,120.9,59.5,177.5,1\n823,-1,969.5,572.2,73.4,232.9,1\n823,-1,237.5,135.9,49.3,165.1,1\n823,-1,423.7,116.5,59.6,172.9,1\n823,-1,347,174.3,50.9,175.7,1\n713,-1,1221.7,30,61.7,118.9,1\n713,-1,686.8,206.2,79.5,113.5,1\n713,-1,1480.9,8.1,57.6,144.5,1\n713,-1,554.5,110.5,59.3,178.8,1\n713,-1,1573.6,588.7,101.3,237.6,1\n713,-1,1601.6,121.8,65.8,184.8,1\n713,-1,1712,455.8,95.8,209.1,1\n713,-1,480.7,157.8,50.3,178.3,1\n713,-1,412.2,167.4,73.5,163.7,1\n713,-1,296.3,399.9,76,215,1\n713,-1,1475.3,121.2,51.4,179.1,1\n713,-1,1192.8,792.1,89.3,261.7,1\n713,-1,360.6,107.7,49.9,177.9,1\n713,-1,259.8,195.1,57.2,197.3,1\n713,-1,391.9,546,76.7,242.6,1\n713,-1,750.1,80.7,49.6,155.7,1\n713,-1,1281,772.6,91.3,270.9,1\n713,-1,412.3,31.4,62.2,164.9,1\n713,-1,800.1,137.3,46.5,171.9,1\n713,-1,471,19.9,46.3,145.1,1\n713,-1,308,206.9,58.6,177,1\n713,-1,233.1,133.4,50.4,167,0.999\n713,-1,979.6,1,78.7,81.9,0.599\n754,-1,1221.3,29.4,62.2,118.8,1\n754,-1,686.7,205.9,79.6,113.6,1\n754,-1,546.9,117.8,64.6,173.5,1\n754,-1,1463.2,95.4,54.2,163.8,1\n754,-1,781.3,134.1,62.7,177.4,1\n754,-1,1714.3,455.7,87.5,208.9,1\n754,-1,303.5,450.1,74.8,224.9,1\n754,-1,263.5,185.4,59.1,200,1\n754,-1,1574.9,589.3,100.3,233.2,1\n754,-1,479,574.8,94.6,240.8,1\n754,-1,331.7,197.2,56,173.5,1\n754,-1,462.6,189.5,52.9,188,1\n754,-1,1591.2,87.4,62.8,181.1,1\n754,-1,401.1,199.1,67.4,174.2,1\n754,-1,1495.2,16.7,58.1,139.7,1\n754,-1,448.5,63.6,54.9,169.3,1\n754,-1,1165.3,677.1,93.7,266.5,1\n754,-1,751.2,78.5,49.3,154.9,1\n754,-1,258.2,1,49.1,122.2,1\n754,-1,1103.7,703.2,78.9,262.2,0.999\n754,-1,359.1,107.9,51,175.6,0.999\n754,-1,235.9,140.1,50.9,153.2,0.999\n754,-1,397.8,61.5,56.2,167.6,0.996\n754,-1,293,132,43.3,158.5,0.805\n658,-1,1152.5,2.1,68.9,116.2,1\n658,-1,687.2,206.1,79.4,113.8,1\n658,-1,1220.1,28.8,63.9,120.9,1\n658,-1,1481,4.7,60.3,143.4,1\n658,-1,1711.9,455.5,96.3,209.8,1\n658,-1,551.1,111.1,59.7,175.7,1\n658,-1,801.9,144.9,64.9,171.6,1\n658,-1,359.5,114.2,50.1,169.6,1\n658,-1,327.8,333,70.3,208.1,1\n658,-1,1574.8,587.8,96.9,235.9,1\n658,-1,1613.1,170.7,76.4,186.7,1\n658,-1,751.5,80,46.4,155.2,1\n658,-1,409.2,1,57,152.1,1\n658,-1,424.7,120.4,59.1,162.4,1\n658,-1,472.8,109.4,47.8,174.9,1\n658,-1,445.8,530,80.1,249.2,1\n658,-1,221.2,218.4,56.9,201.4,1\n658,-1,271.7,235.7,58.6,176.9,1\n658,-1,286.9,124.8,53.7,172.2,1\n658,-1,352.3,1,53.1,142.9,0.999\n658,-1,1430.2,908.5,97.3,172.5,0.999\n658,-1,1353.7,930.6,89.4,150.4,0.964\n71,-1,1221.7,30.6,61.2,117.4,1\n71,-1,406.3,331.4,87.1,231.8,1\n71,-1,687,206.5,79.4,115.8,1\n71,-1,1487.5,69.6,55.2,148.9,1\n71,-1,704.5,1,55.8,158.6,1\n71,-1,138.2,353.4,58.1,198.6,1\n71,-1,1362.3,566.1,104.4,246,1\n71,-1,1265.1,176.7,60.1,164.7,1\n71,-1,355.5,107,55.9,179,1\n71,-1,1722.1,456.3,77.2,210.9,1\n71,-1,788,190.2,77.3,182.8,1\n71,-1,493.5,197.6,74.9,193.8,1\n71,-1,103.3,547.2,85.5,252.4,1\n71,-1,11.1,742.6,67.5,231.9,1\n71,-1,991,186.2,68.6,179.8,1\n71,-1,1438.5,200.3,77.6,198.8,1\n71,-1,289.6,128.7,51.2,166.4,1\n71,-1,211.5,130.3,51.4,164,1\n71,-1,1340.8,206.8,42.1,160.4,1\n71,-1,469.3,114.4,57.3,162.4,1\n71,-1,539,62.8,47.2,171,1\n71,-1,887.6,186,55.9,168.8,1\n71,-1,383.8,32.1,51.7,161.4,1\n71,-1,436,24.5,53.5,161.2,1\n71,-1,257.2,91.5,53.3,174.6,0.994\n71,-1,384.7,908.4,105.1,172.6,0.989\n71,-1,848.5,165.4,55.8,179.9,0.869\n822,-1,1221.4,29.5,62.2,118.7,1\n822,-1,687.9,205.4,77.9,114.8,1\n822,-1,790.1,136.4,64.8,177.4,1\n822,-1,276,553.3,78.2,242.9,1\n822,-1,556.1,115.7,62.9,174.9,1\n822,-1,1633.4,3.6,53.1,152.5,1\n822,-1,1723.6,453.1,74.4,214.4,1\n822,-1,438.7,252.4,55.7,195.2,1\n822,-1,1575.9,588.9,100.4,235.4,1\n822,-1,1043.9,547.9,86.5,247.3,1\n822,-1,1425.3,43.1,51.8,158.4,1\n822,-1,1475.2,41.6,58.4,157,1\n822,-1,284.4,162.9,68.8,196.2,1\n822,-1,375.2,263.5,71.4,175.2,1\n822,-1,473.9,120.5,59.7,177.9,1\n822,-1,751.5,70.9,58.2,163.1,1\n822,-1,971.5,575.9,73.1,227.7,1\n822,-1,237,135.9,49.7,165.6,1\n822,-1,424.7,115.9,59,170.8,1\n822,-1,346.7,175,51.2,173.2,0.999\n205,-1,1221.5,31,61.7,119.5,1\n205,-1,687,206.8,78.6,113.5,1\n205,-1,397.4,602.2,89.2,244,1\n205,-1,211.6,127,55.5,168.1,1\n205,-1,69.6,642.9,115.9,253.6,1\n205,-1,1491.5,70.3,53.7,147.8,1\n205,-1,705.2,1.1,55,158.9,1\n205,-1,108.6,349.5,50.4,187.8,1\n205,-1,1721,457.4,78.3,210.4,1\n205,-1,288.5,126.6,55.6,171.9,1\n205,-1,1209.8,144.2,53.3,167,1\n205,-1,1358.2,568.3,104.5,245.4,1\n205,-1,508.5,318.7,76.6,216.3,1\n205,-1,521.7,132.2,57.9,164.6,1\n205,-1,354.8,107.9,55.5,177.7,1\n205,-1,797.1,150.8,59.1,173.7,1\n205,-1,424.1,206.3,77.5,216,1\n205,-1,382.9,39.3,64.7,167.3,1\n205,-1,1147.2,139.6,59.8,184,1\n205,-1,1030.6,138,48.7,153.3,1\n205,-1,894.9,154.2,70.8,187.5,1\n205,-1,805.3,310.8,73.4,187.6,1\n205,-1,227.9,531,60.4,213.6,1\n205,-1,1,605.7,71.2,230.8,1\n205,-1,754.9,296.6,69.8,204.9,1\n205,-1,964.9,912.7,70.7,168.3,0.975\n205,-1,868.5,115.4,47,157.9,0.687\n205,-1,471.4,3.4,44.6,80.3,0.299\n846,-1,1221.4,29.6,62.3,118.6,1\n846,-1,687.9,205.9,78,114.2,1\n846,-1,794.7,138.8,79.3,175.8,1\n846,-1,557.9,117.2,60.1,174.2,1\n846,-1,1721,453,78.8,213.3,1\n846,-1,1574.8,591.5,102.8,232.3,1\n846,-1,266.1,592.5,80.9,242.3,1\n846,-1,1070,1.1,58.3,110,1\n846,-1,752.6,71.6,55,162,1\n846,-1,1469.3,61.4,60.8,153.5,1\n846,-1,295.5,160.2,73.3,197.9,1\n846,-1,354.3,287.7,74.1,181.4,1\n846,-1,240.5,131.2,52.1,167.6,1\n846,-1,1415.4,29.7,54,159.3,1\n846,-1,1656.4,22.2,55,161.3,1\n846,-1,474,136.6,60,182.5,1\n846,-1,436.9,273.1,55.4,201.9,1\n846,-1,935,533.7,72.3,240.2,1\n846,-1,1019.3,512.1,71.7,238.6,1\n846,-1,416.1,139.3,60.7,170.2,1\n846,-1,254,1,53.7,121.1,1\n1035,-1,1221.4,30.2,61.8,118.2,1\n1035,-1,687,206.7,79.2,113.8,1\n1035,-1,794.6,141.3,70.4,172.7,1\n1035,-1,1719.7,455.4,82.1,213.3,1\n1035,-1,1271.7,183.6,61.6,165.5,1\n1035,-1,485.4,311.2,74.7,195.4,1\n1035,-1,289.5,128.2,52.8,168.1,1\n1035,-1,1134,572.5,87.8,243.7,1\n1035,-1,233.8,139.3,56.4,165.2,1\n1035,-1,847.9,256.7,63.4,195.2,1\n1035,-1,751.4,76.6,54.1,160.7,1\n1035,-1,936.8,242.6,66.2,203.3,1\n1035,-1,364.6,319.4,74.1,199.2,1\n1035,-1,286.4,524.4,90.5,212.4,1\n1035,-1,295.1,315.3,68.1,205.3,1\n1035,-1,1573.3,590.4,103.7,236.5,1\n1035,-1,374.2,501.1,65.4,232.9,1\n1035,-1,1705.4,202,62.4,179.4,1\n1035,-1,1681,682.7,81,231.5,1\n1035,-1,1850.1,240.9,64.8,198.1,1\n1035,-1,437.5,173.4,62.2,164.1,1\n1035,-1,371,104,59.9,176.2,1\n1035,-1,1470.3,208.8,69.2,163.6,1\n1035,-1,581.7,540.9,68.7,250.7,1\n1035,-1,307.8,2.1,36.6,128.6,1\n1035,-1,491,164.4,67.7,197.2,1\n1035,-1,540.1,119.3,60.2,170.8,0.999\n806,-1,1220.9,29.6,62.4,119.2,1\n806,-1,687.1,205.8,78.7,114.2,1\n806,-1,1615.2,1,57.9,139.6,1\n806,-1,278.3,528.5,80.3,240,1\n806,-1,549.8,114.4,64.3,177,1\n806,-1,786.1,130.9,52.2,179.6,1\n806,-1,1723.2,453.1,75,213.4,1\n806,-1,1574.5,590.6,101.3,234.2,1\n806,-1,278.7,164.8,60.7,200.7,1\n806,-1,440.4,232.8,56.7,197.4,1\n806,-1,476.3,101.6,65.5,180,1\n806,-1,380.6,246,73.8,174.1,1\n806,-1,1475.4,33.9,60.9,154.5,1\n806,-1,233.4,133.7,52.2,166.8,1\n806,-1,1001,602.8,72.9,236.1,1\n806,-1,750,72.4,58.1,161.4,1\n806,-1,346.2,180.3,52.4,175.5,1\n806,-1,1072.9,575.5,78.2,251,1\n806,-1,1437.6,52.6,50.4,160.2,1\n806,-1,421.9,102.4,58.5,168.2,0.999\n806,-1,441.5,1,43.6,83,0.999\n806,-1,251.4,3.5,58.8,125.4,0.847\n856,-1,1220.9,29.3,63.1,118.9,1\n856,-1,687.4,206.4,78.8,112.8,1\n856,-1,796.6,139.6,75.7,174.7,1\n856,-1,1672.6,32.8,53.1,160.2,1\n856,-1,487.6,1,50.8,115.8,1\n856,-1,269.4,609.9,82.7,245.1,1\n856,-1,1075.2,1,59.9,119.8,1\n856,-1,1575.8,590.5,101.5,234.5,1\n856,-1,1721,454.2,78.7,211.7,1\n856,-1,559.3,116.1,59.5,175.1,1\n856,-1,1412,25.7,52.3,154.1,1\n856,-1,1471.7,64.4,59.5,158.4,1\n856,-1,344.2,295.2,76.5,183.3,1\n856,-1,752.9,71.3,54.9,163.6,1\n856,-1,433.3,284.4,55,204,1\n856,-1,298.1,161.3,72.8,195.6,1\n856,-1,254.4,1,54.6,121,1\n856,-1,999.6,499,79.9,231.9,1\n856,-1,239.7,132.6,54.7,165.6,1\n856,-1,473.5,147,60.9,187,1\n856,-1,923,512.7,70.3,233.8,1\n856,-1,416.1,144.2,61.6,173,1\n856,-1,1567.4,14.9,49.1,138.5,0.203\n22,-1,687.6,206.3,78.7,113.2,1\n22,-1,1487.1,69.6,55.3,148.1,1\n22,-1,1206.8,32,70.7,118.6,1\n22,-1,492.9,152.6,95.9,189.6,1\n22,-1,704.7,1.4,56.3,155.9,1\n22,-1,1361.5,567.2,105,244.9,1\n22,-1,1009.6,199.4,74.5,184.6,1\n22,-1,1724.2,455.7,76.3,211.5,1\n22,-1,382,384.3,83.7,242.4,1\n22,-1,794.9,149.8,62.7,174.9,1\n22,-1,101.8,547,85.8,252,1\n22,-1,215.9,131.7,49,160.9,1\n22,-1,355.7,102.9,54.3,181.1,1\n22,-1,200.1,380.5,67.5,198.5,1\n22,-1,1817.7,227.8,65.1,189.8,1\n22,-1,1608.4,242.4,59.7,189.3,1\n22,-1,284.7,124.1,55.3,170.8,1\n22,-1,415.7,79.4,56,164.4,1\n22,-1,457.5,61.1,51.9,169.2,1\n22,-1,876,140.8,58.8,179.5,1\n22,-1,1.8,844.4,49.5,227.9,1\n22,-1,1380.3,189.7,53,175.9,0.999\n22,-1,917.8,148.4,50.8,161.5,0.998\n17,-1,687.9,206.2,78.3,113.5,1\n17,-1,498.5,151.2,102.7,191.8,1\n17,-1,1486.8,69.8,55.5,148.3,1\n17,-1,704.1,1.3,56.8,158.4,1\n17,-1,1725.7,457.4,75.6,207.9,1\n17,-1,1361.6,567.1,104.6,244.1,1\n17,-1,1204.9,34.1,71.7,119.4,1\n17,-1,794.3,149.7,62.3,173.9,1\n17,-1,380.9,388.9,85.2,240.4,1\n17,-1,355.4,104.8,54.2,178.7,1\n17,-1,102.1,547.7,84.7,250.7,1\n17,-1,1029.1,205.5,74.3,176.3,1\n17,-1,1617.3,246.9,59.9,184.8,1\n17,-1,217.4,124.2,47.7,168.9,1\n17,-1,879.1,133.9,61.7,181.8,1\n17,-1,284.6,124.3,55.2,170.3,1\n17,-1,206.8,381.7,66,196.1,1\n17,-1,417.4,84.2,55.3,166.9,1\n17,-1,1811.8,227.5,63.9,184.2,1\n17,-1,1430.8,238.9,51,170.5,1\n17,-1,460.5,65.2,49.4,174.6,1\n17,-1,1393.6,189.8,50.5,177.5,0.999\n17,-1,1,841.4,45.4,239.6,0.567\n17,-1,244.9,367.8,55.5,198.7,0.45\n743,-1,1220.9,30.1,62.9,119,1\n743,-1,686.5,205.6,79.9,114.4,1\n743,-1,256,183.4,62.9,200.5,1\n743,-1,1485.6,12.1,59.6,141.4,1\n743,-1,1464.1,105,54.4,158.6,1\n743,-1,551.2,115.8,60,175.9,1\n743,-1,779.7,136.9,57.7,175.4,1\n743,-1,298.2,436.4,74.8,221.1,1\n743,-1,1575.1,589.3,100.1,235.1,1\n743,-1,1714.3,455.6,92,208.9,1\n743,-1,1600.4,102.7,57.2,177.9,1\n743,-1,402.2,193.4,71,170.5,1\n743,-1,331.2,199.5,56.8,174.1,1\n743,-1,471.2,176.2,50.6,185.8,1\n743,-1,438.5,52.9,57.8,167.2,1\n743,-1,451.6,558.2,85,253.1,1\n743,-1,1124.6,725.4,82.1,254.7,1\n743,-1,1198.9,706.7,88.2,257.9,1\n743,-1,750.1,82.5,50.9,149.8,1\n743,-1,358.5,111.4,50,172.6,0.999\n743,-1,291.6,127.3,47.7,165.9,0.991\n743,-1,258.4,2.4,47.8,118.5,0.881\n743,-1,391.3,52.1,49.1,172.5,0.338\n743,-1,237.1,152.4,50,153.8,0.236\n526,-1,1221.5,30.2,62,119.6,1\n526,-1,1486.3,1,58.9,142,1\n526,-1,687.1,206.1,77.9,114.4,1\n526,-1,1718.8,459.3,80.5,209.1,1\n526,-1,994.8,1.8,54.8,117,1\n526,-1,1670.8,16,52.8,162.1,1\n526,-1,389.6,193.8,60.8,188.4,1\n526,-1,165.6,321.4,66.8,192.4,1\n526,-1,288,124.3,54.1,172.9,1\n526,-1,784.3,143.7,54.9,177.5,1\n526,-1,465.2,119.6,63.3,188.6,1\n526,-1,928.9,1.6,56.3,112.4,1\n526,-1,883.6,2.2,51.4,113.8,1\n526,-1,1607.2,3.9,56.8,171.3,1\n526,-1,216.9,135.6,62.7,160.7,1\n526,-1,821.3,601.9,74.1,259.8,1\n526,-1,1576.4,592.1,64.8,247.4,1\n526,-1,1769.4,649.3,70.1,226.6,1\n526,-1,517.4,99.5,58.6,182.3,1\n526,-1,449.6,1.8,72.7,167,1\n526,-1,956.4,722.5,120.2,251.9,1\n526,-1,195,792.5,93.6,271.8,1\n526,-1,1704.1,302.3,79.7,218.2,1\n526,-1,1765.2,211.8,65.5,172.7,1\n526,-1,267.9,821.4,80.5,259.6,1\n526,-1,1596.1,287.7,60.1,201.1,0.999\n526,-1,401.2,32.4,47,163.1,0.999\n526,-1,746.6,87.3,59.9,171,0.999\n526,-1,1866.7,221.5,54.3,198.2,0.992\n526,-1,358.7,155.6,48.9,170.6,0.99\n526,-1,1047.7,942.7,69,138.3,0.137\n180,-1,1220.9,30.7,62.8,117.7,1\n180,-1,109.6,349.9,49.1,188.6,1\n180,-1,356.3,104.9,54.8,178.4,1\n180,-1,412.6,37.5,60.2,165.2,1\n180,-1,704.3,1,56,159.7,1\n180,-1,1489.3,69.8,54.7,147.5,1\n180,-1,929.3,121.7,77.4,174.2,1\n180,-1,1357.6,568.1,105.2,244.2,1\n180,-1,212.6,125.9,54.7,168.4,1\n180,-1,687.5,207.4,77.9,111.9,1\n180,-1,1719.6,456.5,79.2,212.5,1\n180,-1,411.8,654.5,90.3,248.4,1\n180,-1,289,127.6,54.1,167.8,1\n180,-1,420.5,228.5,77.9,221.9,1\n180,-1,540.6,144.4,67,176.2,1\n180,-1,527.4,295.9,61.3,205.2,1\n180,-1,1,617.9,109.4,234,1\n180,-1,234,568.8,63.8,211.9,1\n180,-1,868.4,175.6,73.4,193.8,1\n180,-1,1100.1,149.9,48,161.6,1\n180,-1,99.1,549.5,87.8,251.9,1\n180,-1,794.1,151.6,62,170.9,1\n180,-1,797.6,289.3,70.9,186.3,1\n180,-1,1207.3,154.6,58.9,185.7,1\n180,-1,745.4,271.3,70.2,202.7,1\n180,-1,1253.5,153.4,49.8,174.3,0.999\n180,-1,996.7,913.9,65.5,167.1,0.991\n290,-1,1221.5,31,62.3,120.5,1\n290,-1,686.8,207,78.6,113,1\n290,-1,1670.5,33.9,57.1,154.3,1\n290,-1,1719.7,458.4,79,210.4,1\n290,-1,939.5,75.9,61.9,178.3,1\n290,-1,353.2,111.1,55.1,177.6,1\n290,-1,795.8,149.4,60.5,173.8,1\n290,-1,1466.5,26.7,55.5,145.4,1\n290,-1,1089.8,92.9,53.4,162.6,1\n290,-1,287.2,129.5,54.5,174.7,1\n290,-1,456.7,140,72.4,200.8,1\n290,-1,108.5,352.2,51.4,187.3,1\n290,-1,232,585,85,245.6,1\n290,-1,402.9,21.4,56.2,164.6,1\n290,-1,385.2,443.3,83.7,219,1\n290,-1,1018.3,94.4,59.2,181.5,1\n290,-1,704.5,1.1,53.6,156.3,1\n290,-1,236.7,409.9,59.5,198.6,1\n290,-1,292.5,817.9,96.2,263.1,1\n290,-1,221.6,128,53.5,166,1\n290,-1,516,105.9,50.6,177.8,1\n290,-1,815.3,386.1,92.4,219.5,1\n290,-1,1452.9,585.7,94.2,243.4,1\n290,-1,542.5,429.2,68.6,213.1,1\n290,-1,747.8,104.5,46.2,166.1,1\n290,-1,463.5,415.5,65,232,1\n290,-1,885.1,401.9,83.1,198.5,1\n290,-1,830.5,103.7,60.2,163.2,1\n290,-1,939.7,920.7,81.8,160.3,0.986\n290,-1,789.9,356.8,71.5,196,0.053\n380,-1,1222,31.3,61,118.6,1\n380,-1,686.3,206.5,79.9,114.1,1\n380,-1,1634.6,17.3,66.3,168.9,1\n380,-1,1097.6,453.1,63.5,201.6,1\n380,-1,358.4,102.6,55.6,183.2,1\n380,-1,450.2,300.3,71.7,208.8,1\n380,-1,827.5,1,54.6,112.6,1\n380,-1,953.2,36.5,61.6,174.7,1\n380,-1,282.8,127.8,55.4,168.3,1\n380,-1,109,352.3,52.1,187,1\n380,-1,340.3,533.1,84.4,249.4,1\n380,-1,795.2,150.1,60.5,175,1\n380,-1,217.6,138.7,59,159.2,1\n380,-1,1598.5,633.7,78.6,245.5,1\n380,-1,1718.5,454.8,78,213.9,1\n380,-1,452.6,557.3,70.1,236,1\n380,-1,445.3,74.7,71.1,197.1,1\n380,-1,379.2,1,52,94.6,1\n380,-1,209.8,302.2,53.5,184.3,1\n380,-1,1435.6,1,52.8,91.3,1\n380,-1,1016.3,49.6,54.2,165.5,1\n380,-1,505,83.7,53.1,169,1\n380,-1,1793.6,446.9,68.6,202.3,1\n380,-1,1772.4,104.1,55.2,154.4,1\n380,-1,849.1,492.8,91,236,1\n380,-1,756.4,101.2,50.2,137.1,1\n380,-1,594.7,561.2,88.2,247.1,0.999\n380,-1,975.5,911.2,85.5,169.8,0.998\n380,-1,905.7,507.1,76.3,207.7,0.997\n380,-1,1795.2,77.4,67.8,159.4,0.627\n650,-1,687.4,206.6,78.9,113,1\n650,-1,1481.1,4.6,60.3,145.3,1\n650,-1,546.1,113.6,64.3,172.8,1\n650,-1,1220.5,32,63.4,119.6,1\n650,-1,802.1,146.1,64.5,171.3,1\n650,-1,456.2,536.6,89,242.9,1\n650,-1,1711.4,454.5,96.9,214.4,1\n650,-1,359.7,111.2,51.2,173.7,1\n650,-1,334.4,324.9,69.4,207.8,1\n650,-1,1574.5,588.1,98.5,239,1\n650,-1,411,1,58.8,151.1,1\n650,-1,1615.7,178.3,68.7,187.1,1\n650,-1,751.3,78.3,46.2,156.6,1\n650,-1,268.1,236.8,60,182.8,1\n650,-1,217.1,222,56.4,198.9,1\n650,-1,468.9,103.5,47.4,172.2,1\n650,-1,424.7,116.3,55.2,160.2,1\n650,-1,288.5,125,50.5,172.3,1\n650,-1,1177.5,4.4,73.1,118.9,0.996\n650,-1,1465.2,931.3,78.3,149.7,0.859\n650,-1,1381.4,948.5,85.9,132.5,0.552\n94,-1,1222.3,30.6,61.5,116.8,1\n94,-1,704.7,1,55.8,158.6,1\n94,-1,400.1,853,102.1,228,1\n94,-1,1488.5,70,54,147,1\n94,-1,356.8,109.3,54.3,174.8,1\n94,-1,421.7,309.7,79.2,229.2,1\n94,-1,1193.1,152.6,69.2,175.9,1\n94,-1,965.3,197.9,71.3,186.4,1\n94,-1,1358.5,565.9,105.8,245.6,1\n94,-1,1723,455.7,76.2,212.1,1\n94,-1,720.5,192.3,66.5,170.8,1\n94,-1,101.8,545.7,87.3,255.7,1\n94,-1,115.9,349.4,48.5,195.2,1\n94,-1,294.5,126.7,53.4,170.1,1\n94,-1,210.1,130.1,50.1,165.9,1\n94,-1,502.7,217.5,74.3,194.5,1\n94,-1,28.7,700.1,64.5,227.3,1\n94,-1,1294.5,202.9,42.6,163.8,1\n94,-1,538.1,63.5,48.9,168,1\n94,-1,1459.3,190.7,58.1,177.5,1\n94,-1,438.6,10.3,52,158,1\n94,-1,376.1,18,50.9,158.2,1\n94,-1,865.5,207.4,55.7,168.3,1\n94,-1,1408.7,193.7,59.7,195.8,1\n94,-1,824.1,188,58.7,186.6,1\n94,-1,256,91.6,61.1,183.7,0.999\n94,-1,482.8,133.9,55.1,157.5,0.999\n94,-1,484.2,36.7,56.5,161.7,0.986\n94,-1,798.1,155.5,50.9,165.8,0.063\n152,-1,1221.2,31.1,62.7,117,1\n152,-1,1488.1,68.7,55.7,150.6,1\n152,-1,356.5,101.7,54.3,182.3,1\n152,-1,704.7,1,55.8,159.1,1\n152,-1,1721.7,456.1,77.2,212.4,1\n152,-1,1160.4,161.9,50.6,164.3,1\n152,-1,109.4,351.1,49.2,185.6,1\n152,-1,1278.7,178.6,63,170,1\n152,-1,288.2,122.6,55.1,172.6,1\n152,-1,421.3,254.5,77.7,221.9,1\n152,-1,1359.5,567.1,104.3,244.9,1\n152,-1,216,125.6,54,167.2,1\n152,-1,687,206.4,79.5,114.5,1\n152,-1,539.2,65.2,50.3,163.6,1\n152,-1,404.2,711.6,94.1,263.1,1\n152,-1,1022.1,132.2,56.1,174.4,1\n152,-1,100.8,543.4,87.7,258.7,1\n152,-1,591.9,259.5,61,196.7,1\n152,-1,457.2,34.2,50.3,164,1\n152,-1,531.8,274.4,59.4,201.1,1\n152,-1,188.3,613.1,66.3,219.6,1\n152,-1,805.2,259.5,64.4,181.7,1\n152,-1,756,248.6,71.8,190.4,1\n152,-1,859.1,202.5,71.5,198,1\n152,-1,488.4,200.7,60.1,168.7,1\n152,-1,384.7,1.9,46.4,123.3,1\n152,-1,1045.9,911.9,70.6,169.1,0.98\n152,-1,792.9,143.7,64.9,190.8,0.923\n536,-1,1221.5,30.3,62.3,119.3,1\n536,-1,1486.3,1,58.8,141.8,1\n536,-1,687.5,206,77.6,114.9,1\n536,-1,780.3,144.3,60.3,175.2,1\n536,-1,387.6,203.5,62.7,189,1\n536,-1,288.2,125.3,54.9,171,1\n536,-1,992.6,1.1,54.7,109.3,1\n536,-1,172.2,311.3,67.3,192.6,1\n536,-1,1690.1,300.1,73.6,199.3,1\n536,-1,1716.7,457.4,82.9,209.2,1\n536,-1,1660.8,6.1,53.3,164.3,1\n536,-1,461.5,113.5,64.9,182.7,1\n536,-1,1771.6,223.6,72.5,174.4,1\n536,-1,880.3,1.8,52.8,113.8,1\n536,-1,519,102.6,62.4,179.2,1\n536,-1,803.3,602.8,78,253.4,1\n536,-1,1601.1,1,55.9,166.6,1\n536,-1,1586.1,590.6,68.7,243.8,1\n536,-1,217.6,137.1,62.4,161.6,1\n536,-1,263.1,837.6,80,243.4,1\n536,-1,928.3,1,57,109.6,1\n536,-1,405.1,43.7,49.8,158.3,1\n536,-1,969.8,747.2,125.4,257.4,1\n536,-1,449.4,1,68.9,166.7,0.999\n536,-1,193.1,801.6,98.9,278.6,0.998\n536,-1,1873.7,226.1,47.3,207.8,0.348\n536,-1,365.6,126.6,46.4,160.7,0.305\n392,-1,1222.3,30.8,60.6,118.5,1\n392,-1,685.8,206.3,80.1,113.1,1\n392,-1,1638.3,29.4,70.7,173.8,1\n392,-1,1774.7,112.6,67,163.3,1\n392,-1,359.2,105.5,54.2,180.2,1\n392,-1,1129.6,472.5,77.1,202.5,1\n392,-1,366.1,3.1,62.6,99.3,1\n392,-1,446.8,282.7,83.1,211.1,1\n392,-1,828.9,1,55.1,120.1,1\n392,-1,321.3,556.3,95.4,250.3,1\n392,-1,437.2,575,72.1,235.3,1\n392,-1,108.9,349.1,52.6,190.8,1\n392,-1,950.1,25.7,63.3,173.2,1\n392,-1,794.6,152,60,171.8,1\n392,-1,218.7,141.9,61.2,155.4,1\n392,-1,459.9,73.5,68.5,192.3,1\n392,-1,282.6,127.6,55.5,167,1\n392,-1,206.9,287.8,54,183.7,1\n392,-1,1593.9,626,89.2,252.3,1\n392,-1,1011.3,41.4,56,162.8,1\n392,-1,919.2,525.1,79.1,213.8,1\n392,-1,1719.9,455.7,79,214.5,1\n392,-1,849.6,508.6,87,232.4,1\n392,-1,1770.9,432.6,74.8,208.5,0.998\n392,-1,709.3,1,54.6,147.6,0.995\n392,-1,978.3,905.4,89.7,175.6,0.993\n392,-1,541.7,65.4,51.4,168.7,0.989\n392,-1,434.1,82.2,44.9,172.1,0.903\n392,-1,713.9,92.4,52,169.8,0.597\n392,-1,758.4,108.1,41,135.5,0.329\n392,-1,925,10.7,46.6,113.3,0.064\n634,-1,1221,30.4,61.9,118.3,1\n634,-1,687,205.8,79.7,112.7,1\n634,-1,1481.4,7.2,59.8,142.7,1\n634,-1,800.7,145.7,66.6,170.1,1\n634,-1,1711.2,453.9,96.3,210.3,1\n634,-1,342,303.4,67.2,206.6,1\n634,-1,547,113,62.5,173.1,1\n634,-1,1574.4,588.5,96.7,235.9,1\n634,-1,358.8,109.8,51.3,175.2,1\n634,-1,499.2,539,109.3,243.3,1\n634,-1,198.5,228,66.6,206.7,1\n634,-1,1626.2,194.9,70.9,189,1\n634,-1,255.7,245.9,60.9,186.3,1\n634,-1,416.3,106.5,53,159.7,1\n634,-1,287,122.8,52.3,170.8,1\n634,-1,751.9,84.3,44.8,149.4,1\n634,-1,351.4,1,56.5,126.9,1\n634,-1,420.7,1,57.3,132.9,1\n634,-1,458.8,89.9,49.2,174.6,0.999\n634,-1,498.6,73.9,45.8,149.6,0.999\n634,-1,234.7,135.4,47.7,160.8,0.992\n634,-1,1580.4,2,52.5,82.6,0.571\n634,-1,1125.3,937.4,89.9,143.6,0.189\n775,-1,1221.5,29.3,62.3,118.7,1\n775,-1,687.5,204.8,79.4,114.8,1\n775,-1,546.4,116,62,175.2,1\n775,-1,783.4,133.8,60.5,173.5,1\n775,-1,1723.2,453.1,76.1,213.3,1\n775,-1,1575.5,589.1,100.3,235.5,1\n775,-1,1490.7,17.8,59.9,149,1\n775,-1,293.3,479,77.5,229.4,1\n775,-1,542.7,573.2,90.2,251,1\n775,-1,1446.2,78,54.1,170,1\n775,-1,450.6,205.5,54.3,188.4,1\n775,-1,1572.4,74.6,60,175.8,1\n775,-1,389.8,213.9,72.5,175.4,1\n775,-1,233.3,135,51.8,164,1\n775,-1,277.4,173.4,56.2,195,1\n775,-1,749.9,75.2,53.3,156.6,1\n775,-1,329.1,189.2,56.8,176.9,1\n775,-1,1054.7,657.3,79.8,250.2,1\n775,-1,467.6,78.5,61.9,169.6,1\n775,-1,1128.3,634.7,80.1,256.6,1\n775,-1,255.5,1.4,51.3,118.6,1\n775,-1,413,78.8,59,167,0.999\n775,-1,356.4,109.4,53.1,176.9,0.997\n35,-1,686.9,205.8,79.1,113.7,1\n35,-1,1208.2,30.8,74.6,120.1,1\n35,-1,388.6,370.5,89.3,237.7,1\n35,-1,1362.6,566.9,105,245.1,1\n35,-1,1486,69.9,56.5,149.5,1\n35,-1,704.2,1.8,55.9,157.4,1\n35,-1,1722.4,456.1,76.4,211.5,1\n35,-1,185.8,370,68.6,197,1\n35,-1,215.2,126.8,48.3,165.4,1\n35,-1,483.8,162.7,89.4,197.5,1\n35,-1,795.1,150.3,61.3,173.4,1\n35,-1,102.8,547.9,84.8,250.8,1\n35,-1,952.2,197.6,77.6,179.7,1\n35,-1,356.1,107.8,54.8,176.4,1\n35,-1,449,56.8,52.5,171.1,1\n35,-1,283.7,123.1,53.8,173.5,1\n35,-1,1010.8,159.5,77.2,177.9,1\n35,-1,1839.4,251.1,68.3,191.6,1\n35,-1,867,140.8,56.3,184.5,1\n35,-1,2.1,811.2,62,246.4,1\n35,-1,1357.1,188.3,50.7,165.3,1\n35,-1,1586.7,233.6,53.5,171.8,0.996\n35,-1,912.8,158.9,43.3,168.7,0.993\n35,-1,406.7,75.9,43.4,162.2,0.97\n361,-1,1221.9,31.4,60.8,118.2,1\n361,-1,687,206.3,79.1,113.5,1\n361,-1,1433.6,2.9,51.5,104.7,1\n361,-1,1619.7,1,71.1,161.1,1\n361,-1,1026.8,58.1,55,169,1\n361,-1,208.1,142.1,58.4,159.5,1\n361,-1,1844.6,62.7,54.6,164.8,1\n361,-1,428.4,327.7,84.2,213.6,1\n361,-1,1755.1,92.2,61.6,159.2,1\n361,-1,109.5,351.1,52.5,188.3,1\n361,-1,795.9,149.9,60.7,172.6,1\n361,-1,287.1,130.9,54.3,170.8,1\n361,-1,1035.1,432.6,67.3,196.8,1\n361,-1,1719.2,456,79.2,212.9,1\n361,-1,442.7,85.4,73,203,1\n361,-1,501.1,572.8,109,248.2,1\n361,-1,1817.4,470.6,68.5,206.2,1\n361,-1,511.6,92.2,47,164.8,1\n361,-1,364,110.6,54.5,175.2,1\n361,-1,958.6,53,62.6,173.4,1\n361,-1,837,1.2,51.9,104.5,1\n361,-1,220.1,319.9,55.7,186.5,1\n361,-1,378.7,511.1,84.4,239.8,1\n361,-1,1570.5,625.3,82.8,249.9,1\n361,-1,908.4,482.6,82.7,210.9,1\n361,-1,841.3,473,88,224.8,1\n361,-1,925.1,4,61.6,156,0.999\n361,-1,765.2,94.5,41,145.7,0.999\n361,-1,383,2,39.4,84.5,0.972\n361,-1,475.7,525.7,72.5,242.2,0.972\n361,-1,955.7,923.2,81.2,157.8,0.888\n361,-1,492.7,929.4,94.9,151.6,0.753\n1049,-1,1222.2,30.2,61.1,118.7,1\n1049,-1,687.1,206.5,79.5,114.7,1\n1049,-1,794.2,141.6,71.8,172.5,1\n1049,-1,476.3,325.2,75.1,197.2,1\n1049,-1,287.9,126,54.1,172.6,1\n1049,-1,1720.5,456.3,79,214.1,1\n1049,-1,356.7,337.3,75.1,204.8,1\n1049,-1,276.7,544.2,90.8,211.6,1\n1049,-1,934.4,229.7,65.9,195.1,1\n1049,-1,229.1,139.5,54.5,161.3,1\n1049,-1,851.5,236.8,67.2,192.7,1\n1049,-1,1648.6,673.4,94.6,239,1\n1049,-1,374,520.9,68.3,238.5,1\n1049,-1,1315.4,203.1,54.8,162.4,1\n1049,-1,751.4,75.6,53.8,161.8,1\n1049,-1,373.3,98.9,59.4,179.6,1\n1049,-1,1725.1,221.9,56.8,173.4,1\n1049,-1,1115.8,547.7,85,241.9,1\n1049,-1,288.5,335.3,72.7,207.7,1\n1049,-1,308,2.5,39.5,129.2,1\n1049,-1,1474.8,221.6,70.6,164.8,1\n1049,-1,512.7,173.2,75.7,190,1\n1049,-1,472.8,169.3,55.4,173.4,1\n1049,-1,1572.8,590.2,101.6,242.5,1\n1049,-1,583.9,536.3,63.6,253.8,1\n1049,-1,432.8,66.8,63.4,176.7,0.999\n1049,-1,1865.9,262.9,55.1,202.5,0.989\n1049,-1,875.8,928.1,69.9,152.9,0.06\n931,-1,1221.2,30,62,119.4,1\n931,-1,686.5,206.2,80.2,113,1\n931,-1,793.3,139.1,76.1,173.8,1\n931,-1,450.8,212.1,69.9,191.6,1\n931,-1,1127.9,49.6,58.7,169.3,1\n931,-1,1486.1,1,61.9,124.3,1\n931,-1,1576.6,592.1,101.4,236.2,1\n931,-1,1476.1,120.8,61.3,158,1\n931,-1,1720.5,455.3,78.2,211.5,1\n931,-1,556.6,116.6,57.8,172.2,1\n931,-1,1425.7,1.8,47.4,125.8,1\n931,-1,750.1,70.6,56.9,162.3,1\n931,-1,1271.5,810.2,96,270.8,1\n931,-1,862.8,403.1,62.5,210.3,1\n931,-1,1620.2,77.6,56.3,167.1,1\n931,-1,945.2,384.2,78.4,224,1\n931,-1,315.3,730.5,86.2,261.4,1\n931,-1,239.1,133.3,55.5,167.5,1\n931,-1,300.8,161.3,68.9,198.7,1\n931,-1,473,23.7,54.8,153.3,1\n931,-1,329.7,375.4,79.5,202.2,1\n931,-1,400.7,371.3,65.2,208.3,1\n931,-1,1734.3,114.7,54.2,174.8,1\n931,-1,1747.5,675.3,93.6,247.1,1\n931,-1,364.3,215,65.6,185.8,1\n931,-1,253.4,1,54.9,120.8,1\n931,-1,427.2,66.2,62.2,182.2,1\n931,-1,315.2,2.4,44.9,127.1,0.897\n616,-1,1221,30.3,62.8,120,1\n616,-1,687.3,205.9,78.4,113.4,1\n616,-1,1480.1,4.3,60.3,144.1,1\n616,-1,1631.6,208.7,75.4,194.2,1\n616,-1,358.2,288.9,65.8,199,1\n616,-1,800.8,145.4,67.7,170.2,1\n616,-1,1710.8,456.5,92,209.8,1\n616,-1,358.2,115.7,52.3,173.2,1\n616,-1,1575.6,589,95.3,235.9,1\n616,-1,575.8,548.9,84.6,236.2,1\n616,-1,174.1,240.1,67.5,204.3,1\n616,-1,245,257.1,60.3,183.8,1\n616,-1,556.8,113.1,53.4,174.9,1\n616,-1,288,128.2,51.3,169.6,1\n616,-1,1605.7,1.3,52.6,98.5,1\n616,-1,224.9,136.3,53.4,161.4,1\n616,-1,753.9,82,43.4,152.9,1\n616,-1,495.3,92,46.6,156,1\n616,-1,443.5,79.7,48.4,167.5,1\n616,-1,1103.9,899.1,111,181.9,0.999\n616,-1,400.8,93,52.5,166.2,0.998\n616,-1,354.1,2.1,51.6,115.9,0.997\n316,-1,1221.4,31.2,61.5,119.2,1\n316,-1,686.7,207.2,79.8,113.5,1\n316,-1,317.8,582.4,108,246.7,1\n316,-1,1456.5,4.9,55.9,146.1,1\n316,-1,1702.4,49.2,58.9,159.5,1\n316,-1,108.9,349.2,51.5,191.8,1\n316,-1,1720.3,455.3,78.6,215,1\n316,-1,931.4,49.3,63.4,173.7,1\n316,-1,418.8,42,56.6,170,1\n316,-1,1501.7,599.4,90.4,247.6,1\n316,-1,798,147.1,57.1,177.7,1\n316,-1,357.4,108.7,57.8,181,1\n316,-1,452.8,118.9,73.9,201.1,1\n316,-1,889.6,436.2,71.3,199.2,1\n316,-1,998.5,78,61.1,178.8,1\n316,-1,1054.1,77.3,55.7,168,1\n316,-1,705.7,3.7,52.7,150.9,1\n316,-1,434.8,441.8,76.3,233.3,1\n316,-1,281.3,128,54.3,177.7,1\n316,-1,237.1,375,58.9,191.3,1\n316,-1,526.3,471.2,64.4,218,1\n316,-1,214.7,130.1,55.5,170.3,1\n316,-1,828.3,427.4,76.8,208.8,1\n316,-1,348.1,886.3,96.1,194.7,0.999\n316,-1,730.9,94.7,44.5,181.2,0.999\n316,-1,511.6,101.4,42.6,170.5,0.997\n316,-1,926.7,909.5,79.8,171.5,0.995\n316,-1,1566.2,4.1,60.5,109,0.089\n296,-1,1221.1,32.2,61.9,118,1\n296,-1,1676.8,43.1,57.7,154.2,1\n296,-1,686.2,206.7,80.1,113.4,1\n296,-1,937.1,64.8,65,177,1\n296,-1,1463.7,21,53.4,148.4,1\n296,-1,241.3,577.9,100.8,254.8,1\n296,-1,236.5,400,60.8,191.4,1\n296,-1,1720.1,458.6,79.3,210.2,1\n296,-1,795.5,146.4,61.1,177.8,1\n296,-1,704,1,55.2,156.6,1\n296,-1,353.9,109.5,54.4,177.7,1\n296,-1,406.8,24.5,55.6,168.5,1\n296,-1,452.4,132.3,76.1,203.2,1\n296,-1,109.1,351,51.2,188.6,1\n296,-1,1010.7,90.4,59.2,181.4,1\n296,-1,283.7,130,53.8,170.9,1\n296,-1,383.5,433.4,83.8,226.3,1\n296,-1,1081.8,87.8,52.6,165.3,1\n296,-1,219,130.5,58.4,166.5,1\n296,-1,537.5,436,67.8,219.2,1\n296,-1,816.2,386.9,94,225.4,1\n296,-1,1464.1,589.8,92.9,245.2,1\n296,-1,302.4,838.3,95.1,242.7,1\n296,-1,886.1,406.8,76.5,200.2,1\n296,-1,513.1,105.7,48.7,175.1,1\n296,-1,462.1,420.8,64.1,228.6,1\n296,-1,744.2,102.3,45.1,174.1,0.999\n296,-1,939.2,916.1,70.9,164.9,0.985\n296,-1,830.5,110.7,49.7,150.8,0.908\n955,-1,686.4,206.2,80.1,112.9,1\n955,-1,793.2,140.7,73.9,172,1\n955,-1,1221.4,30.2,61.5,119.1,1\n955,-1,1471,137.8,65.9,163.8,1\n955,-1,1477.5,1,55.7,109.5,1\n955,-1,1641.3,110,54.3,167.4,1\n955,-1,927.2,344.6,75.6,222.4,1\n955,-1,1575.4,588.6,102.5,234.6,1\n955,-1,750.7,72.1,56.3,161.7,1\n955,-1,1720.8,454.3,78.1,212.9,1\n955,-1,852.6,362,67.7,210.7,1\n955,-1,1149.1,80.7,58.1,167.8,1\n955,-1,320.4,771.6,96.8,270.5,1\n955,-1,1411.7,2.4,46.3,110.6,1\n955,-1,551.7,115.4,55.8,172.7,1\n955,-1,1760.9,142.5,65.3,177.4,1\n955,-1,391.8,394.6,67.1,218.3,1\n955,-1,423.7,235.7,68.5,193.2,1\n955,-1,320.1,410.4,79.7,195.7,1\n955,-1,231.7,136.3,56.8,166.4,1\n955,-1,436.9,75.2,55.7,176.4,1\n955,-1,1235.4,746.8,94.4,272.5,1\n955,-1,340.1,237.6,64.1,185.9,1\n955,-1,481.7,223.6,61.6,180.8,1\n955,-1,1742.3,677.2,94,250.3,1\n955,-1,480.5,44.6,54.8,159.2,1\n955,-1,243.4,3,54.2,124,1\n955,-1,288.5,128,53.1,168.7,0.999\n955,-1,322.1,170.7,50.5,195,0.902\n955,-1,313.3,1,45.1,134.5,0.478\n458,-1,1221.7,31.1,62.3,118.6,1\n458,-1,445.7,198.1,71.6,197.6,1\n458,-1,936.2,1,58.8,152,1\n458,-1,686.9,205.8,79.2,114.6,1\n458,-1,1009.2,5.2,53.3,154.8,1\n458,-1,358.6,104.6,55,183,1\n458,-1,1738.8,167.6,58.2,159.9,1\n458,-1,1706.9,458.4,93.4,207.9,1\n458,-1,870.3,1,55.9,137.3,1\n458,-1,1829.4,383.9,78.1,207.7,1\n458,-1,114.4,347.1,55.5,193.6,1\n458,-1,266.2,219.6,50.6,177.6,1\n458,-1,522.3,74.9,54.8,170.3,1\n458,-1,1545.3,610.2,76.4,245.7,1\n458,-1,802.4,151.7,47.1,172.1,1\n458,-1,1435.4,546.2,87.7,221.8,1\n458,-1,244.3,667.9,99.7,262.9,1\n458,-1,285.7,127.8,54.9,167.2,1\n458,-1,1658.5,362.2,63,191.2,1\n458,-1,341.6,697.6,73.3,248.5,1\n458,-1,218.9,138,59.2,159.5,1\n458,-1,799.9,582.4,89.3,247.5,1\n458,-1,895.1,607.5,108.4,238.3,1\n458,-1,1695.8,54.8,64,186.8,1\n458,-1,1506.7,1,56.1,109.7,1\n458,-1,754.2,95.5,52.5,145.4,1\n458,-1,976.9,621.1,88.9,227.5,0.999\n458,-1,417.3,1.6,45,150,0.999\n458,-1,1026.3,921.5,86.3,159.5,0.997\n458,-1,441.9,43.8,74.6,186.8,0.997\n458,-1,713.4,95,51.1,162.1,0.968\n458,-1,362.2,11.7,52.9,148.4,0.062\n1003,-1,1221.2,29.9,61.9,118.9,1\n1003,-1,686,206.1,80.4,113.2,1\n1003,-1,793.7,139.7,75.1,173.4,1\n1003,-1,1204.8,141.2,65.3,172.7,1\n1003,-1,503.7,272,65.5,191,1\n1003,-1,395.3,288.2,71.8,190.4,1\n1003,-1,1474.6,186.1,62.3,155.1,1\n1003,-1,231.6,136.1,55,167.9,1\n1003,-1,290.9,126.3,51.1,168,1\n1003,-1,1575.2,590.8,103.4,236.2,1\n1003,-1,1677.8,164.8,60.4,173.4,1\n1003,-1,1810.8,203.1,67.2,184.2,1\n1003,-1,1722.1,452.7,77.9,217.7,1\n1003,-1,926.9,281.5,67.9,210.2,1\n1003,-1,310.4,279.3,65.5,200.4,1\n1003,-1,540.5,120.2,60.4,171.4,1\n1003,-1,842.2,294.5,65.6,203.1,1\n1003,-1,300.5,473,87,207.8,1\n1003,-1,750.7,73.4,55.1,161.5,1\n1003,-1,1171.5,631.7,88.1,261.1,1\n1003,-1,1740.4,674.7,92.3,250.1,1\n1003,-1,381,459.5,68.7,221.6,1\n1003,-1,342.9,877.7,88.7,203.3,1\n1003,-1,596.5,550.5,104.7,246.5,1\n1003,-1,314.1,1.7,42.8,129.2,1\n1003,-1,437.9,65.1,61.6,174,1\n1003,-1,509.1,86.6,52.1,151.6,0.999\n1003,-1,402.5,171,70.5,182.7,0.998\n1003,-1,381.9,1,54.1,150.3,0.171\n578,-1,1221,30.7,62.4,119.1,1\n578,-1,686.5,205.6,79.7,113.7,1\n578,-1,1480.9,4.9,60.3,144.2,1\n578,-1,800.3,146.2,62.1,170.2,1\n578,-1,1649.1,1,55.3,134.9,1\n578,-1,377,243.1,67.7,200.2,1\n578,-1,1715.2,456.3,85.4,209.7,1\n578,-1,213,274.4,62.2,195.3,1\n578,-1,1576,588.8,92.6,234.4,1\n578,-1,554.8,112.8,51.7,172.5,1\n578,-1,289.2,124.1,51.7,170,1\n578,-1,1652.8,246.8,75.7,204,1\n578,-1,218.1,135,51.3,160.5,1\n578,-1,455.9,118.1,49.8,159.8,1\n578,-1,874.7,2,51.4,102.3,1\n578,-1,754.3,79,43.9,156.2,1\n578,-1,1838.4,257.7,71.2,180.1,1\n578,-1,155.5,252.5,61.6,212.1,1\n578,-1,358.1,109.4,53.1,175.1,1\n578,-1,710.8,576.8,84.1,252,1\n578,-1,1042.6,821.6,126.9,259.4,1\n578,-1,422.7,58.3,47.3,168.8,0.999\n578,-1,1006.7,938.3,74.2,142.7,0.696\n578,-1,1128,834.4,84.6,246.6,0.225\n578,-1,293.3,865.8,104.2,215.2,0.062\n594,-1,1221.9,30.5,61.1,119.1,1\n594,-1,687.5,206.1,78.5,113.6,1\n594,-1,1481.2,4.4,60.4,144.5,1\n594,-1,801,142.4,63.1,176.3,1\n594,-1,228.5,269.9,64.8,186.6,1\n594,-1,1635.5,1,54.5,117.5,1\n594,-1,366.8,259.9,68,199.2,1\n594,-1,562.3,112.1,49.3,174.7,1\n594,-1,360,110.1,53.3,170.7,1\n594,-1,1719.2,456.2,80.7,211.2,1\n594,-1,1654.6,233.3,75.7,200.2,1\n594,-1,287.7,126.5,51.9,170.1,1\n594,-1,164.7,249.8,58.8,203.6,1\n594,-1,1575.3,590.1,93.1,232.3,1\n594,-1,478.3,105.6,50.1,157.8,1\n594,-1,753.8,83.1,43.4,152.4,1\n594,-1,212.8,136.8,57.9,161.6,1\n594,-1,428.8,68.7,50.6,170.3,1\n594,-1,1072,852.6,121.5,228.4,1\n594,-1,1867.1,272.5,53.9,172.4,0.992\n594,-1,1155.6,861.7,90.9,219.3,0.695\n594,-1,309.1,909.2,98.9,171.8,0.537\n594,-1,871.7,4,54.4,87.4,0.325\n594,-1,995.1,928.1,70.9,152.9,0.065\n607,-1,1221.5,31.1,62.1,119.3,1\n607,-1,686.9,205.9,79.5,114,1\n607,-1,1481.1,3.1,60.4,145.5,1\n607,-1,801,146.8,65.6,171.1,1\n607,-1,364.2,276,66.1,199.7,1\n607,-1,1708.7,457.1,93.7,209.8,1\n607,-1,239.2,262.1,62.3,186,1\n607,-1,1615,3.4,54.4,105.5,1\n607,-1,171.2,244.8,59.8,201.2,1\n607,-1,1574.1,589.8,97.2,233.4,1\n607,-1,1644.3,225.9,69.1,195.5,1\n607,-1,561.2,111.8,50.8,177.8,1\n607,-1,491.7,91.5,45,157.8,1\n607,-1,286.8,125.6,51.8,174.3,1\n607,-1,219.9,134.7,55.7,162.5,1\n607,-1,435.9,74.4,47.9,166.9,1\n607,-1,752.9,83.8,43.1,154,1\n607,-1,359.9,110.3,49.9,179.9,1\n607,-1,1091.4,883.3,123,197.7,1\n607,-1,607.3,549.5,89.8,251.3,0.999\n607,-1,394.1,89,53.3,164.5,0.986\n975,-1,686.2,206.2,80.3,113,1\n975,-1,1221.4,30.9,61.4,119.5,1\n975,-1,794.4,140.5,72.7,171.5,1\n975,-1,1778.2,164.8,68.9,183.6,1\n975,-1,1655.3,126.1,58.8,172.8,1\n975,-1,1166.6,105.2,59.9,165.5,1\n975,-1,305.7,433.5,86.2,198.1,1\n975,-1,1470.8,152.8,67.5,167.3,1\n975,-1,411.1,255.1,72,197.6,1\n975,-1,492.9,243.8,68,189.4,1\n975,-1,846,335.4,66.3,207.4,1\n975,-1,1576.4,589.2,101.9,237.3,1\n975,-1,928.3,321,67.8,213.3,1\n975,-1,1720.6,455.2,79.1,211.9,1\n975,-1,333,809,94.7,272,1\n975,-1,230,138.6,56,161.4,1\n975,-1,751.6,71.1,55.6,164.5,1\n975,-1,328,249.9,61.1,204.6,1\n975,-1,550.6,119,52.1,169.2,1\n975,-1,391.1,424.6,68.6,220.6,1\n975,-1,1202.5,702,93.3,272.5,1\n975,-1,1454.3,1,59.9,101.6,1\n975,-1,1739.9,672.7,95.5,251.5,1\n975,-1,314.9,1,45.8,129.9,1\n975,-1,448.7,64.5,54.6,181.6,1\n975,-1,1395.1,1.9,45.5,96.2,1\n975,-1,288.9,128.9,54.8,171.4,1\n975,-1,343.5,165.2,65.9,184.8,0.999\n975,-1,381.2,1,54.7,126.7,0.999\n975,-1,485.9,61.8,55.4,155.9,0.999\n857,-1,1221.3,29.3,62,118.8,1\n857,-1,687,206.1,79.6,113.3,1\n857,-1,797.6,139.7,75.6,175.1,1\n857,-1,1674.1,32,54,162.5,1\n857,-1,487.4,3.9,47.2,113.5,1\n857,-1,269.7,609.8,84.1,247.2,1\n857,-1,1472.2,66.6,60.2,156.9,1\n857,-1,1574.6,589.8,103.8,235.1,1\n857,-1,1721.6,453.8,78.3,212.2,1\n857,-1,343.4,296.4,77.2,184,1\n857,-1,1412.7,24.3,52.5,155.6,1\n857,-1,432.7,286.3,56.2,203.8,1\n857,-1,560,117.2,58.3,173.1,1\n857,-1,1076.4,1,58.7,120.7,1\n857,-1,752.9,70,55,165.1,1\n857,-1,297.4,161.7,73.7,195.6,1\n857,-1,254.3,1.2,54.4,121.6,1\n857,-1,239.9,131.6,54.8,165.6,1\n857,-1,997.4,496.8,85.4,237.7,1\n857,-1,474.8,146.6,60.9,187.7,1\n857,-1,921.5,512.4,71.2,232.2,1\n857,-1,416.5,144.5,61.2,176.5,1\n857,-1,1568.4,11.6,49.8,142.8,0.96\n510,-1,1221.9,30.2,61.4,119.2,1\n510,-1,1493.4,1,60.1,132.7,1\n510,-1,686.4,206.9,80.9,114.4,1\n510,-1,997.4,1,55.3,125.4,1\n510,-1,398.7,181.9,63.1,185.3,1\n510,-1,152.1,331.5,68.5,187.9,1\n510,-1,1689.8,622.5,87,210.8,1\n510,-1,1676.5,24.7,55.9,171.7,1\n510,-1,333.3,172.1,50.8,169.6,1\n510,-1,1720.2,460.8,80.4,205.6,1\n510,-1,932.5,1,54.8,120.3,1\n510,-1,459,137.2,75.2,193.6,1\n510,-1,882.3,1.7,50.8,123.1,1\n510,-1,790.3,142.9,58.6,178.9,1\n510,-1,1559.4,599.7,72.3,237.5,1\n510,-1,1616.2,16,54.9,174.9,1\n510,-1,937,692,125.2,256,1\n510,-1,1712.8,330.8,97.6,192.2,1\n510,-1,826.9,609,73.2,255.5,1\n510,-1,1613.5,302.5,63.1,196.3,1\n510,-1,216.6,135.2,63,162,1\n510,-1,1842.7,190.1,73.7,200.9,1\n510,-1,203.1,761.7,93.9,277.2,1\n510,-1,288.1,120.5,53.7,174.8,1\n510,-1,287.1,793.5,76.4,261.2,1\n510,-1,514,91.8,57.3,175.4,1\n510,-1,725.2,95.7,69.7,162.1,1\n510,-1,449.6,5.6,73.7,182.8,1\n510,-1,1747.5,198.7,60.9,177.1,0.999\n510,-1,397.9,21.6,48.5,160.7,0.997\n510,-1,362.4,107.2,46.9,182.5,0.559\n510,-1,1035.9,719,69.8,237.1,0.476\n510,-1,1037.8,936,81.4,145,0.101\n61,-1,1221.3,30.4,61.3,116.6,1\n61,-1,686.3,206,80.1,114.1,1\n61,-1,1487.2,70.5,54.8,151.2,1\n61,-1,1362,566.8,105.4,245.5,1\n61,-1,403.2,343.7,83.5,235.1,1\n61,-1,489,184.7,82,197.7,1\n61,-1,704.8,1,55.5,158.4,1\n61,-1,1721.8,456.7,77.3,211.2,1\n61,-1,1001.3,183.9,70.1,174.2,1\n61,-1,355.6,109.7,53.8,174.9,1\n61,-1,103.5,546.3,84,253.4,1\n61,-1,149.3,362.8,54.8,188.9,1\n61,-1,832.4,196.1,87.5,179.9,1\n61,-1,212.4,128.9,49.1,164.6,1\n61,-1,1363.2,209.3,42.4,169.4,1\n61,-1,285.5,126.8,55.2,168.8,1\n61,-1,10.4,755.8,69.2,237.7,1\n61,-1,1299.2,179.8,60.1,170.3,1\n61,-1,1466.3,208.1,63.8,196,1\n61,-1,453.7,113.7,50.8,147.7,1\n61,-1,540.9,62.4,44.5,165.5,1\n61,-1,385.1,38.3,52.4,168.5,1\n61,-1,794.9,146.7,62.6,179.9,1\n61,-1,484.8,41.2,57.3,165,0.999\n61,-1,887.8,182.4,57.2,175.2,0.994\n61,-1,435.6,30.2,52.8,161.3,0.989\n61,-1,1874,289.5,47,195.4,0.85\n61,-1,261.5,102.5,48.7,172.2,0.686\n61,-1,238.2,108.9,42.8,167,0.114\n622,-1,686.8,205.8,79.9,113.2,1\n622,-1,1221.2,28.8,62.4,120.2,1\n622,-1,1480.9,5.4,61.1,144.5,1\n622,-1,1623.3,208.9,80.9,194.3,1\n622,-1,351.1,294.2,67.9,201.7,1\n622,-1,800,146.2,67.2,170.2,1\n622,-1,1712.3,457,90.3,208.8,1\n622,-1,1574.1,588.7,96.4,236.1,1\n622,-1,358.3,114.4,53,173.6,1\n622,-1,554.7,112.4,54.2,174.6,1\n622,-1,288.3,127.8,51.5,167.7,1\n622,-1,496.4,83,46.8,160.9,1\n622,-1,352.2,1,53.4,121.5,1\n622,-1,176.9,237.8,75.8,202.5,1\n622,-1,560.6,541.6,76.3,242.5,1\n622,-1,1595.7,1.3,53.5,95.1,1\n622,-1,246.6,249.1,61.6,189.1,1\n622,-1,753.2,82.6,43.4,150.9,1\n622,-1,230.8,134.2,51.1,164.8,1\n622,-1,406.8,100.4,52.9,159.7,0.998\n622,-1,446.8,83.1,46.5,167.2,0.998\n622,-1,1114.3,916.2,99.2,164.8,0.991\n662,-1,1220.7,29.5,61.8,119.6,1\n662,-1,686.8,205.9,80,114,1\n662,-1,1481.1,4.3,60.9,144,1\n662,-1,1711.2,456.2,96,208.2,1\n662,-1,801.5,144.6,64.4,172.7,1\n662,-1,323.1,333.4,70.1,208.4,1\n662,-1,360,113.7,49.8,169.3,1\n662,-1,554.3,111.1,57,176.6,1\n662,-1,1574.8,587.6,99,237.5,1\n662,-1,1137.9,2.2,73.1,114,1\n662,-1,438.3,528.2,74.7,245.6,1\n662,-1,1614.9,169.1,77.7,184.4,1\n662,-1,475.9,110.7,48,179.7,1\n662,-1,750.9,77.5,47.1,158.4,1\n662,-1,223.6,212,58.9,202.8,1\n662,-1,408,1,57.6,155.3,1\n662,-1,424.3,124.8,61.2,159.2,1\n662,-1,276.7,229.9,55.9,180.3,1\n662,-1,1420.3,902.6,101.7,178.4,1\n662,-1,288.4,123.1,52.4,170.8,0.999\n662,-1,353.1,2.3,53.5,146.4,0.999\n662,-1,1343.9,919.3,83.7,161.7,0.993\n662,-1,1502.6,163.6,47.4,175.3,0.741\n1,-1,687.5,206.1,78.8,114.1,1\n1,-1,705.1,1,55.6,156.8,1\n1,-1,1361.4,566.9,107,245.5,1\n1,-1,1487,70,55.6,148.5,1\n1,-1,512.3,141.1,96.1,185.1,1\n1,-1,1733.4,456.6,76.6,215.1,1\n1,-1,1033.2,130.8,80.4,186.7,1\n1,-1,1790.4,204.6,68.8,184,1\n1,-1,1636.2,263.5,65.7,180.6,1\n1,-1,796.5,147.5,61.1,175.5,1\n1,-1,286.7,124.7,55.1,170.5,1\n1,-1,102,545.7,86.7,255,1\n1,-1,1198,37.6,71.5,113.3,1\n1,-1,1103.9,209,63.6,185.9,1\n1,-1,372.2,408.6,84.4,244.8,1\n1,-1,1040.4,1,47.9,86.3,1\n1,-1,221.6,129.2,49,163.8,1\n1,-1,355.5,104.9,54.1,177.2,1\n1,-1,414.8,93,54.8,170.6,1\n1,-1,870.9,121.3,61.2,178,1\n1,-1,463.1,78.6,55.3,177.1,1\n1,-1,226.8,395.6,63.7,201.9,1\n1,-1,1448.7,252.1,55.4,170.6,1\n1,-1,265.3,363.5,64.2,229.4,0.998\n1,-1,908.6,125.1,48.9,167.6,0.918\n1,-1,997,2.9,49.2,79.2,0.575\n304,-1,1222,31.9,61,118,1\n304,-1,1458,15.3,52.9,147.2,1\n304,-1,268.2,577.9,101.5,257.9,1\n304,-1,686.9,206.5,79.1,113.8,1\n304,-1,1687.4,44.1,57.5,154,1\n304,-1,108.7,350,52.2,190.9,1\n304,-1,413.3,32.1,55.5,164.3,1\n304,-1,935.2,58.2,67.1,177.3,1\n304,-1,1718.8,457.7,80,211.8,1\n304,-1,354.3,109.3,56.1,178.4,1\n304,-1,236.4,390,60.5,197.4,1\n304,-1,795.9,148.8,60.5,176.8,1\n304,-1,454.4,127.1,71.8,204.1,1\n304,-1,705.5,1,53.1,156.8,1\n304,-1,1006.6,82.2,58.9,181.3,1\n304,-1,1478,595.5,91.4,246.2,1\n304,-1,533.1,450.7,68.1,207.6,1\n304,-1,281.4,130.9,54.6,171.9,1\n304,-1,217.5,129,54.6,167.1,1\n304,-1,386.3,415.1,82,227.3,1\n304,-1,1072,84.4,51.1,163,1\n304,-1,886.6,422.7,73.1,196.1,1\n304,-1,821.1,409.2,87.2,218.9,1\n304,-1,310.8,851.6,101.8,229.4,1\n304,-1,738.5,99,45.4,176,1\n304,-1,455.6,432.8,65,233.6,0.999\n304,-1,510,102.2,47.6,172.2,0.999\n304,-1,934.2,912.1,70.6,168.9,0.994\n308,-1,1221.1,31.3,61.6,118.2,1\n308,-1,686.5,206.4,79.4,114,1\n308,-1,1457.2,10.8,54.4,148,1\n308,-1,415.2,35.1,57.5,162.6,1\n308,-1,1692.5,46.4,57.5,158.5,1\n308,-1,1719.8,457,79.1,212.8,1\n308,-1,934.2,54.2,65.3,173.2,1\n308,-1,356.3,110.4,56.1,177.4,1\n308,-1,235.9,386.2,59.8,191.4,1\n308,-1,108.5,352.7,52,187,1\n308,-1,295.7,579.3,86.6,247.3,1\n308,-1,795.5,147.2,59.4,180.2,1\n308,-1,453.7,125.3,73.5,204.3,1\n308,-1,1485,597.5,89.4,244.3,1\n308,-1,278.4,129.3,55.5,175.5,1\n308,-1,705.3,1,53.2,158.2,1\n308,-1,531.5,453.2,67.5,213,1\n308,-1,217.1,128.2,54.9,166.8,1\n308,-1,1003.1,79.1,61.9,185.2,1\n308,-1,325.6,869.5,88,211.5,1\n308,-1,1061.1,80.8,55.1,167.6,1\n308,-1,887.1,427,72.5,192.5,1\n308,-1,829.5,415.4,83.2,214.3,1\n308,-1,734.9,99.4,46.3,168.4,1\n308,-1,448.6,436.9,67.2,230.9,0.999\n308,-1,390,403,86,232.7,0.999\n308,-1,511.3,101.5,45,173.9,0.999\n308,-1,369.7,790.2,96,267.4,0.998\n308,-1,930.2,909.9,76,171.1,0.994\n191,-1,1221.6,30.5,61.5,119.5,1\n191,-1,109.1,346.8,49.6,192.2,1\n191,-1,1489,68.4,55.8,150,1\n191,-1,212.1,127.1,55.1,167.6,1\n191,-1,686.8,207.6,78.5,111.1,1\n191,-1,1358.3,567.4,105,246.3,1\n191,-1,704.8,1,55.6,158.9,1\n191,-1,35,623.1,120.1,251.5,1\n191,-1,357.1,105.5,54,178.4,1\n191,-1,416.3,631.9,88.2,250.9,1\n191,-1,1720,457.7,78.6,210.6,1\n191,-1,289.2,127.7,55.5,170.1,1\n191,-1,398.3,39.4,65.3,166.6,1\n191,-1,873.7,169.6,80.5,190.7,1\n191,-1,1170.1,148,69.2,183.9,1\n191,-1,524.2,307.3,65.3,209,1\n191,-1,232.5,552.2,63,211.4,1\n191,-1,1069.1,142.1,53.3,161.5,1\n191,-1,421.2,219.8,75.3,217.8,1\n191,-1,800.8,297.6,69.5,185.3,1\n191,-1,534,139.4,59.7,158.5,1\n191,-1,795.5,150.2,61.8,174,1\n191,-1,1236.3,145.6,47.1,168.8,1\n191,-1,747.9,278.8,70.6,202.9,1\n191,-1,457.4,2.3,53.6,91.5,0.991\n191,-1,978.9,916.6,74.3,164.4,0.978\n352,-1,1221.9,30.7,61.6,119.5,1\n352,-1,687.2,207,78.4,112,1\n352,-1,1610.5,1,66,143.4,1\n352,-1,1744,81.6,58.2,153.7,1\n352,-1,1442.2,1,52.4,114.1,1\n352,-1,481.9,579.3,96.2,240.8,1\n352,-1,287.7,130.7,54.5,173.4,1\n352,-1,207.7,138.4,57.9,164.3,1\n352,-1,434.5,338.9,71.9,212,1\n352,-1,1033.4,61.6,54.6,167.3,1\n352,-1,446,88.2,70.1,205.4,1\n352,-1,1008.7,415.3,65.1,195.4,1\n352,-1,108.8,349.5,52.8,189.7,1\n352,-1,966.4,54.6,62.2,176.7,1\n352,-1,1720.3,455.9,78.3,214.8,1\n352,-1,1825.3,478.9,69.1,210.9,1\n352,-1,364.7,106.5,55.5,180.5,1\n352,-1,795.9,149.8,61.7,172.8,1\n352,-1,1554.9,617.9,93,247.9,1\n352,-1,226,333.2,56.8,189.1,1\n352,-1,389.6,494.8,86.3,236.7,1\n352,-1,843.5,1,49.2,99.3,1\n352,-1,518.9,94.3,37.8,167.7,1\n352,-1,901.1,471.9,76.1,209,1\n352,-1,844.6,456.1,82.2,227.4,1\n352,-1,924.3,16.3,62.1,159.8,1\n352,-1,765.1,94,43.5,155.7,0.999\n352,-1,1863,60,58,166.8,0.998\n352,-1,708.7,92.3,59.2,173.9,0.994\n352,-1,953.4,927.6,78.8,153.4,0.859\n244,-1,1220.7,30.6,63.7,119.2,1\n244,-1,686.4,207.2,79.8,112.2,1\n244,-1,796.9,151.2,59.1,174.4,1\n244,-1,1595.9,3.7,57.1,146.1,1\n244,-1,108.1,350.2,51.7,191.3,1\n244,-1,1482.1,58.6,54,153,1\n244,-1,1365,567.4,109.4,245.3,1\n244,-1,929.7,118.1,70.3,184.8,1\n244,-1,211.7,125.4,56.4,171.6,1\n244,-1,391.9,520.9,85,235.9,1\n244,-1,1159.8,116.2,53.3,164,1\n244,-1,1720.6,457.7,78.3,210.2,1\n244,-1,287.8,127.5,56.2,172.4,1\n244,-1,705.3,1,54,159.7,1\n244,-1,446.6,175.2,76.4,210.2,1\n244,-1,355.1,106.3,54.3,178.2,1\n244,-1,222.1,473.6,62.2,206.5,1\n244,-1,1082.3,119.4,58.2,181.3,1\n244,-1,493.6,358,72.8,224.6,1\n244,-1,197.8,721.8,87.3,252.6,1\n244,-1,847.6,344.1,80.3,193.5,1\n244,-1,516.9,117.9,52.8,182.6,1\n244,-1,114.4,559.9,86.8,251.4,1\n244,-1,786.3,334.3,83.7,205,1\n244,-1,588.9,368.3,63.1,198.7,0.999\n244,-1,930.6,897.8,72.2,183.2,0.994\n244,-1,772.4,106.7,47.8,165.7,0.593\n244,-1,159.1,661.3,63.9,193.1,0.213\n585,-1,1221.5,30.6,61.4,119.5,1\n585,-1,686.7,206,79.9,113.9,1\n585,-1,1480.9,4.3,60.7,144.7,1\n585,-1,801.5,145.4,63.3,173.4,1\n585,-1,375.6,256.4,65.7,197.5,1\n585,-1,1644.6,1,56.2,125.5,1\n585,-1,1649.1,245.8,80.9,199.7,1\n585,-1,559.7,112.6,51.2,174.7,1\n585,-1,874.1,3.1,49.9,99.3,1\n585,-1,220.6,277.1,63.2,188.4,1\n585,-1,1575.3,589.3,93.1,233.7,1\n585,-1,357.9,108.9,54.1,177.3,1\n585,-1,287.6,124.9,52.5,170.3,1\n585,-1,1719.6,453.5,81.3,214.5,1\n585,-1,215.4,134.8,51.8,160.5,1\n585,-1,463.8,116.2,50.4,159.1,1\n585,-1,754.3,80.1,43.6,154.9,1\n585,-1,159.8,254.8,59.4,207.8,1\n585,-1,1850.3,266,70.7,178.5,1\n585,-1,426.8,57.8,46.6,175.6,1\n585,-1,1052.4,840,126.7,241,0.999\n585,-1,1138.4,845.6,91.2,235.4,0.083\n585,-1,692.2,565.5,88.2,253.3,0.073\n282,-1,1221.4,31.5,62.5,119.2,1\n282,-1,1025.9,99,61.6,183.6,1\n282,-1,687.6,207.7,77.4,112.7,1\n282,-1,1654.1,27.4,57.2,156.2,1\n282,-1,287.4,128.9,56.2,174.1,1\n282,-1,399.3,20.7,56.5,163.8,1\n282,-1,353.8,110.9,53.2,174.3,1\n282,-1,454.5,145.3,76,207.5,1\n282,-1,1471.1,33.4,54.2,148.6,1\n282,-1,940.9,80.8,65.1,177.8,1\n282,-1,1720.2,458.4,78.4,210.4,1\n282,-1,108.3,351,51.3,189.8,1\n282,-1,796,149.6,60,172.6,1\n282,-1,210.2,579.6,82.9,249.8,1\n282,-1,704.1,1.3,54.8,158.4,1\n282,-1,391.5,462.5,83.2,223.1,1\n282,-1,223.8,130.9,52,162.7,1\n282,-1,1103.7,93.4,49.7,161.8,1\n282,-1,754.9,343.6,67.4,188.8,1\n282,-1,1437.5,578.3,96.6,245.4,1\n282,-1,232.6,417.5,58.6,195,1\n282,-1,553.9,419.8,65.6,213.3,1\n282,-1,279.9,799.5,93.1,278,1\n282,-1,750.5,104.7,47.9,166.7,1\n282,-1,883.2,394.1,77.7,197.5,1\n282,-1,514.6,108.6,52.1,179.7,1\n282,-1,845.8,112.5,46.4,153.7,1\n282,-1,466.7,401.9,67,225.6,1\n282,-1,810.3,376.8,93.6,210.3,1\n282,-1,944.5,920.5,86.5,160.5,0.885\n904,-1,1221.5,30,61.4,119.4,1\n904,-1,686.7,205.8,79.8,113.6,1\n904,-1,475.9,190.3,66.6,188.5,1\n904,-1,794.7,140.2,75.2,173,1\n904,-1,302.2,680.4,94.2,258.4,1\n904,-1,1431.6,1,49.9,147.1,1\n904,-1,1483.6,105,58.2,149.7,1\n904,-1,1722.8,453.7,76.1,213.9,1\n904,-1,1573.7,590.4,105.2,234.6,1\n904,-1,1596.9,53.5,53,163.7,1\n904,-1,558,115.6,57.7,173.3,1\n904,-1,1712.7,83.1,55.9,168.8,1\n904,-1,1110.5,23.3,58.7,159.2,1\n904,-1,330.8,353.1,82.6,183.5,1\n904,-1,302.4,162.9,68.7,197.1,1\n904,-1,387.6,190.5,58.8,179.2,1\n904,-1,753,73.6,54.5,159.6,1\n904,-1,470.4,3.3,50,150.8,1\n904,-1,971.6,417.7,67.8,227.6,1\n904,-1,874.5,437.2,67.8,225.2,1\n904,-1,418.3,338.1,57.1,207.6,1\n904,-1,1746.2,679.9,94.4,242.1,1\n904,-1,254.1,1.2,53.8,119,1\n904,-1,312.6,1.4,47.1,131.1,1\n904,-1,243.4,134.1,56.7,167.5,1\n904,-1,1503.3,3.1,56.6,138.8,1\n904,-1,1317.5,884.9,95.9,196.1,1\n904,-1,421.3,63.2,52.3,177.8,1\n248,-1,1221.3,31.1,62.4,117.1,1\n248,-1,686.5,207.1,79,113.3,1\n248,-1,1599.2,9.3,64.1,142.7,1\n248,-1,797.4,153.4,59,174.1,1\n248,-1,392.6,514.9,89.4,245.7,1\n248,-1,211.6,126.8,56.7,165.7,1\n248,-1,223,468,58.1,199.5,1\n248,-1,1154.2,113.1,52.9,165.8,1\n248,-1,109,349.7,51.2,190.7,1\n248,-1,1480.7,57.6,54.7,152.6,1\n248,-1,1720,457.1,79,211.6,1\n248,-1,1373.6,568.5,103.5,242.1,1\n248,-1,287.9,128.6,54.9,170.1,1\n248,-1,355.3,106.3,55,179.6,1\n248,-1,449,174.2,76,208.3,1\n248,-1,704.3,1,54.7,157.2,1\n248,-1,934.4,112.3,71.4,179.2,1\n248,-1,1077.1,116.7,58.9,180.2,1\n248,-1,211,731.9,90.6,255.9,1\n248,-1,491.3,360.4,73,228.1,1\n248,-1,852.4,348.6,81.3,198.6,1\n248,-1,515.4,117,54.8,183.4,1\n248,-1,121.5,561.2,83.5,251.2,1\n248,-1,584.8,375.2,64.8,203.6,1\n248,-1,788.6,337.6,84.6,211.6,1\n248,-1,766.4,101.4,53.2,165.6,0.999\n248,-1,930.3,902.4,73.7,178.6,0.997\n987,-1,686.6,206.5,80,112.5,1\n987,-1,793.5,140.1,72.6,172.2,1\n987,-1,1222.2,30.5,61.2,120.3,1\n987,-1,1190.4,122.5,55.5,163.5,1\n987,-1,403.1,266.7,71.8,196.9,1\n987,-1,1793,177.5,69,185.5,1\n987,-1,496.2,250.3,67.6,191.9,1\n987,-1,837.8,313.9,72.7,209.1,1\n987,-1,1575.4,589.9,103,236.3,1\n987,-1,1468.8,167.2,67.6,169.1,1\n987,-1,302,453.4,81.8,204.5,1\n987,-1,331.8,840.7,94,240.3,1\n987,-1,1719.5,454.8,79.4,213,1\n987,-1,1671,145.3,53.8,166.7,1\n987,-1,751.1,72,55.9,164.3,1\n987,-1,230.1,135.4,56.1,167.1,1\n987,-1,290,126,52.2,170.6,1\n987,-1,1189.3,667,91.2,265.3,1\n987,-1,316.8,264.1,63.7,198.8,1\n987,-1,546.2,118.2,55.4,168.3,1\n987,-1,920.2,301.4,69.7,210.5,1\n987,-1,390.9,438.4,65.6,216,1\n987,-1,1740,674.4,92.8,249,1\n987,-1,499.4,73.3,52.4,154.7,1\n987,-1,314.5,2.5,45.6,129,1\n987,-1,446.1,65.9,59,176.8,1\n987,-1,1450.1,1,54,90,1\n987,-1,1386.2,2.2,44.5,89.2,0.999\n987,-1,376.9,166,63.2,192.3,0.999\n987,-1,382.1,1,52.7,135.6,0.998\n104,-1,1221.4,30.4,62,119.1,1\n104,-1,390.2,819.6,102.2,261.4,1\n104,-1,1164.8,155.4,78.8,169.3,1\n104,-1,704.3,1,56.6,158.6,1\n104,-1,108,350.7,50.9,190.2,1\n104,-1,356.3,105.7,55.5,178.3,1\n104,-1,426.2,301.5,78.9,228.6,1\n104,-1,1487.1,69.2,55.6,150.5,1\n104,-1,1721.5,457.1,77.7,210.5,1\n104,-1,507.9,228.1,72.1,194.4,1\n104,-1,1358.5,566.2,105.4,245.7,1\n104,-1,209.1,130.3,50.1,166.7,1\n104,-1,947.8,202.5,71.4,188.4,1\n104,-1,292.1,126.2,57.5,172.3,1\n104,-1,102.9,550.5,84.4,246.4,1\n104,-1,36.7,687.7,71,218.5,1\n104,-1,807.5,194.6,64.3,192.1,1\n104,-1,703.1,182.9,58.6,168,1\n104,-1,1266.2,189.4,46,170,1\n104,-1,439.4,3.9,53.6,153.2,1\n104,-1,538.2,64.9,49.2,165.8,1\n104,-1,1434.3,187.9,60.3,179,1\n104,-1,481.8,40.5,60.1,160.5,1\n104,-1,375.2,7,49.7,163.2,1\n104,-1,853.1,218,57,166.1,1\n104,-1,1387.7,186.6,60.7,188.1,1\n104,-1,483.2,147.6,52.7,166.1,0.998\n104,-1,259.2,88.4,57.8,178.2,0.967\n104,-1,1149,936.7,75.3,144.3,0.091\n416,-1,1222,30.2,60.9,120,1\n416,-1,686.3,205.6,79.2,114.3,1\n416,-1,551.3,70.7,56.5,166,1\n416,-1,453.7,247,80.6,205.1,1\n416,-1,358.8,110.7,54.5,174.5,1\n416,-1,1660.3,64.3,75.1,174.6,1\n416,-1,944.7,15.7,61.8,168.6,1\n416,-1,1719.7,459.9,79,203.8,1\n416,-1,110,349,52.1,188.9,1\n416,-1,1769.2,129.5,55.6,162.2,1\n416,-1,1006.2,30.1,55.1,162,1\n416,-1,286.9,130,54.3,164.8,1\n416,-1,1583,621.2,99.5,237.8,1\n416,-1,358.6,1,68.5,116.2,1\n416,-1,834.4,1.2,51.8,131.5,1\n416,-1,1231.2,501,71.1,203.8,1\n416,-1,796.2,149.3,57.6,173.8,1\n416,-1,209.3,264.2,54.7,179,1\n416,-1,859.9,540.7,109.7,245.6,1\n416,-1,398.5,623,78.1,233,1\n416,-1,220.2,141.9,71.3,157.4,1\n416,-1,290.4,594.2,89.7,249.3,1\n416,-1,1832.6,76.3,79.4,177.3,1\n416,-1,425.3,98.1,53.6,168.8,1\n416,-1,717.7,1,51.9,126.2,1\n416,-1,713.7,556.9,87.3,246.6,1\n416,-1,461.4,66,69.4,194,1\n416,-1,424.7,1.1,46,117.4,0.999\n416,-1,712,88.8,62.8,176.4,0.999\n416,-1,937.1,554.8,80.3,217.9,0.998\n416,-1,982.3,925.9,80.6,155.1,0.59\n916,-1,1221.7,30.2,61.9,119.6,1\n916,-1,686.5,206.3,79.5,112.8,1\n916,-1,794,140.5,75.9,172.8,1\n916,-1,1114.6,31.6,62.3,167,1\n916,-1,1433,3.3,47.6,133.9,1\n916,-1,1476.3,107,62.7,156.1,1\n916,-1,463.5,202.7,68.7,188.7,1\n916,-1,1573.8,589.4,105,236.5,1\n916,-1,558.1,116.8,57.9,172,1\n916,-1,1606.2,65.2,54,161.2,1\n916,-1,326.6,369.5,84.3,190.5,1\n916,-1,1722.6,453.1,77.5,214.6,1\n916,-1,306.8,700.3,89.8,269.1,1\n916,-1,1296.5,851.4,95.2,229.6,1\n916,-1,301.9,162.3,69.2,199.1,1\n916,-1,1720.6,94.5,56.1,171.7,1\n916,-1,867.8,423.2,64.8,221.8,1\n916,-1,959.3,404.3,67.5,219.7,1\n916,-1,751.9,75.5,55.3,157.8,1\n916,-1,410.7,349.9,58.6,208.4,1\n916,-1,375.9,202.2,57.8,177,1\n916,-1,240.5,134.6,54.9,164,1\n916,-1,469.6,16.1,51.8,148.3,1\n916,-1,422.6,65.6,60.9,176.4,1\n916,-1,1498.1,1.5,58.8,132.4,1\n916,-1,253.9,2.2,54.8,120.4,1\n916,-1,1749.4,686.7,92,237.7,1\n916,-1,312.4,1,47.3,133.9,1\n390,-1,1222.3,30.9,61.4,118.4,1\n390,-1,686.3,206,79.6,114.3,1\n390,-1,366.2,1.5,65.1,102.7,1\n390,-1,1636.4,29,74.1,174.4,1\n390,-1,1122.2,466.5,75.2,201,1\n390,-1,358.5,106.9,54.8,178.7,1\n390,-1,446,285.6,83.1,211.7,1\n390,-1,1773.7,105.6,68.2,166.6,1\n390,-1,438.9,572.1,73,235.3,1\n390,-1,828.9,1,54.7,118.9,1\n390,-1,322.8,551.9,97.2,251.1,1\n390,-1,457.5,71.7,68.7,195.4,1\n390,-1,795.5,151,59.8,171.6,1\n390,-1,108.8,350,53.3,191.6,1\n390,-1,949.3,25.5,63.7,175.7,1\n390,-1,282.5,127.4,55.2,166.9,1\n390,-1,219.3,142.3,60.4,155.1,1\n390,-1,207.6,289.5,54.3,184.3,1\n390,-1,1595.1,627.5,87.2,249.7,1\n390,-1,1013.7,41.5,54.3,164,1\n390,-1,1719.3,453.7,77.2,214.9,1\n390,-1,916.2,522,81.6,212.6,1\n390,-1,849.6,508.2,85.6,228.8,1\n390,-1,1775.7,430.2,70.5,210.9,0.999\n390,-1,978.5,906.6,90.2,174.4,0.995\n390,-1,707.4,1,53.6,145.5,0.983\n390,-1,757.4,107.9,45.3,136.8,0.888\n390,-1,1436.8,4.8,53,75.5,0.785\n390,-1,434.1,79.2,46.9,174,0.687\n390,-1,524,89.5,32.5,152.5,0.186\n390,-1,711.7,87.2,56.1,179.4,0.17\n390,-1,923.9,9.7,48.8,117.1,0.118\n1042,-1,1221.3,29.6,62.1,120.4,1\n1042,-1,687.3,206.6,79,114.8,1\n1042,-1,794.1,141,70.9,173.2,1\n1042,-1,288.6,127.3,52.8,171.8,1\n1042,-1,477.1,321.2,79.2,196.8,1\n1042,-1,274.8,534.8,98.5,203.2,1\n1042,-1,1720.7,454.8,80.2,216.3,1\n1042,-1,1124.1,560.3,87.6,252.7,1\n1042,-1,1291.2,193.2,65.9,165.5,1\n1042,-1,230.6,138,55.4,165.7,1\n1042,-1,937.7,235.8,65,204.7,1\n1042,-1,1656.1,680.1,95,233.1,1\n1042,-1,751.5,75.1,53.5,161.7,1\n1042,-1,363.5,325,72.6,202.6,1\n1042,-1,374.2,511.7,68,236.1,1\n1042,-1,851.8,247.3,63.6,190.6,1\n1042,-1,292.4,321.2,71.3,210.6,1\n1042,-1,373.2,103.8,57.4,176.5,1\n1042,-1,1718.2,213.3,57.6,176.2,1\n1042,-1,1470.4,213.8,72.6,167.5,1\n1042,-1,307.9,3.1,37.2,126,1\n1042,-1,1573.2,589.4,103.4,241.3,1\n1042,-1,1858.2,247.7,62.8,198.3,1\n1042,-1,582.2,536.2,64.8,254.4,1\n1042,-1,502.7,167.8,73.4,195.6,1\n1042,-1,455.9,176.2,59.9,164.4,1\n1042,-1,433.1,65.8,62.3,176.8,0.999\n1042,-1,543.9,114.6,54.8,172.9,0.474\n882,-1,1221.2,29.7,62.1,118.3,1\n882,-1,1088.3,1.1,63.2,155.8,1\n882,-1,686.8,206,79.7,113.7,1\n882,-1,1480.3,87.6,58.1,153.2,1\n882,-1,795.7,140.2,71.2,173.9,1\n882,-1,474.9,2,48.7,135,1\n882,-1,1574.6,589,104,238.7,1\n882,-1,302,161.4,70.2,197.5,1\n882,-1,1722.3,453.9,77.5,214.3,1\n882,-1,287.2,646.5,85.6,250.4,1\n882,-1,333.7,327.4,81.1,186.5,1\n882,-1,479.3,171.7,60.2,181.6,1\n882,-1,1696.2,54.3,55.1,170.8,1\n882,-1,558.6,116.5,58.3,177,1\n882,-1,753.1,72.6,55.5,162.8,1\n882,-1,1578,33.8,57.6,152.2,1\n882,-1,893.9,473.8,70,230.3,1\n882,-1,980.6,457,69.2,230.7,1\n882,-1,1421.7,4.3,52,155.3,1\n882,-1,253.5,1.1,53.7,122.2,1\n882,-1,427.3,309.9,56.7,203.6,1\n882,-1,406.8,168.4,57.6,179.4,1\n882,-1,240.3,131.8,51.2,167.1,1\n882,-1,1752.9,681.7,93,232.9,1\n882,-1,1495.5,2.5,57.9,148.9,1\n725,-1,1221.3,29.4,62.3,119.1,1\n725,-1,686.6,205.7,80.3,114.2,1\n725,-1,550.3,113.3,60.5,177.3,1\n725,-1,1480,8.1,58.9,143.6,1\n725,-1,1472.9,110.8,52,172.2,1\n725,-1,1712,455,95.9,208.6,1\n725,-1,261.8,191,54.9,200.1,1\n725,-1,414.2,178.5,66.8,165,1\n725,-1,1574.5,590.3,99,232.8,1\n725,-1,316,200.7,63.9,180,1\n725,-1,397.7,553.9,95.1,245.3,1\n725,-1,478.2,158.4,49.3,184.3,1\n725,-1,1599.4,115.1,58.8,180.6,1\n725,-1,301.1,413.6,73.7,219.3,1\n725,-1,786.8,139.4,50.4,177.1,1\n725,-1,749.6,81.8,50.1,152.1,1\n725,-1,1236.2,741.7,100.9,272.4,1\n725,-1,361.1,107.8,47.8,173.8,1\n725,-1,420.6,41.7,61.4,162.7,1\n725,-1,1168.4,771.4,82.1,251.5,1\n725,-1,466.3,10.9,45.3,141.8,0.999\n725,-1,236.3,135.4,51.8,166.5,0.999\n725,-1,321.1,1,50.9,134.8,0.995\n554,-1,1221.1,30.7,62.5,120.4,1\n554,-1,687.3,206,78.7,114.6,1\n554,-1,1489.8,3.5,59.4,145,1\n554,-1,535,111.5,61.3,175.2,1\n554,-1,380,221.5,63.3,193.2,1\n554,-1,786.9,142.6,65.3,179.3,1\n554,-1,1659.6,280,88.6,203.7,1\n554,-1,1799,234,72.2,182,1\n554,-1,193.5,297.2,63.4,194.9,1\n554,-1,1716.5,455.5,84.9,209.4,1\n554,-1,1589,2.9,55.2,146.5,1\n554,-1,873.3,1,53.4,109.6,1\n554,-1,757.8,594.5,95.6,257.5,1\n554,-1,288.8,122.4,53.1,174.9,1\n554,-1,1658.8,1.5,54.2,150.4,1\n554,-1,986.3,1.6,52.8,96.1,1\n554,-1,219.2,137.9,57.5,157.7,1\n554,-1,246,882.2,81.5,198.8,1\n554,-1,1595.2,584.4,70.8,244.4,1\n554,-1,139.8,268.7,51.8,213.9,1\n554,-1,752.9,81,48,155.4,1\n554,-1,417.3,139.4,51.6,162.5,1\n554,-1,457.3,93.2,65,181.1,1\n554,-1,359.4,111.9,54,170.1,1\n554,-1,1091.9,793.3,86.5,247.4,0.992\n554,-1,1010.6,780.5,121.5,247.7,0.972\n554,-1,929.1,1.4,57.8,95.8,0.952\n554,-1,1025.2,947.4,78.7,133.6,0.107\n427,-1,1221.3,30.5,62.5,119.2,1\n427,-1,940,6.3,64.2,167.4,1\n427,-1,686.4,205.4,79.7,115.2,1\n427,-1,358.9,110.3,54.2,175.5,1\n427,-1,449.1,237,78.6,201.1,1\n427,-1,109.5,347.1,54.7,194.6,1\n427,-1,1672.2,79.6,64.7,176.4,1\n427,-1,1717.3,456.9,81.8,209.1,1\n427,-1,840.5,1,52.8,134.9,1\n427,-1,1008.9,23,55,159.6,1\n427,-1,283.2,617.8,95.4,250.8,1\n427,-1,746.1,557.5,79,253.2,1\n427,-1,540.9,71.6,55.7,166.5,1\n427,-1,1281.5,508.7,71.8,205.7,1\n427,-1,1760.4,142.3,56.8,162.2,1\n427,-1,285.7,130.4,53.8,165.2,1\n427,-1,1573.9,615,94.9,243.9,1\n427,-1,797.9,150.7,54.3,173.7,1\n427,-1,218.9,251.7,53.2,179.1,1\n427,-1,357.4,2.2,69.9,126.5,1\n427,-1,384,642.7,71.3,240.3,1\n427,-1,868.9,557.8,102.3,236.7,1\n427,-1,220.8,139.8,74.9,162.3,1\n427,-1,431.1,107.9,55.4,164.9,1\n427,-1,944.5,569.4,88,223.9,1\n427,-1,714.7,88.4,61.8,175.7,1\n427,-1,424.5,1.1,42.5,127.7,0.999\n427,-1,722.2,1.4,49.8,114.8,0.999\n427,-1,1790,72.5,80.7,176.5,0.997\n427,-1,1855.5,421.3,65.5,192.8,0.997\n427,-1,453.3,55.1,68.2,194.5,0.935\n427,-1,990.2,931,82.1,150,0.789\n57,-1,1221.2,29.8,61.5,117.1,1\n57,-1,686.8,206,79.4,114,1\n57,-1,1487.3,70,55.4,151.6,1\n57,-1,488,187.6,85.2,186.8,1\n57,-1,401.7,348,82.7,231.2,1\n57,-1,1362.1,566.8,103.8,245.2,1\n57,-1,704.7,1,55.8,157.7,1\n57,-1,1723,455.4,74.9,212,1\n57,-1,1002,177.3,73.4,179.1,1\n57,-1,354.9,112.2,54.8,174,1\n57,-1,212.6,130.5,49.6,164,1\n57,-1,794.8,147.1,62.6,182.2,1\n57,-1,443.5,107.1,55.1,152.8,1\n57,-1,102.3,545.4,85.5,254.4,1\n57,-1,8.6,771.3,67.6,232,1\n57,-1,284,126.5,55.3,169,1\n57,-1,154.4,362.9,58.3,187.9,1\n57,-1,849.5,194,78.6,178.4,1\n57,-1,1309.9,175.5,58.1,169.4,1\n57,-1,385.7,44.3,55.8,166.2,1\n57,-1,1369.6,211.4,41.7,169.2,1\n57,-1,485.2,43.8,55.8,160.7,1\n57,-1,1474.6,215,60.8,192,0.999\n57,-1,540.8,63.2,43.3,166.8,0.999\n57,-1,1869.5,279.2,51.5,205.6,0.984\n57,-1,904,185.6,43.1,169.6,0.744\n624,-1,686.9,206.1,79.7,112.9,1\n624,-1,1221.5,29,62.1,118.1,1\n624,-1,1480.9,5.2,60.5,143.2,1\n624,-1,347.9,294.9,68.5,203.3,1\n624,-1,1623.3,207.2,79.9,197.1,1\n624,-1,801.1,144.7,65.7,171.7,1\n624,-1,1711.5,456.9,91.2,210.3,1\n624,-1,1574.3,588.7,96.6,236.9,1\n624,-1,358.4,114.8,53.1,171.5,1\n624,-1,552.3,111.5,57.3,176.4,1\n624,-1,288.2,127.2,52.3,168.4,1\n624,-1,181.2,236.4,70.5,203.3,1\n624,-1,498,83.6,45.6,154.6,1\n624,-1,248.9,247.6,61.1,189.8,1\n624,-1,352.5,1,54.2,123.8,1\n624,-1,754,80.7,43.7,151.8,1\n624,-1,550.2,537.5,81.9,253.3,1\n624,-1,1593,1,52.9,92.4,1\n624,-1,233.3,134.3,49,163.2,1\n624,-1,448.6,83.5,49.4,169.9,0.999\n624,-1,409.1,102.5,52.8,157.2,0.999\n624,-1,1112.6,920.5,98.7,160.5,0.997\n624,-1,423.3,3.3,58.9,126.5,0.453\n624,-1,1204.8,947.1,69.3,133.9,0.08\n366,-1,1221.8,31.5,61.6,118.5,1\n366,-1,686.4,206.4,79.8,112.9,1\n366,-1,438.1,315.9,74.2,214,1\n366,-1,367.3,518.1,85.9,234.4,1\n366,-1,1431.5,2.3,52.6,102.6,1\n366,-1,1625.4,2.9,58.5,162,1\n366,-1,443,82.8,71.1,202.4,1\n366,-1,209.5,141.4,59.7,161.4,1\n366,-1,1021.9,57.1,55.5,166.4,1\n366,-1,1756.8,95.2,62.1,158.6,1\n366,-1,1053.5,434.3,67,197.2,1\n366,-1,512.6,91.3,46.7,164.4,1\n366,-1,1837.4,71,55.6,155.5,1\n366,-1,1718.8,455.8,79.8,215.6,1\n366,-1,286.7,131.2,53.7,170.2,1\n366,-1,109.1,352.3,52,187.8,1\n366,-1,956,46,62.6,175.1,1\n366,-1,215.6,315.1,55.1,190.6,1\n366,-1,362.4,113.7,54.3,171.8,1\n366,-1,796.5,150.1,59.4,174.9,1\n366,-1,833.4,1,54,108.7,1\n366,-1,1815,460.9,61.6,206.1,1\n366,-1,1576.4,626.9,83.1,246.4,1\n366,-1,909.9,486.4,79.9,210.7,1\n366,-1,531.5,568.8,97.2,252.1,1\n366,-1,469.2,536.9,65.8,230.7,1\n366,-1,760.7,95.8,43.8,143,1\n366,-1,381,3,45.1,86.3,1\n366,-1,845.5,475.6,84,231.7,0.999\n366,-1,962.1,922.2,77.4,158.8,0.993\n366,-1,928.9,3.8,58.4,151.4,0.977\n65,-1,1221.7,31.1,60.7,117.1,1\n65,-1,686,206.4,80.5,112.5,1\n65,-1,404.8,338,84.4,234.9,1\n65,-1,1361.2,566.6,104.7,244.9,1\n65,-1,1487.2,70.2,55.2,149.6,1\n65,-1,355.7,105.6,54.8,179,1\n65,-1,704.5,1,55.6,158.3,1\n65,-1,1721.7,457.6,77.4,209.4,1\n65,-1,489.6,190.7,78.2,194.9,1\n65,-1,820.8,196,71.5,180.9,1\n65,-1,103.1,546.3,84.3,253.2,1\n65,-1,1286.7,181.7,59,165.4,1\n65,-1,211.6,128.4,49.7,165.8,1\n65,-1,995.2,187,70,174.1,1\n65,-1,10.1,750.1,69.9,239.4,1\n65,-1,287.6,125.3,53.8,170.7,1\n65,-1,1458.1,202.8,68.9,200.8,1\n65,-1,147.7,357.3,57.1,196.1,1\n65,-1,893.3,183.7,54,167.2,1\n65,-1,461.1,116.6,54.4,146.8,1\n65,-1,540.1,63.8,46.1,165.3,1\n65,-1,1354,205,40.2,172.5,1\n65,-1,383.4,34.6,52.8,165,1\n65,-1,437.7,29.2,52.1,156.8,0.999\n65,-1,486.5,37.2,56.7,173,0.993\n65,-1,255.9,90.7,48.9,181.3,0.957\n65,-1,1874.7,289.3,46.3,192.5,0.275\n65,-1,388.1,927.3,101.9,153.7,0.062\n891,-1,1220.9,29.6,62.5,119.7,1\n891,-1,687.1,206,79.5,114,1\n891,-1,1103,7.9,54.8,158.8,1\n891,-1,1482.6,94.4,58.2,153.8,1\n891,-1,794.3,138.4,74.8,174.1,1\n891,-1,1706.3,62,52.8,170.2,1\n891,-1,1576.4,594.4,101.9,234.7,1\n891,-1,332.8,337.8,81.6,181.2,1\n891,-1,480.4,182.5,61.2,182.1,1\n891,-1,1721,453.7,79,214.3,1\n891,-1,558.6,117.4,58.9,173.9,1\n891,-1,297.4,664,82.5,249.4,1\n891,-1,301,160.7,70.8,194.7,1\n891,-1,470.2,1,51.1,141.5,1\n891,-1,753.6,70.2,54.4,164,1\n891,-1,1425.8,2.6,51.2,153.7,1\n891,-1,422.7,326.5,57.6,204.8,1\n891,-1,1590.9,43.1,49.8,153.4,1\n891,-1,885.6,458.6,71.7,225,1\n891,-1,970.9,447.2,77.7,221.8,1\n891,-1,239.9,132.1,55.4,170.4,1\n891,-1,254,1.4,53.9,120,1\n891,-1,1747.6,682.7,89.9,233.1,1\n891,-1,403,172.8,56.2,181,1\n891,-1,1492.9,1,64.3,149.5,1\n891,-1,314.4,1.2,47.3,125.5,1\n891,-1,409.1,54.4,58.3,175.4,0.999\n891,-1,1348,923.3,90.9,157.7,0.982\n891,-1,353.7,166.9,42.2,172.5,0.386\n497,-1,1221.3,30.4,62.5,118.4,1\n497,-1,685.5,206.2,80.9,112.7,1\n497,-1,1497.1,1,58,128.4,1\n497,-1,1818.2,175.5,84.2,190.5,1\n497,-1,998.6,1,55.7,132.4,1\n497,-1,795,140.5,59.9,179.1,1\n497,-1,1734.9,190.6,67.5,173.4,1\n497,-1,931.4,1,56.3,129.9,1\n497,-1,465.8,153.9,65.2,192.6,1\n497,-1,813.9,607.7,86.4,259.4,1\n497,-1,1641.9,596.2,72.7,219.5,1\n497,-1,141.5,336.6,64.2,188.5,1\n497,-1,213.1,734.8,95.8,270.5,1\n497,-1,1720.6,458.3,80.3,208.4,1\n497,-1,877.6,1,51.9,126.3,1\n497,-1,298.9,770.6,77.9,263.4,1\n497,-1,1542,598.5,88.3,242.9,1\n497,-1,1687,42.1,53.6,164.5,1\n497,-1,407.9,164.7,59.5,186,1\n497,-1,1625.6,29.4,60.1,174.9,1\n497,-1,923.1,671,114.3,254.3,1\n497,-1,217.2,135,64.1,164.2,1\n497,-1,316.1,190.7,48.9,164.8,1\n497,-1,1753,341,75.4,216.7,1\n497,-1,715.9,93.4,60.6,164.5,1\n497,-1,449.6,17.2,74.4,178.3,1\n497,-1,1625.3,325.8,58.3,190.7,1\n497,-1,360.6,112.1,53.3,173.5,1\n497,-1,285.3,125.6,56.1,170,0.999\n497,-1,507,95.5,60.5,171.6,0.999\n497,-1,403.1,15.8,47.9,163.9,0.999\n497,-1,1013.9,688.4,78.7,227.1,0.998\n497,-1,753.4,100.3,46.7,140.2,0.171\n497,-1,1020.3,936.3,84.6,144.7,0.063\n44,-1,686,206,79.9,113.9,1\n44,-1,1213.4,31.1,71.6,118.6,1\n44,-1,393.8,365.1,85.1,235.4,1\n44,-1,1486.8,70.3,55.2,148.4,1\n44,-1,1362.1,566.5,105.1,245.3,1\n44,-1,485.6,169.7,94.3,196.2,1\n44,-1,704.5,1.8,55.7,156.7,1\n44,-1,903.9,194.8,91.7,182.7,1\n44,-1,1721.6,457.2,77.1,209,1\n44,-1,213.6,127.6,49.9,164.6,1\n44,-1,170.9,369.1,68.7,190.6,1\n44,-1,352.7,106.5,55.4,177,1\n44,-1,1008.8,159.5,80,187.3,1\n44,-1,102,548.9,85.7,249.6,1\n44,-1,283.8,126.4,54,169.5,1\n44,-1,795.3,148.6,62.1,175.4,1\n44,-1,2,794.6,68.5,235.3,1\n44,-1,860.9,149.1,61.2,183.3,1\n44,-1,1340,186.3,51.7,162.9,1\n44,-1,404.7,88.7,52.3,160.9,1\n44,-1,1847.5,263.7,73.5,195.5,1\n44,-1,1492.1,219.3,60.6,199.7,1\n44,-1,443.7,43,55.1,169.4,0.999\n44,-1,486.1,43,54.7,155.5,0.988\n44,-1,541.7,61.3,41.9,178.7,0.959\n44,-1,1392.3,220.6,41.6,164.5,0.061\n467,-1,1221.9,30.8,61.8,117.4,1\n467,-1,687,205.8,78.5,113.7,1\n467,-1,935.2,1,57.4,148,1\n467,-1,1006.5,1,53.8,154.1,1\n467,-1,452.9,192.3,69.1,195.8,1\n467,-1,276.9,210.8,52.7,175.2,1\n467,-1,358.8,109.3,55.9,177.6,1\n467,-1,1804.6,364.6,86.1,215.2,1\n467,-1,1704.6,457.5,95.4,210,1\n467,-1,238.8,681.1,93.3,259.3,1\n467,-1,117.2,345.3,59.1,188.1,1\n467,-1,1506.6,1.3,58.1,111.7,1\n467,-1,803.9,145.4,47.1,174.9,1\n467,-1,1649.5,345.5,61.7,198.8,1\n467,-1,1729,167.8,63.7,162.5,1\n467,-1,878.1,1,51.7,134.9,1\n467,-1,333.6,715.7,73.2,247.1,1\n467,-1,218.9,137.4,61.7,159.1,1\n467,-1,516.6,81.4,60.9,173,1\n467,-1,1543.2,609.1,72.8,241.6,1\n467,-1,809.3,583.9,95.5,253.3,1\n467,-1,1671.4,53.5,61.3,173.8,1\n467,-1,753.7,94.3,54,141.8,1\n467,-1,898.6,620.9,116.3,249.5,1\n467,-1,1489,564.4,75.1,190.1,0.999\n467,-1,983.6,639.6,88.2,222.6,0.999\n467,-1,447,36.9,72.9,182.9,0.999\n467,-1,413.7,3.2,44.6,154.3,0.999\n467,-1,715.4,90.2,51,165.8,0.997\n467,-1,428.9,142.2,48,160.2,0.994\n467,-1,1729.7,64.8,50.6,161.1,0.993\n467,-1,1025.5,921,87,160,0.991\n467,-1,288.7,129.8,50.5,168.7,0.982\n467,-1,1763.2,148.3,65.4,159.5,0.714\n944,-1,1221.3,29.3,62.8,120.2,1\n944,-1,686.8,206.4,79.8,112.8,1\n944,-1,793.3,140,75.8,173.4,1\n944,-1,1485.7,1,59.7,115.3,1\n944,-1,1132.7,67.4,65.3,170.5,1\n944,-1,1476.3,128.1,61.3,162.3,1\n944,-1,1576.3,590.8,102,238.9,1\n944,-1,323,754.1,97.1,267.9,1\n944,-1,749.5,70.3,56.6,163.6,1\n944,-1,437.7,227.6,66.5,192.1,1\n944,-1,1627.9,94.8,56.9,167.7,1\n944,-1,554,116.6,57.8,173.5,1\n944,-1,351.2,226.5,61,180.7,1\n944,-1,1720.6,453.8,77.8,213.6,1\n944,-1,1252,780.4,93.2,285,1\n944,-1,237.2,133.2,58,171.1,1\n944,-1,1417.9,1,46.9,118.4,1\n944,-1,940.3,364.4,66.6,219.1,1\n944,-1,325.7,396.6,81.9,196.4,1\n944,-1,858.9,381.5,63.5,215.5,1\n944,-1,253.7,1,52.9,119.2,1\n944,-1,1745.8,133.4,60.6,172.5,1\n944,-1,395.5,383.9,64.2,217.3,1\n944,-1,1744.8,679.7,90.7,246,1\n944,-1,434.6,74.9,56.9,177.5,1\n944,-1,476.7,37.7,53.1,151.2,1\n944,-1,309.6,163.8,61.8,195.3,1\n944,-1,478.5,213.8,58.7,182.1,0.998\n951,-1,686.1,206.2,80.4,113.4,1\n951,-1,1221.4,29.5,62.3,118.8,1\n951,-1,794.1,139.8,73.7,173.1,1\n951,-1,1474.4,138,63.3,167.6,1\n951,-1,1482.1,1,55.1,111.4,1\n951,-1,1144.3,72.3,58.9,172.1,1\n951,-1,1245,759.7,90.9,269.1,1\n951,-1,322.9,766.1,94.2,274,1\n951,-1,749.9,71.4,56.7,162.6,1\n951,-1,1574.5,588.1,103.3,236,1\n951,-1,931.7,353.3,70.3,213.4,1\n951,-1,1720.9,452.2,78.4,214.7,1\n951,-1,1638.2,103.7,52.8,170,1\n951,-1,852.2,364.7,69.8,212.2,1\n951,-1,392.2,387.1,66.6,214.1,1\n951,-1,553.1,115.4,55.1,171,1\n951,-1,428.3,233.2,68.9,186.7,1\n951,-1,322.6,408.3,79.8,196.8,1\n951,-1,345.3,235.1,61.5,183.9,1\n951,-1,435.9,76.5,55.5,174.2,1\n951,-1,1756.2,131.9,65.1,182.4,1\n951,-1,233.8,134.8,58,170.9,1\n951,-1,1416.4,1.4,46.5,114,1\n951,-1,479.6,217,63.6,184.2,1\n951,-1,479.1,37.8,55.6,155.8,1\n951,-1,1742.6,674.5,93.8,251.7,1\n951,-1,248.6,2.3,54.5,120.1,1\n951,-1,288.4,125.7,53.8,168.6,0.997\n951,-1,317.1,171.7,57.3,183.3,0.994\n684,-1,1222.1,29.5,61.6,120.9,1\n684,-1,687,206.8,79.7,113.3,1\n684,-1,1480.6,5,60.7,146.8,1\n684,-1,1489.4,154.3,52.5,171.3,1\n684,-1,364.5,530.2,107.7,251,1\n684,-1,486.9,131.6,45.7,176.3,1\n684,-1,1708.9,457.1,99.8,208.9,1\n684,-1,1069.1,1,74.8,99.1,1\n684,-1,803.4,145.9,58.4,173.5,1\n684,-1,563.4,112.8,51,177.5,1\n684,-1,312.1,358.2,70.2,216.7,1\n684,-1,1617.6,150.4,72.9,190.8,1\n684,-1,417.1,139.9,67.1,165,1\n684,-1,360.7,113.3,49.9,172.5,1\n684,-1,750.1,79.5,49.6,158.1,1\n684,-1,1574.1,589.5,97.6,234.6,1\n684,-1,1270.1,867.2,91.8,213.8,1\n684,-1,239.6,203.9,62.6,199,1\n684,-1,1359.8,844.9,94.3,236.1,1\n684,-1,404.4,15.4,56,158.5,1\n684,-1,294.9,219.3,59,178.5,1\n684,-1,482.9,38.2,46.8,142.3,1\n684,-1,832.3,922.1,75.8,158.9,0.943\n684,-1,226.7,129.4,45.9,168.1,0.865\n197,-1,1221.3,30.6,61.1,120.4,1\n197,-1,49.6,637.5,118.8,248.6,1\n197,-1,211.5,127.5,56.1,167,1\n197,-1,687.2,207,78.5,112.1,1\n197,-1,1490,69,54.2,149.9,1\n197,-1,108.4,347.1,50.6,191.2,1\n197,-1,704.8,1,55.8,159,1\n197,-1,526.7,137.9,61.2,159.6,1\n197,-1,403.9,612.9,94,247.3,1\n197,-1,1720.9,456.6,78.2,211.4,1\n197,-1,289.4,126.3,54.6,171.8,1\n197,-1,1358.7,566.7,103.1,246.9,1\n197,-1,355.9,104.9,54.7,179.8,1\n197,-1,420.6,213.8,77.5,219.6,1\n197,-1,516.1,307.1,74.7,216.7,1\n197,-1,881.1,161.6,78.5,187.4,1\n197,-1,1049.2,140,51.3,157.1,1\n197,-1,796,151.2,59.6,173.1,1\n197,-1,393.7,39.5,63.6,167.8,1\n197,-1,802.3,304.2,70.4,186.4,1\n197,-1,1222.2,144.8,52.1,171.8,1\n197,-1,1162.4,144.4,64,186.1,1\n197,-1,230.1,542.9,62.7,214.5,1\n197,-1,751.2,289.1,70.3,206.2,1\n197,-1,970.7,914.5,76.1,166.5,0.927\n197,-1,466.3,8.8,46.5,86,0.644\n506,-1,1221.4,29.9,62.5,118.9,1\n506,-1,686.6,205.8,80.1,115.2,1\n506,-1,1496.1,1.6,58.3,133.5,1\n506,-1,998.7,1,54.2,129.3,1\n506,-1,786.6,142.1,64.8,181.4,1\n506,-1,149.1,332.2,66.7,189.9,1\n506,-1,401.3,175,62.3,185.5,1\n506,-1,881.9,1,51.9,124.2,1\n506,-1,1679.4,26.3,56,169.2,1\n506,-1,464.8,143.3,67.8,192.6,1\n506,-1,932.8,1,55.6,122.1,1\n506,-1,326.5,179.9,49.2,165.6,1\n506,-1,823.2,608.9,77.1,251.8,1\n506,-1,1740.8,194.4,66,176.2,1\n506,-1,1676.2,609.6,79.7,219.1,1\n506,-1,1726.1,459.1,74.9,206.7,1\n506,-1,1616.6,19.7,57.5,177.8,1\n506,-1,1729.7,333.7,83,200.2,1\n506,-1,931.6,688,118.5,254.8,1\n506,-1,290.9,786.2,77.9,253.4,1\n506,-1,1615.5,306.1,65.4,193,1\n506,-1,207.5,749.2,90.7,277.1,1\n506,-1,1836,189.8,80.2,197.4,1\n506,-1,217.4,133.2,63.7,163.3,1\n506,-1,1553.1,598,75.5,238.6,1\n506,-1,513.8,93.6,58,175.8,1\n506,-1,288.3,124.6,54.5,170.3,1\n506,-1,449.2,7.9,74.1,180.1,1\n506,-1,360.4,104,53.5,189.6,0.999\n506,-1,719.2,96.4,64.5,165.9,0.999\n506,-1,400.1,18.6,48.1,163.1,0.998\n506,-1,1024.8,707.3,73.9,242.7,0.721\n456,-1,1221.6,31.6,62.5,118,1\n456,-1,936.7,1,58.1,154.3,1\n456,-1,686.8,206,79.4,114.1,1\n456,-1,444.8,205.3,72.4,195.9,1\n456,-1,358.4,104,55.9,183.8,1\n456,-1,1008.5,8.3,53.3,156.4,1\n456,-1,1709.1,455.5,90.9,211.4,1\n456,-1,1738.9,154.3,62.3,172.8,1\n456,-1,113.7,348.7,55.2,191.4,1\n456,-1,247.1,670.9,96.3,249.6,1\n456,-1,1425.1,547.7,86.9,214.5,1\n456,-1,262.1,224.9,54.7,174.5,1\n456,-1,523.1,76.1,56,171.2,1\n456,-1,867.1,1.5,55.9,138.1,1\n456,-1,1549.5,611.7,75.1,244.1,1\n456,-1,890,601.3,110.9,239.7,1\n456,-1,802.2,151.2,46.3,170.7,1\n456,-1,286.2,128.1,54.3,167.9,1\n456,-1,1829.7,389.2,84.1,206.1,1\n456,-1,1660.6,359.2,65,196.8,1\n456,-1,343.3,689,73.2,250.5,1\n456,-1,220.2,138.1,58.7,159.6,1\n456,-1,798,578.2,87.9,250.4,1\n456,-1,753.2,94.4,53.4,151.2,1\n456,-1,1508.8,1,54.5,108.1,1\n456,-1,974.9,617.9,85.9,227.6,0.999\n456,-1,418.9,1,44.3,155.7,0.999\n456,-1,445.9,37.7,71.1,197.4,0.998\n456,-1,1026.6,922.1,83.6,158.9,0.998\n456,-1,714.1,93.2,50.9,166.8,0.982\n456,-1,429.5,135.7,48,157.7,0.953\n456,-1,1709.3,58.1,59.6,199.6,0.459\n456,-1,362.2,9.8,54.1,134.6,0.138\n656,-1,687.1,206.6,79.4,113.2,1\n656,-1,1481,4.5,60,144.7,1\n656,-1,1158,1,69.3,119.2,1\n656,-1,548.9,110.7,61.6,174.5,1\n656,-1,801.7,145.6,64.5,170.7,1\n656,-1,1222.3,28.5,62.4,122.7,1\n656,-1,1713.4,459.9,93.5,202.9,1\n656,-1,359.3,114.3,50.9,170.3,1\n656,-1,330.4,332.5,68.7,207.1,1\n656,-1,1575.6,588,96.7,236.3,1\n656,-1,448.8,536.5,81.2,241.8,1\n656,-1,1613.1,171.4,75.4,187.3,1\n656,-1,271.7,236.8,60.6,178.2,1\n656,-1,751.8,80.2,46,155.6,1\n656,-1,409.2,1,58.3,155.2,1\n656,-1,472.2,106.7,47.5,175.8,1\n656,-1,424.6,119.5,57.8,162,1\n656,-1,220.9,218.9,55.2,201.9,1\n656,-1,287.4,124.6,52,171.1,0.999\n656,-1,1439.3,909.4,93.4,171.6,0.999\n656,-1,352.4,1,53.5,143,0.998\n656,-1,1360.8,934.5,85.7,146.5,0.931\n168,-1,1221.3,30.9,61,116.9,1\n168,-1,1489.4,68.9,54.4,148.6,1\n168,-1,973.9,124.9,59.3,170.6,1\n168,-1,400.7,674.7,98.2,261.5,1\n168,-1,109.2,349.8,48.7,189.2,1\n168,-1,356.5,103.3,55.6,179.5,1\n168,-1,703.7,1,56.5,159.8,1\n168,-1,212.4,126,54.9,167.7,1\n168,-1,1359.3,567.6,104.3,244.8,1\n168,-1,1720.8,456.6,78.3,212.7,1\n168,-1,687.7,207.8,77.7,111.2,1\n168,-1,288.7,127.1,54.5,168.9,1\n168,-1,1128.3,154.8,47,160.2,1\n168,-1,432.6,40.7,56.6,162.7,1\n168,-1,100.4,548,87.6,253,1\n168,-1,422,239.4,77.2,221,1\n168,-1,528.8,278.9,63.5,218.7,1\n168,-1,538.4,65.4,51.9,165.4,1\n168,-1,558.4,157.6,66.2,170.3,1\n168,-1,220.2,589.1,68.6,217.5,1\n168,-1,855.4,192.8,75.5,185.5,1\n168,-1,1236,164.8,59.3,174.6,1\n168,-1,795.3,147.7,62.1,174,1\n168,-1,798.5,276.1,62,177.3,1\n168,-1,747.8,263,67.2,199.5,1\n168,-1,502.4,213.6,59.1,180.5,0.999\n168,-1,1274.2,166.2,52.4,166.1,0.986\n168,-1,1020.2,905,72.4,176,0.978\n907,-1,1221.7,30.2,60.9,118.8,1\n907,-1,686.8,205.8,79.6,113.7,1\n907,-1,473.7,193.1,68.6,187.6,1\n907,-1,794,140.3,74.8,172,1\n907,-1,1109.5,28.3,63.3,160.4,1\n907,-1,1432.3,1,48.7,145.2,1\n907,-1,1484,103.9,58.8,152.4,1\n907,-1,306.8,688.8,91.2,259.2,1\n907,-1,1715.1,84.3,54.1,175.5,1\n907,-1,1722.6,452.6,76.8,215.1,1\n907,-1,1574.4,591,104.2,233.7,1\n907,-1,557.4,115.8,57.7,174.2,1\n907,-1,1597.1,60.9,54,160,1\n907,-1,383.1,191.6,57.5,178,1\n907,-1,327,351.5,85.9,188.8,1\n907,-1,872.6,435.4,66.7,221.6,1\n907,-1,301.8,162.7,69.9,198.6,1\n907,-1,751.8,74.3,55.7,159.3,1\n907,-1,469.7,6.6,50.1,151.8,1\n907,-1,1744.9,681.3,97.8,239.1,1\n907,-1,1310.2,880.4,96.5,200.6,1\n907,-1,416.1,344.8,58.8,204.5,1\n907,-1,242.5,134.4,56.9,165.5,1\n907,-1,969.9,414.6,64.9,228.4,1\n907,-1,1503.3,3.2,56.6,135.7,1\n907,-1,312.2,1,47.6,132.3,1\n907,-1,253.7,1,54.7,119.1,1\n907,-1,422.4,64.1,51.3,177,1\n64,-1,1221.5,30.6,61,117,1\n64,-1,685.9,206.6,80.5,112.7,1\n64,-1,404.9,337.8,83.7,236.8,1\n64,-1,1361.2,566.5,106.1,245,1\n64,-1,705,1,55.6,158.7,1\n64,-1,1487.4,70.5,54.7,148,1\n64,-1,1721.5,456.6,77.8,210.2,1\n64,-1,488.2,188.5,80.8,196.5,1\n64,-1,356.3,108.1,54.6,177.6,1\n64,-1,995.7,185.4,73.4,172.6,1\n64,-1,102.8,546.2,84.6,253.2,1\n64,-1,823.8,195.6,73,182.4,1\n64,-1,211,129.3,50.5,165.5,1\n64,-1,1289.5,179.7,61.3,164.8,1\n64,-1,287.5,125.8,54.2,170,1\n64,-1,147,356.6,56.1,197.1,1\n64,-1,9.9,752,71.9,240,1\n64,-1,1460.7,203.8,66.2,200.8,1\n64,-1,894.8,184.6,52.5,163.2,1\n64,-1,383.8,37.8,53.9,164.7,1\n64,-1,459.7,118.5,51.2,145.2,1\n64,-1,541.8,63.4,44.4,166.2,1\n64,-1,1356,205.9,42.6,174.8,1\n64,-1,438.3,31,51.6,152.6,0.998\n64,-1,485.1,37.1,56.8,172.5,0.996\n64,-1,797.6,146.7,62.3,187.5,0.971\n64,-1,256.2,91.7,47.1,178.8,0.934\n3,-1,687.6,206.2,78.4,113.8,1\n3,-1,1486.7,70.2,55.5,148,1\n3,-1,1361.6,567.5,106.5,244.8,1\n3,-1,508.3,140.3,98.9,185.2,1\n3,-1,704.5,1,56.1,156.9,1\n3,-1,1091,212.5,70.1,181.8,1\n3,-1,1731.6,456.8,76.9,215.1,1\n3,-1,795.6,147.6,62.3,175.5,1\n3,-1,286.5,125.4,56,170.8,1\n3,-1,1198.7,37.6,71.8,113.5,1\n3,-1,1793,204.9,68.1,185.9,1\n3,-1,1034.3,134.3,79.5,183.6,1\n3,-1,102.2,545.3,85.8,254.6,1\n3,-1,1633.8,262.3,66,188.4,1\n3,-1,373.1,407.3,84.5,244.6,1\n3,-1,221.7,128.3,48.1,163.6,1\n3,-1,872.4,125,61.5,175.8,1\n3,-1,355.5,103.2,53.6,179.9,1\n3,-1,414.7,89.5,56,174.3,1\n3,-1,1038.9,1.6,48.6,83.7,1\n3,-1,224.4,391.7,63.1,206.3,1\n3,-1,1446.1,248.5,56.6,174.4,1\n3,-1,464.5,79.5,52.1,174,1\n3,-1,261.3,363.6,64,228.8,0.996\n3,-1,913.1,127.8,44.8,161.3,0.504\n3,-1,1001.5,2.6,47.4,77.3,0.283\n266,-1,1221.4,31.3,61.8,118.9,1\n266,-1,687.9,206.5,77.6,111.6,1\n266,-1,288.4,129.7,57,170.3,1\n266,-1,454.4,157,73.3,211.4,1\n266,-1,1479.2,48.8,51.4,147.5,1\n266,-1,1631.7,20.6,63.5,147.3,1\n266,-1,376.4,481,95.7,236.7,1\n266,-1,108.5,352.9,50.7,186.3,1\n266,-1,356.3,105.7,52.3,179.1,1\n266,-1,1721,456.6,77.6,212.7,1\n266,-1,796.5,153.1,59.2,171.2,1\n266,-1,1125.2,98.8,55.7,168.8,1\n266,-1,376.2,9.2,59,158.3,1\n266,-1,704.7,1,54.8,158,1\n266,-1,217.4,127.3,54.9,165.6,1\n266,-1,938.1,92.1,69.4,182.9,1\n266,-1,231.7,439.6,60.9,195.7,1\n266,-1,1049.7,106.2,61.4,184.4,1\n266,-1,1407.6,565.4,97.8,248.1,1\n266,-1,248.8,761.7,90.8,278.3,1\n266,-1,698.5,325,65,184.8,1\n266,-1,871.3,369,78.7,202.9,1\n266,-1,481.3,386.5,74.7,218.1,1\n266,-1,802.5,355.2,86.9,212.2,1\n266,-1,512.5,118.1,56,172.9,1\n266,-1,162.6,567.8,88.8,250.4,1\n266,-1,874.4,109.8,45.5,151.7,1\n266,-1,568.6,396.8,65.1,213.3,1\n266,-1,755.1,101.8,48.1,169,0.999\n266,-1,939,916.3,84.8,164.7,0.931\n430,-1,1221.7,30.1,62.3,118.8,1\n430,-1,938.6,4,63.9,168.2,1\n430,-1,686.6,205.9,79.6,113.7,1\n430,-1,358.9,109,53.7,178.1,1\n430,-1,448.5,232.2,79,201.2,1\n430,-1,842.4,1,53.3,136.2,1\n430,-1,1676.5,85.4,65.2,171.4,1\n430,-1,1298.8,512.1,66.3,207.8,1\n430,-1,1717.5,458.7,81.1,206.8,1\n430,-1,109.9,348.1,54.1,190.7,1\n430,-1,1009.4,21.8,53.6,161.4,1\n430,-1,752.6,562.6,81.9,247,1\n430,-1,282.6,617.4,93.4,258.4,1\n430,-1,535.7,73,55.8,163.1,1\n430,-1,223,248.2,52.9,179.2,1\n430,-1,284.9,129.4,54.2,167.1,1\n430,-1,1572,614.4,90.5,245.5,1\n430,-1,798.9,151.3,52.5,172.4,1\n430,-1,1758.6,143.3,55.6,162.6,1\n430,-1,380.8,649.6,70.6,236.1,1\n430,-1,868.8,563.7,107.3,242.1,1\n430,-1,359.6,1,67.3,128.2,1\n430,-1,430.1,106.8,57.9,172.2,1\n430,-1,1850.8,420.1,70.2,187,1\n430,-1,714.9,90,61.3,173,1\n430,-1,221.8,138.3,74.2,160.1,1\n430,-1,947.7,575,87.5,222.2,1\n430,-1,423.1,1,42.9,128.7,0.999\n430,-1,1780.2,75,81.5,174.7,0.997\n430,-1,725,1.6,49.9,112.7,0.995\n430,-1,992.3,931.5,88.1,149.5,0.859\n430,-1,458.3,55.1,67,184.4,0.599\n430,-1,752.3,86.6,41.9,155.5,0.549\n827,-1,1221,29.7,62.3,118.3,1\n827,-1,686.9,205.8,79.6,114.5,1\n827,-1,1036.4,548.3,95.5,242.3,1\n827,-1,1637.3,3,56.2,158.4,1\n827,-1,1577.7,593.4,98.2,233.7,1\n827,-1,274.1,561.5,81.8,236.7,1\n827,-1,557.4,115.6,62.9,176.1,1\n827,-1,792,134.6,65.6,180.4,1\n827,-1,1723,453.3,75.4,213.5,1\n827,-1,1476.8,43.9,59.1,156.8,1\n827,-1,437.8,257.2,55.9,193,1\n827,-1,751.2,71.9,56.9,163.1,1\n827,-1,473.9,124,59.5,175.4,1\n827,-1,373.2,271.2,74.7,170.5,1\n827,-1,1423.5,40.1,50.7,157.2,1\n827,-1,962.8,565.7,73.7,236.9,1\n827,-1,238.3,133.6,50,166.6,1\n827,-1,289.7,162.9,66.3,197.6,1\n827,-1,423,120.8,57.9,173.6,1\n827,-1,348.2,172.1,47,178.4,0.999\n827,-1,250.3,1,55.7,117.1,0.729\n156,-1,1221.4,30.4,62.4,119.5,1\n156,-1,1487.8,68.2,55.9,150.8,1\n156,-1,356.1,104.5,54.6,180,1\n156,-1,999.3,130.5,72.7,168.4,1\n156,-1,445,36.9,58.1,163.1,1\n156,-1,109.4,350.8,49.7,187.7,1\n156,-1,704.8,1,55.8,158.6,1\n156,-1,539,63.6,50.6,167,1\n156,-1,1721.2,456.1,77.4,211.9,1\n156,-1,287.8,122.6,55.4,174.4,1\n156,-1,1358.6,567.8,105.3,243.8,1\n156,-1,686.8,206.1,79.5,114.8,1\n156,-1,214.4,124.1,54.6,168,1\n156,-1,1153.5,159.7,47.2,157.7,1\n156,-1,420.4,250.3,78,223.9,1\n156,-1,407.9,705.8,93.4,267.8,1\n156,-1,101.2,544.5,85.7,255.3,1\n156,-1,196.7,611.5,65.4,213.2,1\n156,-1,1264.3,173.8,61.3,168.7,1\n156,-1,591.3,264.1,63.1,197.8,1\n156,-1,531,270.7,62.2,207.6,1\n156,-1,387.4,4.7,45,114.9,1\n156,-1,857.3,202.3,71.8,194.1,1\n156,-1,800.7,260.3,64.1,183.4,1\n156,-1,492.9,201.1,58.6,167.6,1\n156,-1,755.3,252,69.2,185.2,1\n156,-1,793.3,148,63.6,181.4,0.999\n156,-1,1037.3,912.5,70.4,168.5,0.994\n515,-1,1221,30.3,62.2,119.6,1\n515,-1,1490.9,1,60.5,138.2,1\n515,-1,686.4,207.2,80.3,113.9,1\n515,-1,996,1,54.9,122.4,1\n515,-1,1674.4,23.7,54.1,165.7,1\n515,-1,159.5,327.8,66.2,188.3,1\n515,-1,393.6,185,62.8,188.3,1\n515,-1,789.9,142.7,55.3,178.8,1\n515,-1,340.2,171.1,50.7,168.5,1\n515,-1,883.3,1.1,53.3,121.8,1\n515,-1,1561.5,600.8,71.3,235.6,1\n515,-1,930.2,1.7,57.3,120.1,1\n515,-1,459.5,139,72.3,185.1,1\n515,-1,1613.5,14.9,54.7,175.1,1\n515,-1,1718.8,624.7,78.1,216.4,1\n515,-1,944.7,700.5,118.8,263.5,1\n515,-1,827.3,606.5,74.7,258.3,1\n515,-1,1718.8,459.2,79.6,209.9,1\n515,-1,287.2,126.4,53.5,173.1,1\n515,-1,1605.6,300.6,62.8,203,1\n515,-1,1849,207.4,72,191.5,1\n515,-1,217.1,135.9,63.6,162.5,1\n515,-1,198.8,769,90.2,272.5,1\n515,-1,732.2,97,64.7,161.6,1\n515,-1,451.3,4.2,74.7,183.1,1\n515,-1,515.8,94.8,56.2,176.6,1\n515,-1,1710.8,325.8,91.4,197.4,1\n515,-1,1756,206.2,58.8,171.2,0.999\n515,-1,277.7,800.8,80.8,265.5,0.999\n515,-1,398.7,24.3,46.8,161,0.996\n515,-1,570.2,69.6,44.1,156.6,0.851\n515,-1,1044.6,931.5,75.8,149.5,0.122\n337,-1,1221,30.9,62.4,119.1,1\n337,-1,687.3,206.5,78,113.1,1\n337,-1,1448.1,1.1,57.1,127.8,1\n337,-1,1592.2,1.5,56,126.6,1\n337,-1,404.1,578.2,104.9,249.2,1\n337,-1,448.5,105.3,73.1,195.7,1\n337,-1,1726.8,71.7,57.3,152.8,1\n337,-1,1721.2,457.5,77.8,212.8,1\n337,-1,108.7,349.6,51.7,189.6,1\n337,-1,285.8,131.1,54.6,173.8,1\n337,-1,231.9,349.4,58.5,191.9,1\n337,-1,900.3,453,70.3,208.3,1\n337,-1,361.8,107.5,57.3,177.6,1\n337,-1,960.4,396.3,64.7,193.5,1\n337,-1,979,65.5,63.8,179.2,1\n337,-1,797.7,156.2,58,168.2,1\n337,-1,926.5,22.5,66.2,176.4,1\n337,-1,1540.2,611.6,81.7,247.1,1\n337,-1,1830.8,501.9,68.7,207,1\n337,-1,211.7,140.3,55.4,162.2,1\n337,-1,1038.6,72.3,52.9,161.9,1\n337,-1,521.4,98.7,40.2,170.6,1\n337,-1,505.1,493.1,67.5,223.9,1\n337,-1,839.6,444.7,84,219.4,1\n337,-1,719.1,95.8,53.4,168.9,0.999\n337,-1,774.9,96.5,42.2,158.1,0.999\n337,-1,418.5,49.8,58.4,170.2,0.997\n337,-1,418.6,365.1,78.5,207.9,0.997\n337,-1,943,918.8,68.8,162.2,0.975\n337,-1,428.9,876.6,109.6,204.4,0.124\n337,-1,852,1,43.5,86.8,0.12\n259,-1,1221.4,31.5,61.7,118.5,1\n259,-1,686.8,205.9,79.5,113.9,1\n259,-1,1623.9,13.1,60.9,148,1\n259,-1,287.5,130.5,55.4,168.8,1\n259,-1,356,104.6,53.7,181.2,1\n259,-1,107.8,352,52,188.9,1\n259,-1,797,153.7,59.6,173.7,1\n259,-1,1480.5,51.1,52.9,147.1,1\n259,-1,213,126.5,55.8,167.3,1\n259,-1,1720.4,457.6,78.5,211,1\n259,-1,451.8,159.2,75.9,212.7,1\n259,-1,937.7,102.7,72.8,183.6,1\n259,-1,387.2,493.5,85.7,231.9,1\n259,-1,1396.9,565,100.3,249.5,1\n259,-1,704.5,1.1,54.8,157.4,1\n259,-1,227.4,453.8,61.2,200,1\n259,-1,1060.9,109.2,60.7,184.8,1\n259,-1,1140.9,102,50.3,165.9,1\n259,-1,240.2,747.6,88.1,278.3,1\n259,-1,866.5,361.6,77.8,191,1\n259,-1,887.1,110.9,49.3,156.6,1\n259,-1,797.6,350.2,85.3,209.4,1\n259,-1,487.9,374.2,70.3,227.9,1\n259,-1,148,569.1,84.1,247.8,1\n259,-1,371.2,5.6,56.1,157.5,1\n259,-1,514.1,118.1,55.2,173.4,1\n259,-1,575.6,384.1,64.6,213.2,1\n259,-1,758.5,101.4,50.6,173,1\n259,-1,936,914.4,78.7,166.6,0.995\n259,-1,678.3,313.9,54.9,168.2,0.436\n234,-1,1221.7,30.3,62.4,119.3,1\n234,-1,685.9,207.1,80.3,112.6,1\n234,-1,1489,64.5,55.1,152.1,1\n234,-1,380.3,543.5,95.4,239.6,1\n234,-1,1093.4,125.8,66.2,182.1,1\n234,-1,796.6,152,58.6,176.4,1\n234,-1,1581.2,1,58.5,144.8,1\n234,-1,438.2,180.6,78.7,215.1,1\n234,-1,288.3,126.6,56.1,172.5,1\n234,-1,356,106.5,53.8,178.6,1\n234,-1,705.7,1.1,55.1,159.7,1\n234,-1,1174.2,127.4,52.7,160.4,1\n234,-1,211.7,125.3,56.2,169.1,1\n234,-1,1720.8,456.6,78.7,212.4,1\n234,-1,1360.2,569.3,103.9,241.5,1\n234,-1,108.5,350.2,49.9,187.3,1\n234,-1,516.1,121.3,50.6,179,1\n234,-1,220.9,486.1,58.6,204,1\n234,-1,922.8,126.3,70.3,184.9,1\n234,-1,168.2,696.8,97.3,261.3,1\n234,-1,505.6,350.4,71.7,216.3,1\n234,-1,836.2,336.1,78.7,194.3,1\n234,-1,780.2,327.3,75.8,207,1\n234,-1,590.3,357.3,61.2,198.6,1\n234,-1,117.8,639.7,86,246.3,0.999\n234,-1,933.2,900.9,73,180.1,0.994\n965,-1,685.9,206.5,80.2,113.7,1\n965,-1,1768.5,152.1,67.8,178,1\n965,-1,793.4,140.5,72.8,173.1,1\n965,-1,1221.3,31,61.4,119.7,1\n965,-1,926.1,331.8,73.7,216.3,1\n965,-1,1153.4,87.8,64.2,172.9,1\n965,-1,328.9,796.8,89.1,272.1,1\n965,-1,1646.9,115.8,58.6,172.5,1\n965,-1,1573.6,588.8,104.7,236.6,1\n965,-1,847,346.1,67.7,203.1,1\n965,-1,1471.5,149.5,65.9,163.3,1\n965,-1,1402.4,2.1,47.8,103.3,1\n965,-1,416.8,245.4,71.4,197.8,1\n965,-1,1720.9,454.4,78.3,212.9,1\n965,-1,751.7,72.1,55.1,163.6,1\n965,-1,229.5,137.3,55.3,165.2,1\n965,-1,1459.8,1,63.1,104.7,1\n965,-1,488.7,232,63.5,179.8,1\n965,-1,333.1,242.5,63.8,191.7,1\n965,-1,441.6,74.3,54.3,179.8,1\n965,-1,311.5,423.4,85.4,197.9,1\n965,-1,1217,723.8,93.5,267.8,1\n965,-1,549.5,118.1,55.7,172.2,1\n965,-1,392.6,415.9,65.4,214,1\n965,-1,1741.1,674,94.6,251.5,1\n965,-1,289.7,124.2,53.7,172,1\n965,-1,313.1,1,48.5,129.3,0.999\n965,-1,483.2,51.7,54.6,162.4,0.999\n965,-1,433.2,3,51.4,141.9,0.996\n965,-1,383.4,2,52.8,120.7,0.565\n398,-1,1222.2,30.2,61.1,117.9,1\n398,-1,686.3,206.2,79.4,113.5,1\n398,-1,1639.9,42.9,61.9,168.1,1\n398,-1,1771.9,115.1,66.7,165.3,1\n398,-1,946.8,24.5,64.6,171.7,1\n398,-1,453.1,270,77,206.7,1\n398,-1,358.4,107.1,55.2,178.5,1\n398,-1,365.5,1,62.2,104.8,1\n398,-1,312.1,563.5,93.6,249.4,1\n398,-1,219.1,140.7,62.8,156,1\n398,-1,828.3,1,56.1,121.4,1\n398,-1,284.7,127.6,55,168.1,1\n398,-1,1158,473.7,69,199.7,1\n398,-1,1716.8,460.5,81,208.3,1\n398,-1,795.6,152.1,58.6,171.1,1\n398,-1,109,349.4,52.1,189.9,1\n398,-1,431.2,588.8,70.8,242.7,1\n398,-1,466.3,73.4,67.7,187.1,1\n398,-1,549.1,68.5,56.9,170.9,1\n398,-1,1008.9,40.9,55.4,159.9,1\n398,-1,1596,625.4,88.8,249.4,1\n398,-1,203.7,281.4,55.7,182.9,1\n398,-1,852.2,518.3,95.2,231.6,1\n398,-1,921.8,530.1,80.2,214.6,1\n398,-1,714.5,1,51.8,140.6,1\n398,-1,427.4,86.6,48.7,170.1,0.999\n398,-1,709.8,87.5,61.1,178.3,0.996\n398,-1,979.8,908.5,89.1,172.5,0.991\n398,-1,1766.8,428.4,61,204.6,0.634\n29,-1,686.7,205.8,79.9,113.8,1\n29,-1,1207.3,30.1,72.2,120.5,1\n29,-1,385.3,376.3,86.8,242.4,1\n29,-1,703.7,1.9,56.7,156.8,1\n29,-1,1486.9,69.7,55.4,148.5,1\n29,-1,1361.6,566.7,105.2,245.5,1\n29,-1,1723.7,457.1,75.9,210,1\n29,-1,1828.2,244,65,187.5,1\n29,-1,795.1,149.5,62.4,174.9,1\n29,-1,492.6,163.4,86.5,190.7,1\n29,-1,981.5,198.8,76.2,179.6,1\n29,-1,102.4,547.3,85.2,252.6,1\n29,-1,193.8,374,68,197.1,1\n29,-1,216,128.4,47.8,163.3,1\n29,-1,356,104.6,53,181.5,1\n29,-1,412.5,82.5,53.9,160.9,1\n29,-1,284.8,124.7,53.4,170.5,1\n29,-1,1,825.8,58.6,237,1\n29,-1,1596.9,236.6,57.4,187.6,1\n29,-1,872,137.2,54.5,185.1,1\n29,-1,1370.5,189.5,46.3,171.2,1\n29,-1,456.8,58.3,46.1,161.5,1\n29,-1,914.9,153.3,51.3,163.8,1\n29,-1,1017,154,71.2,187.6,0.9\n653,-1,687.4,206.7,78.9,113.1,1\n653,-1,1480,2.8,61,146.2,1\n653,-1,546.7,111.6,63.9,175.5,1\n653,-1,1711.8,456.3,95.2,209.9,1\n653,-1,1221.1,29.7,63.3,122.1,1\n653,-1,801.2,144.1,65.9,174.2,1\n653,-1,359.7,112.2,50.7,172.5,1\n653,-1,450.5,535.7,87.3,244.2,1\n653,-1,333.3,329.4,68.7,205.5,1\n653,-1,1576.6,588.5,95.1,237.3,1\n653,-1,1614.6,172.9,71.7,187,1\n653,-1,751.6,83,46,151.4,1\n653,-1,269.2,236.4,61,182.5,1\n653,-1,409.4,1,59.5,155.3,1\n653,-1,217.4,220.4,56.1,202.9,1\n653,-1,424.2,118.5,56.2,160.1,1\n653,-1,471.4,104.8,47.1,173.9,1\n653,-1,1171.5,1,69.8,123.2,1\n653,-1,287.5,125.9,51.9,170.8,0.999\n653,-1,1449.6,921.4,88.4,159.6,0.996\n653,-1,354.6,2.2,48.1,137.2,0.873\n653,-1,1367,937.8,90.8,143.2,0.102\n579,-1,1221,30.2,62.4,120.1,1\n579,-1,686.5,205.6,79.8,113.9,1\n579,-1,1480.8,5.5,60.3,143.9,1\n579,-1,1648.4,1,54.9,134.1,1\n579,-1,377.3,246.3,67.7,197.2,1\n579,-1,800.2,146.3,63.4,171.1,1\n579,-1,212.9,272.7,63.7,195.6,1\n579,-1,1716.1,455.7,85.8,210.8,1\n579,-1,1574.8,587.9,93.2,234.7,1\n579,-1,288.9,124.8,52,169.3,1\n579,-1,1651.6,245.9,77.5,206,1\n579,-1,216.7,137.1,51.8,160,1\n579,-1,555.2,111.7,52,175.6,1\n579,-1,1840.9,258.8,70,179.4,1\n579,-1,874.4,1.9,51.9,101.5,1\n579,-1,754.5,79.6,44,155.8,1\n579,-1,457.6,119.4,50.1,154.4,1\n579,-1,357.9,108.5,54,176.9,1\n579,-1,155.1,251.6,61.4,210.2,1\n579,-1,707,575.2,84.5,248.9,1\n579,-1,1042,823.7,133,257.3,1\n579,-1,422.9,58.1,46.5,168.5,0.999\n579,-1,1006.1,938.2,78.5,142.8,0.263\n579,-1,1123.9,836.1,87.7,240.3,0.184\n436,-1,1222,29.7,62,119.2,1\n436,-1,938,5.1,63.1,165.2,1\n436,-1,687.1,206.3,78.3,112.8,1\n436,-1,1008.3,20.2,53.7,156.3,1\n436,-1,359.1,110.3,53.9,177,1\n436,-1,1323.4,526.4,72.9,198.7,1\n436,-1,450.2,229.9,76.7,199.2,1\n436,-1,846.7,1,54,135.3,1\n436,-1,111.3,352.8,53.2,187.2,1\n436,-1,1717.5,458,80.8,210,1\n436,-1,1687.1,86.2,67.4,177.8,1\n436,-1,230.4,242.6,52.7,177.6,1\n436,-1,285.2,130.3,55.1,167.1,1\n436,-1,274,625,91.5,259.5,1\n436,-1,1752.6,144.7,62.2,169.5,1\n436,-1,373.8,654,71.4,243.5,1\n436,-1,798.1,151.1,53.1,172.7,1\n436,-1,762,566.1,81.6,246.4,1\n436,-1,1847.1,416.2,73.9,189.6,1\n436,-1,1566.5,613.8,83,244.1,1\n436,-1,535.9,72,54.6,168.1,1\n436,-1,876.5,571.4,108.5,243.6,1\n436,-1,361.9,1,62.7,129.5,1\n436,-1,431.8,114.1,57.3,171.2,1\n436,-1,420.9,1,45.9,129.1,1\n436,-1,953.8,587.4,84.8,220.5,1\n436,-1,220.3,138.4,65.3,152.9,0.999\n436,-1,714.6,86.4,57.5,179.2,0.999\n436,-1,727.1,2,46.5,105,0.999\n436,-1,756.5,82.9,44.8,160.3,0.99\n436,-1,1000.3,928.4,83.5,152.6,0.974\n436,-1,1774.4,71.7,69,166.5,0.505\n189,-1,1221.9,30,61.5,120.1,1\n189,-1,212,126.3,54.9,167.6,1\n189,-1,1489.5,67.8,55.2,150.4,1\n189,-1,686.7,207.4,79.4,111.7,1\n189,-1,108.8,347.1,49.9,191,1\n189,-1,417.1,637.4,89.4,254.9,1\n189,-1,1357.9,567.5,104.6,245.7,1\n189,-1,704.9,1,55.3,159,1\n189,-1,870.1,171.9,86.1,189.7,1\n189,-1,356.4,106.4,54.8,178.8,1\n189,-1,288.9,127.8,55.7,169.7,1\n189,-1,1720.4,456.9,78.4,212.1,1\n189,-1,399.9,39.6,65.1,163.8,1\n189,-1,525.4,310.4,63.1,202.9,1\n189,-1,1177.3,148.6,65.1,182.9,1\n189,-1,26.8,621.8,117.2,245.2,1\n189,-1,420.5,220.1,76.7,218.6,1\n189,-1,233.9,555.5,61.4,210.1,1\n189,-1,795.2,150.9,61.9,174.3,1\n189,-1,1240.1,146.5,44.5,167,1\n189,-1,798,295.2,71.5,185.2,1\n189,-1,537.3,141.1,58.4,159.6,1\n189,-1,1074.9,143.4,51.3,163,1\n189,-1,747.4,278.2,70.4,201.6,1\n189,-1,96.2,548.9,85.7,246.2,0.995\n189,-1,981.1,919.6,74.9,161.4,0.993\n189,-1,452.1,4.5,57.4,82.7,0.829\n558,-1,1221.3,30.5,62.3,119.7,1\n558,-1,687.1,206.1,78.7,114.5,1\n558,-1,1488.2,4,59.2,146.3,1\n558,-1,537,113.6,61,173.5,1\n558,-1,1584.8,3.5,54.9,141.8,1\n558,-1,788.4,146,65.3,175.5,1\n558,-1,377.9,222.8,64.1,194,1\n558,-1,1664.1,274.5,80.3,199.8,1\n558,-1,1720.5,454.4,81.3,211.7,1\n558,-1,195.1,294.9,67.5,193.3,1\n558,-1,1658.7,1.4,54.1,148.1,1\n558,-1,872.4,1,53.6,109.4,1\n558,-1,1808.3,234.6,71,183.2,1\n558,-1,751.1,592.5,89.6,256.4,1\n558,-1,288.8,121.3,52.1,173.1,1\n558,-1,422.1,143.4,51.9,155.4,1\n558,-1,985.8,2.8,52.4,93.7,1\n558,-1,219.6,136,56.7,160.1,1\n558,-1,1596.6,589.6,71,239.1,1\n558,-1,140.6,265.1,52.3,212.3,1\n558,-1,753.3,79.4,48.2,156.8,1\n558,-1,358.7,109,53.8,170.5,1\n558,-1,461.5,87.9,64.4,185.9,1\n558,-1,242.8,894.8,82.7,186.2,1\n558,-1,1014.8,783.3,116.2,255.3,0.999\n558,-1,413.8,43.7,50,184.1,0.996\n558,-1,1097.1,796.3,86.1,244.3,0.964\n558,-1,929.8,2.4,55.9,93.6,0.841\n558,-1,1025.6,952.5,75.4,128.5,0.294\n457,-1,1221.8,30.8,62.1,118.7,1\n457,-1,936.6,1,58.5,152.5,1\n457,-1,686.8,205.9,79.4,113.9,1\n457,-1,444.8,201.8,73.1,198.2,1\n457,-1,1008.7,6.7,53.4,155.6,1\n457,-1,359,105.2,55.9,182.4,1\n457,-1,1707.9,456.1,92.6,211.6,1\n457,-1,1738.8,161.1,60,164.3,1\n457,-1,1428.7,546.9,85.1,209.2,1\n457,-1,869.2,1,55.9,137.6,1\n457,-1,522.5,74.4,55.8,172.7,1\n457,-1,1830.4,384.7,79.9,210.2,1\n457,-1,264.6,220.5,52.1,177.7,1\n457,-1,113.9,348.7,55.7,191.6,1\n457,-1,1547.9,610.9,75.4,246.8,1\n457,-1,286.6,126.8,54.4,170.2,1\n457,-1,890.9,603,111.7,237.4,1\n457,-1,244.6,662.7,98.1,261.2,1\n457,-1,802.7,151,46.1,175.2,1\n457,-1,219.5,137.6,59,159.2,1\n457,-1,1659.6,360.7,63.8,195.5,1\n457,-1,342.6,695.2,73.1,247.4,1\n457,-1,800.3,579.4,86.9,250.1,1\n457,-1,1508.2,1,54.3,108.6,1\n457,-1,753.6,94,53.2,146.4,1\n457,-1,418,1,45,154.7,0.999\n457,-1,446,40.4,70.4,189.2,0.999\n457,-1,974.9,619.2,86.9,228.7,0.998\n457,-1,1026.8,921.3,85,159.7,0.998\n457,-1,1702.7,54,62.7,192.2,0.997\n457,-1,711,92.4,53.2,168.8,0.993\n457,-1,429.2,139,48.1,155.3,0.933\n457,-1,359.2,12.4,59.2,151,0.088\n400,-1,1222.5,30.3,61.1,118.3,1\n400,-1,686.4,206,79.2,114.2,1\n400,-1,1642.6,46.2,61.9,167.4,1\n400,-1,364.4,1,63.9,107.8,1\n400,-1,357.9,106.6,56,178.8,1\n400,-1,944.7,22.6,64.6,172,1\n400,-1,455,267.6,78.2,209.8,1\n400,-1,1771.9,116.7,64.3,165.2,1\n400,-1,827.1,1,56.5,123.6,1\n400,-1,309.9,565.5,88.6,248.1,1\n400,-1,1720.7,459.7,77,208.4,1\n400,-1,218,141.1,64.5,156.8,1\n400,-1,795.9,152.6,59.3,171.6,1\n400,-1,468.1,70.7,65.8,190.7,1\n400,-1,550.2,66.4,57.8,173.1,1\n400,-1,284.8,130.3,54.2,164.7,1\n400,-1,108.9,348.9,52.5,191.5,1\n400,-1,1007.5,39.7,55.8,160,1\n400,-1,1167,474.8,66.4,203.3,1\n400,-1,428.6,590.9,70.9,241.3,1\n400,-1,204.1,278.2,55,182.7,1\n400,-1,1593.1,621,93.9,252.9,1\n400,-1,851.5,519.1,97.9,233.8,1\n400,-1,924.6,532.4,81.1,217.4,1\n400,-1,426.3,87.5,49.1,171.8,1\n400,-1,716.6,1,51.5,139.2,1\n400,-1,709.1,90.4,63.3,174.7,0.999\n400,-1,979.9,909.9,88.2,171.1,0.989\n400,-1,428.2,5.8,22.2,87.3,0.067\n663,-1,1220.8,29.4,61.8,119.7,1\n663,-1,686.9,205.6,79.9,114,1\n663,-1,1480.6,3.7,61.1,143.9,1\n663,-1,1711.5,457,94.4,207,1\n663,-1,801.5,144.4,63.3,172.2,1\n663,-1,554.1,110,58.1,177.9,1\n663,-1,360,114.1,49,168.2,1\n663,-1,1616.5,167.8,76.9,183.8,1\n663,-1,1575.4,587.7,97.5,235,1\n663,-1,1136.1,1.5,68.9,112.1,1\n663,-1,434.1,527.8,76.9,244.8,1\n663,-1,321.9,332.8,70.5,211.9,1\n663,-1,476.9,111.4,47.9,179.7,1\n663,-1,750.7,77.9,47.2,158.3,1\n663,-1,224.4,212.4,58.7,200.1,1\n663,-1,421.7,122.6,64.2,160.8,1\n663,-1,407.5,1,57.5,154.7,1\n663,-1,277.6,228.6,55.1,181.3,1\n663,-1,1420.1,897.8,101.1,183.2,1\n663,-1,287.6,123.8,53.4,171.5,1\n663,-1,352.2,1.8,54.1,147.8,0.999\n663,-1,1342,914.8,86.4,166.2,0.996\n663,-1,1501.4,163.3,50,171,0.968\n428,-1,1221.5,30.8,62.1,118.7,1\n428,-1,940.1,5.4,63.6,167.6,1\n428,-1,686.8,205.8,79.1,114.4,1\n428,-1,358.6,109,54.6,178.1,1\n428,-1,448.1,233.6,80.9,203.2,1\n428,-1,109.4,349.6,54.7,190.6,1\n428,-1,1673.9,81.8,64.1,174.7,1\n428,-1,841.2,1,53,135.8,1\n428,-1,1718.8,457.1,79.1,210.1,1\n428,-1,1286.8,507.8,72.5,208.1,1\n428,-1,749.1,557.6,77.1,255.6,1\n428,-1,283.5,616.9,95,255.1,1\n428,-1,1009.2,22.9,54.7,161.7,1\n428,-1,538.2,71.3,57.8,167.2,1\n428,-1,285.5,129.9,53.9,165.4,1\n428,-1,1573.9,614.9,91.5,245.6,1\n428,-1,798.2,150.3,54,173.9,1\n428,-1,1759.3,137.6,57.1,167.8,1\n428,-1,220.5,250.3,53,181.4,1\n428,-1,382.3,644.4,71.5,241.4,1\n428,-1,869.6,558.3,103.8,240.6,1\n428,-1,431.2,107.7,55.9,165.3,1\n428,-1,357.5,1.9,69.3,127.1,1\n428,-1,220.4,138.1,75.3,164.4,1\n428,-1,715.3,89.6,62,175.2,1\n428,-1,946.1,571.6,86.5,223.3,1\n428,-1,424,1.2,43,127.8,0.999\n428,-1,1854.1,422,66.9,187.6,0.999\n428,-1,722.9,1.5,50.4,112.5,0.999\n428,-1,1788.8,71.7,79.6,178.5,0.998\n428,-1,988.6,930.4,83.7,150.6,0.911\n428,-1,455.2,58.4,65.6,187.5,0.611\n465,-1,1222,31.2,62.2,118,1\n465,-1,687.2,205.7,78.8,113,1\n465,-1,934.9,1,58.3,148.7,1\n465,-1,1007.3,1,53.7,157.9,1\n465,-1,451.7,190.4,69.5,198,1\n465,-1,240,680.7,96.4,254.9,1\n465,-1,1809.4,368.4,84.4,215.1,1\n465,-1,1650.5,349,61,195,1\n465,-1,1705.9,456.9,93.8,210.7,1\n465,-1,274.8,207.8,52.7,178.9,1\n465,-1,359.1,110.2,54.2,177.6,1\n465,-1,1731.4,170,62.7,160.5,1\n465,-1,876.2,1,54,131.9,1\n465,-1,803.9,147.8,47.2,173.5,1\n465,-1,1673.6,52.9,65.9,174.6,1\n465,-1,334.9,713.6,74.1,247.1,1\n465,-1,518.1,77.5,59.2,175,1\n465,-1,1506.9,2.7,57.9,108.6,1\n465,-1,1541.8,607.2,77.3,244.4,1\n465,-1,808.9,583.9,91.7,249.9,1\n465,-1,217.8,136.2,62.2,160.2,1\n465,-1,118.7,347.7,53.3,185.7,1\n465,-1,753.8,94.4,52,144,1\n465,-1,897.9,617.6,111.4,246.2,1\n465,-1,981.1,633.9,88.1,223.5,0.999\n465,-1,1474.4,564.9,82.1,205.6,0.999\n465,-1,446.1,41.3,73,184.4,0.999\n465,-1,416.3,2.4,43.8,155.2,0.999\n465,-1,713.7,89.8,51.9,167,0.997\n465,-1,286.2,127.3,52.3,163.4,0.997\n465,-1,1027.1,922.9,85.9,158.1,0.996\n465,-1,431.7,141.9,49.2,176.3,0.391\n465,-1,1732.9,71.5,51.7,160.4,0.164\n639,-1,1220.7,31.9,62.3,117.5,1\n639,-1,687.7,205.9,78.5,114.2,1\n639,-1,1481.3,5.3,60.2,143.4,1\n639,-1,801,145,64.5,172.9,1\n639,-1,340.7,314.3,67,203.5,1\n639,-1,546.4,114.4,63.5,172.4,1\n639,-1,1708.1,454.9,100.2,213.8,1\n639,-1,359.1,110.1,51.8,174.8,1\n639,-1,494.2,538.5,96,244.6,1\n639,-1,1574.4,589.1,95.8,235.3,1\n639,-1,262.8,241.8,58.3,188.7,1\n639,-1,1622.2,195.1,68.9,187.2,1\n639,-1,206.2,229.3,61.4,200.2,1\n639,-1,752.5,81.7,44.7,155.2,1\n639,-1,419.5,115.8,55.5,156.5,1\n639,-1,287.5,126.4,50.6,170.5,1\n639,-1,417.3,2,59.9,146.1,1\n639,-1,460.5,92.2,50.2,178.1,0.999\n639,-1,354.6,1,56.3,131.7,0.999\n639,-1,489.8,57.7,47.1,162.1,0.994\n639,-1,236.5,135.2,43,165.9,0.951\n639,-1,1504.6,960.9,78.1,120.1,0.246\n605,-1,1221.6,30.5,61.5,119.5,1\n605,-1,687.1,205.8,79.2,114,1\n605,-1,1480.9,3.6,61,145.4,1\n605,-1,801.1,145.7,64.5,170.1,1\n605,-1,363.7,275.6,66.2,198,1\n605,-1,1619.5,2.5,55.8,107.6,1\n605,-1,237.7,263.8,63.4,188.2,1\n605,-1,1709.3,457.6,94.9,208.9,1\n605,-1,1646.8,226.3,69.7,197.2,1\n605,-1,1573.9,588.6,97.7,235.8,1\n605,-1,169.6,244.3,59.5,205.5,1\n605,-1,561.5,111.9,51.5,176.7,1\n605,-1,287.2,126.4,52,173.1,1\n605,-1,488.8,93.4,45.9,161.5,1\n605,-1,359.3,113.1,51.8,175.7,1\n605,-1,219.4,137,54.4,160.1,1\n605,-1,433.3,71.7,50.2,170.1,1\n605,-1,1084.6,879.9,123.4,201.1,1\n605,-1,752.6,80.4,43.7,156.2,1\n605,-1,395.1,90.7,50.9,160.5,0.957\n605,-1,619.4,551.8,96.7,256.1,0.22\n1014,-1,1221.7,30.2,62.1,116.2,1\n1014,-1,686.7,206.4,79.8,113,1\n1014,-1,792.3,140.6,75.4,172,1\n1014,-1,496.3,286.3,69.3,188.1,1\n1014,-1,289.9,126.5,53,170.9,1\n1014,-1,384.3,291.1,79.3,199.7,1\n1014,-1,1229,154.2,59.7,169.3,1\n1014,-1,1575.4,590.6,102.3,235.9,1\n1014,-1,842,281.4,67.6,197.6,1\n1014,-1,537.6,122,62.6,169.6,1\n1014,-1,1828.1,212.8,60.1,189.6,1\n1014,-1,1156.1,614.4,89.2,262.1,1\n1014,-1,1468.5,185.5,66.2,164.7,1\n1014,-1,302.1,297.3,62.7,199,1\n1014,-1,231.4,141.4,54,160.1,1\n1014,-1,293.2,489.8,92.1,208.5,1\n1014,-1,927.5,270,68.2,207.4,1\n1014,-1,1720.2,455.5,79.1,210.4,1\n1014,-1,751.6,72.7,54.2,162.6,1\n1014,-1,1692.7,177.7,55.5,166.7,1\n1014,-1,1727.6,675.1,101.9,244.9,1\n1014,-1,380.6,471,63.3,225,1\n1014,-1,437.4,166.7,67.8,195.5,1\n1014,-1,313.7,2.7,40.3,128.2,1\n1014,-1,588.1,552.4,87.9,243.1,1\n1014,-1,355.3,898.5,96.3,182.5,0.999\n1014,-1,390.6,169.8,53,166.4,0.997\n1014,-1,503.5,104.9,52.7,143.8,0.98\n1014,-1,434.7,74.7,63.7,166.5,0.162\n1014,-1,385.7,1,58.2,154.3,0.158\n434,-1,1221.8,30.4,61.6,118.7,1\n434,-1,938.4,5.3,62.5,165.1,1\n434,-1,686,205.8,80.5,113.2,1\n434,-1,1318.2,521.4,69.9,202.5,1\n434,-1,358.6,107.4,52.9,179.6,1\n434,-1,449.1,226.7,78.8,201.9,1\n434,-1,1714.9,460,82.2,205.7,1\n434,-1,1009,21.6,54.1,158,1\n434,-1,845.4,1,53.9,135.1,1\n434,-1,110.7,350.7,53.8,188.6,1\n434,-1,1682.1,86.6,67.1,177.4,1\n434,-1,279.8,623.8,89.8,253,1\n434,-1,759.9,561.5,81.1,256.2,1\n434,-1,284.9,129.2,54.3,166.7,1\n434,-1,1756.2,145.7,60.8,166.1,1\n434,-1,798.2,150.5,53.6,173.1,1\n434,-1,228.8,245,52,174.9,1\n434,-1,378.6,651.6,69.2,243.2,1\n434,-1,1567.5,614,86.5,245.6,1\n434,-1,1848.1,416.4,72.9,192.1,1\n434,-1,534.7,72.1,54.8,165.7,1\n434,-1,873.3,570.4,106.6,242.2,1\n434,-1,361.7,1,64.3,129.3,1\n434,-1,421.3,1,45.5,128.1,1\n434,-1,431.6,110.6,57.1,172.2,1\n434,-1,954.4,582.6,84.8,218.8,1\n434,-1,221.8,138.2,71.1,158.2,1\n434,-1,713.4,87.2,58.8,178,0.999\n434,-1,726.4,2.5,47.9,107.6,0.991\n434,-1,759.4,83.7,42.3,156.7,0.99\n434,-1,1762.5,73.5,83.9,175.4,0.988\n434,-1,997.6,929.8,83.8,151.2,0.94\n434,-1,462,53.3,57.5,187.7,0.218\n34,-1,1207.4,29.7,74.4,120.2,1\n34,-1,686.5,205.8,80.1,113.8,1\n34,-1,388.1,372.4,90.6,236.6,1\n34,-1,1362.3,566.6,104.6,245.2,1\n34,-1,1486.3,69.7,56.4,149.7,1\n34,-1,704.2,1.8,56,158,1\n34,-1,1723.4,457,75.3,210.4,1\n34,-1,957.4,198.5,77.8,181.1,1\n34,-1,187.6,371.1,68.5,199,1\n34,-1,215.1,126.1,48.5,166.2,1\n34,-1,485.2,164,88.7,193.1,1\n34,-1,795,149.9,61.5,174.1,1\n34,-1,102.8,548.7,84.3,250.4,1\n34,-1,283.9,124.3,54,171.1,1\n34,-1,356.2,108.1,54.8,175.6,1\n34,-1,1836.2,249.9,68.5,190.5,1\n34,-1,868.2,141.4,56,183.6,1\n34,-1,1010.1,157.8,79.5,180.4,1\n34,-1,1.9,814.9,61.5,235.9,1\n34,-1,1359.1,185.8,50.6,164.8,1\n34,-1,451.5,58.2,48.9,168.9,1\n34,-1,916,156,45.6,166.6,0.999\n34,-1,1588.1,232.6,55.9,176.6,0.999\n34,-1,410,79.7,49.3,158.4,0.99\n896,-1,1221.4,30.2,61.7,118.5,1\n896,-1,687.2,205.9,78.9,114.4,1\n896,-1,793.3,138.9,76.5,173.8,1\n896,-1,1485.3,102.6,58,147.6,1\n896,-1,479.4,186.9,63,181.5,1\n896,-1,300.4,668.6,87.8,253.1,1\n896,-1,1107,17.2,54.1,154.9,1\n896,-1,1426.9,1,51.5,150.9,1\n896,-1,1574.8,590.6,103.8,235.6,1\n896,-1,558.9,116.1,58.9,174.8,1\n896,-1,338.9,347,78.8,184.2,1\n896,-1,1722.5,454.3,76.3,213,1\n896,-1,302.9,161.5,67.3,191.9,1\n896,-1,1594.8,47.5,50.2,157.5,1\n896,-1,882.2,453.2,67.3,227.7,1\n896,-1,468.1,1.6,52.1,151,1\n896,-1,753,70.6,54.7,163.2,1\n896,-1,421.9,331,55.3,201.9,1\n896,-1,1708.1,70.1,55.3,174.9,1\n896,-1,965.1,436.2,86.7,231.6,1\n896,-1,397.3,184,58.8,177.4,1\n896,-1,241.2,133.2,57.5,170.1,1\n896,-1,1748.3,679.2,89.6,237,1\n896,-1,254.1,1.5,53.4,118.6,1\n896,-1,313.4,1.2,48.5,128.5,1\n896,-1,1498.3,1,61.2,145.3,1\n896,-1,414.9,56.3,55.9,177.4,1\n896,-1,1333.5,916,95.6,165,0.999\n896,-1,355.3,171.2,40.4,167.1,0.074\n786,-1,1221,29,62.8,119.8,1\n786,-1,687,204.5,80.1,114.6,1\n786,-1,1723.7,453.1,75,212.9,1\n786,-1,547.4,113.1,62.1,178.8,1\n786,-1,1575.9,589.5,99.5,233.8,1\n786,-1,1486.6,24.6,58.9,147.6,1\n786,-1,292,499,78.5,232,1\n786,-1,476.2,82.5,60.8,177,1\n786,-1,781.8,128.5,55.1,180,1\n786,-1,278.2,170.2,58.9,192.8,1\n786,-1,1442.2,66.8,50.7,163.2,1\n786,-1,447.2,223.2,54.1,186.8,1\n786,-1,749.9,72.6,54.4,161,1\n786,-1,391.5,226.4,67.4,178.1,1\n786,-1,336.4,190.4,50.7,173,1\n786,-1,234.2,134.3,50,164.1,1\n786,-1,581.6,575.5,70.5,250.7,1\n786,-1,254.3,1,52.3,120.2,1\n786,-1,1038.8,641.2,75.9,250.6,1\n786,-1,1102,617.6,78.6,244.4,1\n786,-1,424.2,83.8,55.5,167.4,1\n786,-1,451.9,3.5,43.2,94.2,0.137\n491,-1,1221.2,31.1,62.7,117.2,1\n491,-1,686.2,205.7,79.9,113.8,1\n491,-1,999.2,1,55.6,139.8,1\n491,-1,1498.8,1,57.6,124.7,1\n491,-1,1733.1,181.5,68.7,174.2,1\n491,-1,1695.2,458.4,102.2,210.4,1\n491,-1,801.2,602.6,93.2,257.9,1\n491,-1,1811.7,172.5,70.8,182.8,1\n491,-1,305.6,192.4,49.3,169.3,1\n491,-1,461.7,155.7,66.7,195.5,1\n491,-1,874.7,1,53.7,128.8,1\n491,-1,931.5,1,55.9,132.3,1\n491,-1,801.2,143.2,54.1,176.1,1\n491,-1,138,338,65.9,188.3,1\n491,-1,409.4,160.7,59.5,180.9,1\n491,-1,215.2,723,98,268.8,1\n491,-1,301.6,757.8,79.8,259.3,1\n491,-1,920.4,657.5,112.2,248.6,1\n491,-1,1539.9,600.5,85.1,241.3,1\n491,-1,1692.6,43.5,52.4,165.7,1\n491,-1,359.3,109,54.5,177,1\n491,-1,218.3,136,62.4,164.9,1\n491,-1,1635.1,31.1,59.9,175.5,1\n491,-1,1762.4,346.6,79,214.9,1\n491,-1,448.6,19.8,76,181.9,1\n491,-1,714,94,59.6,165.4,1\n491,-1,1628.5,326.3,60.8,193.5,1\n491,-1,503.9,91.4,64.7,170.7,0.999\n491,-1,1611,588.4,74,221.4,0.999\n491,-1,409.6,9.3,45.5,163.2,0.999\n491,-1,1009.9,674.4,72.2,232.6,0.993\n491,-1,753.5,98.8,47.7,141.9,0.916\n491,-1,289.5,134.3,49,160.2,0.811\n932,-1,1221.4,29.7,61.8,119.6,1\n932,-1,686.8,205.8,79.8,113.4,1\n932,-1,793.6,140.1,75.4,173.5,1\n932,-1,449.3,214.1,69.9,190.8,1\n932,-1,1127.8,48.7,58.7,170.9,1\n932,-1,1485.8,1,61,123.9,1\n932,-1,1576.4,591.5,101.8,237.2,1\n932,-1,555.9,116.1,58.5,174.8,1\n932,-1,1477.6,117.9,60,163.2,1\n932,-1,1269.6,806,96.6,275,1\n932,-1,1719.7,455.2,80.4,211.2,1\n932,-1,1424.8,1.7,47,125.8,1\n932,-1,750.4,71.4,56.2,161.2,1\n932,-1,861.7,401.4,62.3,209.7,1\n932,-1,946.5,382.4,76.1,220.5,1\n932,-1,239,133.2,56.2,167.5,1\n932,-1,1620.3,79.1,56.1,166,1\n932,-1,315.2,730.9,89.2,262.9,1\n932,-1,1734.9,113.2,56,175.3,1\n932,-1,473.8,24.1,54.6,151.1,1\n932,-1,330.8,380.4,78.4,196.5,1\n932,-1,401.9,373.6,62.1,206.8,1\n932,-1,1747.4,675.2,92.6,246.5,1\n932,-1,302.6,161.4,67,199.8,1\n932,-1,252.9,1,55.3,120,1\n932,-1,365.1,215.6,64.4,185.6,1\n932,-1,427.7,66.3,61.4,181,1\n932,-1,316.3,4.4,40.9,122.3,0.347\n233,-1,1221.6,30.4,63.2,118.7,1\n233,-1,685.8,207.4,81,111.9,1\n233,-1,1489.9,64.9,54.6,151.6,1\n233,-1,380.1,545.9,96.4,238.6,1\n233,-1,705.4,1,55.3,159.6,1\n233,-1,798.2,153.4,57,172.6,1\n233,-1,1580.4,1.4,58,142.6,1\n233,-1,107.7,350.3,52.2,189.5,1\n233,-1,1177.4,127.7,51.8,159.3,1\n233,-1,437.2,186.5,78.8,208.7,1\n233,-1,1095,125.8,66.1,182.2,1\n233,-1,288.3,125.8,56,173.1,1\n233,-1,355.8,106,54.5,179.3,1\n233,-1,210.9,125,57,168.9,1\n233,-1,1721.1,456.6,78,212.3,1\n233,-1,1359.4,569.5,105.1,239.7,1\n233,-1,516.5,121.4,50.5,178.1,1\n233,-1,505.4,348.7,72.5,215.9,1\n233,-1,922.6,126.8,71,184.2,1\n233,-1,220.6,488.2,58,207,1\n233,-1,836.5,333.9,77.5,195.1,1\n233,-1,168.5,697.4,97.6,260.1,1\n233,-1,779.9,326.8,75.9,207,1\n233,-1,590.7,355.8,60.7,196.3,1\n233,-1,113.5,634.7,87,252.7,0.999\n233,-1,934.5,900.3,72.2,180.7,0.992\n125,-1,1221,30.1,62.9,119.9,1\n125,-1,356.5,105.1,55.9,179.9,1\n125,-1,1102.6,145.4,68.3,171.7,1\n125,-1,1487.7,69.1,56.2,149,1\n125,-1,108.6,350.7,49.8,187.3,1\n125,-1,399.3,776.3,97.8,274.2,1\n125,-1,704.3,1,56.4,158.4,1\n125,-1,425,282.9,77.6,220.5,1\n125,-1,288.9,127.3,54.3,169.2,1\n125,-1,1721.3,456.7,77.2,211.1,1\n125,-1,1358.8,567.1,105.1,244.9,1\n125,-1,215.5,125.2,51.7,169.1,1\n125,-1,912.9,211.2,72.3,190.1,1\n125,-1,539.4,63.7,50.1,170.3,1\n125,-1,1343.1,180,59,187.6,1\n125,-1,523.8,245.8,74.3,202.4,1\n125,-1,1222.4,176.6,43,167.8,1\n125,-1,782.3,215.1,64.9,189.3,1\n125,-1,478.2,168.8,58.4,163.5,1\n125,-1,102.1,657.4,64,223.7,1\n125,-1,447.8,1,52.7,145.1,1\n125,-1,377.7,2.3,47.3,146,1\n125,-1,479.4,41.1,59.3,163.7,1\n125,-1,831.6,233.2,54,173,1\n125,-1,694.9,204.2,69.7,112.7,0.999\n125,-1,107.6,553.5,75.5,227.3,0.92\n125,-1,1095.9,928.9,83.2,152.1,0.822\n779,-1,1220.8,28.7,62.9,118.6,1\n779,-1,687.7,204.5,78.7,115.2,1\n779,-1,545.9,114.9,62.8,174.6,1\n779,-1,782.4,134.7,57.8,172.9,1\n779,-1,1723.6,452.2,76,214.4,1\n779,-1,1489.8,15.9,59.8,151.6,1\n779,-1,1575.5,590.2,100.9,235.1,1\n779,-1,291.9,486.6,77.3,229.5,1\n779,-1,1445,74.1,52.3,168,1\n779,-1,448.7,209.2,54.4,191.3,1\n779,-1,390.1,220.3,71.4,177.4,1\n779,-1,276.6,171.2,56.2,194.3,1\n779,-1,330.7,188.7,56.4,175.6,1\n779,-1,473.2,79.3,59.4,166.7,1\n779,-1,1572.7,77.2,59.8,171.5,1\n779,-1,749.9,74.2,54,159.3,1\n779,-1,234.3,134,51,165.1,1\n779,-1,255.3,1.1,51.8,119.7,1\n779,-1,1048.4,646.8,78.9,254.9,1\n779,-1,562.9,571.2,75.9,253.8,1\n779,-1,1118.6,633.8,82.5,253.1,1\n779,-1,418,78.1,55.3,169.7,1\n779,-1,357.9,104.6,48.3,193.5,0.709\n274,-1,1222.1,31.8,62.2,117.6,1\n274,-1,687.2,206.9,78.3,111.1,1\n274,-1,387.9,15.6,61.3,157.1,1\n274,-1,1641.5,21.7,57.9,153.7,1\n274,-1,290.4,130,54.5,169.9,1\n274,-1,455,152.2,75.2,204.4,1\n274,-1,354.9,107.4,53.2,177,1\n274,-1,1035.8,102,65.9,184.8,1\n274,-1,1720.9,456.8,78,212.7,1\n274,-1,108.3,349,50.7,190,1\n274,-1,942.1,87.2,67.9,181.7,1\n274,-1,1110.4,96.3,58.2,168.4,1\n274,-1,703.9,1.8,54.5,156.9,1\n274,-1,795.7,150.6,61.1,171,1\n274,-1,219.8,130.6,54.4,161.5,1\n274,-1,389.2,464.4,82.4,232.7,1\n274,-1,1472,39.8,54.8,152.7,1\n274,-1,190.6,574.5,88.7,250.9,1\n274,-1,231.6,431.8,61.5,199.7,1\n274,-1,265,781.4,88.5,272.9,1\n274,-1,807.5,367.7,88,215.2,1\n274,-1,1421.2,572.6,101.5,248.5,1\n274,-1,725.6,337.8,67.1,181,1\n274,-1,861.9,110.8,43.5,153.7,1\n274,-1,876.9,383.8,77.2,190.9,1\n274,-1,564.3,405.4,63.5,216.2,1\n274,-1,752.4,101.5,47.2,172.9,1\n274,-1,473.3,394.5,71,222.8,1\n274,-1,514.1,114,51.2,176.5,1\n274,-1,944.6,919.9,83.1,161.1,0.946\n284,-1,1221.4,31.5,62.5,118.8,1\n284,-1,687.1,207.2,78.3,112.2,1\n284,-1,1022,98.7,61.6,182.8,1\n284,-1,353,109.8,53.9,177.2,1\n284,-1,287.5,128.9,56.1,174.5,1\n284,-1,1100.2,93.7,51.1,164.1,1\n284,-1,456.1,143.7,72.3,207.7,1\n284,-1,1720,459.3,78.7,208.7,1\n284,-1,941.1,81.1,63.6,175.7,1\n284,-1,1657,28.3,57.3,155.8,1\n284,-1,1469.3,30.9,54.9,150.4,1\n284,-1,400,21.5,55.8,163.4,1\n284,-1,390.6,452.6,83.6,229.7,1\n284,-1,108.4,351.9,50.4,189,1\n284,-1,704.3,1,54.9,158,1\n284,-1,214.2,578.9,87.4,252.4,1\n284,-1,796,149.1,61.2,174.1,1\n284,-1,1440.8,582.9,94.7,244.2,1\n284,-1,222.9,130.8,52.7,162.1,1\n284,-1,282.8,802.5,95.6,278.5,1\n284,-1,234.6,415.7,58.3,190.8,1\n284,-1,885.1,398.7,76.3,197.5,1\n284,-1,515,108.6,51.9,178.1,1\n284,-1,551.8,423.8,66.8,211.6,1\n284,-1,750.9,105.7,48.2,165.5,1\n284,-1,841.6,110.9,51,155.8,1\n284,-1,813,378.4,86.4,217.7,1\n284,-1,764.1,348.9,67.8,181.8,1\n284,-1,465.8,404.1,65.8,228.3,1\n284,-1,943.4,921.2,85.5,159.8,0.953\n455,-1,1221.8,30.9,61.6,118.2,1\n455,-1,936.3,1,58.4,155,1\n455,-1,445.5,209.3,72.3,192.6,1\n455,-1,686.4,206.3,80.4,113.5,1\n455,-1,358.5,104.8,55.7,183.5,1\n455,-1,1009.3,9.5,52.8,155.6,1\n455,-1,113.3,349.4,55,189.4,1\n455,-1,1709.8,455.9,90.5,211.1,1\n455,-1,1415.3,546.6,93.9,222.6,1\n455,-1,1738.8,158.6,62.3,168,1\n455,-1,523.1,74.9,55.2,173.3,1\n455,-1,286.8,127.3,54.9,169.6,1\n455,-1,1551.5,612.5,74.6,243.5,1\n455,-1,261.9,224.2,52.9,176.5,1\n455,-1,345.7,685.8,71.3,250.5,1\n455,-1,1833.6,388.8,81.1,205.9,1\n455,-1,889.2,600.5,114.5,241.4,1\n455,-1,866.4,1.1,55,138.5,1\n455,-1,1660.4,360.1,67.4,194.8,1\n455,-1,802.3,151.2,45.6,171.9,1\n455,-1,247.2,658.6,96.8,262.2,1\n455,-1,797.7,577.7,87,249.6,1\n455,-1,219.8,138.2,58.8,160.4,1\n455,-1,753.7,93.8,53.4,153.4,1\n455,-1,1508,1,55.1,107.1,1\n455,-1,974.6,615.8,83.6,227.5,0.999\n455,-1,419.7,1,44.1,153.3,0.999\n455,-1,446.3,37.3,71.3,198.7,0.998\n455,-1,1026.1,921.3,84.8,159.7,0.997\n455,-1,427.6,133.9,51.5,152.7,0.98\n455,-1,714.5,92.2,50,169.7,0.976\n455,-1,358.9,8.3,60.3,140.4,0.494\n455,-1,1712.9,55.4,59.4,219.9,0.445\n455,-1,737.7,4.2,46.7,78.7,0.071\n270,-1,1221.4,31.1,62,118.9,1\n270,-1,381.4,9.7,61.6,159.9,1\n270,-1,687.4,206.5,78.5,112.5,1\n270,-1,290.6,128.4,55.8,171,1\n270,-1,1635.4,19.5,61,150.1,1\n270,-1,381.1,477.1,88.8,234.5,1\n270,-1,455.8,154.4,74.4,211.4,1\n270,-1,940.6,90.8,69.2,182.7,1\n270,-1,355.1,106.5,53.7,179.1,1\n270,-1,1118.8,98.6,56.7,169.5,1\n270,-1,108.5,351.1,51.1,189.4,1\n270,-1,1721.2,456.5,77.3,212.4,1\n270,-1,796,150.6,61,173.2,1\n270,-1,1476.1,43.7,53.7,149.3,1\n270,-1,704.7,1,54.2,156.9,1\n270,-1,1043.9,103.5,62.1,185.2,1\n270,-1,218.4,126.7,55.5,166.5,1\n270,-1,1412.2,565.7,101,251.4,1\n270,-1,709.8,329.6,66.8,192.3,1\n270,-1,234,434,60.4,199.5,1\n270,-1,179.4,571.5,87.7,249.2,1\n270,-1,251.7,772.6,95.6,268,1\n270,-1,805.6,361.1,87.7,219.2,1\n270,-1,874.7,375.6,75.2,198.1,1\n270,-1,512.5,116.8,53.7,172.4,1\n270,-1,564.6,403.7,66.2,210.1,1\n270,-1,866.1,109.5,44,152.9,1\n270,-1,477.3,390.2,73,226.8,1\n270,-1,755.2,103.8,46.3,170,0.999\n270,-1,943,915.8,83.5,165.2,0.829\n280,-1,1221.9,31.5,61.5,118.3,1\n280,-1,686.9,207.8,78.7,112.1,1\n280,-1,1650.6,27.4,57,154.1,1\n280,-1,397.7,20,57.9,161.5,1\n280,-1,1028.1,99.6,62.6,186.2,1\n280,-1,391.9,464.6,84,224.1,1\n280,-1,288,129,55.8,173.1,1\n280,-1,454.7,146,75.5,207.5,1\n280,-1,354.8,110.1,52.7,176.5,1\n280,-1,1721.2,457.7,77.7,211.6,1\n280,-1,1471,34,54.2,148.1,1\n280,-1,108.4,351.2,50.6,188.5,1\n280,-1,941.6,82.9,65.2,176.2,1\n280,-1,704.6,1,54.1,157.6,1\n280,-1,794.6,148,61.5,174.3,1\n280,-1,749.7,338.7,64.5,192,1\n280,-1,1432.4,583.6,97.4,242.1,1\n280,-1,223,132.2,53.1,160.9,1\n280,-1,1106.3,94.5,51.1,163.5,1\n280,-1,232.8,420.3,59.7,199.3,1\n280,-1,555.8,414.6,65.6,213.7,1\n280,-1,203.1,578.4,83.2,251.4,1\n280,-1,851.3,113.8,45.7,155.6,1\n280,-1,274.3,806.2,93.1,259.8,1\n280,-1,882.7,390,75.2,196.6,1\n280,-1,809.1,373.3,88.7,214.5,1\n280,-1,751.4,105.8,46.4,166.2,1\n280,-1,515,110.2,51.8,177.2,1\n280,-1,468.5,399.5,67.3,226.5,1\n280,-1,945.3,919.8,85.7,161.2,0.704\n548,-1,1221.5,30.8,61.7,118.8,1\n548,-1,687.2,206,78.7,114.5,1\n548,-1,1491,4.5,58.2,142,1\n548,-1,384.2,219.2,62.4,192.1,1\n548,-1,782.4,144.3,67.9,174.5,1\n548,-1,1715.2,455.2,86.1,211.1,1\n548,-1,1787.9,230.2,68.4,180,1\n548,-1,1664.8,286.6,90.1,208.3,1\n548,-1,875.5,1,53.7,108.8,1\n548,-1,988.6,1.4,51.3,98.6,1\n548,-1,289.1,122.2,52,173.6,1\n548,-1,529.3,108.1,59.9,177.1,1\n548,-1,768.2,597.8,98.6,253.1,1\n548,-1,1659.5,2,53.2,157.4,1\n548,-1,181.8,307,71,188.9,1\n548,-1,1594.7,1,55.4,156.5,1\n548,-1,251.3,873.9,81.7,207.1,1\n548,-1,454.2,102.3,65.2,185.3,1\n548,-1,218.9,135.3,58.3,159.3,1\n548,-1,1594.6,583.7,68.8,240.6,1\n548,-1,359.4,108.1,55.6,179.6,1\n548,-1,928.6,1.4,56.9,99.4,0.999\n548,-1,132.6,270.3,58.8,218.7,0.999\n548,-1,753.2,83.9,49.1,154.8,0.999\n548,-1,1070,775.5,94.4,244.6,0.998\n548,-1,413,39.1,48.6,181.6,0.993\n548,-1,1002.1,770.9,110.7,235.3,0.529\n548,-1,414.3,140,42.2,162,0.358\n256,-1,1221.5,30.8,61.7,118.6,1\n256,-1,686.8,206.3,79.5,114.2,1\n256,-1,1619.7,8.6,59.2,151.7,1\n256,-1,287.9,129.9,56.6,170.2,1\n256,-1,357.6,107.9,51.9,177.8,1\n256,-1,390.2,499.5,88.4,233.6,1\n256,-1,211.4,125.9,57.8,167.6,1\n256,-1,1479.7,53.9,54.7,153.5,1\n256,-1,108.4,351,50.8,191.2,1\n256,-1,798.3,152.3,59.8,174,1\n256,-1,936.8,107.3,71.2,184.6,1\n256,-1,1721.5,458.4,77.3,210.7,1\n256,-1,1388.4,567.6,104.3,244.1,1\n256,-1,451,164.7,76.1,211.1,1\n256,-1,704.3,1.1,54.7,157.5,1\n256,-1,227.8,456.1,60.2,200.2,1\n256,-1,1143.9,106,51.5,168.6,1\n256,-1,1066,113.4,58.5,181.8,1\n256,-1,863.1,356.9,77,193.7,1\n256,-1,894,110.9,47.5,152.2,1\n256,-1,795.6,348.8,84.1,207.4,1\n256,-1,229.8,740.4,91.1,270.7,1\n256,-1,512.4,118,56.1,174.7,1\n256,-1,139,568.4,88.1,243.8,1\n256,-1,488.1,371.6,72.9,230.3,1\n256,-1,577.3,382.1,65.4,212.6,1\n256,-1,760.3,100.2,50.7,174.7,0.999\n256,-1,368.5,2.4,55.9,161.3,0.999\n256,-1,933.1,911.6,77.5,169.4,0.994\n627,-1,1221.6,29.1,62.8,118.8,1\n627,-1,687.2,206.2,79.2,112.9,1\n627,-1,1480.8,6,60.4,142.8,1\n627,-1,800.2,144.1,66.9,173.2,1\n627,-1,344.8,294.1,69.2,205.9,1\n627,-1,356.5,113.9,53.4,171.8,1\n627,-1,1574.3,588.1,97.1,236.2,1\n627,-1,1711.9,455.9,92.4,209.7,1\n627,-1,1623.9,201.6,77.4,199.1,1\n627,-1,549.2,110.9,60.5,176.2,1\n627,-1,184.5,232.2,72.2,207.2,1\n627,-1,287.4,126.1,53.1,168.8,1\n627,-1,533.2,543.6,92.5,239.6,1\n627,-1,500.3,76.3,46,155.7,1\n627,-1,351.8,1,55.4,124.2,1\n627,-1,754.1,79.6,44.6,152.8,1\n627,-1,252.3,248.4,59.4,185,1\n627,-1,413.3,105.8,50.4,154.6,1\n627,-1,421,1.9,59.7,124.4,1\n627,-1,234.2,134,48.7,161.3,0.999\n627,-1,451.9,85.3,46.9,172.3,0.999\n627,-1,1587.1,1,55.6,92.6,0.999\n627,-1,1111.6,921.2,100.6,159.8,0.994\n627,-1,955.3,936.7,70.6,144.3,0.096\n305,-1,1221.6,31.8,61.5,118.5,1\n305,-1,1457.4,15,53.6,146.1,1\n305,-1,687.1,206.5,78.4,113.5,1\n305,-1,276.3,582.5,94.9,248.1,1\n305,-1,1688.8,44.7,57.1,154.6,1\n305,-1,413,33.2,57.1,165,1\n305,-1,1719.3,458.4,80,211.2,1\n305,-1,934.7,57.4,66.5,176.7,1\n305,-1,108.5,351.4,52.2,189.2,1\n305,-1,354.9,109.2,55.8,178.4,1\n305,-1,236.4,389.2,60.6,196.4,1\n305,-1,794.4,148,61.5,179.7,1\n305,-1,453.5,127.4,72.4,202.5,1\n305,-1,705.3,1,53.6,158.2,1\n305,-1,217.6,128.8,54.6,166.8,1\n305,-1,533.4,448.9,67.9,215.1,1\n305,-1,1479.9,595.5,91.3,245.8,1\n305,-1,1005.4,81.4,60.7,182.6,1\n305,-1,281.3,131.7,53.7,171.2,1\n305,-1,1069,82,52.5,165.8,1\n305,-1,822.3,412,87.9,218.3,1\n305,-1,737.9,100.7,45.4,170.8,1\n305,-1,886.6,423.8,71.6,192.8,1\n305,-1,315.7,855.9,98.5,225.1,1\n305,-1,388.9,409.4,83,226.9,1\n305,-1,453.7,432.2,65.3,233,0.999\n305,-1,510,101.2,46.5,177.8,0.999\n305,-1,934,911.9,71.9,169.1,0.992\n303,-1,1221.9,32.5,60.5,117,1\n303,-1,262.1,581.8,106.3,252.9,1\n303,-1,1685.7,43.8,56.6,153.7,1\n303,-1,686.9,206.4,79.6,114.4,1\n303,-1,1459.1,16.9,52.1,148.1,1\n303,-1,935.9,59.8,67,176.9,1\n303,-1,1719.5,457.8,80,211.7,1\n303,-1,108.6,349.2,51.7,192.2,1\n303,-1,412.2,32.1,55.1,164.5,1\n303,-1,236.7,391.3,61,196.8,1\n303,-1,794.6,149.6,61.4,177.4,1\n303,-1,354.2,110.1,56.3,178.6,1\n303,-1,453.5,127.9,73.7,203.7,1\n303,-1,705.8,1.2,52.6,157,1\n303,-1,1007.1,83.1,59.2,180.2,1\n303,-1,218.1,130.7,55.4,165.6,1\n303,-1,1475.7,597.4,90.4,243.5,1\n303,-1,282,131.7,54,170.8,1\n303,-1,532.7,449.7,68.2,207.9,1\n303,-1,1074.1,84.1,50.6,163.6,1\n303,-1,821.7,404.8,88.7,221.2,1\n303,-1,310.4,849.6,100.7,231.4,1\n303,-1,387,420.3,79.9,223.8,1\n303,-1,738,101.4,48,172.8,1\n303,-1,887.6,417.5,72.6,201.3,1\n303,-1,456.8,427.8,65.5,234.8,0.999\n303,-1,510.9,102.4,46.9,172.4,0.999\n303,-1,935.6,912.3,68.3,168.7,0.994\n995,-1,686.7,205.9,79.7,113.5,1\n995,-1,792.9,140.5,75,172.3,1\n995,-1,1221.3,30.5,62.3,121.6,1\n995,-1,1799.7,184,71.2,188.3,1\n995,-1,1471.6,176.5,65.1,162.8,1\n995,-1,400.6,281.4,67.3,195.7,1\n995,-1,1195.1,126.9,61.5,175.7,1\n995,-1,502.9,264.1,64.8,184.5,1\n995,-1,1673.3,151,58.8,174.2,1\n995,-1,290.1,124.5,51.6,170.1,1\n995,-1,1577.2,590.2,102.5,236.9,1\n995,-1,838.8,306.2,68.5,197.6,1\n995,-1,231,134.8,54.4,166.6,1\n995,-1,329.8,851.4,95.8,229.6,1\n995,-1,751.9,72,54.9,162.8,1\n995,-1,1721,453.3,78.6,215.8,1\n995,-1,300.6,461.2,84.5,202.4,1\n995,-1,920.5,298.9,72.4,207.2,1\n995,-1,543.6,118.3,57.9,171.9,1\n995,-1,1179.8,654.4,88.7,266.1,1\n995,-1,386.6,449.1,66.1,221.7,1\n995,-1,312.9,276.6,65.6,196.3,1\n995,-1,503.5,80.9,56.4,158.5,1\n995,-1,314.1,1.4,46,129.5,1\n995,-1,1739.2,674.4,95.2,247.7,1\n995,-1,440.9,68,59.4,172.2,1\n995,-1,386.2,166.9,70.4,188.9,0.999\n995,-1,1438.4,3.2,57.5,78.6,0.88\n995,-1,602.9,567.4,106.6,222.3,0.369\n544,-1,1221.8,30.6,61.7,119.6,1\n544,-1,686.9,205.8,78.9,114.3,1\n544,-1,1490.1,3.6,58.8,142.4,1\n544,-1,1670.4,285.8,83.7,206.1,1\n544,-1,781.4,142.9,66.8,174.8,1\n544,-1,387.4,213.7,60.8,187.7,1\n544,-1,990.8,1.4,52.4,104.1,1\n544,-1,1715.5,457.4,84.6,209,1\n544,-1,1659.9,2.3,53.8,158.9,1\n544,-1,876.5,1.7,53.1,108.8,1\n544,-1,289.7,125.6,51.7,170,1\n544,-1,1782,227.3,67.6,178.3,1\n544,-1,177.9,307.1,66.7,192.2,1\n544,-1,783.7,596.2,88.1,257.5,1\n544,-1,526.2,107.9,60.2,175.5,1\n544,-1,1596.4,1,54.6,155.7,1\n544,-1,452.4,104.5,69.3,183.6,1\n544,-1,218,135.2,59.6,158.4,1\n544,-1,1591,584.2,70.4,239.3,1\n544,-1,256.5,861,79.9,220,1\n544,-1,359,115.1,54.2,169,1\n544,-1,929,1.2,55.5,101.9,1\n544,-1,410,45,47.3,161,0.999\n544,-1,129.8,271.5,55.4,217.1,0.998\n544,-1,1067.4,769.1,91.4,249.7,0.993\n544,-1,752.9,83.7,46.2,150.5,0.991\n544,-1,991.2,756.7,118.7,261.7,0.805\n544,-1,1029,943.8,76.9,137.2,0.094\n703,-1,1222,30.5,61.5,117.5,1\n703,-1,686.8,206.4,79.7,113,1\n703,-1,1482.3,6.1,58.5,148.1,1\n703,-1,562.4,108.1,53.8,180.2,1\n703,-1,1712.1,456.8,95.1,206.7,1\n703,-1,1603.4,140.2,69.4,182.4,1\n703,-1,1476.4,130.6,51.3,174.9,1\n703,-1,414.8,151.1,74.2,165.3,1\n703,-1,484.8,140.9,47.6,182.1,1\n703,-1,1574.2,587.8,97,235.8,1\n703,-1,476.1,23.7,44.6,140.1,1\n703,-1,359.7,108.9,50.6,174.2,1\n703,-1,296.9,381.5,75.1,215.1,1\n703,-1,1223.6,817.7,92.3,261.5,1\n703,-1,1308.9,789.6,92,271,1\n703,-1,802.7,139.2,47.2,176.7,1\n703,-1,750.2,81,50.1,155.1,1\n703,-1,385.3,542.4,68,246,1\n703,-1,1014,1,61.7,88.4,1\n703,-1,256.2,199.1,59,196.2,1\n703,-1,408.8,24.6,58.2,164,1\n703,-1,304.5,209.7,58.5,184.1,1\n703,-1,227.8,133.7,52.7,166.1,1\n703,-1,837.7,929.7,77.5,151.3,0.427\n238,-1,1220.8,30.9,63,120,1\n238,-1,686.1,207.6,79.7,111.9,1\n238,-1,794,151.9,62.4,175.3,1\n238,-1,1485.5,62.5,54.8,153,1\n238,-1,1587,3,57.7,140.6,1\n238,-1,1089.3,121.3,62,185.9,1\n238,-1,381.6,537.5,90.8,235,1\n238,-1,212,126.4,55.1,167.8,1\n238,-1,704.5,1,55.8,159.4,1\n238,-1,108.6,348.2,51.3,192.1,1\n238,-1,288.2,126.9,56.4,172.6,1\n238,-1,442.9,182.4,76.7,206.2,1\n238,-1,356.2,106.8,53.7,179,1\n238,-1,1720.5,461.4,78.1,206.5,1\n238,-1,1362.2,567.5,107.1,243.5,1\n238,-1,1170.3,125.2,51.8,162.1,1\n238,-1,926.7,121.4,68.6,188.9,1\n238,-1,179.4,703.4,87.7,256.9,1\n238,-1,516.5,119.5,50.9,179.9,1\n238,-1,223.4,479.3,57.5,202.4,1\n238,-1,499.8,353.7,74.5,221.5,1\n238,-1,841.7,339.2,76.9,193,1\n238,-1,783.6,329.6,79.8,208.7,1\n238,-1,589.8,362.3,63.3,203.7,1\n238,-1,931.3,900.3,74.2,180.7,0.996\n238,-1,138.4,661.1,81.6,229,0.992\n238,-1,110.5,564.7,87.9,237.7,0.827\n447,-1,1221.6,30.9,62.2,118.6,1\n447,-1,937.2,1,59,157.6,1\n447,-1,448.6,213.8,71.7,197.3,1\n447,-1,687,206,78.8,113.6,1\n447,-1,1006.4,13,55.1,158,1\n447,-1,359.1,107.5,53.1,179,1\n447,-1,1719,453.5,81.1,214.3,1\n447,-1,112.4,352.1,54.1,186.9,1\n447,-1,1372.6,541.9,90.1,203.9,1\n447,-1,860.7,4,51.5,136.6,1\n447,-1,287.2,125.9,53.4,171.1,1\n447,-1,1745.5,155.9,67.3,167.9,1\n447,-1,1558.1,613,74.7,242.8,1\n447,-1,800.1,152.2,50.1,170.8,1\n447,-1,249.8,222.5,50.7,187.2,1\n447,-1,1672.4,362.3,68.1,193.7,1\n447,-1,884.3,587.6,115.7,247.8,1\n447,-1,258.7,650.6,89.6,251.7,1\n447,-1,356.1,677.7,73.1,245.9,1\n447,-1,221.9,138.2,56,157.1,1\n447,-1,1841.9,394.6,79.1,205.3,1\n447,-1,528.1,72.3,53.7,169.9,1\n447,-1,422.5,1,44.8,136,1\n447,-1,785.2,573.6,77.9,248.9,1\n447,-1,427.3,121.7,61.3,167.4,1\n447,-1,730.6,1,48.7,93.7,0.999\n447,-1,1702.6,105.7,70.8,174.7,0.999\n447,-1,756.5,86.6,46.7,152.4,0.999\n447,-1,359.4,4,63.9,130.5,0.999\n447,-1,708.7,88.2,60.5,174.7,0.998\n447,-1,962,604.1,82.1,218.4,0.992\n447,-1,1017.6,919.7,86.5,161.3,0.987\n447,-1,1508,1,60.4,98.3,0.476\n447,-1,459,39.5,57.4,190.7,0.305\n138,-1,1221.5,30.7,62,118.4,1\n138,-1,1052.2,135.3,82.5,179.5,1\n138,-1,1487.9,68.4,55.9,150.2,1\n138,-1,357,103.5,55.5,182.8,1\n138,-1,703.9,1,56.4,158.5,1\n138,-1,389.5,744.9,101.5,270.5,1\n138,-1,288,125.5,54.6,169.9,1\n138,-1,1721.7,457.4,77.9,210.9,1\n138,-1,537.7,65.1,50.7,163.7,1\n138,-1,1359.2,567.1,104.6,244.4,1\n138,-1,882.6,209.2,80,193.1,1\n138,-1,687.4,206,79.7,115.8,1\n138,-1,108.7,351.8,48.9,186,1\n138,-1,423.2,269.1,75.9,224.3,1\n138,-1,477.9,179.2,60.8,172.5,1\n138,-1,1193.6,169,51.3,163.4,1\n138,-1,219.9,129.6,50.9,159.7,1\n138,-1,1318.4,181.4,52.8,179.8,1\n138,-1,380.8,1.1,48,133.4,1\n138,-1,814,244.2,56.2,174.7,1\n138,-1,143,638.9,77.9,210.2,1\n138,-1,532.5,260.4,56.9,207.1,1\n138,-1,473.4,44.5,54,160.6,1\n138,-1,773.7,230.9,58.8,185.3,1\n138,-1,576.4,248.2,57.6,193,0.999\n138,-1,97.5,544.4,86.8,255.8,0.998\n138,-1,1068,924.8,82,156.2,0.958\n512,-1,1221.2,29.8,62.1,119,1\n512,-1,1493.3,1,60.2,134,1\n512,-1,686.2,207.2,80.8,113.5,1\n512,-1,997.8,1,54.6,123.6,1\n512,-1,157.1,329.6,65.3,188.5,1\n512,-1,397.7,183.6,63.1,186,1\n512,-1,337,169.2,51.2,172.3,1\n512,-1,1674.7,24.9,55.5,169.5,1\n512,-1,1694.8,624.2,90,212.6,1\n512,-1,931,1,56.3,120,1\n512,-1,790.3,140.7,57,178.6,1\n512,-1,883.9,1,52.3,123.3,1\n512,-1,460.4,139.8,70.3,188.4,1\n512,-1,1614.6,14.8,55.2,175.9,1\n512,-1,1610,302.5,61.9,196.1,1\n512,-1,939.2,692.4,122.5,262.8,1\n512,-1,1559.9,599.5,70.9,238.1,1\n512,-1,1713.8,329.2,93.9,195.1,1\n512,-1,1718.6,459.7,81.7,210.4,1\n512,-1,828,608.7,73.4,257.7,1\n512,-1,285.3,797.3,79.1,262.5,1\n512,-1,216.7,133.8,62.6,163.2,1\n512,-1,289,118.5,52.6,178.2,1\n512,-1,1843.4,197,75.1,198,1\n512,-1,451.5,6.5,72.6,180,1\n512,-1,725.9,95.3,69.1,164.2,1\n512,-1,516.6,93.1,56,173.5,1\n512,-1,203,769.4,89.1,271.7,1\n512,-1,1751.1,201.8,59.2,176.6,1\n512,-1,398.2,23.6,47,160.2,0.994\n512,-1,1035.3,722,71.9,233.7,0.418\n512,-1,363.2,106.3,46.5,190.8,0.126\n512,-1,1042.6,937.5,77.5,143.5,0.096\n731,-1,1221.5,30.2,62.1,118.9,1\n731,-1,687.1,205.6,78.9,114.5,1\n731,-1,1479.7,5.7,59.6,148.2,1\n731,-1,1470.4,111.4,52.3,167.7,1\n731,-1,259,188.4,56.7,201.6,1\n731,-1,1710.4,457.4,97.1,206.6,1\n731,-1,551.7,112.8,59.6,181,1\n731,-1,408.8,186.7,69.6,163.2,1\n731,-1,298.8,422.4,75.2,223.3,1\n731,-1,1574,589.3,99.5,234.1,1\n731,-1,783.6,138,55,176.3,1\n731,-1,476,166.8,50.2,183.9,1\n731,-1,412.2,552.9,93.1,249.8,1\n731,-1,1597.7,106.6,58.6,181,1\n731,-1,321.1,197.8,61.9,180.3,1\n731,-1,1225.7,735,96.3,269.2,1\n731,-1,749.6,83.2,51,151.5,1\n731,-1,428.5,42.5,58.6,166.5,1\n731,-1,361.5,108.6,47.2,176.4,1\n731,-1,1154.4,752,82.3,259.4,0.999\n731,-1,319.2,1,49.7,133,0.999\n731,-1,237.2,139.5,53.7,164.8,0.994\n981,-1,686.5,206.4,79.7,112.1,1\n981,-1,1221.5,29.9,62.5,120.9,1\n981,-1,793.3,140.3,72.6,172,1\n981,-1,408.6,267.1,69.3,188.3,1\n981,-1,1178.9,115.6,57.1,163.3,1\n981,-1,492.6,249.7,68.7,186.2,1\n981,-1,335,825.8,94.5,255.2,1\n981,-1,1574.5,589.6,103.5,235,1\n981,-1,841.4,323,70.2,201.6,1\n981,-1,1469.5,160.7,68.6,168.2,1\n981,-1,1720.1,452.9,79.8,214.6,1\n981,-1,1786.5,170.2,69.4,178.8,1\n981,-1,751.8,72.9,56.5,162.3,1\n981,-1,321.4,258.6,62,194.6,1\n981,-1,230.1,138.2,55,162.9,1\n981,-1,305.7,441.1,84.9,211,1\n981,-1,546.9,120.4,54.8,167.5,1\n981,-1,1665,139.3,54.5,167.2,1\n981,-1,1738.8,673.9,95.3,249.4,1\n981,-1,924.6,312.6,66.5,213.3,1\n981,-1,290.4,125.8,52.4,175.9,1\n981,-1,1196.1,684.9,89,265.8,1\n981,-1,393.8,433.9,63.5,214.6,1\n981,-1,446.2,58.1,55.2,188,1\n981,-1,313.7,1.1,47.6,130.1,1\n981,-1,1452.8,1,56.8,95.2,1\n981,-1,363.1,168.2,66.4,188.2,1\n981,-1,381.9,1,53.8,132.9,1\n981,-1,1389.1,1.8,47.9,95.6,1\n981,-1,491.7,62.6,51.9,157.2,0.999\n95,-1,1221.6,30.4,61.5,117,1\n95,-1,400.4,846.8,100,234.2,1\n95,-1,1487.8,69.7,54.5,147.8,1\n95,-1,357.3,107.5,53.6,176.4,1\n95,-1,704.9,1,55.5,159.6,1\n95,-1,423.7,308.3,78.1,230.5,1\n95,-1,1190.6,154.5,70.7,173,1\n95,-1,1722.1,456.8,76.4,210.1,1\n95,-1,1358,565.5,105.5,245.8,1\n95,-1,963.6,197.8,71.6,186.4,1\n95,-1,718.3,191.2,63.5,169.7,1\n95,-1,114.3,350,49.1,194.5,1\n95,-1,101.6,546.4,87.3,255.1,1\n95,-1,503.6,218.7,71.4,195.6,1\n95,-1,293.9,126.5,53.1,170.2,1\n95,-1,209.9,130.1,50.2,165.7,1\n95,-1,1289,198.4,45.7,168.7,1\n95,-1,29.4,698.7,63.9,227.4,1\n95,-1,538.3,64.2,48.4,167.5,1\n95,-1,1455.1,189.4,60.4,178.9,1\n95,-1,864.8,209.2,54.2,166.3,1\n95,-1,438.4,11.7,52.1,158,1\n95,-1,376.9,19.3,50.5,159.7,1\n95,-1,819.6,181.8,62,193.6,1\n95,-1,1406.7,192.8,59,194.6,1\n95,-1,255.9,90.8,61.8,184,0.999\n95,-1,482.4,135.4,56,159.8,0.999\n95,-1,483.3,37.7,57.7,158.6,0.99\n1005,-1,1221.3,30.2,61.1,118.5,1\n1005,-1,685.8,206.2,80.3,113.3,1\n1005,-1,794.7,138.9,73.7,173.8,1\n1005,-1,1210.3,142.6,63.1,173.7,1\n1005,-1,395.8,285.1,70.6,192.5,1\n1005,-1,502.2,274,66,192.9,1\n1005,-1,290.4,126.5,51.9,168.7,1\n1005,-1,1811.7,203.8,68.3,183,1\n1005,-1,1473.7,183.8,63.8,156.9,1\n1005,-1,230.8,137.2,55.3,167,1\n1005,-1,1720.8,452.6,80.5,219.1,1\n1005,-1,1575.4,590.1,102.6,236.3,1\n1005,-1,927.6,279.4,68.1,208.8,1\n1005,-1,309.9,282.1,65.6,201,1\n1005,-1,1681.7,166.1,59.1,174,1\n1005,-1,750.8,73.7,55.4,160.9,1\n1005,-1,842.7,293,65.3,204,1\n1005,-1,299.3,476.6,87.6,202.6,1\n1005,-1,541.3,121.2,59.6,170.7,1\n1005,-1,380.3,461.7,69.6,225.1,1\n1005,-1,1169.1,628.7,88.9,261.3,1\n1005,-1,594.7,552.1,103,244.7,1\n1005,-1,345.2,882.2,89.5,198.8,1\n1005,-1,1742.3,675.4,92,249.3,1\n1005,-1,313.6,2,42.3,128.6,1\n1005,-1,507.7,86.2,52.6,156.1,1\n1005,-1,437.2,66.6,61.6,171.5,0.999\n1005,-1,412.7,165.5,65.5,196.6,0.998\n1005,-1,377.4,171.6,49.5,174.3,0.987\n1005,-1,384,1,54,155.9,0.208\n771,-1,1221.2,29.3,62,118.7,1\n771,-1,687.6,205,78.1,114.9,1\n771,-1,546.5,116.1,62.4,174.2,1\n771,-1,783,134.7,62.3,173.7,1\n771,-1,1723.1,452.4,75.9,215.5,1\n771,-1,1576,590.4,100.5,233.6,1\n771,-1,294.8,475.1,78.6,227.1,1\n771,-1,1450,76.9,54.2,170.2,1\n771,-1,466.6,70.3,61.2,175.5,1\n771,-1,1492.5,18.2,58.9,147.9,1\n771,-1,394,211.3,70.1,171.1,1\n771,-1,274.7,173.3,58,194.4,1\n771,-1,527.9,573.5,97.5,246.1,1\n771,-1,1065.1,668.6,81.3,253.2,1\n771,-1,453,205.1,53.8,186.5,1\n771,-1,750.7,74.4,51.9,160,1\n771,-1,328.8,191,57.4,175.4,1\n771,-1,255.8,1.2,51.3,120.5,1\n771,-1,1572.7,77.3,62.4,176,1\n771,-1,1134.4,641.6,85.4,263.6,1\n771,-1,233.2,139,49.7,159,1\n771,-1,358.3,108.9,52.5,177.3,0.999\n771,-1,410.4,74,55,166.3,0.999\n164,-1,1221.6,29.9,62.2,119.5,1\n164,-1,1489.2,68.6,55.4,150.3,1\n164,-1,979,127.4,72.7,175.2,1\n164,-1,211.8,125.1,55,168.1,1\n164,-1,109.1,347.6,50,191.1,1\n164,-1,356.4,104.9,54.9,179.1,1\n164,-1,288.2,126.7,55.5,172.4,1\n164,-1,703.9,1,56.3,159,1\n164,-1,1358.7,568.1,104.4,244.5,1\n164,-1,687.2,207.7,78.7,111.3,1\n164,-1,1721.7,457.3,77.6,211.7,1\n164,-1,432.8,38.2,62,167.7,1\n164,-1,403,681.2,95.2,256.5,1\n164,-1,417.9,241.8,83.6,221.2,1\n164,-1,101.1,547.3,85.8,253.5,1\n164,-1,537.9,65.2,51.2,169.9,1\n164,-1,1138.3,156.8,48,159.8,1\n164,-1,212.1,594.6,66.4,213.7,1\n164,-1,528,277.8,64.3,215.6,1\n164,-1,564.9,157,66,173.8,1\n164,-1,801,276,63.6,173.6,1\n164,-1,750.2,257.8,67.1,198.8,1\n164,-1,393.2,7,47,112.4,1\n164,-1,797.6,149.6,60.6,172.9,1\n164,-1,854.4,192.8,71.4,186.7,1\n164,-1,499.4,210,56.5,172,1\n164,-1,1282.4,167.4,55.5,168.7,0.998\n164,-1,1249.1,169.5,54.8,160.8,0.997\n164,-1,1025.6,904.8,72.4,176.2,0.982\n164,-1,600.8,270.1,54.1,189.3,0.889\n964,-1,686,206.3,80.4,113.3,1\n964,-1,792.9,140.5,72.9,171.5,1\n964,-1,1766.6,150.3,70.4,179.8,1\n964,-1,1220.9,30.7,61.7,119.4,1\n964,-1,926.2,335.4,74.7,215.4,1\n964,-1,327.6,796.9,89.9,266.2,1\n964,-1,1403.1,2,48.9,103.5,1\n964,-1,1646,112.8,59.3,174.1,1\n964,-1,1154.7,86.3,61.9,172,1\n964,-1,1471.1,148.9,65.7,162.7,1\n964,-1,1574.2,588.5,105,237.1,1\n964,-1,1721,453.7,79,213.8,1\n964,-1,751.4,69,55.5,165.8,1\n964,-1,848.1,348.4,66.3,204.7,1\n964,-1,417.9,247.6,70.8,195,1\n964,-1,487.7,231.8,64.3,177.9,1\n964,-1,1218,727.9,94.8,267.3,1\n964,-1,1460.8,1,62.7,103.9,1\n964,-1,392.9,415.6,65.6,214,1\n964,-1,443.8,74.6,52.1,179.7,1\n964,-1,333,243.6,64.6,189.2,1\n964,-1,229.9,138.5,55,164.3,1\n964,-1,549.4,119.1,55.5,170.2,1\n964,-1,314.6,421.9,82.7,202.3,1\n964,-1,1742,676.2,95.4,250.4,1\n964,-1,290,124.9,53.5,173.8,1\n964,-1,313.3,1,48.6,129.2,1\n964,-1,483.4,52.5,55.3,161.6,0.999\n964,-1,433.7,3,49,140.9,0.997\n964,-1,237.8,5.2,52.3,118.6,0.278\n964,-1,385.1,2.2,49.7,119.8,0.203\n675,-1,1222.2,29.7,61,119.8,1\n675,-1,687.5,206.6,79.2,113.6,1\n675,-1,1481,5.7,60.2,143.8,1\n675,-1,482.2,126.1,47.7,173.8,1\n675,-1,564.6,111.1,49.6,178.1,1\n675,-1,360.7,116.2,49.3,164.9,1\n675,-1,315.1,354.3,69.7,210.3,1\n675,-1,801.9,144.8,63.2,173.4,1\n675,-1,388.4,529,96,252.6,1\n675,-1,1574.6,589.5,98.1,234.4,1\n675,-1,1709.7,455,100.8,213.4,1\n675,-1,1492.4,161.1,53.3,174.2,1\n675,-1,1622.7,154.4,75.9,190.9,1\n675,-1,416.5,136.8,72.4,161.8,1\n675,-1,750.7,79.9,48.5,156.1,1\n675,-1,1103.3,1.1,62.7,104.6,1\n675,-1,406.6,6.4,56.1,156.5,1\n675,-1,230.4,211.6,64.3,197.2,1\n675,-1,1388.4,864.7,97,216.3,1\n675,-1,284.7,224.5,55.9,174.6,1\n675,-1,1301.4,890.7,87,190.3,1\n675,-1,296.6,1,53.9,134.6,0.999\n675,-1,352.8,7,53.2,151.7,0.998\n675,-1,850.7,924.7,64.6,156.3,0.208\n675,-1,290.7,118.7,48.5,173.5,0.191\n961,-1,686.3,206.2,80,113.4,1\n961,-1,1221.4,31.4,62.6,119,1\n961,-1,793.1,141.7,72.8,170.6,1\n961,-1,1765.4,152.2,69.6,177,1\n961,-1,1473.4,149.8,62.8,159.6,1\n961,-1,1645.4,108.4,56.8,172.5,1\n961,-1,419.7,242.5,69.1,195.8,1\n961,-1,924.4,341.3,77.4,218.2,1\n961,-1,1574.5,589.4,104.7,235.6,1\n961,-1,1223.8,735.9,93.2,266.8,1\n961,-1,751.1,70.1,56.2,165.2,1\n961,-1,1153.3,84.5,60.3,168.2,1\n961,-1,323.2,784.2,93.4,270.1,1\n961,-1,1721,453.9,78.1,213.2,1\n961,-1,1467.7,1,58.6,105.5,1\n961,-1,442.2,74,54,180.8,1\n961,-1,1406.3,2.1,47.9,104.5,1\n961,-1,229.6,136.5,55.3,167.9,1\n961,-1,391.1,408.9,67.9,215.9,1\n961,-1,847.9,353.8,70,209.5,1\n961,-1,334.5,241.8,65.2,192.6,1\n961,-1,486.6,231.5,62.4,179.1,1\n961,-1,318.8,419,82.7,193.8,1\n961,-1,549.7,118.1,56.2,172.8,1\n961,-1,1741.2,675,92.9,248.7,1\n961,-1,484.1,50.4,53.9,160.9,1\n961,-1,289.3,124,53,171.8,1\n961,-1,312.6,1,48.8,130.6,0.999\n961,-1,240.2,1.7,50.8,117.5,0.996\n961,-1,432.4,11.6,49.3,127.8,0.17\n452,-1,1221.4,31.1,62.2,119.3,1\n452,-1,936.9,1,58.2,157.4,1\n452,-1,445.2,210.8,72.9,195,1\n452,-1,687.3,206.3,78.2,112.6,1\n452,-1,359.2,107.7,53.6,178.3,1\n452,-1,1007.7,12.2,53.7,154.7,1\n452,-1,1713.9,454.3,85.9,212.8,1\n452,-1,111.3,352.6,55.7,186.8,1\n452,-1,1392.2,553.2,100.9,198.8,1\n452,-1,1745.4,155.2,57.9,169.2,1\n452,-1,1553,610,75.5,245.5,1\n452,-1,287.5,126.8,53.6,169.6,1\n452,-1,524,75.1,57,173.3,1\n452,-1,256.3,223.8,52.3,177,1\n452,-1,864.1,1.8,54.8,137.4,1\n452,-1,1834.7,390.1,86.1,204.9,1\n452,-1,346.6,682.7,73.5,247.7,1\n452,-1,800.2,153.1,48.5,165.7,1\n452,-1,1664.3,359.4,67,199.1,1\n452,-1,889.9,598.7,112.4,245,1\n452,-1,251.4,653.1,94.3,256.2,1\n452,-1,792.1,576.6,87.3,247.9,1\n452,-1,754.9,90.8,51.8,153.6,1\n452,-1,219.6,138.4,59.1,159.4,1\n452,-1,419.7,1,44.7,142.9,1\n452,-1,426.2,129.2,57.5,160.2,1\n452,-1,968.7,610.4,84.3,226.1,0.999\n452,-1,1508.3,1,55.9,103.8,0.999\n452,-1,359.9,5.2,62.3,134.4,0.998\n452,-1,1023.5,921.1,85.3,159.9,0.998\n452,-1,714.7,92.1,50.6,169.3,0.989\n452,-1,446.7,31.4,72.1,205.3,0.91\n452,-1,1717.4,126,56.7,163.4,0.221\n405,-1,1222,30.3,61.8,118.5,1\n405,-1,686.3,205.7,79.4,114.8,1\n405,-1,1646.3,50.4,65.8,173.1,1\n405,-1,357.9,103.4,55.2,181.7,1\n405,-1,458.3,267.2,75.2,207.4,1\n405,-1,1770.6,118.4,65.7,171.5,1\n405,-1,945.9,18.9,62,172.2,1\n405,-1,304.2,577.8,84.9,246.3,1\n405,-1,362.1,1,65.1,113.8,1\n405,-1,1718.6,458.8,80.8,206.3,1\n405,-1,549.6,68.4,59.6,171.7,1\n405,-1,828.9,1.3,56.7,128.1,1\n405,-1,219.2,141.7,64.6,155.5,1\n405,-1,796.5,151.7,59.1,171,1\n405,-1,1589.1,618.6,98.3,248.7,1\n405,-1,420.7,601.1,71.4,234.1,1\n405,-1,110.8,347.4,51.7,194.6,1\n405,-1,282.6,129,56.5,165.8,1\n405,-1,1006.1,33.7,55.9,160.5,1\n405,-1,466.7,69,64.9,190.2,1\n405,-1,855.3,522.6,100.8,239.6,1\n405,-1,425,90.1,51,172.4,1\n405,-1,205.9,269.6,53.1,184.2,1\n405,-1,1189.9,484.1,61.4,207.6,1\n405,-1,928.7,541.9,79.7,222.9,1\n405,-1,717.5,1,51.7,134,1\n405,-1,710,91.5,63.3,170.1,0.999\n405,-1,682.2,560,90,239.6,0.999\n405,-1,425.8,1,44.1,107.8,0.995\n405,-1,978,918.4,85.6,162.6,0.977\n250,-1,1221,30.4,62.8,118.1,1\n250,-1,686.7,207.1,78.8,113.2,1\n250,-1,1602,7.6,66.6,147.3,1\n250,-1,796.7,153.3,59.1,172.5,1\n250,-1,392.3,513.3,89.7,245.1,1\n250,-1,211.8,127.8,56,163.5,1\n250,-1,288.1,126.9,54.2,170.2,1\n250,-1,355.5,104.9,55.3,182,1\n250,-1,1480.9,57,53.6,152.3,1\n250,-1,224.6,464.1,59.4,196,1\n250,-1,1152.3,112.6,51.6,166.5,1\n250,-1,108.1,349.9,50.9,191,1\n250,-1,1721,456.7,77.7,211.4,1\n250,-1,1378.2,566,103,244,1\n250,-1,704.4,1.1,54.2,157.8,1\n250,-1,450.2,172.7,75.1,210.4,1\n250,-1,1075.2,115,58.3,182.6,1\n250,-1,935,110.3,71.8,182.3,1\n250,-1,488.6,363.8,75.2,227.1,1\n250,-1,219.3,735.1,88,255.6,1\n250,-1,515.8,117.1,54.2,181.7,1\n250,-1,790.3,346.7,82.2,206.4,1\n250,-1,126.7,567.4,81.5,245,1\n250,-1,855,353.9,79.2,195.1,1\n250,-1,583,377.6,64.3,207,1\n250,-1,764.9,99.1,52.6,170.6,0.999\n250,-1,928.7,904.7,76.5,176.3,0.997\n250,-1,908.3,115.4,46.1,146.1,0.816\n625,-1,687.2,206,79.2,113,1\n625,-1,1221.7,29.3,62.5,118.1,1\n625,-1,1481.3,5.7,60.2,142.7,1\n625,-1,347.4,295.7,67.8,201.8,1\n625,-1,1624,205.8,78.5,196.2,1\n625,-1,802.4,145.6,63.7,170.5,1\n625,-1,1711.5,454.7,92.9,210,1\n625,-1,1573.9,588.5,97.3,236,1\n625,-1,357.5,113.7,53.3,172.5,1\n625,-1,552.3,110.9,57.7,175.6,1\n625,-1,288.1,127.2,52.4,169.1,1\n625,-1,545,542.2,84.3,243.6,1\n625,-1,182.2,234.6,72.5,205.3,1\n625,-1,497.2,80.7,46.5,155.8,1\n625,-1,352.7,1,54.1,122.5,1\n625,-1,249.7,248,59.3,187.5,1\n625,-1,753.9,79.7,43.2,153.2,1\n625,-1,1590.7,1,53.4,93.7,1\n625,-1,233.7,133.7,49.2,163.1,1\n625,-1,409.8,105.2,51.4,156.7,1\n625,-1,450.4,83.9,47.3,170.9,0.999\n625,-1,1113.7,921.6,98.4,159.4,0.996\n625,-1,421.9,3.1,60.3,121.6,0.943\n625,-1,1200.8,944.2,70.6,136.8,0.063\n859,-1,1221.3,29.4,62.5,119.5,1\n859,-1,687.1,206.4,79.2,113.2,1\n859,-1,271.7,614.9,85.1,240.9,1\n859,-1,1677.5,34.3,53.8,158.8,1\n859,-1,797.4,139.5,75,175.9,1\n859,-1,1472.3,68.9,61,157.3,1\n859,-1,486.7,2.1,49.3,114.2,1\n859,-1,1575.3,590.6,102.3,234.7,1\n859,-1,342.5,300,77.5,180.2,1\n859,-1,559.6,116.7,59.2,173,1\n859,-1,1720.5,453.6,79,212.7,1\n859,-1,1078.2,1,57.4,121.4,1\n859,-1,1413.4,21.6,51.5,154,1\n859,-1,752.8,70,54.8,165.3,1\n859,-1,297.5,160.4,73.9,197.6,1\n859,-1,475.2,148.7,58.9,184,1\n859,-1,994.6,496.6,86.2,239.4,1\n859,-1,254.1,1.2,54.4,121.1,1\n859,-1,434.1,293.9,54.3,195.3,1\n859,-1,240.2,134.2,53.3,163.7,1\n859,-1,415.9,146.9,62,175.9,1\n859,-1,918.2,508.4,70.8,235,1\n859,-1,1571.8,13.5,49.8,142.4,1\n609,-1,1221.4,30.7,62,118.9,1\n609,-1,686.9,205.7,79,113.8,1\n609,-1,1481.3,3.8,60.1,144.5,1\n609,-1,801.3,146.2,65.3,169.3,1\n609,-1,363.2,278.2,66.7,198.4,1\n609,-1,1613.2,2.7,54.1,103.5,1\n609,-1,1707.4,457.3,95.7,209.9,1\n609,-1,241,261.9,61.3,183.3,1\n609,-1,1573.7,589.9,98.7,235.9,1\n609,-1,1641,221.3,71.5,198.5,1\n609,-1,172.3,243.8,59.5,198.8,1\n609,-1,594.9,556.7,97.6,228.4,1\n609,-1,560.6,109.3,50.8,179.1,1\n609,-1,358.7,111.7,51.9,175.9,1\n609,-1,288,125.8,51.1,172.5,1\n609,-1,492,93,44.9,155.5,1\n609,-1,220.6,137.1,56.6,159.9,1\n609,-1,437.7,77.7,49.5,164.8,1\n609,-1,753.1,82.7,43.2,154,1\n609,-1,1092.4,885.2,124.9,195.8,1\n609,-1,394.8,88.9,53.6,161.5,0.986\n162,-1,1221.6,30.3,61.4,119.3,1\n162,-1,983,129.6,78.2,171.7,1\n162,-1,212.3,124.2,54.7,170.2,1\n162,-1,1488.9,68.6,55.1,150,1\n162,-1,434.2,38.7,63.4,166.6,1\n162,-1,288.7,126.9,54.9,170,1\n162,-1,356.8,105.1,54.4,178.3,1\n162,-1,109.4,348.9,50.5,189.4,1\n162,-1,407,696.7,92,248,1\n162,-1,1721.6,456.6,77.5,212.4,1\n162,-1,704.7,1,55.7,158.7,1\n162,-1,1358.5,567.1,105.3,245.2,1\n162,-1,687,207.1,78.9,111.9,1\n162,-1,539.4,66,49.6,163.4,1\n162,-1,419.4,244,81.9,221.6,1\n162,-1,101.5,546.4,85.3,254.5,1\n162,-1,208.8,600.9,65.5,214.1,1\n162,-1,528.4,276.3,64.5,213.9,1\n162,-1,389.3,4.7,48.5,115.1,1\n162,-1,1140.1,156.5,48.8,165.3,1\n162,-1,798.9,272.9,63,181,1\n162,-1,750.6,256.6,71.1,197.4,1\n162,-1,797.5,150.8,60.5,170.8,1\n162,-1,497.9,208.6,56.5,168.9,1\n162,-1,597.2,269.6,59.2,191.2,1\n162,-1,1252.5,169.9,55.7,167.5,1\n162,-1,852.4,194,73,190.1,0.999\n162,-1,1028.1,903.6,73.3,177.4,0.986\n162,-1,1286.3,171.8,55.6,170.9,0.975\n162,-1,566.1,154.3,64.9,186,0.915\n556,-1,1221.2,30.3,62.3,120.8,1\n556,-1,687,205.6,78.6,114.7,1\n556,-1,1489.2,3.6,59.2,146.1,1\n556,-1,536.1,112.5,62,174.6,1\n556,-1,378.1,220.5,64.5,194,1\n556,-1,787.6,145.7,65.9,175.1,1\n556,-1,1586.6,4.1,55.2,143.1,1\n556,-1,1803.8,234.1,71.6,181.3,1\n556,-1,1662.8,278.2,81.5,195.6,1\n556,-1,1719.5,455.6,81.4,209.4,1\n556,-1,194.5,296.7,64.9,191.9,1\n556,-1,1658.2,1,55.4,150.4,1\n556,-1,873.1,1,53.4,110.2,1\n556,-1,754.3,592.6,90.7,258.2,1\n556,-1,288.6,121.4,52.2,174,1\n556,-1,217.7,137.1,58.7,158.1,1\n556,-1,140.5,265.8,53.2,213,1\n556,-1,1595.9,588.1,70,241.1,1\n556,-1,986,2,53.1,95,1\n556,-1,245.6,887.8,81.5,193.2,1\n556,-1,753.9,82.1,47.2,154.1,1\n556,-1,358.8,110,55.1,170.7,1\n556,-1,457.8,87.7,66.2,191,1\n556,-1,423.1,141.1,49.4,157.7,0.999\n556,-1,1011.7,781.1,127.1,256.5,0.997\n556,-1,413.9,49.4,49.7,184.2,0.99\n556,-1,1092.6,797.1,84.7,243.1,0.972\n556,-1,929.5,1.5,58.7,95.8,0.917\n556,-1,1026.9,952.8,75.4,128.2,0.129\n556,-1,1878.9,709.2,42.1,212,0.09\n19,-1,687.8,206.2,78.6,113,1\n19,-1,496.4,150.7,99.3,190.6,1\n19,-1,1486.9,69.8,55.4,148.3,1\n19,-1,704.1,2,56.6,157.2,1\n19,-1,1360.7,566.9,106,244.7,1\n19,-1,1203.7,34.4,73,118.3,1\n19,-1,1725,456.8,76.2,210.3,1\n19,-1,794,149.5,63,175.8,1\n19,-1,380.4,386.8,86.4,241.3,1\n19,-1,354.6,103.6,56.2,181.9,1\n19,-1,1024.2,201.2,67.5,183.1,1\n19,-1,101.6,546.3,86.5,254.9,1\n19,-1,204.3,380.9,67.4,199,1\n19,-1,216.5,128.2,47.6,164.7,1\n19,-1,1615,243.2,57.2,190.2,1\n19,-1,284.1,125,55.9,170.2,1\n19,-1,878.2,138.5,60.3,179.4,1\n19,-1,1814.2,227.9,64.1,188.4,1\n19,-1,418.6,81.9,53.5,164.5,1\n19,-1,458.6,64.2,50,171.1,1\n19,-1,1388,190.5,52.3,176.2,0.998\n19,-1,1,846.1,46.7,234.9,0.997\n19,-1,1427.7,237.3,49.8,180.3,0.987\n19,-1,918.9,144.1,44.2,158.8,0.207\n830,-1,1221.2,29.2,62.4,118.7,1\n830,-1,687.2,206,78.6,113.8,1\n830,-1,1639.9,4,57.6,158.4,1\n830,-1,791.2,134.5,68.1,181.8,1\n830,-1,557.5,116.6,62,176.3,1\n830,-1,273.7,565,82.4,245.5,1\n830,-1,1034.1,544.6,95.6,243.4,1\n830,-1,1575,588.1,102.5,236.6,1\n830,-1,1476.4,45.3,59.3,157.3,1\n830,-1,1722.4,452.8,76.3,213.9,1\n830,-1,752.3,71.5,57.3,162.7,1\n830,-1,362.5,272,86.4,179.5,1\n830,-1,1424.3,39.9,48.9,155.1,1\n830,-1,239,133.9,50.7,163.8,1\n830,-1,437.6,258,54.9,193.8,1\n830,-1,291.1,161.7,68.1,199.7,1\n830,-1,958.6,561.8,73.1,236.4,1\n830,-1,474.3,125.4,59.4,177.7,1\n830,-1,422.6,122.8,56.9,175.3,1\n830,-1,252.3,1,54.9,120.1,0.992\n830,-1,349.9,171.1,45.3,178.3,0.987\n135,-1,1221.9,30.7,62.2,117.5,1\n135,-1,1488.1,68.7,55.5,147.8,1\n135,-1,356.8,103.4,55.6,182,1\n135,-1,1721.1,456,78,212.6,1\n135,-1,392.5,747.1,99.4,270.5,1\n135,-1,108.6,350.3,49.9,187.2,1\n135,-1,704,1,55.9,157.4,1\n135,-1,287,126.5,55.2,169.3,1\n135,-1,536.7,63.3,51.2,165.4,1\n135,-1,888.9,209.5,78.3,194.1,1\n135,-1,687.9,205.7,78.1,116.5,1\n135,-1,1067.5,139.6,69.3,177.1,1\n135,-1,1359.1,566.9,104.4,244.8,1\n135,-1,423.5,273.8,76.5,223.6,1\n135,-1,220.2,128,50.3,162.4,1\n135,-1,1200.4,171.5,50.3,165.9,1\n135,-1,477.9,177.3,60.6,171.2,1\n135,-1,379.4,1,49.1,135,1\n135,-1,815.3,243.5,59.8,173.9,1\n135,-1,530.4,255.9,63.1,210.3,1\n135,-1,1323.3,185.7,56.3,176.9,1\n135,-1,476.2,47.6,55.8,156,1\n135,-1,772.7,228.6,61.4,187.5,1\n135,-1,131.5,639.7,71.1,214.9,0.999\n135,-1,571.7,242.6,57.6,196,0.997\n135,-1,100.3,546.9,82.5,253.9,0.995\n135,-1,451.1,3.1,49.3,131.4,0.976\n135,-1,1071.9,925.3,83.9,155.7,0.975\n815,-1,1221.3,29.7,62.5,118.5,1\n815,-1,687.9,205.6,77.6,114.4,1\n815,-1,789.4,135.2,58.7,176.8,1\n815,-1,1723.3,452.6,74.9,215,1\n815,-1,555.9,117.2,62.5,173.6,1\n815,-1,1624.7,1,56.7,147.1,1\n815,-1,1575.3,589.4,101,235.1,1\n815,-1,276,541.8,78.4,242.5,1\n815,-1,281,165.7,63.8,197.6,1\n815,-1,440.4,239,54.2,195.9,1\n815,-1,473.1,108.8,63.5,178.5,1\n815,-1,376.5,259.7,75,178.2,1\n815,-1,1471.3,34.4,64.6,158.4,1\n815,-1,751.3,73.2,57.4,159.8,1\n815,-1,234.8,135.6,51.5,165.7,1\n815,-1,986.9,585.9,71.4,245.5,1\n815,-1,1431.5,50.6,51.4,159.5,1\n815,-1,347.3,178.7,52.4,170.8,1\n815,-1,1061.8,562.9,69.8,244.7,1\n815,-1,426.6,109.1,58.6,166,0.998\n805,-1,1221.3,29.6,62.2,118.9,1\n805,-1,687.1,205.8,79,114,1\n805,-1,1615.1,1,58.7,137.1,1\n805,-1,1723.1,452.6,75.2,214.1,1\n805,-1,279.5,528.3,80.3,239.5,1\n805,-1,547.7,114.8,65.9,177,1\n805,-1,1574.6,590.4,101.1,235.8,1\n805,-1,786.3,129.4,51.9,180,1\n805,-1,278,165.5,60.6,199.2,1\n805,-1,477.3,101.8,65.5,178.8,1\n805,-1,381.7,244,73.7,175.9,1\n805,-1,440.4,233.8,56.8,196,1\n805,-1,233,134,52.4,166,1\n805,-1,1075.2,575.4,77.8,255,1\n805,-1,1475.8,32.8,60.9,153.2,1\n805,-1,1002.9,604.3,72.6,236.1,1\n805,-1,346.2,181.1,51.5,174.5,1\n805,-1,751.3,72.6,56.9,161.5,1\n805,-1,1438.4,54.1,50.7,158.2,1\n805,-1,422.2,100.6,58.9,170.9,1\n805,-1,253.8,2.3,54.2,123.9,0.997\n805,-1,442,1.1,41.3,82.6,0.997\n813,-1,1221.8,29.6,62.5,118.4,1\n813,-1,687,205.6,78.8,114,1\n813,-1,789.1,132.2,56.6,179.6,1\n813,-1,1621.2,2.3,60.2,145.6,1\n813,-1,1723,452.6,75.5,215.4,1\n813,-1,554.3,117.4,62.9,174.2,1\n813,-1,1576.1,589.8,99,235,1\n813,-1,276.7,534.7,77.4,244.2,1\n813,-1,279.1,165.4,63.5,198.1,1\n813,-1,441,237.9,54.6,195.1,1\n813,-1,1472.4,33.5,63.3,157.1,1\n813,-1,378.6,257.9,73.9,178,1\n813,-1,475.8,108.2,62.2,177.2,1\n813,-1,751.4,73.4,57.8,160.7,1\n813,-1,233.9,133.1,51.5,168.8,1\n813,-1,347.2,180.5,53,170.6,1\n813,-1,989.5,588,70.9,248.8,1\n813,-1,1062.5,565.7,74.3,250.4,1\n813,-1,1432.8,53.5,49.8,156,1\n813,-1,425.6,108,60.9,169.8,0.998\n852,-1,1221.2,29.7,62.3,119.1,1\n852,-1,687.2,206.1,79.1,113.5,1\n852,-1,795.6,139.8,78.3,173.9,1\n852,-1,1721.4,452.8,78.3,213.7,1\n852,-1,490.6,1,49,113.8,1\n852,-1,560.3,116.4,58.5,175,1\n852,-1,1574.8,590.6,103.8,234.4,1\n852,-1,1071.4,1.2,60.7,117.3,1\n852,-1,1470.8,61.1,59.9,157.3,1\n852,-1,345,298,77.8,176.2,1\n852,-1,266.1,602.9,82.4,243.5,1\n852,-1,753.2,71.7,54,161.8,1\n852,-1,297.1,160.3,73.5,198.9,1\n852,-1,1413.7,29.5,53.6,153.6,1\n852,-1,1667,30.8,51.5,160.3,1\n852,-1,253.2,1,55,121.9,1\n852,-1,928.1,523,71.9,225.9,1\n852,-1,238.8,131.5,54.7,165.5,1\n852,-1,472.3,141.9,60.7,183.6,1\n852,-1,1008.2,498.9,74.3,239.7,1\n852,-1,435.7,281,53.9,199.7,1\n852,-1,416,140.5,60.6,170.2,1\n43,-1,1212.5,31.1,72.1,117.5,1\n43,-1,686.2,206.3,79.6,113.8,1\n43,-1,391.9,364.8,86.9,237.2,1\n43,-1,1487.2,69.7,55.4,149.6,1\n43,-1,483.3,166.8,96.6,197.9,1\n43,-1,1362.2,566.5,104.2,245.6,1\n43,-1,704.1,1,56.1,158.6,1\n43,-1,1723.1,455.9,75.1,211.9,1\n43,-1,905.2,192.4,95.5,185,1\n43,-1,352.5,105.4,54.5,177.6,1\n43,-1,213.3,128.2,49.8,163.8,1\n43,-1,1010.4,159.6,80,186.1,1\n43,-1,102.3,548.1,85.5,250.5,1\n43,-1,172.5,368.7,68,191.9,1\n43,-1,283.8,126.4,53.6,169.3,1\n43,-1,795.2,148.7,61.7,174.5,1\n43,-1,1339.7,188.5,53.3,165.9,1\n43,-1,861.5,148.7,60.5,181.1,1\n43,-1,1,797.5,67.8,237.3,1\n43,-1,401.5,86.1,54.1,161.3,1\n43,-1,1845.2,260.9,75.4,197.9,1\n43,-1,1493.8,220.8,59,196.4,1\n43,-1,446.3,44.6,53.9,169.7,0.999\n43,-1,489,42.8,48.8,152.2,0.918\n43,-1,543.1,61,40.1,179,0.747\n43,-1,1392.3,219,40.9,167.1,0.187\n368,-1,1222,31.8,61.1,118.2,1\n368,-1,686.6,206.3,79.6,113.2,1\n368,-1,443.7,82.8,68.9,197.9,1\n368,-1,441.4,312.2,72.8,216.3,1\n368,-1,1059.9,434.4,65.3,198.2,1\n368,-1,362.7,524.3,86,228.4,1\n368,-1,1627.1,7.8,57.1,161.5,1\n368,-1,1431.7,2.3,53.3,100.3,1\n368,-1,1021.1,56.8,54.3,165.3,1\n368,-1,1828.1,74.1,62,156.7,1\n368,-1,210.1,140.9,60.4,160.8,1\n368,-1,1758.9,99.8,59.1,154.5,1\n368,-1,109.7,351,52,188.8,1\n368,-1,511.6,89.9,48.3,166.2,1\n368,-1,361.8,111.8,54,172.7,1\n368,-1,1719.1,455.9,80.1,214,1\n368,-1,832.4,1,53.9,110.1,1\n368,-1,286.6,130.7,53.6,169.5,1\n368,-1,955.6,44.2,63.2,175.7,1\n368,-1,796.3,150.8,59.4,173.1,1\n368,-1,1809.8,457.9,65.6,208.3,1\n368,-1,214,312.8,54.9,186.1,1\n368,-1,1578.6,628.5,83.7,245.5,1\n368,-1,911.4,491.8,77.1,207.1,1\n368,-1,537.9,570.4,99.7,247.1,1\n368,-1,466.3,540.7,67.3,228.7,1\n368,-1,760.2,95.4,44.3,143.9,1\n368,-1,848.4,478,84.6,229.1,1\n368,-1,380.8,2.9,44.7,87.5,1\n368,-1,964.1,920.3,78.7,160.7,0.995\n368,-1,927.8,1.8,59.3,153,0.971\n845,-1,1221.5,29.6,62.1,119.2,1\n845,-1,687.7,206.1,78.3,113.6,1\n845,-1,793.9,138.7,79.4,175.4,1\n845,-1,1721.6,453,77.6,213.6,1\n845,-1,557.9,116.6,60.3,175.5,1\n845,-1,1575,589.7,102.2,234.8,1\n845,-1,1469.4,61.4,60.5,154.1,1\n845,-1,265.5,587.7,83.7,245.3,1\n845,-1,1069.9,1,58.1,108.1,1\n845,-1,752.7,70,54.7,164.2,1\n845,-1,1654.4,20.4,55.3,159.6,1\n845,-1,296.1,161.3,71.4,196,1\n845,-1,1415.1,29.6,54.3,159,1\n845,-1,240.8,130.1,52.4,168.5,1\n845,-1,354,285.8,76.4,182.1,1\n845,-1,473.9,137.7,60.6,181,1\n845,-1,436.8,270.7,54.7,204.5,1\n845,-1,936.4,534.1,71.4,240.9,1\n845,-1,253.9,1,53.9,121.6,1\n845,-1,415.1,138.8,59.4,170.2,1\n845,-1,1021.4,514.5,71.6,239.4,1\n18,-1,688.3,206.1,77.7,113.7,1\n18,-1,497.4,151.4,102.1,191.1,1\n18,-1,1486.4,70,55.7,148.1,1\n18,-1,1204.4,33.5,72.4,119.7,1\n18,-1,704.4,2,56.4,156.7,1\n18,-1,1360.8,566.1,105.7,245.8,1\n18,-1,794.8,149.9,61.4,174.1,1\n18,-1,1725,456.9,76,210.6,1\n18,-1,380.2,387.6,86.2,241.6,1\n18,-1,102.1,547.6,85,251.1,1\n18,-1,216.5,127.6,47.6,165.3,1\n18,-1,355.4,103.8,54.8,180.7,1\n18,-1,1026.4,202.1,70.7,183.6,1\n18,-1,1615.8,245.9,58.8,185.3,1\n18,-1,205.4,380.8,67.2,198.8,1\n18,-1,416.7,86.2,55.6,163.2,1\n18,-1,877.5,136,60.8,181.5,1\n18,-1,283.4,124.7,55.9,170.7,1\n18,-1,1814,227.3,63.4,185.9,1\n18,-1,459.3,66.6,48.7,168.7,1\n18,-1,1429,237.2,50.1,169.3,0.999\n18,-1,1391.2,190.9,52,173.2,0.999\n18,-1,1,839.8,45.4,241.2,0.916\n18,-1,919.9,143.3,44,158.9,0.155\n18,-1,246.4,370.6,48.7,191,0.069\n737,-1,1221.7,30.2,62,118.3,1\n737,-1,686.8,205.9,79,114.3,1\n737,-1,1480.9,8.6,61.2,145.1,1\n737,-1,256.8,189.8,58.4,191.9,1\n737,-1,781.1,137.6,55.2,177.2,1\n737,-1,295.8,426.4,76.8,220.4,1\n737,-1,551.6,111.7,59.3,178.8,1\n737,-1,1465.5,109.6,53,168.1,1\n737,-1,401.5,186.9,76.4,162.4,1\n737,-1,476,170,49.3,183.1,1\n737,-1,1713.1,456.4,94.3,209.6,1\n737,-1,1575.5,589.6,99.3,235.4,1\n737,-1,432.4,554.9,83.9,248.1,1\n737,-1,328.2,197.7,58.4,178.9,1\n737,-1,1600.1,103.4,58.7,179.4,1\n737,-1,433.9,47.2,58.2,168.6,1\n737,-1,1218,714.7,85.3,263.4,1\n737,-1,1138.3,741.8,86.1,261.7,1\n737,-1,750.4,84.4,50.7,149.5,1\n737,-1,359.7,109.7,49.8,174.5,1\n737,-1,290.7,130.6,46.7,162.1,0.945\n737,-1,316.6,2.7,46.2,129.8,0.367\n600,-1,1221.2,30.8,62.1,120,1\n600,-1,687,205.7,79.1,113.2,1\n600,-1,1480.8,3.7,61.4,144.4,1\n600,-1,801.8,143.9,63.2,172.8,1\n600,-1,367.5,271.2,63.2,196.4,1\n600,-1,1710.7,455.4,92.1,212,1\n600,-1,1652.1,226,73.4,200.9,1\n600,-1,235.1,266.6,63.3,186.4,1\n600,-1,1627.5,1.4,54.9,113.5,1\n600,-1,561.9,111.1,50.5,180.4,1\n600,-1,1574.9,589.3,96.7,235,1\n600,-1,430.7,72.6,47.4,169.3,1\n600,-1,360.2,107.9,52.4,178.5,1\n600,-1,165.9,245.1,61.1,208.7,1\n600,-1,286.6,126.4,52.3,170.7,1\n600,-1,483.9,103.3,48.3,155.8,1\n600,-1,216.4,138.5,54.8,157,1\n600,-1,752.7,80,44.4,154.4,1\n600,-1,1076.8,868.1,123.6,212.9,1\n600,-1,395.8,95.4,36.9,147.8,0.873\n600,-1,1876.5,278.6,44.5,184.2,0.634\n600,-1,1167.7,885.5,84.7,195.5,0.236\n807,-1,1221.3,29.6,62.2,119.6,1\n807,-1,687.4,205.6,78.8,114.4,1\n807,-1,1616.7,1,58.2,140.5,1\n807,-1,787.2,130.5,51.1,180.6,1\n807,-1,1723.2,453.9,75.4,212.7,1\n807,-1,278.2,528.7,80.3,239.9,1\n807,-1,549.6,113.5,64.9,178.9,1\n807,-1,1574.8,591.3,100.7,232.4,1\n807,-1,276.8,167.1,61.7,197.2,1\n807,-1,475.9,103.9,65.4,180,1\n807,-1,440.7,235.3,57.3,195.5,1\n807,-1,1474.5,34,61.4,153.7,1\n807,-1,380,245.4,74.6,176.7,1\n807,-1,234.4,135.2,50.8,165.2,1\n807,-1,998.6,598.5,72.7,239,1\n807,-1,750.7,73.1,56.7,159.1,1\n807,-1,345.9,180.4,52,174.6,1\n807,-1,1071.6,574.3,77.2,251.8,1\n807,-1,1436.9,52.3,50.9,159.3,1\n807,-1,422,104.5,59.3,167.6,0.999\n807,-1,440.8,1,42.8,83.4,0.999\n867,-1,1221.4,29.7,62,118.9,1\n867,-1,687.2,206.3,79.1,113.2,1\n867,-1,481.5,1.3,49.2,124.8,1\n867,-1,795.8,138.7,78.2,176.5,1\n867,-1,1474.3,73.6,60.9,152.7,1\n867,-1,1086.7,1,56,134.8,1\n867,-1,989.5,479.5,82,235.8,1\n867,-1,1687,44.3,52.5,163.7,1\n867,-1,1575.2,590.6,103.2,234.4,1\n867,-1,1720.5,454,79.4,212.7,1\n867,-1,477.1,155.7,60.4,182.4,1\n867,-1,275,620.5,87.1,255.7,1\n867,-1,557.8,116,59.8,177,1\n867,-1,339.3,310.6,81.2,180.9,1\n867,-1,299.7,160.6,69.9,195.6,1\n867,-1,752.5,69.9,55,164.5,1\n867,-1,1578.8,19.1,47.8,142.9,1\n867,-1,239.6,135.2,52.1,163.3,1\n867,-1,430.4,295.7,55.7,201.7,1\n867,-1,1415.8,17.3,50.2,153.5,1\n867,-1,254.4,1,54.2,120.6,1\n867,-1,907.4,497.3,70,228,1\n867,-1,414.1,156.8,59,177.7,1\n867,-1,357.6,167.7,34.9,166.2,0.061\n226,-1,1221.1,30.7,61.4,119.5,1\n226,-1,685.7,206.9,80.6,113.2,1\n226,-1,796,146.6,61.9,177.3,1\n226,-1,389,555.8,95.1,242.7,1\n226,-1,1492.3,67.3,53.2,149.2,1\n226,-1,432.2,187.9,76.6,215,1\n226,-1,705.2,1,55.5,159.5,1\n226,-1,1190.1,128.9,45.9,161.1,1\n226,-1,356.6,105.8,53.4,179.3,1\n226,-1,287.9,127.1,56.3,172,1\n226,-1,211.2,126,56.3,167.8,1\n226,-1,110,350.8,48.4,188.8,1\n226,-1,1357.1,567.9,105.8,244.7,1\n226,-1,1721.5,456.2,77.9,212.2,1\n226,-1,517.9,121.6,48.7,175.3,1\n226,-1,147.1,681,102.1,258.9,1\n226,-1,1108.2,127.8,63.1,184.2,1\n226,-1,904.8,136.5,77.9,182.3,1\n226,-1,1575.3,1,55.5,141.6,1\n226,-1,508,341.5,70.9,215.6,1\n226,-1,215,500.7,61.7,202.2,1\n226,-1,829.7,328,72.6,188.9,1\n226,-1,771.2,315.5,74.3,201.7,1\n226,-1,80,628.8,99.1,247.3,1\n226,-1,592.6,345.2,62.1,200.3,0.999\n226,-1,976.5,125.7,42,155.3,0.999\n226,-1,936.7,905.8,72.4,175.2,0.994\n499,-1,1221,30.1,63.2,119.5,1\n499,-1,686.6,205.9,80.5,115.1,1\n499,-1,999.2,1,54.9,131.9,1\n499,-1,1496.1,1.3,58.6,131,1\n499,-1,1823.6,178.9,80.1,190.2,1\n499,-1,793.2,141.1,61.7,180.5,1\n499,-1,1652.2,602.2,68.7,207,1\n499,-1,468.3,156.1,62.4,190.6,1\n499,-1,931.7,1,55.4,128.3,1\n499,-1,1545.1,598.7,85.1,241.3,1\n499,-1,1733.9,191,70.6,174.6,1\n499,-1,211.4,740.5,94.6,264.7,1\n499,-1,1684.8,38.7,56.3,166,1\n499,-1,405.7,166.8,60.6,186.3,1\n499,-1,818,607,83,258.5,1\n499,-1,878.3,1.3,52,125.8,1\n499,-1,923.7,675.7,119.7,253.4,1\n499,-1,143.1,335.1,63.5,189.4,1\n499,-1,298.7,772.5,76,261.6,1\n499,-1,317.3,192.7,48.8,161.5,1\n499,-1,1624.1,29.1,58.2,174.7,1\n499,-1,1725.4,453.1,75.5,212.6,1\n499,-1,1623.4,319.9,61.7,192.6,1\n499,-1,217.3,133,64.7,165.7,1\n499,-1,1746.2,336,79.5,218.7,1\n499,-1,507.5,96.2,61,175.9,1\n499,-1,716,92.9,59.9,166.5,1\n499,-1,359.9,112.2,54.8,174.1,1\n499,-1,449.1,15.1,75.8,182.2,1\n499,-1,403,16.4,47.9,160.2,0.999\n499,-1,286.9,126.2,52.9,171.8,0.999\n499,-1,1012.7,691.4,83.3,229.4,0.999\n499,-1,757.2,103.1,42.2,138.4,0.125\n898,-1,1221.2,30.1,61.8,119.1,1\n898,-1,686.7,206,79.8,114.9,1\n898,-1,296.8,670.4,93.6,253.6,1\n898,-1,479,189.6,63.8,180,1\n898,-1,793.8,140.3,75.3,171.4,1\n898,-1,1486.7,101,57,150.3,1\n898,-1,1428.1,1,51.1,147,1\n898,-1,1596.6,49.1,49.8,159.6,1\n898,-1,560.5,116.9,56.9,173.7,1\n898,-1,1574.4,590.6,103.2,235.1,1\n898,-1,1721.8,454.3,77.2,213.2,1\n898,-1,1109.3,19.7,54.7,157.5,1\n898,-1,968.1,435.6,82.8,223,1\n898,-1,392.6,188.5,62,173.9,1\n898,-1,302.4,161.9,66.2,191.3,1\n898,-1,338.5,350.6,77.2,185.7,1\n898,-1,419.6,330.9,57,205.2,1\n898,-1,880.1,450.2,67.1,223,1\n898,-1,1710.7,75.7,55,170.5,1\n898,-1,468.5,3.7,51,149.4,1\n898,-1,754,73.5,53.8,160.4,1\n898,-1,313.3,1.7,49.1,127.2,1\n898,-1,1747.6,679.3,90.5,237.5,1\n898,-1,242.3,133.6,57.3,170.1,1\n898,-1,254.3,1.2,53.2,118.9,1\n898,-1,1499.7,1.2,59.8,144.7,1\n898,-1,1328.7,906.1,94.9,174.9,1\n898,-1,417.9,57,54.7,180.1,0.999\n72,-1,1221.6,31.1,61.4,117.4,1\n72,-1,407.1,330.9,86,231.4,1\n72,-1,687.2,206.5,78.9,115.4,1\n72,-1,1487.3,69.3,55.5,148.9,1\n72,-1,704.5,1,55.9,159.3,1\n72,-1,1361.5,566.1,105.7,246.6,1\n72,-1,136.4,355,58.1,195.9,1\n72,-1,356.3,106.3,55.3,179.6,1\n72,-1,1262.2,176.6,60.7,168.4,1\n72,-1,490.1,201.2,78,189.7,1\n72,-1,1722.1,455.4,77.2,212.1,1\n72,-1,784.3,190.2,79.6,181.6,1\n72,-1,11.2,740.7,67.6,229.7,1\n72,-1,103.3,546.6,85,253.2,1\n72,-1,1436.4,199.8,77.4,196,1\n72,-1,989.6,185.2,69.3,183.2,1\n72,-1,211.4,130.3,51.7,164.4,1\n72,-1,289.4,128.3,52.7,167.7,1\n72,-1,538.3,63.7,47.8,169.2,1\n72,-1,1340.9,208.4,38.5,159.2,1\n72,-1,887.2,187,57,168.8,1\n72,-1,468.7,115.5,59.2,165.4,1\n72,-1,435.9,24.2,53.1,161.3,1\n72,-1,383.1,31.5,52.1,161,1\n72,-1,386.4,909.2,102.7,171.8,0.996\n72,-1,257.2,91.6,53.1,173.1,0.994\n72,-1,852.8,163.9,52.4,179.3,0.896\n877,-1,1221.7,29.5,61.7,118.6,1\n877,-1,687,206.1,79.7,113.1,1\n877,-1,1479.8,85.5,59.7,156,1\n877,-1,1085.9,1.3,62.5,151.2,1\n877,-1,794.8,139.5,75.2,174.1,1\n877,-1,477.4,1.2,48.2,130.2,1\n877,-1,283,639.3,84.5,258.9,1\n877,-1,1722.2,454.4,77.6,212.5,1\n877,-1,1575.4,589.4,103.3,236.6,1\n877,-1,300.9,162.8,69.9,194,1\n877,-1,335.6,318.2,81.1,182.6,1\n877,-1,478.8,166.8,62.6,184.6,1\n877,-1,897.9,479.8,71.3,235.3,1\n877,-1,558.9,116.3,58.7,176.4,1\n877,-1,1575.6,31.3,57.4,152.2,1\n877,-1,1694,51.1,51.2,169.4,1\n877,-1,1420.7,7.4,50.8,152.3,1\n877,-1,752.9,70.2,55.4,164.6,1\n877,-1,986.8,465.2,68.4,231.7,1\n877,-1,253.3,1.1,54.5,121.7,1\n877,-1,409.4,163.7,57.7,172.2,1\n877,-1,429.8,308.6,56.2,201.6,1\n877,-1,240.4,131.7,50.8,166.5,1\n877,-1,1761.6,685,95.1,234.2,0.999\n877,-1,1501.1,8.4,54.1,153.5,0.288\n877,-1,907.3,937.6,76.6,143.4,0.128\n750,-1,1221.1,29.7,62.2,119.6,1\n750,-1,686.8,206.1,79.1,112.6,1\n750,-1,548.9,115.9,62.7,175.4,1\n750,-1,1463.1,95.4,54.7,167.7,1\n750,-1,780.4,135.3,60.6,176.5,1\n750,-1,260.6,186.5,59.1,199,1\n750,-1,1715.5,455.8,88.4,208.9,1\n750,-1,1575.9,589.4,100.1,234.9,1\n750,-1,303.1,446.5,71,224.6,1\n750,-1,461.2,562.5,100.2,247.1,1\n750,-1,1594.2,92.8,60.5,181.3,1\n750,-1,332.6,199.1,56.3,173.8,1\n750,-1,1493.5,15.9,58,140.1,1\n750,-1,465.5,188.1,54.5,185.9,1\n750,-1,444.3,58.8,57.7,168.2,1\n750,-1,404.1,198.6,65,174.1,1\n750,-1,750.2,80.7,50.2,153.2,1\n750,-1,1110.4,708.4,81.2,264.2,1\n750,-1,257.6,1,49.7,122.3,1\n750,-1,1178.3,690.9,89,263.4,1\n750,-1,359.3,111.1,49,166.7,0.999\n750,-1,394,56.4,57.7,170.7,0.987\n750,-1,237.6,143.1,50.4,155.3,0.985\n750,-1,291.7,130.8,44.2,161.2,0.958\n712,-1,1221.7,30,61.6,119,1\n712,-1,686.6,206.1,80.1,113.4,1\n712,-1,1480.9,7.5,57.5,144.6,1\n712,-1,554.6,111.5,59.4,178.1,1\n712,-1,1197.2,795.9,86.5,261.6,1\n712,-1,1600.9,123.2,67.5,184.4,1\n712,-1,1712.1,454.7,96.1,210.9,1\n712,-1,481.6,156.8,50.2,177.4,1\n712,-1,1573.6,589.3,101.9,237.4,1\n712,-1,412.1,166.9,74.2,163.5,1\n712,-1,1475.4,121.3,52.6,179.1,1\n712,-1,360.4,110.4,50,174,1\n712,-1,295.8,397.6,76.8,218.7,1\n712,-1,259.6,195.6,56.7,195.9,1\n712,-1,749.7,80.6,49.8,155.5,1\n712,-1,1284.6,772.9,89.6,274.4,1\n712,-1,391.1,546.2,74.7,241,1\n712,-1,800.5,138.4,46.6,171,1\n712,-1,412.2,32.4,62.7,161.7,1\n712,-1,307.1,207.2,59.4,177,1\n712,-1,471.8,21.9,46,144.2,1\n712,-1,233.2,134.3,50.2,165.8,0.999\n712,-1,982.1,2.8,78.7,82.4,0.863\n469,-1,1222,30.7,61.9,117.8,1\n469,-1,687.1,206.1,78.8,114,1\n469,-1,453.7,190.6,68.9,194.4,1\n469,-1,935,1,57.5,146.8,1\n469,-1,1005.8,1,54.1,153.8,1\n469,-1,1794.8,366.2,92.3,214.2,1\n469,-1,279.6,211.1,51.5,172.8,1\n469,-1,1505.6,1.1,58.3,114.1,1\n469,-1,359.6,107,55.9,179.9,1\n469,-1,1701.4,457.8,97.6,210.2,1\n469,-1,877.4,1,52.4,132.8,1\n469,-1,1644,343.3,62.4,202.8,1\n469,-1,1542.8,611.8,73.2,237.6,1\n469,-1,804.7,144.8,46.7,176,1\n469,-1,236.6,682.7,93.1,262,1\n469,-1,330.6,717.3,75.1,245.6,1\n469,-1,1725.6,167.2,66.6,167.5,1\n469,-1,217.7,137.8,64.4,159.5,1\n469,-1,1667.1,51.2,61.8,173,1\n469,-1,515.2,81,60.8,173.9,1\n469,-1,120.4,345.6,55.3,186.5,1\n469,-1,899.8,625.8,113.1,241,1\n469,-1,809.5,584.7,97.7,256,1\n469,-1,445.4,33.6,73.9,184,1\n469,-1,985.3,644.1,84.7,219.5,0.999\n469,-1,753.3,98.3,54.2,138.6,0.999\n469,-1,713,93.9,54.7,162.4,0.999\n469,-1,1726,64.3,52.3,158.5,0.997\n469,-1,413,4.7,45.1,153.4,0.996\n469,-1,1500,568.1,71.5,202.7,0.992\n469,-1,1027.1,922.6,83.5,158.4,0.992\n469,-1,428.6,145.1,49.3,160.8,0.987\n469,-1,1769,138.7,70.9,170.1,0.984\n469,-1,288.3,130.4,51.3,168.5,0.478\n1012,-1,1221.2,30.1,62.2,115.9,1\n1012,-1,686,206.5,80.8,112.8,1\n1012,-1,792.5,140.8,74.6,170.8,1\n1012,-1,494.2,285.9,70.8,186.9,1\n1012,-1,289.5,126.2,53.3,170.9,1\n1012,-1,1225.1,149.4,60.2,170,1\n1012,-1,387.2,292.9,77.5,195.2,1\n1012,-1,1825.3,208.6,62.8,188.1,1\n1012,-1,1576.4,590.6,101.9,234.4,1\n1012,-1,1154.4,617.8,91.9,255.9,1\n1012,-1,540.1,121.5,60,167.8,1\n1012,-1,844.4,285.4,63.9,194.6,1\n1012,-1,1720.1,455.9,79.7,211.1,1\n1012,-1,1469.4,187.4,65.3,160.8,1\n1012,-1,928.9,273.7,66.9,206.7,1\n1012,-1,751.1,73.5,54.3,161.7,1\n1012,-1,232.3,140.7,52.8,160.6,1\n1012,-1,1733.2,678,96.9,242.5,1\n1012,-1,297.3,485.1,91.4,206.4,1\n1012,-1,304,294.2,64.5,201.3,1\n1012,-1,1691.8,172.8,55.9,170.3,1\n1012,-1,379.7,468.4,63.7,225,1\n1012,-1,435,165.9,63.1,192.5,1\n1012,-1,312.7,1.7,42.7,129.3,1\n1012,-1,587.9,551.7,93.3,242.8,1\n1012,-1,352,892.3,97.3,188.7,0.999\n1012,-1,383.9,175.5,50.6,156.2,0.999\n1012,-1,504.6,99.7,55.9,150.4,0.996\n1012,-1,434,72,62.6,173.8,0.846\n862,-1,1221.5,29.8,61.8,118.8,1\n862,-1,687.3,206.4,79.2,112.7,1\n862,-1,485.5,1,50.3,119.7,1\n862,-1,271.9,612,87.3,250,1\n862,-1,795.1,139.8,77.3,174.8,1\n862,-1,1680.8,35.7,53.4,163.8,1\n862,-1,1473.2,71.3,60.9,154.1,1\n862,-1,341.9,302.5,78.5,183.8,1\n862,-1,1720.2,452.8,80.1,213.1,1\n862,-1,1575,590.4,102.5,234.1,1\n862,-1,1081.2,1.1,57.3,124.5,1\n862,-1,557.9,116,60,173.7,1\n862,-1,297.3,159.4,74.1,199,1\n862,-1,753.1,69.5,55,165.6,1\n862,-1,254.3,1,54,120.9,1\n862,-1,476.1,151.9,59.6,183.1,1\n862,-1,994.1,492.9,83.7,237.7,1\n862,-1,240.3,131.9,52.2,166.2,1\n862,-1,1413.5,20.8,51.4,152.6,1\n862,-1,432.2,295.8,54.3,195.2,1\n862,-1,416.4,151.5,61,176.6,1\n862,-1,1575.8,16.3,48.3,141.7,1\n862,-1,914.3,506.7,72.4,235.4,1\n476,-1,1221.9,30.7,62.6,118.2,1\n476,-1,686.6,206.2,79.2,112.9,1\n476,-1,1000.2,1,58.1,149.9,1\n476,-1,289.6,204.7,51.2,167.9,1\n476,-1,450.9,175.7,73.4,193.1,1\n476,-1,359.8,111.2,55.8,173.3,1\n476,-1,934.1,1,57.2,142.5,1\n476,-1,1691.8,456.9,108.2,212.8,1\n476,-1,1504.2,1,58.2,119.8,1\n476,-1,876.9,1,52.9,132.1,1\n476,-1,1787.8,362.9,89.7,212.9,1\n476,-1,1724.5,176.6,65.9,164.2,1\n476,-1,229.5,699.6,88.4,267.6,1\n476,-1,1535.7,596.4,76.6,244,1\n476,-1,1639.4,339.8,61.7,199,1\n476,-1,217.7,136,64.3,161.2,1\n476,-1,803.9,142.5,46.9,178.4,1\n476,-1,810.3,590.5,90.5,258.9,1\n476,-1,126.5,344.2,57.9,186.8,1\n476,-1,1780.2,151.4,79.1,174.5,1\n476,-1,322,729.5,78.1,254.2,1\n476,-1,910.3,630.7,114.5,250.9,1\n476,-1,446.6,30.5,72.4,180.6,1\n476,-1,513.4,85.9,61.7,173.4,1\n476,-1,1657.4,41.4,60.6,173.8,1\n476,-1,1706.6,52.6,52.4,167,1\n476,-1,713.1,93.4,55.3,164.1,0.999\n476,-1,752.4,99,53.2,140.7,0.998\n476,-1,413.9,6.5,45.6,152.5,0.997\n476,-1,1023.4,926,81.3,155,0.955\n476,-1,991.3,656.3,75.7,224.4,0.944\n476,-1,427.7,150.8,57.3,186.8,0.661\n158,-1,1221.6,30.9,62.2,117.2,1\n158,-1,992,131,78.7,168.6,1\n158,-1,1488.4,67.8,55.6,150.6,1\n158,-1,356.4,104.2,54.7,180.5,1\n158,-1,109.5,349.8,49.8,189.2,1\n158,-1,288.7,125.1,55.2,172.9,1\n158,-1,704.6,1,55.7,159.2,1\n158,-1,213.4,123.8,55,170.1,1\n158,-1,439.1,36.3,61.7,165.6,1\n158,-1,1358.6,566.9,105.4,245.5,1\n158,-1,1721.1,457,77.7,210.8,1\n158,-1,686.4,206.2,80,114.7,1\n158,-1,538.8,64.1,50.1,165.1,1\n158,-1,420.9,249.1,78.4,224.6,1\n158,-1,408.8,700.8,91.6,264.9,1\n158,-1,101.7,545.6,84.7,253.5,1\n158,-1,1149.9,160.1,45.6,157.7,1\n158,-1,592.5,264.3,61.2,195.5,1\n158,-1,1258,170.4,64,176.7,1\n158,-1,801.4,265.5,65.8,178.2,1\n158,-1,202.4,609.1,62.9,214.9,1\n158,-1,530.6,271.8,61.8,209,1\n158,-1,389.2,1.7,45.2,121.2,1\n158,-1,492.9,204.3,60.7,168.9,1\n158,-1,752.9,253.7,69.6,187,1\n158,-1,855.4,201.3,72.1,190.8,1\n158,-1,795.8,147.4,61.6,181.6,0.999\n158,-1,1034.3,907.9,72.2,173.1,0.988\n158,-1,1297.4,175.9,46,171.3,0.211\n216,-1,1220.9,30.3,62.1,119.3,1\n216,-1,686.7,206.8,79,113.3,1\n216,-1,212.3,126.3,55.3,168,1\n216,-1,402.3,578.6,88.9,251.2,1\n216,-1,705.8,1.5,54.7,158.8,1\n216,-1,1492.7,69.6,53,148.4,1\n216,-1,108.8,348.2,50.6,188.1,1\n216,-1,356.7,105.8,52,178.5,1\n216,-1,900.3,144.5,73.2,181.1,1\n216,-1,288.9,126.9,55.1,173.4,1\n216,-1,109.5,663.5,103.9,258.6,1\n216,-1,1129.6,132.3,59.8,189.7,1\n216,-1,1721.6,457.6,77.2,210.9,1\n216,-1,1357,566.5,103.9,245.3,1\n216,-1,427.5,199.8,74.1,214.9,1\n216,-1,1201.8,138.6,44.1,164.1,1\n216,-1,505.7,327,74.9,220.1,1\n216,-1,795.7,154.2,59.3,172.1,1\n216,-1,1002.1,132.2,45.9,157.1,1\n216,-1,520.2,122.2,50.7,180.4,1\n216,-1,220.2,516.1,62.6,205.9,1\n216,-1,815.4,322.1,75.4,191.5,1\n216,-1,833.6,108.6,65.5,175.3,1\n216,-1,36,613.6,106.8,243.4,1\n216,-1,570.6,266.6,54,174.1,0.999\n216,-1,759.3,308.8,77.6,205.4,0.999\n216,-1,946.2,912.9,70.1,168.1,0.994\n668,-1,1221.3,29.3,61.6,119.6,1\n668,-1,687,206.1,79.5,112.9,1\n668,-1,1480.9,5.6,60.7,142.4,1\n668,-1,1710.9,457.1,97,207.2,1\n668,-1,801.7,144.3,63.5,171.8,1\n668,-1,316.4,343.5,71.5,207.5,1\n668,-1,360.5,116.6,49.2,165.2,1\n668,-1,1123,1,65.3,108,1\n668,-1,1574.7,588.9,98,235.4,1\n668,-1,559.1,109.7,52.2,176.9,1\n668,-1,481.5,114.3,47.7,175.2,1\n668,-1,1493.1,165.7,56.7,172.5,1\n668,-1,1621,160.9,76.3,185.1,1\n668,-1,752,80.5,46.4,154.6,1\n668,-1,415.8,124.7,73.9,160,1\n668,-1,408.7,2.6,55.9,156.5,1\n668,-1,226.4,209.3,60.8,203.6,1\n668,-1,278.1,222.9,55.2,186.3,1\n668,-1,416.9,524.9,79.3,253.8,1\n668,-1,1405.8,881.7,101.7,199.3,1\n668,-1,1328.9,903.2,82.8,177.8,1\n668,-1,353.6,4.3,53,150.9,0.999\n668,-1,289.2,124.7,50.6,169.1,0.999\n668,-1,863.5,930.4,71.2,150.6,0.144\n668,-1,307.8,9.6,34.3,123.6,0.099\n145,-1,1221.4,31.4,62,117.5,1\n145,-1,1037.3,136.9,73.2,170.8,1\n145,-1,356.5,102.7,56.2,180.1,1\n145,-1,1488.1,68.6,55.7,149.3,1\n145,-1,108.8,352.5,48.5,185.8,1\n145,-1,420.4,259.9,78.1,221.9,1\n145,-1,704.3,1,56,157.1,1\n145,-1,288.3,126.5,54.4,170.1,1\n145,-1,1721.9,456.6,76.9,211.7,1\n145,-1,394.4,724.3,95.3,267.4,1\n145,-1,538,64.7,50.5,166.1,1\n145,-1,1358,566.9,106.3,245.1,1\n145,-1,686.4,205.9,80.5,115.8,1\n145,-1,1176.7,166.1,51.1,162.4,1\n145,-1,218.6,127.6,51.7,162.2,1\n145,-1,1298.1,175.6,59,180.2,1\n145,-1,868.3,205.5,73.2,191.7,1\n145,-1,807.8,246.5,62.2,184.8,1\n145,-1,531.3,263.8,58.5,201.5,1\n145,-1,383.7,2.1,46.9,131,1\n145,-1,99.7,544.3,87.9,254.9,1\n145,-1,481.8,191.3,60,173.2,1\n145,-1,469.2,35.3,50.3,160.4,1\n145,-1,585.3,252.8,58.8,194.3,1\n145,-1,762.7,235.5,65,192,1\n145,-1,162.9,629.4,75.6,211.9,1\n145,-1,1057.7,919,74.8,162,0.969\n176,-1,1221,30.4,62.2,118.6,1\n176,-1,108.1,351,49.7,187.4,1\n176,-1,1489.5,69.6,54.4,147,1\n176,-1,356.2,104.8,54.9,177.3,1\n176,-1,703.9,1,56.6,159.5,1\n176,-1,212.3,125.4,54.9,168.3,1\n176,-1,1358.6,567.6,104.8,244.1,1\n176,-1,406.4,660.5,93.1,257.4,1\n176,-1,419.9,39.1,57.8,163.2,1\n176,-1,289.3,126.2,54.1,170.7,1\n176,-1,942.3,123.6,72.3,172.5,1\n176,-1,1721.4,457.4,77.2,211.1,1\n176,-1,687.7,207.7,77.5,111.7,1\n176,-1,421.2,232.5,77.5,221.2,1\n176,-1,231.1,580.2,65.5,212.6,1\n176,-1,547.2,150.5,66.6,172.7,1\n176,-1,527,285,61.1,213.9,1\n176,-1,1,611.8,91.8,233.7,1\n176,-1,99.8,548.6,87.2,251.7,1\n176,-1,863.4,182.2,75.1,189.7,1\n176,-1,1215.2,160.4,56.5,178.2,1\n176,-1,794.2,150.4,62.5,170.5,1\n176,-1,797,278.9,64.9,188,1\n176,-1,744.9,266.3,66.5,198.4,1\n176,-1,1112.5,151.6,44.5,161.4,1\n176,-1,1259.8,160.4,49.9,160.7,0.999\n176,-1,1005.1,911,68.8,170,0.963\n176,-1,537.4,67.5,51,161.5,0.462\n790,-1,1221.2,29.1,62.1,119.3,1\n790,-1,687.1,205.3,79.2,113.9,1\n790,-1,547.8,115,61,176.5,1\n790,-1,1723.2,451.9,76.8,215.2,1\n790,-1,477.4,90.5,60.6,175,1\n790,-1,291.7,504.5,79.9,229,1\n790,-1,1575,593,99.9,231.1,1\n790,-1,1486.5,27.7,59.4,148.3,1\n790,-1,277.2,168.7,57.5,195.6,1\n790,-1,782.8,127.2,50.4,182.5,1\n790,-1,1442,65.9,49.9,164,1\n790,-1,446.2,226.5,53.9,186.5,1\n790,-1,749.8,71.1,54.7,160.7,1\n790,-1,388.8,228.8,69,177.5,1\n790,-1,233.3,134.2,50.3,165.2,1\n790,-1,339.7,187.1,48.9,176.8,1\n790,-1,1093.5,605.3,88.6,255,1\n790,-1,253.7,1.2,52.6,122.7,1\n790,-1,591.9,581.8,70.9,240.3,1\n790,-1,422.9,91.1,56.6,164.8,1\n790,-1,1031,633.9,77.3,235.5,1\n790,-1,449.5,4,44.8,90.5,0.236\n350,-1,1221.5,30.2,62,119.9,1\n350,-1,686.8,206.6,79,113.1,1\n350,-1,1740.6,83.4,56.7,148.1,1\n350,-1,1610.6,1,60.6,137.8,1\n350,-1,445.3,91.8,71.6,201.6,1\n350,-1,1444.6,1,51.9,113.1,1\n350,-1,287.4,129.8,54.8,173.6,1\n350,-1,1033.1,62.8,55.1,169.3,1\n350,-1,1003,412.8,65.6,197.6,1\n350,-1,108.9,348,52.4,191.1,1\n350,-1,968.6,54.6,61.7,177.9,1\n350,-1,207.7,138.6,59,163.5,1\n350,-1,1719.9,457.2,78.2,212.6,1\n350,-1,364.3,105.5,55.2,181.4,1\n350,-1,435.7,344.6,72.4,212,1\n350,-1,1552.9,615.9,92.2,244.1,1\n350,-1,795.6,150.2,61.2,172.1,1\n350,-1,1827.5,480.9,68.6,210.9,1\n350,-1,475.5,574.9,87.6,247.2,1\n350,-1,226.3,335.1,58.3,190.3,1\n350,-1,519.5,97.6,38.3,167,1\n350,-1,390.2,494.6,89.2,230.4,1\n350,-1,901.1,471.6,75,204.5,1\n350,-1,844.5,1,48.2,96.3,1\n350,-1,926.1,17.1,59.4,163.3,1\n350,-1,843.4,455.7,83.4,225.9,1\n350,-1,767.8,93.6,41.6,154,0.999\n350,-1,710.1,96,59.3,170.3,0.998\n350,-1,1868.1,64.7,52.9,162.4,0.996\n350,-1,953.2,928.5,76.2,152.5,0.763\n821,-1,1221.7,29.5,62.6,118.7,1\n821,-1,688,205.6,77.3,114.8,1\n821,-1,276.5,552.8,77.7,244.7,1\n821,-1,790.8,136.3,63.5,176.4,1\n821,-1,439.3,253.9,55,193.7,1\n821,-1,556.7,115.8,62.8,174.8,1\n821,-1,1632.1,2.2,53.4,152.6,1\n821,-1,1724.2,452.8,74.3,214.8,1\n821,-1,1578.1,593.7,97.5,234.5,1\n821,-1,1045.2,553.8,84.4,241.1,1\n821,-1,284.2,163.8,67.7,193.1,1\n821,-1,376.1,264.6,70,173.5,1\n821,-1,1427,45.4,51.2,156.9,1\n821,-1,1473.8,43.4,58.5,153.1,1\n821,-1,475.1,116.8,60.3,180.2,1\n821,-1,751.8,71.5,57.6,162.9,1\n821,-1,236.1,135,50.2,165.1,1\n821,-1,972,580.2,76.4,227.5,1\n821,-1,424.6,113.9,58.6,174.9,1\n821,-1,346.7,174.8,50.9,172.7,0.999\n595,-1,1221.8,30.5,61,119.2,1\n595,-1,687,206,79.5,113.6,1\n595,-1,1480.9,3.6,60.7,144.3,1\n595,-1,801.7,143.9,61.8,174.1,1\n595,-1,231.4,269.7,62.9,184.7,1\n595,-1,1633.8,1,54.7,116.5,1\n595,-1,366.9,261.1,67,203,1\n595,-1,1717.9,456,82.5,210.1,1\n595,-1,359.5,109.6,53.3,174.5,1\n595,-1,562,112.6,49.2,175.1,1\n595,-1,164.4,249,60.5,205.1,1\n595,-1,287.4,126.2,52,172,1\n595,-1,1574.5,588.9,94.1,233.2,1\n595,-1,1654.8,232.3,73.5,199.5,1\n595,-1,479.8,103.6,49.9,160.2,1\n595,-1,753.7,82.5,43.6,152.1,1\n595,-1,213.7,137.8,56.7,162.5,1\n595,-1,429,67.6,50.8,171.7,1\n595,-1,1073.5,855.1,119.2,225.9,0.999\n595,-1,1868.3,269.9,52.7,179.1,0.967\n595,-1,1157.4,866.9,91.7,214.1,0.932\n595,-1,993.7,928.7,72,152.3,0.083\n595,-1,308.1,908.1,103.3,172.9,0.082\n148,-1,1221.3,31.4,62.4,117.9,1\n148,-1,1032.1,135.7,65.4,169.3,1\n148,-1,1488.2,68,55.6,149.8,1\n148,-1,356.5,102.8,55.7,179.5,1\n148,-1,704.6,1,55.6,157.1,1\n148,-1,421.5,259.4,75.4,219.2,1\n148,-1,109,351.3,48.6,185.8,1\n148,-1,401.8,724.1,91.2,255.6,1\n148,-1,1722.4,457.4,76.4,210,1\n148,-1,1359.7,566.3,105,245,1\n148,-1,288.1,122.6,54.4,174.6,1\n148,-1,537.9,65.2,50.8,165.1,1\n148,-1,685.4,206.5,82.9,114.1,1\n148,-1,218.6,127.3,52.1,162.4,1\n148,-1,809.5,254.6,62,181.1,1\n148,-1,864.9,203.8,70.9,194.2,1\n148,-1,382.9,1.5,47.8,126.1,1\n148,-1,530.6,266.6,59.5,203.4,1\n148,-1,1290.1,174.4,59,178.6,1\n148,-1,486.3,194.6,57.6,170.6,1\n148,-1,100.1,542.7,89.2,260.8,1\n148,-1,1170.7,163.6,49.2,164.9,1\n148,-1,589,260.4,57.2,191.1,1\n148,-1,760.2,243.9,68.3,190.2,1\n148,-1,172.8,619.5,73.5,213,1\n148,-1,464.5,34.5,48.8,162.9,1\n148,-1,1053.7,918.6,70.8,162.4,0.974\n148,-1,796,146.3,62.1,196.6,0.22\n791,-1,1221.1,29.2,62.5,119.7,1\n791,-1,687,205.6,79.6,113,1\n791,-1,1723.1,452.4,76.6,215.1,1\n791,-1,549,115.7,60,176.9,1\n791,-1,782.5,128.1,51.9,182.8,1\n791,-1,476.9,92.8,61.7,177.3,1\n791,-1,1574.6,591.9,101,234.3,1\n791,-1,1486.2,27.7,59.2,145.3,1\n791,-1,291.5,505.8,78.7,229,1\n791,-1,278.2,167.1,57.9,197.2,1\n791,-1,1441.7,66.1,50.1,163.3,1\n791,-1,232.7,132,51,167.2,1\n791,-1,750,71.4,54.7,160.2,1\n791,-1,445.5,227.6,54,185.2,1\n791,-1,390.9,229.6,66.2,178.4,1\n791,-1,1089,604.2,92.9,258.5,1\n791,-1,340,188,48.2,175.5,1\n791,-1,1028.7,632.1,77.4,241.2,1\n791,-1,253.6,1.3,52.7,122.9,1\n791,-1,594.3,581.3,72.5,242.8,1\n791,-1,423.3,92.6,55.4,164.1,1\n791,-1,449.3,2.2,44.9,92,0.882\n1018,-1,1221.2,29.4,62.2,119.1,1\n1018,-1,686.4,206.7,80,113.6,1\n1018,-1,1236.5,161.3,61.2,171.6,1\n1018,-1,380.5,300.3,77,193.7,1\n1018,-1,791.7,140.8,75,173.3,1\n1018,-1,928.1,264.8,67.5,203.5,1\n1018,-1,494.8,287.9,68.4,191.8,1\n1018,-1,299.3,297.4,62.9,202.8,1\n1018,-1,289.6,128.1,52.7,167.2,1\n1018,-1,1468.2,185.5,64.8,165.9,1\n1018,-1,231.3,140.7,55.1,162,1\n1018,-1,538,121,62.7,171.1,1\n1018,-1,296.4,495.4,83.5,212.5,1\n1018,-1,841.3,276.3,70.3,200.7,1\n1018,-1,1576,590.4,102.1,237.7,1\n1018,-1,1153.3,601.8,88.1,251.3,1\n1018,-1,1721.4,457.6,78.1,206,1\n1018,-1,1699.6,178.3,54.8,170.4,1\n1018,-1,1833.7,221.4,60.7,190.4,1\n1018,-1,750.9,75,54.5,160.9,1\n1018,-1,380.2,477.7,64.9,227.1,1\n1018,-1,1713,684,102.9,233.8,1\n1018,-1,443.9,167.1,77.4,193,1\n1018,-1,585.6,555.2,81,238.8,1\n1018,-1,314.6,2,36.8,129.6,0.999\n1018,-1,399.6,173,53.3,159.4,0.997\n1018,-1,372.6,103.2,59,180.1,0.974\n1018,-1,359.4,910.7,93.5,170.3,0.966\n1018,-1,501.2,119.2,43.4,129.6,0.696\n970,-1,686.3,206.4,79.6,112.5,1\n970,-1,793.5,141,73.5,171.9,1\n970,-1,1221.6,31.2,61.1,119.5,1\n970,-1,1156.9,101.9,63.6,165,1\n970,-1,414.4,250,71.6,190.3,1\n970,-1,1471.5,152,65.8,163.8,1\n970,-1,1650.6,125.1,59.3,173,1\n970,-1,1772.4,157.9,66.9,185.5,1\n970,-1,492.1,237.2,66,183.1,1\n970,-1,1575.1,589.7,102.8,234.8,1\n970,-1,330.2,802,91.5,277.4,1\n970,-1,928.7,324.1,69.4,214.7,1\n970,-1,1719.9,456.1,79.4,209.4,1\n970,-1,550.2,119.1,53.2,169.9,1\n970,-1,1399.7,1.4,46.9,101.9,1\n970,-1,751.8,73,55.6,161.8,1\n970,-1,446,67.8,56.7,182.5,1\n970,-1,229.4,140,55.8,159.9,1\n970,-1,329.4,247.2,64.9,198.6,1\n970,-1,309.3,430.4,86.4,199.4,1\n970,-1,847.3,338.7,65,211.3,1\n970,-1,1211.3,710.4,91.8,268.9,1\n970,-1,1455.3,1,63.2,104.1,1\n970,-1,389.3,413,68.5,221.3,1\n970,-1,1742.4,676.5,95.3,250.9,1\n970,-1,290.6,126.1,53.6,170.3,1\n970,-1,313.7,1.1,48.1,130.8,1\n970,-1,484,54.5,54.6,159.1,0.999\n970,-1,381.1,1,53.7,127.5,0.997\n538,-1,1221.6,29.9,61.8,120,1\n538,-1,1487.1,1.8,58.3,142.5,1\n538,-1,687.1,206.4,77.9,114.1,1\n538,-1,779.1,146.1,63,172.4,1\n538,-1,387.3,202.8,63.7,191.3,1\n538,-1,1685.8,296.8,73.8,201.3,1\n538,-1,288.9,123.9,54,172.8,1\n538,-1,992.8,1.6,53.5,107.5,1\n538,-1,1717.5,457.1,82.3,210,1\n538,-1,173.2,309.9,66.7,195.6,1\n538,-1,879.4,2,52.4,113.3,1\n538,-1,1773,225.4,70.2,176.5,1\n538,-1,1660.8,3.6,53.7,162.2,1\n538,-1,461.1,109.3,65.4,182.2,1\n538,-1,520.4,102.1,60.5,179.8,1\n538,-1,1601.1,1,55.3,163.2,1\n538,-1,800,598,79.4,265.1,1\n538,-1,216.5,136.1,62.4,163,1\n538,-1,928.7,1.3,56.6,108.9,1\n538,-1,1588.7,591.4,66,239.2,1\n538,-1,262.8,843.4,78.3,237.6,1\n538,-1,405.4,47.2,49.4,155.2,0.999\n538,-1,192.5,798.9,98.3,282.1,0.999\n538,-1,974.1,750.1,126.9,256.2,0.999\n538,-1,449.1,1,70.1,168.1,0.997\n538,-1,361.8,115.5,51.7,170.8,0.994\n538,-1,134.1,276.1,44.3,206.6,0.271\n538,-1,1063.2,767.4,77.9,251.4,0.131\n215,-1,1220.9,30.2,61.7,120.2,1\n215,-1,686.9,206.9,78.8,113.1,1\n215,-1,212.4,126.7,55,166.1,1\n215,-1,108.8,349,50.1,187.6,1\n215,-1,705.3,1,55.1,159.9,1\n215,-1,356.6,105.5,51.8,179.1,1\n215,-1,288.9,128.2,54.9,171.6,1\n215,-1,1492.7,69.5,52.8,148.5,1\n215,-1,403.9,579.1,86.1,248.7,1\n215,-1,1721,457.3,77.8,211.6,1\n215,-1,1357.5,567.1,102.5,245.5,1\n215,-1,109.2,664.4,100.4,253.2,1\n215,-1,899.9,143.1,73.8,185.4,1\n215,-1,1130.2,132.8,62.5,189.8,1\n215,-1,425.5,199.6,75.1,215,1\n215,-1,795.7,154.4,59.7,168.9,1\n215,-1,1004,132,46.8,158.1,1\n215,-1,505.5,326,74.5,218.9,1\n215,-1,520.6,123.9,50.7,177.2,1\n215,-1,1201.9,136.7,45,163.6,1\n215,-1,223.3,517.6,59.3,207.1,1\n215,-1,813.6,322.2,74.2,189.8,1\n215,-1,838.8,111.2,64.2,170.3,1\n215,-1,29.7,611.8,101,232.1,1\n215,-1,567.3,266.2,58.4,175.3,1\n215,-1,758.2,306.8,76,206.1,0.999\n215,-1,947.1,911.9,69.6,169.1,0.992\n215,-1,104.1,556.1,64.4,194.7,0.158\n173,-1,1221,30.9,62,117.3,1\n173,-1,108.3,350,50.5,189.3,1\n173,-1,355.7,104.1,55.8,178.7,1\n173,-1,1489.4,68.9,54.6,148.9,1\n173,-1,703.8,1,56.1,158.6,1\n173,-1,212.4,125.8,54.3,167.2,1\n173,-1,1721.1,456.5,77.9,212.1,1\n173,-1,402.9,667.3,96.4,260.2,1\n173,-1,289.2,126.9,54,170.4,1\n173,-1,1357.8,567.4,105.3,245,1\n173,-1,688,208.8,76.4,111.3,1\n173,-1,427.4,41.3,56.2,160.1,1\n173,-1,420.9,235.3,79.8,222.6,1\n173,-1,98.1,550.2,89.2,251.8,1\n173,-1,960,123.5,56.4,174.4,1\n173,-1,550.1,152.5,64.9,171.3,1\n173,-1,228.4,584.5,66.3,212.1,1\n173,-1,1,600.8,69.3,249,1\n173,-1,1218.9,164,62,176.9,1\n173,-1,795.5,148.9,61.5,171.8,1\n173,-1,1117,151.7,44.8,159.3,1\n173,-1,529.6,285.9,59.2,215.6,1\n173,-1,857.6,188.3,78.6,187.2,1\n173,-1,796.9,278.5,63.8,176.3,1\n173,-1,746,262.1,65.8,200.3,1\n173,-1,537.3,65.7,52.3,166.3,1\n173,-1,1263.7,163.4,51.6,159.1,0.997\n173,-1,1008.2,911.3,75.4,169.7,0.986\n173,-1,510.8,223.7,50.6,161.2,0.981\n755,-1,1221.1,29.3,62.8,119.8,1\n755,-1,686.9,205.7,79.1,114.1,1\n755,-1,547.9,117.6,63.7,173.6,1\n755,-1,1715.4,455.7,85.1,209.6,1\n755,-1,781.1,133.6,63.7,178.1,1\n755,-1,1462.4,95.1,53.8,165.5,1\n755,-1,303,451.2,76.5,225.4,1\n755,-1,1575.7,589.9,99.3,232.9,1\n755,-1,483.9,567.8,91.2,248.5,1\n755,-1,263.1,185.4,58.4,200.1,1\n755,-1,462.4,187.2,52.4,190.9,1\n755,-1,330.9,197,56.4,174.9,1\n755,-1,399.7,199.3,66.9,175,1\n755,-1,1495,17.2,59.1,140.6,1\n755,-1,1589.7,87.2,62.9,179.7,1\n755,-1,449.9,64.1,55.1,168,1\n755,-1,258.5,1,49.2,122.7,1\n755,-1,1164.8,672.7,92.3,265.2,1\n755,-1,751.3,78.7,49,153.9,1\n755,-1,1103.1,703,78.7,255,0.999\n755,-1,359.8,108.4,49.1,170.1,0.999\n755,-1,237.1,138.6,50.6,154.7,0.999\n755,-1,397.2,62.5,59,171.8,0.998\n755,-1,291.1,126.8,44.5,169.4,0.868\n523,-1,1221.4,30,62,120.3,1\n523,-1,1487.1,1,59.2,140.3,1\n523,-1,687,206.4,79.3,113.5,1\n523,-1,1720.7,460,78.5,208.3,1\n523,-1,994.8,1.6,53.4,119.3,1\n523,-1,1671.1,18.3,53.3,163.3,1\n523,-1,163.4,322.9,65.5,195.1,1\n523,-1,392.3,187.2,58.5,190,1\n523,-1,288.1,123.2,54.1,174.8,1\n523,-1,928.6,1.5,57.2,117.4,1\n523,-1,465.5,124.8,64.2,184.3,1\n523,-1,1609,5.8,56.5,172.8,1\n523,-1,786.9,142.5,57.5,179.6,1\n523,-1,1707.1,308.9,83.3,212.5,1\n523,-1,823.5,606.9,73.4,258.3,1\n523,-1,216.5,135,63.8,162,1\n523,-1,1571.6,593.4,64.9,246.1,1\n523,-1,270.3,811.9,80.9,267.8,1\n523,-1,515.1,99,59.7,183.9,1\n523,-1,356.5,157.8,51,175.8,1\n523,-1,1758.9,643.2,68.2,216.1,1\n523,-1,1763.8,209.6,61.7,168.9,1\n523,-1,192.3,784.1,95.1,271.6,1\n523,-1,951,720.3,120.4,257.7,1\n523,-1,450.9,2.3,74.2,170.1,1\n523,-1,886.2,1,50.5,115.4,1\n523,-1,1862.3,216.5,58.7,196.3,1\n523,-1,743.6,89.1,59.3,168.3,1\n523,-1,400.8,32.2,47.4,163.1,0.999\n523,-1,1599,289.4,60.7,197.3,0.999\n523,-1,1042.6,737.1,72.9,244.7,0.37\n523,-1,1046.2,934.7,72.3,146.3,0.064\n494,-1,1221.2,30.8,62.7,119.2,1\n494,-1,686.1,206.1,80.3,113.8,1\n494,-1,999.4,1,55,133.5,1\n494,-1,1497.9,1,57.8,127.3,1\n494,-1,1734.7,187.4,68.5,172.5,1\n494,-1,1815.3,174,76.7,186.6,1\n494,-1,1708.1,459,91.6,207.8,1\n494,-1,930.9,1,56.2,131.9,1\n494,-1,875.7,1,52.9,127.6,1\n494,-1,805.9,606,90.8,256.2,1\n494,-1,464.4,151.6,64.8,200,1\n494,-1,800.1,143.1,54.4,174.1,1\n494,-1,213.8,729.2,98,271.2,1\n494,-1,407,163.8,62.4,185.2,1\n494,-1,1691.3,42.2,54.4,167.3,1\n494,-1,301.6,763.6,77.2,262.4,1\n494,-1,138.8,337.3,66.4,189.7,1\n494,-1,1538.9,598.6,89.1,240.3,1\n494,-1,921.2,663,115.8,251.1,1\n494,-1,309.2,186.1,49.6,170.5,1\n494,-1,1627.1,593.2,71,208.3,1\n494,-1,217.2,135.5,63.8,164.8,1\n494,-1,1625.3,326.2,62.9,192,1\n494,-1,449.9,18.7,73.2,179.6,1\n494,-1,1631.5,29.6,57.9,172.9,1\n494,-1,714.2,93.2,60.5,165.2,1\n494,-1,1759.8,343.9,74.7,214.2,1\n494,-1,405.5,10.4,47.8,163.8,1\n494,-1,360.5,107.9,55.2,180.9,1\n494,-1,503.5,93.3,62.5,170.9,1\n494,-1,286.3,125.3,53.7,175,0.999\n494,-1,1008.7,681.7,81.7,232.2,0.998\n494,-1,750.3,97.6,46.6,144.2,0.564\n842,-1,1221.6,29.7,62.2,118.8,1\n842,-1,687.4,206.3,78.9,113.2,1\n842,-1,794.2,138.1,75.7,177.6,1\n842,-1,556.4,116.8,61.8,173.4,1\n842,-1,1649.1,15.8,58.6,160.5,1\n842,-1,1721.5,453.4,78.7,212.3,1\n842,-1,266.4,585.8,82.8,245.6,1\n842,-1,1574.6,589.5,102.3,234.9,1\n842,-1,1069.2,1,55.6,105.1,1\n842,-1,752.1,70.6,56.5,163.6,1\n842,-1,1469.1,61,61.4,153.1,1\n842,-1,240.4,129.1,50.8,171.7,1\n842,-1,296.5,161.7,69.7,194.6,1\n842,-1,1416.4,30.4,53.1,158.7,1\n842,-1,356.4,282,78.1,179.5,1\n842,-1,474.9,136.1,59.8,181.2,1\n842,-1,437,268.3,55.4,205.3,1\n842,-1,254.2,1,53.9,121.5,1\n842,-1,940.5,537.1,70.9,241.3,1\n842,-1,1025.8,515.4,74.1,244,1\n842,-1,414.9,133,60.4,174.8,1\n972,-1,686.2,206.5,79.4,112.8,1\n972,-1,1221.8,31.2,61.4,120.3,1\n972,-1,794.3,141.6,70.8,171.2,1\n972,-1,1775,161.7,67.8,184.8,1\n972,-1,1471.1,151.6,65.8,163.3,1\n972,-1,414.1,252.7,70.8,190.2,1\n972,-1,1159.3,103.8,65.2,168.5,1\n972,-1,490.6,238.1,68.7,188.4,1\n972,-1,1651.5,126.5,60.1,172.1,1\n972,-1,307.5,433,87.2,194.1,1\n972,-1,1574.5,589.3,103.1,236.4,1\n972,-1,334,804.9,90.1,275.3,1\n972,-1,329.2,250.4,63.6,197.8,1\n972,-1,928.9,322.2,68.9,214.3,1\n972,-1,1722.3,453,76.7,214.5,1\n972,-1,230.2,137.7,55.5,163,1\n972,-1,751.6,72.1,55.7,162.9,1\n972,-1,846.8,339.8,64.9,206,1\n972,-1,550.5,118.6,52.9,171,1\n972,-1,390.1,420.3,69.3,220.4,1\n972,-1,1398.1,2.1,46.7,99.4,1\n972,-1,446.6,68.3,56.1,179.3,1\n972,-1,1206.5,706.5,92.8,269.2,1\n972,-1,1452.7,1,63.2,101.3,1\n972,-1,1739.1,673.5,97.4,251.8,1\n972,-1,290,127,54,170.6,1\n972,-1,314.6,1,45.8,129.6,1\n972,-1,486.1,58.4,54.5,158.4,0.999\n972,-1,381.2,1,53.6,126.5,0.999\n972,-1,339.8,168.3,61.7,173.8,0.072\n412,-1,1222,30,61.8,119.1,1\n412,-1,685.7,205.4,80.3,115.1,1\n412,-1,456.6,254.8,79.4,205.6,1\n412,-1,1655.5,59.4,71,169.9,1\n412,-1,358.6,108,54.6,178,1\n412,-1,551.8,69.7,56.9,169.9,1\n412,-1,109.4,347.1,53.1,191.7,1\n412,-1,1719.8,453.7,78.7,210.9,1\n412,-1,1771.5,124.1,60.1,170.3,1\n412,-1,406.2,613.4,75.6,242.1,1\n412,-1,286.7,129.4,54.7,166.2,1\n412,-1,947.7,17.2,60.5,171.3,1\n412,-1,831.6,1.1,54.9,130.9,1\n412,-1,1005.6,30.3,55,163.2,1\n412,-1,795,151.3,59.3,171.7,1\n412,-1,1582.8,615.6,104.1,243.7,1\n412,-1,359,1,66.5,111.5,1\n412,-1,205.2,266.2,55.7,185.1,1\n412,-1,220.6,142.9,66.3,154.8,1\n412,-1,297.4,587.6,84.8,253.3,1\n412,-1,1220.9,492.4,60.8,207.2,1\n412,-1,859,535.9,104.3,242.9,1\n412,-1,461.2,69.7,69.6,192.5,1\n412,-1,705.3,557,90.7,244.4,1\n412,-1,426.5,92.4,53.3,172.7,1\n412,-1,712.1,90.9,63.6,170.9,1\n412,-1,717.9,1,52.4,132.3,1\n412,-1,1851.5,69.3,69.5,178.6,1\n412,-1,931.3,549.7,84.2,221.7,0.999\n412,-1,425.9,1.8,41.1,111.7,0.984\n412,-1,979.8,924,81.8,157,0.916\n372,-1,1222.1,31.9,61.3,118.1,1\n372,-1,686.4,206.3,79.7,112.9,1\n372,-1,1068.1,440.9,70.9,200.3,1\n372,-1,1630.4,13.8,58.9,160.9,1\n372,-1,444.6,310.8,70.6,216,1\n372,-1,285.8,131.5,53.9,169.6,1\n372,-1,1430.8,1,54.7,99.6,1\n372,-1,359.3,112.8,54.8,173.7,1\n372,-1,548.1,570.6,105.4,247.6,1\n372,-1,443.1,79.7,69.6,195.3,1\n372,-1,109.4,350.7,52.9,190.4,1\n372,-1,510.2,89.8,49.2,166.8,1\n372,-1,351.9,524.1,91.6,246.1,1\n372,-1,1019.2,54.3,55.4,166.1,1\n372,-1,1763,98,56.6,160.1,1\n372,-1,1719.6,454.8,78.6,214.5,1\n372,-1,460.4,542.9,67.2,230.5,1\n372,-1,213.6,143.3,57.9,156.7,1\n372,-1,1584.5,629.7,82.6,245.8,1\n372,-1,797.2,150.6,57.8,171.7,1\n372,-1,831.6,1.1,56.4,111.2,1\n372,-1,954.6,40.7,62.4,176.9,1\n372,-1,1806.2,451.9,63.4,212.6,1\n372,-1,1820,70.7,61.5,160.6,1\n372,-1,381.1,1.5,45.8,92,1\n372,-1,213.7,307.8,52.7,181.5,1\n372,-1,912.9,497.8,73.4,206.5,1\n372,-1,758.6,97,44.5,142,1\n372,-1,848.3,482.1,86.4,234.6,1\n372,-1,966.5,917.4,83.8,163.6,0.997\n372,-1,926.7,5.5,56.1,142.1,0.062\n171,-1,1221.1,31.2,61.4,116.7,1\n171,-1,109.1,350.7,49.5,187.7,1\n171,-1,1489.1,68.9,54.9,148.3,1\n171,-1,356.3,103.8,55.3,178.6,1\n171,-1,212.4,125.8,54.5,168.5,1\n171,-1,401.7,670.1,98.1,264.7,1\n171,-1,1720,456.2,79.4,213.1,1\n171,-1,704.5,1,56.4,159.5,1\n171,-1,687.7,207.7,76.8,111.6,1\n171,-1,1358.5,567.8,104.2,245.2,1\n171,-1,288.4,126.8,54.8,170.3,1\n171,-1,966.9,123.6,53.1,177.7,1\n171,-1,100.2,548.3,88.2,252.3,1\n171,-1,429.1,36.9,58.8,165.3,1\n171,-1,421.5,236,77.7,224.2,1\n171,-1,553.8,154.7,65.3,173.8,1\n171,-1,529.3,283.3,60.7,217,1\n171,-1,1122.3,152.1,45.9,159,1\n171,-1,225.5,588.1,68,213.7,1\n171,-1,856.1,191.8,78,186.1,1\n171,-1,795.2,148.6,61.4,172.7,1\n171,-1,1222.8,166.4,59.1,172.5,1\n171,-1,799.3,277.7,62,173.1,1\n171,-1,536.8,65.8,53.2,168,1\n171,-1,746.7,262.1,64.8,200.8,1\n171,-1,504.6,215.2,56.8,168.8,0.999\n171,-1,1268,167.1,49.1,159.2,0.999\n171,-1,1012.8,909.2,76.2,171.8,0.982\n106,-1,1221,30.2,62.9,118.7,1\n106,-1,704.8,1,55.5,159.1,1\n106,-1,389.6,818.1,102.2,262.9,1\n106,-1,1163.3,155.4,65.9,167.2,1\n106,-1,356.6,106.7,56,177.6,1\n106,-1,1487.3,69,55.9,149.5,1\n106,-1,108.8,351.1,48.8,188.4,1\n106,-1,943.9,205.2,71.8,186.9,1\n106,-1,425.5,296.8,79.4,225.7,1\n106,-1,1358.2,567.1,105.2,244.3,1\n106,-1,209.9,129.8,49.9,164.7,1\n106,-1,1721.5,457.7,77.6,209.5,1\n106,-1,508.3,230.4,72.4,196.8,1\n106,-1,292,126.1,57,172.6,1\n106,-1,102.7,547.2,84.6,250.9,1\n106,-1,1263.4,191.3,44.7,165.8,1\n106,-1,701,183.3,58.8,166.3,1\n106,-1,39.9,684.9,75.9,218.3,1\n106,-1,805.2,196,64.2,188.3,1\n106,-1,538.5,64.8,48.1,169.1,1\n106,-1,440.2,4.1,53.6,151.8,1\n106,-1,851.1,220,55.4,164.8,1\n106,-1,375.9,7.5,49.2,159.9,1\n106,-1,479,153.3,59.7,161.9,1\n106,-1,1383.5,184.5,63.5,188.9,1\n106,-1,482.1,40.3,59.5,159.9,0.999\n106,-1,1429.6,185.3,54.3,177.3,0.994\n106,-1,255.9,86.5,63.5,183.2,0.958\n106,-1,1146.2,935.4,74.8,145.6,0.164\n28,-1,686.6,205.8,79.9,113.4,1\n28,-1,1206.5,30.9,72.4,119,1\n28,-1,1361.7,567,104.7,244.6,1\n28,-1,704.2,2.1,56.3,156.5,1\n28,-1,1486.9,69.5,55.6,149,1\n28,-1,384.9,381.6,84.6,240.2,1\n28,-1,984,198,78.3,180.9,1\n28,-1,1723.9,456.6,76.1,210.6,1\n28,-1,794.7,149.6,62.4,174,1\n28,-1,491.5,160.5,87,191.1,1\n28,-1,102.5,547.5,84.6,251.9,1\n28,-1,1826.9,240.4,65.2,188.3,1\n28,-1,194,374.6,68.6,199.2,1\n28,-1,355.4,103.6,53.5,181.2,1\n28,-1,215.5,128.9,48.7,163,1\n28,-1,283.4,124.9,55.8,169.1,1\n28,-1,872.6,139.6,56.5,181.8,1\n28,-1,415.6,82.6,52.2,157.4,1\n28,-1,2,826.6,56.4,238.5,1\n28,-1,1599.3,237.5,57.4,188.5,1\n28,-1,455.3,58.4,48.4,165.8,1\n28,-1,916.3,152.5,50.6,163.6,0.999\n28,-1,1373.3,186.2,46.2,171.8,0.999\n28,-1,1022.4,154.6,65.9,192.1,0.546\n895,-1,1221,30.2,61.8,118.2,1\n895,-1,687.1,205.8,79.3,114.4,1\n895,-1,793.9,139.1,75.9,173.5,1\n895,-1,1483.4,99.7,59.2,150,1\n895,-1,480,188.2,62.2,178.2,1\n895,-1,1576.3,596.2,101.2,232,1\n895,-1,1106.3,16.2,55,155.4,1\n895,-1,300.3,668.1,85.2,251.2,1\n895,-1,1721.1,454.2,78.6,212.5,1\n895,-1,558.4,115.7,59.6,175.4,1\n895,-1,1426.9,1,51.3,153.1,1\n895,-1,337.1,344.1,81.2,184.5,1\n895,-1,302.3,161.8,66.9,192.8,1\n895,-1,469.1,1.1,51.5,150.4,1\n895,-1,965.7,437.7,86.9,232.8,1\n895,-1,883.4,453.5,65.8,228.8,1\n895,-1,753.2,71.6,54.8,162.9,1\n895,-1,421.9,330.6,55.7,201.3,1\n895,-1,1708.2,68,54,176,1\n895,-1,1594.2,46.9,50.4,157.5,1\n895,-1,397.9,182.3,58.3,178,1\n895,-1,1747.5,680.1,89.3,235.4,1\n895,-1,241.3,133.5,56.5,169.1,1\n895,-1,253.9,1.5,53.9,118.7,1\n895,-1,313.6,1.3,47.7,127.8,1\n895,-1,1497.2,1,60.7,145.3,1\n895,-1,414.4,56.3,55.1,174.8,0.999\n895,-1,1335.5,917.2,99.9,163.8,0.947\n895,-1,357,168.9,39.8,170.8,0.171\n880,-1,1221.1,29.7,62.3,118.1,1\n880,-1,1086.4,1,62.1,154.2,1\n880,-1,687.1,205.9,78.6,113.6,1\n880,-1,1479.4,89,58.3,151.9,1\n880,-1,794.5,140,73.5,174.4,1\n880,-1,1574.3,589.7,104.8,236.5,1\n880,-1,302,162.2,68.9,197.3,1\n880,-1,476.1,2.2,47.3,130.4,1\n880,-1,479.8,169.3,60.4,181.6,1\n880,-1,1721.6,453.2,78.7,215.4,1\n880,-1,558.8,116.5,58.8,176,1\n880,-1,285.9,643.8,86.3,252.1,1\n880,-1,894.5,477.8,70.7,231,1\n880,-1,334.8,323.6,81.2,185.7,1\n880,-1,1694.9,54.8,53.8,169,1\n880,-1,752.8,72.6,55.8,162.2,1\n880,-1,1421.5,4.6,51.3,154.7,1\n880,-1,982.9,461.2,68.7,230.3,1\n880,-1,1577.1,33.9,55.9,149.8,1\n880,-1,428.3,309.7,56.3,202.2,1\n880,-1,254,1,53.3,122.5,1\n880,-1,407.3,168.4,59.4,177.8,1\n880,-1,240.5,131.1,51.2,167.5,1\n880,-1,1756.4,684.3,94.1,232.1,1\n880,-1,1498.1,2.4,56.5,150.6,0.999\n77,-1,1221.5,30.3,61.2,118.6,1\n77,-1,1244,176.3,71.5,151.5,1\n77,-1,1487,69.9,55.5,145.6,1\n77,-1,704.2,1,56.4,159.2,1\n77,-1,411.5,329.7,83.9,230.3,1\n77,-1,356.8,105.1,54.6,179.3,1\n77,-1,686.6,206.3,79.7,115.3,1\n77,-1,1360.6,566.7,104.5,244.7,1\n77,-1,1722.3,455.9,76.9,210.6,1\n77,-1,489.5,202.1,80.6,194.9,1\n77,-1,983,187.3,71.7,185.7,1\n77,-1,1429.3,200.5,72.9,195.4,1\n77,-1,11.3,728.1,70.4,232.8,1\n77,-1,773.5,191.3,69.9,181.9,1\n77,-1,102.8,546.2,84.9,254.2,1\n77,-1,291.7,126.6,51.5,168.3,1\n77,-1,1333.8,202,40.4,164.8,1\n77,-1,134.1,355.5,50,188.1,1\n77,-1,212.1,131.6,51.1,163.1,1\n77,-1,538.5,63.4,48.1,172.1,1\n77,-1,840.3,174.1,58,182.6,1\n77,-1,433,24.4,53.7,160.8,1\n77,-1,884.5,192.7,54.7,170,1\n77,-1,390.6,897.6,97.6,183.4,0.999\n77,-1,380.5,28,54.4,162.7,0.999\n77,-1,473.6,120.7,59.9,157,0.999\n77,-1,252.4,95.7,58.3,179.2,0.998\n77,-1,1500.1,210.5,42.1,164.5,0.292\n689,-1,1222,30,62.2,119.6,1\n689,-1,687.7,206.6,78.4,112.9,1\n689,-1,1481,5.3,59.4,145.6,1\n689,-1,363.8,529.9,98.2,251.2,1\n689,-1,1488.4,138.4,52.9,177.3,1\n689,-1,803.5,145.9,55.9,170.9,1\n689,-1,1613.6,145.6,68.4,185,1\n689,-1,1708.4,457.9,100.2,206.6,1\n689,-1,487.8,129.5,45.8,181,1\n689,-1,562.7,111.7,52.2,178.3,1\n689,-1,1575.2,588.5,96.7,237.4,1\n689,-1,421.9,144.1,62.9,163.4,1\n689,-1,310.2,370.2,68.2,210.6,1\n689,-1,1257.9,854.3,89.7,226.7,1\n689,-1,360.5,113.9,49,171.6,1\n689,-1,749.5,79.4,50.9,158.7,1\n689,-1,1054.9,1,61.6,99.2,1\n689,-1,1342.3,831.3,98.5,249.7,1\n689,-1,246.2,201.1,60.5,196.3,1\n689,-1,298.7,217.5,58.5,177.2,1\n689,-1,406.1,22.2,53.6,162.4,1\n689,-1,481.7,35.9,47.7,147.2,1\n689,-1,224.3,130.4,52.1,167.2,1\n689,-1,823.3,921.1,82,159.9,0.738\n704,-1,1221.6,30.3,62,118,1\n704,-1,687,206.5,79.8,113.8,1\n704,-1,1481.8,6,58.3,147.3,1\n704,-1,561.8,108.9,53.2,179.5,1\n704,-1,1710.9,456.4,97.1,207.4,1\n704,-1,1603.6,139.3,68.8,182.7,1\n704,-1,413.4,154.3,75.5,164,1\n704,-1,475.2,21,44.8,142.6,1\n704,-1,1476.7,128.7,50.1,177,1\n704,-1,485.1,140.4,47.6,182.5,1\n704,-1,296,382.8,75.4,215.3,1\n704,-1,1223.3,820,88.6,254,1\n704,-1,1306.4,787.2,91.5,267.9,1\n704,-1,1573.8,587.5,98.3,235.4,1\n704,-1,359.5,109.2,50.6,173.5,1\n704,-1,386.6,545.1,67.6,242.8,1\n704,-1,803.2,139.2,47.4,175.3,1\n704,-1,750,81.3,50.1,155.4,1\n704,-1,256.9,199.4,58.7,194.6,1\n704,-1,305.4,210.5,57.8,179.8,1\n704,-1,409,25.6,58.9,162.2,1\n704,-1,1009,1,62.8,87,1\n704,-1,228.6,134.2,52,164,1\n704,-1,840.4,931,76,150,0.368\n496,-1,1221.3,30.1,62.4,118.5,1\n496,-1,686,206.3,80.2,113.2,1\n496,-1,1497.2,1,58.2,127.4,1\n496,-1,998.6,1,56,132.3,1\n496,-1,1816.3,175.2,81.4,187.7,1\n496,-1,1734.6,189.1,69.6,173.5,1\n496,-1,464.8,151.4,64.6,196.3,1\n496,-1,798.2,142.2,58.4,175.9,1\n496,-1,810.9,605.6,87,258.2,1\n496,-1,930.9,1,56.4,130.4,1\n496,-1,1635,597.6,75.9,215.8,1\n496,-1,1717.6,459.2,83.7,206.3,1\n496,-1,876.2,1,52.8,127.5,1\n496,-1,1687.9,41.9,54.7,165.1,1\n496,-1,407.1,164.5,61.7,186.4,1\n496,-1,1540.7,598.9,88.9,240.6,1\n496,-1,140,334.3,65.6,192.8,1\n496,-1,1625.7,30.4,59.9,173.1,1\n496,-1,214.4,734,97.5,272.9,1\n496,-1,921.2,666.8,114,255.6,1\n496,-1,299.3,767,78.3,262,1\n496,-1,316,193,46.8,163.4,1\n496,-1,1624,326.7,60.8,189.4,1\n496,-1,1754.3,342.4,77.5,214.7,1\n496,-1,217.3,134.8,63,163.3,1\n496,-1,715.1,93.6,59.4,164.3,1\n496,-1,359.5,112,54,174.2,1\n496,-1,448.3,17.7,76,179.8,1\n496,-1,506,94.6,61.4,170.1,1\n496,-1,404.2,14,47.7,162.6,1\n496,-1,287.1,126.8,54.9,171,0.999\n496,-1,1011.3,686.6,80.3,227.9,0.997\n496,-1,751.6,99.9,44.9,141.7,0.494\n496,-1,1019.5,937.5,84.6,143.5,0.084\n25,-1,686.7,206.3,79.7,113.4,1\n25,-1,1206.3,31.8,72.4,117.9,1\n25,-1,1487.3,69.2,55.6,150.2,1\n25,-1,490.9,157.4,94.6,187.2,1\n25,-1,1362.1,567,105,244.7,1\n25,-1,704.1,1.3,55.7,158.3,1\n25,-1,995.5,202,77.8,176.8,1\n25,-1,794.7,149.7,62.1,174.6,1\n25,-1,1723.6,457,75.8,210.4,1\n25,-1,102.3,547.2,85.2,251.9,1\n25,-1,196.8,377.9,68,201.2,1\n25,-1,355.4,102.3,53.6,181.1,1\n25,-1,215.7,130.6,48.9,161.9,1\n25,-1,1822.9,234.2,64.7,192,1\n25,-1,383.6,380.2,82.7,242.6,1\n25,-1,283.5,124.4,56.2,171.8,1\n25,-1,415.4,78,56.6,164.8,1\n25,-1,1602.9,242,59.9,186.7,1\n25,-1,874.8,139.3,55.2,181.8,1\n25,-1,454.7,59.7,50.3,169.5,1\n25,-1,2.7,836.7,52.5,233.8,1\n25,-1,914.7,148.5,51.2,165,1\n25,-1,1378.1,188.6,50.9,170.6,0.997\n169,-1,1221,31.1,62.2,117.5,1\n169,-1,401.4,674,96.7,260.7,1\n169,-1,109.9,350.2,47.7,188.7,1\n169,-1,1488.8,69.5,55.3,148.2,1\n169,-1,356.2,103.3,55.8,180.5,1\n169,-1,212.4,125.6,54.9,168.5,1\n169,-1,1720.8,456.9,78.6,211.5,1\n169,-1,973,124.9,56.7,171.7,1\n169,-1,704.5,1,55.5,159,1\n169,-1,1359.1,568.4,103.5,243.5,1\n169,-1,688.1,208,77.3,111.3,1\n169,-1,288.5,127.9,54.5,168.6,1\n169,-1,100.6,548.6,87.3,252.8,1\n169,-1,1127.5,152.9,46.6,163.2,1\n169,-1,557,156.9,65.6,171.3,1\n169,-1,528.5,279.5,63.6,219,1\n169,-1,421.2,239.3,77.9,220.5,1\n169,-1,432.9,36.3,57.5,169,1\n169,-1,538.3,66.6,52.3,164.4,1\n169,-1,222,590,69.7,212.3,1\n169,-1,855.6,194,76.4,182.7,1\n169,-1,1227.8,165,62.6,171.7,1\n169,-1,795.4,148.3,61.5,172.9,1\n169,-1,799.1,274.5,60.1,175.9,1\n169,-1,747.7,262.8,67.4,200.5,1\n169,-1,504.3,213.9,57.9,174.3,0.998\n169,-1,1017.9,904.7,74,176.3,0.974\n169,-1,1270.8,164.4,49.5,163.1,0.949\n505,-1,1221.4,30.1,62.1,118.8,1\n505,-1,686.7,205.5,80.2,115.5,1\n505,-1,1495.6,1.2,58.9,134.6,1\n505,-1,998.6,1,54.5,128.7,1\n505,-1,323,180,51.5,165.9,1\n505,-1,932.3,1,55.5,123.7,1\n505,-1,788.5,140.8,61.6,181,1\n505,-1,466.8,145.6,65.7,192.3,1\n505,-1,149.3,332.2,65.6,191,1\n505,-1,401.7,171.4,61.4,185.3,1\n505,-1,1680.7,27.5,56.6,170.1,1\n505,-1,880.5,1,52.3,124.5,1\n505,-1,823.7,609.2,75.9,250.7,1\n505,-1,1673.9,612.2,75.3,214.6,1\n505,-1,1728.2,461,72.1,206.1,1\n505,-1,1739.9,195.3,66.3,174.4,1\n505,-1,293.7,783.8,75.9,251.3,1\n505,-1,1833.8,187.1,82.7,197.4,1\n505,-1,1617.9,21.6,56.4,176.6,1\n505,-1,1733.1,331.4,78.7,207.7,1\n505,-1,217.3,134,63.8,163.6,1\n505,-1,1550.5,598,77.8,237.7,1\n505,-1,932.6,688.6,117.4,253.7,1\n505,-1,208.8,749.4,90.3,276,1\n505,-1,1618.1,308.1,65.7,191.8,1\n505,-1,513.4,93.7,58.3,175.7,1\n505,-1,450.2,9.9,74.6,181.2,1\n505,-1,716.7,93.6,63.6,170.1,0.999\n505,-1,288.4,124.9,54,171.8,0.999\n505,-1,360,105.9,54.9,184.3,0.999\n505,-1,401,18.9,47.3,158.3,0.998\n505,-1,1024.6,704.9,75,241.6,0.948\n804,-1,1221.2,29.2,62.6,118.6,1\n804,-1,686.7,205.9,79.4,113.5,1\n804,-1,1614.4,1,57.9,135.3,1\n804,-1,1723.6,452,74.8,214.7,1\n804,-1,281.2,528.2,79.2,238.7,1\n804,-1,1574.9,590.5,100.3,233.6,1\n804,-1,549,114.2,63.9,176.8,1\n804,-1,786,128.7,49.8,181.2,1\n804,-1,278.6,164.7,60.8,200.6,1\n804,-1,477.5,99.6,64.2,180.2,1\n804,-1,232.9,133.3,51.8,166.1,1\n804,-1,440.1,232.6,58.7,196.7,1\n804,-1,383.5,243.7,72.4,174.6,1\n804,-1,1477.1,31,60.9,153.3,1\n804,-1,1075.8,578.6,80.9,251.9,1\n804,-1,750.3,69.9,58.2,166,1\n804,-1,1004.4,605.1,75.1,246.2,1\n804,-1,346.8,179.6,50.4,176.8,1\n804,-1,1438.2,55.3,50.6,157.9,1\n804,-1,422.3,99.4,58.7,170.2,1\n804,-1,443.5,1.2,40.7,83.7,0.999\n804,-1,254.2,1.7,53,124.4,0.998\n804,-1,614.1,583.4,95.3,234.6,0.085\n120,-1,1221.7,30.3,62.2,118.2,1\n120,-1,1111.1,147.3,82.7,171.8,1\n120,-1,355.7,104,57.1,180.7,1\n120,-1,1487.6,68.4,56.4,150.2,1\n120,-1,394.3,782,102.6,279.4,1\n120,-1,212.6,128.4,50.5,166,1\n120,-1,704.1,1,56.2,159.9,1\n120,-1,1721.4,457.5,77.6,209.1,1\n120,-1,108.1,350.4,49.5,186.5,1\n120,-1,921.8,208.4,69.3,196.1,1\n120,-1,1358.7,567.6,105.2,243.7,1\n120,-1,426.6,286.8,77.9,224.5,1\n120,-1,287.8,126.5,54.4,168,1\n120,-1,522.2,243.1,72.9,203.8,1\n120,-1,538.1,64.5,50.1,168.8,1\n120,-1,477.8,168.5,57.8,156.9,1\n120,-1,1233,179.3,43.6,167,1\n120,-1,102.3,544.2,87,260.5,1\n120,-1,786.8,210.2,66.1,190.4,1\n120,-1,1350.4,182.5,67.8,186.7,1\n120,-1,377.3,1.5,47.8,151.4,1\n120,-1,833.5,228.2,56,178.7,1\n120,-1,81.5,653.8,67.6,226.6,1\n120,-1,482.9,39.2,58.5,168.2,1\n120,-1,446.8,1,53.5,146.4,1\n120,-1,1109.5,925.6,86.1,155.4,0.14\n993,-1,687,206.2,79.2,113,1\n993,-1,1797.7,184.4,70.7,182.3,1\n993,-1,793.7,140.1,74.4,172.5,1\n993,-1,1220.8,31,62.2,121.2,1\n993,-1,1471.6,172.9,64.6,164.2,1\n993,-1,501.3,263.3,65.4,185.6,1\n993,-1,1194.1,126.6,59.6,172.5,1\n993,-1,401.1,277.3,66.9,197.3,1\n993,-1,838.1,308.2,70,205.8,1\n993,-1,328.6,848.8,96.2,232.2,1\n993,-1,1671.8,147.9,59.1,173,1\n993,-1,289.7,124.3,52.2,169.8,1\n993,-1,1576.7,590.1,102.5,236.8,1\n993,-1,231.2,134.7,55,167,1\n993,-1,1721.8,453.1,77.9,215.5,1\n993,-1,751.6,71.2,55.3,163.5,1\n993,-1,543.9,119.6,57.7,168.9,1\n993,-1,301.6,463.4,83.5,195.6,1\n993,-1,1182.6,658.4,91,266.3,1\n993,-1,920.2,301.7,71.3,208.9,1\n993,-1,314.7,272.5,64.2,200,1\n993,-1,386.9,446.8,66.5,222.9,1\n993,-1,443.6,64.4,58.2,177.5,1\n993,-1,504.6,78.2,53,154.2,1\n993,-1,313.6,1.6,45.7,130.1,1\n993,-1,1740.5,674.1,93.7,249.6,1\n993,-1,386.5,166.3,66,189.1,0.999\n993,-1,1440.5,3.5,59.8,79.5,0.883\n993,-1,386.1,6.1,48.9,132.9,0.273\n988,-1,686.8,206.2,79.6,113.1,1\n988,-1,1222.1,30.7,60.7,119.7,1\n988,-1,793.2,140.3,73.6,172.3,1\n988,-1,1190.6,124.9,55.2,164.3,1\n988,-1,402.5,266.7,71,196.8,1\n988,-1,1794.1,179.9,67.9,181.9,1\n988,-1,496,252.4,67.2,191,1\n988,-1,1468.2,167.2,67.9,168.5,1\n988,-1,837.8,314.2,72.6,207.1,1\n988,-1,1576,589.9,102.9,235.5,1\n988,-1,300.5,454,84.3,205,1\n988,-1,1671.4,146.1,54,166.4,1\n988,-1,330.6,841.6,94.1,239.4,1\n988,-1,751.5,71.7,55.6,163.7,1\n988,-1,1720.5,455.5,78.8,211.5,1\n988,-1,1189.9,669.4,89.6,261.4,1\n988,-1,545.1,118.5,57.2,168.5,1\n988,-1,229.7,135.7,55.5,163.3,1\n988,-1,289.3,125.2,52.8,171.2,1\n988,-1,316,265.2,62.8,200.1,1\n988,-1,921.6,302.8,68.5,209.3,1\n988,-1,390.5,440,65.1,218.1,1\n988,-1,1739.8,673.7,94.2,249.5,1\n988,-1,501,73.6,51.2,154.3,1\n988,-1,446.7,65,57,178.8,1\n988,-1,1448.5,1,54.9,89.1,1\n988,-1,314.8,2.3,45.1,129.4,1\n988,-1,378.6,165.5,63.4,194,0.998\n988,-1,380.9,1,53.5,137.2,0.994\n988,-1,1386,2.7,41.9,86.9,0.979\n136,-1,1221.9,30.9,62.1,117.5,1\n136,-1,1488.7,68.7,54.9,148.9,1\n136,-1,356.4,103.4,55.7,183.1,1\n136,-1,1060.6,135.1,76.3,179.6,1\n136,-1,391.5,747.1,99.4,270.2,1\n136,-1,108.6,349,49.2,189.5,1\n136,-1,287.7,125.3,54.9,170.3,1\n136,-1,1721.4,456.7,77.6,210.9,1\n136,-1,704.3,1,55.5,158,1\n136,-1,536.6,65.8,50.7,163.2,1\n136,-1,687.4,205.8,79.1,116.5,1\n136,-1,888.1,209.5,77.5,193.9,1\n136,-1,1359.4,567.4,104.5,243.1,1\n136,-1,423.2,273.4,77.4,220.6,1\n136,-1,219.9,128.9,50.7,161.5,1\n136,-1,1198.5,170.9,50.3,164.8,1\n136,-1,378.5,1,49.8,136.7,1\n136,-1,478.9,178.1,59.2,170.6,1\n136,-1,530.5,257.3,62.6,208.9,1\n136,-1,815.7,244.5,58,173.3,1\n136,-1,1318.9,184.9,56.1,178.4,1\n136,-1,772.6,228.4,59.7,188.9,1\n136,-1,475.9,47,54.5,156.2,1\n136,-1,138.1,639.8,73.1,212.7,0.999\n136,-1,99.3,545.9,81.5,253.5,0.999\n136,-1,572.5,245.4,56.1,193.5,0.998\n136,-1,1068.5,925,87,156,0.959\n136,-1,450.3,5.1,46.5,127.9,0.689\n444,-1,1221.5,30.2,62.7,118.6,1\n444,-1,936.4,1,60.5,159.4,1\n444,-1,686.7,205.9,79.1,113.7,1\n444,-1,359,107.9,53.9,179.5,1\n444,-1,1006.6,12.7,55.8,157.6,1\n444,-1,450.5,218.3,73.6,196.3,1\n444,-1,1363.4,534.7,74.9,208.9,1\n444,-1,1719.9,454.7,78.3,214.3,1\n444,-1,112,349,53.4,190.9,1\n444,-1,856.5,1,52,140.8,1\n444,-1,286,126.3,54.3,171.9,1\n444,-1,798.8,152.4,52.6,170.7,1\n444,-1,1750.1,151.5,67.2,171.5,1\n444,-1,264.6,642.5,89.5,260.4,1\n444,-1,1561.6,614.7,74.3,241.2,1\n444,-1,244.8,234.4,50.9,179.7,1\n444,-1,359,670.4,76.2,245,1\n444,-1,776.9,571.9,75.8,252.1,1\n444,-1,880.5,582.7,117,243.5,1\n444,-1,1674,365.3,69.6,196.2,1\n444,-1,528.8,70.2,53.8,171.2,1\n444,-1,1845.3,393.9,75.7,208.4,1\n444,-1,220.9,136.8,56.5,155.9,1\n444,-1,423.2,1,43.6,136.5,1\n444,-1,428.7,121.1,60.7,171.1,1\n444,-1,1699.8,103.3,69,171.3,1\n444,-1,362.6,3.2,61.1,132.4,0.999\n444,-1,964.8,599.4,83.8,219.8,0.999\n444,-1,728,1.5,50.6,93.7,0.998\n444,-1,712.5,89.3,59.4,173.6,0.998\n444,-1,755,86,48.2,154.9,0.993\n444,-1,1013.5,921.9,87.4,159.1,0.971\n444,-1,451.7,40.4,65.4,205.6,0.06\n758,-1,1221.3,29.2,62.5,119.6,1\n758,-1,687,205.8,79,114,1\n758,-1,546.5,116.8,64.3,175.1,1\n758,-1,1716.4,454.2,84.3,211.3,1\n758,-1,781.6,134.5,64.4,177.8,1\n758,-1,1462.9,88.7,52.8,171.1,1\n758,-1,303.9,458.4,76.8,225.2,1\n758,-1,1574.7,588.9,100.5,235.1,1\n758,-1,265.1,183.3,58.3,197.8,1\n758,-1,459.7,189.1,53.6,190.3,1\n758,-1,330.5,195.3,55,174.9,1\n758,-1,1583,88.9,63.3,176.2,1\n758,-1,501.6,564.3,77.7,253,1\n758,-1,401.3,203.5,65.3,172.8,1\n758,-1,1162.1,674.8,87.6,261.9,1\n758,-1,453,64.8,58.2,170.6,1\n758,-1,257.9,1.1,49.8,122.7,1\n758,-1,1495,18,60.3,143.7,1\n758,-1,752.1,82.4,48.9,152.2,1\n758,-1,398.8,65.1,56.3,167.4,1\n758,-1,236.6,136.3,50.5,156.8,0.999\n758,-1,1096.8,694,77.7,246.1,0.999\n758,-1,359.6,108.5,50.1,172.7,0.999\n47,-1,394.5,361.6,87.2,234.7,1\n47,-1,686.6,206.1,78.8,114.1,1\n47,-1,1218,29.6,67.1,115.4,1\n47,-1,1487.8,69.9,54.6,149.1,1\n47,-1,704.1,1,55.9,156.5,1\n47,-1,489.2,173.6,91.2,197,1\n47,-1,1361.7,566.7,105.3,246.1,1\n47,-1,1722.4,456,75.7,211.3,1\n47,-1,355.6,107.3,54,175.9,1\n47,-1,213.6,125.9,49.5,166.7,1\n47,-1,899.8,200.1,70.9,176,1\n47,-1,100.3,545.7,86.6,255.7,1\n47,-1,1008.6,161.4,78.9,190.1,1\n47,-1,167.7,366.9,66.8,190.9,1\n47,-1,284,125.9,54.2,170.3,1\n47,-1,3.2,788.2,66.2,242.7,1\n47,-1,794.9,148.5,62,175.4,1\n47,-1,412.6,93.5,56.6,150.9,1\n47,-1,859.4,150,61.9,180.9,1\n47,-1,1852.1,268.6,68.9,196.8,1\n47,-1,1332.7,178.8,53.4,164.6,1\n47,-1,484.7,43.7,57,156,0.999\n47,-1,1487.1,216,61.3,200,0.999\n47,-1,439.2,38.5,57.1,177,0.997\n47,-1,1378.1,215.5,46.1,177.8,0.996\n47,-1,541.5,62.7,42.2,172.5,0.996\n733,-1,1221.3,30,62.6,118.6,1\n733,-1,687.1,205.5,78.4,114.9,1\n733,-1,1480.1,7.1,59.9,147.8,1\n733,-1,258,186.9,58.5,199.5,1\n733,-1,1471.2,111.6,51,165.7,1\n733,-1,405.2,185.4,74.3,164.6,1\n733,-1,297.5,423.1,76.5,223.1,1\n733,-1,552.1,112.2,58.7,180.4,1\n733,-1,783.6,137.2,54.3,178,1\n733,-1,1574.9,589.4,99.1,235.2,1\n733,-1,1712.1,456.4,95,207.6,1\n733,-1,477.1,169.2,48.7,182.7,1\n733,-1,419.6,554.7,89.3,249.6,1\n733,-1,323.4,197.4,60.6,181,1\n733,-1,1597.2,103.8,59.4,181.4,1\n733,-1,1222,721.8,96.5,275.1,1\n733,-1,751.1,84.8,50.1,150.3,1\n733,-1,1148.8,748.8,83.2,259.3,1\n733,-1,430.5,42.1,59.3,171.5,1\n733,-1,359.9,107.6,50,175.1,1\n733,-1,318.6,1,48.8,131.9,0.999\n733,-1,236.4,140.3,53.3,160.2,0.96\n42,-1,685.9,206.3,80.6,113.8,1\n42,-1,1211.1,31.3,74.7,119,1\n42,-1,391.6,365.7,86.1,238.5,1\n42,-1,1486.6,69.2,55.9,151.1,1\n42,-1,704.5,1,56,157.4,1\n42,-1,1362.4,566.6,104.4,245.3,1\n42,-1,1722.9,456.4,75.7,210.7,1\n42,-1,483.9,167,95.4,198.4,1\n42,-1,911.5,192.3,92.7,186.2,1\n42,-1,214,128.7,49.7,164.4,1\n42,-1,100.8,546.5,86,255.5,1\n42,-1,1009.6,158.6,79.8,187.1,1\n42,-1,353.5,104.8,54.7,178.4,1\n42,-1,795.6,148.5,61.2,174.8,1\n42,-1,174.4,370.1,67.6,192.5,1\n42,-1,284.7,127.2,52.8,167,1\n42,-1,862.7,148.1,60.4,182.6,1\n42,-1,1,799.3,66.7,240.4,1\n42,-1,1342.9,187.2,55.2,171.4,1\n42,-1,1843,258.3,77,197.4,1\n42,-1,444.8,46.3,53.9,169.8,1\n42,-1,397.7,82,53.8,162,0.999\n42,-1,1495.3,220.9,56.8,195.5,0.999\n42,-1,490,42.8,47.3,152.8,0.879\n42,-1,542.7,61.4,43.1,179.2,0.427\n604,-1,1221.5,30.3,61.2,119.7,1\n604,-1,687.2,205.8,79.1,113.8,1\n604,-1,1480.4,3.8,60.8,144.7,1\n604,-1,800.7,143.5,65.4,173.9,1\n604,-1,364.5,276.3,65.5,196.7,1\n604,-1,1621.3,2.7,55.1,107.4,1\n604,-1,1707.8,457.6,95.4,208.9,1\n604,-1,237.4,263.3,63.2,189.6,1\n604,-1,1648.7,226.4,70.3,199.4,1\n604,-1,1574.3,588.9,97.5,235,1\n604,-1,561.9,111.5,50.9,177.4,1\n604,-1,488.2,96,46,160.6,1\n604,-1,169.3,244.3,59,208.5,1\n604,-1,286.9,126.2,51.9,172.4,1\n604,-1,219.1,137.1,53.8,159.4,1\n604,-1,360.3,114.5,50.4,173.6,1\n604,-1,752.4,79.6,44.2,155.5,1\n604,-1,432.8,72.2,49.3,169.6,1\n604,-1,1080.9,878.4,125,202.6,1\n604,-1,395.6,91.3,50.4,159.4,0.971\n604,-1,622.7,553.5,91.1,250.4,0.054\n358,-1,1221.8,31,61.1,118.3,1\n358,-1,687.4,207,77.9,112.9,1\n358,-1,1024.7,426.7,68.7,198.6,1\n358,-1,1436.1,1.9,50.3,108.5,1\n358,-1,1618.7,1,70.8,156.3,1\n358,-1,1030,60.5,54.5,168.7,1\n358,-1,426.8,331.7,82.8,212.4,1\n358,-1,1750.1,86,62.1,159.5,1\n358,-1,444.2,85.4,70,202.9,1\n358,-1,1720.4,456.8,77.9,212.2,1\n358,-1,108.1,350.5,53,189.5,1\n358,-1,207.5,138.8,58.1,160.7,1\n358,-1,286.9,130.6,56.1,172.3,1\n358,-1,365,109.5,54.4,176.4,1\n358,-1,960.9,54.8,64.6,173.2,1\n358,-1,1820.6,476.3,68.4,204.1,1\n358,-1,796.6,149.4,60.4,175.2,1\n358,-1,840,2.1,51,100.3,1\n358,-1,1851.2,57.6,53.8,167.7,1\n358,-1,493,576.8,104.8,242.6,1\n358,-1,1561.7,621.6,90.2,247.6,1\n358,-1,221.2,323.7,55.2,185.8,1\n358,-1,512.8,92.2,45,163,1\n358,-1,383,508.4,84,237.3,1\n358,-1,905.3,479,81.5,212,1\n358,-1,844.5,469.5,83.8,224.1,1\n358,-1,926.4,5,61.8,160.1,1\n358,-1,763.6,93.5,42.7,150.9,0.999\n358,-1,954.5,925.2,80,155.8,0.732\n358,-1,383.4,4.8,41.7,78.5,0.208\n54,-1,1221.6,28.8,61.6,118.3,1\n54,-1,686.4,206.1,79.6,113.5,1\n54,-1,399.7,350.2,86.3,232.5,1\n54,-1,1487.7,70.2,54.5,149.9,1\n54,-1,488.8,179.3,87.5,196.6,1\n54,-1,1362,566.2,104.7,245.8,1\n54,-1,704.1,1,55.7,158.1,1\n54,-1,1720.9,456.5,78.1,210.4,1\n54,-1,212.7,129.7,50,162.6,1\n54,-1,355.4,109.9,55.7,176.2,1\n54,-1,158.5,360.7,64.1,194.9,1\n54,-1,793.9,148,62.7,179.2,1\n54,-1,865.1,191.9,70.4,186.8,1\n54,-1,284.4,127.1,54.5,169.2,1\n54,-1,102.7,545.9,84.8,254.4,1\n54,-1,1007,173.2,72.5,180.7,1\n54,-1,4.8,777.2,70.5,234.3,1\n54,-1,434.4,97.4,57.2,158,1\n54,-1,1314.4,175.9,57.5,170.6,1\n54,-1,540.5,63.2,45,168.1,1\n54,-1,1372.2,211.5,41.5,168.8,0.999\n54,-1,1477.7,215.9,59.7,194.7,0.999\n54,-1,388.9,48,52.7,170.9,0.999\n54,-1,484.7,43.9,56.9,159.4,0.999\n54,-1,1862.3,270.6,58.7,205.7,0.996\n346,-1,1221.6,30.9,61.1,119.4,1\n346,-1,687.3,206.3,78.2,112.8,1\n346,-1,1736.5,76.1,57.1,156.7,1\n346,-1,1606.2,1.1,54.9,135.8,1\n346,-1,445.6,98.9,72.5,199,1\n346,-1,286.6,131.7,54.1,172.5,1\n346,-1,451.2,576,92.7,243.7,1\n346,-1,796.7,154.2,58.5,170.7,1\n346,-1,1719.1,457.8,79.7,212.8,1\n346,-1,992.3,412.9,61.2,194.7,1\n346,-1,1830.4,487.6,67.9,206.9,1\n346,-1,207.9,140.7,58.9,163,1\n346,-1,970.2,59.5,62.5,173,1\n346,-1,108.8,348.5,52.1,191.1,1\n346,-1,364.9,105.5,56.3,182.2,1\n346,-1,1445,1.8,54.3,119,1\n346,-1,1551,616.9,86.2,239.8,1\n346,-1,1034.2,66.3,54.3,165.2,1\n346,-1,519.9,99.3,39.1,167.4,1\n346,-1,226.8,338.1,56.9,189.9,1\n346,-1,433.5,356.2,75.6,204.6,1\n346,-1,927.3,19.1,60.5,162.3,1\n346,-1,843.3,452.1,85.2,227.4,1\n346,-1,396.9,488.6,86.4,236.2,1\n346,-1,897.6,465.5,71.7,206.1,1\n346,-1,711.8,95.7,58.5,171.6,0.999\n346,-1,770.5,95.6,40.7,152.2,0.999\n346,-1,1877.8,62.3,43.2,168.3,0.988\n346,-1,844.2,1.1,47.1,91.8,0.949\n346,-1,951.4,926.9,74.8,154.1,0.873\n562,-1,1221,30.7,62.1,119.2,1\n562,-1,686.9,206.1,79.4,114.3,1\n562,-1,1484.3,3.3,60.1,146.1,1\n562,-1,1663.8,269.7,77.2,203.3,1\n562,-1,541.5,116.6,57.2,170.2,1\n562,-1,789.5,146,65.9,176.6,1\n562,-1,376.8,229.5,64.5,190.8,1\n562,-1,1579.2,1.3,56.4,141.4,1\n562,-1,1820,238.4,70.1,183.6,1\n562,-1,1721.7,453.2,79.8,212.8,1\n562,-1,872.9,1,53.3,109.5,1\n562,-1,1657.4,1.6,52.9,145,1\n562,-1,985.3,3.9,52.3,94,1\n562,-1,199.3,290.7,65.5,189.5,1\n562,-1,143.3,258.2,56.5,211.3,1\n562,-1,289.1,121.4,52.2,172.5,1\n562,-1,218.4,136.1,58,165,1\n562,-1,429.7,143.1,53.8,151.9,1\n562,-1,755.5,78.5,45.6,155.4,1\n562,-1,1597.9,589.2,70.4,237.5,1\n562,-1,743,590,80.7,249.4,1\n562,-1,358.7,108.5,51.9,171.2,1\n562,-1,463.4,86.7,63.3,177,1\n562,-1,417.2,49.8,49.2,170.9,0.999\n562,-1,1018.1,786.2,120,270.3,0.999\n562,-1,245.3,909.2,77.9,171.8,0.999\n562,-1,1100.8,806.3,89.6,235,0.997\n562,-1,1024.8,944.7,69.6,136.3,0.217\n529,-1,1221.5,30.5,62.5,120.4,1\n529,-1,1485.8,1,59.3,141.6,1\n529,-1,687,205.9,78.3,114.8,1\n529,-1,387.1,198.8,63.8,188.4,1\n529,-1,1718.3,457.5,82.3,209.7,1\n529,-1,1670.3,15.2,52.2,160.5,1\n529,-1,168.7,317.8,66.1,194.2,1\n529,-1,992.6,1.4,56.5,113.9,1\n529,-1,780.4,145.4,56.3,172.7,1\n529,-1,288.3,125.4,52.9,171.5,1\n529,-1,465.2,119.7,63.2,187.6,1\n529,-1,883.2,1.2,53.5,117.6,1\n529,-1,1605.9,2.9,58.1,170.2,1\n529,-1,1701.1,301.9,79.3,210.3,1\n529,-1,1764.6,216.5,69.2,170.7,1\n529,-1,267.4,826.1,80.6,254.9,1\n529,-1,191,784.4,94.6,289.6,1\n529,-1,516.6,100.6,59.6,180.8,1\n529,-1,816.8,600.1,73.9,258.8,1\n529,-1,929.2,1,57.4,111.5,1\n529,-1,219.2,137.1,60.2,159.8,1\n529,-1,1579.2,594.2,63.8,240.8,1\n529,-1,451.5,3.4,69.8,167.5,1\n529,-1,1782,656.2,68.3,214.3,1\n529,-1,957.8,728.6,122.4,256.6,1\n529,-1,402.3,35.4,46.1,158.3,0.999\n529,-1,1591.8,286.1,58.4,200.5,0.996\n529,-1,1873.7,222,47.3,207.2,0.971\n529,-1,752.8,95.3,54.2,165.8,0.51\n529,-1,1050.1,751.8,81,241.8,0.228\n440,-1,1221.2,30.3,63,118.4,1\n440,-1,936.8,3.8,60.7,159.4,1\n440,-1,686.8,205.9,78.3,113.3,1\n440,-1,359.3,108.1,53,178.5,1\n440,-1,1007.8,15.6,55.1,155.2,1\n440,-1,111.2,349.3,55.1,191.6,1\n440,-1,449.9,224,74.8,197.9,1\n440,-1,852.3,1.7,52.1,136.2,1\n440,-1,1719.7,457.7,78.8,211,1\n440,-1,1351.9,530.6,63.4,198.2,1\n440,-1,234.6,239.6,54,179,1\n440,-1,286.5,130.2,53.7,168.1,1\n440,-1,766.2,567.4,81.4,253.7,1\n440,-1,1748.9,147.9,67.6,171.7,1\n440,-1,797.9,150.1,52.7,171.1,1\n440,-1,366.3,661.6,74.7,243.9,1\n440,-1,1564.3,615.2,77.8,241.9,1\n440,-1,879.5,573.9,107.7,242.3,1\n440,-1,270.3,634.3,91.4,264.9,1\n440,-1,431.9,116.5,57.3,170.8,1\n440,-1,532,68.6,54.8,172.7,1\n440,-1,1844.8,403.3,76.2,200.9,1\n440,-1,1678.4,374.7,73.5,203.6,1\n440,-1,423.5,1,42.9,133.3,1\n440,-1,1693.2,94.8,71.5,172.6,1\n440,-1,363.4,1.3,60.2,132.1,1\n440,-1,220.7,136.8,60.1,153.7,1\n440,-1,712.3,86.6,61.1,177.8,0.999\n440,-1,959.8,598.9,85.5,219.6,0.999\n440,-1,725.8,1,50,102.5,0.999\n440,-1,1004.1,923.3,88.9,157.7,0.98\n440,-1,756.3,86.1,45.3,154.8,0.955\n194,-1,1221.8,30.7,61.2,120,1\n194,-1,686.6,207.3,79,111.6,1\n194,-1,211.8,127.4,56.1,166.7,1\n194,-1,108.6,346.6,50.4,192.2,1\n194,-1,42.9,630.1,117.8,250.9,1\n194,-1,704.9,1,55.6,159.1,1\n194,-1,1489,68.6,55.2,148.9,1\n194,-1,409.1,622.4,92,250.3,1\n194,-1,355.9,104.8,54.9,179.3,1\n194,-1,1358.3,566.4,105.1,246.9,1\n194,-1,289.1,127.6,55.1,169.8,1\n194,-1,1720.9,457.6,77.3,210.7,1\n194,-1,529.6,139.4,60.4,159.3,1\n194,-1,397.3,40.1,62.4,166.4,1\n194,-1,1167.2,148.4,66.1,182.7,1\n194,-1,877.9,166.2,80.3,188.5,1\n194,-1,1061.3,144.1,50.6,157.8,1\n194,-1,421.6,218.1,75.4,215.1,1\n194,-1,518.9,304.8,71.3,210.9,1\n194,-1,795.6,150.8,61.2,176.5,1\n194,-1,801.3,299.9,70.2,187.3,1\n194,-1,230.8,544.7,63.1,213,1\n194,-1,1226,145.7,50.9,174.4,1\n194,-1,460.5,2,51.4,94.6,1\n194,-1,751.1,282.7,68.4,203.8,1\n194,-1,975.2,918.2,73.4,162.8,0.982\n1047,-1,1221.8,30.1,61.7,119.3,1\n1047,-1,687,206.7,79.8,114.6,1\n1047,-1,794.9,142.3,70,171.3,1\n1047,-1,476.3,323.7,76.4,195.9,1\n1047,-1,1720.2,455.5,79.8,215.3,1\n1047,-1,287.7,125,54.6,174.9,1\n1047,-1,1308.7,199.6,58.1,165.5,1\n1047,-1,356.8,330.5,76.6,209.8,1\n1047,-1,1649.5,676.4,96.1,237.7,1\n1047,-1,1722.3,218.5,58.9,177.1,1\n1047,-1,1117.5,550.5,87.3,248.4,1\n1047,-1,751.3,73.9,53.9,162.4,1\n1047,-1,852.8,237.7,65.4,193.1,1\n1047,-1,229.1,137.8,54.5,163.9,1\n1047,-1,936.2,232.5,65.5,201.9,1\n1047,-1,373.7,99.9,58.4,179.8,1\n1047,-1,274.7,540.7,95.3,211.6,1\n1047,-1,374.7,518.4,67.5,241.3,1\n1047,-1,1470.7,218.9,73.6,167.6,1\n1047,-1,288.2,331.7,74,207.5,1\n1047,-1,510.7,171.5,75.6,194.9,1\n1047,-1,308.3,2.5,38.7,130.8,1\n1047,-1,1573.2,589.1,103,240.9,1\n1047,-1,583.7,537.1,63,254,1\n1047,-1,469.4,172.6,55.6,165.4,1\n1047,-1,430,70.4,65.9,171.8,0.999\n1047,-1,1863.4,262.4,57.6,197.7,0.995\n1047,-1,876.1,927.2,70.7,153.8,0.101\n787,-1,1221.5,29.3,62.2,119.3,1\n787,-1,686.8,204.9,80.6,114.5,1\n787,-1,547.5,114.4,61.6,177.1,1\n787,-1,1723.9,452.3,75,214.3,1\n787,-1,1575.3,590,100,234.2,1\n787,-1,1486.1,25.3,59.4,147.6,1\n787,-1,291.6,500.4,79.7,232.8,1\n787,-1,477.2,83.8,60.1,177.3,1\n787,-1,277,167,57.5,198.9,1\n787,-1,783.3,127,52.4,182.9,1\n787,-1,1442.4,65.2,50.9,165.4,1\n787,-1,749.5,71.4,54.8,162.3,1\n787,-1,447.2,222.9,53.9,187.3,1\n787,-1,390.9,226,67.9,178.5,1\n787,-1,336.6,189,50.5,175.8,1\n787,-1,234.4,134,49.6,164.7,1\n787,-1,1101.8,611.2,78.9,254.9,1\n787,-1,584.2,580.9,70.2,242.5,1\n787,-1,254.1,1,52.3,120.5,1\n787,-1,423.8,86,56.6,166.6,1\n787,-1,1037.3,636.7,74.2,251,1\n787,-1,451.1,4,44.8,95.9,0.226\n471,-1,1221.9,30.8,62,117.5,1\n471,-1,686.9,206.4,79,112.4,1\n471,-1,1004.1,1,55.3,152.5,1\n471,-1,934.8,1,57.2,146.1,1\n471,-1,452.2,186.2,72.1,196.1,1\n471,-1,282.9,210.1,52.3,172.7,1\n471,-1,1792.4,363.5,90.3,213,1\n471,-1,360,109.8,53.3,175.5,1\n471,-1,1698.5,459,101.1,209,1\n471,-1,1505.9,1,58.2,115.2,1\n471,-1,1641.7,341.5,65.4,200.2,1\n471,-1,877.2,1,52.3,133,1\n471,-1,120.7,342.8,58.2,189.9,1\n471,-1,803.9,143.2,48.2,176,1\n471,-1,1540.4,605.1,75.1,243.2,1\n471,-1,217.2,138.1,63.5,158,1\n471,-1,330.5,719,73.7,246.7,1\n471,-1,235.5,685.2,91.1,270.4,1\n471,-1,1724.1,167.5,65.5,167.4,1\n471,-1,900.9,626.4,117.2,243.6,1\n471,-1,515.4,81.2,59.2,173.4,1\n471,-1,810,586,98.2,259.7,1\n471,-1,1664.1,49.3,59.5,173.6,1\n471,-1,445.6,32.6,72.9,182.3,1\n471,-1,711.9,94,55.6,163.8,0.999\n471,-1,753.1,98.3,56.4,138.5,0.999\n471,-1,1762.1,144.6,82.5,177.9,0.999\n471,-1,1719.2,59.5,51,172.4,0.998\n471,-1,988,647.4,80.9,226.5,0.998\n471,-1,414.2,4.6,44.1,153.1,0.992\n471,-1,1026.3,923.3,82.5,157.7,0.984\n471,-1,428.4,148,51,160.9,0.954\n925,-1,1221.1,30.2,62.1,118.6,1\n925,-1,686,206.1,80.3,113.3,1\n925,-1,792.7,141.8,74.9,170.2,1\n925,-1,1277.1,830.2,99.4,250.8,1\n925,-1,454.9,205.9,69.8,193.9,1\n925,-1,1576.6,591.7,101.8,236.6,1\n925,-1,1616.6,77.3,52.5,165.8,1\n925,-1,1125.5,47.5,55.5,161.9,1\n925,-1,1721.3,452.6,79,214.3,1\n925,-1,557,116,58.3,172.6,1\n925,-1,750.9,73.1,56.6,160.3,1\n925,-1,1476.5,115.3,60.8,162.2,1\n925,-1,300,161.2,71.3,201.3,1\n925,-1,1428.7,1.8,48.1,128.9,1\n925,-1,1488.7,1,62.2,126,1\n925,-1,946.1,392.1,83,227.3,1\n925,-1,309.9,719.4,88.2,258.5,1\n925,-1,402.2,363.1,63.6,211.5,1\n925,-1,239.8,133.7,53.9,164.9,1\n925,-1,863.5,410,64.5,219.5,1\n925,-1,471.2,21.5,53.9,152.2,1\n925,-1,328.7,373.8,78.7,190.4,1\n925,-1,1748.7,677.7,92.4,244.6,1\n925,-1,1730,105.7,54.4,174,1\n925,-1,254.8,1.4,53.8,120.2,1\n925,-1,371.7,206,59.3,186.7,1\n925,-1,424.2,66.5,65,178.4,1\n925,-1,313.8,2,48.2,129.6,1\n2,-1,687.5,206.3,78.4,113.4,1\n2,-1,1486.9,69.7,55.7,148.4,1\n2,-1,704.8,1,56,156.8,1\n2,-1,1362.2,567.2,105.3,245.4,1\n2,-1,509.8,140.3,98.2,186.1,1\n2,-1,1732.5,456.3,76.7,216.6,1\n2,-1,796.1,147.7,61.8,175.3,1\n2,-1,286.7,124.6,56.6,171.6,1\n2,-1,102.1,545.7,86.2,254.9,1\n2,-1,1033.8,132.9,80.3,186.5,1\n2,-1,1791.2,205.2,69.6,185.4,1\n2,-1,1097.9,210.1,64.1,184.3,1\n2,-1,373.4,408,84.5,245.3,1\n2,-1,222.4,129.2,48.1,162.5,1\n2,-1,1197.9,35.5,73.1,117,1\n2,-1,1040.1,1,48,84.6,1\n2,-1,1633.8,262.3,66.7,183.4,1\n2,-1,871,123.2,62.4,175.6,1\n2,-1,356,103.4,53.5,179.9,1\n2,-1,415.6,92,55.4,171.4,1\n2,-1,1447.9,250,55.6,172.8,1\n2,-1,225.8,392.7,62.8,206.2,1\n2,-1,463.5,79.9,53.2,174.7,1\n2,-1,262.7,364.2,64.7,228.8,0.998\n2,-1,911.4,127,46.8,162.3,0.863\n2,-1,997.9,2.2,48.6,78.6,0.313\n6,-1,687.5,206,78.4,114.4,1\n6,-1,1071.8,212.1,81.5,182.5,1\n6,-1,1486.4,69.7,56.1,147.6,1\n6,-1,704.8,1.1,55.7,157.1,1\n6,-1,1361.9,567.1,104.6,245.8,1\n6,-1,508.3,142.2,99.9,187.9,1\n6,-1,1728.8,454.7,77.3,216.4,1\n6,-1,1796.8,204.3,66.4,188.1,1\n6,-1,101.6,545.2,85.8,255.7,1\n6,-1,794.9,148.2,61.8,173.7,1\n6,-1,219.8,128.5,49.1,164.8,1\n6,-1,285,122.7,55.8,172.3,1\n6,-1,874,127.1,63.4,178.8,1\n6,-1,374.8,406.6,83.8,237.7,1\n6,-1,355,105.4,54.4,177.7,1\n6,-1,1198.7,36.4,73.4,115.2,1\n6,-1,1631.2,258.4,63.1,187.7,1\n6,-1,415.1,90.5,55.6,170.2,1\n6,-1,221.4,390.5,65.9,205.6,1\n6,-1,462.8,77.2,51.1,171,1\n6,-1,1041.1,1,48.2,83.5,1\n6,-1,1444.3,243.8,54.7,178.8,1\n6,-1,1033.9,135.9,77.1,191,0.999\n6,-1,1413.1,196.6,46,179.5,0.129\n6,-1,1006.7,2.8,47,74.5,0.051\n7,-1,687.1,205.9,79.2,114.3,1\n7,-1,505.2,141.8,103.7,189.4,1\n7,-1,1487,70.1,55.5,146,1\n7,-1,704.7,1.6,56.1,156.2,1\n7,-1,1362,567.1,104.4,244.9,1\n7,-1,1069,210.2,82.6,181.5,1\n7,-1,1796.2,205.7,67.8,188.8,1\n7,-1,1727.6,455.7,78.2,212.9,1\n7,-1,102.1,546.4,85,252.1,1\n7,-1,795.1,148.5,62.3,174.1,1\n7,-1,219.6,129.2,48.8,163.7,1\n7,-1,875.2,128.7,61.2,174.9,1\n7,-1,376.4,404.9,83.8,239.2,1\n7,-1,1199.1,35.8,74.4,115.4,1\n7,-1,285,122,55.6,173.6,1\n7,-1,355.4,106.7,53.4,176.6,1\n7,-1,218.6,388.6,65.8,206,1\n7,-1,1630.8,259.8,61.3,184.1,1\n7,-1,415.7,92.8,54.7,166.6,1\n7,-1,462,77.3,50.5,168.6,1\n7,-1,1443.6,242.4,54,179.3,1\n7,-1,1040.6,1,47.2,82.8,1\n7,-1,1034.8,137.2,76.4,188.6,0.998\n7,-1,1410.2,192.1,46,172.6,0.838\n37,-1,1208.5,27.9,74.8,121.8,1\n37,-1,686.3,206,80.2,114.1,1\n37,-1,388.9,368.5,89.7,238.4,1\n37,-1,704.7,1.1,56.1,158,1\n37,-1,1486.2,69.4,56.4,150.3,1\n37,-1,1362.2,567.2,105.1,244.7,1\n37,-1,1722.4,457.1,76.4,210.3,1\n37,-1,942.6,195.2,77.6,182.8,1\n37,-1,482.9,164,92,196.8,1\n37,-1,183.2,372,68.1,191.2,1\n37,-1,214.2,126.8,49,165.5,1\n37,-1,795.6,149.6,61.3,174.3,1\n37,-1,103.3,548.7,84,250.6,1\n37,-1,1010,155.3,79.4,187.4,1\n37,-1,284.6,123.5,53.3,171.8,1\n37,-1,448.2,53.8,52.8,171.5,1\n37,-1,354.6,109.7,54.1,173.5,1\n37,-1,863.3,141.5,64.5,187.9,1\n37,-1,2.1,810.8,64,242.1,1\n37,-1,1840,251.2,70.4,194.9,1\n37,-1,1354.2,190.1,52.4,161,0.999\n37,-1,393.6,75.6,50.8,167.6,0.996\n37,-1,1585.3,235.1,52.5,177.8,0.941\n37,-1,909.6,157.7,43.5,174.8,0.117\n37,-1,1403.3,229.2,38.9,161.6,0.075\n39,-1,686,206.5,80.6,113.9,1\n39,-1,1210.4,28.9,74,121.4,1\n39,-1,922.1,194.3,91.7,185.9,1\n39,-1,390,367.2,88.7,238.7,1\n39,-1,1486.1,69.5,56.4,150.8,1\n39,-1,704.3,1.1,56.4,157.7,1\n39,-1,1361.8,566.5,105.6,245.7,1\n39,-1,1722.8,457.3,75.5,210.2,1\n39,-1,483.2,165.2,94.5,196.5,1\n39,-1,179.7,372,70.5,192,1\n39,-1,794.5,149.2,61.7,174.9,1\n39,-1,214.4,128.5,49.4,163.4,1\n39,-1,1008.9,155.2,80.7,189.3,1\n39,-1,102.4,547.7,85.4,252.3,1\n39,-1,284.6,124.5,54,170.6,1\n39,-1,356.1,109.3,54.6,170.4,1\n39,-1,864.8,145.2,58.4,185.5,1\n39,-1,447.5,48.4,52.3,169.4,1\n39,-1,1.6,807,65.7,244.4,1\n39,-1,1841.6,252.2,73.5,196.4,1\n39,-1,1349.4,189.2,55.2,166.1,0.998\n39,-1,387.4,78.3,58,164.7,0.998\n39,-1,494.1,42.5,41.4,147.6,0.174\n39,-1,1502.4,218.5,51.3,193.5,0.066\n55,-1,1221.4,29.7,61.3,116.6,1\n55,-1,686.4,206.1,79.5,113.8,1\n55,-1,400.1,349.6,86.1,231.8,1\n55,-1,1487.4,70.2,54.8,149.9,1\n55,-1,489.1,179.8,86.6,198,1\n55,-1,704.1,1,55.8,157.8,1\n55,-1,1362.1,566.5,104.6,245.6,1\n55,-1,1722.2,455.9,76.3,210.8,1\n55,-1,212.6,128.4,50,165.1,1\n55,-1,354.8,111.1,55.6,173.3,1\n55,-1,1006.2,173.7,73.1,179.6,1\n55,-1,794.4,147.3,62.7,180.9,1\n55,-1,859.7,192.9,71.9,182.6,1\n55,-1,102.8,545.8,84.9,254.5,1\n55,-1,284.1,126.4,55,169,1\n55,-1,156.6,360.5,64.5,195.1,1\n55,-1,6.7,777.1,69.3,230.4,1\n55,-1,437.1,99.6,56.6,157.4,1\n55,-1,1313.4,177.6,59.3,168.5,1\n55,-1,1369.9,207.7,42.5,172.1,1\n55,-1,540.9,62.3,44.3,170.6,0.999\n55,-1,1476.5,214,61.2,192.8,0.999\n55,-1,389.6,46.9,51.1,168.6,0.999\n55,-1,484.9,44.2,57.3,161.6,0.999\n55,-1,1862.6,272.8,58.4,205.8,0.998\n62,-1,1221,30,61.5,117.2,1\n62,-1,686.4,206.4,79.9,113.5,1\n62,-1,1486.7,70.4,55.7,151.8,1\n62,-1,404.5,342.2,82.6,236.7,1\n62,-1,704.9,1,55.5,158.5,1\n62,-1,1361.3,566.1,105.2,245.4,1\n62,-1,355.6,110.9,54.8,174.9,1\n62,-1,1722.2,456.7,76.5,210.2,1\n62,-1,487.7,186.9,81,197.6,1\n62,-1,1000.5,185.2,69.4,172.7,1\n62,-1,102.7,546,85.2,254.2,1\n62,-1,148,360.9,55.5,191.3,1\n62,-1,830.6,196.2,84.3,181.5,1\n62,-1,212.4,129.3,49.6,166,1\n62,-1,287.1,126.7,53.9,169.8,1\n62,-1,1293.6,178.9,63,168.3,1\n62,-1,1464.7,207.7,62.7,194.4,1\n62,-1,1360.2,210.3,43.6,166.5,1\n62,-1,10.9,753.6,68.9,237.1,1\n62,-1,385,39.2,51.9,161.4,1\n62,-1,540.9,64.2,43.5,164.1,1\n62,-1,457.4,114.7,49.6,145.4,1\n62,-1,483.8,39.8,57.5,166.1,0.999\n62,-1,890.9,185.1,53.6,164,0.999\n62,-1,795.2,145,62.7,185.6,0.999\n62,-1,439,32.2,52.3,152.5,0.996\n62,-1,253.4,92.3,47.4,179.1,0.957\n62,-1,1875.5,289,45.5,196.8,0.546\n66,-1,1222.1,31.4,60.8,116.1,1\n66,-1,685.8,206.5,80.7,112.2,1\n66,-1,405.7,336.3,84.7,238,1\n66,-1,1487.6,69.9,54.9,148.7,1\n66,-1,1362,566.2,104,245.5,1\n66,-1,704.8,1,55.3,159.2,1\n66,-1,356.2,106.2,54.5,177.5,1\n66,-1,1721.5,456.9,77.8,209.8,1\n66,-1,814.3,194.8,73.7,179.5,1\n66,-1,489.8,191.3,78.1,195.5,1\n66,-1,146.4,357.3,56.9,195.8,1\n66,-1,102.8,546.2,85.1,253.2,1\n66,-1,1285.4,184.2,56.4,166.7,1\n66,-1,1453.2,202.5,68.6,198.6,1\n66,-1,995.2,187.4,68.9,175.8,1\n66,-1,211.7,127.3,50.6,166.8,1\n66,-1,9.9,749,71,239.2,1\n66,-1,892.5,184.8,55.6,167.7,1\n66,-1,288.2,127.4,53,168.4,1\n66,-1,461.6,114.4,56.3,149.3,1\n66,-1,539.3,65.3,46.7,165.1,1\n66,-1,1351.9,204.8,41,170.2,1\n66,-1,383.3,36.3,52.6,164.2,1\n66,-1,436.8,26.3,53.5,161.8,0.999\n66,-1,254.9,87.4,47.7,183.5,0.977\n66,-1,492.5,36.4,49.4,171.2,0.957\n66,-1,389.9,923.6,99,157.4,0.625\n66,-1,1875.6,286.4,45.4,195.7,0.207\n67,-1,1222.1,31.1,60.5,116.8,1\n67,-1,405.5,336,87.3,234.8,1\n67,-1,686.7,206.7,80.1,112.5,1\n67,-1,1487.7,69.8,54.6,146.9,1\n67,-1,705,1,55.5,159.2,1\n67,-1,1361.8,566.1,104.6,245.2,1\n67,-1,355.5,106.2,54.9,176.5,1\n67,-1,1721.5,457.5,77.3,208.6,1\n67,-1,1279.9,178.5,61.9,168.5,1\n67,-1,808.5,194.9,74.6,178.8,1\n67,-1,144.5,356.5,59.1,196.7,1\n67,-1,490.5,192,76.8,195.7,1\n67,-1,103,546.7,84.5,252.5,1\n67,-1,211.3,127.1,51.1,167.6,1\n67,-1,994.7,186.8,68,178.2,1\n67,-1,889.5,186.1,56.8,165.5,1\n67,-1,288.7,128.8,52.4,166.5,1\n67,-1,465.3,113.6,55.2,153.5,1\n67,-1,10,747,70.8,240.6,1\n67,-1,1451.3,200,71.3,204.4,1\n67,-1,539.5,64.5,47.1,167.5,1\n67,-1,1350.9,204.7,41.4,170.7,1\n67,-1,383,35.2,54.9,165.2,1\n67,-1,435.8,26.2,51.7,160.3,0.999\n67,-1,255.5,85.5,49.1,184.8,0.987\n67,-1,391,919.4,97.6,161.6,0.907\n67,-1,490.5,58.3,44.1,162.6,0.227\n70,-1,1222,31.1,61,116.6,1\n70,-1,406.1,332.4,86.7,231.4,1\n70,-1,686.8,206.9,79.4,113,1\n70,-1,1487.2,69.4,55.3,147.6,1\n70,-1,1362.3,566.6,104.2,245.3,1\n70,-1,1270.4,177.2,59.7,162.3,1\n70,-1,704.8,1,56,159.4,1\n70,-1,355.3,108.5,55.6,176.9,1\n70,-1,792.6,194.1,76,176.1,1\n70,-1,139.1,353.5,59,198.5,1\n70,-1,1721,456.9,78.5,209.7,1\n70,-1,494.3,195.7,75.5,194.6,1\n70,-1,102.9,546.9,85.9,252.3,1\n70,-1,1344.8,205.7,42.5,163.6,1\n70,-1,211.4,129.9,50.9,164.1,1\n70,-1,991.9,186.7,69,177.8,1\n70,-1,288.9,128.1,52.9,168.4,1\n70,-1,1440.9,199.7,75.4,201.6,1\n70,-1,11.5,743.5,67.9,236.8,1\n70,-1,468.1,112.9,57.5,164.9,1\n70,-1,538.1,63.7,48.7,171,1\n70,-1,888.5,185.6,56.3,165.6,1\n70,-1,384.9,32.3,52.8,161,1\n70,-1,436.8,24.8,51.2,160.6,1\n70,-1,256.4,89.1,54.6,182.9,0.992\n70,-1,385.2,910.8,103.3,170.2,0.975\n70,-1,854.4,166.9,52.7,175,0.777\n73,-1,1221.5,30.8,61.7,117.2,1\n73,-1,1487.5,69.2,55.5,149.9,1\n73,-1,686.8,206.3,79.2,116,1\n73,-1,409.7,331.6,84.4,230.3,1\n73,-1,704.6,1,56.2,158.5,1\n73,-1,356.3,106.9,55.3,178.3,1\n73,-1,1362,566.9,104.6,244.6,1\n73,-1,1259.8,175.5,62.1,167.9,1\n73,-1,491.5,200,79.4,193.8,1\n73,-1,1721.9,455.4,77.4,212.3,1\n73,-1,10.5,738.8,69.6,226.8,1\n73,-1,136.4,354.5,55.2,194.1,1\n73,-1,988.6,186.9,70.5,183.9,1\n73,-1,779.5,191.2,81.5,180.7,1\n73,-1,103.4,546.5,84.9,253.5,1\n73,-1,1434.6,200.4,77.6,197.1,1\n73,-1,211.6,130.4,51.4,164.2,1\n73,-1,290,128.3,51.2,167.9,1\n73,-1,1337.5,205.9,41.3,162,1\n73,-1,538.2,63.5,48.2,169.4,1\n73,-1,887.1,189.3,56,168.1,1\n73,-1,467.8,114.7,63.1,162,1\n73,-1,382.7,30.8,51.6,163.8,1\n73,-1,435.2,25.3,51.6,160.4,1\n73,-1,385.8,906.2,103,174.8,0.998\n73,-1,256.4,93.4,54.5,174.7,0.997\n73,-1,843.8,167.3,56.9,180.3,0.982\n80,-1,1221.8,30.3,61.4,118.1,1\n80,-1,1234.1,168.8,76,161.6,1\n80,-1,704.1,1,56.3,159.8,1\n80,-1,1486.5,68.8,56,151.3,1\n80,-1,356.7,106,54.7,178,1\n80,-1,1359.4,566.8,105,243.2,1\n80,-1,412.5,325.6,83.7,231,1\n80,-1,492.7,203.6,77.5,198.7,1\n80,-1,686.4,206.6,80.1,114.6,1\n80,-1,1722.9,456.9,75.6,209.6,1\n80,-1,102.4,547.7,85.8,251.8,1\n80,-1,981.4,188.9,70.7,185.2,1\n80,-1,770.6,186,57.9,185.3,1\n80,-1,293.1,127.3,51.6,168.2,1\n80,-1,13.7,724.8,69.2,235.5,1\n80,-1,387.7,889.3,100.4,191.7,1\n80,-1,1326.9,205.1,41.3,165.3,1\n80,-1,211.6,131.4,51.1,162.9,1\n80,-1,1425.7,202.3,69.5,190,1\n80,-1,130.1,355.3,48.2,192.3,1\n80,-1,837.1,174.6,58.4,186.4,1\n80,-1,539.2,62.2,47.9,175.3,1\n80,-1,881.8,194.5,55,168.7,1\n80,-1,432.5,22.7,55,162.6,1\n80,-1,1491,200.5,51.2,181.9,1\n80,-1,474.7,122.8,59.9,160.4,0.999\n80,-1,379.9,27,54.3,163.4,0.999\n80,-1,253.3,97.3,57.6,176.4,0.998\n81,-1,1221.4,29.9,61,119.3,1\n81,-1,1232.8,166.1,74.4,164.5,1\n81,-1,1486.5,68.8,55.8,150.7,1\n81,-1,704,1,56.4,159,1\n81,-1,1359,565.3,106.5,245.4,1\n81,-1,356.6,106.4,55,178.1,1\n81,-1,493.6,204.3,77,199.3,1\n81,-1,412.8,325.3,84.9,230.6,1\n81,-1,1722.3,455.7,76.3,211.7,1\n81,-1,979.8,188.9,71.6,184.6,1\n81,-1,102.8,547.9,84.9,251,1\n81,-1,685.7,205.7,81.6,116.1,1\n81,-1,1324.9,204.8,42.6,161.3,1\n81,-1,390,886.7,98.9,194.3,1\n81,-1,293.6,126.7,51.7,167.5,1\n81,-1,129.7,357.3,48.6,188.3,1\n81,-1,1425.5,200.2,67.8,190.9,1\n81,-1,14.4,724.1,68.5,233.9,1\n81,-1,211.3,132.1,51.5,164,1\n81,-1,767.6,182.6,56.8,183.7,1\n81,-1,1490.3,201.6,51.9,180.5,1\n81,-1,836.3,171.9,58.7,191.7,1\n81,-1,881.3,195.7,54.3,168.2,1\n81,-1,538.9,63.5,48.3,174.1,1\n81,-1,432.8,21.5,54.2,163.2,1\n81,-1,378.6,26.6,56.3,164.9,0.999\n81,-1,476.3,123.2,57.5,158.6,0.999\n81,-1,255.8,100.5,57.8,170.3,0.998\n85,-1,1222,30.5,61.3,116.8,1\n85,-1,497.5,209.3,74.9,198.5,1\n85,-1,704.3,1,55.8,158.1,1\n85,-1,417,319.6,83.4,231.4,1\n85,-1,1487.7,69.6,54.5,147.4,1\n85,-1,1359.1,566,105,244.9,1\n85,-1,976.2,192.5,72.2,186,1\n85,-1,1223.7,164.3,68.7,169.3,1\n85,-1,1721.6,456.5,77.1,210.8,1\n85,-1,356.9,105.1,54.9,179.8,1\n85,-1,392.8,873.2,103.3,207.8,1\n85,-1,102.2,545.6,85.2,255.5,1\n85,-1,749.6,183.4,62.9,176,1\n85,-1,16.6,720.2,70.2,229.8,1\n85,-1,295.3,127.8,50.6,169.1,1\n85,-1,1420.3,197,64.4,193.9,1\n85,-1,210.1,130.9,50.7,163.4,1\n85,-1,688.1,206.6,73.4,116.3,1\n85,-1,1482.3,195.8,52.1,176.8,1\n85,-1,127.5,354.3,43.2,189.5,1\n85,-1,1317,201.3,42.6,170,1\n85,-1,539.1,64.7,47.9,169.4,1\n85,-1,255.4,95.6,59.3,180.4,1\n85,-1,435.1,20,53.5,160.5,1\n85,-1,479.9,124.9,55.2,155.3,1\n85,-1,876,197.5,54.4,169.1,0.999\n85,-1,834,172.4,56.5,189.5,0.999\n85,-1,377.7,23.6,54.1,162,0.999\n85,-1,809,162.2,48.7,165,0.266\n88,-1,1222.1,30.3,61,117.2,1\n88,-1,418.8,315.8,83,229.6,1\n88,-1,703.9,1.7,56.3,157.9,1\n88,-1,355.5,108.3,56.4,176.3,1\n88,-1,1359.8,566.1,104.8,245.4,1\n88,-1,1487.4,69.6,54.9,147.1,1\n88,-1,1721.5,456.7,77.2,209.7,1\n88,-1,500.1,211.1,74.2,199.5,1\n88,-1,395.2,866.8,106,214.2,1\n88,-1,970.5,193.7,74.2,189.1,1\n88,-1,102.9,547.6,85.2,251.6,1\n88,-1,1217.7,157.3,59.7,178.2,1\n88,-1,738.6,185.4,66.8,182.5,1\n88,-1,210.7,131.1,50.6,163.7,1\n88,-1,295.1,127.2,51.5,169.1,1\n88,-1,22.7,712.3,67.4,227,1\n88,-1,1416.2,194.9,61.6,192.3,1\n88,-1,1307.4,201,44.5,170.7,1\n88,-1,1475.3,192.1,52.7,167.9,1\n88,-1,437,12.9,52.9,159.8,1\n88,-1,833.6,177.8,57.9,184.9,1\n88,-1,123.9,355.5,44.6,189.2,1\n88,-1,377.6,20.4,53.9,159.9,1\n88,-1,538.2,62.4,48.4,173.3,1\n88,-1,480.3,130.8,56.9,162.3,1\n88,-1,255.4,93.8,59.7,179.1,1\n88,-1,875.1,202.1,53.5,166.3,1\n88,-1,691.6,207.6,59.6,116.6,0.992\n88,-1,799.2,159,47.8,155.7,0.534\n88,-1,487.9,38,51.8,166,0.381\n93,-1,1222.1,31,61.6,115.9,1\n93,-1,704.4,1,56.2,159.1,1\n93,-1,1488.2,70.1,53.6,145.6,1\n93,-1,356.7,109.9,53.7,173.4,1\n93,-1,422.4,310.9,79.4,227.5,1\n93,-1,967.7,196.4,71.2,188.5,1\n93,-1,721.2,190.9,70.6,171.3,1\n93,-1,1721.9,455.9,76.7,211.2,1\n93,-1,1197.8,157,65.2,172.5,1\n93,-1,403.7,853.5,101.3,227.5,1\n93,-1,1358.2,565.3,105.9,246.2,1\n93,-1,101.5,546.5,87.1,254.3,1\n93,-1,295,126.9,53.7,169.9,1\n93,-1,118,351.2,48.2,194.2,1\n93,-1,209.9,130.1,50.7,164.5,1\n93,-1,501.9,215.3,74,197.9,1\n93,-1,1295.3,201.2,44.9,164.1,1\n93,-1,27.9,702.3,64.3,226.3,1\n93,-1,538,64.6,49,166.1,1\n93,-1,375.6,19.3,52.8,158.8,1\n93,-1,439.1,11.1,51.5,157.5,1\n93,-1,1461.1,190.9,56.8,174.4,1\n93,-1,866.2,206.2,56.4,169.8,1\n93,-1,1410.1,195.5,57.7,192.5,1\n93,-1,255.6,90.6,61.3,183.7,1\n93,-1,824.5,189.5,59.5,184.6,0.999\n93,-1,481.7,134.9,56.4,157.3,0.999\n93,-1,484.3,36.4,55.9,160.9,0.984\n93,-1,798.3,158.1,60.7,174.5,0.931\n98,-1,1221.7,30.1,61.9,117.2,1\n98,-1,704.3,1,55.9,160.2,1\n98,-1,356.6,104.5,55.2,179.8,1\n98,-1,1487.6,69.3,55.1,148.4,1\n98,-1,396,837.2,100.9,243.8,1\n98,-1,1179.4,154.2,80.4,173.7,1\n98,-1,424.9,304.9,76.4,233.1,1\n98,-1,1359.2,566.5,104.8,245.3,1\n98,-1,1722.6,456.5,76.3,211.3,1\n98,-1,103.5,553.1,85.1,244,1\n98,-1,110.9,351,49.4,191.3,1\n98,-1,955.3,198.3,73,190.5,1\n98,-1,293.3,124.4,54.2,173.1,1\n98,-1,504.1,222.9,70.1,196,1\n98,-1,209.7,128.4,49.9,168.1,1\n98,-1,1279.1,198.1,45.5,167.1,1\n98,-1,716.2,188.3,54.7,161.1,1\n98,-1,1447.7,189.5,58,176.9,1\n98,-1,816.6,194.7,58.9,185.1,1\n98,-1,30.3,693.2,64.2,229,1\n98,-1,539.1,64.6,46.8,167.2,1\n98,-1,437.8,7.8,50.9,157.9,1\n98,-1,1400.4,190.3,59.8,193.9,1\n98,-1,860.8,210.7,55.7,163.3,1\n98,-1,482.8,135.7,57,165.9,1\n98,-1,375.8,11.3,50.2,162.9,0.999\n98,-1,255.3,90.7,63.5,186.3,0.998\n98,-1,481.5,37,61.3,159.7,0.997\n98,-1,1158.4,947.9,78.9,133.1,0.076\n107,-1,1221.4,30.6,62.4,118.2,1\n107,-1,704.5,1,55.4,159.7,1\n107,-1,356.6,106.9,56.2,176.4,1\n107,-1,1162.4,151.8,62.5,170.4,1\n107,-1,389,817.7,100.5,263.3,1\n107,-1,1487,68.6,56,149,1\n107,-1,109.5,353.9,48.2,184,1\n107,-1,209,129,50.5,165.6,1\n107,-1,1721.1,455.8,77.4,212.2,1\n107,-1,1358.6,566.9,104.7,244.5,1\n107,-1,425.9,295.6,78.6,224.7,1\n107,-1,940.5,205.8,73.1,189.8,1\n107,-1,508.9,230.7,72.8,197.7,1\n107,-1,292.2,127.3,56.5,170.4,1\n107,-1,41.7,683.3,76.5,218.8,1\n107,-1,1262.9,189.1,44.7,167.5,1\n107,-1,102.8,547.3,85,252.4,1\n107,-1,538.3,64.2,48.4,170.3,1\n107,-1,701.2,185.7,56.1,161.4,1\n107,-1,805,196.3,63,187.7,1\n107,-1,440.4,4.2,53.2,152.4,1\n107,-1,849.8,220.7,54.6,163.7,1\n107,-1,376.1,7.1,49.5,161.9,1\n107,-1,482.1,151.4,54,162.2,1\n107,-1,483.3,39.6,58.7,162.3,0.999\n107,-1,1380.7,183.4,61.7,194.2,0.999\n107,-1,258.9,88.6,57.6,176.2,0.979\n107,-1,1427.8,186.3,51.7,174.6,0.97\n107,-1,1144.7,933.6,74.1,147.4,0.241\n108,-1,1221.3,30.4,61.8,117.8,1\n108,-1,1159.2,149.3,60.1,172.5,1\n108,-1,356.7,105.2,55.6,179,1\n108,-1,704.3,1,55.7,158.3,1\n108,-1,1487.4,68.3,55.9,149.6,1\n108,-1,389.7,815.2,100,265.8,1\n108,-1,209.5,129.1,50.8,164,1\n108,-1,109.4,353.5,48.4,184.6,1\n108,-1,1721.6,456.7,76.9,211,1\n108,-1,1358.2,566.7,105.2,245,1\n108,-1,939.4,204.4,72.9,191.7,1\n108,-1,290.9,126.7,56.8,171.3,1\n108,-1,426.2,293.7,77.8,224.9,1\n108,-1,509,230.7,72.9,199.6,1\n108,-1,42.9,682.7,81.2,217.4,1\n108,-1,1259,185.1,44.7,172.3,1\n108,-1,102.7,546.6,84.7,252.4,1\n108,-1,537.4,65.3,48.8,167.9,1\n108,-1,803.3,195.2,61.5,189.6,1\n108,-1,1379.4,182.8,63.3,195.2,1\n108,-1,848.1,221.4,54.1,165.2,1\n108,-1,441.8,3.3,52.4,152.6,1\n108,-1,700.6,184.7,54.8,161.6,1\n108,-1,375.4,7.3,49.9,159.3,1\n108,-1,479.2,154.1,58.6,161.1,1\n108,-1,483.4,38.9,58.6,162.2,0.999\n108,-1,1425.2,187.5,46.1,174.1,0.752\n108,-1,259.6,90.7,60.8,172.9,0.713\n108,-1,1141.2,931.8,77.9,149.2,0.075\n114,-1,1221.1,30.1,63.8,119.6,1\n114,-1,355.7,104.6,56.6,178.6,1\n114,-1,393.4,795.2,97.3,277.1,1\n114,-1,210.4,129.1,51.3,163.2,1\n114,-1,704.5,1,55.2,159.7,1\n114,-1,1487.2,68.5,56,151.7,1\n114,-1,1137.9,150.7,62.1,170,1\n114,-1,107.9,348.7,49.6,189.5,1\n114,-1,933.1,208.3,67.4,190.9,1\n114,-1,1721.5,456.4,77.5,211.6,1\n114,-1,290.6,125.4,55.3,170.6,1\n114,-1,1358.3,566.9,105.6,245.4,1\n114,-1,425.6,289.5,80.4,227,1\n114,-1,516.2,235.2,72,207.8,1\n114,-1,1366.9,184.1,63.2,185.1,1\n114,-1,57,677.5,81,218.4,1\n114,-1,1248,185.7,45.2,167.7,1\n114,-1,103.1,548.6,83.3,246.4,1\n114,-1,538.8,66.5,48.8,165.3,1\n114,-1,481.1,155.7,53.7,163.8,1\n114,-1,794.5,204.1,62.8,191.6,1\n114,-1,840.4,221.7,56,172.8,1\n114,-1,441.7,1,55.5,152.8,1\n114,-1,481,41.2,61.8,157.8,1\n114,-1,376,1.5,47.8,159.4,0.999\n114,-1,695.3,191.9,55.6,123.6,0.828\n114,-1,1128.6,928.2,82.9,152.8,0.303\n121,-1,1220.8,30.7,63,118.3,1\n121,-1,1108.3,147.7,82.7,170,1\n121,-1,356.4,104.3,56.7,181.3,1\n121,-1,1487.8,68.5,56.3,149.9,1\n121,-1,395.8,781.2,99.8,279.9,1\n121,-1,212.5,126,51.6,167.3,1\n121,-1,704.2,1,56.2,159.1,1\n121,-1,108.8,350.1,49.8,187.8,1\n121,-1,920.2,209.2,69.9,194.4,1\n121,-1,1721.7,456.6,77.4,210.1,1\n121,-1,1358.4,566.9,104.8,244.4,1\n121,-1,287.8,126.4,55.6,167.8,1\n121,-1,425.6,286.4,78.4,224.1,1\n121,-1,1230.5,177.7,44.3,165.5,1\n121,-1,522.8,243.9,73.3,202.8,1\n121,-1,478.2,168.1,58.2,159.7,1\n121,-1,539.2,64.9,49.7,169.4,1\n121,-1,1348.9,181.5,67.5,189.8,1\n121,-1,785.6,209.7,66.1,187.9,1\n121,-1,377.3,1,48.4,151.1,1\n121,-1,834.2,229.2,53.6,176.7,1\n121,-1,102.6,548.7,86.7,243.7,1\n121,-1,481.4,39.7,61,164,1\n121,-1,446.5,1,53.6,146.6,1\n121,-1,83.6,656.3,66.5,223.6,1\n121,-1,1103.5,926.1,89.9,154.9,0.058\n124,-1,1221.1,30.2,62.8,118.9,1\n124,-1,356.5,105.5,55.9,178.9,1\n124,-1,1104.6,142.9,73.6,174.4,1\n124,-1,1487.9,68.7,56.1,149.5,1\n124,-1,704.1,1,56.4,158.8,1\n124,-1,108.8,353.2,49.5,183.7,1\n124,-1,398.1,777.6,100,278.8,1\n124,-1,288.7,128.2,54.3,168.2,1\n124,-1,214.5,124.9,52.1,169.8,1\n124,-1,1721.8,457.1,76.2,210.4,1\n124,-1,425.3,284.7,77.7,221.9,1\n124,-1,1358.5,566.8,105.4,244.9,1\n124,-1,915.4,211.4,70.6,189,1\n124,-1,523.2,244.9,74.3,202.8,1\n124,-1,1224.4,177.9,45.7,168.2,1\n124,-1,539.1,64.1,50.3,171,1\n124,-1,478.1,168.9,57.8,161.4,1\n124,-1,1345.3,180.2,62.4,186.5,1\n124,-1,447.5,1,53.1,145.1,1\n124,-1,782.9,212.6,65.1,188.8,1\n124,-1,377.9,2.4,46.9,145.2,1\n124,-1,99,654.3,62.8,222,1\n124,-1,832.4,227.5,54.1,177.5,1\n124,-1,479.5,40.2,59.7,164,1\n124,-1,105.7,551.5,79.9,228.2,0.998\n124,-1,1098.8,929,82.7,152,0.831\n124,-1,696.9,203.7,67.7,111,0.652\n126,-1,1221.7,29.8,62.4,118.7,1\n126,-1,356.3,105.2,56.8,179.5,1\n126,-1,1101.2,143.5,61.9,171.9,1\n126,-1,1487.8,69.2,56,148.9,1\n126,-1,704.3,1,56.5,158,1\n126,-1,1720.9,457,77.8,209.1,1\n126,-1,108.9,349.9,49.8,188.3,1\n126,-1,398.7,769.7,99.8,278.1,1\n126,-1,288.4,126.9,54.4,169.5,1\n126,-1,1358.7,567.2,104.9,244.3,1\n126,-1,423.7,281.1,78.4,222.5,1\n126,-1,216.6,126.3,50.4,166.9,1\n126,-1,908.4,210.2,74.3,192.5,1\n126,-1,1220,179.2,43.8,165.3,1\n126,-1,780.7,215,66.2,192.3,1\n126,-1,539.5,65.4,50.1,166.7,1\n126,-1,1339.5,182.3,57.5,183.2,1\n126,-1,523.7,246.9,73.5,202.4,1\n126,-1,477.4,169.1,59.4,166.1,1\n126,-1,692.5,203.4,71.4,114.9,1\n126,-1,377.4,2.7,47.9,145.9,1\n126,-1,448,1,52.5,144.8,1\n126,-1,103.6,656,64.9,214.9,1\n126,-1,479,42.3,58.3,162.4,1\n126,-1,831.1,230.7,53.6,174,1\n126,-1,1095.5,931.4,79.6,149.6,0.927\n129,-1,1222,30.6,62.2,118.2,1\n129,-1,356.6,103.5,56.2,181.6,1\n129,-1,1488.2,68.7,55.8,150.3,1\n129,-1,108.2,350.1,49.4,187.8,1\n129,-1,1722,455.9,76.8,211.1,1\n129,-1,288,127.1,54.8,169.1,1\n129,-1,704.2,1,55.9,158.6,1\n129,-1,398.9,760.2,95.5,273.7,1\n129,-1,1095.6,138.7,56.8,175.2,1\n129,-1,424.3,277,76,222.2,1\n129,-1,1357.8,567,105.3,244.4,1\n129,-1,688.3,205.1,77.5,114.1,1\n129,-1,1212.9,176.8,46.3,164,1\n129,-1,1336.1,181.6,54.7,180.5,1\n129,-1,900.2,210.3,75.5,192.5,1\n129,-1,219.2,128,50.3,165,1\n129,-1,539.5,66.2,50.1,164.6,1\n129,-1,524.4,246.7,70.5,207.1,1\n129,-1,478.4,169.2,57.7,171.5,1\n129,-1,113.9,648.4,60.5,215.9,1\n129,-1,779.8,220.9,64.1,191.1,1\n129,-1,378.2,1.1,47.1,141.4,1\n129,-1,478.9,43.7,56,160.8,1\n129,-1,447.5,1,52.1,144.4,1\n129,-1,826.9,233.8,56.3,174.5,0.999\n129,-1,1085,925.8,83.2,155.2,0.922\n129,-1,580.5,258.2,41.1,168.2,0.113\n131,-1,1221.3,30.3,62.6,117.7,1\n131,-1,356.7,104.5,56.1,179.7,1\n131,-1,1488.2,68.8,55.5,149.1,1\n131,-1,394.9,753.9,97,272.2,1\n131,-1,704.2,1,55.9,158.1,1\n131,-1,423.8,275.9,75.9,223.2,1\n131,-1,288.4,127.9,55.1,168.4,1\n131,-1,107.8,350.4,50.6,187.1,1\n131,-1,1359.1,567.6,104.6,244.4,1\n131,-1,687.1,206.5,78.8,113.8,1\n131,-1,1722.7,456.5,75.4,210.9,1\n131,-1,897.1,209.9,74.6,196.3,1\n131,-1,538.6,66.3,50.3,162.8,1\n131,-1,1087.8,139.6,55.5,179.7,1\n131,-1,1209.4,174.7,47.1,164.6,1\n131,-1,219.3,127.5,49.9,163.7,1\n131,-1,1332,182.4,51.9,176,1\n131,-1,527.3,249.7,66.7,210.6,1\n131,-1,477.5,174.6,59.1,172.1,1\n131,-1,379.1,1,48,141.2,1\n131,-1,478.1,44.3,55,162,1\n131,-1,778.1,225.5,62.1,189.1,1\n131,-1,824.2,236.8,55.4,173.5,1\n131,-1,118.7,648.3,62.6,211.9,1\n131,-1,447.6,1,51.9,142.7,0.999\n131,-1,1079,923.4,84.4,157.6,0.929\n131,-1,578.7,255,46.4,176.1,0.329\n134,-1,1221.7,30.7,62.3,117.9,1\n134,-1,357,104,55.8,180.8,1\n134,-1,1488.1,68.9,55.7,148.2,1\n134,-1,392.7,748.9,98.8,269.7,1\n134,-1,108.6,351.8,49.4,185.5,1\n134,-1,1073,141.1,63.4,175.3,1\n134,-1,287.1,126.6,55.8,170.4,1\n134,-1,704.1,1,55.9,157,1\n134,-1,1721.6,457,77.7,210.5,1\n134,-1,686.9,205.8,78.8,115.9,1\n134,-1,1359.1,566.1,104.7,246.6,1\n134,-1,890.7,209.9,75.9,196.7,1\n134,-1,423.9,274,75.8,223.4,1\n134,-1,538.1,65.1,50.2,163.8,1\n134,-1,1203.9,169.6,48.2,167.9,1\n134,-1,219.8,127.3,49.8,163.4,1\n134,-1,476.9,177.9,60.8,172.7,1\n134,-1,531.8,256.8,63.1,207.2,1\n134,-1,379,1,48.8,136.9,1\n134,-1,816.2,241.8,60,174,1\n134,-1,1323.7,186.2,53.3,176.2,1\n134,-1,127.2,643.1,69.1,211.8,1\n134,-1,476.4,43.7,55.4,165,1\n134,-1,773.3,227.6,63.2,188.9,1\n134,-1,448,1,50.9,136.6,0.998\n134,-1,568.6,241.8,61.2,196,0.996\n134,-1,1072.5,924.2,85.3,156.8,0.964\n137,-1,1221.7,30.4,62.2,117.8,1\n137,-1,392.2,748.2,97.6,268.1,1\n137,-1,1056.4,136.8,78.9,178.9,1\n137,-1,356.4,103.1,55.9,183.7,1\n137,-1,1487.8,68.3,55.9,150,1\n137,-1,704.2,1,56.4,158.9,1\n137,-1,288.3,126.2,54.5,169,1\n137,-1,1721.2,456.7,78,211.1,1\n137,-1,537.3,65.1,51,162.8,1\n137,-1,687.5,205.8,79.2,116.2,1\n137,-1,884.6,209.2,79.6,193.9,1\n137,-1,1359.6,567.7,104.4,243.8,1\n137,-1,108.8,351.4,48.7,187.1,1\n137,-1,424.6,271.4,74.8,221.7,1\n137,-1,1195.9,168.1,51.3,166.9,1\n137,-1,220.2,129.7,51.3,160.1,1\n137,-1,477.9,179,60.4,171.3,1\n137,-1,379.8,1,48.3,134.2,1\n137,-1,815.9,244.3,55.6,172.3,1\n137,-1,1318.9,183.5,52.8,177.8,1\n137,-1,531.6,258.4,59.4,209.8,1\n137,-1,773.8,230.3,58.1,187,1\n137,-1,476,46.2,53.4,159.6,1\n137,-1,139.5,639.5,74.8,213.7,1\n137,-1,573.9,247.6,57.9,193.5,0.999\n137,-1,99.7,543.7,83.7,260.3,0.999\n137,-1,1068.6,925.2,84.3,155.8,0.959\n137,-1,451.2,17.3,41.3,114.7,0.095\n140,-1,1221.6,30.7,61.9,118,1\n140,-1,1047.1,137.9,82.1,175.1,1\n140,-1,356.7,102.9,55.5,182.6,1\n140,-1,1488.3,69,55.4,149.7,1\n140,-1,389.4,741.7,100.9,269.1,1\n140,-1,703.9,1,56.2,158.5,1\n140,-1,422.7,267.4,75.4,224.1,1\n140,-1,1721.6,457.8,77.5,209.5,1\n140,-1,287.4,126.9,55.1,167,1\n140,-1,686.5,206.5,80.8,116.8,1\n140,-1,537.4,63.5,52,166.3,1\n140,-1,1358.9,567.3,104.3,244,1\n140,-1,109.4,351.7,48.2,184.6,1\n140,-1,878.6,208.9,78.2,193.2,1\n140,-1,477.2,181.3,62.4,173.7,1\n140,-1,219.5,128.4,51.2,162.3,1\n140,-1,1190.9,169.4,51.1,163.8,1\n140,-1,1314.7,179.9,52.8,174.3,1\n140,-1,381.5,1.3,48,133.8,1\n140,-1,812.9,244.4,55.6,176.2,1\n140,-1,531.6,263.9,57.2,200.9,1\n140,-1,147.5,635.2,84.1,211.8,1\n140,-1,472.7,41.8,53.3,164.3,1\n140,-1,579.1,249.5,57.2,191.5,1\n140,-1,770.6,233.9,59.3,183.2,0.999\n140,-1,98.2,545.1,86.5,251.2,0.999\n140,-1,1066.9,925.2,79,155.8,0.857\n141,-1,1221.5,30.9,62.6,118.2,1\n141,-1,1043.5,135.4,85.9,175.7,1\n141,-1,356.5,104.2,55.7,181.2,1\n141,-1,1487.7,69,55.8,150.4,1\n141,-1,704.1,1,56.2,158.2,1\n141,-1,389.2,737.4,100.2,269.4,1\n141,-1,1721.6,457.1,77.5,210.4,1\n141,-1,287.7,127.7,54.7,167.3,1\n141,-1,422.2,265.5,75.6,224.4,1\n141,-1,537.9,63.5,50.8,167.6,1\n141,-1,686,206.8,80.5,116.3,1\n141,-1,1358.7,567.4,104.9,244.6,1\n141,-1,109.7,354.3,48,183.1,1\n141,-1,877,209.1,77.4,190.9,1\n141,-1,1188.9,169.2,51.6,164.8,1\n141,-1,219.5,128.6,51.5,162.8,1\n141,-1,1312.4,177.9,52.8,175.4,1\n141,-1,478.3,183.3,61.3,176.3,1\n141,-1,812.8,246.5,56.1,177.2,1\n141,-1,382.5,1.3,46.7,133.7,1\n141,-1,531.9,266.1,57.2,198.5,1\n141,-1,150.4,632.2,84.8,215.3,1\n141,-1,472.1,38.8,53.1,166.3,1\n141,-1,579.3,250.1,57.7,190.8,1\n141,-1,97.2,543.1,86,256,1\n141,-1,770,234.5,59.1,183,0.999\n141,-1,1065.1,923.8,78.6,157.2,0.984\n151,-1,1221.1,30.9,62.9,117.9,1\n151,-1,1488.4,68.2,55.3,150.5,1\n151,-1,356.1,101,55.2,182.4,1\n151,-1,1722.1,456.6,76.7,210,1\n151,-1,704,1,56.5,159,1\n151,-1,109.4,352,49.1,185.1,1\n151,-1,420.8,254.5,77.8,221.8,1\n151,-1,288.5,122.8,54.6,172,1\n151,-1,1162,164.5,51,162.1,1\n151,-1,1358.4,567,105.9,244.4,1\n151,-1,216.2,125.7,53.9,166,1\n151,-1,538.5,63.8,51,164.8,1\n151,-1,1280,176.6,62.3,173.6,1\n151,-1,686.5,206.5,81,113.9,1\n151,-1,1025.1,132.2,56.4,175.8,1\n151,-1,402.7,710.9,95.5,265.9,1\n151,-1,100.6,542.1,88.1,261.3,1\n151,-1,591.8,259.3,59.9,195,1\n151,-1,806.3,258.1,65,181.6,1\n151,-1,531.2,273.7,59.5,201.1,1\n151,-1,184,612.7,68.3,220.8,1\n151,-1,383.2,1.3,47.7,124.3,1\n151,-1,861.4,203.4,71.7,194.2,1\n151,-1,487.2,200.5,60.3,168.2,1\n151,-1,756.7,247.7,70.2,190.7,1\n151,-1,458.2,32.6,50.6,165.6,1\n151,-1,1047.7,915.1,69.5,165.9,0.988\n151,-1,794.3,144.3,63.1,190.4,0.682\n155,-1,1221.3,30.8,62.5,118.8,1\n155,-1,356.3,102.6,54.1,182.1,1\n155,-1,1488.4,68,55.5,150.7,1\n155,-1,109.3,351.8,48.9,186.4,1\n155,-1,704.6,1,56.2,158,1\n155,-1,214.7,125.3,54.5,167,1\n155,-1,1003.8,130.7,69.2,169.6,1\n155,-1,448.4,34.4,55.3,165,1\n155,-1,287.5,123.8,55.4,172.9,1\n155,-1,1722.2,456.7,76.8,211,1\n155,-1,1154,161.4,49.6,160.2,1\n155,-1,1358.3,567.1,105.9,244.8,1\n155,-1,539.4,64.6,50.1,165.7,1\n155,-1,686.7,206.2,80.2,114.6,1\n155,-1,407.7,709.1,92.5,264.8,1\n155,-1,420.4,250.8,77.6,225.1,1\n155,-1,101.4,544.4,85.5,256.1,1\n155,-1,1266.6,175.3,62.5,172.3,1\n155,-1,194.5,613.4,66,211.7,1\n155,-1,531.6,276,59.8,202.2,1\n155,-1,592.5,263.9,61.3,196.2,1\n155,-1,857.8,203.6,72.3,192.1,1\n155,-1,802,259.9,63.7,183.6,1\n155,-1,755.4,253,70,183.4,1\n155,-1,491.6,200.5,59.1,167.8,1\n155,-1,387,3.9,45.6,118.1,1\n155,-1,793.3,146.8,64.7,182.9,0.997\n155,-1,1038.7,913.3,69.6,167.7,0.995\n159,-1,1221.4,30.6,62.2,117.9,1\n159,-1,988.1,131.6,81.3,169.3,1\n159,-1,1488.8,67.5,55.6,150.7,1\n159,-1,356.2,103.8,54.6,178.9,1\n159,-1,213.2,124.9,54.9,169.1,1\n159,-1,288.4,125.4,55,171.1,1\n159,-1,109.4,349.1,50.5,189.2,1\n159,-1,704.9,1,55.3,158,1\n159,-1,436.7,36.1,64.6,167.3,1\n159,-1,686.1,206.5,80.4,112.9,1\n159,-1,539.2,64.7,49.8,163.9,1\n159,-1,420.1,247.7,81,224.5,1\n159,-1,1358.7,567.3,105.1,244.2,1\n159,-1,1721.7,457.3,77,211.7,1\n159,-1,409.3,699,91.4,260.6,1\n159,-1,103.5,549.9,80.5,253,1\n159,-1,1147.9,159.1,45.7,162.1,1\n159,-1,203.4,606.7,62.8,216.2,1\n159,-1,594.2,265.4,60.3,194.7,1\n159,-1,529,272.6,63.3,211,1\n159,-1,387.5,4.1,47.6,118.1,1\n159,-1,801.6,268.5,64.7,176.2,1\n159,-1,752.7,253.3,70.6,189.9,1\n159,-1,1257.4,172.1,58.9,174,1\n159,-1,495.1,205.7,58.7,167.7,1\n159,-1,853.4,197.1,73.2,195.1,1\n159,-1,795.2,147.5,61.5,178.7,0.999\n159,-1,1032.9,909,72.2,172,0.993\n159,-1,1294.4,175.8,49.3,173.2,0.551\n160,-1,1221.4,30.3,62.3,118,1\n160,-1,986.4,131.9,80.8,169.6,1\n160,-1,434.4,37.1,65.2,168,1\n160,-1,1488.7,67.5,55.7,151.5,1\n160,-1,356.5,103.1,54.5,180.2,1\n160,-1,212.9,124.2,54.4,170.9,1\n160,-1,109.4,348.7,50.6,190.1,1\n160,-1,288.3,126.1,55.6,171.6,1\n160,-1,704.7,1,55.5,158.7,1\n160,-1,1358.2,567.6,105.8,244.5,1\n160,-1,1721.4,457.9,77.2,210.8,1\n160,-1,538.6,64.2,50.6,165.7,1\n160,-1,687.1,207.4,78.7,111.7,1\n160,-1,420.1,246.3,80.5,225.9,1\n160,-1,409,696.6,91.1,261.2,1\n160,-1,101.4,546.2,85.3,253.9,1\n160,-1,1144.1,158.8,47.8,162.3,1\n160,-1,206.1,604.3,61.9,215.2,1\n160,-1,390.2,3,45.9,119,1\n160,-1,527.5,272.6,66,214,1\n160,-1,802.5,270.7,64,176.7,1\n160,-1,752.4,253.7,69.1,192.4,1\n160,-1,496.4,205.1,57.5,168.4,1\n160,-1,594.5,265.3,60.6,196,1\n160,-1,1255.9,173.2,60.2,172.3,1\n160,-1,796.1,148,61.1,174.3,1\n160,-1,851.1,195.9,75.1,189.8,0.999\n160,-1,1031.3,906.2,72,174.8,0.989\n160,-1,1294.1,174.7,51.5,171,0.79\n163,-1,1221.5,30,61.9,119.9,1\n163,-1,980.7,128.4,77.1,173.5,1\n163,-1,109.2,347.9,50.1,191.1,1\n163,-1,212,124.5,55.1,169,1\n163,-1,1488.8,68.4,55.6,151.4,1\n163,-1,356.5,104.5,55,179,1\n163,-1,288.2,126,55.2,171.3,1\n163,-1,703.9,1,56.7,159.1,1\n163,-1,686.7,207.7,79.4,111.1,1\n163,-1,1357.9,567.5,105.4,244.8,1\n163,-1,1721.4,457.2,78.2,211.4,1\n163,-1,433.2,38.2,62.8,168,1\n163,-1,419,243.2,82.3,220.1,1\n163,-1,406.1,688.6,93.5,255.7,1\n163,-1,538.7,64.8,50.7,168.7,1\n163,-1,101.5,547.5,85.6,253.6,1\n163,-1,527.2,274.6,65.8,216.4,1\n163,-1,211.1,598,65.5,212.2,1\n163,-1,1139.4,155.8,48.2,162.6,1\n163,-1,390.8,5.4,47.6,112.5,1\n163,-1,799,272.4,62.8,180.6,1\n163,-1,751.2,256.6,69.1,200.1,1\n163,-1,796.5,148.2,61.5,173.4,1\n163,-1,853.6,193.9,73.2,188.4,1\n163,-1,566.2,156.3,64.1,177.2,1\n163,-1,499.9,210.2,55.3,169.8,0.999\n163,-1,1250.6,166.8,54.3,163.5,0.997\n163,-1,1285.5,168.3,55.1,168.9,0.997\n163,-1,599.7,266.8,56.7,194.3,0.98\n163,-1,1027.8,903,71.4,178,0.975\n167,-1,1221,30.1,62,117.6,1\n167,-1,975.7,125.8,61.5,170.4,1\n167,-1,1489.1,69.6,54.6,147.9,1\n167,-1,109,349.3,49.7,188.5,1\n167,-1,400.9,676.8,99.1,258.4,1\n167,-1,704.5,1,56,159.6,1\n167,-1,356.2,103.5,55.6,179.8,1\n167,-1,687.2,207.6,78.9,111.7,1\n167,-1,1720.6,456.4,78.9,212.2,1\n167,-1,212.2,126.2,55,167.8,1\n167,-1,1359,568.2,103.9,244.3,1\n167,-1,288.3,128.2,55.1,168.1,1\n167,-1,1129.3,154.9,48.8,160.8,1\n167,-1,433,39.5,59.1,165.1,1\n167,-1,100.1,547.5,87.7,253.3,1\n167,-1,421.5,240.1,77.8,219.6,1\n167,-1,537.7,64.2,51.7,167.6,1\n167,-1,528.9,278.6,62.8,218,1\n167,-1,560.5,158.3,65.3,169.4,1\n167,-1,219.1,589.5,66.7,219.6,1\n167,-1,854.4,192.7,75.8,185.8,1\n167,-1,798.7,275.2,63.1,178.2,1\n167,-1,795,148.7,62.7,170.6,1\n167,-1,749.5,262.2,64.1,199.9,1\n167,-1,1242.9,166.3,57.7,172.6,0.999\n167,-1,503,210.9,57.4,178.6,0.999\n167,-1,1276.7,166.4,55.1,170.3,0.997\n167,-1,1019.6,905.2,73.6,175.8,0.985\n167,-1,395.2,10.3,47.3,107.2,0.778\n172,-1,1220.7,30.9,62.3,117,1\n172,-1,108.6,350.4,50.4,188.7,1\n172,-1,1489.1,68.5,54.9,149.3,1\n172,-1,355.8,103.7,55.5,178.5,1\n172,-1,704.2,1,56.4,158.8,1\n172,-1,212.3,126,54.5,167.6,1\n172,-1,1721.2,456.8,77.8,211.2,1\n172,-1,402.4,668,97.9,266.6,1\n172,-1,1357.9,567.5,104.6,244.3,1\n172,-1,288.7,127.3,54.6,169.6,1\n172,-1,98.3,547.2,89.6,256.5,1\n172,-1,688.1,208.2,76.4,111.1,1\n172,-1,428.3,40.4,56.8,160.2,1\n172,-1,421.4,236.1,78.1,221.5,1\n172,-1,963.6,123,54.3,176.1,1\n172,-1,551,153.2,65.6,171.5,1\n172,-1,227.4,586.9,67.8,212.2,1\n172,-1,1219.7,164.9,61.6,175.2,1\n172,-1,528.8,281.7,60.6,219.9,1\n172,-1,1121,151,44.2,159,1\n172,-1,855.6,190.8,78.4,187.1,1\n172,-1,795.7,148.3,61.6,173.7,1\n172,-1,746.3,261.8,65.4,201,1\n172,-1,1.1,595.2,64.9,250.2,1\n172,-1,536.8,65.2,53.4,168.2,1\n172,-1,796.9,277.2,63.4,176.5,1\n172,-1,1266.5,163.9,50.9,162.5,0.998\n172,-1,507.3,218.5,55,165.9,0.998\n172,-1,1010.9,910.1,75.7,170.9,0.97\n178,-1,1220.8,30.6,62.8,117.5,1\n178,-1,108.6,350.7,49.1,187.3,1\n178,-1,356,105.2,55.4,179.2,1\n178,-1,417,39.1,58.2,162,1\n178,-1,1489.5,70.4,54.5,146.8,1\n178,-1,704.1,1,56,158.7,1\n178,-1,409.3,657.2,91.6,250.3,1\n178,-1,1358.3,568,105.4,243.5,1\n178,-1,936.4,122.1,74.3,173.7,1\n178,-1,1720.5,455.9,78.7,212.6,1\n178,-1,212.9,124.9,54.4,169.1,1\n178,-1,687.8,207.6,77.1,111.2,1\n178,-1,1,611.9,107,238.5,1\n178,-1,289.1,127.4,54.4,169.4,1\n178,-1,420.2,230.3,79.8,223.5,1\n178,-1,866.8,177.8,74.1,190.5,1\n178,-1,546,148.4,64.9,172.2,1\n178,-1,232.6,574.1,63.9,210,1\n178,-1,527.5,289,60.9,210.1,1\n178,-1,99,549,88.4,254,1\n178,-1,794.4,151,62,171.2,1\n178,-1,1106.3,150.6,46.8,160.5,1\n178,-1,1211.2,156.8,58.1,182.5,1\n178,-1,796.2,284.1,69.1,187.2,1\n178,-1,745.2,268.1,69.1,203.1,1\n178,-1,1257.8,156.1,48.2,167.7,0.998\n178,-1,1001,908.2,68,172.8,0.859\n185,-1,1221.9,30.5,62.2,118.5,1\n185,-1,211.4,126.1,55.2,169.6,1\n185,-1,1489.4,68,54.7,150.2,1\n185,-1,405.5,37.9,63.6,166.3,1\n185,-1,109.5,350,49.4,187.3,1\n185,-1,687,208,79.3,110.7,1\n185,-1,356.3,105.3,54.4,178.2,1\n185,-1,704.6,1,55.7,159.5,1\n185,-1,1358.5,568.1,104.6,243.8,1\n185,-1,289.3,129.5,55.1,168.1,1\n185,-1,1720.9,457.5,77.7,211.1,1\n185,-1,414.3,642,91.1,257.6,1\n185,-1,528.5,301.2,61.2,207.8,1\n185,-1,234.5,564,63.8,215.2,1\n185,-1,419.9,222.1,76.9,220.6,1\n185,-1,869.4,174,82.6,190.7,1\n185,-1,9.3,616.6,114.1,255.7,1\n185,-1,1086.3,145.3,49.8,163.6,1\n185,-1,540.7,142,62.6,164,1\n185,-1,1192.3,150.2,62.7,185.4,1\n185,-1,794.7,151.9,62.5,173.2,1\n185,-1,797.7,291.9,71.6,187.8,1\n185,-1,97.6,547.1,86.6,252.9,1\n185,-1,745.7,276.9,71.9,203.5,1\n185,-1,1246.6,154.5,43.6,161.2,1\n185,-1,920.8,124.7,69.3,167.7,0.999\n185,-1,987.4,917.2,74.1,163.8,0.973\n186,-1,1222,30.9,61.6,117.5,1\n186,-1,212,126.7,54.9,169,1\n186,-1,1489.7,68.6,54.5,148.6,1\n186,-1,686.9,207.7,79.5,111.1,1\n186,-1,704.4,1,55.7,159.2,1\n186,-1,109.5,348.7,49.6,188.8,1\n186,-1,1720,456.7,78.9,212.4,1\n186,-1,402.7,36.7,66,167.8,1\n186,-1,415.5,641.1,91.1,259.6,1\n186,-1,289.6,130.2,55,167.5,1\n186,-1,356.2,107.2,54.7,176.6,1\n186,-1,1358.2,568.2,105.4,243.4,1\n186,-1,420.1,222.3,76.5,219.8,1\n186,-1,527.8,304.9,61.7,206.6,1\n186,-1,868.5,174.7,84.3,189,1\n186,-1,234.2,562,63.4,214.5,1\n186,-1,20.6,620.7,106.5,246.9,1\n186,-1,1083.5,143.6,49.8,163.6,1\n186,-1,795.2,150.9,62,173.3,1\n186,-1,1188.4,150,64.2,185.7,1\n186,-1,540,142,61.8,162.3,1\n186,-1,798.3,292.9,70.7,185.7,1\n186,-1,744.6,277.5,72.7,203.5,1\n186,-1,97.8,548.7,86.8,247.3,1\n186,-1,1242.8,153.4,43.9,162.1,1\n186,-1,917.5,122,65.9,169.5,0.994\n186,-1,985.7,918.1,74.1,162.9,0.984\n186,-1,456.7,6.8,52.8,86.2,0.099\n188,-1,1222,30.5,61.7,119.6,1\n188,-1,1490.5,68.2,54.2,149.8,1\n188,-1,212.1,125.2,55.3,171.2,1\n188,-1,415.9,639.6,92.5,255.5,1\n188,-1,704.6,1,55.6,159.5,1\n188,-1,109.1,348,50.3,190.4,1\n188,-1,1357.1,568.2,106.3,243.8,1\n188,-1,687,208,79.2,111.3,1\n188,-1,25.1,623.9,107.8,240.1,1\n188,-1,356.7,107.1,54.5,178,1\n188,-1,1720.8,457.3,78,211.3,1\n188,-1,400.7,39.9,64.3,163.3,1\n188,-1,288.8,127.8,55.4,169,1\n188,-1,869.3,172.4,87.4,192.1,1\n188,-1,419.4,221.1,78.3,220.3,1\n188,-1,1181.4,148.9,64.6,180.2,1\n188,-1,526.3,307.9,62.7,205.1,1\n188,-1,235.1,559.3,61,210.2,1\n188,-1,798.6,294,71.7,186,1\n188,-1,795.1,151.2,62.6,174.1,1\n188,-1,1239.2,148.5,46.2,163.5,1\n188,-1,1078.5,143.7,50.1,161,1\n188,-1,538.7,141.9,58.8,160.2,1\n188,-1,746.6,276.8,71.6,202.8,1\n188,-1,96.9,550,87.7,246,0.999\n188,-1,982.9,919.7,74.5,161.3,0.987\n188,-1,453.7,5.5,56.7,81,0.639\n190,-1,1221.9,30.2,61.4,120,1\n190,-1,212.2,126.8,55.2,167.7,1\n190,-1,1489.2,67.8,55.6,150.1,1\n190,-1,108.7,347.7,50.1,190.8,1\n190,-1,686.3,207.8,80.2,110.7,1\n190,-1,705,1,55.2,158.5,1\n190,-1,1357.6,567.2,105.9,245.3,1\n190,-1,356.9,107.4,54.4,177.1,1\n190,-1,416.3,634.2,89,254.6,1\n190,-1,288.6,128.3,55.9,169.3,1\n190,-1,872.1,170.7,82.8,191,1\n190,-1,1720.5,457.2,78.1,211.5,1\n190,-1,399.2,40.5,64.4,163.9,1\n190,-1,1172.7,148.4,68.3,183.5,1\n190,-1,33.3,624.7,113,246.7,1\n190,-1,524.9,309.3,62.7,202.8,1\n190,-1,420.2,219.9,76.2,217.7,1\n190,-1,232.6,553.3,62.9,211.5,1\n190,-1,536.2,140.3,59,160.3,1\n190,-1,1072.2,143.7,53.4,162.3,1\n190,-1,795.5,150.6,61.7,173.2,1\n190,-1,800,296.2,70,184.5,1\n190,-1,748.3,277.4,69.5,202.7,1\n190,-1,1236.1,145.1,45.5,167.2,1\n190,-1,95.2,549.8,85,244.4,0.988\n190,-1,980,918.4,74.1,162.6,0.985\n190,-1,453,4.1,57.8,85,0.918\n198,-1,1221.5,31,60.4,118.5,1\n198,-1,53.6,639.2,119.4,250.1,1\n198,-1,211,127.4,56.5,167.5,1\n198,-1,687.4,206.7,78.3,112.8,1\n198,-1,402.4,611.9,93.2,246.2,1\n198,-1,1489.8,68.6,54.6,150,1\n198,-1,704.4,1,55.8,158.8,1\n198,-1,108.3,347.1,50.4,190.9,1\n198,-1,525.6,135.7,61.7,162.2,1\n198,-1,1721,457.2,77.6,210.7,1\n198,-1,289.5,127.7,54.8,170.2,1\n198,-1,356,104.6,54.8,180.7,1\n198,-1,1358.1,567.3,103.9,246.8,1\n198,-1,420.8,212.5,77.8,218.8,1\n198,-1,516,307.7,74.3,217.7,1\n198,-1,796.2,152,59.5,170.5,1\n198,-1,1048.4,140.1,50.2,157.4,1\n198,-1,885.2,161.4,74.3,184.3,1\n198,-1,230,542.5,62.5,216.5,1\n198,-1,802.8,304.3,71,186.2,1\n198,-1,1161,144,63.8,187.6,1\n198,-1,392,39.2,63.9,169.1,1\n198,-1,1217.7,143.1,51.9,172.4,1\n198,-1,751.3,289.2,71.1,209.4,1\n198,-1,970,916.5,73.7,164.5,0.972\n200,-1,1221.4,30.4,61.4,120.8,1\n200,-1,400.7,608.5,92.8,247.1,1\n200,-1,687.4,206.8,77.6,113,1\n200,-1,211.1,126.8,56.4,169.3,1\n200,-1,1490.7,68.4,54.4,150.3,1\n200,-1,108.7,348.4,50.6,188.7,1\n200,-1,523.1,134.8,63,165.8,1\n200,-1,704.6,1,55.8,158.4,1\n200,-1,60.1,641.4,115.5,248.2,1\n200,-1,1720.2,457.1,78.7,211.3,1\n200,-1,1357.9,568,104.5,245,1\n200,-1,423.2,211,75,215.3,1\n200,-1,288.6,126.9,55.3,172.2,1\n200,-1,356,106.9,54.5,178.3,1\n200,-1,510.7,309.8,78.4,220,1\n200,-1,796.6,150.6,59.2,172.7,1\n200,-1,886.7,157.8,73.9,186.8,1\n200,-1,229.8,541.2,61.6,215,1\n200,-1,800.4,308.7,72.7,186,1\n200,-1,1042.8,138,51.9,159.1,1\n200,-1,391.7,40.9,60.8,168.6,1\n200,-1,1157.4,142.9,62.9,185.9,1\n200,-1,1208.6,142.7,56.3,171.6,1\n200,-1,752.3,292,70.4,209.3,1\n200,-1,967.4,917.8,74.2,163.2,0.978\n221,-1,1221.3,30.8,61.2,120.8,1\n221,-1,686.2,206.5,79.4,114.5,1\n221,-1,903.6,140.8,76.1,185.7,1\n221,-1,1491.7,68.7,54.2,149.1,1\n221,-1,705,1,55.5,159.9,1\n221,-1,399.3,570.4,89.2,249.3,1\n221,-1,429.4,191.2,74.1,214,1\n221,-1,108.8,346.9,50.8,190.9,1\n221,-1,1120.8,129.7,58.5,184.1,1\n221,-1,288.3,127.2,55.2,172.8,1\n221,-1,1195.7,132.5,44.1,165.4,1\n221,-1,357.5,107.7,52.6,178.3,1\n221,-1,212.8,127.3,54.8,165.6,1\n221,-1,1720.8,457.2,77.4,211.1,1\n221,-1,1357,567.5,103.6,243.9,1\n221,-1,129.5,670.9,102.8,259.1,1\n221,-1,794.4,152.9,60.1,165.8,1\n221,-1,518.8,124.4,47.7,175,1\n221,-1,216.7,507.8,60.3,200.9,1\n221,-1,507.2,336.1,72.7,218.9,1\n221,-1,990,124.5,39.5,156,1\n221,-1,55.8,625.2,110.4,241.9,1\n221,-1,823.8,323.4,75.5,193,1\n221,-1,765.7,316.5,77.8,202.2,1\n221,-1,823.2,112.6,67.8,172.9,0.997\n221,-1,941.7,908.8,69.8,172.2,0.995\n221,-1,595.6,344.4,61,200.3,0.97\n221,-1,1567.4,1.6,53,139.2,0.395\n228,-1,1222,31,61.4,119.4,1\n228,-1,685.8,207.1,80.7,112.2,1\n228,-1,796.3,146.1,58.8,178.6,1\n228,-1,1492.3,67.3,53.3,149,1\n228,-1,386.4,549.6,92.7,242.4,1\n228,-1,356.1,105,54.2,182,1\n228,-1,1186.1,130.6,47,156.1,1\n228,-1,705.5,1.2,55.3,159.2,1\n228,-1,433.4,186.7,75.5,215.8,1\n228,-1,109.3,350.8,49.4,189.9,1\n228,-1,287.5,126.2,56.6,173,1\n228,-1,1720.8,456.8,78.5,211.7,1\n228,-1,212.1,126.5,55.4,167.8,1\n228,-1,1358.6,568.4,104.3,243.9,1\n228,-1,1576.9,1,58.4,140.4,1\n228,-1,517.6,120.4,48.9,177.1,1\n228,-1,1105.1,125.9,63.4,184.7,1\n228,-1,151.5,690.4,105.5,250.9,1\n228,-1,911.4,134.1,70.4,175.9,1\n228,-1,833.4,330.5,72.3,191.1,1\n228,-1,507.1,342.8,71.3,216.3,1\n228,-1,217.6,496.4,60.1,204.7,1\n228,-1,774.2,319.2,71.6,200.8,1\n228,-1,592.5,348.2,61.3,198.1,0.999\n228,-1,93.1,626.8,95.7,259.3,0.999\n228,-1,968.3,125.1,44.8,155.6,0.994\n228,-1,936.2,902.8,73.4,178.2,0.989\n231,-1,1221.7,31,62.3,118.9,1\n231,-1,685.8,207,80.5,112.9,1\n231,-1,1490.9,66.4,54.4,149.2,1\n231,-1,380.8,547.4,97.3,240.9,1\n231,-1,1181,128.4,50,159.4,1\n231,-1,435.9,185.1,77.9,216.1,1\n231,-1,798.3,149.3,57.2,175.5,1\n231,-1,357,106.1,52.7,179.4,1\n231,-1,705.7,1,55.2,159.5,1\n231,-1,288.6,126.1,55.9,173.3,1\n231,-1,1579.6,1,58.6,141.7,1\n231,-1,109.4,349.6,49.3,190.8,1\n231,-1,1721.6,456.8,77.2,211.7,1\n231,-1,211.7,126.1,56.1,168,1\n231,-1,1098.6,125.1,65.6,183.7,1\n231,-1,1358.9,568.7,105.3,242.2,1\n231,-1,919.3,129.3,71.7,181,1\n231,-1,517.2,121.5,49.2,175.4,1\n231,-1,505.6,343.5,72,221.2,1\n231,-1,777.7,320.6,75.4,211.8,1\n231,-1,157.5,694,105.3,261.4,1\n231,-1,835,331.5,74.2,194.3,1\n231,-1,219.1,491.9,59.8,206.3,1\n231,-1,591.5,353.5,59.9,191,1\n231,-1,107.8,631.3,89.5,255.4,0.999\n231,-1,934.3,903,72.7,178,0.995\n237,-1,1221.1,30.4,62.2,119.6,1\n237,-1,1486.3,63.6,55.7,152.1,1\n237,-1,685.9,207.3,80.2,112.4,1\n237,-1,795,152,61.8,175,1\n237,-1,379.1,538.5,94,234.5,1\n237,-1,108.2,348.8,51.1,191.6,1\n237,-1,1090.4,121.8,62.7,186,1\n237,-1,211.9,125.8,55.3,167.9,1\n237,-1,705.1,1,54.9,158.9,1\n237,-1,288.1,127.4,56,171.3,1\n237,-1,443.1,183.1,77.5,206.3,1\n237,-1,356.3,107.6,54,178.2,1\n237,-1,1362.2,568.5,107.2,243.6,1\n237,-1,1720.4,457,78.8,211.8,1\n237,-1,1584.9,1.9,58.4,144.2,1\n237,-1,1170.3,125.7,52.7,162.8,1\n237,-1,177,699.7,87.5,259.7,1\n237,-1,925,123.2,69.9,186.1,1\n237,-1,223.6,481.1,57.3,201.1,1\n237,-1,516.3,119.9,50.4,180,1\n237,-1,501.1,352.8,74.4,222.7,1\n237,-1,839,336.9,78.3,197.9,1\n237,-1,589.5,361.4,63.7,201.2,1\n237,-1,781.7,327.8,80.5,210,1\n237,-1,128.6,649.1,89.1,246.2,0.999\n237,-1,931.7,902.4,74.5,178.6,0.997\n252,-1,1221.2,31.4,63.1,117.4,1\n252,-1,1605.6,6.6,66.8,149.1,1\n252,-1,686.6,207,79.2,112.2,1\n252,-1,1480.4,57.4,54.1,150.5,1\n252,-1,392.1,508.8,88.7,244.9,1\n252,-1,286.8,127.4,56.6,171.8,1\n252,-1,796.9,151.4,60.1,175.9,1\n252,-1,212,127.3,55.9,166.3,1\n252,-1,355.8,105.6,53.2,181.4,1\n252,-1,1379.6,568.9,103.8,236.8,1\n252,-1,1720.7,457.7,77.9,210.5,1\n252,-1,224.9,460.1,60.5,198.7,1\n252,-1,1149.1,112.1,51.8,164.3,1\n252,-1,704.7,1.1,53.7,156.5,1\n252,-1,108.2,349.9,51.3,191.4,1\n252,-1,450.5,169.9,75.1,209.4,1\n252,-1,221.9,735.4,92.1,261.1,1\n252,-1,936.6,109.9,70.8,180.8,1\n252,-1,1072.3,116.2,56.6,178.7,1\n252,-1,130,577.9,84,231,1\n252,-1,514,117.2,55.3,180,1\n252,-1,487.4,367.1,76.6,229.1,1\n252,-1,856.1,353.1,80.2,197.5,1\n252,-1,792.3,346.6,84.1,208.4,1\n252,-1,580.6,380.4,65.6,209.5,1\n252,-1,903.5,110.2,49.2,151.3,0.999\n252,-1,764.7,100.9,51.1,168,0.999\n252,-1,930,906.5,77,174.5,0.995\n255,-1,1220.9,31.3,62.2,118.4,1\n255,-1,1617.1,8.5,60.1,151,1\n255,-1,686.8,206.2,79.5,113.8,1\n255,-1,287.8,129.3,56.2,169.7,1\n255,-1,1479.3,55,54.7,152.1,1\n255,-1,389.8,500.6,89.4,239.9,1\n255,-1,357.2,106.5,52.7,179.8,1\n255,-1,211.6,126.1,57,167.6,1\n255,-1,108.4,352.1,50.9,189.9,1\n255,-1,798,151.8,60.2,176.6,1\n255,-1,450.4,165.8,76.6,210.6,1\n255,-1,1720.7,458.3,78.2,208.9,1\n255,-1,704.2,1,55.1,158.4,1\n255,-1,1391.2,568.9,97.2,244.4,1\n255,-1,226.6,456.6,60.8,201.7,1\n255,-1,938.3,108.6,69.6,182.8,1\n255,-1,1144,105.7,52.4,171.7,1\n255,-1,1067.9,114,57.1,181.7,1\n255,-1,895.8,109.3,47.3,153.5,1\n255,-1,860.2,356.8,76.9,195.5,1\n255,-1,226.2,738.8,91.8,264.5,1\n255,-1,490.1,375.5,71,222.7,1\n255,-1,794,348.4,83.4,207.9,1\n255,-1,134.5,572.6,90.5,234.4,1\n255,-1,513.6,118.4,54.6,173.6,1\n255,-1,578.8,382,64.3,211.4,1\n255,-1,761.5,100.3,48.7,173.5,0.999\n255,-1,365.9,1,57.4,162.4,0.998\n255,-1,932.3,911.1,76.5,169.9,0.992\n262,-1,1221.4,30.5,62.7,118.7,1\n262,-1,687.2,205.4,78.6,113.6,1\n262,-1,1627.8,18.7,62.7,143.2,1\n262,-1,287.4,130.2,56.2,169.1,1\n262,-1,1480,49.5,52.9,148.6,1\n262,-1,454,156.2,74.8,215.3,1\n262,-1,797.1,154.4,59.1,172,1\n262,-1,356.2,107,53,177.8,1\n262,-1,1056.9,108.2,61.3,185.3,1\n262,-1,1720.5,457,78.8,211.6,1\n262,-1,381.2,487.1,91.8,236.6,1\n262,-1,704.5,1.3,54.6,157,1\n262,-1,108.5,350.3,50.8,191.2,1\n262,-1,937.4,97,70.9,179.8,1\n262,-1,1402.1,565,98.5,246.4,1\n262,-1,690.8,318.8,55.7,181.7,1\n262,-1,1133.2,100.4,53.8,165.1,1\n262,-1,216.1,128.4,55,164.4,1\n262,-1,880.7,110.6,47,154.1,1\n262,-1,243.2,758.8,88.4,266.1,1\n262,-1,375.3,7,56.2,162.5,1\n262,-1,868.8,363.2,79.4,195.5,1\n262,-1,486.9,377.8,71,226.1,1\n262,-1,798.8,348.5,87.7,214.3,1\n262,-1,229.6,449.1,60.6,199.9,1\n262,-1,513,118.3,55.9,175.1,1\n262,-1,157.1,566.8,81.6,249,1\n262,-1,573,390,64.5,208.5,1\n262,-1,756.8,101.4,50.4,172.2,1\n262,-1,937,917.8,83.8,163.2,0.994\n267,-1,1221.4,30.7,61.7,118.6,1\n267,-1,687.7,206.5,78,111.3,1\n267,-1,289.5,128.9,56.6,171.9,1\n267,-1,1479,47.8,51.4,146.6,1\n267,-1,1632.3,20.6,63.7,147,1\n267,-1,1123,98.6,56.9,168.3,1\n267,-1,454.3,156.6,74.9,210.9,1\n267,-1,376.2,479.3,95.8,235.9,1\n267,-1,1720.7,456.3,78.9,212.6,1\n267,-1,356.5,105.2,51.4,179.3,1\n267,-1,376.1,8.7,61.1,159.7,1\n267,-1,109,352.6,50.3,186.7,1\n267,-1,796.4,152.1,60,173.2,1\n267,-1,705.3,1,53.9,157.4,1\n267,-1,938.4,92.1,69.4,181,1\n267,-1,217.8,125.9,55.2,166.6,1\n267,-1,1048.6,105.8,60.6,184,1\n267,-1,250.9,761.8,89.1,278,1\n267,-1,1409.2,566.3,96.7,246.8,1\n267,-1,699.2,325.9,68.3,190.6,1\n267,-1,232.9,438,59.9,197.6,1\n267,-1,871,370.6,79,203.8,1\n267,-1,479.6,386,73.9,223.7,1\n267,-1,872.9,107.2,44.3,153.7,1\n267,-1,167,567.4,87.9,258,1\n267,-1,803.8,358.6,88.3,215.7,1\n267,-1,512.2,118.1,55.6,173.1,1\n267,-1,568.2,403.1,64.9,201.4,1\n267,-1,754.9,101.3,48.9,172.1,1\n267,-1,938.6,916.1,85.2,164.9,0.938\n279,-1,1221.9,31.6,61.8,118.1,1\n279,-1,686.9,207.2,78.3,112.7,1\n279,-1,1649.4,24.2,56.5,155.7,1\n279,-1,396.4,18.7,58.5,161.7,1\n279,-1,391.6,465.5,83.8,224.6,1\n279,-1,1029.9,99.9,62.7,186.5,1\n279,-1,1471.6,35.3,53.8,148.5,1\n279,-1,288.5,128.3,55.6,172.5,1\n279,-1,355.2,110.4,52.7,174.8,1\n279,-1,454.6,146.7,74.7,207.4,1\n279,-1,1721.1,457.2,78.6,211.3,1\n279,-1,794.7,148.2,61.6,175.3,1\n279,-1,704.1,1,55,159.2,1\n279,-1,941.8,82.8,65.3,177.4,1\n279,-1,108.6,348.7,50.8,190.8,1\n279,-1,745,335.4,66.7,190.6,1\n279,-1,1107.1,96,51.4,163.6,1\n279,-1,222.7,130.7,52.1,162.7,1\n279,-1,271,797.7,92.2,264.4,1\n279,-1,232.6,422.8,59.3,198.3,1\n279,-1,200.7,580.7,87.2,250.5,1\n279,-1,556.9,413.6,65.2,213,1\n279,-1,1428.7,577.1,99.5,248.6,1\n279,-1,880.6,388.5,76.2,195.4,1\n279,-1,852.1,111.5,44.7,159.1,1\n279,-1,515.9,110.9,52.3,176.9,1\n279,-1,810,376,87.9,211.6,1\n279,-1,752.9,106.2,46.1,166.1,1\n279,-1,469,400.5,67.9,223.4,1\n279,-1,945.8,920.6,84.9,160.4,0.795\n281,-1,1222.1,31.5,61.6,118.9,1\n281,-1,687.1,207.8,78.4,112.1,1\n281,-1,1027.5,98.8,62.6,185.8,1\n281,-1,1652.2,29.8,56.2,152.7,1\n281,-1,453.7,145.3,77.4,207.6,1\n281,-1,398.8,19.8,56.9,164.4,1\n281,-1,391.5,464.5,83.1,223,1\n281,-1,288.1,128,56.1,174.4,1\n281,-1,354.4,109,52.9,177,1\n281,-1,108,351.5,51.6,188.4,1\n281,-1,1470.2,33.8,54.7,148.3,1\n281,-1,1720.7,458.1,77.8,211.6,1\n281,-1,794.6,149.3,61.5,172.8,1\n281,-1,704.5,1,54.6,158.6,1\n281,-1,941.4,81.3,65.3,177.3,1\n281,-1,223,131.3,53,161.6,1\n281,-1,752.4,340.5,66.8,194.4,1\n281,-1,205.3,576.9,83.8,252.9,1\n281,-1,1104.2,94.1,50.5,161.4,1\n281,-1,1435.2,578.3,97.5,247.4,1\n281,-1,233.2,419,59.1,196.1,1\n281,-1,276.9,801,93.6,268,1\n281,-1,849.2,112.2,45.5,155.4,1\n281,-1,554.3,416,65.8,214.7,1\n281,-1,883.5,393.2,75.6,196.5,1\n281,-1,751.5,105.1,46.2,166.3,1\n281,-1,809.2,376.1,91.2,209.5,1\n281,-1,515,108.6,52.4,179.4,1\n281,-1,467.7,398.2,66.9,229.6,1\n281,-1,943.5,919.4,88.4,161.6,0.582\n286,-1,1221.5,31.3,63,120,1\n286,-1,686.7,207.3,79,113,1\n286,-1,455.7,143.3,72.1,206.3,1\n286,-1,353.4,108.4,54.3,178.8,1\n286,-1,287.7,129.9,55.6,174.3,1\n286,-1,940,79.8,63.7,177,1\n286,-1,1662.6,32.1,55.9,153.1,1\n286,-1,1720.1,459.1,78.7,210.4,1\n286,-1,1467.5,29.9,56.1,150.4,1\n286,-1,234.1,415.2,59.7,194,1\n286,-1,1020.3,95.4,61.6,185.7,1\n286,-1,108.1,351.3,51.1,189.2,1\n286,-1,400.2,22.3,56.2,164.6,1\n286,-1,797.6,148.2,58.9,175.1,1\n286,-1,1096.9,92.7,50.7,162.4,1\n286,-1,390,447,84.2,231.6,1\n286,-1,704.4,1.2,54.4,156.8,1\n286,-1,220.5,580.7,89,252.7,1\n286,-1,222.7,129.1,52.6,163.7,1\n286,-1,1446.5,586.2,94.9,240.7,1\n286,-1,288.2,816.6,90.1,264.4,1\n286,-1,515.5,107.7,51.2,177.1,1\n286,-1,749.5,104.6,47.2,166.8,1\n286,-1,547.1,427.4,70.3,209.9,1\n286,-1,886,400.2,75.6,198.3,1\n286,-1,809.5,376.8,93.3,226,1\n286,-1,834.7,108.4,55.9,163.1,1\n286,-1,465.3,409,64.9,225.9,1\n286,-1,774.8,350,63.9,180.5,0.999\n286,-1,943.9,920.3,82.7,160.7,0.866\n288,-1,1221.6,31.4,62.6,120.4,1\n288,-1,687.2,207,77.8,113.5,1\n288,-1,353.2,111.3,54.6,176.4,1\n288,-1,1719.2,460.2,79,209.4,1\n288,-1,108.5,351.3,51.8,188.9,1\n288,-1,940,77.8,62.5,177.2,1\n288,-1,1092.8,92.9,52.8,163.2,1\n288,-1,1666.5,32.8,57.3,154.6,1\n288,-1,287,130.3,54.8,174.7,1\n288,-1,796.5,149,60.4,174.4,1\n288,-1,457.2,143,70.6,201.5,1\n288,-1,1466.5,28.3,57.6,149.4,1\n288,-1,401.1,21.7,56.4,166.3,1\n288,-1,1019.5,94.2,59.7,184.9,1\n288,-1,388,447.4,83.7,222.8,1\n288,-1,704.4,1.1,53.9,157.8,1\n288,-1,1449.5,584.9,91.7,240.3,1\n288,-1,224,579.8,88.2,253.9,1\n288,-1,233.9,412.9,63.1,200.7,1\n288,-1,516,107,51.2,178.1,1\n288,-1,222.1,129.8,53.6,163.9,1\n288,-1,286,808.5,98.6,272.5,1\n288,-1,748.2,104.5,47.2,165.9,1\n288,-1,813.4,384.9,91.8,218.4,1\n288,-1,545.6,428.9,68,208.6,1\n288,-1,463.2,412.9,67.2,229.6,1\n288,-1,884.5,398.5,78.9,201.1,1\n288,-1,832.8,103.9,58.3,168.2,1\n288,-1,781,351.6,65.1,177.4,0.993\n288,-1,939.9,919.9,86.2,161.1,0.955\n289,-1,1221.7,31.3,62,120.4,1\n289,-1,687.1,207,78,113.1,1\n289,-1,1668.4,32.9,58.6,154.2,1\n289,-1,108.4,350.9,52.3,188.6,1\n289,-1,353.6,111.6,54.2,175.5,1\n289,-1,939.4,77.8,61.8,177.5,1\n289,-1,1719.9,459.1,78.8,209.9,1\n289,-1,1090.8,93.1,52.8,162.3,1\n289,-1,287.1,129,54.7,175,1\n289,-1,1466.4,28.1,56.8,147.6,1\n289,-1,796.8,150.8,60.1,173.1,1\n289,-1,457.1,142.3,71,199.9,1\n289,-1,401.3,21.1,56.4,165.1,1\n289,-1,386.6,444,83.8,223.1,1\n289,-1,1019.3,94.3,58.3,182,1\n289,-1,704.8,1.4,53.5,158.1,1\n289,-1,234.9,411.8,61.6,198.2,1\n289,-1,225.8,580.8,90.2,253.5,1\n289,-1,290.4,814,96.3,267,1\n289,-1,1451,584.6,95.6,245,1\n289,-1,516,107.1,50.7,176.3,1\n289,-1,221.8,128,54,165.1,1\n289,-1,748,106.4,47.4,165,1\n289,-1,544.6,430,67.9,208.8,1\n289,-1,814.5,384.7,93.5,220.4,1\n289,-1,832.7,103.9,59.2,165.9,1\n289,-1,463.6,414.4,65.9,226.5,1\n289,-1,884.2,400,82.8,199.7,1\n289,-1,940.2,920.5,83.9,160.5,0.973\n289,-1,788.7,355.9,63.3,177.6,0.843\n293,-1,1221.3,31.3,61.6,119.9,1\n293,-1,686.1,206.9,80.4,113.3,1\n293,-1,1674.9,38,56.6,155.5,1\n293,-1,1466,21.6,54.2,147.2,1\n293,-1,236.5,583.5,95.2,250.2,1\n293,-1,1720.8,458.7,78.6,209.4,1\n293,-1,938.1,70,65,176.3,1\n293,-1,797.2,147.7,59,175,1\n293,-1,353.8,109.9,54.6,177.5,1\n293,-1,235.8,404.9,60.4,193.5,1\n293,-1,286,129.3,52.8,172.6,1\n293,-1,1086.6,90.8,52.8,162.6,1\n293,-1,107.6,353.4,52.5,186.6,1\n293,-1,454.4,137,75,200.2,1\n293,-1,1015,92.7,57.9,181.7,1\n293,-1,404.1,22.2,57.2,170.8,1\n293,-1,705,1.1,53.6,157.1,1\n293,-1,385.9,433.4,83.7,229.3,1\n293,-1,296.7,833.9,98.2,247.1,1\n293,-1,1460.9,588.3,89.9,246.8,1\n293,-1,221,130.8,56.3,165.9,1\n293,-1,817.8,387.1,90.9,221.3,1\n293,-1,745.7,105.3,47.5,170.6,1\n293,-1,540.6,432.3,66.5,213.4,1\n293,-1,515.5,106.2,49,177.3,1\n293,-1,885.8,406.1,78.2,192.7,1\n293,-1,462.6,417.4,63.3,231.7,0.999\n293,-1,824.8,105.4,61.3,159,0.998\n293,-1,941,920.2,75.5,160.8,0.996\n297,-1,1221.4,31.7,61.4,118.4,1\n297,-1,1677.5,43.8,58.6,154.8,1\n297,-1,686.5,206.8,79.5,114,1\n297,-1,938,63.8,64.1,176.7,1\n297,-1,1462.3,21.3,53,148.8,1\n297,-1,1720,458.4,78.4,210.9,1\n297,-1,237.1,398,60.6,193.2,1\n297,-1,354.1,110,54.1,178.2,1\n297,-1,244.6,578.1,103.2,257,1\n297,-1,452.8,131.4,75.6,203.5,1\n297,-1,704.6,1,54.4,157.2,1\n297,-1,796,148.3,59.8,178.6,1\n297,-1,407.4,26.8,55.7,165.2,1\n297,-1,1010.3,90.5,59.7,181,1\n297,-1,108.9,350.6,51.3,190,1\n297,-1,384.3,430.7,83.9,227.6,1\n297,-1,284,130.7,53.2,171.3,1\n297,-1,1080.8,87.2,50.8,165.7,1\n297,-1,218.2,130.8,59.1,167.1,1\n297,-1,535.7,436.8,69.1,219.6,1\n297,-1,301.1,839.9,97.5,241.1,1\n297,-1,1466,590.5,92.8,244.4,1\n297,-1,816.5,389.4,96.4,221.7,1\n297,-1,885.9,407.7,76.7,201.1,1\n297,-1,512.8,104.8,47.8,176.6,0.999\n297,-1,741.5,104.4,47.3,169.1,0.999\n297,-1,462.2,420.8,62.6,227.1,0.999\n297,-1,939.1,914,69.6,167,0.977\n297,-1,832.6,110.3,47,148.4,0.85\n301,-1,1221.6,31.9,61.5,118,1\n301,-1,1682.9,45,57.3,152,1\n301,-1,687.1,206.3,79.8,114.5,1\n301,-1,1458.6,17.9,53.1,150.6,1\n301,-1,1719.6,457.7,80,212.2,1\n301,-1,937.6,61.6,63.8,175.7,1\n301,-1,255.4,577.9,105.6,255.8,1\n301,-1,109.2,350.2,51.3,192.2,1\n301,-1,795.1,148.3,61.9,180.4,1\n301,-1,408.8,31.9,56.4,165.9,1\n301,-1,354,110.6,55.4,177.9,1\n301,-1,238.3,393,58.8,194.3,1\n301,-1,453.9,128.3,74.1,204.1,1\n301,-1,704.9,1,53.6,158.7,1\n301,-1,1008.2,86.1,59.8,182.5,1\n301,-1,283.6,131,53.7,171.5,1\n301,-1,218.4,132.2,58,164.7,1\n301,-1,1472.5,594.2,90.4,244.8,1\n301,-1,1076.8,86,49.7,162.1,1\n301,-1,532.7,445.1,69.5,214.8,1\n301,-1,384.6,421.2,82.7,227.9,1\n301,-1,305.1,844,103,237,1\n301,-1,822.4,399.6,89.3,219.9,1\n301,-1,740.5,100.1,46.7,174,1\n301,-1,888.5,416.4,71,199.4,1\n301,-1,512.3,103.1,47.1,173.8,0.999\n301,-1,459.5,426.2,65.4,230.4,0.999\n301,-1,935.2,913.3,65.9,167.7,0.993\n301,-1,827.1,112.4,48.2,166.7,0.078\n302,-1,1221.7,31.9,61.6,118.5,1\n302,-1,1683.8,44,56.7,152.9,1\n302,-1,686.8,206.2,79.8,114.3,1\n302,-1,1458.5,17.1,52.7,149.4,1\n302,-1,257.1,577.4,108,258.8,1\n302,-1,936.8,60.7,66.1,176.6,1\n302,-1,410.6,32.1,56.4,165.2,1\n302,-1,1719.6,457.7,80.1,212.2,1\n302,-1,108.4,351.5,50.9,189.7,1\n302,-1,238.2,392.2,59.4,195.8,1\n302,-1,705,1.1,53.8,157.6,1\n302,-1,354.6,110.7,54.9,177.3,1\n302,-1,793.8,149.9,61.9,177.1,1\n302,-1,454,128.1,73.1,203.3,1\n302,-1,1008.5,85,58.1,178.4,1\n302,-1,282.5,131.2,53.9,171.1,1\n302,-1,218.5,132.1,57.3,165,1\n302,-1,532.8,449.5,68.1,205.6,1\n302,-1,1474.9,595,91.2,245.9,1\n302,-1,308.9,846.1,102.6,234.9,1\n302,-1,1075.7,85.7,50.1,161.2,1\n302,-1,386,424.9,80.1,218.8,1\n302,-1,823,401,87.2,222.6,1\n302,-1,739.6,101.2,46.4,172.4,1\n302,-1,888.2,417,71.2,201.8,1\n302,-1,456.9,429.8,66.5,229.3,0.999\n302,-1,510.6,102.2,48.3,175.1,0.999\n302,-1,934.7,912,68.6,169,0.992\n311,-1,1221.3,31.4,62.1,117.9,1\n311,-1,1456.4,10.3,55.4,146,1\n311,-1,686.8,207.7,78.6,112.1,1\n311,-1,416.2,36.3,59.8,167.8,1\n311,-1,310.8,580.8,85.5,250.1,1\n311,-1,795.1,148.9,59,174.2,1\n311,-1,1720.1,457.1,78.8,212.3,1\n311,-1,108.2,351.5,52.6,190.3,1\n311,-1,358.2,111.1,55.6,176.7,1\n311,-1,1697.2,48.2,57.7,160.3,1\n311,-1,452.4,124.3,76,201.3,1\n311,-1,236.7,380.3,57.5,190.5,1\n311,-1,933.4,51.6,62.8,174.2,1\n311,-1,1492.4,597,91.2,243.5,1\n311,-1,278.4,132.8,55.5,170.5,1\n311,-1,216.8,131.4,56,165.3,1\n311,-1,1001.7,77.5,63.1,183.7,1\n311,-1,705.5,1.7,53.4,157.3,1\n311,-1,528,457.2,67.6,216.3,1\n311,-1,888.3,429,72.1,196.4,1\n311,-1,1058.1,79.9,55.4,165.3,1\n311,-1,830.5,420.2,80.7,210.7,1\n311,-1,327.8,878.4,99.5,202.6,1\n311,-1,734.3,99.5,45.4,170.2,1\n311,-1,444.5,436.8,69.9,236.3,0.999\n311,-1,392.6,401.5,81,234.3,0.999\n311,-1,510.8,102.2,45.3,171.9,0.998\n311,-1,927.9,910.4,79,170.6,0.995\n311,-1,366.2,794.9,106.1,264.7,0.61\n312,-1,1221.2,31.4,61.5,118.3,1\n312,-1,686.5,207.8,79.1,112.4,1\n312,-1,1456.7,8.7,55.2,145.6,1\n312,-1,415.8,36.8,60.1,170.3,1\n312,-1,1720.2,456.9,78.2,212.8,1\n312,-1,357.5,110.7,56.7,178.5,1\n312,-1,107.6,350.7,53,190.3,1\n312,-1,1493.2,598.8,94.1,243.7,1\n312,-1,1698.1,47.8,57.7,160.7,1\n312,-1,237.2,378.3,56.7,189.3,1\n312,-1,795,149.5,59.2,175,1\n312,-1,311.6,579.5,90.9,249.3,1\n312,-1,934.7,50.8,62.8,174,1\n312,-1,451.8,124.5,76.3,199.5,1\n312,-1,217.3,131.2,55.8,165.6,1\n312,-1,280,129.9,55,172.9,1\n312,-1,1001.7,78.1,62.6,182,1\n312,-1,526.3,458,68.9,219.4,1\n312,-1,889.3,431.3,70.2,195.7,1\n312,-1,704.9,2.6,54.1,156.8,1\n312,-1,1056.3,79.3,55.2,166.4,1\n312,-1,830.1,419.3,80.7,212.3,1\n312,-1,733.4,99.3,45.9,172,1\n312,-1,329.4,878.3,102,202.7,0.999\n312,-1,443.8,438.1,69.8,236,0.999\n312,-1,393.4,404,80,227.6,0.999\n312,-1,510.7,102.1,44.7,172.4,0.997\n312,-1,927.5,910.4,80,170.6,0.995\n315,-1,1221.7,31.6,61.3,119.1,1\n315,-1,687,207.1,79.8,113.8,1\n315,-1,1457,6.7,55.6,146,1\n315,-1,313.7,584,108.8,247.2,1\n315,-1,418.1,40.5,57.5,169.9,1\n315,-1,1701,49.1,57.9,159.5,1\n315,-1,1499.7,599.3,91.3,247.1,1\n315,-1,1720.7,456.7,78.5,212.9,1\n315,-1,109,348.6,51.9,192.1,1\n315,-1,931.9,49.6,63.3,173.5,1\n315,-1,357.8,108.7,57.7,180.9,1\n315,-1,451.7,121.7,76.2,200.1,1\n315,-1,797.6,149,57.1,175.6,1\n315,-1,999.7,77.2,60.7,179,1\n315,-1,889.2,434.3,72.5,199,1\n315,-1,1054.4,77.6,56,168.5,1\n315,-1,705.1,3,53.5,156.1,1\n315,-1,280.6,128.8,54.3,175.9,1\n315,-1,526.5,468.3,65.7,218.7,1\n315,-1,214.4,129.6,55.6,169.4,1\n315,-1,237.2,375.3,57.8,190.9,1\n315,-1,438,440,74.5,235.6,1\n315,-1,829.1,426.2,77.4,209.4,1\n315,-1,730.8,101.3,47.4,167.4,1\n315,-1,344.1,885,96.2,196,0.999\n315,-1,511.4,101.8,43.2,169.7,0.997\n315,-1,926.9,908.7,79.3,172.3,0.995\n315,-1,403.6,410.8,67.3,215,0.164\n320,-1,1221.5,31.2,61.6,119,1\n320,-1,1455.4,2.6,56.9,143,1\n320,-1,331.5,584,106,249.9,1\n320,-1,686.6,206.9,79.8,112.5,1\n320,-1,108.8,351,52.4,190.9,1\n320,-1,1719.4,457.7,79.6,212.8,1\n320,-1,452.9,115.3,73.6,202,1\n320,-1,1711.8,52.2,55.7,158.1,1\n320,-1,358.9,107.5,58.5,182.3,1\n320,-1,796.9,144.7,59,181.1,1\n320,-1,894.4,441,71.3,200.4,1\n320,-1,433.9,451,72.2,241.9,1\n320,-1,1509.4,601.4,90.2,245.3,1\n320,-1,238.6,373.2,57.2,188.8,1\n320,-1,419.5,45,56,171.5,1\n320,-1,993.5,76.5,60.7,177.4,1\n320,-1,929.7,48.3,60.7,171.2,1\n320,-1,281.4,130.2,54.5,173.6,1\n320,-1,1574.7,2.2,57.1,109.2,1\n320,-1,1050.7,76.4,53.1,168.7,1\n320,-1,214,132.8,56.3,166.5,1\n320,-1,520,474.7,65,215.9,1\n320,-1,828.4,434.3,77.2,206.3,1\n320,-1,705.7,2.2,52.7,155.8,1\n320,-1,727.5,97.6,49.2,177.8,1\n320,-1,357.4,895.4,101.7,185.6,0.999\n320,-1,515.1,100.4,41.1,168,0.999\n320,-1,928.3,909.4,78.5,171.6,0.994\n322,-1,1221.5,31.6,62.5,118.4,1\n322,-1,1454.3,1.3,57.3,141.8,1\n322,-1,334.2,581.2,112,251.5,1\n322,-1,686.4,206.6,80.1,113,1\n322,-1,1714.8,53.9,57.8,159.2,1\n322,-1,108.8,351.1,52,189.4,1\n322,-1,1719.6,457,79,213.3,1\n322,-1,453.3,114.8,72.3,201.3,1\n322,-1,795.9,147.8,58.5,175.8,1\n322,-1,360.5,108.6,58.5,180.8,1\n322,-1,1577.2,2.8,59.6,109.2,1\n322,-1,991.2,73.5,62,179.6,1\n322,-1,420.1,45.3,55.9,170.6,1\n322,-1,1513.4,599.7,87,251.3,1\n322,-1,895.4,441,69.5,202.4,1\n322,-1,237.2,369.7,58.5,189.3,1\n322,-1,281.1,131.5,54.4,172.7,1\n322,-1,213.2,133.3,56.3,166.3,1\n322,-1,828.4,434.3,80.4,210.5,1\n322,-1,929,46.5,60.8,169.3,1\n322,-1,517.9,473.9,67.3,221.3,1\n322,-1,1049,79.7,52.4,162.2,1\n322,-1,430.9,457.4,74.3,240.8,1\n322,-1,728.6,99.7,48.3,173.5,1\n322,-1,706.3,5.6,53.1,153.8,1\n322,-1,514.7,101.2,41.9,168.3,0.999\n322,-1,929.1,908.7,77.5,172.3,0.99\n322,-1,364.9,898.2,97.3,182.8,0.984\n322,-1,1842.1,516.1,62,233,0.637\n323,-1,1221.5,31.6,62.3,118.8,1\n323,-1,1454.1,1,55.9,140.3,1\n323,-1,686.8,207.1,79.4,113.1,1\n323,-1,342.5,583,105,245.9,1\n323,-1,1714.6,54.7,60,159.7,1\n323,-1,108.4,350.5,52.2,189.8,1\n323,-1,1719.7,456.7,79.6,213.1,1\n323,-1,453,115.9,72.5,200.6,1\n323,-1,795.3,147,60.1,178,1\n323,-1,990.9,72.4,62.2,178.9,1\n323,-1,420.6,45,55.2,169.9,1\n323,-1,361.2,107.3,58.8,182.8,1\n323,-1,1576.8,2.1,61.5,111.9,1\n323,-1,1514.9,601.9,86.7,247.4,1\n323,-1,896,442.8,66.4,198.2,1\n323,-1,928.7,45.3,61.6,166.7,1\n323,-1,237.2,366.4,57.9,188.4,1\n323,-1,281.5,132,54,172.2,1\n323,-1,829.6,436.2,79.3,208.5,1\n323,-1,212.8,134.4,56.3,165.2,1\n323,-1,1048.1,79.3,53,161.1,1\n323,-1,517.2,473.6,66.9,222.6,1\n323,-1,727.7,97.9,49.1,173.4,1\n323,-1,428.2,458.4,75.7,239,1\n323,-1,515.1,100.7,41.1,169.1,0.999\n323,-1,707.5,5.9,50.9,153.8,0.996\n323,-1,363.2,902.6,101,178.4,0.979\n323,-1,930.3,907.6,76.4,173.4,0.978\n323,-1,1840.5,515.9,64,239.3,0.754\n327,-1,1221.5,31.5,62.4,118.4,1\n327,-1,686.1,207.3,80.7,112.3,1\n327,-1,1452.7,1,55.4,137.7,1\n327,-1,1717.1,60.7,61.1,158.7,1\n327,-1,371.3,577.6,89.8,252.1,1\n327,-1,452.6,115.5,72.5,198.5,1\n327,-1,108.2,350.4,51.8,188.3,1\n327,-1,1719.6,456.9,79.1,213.4,1\n327,-1,795,149.6,61,174.7,1\n327,-1,238.2,359.4,58.3,189.4,1\n327,-1,987.9,66.9,62.4,181.5,1\n327,-1,281.7,134.6,54.6,170.4,1\n327,-1,927.9,33.6,63,174.9,1\n327,-1,420.6,45.8,57,169.5,1\n327,-1,363.5,108.1,57.7,179.5,1\n327,-1,896.8,443.2,71.7,201.4,1\n327,-1,212.9,137.1,55.3,164.3,1\n327,-1,1520.6,604.1,87.1,245.7,1\n327,-1,1579.9,3,65,116.6,1\n327,-1,515.4,479.7,66.9,223.4,1\n327,-1,725.4,91,49.9,177.5,1\n327,-1,834.5,441,80.4,208.9,1\n327,-1,1045.3,78.4,52,159.3,1\n327,-1,1832.9,512.4,68.9,208.5,1\n327,-1,421.6,466.5,78,231.2,0.999\n327,-1,517.1,102.1,40.5,165.5,0.999\n327,-1,932.7,910.4,72.7,170.6,0.982\n327,-1,374.6,915.6,89.8,165.4,0.77\n327,-1,929.2,396,65,192.1,0.072\n330,-1,1221.1,31.6,62.8,118.6,1\n330,-1,686.2,206.7,79.9,112.7,1\n330,-1,384.7,578.8,85.2,252.2,1\n330,-1,450.5,115.4,73.9,192.5,1\n330,-1,1718.5,62.9,62.5,159.3,1\n330,-1,1449.2,1.3,57.2,133.9,1\n330,-1,1720.2,457.9,77.7,212.3,1\n330,-1,108.9,348.8,51.2,190.6,1\n330,-1,281.5,131.8,56.2,173.5,1\n330,-1,985.5,64.1,61.8,181.1,1\n330,-1,927,29.2,65.1,176.8,1\n330,-1,796.7,150.7,60.3,171.8,1\n330,-1,361.9,106.2,59.2,181.4,1\n330,-1,212.7,138.9,55.4,162.9,1\n330,-1,1583.1,1,65.4,124.8,1\n330,-1,237.3,356,58.9,190.5,1\n330,-1,721.7,88.6,52.6,181.2,1\n330,-1,897.5,446.7,72.7,200.3,1\n330,-1,1830.7,507.8,68.8,204.5,1\n330,-1,837.5,439.1,82.4,210.7,1\n330,-1,1043,76.5,52.8,161.8,1\n330,-1,510,487.3,68.1,225.8,1\n330,-1,420.8,49.2,56.7,164.4,1\n330,-1,1528.9,606.6,85,243.5,1\n330,-1,519.5,104,38.4,165.4,0.999\n330,-1,415.5,465.1,80.2,229.1,0.999\n330,-1,936.2,392.6,68.1,190.6,0.985\n330,-1,935,909.9,67.5,171.1,0.891\n330,-1,785.2,101.2,46.2,168.1,0.389\n330,-1,375.7,919,84.3,162,0.087\n335,-1,1220.7,30.7,63.2,119.3,1\n335,-1,687.1,206.6,78.2,113.3,1\n335,-1,395.6,582.4,103.8,245.9,1\n335,-1,1448.7,1.1,55.9,127.6,1\n335,-1,448.9,107,72.8,196.3,1\n335,-1,1590.5,2.1,57,121.7,1\n335,-1,108.7,349.4,52,190,1\n335,-1,1724,69.5,59.9,153.2,1\n335,-1,1720.5,457.7,79,212,1\n335,-1,284.9,132.1,55.2,173.2,1\n335,-1,234.2,351.9,57.6,190.6,1\n335,-1,898.1,448.2,73.1,211.3,1\n335,-1,362.6,106.7,57.1,177.7,1\n335,-1,981.7,66.2,61.4,177.5,1\n335,-1,1829.9,501.7,69.4,207.7,1\n335,-1,1536.7,612,83.8,244.1,1\n335,-1,926.9,25.2,65.7,174.3,1\n335,-1,797,149.5,58.9,173,1\n335,-1,1040.5,74.4,52.1,161.1,1\n335,-1,212.5,139.6,54.6,160.9,1\n335,-1,520.3,99.8,39.8,168.2,1\n335,-1,840.1,440.9,83.3,220,1\n335,-1,719.4,98,53.7,164.7,1\n335,-1,507.2,492.5,69.4,226.5,1\n335,-1,951.5,398.3,68.7,193.9,1\n335,-1,776.1,95.3,42.2,155.6,0.999\n335,-1,420.6,49.6,57.5,171.8,0.999\n335,-1,938.9,915.8,72.4,165.2,0.973\n335,-1,430.1,869.9,96.5,211.1,0.21\n335,-1,414.7,372.3,78.4,199.7,0.052\n338,-1,1220.9,30.5,63.3,119.9,1\n338,-1,687.3,206.3,78,112.5,1\n338,-1,1447.8,1.2,57.4,126.7,1\n338,-1,407.2,580,107.7,249.2,1\n338,-1,1592.6,2.2,55.8,127.5,1\n338,-1,1728.1,71.9,57.3,153.8,1\n338,-1,448.7,105.9,71.8,194.9,1\n338,-1,286.3,130.7,54,174.3,1\n338,-1,1719.6,457.1,79.7,213.7,1\n338,-1,108.6,350.1,52.5,189.5,1\n338,-1,963.5,396.2,65.4,199.5,1\n338,-1,795,147.7,62.3,176.1,1\n338,-1,363.5,105.4,56.3,179.5,1\n338,-1,977.8,65.9,63.7,178.4,1\n338,-1,901.1,453.9,68,211.7,1\n338,-1,1829.4,500.7,70.3,208.1,1\n338,-1,927.4,22.3,64.3,173,1\n338,-1,233.3,349.3,56.9,186.6,1\n338,-1,520.9,99.2,41.4,170.2,1\n338,-1,1541.5,612.8,81.9,246.6,1\n338,-1,211.8,140,54.7,162.6,1\n338,-1,504.5,492.7,67.9,223.8,1\n338,-1,1038.9,71.2,52,163.7,1\n338,-1,840.9,445.7,84.3,220.9,1\n338,-1,717,95.6,56.2,170,1\n338,-1,419.5,360.8,82.8,213.5,0.999\n338,-1,418.8,50.8,56,168.5,0.998\n338,-1,773.7,97.2,40.5,156,0.997\n338,-1,943.7,918.5,70.8,162.5,0.977\n338,-1,850.2,2.5,43.4,86,0.133\n338,-1,437.3,868.7,103.1,212.3,0.055\n339,-1,1221,30.9,62.5,119,1\n339,-1,687.1,206,78.4,114,1\n339,-1,415.2,578.6,104.8,252.1,1\n339,-1,1728.8,68.6,57,160.5,1\n339,-1,1595.1,1.8,55.8,128.3,1\n339,-1,1447.5,1.2,57.4,126.9,1\n339,-1,1719.6,456.6,79.5,214.4,1\n339,-1,108.4,350.5,52.5,188.8,1\n339,-1,447.8,106,72.6,194.8,1\n339,-1,286.3,131.1,53.8,173.2,1\n339,-1,965.6,397.8,66.8,196.4,1\n339,-1,1831,499.8,68.5,205.5,1\n339,-1,795.7,147,61.2,177.5,1\n339,-1,363.3,105.5,56.8,179.3,1\n339,-1,976.7,65.4,64.3,179.2,1\n339,-1,902.9,455.6,67.5,212.7,1\n339,-1,521,99,41.4,170.2,1\n339,-1,928.5,22.6,63.4,167,1\n339,-1,211,140.6,56,163.9,1\n339,-1,1037.9,70.9,52.9,164.5,1\n339,-1,232.6,347,58.1,185.6,1\n339,-1,504.7,494.5,67.2,222.6,1\n339,-1,1541.9,613,83.6,246.3,1\n339,-1,841.9,446.9,84.5,223.5,1\n339,-1,421,360.5,86.5,215.7,1\n339,-1,717.8,96.8,55.3,167.3,0.999\n339,-1,773.5,96.4,40.8,158.5,0.999\n339,-1,419.9,50.2,56.4,169.7,0.997\n339,-1,944.5,920,71.1,161,0.986\n339,-1,849.7,4.1,45.6,82.3,0.24\n344,-1,1221.3,30.9,62.2,119,1\n344,-1,687,206,79,113.5,1\n344,-1,1735.1,76.5,56.4,156.5,1\n344,-1,1603.3,1,55.7,133.6,1\n344,-1,1828.5,491,69.4,202.9,1\n344,-1,446.4,101.1,72.5,197.4,1\n344,-1,287.7,132.3,53,171.1,1\n344,-1,1719.5,458.4,79.7,213,1\n344,-1,1445.9,1,55,122.3,1\n344,-1,107.9,349.3,52.3,189.2,1\n344,-1,438.3,576.1,98.4,248.8,1\n344,-1,1550.2,616,83.3,243.5,1\n344,-1,209.4,141.8,56.4,163.1,1\n344,-1,797,154.6,58.2,169.2,1\n344,-1,982.9,410.5,65.4,189.7,1\n344,-1,364.1,104.6,57.5,182.8,1\n344,-1,970.8,62.4,62.5,170.8,1\n344,-1,1035.2,67.7,54.4,164,1\n344,-1,520.2,98.1,39.6,169.5,1\n344,-1,431.7,360,76.8,206.1,1\n344,-1,841.5,451,85.6,228.5,1\n344,-1,927.6,17.6,62.7,167.2,1\n344,-1,229.3,338.2,56.9,187.2,1\n344,-1,901,463.9,69.6,204.9,1\n344,-1,712.6,94.7,58.8,173.1,0.999\n344,-1,771,95.8,40.9,158,0.999\n344,-1,401.7,479.5,81.3,247.3,0.998\n344,-1,1880,63.5,41,168.6,0.979\n344,-1,948.1,925,76.4,156,0.969\n344,-1,502.2,497.3,62.4,230.2,0.931\n344,-1,422.5,59.1,52,160.6,0.147\n344,-1,847.8,2.3,49,89,0.143\n345,-1,1221.5,30.8,62.3,119.1,1\n345,-1,687.2,206.2,78.9,113.5,1\n345,-1,1735.4,78.8,56.2,153.4,1\n345,-1,1604,1.5,54.9,133.9,1\n345,-1,1720.1,457,79.5,213.9,1\n345,-1,1830,488.7,68,205.9,1\n345,-1,286.6,130.9,53.9,173.2,1\n345,-1,108,348.9,52.5,189.6,1\n345,-1,445.7,99.7,72.2,197.7,1\n345,-1,444.8,572.7,97.5,251.2,1\n345,-1,1445.3,1,54.8,121.7,1\n345,-1,208.2,141.7,58.5,163.8,1\n345,-1,796.9,153.5,59,171.6,1\n345,-1,1549.4,615,86.6,243.8,1\n345,-1,987.2,410.1,63.2,196,1\n345,-1,1034.5,66.8,54.2,164.7,1\n345,-1,969.2,60.8,64.1,172.4,1\n345,-1,363.8,105.4,56.9,181.9,1\n345,-1,520.2,97.5,39.2,170.4,1\n345,-1,434.7,358.5,73.4,204.6,1\n345,-1,927.1,18.3,62,163.6,1\n345,-1,840.5,451.5,88.5,228,1\n345,-1,228.3,338.2,56.5,186.7,1\n345,-1,898.8,463.6,72.1,206,1\n345,-1,712.2,95.4,58.7,172,0.999\n345,-1,399,486.8,83.2,232.2,0.999\n345,-1,770.1,96.3,40.4,153.8,0.998\n345,-1,1877.8,63.6,43.2,169.8,0.977\n345,-1,950.7,927.1,75.5,153.9,0.955\n345,-1,847.2,1.1,48.4,92,0.812\n345,-1,501.3,496.7,67.2,238.4,0.331\n347,-1,1221.6,30.9,61.3,118.3,1\n347,-1,687.2,206.5,78.4,113.1,1\n347,-1,1736.7,77.7,57.9,155.4,1\n347,-1,456.3,574.7,91,243.7,1\n347,-1,444.4,97.1,73.7,201.6,1\n347,-1,1607.3,1,56.1,137.7,1\n347,-1,993.2,412.3,63.9,194.3,1\n347,-1,287.2,132.3,54.2,171.7,1\n347,-1,1719.5,457.5,77.9,212.8,1\n347,-1,108.7,348.4,51.8,189.9,1\n347,-1,1829.9,487,67.5,207.4,1\n347,-1,208.4,141.1,58.2,162,1\n347,-1,969.3,56.3,62.9,176.5,1\n347,-1,1033.6,64.8,54.5,167,1\n347,-1,1550.2,617.6,88.3,240.7,1\n347,-1,796.7,153.1,59.1,170.1,1\n347,-1,365.3,106.6,55.5,180.6,1\n347,-1,1446.3,2.2,52.3,117,1\n347,-1,433.8,352.7,76.6,205.8,1\n347,-1,226.4,336.9,56.7,190.3,1\n347,-1,519.2,99.5,39,165.9,1\n347,-1,926.1,17.8,62,163.3,1\n347,-1,396.2,491.2,85.5,233.1,1\n347,-1,899.3,465.8,72.3,207.4,1\n347,-1,842.4,452.5,84.9,225.9,1\n347,-1,769.3,93.8,42.1,155.4,0.999\n347,-1,711.2,95.9,58.8,172.1,0.999\n347,-1,1874.7,64.1,46.3,168.2,0.996\n347,-1,845.3,1.5,46.2,93.2,0.993\n347,-1,952.6,929.2,76.8,151.8,0.778\n349,-1,1221.5,30.5,62,119.4,1\n349,-1,687.1,206.3,78.2,113.5,1\n349,-1,1738.7,77.5,57.9,154.2,1\n349,-1,444.6,93.6,72.9,203.4,1\n349,-1,1610,1,58.7,137.2,1\n349,-1,286.9,129.9,54.6,173.5,1\n349,-1,1000,412.8,64.9,194.5,1\n349,-1,1033.1,62.6,54.4,168.9,1\n349,-1,108.9,348.5,52.4,189.6,1\n349,-1,207.9,139,58.9,164.3,1\n349,-1,364,106.1,56,181.3,1\n349,-1,968.4,55.1,62.1,177.4,1\n349,-1,436,347.1,73.7,210.3,1\n349,-1,1444.8,2.1,52.7,112.7,1\n349,-1,1719.7,457.3,78.6,212.4,1\n349,-1,469.6,578.8,88.9,243,1\n349,-1,1553.3,617.3,88.9,243.8,1\n349,-1,795.2,149.9,61.4,172.7,1\n349,-1,1829.5,483.5,67.1,209.4,1\n349,-1,226.4,336,58.5,190.2,1\n349,-1,518.9,98.6,39,166.6,1\n349,-1,925.4,17.4,60.6,163.9,1\n349,-1,902.4,470.2,71.8,203.9,1\n349,-1,841.6,453.8,86.6,226.9,1\n349,-1,393.1,494.5,86.4,230.7,1\n349,-1,844.8,1,48.3,96.4,0.999\n349,-1,768.2,95.2,41.9,153,0.999\n349,-1,708.7,93.5,59.7,174.2,0.996\n349,-1,1871,66.9,50,164.7,0.994\n349,-1,953.1,931.1,75.6,149.9,0.81\n354,-1,1222,30.9,61.3,119.8,1\n354,-1,687.4,206.8,78.3,112.5,1\n354,-1,1615.3,1,68.2,149.5,1\n354,-1,1441.2,2.5,51.1,111,1\n354,-1,1747.9,83.3,58.7,153.6,1\n354,-1,1010.1,418.4,69.7,197.9,1\n354,-1,1032.6,60.1,54.3,170.9,1\n354,-1,429.1,333.9,80,213.2,1\n354,-1,488.1,578.9,96.7,242.4,1\n354,-1,287.6,131.7,55.7,171.8,1\n354,-1,1823.8,478,69,207.6,1\n354,-1,1720.2,455.9,77.8,214.9,1\n354,-1,109.4,351,53.1,189.3,1\n354,-1,206.4,138.1,59.3,163,1\n354,-1,445.7,86.6,70.3,205,1\n354,-1,965.8,53.6,63.2,176.5,1\n354,-1,364.2,106.7,54.9,179.4,1\n354,-1,1555,620.5,92.8,243.7,1\n354,-1,223.4,330.8,57.6,186.4,1\n354,-1,797.7,152.1,59,171.6,1\n354,-1,387.9,501.9,84.9,231.7,1\n354,-1,923.2,11.5,62.7,161.4,1\n354,-1,515.6,92.2,42.2,167.7,1\n354,-1,1858.6,58.8,56.2,164.5,1\n354,-1,903.1,476.6,75.4,208.2,1\n354,-1,842.4,1.3,49.8,98.2,1\n354,-1,843.1,460.1,85.1,228.9,0.999\n354,-1,764.5,92.1,43.4,155.9,0.999\n354,-1,952.6,928.9,80.5,152.1,0.86\n354,-1,707.8,90.3,55.8,172.9,0.722\n356,-1,1222.3,31.5,60.4,118.9,1\n356,-1,687.9,206.9,77.2,113.1,1\n356,-1,1617.4,1,69.9,154.1,1\n356,-1,1439.1,2.7,49.9,109.8,1\n356,-1,1018.8,421.5,68,198.7,1\n356,-1,1749,84.6,59.5,158.2,1\n356,-1,427.8,332.2,81.7,211.8,1\n356,-1,1720.9,456,77.2,215,1\n356,-1,1031.3,60.7,54.7,168.2,1\n356,-1,287.2,132,55.4,171.9,1\n356,-1,109.1,349.1,52.5,191.2,1\n356,-1,446.4,87,69.6,203.3,1\n356,-1,365.3,108.7,55,177.3,1\n356,-1,208.2,139.7,56.9,159.8,1\n356,-1,796.8,150.2,60.9,174.1,1\n356,-1,963.4,54.9,63.6,172.3,1\n356,-1,1555.4,620.9,95.2,246.4,1\n356,-1,1822.3,477.8,70,207.8,1\n356,-1,221.3,327.1,56.6,183.5,1\n356,-1,489.4,575.3,102.7,243.6,1\n356,-1,383.5,500.9,87.7,244.9,1\n356,-1,514.6,91.5,42.5,166,1\n356,-1,905.3,480.5,79.6,210.3,1\n356,-1,842.4,1.4,48.7,98.4,1\n356,-1,1857.3,58.1,51.5,162.2,1\n356,-1,924.3,8.4,63.5,161.2,1\n356,-1,841.9,464.3,86.5,226.3,0.999\n356,-1,764.4,94.2,43.7,152.3,0.999\n356,-1,954.2,928.3,79.7,152.7,0.847\n356,-1,710.6,92.6,54.2,170.8,0.215\n357,-1,1221.8,31,61.3,119.5,1\n357,-1,688.2,207.2,76.6,112.6,1\n357,-1,1437.9,1.1,50.2,110.4,1\n357,-1,1023.4,423.5,67.1,198.7,1\n357,-1,1618.7,1,71.4,156,1\n357,-1,427.3,331.5,82.4,213,1\n357,-1,1030.9,60.6,54.7,168.4,1\n357,-1,287.5,131.7,55.4,171,1\n357,-1,1749.2,84.7,62.4,160.1,1\n357,-1,1720.3,455.7,77.5,214.7,1\n357,-1,444.8,86,69.6,203.5,1\n357,-1,108.6,350.9,52.6,189.2,1\n357,-1,364.5,107.9,55.2,178.2,1\n357,-1,208.6,139.2,56.5,160,1\n357,-1,1559.2,621.4,92.9,246.3,1\n357,-1,796,150.6,60.9,173.3,1\n357,-1,962.6,54.7,64,172.8,1\n357,-1,1821.7,475.2,69,205.8,1\n357,-1,221.6,325.2,54.6,183.9,1\n357,-1,841.2,2.6,50.1,99,1\n357,-1,512.9,91.4,44.7,165.9,1\n357,-1,1852.2,57.8,55.4,166.3,1\n357,-1,490.9,572.7,104.5,246.6,1\n357,-1,905.3,481.7,82.4,210.8,1\n357,-1,383.7,505.1,85.9,241.4,1\n357,-1,925.5,6.1,61.8,160.9,1\n357,-1,842.6,467.1,86.9,224.5,1\n357,-1,764.4,92.8,43,153.5,0.999\n357,-1,953.4,927.1,79.9,153.9,0.822\n357,-1,384.1,4.9,40.2,77.4,0.067\n365,-1,1221.9,31.1,61.3,118.3,1\n365,-1,686.4,206.4,80.2,113.4,1\n365,-1,1432.6,1.7,51.3,103,1\n365,-1,436.7,327.2,73.9,202.3,1\n365,-1,1624.9,1,60.2,161.3,1\n365,-1,1022.9,57.2,55.7,168.7,1\n365,-1,208.9,142.5,60,160.8,1\n365,-1,370.1,513.3,83.5,239.3,1\n365,-1,1756,96,61.8,158.9,1\n365,-1,442.8,83.9,71.5,201.6,1\n365,-1,512.8,92.3,47.4,163.8,1\n365,-1,1718.7,456.1,80,213.6,1\n365,-1,1050.6,434.6,66.3,196.8,1\n365,-1,110.3,352.6,51.1,186.5,1\n365,-1,833.9,1,54,106.1,1\n365,-1,286.7,131.5,53.9,170.2,1\n365,-1,217.7,317.2,53.9,188.3,1\n365,-1,1838.3,66.7,55.7,159.4,1\n365,-1,797.1,148.9,59.8,174.3,1\n365,-1,362.7,113,54.2,173.5,1\n365,-1,956,47.4,61.7,173.4,1\n365,-1,1812.9,461.9,65,208.5,1\n365,-1,1576.3,626,83,247,1\n365,-1,910.3,485.5,79.6,210.5,1\n365,-1,526.9,568.6,97.3,251.1,1\n365,-1,469.2,534.1,65.4,235.1,1\n365,-1,381.1,1,43.1,88.2,1\n365,-1,845.4,477,85.5,229,0.999\n365,-1,762.9,98.3,41.6,141.3,0.997\n365,-1,928.7,2.7,58.9,159,0.993\n365,-1,960.5,921.6,77.9,159.4,0.991\n367,-1,1221.6,31.8,61.2,118.1,1\n367,-1,686.3,206.4,79.8,113.3,1\n367,-1,440.1,313.8,74.3,214.9,1\n367,-1,444,82.9,69.7,200.7,1\n367,-1,1432.1,2.3,52.6,101.9,1\n367,-1,1055.9,433.2,67.5,197.8,1\n367,-1,1626.3,4.7,57.1,160.9,1\n367,-1,209.4,142.7,59.7,159.2,1\n367,-1,1021.4,57,54.9,165.5,1\n367,-1,365.5,522.5,85.5,229.4,1\n367,-1,1757.9,97.1,60.3,157.6,1\n367,-1,109.4,352.4,51.9,187.7,1\n367,-1,1831.1,72.1,60.9,157.8,1\n367,-1,512.4,90.7,46.7,164.6,1\n367,-1,286.4,131.5,54,169.2,1\n367,-1,361.9,111.9,54.8,173,1\n367,-1,1718.8,455.9,80.2,213.9,1\n367,-1,955.3,45,63.3,175.3,1\n367,-1,795.9,149.2,60.1,175,1\n367,-1,214.9,314.4,54.1,189.3,1\n367,-1,537.7,575.1,94.4,242.9,1\n367,-1,1812.5,459.1,64.8,207.9,1\n367,-1,1577.6,627.9,84.6,246.7,1\n367,-1,911.2,489.6,76.9,206.6,1\n367,-1,467,539.8,66.7,229.3,1\n367,-1,832.8,1,54.8,109.6,1\n367,-1,380.2,2.2,45.1,86.9,1\n367,-1,759.4,95.1,44.2,144.3,1\n367,-1,848.3,475.3,83.3,229.3,1\n367,-1,963.7,920.8,77.8,160.2,0.994\n367,-1,927.6,1.8,59.2,156.1,0.983\n370,-1,1221.8,31.6,61.4,117.4,1\n370,-1,686.2,206.8,79.9,112.5,1\n370,-1,1064.7,437,65.7,198.1,1\n370,-1,442.3,309.6,72.5,219.4,1\n370,-1,1629.6,11.7,57.2,159.5,1\n370,-1,443.8,80.4,68.7,196.9,1\n370,-1,1020.6,55.3,54.8,165.6,1\n370,-1,1761.9,97.2,57.8,159.6,1\n370,-1,511.5,89.4,48.2,166.3,1\n370,-1,109,352.3,52.2,187.4,1\n370,-1,361.2,110.3,54.1,174.9,1\n370,-1,286.6,131.7,53.2,168.4,1\n370,-1,210.9,141.1,60.6,160.6,1\n370,-1,1431.7,3.6,52.6,98.5,1\n370,-1,542.2,571.3,101,244.9,1\n370,-1,356.7,518.3,87.5,246.5,1\n370,-1,831.6,1,55,110.9,1\n370,-1,953.4,43.6,63.5,174.7,1\n370,-1,796.5,151,59.1,171.5,1\n370,-1,1720.7,455.8,77.9,214,1\n370,-1,1806.4,455.1,64.1,208.5,1\n370,-1,912,494,73.6,206.5,1\n370,-1,381.1,2.4,46.4,90.4,1\n370,-1,212.6,311,54,180.8,1\n370,-1,1581.9,629,83.4,245.9,1\n370,-1,464.7,541.8,67.2,233.3,1\n370,-1,847.5,480.6,85.5,229,1\n370,-1,1821.6,72.7,61.8,158.2,1\n370,-1,758.8,95.9,45.2,144.1,1\n370,-1,966.5,918.7,80.1,162.3,0.996\n370,-1,927,5,57.8,146.8,0.655\n379,-1,1222.1,31.8,60.6,118.6,1\n379,-1,1094.4,451.4,64.5,202,1\n379,-1,685.8,206.5,79.7,113.5,1\n379,-1,1634,16.6,65.3,166.8,1\n379,-1,358,101.9,56.2,184.5,1\n379,-1,827.3,1,55.1,113.4,1\n379,-1,451.1,300.8,71.5,210.4,1\n379,-1,109.3,349.8,52,189.7,1\n379,-1,952.9,37.2,61.4,172.8,1\n379,-1,794.2,149.8,62.1,173.2,1\n379,-1,284.4,127.6,53.5,169.6,1\n379,-1,342.3,531.7,83.7,249.1,1\n379,-1,445.9,74.3,69.6,197.5,1\n379,-1,1719.1,455.2,77.8,214.3,1\n379,-1,453.2,554.9,69.6,235.9,1\n379,-1,217,138.2,60.2,159.4,1\n379,-1,208.8,303.3,55.2,182.6,1\n379,-1,1016.5,50.8,54.1,163.2,1\n379,-1,1795.5,447.4,68.1,202.1,1\n379,-1,1599.8,634.8,76.6,246.1,1\n379,-1,504.8,83.5,53.1,170.5,1\n379,-1,1434.9,1,54.7,89.4,1\n379,-1,850.3,493.3,87.5,234.5,1\n379,-1,589.1,561.1,89.9,254.2,0.999\n379,-1,1772.4,103.5,55.2,156.5,0.999\n379,-1,757.3,99.8,49.3,139,0.999\n379,-1,382.4,1,47.2,93.8,0.999\n379,-1,974,910.1,85.8,170.9,0.997\n379,-1,906.5,505.6,75.4,208.3,0.997\n379,-1,1796.2,70.2,72.7,167.9,0.991\n386,-1,1222.3,31.4,61.3,118.5,1\n386,-1,686.1,206.4,79.6,113.5,1\n386,-1,370.8,1,61.1,101.7,1\n386,-1,1635.9,26,75.1,172.4,1\n386,-1,358.3,105.9,55.8,180.5,1\n386,-1,1111.7,458.2,72.2,210.4,1\n386,-1,445.4,287.5,81.2,211,1\n386,-1,1773.7,104.2,66.7,162.1,1\n386,-1,827.6,1,55.3,116.4,1\n386,-1,949.2,26,64.6,179.5,1\n386,-1,108.2,350.6,53.5,189.4,1\n386,-1,1600.1,634.9,79.9,244.3,1\n386,-1,330.6,549.2,88.7,238,1\n386,-1,444.7,568.9,70.9,236.2,1\n386,-1,281.8,126.7,55.8,168,1\n386,-1,795.6,150,59.3,173.9,1\n386,-1,219.4,140.3,59.1,157.8,1\n386,-1,208.9,294.4,54.3,181.2,1\n386,-1,1015.2,44.6,54,165.5,1\n386,-1,1719.5,455.5,78.6,213.7,1\n386,-1,1436.7,2.2,51.6,85,1\n386,-1,451.4,70.5,71.9,197.9,1\n386,-1,849.1,497.5,86.5,230.1,1\n386,-1,912.9,515.6,79.3,209,1\n386,-1,1783.7,435.3,69.9,206.3,0.999\n386,-1,755.8,107.3,50.5,133.1,0.999\n386,-1,977,906.1,88.2,174.9,0.996\n386,-1,503,79.3,50.7,172.9,0.994\n388,-1,1222.3,31,61.1,118.5,1\n388,-1,686.1,206.3,79.7,113.4,1\n388,-1,1636.6,27.2,75,174.9,1\n388,-1,358,108,55.4,177.2,1\n388,-1,1118,464.4,72.2,203.1,1\n388,-1,445.1,288.4,81.5,208.8,1\n388,-1,367.9,1,63.3,103.8,1\n388,-1,1773.1,104.4,70,166,1\n388,-1,827.8,1,55.8,118.2,1\n388,-1,441.3,570.1,71.2,234.9,1\n388,-1,283.2,128.2,54.1,165.5,1\n388,-1,108.2,349.1,53.7,191.2,1\n388,-1,950.2,25.1,63.3,176.3,1\n388,-1,1596.9,629.4,83.2,249,1\n388,-1,219.2,140,59.1,156.3,1\n388,-1,208.3,290.9,53.7,183.5,1\n388,-1,326.3,546.8,93.4,250.5,1\n388,-1,452.8,71.5,70.6,196.4,1\n388,-1,796.1,150.8,59.2,172.5,1\n388,-1,1013.6,43.4,55.1,164,1\n388,-1,1718.9,453.9,78.9,216.1,1\n388,-1,917.5,523.2,76.3,208.7,1\n388,-1,849,506.3,86.4,228,1\n388,-1,1778,434.4,71.5,209.4,0.999\n388,-1,1438.3,3,52.2,84.2,0.999\n388,-1,978.3,905.2,88.9,175.8,0.995\n388,-1,757.5,106.4,49.1,136,0.991\n388,-1,511.6,83.8,41.9,167.9,0.942\n394,-1,1222.3,30.7,61.1,118.9,1\n394,-1,686.5,206.7,79.2,112.7,1\n394,-1,1639.1,32.5,67.3,173.5,1\n394,-1,1774,114.8,67.1,163.9,1\n394,-1,1141.1,474.7,73.8,203.6,1\n394,-1,358.3,106.9,55.4,178.4,1\n394,-1,448.7,279.3,80.9,209.2,1\n394,-1,947.9,26.1,65.7,175.1,1\n394,-1,364.5,2.8,62.9,100.4,1\n394,-1,794.9,151.4,60.2,171.6,1\n394,-1,827.1,1.8,56.4,119.2,1\n394,-1,219.1,142.6,62.8,155.3,1\n394,-1,319.4,558.9,92.6,251.2,1\n394,-1,282.1,127.6,56.4,167,1\n394,-1,206.5,286.2,54.3,184.4,1\n394,-1,433.3,581.3,75.2,235.1,1\n394,-1,1719.4,454.3,79.1,216.7,1\n394,-1,108.8,348.7,52.7,192.2,1\n394,-1,1010.7,41.1,56,161.7,1\n394,-1,1593.6,623.2,89.3,252.3,1\n394,-1,921,522.9,78.7,221.3,1\n394,-1,461.7,71.4,70.4,190.7,1\n394,-1,848.9,512,92.6,233.7,1\n394,-1,545.7,65.5,54.8,170.5,1\n394,-1,711.3,1.6,51.5,137.7,0.999\n394,-1,1769.6,428.7,70.6,210.5,0.998\n394,-1,429.9,81.3,47.1,173,0.994\n394,-1,980.4,905.3,87.7,175.7,0.989\n394,-1,712.3,101.9,54.2,160.3,0.98\n394,-1,759.9,106.5,38,138.2,0.107\n394,-1,923.6,10.2,48.8,115.1,0.104\n397,-1,1222.1,30.2,61.6,118.5,1\n397,-1,686,206.4,79.9,113.4,1\n397,-1,1640,41,60.8,168.4,1\n397,-1,452.5,271.8,77.4,207.9,1\n397,-1,358.2,105.7,55.7,180.3,1\n397,-1,1772.1,115.2,68,164.6,1\n397,-1,947.5,24.9,64.5,172.2,1\n397,-1,314.1,562.7,92.7,249.2,1\n397,-1,364.4,1.5,63.9,102.4,1\n397,-1,1154.2,473.6,69.3,198.6,1\n397,-1,219.3,141.6,62.9,155.7,1\n397,-1,795.5,152.2,58.5,168.5,1\n397,-1,828.1,1.1,56.1,120.9,1\n397,-1,283.3,127.7,56.1,167.5,1\n397,-1,1717.5,459.9,80.8,208.3,1\n397,-1,108.8,350.2,52.4,189.4,1\n397,-1,432.8,588.5,69.5,238.5,1\n397,-1,1592.5,621.1,92.8,254.3,1\n397,-1,464.3,73.3,69.2,186.9,1\n397,-1,205,283.1,55.1,182.1,1\n397,-1,1009.1,41.1,55.8,159,1\n397,-1,548.9,67,56.1,172.6,1\n397,-1,920.6,528.7,80.3,216,1\n397,-1,852.2,518.5,95.2,231.5,1\n397,-1,713.2,1,52.2,139.6,1\n397,-1,428.8,84.4,48.8,171.9,0.999\n397,-1,711.4,100.5,59,164.2,0.993\n397,-1,981.3,906.2,86.7,174.8,0.984\n397,-1,1764.1,429.6,66.5,201.8,0.609\n401,-1,1222.1,30.7,61.4,118.1,1\n401,-1,686,206.1,80,114.1,1\n401,-1,1643.6,46.6,62.6,169.9,1\n401,-1,363.1,1,66,108.5,1\n401,-1,357.6,106.3,56.3,179.1,1\n401,-1,945.8,21.6,63.4,171.7,1\n401,-1,455.8,266.9,77.7,209.3,1\n401,-1,1772,116.1,64.3,166,1\n401,-1,218.4,140.9,64.9,157,1\n401,-1,550.6,67.7,58.5,172.8,1\n401,-1,1719.8,459.8,80.5,207.3,1\n401,-1,308.8,567,87,247.5,1\n401,-1,828.4,1.3,55.7,124.4,1\n401,-1,284.5,129.7,54.7,166,1\n401,-1,796,153.4,58.9,169.6,1\n401,-1,427.5,594.7,68.8,236.8,1\n401,-1,1169.1,477.4,66.8,203.8,1\n401,-1,202.9,276.2,55.2,180.1,1\n401,-1,108.3,348.1,53.4,192.2,1\n401,-1,1006.3,38.9,56.6,160.8,1\n401,-1,467.5,71.3,67,188.7,1\n401,-1,1592.3,621.2,95.7,250.8,1\n401,-1,853.6,519.4,97.2,235.7,1\n401,-1,426.7,88.1,50.9,174.6,1\n401,-1,925.3,533.8,80.6,215.4,1\n401,-1,716.5,1,51.6,136.5,1\n401,-1,710.1,89.9,62.2,173.3,1\n401,-1,980.5,909.9,86.8,171.1,0.979\n401,-1,429.2,6.2,22.7,89.4,0.207\n406,-1,1221.7,29.5,61.5,118.9,1\n406,-1,686.7,205.2,79.1,115.6,1\n406,-1,1648,50.5,65.3,172.7,1\n406,-1,357.9,104.5,54.6,180.5,1\n406,-1,458.7,266.8,75.1,205.8,1\n406,-1,1770.8,118.6,64.4,174.1,1\n406,-1,109.7,345.7,52.9,194.6,1\n406,-1,946.2,17.6,62.1,173,1\n406,-1,795.6,152.8,58.6,169.2,1\n406,-1,550.4,69.7,59.7,170.3,1\n406,-1,417.2,602.1,72.7,233.9,1\n406,-1,1719.6,457,80.8,209.3,1\n406,-1,361.8,1,64.9,116.3,1\n406,-1,1589.2,618.3,97.6,247.8,1\n406,-1,284.1,129.3,56,166.2,1\n406,-1,829.8,1,56.7,128,1\n406,-1,221,142.5,63.5,154.5,1\n406,-1,302.1,577.2,84.9,253.3,1\n406,-1,1004.6,32.3,56.6,160.8,1\n406,-1,205.4,269.9,54.3,183.4,1\n406,-1,855.2,525.5,100.7,234.4,1\n406,-1,466.7,70.3,64.1,187.9,1\n406,-1,425.3,90.1,50.6,173.6,1\n406,-1,1194,486.3,59.8,206.2,1\n406,-1,717.6,1,51.5,134.3,1\n406,-1,928.7,543.2,82.4,221.4,1\n406,-1,685.2,561,93.9,232.4,1\n406,-1,710.2,91.4,63.8,169.3,0.999\n406,-1,426.7,1,43.6,109.8,0.997\n406,-1,977.6,919,86.8,162,0.984\n420,-1,1221.7,29.5,62.7,118.9,1\n420,-1,686.4,205.2,79.7,115.2,1\n420,-1,1664.7,68.9,73.8,179.2,1\n420,-1,945.3,14.1,58.6,166.9,1\n420,-1,359.2,110.8,54,175.4,1\n420,-1,1719.5,455.4,78.6,210.7,1\n420,-1,452.7,247.6,79.5,200.5,1\n420,-1,110.5,349,52.4,188.6,1\n420,-1,549.1,72.7,55.7,165,1\n420,-1,837.3,1,51.2,131.7,1\n420,-1,1007.7,27,54.9,161.7,1\n420,-1,1766.9,135.4,55.2,163.7,1\n420,-1,1240.5,507.5,86.2,202.4,1\n420,-1,1582.2,616.9,97.2,242.9,1\n420,-1,286.4,128.9,54.8,165.7,1\n420,-1,393.7,625.8,74.7,237.5,1\n420,-1,287.6,600.5,93.4,252.3,1\n420,-1,214.1,257.7,53.5,181,1\n420,-1,860.9,543,103.9,245,1\n420,-1,798.2,149.3,55.3,173.3,1\n420,-1,220.1,141.6,72,159,1\n420,-1,724.4,559.2,79.8,242.9,1\n420,-1,358.4,1,67.5,119.2,1\n420,-1,426.3,107.4,53.3,166.6,1\n420,-1,1816.3,70.9,76.2,182,1\n420,-1,717.9,1,50.4,125.3,1\n420,-1,460.2,62.2,66.2,195.5,1\n420,-1,939,560.2,79.8,221.9,1\n420,-1,424.3,1,44.5,121.8,0.999\n420,-1,712.4,89.5,63.2,176.6,0.999\n420,-1,752.3,87.6,46.5,161.1,0.589\n420,-1,920.5,9.9,37.4,94.1,0.124\n420,-1,986.3,930.1,79.4,150.9,0.06\n438,-1,1221.7,29.6,62.4,119.3,1\n438,-1,937.9,3,61.8,164,1\n438,-1,449.5,226.1,76.9,199.6,1\n438,-1,687.4,206.4,77.8,113.1,1\n438,-1,359.6,109.3,53,177,1\n438,-1,110.6,349.7,55.4,190.7,1\n438,-1,1007.6,17.9,55.1,156.6,1\n438,-1,1338,531.2,69.1,196.9,1\n438,-1,848.2,1,54.1,135.8,1\n438,-1,231.9,240,54.3,180.5,1\n438,-1,1717.3,457.4,81,210.5,1\n438,-1,272.4,633.2,92.5,254.8,1\n438,-1,285.7,131.2,54.5,166.7,1\n438,-1,762.9,568.3,80.8,250.8,1\n438,-1,368.9,657,75.4,243.2,1\n438,-1,797.8,150.4,53.7,174.1,1\n438,-1,1750.8,146.9,66.7,169.1,1\n438,-1,877.6,573.1,111.6,242.7,1\n438,-1,1846.8,411.4,74.2,191.5,1\n438,-1,1565,615,80.4,241.1,1\n438,-1,1690.4,89,69.3,172.3,1\n438,-1,534.2,69.8,55.2,170.7,1\n438,-1,363.1,1.1,61,131.2,1\n438,-1,433.2,116.3,55.5,168,1\n438,-1,423,1,43.2,131.1,1\n438,-1,712.2,85.9,59.7,180.3,0.999\n438,-1,959.3,592.6,80.2,221.5,0.999\n438,-1,220.6,138.8,61.5,150.2,0.999\n438,-1,725.2,1.1,49.3,105.9,0.999\n438,-1,758.9,84.8,42.4,157.3,0.982\n438,-1,1004.1,927.8,86.2,153.2,0.979\n438,-1,1690.3,377.7,69.4,202.2,0.805\n448,-1,1221.6,30.9,62.4,118.1,1\n448,-1,937.4,1,58.2,156.5,1\n448,-1,448.1,211.7,71.8,198.2,1\n448,-1,687.2,206.1,78.1,113.5,1\n448,-1,1006.5,12,54.7,158.6,1\n448,-1,359.6,108.5,53.4,177.3,1\n448,-1,1718,454.1,81.9,212.8,1\n448,-1,1373.1,545.3,99.3,198.7,1\n448,-1,113,352.7,53.6,185.7,1\n448,-1,287.1,126.4,53.6,169.2,1\n448,-1,861.5,3.5,52.7,137,1\n448,-1,1747.5,158.5,61.5,164.6,1\n448,-1,1555.9,612.2,75.6,243.2,1\n448,-1,251.7,223,49.9,184.8,1\n448,-1,800.4,151.6,49.3,172.6,1\n448,-1,1669.4,362,69.3,194,1\n448,-1,257.5,651.6,89.1,251.6,1\n448,-1,884.6,590.3,115.1,246.2,1\n448,-1,1839.4,391.8,81.6,209.4,1\n448,-1,352.9,677.9,73.4,248.8,1\n448,-1,526.8,75.1,54.5,169.9,1\n448,-1,221.9,138.6,55.7,158.5,1\n448,-1,731.7,1,47.8,94.7,1\n448,-1,785.8,573.5,80.2,249.9,1\n448,-1,427.5,122.7,60.1,166.5,1\n448,-1,422.8,1,44,133.3,1\n448,-1,756.6,88.9,46.8,150.9,0.999\n448,-1,358.6,4.5,64.6,129.7,0.998\n448,-1,1704.4,106,69.2,175.1,0.998\n448,-1,708.2,87.8,59.8,174.6,0.996\n448,-1,964.8,604.2,80.6,220.6,0.993\n448,-1,1018.3,919.3,86.8,161.7,0.99\n448,-1,1509.4,1,57,100.6,0.956\n448,-1,454.2,38.5,61.9,197.7,0.319\n454,-1,1221.7,30.7,61.6,118.5,1\n454,-1,936.6,1,58.2,155.5,1\n454,-1,446.1,209.3,71.9,194.7,1\n454,-1,686.7,206.4,79.5,113.5,1\n454,-1,112.3,348.3,56.2,191.5,1\n454,-1,359.2,106.9,54.7,178.7,1\n454,-1,1008.4,11.3,53.3,155.7,1\n454,-1,1407.1,549,93.3,218.3,1\n454,-1,1710,455.5,90,211.3,1\n454,-1,1742.7,158.3,58.9,166,1\n454,-1,260.1,224.9,52.9,173.2,1\n454,-1,1552.1,612,75.1,243,1\n454,-1,286.5,127.2,55.2,169.7,1\n454,-1,865.9,1.8,54.4,138.7,1\n454,-1,523.6,76,56.1,171.1,1\n454,-1,1831.7,389.4,86.1,207.4,1\n454,-1,346.3,682.2,71.7,251.4,1\n454,-1,1662.7,358.6,65.6,197.3,1\n454,-1,801.3,153.1,46.9,170.1,1\n454,-1,248.6,655.7,97.1,262.4,1\n454,-1,889,599.5,114.3,244,1\n454,-1,796.4,577,86.1,249.4,1\n454,-1,418.7,1,45.4,148.2,1\n454,-1,753.9,90.4,51.8,151.5,1\n454,-1,220.5,138,57.8,161.5,1\n454,-1,974.1,614,82.6,228.6,0.999\n454,-1,1508.3,1,55.7,106.1,0.999\n454,-1,1024.3,920.3,85.2,160.7,0.996\n454,-1,428.2,134,52.2,151.3,0.995\n454,-1,443.8,36.1,73.4,204.3,0.988\n454,-1,714,93.1,50.8,166,0.973\n454,-1,359.4,6.9,62.6,139.5,0.93\n454,-1,1712.3,99.8,62,190.7,0.223\n466,-1,1221.9,30.8,62.2,117.8,1\n466,-1,686.8,206,79.3,113.5,1\n466,-1,934.9,1,58.2,148,1\n466,-1,1006.6,1.4,53.5,154.8,1\n466,-1,452.2,192.6,68.1,195.5,1\n466,-1,275,207.9,53.2,179.6,1\n466,-1,1729.1,169.7,64.4,162.2,1\n466,-1,239.1,682.1,92.9,254.8,1\n466,-1,1807.9,367,84.1,215.9,1\n466,-1,359.1,110.3,55.3,177.6,1\n466,-1,1703.9,457.4,96,210.2,1\n466,-1,335.4,715.1,72.1,247.3,1\n466,-1,803.4,147.7,47.7,174.1,1\n466,-1,117.6,345.3,58,188.1,1\n466,-1,1507.1,1.7,57.8,110.7,1\n466,-1,1650.3,347.8,61.3,198.8,1\n466,-1,876.6,1,52.1,134.4,1\n466,-1,1672.9,52.9,63.8,173.8,1\n466,-1,218.9,138.3,61.8,158.2,1\n466,-1,517,79.6,60.8,174,1\n466,-1,808.8,585.1,92.8,248.6,1\n466,-1,1542.6,608.2,74.2,242.9,1\n466,-1,754.8,95.3,53.1,142.8,1\n466,-1,896.1,618.6,117,247.1,1\n466,-1,1480.9,563,81.4,207,1\n466,-1,981.4,635.5,89.9,221.8,1\n466,-1,446,38.3,74.7,187,0.999\n466,-1,414.6,4.2,44.7,156,0.999\n466,-1,712.5,94,52.5,164.4,0.997\n466,-1,286.6,127.6,52.4,168.4,0.994\n466,-1,1026.8,922.3,84.5,158.7,0.993\n466,-1,431.1,144.1,46,154.6,0.922\n466,-1,1729.1,69.1,49.2,159.6,0.651\n474,-1,1222,30.4,62,118.5,1\n474,-1,687.3,206,78.8,113.8,1\n474,-1,1002.6,1,56.4,151.7,1\n474,-1,286.1,206.8,52.7,168.3,1\n474,-1,453.3,179.7,70.3,195.2,1\n474,-1,934.3,1,57.7,145,1\n474,-1,359.9,112.2,54.4,173.6,1\n474,-1,1789.6,363.3,87.8,212.5,1\n474,-1,877.8,1.8,51,133.2,1\n474,-1,1696.9,457.6,103.1,211.9,1\n474,-1,1504.9,1.2,58.5,118.2,1\n474,-1,1535.9,600.7,81.1,242.5,1\n474,-1,803.1,143.6,48.4,177.2,1\n474,-1,1641.5,343.4,62.3,196.6,1\n474,-1,1724.1,175.1,66.8,165.7,1\n474,-1,808.7,589,95.8,259,1\n474,-1,908.2,625.3,113.1,246.2,1\n474,-1,123.5,343.2,58.7,188.7,1\n474,-1,218.7,136.8,63.4,161.7,1\n474,-1,231,693.1,92.7,268,1\n474,-1,325.8,727.2,74.8,252.7,1\n474,-1,514.4,86.2,60.2,171.1,1\n474,-1,445.3,32.8,72.8,180.7,1\n474,-1,1771.7,146.1,86,178.2,1\n474,-1,1711,53.9,52,172.4,1\n474,-1,1660.1,43.3,58,177.8,1\n474,-1,752.9,97.3,54.1,140,0.999\n474,-1,713.3,93.8,54.6,163.1,0.999\n474,-1,412.8,4.9,45.7,153.3,0.997\n474,-1,989.9,650.4,77.6,229.5,0.979\n474,-1,1026.8,925.2,80,155.8,0.973\n474,-1,430.5,150,51.3,172.8,0.529\n478,-1,1222.2,30.7,61.8,118.4,1\n478,-1,686.5,206.7,79.9,113.2,1\n478,-1,999.6,1,57.9,148,1\n478,-1,292.3,199.3,51.5,173.2,1\n478,-1,933.7,1,57,141.7,1\n478,-1,359.8,107.1,56.8,179.6,1\n478,-1,1685.5,455,114.6,215.4,1\n478,-1,805.3,588,91.4,261.1,1\n478,-1,876.5,1,53.6,133.2,1\n478,-1,451.5,172.6,73,193.4,1\n478,-1,1503.5,1,58.9,121.6,1\n478,-1,1785.9,361.2,87.5,213.6,1\n478,-1,1725.6,175.9,66.7,167.1,1\n478,-1,1538.4,595.4,77.5,245.9,1\n478,-1,218.7,136,62.3,161.8,1\n478,-1,804.3,144.5,46.6,177.5,1\n478,-1,225.4,702.8,92.1,265.9,1\n478,-1,319.7,733.9,76.3,255.8,1\n478,-1,1785.3,151.2,83,182.1,1\n478,-1,913.4,634.3,117.3,252.9,1\n478,-1,1637.3,341,61.7,195.2,1\n478,-1,126.6,345.2,58.1,187.3,1\n478,-1,512.8,85.5,61.5,172.2,1\n478,-1,447.4,28.8,72.1,181.8,1\n478,-1,1703.8,52,51.3,166.7,1\n478,-1,1652.6,41.2,61.3,178.2,1\n478,-1,412,5.6,47.3,154.5,0.999\n478,-1,713.7,93.6,55.1,163.3,0.999\n478,-1,753,98.8,53.1,141.3,0.999\n478,-1,1022.4,927.7,80,153.3,0.68\n478,-1,992.7,660.8,72.7,216.2,0.575\n478,-1,425.4,154,54.7,184.3,0.484\n479,-1,1222,30.9,62.1,117.5,1\n479,-1,686.5,206.3,79.9,112.6,1\n479,-1,1000.1,1,57.2,145.8,1\n479,-1,1683.1,455.1,117.1,215.4,1\n479,-1,292.4,196.8,52.5,175.4,1\n479,-1,933.5,1,56.6,140.3,1\n479,-1,876.8,1,53.3,133.5,1\n479,-1,1503,1,59.1,120.9,1\n479,-1,451.2,171.7,74.2,193.3,1\n479,-1,1786.8,359.7,83.7,215.7,1\n479,-1,360.4,109.8,55.9,176.6,1\n479,-1,1726.4,175.7,64.9,168.5,1\n479,-1,1538.4,595.3,76.8,247.9,1\n479,-1,806.5,591.4,89.8,256.5,1\n479,-1,1787.2,149.2,80.9,183.7,1\n479,-1,804.9,144,47,177.3,1\n479,-1,127.9,345.2,57.2,185.9,1\n479,-1,218.7,135.8,62,161.3,1\n479,-1,912.6,635.9,121,253.6,1\n479,-1,1636.4,334.2,64,201.7,1\n479,-1,317.6,737.5,75.2,257.4,1\n479,-1,224,703.7,90.8,265.6,1\n479,-1,1703.3,51.2,51.4,168.1,1\n479,-1,447.3,27.2,72.2,183.4,1\n479,-1,511.6,85.9,61.6,173.1,1\n479,-1,1652.7,42.6,58.4,175.9,0.999\n479,-1,753.4,99.4,53.3,141.8,0.999\n479,-1,713.6,93.6,54.6,164.3,0.999\n479,-1,412.4,6.7,46.9,155,0.999\n479,-1,423,152.1,56.6,184.4,0.804\n479,-1,993.3,661.2,75,216.2,0.431\n479,-1,1022.3,928.5,79.7,152.5,0.313\n482,-1,1221.9,30.7,61.8,117.3,1\n482,-1,686.9,205.9,79.6,114.3,1\n482,-1,999.2,1,57.5,145.4,1\n482,-1,1793.1,150.6,69.6,187.9,1\n482,-1,1501.7,1,58.5,121.4,1\n482,-1,297,194.5,51.1,174.4,1\n482,-1,932.3,1,56.6,137.5,1\n482,-1,1684.5,457.3,116.9,211.4,1\n482,-1,452.9,169.9,71.8,192.8,1\n482,-1,876.9,1,53.7,132.7,1\n482,-1,132,341.2,57.3,185.7,1\n482,-1,1782.6,360,80.3,208.7,1\n482,-1,313.6,737.2,74.9,264.3,1\n482,-1,1729.5,173.1,63.6,172,1\n482,-1,804.3,594.9,90.1,255.5,1\n482,-1,361,110.5,53.9,175.1,1\n482,-1,803.6,142.1,48.3,179.3,1\n482,-1,1634.6,331.2,63.2,198.6,1\n482,-1,219.1,137.9,60.9,160.4,1\n482,-1,913.8,642.5,116.9,258.8,1\n482,-1,219.5,707.8,94.9,266.9,1\n482,-1,1702.4,50.4,49.2,164.5,1\n482,-1,1538.2,597,80.8,245,1\n482,-1,1648,41.4,56.7,175.4,1\n482,-1,415.9,153.4,58.6,176.2,1\n482,-1,447,25.3,74.5,185.6,1\n482,-1,506.3,88.3,61.8,172.4,1\n482,-1,411.4,5.7,48.8,157,0.999\n482,-1,751.9,98.1,53.9,142.2,0.999\n482,-1,713,94,55.4,163.6,0.998\n482,-1,992.9,664.7,80.6,224.2,0.905\n482,-1,1019.1,932.4,80.5,148.6,0.224\n483,-1,1221.9,30.6,62,118.4,1\n483,-1,687.1,205.8,79,114.4,1\n483,-1,999.4,1,56.7,145,1\n483,-1,297.9,196.7,51.4,171,1\n483,-1,1501,1,58.6,121.6,1\n483,-1,932.4,1,56.3,137.3,1\n483,-1,1682.4,458.8,119.1,208.1,1\n483,-1,1794.1,156.5,69.8,184.4,1\n483,-1,876.9,1,53.6,132.6,1\n483,-1,132.2,340.4,58.5,188.1,1\n483,-1,453,169.6,72.2,193.2,1\n483,-1,1730.4,174.6,63.6,172.4,1\n483,-1,1781.5,357,79.3,211.5,1\n483,-1,219.2,713.4,92.7,260,1\n483,-1,803.6,595.8,90.7,255.2,1\n483,-1,802.2,142.2,50.2,179,1\n483,-1,361.3,109.2,53.5,175.5,1\n483,-1,1635.7,330.3,61.3,196.6,1\n483,-1,1702.1,49.4,50,168.3,1\n483,-1,311.2,740,77.9,260.4,1\n483,-1,914,644,116.8,259.3,1\n483,-1,219.8,138.1,61.2,161.3,1\n483,-1,1536.8,596.2,82.7,245.9,1\n483,-1,446.8,24.7,73.7,183.6,1\n483,-1,415.6,154.3,58.4,175.7,1\n483,-1,1646.5,41.6,56.2,174.1,1\n483,-1,506.1,88.3,62.2,172.2,1\n483,-1,751.3,97.9,54.7,140.3,0.999\n483,-1,411.6,6.4,47.9,156.2,0.999\n483,-1,713.6,96.8,55,162,0.997\n483,-1,998.8,667.3,72.7,222.9,0.899\n483,-1,1019.7,932.7,78.9,148.3,0.248\n484,-1,1221.8,31.1,61.8,117.6,1\n484,-1,686.8,205.7,80,114,1\n484,-1,998.8,1,57.3,144.5,1\n484,-1,1500.6,1,58.6,122.3,1\n484,-1,298.2,197.1,52.1,169.8,1\n484,-1,1682.6,457.9,117.9,210.2,1\n484,-1,932.7,1,56.1,136,1\n484,-1,876.6,1,54,132.1,1\n484,-1,1796.4,160.8,69.2,180.9,1\n484,-1,455.4,167.2,70.1,195,1\n484,-1,1730.4,176.2,65.2,171,1\n484,-1,1783.2,354.3,74.1,210.7,1\n484,-1,218.7,715.5,94.2,257.3,1\n484,-1,805.6,597.9,86.2,253.9,1\n484,-1,133.3,340.5,58.4,188.2,1\n484,-1,802.3,143.1,50,177.3,1\n484,-1,1701.4,47.4,49.5,169.7,1\n484,-1,360.1,109.7,54.2,175.3,1\n484,-1,308.2,741.8,79.4,257.8,1\n484,-1,1540.1,595.9,81.3,246.8,1\n484,-1,914,650.5,114.6,254.4,1\n484,-1,219.7,139,61.6,157.5,1\n484,-1,1635.4,333.9,59.4,189.7,1\n484,-1,415.5,154.4,57.1,174,1\n484,-1,1644.3,40.1,57.4,176.5,1\n484,-1,447.5,23.8,74.6,183,1\n484,-1,504,87.9,63.2,172.4,1\n484,-1,410.5,6.1,48.8,157.7,0.999\n484,-1,712.6,94.7,57.8,164.9,0.999\n484,-1,752.2,98,53.3,142.3,0.999\n484,-1,999.3,666.8,73.8,230.7,0.881\n484,-1,1017.5,933.6,83.1,147.4,0.273\n500,-1,1221.2,30.1,62.7,119.1,1\n500,-1,686,206,81.1,115,1\n500,-1,998.8,1,54.6,130.9,1\n500,-1,1496,1.9,58.6,131.6,1\n500,-1,1658.2,605.2,65.7,203.5,1\n500,-1,793,142.3,62,178.7,1\n500,-1,1826.7,181.5,80.3,190.5,1\n500,-1,467.1,156,63.8,189.8,1\n500,-1,931.7,1,55.5,127.5,1\n500,-1,1682.4,36.9,56.3,167.1,1\n500,-1,209.5,741.9,96.2,264.4,1\n500,-1,142.7,333.8,64.8,191.3,1\n500,-1,1732.4,192.6,71.3,175.4,1\n500,-1,879.1,1.6,51.4,125.1,1\n500,-1,1547.8,597.3,82,241.8,1\n500,-1,405.1,167.9,60.1,184.8,1\n500,-1,820.3,608.8,79.5,256.2,1\n500,-1,318.8,193.8,49.6,161.2,1\n500,-1,925.1,678.1,120.3,254.3,1\n500,-1,217.5,134.6,64.4,163.8,1\n500,-1,301,774.4,70.3,259.9,1\n500,-1,1623.4,317,60.5,193.3,1\n500,-1,1725.9,456.5,74.2,208.2,1\n500,-1,1623.8,28.5,57.2,173.5,1\n500,-1,508.8,96.5,62.1,177.3,1\n500,-1,715.8,92.7,60.6,167.5,1\n500,-1,449.1,14.2,75.5,181.4,1\n500,-1,285.5,126.1,53.1,169.1,1\n500,-1,359.8,110.7,56.6,180.1,1\n500,-1,1742.2,335.9,76,216.3,1\n500,-1,402.5,17.4,47.1,159,0.999\n500,-1,1014.3,695.9,84.5,228,0.997\n503,-1,1221.7,30.5,61.8,119.2,1\n503,-1,686.4,206,80.6,115,1\n503,-1,1495.8,2.1,58.7,134.6,1\n503,-1,999.3,1,53.8,128.9,1\n503,-1,790.3,143.1,62.2,177.9,1\n503,-1,1668.2,606.1,70.5,213.3,1\n503,-1,467.7,149.3,64,190.4,1\n503,-1,1681.4,31.4,56.5,168.6,1\n503,-1,145.8,332,66.3,191.5,1\n503,-1,403,170.1,62,184.3,1\n503,-1,931.1,1,56.4,126.1,1\n503,-1,295.2,777.5,75.2,255,1\n503,-1,879.8,1,53,125,1\n503,-1,821,607.3,78.9,256,1\n503,-1,1736.2,195.6,67.5,171.6,1\n503,-1,1830.4,185.1,83.6,196.7,1\n503,-1,320.6,187.5,50.2,162.9,1\n503,-1,1727.8,456.4,72.4,210.8,1\n503,-1,1549.2,598.7,78.3,238,1\n503,-1,929.5,685.5,117.9,253.1,1\n503,-1,217.5,134.4,64.1,163.8,1\n503,-1,1736,335.2,78.4,209.7,1\n503,-1,210,746.2,89.4,265.9,1\n503,-1,1618.8,24.7,58.4,176.3,1\n503,-1,1620.1,309.5,64.6,192.6,1\n503,-1,716.3,92.3,62.6,168.8,1\n503,-1,287.1,121.8,54.2,172.4,1\n503,-1,450.1,10,74.4,186.3,1\n503,-1,509.9,93.5,59.9,177.6,1\n503,-1,360.9,107.2,54.7,185.9,0.999\n503,-1,401.3,18.7,47.6,157.7,0.999\n503,-1,1020.2,701.7,82.2,232.2,0.996\n504,-1,1221.7,30.2,62.3,119.2,1\n504,-1,686.7,206.1,80,114.3,1\n504,-1,1495.1,1.1,59.5,134.4,1\n504,-1,999.1,1,54.2,129.5,1\n504,-1,1671.2,607.3,72.7,215.9,1\n504,-1,788.6,142.1,62.9,180.8,1\n504,-1,1680.7,29.1,57.1,169.6,1\n504,-1,147.9,332.1,65.9,191.3,1\n504,-1,322.5,183.9,50.1,163.7,1\n504,-1,467,146.7,65,191.6,1\n504,-1,932.1,1,55.8,124.3,1\n504,-1,880,1,52.3,125,1\n504,-1,402.6,171,60.6,184.1,1\n504,-1,824.1,609.3,75.3,251.6,1\n504,-1,1733.5,331.3,79.1,215.4,1\n504,-1,1832.4,186.1,82.9,197.4,1\n504,-1,294.8,780.8,75.6,252.5,1\n504,-1,930.3,686.9,118.1,252.4,1\n504,-1,1737.9,195.6,66.8,172.2,1\n504,-1,217.5,133.9,63,162.8,1\n504,-1,1618.3,23.8,57.3,176.2,1\n504,-1,1551.2,598.9,76.2,238,1\n504,-1,209,744.9,91,274.4,1\n504,-1,1730.5,456.1,70.6,210.3,1\n504,-1,450.2,10.1,74.1,184,1\n504,-1,1618.8,308.7,64.9,193,1\n504,-1,717.6,91.6,62.5,171.3,1\n504,-1,287.1,124,54.7,171.8,1\n504,-1,511,94.3,59.6,181,1\n504,-1,360.3,106,54.1,186.4,0.999\n504,-1,401.4,17.5,47.9,161,0.999\n504,-1,1020.5,703.9,79.7,234.2,0.993\n504,-1,1027,934.2,85.3,146.8,0.052\n507,-1,1221.6,30,62.3,119.1,1\n507,-1,685.9,206.4,81.1,114.8,1\n507,-1,1495.6,1,59.1,134.7,1\n507,-1,998.6,1,54.7,128.8,1\n507,-1,151.8,331.7,66,190.4,1\n507,-1,788.5,142.3,62.4,179.3,1\n507,-1,328.2,175.8,50.3,168.9,1\n507,-1,401.7,177.5,61.2,185.6,1\n507,-1,1678.8,25.8,56.4,169.2,1\n507,-1,882.3,1,52.2,124.4,1\n507,-1,932.6,1,55.7,121.8,1\n507,-1,1681,611.3,83.2,221.6,1\n507,-1,822.7,606.8,78.8,254.3,1\n507,-1,461.7,141.4,71.3,192.8,1\n507,-1,1725.3,328.5,88.4,206.3,1\n507,-1,1553.3,599.4,76.1,237.9,1\n507,-1,933.7,688.7,117.5,253.4,1\n507,-1,1616.1,304,63.4,194.5,1\n507,-1,1617.6,17.7,55.9,178.5,1\n507,-1,1837.5,190.4,78.1,195.9,1\n507,-1,290.4,786.6,79.4,261.3,1\n507,-1,217.4,133.9,63.1,162.7,1\n507,-1,1722.8,460.9,77.6,203.9,1\n507,-1,1742.2,194.9,63.6,178.2,1\n507,-1,206.7,752.3,92.1,281,1\n507,-1,512.7,94.3,59.5,179.1,1\n507,-1,719.3,95.7,64.6,164.5,1\n507,-1,449.3,6.9,74.3,180.3,1\n507,-1,288.9,125,54.8,170.7,1\n507,-1,359.6,104.9,53.1,184.8,0.999\n507,-1,399.5,19.8,46.7,162.8,0.996\n507,-1,1026.3,707.2,74.6,245.6,0.811\n507,-1,1033.7,934.6,81.1,146.4,0.087\n509,-1,1221.9,30,61.7,118.9,1\n509,-1,1494.1,1,59.6,132.3,1\n509,-1,686,206.9,81.3,114.9,1\n509,-1,997.5,1,55.1,126.9,1\n509,-1,153.5,329.5,67.3,190.8,1\n509,-1,331.6,174.8,51.1,168.1,1\n509,-1,401.9,182.1,59.6,182.7,1\n509,-1,1677,24.8,55.6,170.7,1\n509,-1,932.6,1,54.8,121.6,1\n509,-1,1719.1,459.7,81.4,208.1,1\n509,-1,1688,622.3,85.5,206.8,1\n509,-1,459,138.6,74.8,193.3,1\n509,-1,882.9,1.3,50.8,123.6,1\n509,-1,788.2,142.8,61.3,178.9,1\n509,-1,1556,599.6,74.6,235.5,1\n509,-1,936,690.1,122.7,253.8,1\n509,-1,1616.5,16.1,55.3,176.6,1\n509,-1,826,609,74.2,254.1,1\n509,-1,1717.5,327,92,200.9,1\n509,-1,1839.7,189.9,77.8,199.1,1\n509,-1,203.3,758.5,95,278,1\n509,-1,1615.2,304.2,63.2,194.1,1\n509,-1,216.5,136,63.7,160.7,1\n509,-1,289,790.4,76.8,262.2,1\n509,-1,288.6,122.1,53.9,172.4,1\n509,-1,514.5,92.2,54.8,173.1,1\n509,-1,723.1,95.5,68.2,162,1\n509,-1,1745.6,196.9,61.1,177.3,1\n509,-1,449.9,6.4,73.3,180.8,1\n509,-1,397.9,20,49.2,161.9,0.997\n509,-1,361.1,101.2,52.6,189.6,0.988\n509,-1,1031.2,716.7,71.4,235.9,0.148\n514,-1,1221.5,30.2,62,119.3,1\n514,-1,1492,1,60.6,136.6,1\n514,-1,686.4,207,80,113.3,1\n514,-1,996.7,1,54.9,123.6,1\n514,-1,158.8,327.9,66.3,188.9,1\n514,-1,395.5,184.5,62.7,188.1,1\n514,-1,1674.5,24.6,54,165.8,1\n514,-1,942.9,699.2,119.2,262.6,1\n514,-1,338.9,169.9,51.1,170.7,1\n514,-1,1709.8,626.7,82.5,213.7,1\n514,-1,1613.3,14.8,55.5,176.5,1\n514,-1,460.2,139.3,71.9,185.8,1\n514,-1,1607.9,301.2,62.7,200,1\n514,-1,1560.8,600.1,70.9,236.4,1\n514,-1,930,1.3,57.6,120.3,1\n514,-1,883.9,1,53.4,121.3,1\n514,-1,790.4,142.8,55.2,177.4,1\n514,-1,1711.9,325.8,92.7,198.4,1\n514,-1,287,125.4,54,174.4,1\n514,-1,200.7,770.8,91.9,272.4,1\n514,-1,1719.2,461.9,79.5,205,1\n514,-1,828.9,607.8,73,256.7,1\n514,-1,1847.1,204,73.7,191.7,1\n514,-1,217.7,135.4,62.9,161.3,1\n514,-1,280.3,802.5,80.5,260.4,1\n514,-1,730,98.5,66.9,160.6,1\n514,-1,450.9,5.8,74,181.4,1\n514,-1,515.7,94.2,55.5,177.3,1\n514,-1,1754.6,205.4,58.5,168.1,0.999\n514,-1,398.7,25.5,45.9,158.1,0.996\n514,-1,1043.6,931.5,75.7,149.5,0.055\n514,-1,571.5,73.2,39.6,148.4,0.055\n519,-1,1221.7,30.4,61.4,120.1,1\n519,-1,1490,1,59.1,140.8,1\n519,-1,686.4,206.8,79.8,114.6,1\n519,-1,994.2,1,55.6,121.9,1\n519,-1,162.2,325,66.5,191.1,1\n519,-1,391.8,185.6,61.8,187.3,1\n519,-1,1672.7,23.1,54.5,163.2,1\n519,-1,884.2,1.3,52.8,120.1,1\n519,-1,459.3,131.8,68.3,182.1,1\n519,-1,787.4,146.3,55.9,172.9,1\n519,-1,289,123.6,54.2,174.6,1\n519,-1,1720.7,460.7,79.2,203.7,1\n519,-1,827,607.5,72.3,256.3,1\n519,-1,1569,597.7,62.7,242.3,1\n519,-1,1741.7,628.4,69.1,218.1,1\n519,-1,1611.7,13.2,55.7,174.7,1\n519,-1,930.1,2.1,57.8,117.7,1\n519,-1,1603,297.4,62.6,201.3,1\n519,-1,1852.5,217.4,68.5,185.4,1\n519,-1,349.3,168.8,47,164.6,1\n519,-1,217.8,137.1,63.6,159.9,1\n519,-1,196.2,781.1,93.5,270.7,1\n519,-1,1707.7,317.1,90,205.7,1\n519,-1,736,91,66.9,169.8,1\n519,-1,945.6,709.4,125.9,268.2,1\n519,-1,1761.6,205.9,58.3,171.7,1\n519,-1,275,804.5,81.8,268.6,1\n519,-1,515.9,97.7,56.9,180.9,1\n519,-1,450.1,2.6,77.2,179.9,1\n519,-1,399.5,25.9,47.4,161.1,0.999\n519,-1,575.5,68.4,43.4,150.3,0.998\n519,-1,1046.9,932.4,71.9,148.6,0.19\n527,-1,1221.6,30.6,61.9,119.7,1\n527,-1,1486,1,59.3,142.2,1\n527,-1,687.3,206.5,77.5,114.3,1\n527,-1,1718.2,458.6,82.2,209.1,1\n527,-1,388.7,195,61.7,188.1,1\n527,-1,1671.6,16.8,52.7,160.9,1\n527,-1,994.5,1.4,55.3,116.4,1\n527,-1,166.4,319.9,66.4,193.4,1\n527,-1,288.4,123.5,53.4,174.2,1\n527,-1,783.1,146,54.6,174,1\n527,-1,465.9,119.6,63.3,187.5,1\n527,-1,929.3,1.4,56.2,112.1,1\n527,-1,882.9,1.8,52,114.5,1\n527,-1,1607.3,3.3,56.5,170.9,1\n527,-1,1764.5,212.9,68.2,174,1\n527,-1,217.7,134.4,62.4,161.4,1\n527,-1,1699.6,305.3,86.5,208.9,1\n527,-1,516.8,101,58.4,179.6,1\n527,-1,818.2,601,74.5,259,1\n527,-1,268.4,823.5,80.5,257.5,1\n527,-1,1774.3,650.8,67.2,221.6,1\n527,-1,956.9,723.8,120.8,249.2,1\n527,-1,449.8,1.6,72.8,169.5,1\n527,-1,1576.5,596.4,62.1,241.7,1\n527,-1,192.7,789.5,96,282.5,1\n527,-1,401.5,33.1,47.9,161.2,0.999\n527,-1,749.1,87.8,56.6,169,0.999\n527,-1,1594.7,287.7,60.9,200,0.999\n527,-1,1868.5,218.9,52.5,205.3,0.977\n527,-1,358.5,165.5,45.8,156.6,0.548\n527,-1,1048,745.8,79.1,247.3,0.123\n527,-1,1047.4,941.5,68.9,139.5,0.09\n531,-1,1221.5,30.7,62.2,120.2,1\n531,-1,1485.8,1,59.1,141.7,1\n531,-1,687.4,205.9,78,114.6,1\n531,-1,385.7,200.7,65.5,188.7,1\n531,-1,780.7,143.1,56.2,174.5,1\n531,-1,992.9,1.1,55.7,110.6,1\n531,-1,288.5,125.2,53.9,170.7,1\n531,-1,171.8,314.1,65.2,196.6,1\n531,-1,1718.9,456.7,80.5,210.3,1\n531,-1,1668.8,12,51.9,162.1,1\n531,-1,464.5,118,63.8,186.3,1\n531,-1,1700,303.7,74.6,199.4,1\n531,-1,1767,219.5,67.8,169.4,1\n531,-1,882.2,1.2,52.4,116.7,1\n531,-1,1604.8,2.4,57.1,169.5,1\n531,-1,1580,594.3,65.4,239.5,1\n531,-1,929.4,1,56.7,110.6,1\n531,-1,218.2,138.4,61.7,160.9,1\n531,-1,517.1,103.2,59.3,176.6,1\n531,-1,264.1,829,81.9,252,1\n531,-1,814,601,74.5,256.4,1\n531,-1,191.4,788.4,95.5,285.2,1\n531,-1,450.4,2,70.1,170.5,1\n531,-1,402.9,35.8,49.1,162.4,1\n531,-1,1787.2,657.5,69.1,213.4,1\n531,-1,961.1,733.5,121.9,259.5,1\n531,-1,1589.3,283.1,59.6,203.1,0.974\n531,-1,1877,224.8,44,209.9,0.884\n531,-1,1049.7,758.3,88.4,231.2,0.144\n533,-1,1221.4,30.3,62.4,119.7,1\n533,-1,1486.2,1,58.7,141.5,1\n533,-1,687,206,78.4,114.9,1\n533,-1,385,203.3,65.9,189,1\n533,-1,780.4,143.4,57.8,175.6,1\n533,-1,1718.7,457.9,82,208.9,1\n533,-1,288.9,126.2,53.6,169.9,1\n533,-1,992.1,1,54.3,109.7,1\n533,-1,172.4,313.9,66.9,194.6,1\n533,-1,1696.9,302.2,74.3,199,1\n533,-1,463.3,115.4,63.4,187.3,1\n533,-1,1665.8,10.8,53.3,162.6,1\n533,-1,1604.4,1.7,55.7,168,1\n533,-1,1766.8,219.6,72.7,175.7,1\n533,-1,811.2,602.6,74.9,256.1,1\n533,-1,1583.3,592.4,64,240.8,1\n533,-1,880.4,2.2,52.5,113.4,1\n533,-1,929.3,1,56.1,109.9,1\n533,-1,518.2,102.8,60.8,174.5,1\n533,-1,218.3,138.1,61.6,160.1,1\n533,-1,263.5,832.9,80.7,248.1,1\n533,-1,964.1,738.7,122.5,255.9,1\n533,-1,402.2,36.3,50.6,162.6,1\n533,-1,449.5,1.1,70.1,172.5,1\n533,-1,192.3,799.5,96.5,277.5,1\n533,-1,1795.3,667.5,62.8,203.5,0.977\n533,-1,1874.1,217.3,46.9,216.6,0.35\n533,-1,1591.5,285.5,51,193.9,0.102\n533,-1,1054.2,763.5,85.4,233.3,0.086\n537,-1,1221.2,30,62.1,120.3,1\n537,-1,1486.6,1.3,58.7,142.4,1\n537,-1,687.4,206.4,77.6,114.3,1\n537,-1,387,202.7,63.7,189.8,1\n537,-1,780.6,144.5,60.1,175.1,1\n537,-1,289,125.3,54.4,172.3,1\n537,-1,993,1.3,54.2,109.5,1\n537,-1,1717.7,457.5,82.5,208.4,1\n537,-1,1688.5,298.5,72.8,203.5,1\n537,-1,172.5,309.7,67.1,195,1\n537,-1,1771.7,224.4,72.8,176.2,1\n537,-1,1661,5.3,53.8,163.7,1\n537,-1,880.3,1.7,52.5,113.8,1\n537,-1,461.3,112,65.2,183.2,1\n537,-1,1600.8,1,55.8,165,1\n537,-1,519.5,102.1,61.8,180.4,1\n537,-1,799.6,598.7,81.2,262.4,1\n537,-1,1587.8,589.8,67.1,240.9,1\n537,-1,217.3,137,61.7,159.1,1\n537,-1,263.5,840.5,78.8,240.5,1\n537,-1,928.3,1,56.8,109.6,1\n537,-1,405,45.3,50,156.7,1\n537,-1,192.7,799.7,98.7,281.3,0.999\n537,-1,973.7,748.4,126,258.4,0.999\n537,-1,449.6,1,69.5,168.8,0.999\n537,-1,363.6,121.8,49.9,170,0.69\n537,-1,1062.9,769.3,80.6,242,0.099\n540,-1,1221.9,30.4,62.1,120.3,1\n540,-1,1487.8,2.5,58.4,142.3,1\n540,-1,687.3,206.2,78.2,114.3,1\n540,-1,779.9,146.2,64.1,173.4,1\n540,-1,387.4,205.4,63.9,192.1,1\n540,-1,1717.1,456.2,82.1,210.7,1\n540,-1,1682.3,292.5,74.5,202.3,1\n540,-1,992.1,1.1,52.9,106.2,1\n540,-1,879.1,1.9,52,111.8,1\n540,-1,289,123.4,53.8,172.6,1\n540,-1,1660.8,3.3,53.4,160.9,1\n540,-1,174.9,308.1,65.4,195.1,1\n540,-1,521.7,103.7,59.9,180.3,1\n540,-1,794.6,599.2,82.4,258.8,1\n540,-1,1775.4,227,68.8,177.4,1\n540,-1,456.7,108.2,68.1,183.8,1\n540,-1,1599.2,1,55,160.3,1\n540,-1,214.3,133.9,64.7,163.6,1\n540,-1,1590.4,586.8,67.4,240.6,1\n540,-1,927.5,1,56.6,107,1\n540,-1,262.1,847.1,78.3,233.9,1\n540,-1,360.4,113.5,51.8,170,0.999\n540,-1,195.8,805.1,100.6,275.9,0.999\n540,-1,406.6,45.2,48.6,156.6,0.999\n540,-1,977.3,754.2,130.6,249,0.995\n540,-1,1060,768.5,87,242.8,0.88\n540,-1,132.2,273.9,48.7,211.7,0.847\n540,-1,754.5,86.9,45.6,148.3,0.804\n540,-1,449.8,5.3,67.9,163.4,0.451\n540,-1,1029.4,946.3,79,134.7,0.064\n547,-1,1221.7,30.6,61.8,118.9,1\n547,-1,687.1,205.8,78.7,114.3,1\n547,-1,1491.4,4.5,58,141.7,1\n547,-1,384.9,218.5,61.2,190.7,1\n547,-1,782.7,145.1,67.6,172.2,1\n547,-1,1664.7,286.9,90.3,205.4,1\n547,-1,1714.8,456.6,85.5,211.6,1\n547,-1,769,598.2,100.2,251.8,1\n547,-1,1659.8,2.4,53.4,157.1,1\n547,-1,1785.9,228.4,67.4,179.3,1\n547,-1,876,1.6,53.3,108.3,1\n547,-1,989.4,1.8,51.2,100,1\n547,-1,290.2,122.1,51.3,174.1,1\n547,-1,1594.4,1,55.9,155.3,1\n547,-1,528,108,60.7,177.7,1\n547,-1,182.1,308.6,67.9,187.5,1\n547,-1,452.6,102.9,66.5,183.4,1\n547,-1,218.7,132.9,59.2,160.5,1\n547,-1,1592.6,583.8,69.7,241.5,1\n547,-1,253.4,869.6,81.1,211.4,1\n547,-1,929.2,1.4,55.6,100.3,1\n547,-1,358.5,113.3,55.4,172.8,1\n547,-1,132.4,272.9,57.8,216,0.999\n547,-1,1069.5,775.6,92.2,241.3,0.998\n547,-1,753.4,83.6,49,155.8,0.996\n547,-1,412,40.5,49,173.6,0.975\n547,-1,996.4,769,113.9,229.1,0.749\n547,-1,413.8,142.7,43.4,157.5,0.145\n553,-1,1221.2,30,62.5,121.2,1\n553,-1,687.1,205.9,78.6,114.7,1\n553,-1,1490.5,4.4,58.5,143.7,1\n553,-1,786.4,142.4,65.5,178.1,1\n553,-1,533.9,110.5,61.6,175.7,1\n553,-1,1798.2,233,71,184.2,1\n553,-1,379.9,219.2,63.7,195.8,1\n553,-1,1661.1,282.3,87.7,207.5,1\n553,-1,1715.5,456.5,85.7,211.7,1\n553,-1,873.8,1,53.5,109.1,1\n553,-1,192.5,298.9,63.9,193.5,1\n553,-1,758.4,596,97.4,256.1,1\n553,-1,289,122.7,53.3,173.6,1\n553,-1,986.6,2.3,53,96.6,1\n553,-1,246.4,879.2,79.6,201.8,1\n553,-1,1659.6,2,53.9,151.8,1\n553,-1,219.5,136.1,57.2,159,1\n553,-1,1591.1,1.8,55.4,149.6,1\n553,-1,1594.6,583.3,71.7,245.9,1\n553,-1,137.9,269.7,53.3,216.9,1\n553,-1,415.1,138.8,50.3,164,1\n553,-1,457.6,97.6,63.7,177.9,1\n553,-1,753.3,82.3,48.2,154.3,1\n553,-1,359.3,110.6,53.6,173.1,1\n553,-1,1078.5,789.7,95.6,253,0.995\n553,-1,929.2,1.1,58.4,95.8,0.987\n553,-1,1010.5,779.3,116.6,243.2,0.693\n553,-1,1024.6,946.5,78.9,134.5,0.092\n557,-1,1221.1,30.5,62,119.5,1\n557,-1,687.3,205.8,78.4,114.6,1\n557,-1,1488.4,4.4,59.3,145.2,1\n557,-1,536.2,112.6,61.1,174.7,1\n557,-1,378.4,221.4,63.6,193.6,1\n557,-1,1586.1,3.7,54.5,142.5,1\n557,-1,788.6,144,65,177.8,1\n557,-1,1807.4,235.4,71.4,181.4,1\n557,-1,1663.7,276.7,79.4,199,1\n557,-1,194.5,296.2,65.4,191.4,1\n557,-1,1658.3,1,55.1,148.7,1\n557,-1,1721.4,454.9,81.1,210.8,1\n557,-1,872.7,1,53.1,110.4,1\n557,-1,752.6,592.9,91.4,258,1\n557,-1,289,122.7,52.2,172,1\n557,-1,219.1,135.6,58.1,160.7,1\n557,-1,1595.9,589,71.7,240.5,1\n557,-1,140.4,266.3,53.1,211.6,1\n557,-1,985.5,2.5,52.6,93.7,1\n557,-1,752.9,80.1,48,156.4,1\n557,-1,459.8,87.4,64.8,189.8,1\n557,-1,244,889.8,83,191.2,1\n557,-1,421.8,143.7,50.3,155.4,1\n557,-1,359.2,109.8,54.9,170.8,1\n557,-1,1015.1,781,121.2,260.8,0.998\n557,-1,414.7,49.1,48.7,179.6,0.995\n557,-1,1091.2,793.7,91,252.1,0.927\n557,-1,931.1,2.1,55,94,0.775\n557,-1,1026.9,955.1,74.3,125.9,0.342\n560,-1,1221.2,30.3,61.9,120.1,1\n560,-1,687.2,206.2,79,114,1\n560,-1,1486.2,3.3,59.4,147,1\n560,-1,1664.9,272.3,77,201.1,1\n560,-1,538.8,115.2,59.3,173.7,1\n560,-1,1582.7,3.8,54.8,140.7,1\n560,-1,789.6,147.4,64.2,175.4,1\n560,-1,376.1,225.2,65,193.8,1\n560,-1,1721,452.8,81.3,214,1\n560,-1,872.4,1,53.6,109,1\n560,-1,197.1,292.1,67.3,191,1\n560,-1,1658.7,1.6,52.7,145.2,1\n560,-1,984.6,4.4,52.5,93.3,1\n560,-1,1815.1,234.5,69.5,184.4,1\n560,-1,141.7,261.6,54.4,210.4,1\n560,-1,218.9,134.5,58,164.5,1\n560,-1,288.6,120.7,52.5,173.8,1\n560,-1,754.5,78.9,47.5,156.4,1\n560,-1,426.3,143.7,52.6,158,1\n560,-1,747.5,590.9,82.2,255.8,1\n560,-1,1596.3,589.5,71.7,239.2,1\n560,-1,464.4,88.9,64,177.7,1\n560,-1,358.7,108.4,52.6,171.6,1\n560,-1,244.9,900.7,80.7,180.3,1\n560,-1,1015.7,783.4,118.5,262.4,0.999\n560,-1,416,47.4,50.4,179.6,0.998\n560,-1,1095.4,799.5,91.5,244.1,0.987\n560,-1,1025.3,950.7,71.7,130.3,0.554\n560,-1,930.9,4.5,44.7,92,0.178\n563,-1,1220.8,30.3,62.7,119.8,1\n563,-1,687.4,206,78.6,114,1\n563,-1,1483.9,3.3,59.6,146.2,1\n563,-1,542.6,117,57.9,169.8,1\n563,-1,1664.6,268.6,75.1,204.3,1\n563,-1,790.2,147.1,65.6,174,1\n563,-1,377.2,232.1,64,190.1,1\n563,-1,1578,1,57.3,141.2,1\n563,-1,1821.2,239.9,68.5,182.5,1\n563,-1,1721.9,453.2,79.7,211.9,1\n563,-1,873,1,52.3,107.6,1\n563,-1,1656.9,1.2,52.7,144.5,1\n563,-1,199.9,292.1,64.5,189.8,1\n563,-1,289.6,121.9,52.8,172.6,1\n563,-1,218.3,135.1,57.9,164.5,1\n563,-1,143.1,258.7,56.3,212.6,1\n563,-1,985.8,3.1,52.6,93.2,1\n563,-1,755.7,79.5,44.9,154.5,1\n563,-1,1594.8,590.2,73.7,234.9,1\n563,-1,432.4,145.4,52.7,147.1,1\n563,-1,737.6,587.9,83.2,252.6,1\n563,-1,463.6,86.6,63.3,178,1\n563,-1,359,108.1,51,175.5,1\n563,-1,417.3,49,50.6,170.2,1\n563,-1,1020.1,788.5,118.4,273.4,0.999\n563,-1,246,913.7,78,167.3,0.999\n563,-1,1100.9,808.7,91.3,234.3,0.997\n563,-1,1023.3,939,70.1,142,0.265\n565,-1,1221.2,30.6,62.2,119.7,1\n565,-1,687.2,205.9,79.2,113.8,1\n565,-1,1482.7,3.3,59.5,147.4,1\n565,-1,545.2,117.9,55.4,167.6,1\n565,-1,1823.5,243.6,68,181.7,1\n565,-1,377.5,232.6,65.1,195.1,1\n565,-1,791.9,148.3,66.6,171.9,1\n565,-1,1718.9,454.3,82.8,212.1,1\n565,-1,1664.9,267.5,72.5,203.9,1\n565,-1,1576.2,1.1,56.9,138.6,1\n565,-1,1656,1.2,53.5,143.6,1\n565,-1,873.5,1,52.2,107.7,1\n565,-1,289.7,120.9,52,173.4,1\n565,-1,202,289.6,63.7,190.7,1\n565,-1,217.6,135.9,57.3,164.1,1\n565,-1,435.7,139.9,51.7,152.2,1\n565,-1,1593,591.3,75.7,231.5,1\n565,-1,755.8,80.9,44.3,154,1\n565,-1,145.6,257.1,57.9,213.3,1\n565,-1,466.6,82.2,63.2,176.4,1\n565,-1,734.9,587.2,81.4,253.9,1\n565,-1,359.5,109,50.5,174.4,1\n565,-1,986.5,3.6,50.7,89.9,1\n565,-1,1021.4,794.6,119.2,274,1\n565,-1,246.8,914.3,80.2,166.7,0.999\n565,-1,1103.9,814.8,90,235.1,0.998\n565,-1,419.1,49,47.1,174.3,0.997\n565,-1,1016.1,936.2,75.8,144.8,0.14\n567,-1,1221.1,30.5,62.1,119.9,1\n567,-1,687.1,205.8,79.3,114.2,1\n567,-1,1482,3.5,59.9,146.5,1\n567,-1,378,233.2,65.9,197.4,1\n567,-1,547,117.7,53.6,167,1\n567,-1,1825.8,249,68.3,174.9,1\n567,-1,790.2,146.8,70.6,174.8,1\n567,-1,1665.9,266.1,68.3,202.2,1\n567,-1,1716.3,453.2,84.5,213.3,1\n567,-1,1652.2,1,55.8,143.5,1\n567,-1,872.5,1,52.3,105.8,1\n567,-1,1574.9,2.8,54.4,135.9,1\n567,-1,288.6,122.1,52.2,172.1,1\n567,-1,216.9,135.7,58,164.2,1\n567,-1,204.2,287.7,63.5,192,1\n567,-1,1589.9,591.5,78.1,233.5,1\n567,-1,755.6,80.2,43.8,153.7,1\n567,-1,146,255.6,59,215.9,1\n567,-1,440.9,130,52.7,162.4,1\n567,-1,1018.7,801.9,130.3,267.5,1\n567,-1,358.6,109.9,53.2,177,1\n567,-1,729.9,586.5,85.1,252,1\n567,-1,466.3,82.4,62.7,172.7,1\n567,-1,247.9,913.5,82.1,167.5,0.999\n567,-1,419.8,48.4,49.3,179.4,0.991\n567,-1,984.3,1.5,50.6,84.2,0.909\n567,-1,1104.3,819.1,91,236.2,0.876\n569,-1,1221.3,30.2,61.4,119.3,1\n569,-1,686.7,205.9,79.9,114.1,1\n569,-1,1481.5,4.2,59.9,145.7,1\n569,-1,379,234.3,66.4,198,1\n569,-1,791.7,146.7,69.7,171.7,1\n569,-1,1826.9,253.7,69.9,175,1\n569,-1,1713.5,453.5,87.7,212.2,1\n569,-1,1664.5,265.2,67.1,200.6,1\n569,-1,1651.4,1,57.1,141.1,1\n569,-1,549.9,117.5,52.3,167.1,1\n569,-1,872.4,1,52,105.9,1\n569,-1,288.7,121.9,52.1,172.8,1\n569,-1,218.5,138,55.8,163.6,1\n569,-1,1574.4,4.1,53.4,133.7,1\n569,-1,204.9,285.6,64.2,193.7,1\n569,-1,755.2,79.6,43.8,155,1\n569,-1,1589.3,590.4,78.5,234.5,1\n569,-1,443.6,130.1,52.2,161.9,1\n569,-1,146.4,257.5,60.8,211.6,1\n569,-1,1018,806,135.1,275,1\n569,-1,467.4,78.1,62.9,177.6,1\n569,-1,358.4,109.9,53.7,176.9,1\n569,-1,726,585.9,89.1,251.4,1\n569,-1,420.1,53.9,48.6,177.5,0.998\n569,-1,250.3,913,81.6,168,0.997\n569,-1,1008.1,930.1,83.4,150.9,0.878\n569,-1,982,2.3,51.9,80,0.285\n569,-1,1101,823.9,90.3,241,0.102\n571,-1,1221.2,30.1,62.2,119.6,1\n571,-1,686.5,205.7,80.2,114.8,1\n571,-1,1481.1,4.3,59.8,145.1,1\n571,-1,792,147.5,69.9,170.9,1\n571,-1,378.8,235.8,66.5,197.8,1\n571,-1,1650.4,1,57.4,137.9,1\n571,-1,1713.2,452.3,88.7,214.1,1\n571,-1,1828.1,255,72,179.3,1\n571,-1,551.4,116.7,51.6,169.6,1\n571,-1,1662.2,260.8,68.7,204.6,1\n571,-1,288,122,52.3,173.2,1\n571,-1,872.5,1,51.8,105.5,1\n571,-1,218.1,136.8,55.3,164.5,1\n571,-1,754.4,78.8,44,156.2,1\n571,-1,1584.8,591,83.2,234.6,1\n571,-1,207.6,282.8,63.8,194,1\n571,-1,147.2,257.5,62.9,211.3,1\n571,-1,447.5,128.3,51.4,163.3,1\n571,-1,1024,808.3,134.9,272.7,1\n571,-1,359.3,109,52.7,177.4,1\n571,-1,722.5,584.4,85.5,252.5,1\n571,-1,466.5,73.7,61.2,176.3,1\n571,-1,421.5,60.4,48,169.5,0.999\n571,-1,1572.1,3.5,51.7,132.1,0.998\n571,-1,250.8,915,82.3,166,0.993\n571,-1,1011.6,932.4,72.5,148.6,0.818\n571,-1,982.9,3.6,52.2,78.5,0.122\n574,-1,1221,30,62.6,120.3,1\n574,-1,687.1,205.5,79.4,115,1\n574,-1,1481,5.1,59.8,145.4,1\n574,-1,793.8,148.9,67.3,169.2,1\n574,-1,377.9,237.8,67.6,197.3,1\n574,-1,1650.4,1,57.2,136.3,1\n574,-1,551.2,113.9,52.4,171,1\n574,-1,1715.1,455.4,85.7,210.9,1\n574,-1,289.3,122.8,52.1,172.2,1\n574,-1,1831.8,254.5,71.1,180.9,1\n574,-1,1657,256.4,71.2,201.2,1\n574,-1,754.7,78.2,43.7,155.6,1\n574,-1,872.7,1,51.4,104.1,1\n574,-1,450.7,125.7,51.1,163.1,1\n574,-1,219.7,135.3,51.5,161.8,1\n574,-1,1580.8,589.5,86.5,230.5,1\n574,-1,208.4,279.6,64.6,193.4,1\n574,-1,150.4,255.7,62,213,1\n574,-1,1032.7,814,136.4,267,1\n574,-1,719.4,581.9,84.1,254,1\n574,-1,359.7,108.7,53.4,173.6,1\n574,-1,421.6,59.9,47.2,168.8,0.999\n574,-1,251.8,925.3,79.1,155.7,0.968\n574,-1,470.4,77,58.6,176,0.95\n574,-1,1010.8,935.5,68.3,145.5,0.841\n574,-1,294.9,868.3,98.3,212.7,0.172\n577,-1,1221.1,30.6,62.3,119.3,1\n577,-1,686.4,205.9,80.3,113.5,1\n577,-1,1480.8,5,60.3,144.6,1\n577,-1,377.4,241.4,67.7,199.6,1\n577,-1,799.4,147.5,63.7,168.2,1\n577,-1,1649.6,1,55,135.2,1\n577,-1,1715.3,454.2,85.7,211.8,1\n577,-1,554,113,51.9,172.4,1\n577,-1,1577.9,588.2,91.5,236,1\n577,-1,1653.5,248.3,75.4,203.2,1\n577,-1,288.8,124.4,51.7,170.3,1\n577,-1,218.2,135.2,52.4,162.2,1\n577,-1,211.3,275.4,63.9,196.9,1\n577,-1,454.7,120,49.7,163,1\n577,-1,754,78.4,44.1,156,1\n577,-1,1836,256.4,72.7,181,1\n577,-1,873.4,1,51.9,104.1,1\n577,-1,152.6,253.7,60.9,209.2,1\n577,-1,712.2,577.9,83.4,252.7,1\n577,-1,358.2,110.6,53.9,175.1,1\n577,-1,1040.3,820.7,129.1,260.3,1\n577,-1,422.4,60.6,47.2,166.2,0.999\n577,-1,1006.7,938.2,72.3,142.8,0.876\n577,-1,1119.2,830.1,91.8,250,0.356\n581,-1,1221.6,30.6,61.6,119.1,1\n581,-1,686.8,205.7,79.6,114.6,1\n581,-1,1481.1,5.3,60.2,143.5,1\n581,-1,1646.9,1,55.4,130.9,1\n581,-1,800.2,145,62.9,172.7,1\n581,-1,377.6,250.7,66.7,194.7,1\n581,-1,1715.4,453.9,86.3,212.9,1\n581,-1,1650.3,245.2,79.1,202.4,1\n581,-1,288.2,124.8,52.5,169.5,1\n581,-1,557.9,113.1,51.7,172.3,1\n581,-1,1574.4,587.6,94.1,234.9,1\n581,-1,215.1,274.8,65.6,192.3,1\n581,-1,216.9,137.2,50.1,155.6,1\n581,-1,875.3,2.5,50.3,101.4,1\n581,-1,459.2,116.5,50.9,158.6,1\n581,-1,754,79.4,44.2,156.2,1\n581,-1,359.2,108.5,53.3,176.6,1\n581,-1,155.6,250.3,60.1,214.1,1\n581,-1,1844.8,261.6,68.5,181.6,1\n581,-1,702.6,572.2,84.5,254,0.999\n581,-1,1047.2,828.9,128.8,252.1,0.999\n581,-1,424.9,57.8,45.9,170.3,0.999\n581,-1,1007.6,928,67.3,153,0.198\n581,-1,1126.1,840.2,91.6,240.8,0.147\n582,-1,1221.4,30.6,62.1,119.9,1\n582,-1,686.9,205.8,79.6,113.7,1\n582,-1,1480.9,5.3,60.5,144.1,1\n582,-1,801.3,143.6,62.6,175.6,1\n582,-1,1646.6,1,55.8,130.1,1\n582,-1,377.8,252.2,66.2,195.8,1\n582,-1,1648.3,244.4,81.2,203.4,1\n582,-1,288.3,123.6,52.8,171.4,1\n582,-1,1716.3,453.3,84.2,213.6,1\n582,-1,217.2,275,64.2,191,1\n582,-1,873.9,2.9,50.8,99.7,1\n582,-1,559,113.5,50.1,174.4,1\n582,-1,1574.9,587.8,92.9,234.7,1\n582,-1,216.6,135.7,50.7,157.6,1\n582,-1,459.4,117.2,52.3,158.3,1\n582,-1,358.8,110,53,176.5,1\n582,-1,155.6,253.5,62,211.8,1\n582,-1,754.3,79.8,43.4,155.8,1\n582,-1,1848.2,263.6,66.3,176.1,1\n582,-1,1046.7,830.9,129.3,250.1,0.999\n582,-1,425.2,59,45.9,169,0.999\n582,-1,701.1,569.7,82,258,0.999\n582,-1,1004.1,926.7,69.9,154.3,0.184\n582,-1,1129.2,842.3,94.6,238.7,0.119\n584,-1,1221.5,30.6,61.3,119.9,1\n584,-1,686.8,206.1,79.5,113.1,1\n584,-1,1480.9,4.2,60.7,145.2,1\n584,-1,376.3,256.2,65.9,196.9,1\n584,-1,1645.9,1,55.3,127.3,1\n584,-1,801.2,147.1,63,171.3,1\n584,-1,1649,245.3,80.4,200.2,1\n584,-1,559.9,113.5,50.8,175.3,1\n584,-1,288.6,124.3,52.2,171,1\n584,-1,1717.6,454.1,83.7,212,1\n584,-1,358.2,107.9,54.7,176.9,1\n584,-1,219.1,276,63.8,190.3,1\n584,-1,874.4,3.5,49.7,99.1,1\n584,-1,1576.2,588.9,91.9,235,1\n584,-1,217.1,133.4,50.3,160.5,1\n584,-1,754.2,80.6,43.4,155.1,1\n584,-1,159.3,254.9,58.2,206.7,1\n584,-1,1848.8,264.2,71.5,180,1\n584,-1,462.5,116.4,50.5,159.1,1\n584,-1,427.7,59.6,45.1,172.3,0.999\n584,-1,1051.8,838.2,125.4,242.8,0.999\n584,-1,694.9,566.9,88,254.3,0.916\n584,-1,1134.2,843.9,94.1,237.1,0.669\n591,-1,1221.7,30.7,60.8,119,1\n591,-1,687,205.9,79.2,113.4,1\n591,-1,1481.5,4.9,60.7,144.2,1\n591,-1,800.7,142.7,63.7,176.8,1\n591,-1,1639.5,1,54.8,120.3,1\n591,-1,561.2,112.4,50.5,175.4,1\n591,-1,226.1,274.5,63.4,185.4,1\n591,-1,1651.2,237.8,80,203.8,1\n591,-1,359.9,111.7,51.6,171.4,1\n591,-1,369.6,258.9,67,195.9,1\n591,-1,1719.6,455.7,81.1,211,1\n591,-1,288.2,126.1,52.2,170.9,1\n591,-1,473.5,108.7,50.3,161.8,1\n591,-1,1574.4,589.3,94.1,234.5,1\n591,-1,428.2,65.3,46.4,173.5,1\n591,-1,753.8,82.2,43.5,152.3,1\n591,-1,163.8,251.6,58.7,204.4,1\n591,-1,214.1,134,55.6,164.6,1\n591,-1,1067.6,848,119,233,1\n591,-1,871.4,2.6,52.2,95.7,1\n591,-1,1858.6,270.9,62.4,171.7,0.999\n591,-1,1158.5,856.6,85.8,224.4,0.848\n591,-1,303.8,899.7,100.1,181.3,0.782\n593,-1,1221.6,30.6,61.3,119.2,1\n593,-1,686.9,206.2,79.3,112.8,1\n593,-1,1481.8,4.5,60.1,144.5,1\n593,-1,801.6,142.3,62.1,177,1\n593,-1,1637.6,1,55,119,1\n593,-1,359.6,109.6,51.9,171.6,1\n593,-1,227.4,270.7,62.9,187.5,1\n593,-1,367.6,261.1,67.6,195,1\n593,-1,1719.7,454.3,80.1,212.9,1\n593,-1,1654,235,76.1,199.2,1\n593,-1,561.8,112.9,49,175.7,1\n593,-1,1574.3,590.1,95.3,233,1\n593,-1,477.1,104.7,50.7,159.7,1\n593,-1,288.1,126,51.9,171.5,1\n593,-1,165,250.1,57.7,204.4,1\n593,-1,753.7,83.7,43.4,150.4,1\n593,-1,212.9,137.1,57.4,161.8,1\n593,-1,427.7,66.2,51,172.9,1\n593,-1,1070.5,852.2,119.6,228.8,1\n593,-1,1865.3,273.1,55.7,170.4,0.99\n593,-1,871.8,3.6,54.1,90.9,0.966\n593,-1,1156.8,862.2,89.9,218.8,0.874\n593,-1,308.4,907,97,174,0.59\n606,-1,1221.5,30.8,61.4,119.6,1\n606,-1,687.3,206,78.7,114.6,1\n606,-1,1481.1,3.6,60.5,145,1\n606,-1,363.6,276.1,66.5,198.4,1\n606,-1,800.6,146.2,66.2,170.2,1\n606,-1,1709.5,456.4,93.7,211.5,1\n606,-1,1617.6,3,55.3,105.6,1\n606,-1,238.4,263.1,62.6,187.8,1\n606,-1,1645.3,226.9,70,195.3,1\n606,-1,1573.2,588.7,98.2,234.5,1\n606,-1,170.7,245.5,58.8,201.7,1\n606,-1,490.9,91,44.7,159.7,1\n606,-1,560.8,112.1,51.9,176.8,1\n606,-1,287.5,125.4,51.2,172.8,1\n606,-1,359.4,112.5,51.5,174.3,1\n606,-1,220,135,54.8,161.2,1\n606,-1,435,75,48.1,165.8,1\n606,-1,751.9,81.3,44.8,155.5,1\n606,-1,1086.9,881.7,124.2,199.3,1\n606,-1,392.8,90.6,54,160.5,0.975\n606,-1,612.4,551.2,94.1,249.5,0.854\n608,-1,1221.6,31,61.4,119.6,1\n608,-1,686.9,205.8,79.4,113.6,1\n608,-1,1481.4,3.3,59.8,145,1\n608,-1,800.9,146.5,66.4,169.9,1\n608,-1,363.6,277.6,67.3,197.4,1\n608,-1,1707.6,456.9,95.4,208.7,1\n608,-1,1613.4,3.1,54.5,104.7,1\n608,-1,239.9,262.5,61.5,183.9,1\n608,-1,172,244.1,58.9,199.5,1\n608,-1,1574.1,591.1,97.7,232.4,1\n608,-1,1642.6,224.2,69.7,198,1\n608,-1,492.6,90.7,43.2,156.5,1\n608,-1,561,110.3,49.8,179.2,1\n608,-1,288.1,125.4,51.3,172.8,1\n608,-1,220.5,136.2,56.5,160.5,1\n608,-1,357.7,110.2,51.3,178.8,1\n608,-1,603,551.7,87.6,243.6,1\n608,-1,437.9,76.6,48.4,165.7,1\n608,-1,753,82.5,43.2,154.5,1\n608,-1,1093,884.3,123.1,196.7,1\n608,-1,395.6,89.4,52.2,161.6,0.987\n612,-1,1221.4,31.9,60.6,117.7,1\n612,-1,687.5,205.9,78.1,113.1,1\n612,-1,1480.4,5.1,59.7,144.1,1\n612,-1,801.7,145.4,66.9,170,1\n612,-1,361.1,281.6,68.4,201,1\n612,-1,1709.6,456.4,94.2,210.9,1\n612,-1,1610.1,1,54.9,103.8,1\n612,-1,172.3,242.9,64.4,200.6,1\n612,-1,582.5,554.6,98.8,229.4,1\n612,-1,1574.3,590,97.3,234.9,1\n612,-1,1638.2,214.9,70.2,195.6,1\n612,-1,357.2,113.3,51.5,172.4,1\n612,-1,558.1,108.5,52.8,182.2,1\n612,-1,243.7,260.9,61,182.2,1\n612,-1,288.3,126.5,51.1,170.1,1\n612,-1,493.2,88,47.9,159.8,1\n612,-1,222.6,138,55,159.4,1\n612,-1,754,81.4,43,153.7,1\n612,-1,444.1,80.5,46.4,162.3,1\n612,-1,1098.8,888.2,117.3,192.8,1\n612,-1,399.8,91.1,51.4,162.1,0.998\n617,-1,1221.4,30.5,63,119.3,1\n617,-1,687.1,206,79.3,113.3,1\n617,-1,1480.5,4.5,60.3,143.9,1\n617,-1,1629.8,208.3,76.5,194.5,1\n617,-1,801.6,145,66.2,172.1,1\n617,-1,357.7,292.5,64.9,196.4,1\n617,-1,357.9,114,53.1,175.3,1\n617,-1,1709.6,457.5,93.1,209,1\n617,-1,1574.6,589.3,96.7,235.2,1\n617,-1,173.7,240.3,69.2,202.9,1\n617,-1,243.7,255.9,61.9,184.9,1\n617,-1,288.8,129.1,51,168.3,1\n617,-1,555.6,112,53.6,175.2,1\n617,-1,753.8,80.9,44.8,153.6,1\n617,-1,1605.9,1.4,51.9,98.5,1\n617,-1,575.6,544.6,80.3,241.3,1\n617,-1,225.7,137.7,52.9,159.9,1\n617,-1,494.9,92,47.2,156.5,1\n617,-1,442.4,79.4,48.1,168.6,1\n617,-1,354.6,1.3,51.7,117,0.999\n617,-1,1108.8,902.1,105.7,178.9,0.999\n617,-1,401.6,94.9,54,165.6,0.999\n618,-1,1221.8,29.4,62.1,120,1\n618,-1,687.2,206.2,78.9,112.9,1\n618,-1,1480.7,4.9,60.2,143.4,1\n618,-1,1628.9,210.1,76.3,191.9,1\n618,-1,801.4,145.6,66.3,171.3,1\n618,-1,357.3,293.9,65.3,197.2,1\n618,-1,1710.1,457.5,92.9,207.5,1\n618,-1,357.9,113.6,52.9,174,1\n618,-1,1575.7,590.1,95.5,235,1\n618,-1,556,113,54.2,174.8,1\n618,-1,288.7,129.1,51.2,168.2,1\n618,-1,243.6,254.3,62.5,185.8,1\n618,-1,174.4,238.7,70.7,207.1,1\n618,-1,573.5,545,78.8,241.3,1\n618,-1,753.9,80.8,43.4,153.3,1\n618,-1,225.7,137.1,53.3,159.8,1\n618,-1,495.7,91.6,48.3,156.9,1\n618,-1,1605.1,1,53.8,97.1,1\n618,-1,354.2,1.3,52.3,117.2,1\n618,-1,403.3,98,53.9,163.8,0.999\n618,-1,443.7,81.2,45.3,166.6,0.999\n618,-1,1110.2,905.9,107.7,175.1,0.999\n620,-1,1221.4,29.8,62.7,118.5,1\n620,-1,687.1,206,79.2,113.1,1\n620,-1,1481,4.5,60.5,143.5,1\n620,-1,1625.5,209.1,79.4,196.8,1\n620,-1,801.2,145.4,66,171.5,1\n620,-1,354.5,294.5,66.5,200.4,1\n620,-1,1709.5,456.7,94.3,207.5,1\n620,-1,358.7,114.5,51.5,172.8,1\n620,-1,1573.9,589.3,97.3,236.6,1\n620,-1,556.3,111.7,54,175.9,1\n620,-1,288.7,127.9,51,167.4,1\n620,-1,174.2,237.8,74.3,204.5,1\n620,-1,244.5,249.8,62.7,190.4,1\n620,-1,353.6,1,53.2,120.3,1\n620,-1,754.3,81.2,42.4,151.9,1\n620,-1,496.5,88.6,46.5,158.5,1\n620,-1,570.1,542.1,73.8,241.5,1\n620,-1,1599.9,1.5,52.7,94.5,1\n620,-1,227.4,134.2,53,163.5,1\n620,-1,406.3,98,51.3,162.9,0.999\n620,-1,444.7,82.2,46.6,166.5,0.999\n620,-1,1112.8,911.2,102.3,169.8,0.996\n620,-1,1191.8,922.7,82,158.3,0.074\n630,-1,1221.8,30.5,62.5,118,1\n630,-1,687,206,79.3,112.7,1\n630,-1,1480.2,5.9,61.1,143.2,1\n630,-1,800.8,145,66.6,172,1\n630,-1,508.2,538.5,113,244.7,1\n630,-1,1713.5,452.3,91.5,212.6,1\n630,-1,342.3,296.9,68.9,205.3,1\n630,-1,547.2,111.8,62.6,174.9,1\n630,-1,1574.3,588.6,96.9,236,1\n630,-1,358.8,112.9,52,171.4,1\n630,-1,190.3,234.1,69.6,201.3,1\n630,-1,1625.6,198.2,74.5,195.5,1\n630,-1,253.5,246.6,61.2,186.7,1\n630,-1,754.4,78.1,44.8,156.3,1\n630,-1,286.9,124,52.5,169,1\n630,-1,414.8,105.7,53.8,155.8,1\n630,-1,352.9,1,54.5,128,1\n630,-1,500.6,76.1,45.1,152.8,1\n630,-1,420.4,1.1,58.8,127.9,1\n630,-1,235.2,133.7,48.4,161.6,0.999\n630,-1,454,85.7,49,172.8,0.999\n630,-1,1110.9,924.5,106.7,156.5,0.976\n630,-1,1582.1,1,58.3,88.5,0.856\n630,-1,948.9,929.1,70.4,151.9,0.055\n631,-1,1221.7,29.7,62.4,118.5,1\n631,-1,687.1,205.8,79,113.6,1\n631,-1,1480.8,6.5,60.6,143.1,1\n631,-1,800.6,145,66.8,170.6,1\n631,-1,507.4,538.3,109.9,245.2,1\n631,-1,1712.7,453.6,93.4,210.4,1\n631,-1,341,295.6,70.2,209.5,1\n631,-1,548.5,113.2,60.6,173.4,1\n631,-1,1573.8,588.4,97.8,235.9,1\n631,-1,358.7,113,52.9,172.7,1\n631,-1,1626.8,197.1,72.9,191.1,1\n631,-1,193.4,231,70,201.9,1\n631,-1,287,124.4,52.8,169.2,1\n631,-1,254.2,246.7,59.9,185.3,1\n631,-1,753.6,82.1,44.6,151.8,1\n631,-1,417.5,105,52.2,155.9,1\n631,-1,500.7,76.7,46.1,153.1,1\n631,-1,419.7,1,59.5,129.9,1\n631,-1,351.7,1,55.4,127.7,1\n631,-1,456.4,85.3,47.9,174.3,0.999\n631,-1,235.3,133.3,48.4,161.4,0.998\n631,-1,1581.2,1,56.1,86.2,0.873\n631,-1,1112.6,925.9,104.7,155.1,0.813\n631,-1,945.7,926.3,69,154.7,0.054\n638,-1,1220.9,31,62.9,118.2,1\n638,-1,687.2,205.9,79.3,114,1\n638,-1,1481.6,4.9,60,143.8,1\n638,-1,800.9,145.6,64.6,170,1\n638,-1,340.5,312.2,67.5,205.8,1\n638,-1,1708.7,454.3,99,213.3,1\n638,-1,547.1,113.8,62.9,173.7,1\n638,-1,359.2,110.9,51.2,173.6,1\n638,-1,1575.3,589,95.8,236.2,1\n638,-1,494.5,537.4,100.7,244.6,1\n638,-1,261.5,240.3,59.2,191,1\n638,-1,1622.3,193.2,70.7,188.2,1\n638,-1,418.1,115.7,55.3,154.9,1\n638,-1,205.1,230.2,61.4,199.7,1\n638,-1,751.8,82.1,46.2,155.3,1\n638,-1,287.9,126.2,50.6,170,1\n638,-1,417.4,2.8,59.1,141.7,1\n638,-1,462.9,91.1,47.8,174.1,0.999\n638,-1,494.5,66.8,45.7,147,0.998\n638,-1,354,1,55.5,129.5,0.997\n638,-1,234.7,138,45.6,162.7,0.983\n638,-1,1504.7,964.2,79.5,116.8,0.059\n642,-1,687.3,206.2,79.1,113.7,1\n642,-1,1481.7,4.3,60.4,145.3,1\n642,-1,1221.2,32.5,62.4,116.1,1\n642,-1,800.5,145.7,66,171.8,1\n642,-1,488.1,538.7,87.4,243.2,1\n642,-1,546.2,112.8,64.3,174,1\n642,-1,1708.7,454.9,99,213.6,1\n642,-1,359.2,111.3,52.6,173.8,1\n642,-1,339.2,315.7,67.9,207.6,1\n642,-1,1574.5,589.6,98,235.6,1\n642,-1,265.3,241.4,57.6,185.3,1\n642,-1,207.9,226.5,62.9,201.8,1\n642,-1,1622.2,192.8,66.3,189.7,1\n642,-1,751.4,78.7,45.8,158.6,1\n642,-1,414.9,1.4,60.6,149.9,1\n642,-1,420,118.5,55.1,154.5,1\n642,-1,287.5,127.9,50.9,166.7,1\n642,-1,463.7,97.9,50.8,175.4,1\n642,-1,353.8,1,52.4,131,0.988\n642,-1,492.7,50.6,45.2,166.6,0.795\n642,-1,236.6,143.1,45.1,174.1,0.092\n643,-1,687,206.3,79.6,113.8,1\n643,-1,1220.5,31.5,62.7,117.5,1\n643,-1,1481.5,4.1,60.5,145.7,1\n643,-1,547.2,113,63.7,174.8,1\n643,-1,1710,454.8,98.6,213.8,1\n643,-1,359.4,111.5,52.6,173.1,1\n643,-1,801.9,145.6,63.2,171.7,1\n643,-1,339.2,318.6,67.7,204.7,1\n643,-1,484.4,537.3,85,243.2,1\n643,-1,1573.6,589.5,98.4,236,1\n643,-1,265.8,241.5,57,182.8,1\n643,-1,414.4,1.8,59.9,150,1\n643,-1,1621.7,189.6,66.1,193.2,1\n643,-1,210,226.2,61.2,202.4,1\n643,-1,751.9,79.8,44.3,157.6,1\n643,-1,420.7,119.5,54.4,154.8,1\n643,-1,465.5,98.7,49,177.4,1\n643,-1,287.6,128.5,50.8,166.9,1\n643,-1,489.2,49.3,47.4,173.4,0.8\n643,-1,354.1,1,53.1,129.1,0.759\n643,-1,1488.8,952.2,82.5,128.8,0.166\n644,-1,687.1,206.6,79.6,113.4,1\n644,-1,1220.6,31.1,62.4,118.1,1\n644,-1,1481.3,4.5,60.4,145.1,1\n644,-1,548.1,113.1,62.3,174.4,1\n644,-1,800.9,145,65.4,173.6,1\n644,-1,1709.2,454.1,99.9,214.5,1\n644,-1,359.3,112.7,51.7,172.1,1\n644,-1,338.6,318.5,68.9,205.2,1\n644,-1,1573.5,590.1,98.8,235.6,1\n644,-1,481.5,538.7,83.8,241.1,1\n644,-1,1621,189.1,65.7,191.1,1\n644,-1,751.7,79.9,44.8,157,1\n644,-1,211.2,226.3,59.8,200.7,1\n644,-1,267.4,241.7,56.8,181.8,1\n644,-1,413.9,1.1,58.9,149.7,1\n644,-1,421.1,118.9,54.9,156.3,1\n644,-1,466.6,100.5,49.8,176.4,1\n644,-1,287.8,127.9,50.5,167.4,1\n644,-1,1487.7,949.7,78.8,131.3,0.398\n644,-1,238.8,140.6,41.5,170,0.178\n644,-1,356.6,1.7,50.6,129.3,0.163\n644,-1,488.8,50.5,46.9,167.3,0.159\n644,-1,923.4,924.4,70.9,156.6,0.06\n657,-1,687.7,206,78.6,113.9,1\n657,-1,1480.8,4.3,60.2,143.3,1\n657,-1,1155.4,1,68.9,117.2,1\n657,-1,1220.5,28.2,64.1,122.2,1\n657,-1,1711.7,455.1,96.4,210.4,1\n657,-1,551,111.1,60.1,174.5,1\n657,-1,800.8,144.9,65.4,172.7,1\n657,-1,359.5,114.5,50.5,170.1,1\n657,-1,328.8,332.5,69.5,208.4,1\n657,-1,1576.2,588.8,96.1,234.8,1\n657,-1,1612.9,170.6,75.1,186.6,1\n657,-1,446.4,532.5,84.7,247.3,1\n657,-1,408.8,1,57.5,153.5,1\n657,-1,751.5,80.9,46.3,154.5,1\n657,-1,272,236.1,59.4,178.1,1\n657,-1,220,217.4,56.9,203.9,1\n657,-1,472,108.1,48.1,176.2,1\n657,-1,425.5,119.9,56.8,161.3,1\n657,-1,286.9,123.5,52.5,173.5,0.999\n657,-1,1433.4,908.7,97.4,172.3,0.999\n657,-1,352.3,1,54,143.9,0.999\n657,-1,1357.1,932.3,88.1,148.7,0.96\n672,-1,1221.5,29.4,61.4,119.2,1\n672,-1,687.2,206.2,79.1,113.5,1\n672,-1,1481.7,6,60.2,142.7,1\n672,-1,800.2,144.1,65.1,174.2,1\n672,-1,315.7,351.9,69.2,207.6,1\n672,-1,560.9,111.7,51.9,176,1\n672,-1,481.1,120.9,47.3,171.3,1\n672,-1,359.7,116.1,49.3,165.5,1\n672,-1,1115.1,1,59.7,104.1,1\n672,-1,400.5,525.3,90.7,255.3,1\n672,-1,1574.6,588.7,97.2,234.3,1\n672,-1,1710.8,454.5,99.2,212.4,1\n672,-1,1492.3,160.3,53.8,176.6,1\n672,-1,414.7,129.1,74.6,163.7,1\n672,-1,1624.1,155.8,75.9,189.4,1\n672,-1,750.8,79.6,48.2,155.8,1\n672,-1,227.9,210.3,62.6,196.9,1\n672,-1,282.8,225.2,55.1,174.6,1\n672,-1,407.6,5.6,55.8,154.6,1\n672,-1,1398.7,868.6,97.1,212.4,1\n672,-1,1314.9,900.3,86.1,180.7,1\n672,-1,354.5,2.4,51.6,151,0.999\n672,-1,296.4,1,52.4,133.9,0.995\n672,-1,290.3,118.8,49.3,178.2,0.89\n688,-1,1221.6,30,62.4,120,1\n688,-1,687.6,206.6,78.6,113.2,1\n688,-1,1480.8,6,60.2,145.6,1\n688,-1,361.1,529.8,101.9,250.8,1\n688,-1,1709.6,456,97.8,209.5,1\n688,-1,1613.3,147.2,70.4,185.6,1\n688,-1,803.5,146.7,56.5,170.2,1\n688,-1,562.8,111.4,52.1,178.8,1\n688,-1,487.1,130.5,46.4,180.5,1\n688,-1,1489.2,139.6,53.3,180.5,1\n688,-1,311.5,367.8,68.3,212.2,1\n688,-1,421.3,142.6,63.7,162.8,1\n688,-1,1575.2,588.4,97.6,238.5,1\n688,-1,750.1,79.3,50.5,158.6,1\n688,-1,360.1,114.5,47.3,170.9,1\n688,-1,1059.2,1,61.8,98.2,1\n688,-1,1347,834.4,95.2,246.6,1\n688,-1,1260.1,856.1,90,224.9,1\n688,-1,244.7,200.5,61.3,197.3,1\n688,-1,297.9,216.3,59.1,177.6,1\n688,-1,406.3,21.8,54.2,162.7,1\n688,-1,481.6,36.2,48,145,1\n688,-1,224.1,128.7,51.2,167,0.999\n688,-1,823.4,919.4,83.3,161.6,0.756\n695,-1,1221.6,29.9,62,118.8,1\n695,-1,686.8,206.4,79.7,113.5,1\n695,-1,1481.6,6.2,59.6,144.8,1\n695,-1,562.1,112.2,53.5,178,1\n695,-1,1608.2,141.6,69.8,180.6,1\n695,-1,1482,132.8,54.4,181.3,1\n695,-1,1710.2,454.6,100.4,212.4,1\n695,-1,378.9,535.3,79.7,249.2,1\n695,-1,1574.8,589.5,96.6,233.7,1\n695,-1,422.3,151.2,62.9,164,1\n695,-1,488.1,134.4,47.6,184.4,1\n695,-1,802.7,144.3,52.8,174.5,1\n695,-1,407.7,18.6,57,165.5,1\n695,-1,749.5,79.4,50.4,156.4,1\n695,-1,303.5,377.2,71.2,213.3,1\n695,-1,1036,1.9,65.5,92.9,1\n695,-1,360.4,112.5,50.4,172.5,1\n695,-1,250.2,198,61.8,197.8,1\n695,-1,302.7,212.8,58.6,179.5,1\n695,-1,1321.3,813.8,102.6,267.2,1\n695,-1,480.7,29,44.1,136.1,1\n695,-1,226.4,133.9,53.7,163.7,1\n695,-1,1246,839.9,83.8,241.1,1\n695,-1,826.9,925.4,78.5,155.6,0.698\n696,-1,1221.4,29.8,62.1,118.6,1\n696,-1,687,206.6,79.7,112.5,1\n696,-1,1481.5,5.9,59.6,145.4,1\n696,-1,561.2,111.3,54.6,178.2,1\n696,-1,1607.2,140.8,69.8,181,1\n696,-1,1481,135.6,53,176.9,1\n696,-1,1711.5,454.7,98.5,212.8,1\n696,-1,1574.9,589.6,97.4,235.2,1\n696,-1,380.9,536,77.3,247.8,1\n696,-1,421.8,150.5,64,165,1\n696,-1,488.1,135.1,47.2,184,1\n696,-1,802.6,142.7,52,175.6,1\n696,-1,750.1,80.2,49.7,155.6,1\n696,-1,408.1,19.5,56.4,161.8,1\n696,-1,302.3,377.2,71.2,214.7,1\n696,-1,1034,2.6,65.8,91.3,1\n696,-1,250.8,198.5,62.5,198.8,1\n696,-1,480.4,27.7,44.9,136.2,1\n696,-1,360.2,112.2,50.2,173.3,1\n696,-1,1316.6,807.8,105.6,273.2,1\n696,-1,303.5,212.6,57.7,180.5,1\n696,-1,1243.7,831.2,86.6,249.8,1\n696,-1,227,133.7,52.9,164.3,1\n696,-1,827.4,926.3,80,154.7,0.582\n699,-1,1221.9,30,61.7,118.6,1\n699,-1,687.3,206.5,79,113.1,1\n699,-1,1482.1,6.2,59.1,145,1\n699,-1,1479.1,134.8,53.4,174.3,1\n699,-1,1604.4,140.3,70,184.1,1\n699,-1,1315.8,807,94.4,274,1\n699,-1,562.2,111.3,52.9,177,1\n699,-1,1711.3,454.8,99.4,211.4,1\n699,-1,1574.7,588.1,97.2,236,1\n699,-1,382.5,535.9,74.1,252.9,1\n699,-1,299.3,378.4,72.9,215.7,1\n699,-1,479.5,26.2,43.9,136.9,1\n699,-1,485.7,138.3,48.6,183.7,1\n699,-1,419.9,148.9,67.2,165.6,1\n699,-1,750.2,79.8,50.3,155.9,1\n699,-1,803.4,139.9,48.6,178.9,1\n699,-1,360.4,111.2,49.9,173.2,1\n699,-1,254.1,199.4,61,197,1\n699,-1,1026.9,1.3,67,91.4,1\n699,-1,408.4,22.2,57.2,161.8,1\n699,-1,305,212.9,58.1,179.9,1\n699,-1,1233.6,823.6,88.9,257.4,1\n699,-1,227.1,134.4,52.3,163.8,1\n699,-1,828.9,927.9,83.1,153.1,0.629\n701,-1,1221.7,30.1,61.8,118.3,1\n701,-1,687.1,206.5,79.3,113.4,1\n701,-1,1482,6.5,58.6,145.8,1\n701,-1,1604.1,140.5,70.9,182.7,1\n701,-1,1476.9,134.2,53.1,173.4,1\n701,-1,1711.2,456.1,96.9,208.5,1\n701,-1,562.2,110,52.8,178.8,1\n701,-1,299.7,380.1,73.2,214.3,1\n701,-1,1312.8,800.5,94.6,268.1,1\n701,-1,414.7,150.2,74.6,164.2,1\n701,-1,1575.1,587.6,96.9,235.2,1\n701,-1,384.1,537.6,70.2,251.4,1\n701,-1,485.8,138.9,47.9,182.5,1\n701,-1,802.7,140,48.3,177.1,1\n701,-1,1230.2,821.5,87.9,259.5,1\n701,-1,360.5,109.5,49.8,174.1,1\n701,-1,476.1,24.9,46.4,142.1,1\n701,-1,749.9,80.2,50.4,155.8,1\n701,-1,305.4,212.2,57.8,180.2,1\n701,-1,254.6,199.3,60.8,195.8,1\n701,-1,408.4,22.4,58.4,163,1\n701,-1,1021.5,2.3,62,88.4,1\n701,-1,227.4,133.4,52.8,165.2,1\n701,-1,831.1,929,83.8,152,0.486\n714,-1,1221.5,30.1,62.3,118.9,1\n714,-1,687,206.6,79.6,112.6,1\n714,-1,1480.7,7.8,58,144.7,1\n714,-1,553.8,111.6,59.3,177.4,1\n714,-1,1575.4,590.5,99.5,236.3,1\n714,-1,1474.1,122.2,51.8,176,1\n714,-1,1602,120.6,64.6,183.6,1\n714,-1,1711.9,455.3,95.2,209.4,1\n714,-1,479.8,157.2,51.9,180.5,1\n714,-1,412.1,168.2,72.3,163,1\n714,-1,390.4,546.8,81.1,241.7,1\n714,-1,297.7,400.2,75.6,216,1\n714,-1,359.6,109.3,50.5,175.9,1\n714,-1,259.6,194.3,57.2,198.6,1\n714,-1,1189.4,789,92.4,262.8,1\n714,-1,749.9,80.5,49.6,156.5,1\n714,-1,412.9,31.5,61.9,166.8,1\n714,-1,470.6,19.6,45.8,142.9,1\n714,-1,799.3,135.7,46.6,174.2,1\n714,-1,309.1,206.1,59.4,179.2,1\n714,-1,1275.2,770.4,93.1,270.3,1\n714,-1,233.7,133.4,50.3,167.2,0.999\n714,-1,975.5,1,80.1,81,0.125\n714,-1,856.6,933.5,78.3,147.5,0.051\n715,-1,1221.7,30.1,61.3,118.6,1\n715,-1,686.6,206.3,79.9,113.4,1\n715,-1,1480.8,8.2,57.6,144.2,1\n715,-1,554.9,112,58.4,176.3,1\n715,-1,1473.3,121.8,52.7,175.8,1\n715,-1,1576.3,589.1,98.3,236.2,1\n715,-1,479.9,156.3,51.6,182.2,1\n715,-1,1601.5,120.6,65.3,183.9,1\n715,-1,1709.9,456.8,98.8,207.6,1\n715,-1,413.9,168,69.5,162.9,1\n715,-1,298.3,400.7,75.9,217.6,1\n715,-1,391.5,549,84,241.5,1\n715,-1,360,109.8,50.4,175.8,1\n715,-1,260.8,194.2,56,198.8,1\n715,-1,469.7,19.2,47.5,141.6,1\n715,-1,750.3,80.3,49.3,156.7,1\n715,-1,1185.9,787.6,93.4,263,1\n715,-1,413,32.8,61.5,163.5,1\n715,-1,309.3,205.5,59.8,179.5,1\n715,-1,798.5,136.8,45.2,175.4,1\n715,-1,1275.5,773.7,89.5,260.7,1\n715,-1,233.3,133.7,50.9,164.5,1\n715,-1,860.4,935.8,74.8,145.2,0.096\n716,-1,1221.8,30.3,62,118,1\n716,-1,686.9,206,79.1,113.7,1\n716,-1,1480.3,7.9,58,144.3,1\n716,-1,553.3,112.9,59.8,176.5,1\n716,-1,1474,121.9,53,175.7,1\n716,-1,479.7,158.5,51.1,181.1,1\n716,-1,1711.1,457.6,95.4,206.7,1\n716,-1,1600.4,120.2,65.1,183.7,1\n716,-1,1575.5,590.3,98.1,235.3,1\n716,-1,413.8,169.4,68.9,164,1\n716,-1,299,402.9,74.9,214,1\n716,-1,390,547.2,87.2,243.5,1\n716,-1,260,193.2,56.8,199.3,1\n716,-1,359.6,108.4,51.4,177.1,1\n716,-1,469.1,16.8,48.1,141.8,1\n716,-1,1183.5,782.8,92.9,264.8,1\n716,-1,750.1,82.1,49.2,154.3,1\n716,-1,413.6,34.5,59.3,161.5,1\n716,-1,795.6,136.9,47.8,175.9,1\n716,-1,311,205.1,60.1,178.8,1\n716,-1,1273,765.5,89.6,263.7,1\n716,-1,234.6,132.3,50.3,168.5,0.999\n716,-1,861.6,937.3,74.5,143.7,0.073\n717,-1,1221.5,30.1,61.7,118.6,1\n717,-1,687,206,79.2,113.3,1\n717,-1,1479.7,7.7,59,145.3,1\n717,-1,553.2,113.5,60.4,177.3,1\n717,-1,1710.9,457.7,96,206.4,1\n717,-1,1474.3,119.7,51.7,179.7,1\n717,-1,479.4,158.2,51.2,181.5,1\n717,-1,1599,120,66.1,184.2,1\n717,-1,299.2,403,75.2,215.5,1\n717,-1,1575.1,590.1,98.6,236.3,1\n717,-1,413.3,171.2,68.3,161.6,1\n717,-1,390,548.3,91.1,241.8,1\n717,-1,260.7,191,56,201,1\n717,-1,360.2,111,51,172.8,1\n717,-1,414.6,35.9,59.7,160.8,1\n717,-1,1267.8,761.1,92.4,269,1\n717,-1,750,81.6,49,154.8,1\n717,-1,468.8,18.4,46.9,139.1,1\n717,-1,1183.5,781.3,88.2,267.6,1\n717,-1,794.5,135.8,48.3,178.9,1\n717,-1,311.5,207.2,62.4,175.7,1\n717,-1,234.4,132.4,50.1,169.5,0.999\n722,-1,1221.8,30.2,62.1,118.1,1\n722,-1,687.1,205.9,79.6,113.8,1\n722,-1,1480.7,7.3,59,145.3,1\n722,-1,1250.1,749.4,95.6,269.6,1\n722,-1,551.7,113.5,59.1,176.3,1\n722,-1,1475.4,112.6,52,173.8,1\n722,-1,1600,119.8,59.4,178.4,1\n722,-1,1573.7,590.7,100.6,233.9,1\n722,-1,1711.4,455.4,96.4,209.4,1\n722,-1,391.6,548.2,98.7,248.7,1\n722,-1,412.3,174,69.2,164,1\n722,-1,261.3,192.2,56.5,198.9,1\n722,-1,478.7,160.9,49.8,181.4,1\n722,-1,300.3,408.3,74.9,220.3,1\n722,-1,313.7,201.2,64.8,180.2,1\n722,-1,786.5,136.1,51.5,180.5,1\n722,-1,749.9,82.2,49.4,151.8,1\n722,-1,417.2,40,63,167.5,1\n722,-1,1172.9,773.7,87.2,273.6,1\n722,-1,361.3,109.1,46.9,170.7,1\n722,-1,465.8,14.2,46.9,139.8,1\n722,-1,236.1,134,50.6,169,0.998\n734,-1,1221,29.7,62.6,119.1,1\n734,-1,686.9,205.7,79,114.6,1\n734,-1,1480.3,7.9,60.2,147.4,1\n734,-1,257.8,188.9,57.9,195.3,1\n734,-1,1711,456.8,96.1,207,1\n734,-1,404.8,185.7,75.4,163.6,1\n734,-1,551.9,111.9,59.3,181,1\n734,-1,1469.7,108.8,51.6,168.7,1\n734,-1,297.6,422.6,75.7,226,1\n734,-1,782.7,137,54.4,178.3,1\n734,-1,1575.1,590.4,98.9,232.6,1\n734,-1,421.7,555.6,88.7,248.1,1\n734,-1,476.3,171.4,48.1,181.1,1\n734,-1,325.5,198,60.4,181,1\n734,-1,1598,102.5,59,181.2,1\n734,-1,1223.1,721.3,92.7,265.7,1\n734,-1,431.6,44.2,57.8,169.2,1\n734,-1,750.4,84.3,51,150.3,1\n734,-1,360.2,109.4,51.2,177.1,1\n734,-1,1149,747.7,84.3,260.5,1\n734,-1,318.8,1,48.4,133,0.997\n734,-1,237.7,141.5,52.8,164.3,0.973\n734,-1,290.7,135.7,42.5,163.9,0.321\n744,-1,1221.2,29.1,62.7,119.6,1\n744,-1,686.8,205.9,79.4,114.4,1\n744,-1,1463.5,100.7,54.7,163.2,1\n744,-1,255.6,182,62.7,202.5,1\n744,-1,780,137,58,176,1\n744,-1,1487,14.8,58.9,138.8,1\n744,-1,551.8,115.9,60.2,176.4,1\n744,-1,1574.4,589.1,100.8,235.2,1\n744,-1,1713.8,456.9,93.2,209.8,1\n744,-1,299.6,438.7,74,221.5,1\n744,-1,1600.1,100.5,57.4,179.9,1\n744,-1,469.4,179.1,51.8,185.7,1\n744,-1,331.3,200.1,57,173.5,1\n744,-1,403.6,195.5,68.9,169.1,1\n744,-1,439.8,53.4,58.5,168.7,1\n744,-1,452.9,555.3,89.6,257.8,1\n744,-1,1120.9,722.3,83,256.8,1\n744,-1,1197.5,701.2,86.8,269.1,1\n744,-1,358.8,112.6,51.7,175.1,1\n744,-1,750.3,83.8,50.4,148.5,0.999\n744,-1,258.8,1.8,48,119.9,0.99\n744,-1,291.3,128.5,47.1,164.1,0.982\n744,-1,393.8,52.5,47.3,167.4,0.432\n744,-1,237.6,151.2,51.1,158.5,0.229\n753,-1,1221.4,29.7,61.9,118.6,1\n753,-1,687.1,205.9,78.6,113.8,1\n753,-1,547.4,118,63.7,174.2,1\n753,-1,1462.3,95.9,54.1,164.2,1\n753,-1,780.8,134.8,62.8,178.2,1\n753,-1,1715.1,455.4,87.6,208.9,1\n753,-1,303.9,448.8,73.9,225.6,1\n753,-1,261.9,187.1,58.6,197.4,1\n753,-1,1575.8,589.2,99.2,233.8,1\n753,-1,1592.5,87.1,62.3,180.8,1\n753,-1,332,198,55,171.8,1\n753,-1,1494.6,17.2,57.5,139.1,1\n753,-1,462.9,188,53.3,189.2,1\n753,-1,402.1,198.5,66.1,173.8,1\n753,-1,447.8,63.8,55.1,167.4,1\n753,-1,474.1,567.5,94.4,249.3,1\n753,-1,1166.2,677.9,93.8,264.2,1\n753,-1,257.7,1,49.4,122.1,1\n753,-1,750.5,78,49.1,155.1,1\n753,-1,1107.4,709.2,77.7,256.7,1\n753,-1,358.7,108.1,50.3,174.5,0.999\n753,-1,236.6,140.6,50.9,155,0.998\n753,-1,397,61,56.7,167.5,0.997\n753,-1,291.1,128.1,45.1,164.6,0.973\n756,-1,1221.1,29.4,62.8,119.8,1\n756,-1,687,205.7,78.9,113.7,1\n756,-1,547,117.5,64.7,173.4,1\n756,-1,1716.2,454.5,84.7,210.8,1\n756,-1,781.8,134.6,63.5,177.5,1\n756,-1,1462.2,93.6,53.7,167.8,1\n756,-1,304.3,453.9,77.2,223.6,1\n756,-1,1574,589.3,102,234.8,1\n756,-1,489.7,567,87,248.5,1\n756,-1,264.4,183.5,58.9,200,1\n756,-1,461.7,188.3,51.6,189.7,1\n756,-1,331.7,196,55.7,174.8,1\n756,-1,400.1,199.4,66.5,176.1,1\n756,-1,1495.5,16.5,59,141.9,1\n756,-1,1588,88.3,62.9,178.3,1\n756,-1,1165.2,675.2,88.4,261.9,1\n756,-1,751.3,79.1,50.1,156,1\n756,-1,258.8,1,49.4,123.1,1\n756,-1,451.7,64.6,55.8,169.7,1\n756,-1,236.1,136.8,50.1,154.4,1\n756,-1,1099.7,704.1,82,247.4,0.999\n756,-1,398,63.2,57.7,172.5,0.999\n756,-1,360.2,107.3,49.4,171.9,0.999\n756,-1,293.2,137.1,41.7,159.4,0.343\n766,-1,1221.4,29.6,62.3,119.5,1\n766,-1,687,205.2,79.1,115.1,1\n766,-1,543.6,114.7,65.7,177.7,1\n766,-1,782.4,133.6,64.2,178.6,1\n766,-1,1721.6,453,77.1,213.3,1\n766,-1,1574.6,589.7,101.1,235.1,1\n766,-1,299.6,470.8,77.6,228.4,1\n766,-1,1453.5,81,54.3,169.2,1\n766,-1,272.9,176.3,56.7,197.3,1\n766,-1,395.8,212.2,70.9,173,1\n766,-1,329.6,191.5,55.1,180.2,1\n766,-1,457.6,196.9,51.9,186.7,1\n766,-1,751.1,77.9,50.7,157.5,1\n766,-1,1493.4,17.8,61.4,144.9,1\n766,-1,256.9,1.2,50.8,121.6,1\n766,-1,1574.7,82.5,65.7,177.2,1\n766,-1,518.5,569.7,91.6,246.5,1\n766,-1,234.6,135.3,49.6,163.4,1\n766,-1,461.8,67.7,59.2,173.5,1\n766,-1,1140.8,656,98.1,258.4,1\n766,-1,1077,677.8,80.2,256.9,1\n766,-1,358.8,111.4,54,172.6,0.999\n766,-1,403.6,68.5,58.2,168.6,0.999\n768,-1,1221.5,29.6,62.3,118.7,1\n768,-1,687.4,205.1,78.2,115.4,1\n768,-1,544.4,115.1,64.9,176.6,1\n768,-1,781.6,134.4,64.9,176.9,1\n768,-1,1574.8,589.9,101.6,235.3,1\n768,-1,1722,455.3,75.7,209.2,1\n768,-1,295.7,472.5,79.2,228.5,1\n768,-1,273.9,175.5,57.7,194,1\n768,-1,1493.2,17.1,60.1,148.1,1\n768,-1,396.4,211.4,69.5,171.8,1\n768,-1,328.9,192.1,57.4,175.4,1\n768,-1,454.3,197.3,54.5,190.8,1\n768,-1,1451.3,78,54.4,170,1\n768,-1,1135.1,651.3,96.5,258.2,1\n768,-1,751,78.9,51.2,155.2,1\n768,-1,1574.9,81.2,62.5,174.3,1\n768,-1,256.6,1.2,51,121,1\n768,-1,1072.3,678.6,81.1,252,1\n768,-1,462.2,70,61.5,170,1\n768,-1,234.1,136.9,50.1,160.7,1\n768,-1,523,570.6,91.1,248.2,1\n768,-1,358.5,108.7,53.9,173.1,0.999\n768,-1,405.6,72.1,57.6,167.5,0.999\n769,-1,1221.5,30,62,118.9,1\n769,-1,687.3,205.1,78.2,114.9,1\n769,-1,545.1,115,64.5,176.4,1\n769,-1,781.9,133.7,64.5,175.7,1\n769,-1,1722.6,452.2,76.2,214.6,1\n769,-1,1575.5,590.7,100.3,234.3,1\n769,-1,294.7,473.5,79.7,226.6,1\n769,-1,1139.1,651.4,87.4,254.5,1\n769,-1,274.2,175.6,57.6,192.4,1\n769,-1,1449.7,77,56,171.1,1\n769,-1,395.4,211.5,69.8,171.1,1\n769,-1,1492.9,17.5,59.4,145.9,1\n769,-1,328.5,191.8,57.9,174.9,1\n769,-1,453.7,199.9,55,189.1,1\n769,-1,256,1.1,51.4,122.1,1\n769,-1,751.1,76.1,51.3,157.4,1\n769,-1,462.6,69.7,62.6,173.2,1\n769,-1,233.6,137.6,50.1,160.5,1\n769,-1,1574.5,79.8,62.5,172.9,1\n769,-1,1069.6,673.4,80.4,255.8,1\n769,-1,524.1,569.9,89.8,246.9,1\n769,-1,358.5,107.6,54,178.5,0.999\n769,-1,407.2,73.4,56.8,166.1,0.999\n773,-1,1220.8,29.2,62.6,120,1\n773,-1,687.8,204.7,78.1,115,1\n773,-1,546.9,116.1,61.8,175.3,1\n773,-1,783.2,135.1,62.3,172.6,1\n773,-1,1722,453.6,76.3,212.2,1\n773,-1,1575.6,590.3,100.8,234.7,1\n773,-1,294.2,477.2,79.3,227.1,1\n773,-1,1491.9,19,59.7,149.3,1\n773,-1,1448.2,77.7,54.4,169.5,1\n773,-1,1573,76.2,61.4,175.1,1\n773,-1,452.8,206.9,53.6,185,1\n773,-1,390.4,212.3,72.4,172,1\n773,-1,328.2,188.8,57.9,177.8,1\n773,-1,750.7,74,52.3,158.5,1\n773,-1,467,71.9,61.3,175.5,1\n773,-1,1060.8,662,78.7,250.6,1\n773,-1,275.9,173.4,56.8,195,1\n773,-1,254.8,1.3,52.6,120.5,1\n773,-1,536.7,569.3,94.1,251.9,1\n773,-1,1134.4,636.1,79.9,258.9,1\n773,-1,232.9,138.2,50.5,162.7,1\n773,-1,411.7,77.4,58.3,169.6,0.999\n773,-1,356.9,110.1,52.6,174.9,0.998\n774,-1,1220.9,29.7,62.6,119.5,1\n774,-1,687.3,204.7,79.7,114.6,1\n774,-1,546.9,115.7,61.6,175,1\n774,-1,783.8,134.4,61.6,173.5,1\n774,-1,1723.1,453,76.2,213.7,1\n774,-1,1575.8,590.1,100.2,235,1\n774,-1,293.8,477.6,78.1,227.9,1\n774,-1,538.8,572.2,93.8,250.3,1\n774,-1,1491.4,18.2,59.6,148.6,1\n774,-1,1445.8,81.3,57.1,163.8,1\n774,-1,1572.2,74.8,61.1,176.7,1\n774,-1,451.8,206.6,52.9,186.1,1\n774,-1,389.2,213.6,72.8,173.1,1\n774,-1,750.2,75,52.2,157.9,1\n774,-1,276.6,173.9,57.2,195.4,1\n774,-1,467.4,76.9,62.3,172.8,1\n774,-1,328.7,189,56.1,176.2,1\n774,-1,233.2,135.2,51,165.4,1\n774,-1,1058.9,659.7,78.5,250.6,1\n774,-1,255,1.4,52.4,119.4,1\n774,-1,1129.4,635.1,81.2,259.9,1\n774,-1,412.6,78.6,57.7,166.6,0.999\n774,-1,356.8,109.8,53.1,177.5,0.997\n783,-1,1221.5,29.5,62.6,118.1,1\n783,-1,687.1,204.7,79.5,114.5,1\n783,-1,546.8,115.4,61.7,174.4,1\n783,-1,1724.2,452.4,75.1,213.3,1\n783,-1,783.3,131.6,55.1,176.3,1\n783,-1,1486.9,21.9,60.1,148.2,1\n783,-1,1574.7,590,100.3,235.4,1\n783,-1,292,496.4,78.3,231.1,1\n783,-1,1445.2,68,50.1,164.4,1\n783,-1,472.2,77.5,61.4,179.1,1\n783,-1,276.4,169,58.3,196.4,1\n783,-1,446.7,215,55.9,191.7,1\n783,-1,332.6,188.2,53.9,176.8,1\n783,-1,254.9,1,52.3,119.6,1\n783,-1,750.6,73.4,53.2,158.9,1\n783,-1,391,224.3,69.6,179.4,1\n783,-1,1109,626.4,80.7,245.2,1\n783,-1,234.1,131.9,50.2,167,1\n783,-1,422.3,80,55.3,168.4,1\n783,-1,1046.3,645.1,74,255,1\n783,-1,576.5,574.2,66.5,259.5,0.999\n783,-1,1571.5,73.4,59.1,173.3,0.999\n784,-1,1221.1,28.9,62.8,119.8,1\n784,-1,687.2,204.8,79.6,114.8,1\n784,-1,547.1,113.7,61,178,1\n784,-1,1487.6,21.4,59.3,149.7,1\n784,-1,1723.1,452.3,76.5,214.1,1\n784,-1,292.8,497.9,76.7,231.8,1\n784,-1,781.9,129.8,56.9,177.6,1\n784,-1,1575.2,590.5,100.5,233.8,1\n784,-1,1443.8,67.4,51,163,1\n784,-1,278.1,169.7,56.8,193.6,1\n784,-1,472.5,80.1,62.4,176.4,1\n784,-1,333.2,188.7,53.4,176.3,1\n784,-1,446.7,218.2,55.6,189.6,1\n784,-1,391.5,225.3,67.8,179.3,1\n784,-1,254.4,1,52.4,120,1\n784,-1,750.4,74.1,53.2,158.6,1\n784,-1,233.8,133.4,50.3,165.8,1\n784,-1,1106.6,621.4,80.6,243.8,1\n784,-1,1043.7,643.3,75,251.4,1\n784,-1,577.4,572.6,67,255.8,1\n784,-1,422.8,80.7,55.7,170.3,1\n784,-1,1569.7,71.9,59.9,172.8,0.977\n785,-1,1220.8,29.4,62.7,118.9,1\n785,-1,687.8,204.7,78.6,115.3,1\n785,-1,547.4,114.9,61.9,176.5,1\n785,-1,1722.7,452.1,77.3,214.8,1\n785,-1,1575.3,590.4,100.6,233.6,1\n785,-1,1486.2,24.3,59.4,147.8,1\n785,-1,291.8,498.6,78,231.3,1\n785,-1,782.9,129.1,53.3,178.3,1\n785,-1,277.7,170.1,58.5,193.5,1\n785,-1,474.1,80.2,61.3,178.3,1\n785,-1,1443,66.6,50.5,163.5,1\n785,-1,447.2,221.2,55.1,187.9,1\n785,-1,334.8,190.7,51.8,173.1,1\n785,-1,391.2,226.1,68.8,178.6,1\n785,-1,234.2,133,50.3,164.3,1\n785,-1,750.9,74.8,53.3,157.4,1\n785,-1,254.5,1,52.3,120,1\n785,-1,1104.6,620.2,80.7,244.6,1\n785,-1,1041.7,641.8,74.6,253,1\n785,-1,423.1,81.9,57.3,169.8,1\n785,-1,578.2,573.7,68.1,252.1,0.999\n785,-1,1569.4,70.9,60.1,171.5,0.83\n793,-1,1221.3,29.5,62.1,119.6,1\n793,-1,687.3,205.5,79,113.8,1\n793,-1,782.6,128.6,52.1,181.8,1\n793,-1,1723.1,452.2,75.8,215.2,1\n793,-1,549.6,115.3,59.8,177.1,1\n793,-1,1575,590.4,100.2,235.1,1\n793,-1,1485.1,27.8,59.5,147.9,1\n793,-1,290.4,507.4,78.7,234.9,1\n793,-1,277.1,167.9,58.5,194.9,1\n793,-1,477.7,95.4,60.2,173.3,1\n793,-1,750.1,68,55.7,164.1,1\n793,-1,232.8,134.8,51.1,165.6,1\n793,-1,1442.1,66.3,48.9,162,1\n793,-1,339.8,188.7,50.3,176,1\n793,-1,1085.1,603.4,96.1,258.5,1\n793,-1,445,226.3,54.4,188.1,1\n793,-1,392.8,231.9,64.8,179.1,1\n793,-1,1025,623,76.5,247.4,1\n793,-1,253.6,1.5,52.7,122,1\n793,-1,599.2,580.6,75,243.4,1\n793,-1,422.7,92.8,55.9,162.3,1\n793,-1,1597.7,1,54.5,123.3,0.999\n793,-1,447.3,1,46.4,91.7,0.997\n794,-1,1221.1,29,63,120,1\n794,-1,687,205.9,79.1,113.6,1\n794,-1,783.4,130.1,51,181.4,1\n794,-1,548.4,115,60.9,176.6,1\n794,-1,1723.1,451.7,75.6,215.9,1\n794,-1,289.9,509.4,78.6,235.2,1\n794,-1,1574.6,590.3,100.5,234.9,1\n794,-1,1484.4,27.7,59.3,147.5,1\n794,-1,478,96.4,60.4,172.7,1\n794,-1,277.4,165.9,58.5,197.4,1\n794,-1,749.8,71.9,56,159.6,1\n794,-1,232.8,131.6,51.9,168.7,1\n794,-1,253.4,1.3,53.4,122.1,1\n794,-1,340.1,188.3,50.9,177,1\n794,-1,1441.8,66.5,48.5,160.6,1\n794,-1,391.8,234.1,65.7,177.8,1\n794,-1,1602.4,1,53.1,125.6,1\n794,-1,443.5,225.4,55.3,188.9,1\n794,-1,1085.1,604,97.6,255.5,1\n794,-1,1022.4,620,78.1,250.5,1\n794,-1,423.2,93.3,55.5,162.5,1\n794,-1,447.4,1,45.2,90.5,0.999\n794,-1,601.7,580.8,75.1,245,0.999\n819,-1,1221.3,29.3,62.2,119.2,1\n819,-1,688,205.6,77.3,114.1,1\n819,-1,790.8,134.7,63.5,175.9,1\n819,-1,556.9,117.2,62.4,174.1,1\n819,-1,1723.9,452.4,74.5,214.7,1\n819,-1,275.3,551.7,78.8,242.3,1\n819,-1,1578.1,594.7,96.7,232.7,1\n819,-1,1629.6,1.3,52.4,151.6,1\n819,-1,438.8,247.7,56.1,196.9,1\n819,-1,283.5,163.4,65.9,196.7,1\n819,-1,1049.9,554.4,79.2,245.6,1\n819,-1,1428.2,45.4,51,162.3,1\n819,-1,1472.4,37.8,61.4,157,1\n819,-1,376.8,263,70.2,175.1,1\n819,-1,977.8,582.4,72.9,237.8,1\n819,-1,751.3,71.9,58.3,161.5,1\n819,-1,473.5,113.7,60.1,179.5,1\n819,-1,235.9,135.1,49.7,167.2,1\n819,-1,347.1,177.8,50.4,170.8,0.999\n819,-1,425.3,111.6,59.8,170,0.999\n820,-1,1221.7,29.3,62,119,1\n820,-1,687.8,205.6,77.6,114,1\n820,-1,790.3,135.1,64.7,174.9,1\n820,-1,276.3,552.7,77.6,243.3,1\n820,-1,556.7,116.4,62.2,174.4,1\n820,-1,1576,590.5,100.2,234.9,1\n820,-1,439.2,251.1,55.6,195,1\n820,-1,1723.8,453.2,74.5,214.1,1\n820,-1,1632,1.7,51.4,151.5,1\n820,-1,1048.8,554.2,81.8,243.7,1\n820,-1,284.2,163,68.4,195.3,1\n820,-1,376.7,263.7,69.6,174,1\n820,-1,1472,39.5,61.3,157.8,1\n820,-1,474.1,113.5,60.1,181.5,1\n820,-1,1428.2,46,50.1,158.5,1\n820,-1,751.3,72.1,58.2,161.9,1\n820,-1,235.6,135,50.6,166.2,1\n820,-1,975.5,579.3,72.3,235.2,1\n820,-1,425.7,112.9,58.4,173.4,0.999\n820,-1,346.6,175.6,52.1,175.3,0.999\n824,-1,1221.6,29.6,62.1,118.5,1\n824,-1,687.6,205.7,77.9,114.6,1\n824,-1,790.2,136.5,64.4,178,1\n824,-1,1038.1,549.3,94,241.7,1\n824,-1,1635.2,3.7,53.5,153,1\n824,-1,275.2,556.4,79.9,240.7,1\n824,-1,556.7,117.1,62.9,175.2,1\n824,-1,1723.6,452.8,75.1,214.6,1\n824,-1,1575.4,589.1,100.8,235.1,1\n824,-1,437.7,256.2,55.8,194,1\n824,-1,1476.4,43,57.8,156.7,1\n824,-1,1423.5,41.1,51.5,160,1\n824,-1,285.3,163.6,69.3,194.7,1\n824,-1,751.6,70.8,57.5,162.7,1\n824,-1,473.6,120.8,60.4,180,1\n824,-1,374.8,264.2,72.6,174,1\n824,-1,968.2,570,73.5,235.3,1\n824,-1,237.6,136.8,49.4,164.6,1\n824,-1,423.2,117.5,58.7,174.4,1\n824,-1,347.7,174.3,50,173.7,0.999\n833,-1,1221.1,29.3,62,118.9,1\n833,-1,687.2,206,78.6,113.1,1\n833,-1,791.7,136,69.6,179.1,1\n833,-1,272.3,573.6,82.3,243.7,1\n833,-1,558.8,115.1,61.1,175.5,1\n833,-1,1641.5,9.6,58.9,157.4,1\n833,-1,1574.8,589.5,102.8,234.8,1\n833,-1,1722.5,452.6,76.4,214.5,1\n833,-1,1475.1,47,59.6,158.3,1\n833,-1,752.5,71.4,56.5,163.9,1\n833,-1,1035.2,537.4,85.3,239.1,1\n833,-1,293.7,162.6,67,199.7,1\n833,-1,437.3,259.2,55.8,200,1\n833,-1,475.4,125.1,58.9,177.3,1\n833,-1,1422.9,39.9,49.4,155.9,1\n833,-1,360.6,274.2,82.3,180.8,1\n833,-1,238.6,134.9,51.3,161,1\n833,-1,954.4,559.6,71.6,236.1,1\n833,-1,421.7,122.3,56.8,175.6,1\n833,-1,253.8,1.2,53.3,121.5,1\n833,-1,356.1,167.9,37.8,174.5,0.571\n833,-1,1066.2,5.2,61.9,86.9,0.212\n840,-1,1220.9,29.4,62.5,119.6,1\n840,-1,687.6,206.1,78.4,113,1\n840,-1,793.4,138.4,75,176,1\n840,-1,557.2,117.9,60.9,173.8,1\n840,-1,1646.5,13.2,57.5,163,1\n840,-1,1722,452.6,77.2,214.3,1\n840,-1,266.6,583.4,83.7,248.5,1\n840,-1,1575.5,592,100.9,231.8,1\n840,-1,1470.9,58.9,59.9,154.7,1\n840,-1,752.1,70.6,56.9,163.7,1\n840,-1,353.8,278.8,82.1,178.7,1\n840,-1,436.9,267.3,56.2,203.6,1\n840,-1,239.3,129.2,52.5,171.7,1\n840,-1,1070.4,1.4,57.1,101.7,1\n840,-1,1417.6,32,53.4,159.4,1\n840,-1,475.4,136.1,59.2,178.6,1\n840,-1,296.1,161.8,69.9,194.4,1\n840,-1,254.8,1,54.7,120.5,1\n840,-1,943.5,540.6,70.1,237.1,1\n840,-1,1030.4,517.9,72.7,242.5,1\n840,-1,416.7,130.4,58,175.6,1\n848,-1,1221.4,30.1,62.6,118.4,1\n848,-1,687.6,205.9,78.6,114.1,1\n848,-1,794.6,139.7,78.8,174.1,1\n848,-1,1720.8,452.9,79.2,213.6,1\n848,-1,1576.9,592.7,100.5,234.7,1\n848,-1,559.3,115.6,58.9,175.1,1\n848,-1,1069.4,1,59.9,114.9,1\n848,-1,1470.6,61.2,60.4,154.3,1\n848,-1,296.1,160.5,73.3,197.8,1\n848,-1,265.3,593.6,82.3,244.8,1\n848,-1,752.9,72,55.2,161.4,1\n848,-1,1658,27.7,54,160,1\n848,-1,1415.2,29.3,54,157,1\n848,-1,352.5,290.1,73.2,180.3,1\n848,-1,240.1,132.4,52.5,166.1,1\n848,-1,932,532.8,70.8,236.2,1\n848,-1,435.4,274.5,54.8,198.3,1\n848,-1,472.9,136.7,60.6,182.5,1\n848,-1,1015.9,510.8,73.3,235.7,1\n848,-1,253.2,1.1,54.3,120.2,1\n848,-1,416.9,139.6,60.6,169.3,1\n848,-1,493.5,1,46.2,109.7,0.999\n851,-1,1221.6,29.9,62.1,119.1,1\n851,-1,687.2,206.1,79.1,113.3,1\n851,-1,795.1,139.8,79.1,174.1,1\n851,-1,1071.9,1.5,60.1,117.6,1\n851,-1,1721.1,452.7,78.4,213.6,1\n851,-1,559.4,115.9,58.9,175.4,1\n851,-1,1470.9,60.4,59.9,158,1\n851,-1,1575.4,590.5,102.5,234.4,1\n851,-1,1664.5,30.2,52.8,158.1,1\n851,-1,752.9,72.5,55,160.4,1\n851,-1,347.3,297.3,76.9,176,1\n851,-1,265.7,600.7,82.5,241.7,1\n851,-1,296.4,159.6,73.4,198.8,1\n851,-1,492.2,1.1,47.8,112.1,1\n851,-1,1414.8,29.1,53,153.3,1\n851,-1,238.8,132.1,54.9,164.9,1\n851,-1,929.2,526.5,69.9,231.5,1\n851,-1,253.6,1,54.9,121.1,1\n851,-1,1010.4,502.3,73.2,238.7,1\n851,-1,472.7,142.6,60.7,179.6,1\n851,-1,436.2,280,53.8,199.7,1\n851,-1,417,140.9,60.3,168,1\n861,-1,1221.4,29.8,62,119.1,1\n861,-1,687.2,206.3,79.7,113.2,1\n861,-1,271,611.6,88.4,248.5,1\n861,-1,486.1,1,49.4,118.5,1\n861,-1,1680.2,35.1,54.6,160.6,1\n861,-1,796.7,139,75.7,176.4,1\n861,-1,1472.7,69.8,60.5,154.4,1\n861,-1,342.2,302.3,77.4,181.2,1\n861,-1,1574.9,590.6,102.5,234,1\n861,-1,1721.2,453.1,79.2,212.7,1\n861,-1,559.5,116.7,58.7,172.5,1\n861,-1,1079.9,1,58.7,125,1\n861,-1,475.4,149.5,59.7,182.3,1\n861,-1,297.7,159.8,73.9,198.3,1\n861,-1,753.1,70.6,54.7,165,1\n861,-1,1414.1,21.5,50.6,151.5,1\n861,-1,254.6,1.2,54,121.6,1\n861,-1,432.5,295.4,55.7,195.6,1\n861,-1,994.1,494.4,85.5,239.4,1\n861,-1,240.3,134.2,53.3,164.2,1\n861,-1,415.8,150.3,60.2,174.5,1\n861,-1,1574.2,15.5,49.2,141.7,1\n861,-1,915.8,507.8,72,235.6,1\n864,-1,1221.2,29.6,62.2,119.1,1\n864,-1,687,206.4,79.8,112.8,1\n864,-1,484.1,1,50.1,120.3,1\n864,-1,796.2,138.9,77.2,175.8,1\n864,-1,273.7,616.4,86.8,250.6,1\n864,-1,1474.5,73.5,60.3,152.1,1\n864,-1,1083.2,1,56.9,128.5,1\n864,-1,341.4,306.1,79.1,182.5,1\n864,-1,1721.8,452.9,77.5,214.3,1\n864,-1,1574.7,590.9,103.5,234.2,1\n864,-1,1684.9,39.4,52.2,164.7,1\n864,-1,752.4,69.8,55.1,165.9,1\n864,-1,476.1,153.4,60.8,182.2,1\n864,-1,989.8,489.6,87.1,237.7,1\n864,-1,558.7,116.8,58.7,174.8,1\n864,-1,298.4,160,72.1,197.4,1\n864,-1,431.6,296.2,55.8,196.9,1\n864,-1,254.7,1.1,54.6,120.4,1\n864,-1,1576.6,19,48.8,140.7,1\n864,-1,239.7,131.9,52,167.7,1\n864,-1,1414.5,19.7,51.1,153.6,1\n864,-1,415.7,153.7,59.8,176.8,1\n864,-1,912.2,504.6,70.4,234.3,1\n865,-1,1221.4,29.6,62.1,118.9,1\n865,-1,686.8,206.1,79.9,112.9,1\n865,-1,483.1,1.5,50.4,119.3,1\n865,-1,796.3,139.1,77.5,175.7,1\n865,-1,1474.3,72.7,60.4,154.6,1\n865,-1,1685,41.4,53.2,163.5,1\n865,-1,1084.1,1,56.7,129.7,1\n865,-1,274.3,618.4,86.5,252.1,1\n865,-1,1574.8,590.9,103.2,234.1,1\n865,-1,339.9,307.2,80.9,183.1,1\n865,-1,988.5,484.6,87.5,237.9,1\n865,-1,476.9,152.5,59.9,183.3,1\n865,-1,1721.5,452.4,77.4,215.2,1\n865,-1,558.6,116.3,59.1,176.3,1\n865,-1,752.7,68.8,54.5,166,1\n865,-1,299.2,160.4,71.6,198.1,1\n865,-1,1577.2,18.1,48.1,141.6,1\n865,-1,240.1,134.5,52.1,164.9,1\n865,-1,431.9,297.1,53.7,195.5,1\n865,-1,253.9,1.4,54.7,120.3,1\n865,-1,1415.2,17.4,50.3,155,1\n865,-1,911.7,502.4,70,233.8,1\n865,-1,415.4,156.2,60.2,177.3,1\n865,-1,358.8,168.5,35.8,167.2,0.074\n866,-1,1221.5,29.7,62,118.6,1\n866,-1,687.3,206.5,79,112.6,1\n866,-1,482.8,1.4,49.4,122.9,1\n866,-1,795.6,139.6,78.3,175,1\n866,-1,1473.7,73.1,61.1,153.1,1\n866,-1,1085.4,1,55.3,131.7,1\n866,-1,1575.5,590.6,102.6,234.6,1\n866,-1,988.6,482.1,85.7,237.7,1\n866,-1,1721.6,453.2,78,213.9,1\n866,-1,1686,43.1,52.3,163.8,1\n866,-1,476.6,154.7,60.5,182.6,1\n866,-1,274.9,619.5,86.7,254,1\n866,-1,558.4,116.4,59.3,176.8,1\n866,-1,339.6,308.4,81,182.1,1\n866,-1,1578.4,18.2,47.8,142.2,1\n866,-1,299.7,161,70.4,195.8,1\n866,-1,752.7,70.5,55,163.5,1\n866,-1,431.8,297.5,54.6,194.4,1\n866,-1,240.4,134.4,51.9,164.4,1\n866,-1,1414.2,16.9,51.1,154.8,1\n866,-1,254.5,1.1,54.2,120.3,1\n866,-1,415.8,154.8,58.8,174.2,1\n866,-1,909.3,499.5,70.4,230.8,1\n866,-1,358.3,169.7,35.1,164.5,0.052\n870,-1,1221.4,29.6,61.9,118.8,1\n870,-1,687.4,206.1,78.8,113.5,1\n870,-1,481.2,1.8,47.9,124.8,1\n870,-1,795.5,137.8,77.5,177.2,1\n870,-1,1088,2.3,54.9,137,1\n870,-1,1477,75.4,58.9,156.1,1\n870,-1,336.1,312.6,84.4,181.2,1\n870,-1,1720.7,453.8,79.2,212.3,1\n870,-1,1575.9,591.4,102.1,234.9,1\n870,-1,1688,48.2,54.1,162.8,1\n870,-1,275.9,628,88.7,256.5,1\n870,-1,557.2,116.3,60.2,175.4,1\n870,-1,477.6,157.6,59.8,184.9,1\n870,-1,989.4,472.4,76.4,233.6,1\n870,-1,1580.3,20.1,49.2,147.1,1\n870,-1,300.1,161.5,69.4,193.1,1\n870,-1,903.8,489.9,70.6,225.5,1\n870,-1,253.6,1,54.9,119.5,1\n870,-1,752.5,69.8,55.1,164.5,1\n870,-1,239,132.4,52.8,166.7,1\n870,-1,1417.2,17.9,49.5,151.5,1\n870,-1,430.1,300.2,57.4,207,1\n870,-1,412.9,158,58.8,176.5,1\n871,-1,1221.4,29.4,62.1,118.6,1\n871,-1,687.3,206.3,78.9,113.5,1\n871,-1,794.6,138.3,79.1,176.4,1\n871,-1,1087.4,2.3,55.9,138.7,1\n871,-1,1477.2,78.8,58.7,150.6,1\n871,-1,481.5,1.2,47.2,125.8,1\n871,-1,333.9,313.1,86.9,181.3,1\n871,-1,276,630.2,88.8,259,1\n871,-1,1575.5,590.1,103.4,235.4,1\n871,-1,1689.9,47.7,52.9,162.4,1\n871,-1,1723,453.5,76.5,213,1\n871,-1,1580,20.6,50.2,148.6,1\n871,-1,300.9,161.4,69.7,194.8,1\n871,-1,476.8,157.3,62.1,191.1,1\n871,-1,558.2,117.6,59.1,176.5,1\n871,-1,988.5,472.9,74.7,232.4,1\n871,-1,1417.6,14.6,50.2,154.9,1\n871,-1,753.1,72.7,54.2,161.8,1\n871,-1,253.5,1,54.8,120.5,1\n871,-1,902.2,487.2,71.6,228.7,1\n871,-1,238.4,133.1,53.2,166.8,1\n871,-1,429.6,303,56.9,203.7,1\n871,-1,412.1,159,58.1,177.7,1\n878,-1,1221.4,29.2,62.1,118.9,1\n878,-1,686.7,205.9,79.7,114,1\n878,-1,1085.6,1,62.5,152.5,1\n878,-1,1479.8,84.2,59.3,156.8,1\n878,-1,794.4,138.1,75.8,175.1,1\n878,-1,476.9,1.3,48.1,129.5,1\n878,-1,1721.8,453.9,78.2,213.9,1\n878,-1,1575,590.2,103.7,234.8,1\n878,-1,559.2,117.2,58.4,176.1,1\n878,-1,284.6,640.8,84.6,257.9,1\n878,-1,300.8,163,70.1,194.3,1\n878,-1,897.1,479.9,70.9,232.7,1\n878,-1,478.9,168.3,61.9,179.8,1\n878,-1,333.5,319.7,83,184.1,1\n878,-1,1576.4,31.6,56.2,150.9,1\n878,-1,1420.3,5.4,51.8,153.9,1\n878,-1,752.9,71.4,55.4,163.3,1\n878,-1,1695.1,52.7,50.8,170.1,1\n878,-1,986.1,464.3,67.1,231.3,1\n878,-1,252.9,1.3,54.3,121.8,1\n878,-1,407.9,164.2,58.9,177.5,1\n878,-1,428.8,305,55.9,205.8,1\n878,-1,240.1,130.8,51,168.1,1\n878,-1,1761.4,682.5,94.1,234.4,1\n878,-1,1499,5.7,55.3,157,0.536\n879,-1,1221.2,29.4,62,119.3,1\n879,-1,687.2,206,78.9,113.3,1\n879,-1,1086,1,62,153.7,1\n879,-1,1479.3,88.2,59,153.6,1\n879,-1,794.7,139.3,73.9,173.8,1\n879,-1,476.6,2.5,47.1,128.4,1\n879,-1,1722.1,452.6,78,216.1,1\n879,-1,1575.1,589.6,103.3,236,1\n879,-1,301.8,162.1,70.8,195.6,1\n879,-1,558.7,117,59.2,177.1,1\n879,-1,284.9,641.7,84,257,1\n879,-1,895,479.4,71.7,232.1,1\n879,-1,479.4,168.7,60.9,180.7,1\n879,-1,334.9,322.5,81.7,183.7,1\n879,-1,1577.3,31.8,55.5,150.6,1\n879,-1,1420.9,4.5,52.3,155.7,1\n879,-1,1694.6,56.4,51.3,166.7,1\n879,-1,753,72,56,162.7,1\n879,-1,984.1,461.8,69.3,231.5,1\n879,-1,253.4,1,54.2,123.1,1\n879,-1,428.8,307.1,55.4,204.4,1\n879,-1,407.4,166.4,58.8,177.8,1\n879,-1,240.2,129.7,51.5,168.4,1\n879,-1,1758.8,682.6,93.7,235.8,1\n879,-1,1498.5,6.4,55.7,152.2,0.681\n881,-1,1221.1,29.6,62.4,118.7,1\n881,-1,1086.8,1,62.3,154.9,1\n881,-1,686.8,206.1,79.3,113.6,1\n881,-1,1478.9,87.6,59.7,153.7,1\n881,-1,794.6,139.6,73.1,173.9,1\n881,-1,475.3,2,47.9,133,1\n881,-1,1575.3,590.3,103.4,235.6,1\n881,-1,301.7,161.3,70.1,197.3,1\n881,-1,1722.2,454.1,78.2,213.5,1\n881,-1,286.5,645.1,86.5,248.6,1\n881,-1,558.8,116.1,58.4,176.7,1\n881,-1,479.4,171.1,60.5,181.9,1\n881,-1,893.8,475.8,70.4,231.6,1\n881,-1,333.4,325.4,82.2,186.7,1\n881,-1,1696.2,53.5,54.9,171.2,1\n881,-1,1578,32.9,56.2,149.7,1\n881,-1,753.3,72.1,55.5,162.9,1\n881,-1,981.8,460,68.7,231,1\n881,-1,1422.4,4.4,50.6,155,1\n881,-1,427.3,309.1,57.5,204.7,1\n881,-1,253.8,1,53.5,122.5,1\n881,-1,406.7,168.2,59.7,180.1,1\n881,-1,240.1,130.7,50.8,168.6,1\n881,-1,1754.6,682.9,93.9,233.4,1\n881,-1,1496.7,1.6,56.3,150.7,0.999\n887,-1,1220.9,29.6,62.1,119.4,1\n887,-1,1481.8,87.6,59.7,158.3,1\n887,-1,686.9,206.2,79.4,113.7,1\n887,-1,1098.5,2.6,57,157.9,1\n887,-1,793.7,139.5,75.6,173.7,1\n887,-1,332.7,335,80.8,182.3,1\n887,-1,1574.1,591.1,104.4,234.6,1\n887,-1,292.5,656.2,81.2,249.2,1\n887,-1,1702.4,57.2,53.3,171,1\n887,-1,302.1,160,69.3,198.3,1\n887,-1,1723,452.9,76.7,215.4,1\n887,-1,558.8,118,58.4,172.8,1\n887,-1,478,169.6,63.6,189.7,1\n887,-1,753.4,71.1,53.9,164,1\n887,-1,425,319.7,57.3,203.2,1\n887,-1,973.5,446.8,74.5,227.6,1\n887,-1,890.2,463.9,68.4,224.6,1\n887,-1,255.1,1.4,53.7,120.3,1\n887,-1,472.6,1.4,47.5,139.3,1\n887,-1,1424.4,4.3,51.4,154,1\n887,-1,1582.6,34,55.8,158.2,1\n887,-1,240,132.1,53.6,167.6,1\n887,-1,405.3,169.5,57.6,182.6,1\n887,-1,1751.9,681,89.6,236.9,1\n887,-1,1494.5,1,61.9,147.1,1\n887,-1,403.1,59.2,58.5,178.5,0.982\n887,-1,1357.3,935.7,92.4,145.3,0.754\n887,-1,313.5,5.2,40.1,119.1,0.157\n888,-1,1221.3,29.3,61.9,120.2,1\n888,-1,687,205.8,79.4,114.4,1\n888,-1,1480.8,88.1,61.2,159.3,1\n888,-1,1100.2,3.7,56.2,159,1\n888,-1,793.1,138.4,76.4,174.5,1\n888,-1,332.1,335.5,81.6,182.4,1\n888,-1,1702.3,57.8,55.4,171.5,1\n888,-1,1722.8,453,77.4,215.1,1\n888,-1,478.5,173.1,63,187.9,1\n888,-1,1574.4,591.5,104.3,234.2,1\n888,-1,300.4,159.5,70,198.4,1\n888,-1,558.5,117.6,58.6,173.7,1\n888,-1,972.3,444.7,73.5,228.2,1\n888,-1,291.7,656.9,84.1,251.4,1\n888,-1,472.6,1.4,48.1,140.3,1\n888,-1,1585.8,36.2,54,157.3,1\n888,-1,753.6,71.8,53.7,163.1,1\n888,-1,1424.4,4.6,51.8,153.4,1\n888,-1,424.1,322.2,57.7,203.5,1\n888,-1,889.8,461.3,68.7,224.6,1\n888,-1,255.2,1.5,53.8,120.8,1\n888,-1,1749.7,681.7,89.5,235.7,1\n888,-1,240.1,132.6,53.4,167.8,1\n888,-1,405.7,170.7,58,181.5,1\n888,-1,1493.6,1,63,146,1\n888,-1,404.6,58.6,59.6,173.6,0.996\n888,-1,1354.6,931.5,93.8,149.5,0.831\n888,-1,313.2,1.9,43.5,123.8,0.804\n888,-1,356,169.1,36.5,158.4,0.073\n890,-1,1221,29.8,62.4,119.4,1\n890,-1,686.6,205.9,80.3,114.1,1\n890,-1,1101.8,4.9,55.5,159,1\n890,-1,1481.3,93.2,59.5,154.6,1\n890,-1,793.4,139.4,75.6,173.6,1\n890,-1,479.3,179.7,61.7,181.4,1\n890,-1,1704.6,59.4,53.8,172.3,1\n890,-1,332.9,336.5,81,181.6,1\n890,-1,1574.7,591.5,104.2,234.8,1\n890,-1,1722,455.1,78.1,212,1\n890,-1,557.9,117.8,59.1,173.9,1\n890,-1,300.1,160.3,70.5,196.9,1\n890,-1,294.6,662.4,82.7,248.4,1\n890,-1,423.5,325,57.9,203.8,1\n890,-1,470.7,1,50,140,1\n890,-1,753.6,71.5,53.6,162.5,1\n890,-1,887.6,460.6,70.8,223.6,1\n890,-1,1425.5,3.2,51.2,153.4,1\n890,-1,1588.3,38.5,51.9,153.5,1\n890,-1,254,1.6,54.3,119.9,1\n890,-1,970.8,442.6,79.4,230.4,1\n890,-1,1748.6,681.4,88.6,234.7,1\n890,-1,240.4,132.7,54.1,168.7,1\n890,-1,403.6,172,57,178.5,1\n890,-1,1493.4,1,63.6,146.8,1\n890,-1,406.8,54.3,60,175.6,0.999\n890,-1,315.1,1.7,44.4,123.7,0.999\n890,-1,1350.5,923.8,92.6,157.2,0.961\n890,-1,360.7,166.9,37.4,164.1,0.524\n893,-1,1221.3,29.6,62.2,118.9,1\n893,-1,687.1,206,79,114,1\n893,-1,1104.1,12.2,55.5,156.3,1\n893,-1,1483.1,93.7,58.9,156,1\n893,-1,479.6,186,62.1,178.5,1\n893,-1,793.5,139.2,75.4,173.5,1\n893,-1,1576.2,593.3,102.4,235.6,1\n893,-1,298.6,665.7,82.9,249.5,1\n893,-1,558.4,117.1,59,174.8,1\n893,-1,1721.2,455,78.5,212.1,1\n893,-1,1425.7,1,52,154.8,1\n893,-1,469.9,1,51,146.6,1\n893,-1,965.7,443.4,84.2,229.1,1\n893,-1,336.1,342.4,79.5,180.6,1\n893,-1,753.2,70.2,55.1,164.1,1\n893,-1,421.5,328.1,56.8,204.1,1\n893,-1,1707.7,63.8,53.1,176.5,1\n893,-1,1593.1,47.2,50,154.3,1\n893,-1,1748.2,680.6,88.6,236.3,1\n893,-1,301.8,161.2,67.6,192,1\n893,-1,884.8,455.9,68.1,227.9,1\n893,-1,254.2,1.4,54.1,119,1\n893,-1,241.3,133.1,56,169.9,1\n893,-1,402.7,176.4,55,179.9,1\n893,-1,314.1,1.4,47.1,125.8,1\n893,-1,1495.3,1,62.7,147.8,1\n893,-1,412.6,58.5,56,169.9,0.999\n893,-1,1339.4,921.9,99.3,159.1,0.975\n893,-1,352.1,165.8,43.3,176.1,0.658\n894,-1,1221.3,29.9,62.1,119.4,1\n894,-1,687.2,206.1,79.1,114.5,1\n894,-1,793.8,139.3,77,174.1,1\n894,-1,1483.9,97.2,58.9,152.9,1\n894,-1,1105.1,13.7,55.2,156.8,1\n894,-1,479.7,186.6,61.7,177.8,1\n894,-1,297.7,667.1,85.1,250,1\n894,-1,1574.5,590.5,104.5,235,1\n894,-1,1721.2,454.9,78.6,211.8,1\n894,-1,558.7,116.8,58.7,174.2,1\n894,-1,1426.2,1,51.7,154.1,1\n894,-1,753.3,70,55,164.4,1\n894,-1,469.8,1,51.6,147.5,1\n894,-1,335.9,343,81.2,182.9,1\n894,-1,421.1,329.2,56.6,203.8,1\n894,-1,965.8,439.5,86.7,233,1\n894,-1,302.1,160.7,67.1,193.2,1\n894,-1,1707.9,66.2,54.2,176.8,1\n894,-1,884.4,455,67.2,227.5,1\n894,-1,1593.7,46.4,50.3,156.4,1\n894,-1,240.2,132.2,56.7,170.2,1\n894,-1,253.8,1.3,54.5,119.1,1\n894,-1,1747.1,680.9,91.2,234.6,1\n894,-1,400.7,178.6,56.2,180.6,1\n894,-1,313.9,1,48,127.2,1\n894,-1,1497.2,1,60.8,148.6,1\n894,-1,413.4,57.2,55.1,174.7,0.999\n894,-1,1336.4,921,101.3,160,0.989\n894,-1,354.6,167.9,41.8,172.3,0.477\n900,-1,1221.5,30.5,61.7,118.9,1\n900,-1,478.4,186.7,63.3,182.6,1\n900,-1,687.1,206.3,79.2,114,1\n900,-1,297.7,671.8,94.3,256,1\n900,-1,793.6,140.4,75.5,171.4,1\n900,-1,1429.7,1,50.6,145.3,1\n900,-1,1486.6,104.3,56.6,146.7,1\n900,-1,560.2,117.1,57,171.3,1\n900,-1,1721.1,452.7,78.3,214.6,1\n900,-1,1597.1,49.6,51.2,161.1,1\n900,-1,392,189.5,58.5,174.4,1\n900,-1,1574.3,590,103.3,237,1\n900,-1,303,162.4,66.8,192.8,1\n900,-1,1110.6,22.1,53.8,155.9,1\n900,-1,1710.6,80.3,55.1,168.4,1\n900,-1,968.9,426.2,79,228.2,1\n900,-1,337.4,354.1,77.3,185.3,1\n900,-1,753.7,72.8,54.7,160.8,1\n900,-1,469.1,3.8,50.9,149.3,1\n900,-1,420.1,332.3,54.7,203.5,1\n900,-1,877.4,445,66.7,218.9,1\n900,-1,1746.3,678.8,92.8,239.3,1\n900,-1,254.7,1,52.1,118.4,1\n900,-1,242.8,133.9,56.2,168.3,1\n900,-1,314.2,1,48.4,129.6,1\n900,-1,1501,1.3,57.9,145.2,1\n900,-1,418.2,58.3,54.5,178.3,1\n900,-1,1329.1,898.2,89.6,182.8,1\n903,-1,1221.7,30.1,60.9,119.3,1\n903,-1,477.6,191.2,63.8,185.3,1\n903,-1,686.8,206.1,79.6,113,1\n903,-1,793.9,140.7,76.1,172.4,1\n903,-1,299.9,678.6,94.9,257.2,1\n903,-1,1431.4,1,49.2,146.2,1\n903,-1,1484.6,104.5,57.6,147.9,1\n903,-1,1574.5,590.6,103.5,235,1\n903,-1,1722.2,453.9,77.7,213.2,1\n903,-1,388.9,190.6,57.8,176.4,1\n903,-1,1597,51.7,52.6,161.3,1\n903,-1,558.9,114.9,57.2,174.2,1\n903,-1,302,162.1,68.6,197.4,1\n903,-1,331.8,352.2,82.2,184.5,1\n903,-1,1110.7,22.3,57.8,158.7,1\n903,-1,1712.5,83.4,56,166.4,1\n903,-1,470.5,3.8,49.9,149.4,1\n903,-1,971,418.3,69.3,231.1,1\n903,-1,1745.2,679.4,94.3,240,1\n903,-1,752.8,74.7,56,158.1,1\n903,-1,875.3,439,67.7,220.9,1\n903,-1,418.2,334.6,57.6,209,1\n903,-1,254,1,53.6,118.8,1\n903,-1,1503,2.8,56.3,140.9,1\n903,-1,242.6,133.8,57.1,168.1,1\n903,-1,1320.1,887.2,96,193.8,1\n903,-1,313.6,1,46.9,130.5,1\n903,-1,419.5,62.7,53.2,175,1\n913,-1,1221.8,30.1,61.3,119.3,1\n913,-1,686.5,206.2,79.6,113.5,1\n913,-1,469,202.4,67.9,189,1\n913,-1,794,139.4,75.4,172.9,1\n913,-1,1431.8,1,49.2,139.5,1\n913,-1,1111.4,35.1,62.6,162.9,1\n913,-1,1575.5,590,103.7,235.9,1\n913,-1,557.7,114.5,57.8,175,1\n913,-1,1301,864.6,95.7,216.4,1\n913,-1,1722.5,452.3,77.6,215,1\n913,-1,1476.7,105.7,62.9,156.8,1\n913,-1,328.7,363.1,83.6,192.7,1\n913,-1,871.5,426.6,62.1,223.5,1\n913,-1,307.6,697.4,89.3,266.6,1\n913,-1,414.6,348.5,58.1,207.6,1\n913,-1,752.3,74,56,159.7,1\n913,-1,1602.3,65.2,52.8,161,1\n913,-1,301.5,163.4,70.1,199.2,1\n913,-1,377.7,196.6,58.8,177.9,1\n913,-1,241.2,134.1,56.2,164.5,1\n913,-1,421.9,65.8,59.3,177.2,1\n913,-1,963.2,410,65,223.9,1\n913,-1,1746.9,681,96.6,241,1\n913,-1,1719.1,91.2,54.9,172.1,1\n913,-1,469.5,15,50.2,148.1,1\n913,-1,313,1.4,47.8,131.9,1\n913,-1,253.4,2,54.6,119.4,1\n913,-1,1501.2,2.2,57.9,134.2,1\n919,-1,1221.6,30,61.8,119.4,1\n919,-1,685.8,206.2,81.2,113.4,1\n919,-1,794.3,141.2,74.3,171.1,1\n919,-1,1118.6,34.4,58.5,167.2,1\n919,-1,1291.1,840.4,97.1,240.6,1\n919,-1,1574.7,589.1,104.3,236.5,1\n919,-1,557.8,117.2,57.7,170.7,1\n919,-1,461.3,202.8,68.1,189,1\n919,-1,1476.1,107.3,63.6,157.7,1\n919,-1,1722.6,451.5,76.9,217.4,1\n919,-1,307.6,708.5,88.7,257.6,1\n919,-1,1609.2,69.5,52.9,163.8,1\n919,-1,1432.5,2.8,47.2,131.4,1\n919,-1,751.5,74.1,55.4,159.1,1\n919,-1,327.4,371.6,80.6,190.5,1\n919,-1,954.7,396.8,71.9,223.9,1\n919,-1,866.2,416.7,65.5,217.6,1\n919,-1,408.8,352.6,59.5,211.1,1\n919,-1,301.1,162.2,69.3,199.5,1\n919,-1,1725.9,96.6,53.7,170.8,1\n919,-1,1494.7,1.4,60.9,132.7,1\n919,-1,375.2,207.3,57.7,174.6,1\n919,-1,240.5,133.5,54.5,166.3,1\n919,-1,1746.8,675.5,97.3,245.2,1\n919,-1,469.7,16.4,51.8,150.9,1\n919,-1,423.4,65.4,62.9,176.3,1\n919,-1,253.8,1.7,54.5,122.2,1\n919,-1,313.5,1.8,49.4,132.9,1\n920,-1,1222,30.5,61.1,118.5,1\n920,-1,686.4,206.2,80.1,113.5,1\n920,-1,794,140.9,75.2,171.9,1\n920,-1,1119.9,38,58.7,165.8,1\n920,-1,461,205.2,67.2,190.8,1\n920,-1,1290.1,837.6,94.7,243.4,1\n920,-1,1476.3,107.7,63.3,161.1,1\n920,-1,1574.9,589.9,103.3,235.2,1\n920,-1,1611.3,72,51.6,162.1,1\n920,-1,1720.9,451.9,79.3,215.5,1\n920,-1,557.1,117,57.5,171,1\n920,-1,954.4,392.6,72.2,227.3,1\n920,-1,1430.7,2,47.6,132.6,1\n920,-1,751.4,73.3,56,160.5,1\n920,-1,330.7,372.2,81,190.7,1\n920,-1,307.9,710.9,88.7,255.2,1\n920,-1,301.2,162.4,70.3,199.3,1\n920,-1,866.6,414.6,64.2,217.6,1\n920,-1,409.1,355.6,57.8,209.7,1\n920,-1,1494.3,1.1,60.9,130.5,1\n920,-1,1727,97,53.9,172.1,1\n920,-1,240.3,133.5,54.9,165.3,1\n920,-1,374.3,208.4,56.9,174.6,1\n920,-1,470,16.1,52.5,152.1,1\n920,-1,1747.5,678.2,94.6,244.8,1\n920,-1,423,66,63.1,178.2,1\n920,-1,253.5,2.1,54.2,121.3,1\n920,-1,313.6,1.8,48.1,133.2,1\n936,-1,1221.5,30,62,119.3,1\n936,-1,686.6,206.4,79.8,113.1,1\n936,-1,793.5,140.1,74.7,172.9,1\n936,-1,445.2,217.9,68,190.8,1\n936,-1,1126.6,55.2,63.5,172.1,1\n936,-1,1485.3,1,61.2,123.4,1\n936,-1,1478.1,122.6,59.3,160.2,1\n936,-1,1621.7,86.7,56.8,168.3,1\n936,-1,554.8,115.4,58.8,174.4,1\n936,-1,1574.4,587.1,103.8,238.4,1\n936,-1,1720.1,454.5,78.5,214.3,1\n936,-1,749.5,69.1,56.7,164,1\n936,-1,474.6,24.4,55.8,154.5,1\n936,-1,238.5,135.2,57,166.3,1\n936,-1,944,371.7,73.8,221,1\n936,-1,319.5,737,92.5,263,1\n936,-1,328.4,390.7,79.7,190,1\n936,-1,1263.8,793.4,97.2,279.8,1\n936,-1,859.1,391.5,64.8,215.2,1\n936,-1,1738.7,118.7,56.8,173.9,1\n936,-1,1423.1,3.2,45.4,118.7,1\n936,-1,396.6,371.8,65.5,213,1\n936,-1,304.1,161.8,67.7,199.7,1\n936,-1,1746.2,675.1,91,249.3,1\n936,-1,360.3,222.2,60.2,181.5,1\n936,-1,255.4,1,52.6,120.6,1\n936,-1,432.2,69.8,55.5,178.6,1\n937,-1,1221.4,29.8,61.5,119.5,1\n937,-1,686.6,206.2,79.8,113.4,1\n937,-1,1126.2,56.7,63.8,171.8,1\n937,-1,793.7,139.2,74.9,174.4,1\n937,-1,445.1,218.7,69.1,188.9,1\n937,-1,1485.4,1,61.3,123.1,1\n937,-1,1477.3,122.6,59.8,159.3,1\n937,-1,1623.2,88.5,56.5,168.5,1\n937,-1,1575.1,588,103.1,237.3,1\n937,-1,556,116.5,57.8,173.6,1\n937,-1,1721,455,78.4,212.1,1\n937,-1,238,135.7,57.9,166,1\n937,-1,749.2,68.7,56.9,164.8,1\n937,-1,474.9,25.4,55.4,153.2,1\n937,-1,320.9,738.3,91.6,263,1\n937,-1,329.6,391.9,78.6,187.8,1\n937,-1,1739.9,119,57.3,177,1\n937,-1,1746.1,675.4,91.9,248.6,1\n937,-1,858.3,389.1,65.1,215.5,1\n937,-1,1421.9,2.4,45.4,119,1\n937,-1,944.9,370.4,70.7,222.1,1\n937,-1,1262.9,790.3,96.8,283.6,1\n937,-1,398.1,375,63,215.1,1\n937,-1,305.1,161.4,67.2,198.5,1\n937,-1,359,223.5,60.3,183.3,1\n937,-1,255.2,1,52.6,121.2,1\n937,-1,433,70.7,55.3,180.1,1\n940,-1,1221.6,29.7,62.2,119.5,1\n940,-1,686.5,206.4,79.9,113.2,1\n940,-1,793.9,139.2,74.5,174.2,1\n940,-1,443.3,223.5,68.4,189.2,1\n940,-1,1476.5,125.1,60.4,160.5,1\n940,-1,1485,1.1,62.2,120.2,1\n940,-1,1129.7,63.7,63.8,169.8,1\n940,-1,1574.8,588.3,103.8,237.9,1\n940,-1,555.1,116.8,57.4,172.3,1\n940,-1,1720.2,455.3,79.2,212.2,1\n940,-1,750.1,69.8,56.5,163.2,1\n940,-1,1624.7,94.5,57,169.8,1\n940,-1,322.9,744.8,94,267,1\n940,-1,238,134.1,57.9,169.8,1\n940,-1,1741.6,125.8,59.6,176.7,1\n940,-1,1257.8,783,94.5,284.3,1\n940,-1,859.2,387.7,64.2,211.7,1\n940,-1,1418,1.6,47.6,119.2,1\n940,-1,355.3,226.1,62,182.7,1\n940,-1,942.7,368.6,68.5,219.1,1\n940,-1,394.9,378.5,66.8,216.5,1\n940,-1,475.9,30.3,54.8,153.2,1\n940,-1,254,1,53.5,119.6,1\n940,-1,327.1,390.8,81.1,193.2,1\n940,-1,1745.5,676.1,90.9,248.2,1\n940,-1,434.3,71.2,54.7,179,1\n940,-1,308.2,162.2,63.7,196.3,1\n941,-1,1221.9,29.8,61.8,119.2,1\n941,-1,686.5,206.5,79.9,113.3,1\n941,-1,794,139.9,74.2,173.5,1\n941,-1,1484.6,1,62.4,117.7,1\n941,-1,441.5,224.7,68.2,188.9,1\n941,-1,1130.7,65.5,64,169,1\n941,-1,1476.8,126,59.8,161.5,1\n941,-1,1575.5,588.3,103,237.6,1\n941,-1,554.7,116.3,57.4,171.9,1\n941,-1,749.7,69.4,56.5,163.5,1\n941,-1,1625.5,95.3,57.9,168.9,1\n941,-1,237.1,133.7,58.6,169.1,1\n941,-1,1720.7,455.2,77.7,212.8,1\n941,-1,323,747.8,95,267.2,1\n941,-1,1257.4,783.1,95,284.5,1\n941,-1,354.8,225.8,60.8,181.8,1\n941,-1,858.6,386.7,64,212.5,1\n941,-1,395.3,378.1,65.8,218.4,1\n941,-1,1743.3,129.5,57.7,174.7,1\n941,-1,1418.6,1.6,47.4,118.4,1\n941,-1,476.2,32.1,54.3,152.1,1\n941,-1,942.9,368.7,67.6,219.4,1\n941,-1,1745.4,674.6,91,249.8,1\n941,-1,328.5,391.6,78.9,192.4,1\n941,-1,254.2,1,52.7,119.7,1\n941,-1,434.3,71.5,55.8,181.9,1\n941,-1,309.8,162.6,62.8,197.7,1\n941,-1,484.4,212,47.5,177.4,0.111\n942,-1,1222,29.7,61.7,118.9,1\n942,-1,686.4,206.2,80,113.5,1\n942,-1,794.4,140.4,74.5,172.4,1\n942,-1,1130.8,67.2,64.8,168.8,1\n942,-1,439.6,224.4,69.8,192.8,1\n942,-1,1485.3,1.5,61.2,116.5,1\n942,-1,1576.6,590.9,101.5,237.7,1\n942,-1,1476.6,124.2,61.7,166.3,1\n942,-1,555.2,116.4,56.8,172.2,1\n942,-1,749.5,69.1,57,164.5,1\n942,-1,322,749.2,97.1,268,1\n942,-1,1625.6,94.8,57.3,169.5,1\n942,-1,237,132.6,58.3,170.3,1\n942,-1,1255,781.6,94.8,283.5,1\n942,-1,1720.9,454.3,77.8,213.3,1\n942,-1,353.7,225.2,60.2,182.5,1\n942,-1,858.7,385.7,64.1,213.8,1\n942,-1,1743.6,132.4,59.8,171.3,1\n942,-1,395.1,380.3,64.7,217.9,1\n942,-1,942.1,367.7,67.7,219.3,1\n942,-1,1418.6,2.1,47.3,118.3,1\n942,-1,476.5,33.4,53.7,152.5,1\n942,-1,328.3,392.4,79,193.7,1\n942,-1,1744,674.1,91.9,248.8,1\n942,-1,254.6,1,53.1,120.6,1\n942,-1,309.9,163.1,63,196.2,1\n942,-1,434,73.1,55.9,180.3,1\n943,-1,1221.7,30.2,62,118.8,1\n943,-1,686.5,206.1,79.9,113.2,1\n943,-1,793.5,140.1,75.8,172.9,1\n943,-1,1485.3,1,60.1,115.9,1\n943,-1,1476.5,127,61.1,162.2,1\n943,-1,1130.6,67.5,65.2,169.7,1\n943,-1,1576.4,591.5,101.5,237.9,1\n943,-1,323.7,752.2,95.3,267.1,1\n943,-1,439.4,225.9,67.5,192.1,1\n943,-1,749.7,70.6,56.7,162.6,1\n943,-1,554.2,116.9,57.7,172.6,1\n943,-1,1627,95.7,56.5,167.9,1\n943,-1,1720.8,454.4,77.4,213.2,1\n943,-1,1251.5,781,97.1,284.8,1\n943,-1,859.2,384.4,63.3,212.8,1\n943,-1,237.3,133.3,58.1,170.5,1\n943,-1,352,224.4,61.7,181.5,1\n943,-1,327.3,393.5,79.2,194.8,1\n943,-1,1418,1.6,47.8,117.7,1\n943,-1,394.8,379.5,65.7,218.3,1\n943,-1,1744.4,131.2,60.8,173.8,1\n943,-1,941.7,366.5,67.2,218.6,1\n943,-1,1743.4,673.4,92.1,250,1\n943,-1,254,1,53.1,119.9,1\n943,-1,476,35.8,54,152.4,1\n943,-1,434.3,74,56.4,179.5,1\n943,-1,308.2,162.8,65.2,195.8,1\n943,-1,481.7,215.3,52.2,178,0.907\n947,-1,1221.1,29.6,62.5,119.6,1\n947,-1,686.6,206.5,80.2,113.1,1\n947,-1,794.9,138.9,73,174.8,1\n947,-1,1485.1,1,57.5,114.4,1\n947,-1,1474.8,132.1,62.1,169.6,1\n947,-1,323.1,759.6,94.5,274.2,1\n947,-1,750,70.3,56.5,164,1\n947,-1,1137.9,67,60.6,169.6,1\n947,-1,1575,588.3,103.6,236.9,1\n947,-1,1416.3,1.1,47,119.2,1\n947,-1,1633.2,96.2,55,167,1\n947,-1,1246.4,768.7,94.8,281.4,1\n947,-1,1720,454.5,78.4,213,1\n947,-1,935.5,361.9,67.7,215.4,1\n947,-1,347.9,230.2,59.8,179.6,1\n947,-1,431.5,228.8,68.7,192.1,1\n947,-1,395,383.7,65.6,215.9,1\n947,-1,553.9,116.4,54.7,171.7,1\n947,-1,856.7,376.2,65.3,205.8,1\n947,-1,324.2,402.7,80.8,197.7,1\n947,-1,235.6,129.5,59.2,178.3,1\n947,-1,434.2,80.2,62.3,172.3,1\n947,-1,1742.5,672.6,93.1,250.9,1\n947,-1,1752.1,134.1,60.1,177.9,1\n947,-1,251.8,1.2,53.1,119.9,1\n947,-1,477.5,37.8,54.4,150.1,1\n947,-1,480.6,215.6,59.9,182.5,1\n947,-1,312.7,165.3,60.9,193.8,1\n952,-1,686.3,206,80.3,113.3,1\n952,-1,1221.2,29.5,62.2,119,1\n952,-1,793.6,139.6,73.7,173.9,1\n952,-1,1473.9,140.1,63.4,165.8,1\n952,-1,1481.2,1,54,110.4,1\n952,-1,1145.7,75,58.9,170.8,1\n952,-1,321.5,767.9,95.4,273.8,1\n952,-1,1574.3,587,103.9,237.7,1\n952,-1,750.8,72.5,56,160.3,1\n952,-1,852.1,363.3,69.6,211.4,1\n952,-1,932.1,349.7,70,216,1\n952,-1,1720.6,452.9,78.1,214.3,1\n952,-1,1638.9,106.1,52.9,168.3,1\n952,-1,1242.4,755.7,92.3,269.4,1\n952,-1,553.7,115.2,54.4,171.2,1\n952,-1,426.6,234.2,66.7,185.6,1\n952,-1,1414.4,3,45.4,111.3,1\n952,-1,391.7,388,66.9,213,1\n952,-1,1757.4,135.9,63.5,182.2,1\n952,-1,233.3,134.3,57.5,171.6,1\n952,-1,322.2,409.6,79.2,195.8,1\n952,-1,436.4,77.9,54,173.4,1\n952,-1,344.2,235.9,62.4,185.4,1\n952,-1,1742.7,675.3,94.8,250,1\n952,-1,479.5,37.9,54.9,158.6,1\n952,-1,480.2,218.6,61.5,182.7,1\n952,-1,246.5,2.1,54.6,121.5,1\n952,-1,288.1,127.4,53.1,164.6,0.997\n952,-1,318,172.9,57.3,186.5,0.99\n956,-1,686,206.6,80.6,112.7,1\n956,-1,1221.5,30.1,62.3,119,1\n956,-1,793.4,140.3,74.4,172.5,1\n956,-1,1471.3,138.3,65.8,162,1\n956,-1,1476.4,1,55.6,108.2,1\n956,-1,1150.3,82.2,58,166.5,1\n956,-1,928.2,344.6,74.2,220.5,1\n956,-1,1762.4,145.3,65.2,175.3,1\n956,-1,1642.2,110,53.8,167.3,1\n956,-1,1577.4,591.2,99.7,236.4,1\n956,-1,1409.5,2.2,46.4,108.7,1\n956,-1,751.1,72.7,56,161.2,1\n956,-1,1720,452.7,79.1,215.2,1\n956,-1,850.8,360.8,69.5,212.1,1\n956,-1,319.7,410,78.9,196.1,1\n956,-1,551.6,117.7,55.2,170.8,1\n956,-1,320.3,773.7,96.5,269.2,1\n956,-1,1232.2,744.3,96.9,272.3,1\n956,-1,421.8,235.2,70.7,195.7,1\n956,-1,390,395,67,219.5,1\n956,-1,437.7,75.3,56.3,176.7,1\n956,-1,230.7,137.1,56.9,165.8,1\n956,-1,482.2,224.8,63.3,181.7,1\n956,-1,340.2,238.6,63.1,183.6,1\n956,-1,1742.5,676.9,93.9,250.5,1\n956,-1,481.2,45.1,55.2,161.5,1\n956,-1,288.3,126.8,54.2,170.7,1\n956,-1,242.6,3.3,53.7,122.9,0.999\n956,-1,312.5,1,47.3,134.3,0.868\n956,-1,324.1,167.8,46.8,195.8,0.476\n963,-1,686.1,206.1,80.3,113.7,1\n963,-1,1220.4,30.5,62.4,120.3,1\n963,-1,793.7,140,72.5,172,1\n963,-1,1767.5,151.7,69.3,177.5,1\n963,-1,925.7,339,76.1,213.7,1\n963,-1,1403.9,1.9,48.9,104.6,1\n963,-1,1573.8,589,105.2,236.8,1\n963,-1,1471.1,149,67.3,161.9,1\n963,-1,1645.4,110.4,59,173.7,1\n963,-1,327.7,790.4,89,270.1,1\n963,-1,418.7,247,70.1,193.8,1\n963,-1,1463.3,1,61.1,104.3,1\n963,-1,1154.5,84.6,61.5,172.1,1\n963,-1,751.3,69,55.4,167,1\n963,-1,1721.4,454,77.8,213.3,1\n963,-1,229.3,137,55.8,165.8,1\n963,-1,393.5,412.5,65.3,217.4,1\n963,-1,847.5,348.4,68.5,207.5,1\n963,-1,1220.7,732.6,92.2,265,1\n963,-1,333.5,242.8,64.7,190.6,1\n963,-1,487.1,232.6,63.8,178.5,1\n963,-1,442.6,74.4,53.3,179.5,1\n963,-1,550.1,118.3,55.4,172.3,1\n963,-1,315.8,419,81.6,202.6,1\n963,-1,1741.2,674.1,94.1,251.7,1\n963,-1,288.9,121.9,53.4,174.3,1\n963,-1,483.3,52.6,55.3,160.8,1\n963,-1,312.6,1,48.9,132,0.999\n963,-1,433.8,3.7,49.4,134.3,0.958\n963,-1,388,1.8,49.7,120.2,0.203\n963,-1,238.1,3.3,51.4,118.2,0.089\n971,-1,686.2,206.6,79.9,112.6,1\n971,-1,793.4,141.2,72.7,171.4,1\n971,-1,1221.9,31.3,60.9,119.8,1\n971,-1,1470.8,150.6,66.4,164.7,1\n971,-1,1158.5,104,62.7,164.3,1\n971,-1,414.3,251.7,71.3,191.7,1\n971,-1,1773.1,159.3,68.7,185.8,1\n971,-1,491.4,237,68.2,188.4,1\n971,-1,332.2,804.5,91.4,276.4,1\n971,-1,1651.3,126.8,58.8,171.3,1\n971,-1,1575.8,590.1,102.8,235.2,1\n971,-1,1720.6,454.1,79.1,213.4,1\n971,-1,929.1,323,69.1,214,1\n971,-1,752.4,73.1,55.2,161.5,1\n971,-1,445.5,66.4,56.9,182.9,1\n971,-1,329.6,248.7,63.6,198.3,1\n971,-1,229.6,138.7,55.8,162.7,1\n971,-1,310.2,432.3,86.3,197.1,1\n971,-1,550.4,119.6,52.3,169.7,1\n971,-1,846.7,339,65.6,210.8,1\n971,-1,388.8,417.2,69.1,218.1,1\n971,-1,1399.6,1.7,46.2,101.1,1\n971,-1,1453.8,1,63.5,103.5,1\n971,-1,1208.4,710.1,95.4,265.6,1\n971,-1,1739.8,673.8,95.6,251.5,1\n971,-1,291.1,126.3,52.8,170.4,1\n971,-1,314.5,1,47,130.5,1\n971,-1,486.1,56.9,54.3,157.9,0.999\n971,-1,381,1,55,126.4,0.997\n978,-1,686.5,206.5,79.7,112.5,1\n978,-1,1222,30.6,61.6,119.7,1\n978,-1,793.5,140.8,73,171.5,1\n978,-1,1174.3,108.1,58,167.7,1\n978,-1,411.6,260.9,67.9,192.3,1\n978,-1,335.6,815.9,93.4,265.1,1\n978,-1,493.6,248.1,67.7,188.1,1\n978,-1,1468.7,154.5,70,168.1,1\n978,-1,1576,590.1,102.4,236.4,1\n978,-1,1659,129.8,57.3,173.4,1\n978,-1,1781.4,163.8,69.6,187.4,1\n978,-1,845.1,330.8,66.4,204.1,1\n978,-1,751.6,70.7,55.5,165.2,1\n978,-1,229.9,137.5,55.9,163.9,1\n978,-1,306.4,438.7,84.9,201.8,1\n978,-1,1719.2,455.3,80.5,210.6,1\n978,-1,323.6,254.2,62.4,199.3,1\n978,-1,1453.1,1,58.9,100.6,1\n978,-1,927.2,319.7,65.4,211.6,1\n978,-1,549.6,119.4,52.2,166.4,1\n978,-1,1201.1,695.9,88.2,275.9,1\n978,-1,392.1,429.1,64.3,218.1,1\n978,-1,1739.8,675.6,97.3,253,1\n978,-1,314.1,1.3,46.7,128,1\n978,-1,448.2,59.6,54.6,187.4,1\n978,-1,1392.6,1,47.5,96.1,1\n978,-1,290.2,125.5,52.4,176.4,1\n978,-1,379.9,1,55.1,133.2,1\n978,-1,350.2,166.7,69.8,183.1,0.999\n978,-1,490,62.1,51.5,157.1,0.998\n998,-1,1221.6,30.7,62.1,120,1\n998,-1,686.5,206.2,79.7,112.9,1\n998,-1,793.9,140.1,74.7,172.9,1\n998,-1,400,290.1,66.8,187.7,1\n998,-1,1196.9,135.4,64,172.8,1\n998,-1,1473.7,179.7,63.8,161.2,1\n998,-1,1674.2,158.2,61.1,170.4,1\n998,-1,231.2,135.7,54.9,166.5,1\n998,-1,290.8,126.3,50.5,167.6,1\n998,-1,503.4,265.5,63.3,183.9,1\n998,-1,1804.5,191.4,67.6,187.5,1\n998,-1,1576.5,590,102.3,235.8,1\n998,-1,841.4,299.6,66.4,201.7,1\n998,-1,1722.3,452.4,78.5,217.1,1\n998,-1,924.5,291.9,69.2,207.5,1\n998,-1,751.5,71.9,54.5,162.7,1\n998,-1,301.3,464.8,86.3,208.9,1\n998,-1,542,119.7,59,168.7,1\n998,-1,334.3,860.7,91.6,220.3,1\n998,-1,1175.8,642,88.5,265.9,1\n998,-1,312.2,277.2,65.4,200.3,1\n998,-1,1739.5,675.1,93,249.2,1\n998,-1,314.5,1.3,45.7,130.4,1\n998,-1,382.6,457.6,68.1,218.1,1\n998,-1,438.8,64,61.5,172.9,1\n998,-1,507.7,81.5,54.1,157.8,1\n998,-1,388,168.5,73.8,181.4,0.999\n998,-1,600.2,548.3,108.9,249.5,0.999\n1000,-1,1221.7,30.3,61.3,119.1,1\n1000,-1,686.5,206.5,79.8,112.1,1\n1000,-1,794,140.8,74.8,170.6,1\n1000,-1,503.1,266.7,64.4,186,1\n1000,-1,397.9,288.7,67.7,193.7,1\n1000,-1,1675.3,162.1,60.9,172.5,1\n1000,-1,231.8,136.8,54.5,166.2,1\n1000,-1,1474.8,184.9,62.5,158.3,1\n1000,-1,1576.5,590,102.9,235.5,1\n1000,-1,1807.5,197.7,68.4,184.8,1\n1000,-1,290.4,124.9,51,170.4,1\n1000,-1,1202.1,139.1,62.2,175.3,1\n1000,-1,925.9,288.7,68.5,206.2,1\n1000,-1,841.9,296.6,65.8,201.8,1\n1000,-1,751.5,72.9,54.9,161.9,1\n1000,-1,1722.6,452.1,77.4,217.3,1\n1000,-1,301.6,468.9,84.3,209.8,1\n1000,-1,541.5,120.2,59.8,168.3,1\n1000,-1,311,276.7,66.4,199.6,1\n1000,-1,1175.1,636.5,88.3,264.4,1\n1000,-1,1740.3,675.3,92.8,249.6,1\n1000,-1,337.5,870.4,90.1,210.6,1\n1000,-1,381.7,457.8,68.3,218.9,1\n1000,-1,313.3,1,43.2,131,1\n1000,-1,597.5,548.2,109,249,1\n1000,-1,438.9,65.8,61.3,171,1\n1000,-1,508.5,85.8,53.1,155.3,1\n1000,-1,388.8,167.7,75.4,190.8,0.999\n1001,-1,1221.4,29.9,61.4,118.6,1\n1001,-1,686.2,206.6,80.1,112.2,1\n1001,-1,794.1,140.1,74.1,172.6,1\n1001,-1,502.4,268.7,64.3,186.3,1\n1001,-1,1474.4,184.3,63.1,158.2,1\n1001,-1,1676,163.6,60.3,172.1,1\n1001,-1,1203.2,138.1,63,175.3,1\n1001,-1,397,290.2,68.2,193.4,1\n1001,-1,290.2,124.9,51,169.3,1\n1001,-1,232.3,137.6,53.7,165.4,1\n1001,-1,1808.6,200.1,67.6,185.3,1\n1001,-1,1576.3,590.2,102.4,235.2,1\n1001,-1,926.5,286,68.9,207.5,1\n1001,-1,842.5,295.8,64.9,203,1\n1001,-1,1722,452.8,77.4,216.9,1\n1001,-1,309.4,280.4,65,193.5,1\n1001,-1,751.1,72.5,54.8,161.9,1\n1001,-1,302,471,82.8,207.8,1\n1001,-1,540.6,120.2,60,169.1,1\n1001,-1,1175.4,635,86.2,259.4,1\n1001,-1,382.3,457.6,68,220.1,1\n1001,-1,338.7,872.8,90.2,208.2,1\n1001,-1,1742.6,676.4,92.5,251.6,1\n1001,-1,438.7,65.9,61.9,172.3,1\n1001,-1,314,1.5,43.7,128.9,1\n1001,-1,508.8,87.2,52.5,152.8,1\n1001,-1,596.8,551,110.2,248,1\n1001,-1,392.2,168.3,74.2,186.9,0.999\n1013,-1,1221.2,30.4,62.4,116.6,1\n1013,-1,686.6,206.4,79.8,112.8,1\n1013,-1,793,140.2,74.1,173,1\n1013,-1,495.9,286.9,69.3,187.4,1\n1013,-1,289.6,126.3,53.3,171.7,1\n1013,-1,385.7,291.3,77.8,199.3,1\n1013,-1,537.9,122.3,62.6,167.8,1\n1013,-1,1575.8,590.7,102.2,234.8,1\n1013,-1,1827.5,209.4,60.6,193.4,1\n1013,-1,1469.3,187.2,64.6,162.2,1\n1013,-1,843.1,282.7,66,197.7,1\n1013,-1,1227.8,151.3,59.2,169.5,1\n1013,-1,231.8,140.4,53.3,161.7,1\n1013,-1,1154.7,613.6,93.3,262.7,1\n1013,-1,1719.8,454.7,79.7,212.2,1\n1013,-1,927.7,272.3,68.5,207.6,1\n1013,-1,295.3,486.3,91.8,208,1\n1013,-1,303.1,296,63.9,198.6,1\n1013,-1,751.5,74.4,53.9,161.2,1\n1013,-1,1692.6,175.5,55.3,167.2,1\n1013,-1,379.7,470.4,63.7,225.2,1\n1013,-1,1729.4,676.5,101.8,243.9,1\n1013,-1,437.1,167.2,65.6,192.4,1\n1013,-1,313,2.6,41.4,129.1,1\n1013,-1,588.4,552.2,90.6,244.3,1\n1013,-1,353.3,894.6,97.3,186.4,0.999\n1013,-1,386.6,171.6,52.3,157.9,0.999\n1013,-1,504.1,101,54.5,146.6,0.974\n1013,-1,432.8,74.8,64.7,164.3,0.42\n1013,-1,386.1,2.4,58.1,155.7,0.2\n1020,-1,1221.8,29.6,62,118.1,1\n1020,-1,686.9,206.4,79.4,113.5,1\n1020,-1,378.9,299.5,75.7,200,1\n1020,-1,791.9,140.8,73.6,173.4,1\n1020,-1,1240.1,162.3,61.4,174.7,1\n1020,-1,929.5,262,67.3,201.4,1\n1020,-1,289.9,128.5,52.7,168,1\n1020,-1,494.2,291.6,68.7,193.3,1\n1020,-1,292.3,498.4,85.6,208.3,1\n1020,-1,230.9,140.4,55.9,161.8,1\n1020,-1,297.8,298.5,64.6,205,1\n1020,-1,1467.9,187.4,65,166.2,1\n1020,-1,538.1,119.8,62.7,173.7,1\n1020,-1,1702,179.4,54.9,171.4,1\n1020,-1,380.5,480.9,64,222.6,1\n1020,-1,1721.7,454.8,77.1,210.6,1\n1020,-1,839.9,275.6,70.8,199.8,1\n1020,-1,1575.7,589.2,101.8,238.4,1\n1020,-1,1836.3,228.3,61,184.7,1\n1020,-1,751.2,75.2,54.5,159.9,1\n1020,-1,1149.3,594.2,89.4,257.7,1\n1020,-1,1707.8,686.8,97.8,228.6,1\n1020,-1,582.6,554.2,80.2,238.5,1\n1020,-1,449.2,167.4,77.1,194.6,1\n1020,-1,314,2.4,37.5,129.6,0.999\n1020,-1,403.4,169.3,59.2,169.7,0.998\n1020,-1,373.7,102.3,57.7,177.4,0.998\n1020,-1,357.2,914,98.2,167,0.868\n1022,-1,1221.1,29,62.3,119.8,1\n1022,-1,686.8,206.4,79.1,113.3,1\n1022,-1,792.6,141.4,73.1,171.4,1\n1022,-1,376.4,301.1,74.3,201.3,1\n1022,-1,1244.9,163.8,60.3,171,1\n1022,-1,1701.7,182.5,55.9,172.6,1\n1022,-1,289,128.1,52.8,168.3,1\n1022,-1,929.5,257.3,68.8,207.9,1\n1022,-1,493.4,293.2,69.4,193.9,1\n1022,-1,841.3,275.3,68.9,196.5,1\n1022,-1,295.9,299.4,65,208.1,1\n1022,-1,290.1,503.9,88.1,203.4,1\n1022,-1,538.3,119.6,61.6,174.5,1\n1022,-1,380.4,486.2,62.5,220.3,1\n1022,-1,1837.8,229.4,61.7,182.3,1\n1022,-1,1721.7,455.8,76.9,210.2,1\n1022,-1,1706.4,687.4,96.7,230.4,1\n1022,-1,1147.2,591.7,90.5,259.3,1\n1022,-1,232.2,140.1,54.8,162.7,1\n1022,-1,1576.4,589.4,102.2,239.8,1\n1022,-1,1467.9,190.5,65.2,167.3,1\n1022,-1,751.5,75.5,54.1,160,1\n1022,-1,581.6,553.2,79.4,238.9,1\n1022,-1,452.9,165.7,83.3,194.2,1\n1022,-1,313.2,2.1,37,128.5,0.999\n1022,-1,408.3,170.1,58.2,165,0.999\n1022,-1,372.7,105,58.2,173.1,0.999\n1022,-1,359.6,916.3,95,164.7,0.395\n1028,-1,1221.6,29.8,62.2,119.3,1\n1028,-1,687,206.8,79.4,113.5,1\n1028,-1,1251.3,175.9,63.8,166.7,1\n1028,-1,792.5,141.9,72.2,171.7,1\n1028,-1,1698.4,190.6,64.7,183.9,1\n1028,-1,490.6,303.3,68.3,186.3,1\n1028,-1,372.1,311.9,72.9,200.9,1\n1028,-1,288.9,127.8,52.5,167.9,1\n1028,-1,1721,456.8,79.1,208.4,1\n1028,-1,933,254.8,67.9,205.7,1\n1028,-1,232.8,139.2,57.8,165,1\n1028,-1,843,264.6,66.7,189.2,1\n1028,-1,1574,589.5,104,240.5,1\n1028,-1,1141.6,583.5,85.5,256.6,1\n1028,-1,294.8,310.5,66.3,204.8,1\n1028,-1,751.2,75.1,53.5,160.7,1\n1028,-1,538.4,121,63.6,175.1,1\n1028,-1,1842.5,232.2,63.4,195.5,1\n1028,-1,375.2,496.7,68.3,228.5,1\n1028,-1,1699.4,682.2,82.2,238.9,1\n1028,-1,288.2,506.9,88.6,207.2,1\n1028,-1,424.9,169.7,59.3,171.2,1\n1028,-1,579.2,546.2,74.9,243.9,1\n1028,-1,374,101.8,58.3,179.5,1\n1028,-1,1471,212.2,67.7,154.5,1\n1028,-1,473.1,163.2,70.6,199.2,1\n1028,-1,310.8,1.8,35.6,129.9,1\n1028,-1,367.5,926,87,155,0.068\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-04-FRCNN/gt/gt.txt",
    "content": "1,1,1363,569,103,241,1,1,0.86014\n2,1,1362,568,103,241,1,1,0.86173\n3,1,1362,568,103,241,1,1,0.86173\n4,1,1362,568,103,241,1,1,0.86173\n5,1,1362,568,103,241,1,1,0.86173\n6,1,1362,568,103,241,1,1,0.86173\n7,1,1362,568,103,241,1,1,0.86173\n8,1,1362,568,103,241,1,1,0.86173\n1,2,371,410,80,239,1,1,1.0\n2,2,371,408,80,239,1,1,1.0\n3,2,372,407,80,239,1,1,1.0\n4,2,372,406,81,239,1,1,1.0\n5,2,373,405,81,239,1,1,1.0\n6,2,373,404,82,238,1,1,1.0\n7,2,374,403,81,238,1,1,1.0\n8,2,374,402,82,238,1,1,1.0\n1,3,103,549,83,251,1,1,1.0\n2,3,102,549,83,250,1,1,1.0\n3,3,102,549,83,250,1,1,1.0\n4,3,102,549,83,250,1,1,1.0\n5,3,102,549,83,250,1,1,1.0\n6,3,102,549,83,250,1,1,1.0\n7,3,102,549,83,250,1,1,1.0\n8,3,102,549,83,250,1,1,1.0\n1,4,1734,457,76,213,1,1,0.98386\n2,4,1733,457,76,212,1,1,0.97586\n3,4,1732,457,76,212,1,1,0.96781\n4,4,1731,457,76,212,1,1,0.95976\n5,4,1730,457,76,211,1,1,0.95185\n6,4,1730,457,75,211,1,1,0.95122\n7,4,1729,457,75,211,1,1,0.94309\n8,4,1728,457,75,210,1,1,0.93515\n1,5,1098,980,78,208,1,1,0.48325\n2,5,1101,979,78,209,1,1,0.48571\n3,5,1104,978,78,210,1,1,0.48815\n4,5,1107,977,78,211,1,1,0.49057\n5,5,1111,977,77,211,1,1,0.49057\n6,5,1114,976,78,212,1,1,0.49296\n7,5,1117,975,78,213,1,1,0.49533\n8,5,1121,975,77,213,1,1,0.49533\n1,6,632,761,100,251,1,1,0.31903\n2,6,631,761,100,251,1,1,0.31903\n3,6,631,761,100,251,1,1,0.31903\n4,6,631,761,100,251,1,1,0.31903\n5,6,631,761,100,251,1,1,0.31903\n6,6,631,761,100,251,1,1,0.31903\n7,6,631,761,100,251,1,1,0.31903\n8,6,631,761,100,251,1,1,0.31903\n1,7,623,901,144,123,0,11,1.0\n2,7,623,901,144,123,0,11,1.0\n3,7,623,901,144,123,0,11,1.0\n4,7,623,901,144,123,0,11,1.0\n5,7,623,901,144,123,0,11,1.0\n6,7,623,901,144,123,0,11,1.0\n7,7,623,901,144,123,0,11,1.0\n8,7,623,901,144,123,0,11,1.0\n1,8,671,427,42,652,0,10,0.80063\n2,8,671,427,42,652,0,10,0.80063\n3,8,671,427,42,652,0,10,0.80063\n4,8,671,427,42,652,0,10,0.80063\n5,8,671,427,42,652,0,10,0.80063\n6,8,671,427,42,652,0,10,0.80063\n7,8,671,427,42,652,0,10,0.80063\n8,8,671,427,42,652,0,10,0.80063\n1,9,1516,126,100,73,0,11,1.0\n2,9,1516,126,100,73,0,11,1.0\n3,9,1516,126,100,73,0,11,1.0\n4,9,1516,126,100,73,0,11,1.0\n5,9,1516,126,100,73,0,11,1.0\n6,9,1516,126,100,73,0,11,1.0\n7,9,1516,126,100,73,0,11,1.0\n8,9,1516,126,100,73,0,11,1.0\n1,10,1556,-1,25,129,0,11,1.0\n2,10,1556,-1,25,129,0,11,1.0\n3,10,1556,-1,25,129,0,11,1.0\n4,10,1556,-1,25,129,0,11,1.0\n5,10,1556,-1,25,129,0,11,1.0\n6,10,1556,-1,25,129,0,11,1.0\n7,10,1556,-1,25,129,0,11,1.0\n8,10,1556,-1,25,129,0,11,1.0\n1,11,1545,196,28,81,0,10,0.71909\n2,11,1545,196,28,81,0,10,0.70101\n3,11,1545,196,28,81,0,10,0.68713\n4,11,1545,196,28,81,0,10,0.67241\n5,11,1545,196,28,81,0,10,0.6598\n6,11,1545,196,28,81,0,10,0.6434\n7,11,1545,196,28,81,0,10,0.62616\n8,11,1545,196,28,81,0,10,0.61186\n1,12,1513,266,95,80,0,11,1.0\n2,12,1513,266,95,80,0,11,1.0\n3,12,1513,266,95,80,0,11,1.0\n4,12,1513,266,95,80,0,11,1.0\n5,12,1513,266,95,80,0,11,1.0\n6,12,1513,266,95,80,0,11,1.0\n7,12,1513,266,95,80,0,11,1.0\n8,12,1513,266,95,80,0,11,1.0\n1,13,1537,342,29,197,0,10,0.17121\n2,13,1537,342,29,197,0,10,0.17121\n3,13,1537,342,29,197,0,10,0.17121\n4,13,1537,342,29,197,0,10,0.17121\n5,13,1537,342,29,197,0,10,0.17121\n6,13,1537,342,29,197,0,10,0.17121\n7,13,1537,342,29,197,0,10,0.17121\n8,13,1537,342,29,197,0,10,0.17121\n1,14,1537,381,94,212,0,10,0.44354\n2,14,1537,381,93,212,0,10,0.44042\n3,14,1537,381,93,212,0,10,0.44042\n4,14,1537,381,93,212,0,10,0.44042\n5,14,1537,381,93,212,0,10,0.44042\n6,14,1537,381,93,212,0,10,0.44042\n7,14,1537,381,93,212,0,10,0.44042\n8,14,1537,381,93,212,0,10,0.44042\n1,15,1299,74,76,92,0,10,0.80324\n2,15,1299,74,76,92,0,10,0.80352\n3,15,1299,74,76,92,0,10,0.80352\n4,15,1299,74,76,92,0,10,0.80352\n5,15,1299,74,76,92,0,10,0.80352\n6,15,1299,74,76,92,0,10,0.80352\n7,15,1299,74,76,92,0,10,0.80352\n8,15,1299,74,76,92,0,10,0.80352\n1,16,1311,2,49,73,0,11,1.0\n2,16,1311,1,48,74,0,11,1.0\n3,16,1311,1,48,74,0,11,1.0\n4,16,1311,1,48,74,0,11,1.0\n5,16,1311,1,48,74,0,11,1.0\n6,16,1311,1,48,74,0,11,1.0\n7,16,1311,1,48,74,0,11,1.0\n8,16,1311,1,48,74,0,11,1.0\n1,17,1564,380,53,110,0,11,1.0\n2,17,1564,380,53,110,0,11,1.0\n3,17,1564,380,53,110,0,11,1.0\n4,17,1564,380,53,110,0,11,1.0\n5,17,1564,380,53,110,0,11,1.0\n6,17,1564,380,53,110,0,11,1.0\n7,17,1564,380,53,110,0,11,1.0\n8,17,1564,380,53,110,0,11,1.0\n1,18,1842,581,80,78,0,11,1.0\n2,18,1842,581,80,78,0,11,1.0\n3,18,1842,581,80,78,0,11,1.0\n4,18,1842,581,80,78,0,11,1.0\n5,18,1842,581,80,78,0,11,1.0\n6,18,1842,581,80,78,0,11,1.0\n7,18,1842,581,80,78,0,11,1.0\n8,18,1842,581,80,78,0,11,1.0\n1,19,1817,918,19,101,0,10,0.74118\n2,19,1817,918,19,101,0,10,0.74118\n3,19,1817,918,19,101,0,10,0.74118\n4,19,1817,918,19,101,0,10,0.74118\n5,19,1817,918,19,101,0,10,0.74118\n6,19,1817,918,19,101,0,10,0.74118\n7,19,1817,918,19,101,0,10,0.74118\n8,19,1817,918,19,101,0,10,0.74118\n1,20,1860,978,19,106,0,10,0.91589\n2,20,1860,978,19,106,0,10,0.91589\n3,20,1860,978,19,106,0,10,0.91589\n4,20,1860,978,19,106,0,10,0.91589\n5,20,1860,978,19,106,0,10,0.91589\n6,20,1860,978,19,106,0,10,0.91589\n7,20,1860,978,19,106,0,10,0.91589\n8,20,1860,978,19,106,0,10,0.91589\n1,21,1838,655,15,53,0,10,0.70833\n2,21,1837,655,16,52,0,10,0.72586\n3,21,1837,655,16,52,0,10,0.72586\n4,21,1837,655,16,52,0,10,0.72586\n5,21,1837,655,16,52,0,10,0.72586\n6,21,1837,655,16,52,0,10,0.72586\n7,21,1837,655,16,52,0,10,0.72586\n8,21,1837,655,16,52,0,10,0.72586\n1,22,1856,724,35,258,0,11,1.0\n2,22,1856,724,35,258,0,11,1.0\n3,22,1856,724,35,258,0,11,1.0\n4,22,1856,724,35,258,0,11,1.0\n5,22,1856,724,35,258,0,11,1.0\n6,22,1856,724,35,258,0,11,1.0\n7,22,1856,724,35,258,0,11,1.0\n8,22,1856,724,35,258,0,11,1.0\n1,23,1826,697,42,268,0,11,1.0\n2,23,1826,697,42,268,0,11,1.0\n3,23,1826,697,42,268,0,11,1.0\n4,23,1826,697,42,268,0,11,1.0\n5,23,1826,697,42,268,0,11,1.0\n6,23,1826,697,42,268,0,11,1.0\n7,23,1826,697,42,268,0,11,1.0\n8,23,1826,697,42,268,0,11,1.0\n1,24,622,274,91,90,0,11,1.0\n2,24,622,274,91,90,0,11,1.0\n3,24,622,274,91,90,0,11,1.0\n4,24,622,274,91,90,0,11,1.0\n5,24,622,274,91,90,0,11,1.0\n6,24,622,274,91,90,0,11,1.0\n7,24,622,274,91,90,0,11,1.0\n8,24,622,274,91,90,0,11,1.0\n1,25,616,129,101,71,0,11,1.0\n2,25,616,129,101,71,0,11,1.0\n3,25,616,129,101,71,0,11,1.0\n4,25,616,129,101,71,0,11,1.0\n5,25,616,129,101,71,0,11,1.0\n6,25,616,129,101,71,0,11,1.0\n7,25,616,129,101,71,0,11,1.0\n8,25,616,129,101,71,0,11,1.0\n1,26,650,1,29,133,0,11,1.0\n2,26,650,1,29,133,0,11,1.0\n3,26,650,1,29,133,0,11,1.0\n4,26,650,1,29,133,0,11,1.0\n5,26,650,1,29,133,0,11,1.0\n6,26,650,1,29,133,0,11,1.0\n7,26,650,1,29,133,0,11,1.0\n8,26,650,1,29,133,0,11,1.0\n1,27,654,194,26,84,0,11,1.0\n2,27,654,194,26,84,0,11,1.0\n3,27,654,194,26,84,0,11,1.0\n4,27,654,194,26,84,0,11,1.0\n5,27,654,194,26,84,0,11,1.0\n6,27,654,194,26,84,0,11,1.0\n7,27,654,194,26,84,0,11,1.0\n8,27,654,194,26,84,0,11,1.0\n1,28,654,363,30,82,0,11,1.0\n2,28,654,363,30,82,0,11,1.0\n3,28,654,363,30,82,0,11,1.0\n4,28,654,363,30,82,0,11,1.0\n5,28,654,363,30,82,0,11,1.0\n6,28,654,363,30,82,0,11,1.0\n7,28,654,363,30,82,0,11,1.0\n8,28,654,363,30,82,0,11,1.0\n1,29,621,437,55,245,0,10,0.88175\n2,29,620,437,56,245,0,10,0.88383\n3,29,620,437,56,245,0,10,0.88383\n4,29,620,437,56,245,0,10,0.88383\n5,29,620,437,56,245,0,10,0.88383\n6,29,620,437,56,245,0,10,0.88383\n7,29,620,437,56,245,0,10,0.88383\n8,29,620,437,56,245,0,10,0.88383\n1,30,616,-1,40,137,0,10,0.3245\n2,30,616,-1,40,137,0,10,0.3245\n3,30,616,-1,40,137,0,10,0.3245\n4,30,616,-1,40,137,0,10,0.3245\n5,30,616,-1,40,137,0,10,0.3245\n6,30,616,-1,40,137,0,10,0.3245\n7,30,616,-1,40,137,0,10,0.3245\n8,30,616,-1,40,137,0,10,0.3245\n1,31,1413,723,39,100,0,10,1.0\n2,31,1413,723,39,100,0,10,1.0\n3,31,1413,723,39,100,0,10,1.0\n4,31,1413,723,39,100,0,10,1.0\n5,31,1413,723,39,100,0,10,1.0\n6,31,1413,723,39,100,0,10,1.0\n7,31,1413,723,39,100,0,10,1.0\n8,31,1413,723,39,100,0,10,1.0\n1,32,1468,864,43,102,0,10,1.0\n2,32,1468,864,43,102,0,10,1.0\n3,32,1468,864,43,102,0,10,1.0\n4,32,1468,864,43,102,0,10,1.0\n5,32,1468,864,43,102,0,10,1.0\n6,32,1468,864,43,102,0,10,1.0\n7,32,1468,864,43,102,0,10,1.0\n8,32,1468,864,43,102,0,10,1.0\n1,33,706,590,36,93,0,10,0.78378\n2,33,706,590,36,93,0,10,0.78378\n3,33,706,590,36,93,0,10,0.78378\n4,33,706,590,36,93,0,10,0.78378\n5,33,706,590,36,93,0,10,0.78378\n6,33,706,590,36,93,0,10,0.78378\n7,33,706,590,36,93,0,10,0.78378\n8,33,706,590,36,93,0,10,0.78378\n1,34,92,0,115,219,0,11,1.0\n2,34,92,0,115,219,0,11,1.0\n3,34,92,0,115,219,0,11,1.0\n4,34,92,0,115,219,0,11,1.0\n5,34,92,0,115,219,0,11,1.0\n6,34,92,0,115,219,0,11,1.0\n7,34,92,0,115,219,0,11,1.0\n8,34,92,0,115,219,0,11,1.0\n1,35,198,33,32,127,0,11,1.0\n2,35,198,33,32,127,0,11,1.0\n3,35,198,33,32,127,0,11,1.0\n4,35,198,33,32,127,0,11,1.0\n5,35,198,33,32,127,0,11,1.0\n6,35,198,33,32,127,0,11,1.0\n7,35,198,33,32,127,0,11,1.0\n8,35,198,33,32,127,0,11,1.0\n1,36,224,42,23,65,0,11,1.0\n2,36,224,42,23,65,0,11,1.0\n3,36,224,42,23,65,0,11,1.0\n4,36,224,42,23,65,0,11,1.0\n5,36,224,42,23,65,0,11,1.0\n6,36,224,42,23,65,0,11,1.0\n7,36,224,42,23,65,0,11,1.0\n8,36,224,42,23,65,0,11,1.0\n1,37,1871,257,26,69,0,10,1.0\n2,37,1871,257,26,69,0,10,1.0\n3,37,1871,257,26,69,0,10,1.0\n4,37,1871,257,26,69,0,10,1.0\n5,37,1871,257,26,69,0,10,1.0\n6,37,1871,257,26,69,0,10,1.0\n7,37,1871,257,26,69,0,10,1.0\n8,37,1871,257,26,69,0,10,1.0\n1,38,1584,777,34,50,0,10,1.0\n2,38,1584,777,34,50,0,10,1.0\n3,38,1584,777,34,50,0,10,1.0\n4,38,1584,777,34,50,0,10,1.0\n5,38,1584,777,34,50,0,10,1.0\n6,38,1584,777,34,50,0,10,1.0\n7,38,1584,777,34,50,0,10,1.0\n8,38,1584,777,34,50,0,10,1.0\n1,39,1658,915,36,56,0,10,1.0\n2,39,1658,915,36,56,0,10,1.0\n3,39,1658,915,36,56,0,10,1.0\n4,39,1658,915,36,56,0,10,1.0\n5,39,1658,915,36,56,0,10,1.0\n6,39,1658,915,36,56,0,10,1.0\n7,39,1658,915,36,56,0,10,1.0\n8,39,1658,915,36,56,0,10,1.0\n1,40,1340,288,28,36,0,10,0.86486\n2,40,1340,288,28,36,0,10,0.86486\n3,40,1340,288,28,36,0,10,0.86486\n4,40,1340,288,28,36,0,10,0.86486\n5,40,1340,288,28,36,0,10,0.86486\n6,40,1340,288,28,36,0,10,0.86486\n7,40,1340,288,28,36,0,10,0.86486\n8,40,1340,288,28,36,0,10,0.86486\n1,41,1249,111,27,32,0,10,0.17857\n2,41,1249,111,27,32,0,10,0.17857\n3,41,1249,111,27,32,0,10,0.17857\n4,41,1249,111,27,32,0,10,0.17857\n5,41,1249,111,27,32,0,10,0.17857\n6,41,1249,111,27,32,0,10,0.14286\n7,41,1249,111,27,32,0,10,0.14286\n8,41,1249,111,27,32,0,10,0.14286\n1,42,718,790,30,48,0,10,0.51613\n2,42,718,790,30,48,0,10,0.54839\n3,42,718,790,30,48,0,10,0.54839\n4,42,718,790,30,48,0,10,0.54839\n5,42,718,790,30,48,0,10,0.54839\n6,42,718,790,30,48,0,10,0.54839\n7,42,718,790,30,48,0,10,0.54839\n8,42,718,790,30,48,0,10,0.54839\n1,43,703,503,30,43,0,10,0.64516\n2,43,703,503,30,43,0,10,0.64516\n3,43,703,503,30,43,0,10,0.64516\n4,43,703,503,30,43,0,10,0.64516\n5,43,703,503,30,43,0,10,0.64516\n6,43,703,503,30,43,0,10,0.64516\n7,43,703,503,30,43,0,10,0.64516\n8,43,703,503,30,43,0,10,0.64516\n1,44,699,428,30,42,0,10,0.51613\n2,44,699,428,30,42,0,10,0.51613\n3,44,699,428,30,42,0,10,0.51613\n4,44,699,428,30,42,0,10,0.51613\n5,44,699,428,30,42,0,10,0.51613\n6,44,699,428,30,42,0,10,0.51613\n7,44,699,428,30,42,0,10,0.51613\n8,44,699,428,30,42,0,10,0.51613\n1,45,687,206,77,112,0,7,0.79226\n2,45,687,206,77,112,0,7,0.79226\n3,45,687,206,77,112,0,7,0.79226\n4,45,687,206,77,112,0,7,0.79226\n5,45,687,206,77,112,0,7,0.79226\n6,45,687,206,77,112,0,7,0.79226\n7,45,687,206,77,112,0,7,0.79226\n8,45,687,206,77,112,0,7,0.79226\n1,46,678,291,57,121,0,7,0.57603\n2,46,678,291,57,121,0,7,0.57603\n3,46,678,291,57,121,0,7,0.57603\n4,46,678,291,57,121,0,7,0.57603\n5,46,678,291,57,121,0,7,0.57603\n6,46,678,291,57,121,0,7,0.57603\n7,46,678,291,57,121,0,7,0.57603\n8,46,678,291,57,121,0,7,0.57603\n1,47,1543,628,176,116,0,4,1.0\n2,47,1543,628,176,116,0,4,1.0\n3,47,1543,628,176,116,0,4,1.0\n4,47,1543,628,176,116,0,4,1.0\n5,47,1543,628,176,116,0,4,1.0\n6,47,1543,628,176,116,0,4,1.0\n7,47,1543,628,176,116,0,4,1.0\n8,47,1543,628,176,116,0,4,1.0\n1,48,1193,320,270,255,0,3,0.98981\n2,48,1193,320,270,255,0,3,0.98824\n3,48,1193,320,270,255,0,3,0.98824\n4,48,1193,320,270,255,0,3,0.98824\n5,48,1193,320,270,255,0,3,0.98824\n6,48,1193,320,270,255,0,3,0.98824\n7,48,1193,320,270,255,0,3,0.98824\n8,48,1193,320,270,255,0,3,0.98824\n1,49,1790,94,152,105,0,4,0.85621\n2,49,1790,94,152,105,0,4,0.85621\n3,49,1790,94,152,105,0,4,0.85621\n4,49,1790,94,152,105,0,4,0.85621\n5,49,1790,94,152,105,0,4,0.85621\n6,49,1790,94,152,105,0,4,0.85621\n7,49,1790,94,152,105,0,4,0.85621\n8,49,1790,94,152,105,0,4,0.85621\n1,50,1483,538,252,181,0,5,0.64635\n2,50,1483,538,252,181,0,5,0.64635\n3,50,1483,538,252,181,0,5,0.64635\n4,50,1483,538,252,181,0,5,0.64635\n5,50,1483,538,252,181,0,5,0.64635\n6,50,1483,538,252,181,0,5,0.64635\n7,50,1483,538,252,181,0,5,0.64635\n8,50,1483,538,252,181,0,5,0.64635\n1,51,1279,173,129,104,0,4,1.0\n2,51,1279,173,129,104,0,4,1.0\n3,51,1279,173,129,104,0,4,1.0\n4,51,1279,173,129,104,0,4,1.0\n5,51,1279,173,129,104,0,4,1.0\n6,51,1279,173,129,104,0,4,1.0\n7,51,1279,173,129,104,0,4,1.0\n8,51,1279,173,129,104,0,4,1.0\n1,52,1280,153,162,96,0,4,0.12681\n2,52,1280,153,162,96,0,4,0.11865\n3,52,1280,153,162,96,0,4,0.11366\n4,52,1280,153,162,96,0,4,0.10682\n5,52,1280,153,162,96,0,4,0.10157\n6,52,1280,153,162,96,0,4,0.098096\n7,52,1280,153,162,96,0,4,0.089115\n8,52,1280,153,162,96,0,4,0.083486\n1,53,1249,150,160,99,0,4,0.21199\n2,53,1249,150,160,99,0,4,0.21199\n3,53,1249,150,160,99,0,4,0.21199\n4,53,1249,150,160,99,0,4,0.21199\n5,53,1249,150,160,99,0,4,0.21199\n6,53,1249,150,160,99,0,4,0.21199\n7,53,1249,150,160,99,0,4,0.21199\n8,53,1249,150,160,99,0,4,0.21199\n1,54,1185,-7,153,95,0,4,0.27591\n2,54,1185,-7,153,95,0,4,0.27313\n3,54,1185,-7,153,95,0,4,0.27056\n4,54,1185,-7,153,95,0,4,0.27137\n5,54,1185,-7,153,95,0,4,0.26502\n6,54,1185,-7,153,95,0,4,0.26596\n7,54,1185,-7,153,95,0,4,0.26346\n8,54,1185,-7,153,95,0,4,0.25758\n1,55,563,162,166,97,0,4,0.2782\n2,55,562,161,166,97,0,4,0.27349\n3,55,562,161,166,97,0,4,0.26751\n4,55,562,161,166,97,0,4,0.26152\n5,55,562,161,166,97,0,4,0.26152\n6,55,562,161,166,97,0,4,0.25553\n7,55,562,161,166,97,0,4,0.24954\n8,55,562,161,166,97,0,4,0.24954\n1,56,550,84,172,88,0,4,0.38475\n2,56,550,84,172,88,0,4,0.38358\n3,56,550,84,172,88,0,4,0.38274\n4,56,550,84,172,88,0,4,0.38189\n5,56,550,84,172,88,0,4,0.38189\n6,56,550,84,172,88,0,4,0.38105\n7,56,550,84,172,88,0,4,0.3802\n8,56,550,84,172,88,0,4,0.3802\n1,57,517,55,170,89,0,4,0.16589\n2,57,517,55,170,89,0,4,0.16589\n3,57,517,55,170,89,0,4,0.16589\n4,57,517,55,170,89,0,4,0.16589\n5,57,517,55,170,89,0,4,0.16589\n6,57,517,55,170,89,0,4,0.16589\n7,57,517,55,170,89,0,4,0.16589\n8,57,517,55,170,89,0,4,0.16589\n1,58,574,15,139,107,0,4,0.20529\n2,58,574,15,139,107,0,4,0.20529\n3,58,574,15,139,107,0,4,0.20529\n4,58,574,15,139,107,0,4,0.20529\n5,58,574,15,139,107,0,4,0.20529\n6,58,574,15,139,107,0,4,0.20529\n7,58,574,15,139,107,0,4,0.20529\n8,58,574,15,139,107,0,4,0.20529\n1,59,1725,882,196,134,0,4,0.68329\n2,59,1725,882,196,134,0,4,0.68329\n3,59,1725,882,196,134,0,4,0.68329\n4,59,1725,882,196,134,0,4,0.68329\n5,59,1725,882,196,134,0,4,0.68329\n6,59,1725,882,196,134,0,4,0.68329\n7,59,1725,882,196,134,0,4,0.68329\n8,59,1725,882,196,134,0,4,0.68329\n1,60,796,149,60,175,1,1,1.0\n2,60,795,149,60,174,1,1,1.0\n3,60,795,149,60,174,1,1,1.0\n4,60,795,149,60,174,1,1,1.0\n5,60,795,149,60,174,1,1,1.0\n6,60,795,149,60,174,1,1,1.0\n7,60,795,149,60,174,1,1,1.0\n8,60,795,149,60,174,1,1,1.0\n1,61,1789,206,65,184,1,1,1.0\n2,61,1790,207,65,183,1,1,1.0\n3,61,1791,208,65,183,1,1,1.0\n4,61,1792,209,65,182,1,1,1.0\n5,61,1794,210,64,182,1,1,1.0\n6,61,1795,211,65,181,1,1,1.0\n7,61,1796,212,65,181,1,1,1.0\n8,61,1798,213,64,180,1,1,1.0\n1,62,1487,71,53,145,1,1,0.76535\n2,62,1487,71,53,145,1,1,0.76535\n3,62,1487,70,53,146,1,1,0.76694\n4,62,1487,70,53,146,1,1,0.76694\n5,62,1487,70,53,146,1,1,0.76694\n6,62,1487,70,53,146,1,1,0.76694\n7,62,1487,70,53,146,1,1,0.76694\n8,62,1487,70,53,146,1,1,0.76694\n1,63,1636,265,66,181,1,1,1.0\n2,63,1634,264,66,181,1,1,1.0\n3,63,1633,263,65,182,1,1,1.0\n4,63,1632,263,64,182,1,1,1.0\n5,63,1631,262,63,182,1,1,1.0\n6,63,1630,262,63,182,1,1,0.99454\n7,63,1629,261,62,183,1,1,0.98896\n8,63,1628,260,61,183,1,1,0.98343\n1,64,1358,612,42,89,0,10,0.11628\n2,64,1358,612,42,89,0,10,0.093023\n3,64,1358,612,42,89,0,10,0.093023\n4,64,1358,612,42,89,0,10,0.093023\n5,64,1358,612,42,89,0,10,0.093023\n6,64,1358,612,42,89,0,10,0.093023\n7,64,1358,612,42,89,0,10,0.093023\n8,64,1358,612,42,89,0,10,0.093023\n1,65,1557,254,60,192,1,1,0.26705\n2,65,1555,253,60,192,1,1,0.25287\n3,65,1554,252,60,192,1,1,0.24836\n4,65,1553,251,60,192,1,1,0.24386\n5,65,1551,251,60,192,1,1,0.2245\n6,65,1550,250,60,192,1,1,0.21999\n7,65,1549,249,60,192,1,1,0.21549\n8,65,1547,249,60,192,1,1,0.20301\n1,66,1104,212,56,181,1,1,1.0\n2,66,1097,211,61,181,1,1,1.0\n3,66,1091,211,66,180,1,1,1.0\n4,66,1085,210,70,180,1,1,1.0\n5,66,1079,210,75,180,1,1,1.0\n6,66,1073,209,79,180,1,1,1.0\n7,66,1067,209,84,179,1,1,1.0\n8,66,1061,208,88,180,1,1,1.0\n1,67,1031,133,80,183,1,1,0.94364\n2,67,1031,133,79,183,1,1,0.89918\n3,67,1031,134,78,182,1,1,0.86069\n4,67,1031,135,77,181,1,1,0.8191\n5,67,1031,135,76,181,1,1,0.77858\n6,67,1031,136,75,180,1,1,0.73306\n7,67,1031,137,74,179,1,1,0.688\n8,67,1031,137,73,179,1,1,0.63994\n1,68,228,401,63,203,1,1,1.0\n2,68,226,399,63,202,1,1,1.0\n3,68,224,398,64,201,1,1,1.0\n4,68,223,397,63,200,1,1,1.0\n5,68,221,395,64,200,1,1,1.0\n6,68,220,394,64,199,1,1,1.0\n7,68,218,393,64,197,1,1,1.0\n8,68,216,391,65,197,1,1,1.0\n1,69,264,365,60,221,1,1,0.61542\n2,69,262,363,60,221,1,1,0.61542\n3,69,260,362,60,220,1,1,0.60203\n4,69,259,361,59,219,1,1,0.6097\n5,69,257,360,59,218,1,1,0.59391\n6,69,256,359,58,217,1,1,0.58739\n7,69,254,357,58,217,1,1,0.58964\n8,69,252,356,58,216,1,1,0.57354\n1,70,872,122,58,180,1,1,1.0\n2,70,872,122,59,180,1,1,1.0\n3,70,873,123,59,180,1,1,1.0\n4,70,874,124,59,179,1,1,1.0\n5,70,874,124,60,180,1,1,1.0\n6,70,875,125,60,179,1,1,1.0\n7,70,876,126,60,179,1,1,1.0\n8,70,876,126,61,179,1,1,1.0\n1,71,912,129,48,161,1,1,0.61224\n2,71,912,130,48,161,1,1,0.59184\n3,71,912,131,49,161,1,1,0.58\n4,71,912,132,49,161,1,1,0.56\n5,71,913,134,49,160,1,1,0.56\n6,71,913,135,50,160,1,1,0.54902\n7,71,913,136,50,160,1,1,0.52941\n8,71,914,138,50,159,1,1,0.52941\n1,72,1040,-39,46,123,1,1,0.67742\n2,72,1039,-40,46,123,1,1,0.66935\n3,72,1039,-40,46,122,1,1,0.66667\n4,72,1039,-41,46,123,1,1,0.66129\n5,72,1039,-41,46,122,1,1,0.65854\n6,72,1039,-42,46,123,1,1,0.65323\n7,72,1039,-42,46,122,1,1,0.65041\n8,72,1039,-43,46,122,1,1,0.64228\n1,73,996,-41,47,121,1,1,0.60109\n2,73,996,-41,47,121,1,1,0.58743\n3,73,996,-42,47,121,1,1,0.58009\n4,73,997,-43,47,121,1,1,0.55943\n5,73,997,-43,47,120,1,1,0.55682\n6,73,998,-44,47,121,1,1,0.53911\n7,73,998,-44,47,120,1,1,0.5365\n8,73,999,-45,47,120,1,1,0.51653\n1,74,1449,251,55,171,1,1,0.8396\n2,74,1448,250,54,170,1,1,0.82818\n3,74,1447,249,53,170,1,1,0.8159\n4,74,1446,248,53,170,1,1,0.80702\n5,74,1445,247,52,170,1,1,0.79455\n6,74,1444,246,52,170,1,1,0.78594\n7,74,1443,245,51,169,1,1,0.77432\n8,74,1442,244,50,169,1,1,0.76148\n1,75,1420,198,46,171,1,1,0.55567\n2,75,1418,197,46,171,1,1,0.56791\n3,75,1417,196,46,171,1,1,0.57162\n4,75,1415,196,46,171,1,1,0.57843\n5,75,1414,195,46,171,1,1,0.58226\n6,75,1413,195,46,171,1,1,0.58028\n7,75,1411,194,46,171,1,1,0.59339\n8,75,1410,193,46,171,1,1,0.59735\n1,76,704,-5,53,163,1,1,0.80251\n2,76,704,-5,53,163,1,1,0.80251\n3,76,704,-5,53,163,1,1,0.80251\n4,76,704,-5,53,163,1,1,0.80251\n5,76,704,-5,53,163,1,1,0.80251\n6,76,704,-5,53,163,1,1,0.80251\n7,76,704,-5,53,163,1,1,0.80251\n8,76,704,-5,53,163,1,1,0.80251\n1,77,759,-59,40,110,1,1,0.45946\n2,77,758,-60,40,110,1,1,0.45045\n3,77,758,-61,40,110,1,1,0.44144\n4,77,757,-62,40,110,1,1,0.42189\n5,77,757,-62,40,109,1,1,0.41685\n6,77,756,-63,40,110,1,1,0.40277\n7,77,756,-64,40,110,1,1,0.3942\n8,77,755,-64,40,109,1,1,0.37916\n1,78,551,-43,37,132,1,1,0.2873\n2,78,551,-43,37,131,1,1,0.28947\n3,78,551,-43,37,131,1,1,0.28947\n4,78,551,-43,37,131,1,1,0.28947\n5,78,551,-43,37,131,1,1,0.28947\n6,78,551,-43,38,131,1,1,0.28477\n7,78,551,-43,38,131,1,1,0.28477\n8,78,551,-43,38,131,1,1,0.28477\n1,79,598,-7,61,77,0,7,0.052109\n2,79,598,-7,61,77,0,7,0.052109\n3,79,598,-7,61,77,0,7,0.052109\n4,79,598,-7,61,77,0,7,0.052109\n5,79,598,-7,61,77,0,7,0.052109\n6,79,598,-7,61,77,0,7,0.052109\n7,79,598,-7,61,77,0,7,0.052109\n8,79,598,-7,61,77,0,7,0.052109\n1,80,-30,877,72,241,1,1,0.485\n2,80,-30,875,72,243,1,1,0.48574\n3,80,-30,874,72,244,1,1,0.48611\n4,80,-30,872,72,246,1,1,0.48683\n5,80,-30,871,72,247,1,1,0.48719\n6,80,-29,869,72,249,1,1,0.49951\n7,80,-29,868,72,250,1,1,0.49986\n8,80,-29,866,72,252,1,1,0.50057\n1,81,1195,40,76,112,0,7,0.99207\n2,81,1195,39,76,112,0,7,0.99471\n3,81,1195,39,76,112,0,7,0.99471\n4,81,1196,39,75,112,0,7,0.99464\n5,81,1196,38,75,113,0,7,0.99469\n6,81,1197,38,75,113,0,7,0.99446\n7,81,1197,38,75,112,0,7,0.99721\n8,81,1197,37,75,113,0,7,0.99723\n1,82,506,133,55,174,1,1,0.21633\n2,82,505,134,55,173,1,1,0.21182\n3,82,505,135,55,173,1,1,0.19037\n4,82,505,136,55,173,1,1,0.16872\n5,82,504,137,55,173,1,1,0.16359\n6,82,504,138,55,173,1,1,0.14163\n7,82,504,139,55,173,1,1,0.11946\n8,82,503,140,55,173,1,1,0.11412\n1,83,514,148,88,180,1,1,1.0\n2,83,513,148,89,181,1,1,1.0\n3,83,512,148,91,182,1,1,1.0\n4,83,511,148,93,183,1,1,1.0\n5,83,510,148,94,184,1,1,1.0\n6,83,509,148,96,186,1,1,1.0\n7,83,508,148,98,187,1,1,1.0\n8,83,507,148,99,188,1,1,1.0\n1,84,463,85,52,173,1,1,0.68337\n2,84,463,83,51,173,1,1,0.69993\n3,84,463,82,51,173,1,1,0.70214\n4,84,463,81,51,173,1,1,0.70535\n5,84,463,80,51,172,1,1,0.69509\n6,84,463,79,51,172,1,1,0.69853\n7,84,463,77,50,173,1,1,0.72774\n8,84,463,76,50,172,1,1,0.71812\n1,85,417,93,55,167,1,1,1.0\n2,85,417,92,54,167,1,1,1.0\n3,85,417,91,54,168,1,1,1.0\n4,85,417,91,54,168,1,1,1.0\n5,85,417,90,54,169,1,1,1.0\n6,85,417,90,54,169,1,1,1.0\n7,85,417,89,53,169,1,1,1.0\n8,85,417,88,53,170,1,1,1.0\n1,86,541,64,41,167,1,1,0.45536\n2,86,540,64,42,167,1,1,0.4593\n3,86,540,64,42,167,1,1,0.46221\n4,86,540,64,42,167,1,1,0.46512\n5,86,540,64,42,167,1,1,0.46955\n6,86,540,64,42,167,1,1,0.47231\n7,86,540,64,42,167,1,1,0.47508\n8,86,540,64,42,167,1,1,0.47896\n1,87,491,42,49,161,1,1,0.41358\n2,87,490,42,50,160,1,1,0.40762\n3,87,490,42,50,160,1,1,0.40762\n4,87,490,42,50,160,1,1,0.40762\n5,87,490,42,50,160,1,1,0.40762\n6,87,490,42,50,160,1,1,0.40762\n7,87,490,42,50,160,1,1,0.41213\n8,87,490,42,50,160,1,1,0.41237\n1,88,356,105,52,179,1,1,1.0\n2,88,356,105,52,178,1,1,1.0\n3,88,356,105,52,178,1,1,1.0\n4,88,356,105,52,178,1,1,1.0\n5,88,356,105,52,178,1,1,1.0\n6,88,356,105,52,178,1,1,1.0\n7,88,356,105,52,178,1,1,1.0\n8,88,356,105,52,178,1,1,1.0\n1,89,373,77,47,155,1,1,0.27431\n2,89,372,77,47,154,1,1,0.27621\n3,89,372,77,47,154,1,1,0.27581\n4,89,371,77,47,154,1,1,0.27513\n5,89,371,77,47,154,1,1,0.27487\n6,89,371,77,47,154,1,1,0.27487\n7,89,370,77,47,154,1,1,0.27419\n8,89,370,77,47,154,1,1,0.27406\n1,90,287,124,53,170,1,1,1.0\n2,90,286,123,53,170,1,1,1.0\n3,90,286,123,53,170,1,1,1.0\n4,90,286,123,53,170,1,1,1.0\n5,90,286,123,53,170,1,1,1.0\n6,90,286,123,53,170,1,1,1.0\n7,90,286,123,53,170,1,1,1.0\n8,90,286,123,53,170,1,1,1.0\n1,91,337,86,49,175,1,1,0.3842\n2,91,336,86,49,174,1,1,0.40206\n3,91,336,86,49,174,1,1,0.40206\n4,91,336,86,49,174,1,1,0.40206\n5,91,336,86,49,174,1,1,0.40206\n6,91,336,86,49,174,1,1,0.40206\n7,91,336,86,49,174,1,1,0.40206\n8,91,336,86,49,174,1,1,0.40206\n1,92,223,129,46,164,1,1,0.96699\n2,92,222,128,46,165,1,1,0.96193\n3,92,222,128,45,165,1,1,0.96111\n4,92,221,128,46,165,1,1,0.9577\n5,92,221,128,45,165,1,1,0.95678\n6,92,220,128,46,165,1,1,0.95347\n7,92,220,128,45,165,1,1,0.95246\n8,92,219,128,45,165,1,1,0.94814\n1,93,266,92,56,180,1,1,0.42425\n2,93,265,92,56,180,1,1,0.42037\n3,93,264,92,56,180,1,1,0.43491\n4,93,263,92,57,180,1,1,0.43084\n5,93,262,93,57,180,1,1,0.44142\n6,93,261,93,58,180,1,1,0.43721\n7,93,260,93,58,180,1,1,0.45135\n8,93,259,94,58,180,1,1,0.46193\n1,94,242,85,58,170,1,1,0.089305\n2,94,242,85,58,169,1,1,0.088136\n3,94,242,85,58,169,1,1,0.084546\n4,94,242,85,58,169,1,1,0.081256\n5,94,242,85,58,169,1,1,0.081555\n6,94,242,85,58,169,1,1,0.078066\n7,94,242,85,58,169,1,1,0.074875\n8,94,242,85,58,169,1,1,0.075573\n1,95,264,71,54,167,1,1,0.09697\n2,95,264,71,54,166,1,1,0.09755\n3,95,264,71,54,166,1,1,0.09755\n4,95,264,71,54,166,1,1,0.09755\n5,95,264,71,54,166,1,1,0.09951\n6,95,264,71,54,166,1,1,0.09951\n7,95,264,71,54,166,1,1,0.09951\n8,95,264,71,54,166,1,1,0.10463\n1,96,209,95,42,180,1,1,0.2702\n2,96,209,95,41,179,1,1,0.2541\n3,96,209,95,41,179,1,1,0.2541\n4,96,209,96,41,178,1,1,0.23996\n5,96,209,96,41,178,1,1,0.23996\n6,96,209,96,41,178,1,1,0.22479\n7,96,209,97,41,177,1,1,0.22566\n8,96,209,97,41,177,1,1,0.21041\n1,97,914,-107,38,115,1,1,0.068966\n2,97,914,-107,38,115,1,1,0.068966\n3,97,914,-107,38,115,1,1,0.068966\n4,97,914,-107,38,115,1,1,0.068966\n5,97,914,-107,38,115,1,1,0.068966\n6,97,914,-107,38,115,1,1,0.068966\n7,97,914,-107,38,115,1,1,0.068966\n8,97,914,-107,38,115,1,1,0.068966\n1,116,1220,-14,63,148,1,1,0.36871\n2,116,1218,-14,64,147,1,1,0.35343\n3,116,1217,-14,65,147,1,1,0.35197\n4,116,1216,-14,66,147,1,1,0.35054\n5,116,1214,-14,68,147,1,1,0.34215\n6,116,1213,-14,69,147,1,1,0.33378\n7,116,1212,-14,70,146,1,1,0.33429\n8,116,1210,-14,72,146,1,1,0.32616\n1,137,39,309,115,117,0,11,1.0\n2,137,39,309,115,117,0,11,1.0\n3,137,39,309,115,117,0,11,1.0\n4,137,39,309,115,117,0,11,1.0\n5,137,39,309,115,117,0,11,1.0\n6,137,39,309,115,117,0,11,1.0\n7,137,39,309,115,117,0,11,1.0\n8,137,39,309,115,117,0,11,1.0\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-04-FRCNN/gt/gt_temp.txt",
    "content": "1.000000,1.000000,1363.000000,569.000000,103.000000,241.000000,1.000000,1.000000,0.860140\n2.000000,1.000000,1362.000000,568.000000,103.000000,241.000000,1.000000,1.000000,0.861730\n3.000000,1.000000,1362.000000,568.000000,103.000000,241.000000,1.000000,1.000000,0.861730\n4.000000,1.000000,1362.000000,568.000000,103.000000,241.000000,1.000000,1.000000,0.861730\n5.000000,1.000000,1362.000000,568.000000,103.000000,241.000000,1.000000,1.000000,0.861730\n6.000000,1.000000,1362.000000,568.000000,103.000000,241.000000,1.000000,1.000000,0.861730\n7.000000,1.000000,1362.000000,568.000000,103.000000,241.000000,1.000000,1.000000,0.861730\n8.000000,1.000000,1362.000000,568.000000,103.000000,241.000000,1.000000,1.000000,0.861730\n1.000000,2.000000,371.000000,410.000000,80.000000,239.000000,1.000000,1.000000,1.000000\n2.000000,2.000000,371.000000,408.000000,80.000000,239.000000,1.000000,1.000000,1.000000\n3.000000,2.000000,372.000000,407.000000,80.000000,239.000000,1.000000,1.000000,1.000000\n4.000000,2.000000,372.000000,406.000000,81.000000,239.000000,1.000000,1.000000,1.000000\n5.000000,2.000000,373.000000,405.000000,81.000000,239.000000,1.000000,1.000000,1.000000\n6.000000,2.000000,373.000000,404.000000,82.000000,238.000000,1.000000,1.000000,1.000000\n7.000000,2.000000,374.000000,403.000000,81.000000,238.000000,1.000000,1.000000,1.000000\n8.000000,2.000000,374.000000,402.000000,82.000000,238.000000,1.000000,1.000000,1.000000\n1.000000,3.000000,103.000000,549.000000,83.000000,251.000000,1.000000,1.000000,1.000000\n2.000000,3.000000,102.000000,549.000000,83.000000,250.000000,1.000000,1.000000,1.000000\n3.000000,3.000000,102.000000,549.000000,83.000000,250.000000,1.000000,1.000000,1.000000\n4.000000,3.000000,102.000000,549.000000,83.000000,250.000000,1.000000,1.000000,1.000000\n5.000000,3.000000,102.000000,549.000000,83.000000,250.000000,1.000000,1.000000,1.000000\n6.000000,3.000000,102.000000,549.000000,83.000000,250.000000,1.000000,1.000000,1.000000\n7.000000,3.000000,102.000000,549.000000,83.000000,250.000000,1.000000,1.000000,1.000000\n8.000000,3.000000,102.000000,549.000000,83.000000,250.000000,1.000000,1.000000,1.000000\n1.000000,4.000000,1734.000000,457.000000,76.000000,213.000000,1.000000,1.000000,0.983860\n2.000000,4.000000,1733.000000,457.000000,76.000000,212.000000,1.000000,1.000000,0.975860\n3.000000,4.000000,1732.000000,457.000000,76.000000,212.000000,1.000000,1.000000,0.967810\n4.000000,4.000000,1731.000000,457.000000,76.000000,212.000000,1.000000,1.000000,0.959760\n5.000000,4.000000,1730.000000,457.000000,76.000000,211.000000,1.000000,1.000000,0.951850\n6.000000,4.000000,1730.000000,457.000000,75.000000,211.000000,1.000000,1.000000,0.951220\n7.000000,4.000000,1729.000000,457.000000,75.000000,211.000000,1.000000,1.000000,0.943090\n8.000000,4.000000,1728.000000,457.000000,75.000000,210.000000,1.000000,1.000000,0.935150\n1.000000,5.000000,1098.000000,980.000000,78.000000,208.000000,1.000000,1.000000,0.483250\n2.000000,5.000000,1101.000000,979.000000,78.000000,209.000000,1.000000,1.000000,0.485710\n3.000000,5.000000,1104.000000,978.000000,78.000000,210.000000,1.000000,1.000000,0.488150\n4.000000,5.000000,1107.000000,977.000000,78.000000,211.000000,1.000000,1.000000,0.490570\n5.000000,5.000000,1111.000000,977.000000,77.000000,211.000000,1.000000,1.000000,0.490570\n6.000000,5.000000,1114.000000,976.000000,78.000000,212.000000,1.000000,1.000000,0.492960\n7.000000,5.000000,1117.000000,975.000000,78.000000,213.000000,1.000000,1.000000,0.495330\n8.000000,5.000000,1121.000000,975.000000,77.000000,213.000000,1.000000,1.000000,0.495330\n1.000000,6.000000,632.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n2.000000,6.000000,631.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n3.000000,6.000000,631.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n4.000000,6.000000,631.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n5.000000,6.000000,631.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n6.000000,6.000000,631.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n7.000000,6.000000,631.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n8.000000,6.000000,631.000000,761.000000,100.000000,251.000000,1.000000,1.000000,0.319030\n1.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n2.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n3.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n4.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n5.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n6.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n7.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n8.000000,7.000000,623.000000,901.000000,144.000000,123.000000,0.000000,11.000000,1.000000\n1.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n2.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n3.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n4.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n5.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n6.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n7.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n8.000000,8.000000,671.000000,427.000000,42.000000,652.000000,0.000000,10.000000,0.800630\n1.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n2.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n3.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n4.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n5.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n6.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n7.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n8.000000,9.000000,1516.000000,126.000000,100.000000,73.000000,0.000000,11.000000,1.000000\n1.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n2.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n3.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n4.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n5.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n6.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n7.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n8.000000,10.000000,1556.000000,-1.000000,25.000000,129.000000,0.000000,11.000000,1.000000\n1.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.719090\n2.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.701010\n3.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.687130\n4.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.672410\n5.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.659800\n6.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.643400\n7.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.626160\n8.000000,11.000000,1545.000000,196.000000,28.000000,81.000000,0.000000,10.000000,0.611860\n1.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n2.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n3.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n4.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n5.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n6.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n7.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n8.000000,12.000000,1513.000000,266.000000,95.000000,80.000000,0.000000,11.000000,1.000000\n1.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n2.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n3.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n4.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n5.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n6.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n7.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n8.000000,13.000000,1537.000000,342.000000,29.000000,197.000000,0.000000,10.000000,0.171210\n1.000000,14.000000,1537.000000,381.000000,94.000000,212.000000,0.000000,10.000000,0.443540\n2.000000,14.000000,1537.000000,381.000000,93.000000,212.000000,0.000000,10.000000,0.440420\n3.000000,14.000000,1537.000000,381.000000,93.000000,212.000000,0.000000,10.000000,0.440420\n4.000000,14.000000,1537.000000,381.000000,93.000000,212.000000,0.000000,10.000000,0.440420\n5.000000,14.000000,1537.000000,381.000000,93.000000,212.000000,0.000000,10.000000,0.440420\n6.000000,14.000000,1537.000000,381.000000,93.000000,212.000000,0.000000,10.000000,0.440420\n7.000000,14.000000,1537.000000,381.000000,93.000000,212.000000,0.000000,10.000000,0.440420\n8.000000,14.000000,1537.000000,381.000000,93.000000,212.000000,0.000000,10.000000,0.440420\n1.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803240\n2.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803520\n3.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803520\n4.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803520\n5.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803520\n6.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803520\n7.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803520\n8.000000,15.000000,1299.000000,74.000000,76.000000,92.000000,0.000000,10.000000,0.803520\n1.000000,16.000000,1311.000000,2.000000,49.000000,73.000000,0.000000,11.000000,1.000000\n2.000000,16.000000,1311.000000,1.000000,48.000000,74.000000,0.000000,11.000000,1.000000\n3.000000,16.000000,1311.000000,1.000000,48.000000,74.000000,0.000000,11.000000,1.000000\n4.000000,16.000000,1311.000000,1.000000,48.000000,74.000000,0.000000,11.000000,1.000000\n5.000000,16.000000,1311.000000,1.000000,48.000000,74.000000,0.000000,11.000000,1.000000\n6.000000,16.000000,1311.000000,1.000000,48.000000,74.000000,0.000000,11.000000,1.000000\n7.000000,16.000000,1311.000000,1.000000,48.000000,74.000000,0.000000,11.000000,1.000000\n8.000000,16.000000,1311.000000,1.000000,48.000000,74.000000,0.000000,11.000000,1.000000\n1.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n2.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n3.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n4.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n5.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n6.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n7.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n8.000000,17.000000,1564.000000,380.000000,53.000000,110.000000,0.000000,11.000000,1.000000\n1.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n2.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n3.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n4.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n5.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n6.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n7.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n8.000000,18.000000,1842.000000,581.000000,80.000000,78.000000,0.000000,11.000000,1.000000\n1.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n2.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n3.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n4.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n5.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n6.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n7.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n8.000000,19.000000,1817.000000,918.000000,19.000000,101.000000,0.000000,10.000000,0.741180\n1.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n2.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n3.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n4.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n5.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n6.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n7.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n8.000000,20.000000,1860.000000,978.000000,19.000000,106.000000,0.000000,10.000000,0.915890\n1.000000,21.000000,1838.000000,655.000000,15.000000,53.000000,0.000000,10.000000,0.708330\n2.000000,21.000000,1837.000000,655.000000,16.000000,52.000000,0.000000,10.000000,0.725860\n3.000000,21.000000,1837.000000,655.000000,16.000000,52.000000,0.000000,10.000000,0.725860\n4.000000,21.000000,1837.000000,655.000000,16.000000,52.000000,0.000000,10.000000,0.725860\n5.000000,21.000000,1837.000000,655.000000,16.000000,52.000000,0.000000,10.000000,0.725860\n6.000000,21.000000,1837.000000,655.000000,16.000000,52.000000,0.000000,10.000000,0.725860\n7.000000,21.000000,1837.000000,655.000000,16.000000,52.000000,0.000000,10.000000,0.725860\n8.000000,21.000000,1837.000000,655.000000,16.000000,52.000000,0.000000,10.000000,0.725860\n1.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n2.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n3.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n4.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n5.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n6.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n7.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n8.000000,22.000000,1856.000000,724.000000,35.000000,258.000000,0.000000,11.000000,1.000000\n1.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n2.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n3.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n4.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n5.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n6.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n7.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n8.000000,23.000000,1826.000000,697.000000,42.000000,268.000000,0.000000,11.000000,1.000000\n1.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n2.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n3.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n4.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n5.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n6.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n7.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n8.000000,24.000000,622.000000,274.000000,91.000000,90.000000,0.000000,11.000000,1.000000\n1.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n2.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n3.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n4.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n5.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n6.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n7.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n8.000000,25.000000,616.000000,129.000000,101.000000,71.000000,0.000000,11.000000,1.000000\n1.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n2.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n3.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n4.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n5.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n6.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n7.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n8.000000,26.000000,650.000000,1.000000,29.000000,133.000000,0.000000,11.000000,1.000000\n1.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n2.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n3.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n4.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n5.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n6.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n7.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n8.000000,27.000000,654.000000,194.000000,26.000000,84.000000,0.000000,11.000000,1.000000\n1.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n2.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n3.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n4.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n5.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n6.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n7.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n8.000000,28.000000,654.000000,363.000000,30.000000,82.000000,0.000000,11.000000,1.000000\n1.000000,29.000000,621.000000,437.000000,55.000000,245.000000,0.000000,10.000000,0.881750\n2.000000,29.000000,620.000000,437.000000,56.000000,245.000000,0.000000,10.000000,0.883830\n3.000000,29.000000,620.000000,437.000000,56.000000,245.000000,0.000000,10.000000,0.883830\n4.000000,29.000000,620.000000,437.000000,56.000000,245.000000,0.000000,10.000000,0.883830\n5.000000,29.000000,620.000000,437.000000,56.000000,245.000000,0.000000,10.000000,0.883830\n6.000000,29.000000,620.000000,437.000000,56.000000,245.000000,0.000000,10.000000,0.883830\n7.000000,29.000000,620.000000,437.000000,56.000000,245.000000,0.000000,10.000000,0.883830\n8.000000,29.000000,620.000000,437.000000,56.000000,245.000000,0.000000,10.000000,0.883830\n1.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n2.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n3.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n4.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n5.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n6.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n7.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n8.000000,30.000000,616.000000,-1.000000,40.000000,137.000000,0.000000,10.000000,0.324500\n1.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n2.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n3.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n4.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n5.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n6.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n7.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n8.000000,31.000000,1413.000000,723.000000,39.000000,100.000000,0.000000,10.000000,1.000000\n1.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n2.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n3.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n4.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n5.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n6.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n7.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n8.000000,32.000000,1468.000000,864.000000,43.000000,102.000000,0.000000,10.000000,1.000000\n1.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n2.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n3.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n4.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n5.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n6.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n7.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n8.000000,33.000000,706.000000,590.000000,36.000000,93.000000,0.000000,10.000000,0.783780\n1.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n2.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n3.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n4.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n5.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n6.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n7.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n8.000000,34.000000,92.000000,0.000000,115.000000,219.000000,0.000000,11.000000,1.000000\n1.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n2.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n3.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n4.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n5.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n6.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n7.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n8.000000,35.000000,198.000000,33.000000,32.000000,127.000000,0.000000,11.000000,1.000000\n1.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n2.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n3.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n4.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n5.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n6.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n7.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n8.000000,36.000000,224.000000,42.000000,23.000000,65.000000,0.000000,11.000000,1.000000\n1.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n2.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n3.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n4.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n5.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n6.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n7.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n8.000000,37.000000,1871.000000,257.000000,26.000000,69.000000,0.000000,10.000000,1.000000\n1.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n2.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n3.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n4.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n5.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n6.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n7.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n8.000000,38.000000,1584.000000,777.000000,34.000000,50.000000,0.000000,10.000000,1.000000\n1.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n2.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n3.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n4.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n5.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n6.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n7.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n8.000000,39.000000,1658.000000,915.000000,36.000000,56.000000,0.000000,10.000000,1.000000\n1.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n2.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n3.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n4.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n5.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n6.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n7.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n8.000000,40.000000,1340.000000,288.000000,28.000000,36.000000,0.000000,10.000000,0.864860\n1.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.178570\n2.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.178570\n3.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.178570\n4.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.178570\n5.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.178570\n6.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.142860\n7.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.142860\n8.000000,41.000000,1249.000000,111.000000,27.000000,32.000000,0.000000,10.000000,0.142860\n1.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.516130\n2.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.548390\n3.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.548390\n4.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.548390\n5.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.548390\n6.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.548390\n7.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.548390\n8.000000,42.000000,718.000000,790.000000,30.000000,48.000000,0.000000,10.000000,0.548390\n1.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n2.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n3.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n4.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n5.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n6.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n7.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n8.000000,43.000000,703.000000,503.000000,30.000000,43.000000,0.000000,10.000000,0.645160\n1.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n2.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n3.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n4.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n5.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n6.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n7.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n8.000000,44.000000,699.000000,428.000000,30.000000,42.000000,0.000000,10.000000,0.516130\n1.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n2.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n3.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n4.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n5.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n6.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n7.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n8.000000,45.000000,687.000000,206.000000,77.000000,112.000000,0.000000,7.000000,0.792260\n1.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n2.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n3.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n4.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n5.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n6.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n7.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n8.000000,46.000000,678.000000,291.000000,57.000000,121.000000,0.000000,7.000000,0.576030\n1.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n2.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n3.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n4.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n5.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n6.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n7.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n8.000000,47.000000,1543.000000,628.000000,176.000000,116.000000,0.000000,4.000000,1.000000\n1.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.989810\n2.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.988240\n3.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.988240\n4.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.988240\n5.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.988240\n6.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.988240\n7.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.988240\n8.000000,48.000000,1193.000000,320.000000,270.000000,255.000000,0.000000,3.000000,0.988240\n1.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n2.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n3.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n4.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n5.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n6.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n7.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n8.000000,49.000000,1790.000000,94.000000,152.000000,105.000000,0.000000,4.000000,0.856210\n1.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n2.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n3.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n4.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n5.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n6.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n7.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n8.000000,50.000000,1483.000000,538.000000,252.000000,181.000000,0.000000,5.000000,0.646350\n1.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n2.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n3.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n4.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n5.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n6.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n7.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n8.000000,51.000000,1279.000000,173.000000,129.000000,104.000000,0.000000,4.000000,1.000000\n1.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.126810\n2.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.118650\n3.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.113660\n4.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.106820\n5.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.101570\n6.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.098096\n7.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.089115\n8.000000,52.000000,1280.000000,153.000000,162.000000,96.000000,0.000000,4.000000,0.083486\n1.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n2.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n3.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n4.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n5.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n6.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n7.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n8.000000,53.000000,1249.000000,150.000000,160.000000,99.000000,0.000000,4.000000,0.211990\n1.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.275910\n2.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.273130\n3.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.270560\n4.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.271370\n5.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.265020\n6.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.265960\n7.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.263460\n8.000000,54.000000,1185.000000,-7.000000,153.000000,95.000000,0.000000,4.000000,0.257580\n1.000000,55.000000,563.000000,162.000000,166.000000,97.000000,0.000000,4.000000,0.278200\n2.000000,55.000000,562.000000,161.000000,166.000000,97.000000,0.000000,4.000000,0.273490\n3.000000,55.000000,562.000000,161.000000,166.000000,97.000000,0.000000,4.000000,0.267510\n4.000000,55.000000,562.000000,161.000000,166.000000,97.000000,0.000000,4.000000,0.261520\n5.000000,55.000000,562.000000,161.000000,166.000000,97.000000,0.000000,4.000000,0.261520\n6.000000,55.000000,562.000000,161.000000,166.000000,97.000000,0.000000,4.000000,0.255530\n7.000000,55.000000,562.000000,161.000000,166.000000,97.000000,0.000000,4.000000,0.249540\n8.000000,55.000000,562.000000,161.000000,166.000000,97.000000,0.000000,4.000000,0.249540\n1.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.384750\n2.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.383580\n3.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.382740\n4.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.381890\n5.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.381890\n6.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.381050\n7.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.380200\n8.000000,56.000000,550.000000,84.000000,172.000000,88.000000,0.000000,4.000000,0.380200\n1.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n2.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n3.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n4.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n5.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n6.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n7.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n8.000000,57.000000,517.000000,55.000000,170.000000,89.000000,0.000000,4.000000,0.165890\n1.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n2.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n3.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n4.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n5.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n6.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n7.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n8.000000,58.000000,574.000000,15.000000,139.000000,107.000000,0.000000,4.000000,0.205290\n1.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n2.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n3.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n4.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n5.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n6.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n7.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n8.000000,59.000000,1725.000000,882.000000,196.000000,134.000000,0.000000,4.000000,0.683290\n1.000000,60.000000,796.000000,149.000000,60.000000,175.000000,1.000000,1.000000,1.000000\n2.000000,60.000000,795.000000,149.000000,60.000000,174.000000,1.000000,1.000000,1.000000\n3.000000,60.000000,795.000000,149.000000,60.000000,174.000000,1.000000,1.000000,1.000000\n4.000000,60.000000,795.000000,149.000000,60.000000,174.000000,1.000000,1.000000,1.000000\n5.000000,60.000000,795.000000,149.000000,60.000000,174.000000,1.000000,1.000000,1.000000\n6.000000,60.000000,795.000000,149.000000,60.000000,174.000000,1.000000,1.000000,1.000000\n7.000000,60.000000,795.000000,149.000000,60.000000,174.000000,1.000000,1.000000,1.000000\n8.000000,60.000000,795.000000,149.000000,60.000000,174.000000,1.000000,1.000000,1.000000\n1.000000,61.000000,1789.000000,206.000000,65.000000,184.000000,1.000000,1.000000,1.000000\n2.000000,61.000000,1790.000000,207.000000,65.000000,183.000000,1.000000,1.000000,1.000000\n3.000000,61.000000,1791.000000,208.000000,65.000000,183.000000,1.000000,1.000000,1.000000\n4.000000,61.000000,1792.000000,209.000000,65.000000,182.000000,1.000000,1.000000,1.000000\n5.000000,61.000000,1794.000000,210.000000,64.000000,182.000000,1.000000,1.000000,1.000000\n6.000000,61.000000,1795.000000,211.000000,65.000000,181.000000,1.000000,1.000000,1.000000\n7.000000,61.000000,1796.000000,212.000000,65.000000,181.000000,1.000000,1.000000,1.000000\n8.000000,61.000000,1798.000000,213.000000,64.000000,180.000000,1.000000,1.000000,1.000000\n1.000000,62.000000,1487.000000,71.000000,53.000000,145.000000,1.000000,1.000000,0.765350\n2.000000,62.000000,1487.000000,71.000000,53.000000,145.000000,1.000000,1.000000,0.765350\n3.000000,62.000000,1487.000000,70.000000,53.000000,146.000000,1.000000,1.000000,0.766940\n4.000000,62.000000,1487.000000,70.000000,53.000000,146.000000,1.000000,1.000000,0.766940\n5.000000,62.000000,1487.000000,70.000000,53.000000,146.000000,1.000000,1.000000,0.766940\n6.000000,62.000000,1487.000000,70.000000,53.000000,146.000000,1.000000,1.000000,0.766940\n7.000000,62.000000,1487.000000,70.000000,53.000000,146.000000,1.000000,1.000000,0.766940\n8.000000,62.000000,1487.000000,70.000000,53.000000,146.000000,1.000000,1.000000,0.766940\n1.000000,63.000000,1636.000000,265.000000,66.000000,181.000000,1.000000,1.000000,1.000000\n2.000000,63.000000,1634.000000,264.000000,66.000000,181.000000,1.000000,1.000000,1.000000\n3.000000,63.000000,1633.000000,263.000000,65.000000,182.000000,1.000000,1.000000,1.000000\n4.000000,63.000000,1632.000000,263.000000,64.000000,182.000000,1.000000,1.000000,1.000000\n5.000000,63.000000,1631.000000,262.000000,63.000000,182.000000,1.000000,1.000000,1.000000\n6.000000,63.000000,1630.000000,262.000000,63.000000,182.000000,1.000000,1.000000,0.994540\n7.000000,63.000000,1629.000000,261.000000,62.000000,183.000000,1.000000,1.000000,0.988960\n8.000000,63.000000,1628.000000,260.000000,61.000000,183.000000,1.000000,1.000000,0.983430\n1.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.116280\n2.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.093023\n3.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.093023\n4.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.093023\n5.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.093023\n6.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.093023\n7.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.093023\n8.000000,64.000000,1358.000000,612.000000,42.000000,89.000000,0.000000,10.000000,0.093023\n1.000000,65.000000,1557.000000,254.000000,60.000000,192.000000,1.000000,1.000000,0.267050\n2.000000,65.000000,1555.000000,253.000000,60.000000,192.000000,1.000000,1.000000,0.252870\n3.000000,65.000000,1554.000000,252.000000,60.000000,192.000000,1.000000,1.000000,0.248360\n4.000000,65.000000,1553.000000,251.000000,60.000000,192.000000,1.000000,1.000000,0.243860\n5.000000,65.000000,1551.000000,251.000000,60.000000,192.000000,1.000000,1.000000,0.224500\n6.000000,65.000000,1550.000000,250.000000,60.000000,192.000000,1.000000,1.000000,0.219990\n7.000000,65.000000,1549.000000,249.000000,60.000000,192.000000,1.000000,1.000000,0.215490\n8.000000,65.000000,1547.000000,249.000000,60.000000,192.000000,1.000000,1.000000,0.203010\n1.000000,66.000000,1104.000000,212.000000,56.000000,181.000000,1.000000,1.000000,1.000000\n2.000000,66.000000,1097.000000,211.000000,61.000000,181.000000,1.000000,1.000000,1.000000\n3.000000,66.000000,1091.000000,211.000000,66.000000,180.000000,1.000000,1.000000,1.000000\n4.000000,66.000000,1085.000000,210.000000,70.000000,180.000000,1.000000,1.000000,1.000000\n5.000000,66.000000,1079.000000,210.000000,75.000000,180.000000,1.000000,1.000000,1.000000\n6.000000,66.000000,1073.000000,209.000000,79.000000,180.000000,1.000000,1.000000,1.000000\n7.000000,66.000000,1067.000000,209.000000,84.000000,179.000000,1.000000,1.000000,1.000000\n8.000000,66.000000,1061.000000,208.000000,88.000000,180.000000,1.000000,1.000000,1.000000\n1.000000,67.000000,1031.000000,133.000000,80.000000,183.000000,1.000000,1.000000,0.943640\n2.000000,67.000000,1031.000000,133.000000,79.000000,183.000000,1.000000,1.000000,0.899180\n3.000000,67.000000,1031.000000,134.000000,78.000000,182.000000,1.000000,1.000000,0.860690\n4.000000,67.000000,1031.000000,135.000000,77.000000,181.000000,1.000000,1.000000,0.819100\n5.000000,67.000000,1031.000000,135.000000,76.000000,181.000000,1.000000,1.000000,0.778580\n6.000000,67.000000,1031.000000,136.000000,75.000000,180.000000,1.000000,1.000000,0.733060\n7.000000,67.000000,1031.000000,137.000000,74.000000,179.000000,1.000000,1.000000,0.688000\n8.000000,67.000000,1031.000000,137.000000,73.000000,179.000000,1.000000,1.000000,0.639940\n1.000000,68.000000,228.000000,401.000000,63.000000,203.000000,1.000000,1.000000,1.000000\n2.000000,68.000000,226.000000,399.000000,63.000000,202.000000,1.000000,1.000000,1.000000\n3.000000,68.000000,224.000000,398.000000,64.000000,201.000000,1.000000,1.000000,1.000000\n4.000000,68.000000,223.000000,397.000000,63.000000,200.000000,1.000000,1.000000,1.000000\n5.000000,68.000000,221.000000,395.000000,64.000000,200.000000,1.000000,1.000000,1.000000\n6.000000,68.000000,220.000000,394.000000,64.000000,199.000000,1.000000,1.000000,1.000000\n7.000000,68.000000,218.000000,393.000000,64.000000,197.000000,1.000000,1.000000,1.000000\n8.000000,68.000000,216.000000,391.000000,65.000000,197.000000,1.000000,1.000000,1.000000\n1.000000,69.000000,264.000000,365.000000,60.000000,221.000000,1.000000,1.000000,0.615420\n2.000000,69.000000,262.000000,363.000000,60.000000,221.000000,1.000000,1.000000,0.615420\n3.000000,69.000000,260.000000,362.000000,60.000000,220.000000,1.000000,1.000000,0.602030\n4.000000,69.000000,259.000000,361.000000,59.000000,219.000000,1.000000,1.000000,0.609700\n5.000000,69.000000,257.000000,360.000000,59.000000,218.000000,1.000000,1.000000,0.593910\n6.000000,69.000000,256.000000,359.000000,58.000000,217.000000,1.000000,1.000000,0.587390\n7.000000,69.000000,254.000000,357.000000,58.000000,217.000000,1.000000,1.000000,0.589640\n8.000000,69.000000,252.000000,356.000000,58.000000,216.000000,1.000000,1.000000,0.573540\n1.000000,70.000000,872.000000,122.000000,58.000000,180.000000,1.000000,1.000000,1.000000\n2.000000,70.000000,872.000000,122.000000,59.000000,180.000000,1.000000,1.000000,1.000000\n3.000000,70.000000,873.000000,123.000000,59.000000,180.000000,1.000000,1.000000,1.000000\n4.000000,70.000000,874.000000,124.000000,59.000000,179.000000,1.000000,1.000000,1.000000\n5.000000,70.000000,874.000000,124.000000,60.000000,180.000000,1.000000,1.000000,1.000000\n6.000000,70.000000,875.000000,125.000000,60.000000,179.000000,1.000000,1.000000,1.000000\n7.000000,70.000000,876.000000,126.000000,60.000000,179.000000,1.000000,1.000000,1.000000\n8.000000,70.000000,876.000000,126.000000,61.000000,179.000000,1.000000,1.000000,1.000000\n1.000000,71.000000,912.000000,129.000000,48.000000,161.000000,1.000000,1.000000,0.612240\n2.000000,71.000000,912.000000,130.000000,48.000000,161.000000,1.000000,1.000000,0.591840\n3.000000,71.000000,912.000000,131.000000,49.000000,161.000000,1.000000,1.000000,0.580000\n4.000000,71.000000,912.000000,132.000000,49.000000,161.000000,1.000000,1.000000,0.560000\n5.000000,71.000000,913.000000,134.000000,49.000000,160.000000,1.000000,1.000000,0.560000\n6.000000,71.000000,913.000000,135.000000,50.000000,160.000000,1.000000,1.000000,0.549020\n7.000000,71.000000,913.000000,136.000000,50.000000,160.000000,1.000000,1.000000,0.529410\n8.000000,71.000000,914.000000,138.000000,50.000000,159.000000,1.000000,1.000000,0.529410\n1.000000,72.000000,1040.000000,-39.000000,46.000000,123.000000,1.000000,1.000000,0.677420\n2.000000,72.000000,1039.000000,-40.000000,46.000000,123.000000,1.000000,1.000000,0.669350\n3.000000,72.000000,1039.000000,-40.000000,46.000000,122.000000,1.000000,1.000000,0.666670\n4.000000,72.000000,1039.000000,-41.000000,46.000000,123.000000,1.000000,1.000000,0.661290\n5.000000,72.000000,1039.000000,-41.000000,46.000000,122.000000,1.000000,1.000000,0.658540\n6.000000,72.000000,1039.000000,-42.000000,46.000000,123.000000,1.000000,1.000000,0.653230\n7.000000,72.000000,1039.000000,-42.000000,46.000000,122.000000,1.000000,1.000000,0.650410\n8.000000,72.000000,1039.000000,-43.000000,46.000000,122.000000,1.000000,1.000000,0.642280\n1.000000,73.000000,996.000000,-41.000000,47.000000,121.000000,1.000000,1.000000,0.601090\n2.000000,73.000000,996.000000,-41.000000,47.000000,121.000000,1.000000,1.000000,0.587430\n3.000000,73.000000,996.000000,-42.000000,47.000000,121.000000,1.000000,1.000000,0.580090\n4.000000,73.000000,997.000000,-43.000000,47.000000,121.000000,1.000000,1.000000,0.559430\n5.000000,73.000000,997.000000,-43.000000,47.000000,120.000000,1.000000,1.000000,0.556820\n6.000000,73.000000,998.000000,-44.000000,47.000000,121.000000,1.000000,1.000000,0.539110\n7.000000,73.000000,998.000000,-44.000000,47.000000,120.000000,1.000000,1.000000,0.536500\n8.000000,73.000000,999.000000,-45.000000,47.000000,120.000000,1.000000,1.000000,0.516530\n1.000000,74.000000,1449.000000,251.000000,55.000000,171.000000,1.000000,1.000000,0.839600\n2.000000,74.000000,1448.000000,250.000000,54.000000,170.000000,1.000000,1.000000,0.828180\n3.000000,74.000000,1447.000000,249.000000,53.000000,170.000000,1.000000,1.000000,0.815900\n4.000000,74.000000,1446.000000,248.000000,53.000000,170.000000,1.000000,1.000000,0.807020\n5.000000,74.000000,1445.000000,247.000000,52.000000,170.000000,1.000000,1.000000,0.794550\n6.000000,74.000000,1444.000000,246.000000,52.000000,170.000000,1.000000,1.000000,0.785940\n7.000000,74.000000,1443.000000,245.000000,51.000000,169.000000,1.000000,1.000000,0.774320\n8.000000,74.000000,1442.000000,244.000000,50.000000,169.000000,1.000000,1.000000,0.761480\n1.000000,75.000000,1420.000000,198.000000,46.000000,171.000000,1.000000,1.000000,0.555670\n2.000000,75.000000,1418.000000,197.000000,46.000000,171.000000,1.000000,1.000000,0.567910\n3.000000,75.000000,1417.000000,196.000000,46.000000,171.000000,1.000000,1.000000,0.571620\n4.000000,75.000000,1415.000000,196.000000,46.000000,171.000000,1.000000,1.000000,0.578430\n5.000000,75.000000,1414.000000,195.000000,46.000000,171.000000,1.000000,1.000000,0.582260\n6.000000,75.000000,1413.000000,195.000000,46.000000,171.000000,1.000000,1.000000,0.580280\n7.000000,75.000000,1411.000000,194.000000,46.000000,171.000000,1.000000,1.000000,0.593390\n8.000000,75.000000,1410.000000,193.000000,46.000000,171.000000,1.000000,1.000000,0.597350\n1.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n2.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n3.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n4.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n5.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n6.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n7.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n8.000000,76.000000,704.000000,-5.000000,53.000000,163.000000,1.000000,1.000000,0.802510\n1.000000,77.000000,759.000000,-59.000000,40.000000,110.000000,1.000000,1.000000,0.459460\n2.000000,77.000000,758.000000,-60.000000,40.000000,110.000000,1.000000,1.000000,0.450450\n3.000000,77.000000,758.000000,-61.000000,40.000000,110.000000,1.000000,1.000000,0.441440\n4.000000,77.000000,757.000000,-62.000000,40.000000,110.000000,1.000000,1.000000,0.421890\n5.000000,77.000000,757.000000,-62.000000,40.000000,109.000000,1.000000,1.000000,0.416850\n6.000000,77.000000,756.000000,-63.000000,40.000000,110.000000,1.000000,1.000000,0.402770\n7.000000,77.000000,756.000000,-64.000000,40.000000,110.000000,1.000000,1.000000,0.394200\n8.000000,77.000000,755.000000,-64.000000,40.000000,109.000000,1.000000,1.000000,0.379160\n1.000000,78.000000,551.000000,-43.000000,37.000000,132.000000,1.000000,1.000000,0.287300\n2.000000,78.000000,551.000000,-43.000000,37.000000,131.000000,1.000000,1.000000,0.289470\n3.000000,78.000000,551.000000,-43.000000,37.000000,131.000000,1.000000,1.000000,0.289470\n4.000000,78.000000,551.000000,-43.000000,37.000000,131.000000,1.000000,1.000000,0.289470\n5.000000,78.000000,551.000000,-43.000000,37.000000,131.000000,1.000000,1.000000,0.289470\n6.000000,78.000000,551.000000,-43.000000,38.000000,131.000000,1.000000,1.000000,0.284770\n7.000000,78.000000,551.000000,-43.000000,38.000000,131.000000,1.000000,1.000000,0.284770\n8.000000,78.000000,551.000000,-43.000000,38.000000,131.000000,1.000000,1.000000,0.284770\n1.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n2.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n3.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n4.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n5.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n6.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n7.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n8.000000,79.000000,598.000000,-7.000000,61.000000,77.000000,0.000000,7.000000,0.052109\n1.000000,80.000000,-30.000000,877.000000,72.000000,241.000000,1.000000,1.000000,0.485000\n2.000000,80.000000,-30.000000,875.000000,72.000000,243.000000,1.000000,1.000000,0.485740\n3.000000,80.000000,-30.000000,874.000000,72.000000,244.000000,1.000000,1.000000,0.486110\n4.000000,80.000000,-30.000000,872.000000,72.000000,246.000000,1.000000,1.000000,0.486830\n5.000000,80.000000,-30.000000,871.000000,72.000000,247.000000,1.000000,1.000000,0.487190\n6.000000,80.000000,-29.000000,869.000000,72.000000,249.000000,1.000000,1.000000,0.499510\n7.000000,80.000000,-29.000000,868.000000,72.000000,250.000000,1.000000,1.000000,0.499860\n8.000000,80.000000,-29.000000,866.000000,72.000000,252.000000,1.000000,1.000000,0.500570\n1.000000,81.000000,1195.000000,40.000000,76.000000,112.000000,0.000000,7.000000,0.992070\n2.000000,81.000000,1195.000000,39.000000,76.000000,112.000000,0.000000,7.000000,0.994710\n3.000000,81.000000,1195.000000,39.000000,76.000000,112.000000,0.000000,7.000000,0.994710\n4.000000,81.000000,1196.000000,39.000000,75.000000,112.000000,0.000000,7.000000,0.994640\n5.000000,81.000000,1196.000000,38.000000,75.000000,113.000000,0.000000,7.000000,0.994690\n6.000000,81.000000,1197.000000,38.000000,75.000000,113.000000,0.000000,7.000000,0.994460\n7.000000,81.000000,1197.000000,38.000000,75.000000,112.000000,0.000000,7.000000,0.997210\n8.000000,81.000000,1197.000000,37.000000,75.000000,113.000000,0.000000,7.000000,0.997230\n1.000000,82.000000,506.000000,133.000000,55.000000,174.000000,1.000000,1.000000,0.216330\n2.000000,82.000000,505.000000,134.000000,55.000000,173.000000,1.000000,1.000000,0.211820\n3.000000,82.000000,505.000000,135.000000,55.000000,173.000000,1.000000,1.000000,0.190370\n4.000000,82.000000,505.000000,136.000000,55.000000,173.000000,1.000000,1.000000,0.168720\n5.000000,82.000000,504.000000,137.000000,55.000000,173.000000,1.000000,1.000000,0.163590\n6.000000,82.000000,504.000000,138.000000,55.000000,173.000000,1.000000,1.000000,0.141630\n7.000000,82.000000,504.000000,139.000000,55.000000,173.000000,1.000000,1.000000,0.119460\n8.000000,82.000000,503.000000,140.000000,55.000000,173.000000,1.000000,1.000000,0.114120\n1.000000,83.000000,514.000000,148.000000,88.000000,180.000000,1.000000,1.000000,1.000000\n2.000000,83.000000,513.000000,148.000000,89.000000,181.000000,1.000000,1.000000,1.000000\n3.000000,83.000000,512.000000,148.000000,91.000000,182.000000,1.000000,1.000000,1.000000\n4.000000,83.000000,511.000000,148.000000,93.000000,183.000000,1.000000,1.000000,1.000000\n5.000000,83.000000,510.000000,148.000000,94.000000,184.000000,1.000000,1.000000,1.000000\n6.000000,83.000000,509.000000,148.000000,96.000000,186.000000,1.000000,1.000000,1.000000\n7.000000,83.000000,508.000000,148.000000,98.000000,187.000000,1.000000,1.000000,1.000000\n8.000000,83.000000,507.000000,148.000000,99.000000,188.000000,1.000000,1.000000,1.000000\n1.000000,84.000000,463.000000,85.000000,52.000000,173.000000,1.000000,1.000000,0.683370\n2.000000,84.000000,463.000000,83.000000,51.000000,173.000000,1.000000,1.000000,0.699930\n3.000000,84.000000,463.000000,82.000000,51.000000,173.000000,1.000000,1.000000,0.702140\n4.000000,84.000000,463.000000,81.000000,51.000000,173.000000,1.000000,1.000000,0.705350\n5.000000,84.000000,463.000000,80.000000,51.000000,172.000000,1.000000,1.000000,0.695090\n6.000000,84.000000,463.000000,79.000000,51.000000,172.000000,1.000000,1.000000,0.698530\n7.000000,84.000000,463.000000,77.000000,50.000000,173.000000,1.000000,1.000000,0.727740\n8.000000,84.000000,463.000000,76.000000,50.000000,172.000000,1.000000,1.000000,0.718120\n1.000000,85.000000,417.000000,93.000000,55.000000,167.000000,1.000000,1.000000,1.000000\n2.000000,85.000000,417.000000,92.000000,54.000000,167.000000,1.000000,1.000000,1.000000\n3.000000,85.000000,417.000000,91.000000,54.000000,168.000000,1.000000,1.000000,1.000000\n4.000000,85.000000,417.000000,91.000000,54.000000,168.000000,1.000000,1.000000,1.000000\n5.000000,85.000000,417.000000,90.000000,54.000000,169.000000,1.000000,1.000000,1.000000\n6.000000,85.000000,417.000000,90.000000,54.000000,169.000000,1.000000,1.000000,1.000000\n7.000000,85.000000,417.000000,89.000000,53.000000,169.000000,1.000000,1.000000,1.000000\n8.000000,85.000000,417.000000,88.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n1.000000,86.000000,541.000000,64.000000,41.000000,167.000000,1.000000,1.000000,0.455360\n2.000000,86.000000,540.000000,64.000000,42.000000,167.000000,1.000000,1.000000,0.459300\n3.000000,86.000000,540.000000,64.000000,42.000000,167.000000,1.000000,1.000000,0.462210\n4.000000,86.000000,540.000000,64.000000,42.000000,167.000000,1.000000,1.000000,0.465120\n5.000000,86.000000,540.000000,64.000000,42.000000,167.000000,1.000000,1.000000,0.469550\n6.000000,86.000000,540.000000,64.000000,42.000000,167.000000,1.000000,1.000000,0.472310\n7.000000,86.000000,540.000000,64.000000,42.000000,167.000000,1.000000,1.000000,0.475080\n8.000000,86.000000,540.000000,64.000000,42.000000,167.000000,1.000000,1.000000,0.478960\n1.000000,87.000000,491.000000,42.000000,49.000000,161.000000,1.000000,1.000000,0.413580\n2.000000,87.000000,490.000000,42.000000,50.000000,160.000000,1.000000,1.000000,0.407620\n3.000000,87.000000,490.000000,42.000000,50.000000,160.000000,1.000000,1.000000,0.407620\n4.000000,87.000000,490.000000,42.000000,50.000000,160.000000,1.000000,1.000000,0.407620\n5.000000,87.000000,490.000000,42.000000,50.000000,160.000000,1.000000,1.000000,0.407620\n6.000000,87.000000,490.000000,42.000000,50.000000,160.000000,1.000000,1.000000,0.407620\n7.000000,87.000000,490.000000,42.000000,50.000000,160.000000,1.000000,1.000000,0.412130\n8.000000,87.000000,490.000000,42.000000,50.000000,160.000000,1.000000,1.000000,0.412370\n1.000000,88.000000,356.000000,105.000000,52.000000,179.000000,1.000000,1.000000,1.000000\n2.000000,88.000000,356.000000,105.000000,52.000000,178.000000,1.000000,1.000000,1.000000\n3.000000,88.000000,356.000000,105.000000,52.000000,178.000000,1.000000,1.000000,1.000000\n4.000000,88.000000,356.000000,105.000000,52.000000,178.000000,1.000000,1.000000,1.000000\n5.000000,88.000000,356.000000,105.000000,52.000000,178.000000,1.000000,1.000000,1.000000\n6.000000,88.000000,356.000000,105.000000,52.000000,178.000000,1.000000,1.000000,1.000000\n7.000000,88.000000,356.000000,105.000000,52.000000,178.000000,1.000000,1.000000,1.000000\n8.000000,88.000000,356.000000,105.000000,52.000000,178.000000,1.000000,1.000000,1.000000\n1.000000,89.000000,373.000000,77.000000,47.000000,155.000000,1.000000,1.000000,0.274310\n2.000000,89.000000,372.000000,77.000000,47.000000,154.000000,1.000000,1.000000,0.276210\n3.000000,89.000000,372.000000,77.000000,47.000000,154.000000,1.000000,1.000000,0.275810\n4.000000,89.000000,371.000000,77.000000,47.000000,154.000000,1.000000,1.000000,0.275130\n5.000000,89.000000,371.000000,77.000000,47.000000,154.000000,1.000000,1.000000,0.274870\n6.000000,89.000000,371.000000,77.000000,47.000000,154.000000,1.000000,1.000000,0.274870\n7.000000,89.000000,370.000000,77.000000,47.000000,154.000000,1.000000,1.000000,0.274190\n8.000000,89.000000,370.000000,77.000000,47.000000,154.000000,1.000000,1.000000,0.274060\n1.000000,90.000000,287.000000,124.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n2.000000,90.000000,286.000000,123.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n3.000000,90.000000,286.000000,123.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n4.000000,90.000000,286.000000,123.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n5.000000,90.000000,286.000000,123.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n6.000000,90.000000,286.000000,123.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n7.000000,90.000000,286.000000,123.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n8.000000,90.000000,286.000000,123.000000,53.000000,170.000000,1.000000,1.000000,1.000000\n1.000000,91.000000,337.000000,86.000000,49.000000,175.000000,1.000000,1.000000,0.384200\n2.000000,91.000000,336.000000,86.000000,49.000000,174.000000,1.000000,1.000000,0.402060\n3.000000,91.000000,336.000000,86.000000,49.000000,174.000000,1.000000,1.000000,0.402060\n4.000000,91.000000,336.000000,86.000000,49.000000,174.000000,1.000000,1.000000,0.402060\n5.000000,91.000000,336.000000,86.000000,49.000000,174.000000,1.000000,1.000000,0.402060\n6.000000,91.000000,336.000000,86.000000,49.000000,174.000000,1.000000,1.000000,0.402060\n7.000000,91.000000,336.000000,86.000000,49.000000,174.000000,1.000000,1.000000,0.402060\n8.000000,91.000000,336.000000,86.000000,49.000000,174.000000,1.000000,1.000000,0.402060\n1.000000,92.000000,223.000000,129.000000,46.000000,164.000000,1.000000,1.000000,0.966990\n2.000000,92.000000,222.000000,128.000000,46.000000,165.000000,1.000000,1.000000,0.961930\n3.000000,92.000000,222.000000,128.000000,45.000000,165.000000,1.000000,1.000000,0.961110\n4.000000,92.000000,221.000000,128.000000,46.000000,165.000000,1.000000,1.000000,0.957700\n5.000000,92.000000,221.000000,128.000000,45.000000,165.000000,1.000000,1.000000,0.956780\n6.000000,92.000000,220.000000,128.000000,46.000000,165.000000,1.000000,1.000000,0.953470\n7.000000,92.000000,220.000000,128.000000,45.000000,165.000000,1.000000,1.000000,0.952460\n8.000000,92.000000,219.000000,128.000000,45.000000,165.000000,1.000000,1.000000,0.948140\n1.000000,93.000000,266.000000,92.000000,56.000000,180.000000,1.000000,1.000000,0.424250\n2.000000,93.000000,265.000000,92.000000,56.000000,180.000000,1.000000,1.000000,0.420370\n3.000000,93.000000,264.000000,92.000000,56.000000,180.000000,1.000000,1.000000,0.434910\n4.000000,93.000000,263.000000,92.000000,57.000000,180.000000,1.000000,1.000000,0.430840\n5.000000,93.000000,262.000000,93.000000,57.000000,180.000000,1.000000,1.000000,0.441420\n6.000000,93.000000,261.000000,93.000000,58.000000,180.000000,1.000000,1.000000,0.437210\n7.000000,93.000000,260.000000,93.000000,58.000000,180.000000,1.000000,1.000000,0.451350\n8.000000,93.000000,259.000000,94.000000,58.000000,180.000000,1.000000,1.000000,0.461930\n1.000000,94.000000,242.000000,85.000000,58.000000,170.000000,1.000000,1.000000,0.089305\n2.000000,94.000000,242.000000,85.000000,58.000000,169.000000,1.000000,1.000000,0.088136\n3.000000,94.000000,242.000000,85.000000,58.000000,169.000000,1.000000,1.000000,0.084546\n4.000000,94.000000,242.000000,85.000000,58.000000,169.000000,1.000000,1.000000,0.081256\n5.000000,94.000000,242.000000,85.000000,58.000000,169.000000,1.000000,1.000000,0.081555\n6.000000,94.000000,242.000000,85.000000,58.000000,169.000000,1.000000,1.000000,0.078066\n7.000000,94.000000,242.000000,85.000000,58.000000,169.000000,1.000000,1.000000,0.074875\n8.000000,94.000000,242.000000,85.000000,58.000000,169.000000,1.000000,1.000000,0.075573\n1.000000,95.000000,264.000000,71.000000,54.000000,167.000000,1.000000,1.000000,0.096970\n2.000000,95.000000,264.000000,71.000000,54.000000,166.000000,1.000000,1.000000,0.097550\n3.000000,95.000000,264.000000,71.000000,54.000000,166.000000,1.000000,1.000000,0.097550\n4.000000,95.000000,264.000000,71.000000,54.000000,166.000000,1.000000,1.000000,0.097550\n5.000000,95.000000,264.000000,71.000000,54.000000,166.000000,1.000000,1.000000,0.099510\n6.000000,95.000000,264.000000,71.000000,54.000000,166.000000,1.000000,1.000000,0.099510\n7.000000,95.000000,264.000000,71.000000,54.000000,166.000000,1.000000,1.000000,0.099510\n8.000000,95.000000,264.000000,71.000000,54.000000,166.000000,1.000000,1.000000,0.104630\n1.000000,96.000000,209.000000,95.000000,42.000000,180.000000,1.000000,1.000000,0.270200\n2.000000,96.000000,209.000000,95.000000,41.000000,179.000000,1.000000,1.000000,0.254100\n3.000000,96.000000,209.000000,95.000000,41.000000,179.000000,1.000000,1.000000,0.254100\n4.000000,96.000000,209.000000,96.000000,41.000000,178.000000,1.000000,1.000000,0.239960\n5.000000,96.000000,209.000000,96.000000,41.000000,178.000000,1.000000,1.000000,0.239960\n6.000000,96.000000,209.000000,96.000000,41.000000,178.000000,1.000000,1.000000,0.224790\n7.000000,96.000000,209.000000,97.000000,41.000000,177.000000,1.000000,1.000000,0.225660\n8.000000,96.000000,209.000000,97.000000,41.000000,177.000000,1.000000,1.000000,0.210410\n1.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n2.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n3.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n4.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n5.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n6.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n7.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n8.000000,97.000000,914.000000,-107.000000,38.000000,115.000000,1.000000,1.000000,0.068966\n1.000000,116.000000,1220.000000,-14.000000,63.000000,148.000000,1.000000,1.000000,0.368710\n2.000000,116.000000,1218.000000,-14.000000,64.000000,147.000000,1.000000,1.000000,0.353430\n3.000000,116.000000,1217.000000,-14.000000,65.000000,147.000000,1.000000,1.000000,0.351970\n4.000000,116.000000,1216.000000,-14.000000,66.000000,147.000000,1.000000,1.000000,0.350540\n5.000000,116.000000,1214.000000,-14.000000,68.000000,147.000000,1.000000,1.000000,0.342150\n6.000000,116.000000,1213.000000,-14.000000,69.000000,147.000000,1.000000,1.000000,0.333780\n7.000000,116.000000,1212.000000,-14.000000,70.000000,146.000000,1.000000,1.000000,0.334290\n8.000000,116.000000,1210.000000,-14.000000,72.000000,146.000000,1.000000,1.000000,0.326160\n1.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n2.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n3.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n4.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n5.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n6.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n7.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n8.000000,137.000000,39.000000,309.000000,115.000000,117.000000,0.000000,11.000000,1.000000\n"
  },
  {
    "path": "assets/MOT17-mini/train/MOT17-04-FRCNN/seqinfo.ini",
    "content": "[Sequence]\nname=MOT17-04-FRCNN\nimDir=img1\nframeRate=30\nseqLength=1050\nimWidth=1920\nimHeight=1080\nimExt=.jpg\n"
  },
  {
    "path": "assets/file_banner.txt",
    "content": "Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n__version__ = '16.0.11'\n\nfrom boxmot.engine.results import track\nfrom boxmot.reid.core import ReID\nfrom boxmot.trackers.boosttrack.boosttrack import BoostTrack\nfrom boxmot.trackers.botsort.botsort import BotSort\nfrom boxmot.trackers.bytetrack.bytetrack import ByteTrack\nfrom boxmot.trackers.deepocsort.deepocsort import DeepOcSort\nfrom boxmot.trackers.hybridsort.hybridsort import HybridSort\nfrom boxmot.trackers.ocsort.ocsort import OcSort\nfrom boxmot.trackers.sfsort.sfsort import SFSORT\nfrom boxmot.trackers.strongsort.strongsort import StrongSort\nfrom boxmot.trackers.tracker_zoo import create_tracker, get_tracker_config\n\nTRACKERS = [\n    \"bytetrack\",\n    \"botsort\",\n    \"strongsort\",\n    \"ocsort\",\n    \"deepocsort\",\n    \"hybridsort\",\n    \"boosttrack\",\n    \"sfsort\",\n]\n\n__all__ = (\n    \"__version__\",\n    \"StrongSort\",\n    \"OcSort\",\n    \"ByteTrack\",\n    \"BotSort\",\n    \"DeepOcSort\",\n    \"HybridSort\",\n    \"BoostTrack\",\n    \"SFSORT\",\n    \"create_tracker\",\n    \"get_tracker_config\",\n    \"gsi\",\n)\n"
  },
  {
    "path": "boxmot/configs/datasets/FastTracker-Benchmark-MOT.yaml",
    "content": "# FastTracker Benchmark MOT – multi-object tracking in traffic scenes\n# 12 sequences, 15 classes, ~800K detections\n#\n# Frame-based layout (trackeval): <source>/<split>/<seq>/img/*.jpg, <seq>/gt/gt.txt\ndownload:\n  runs_url: null\n  dataset_url: \"hf://Fleyderer/FastTracker-Benchmark-MOT/FastTracker-Benchmark-MOT\"\n\nbenchmark:\n  source: \"boxmot/engine/trackeval/data/FastTracker-Benchmark-MOT\"\n  split: \"train\"\n  eval_classes:\n    1: person\n    2: bus_small\n    3: bus_big\n    4: truck_small\n    5: truck_big\n    6: car\n    7: bike\n    8: motorbike\n    10: tractor\n    11: trailor\n    12: wheelchair\n    13: heavy_equipment\n    14: pm\n    15: umbrella\n  distractor_classes:\n    9: ignore_region\n"
  },
  {
    "path": "boxmot/configs/datasets/MOT17-ablation.yaml",
    "content": "# https://motchallenge.net/data/MOT17/\ndownload:\n  runs_url: \"https://github.com/mikel-brostrom/boxmot/releases/download/v16.0.11/runs.zip\"\n  dataset_url: \"https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/MOT17-ablation.zip\"\n\nbenchmark:\n  source: \"boxmot/engine/trackeval/data/MOT17-ablation\"\n  split: \"train\"\n  eval_classes:\n    1: pedestrian\n  distractor_classes:\n    2: person_on_vehicle\n    7: static_person\n    8: distractor\n    12: reflection\n\n"
  },
  {
    "path": "boxmot/configs/datasets/MOT20-ablation.yaml",
    "content": "# https://motchallenge.net/data/MOT20/\ndownload:\n  runs_url: \"https://github.com/mikel-brostrom/boxmot/releases/download/v16.0.11/runs.zip\"\n  dataset_url: \"https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/MOT20-ablation.zip\"\n\nbenchmark:\n  source: \"boxmot/engine/trackeval/data/MOT20-ablation\"\n  split: \"train\"\n  eval_classes:\n    1: pedestrian\n  distractor_classes:\n    2: person_on_vehicle\n    6: non_mot_vehicle\n    7: static_person\n    8: distractor\n    12: reflection\n\n"
  },
  {
    "path": "boxmot/configs/datasets/SportsMOT.yaml",
    "content": "# https://github.com/SportsMOT/SportsMOT\ndownload:\n  runs_url: \"\"\n  dataset_url: \"https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/SportsMOT.zip\"\n\nbenchmark:\n  source: \"boxmot/engine/trackeval/data/SportsMOT\"\n  split: \"val\"\n  eval_classes:\n    1: player\n"
  },
  {
    "path": "boxmot/configs/datasets/custom.yaml",
    "content": "# https://motchallenge.net/data/MOT17/\ndownload:\n  runs_url: \"\"\n  dataset_url: \"\"\n\nbenchmark:\n  source: \"assets/MOT17-mini\"\n  split: \"train\"\n  eval_classes:\n    1: pedestrian\n  distractor_classes:\n    2: person_on_vehicle\n    7: static_person\n    8: distractor\n    12: reflection\n\n"
  },
  {
    "path": "boxmot/configs/datasets/dancetrack-ablation.yaml",
    "content": "# https://huggingface.co/datasets/noahcao/dancetrack/tree/main\ndownload:\n  runs_url: null\n  dataset_url: \"https://huggingface.co/datasets/noahcao/dancetrack/resolve/main/test1.zip\"\n\nbenchmark:\n  source: \"boxmot/engine/trackeval/data/test1\"\n  split: \"val\"\n  eval_classes:\n    1: pedestrian\n"
  },
  {
    "path": "boxmot/configs/datasets/visdrone-ablation.yaml",
    "content": "# https://github.com/VisDrone/VisDrone-Dataset\n# object_category ids: 0 ignored regions*, 1 pedestrian, 2 people, 3 bicycle, 4 car, 5 van, 6 truck,\n# 7 tricycle, 8 awning-tricycle, 9 bus, 10 motor, 11 others*; *0 and 11 are ignored/distractors.\n# Many YOLO/Ultralytics conversions drop 0 & 11 and reindex 1-10 to 0-9.\ndownload:\n  runs_url: \"\"\n  dataset_url: \"https://drive.google.com/uc?export=download&id=14z8Acxopj1d86-qhsF1NwS4Bv3KYa4Wu\"\n\nbenchmark:\n  source: \"boxmot/engine/trackeval/data/VisDrone2019-MOT-test-dev\"\n  split: \"sequences\"\n  eval_classes:\n    1: pedestrian\n    2: people\n    3: bicycle\n    4: car\n    5: van\n    6: truck\n    7: tricycle\n    8: awning-tricycle\n    9: bus\n    10: motor\n  distractor_classes:\n    0: ignored regions\n    11: others\n"
  },
  {
    "path": "boxmot/configs/trackers/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/configs/trackers/boosttrack.yaml",
    "content": "max_age:\n  type: randint\n  default: 60\n  range: [15, 90]\n\nmin_hits:\n  type: randint\n  default: 3\n  range: [1, 5]\n\ndet_thresh:\n  type: uniform\n  default: 0.6\n  range: [0.1, 0.9]\n\niou_threshold:\n  type: uniform\n  default: 0.3\n  range: [0.1, 0.9]\n\nuse_ecc:\n  type: choice\n  default: True\n  options: [False, True]\n\nmin_box_area:\n  type: randint\n  default: 10\n  range: [5, 100]\n\naspect_ratio_thresh:\n  type: uniform\n  default: 1.6\n  range: [0.1, 2.0]\n\nlambda_iou:\n  type: uniform\n  default: 0.5\n  range: [0.3, 2.0]\n\nlambda_mhd:\n  type: uniform\n  default: 0.25\n  range: [0.5, 2.0]\n\nlambda_shape:\n  type: uniform\n  default: 0.25\n  range: [0.5, 2.0]\n\nuse_dlo_boost:\n  type: choice\n  default: True\n  options: [False, True]\n\nuse_duo_boost:\n  type: choice\n  default: True\n  options: [False, True]\n\ndlo_boost_coef:\n  type: uniform\n  default: 0.65\n  range: [0.3, 2.0]\n\ns_sim_corr:\n  type: choice\n  default: False\n  options: [False, True]\n\nuse_rich_s:\n  type: choice\n  default: True # True for BoostTrack++\n  options: [False, True]\n\nuse_sb:\n  type: choice\n  default: True # True for BoostTrack++\n  options: [False, True]\n\nuse_vt:\n  type: choice\n  default: True # True for BoostTrack++\n  options: [False, True]\n\nwith_reid:\n  type: choice\n  default: True # True for BoostTrack+ and BoostTrack++\n  options: [False, True]\n\n"
  },
  {
    "path": "boxmot/configs/trackers/botsort.yaml",
    "content": "track_high_thresh:\n  type: uniform\n  default: 0.6  # from the default parameters\n  range: [0.3, 0.7]\n\ntrack_low_thresh:\n  type: uniform\n  default: 0.1  # from the default parameters\n  range: [0.1, 0.3]\n\nnew_track_thresh:\n  type: uniform\n  default: 0.7  # from the default parameters\n  range: [0.1, 0.8]\n\ntrack_buffer:\n  type: randint\n  default: 30  # from the default parameters\n  range: [20, 81]\n\nmatch_thresh:\n  type: uniform\n  default: 0.8  # from the default parameters\n  range: [0.1, 0.9]\n\nproximity_thresh:\n  type: uniform\n  default: 0.5  # from the default parameters\n  range: [0.25, 0.75]\n\nappearance_thresh:\n  type: uniform\n  default: 0.25  # from the default parameters\n  range: [0.1, 0.8]\n\ncmc_method:\n  type: choice\n  default: ecc  # from the default parameters\n  options: [sof, ecc]"
  },
  {
    "path": "boxmot/configs/trackers/bytetrack.yaml",
    "content": "min_conf:\n  type: uniform\n  default: 0.1  # from the default parameters\n  range: [0.1, 0.3]\n\ntrack_thresh:\n  type: uniform\n  default: 0.6  # from the default parameters\n  range: [0.4, 0.7]\n\ntrack_buffer:\n  type: qrandint\n  default: 30  # from the default parameters\n  range: [10, 61, 10]  # step size of 10, upper bound exclusive\n\nmatch_thresh:\n  type: uniform\n  default: 0.9  # from the default parameters\n  range: [0.7, 0.9]\n\nframe_rate:\n  type: choice\n  default: 30  # from the default parameters\n  options: [25, 30]  # static choice for Ray Search"
  },
  {
    "path": "boxmot/configs/trackers/deepocsort.yaml",
    "content": "det_thresh:\n  type: uniform\n  default: 0.5  # from the default parameters\n  range: [0.3, 0.6]\n\nmax_age:\n  type: qrandint\n  default: 30  # from the default parameters\n  range: [10, 61, 10]  # step size of 10, upper bound exclusive\n\nmin_hits:\n  type: randint\n  default: 3  # from the default parameters\n  range: [1, 6]  # upper bound exclusive\n\niou_thresh:\n  type: uniform\n  default: 0.3  # from the default parameters\n  range: [0.1, 0.4]\n\ndelta_t:\n  type: randint\n  default: 3  # from the default parameters\n  range: [1, 6]  # upper bound exclusive\n\nasso_func:\n  type: choice\n  default: iou  # from the default parameters\n  options: ['iou', 'giou', 'diou', 'ciou', 'hmiou']\n\ninertia:\n  type: uniform\n  default: 0.2  # from the default parameters\n  range: [0.1, 0.4]\n\nw_association_emb:\n  type: uniform\n  default: 0.75  # from the default parameters\n  range: [0.5, 0.9]\n\nalpha_fixed_emb:\n  type: uniform\n  default: 0.95  # from the default parameters\n  range: [0.9, 0.999]\n\naw_param:\n  type: uniform\n  default: 0.5  # from the default parameters\n  range: [0.3, 0.7]\n\nembedding_off:\n  type: choice\n  default: false  # from the default parameters\n  options: [True, False]\n\ncmc_off:\n  type: choice\n  default: false  # from the default parameters\n  options: [True, False]\n\naw_off:\n  type: choice\n  default: false  # from the default parameters\n  options: [True, False]\n\nQ_xy_scaling:\n  type: uniform\n  default: 0.01  # from the default parameters\n  range: [0.01, 1]\n\nQ_s_scaling:\n  type: uniform\n  default: 0.0001  # from the default parameters\n  range: [0.0001, 1]\n"
  },
  {
    "path": "boxmot/configs/trackers/hybridsort.yaml",
    "content": "low_thresh:\n  type: uniform\n  default: 0.1\n  range: [0.05, 0.5]\n\ndelta_t:\n  type: randint\n  default: 3\n  range: [1, 6]  # upper bound exclusive\n\ninertia:\n  type: uniform\n  default: 0.05\n  range: [0.01, 0.2]\n\nuse_byte:\n  type: choice\n  default: True\n  options: [True, False]\n\nuse_custom_kf:\n  type: choice\n  default: True\n  options: [True, False]\n\nlongterm_bank_length:\n  type: qrandint\n  default: 30\n  range: [10, 61, 10]  # step size 10\n\nalpha:\n  type: uniform\n  default: 0.9\n  range: [0.7, 0.99]\n\nadapfs:\n  type: choice\n  default: False\n  options: [True, False]\n\ntrack_thresh:\n  type: uniform\n  default: 0.5\n  range: [0.3, 0.7]\n\nEG_weight_high_score:\n  type: uniform\n  default: 4.6\n  range: [2.0, 8.0]\n\nEG_weight_low_score:\n  type: uniform\n  default: 1.3\n  range: [0.5, 3.0]\n\nTCM_first_step:\n  type: choice\n  default: True\n  options: [True, False]\n\nTCM_byte_step:\n  type: choice\n  default: True\n  options: [True, False]\n\nTCM_byte_step_weight:\n  type: uniform\n  default: 1.0\n  range: [0.5, 2.0]\n\nhigh_score_matching_thresh:\n  type: uniform\n  default: 0.7\n  range: [0.5, 0.9]\n\nwith_longterm_reid:\n  type: choice\n  default: True\n  options: [True, False]\n\nlongterm_reid_weight:\n  type: uniform\n  default: 0.0\n  range: [0.0, 2.0]\n\nwith_longterm_reid_correction:\n  type: choice\n  default: True\n  options: [True, False]\n\nlongterm_reid_correction_thresh:\n  type: uniform\n  default: 0.4\n  range: [0.1, 0.7]\n\nlongterm_reid_correction_thresh_low:\n  type: uniform\n  default: 0.4\n  range: [0.1, 0.7]\n"
  },
  {
    "path": "boxmot/configs/trackers/imprassoc.yaml",
    "content": "track_high_thresh:\n  type: uniform\n  default: 0.5  # from the default parameters\n  range: [0.3, 0.7]\n\ntrack_low_thresh:\n  type: uniform\n  default: 0.1  # from the default parameters\n  range: [0.05, 0.3]\n\nnew_track_thresh:\n  type: uniform\n  default: 0.5  # from the default parameters\n  range: [0.5, 0.9]\n\ntrack_buffer:\n  type: qrandint\n  default: 35  # from the default parameters\n  range: [20, 80, 10]  # step size of 10, upper bound exclusive\n\nmatch_thresh:\n  type: uniform\n  default: 0.65  # from the default parameters\n  range: [0.1, 0.9]\n\nsecond_match_thresh:\n  type: uniform\n  default: 0.19  # from the default parameters\n  range: [0.1, 0.4]\n\noverlap_thresh:\n  type: uniform\n  default: 0.55  # from the default parameters\n  range: [0.3, 0.6]\n\nproximity_thresh:\n  type: uniform\n  default: 0.1  # from the default parameters\n  range: [0.1, 0.8]\n\nappearance_thresh:\n  type: uniform\n  default: 0.25  # from the default parameters\n  range: [0.1, 0.8]\n\ncmc_method:\n  type: choice\n  default: sparseOptFlow  # from the default parameters\n  options: ['sparseOptFlow']\n\nframe_rate:\n  type: choice\n  default: 30  # from the default parameters\n  options: [30]\n\nlambda_:\n  type: uniform\n  default: 0.05  # from the default parameters\n  range: [0.05, 0.3]"
  },
  {
    "path": "boxmot/configs/trackers/ocsort.yaml",
    "content": "min_conf:\n  type: uniform\n  default: 0.1  # from the default parameters\n  range: [0.1, 0.3]\n\ndet_thresh:\n  type: uniform\n  default: 0.6  # from the default parameters\n  range: [0, 0.6]\n\nmax_age:\n  type: grid_search\n  default: 30  # from the default parameters\n  values: [10, 20, 30, 40, 50, 60]\n\nmin_hits:\n  type: grid_search\n  default: 3  # from the default parameters\n  values: [1, 2, 3, 4, 5]\n\ndelta_t:\n  type: grid_search\n  default: 3  # from the default parameters\n  values: [1, 2, 3, 4, 5]\n\nasso_func:\n  type: choice\n  default: iou  # from the default parameters\n  options: ['iou', 'giou', 'diou', 'ciou', 'hmiou']\n\nuse_byte:\n  type: choice\n  default: false  # from the default parameters\n  options: [True, False]\n\ninertia:\n  type: uniform\n  default: 0.1  # from the default parameters\n  range: [0.1, 0.4]\n\nQ_xy_scaling:\n  type: loguniform\n  default: 0.01  # from the default parameters\n  range: [0.01, 1]\n\nQ_s_scaling:\n  type: loguniform\n  default: 0.0001  # from the default parameters\n  range: [0.0001, 1]\n"
  },
  {
    "path": "boxmot/configs/trackers/sfsort.yaml",
    "content": "high_th:\n  type: uniform\n  default: 0.6\n  range: [0.4, 0.9]\n\nmatch_th_first:\n  type: uniform\n  default: 0.67\n  range: [0.4, 0.67]\n\nnew_track_th:\n  type: uniform\n  default: 0.7\n  range: [0.6, 0.95]\n\nlow_th:\n  type: uniform\n  default: 0.1\n  range: [0.05, 0.4]\n\nmatch_th_second:\n  type: uniform\n  default: 0.3\n  range: [0.1, 0.6]\n\ndynamic_tuning:\n  type: choice\n  default: false\n  options: [true, false]\n\ncth:\n  type: uniform\n  default: 0.5\n  range: [0.2, 0.8]\n\nhigh_th_m:\n  type: uniform\n  default: 0.0\n  range: [0.02, 0.1]\n\nnew_track_th_m:\n  type: uniform\n  default: 0.0\n  range: [0.02, 0.08]\n\nmatch_th_first_m:\n  type: uniform\n  default: 0.0\n  range: [0.02, 0.08]\n\nmarginal_timeout:\n  type: qrandint\n  default: 0\n  range: [0, 501, 50]\n\ncentral_timeout:\n  type: qrandint\n  default: 0\n  range: [0, 1001, 100]\n\nhorizontal_margin:\n  type: qrandint\n  default: 0\n  range: [0, 641, 50]\n\nvertical_margin:\n  type: qrandint\n  default: 0\n  range: [0, 641, 50]\n"
  },
  {
    "path": "boxmot/configs/trackers/strongsort.yaml",
    "content": "min_conf:\n  type: uniform\n  default: 0.6  # from the default parameters\n  range: [0.2, 0.8]\n\nema_alpha:\n  type: uniform\n  default: 0.9  # from the default parameters\n  range: [0.7, 0.95]\n\nmax_cos_dist:\n  type: uniform\n  default: 0.4  # from the default parameters\n  range: [0.1, 0.4]\n\nmax_iou_dist:\n  type: uniform\n  default: 0.7  # from the default parameters\n  range: [0.5, 0.95]\n\nmax_age:\n  type: randint\n  default: 30  # from the default parameters\n  range: [10, 151]  # upper bound exclusive\n\nn_init:\n  type: randint\n  default: 3  # from the default parameters\n  range: [1, 4]  # upper bound exclusive\n\nmc_lambda:\n  type: uniform\n  default: 0.98  # from the default parameters\n  range: [0.90, 0.999]\n\nnn_budget:\n  type: choice\n  default: 100  # from the default parameters\n  options: [100]\n"
  },
  {
    "path": "boxmot/detectors/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.checks import RequirementsChecker\n\nchecker = RequirementsChecker()\n\nULTRALYTICS_MODELS = {\"yolov8\", \"yolov9\", \"yolov10\", \"yolo11\", \"yolo12\", \"yolo26\", \"sam\"}\nRTDETR_MODELS = {\"rtdetr_v2_r50vd\", \"rtdetr_v2_r18vd\", \"rtdetr_v2_r101vd\"}\nYOLOX_MODELS = {\"yolox_n\", \"yolox_s\", \"yolox_m\", \"yolox_l\", \"yolox_x\"}\n\n\ndef _check_model(name, markers):\n    \"\"\"Check if model name contains any of the markers.\"\"\"\n    return any(m in str(name) for m in markers)\n\n\ndef is_ultralytics_model(yolo_name):\n    return _check_model(yolo_name, ULTRALYTICS_MODELS)\n\n\ndef is_yolox_model(yolo_name):\n    return _check_model(yolo_name, YOLOX_MODELS)\n\n\ndef is_rtdetr_model(yolo_name):\n    return _check_model(yolo_name, RTDETR_MODELS)\n\n\ndef default_imgsz(yolo_name):\n    if is_ultralytics_model(yolo_name):\n        return [640, 640]\n    elif is_yolox_model(yolo_name):\n        return [1080, 1920]\n    else:\n        return [640, 640]\n\n\ndef get_yolo_inferer(yolo_model):\n    \"\"\"\n    Determines and returns the appropriate inference strategy class based on the model name.\n    Handles dependency checks and imports dynamically.\n    \"\"\"\n    model_name = str(yolo_model)\n\n    strategies = [\n        (\n            is_yolox_model,\n            (\"yolox\", \"tabulate\", \"thop\"),\n            {\"yolox\": [\"--no-deps\"]},\n            \"boxmot.detectors.yolox\",\n            \"YoloXStrategy\",\n        ),\n        (\n            is_ultralytics_model,\n            (),\n            {},\n            \"boxmot.detectors.ultralytics\",\n            \"UltralyticsStrategy\",\n        ),\n        (\n            is_rtdetr_model,\n            (\"transformers[torch]\", \"timm\"),\n            {},\n            \"boxmot.detectors.rtdetr\",\n            \"RTDetrStrategy\",\n        ),\n    ]\n\n    for check_func, packages, extra_args, module_path, class_name in strategies:\n        if check_func(model_name):\n            for package in packages:\n                try:\n                    # Simple import check for package name (stripping version/extras)\n                    pkg_name = package.split(\"[\")[0].split(\"=\")[0]\n                    __import__(pkg_name)\n                except ImportError:\n                    args = extra_args.get(pkg_name, [])\n                    checker.check_packages((package,), extra_args=args)\n\n            module = __import__(module_path, fromlist=[class_name])\n            return getattr(module, class_name)\n\n    LOGGER.error(f\"Failed to infer inference mode from yolo model name: {model_name}\")\n    LOGGER.error(\"Supported models must contain one of the following:\")\n    LOGGER.error(f\"  Ultralytics: {ULTRALYTICS_MODELS}\")\n    LOGGER.error(f\"  RTDetr: {RTDETR_MODELS}\")\n    LOGGER.error(f\"  YOLOX: {YOLOX_MODELS}\")\n    LOGGER.error(\n        \"By using these names, the default COCO-trained models will be downloaded automatically. \"\n        \"For custom models, the filename must include one of these substrings to route it to the correct package and architecture.\"\n    )\n    exit()\n\n"
  },
  {
    "path": "boxmot/detectors/detector.py",
    "content": "from pathlib import Path\nfrom typing import Any, Union\n\nimport cv2\nimport numpy as np\nimport torch\n\n\ndef resolve_image(image: Union[np.ndarray, str]) -> np.ndarray:\n    \"\"\"\n    Resolves an image input to a numpy array (cv2 BGR format).\n    \"\"\"\n    if isinstance(image, str) or isinstance(image, Path):\n        image_path = str(image)\n        img = cv2.imread(image_path)\n        if img is None:\n            raise FileNotFoundError(f\"Could not load image from {image_path}\")\n        return img\n    elif isinstance(image, np.ndarray):\n        return image\n    else:\n        raise ValueError(f\"Unsupported image type: {type(image)}\")\n\ndef load_weights(path: str) -> Any:\n    \"\"\"\n    Generic weight loader. By default uses torch.load\n    \"\"\"\n    if isinstance(path, str) and not Path(path).exists():\n         raise FileNotFoundError(f\"Weights file not found: {path}\")\n         \n    # This is a placeholder. Real models often need architecture init before loading weights.\n    # But strictly following the user snippet:\n    return torch.load(path, map_location='cpu') \n\nclass Detector:\n    def __init__(self, path: str):\n        self.path = path\n        self.model = self._load_model(path)\n\n    def _load_model(self, path: str):\n        return load_weights(path)\n\n    def preprocess(self, frame: np.ndarray, **kwargs):\n        raise NotImplementedError()\n\n    def process(self, frame, **kwargs):\n        raise NotImplementedError()\n\n    def postprocess(self, boxes, **kwargs):\n        raise NotImplementedError()\n        \n    def __call__(self, image: Union[np.ndarray, str], **kwargs):\n        image = resolve_image(image)\n        \n        frame = self.preprocess(image, **kwargs)\n        boxes = self.process(frame, **kwargs)\n        boxes = self.postprocess(boxes, **kwargs)\n        \n        return boxes\n"
  },
  {
    "path": "boxmot/detectors/rtdetr.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom pathlib import Path\n\nimport cv2\nimport numpy as np\nimport torch\nfrom PIL import Image\nfrom transformers import RTDetrImageProcessor, RTDetrV2ForObjectDetection\nfrom ultralytics.engine.results import Results\nfrom ultralytics.models.yolo.detect import DetectionPredictor\n\nfrom boxmot.utils import logger as LOGGER\n\n\nclass RTDetrStrategy:\n    pt = False\n    stride = 32\n    fp16 = False\n    triton = False\n    ch = 3\n\n    def __init__(self, model, device, args):\n        self.args = args\n        self.device = device\n\n        model = Path(str(model)).name\n        while model.endswith(\".pt\"):\n            model = model[:-3]\n        if not model.startswith(\"PekingU/\"):\n            model = f\"PekingU/{model}\"\n\n        LOGGER.info(f\"Loading RTDetr model: {model}\")\n        \n        # Load model and processor from Hugging Face\n        self.image_processor = RTDetrImageProcessor.from_pretrained(model)\n        self.model = RTDetrV2ForObjectDetection.from_pretrained(model).to(device)\n\n        # Get class names from model config\n        self.names = self.model.config.id2label\n\n    @torch.no_grad()\n    def __call__(self, im, augment, visualize, embed):\n        if isinstance(im, torch.Tensor):\n            im = im.cpu().numpy()\n            if im.ndim == 3 and im.shape[0] == 3:\n                im = im.transpose(1, 2, 0)\n            im = np.ascontiguousarray(im)\n\n        # Convert numpy image (BGR) to PIL Image (RGB)\n        image = Image.fromarray(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))\n        \n        inputs = self.image_processor(images=image, return_tensors=\"pt\").to(self.device)\n        outputs = self.model(**inputs)\n        \n        results = self.image_processor.post_process_object_detection(\n            outputs, \n            target_sizes=torch.tensor([(image.height, image.width)], device=self.device), \n            threshold=self.args.conf\n        )\n        \n        # Format results: [x1, y1, x2, y2, conf, cls]\n        detections = []\n        for result in results:\n            for score, label, box in zip(result[\"scores\"], result[\"labels\"], result[\"boxes\"]):\n                box = box.cpu().numpy()\n                score = score.item()\n                label = label.item()\n                detections.append([*box, score, label])\n                \n        if not detections:\n            return torch.zeros((1, 0, 6), device=self.device)\n            \n        return torch.tensor(detections, device=self.device).unsqueeze(0)\n\n    def warmup(self, imgsz):\n        pass\n\n    def update_im_paths(self, predictor: DetectionPredictor):\n        \"\"\"\n        This function saves image paths for the current batch,\n        being passed as callback on_predict_batch_start\n        \"\"\"\n        assert isinstance(\n            predictor, DetectionPredictor\n        ), \"Only ultralytics predictors are supported\"\n        self.im_paths = predictor.batch[0]\n\n    def preprocess(self, im) -> torch.Tensor:\n        # RTDetr expects PIL images or list of them, but here we just pass through\n        # The actual preprocessing happens in __call__\n        assert isinstance(im, list)\n        return im[0]\n\n    def postprocess(self, preds, im, im0s):\n        results = []\n        for i, pred in enumerate(preds):\n            im_path = self.im_paths[i] if hasattr(self, 'im_paths') and len(self.im_paths) else \"\"\n\n            if pred is None or len(pred) == 0:\n                pred = torch.empty((0, 6), device=self.device)\n                results.append(\n                    Results(path=im_path, boxes=pred, orig_img=im0s[i], names=self.names)\n                )\n                continue\n            \n            if self.args.classes:\n                pred = pred[\n                    torch.isin(pred[:, 5].cpu(), torch.as_tensor(self.args.classes))\n                ]\n            \n            results.append(\n                Results(path=im_path, boxes=pred, orig_img=im0s[i], names=self.names)\n            )\n        return results\n"
  },
  {
    "path": "boxmot/detectors/ultralytics.py",
    "content": "from pathlib import Path\n\nimport numpy as np\nfrom ultralytics import YOLO\n\nfrom boxmot.detectors.detector import Detector\nfrom boxmot.utils import WEIGHTS\n\n\nclass Ultralytics(Detector):\n    def __init__(self, path: str, device='cpu', conf=0.25, iou=0.45, imgsz=640):\n        self.device = device\n        self.conf = conf\n        self.iou = iou\n        self.imgsz = imgsz\n        \n        # Load Ultralytics model\n        # path could be 'yolov8n.pt' or local path\n        super().__init__(path)\n        \n    def _load_model(self, path: str):\n        # We rely on ultralytics own loading mechanism\n        return YOLO(WEIGHTS / Path(path).name)\n        \n    def preprocess(self, image: np.ndarray, **kwargs):\n        # Ultralytics handles preprocessing internally in __call__ usually,\n        # but to adhere to strict pipeline if needed:\n        # Here we just pass the image through, as model() call handles it.\n        return image\n\n    def process(self, frame, **kwargs):\n        # frame is just the image here\n        # Return results object\n        results = self.model(\n            frame, \n            conf=self.conf, \n            iou=self.iou, \n            imgsz=self.imgsz,\n            device=self.device,\n            verbose=False,\n            classes=kwargs.get('classes')\n        )\n        return results\n\n    def postprocess(self, results, **kwargs):\n        # results is a list of [Results] object (batch size 1 usually)\n        result = results[0]\n        \n        # Extract boxes: x1, y1, x2, y2, conf, cls\n        if result.boxes is None or len(result.boxes) == 0:\n             return np.empty((0, 6))\n             \n        # boxes.data is often (N, 6) tensor: x1, y1, x2, y2, conf, cls\n        dets = result.boxes.data.cpu().numpy()\n        return dets\n        \n    def __call__(self, image, **kwargs):\n        # Let ultralytics handle loading if passed to predict  \n        return super().__call__(image, **kwargs)\n"
  },
  {
    "path": "boxmot/detectors/yolox.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport fnmatch\n\nimport cv2\nimport numpy as np\nimport torch\nfrom ultralytics.engine.results import Results\nfrom ultralytics.models.yolo.detect import DetectionPredictor\nfrom yolox.exp import get_exp\nfrom yolox.utils import postprocess\nfrom yolox.utils.model_utils import fuse_model\n\nfrom boxmot.utils import logger as LOGGER\n\n# default model weigths for these model names\nYOLOX_ZOO = {\n    \"yolox_n.pt\": \"https://drive.google.com/uc?id=1AoN2AxzVwOLM0gJ15bcwqZUpFjlDV1dX\",\n    \"yolox_s.pt\": \"https://drive.google.com/uc?id=1uSmhXzyV1Zvb4TJJCzpsZOIcw7CCJLxj\",\n    \"yolox_m.pt\": \"https://drive.google.com/uc?id=11Zb0NN_Uu7JwUd9e6Nk8o2_EUfxWqsun\",\n    \"yolox_l.pt\": \"https://drive.google.com/uc?id=1XwfUuCBF4IgWBWK2H7oOhQgEj9Mrb3rz\",\n    \"yolox_x.pt\": \"https://drive.google.com/uc?id=1P4mY0Yyd3PPTybgZkjMYhFri88nTmJX5\",\n    # the source for the models below is SparseTrack: https://github.com/hustvl/SparseTrack#model-zoo\n    \"yolox_x_MOT17_ablation.pt\": \"https://drive.google.com/uc?id=1iqhM-6V_r1FpOlOzrdP_Ejshgk0DxOob\",\n    \"yolox_x_MOT20_ablation.pt\": \"https://drive.google.com/uc?id=1H1BxOfinONCSdQKnjGq0XlRxVUo_4M8o\",\n    \"yolox_x_dancetrack_ablation.pt\": \"https://drive.google.com/uc?id=1ZKpYmFYCsRdXuOL60NRuc7VXAFYRskXB\",\n    \"yolox_x_visdrone.pt\": \"https://drive.google.com/uc?id=1ajehBs9enBHhuBqGIoQPGqkkzasE9d3o\"\n}\n\n\ndef _coerce_torch_dtype(dtype, fallback: torch.Tensor) -> torch.dtype:\n    \"\"\"Map YOLOX's dtype strings (e.g., 'torch.mps.FloatTensor') to real torch dtypes.\"\"\"\n    if isinstance(dtype, torch.dtype):\n        return dtype\n    if isinstance(dtype, str):\n        lowered = dtype.lower()\n        if \"bfloat16\" in lowered:\n            return torch.bfloat16\n        if \"float16\" in lowered or \"half\" in lowered:\n            return torch.float16\n    # Default to the fallback tensor's dtype or float32.\n    return fallback.dtype if isinstance(fallback, torch.Tensor) else torch.float32\n\n\ndef _patch_yolox_head_decode_outputs_for_mps() -> None:\n    \"\"\"Monkeypatch YOLOXHead.decode_outputs to work on MPS (avoids .type with dtype strings).\"\"\"\n    try:\n        from yolox.models.yolo_head import YOLOXHead\n        from yolox.utils import meshgrid\n    except Exception:\n        return\n\n    if getattr(YOLOXHead, \"_boxmot_mps_patched\", False):\n        return\n\n    def decode_outputs(self, outputs, dtype):\n        dtype = _coerce_torch_dtype(dtype, outputs)\n        device = outputs.device\n        grids = []\n        strides = []\n        for (hsize, wsize), stride in zip(self.hw, self.strides):\n            yv, xv = meshgrid([\n                torch.arange(hsize, device=device),\n                torch.arange(wsize, device=device),\n            ])\n            grid = torch.stack((xv, yv), 2).view(1, -1, 2)\n            grids.append(grid)\n            shape = grid.shape[:2]\n            strides.append(torch.full((*shape, 1), stride, device=device, dtype=grid.dtype))\n\n        grids = torch.cat(grids, dim=1).to(device=device, dtype=dtype)\n        strides = torch.cat(strides, dim=1).to(device=device, dtype=dtype)\n\n        outputs = outputs.clone()\n        outputs[..., :2] = (outputs[..., :2] + grids) * strides\n        outputs[..., 2:4] = torch.exp(outputs[..., 2:4]) * strides\n        return outputs\n\n    YOLOXHead.decode_outputs = decode_outputs\n    YOLOXHead._boxmot_mps_patched = True\n\n\n_patch_yolox_head_decode_outputs_for_mps()\n\n\nclass YoloXStrategy:\n    \"\"\"YOLOX strategy for use with Ultralytics predictor workflow.\"\"\"\n    \n    pt = False\n    stride = 32\n    fp16 = False\n    triton = False\n    names = {\n        0: \"person\",\n        1: \"bicycle\",\n        2: \"car\",\n        3: \"motorcycle\",\n        4: \"airplane\",\n        5: \"bus\",\n        6: \"train\",\n        7: \"truck\",\n        8: \"boat\",\n        9: \"traffic light\",\n        10: \"fire hydrant\",\n        11: \"stop sign\",\n        12: \"parking meter\",\n        13: \"bench\",\n        14: \"bird\",\n        15: \"cat\",\n        16: \"dog\",\n        17: \"horse\",\n        18: \"sheep\",\n        19: \"cow\",\n        20: \"elephant\",\n        21: \"bear\",\n        22: \"zebra\",\n        23: \"giraffe\",\n        24: \"backpack\",\n        25: \"umbrella\",\n        26: \"handbag\",\n        27: \"tie\",\n        28: \"suitcase\",\n        29: \"frisbee\",\n        30: \"skis\",\n        31: \"snowboard\",\n        32: \"sports ball\",\n        33: \"kite\",\n        34: \"baseball bat\",\n        35: \"baseball glove\",\n        36: \"skateboard\",\n        37: \"surfboard\",\n        38: \"tennis racket\",\n        39: \"bottle\",\n        40: \"wine glass\",\n        41: \"cup\",\n        42: \"fork\",\n        43: \"knife\",\n        44: \"spoon\",\n        45: \"bowl\",\n        46: \"banana\",\n        47: \"apple\",\n        48: \"sandwich\",\n        49: \"orange\",\n        50: \"broccoli\",\n        51: \"carrot\",\n        52: \"hot dog\",\n        53: \"pizza\",\n        54: \"donut\",\n        55: \"cake\",\n        56: \"chair\",\n        57: \"couch\",\n        58: \"potted plant\",\n        59: \"bed\",\n        60: \"dining table\",\n        61: \"toilet\",\n        62: \"tv\",\n        63: \"laptop\",\n        64: \"mouse\",\n        65: \"remote\",\n        66: \"keyboard\",\n        67: \"cell phone\",\n        68: \"microwave\",\n        69: \"oven\",\n        70: \"toaster\",\n        71: \"sink\",\n        72: \"refrigerator\",\n        73: \"book\",\n        74: \"clock\",\n        75: \"vase\",\n        76: \"scissors\",\n        77: \"teddy bear\",\n        78: \"hair drier\",\n        79: \"toothbrush\",\n    }\n\n    def __init__(self, model, device, args):\n\n        self.ch = 3\n        self.args = args\n        raw = getattr(args, 'imgsz', None) or 640\n        vals = raw if isinstance(raw, (list, tuple)) else (raw,)\n        w, h = (vals * 2)[:2]\n        self.imgsz = [w, h]\n        self.pt = False\n        self.stride = 32  # max stride in YOLOX\n\n        # model_type one of: 'yolox_n', 'yolox_s', 'yolox_m', 'yolox_l', 'yolox_x'\n        model_type = self.get_model_from_weigths(YOLOX_ZOO.keys(), model)\n\n        # Map model type to YOLOX experiment name\n        # Custom trained models (e.g., yolox_x_MOT17_ablation) use the base architecture\n        if model_type == \"yolox_n\":\n            exp_name = \"yolox_nano\"\n        elif \"_MOT\" in model_type or \"_dancetrack\" in model_type or \"_visdrone\" in model_type:\n            # Extract base model: yolox_x_MOT17_ablation / yolox_x_visdrone -> yolox_x\n            exp_name = (\n                model_type.split(\"_MOT\")[0]\n                .split(\"_dancetrack\")[0]\n                .split(\"_visdrone\")[0]\n            )\n        else:\n            exp_name = model_type\n        exp = get_exp(None, exp_name)\n\n        LOGGER.info(f\"Loading {model_type} with {str(model)}\")\n\n        # download crowdhuman bytetrack models\n        if not model.exists() and (\n            model.stem == model_type or fnmatch.fnmatch(model.stem, \"yolox_x_*_ablation\")\n        ):\n            LOGGER.info(\"Downloading pretrained weights...\")\n            from boxmot.utils.download import download_file\n            download_file(\n                url=YOLOX_ZOO[model.stem + \".pt\"], dest=model, overwrite=False\n            )\n            # needed for bytetrack yolox people models\n            # update with your custom model needs\n            exp.num_classes = 1\n        elif model.stem.startswith(model_type):\n            exp.num_classes = 1\n\n        ckpt = torch.load(str(model), map_location=torch.device(\"cpu\"))\n\n        self.device = device\n        self.model = exp.get_model()\n        self.model.eval()\n        \n        # folow official yolox loading procedure\n        # https://github.com/Megvii-BaseDetection/YOLOX/blob/d872c71b/tools/eval.py#L148-L176\n        self.model.to(self.device)\n        self.model.eval()\n        self.model.load_state_dict(ckpt[\"model\"])\n        self.model = fuse_model(self.model)\n        self.im_paths = []\n        self._preproc_data = []\n\n    def get_model_from_weigths(self, model_names, weight_path):\n        for name in model_names:\n            if name in str(weight_path):\n                return name.split('.')[0]\n        return \"yolox_s\"  # default\n\n    @torch.no_grad()\n    def __call__(self, im, augment, visualize, embed):\n        if isinstance(im, list):\n            if len(im[0].shape) == 3:\n                im = torch.stack(im)\n            else:\n                im = torch.vstack(im)\n\n        if len(im.shape) == 3:\n            im = im.unsqueeze(0)\n\n        assert len(im.shape) == 4, f\"Expected 4D tensor as input, got {im.shape}\"\n\n        preds = self.model(im)\n        return preds\n\n    def warmup(self, imgsz):\n        pass\n\n    def update_im_paths(self, predictor: DetectionPredictor):\n        \"\"\"\n        This function saves image paths for the current batch,\n        being passed as callback on_predict_batch_start\n        \"\"\"\n        assert isinstance(\n            predictor, DetectionPredictor\n        ), \"Only ultralytics predictors are supported\"\n        self.im_paths = predictor.batch[0]\n\n    # This preprocess differs from the current version of YOLOX preprocess, but ByteTrack uses it\n    # https://github.com/ifzhang/ByteTrack/blob/d1bf0191adff59bc8fcfeaa0b33d3d1642552a99/yolox/data/data_augment.py\\#L189\n    def yolox_preprocess(\n        self,\n        image,\n        input_size,\n        mean=(0.485, 0.456, 0.406),\n        std=(0.229, 0.224, 0.225),\n        swap=(2, 0, 1),\n    ):\n        if len(image.shape) == 3:\n            padded_img = np.ones((input_size[0], input_size[1], 3)) * 114.0\n        else:\n            padded_img = np.ones(input_size) * 114.0\n        img = np.array(image)\n        r = min(input_size[0] / img.shape[0], input_size[1] / img.shape[1])\n        resized_img = cv2.resize(\n            img,\n            (int(img.shape[1] * r), int(img.shape[0] * r)),\n            interpolation=cv2.INTER_LINEAR,\n        ).astype(np.float32)\n        padded_img[: int(img.shape[0] * r), : int(img.shape[1] * r)] = resized_img\n\n        padded_img = padded_img[:, :, ::-1]\n        padded_img /= 255.0\n        if mean is not None:\n            padded_img -= mean\n        if std is not None:\n            padded_img /= std\n        padded_img = padded_img.transpose(swap)\n        padded_img = np.ascontiguousarray(padded_img, dtype=np.float32)\n        return padded_img, r\n\n    def preprocess(self, im) -> torch.Tensor:\n        assert isinstance(im, list)\n        im_preprocessed = []\n        self._preproc_data = []\n        for i, img in enumerate(im):\n            img_pre, ratio = self.yolox_preprocess(img, input_size=self.imgsz)\n            img_pre = torch.Tensor(img_pre).unsqueeze(0).to(self.device)\n\n            im_preprocessed.append(img_pre)\n            self._preproc_data.append(ratio)\n\n        im_preprocessed = torch.vstack(im_preprocessed)\n\n        return im_preprocessed\n\n    def postprocess(self, preds, im, im0s):\n\n        results = []\n        for i, pred in enumerate(preds):\n            im_path = self.im_paths[i] if len(self.im_paths) else \"\"\n\n            pred = postprocess(\n                pred.unsqueeze(0),  # YOLOX postprocessor expects 3D arary\n                1,\n                conf_thre=self.args.conf,\n                nms_thre=self.args.iou,\n                class_agnostic=self.args.agnostic_nms,\n            )[0]\n\n            if pred is None:\n                pred = torch.empty((0, 6))\n                r = Results(\n                    path=im_path, boxes=pred, orig_img=im0s[i], names=self.names\n                )\n                results.append(r)\n            else:\n                ratio = self._preproc_data[i]\n                pred[:, 0] = pred[:, 0] / ratio\n                pred[:, 1] = pred[:, 1] / ratio\n                pred[:, 2] = pred[:, 2] / ratio\n                pred[:, 3] = pred[:, 3] / ratio\n                pred[:, 4] *= pred[:, 5]\n                pred = pred[:, [0, 1, 2, 3, 4, 6]]\n\n                # filter boxes by classes\n                if self.args.classes:\n                    pred = pred[\n                        torch.isin(pred[:, 5].cpu(), torch.as_tensor(self.args.classes))\n                    ]\n\n                r = Results(\n                    path=im_path, boxes=pred, orig_img=im0s[i], names=self.names\n                )\n\n            results.append(r)\n\n        return results\n\n\n# Alias for backward compatibility\nYOLOX = YoloXStrategy\n"
  },
  {
    "path": "boxmot/engine/__init__.py",
    "content": ""
  },
  {
    "path": "boxmot/engine/cli.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nCLI for BoxMOT: multi-step multiple object tracking pipeline.\nProvides commands to track, generate detections and embeddings, evaluate performance, tune models, or run all steps.\n\"\"\"\nimport multiprocessing as mp\nmp.set_start_method(\"spawn\", force=True)\n\n\nfrom pathlib import Path\nfrom types import SimpleNamespace\nimport yaml\n\nimport click\n\nfrom boxmot.utils import ROOT, WEIGHTS, DATASET_CONFIGS, TRACKEVAL\nfrom boxmot.utils.download import download_eval_data\nfrom boxmot.utils.misc import parse_imgsz, resolve_model_path\n\n\ndef load_dataset_cfg(name: str) -> dict:\n    \"\"\"Load the dict from boxmot/configs/datasets/{name}.yaml.\"\"\"\n    path = DATASET_CONFIGS / f\"{name}.yaml\"\n    with open(path, 'r') as f:\n        return yaml.safe_load(f)\n\n\ndef ensure_model_extension(model_path):\n    \"\"\"\n    Ensure model path has the default `.pt` suffix when omitted and preserve explicit paths.\n    \n    Args:\n        model_path: Path to model file (str or Path)\n        \n    Returns:\n        Resolved model path.\n    \"\"\"\n    if model_path is None:\n        return None\n    \n    model_path = Path(model_path)\n    # If no extension, add .pt\n    if not model_path.suffix and \"openvino\" not in model_path.name:\n        model_path = model_path.with_suffix('.pt')\n\n    return resolve_model_path(model_path)\n\n\n# Core options (excluding model & classes)\ndef core_options(func):\n    options = [\n        click.option('--source', type=str, default='0',\n                     help='file/dir/URL/glob, 0 for webcam'),\n        click.option('--imgsz', callback=parse_imgsz, default=640, type=str,\n                     help='desired image size for the model input. Can be an integer for square images or a tuple (height, width) for specific dimensions.'),\n        click.option('--fps', type=int, default=30,\n                     help='video frame-rate'),\n        click.option('--conf', type=float, default=0.01,\n                     help='min confidence threshold'),\n        click.option('--iou', type=float, default=0.7,\n                     help='IoU threshold for NMS'),\n        click.option('--device', default='',\n                     help='cuda device(s), e.g. 0 or 0,1,2,3 or cpu'),\n        click.option('--batch-size', type=int, default=16, show_default=True,\n                 help='micro-batch size for batched detection/embedding'),\n        click.option('--auto-batch/--no-auto-batch', default=True, show_default=True,\n                 help='probe GPU memory with a dummy pass to pick a safe batch size'),\n        click.option('--resume/--no-resume', default=True, show_default=True,\n             help='resume detection/embedding generation from progress checkpoints'),\n        click.option('--read-threads', type=int, default=None,\n                 help='CPU threads for image decoding; defaults to min(8, cpu_count)'),\n        click.option('--project', type=Path, default=ROOT / 'runs',\n                     help='save results to project/name'),\n        click.option('--name', default='', help='save results to project/name'),\n        click.option('--exist-ok', is_flag=True, default=True,\n                     help='existing project/name ok, do not increment'),\n        click.option('--half', is_flag=True,\n                     help='use FP16 half-precision inference'),\n        click.option('--vid-stride', type=int, default=1,\n                     help='video frame-rate stride'),\n        click.option('--ci', is_flag=True,\n                     help='reuse existing runs in CI (no UI)'),\n        click.option('--tracking-method', type=str, default='deepocsort',\n                     help='deepocsort, botsort, strongsort, ...'),\n        click.option('--verbose', is_flag=True,\n                     help='print detailed logs'),\n        click.option('--agnostic-nms', is_flag=True,\n                     help='class-agnostic NMS'),\n        click.option(\n            \"--postprocessing\", type=click.Choice([\"none\", \"gsi\", \"gbrc\"], case_sensitive=False), default=\"none\",\n            help=\"Postprocess tracker output: none | gsi (Gaussian smoothed interpolation) | gbrc (gradient boosting smooth).\",\n        ),\n        click.option('--show', is_flag=True,\n                     help='display tracking in a window'),\n        click.option('--show-labels/--hide-labels', default=True,\n                     help='show or hide detection labels'),\n        click.option('--show-conf/--hide-conf', default=True,\n                     help='show or hide detection confidences'),\n        click.option('--show-trajectories', is_flag=True,\n                     help='overlay past trajectories'),\n        click.option('--show-lost', is_flag=True,\n                     help='show lost tracks'),\n        click.option('--save-txt', is_flag=True,\n                     help='save results to a .txt file'),\n        click.option('--save-crop', is_flag=True,\n                     help='save cropped detections'),\n        click.option('--save', is_flag=True,\n                     help='save annotated video'),\n        click.option('--line-width', type=int,\n                     help='bounding box line width'),\n        click.option('--per-class', is_flag=True,\n                     help='track each class separately'),\n        click.option('--target-id', type=int, default=None,\n                     help='ID to highlight in green')\n    ]\n    for opt in reversed(options):\n        func = opt(func)\n    return func\n\n\ndef parse_classes(classes_input):\n    \"\"\"\n    Parse classes input which can be a tuple of ints (from multiple=True),\n    a string (comma/space separated), or None.\n    Returns a list of integers or None.\n    \"\"\"\n    if classes_input is None:\n        return None\n    \n    if isinstance(classes_input, (list, tuple)):\n        # If it's already a list/tuple of ints (from multiple=True)\n        if not classes_input:\n            return None\n        return list(classes_input)\n    \n    if isinstance(classes_input, str):\n        # Handle string input: \"0,1\" or \"0 1\"\n        classes_input = classes_input.replace(',', ' ')\n        return [int(x) for x in classes_input.split()]\n    \n    return [int(classes_input)]\n\n\ndef singular_model_options(func):\n    options = [\n        click.option('--yolo-model', type=Path,\n                     default=WEIGHTS / 'yolov8n.pt',\n                     help='path to YOLO weights for detection'),\n        click.option('--reid-model', type=Path,\n                     default=WEIGHTS / 'osnet_x0_25_msmt17.pt',\n                     help='path to ReID model weights'),\n        click.option('--classes', type=str, default=None,\n                     help='filter by class indices, e.g. 0 or \"0,1\"')\n    ]\n    for opt in reversed(options):\n        func = opt(func)\n    return func\n\n\ndef plural_model_options(func):\n    options = [\n        click.option('--yolo-model', type=Path, multiple=True,\n                     default=[WEIGHTS / 'yolov8n.pt'],\n                     help='one or more YOLO weights for detection'),\n        click.option('--reid-model', type=Path, multiple=True,\n                     default=[WEIGHTS / 'osnet_x0_25_msmt17.pt'],\n                     help='one or more ReID model weights'),\n        click.option('--classes', type=str, default=None,\n                     help='filter by class indices, e.g. 0 or \"0,1\"')\n    ]\n    for opt in reversed(options):\n        func = opt(func)\n    return func\n\n\ndef export_options(func):\n    \"\"\"\n    Decorator adding ReID export options (ported from argparse export script).\n    \"\"\"\n    options = [\n        click.option('--batch-size', type=int, default=1,\n                     help='Batch size for export'),\n        click.option('--imgsz', '--img', '--img-size', callback=parse_imgsz, type=str,\n                     default=640, help='Image size as H,W (e.g. 256,128)'),\n        click.option('--device', default='cpu',\n                     help=\"CUDA device (e.g., '0', '0,1,2,3', or 'cpu')\"),\n        click.option('--optimize', is_flag=True,\n                     help='Optimize TorchScript for mobile (CPU export only)'),\n        click.option('--dynamic', is_flag=True,\n                     help='Enable dynamic axes for ONNX/TF/TensorRT export'),\n        click.option('--simplify', is_flag=True,\n                     help='Simplify ONNX model'),\n        click.option('--opset', type=int, default=18,\n                     help='ONNX opset version'),\n        click.option('--workspace', type=int, default=4,\n                     help='TensorRT workspace size (GB)'),\n        click.option('--verbose', is_flag=True,\n                     help='Enable verbose logging for TensorRT'),\n        click.option('--weights', type=Path,\n                     default=WEIGHTS / 'osnet_x0_25_msmt17.pt',\n                     help='Path to the model weights (.pt file)'),\n        click.option('--half', is_flag=True,\n                     help='Enable FP16 half-precision export (GPU only)'),\n        click.option('--include', multiple=True, default=('torchscript',),\n                     help='Export formats to include. Options: torchscript, onnx, openvino, engine, tflite'),\n    ]\n    for opt in reversed(options):\n        func = opt(func)\n    return func\n\n\ndef tune_options(func):\n    \"\"\"\n    Decorator adding ReID export options (ported from argparse export script).\n    \"\"\"\n    options = [\n        click.option('--n-trials', type=int, default=4,\n                     help='number of trials for evolutionary tuning'),\n        click.option('--objectives', type=str, multiple=True,\n                     default=[\"HOTA\", \"MOTA\", \"IDF1\"],\n                     help='objectives for tuning: HOTA, MOTA, IDF1'),\n    ]\n    for opt in reversed(options):\n        func = opt(func)\n    return func\n\n\n\nclass CommandFirstGroup(click.Group):\n    \"\"\"Custom Click Group with improved help formatting - Ultralytics-style.\"\"\"\n    \n    def format_help(self, ctx, formatter):\n        \"\"\"Override to show custom help with Ultralytics-style formatting.\"\"\"\n        \n        # Main heading\n        formatter.write_paragraph()\n        formatter.write_text(\n            \"BoxMOT 'boxmot' commands use the following syntax:\"\n        )\n        formatter.write_paragraph()\n        \n        # Command syntax\n        with formatter.indentation():\n            formatter.write_text(\"boxmot MODE [OPTIONS] [DETECTOR] [REID] [TRACKER]\")\n        formatter.write_paragraph()\n        \n        # Argument descriptions\n        formatter.width = 120  # Increase formatter width to prevent wrapping\n        with formatter.indentation():\n            formatter.write_text(\"Where  MODE (required) is one of [track, eval, tune, generate, export]\")\n            formatter.write_text(\"       DETECTOR (optional) YOLO model like yolov8n, yolov9c, yolo11m, yolox_x\")\n            formatter.write_text(\"       REID (optional) ReID model like osnet_x0_25_msmt17, mobilenetv2_x1_4\")\n            formatter.write_text(\"       TRACKER (optional) is one of [deepocsort, botsort, bytetrack, strongsort, ocsort, hybridsort, boosttrack, sfsort]\")\n            formatter.write_text(\"       OPTIONS (optional) flags like '--source 0' '--imgsz 640' that override defaults.\")\n            formatter.write_text(\"          See all options at https://github.com/mikel-brostrom/boxmot or 'boxmot MODE --help'\")\n        formatter.write_paragraph()\n        \n        # Examples\n        formatter.write_text(\"Examples:\")\n        with formatter.indentation():\n            formatter.write_text(\"1. Track with webcam using defaults:\")\n            with formatter.indentation():\n                formatter.write_text(\"boxmot track yolov8n osnet_x0_25_msmt17 deepocsort --source 0 --show\")\n            formatter.write_paragraph()\n            \n            formatter.write_text(\"2. Track a video file:\")\n            with formatter.indentation():\n                formatter.write_text(\"boxmot track yolov8n osnet_x0_25_msmt17 botsort --source video.mp4 --save\")\n            formatter.write_paragraph()\n            \n            formatter.write_text(\"3. Evaluate on MOT dataset:\")\n            with formatter.indentation():\n                formatter.write_text(\"boxmot eval yolov8n osnet_x0_25_msmt17 deepocsort --source MOT17-mini/train\")\n            formatter.write_paragraph()\n            \n            formatter.write_text(\"4. Tune tracker hyperparameters:\")\n            with formatter.indentation():\n                formatter.write_text(\"boxmot tune --source MOT17-mini/train --tracking-method deepocsort --n-trials 10\")\n            formatter.write_paragraph()\n            \n            formatter.write_text(\"5. Export ReID model:\")\n            with formatter.indentation():\n                formatter.write_text(\"boxmot export --weights osnet_x0_25_msmt17.pt --include onnx --include engine --dynamic\")\n        formatter.write_paragraph()\n        \n        # Available modes\n        formatter.write_text(\"Modes:\")\n        with formatter.indentation():\n            formatter.write_text(\"track      Track objects in video/webcam stream\")\n            formatter.write_text(\"eval       Evaluate tracker performance on MOT dataset\")\n            formatter.write_text(\"tune       Optimize tracker hyperparameters\")\n            formatter.write_text(\"generate   Generate detections and embeddings\")\n            formatter.write_text(\"export     Export ReID models to different formats\")\n        formatter.write_paragraph()\n        \n        # Resources\n        formatter.write_text(\"Docs:      https://github.com/mikel-brostrom/boxmot\")\n        formatter.write_text(\"Community: https://github.com/mikel-brostrom/boxmot/discussions\")\n\n\n@click.group(cls=CommandFirstGroup)\n@click.pass_context\ndef boxmot(ctx):\n    \"\"\"\n    BoxMOT: Pluggable SOTA multi-object tracking modules for segmentation, object detection and pose estimation models\n    \"\"\"\n    pass\n\n\n@boxmot.command(help='Run tracking only')\n@click.argument('detector', required=False)\n@click.argument('reid', required=False)\n@click.argument('tracker', required=False)\n@core_options\n@singular_model_options\n@click.pass_context\ndef track(ctx, detector, reid, tracker, yolo_model, reid_model, classes, **kwargs):\n    # Override options with positional args if provided\n    if detector:\n        yolo_model = ensure_model_extension(detector)\n    if reid:\n        reid_model = ensure_model_extension(reid)\n    if tracker:\n        kwargs['tracking_method'] = tracker\n    src = kwargs.pop('source')\n    source_path = Path(src)\n    bench, split = source_path.parent.name, source_path.name\n    \n    # Auto-append .pt extension if missing\n    yolo_model = ensure_model_extension(yolo_model)\n    reid_model = ensure_model_extension(reid_model)\n    \n    params = {**kwargs,\n              'yolo_model': yolo_model,\n              'reid_model': reid_model,\n              'classes': parse_classes(classes),\n              'source': src,\n              'benchmark': bench,\n              'split': split}\n    args = SimpleNamespace(**params)\n    \n    # 2) if doing MOT17/20-ablation, pull down the dataset and rewire args.source/split\n    if (DATASET_CONFIGS / f\"{args.source}.yaml\").exists():\n        cfg = load_dataset_cfg(str(args.source))\n        \n        # Determine dataset destination (under trackeval/data so benchmarks don't mix with TrackEval code)\n        bench_name = Path(cfg[\"benchmark\"][\"source\"]).name\n        if cfg[\"download\"][\"dataset_url\"]:\n            dataset_dest = TRACKEVAL / \"data\" / f\"{bench_name}.zip\"\n        else:\n            # For custom datasets without URL, use the path from config if available, or default to assets\n            dataset_dest = Path(cfg[\"download\"].get(\"dataset_dest\", f\"assets/{bench_name}\"))\n\n        download_eval_data(\n            runs_url=cfg[\"download\"][\"runs_url\"],\n            dataset_url=cfg[\"download\"][\"dataset_url\"],\n            dataset_dest=dataset_dest,\n            overwrite=False\n        )\n        args.benchmark = bench_name\n        args.split = cfg[\"benchmark\"][\"split\"]\n        if cfg[\"download\"][\"dataset_url\"]:\n            args.source = TRACKEVAL / \"data\" / f\"{args.benchmark}/{args.split}\"\n        elif \"source\" in cfg[\"benchmark\"]:\n            args.source = Path(cfg[\"benchmark\"][\"source\"]) / args.split\n        else:\n            args.source = dataset_dest / args.split\n\n    from boxmot.engine.tracker import main as run_track\n    run_track(args)\n    \n@boxmot.command(help='Generate detections and embeddings')\n@click.argument('detector', required=False)\n@click.argument('reid', required=False)\n@core_options\n@plural_model_options\n@click.pass_context\ndef generate(ctx, detector, reid, yolo_model, reid_model, classes, **kwargs):\n    # Override options with positional args if provided\n    # Note: Plural options are tuples, so handle single arg input as list\n    if detector:\n        yolo_model = [ensure_model_extension(detector)]\n    if reid:\n        reid_model = [ensure_model_extension(reid)]\n    src = kwargs.pop('source')\n    source_path = Path(src)\n    bench, split = source_path.parent.name, source_path.name\n    \n    # Auto-append .pt extension if missing\n    yolo_model = [ensure_model_extension(m) for m in yolo_model]\n    reid_model = [ensure_model_extension(m) for m in reid_model]\n    \n    params = {**kwargs,\n              'yolo_model': list(yolo_model),\n              'reid_model': list(reid_model),\n              'classes': parse_classes(classes),\n              'source': src,\n              'benchmark': bench,\n              'split': split}\n    args = SimpleNamespace(**params)\n    from boxmot.engine.evaluator import run_generate_dets_embs\n    run_generate_dets_embs(args)\n\n\n@boxmot.command(help='Evaluate tracking performance')\n@click.argument('detector', required=False)\n@click.argument('reid', required=False)\n@click.argument('tracker', required=False)\n@core_options\n@plural_model_options\n@click.pass_context\ndef eval(ctx, detector, reid, tracker, yolo_model, reid_model, classes, **kwargs):\n    # Override options with positional args if provided\n    # Note: Plural options are tuples, so handle single arg input as list\n    if detector:\n        yolo_model = [ensure_model_extension(detector)]\n    if reid:\n        reid_model = [ensure_model_extension(reid)]\n    if tracker:\n        kwargs['tracking_method'] = tracker\n    src = kwargs.pop('source')\n    source_path = Path(src)\n    bench, split = source_path.parent.name, source_path.name\n    \n    # Auto-append .pt extension if missing\n    yolo_model = [ensure_model_extension(m) for m in yolo_model]\n    reid_model = [ensure_model_extension(m) for m in reid_model]\n    \n    params = {**kwargs,\n              'yolo_model': list(yolo_model),\n              'reid_model': list(reid_model),\n              'classes': parse_classes(classes),\n              'source': src,\n              'benchmark': bench,\n              'split': split,\n              'imgsz': [1088, 1920]}\n    args = SimpleNamespace(**params)\n    from boxmot.engine.evaluator import main as run_eval\n    run_eval(args)\n\n\n@boxmot.command(help='Tune models via evolutionary algorithms')\n@click.argument('detector', required=False)\n@click.argument('reid', required=False)\n@click.argument('tracker', required=False)\n@core_options\n@tune_options\n@plural_model_options\n@click.pass_context\ndef tune(ctx, detector, reid, tracker, yolo_model, reid_model, classes, **kwargs):\n    # Override options with positional args if provided\n    # Note: Plural options are tuples, so handle single arg input as list\n    if detector:\n        yolo_model = [ensure_model_extension(detector)]\n    if reid:\n        reid_model = [ensure_model_extension(reid)]\n    if tracker:\n        kwargs['tracking_method'] = tracker\n    src = kwargs.pop('source')\n    source_path = Path(src)\n    bench, split = source_path.parent.name, source_path.name\n    \n    # Auto-append .pt extension if missing\n    yolo_model = [ensure_model_extension(m) for m in yolo_model]\n    reid_model = [ensure_model_extension(m) for m in reid_model]\n    \n    params = {**kwargs,\n              'yolo_model': list(yolo_model),\n              'reid_model': list(reid_model),\n              'classes': parse_classes(classes),\n              'source': src,\n              'benchmark': bench,\n              'split': split}\n    args = SimpleNamespace(**params)\n    from boxmot.engine.tuner import main as run_tuning\n    run_tuning(args)\n\n\n@boxmot.command(help='Export ReID models')\n@export_options\n@click.pass_context\ndef export(ctx, **kwargs):\n    \"\"\"\n    Command 'export': export ReID model weights and configurations for deployment.\n    Mirrors the standalone argparse-based export script.\n    \"\"\"\n    # kwargs already contains all export args; convert imgsz tuple -> list\n    args = SimpleNamespace(**kwargs)\n    from boxmot.engine.export import main as run_export\n    run_export(args)\n\n\n@boxmot.command(help='Show BoxMOT version')\ndef version():\n    \"\"\"Display the current BoxMOT version.\"\"\"\n    from boxmot import __version__\n    click.echo(f\"BoxMOT {__version__}\")\n\n\n@boxmot.command(help='Show help information')\n@click.pass_context\ndef help(ctx):\n    \"\"\"Display help information.\"\"\"\n    # Get the parent context (main boxmot group)\n    parent_ctx = ctx.parent\n    click.echo(parent_ctx.get_help())\n\n\nmain = boxmot\n\nif __name__ == \"__main__\":\n    boxmot()\n"
  },
  {
    "path": "boxmot/engine/evaluator.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport multiprocessing as mp\nmp.set_start_method(\"spawn\", force=True)\n\nimport argparse\nimport subprocess\nfrom pathlib import Path\nimport numpy as np\nfrom tqdm import tqdm\nimport json\nimport yaml\nimport cv2\nimport os\nimport torch\nimport sys\nimport concurrent.futures\nfrom contextlib import nullcontext\n\nfrom boxmot.trackers.tracker_zoo import create_tracker\nfrom boxmot.utils import NUM_THREADS, ROOT, WEIGHTS, TRACKER_CONFIGS, DATASET_CONFIGS, logger as LOGGER, TRACKEVAL\nfrom boxmot.utils.checks import RequirementsChecker\nfrom boxmot.utils.torch_utils import select_device\nfrom boxmot.utils.plots import MetricsPlotter\nfrom boxmot.utils.misc import increment_path, prompt_overwrite\nfrom boxmot.utils.timing import TimingStats, wrap_tracker_reid\nfrom typing import Optional, List, Dict, Generator, Union\n\nfrom boxmot.utils.dataloaders.dataset import MOTDataset\nfrom boxmot.postprocessing.gsi import gsi\n\nfrom boxmot.engine.inference import DetectorReIDPipeline, extract_detections, filter_detections\nfrom boxmot.detectors import default_imgsz\nfrom boxmot.utils.mot_utils import convert_to_mot_format, write_mot_results\nfrom boxmot.utils.download import download_eval_data, download_trackeval\n\nchecker = RequirementsChecker()\nchecker.check_packages(('ultralytics', ))  # install\n\n\nCOCO_CLASSES = [\n    'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',\n    'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',\n    'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',\n    'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle',\n    'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',\n    'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed',\n    'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven',\n    'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'\n]\n\n\ndef load_dataset_cfg(name: str) -> dict:\n    \"\"\"Load the dict from boxmot/configs/datasets/{name}.yaml.\"\"\"\n    path = DATASET_CONFIGS / f\"{name}.yaml\"\n    with open(path, 'r') as f:\n        return yaml.safe_load(f)\n\n\ndef eval_init(args,\n              trackeval_dest: Path = TRACKEVAL,\n              branch: str = \"master\",\n              overwrite: bool = False\n    ) -> None:\n    \"\"\"\n    Common initialization: download TrackEval and (if needed) the MOT-challenge\n    data for ablation runs, then canonicalize args.source.\n    Modifies args in place.\n    \"\"\"\n    # 1) download the TrackEval code\n    download_trackeval(dest=trackeval_dest, branch=branch, overwrite=overwrite)\n\n    # 2) if doing MOT17/20-ablation, pull down the dataset and rewire args.source/split\n    if (DATASET_CONFIGS / f\"{args.source}.yaml\").exists():\n        cfg = load_dataset_cfg(str(args.source))\n        \n        # Determine dataset destination (under trackeval/data so benchmarks don't mix with TrackEval code)\n        bench_name = Path(cfg[\"benchmark\"][\"source\"]).name\n        dataset_url = cfg[\"download\"][\"dataset_url\"]\n        if dataset_url and dataset_url.startswith(\"hf://\"):\n            dataset_dest = TRACKEVAL / \"data\" / bench_name\n        elif dataset_url:\n            dataset_dest = TRACKEVAL / \"data\" / f\"{bench_name}.zip\"\n        else:\n            # For custom datasets without URL, use the path from config if available, or default to assets\n            dataset_dest = Path(cfg[\"download\"].get(\"dataset_dest\", f\"assets/{bench_name}\"))\n\n        download_eval_data(\n            runs_url=cfg[\"download\"][\"runs_url\"],\n            dataset_url=cfg[\"download\"][\"dataset_url\"],\n            dataset_dest=dataset_dest,\n            overwrite=overwrite\n        )\n        args.benchmark = bench_name\n        args.split = cfg[\"benchmark\"][\"split\"]\n        if cfg[\"download\"][\"dataset_url\"]:\n            args.source = TRACKEVAL / \"data\" / f\"{args.benchmark}/{args.split}\"\n        elif \"source\" in cfg[\"benchmark\"]:\n            args.source = Path(cfg[\"benchmark\"][\"source\"]) / args.split\n        else:\n            args.source = dataset_dest / args.split\n\n    # 3) finally, make source an absolute Path everywhere\n    args.source = Path(args.source).resolve()\n    args.project = Path(args.project).resolve()\n    args.project.mkdir(parents=True, exist_ok=True)\n\n\ndef parse_mot_results(results: str) -> dict:\n    \"\"\"\n    Extracts COMBINED HOTA, MOTA, IDF1, AssA, AssRe, IDSW, and IDs from MOTChallenge evaluation output.\n    Returns a dictionary keyed by class name.\n    \"\"\"\n    metric_specs = {\n        'HOTA':   ('HOTA:',      {'HOTA': 0, 'AssA': 2, 'AssRe': 5}),\n        'MOTA':   ('CLEAR:',     {'MOTA': 0, 'IDSW': 12}),\n        'IDF1':   ('Identity:',  {'IDF1': 0}),\n        'IDs':    ('Count:',     {'IDs': 2}),\n    }\n\n    int_fields = {'IDSW', 'IDs'}\n    parsed_results = {}\n    \n    lines = results.splitlines()\n    current_class = None\n    current_metric_type = None\n    \n    for line in lines:\n        line = line.strip()\n        if not line:\n            continue\n            \n        # Check for header lines\n        is_header = False\n        for metric_name, (prefix, _) in metric_specs.items():\n            if line.startswith(prefix):\n                is_header = True\n                current_metric_type = metric_name\n                \n                # Format: \"HOTA: tracker-classHOTA ...\"\n                content = line[len(prefix):].strip()\n                first_word = content.split()[0]\n                if first_word.endswith(metric_name):\n                    tracker_class = first_word[:-len(metric_name)]\n                    if '-' in tracker_class:\n                        current_class = tracker_class.split('-')[-1]\n                    else:\n                        current_class = 'default'\n                    \n                    if current_class not in parsed_results:\n                        parsed_results[current_class] = {'per_sequence': {}}\n                break\n        \n        if is_header:\n            continue\n        \n        # Check for data rows (COMBINED or sequence names)\n        if current_class and current_metric_type:\n            fields = line.split()\n            if len(fields) > 1:\n                row_name = fields[0]  # Either 'COMBINED' or sequence name like 'MOT17-02-FRCNN'\n                values = fields[1:]\n                _, field_map = metric_specs[current_metric_type]\n                \n                if row_name == 'COMBINED':\n                    # Store COMBINED metrics at class level (backward compatible)\n                    for key, idx in field_map.items():\n                        if idx < len(values):\n                            val = values[idx]\n                            parsed_results[current_class][key] = max(0, int(val) if key in int_fields else float(val))\n                else:\n                    # Store per-sequence metrics\n                    if row_name not in parsed_results[current_class]['per_sequence']:\n                        parsed_results[current_class]['per_sequence'][row_name] = {}\n                    for key, idx in field_map.items():\n                        if idx < len(values):\n                            val = values[idx]\n                            parsed_results[current_class]['per_sequence'][row_name][key] = max(0, int(val) if key in int_fields else float(val))\n\n    return parsed_results\n\n\n# ---------------------------\n# Batched det+emb generation\n# ---------------------------\ndef _sequence_img_dir(seq_dir: Path) -> Path:\n    img1 = seq_dir / \"img1\"\n    return img1 if img1.exists() else seq_dir\n\n\ndef _list_sequence_frames(img_dir: Path) -> list[Path]:\n    return sorted(list(img_dir.glob(\"*.jpg\")) + list(img_dir.glob(\"*.png\")))\n\n\ndef _sequence_name_from_img_dir(img_dir: Path) -> str:\n    return img_dir.parent.name if img_dir.name == \"img1\" else img_dir.name\n\n\ndef _read_image_cv2(p: Path):\n    im = cv2.imread(str(p), cv2.IMREAD_COLOR)\n    if im is None:\n        raise RuntimeError(f\"Failed to read image: {p}\")\n    return im\n\n\ndef _collect_seq_info(source: Path) -> tuple[list[Path], dict[str, int]]:\n    seq_paths = []\n    seq_info: dict[str, int] = {}\n    for seq_dir in sorted(p for p in source.iterdir() if p.is_dir()):\n        img_dir = _sequence_img_dir(seq_dir)\n        frame_files = sorted(list(img_dir.glob(\"*.jpg\")) + list(img_dir.glob(\"*.png\")))\n        if not frame_files:\n            continue\n        seq_paths.append(img_dir)\n        seq_info[seq_dir.name] = len(frame_files)\n    return seq_paths, seq_info\n\n\ndef _autotune_batch_size(yolo, device: str, imgsz, requested: int) -> int:\n    dev_lower = str(device).lower()\n    use_accel = dev_lower.startswith((\"cuda\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"mps\", \"metal\"))\n    if not use_accel:\n        return max(1, requested)\n\n    def _empty_cache():\n        if dev_lower.startswith(\"cuda\") and torch.cuda.is_available():\n            torch.cuda.empty_cache()\n        elif dev_lower.startswith((\"mps\", \"metal\")) and hasattr(torch, \"mps\"):\n            try:\n                torch.mps.empty_cache()\n            except Exception:\n                pass\n\n    if isinstance(imgsz, (list, tuple)):\n        h, w = int(imgsz[0]), int(imgsz[1])\n    else:\n        h = w = int(imgsz)\n\n    dummy = np.zeros((h, w, 3), dtype=np.uint8)\n\n    bs = max(1, int(requested))\n    while bs >= 1:\n        try:\n            yolo.predict(source=[dummy] * bs, device=device, verbose=False, imgsz=imgsz)\n            if bs < requested:\n                LOGGER.warning(f\"Auto-tuned batch size from {requested} -> {bs} to fit device memory.\")\n            return bs\n        except RuntimeError as e:\n            if \"out of memory\" not in str(e).lower():\n                raise\n            _empty_cache()\n            next_bs = max(1, bs // 2)\n            LOGGER.warning(f\"Batch size {bs} OOM; retrying with {next_bs}.\")\n            if next_bs == bs:\n                break\n            bs = next_bs\n\n    raise RuntimeError(\"Unable to run even batch size 1; reduce image size or move to CPU.\")\n\n\ndef _clear_device_cache(device: str) -> None:\n    dev_lower = str(device).lower()\n    if dev_lower.startswith(\"cuda\") and torch.cuda.is_available():\n        torch.cuda.empty_cache()\n    elif dev_lower.startswith((\"mps\", \"metal\")) and hasattr(torch, \"mps\"):\n        try:\n            torch.mps.empty_cache()\n        except Exception:\n            pass\n\n\ndef _count_data_lines(path: Path, skip_header: bool = False) -> int:\n    \"\"\"Count non-header lines in a txt file, tolerating missing files.\"\"\"\n    try:\n        with open(path, \"r\") as fh:\n            if skip_header:\n                return sum(1 for line in fh if not line.startswith(\"#\"))\n            return sum(1 for _ in fh)\n    except FileNotFoundError:\n        return 0\n\n\ndef _max_frame_id(path: Path) -> int:\n    \"\"\"Return the maximum frame id (first column) in a dets txt, skipping headers.\"\"\"\n    max_f = 0\n    try:\n        with open(path, \"r\") as fh:\n            for line in fh:\n                line = line.strip()\n                if not line or line.startswith(\"#\"):\n                    continue\n                parts = line.split()\n                if not parts:\n                    continue\n                try:\n                    f_val = int(float(parts[0]))\n                except Exception:\n                    continue\n                if f_val > max_f:\n                    max_f = f_val\n    except FileNotFoundError:\n        return 0\n    return max_f\n\n\n@torch.inference_mode()\ndef generate_dets_embs_batched(args: argparse.Namespace, y: Path, source_root: Path, timing_stats: Optional[TimingStats] = None) -> None:\n    \"\"\"\n    Generate detections and embeddings in batches for evaluation.\n    \n    Args:\n        args: CLI arguments.\n        y: Path to YOLO model weights.\n        source_root: Root path containing sequence folders.\n        timing_stats: Optional TimingStats for timing instrumentation.\n    \"\"\"\n    WEIGHTS.mkdir(parents=True, exist_ok=True)\n\n    batch_size = int(getattr(args, \"batch_size\", 16))\n    read_threads_val = getattr(args, \"read_threads\", None)\n    if read_threads_val is None:\n        read_threads_val = min(8, (os.cpu_count() or 8))\n    read_threads = int(read_threads_val)\n    auto_batch = bool(getattr(args, \"auto_batch\", True))\n    resume = bool(getattr(args, \"resume\", True))\n\n    if args.imgsz is None:\n        args.imgsz = default_imgsz(y)\n\n    # Use unified DetectorReIDPipeline with timing for both detection and ReID\n    pipeline = DetectorReIDPipeline(\n        yolo_model_path=y,\n        reid_model_paths=args.reid_model,\n        device=args.device,\n        imgsz=args.imgsz,\n        half=args.half,\n        timing_stats=timing_stats,\n    )\n\n    # Warmup the model\n    pipeline.warmup()\n\n    if auto_batch:\n        batch_size = pipeline.autotune_batch_size(batch_size)\n        args.batch_size = batch_size\n\n    mot_folder_paths = sorted([p for p in Path(source_root).iterdir() if p.is_dir()])\n\n    seq_states = {}\n    det_fhs = {}\n    emb_fhs = {r.stem: {} for r in args.reid_model}\n\n    # runs/dets_n_embs/<dataset_name>/y.stem/... when benchmark is set\n    benchmark = getattr(args, \"benchmark\", None)\n    dets_base = Path(args.project) / \"dets_n_embs\"\n    if benchmark:\n        dets_base = dets_base / benchmark\n    dets_folder = dets_base / y.stem / \"dets\"\n    embs_root = dets_base / y.stem / \"embs\"\n    total_frames = 0\n    initial_done = 0\n\n    for seq_dir in mot_folder_paths:\n        img_dir = _sequence_img_dir(seq_dir)\n        frames = _list_sequence_frames(img_dir)\n        if not frames:\n            continue\n\n        seq_name = _sequence_name_from_img_dir(img_dir)\n\n        dets_path = dets_folder / f\"{seq_name}.txt\"\n        processed = 0\n\n        emb_paths = {}\n        any_emb_cached = False\n        for r in args.reid_model:\n            ep = embs_root / r.stem / f\"{seq_name}.txt\"\n            emb_paths[r.stem] = ep\n            if ep.exists():\n                any_emb_cached = True\n\n        expected_files = False\n        rows_match = False\n        det_rows = 0\n        det_max_frame = 0\n        emb_rows: dict[str, int] = {}\n\n        if resume:\n            det_rows = _count_data_lines(dets_path, skip_header=True)\n            det_max_frame = _max_frame_id(dets_path)\n            emb_rows = {stem: _count_data_lines(ep) for stem, ep in emb_paths.items()}\n            expected_files = dets_path.exists() and all(ep.exists() for ep in emb_paths.values())\n            rows_match = len(set([det_rows, *emb_rows.values()])) == 1 if expected_files else False\n            if expected_files and rows_match and det_rows > 0:\n                processed = min(det_max_frame, len(frames))\n            elif expected_files and not rows_match:\n                LOGGER.warning(\n                    f\"Cached det/emb rows mismatch for {seq_name}; resetting cached data.\"\n                )\n                for p in [dets_path, *emb_paths.values()]:\n                    try:\n                        p.unlink()\n                    except FileNotFoundError:\n                        pass\n                processed = 0\n\n        if resume and processed >= len(frames) and dets_path.exists() and all(ep.exists() for ep in emb_paths.values()):\n            if expected_files and rows_match and det_rows:\n                LOGGER.info(\n                    f\"Skipping {seq_name} (cached complete; {processed}/{len(frames)} frames).\"\n                )\n            else:\n                LOGGER.info(f\"Skipping {seq_name} (resume: already complete).\")\n            initial_done += len(frames)\n            continue\n\n        if resume and 0 < processed < len(frames):\n            LOGGER.info(f\"Resuming {seq_name}: cached {processed}/{len(frames)} frames.\")\n\n        if (not resume) and dets_path.exists() and any_emb_cached:\n            if not prompt_overwrite('Detections and Embeddings', dets_path, args.ci):\n                LOGGER.debug(f\"Skipping {seq_name} (cached).\")\n                continue\n\n        dets_path.parent.mkdir(parents=True, exist_ok=True)\n        mode = 'ab' if (resume and dets_path.exists()) else 'wb'\n        det_fhs[seq_name] = open(dets_path, mode, buffering=1024 * 1024)\n        if mode == 'wb' or dets_path.stat().st_size == 0:\n            np.savetxt(det_fhs[seq_name], [], fmt='%f', header=str(img_dir))\n\n        for r in args.reid_model:\n            ep = emb_paths[r.stem]\n            ep.parent.mkdir(parents=True, exist_ok=True)\n            emb_mode = 'ab' if (resume and ep.exists()) else 'wb'\n            emb_fhs[r.stem][seq_name] = open(ep, emb_mode, buffering=1024 * 1024)\n\n        seq_states[seq_name] = {\"frames\": frames, \"i\": processed, \"img_dir\": img_dir}\n        total_frames += len(frames)\n        initial_done += processed\n\n    if not seq_states:\n        LOGGER.info(\"No sequences to process (all cached or no images).\")\n        return\n\n    seq_names = list(seq_states.keys())\n    rr = 0\n\n    use_cuda = str(args.device).startswith(\"cuda\")\n    amp_ctx = (\n        torch.autocast(device_type=\"cuda\", dtype=torch.float16)\n        if (use_cuda and getattr(args, \"half\", False))\n        else nullcontext()\n    )\n\n    pbar = tqdm(total=total_frames, desc=f\"Batched YOLO+ReID ({y.name}, bs={batch_size})\", unit=\"frame\")\n    reid_pbar = tqdm(total=0, desc=\"ReID embeddings\", unit=\"det\", dynamic_ncols=True)\n    if initial_done:\n        pbar.update(initial_done)\n\n    from concurrent.futures import ThreadPoolExecutor\n\n    try:\n        with ThreadPoolExecutor(max_workers=read_threads) as pool, amp_ctx:\n            alive = True\n            while alive:\n                batch_items = []\n                tried = 0\n                while len(batch_items) < batch_size and tried < len(seq_names):\n                    seq_name = seq_names[rr % len(seq_names)]\n                    rr += 1\n                    tried += 1\n\n                    st = seq_states[seq_name]\n                    if st[\"i\"] >= len(st[\"frames\"]):\n                        continue\n                    frame_id = st[\"i\"] + 1\n                    img_path = st[\"frames\"][st[\"i\"]]\n                    st[\"i\"] += 1\n                    batch_items.append((seq_name, frame_id, img_path))\n\n                if not batch_items:\n                    alive = False\n                    break\n\n                futures = [pool.submit(_read_image_cv2, p) for _, _, p in batch_items]\n                imgs = [f.result() for f in futures]\n\n                yolo_results = None\n                while True:\n                    try:\n                        # Use unified batch inference from pipeline\n                        yolo_results = pipeline.predict_batch(\n                            images=imgs[:batch_size],\n                            conf=args.conf,\n                            iou=args.iou,\n                            agnostic_nms=args.agnostic_nms,\n                            classes=args.classes,\n                            verbose=False,\n                        )\n                        break\n                    except RuntimeError as e:\n                        if \"out of memory\" not in str(e).lower():\n                            raise\n                        if batch_size == 1:\n                            raise\n\n                        _clear_device_cache(args.device)\n\n                        for seq_name, _, _ in batch_items:\n                            seq_states[seq_name][\"i\"] -= 1\n\n                        new_bs = max(1, batch_size // 2)\n                        LOGGER.warning(f\"YOLO predict OOM at batch size {batch_size}; retrying with {new_bs}.\")\n                        batch_size = new_bs\n                        args.batch_size = batch_size\n                        yolo_results = None\n                        break\n\n                if yolo_results is None:\n                    continue\n\n                det_counts = [int(r.boxes.shape[0]) if r.boxes is not None else 0 for r in yolo_results]\n                emb_dims: dict[str, int] = {}\n                LOGGER.info(\n                    f\"YOLO batch frames={len(batch_items)} | dets/frame={det_counts} | total_dets={sum(det_counts)}\"\n                )\n                touched: set[str] = set()\n\n                for (seq_name, frame_id, _), r, img in zip(batch_items, yolo_results, imgs):\n                    # Use unified detection extraction and filtering\n                    dets = extract_detections(r)\n                    dets = filter_detections(dets, min_area=10.0, remove_degenerate=True)\n                    \n                    if len(dets) == 0:\n                        if timing_stats:\n                            timing_stats.frames += 1\n                        pbar.update(1)\n                        continue\n\n                    boxes = dets[:, :4]\n                    confs = dets[:, 4:5]  # Keep as 2D for concatenation\n                    clss = dets[:, 5:6]   # Keep as 2D for concatenation\n\n                    # Build detection array with frame_id column: [frame_id, x1, y1, x2, y2, conf, cls]\n                    frame_col = np.full((boxes.shape[0], 1), float(frame_id), dtype=np.float32)\n                    dets_np = np.concatenate([frame_col, boxes, confs, clss], axis=1)\n                    dets_np[:, 1:5] = np.rint(dets_np[:, 1:5])  # round xyxy only\n\n                    np.savetxt(det_fhs[seq_name], dets_np, fmt=\"%f\")\n\n                    det_boxes_np = dets_np[:, 1:5]\n                    \n                    # Use pipeline's ReID models (with timing instrumentation)\n                    all_embs = pipeline.get_all_reid_features(det_boxes_np, img)\n                    for reid_name, embs in all_embs.items():\n                        if embs.shape[0] != det_boxes_np.shape[0]:\n                            raise RuntimeError(\n                                f\"Embedding count mismatch: dets={det_boxes_np.shape[0]} embs={embs.shape[0]}\"\n                            )\n                        if embs.ndim >= 2 and reid_name not in emb_dims:\n                            emb_dims[reid_name] = embs.shape[1]\n                        np.savetxt(emb_fhs[reid_name][seq_name], embs, fmt=\"%f\")\n\n                    reid_pbar.update(det_boxes_np.shape[0])\n\n                    # Update frame count for timing\n                    if timing_stats:\n                        timing_stats.frames += 1\n                    \n                    pbar.update(1)\n                    touched.add(seq_name)\n\n                if emb_dims:\n                    LOGGER.info(\n                        \"ReID embedding dims per model: \"\n                        + \", \".join([f\"{k}={v}\" for k, v in emb_dims.items()])\n                    )\n                else:\n                    LOGGER.info(\"ReID embedding dims per model: n/a (no detections)\")\n\n                for seq_name in touched:\n                    try:\n                        det_fhs[seq_name].flush()\n                        for per_reid in emb_fhs.values():\n                            if seq_name in per_reid:\n                                per_reid[seq_name].flush()\n                    except Exception:\n                        pass\n\n                del yolo_results, imgs\n                _clear_device_cache(args.device)\n\n    finally:\n        pbar.close()\n        reid_pbar.close()\n        for fh in det_fhs.values():\n            try:\n                fh.close()\n            except Exception:\n                pass\n        for per_reid in emb_fhs.values():\n            for fh in per_reid.values():\n                try:\n                    fh.close()\n                except Exception:\n                    pass\n\n\ndef run_generate_dets_embs(args: argparse.Namespace, timing_stats: Optional[TimingStats] = None) -> None:\n    \"\"\"\n    Generate detections and embeddings for all sequences.\n    \n    Args:\n        args: CLI arguments.\n        timing_stats: Optional TimingStats for timing instrumentation.\n    \"\"\"\n    source_root = Path(args.source)\n\n    args.batch_size = int(getattr(args, \"batch_size\", 16))\n    if getattr(args, \"read_threads\", None) is None:\n        args.read_threads = min(8, (os.cpu_count() or 8))\n    if not hasattr(args, \"auto_batch\"):\n        args.auto_batch = True\n    if not hasattr(args, \"resume\"):\n        args.resume = True\n\n    for y in args.yolo_model:\n        LOGGER.info(f\"Generating dets+embs (batched single-process): {y.name}\")\n        generate_dets_embs_batched(args, y, source_root, timing_stats=timing_stats)\n\ndef build_dataset_eval_settings(\n    args: argparse.Namespace,\n    gt_folder: Path,\n    seq_info: dict[str, int],\n) -> dict:\n    \"\"\"Derive dataset-specific evaluation settings (classes, ids, distractors, gt path format).\n\n    This centralizes logic for MOT-style datasets and non-MOT layouts such as VisDrone.\n    \"\"\"\n\n    cfg = {}\n    try:\n        if hasattr(args, \"benchmark\"):\n            cfg = load_dataset_cfg(args.benchmark)\n    except FileNotFoundError:\n        cfg = {}\n    except Exception as e:  # noqa: BLE001\n        LOGGER.warning(f\"Error loading dataset config: {e}\")\n        cfg = {}\n\n    bench_cfg = cfg.get(\"benchmark\", {}) if isinstance(cfg, dict) else {}\n    eval_classes_cfg = bench_cfg.get(\"eval_classes\") if isinstance(bench_cfg, dict) else None\n    distractor_cfg = bench_cfg.get(\"distractor_classes\") if isinstance(bench_cfg, dict) else None\n\n    classes_to_eval = []\n    class_ids = []\n\n    # Filter classes by user provided classes\n    if hasattr(args, \"classes\") and args.classes is not None:\n        class_indices = args.classes if isinstance(args.classes, list) else [args.classes]\n        classes_to_eval = [COCO_CLASSES[int(i)] for i in class_indices]\n        class_ids = [int(i) + 1 for i in class_indices]\n\n    # Match classes by benchmark config\n    if isinstance(eval_classes_cfg, dict) and len(eval_classes_cfg) > 0:\n        ordered = sorted(((int(k), v) for k, v in eval_classes_cfg.items()), key=lambda kv: kv[0])\n        if class_ids:\n            class_ids = [k for k, _ in ordered if class_ids and k in class_ids]\n            classes_to_eval = [v for k, v in ordered if class_ids and k in class_ids]\n        else:\n            class_ids = [k for k, _ in ordered]\n            classes_to_eval = [v for k, v in ordered]\n\n    # Default classes\n    if not classes_to_eval:\n        classes_to_eval = [\"person\"]\n    if not class_ids:\n        class_ids = [1]\n\n    # Distractors\n    distractor_ids: list[int] = []\n    if isinstance(distractor_cfg, dict) and len(distractor_cfg) > 0:\n        distractor_ids = [int(k) for k in distractor_cfg.keys()]\n\n    # Remove duplicates while preserving order\n    seen = set()\n    pairs = []\n    for name, cid in zip(classes_to_eval, class_ids):\n        if name in seen:\n            continue\n        seen.add(name)\n        pairs.append((name, cid))\n    classes_to_eval = [name for name, _ in pairs]\n    class_ids = [cid for _, cid in pairs]\n\n    # GT path format (VisDrone uses flat txt under annotations)\n    gt_loc_format = \"{gt_folder}/{seq}/gt/gt_temp.txt\"\n    is_visdrone = \"visdrone\" in getattr(args, \"benchmark\", \"\").lower() or \"visdrone\" in str(gt_folder).lower()\n    if is_visdrone:\n        gt_loc_format = \"{gt_folder}/{seq}.txt\"\n\n    benchmark_name = getattr(args, \"benchmark\", \"\")\n\n    return {\n        \"classes_to_eval\": classes_to_eval,\n        \"class_ids\": class_ids,\n        \"distractor_ids\": distractor_ids,\n        \"gt_loc_format\": gt_loc_format,\n        \"benchmark_name\": benchmark_name,\n        \"seq_info\": seq_info,\n    }\n\n\ndef trackeval(\n    args: argparse.Namespace,\n    seq_paths: list,\n    save_dir: Path,\n    gt_folder: Path,\n    metrics: list = [\"HOTA\", \"CLEAR\", \"Identity\"],\n    seq_info: Optional[dict] = None,\n) -> str:\n    \"\"\"\n    Executes a Python script to evaluate MOT challenge tracking results using specified metrics.\n\n    Args:\n        seq_paths (list): List of sequence paths.\n        save_dir (Path): Directory to save evaluation results.\n        gt_folder (Path): Folder containing ground truth data.\n        metrics (list, optional): List of metrics to use for evaluation. Defaults to [\"HOTA\", \"CLEAR\", \"Identity\"].\n\n    Returns:\n        str: Standard output from the evaluation script.\n    \"\"\"\n\n    if not seq_info:\n        seq_names = [seq_path.parent.name if seq_path.name == \"img1\" else seq_path.name for seq_path in seq_paths]\n        seq_info = {name: None for name in seq_names}\n\n    seq_info_args = []\n    for name in sorted(seq_info.keys()):\n        length = seq_info[name]\n        seq_info_args.append(f\"{name}:{length}\" if length else name)\n\n    dataset_settings = build_dataset_eval_settings(args, gt_folder, seq_info)\n    classes_to_eval = dataset_settings[\"classes_to_eval\"]\n    class_ids = dataset_settings[\"class_ids\"]\n    distractor_ids = dataset_settings[\"distractor_ids\"]\n    gt_loc_format = dataset_settings[\"gt_loc_format\"]\n    benchmark_name = dataset_settings[\"benchmark_name\"]\n\n    cmd_args = [\n        sys.executable, ROOT / 'boxmot' / 'utils' / 'run_mot_challenge.py',\n        \"--GT_FOLDER\", str(gt_folder),\n        \"--BENCHMARK\", benchmark_name,\n        \"--TRACKERS_FOLDER\", str(args.exp_dir.parent),\n        \"--TRACKERS_TO_EVAL\", args.exp_dir.name,\n        \"--SPLIT_TO_EVAL\", args.split,\n        \"--METRICS\", *metrics,\n        \"--USE_PARALLEL\", \"True\",\n        \"--TRACKER_SUB_FOLDER\", \"\",\n        \"--NUM_PARALLEL_CORES\", str(4),\n        \"--SKIP_SPLIT_FOL\", \"True\",\n        \"--GT_LOC_FORMAT\", gt_loc_format,\n        \"--CLASSES_TO_EVAL\", *classes_to_eval,\n        \"--CLASS_IDS\", *[str(i) for i in class_ids],\n        \"--DISTRACTOR_CLASS_IDS\", *[str(i) for i in distractor_ids],\n        \"--SEQ_INFO\", *seq_info_args\n    ]\n\n    p = subprocess.Popen(\n        args=cmd_args,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n        text=True\n    )\n\n    stdout, stderr = p.communicate()\n\n    if stderr:\n        print(\"Standard Error:\\n\", stderr)\n    return stdout\n\n\n\ndef process_sequence(seq_name: str,\n                     mot_root: str,\n                     project_root: str,\n                     model_name: str,\n                     reid_name: str,\n                     tracking_method: str,\n                     exp_folder: str,\n                     target_fps: Optional[int],\n                     device: str,\n                     cfg_dict: Optional[Dict] = None,\n                     dataset_name: Optional[str] = None,\n                     ):\n    \"\"\"\n    Process a single sequence: run tracker on pre-computed detections/embeddings.\n    \n    Returns:\n        Tuple of (seq_name, kept_frame_ids, timing_dict) where timing_dict contains\n        'track_time_ms' and 'num_frames' for aggregating timing stats.\n    \"\"\"\n    import time\n\n    device = select_device(device)\n    tracker = create_tracker(\n        tracker_type=tracking_method,\n        tracker_config=TRACKER_CONFIGS / (tracking_method + \".yaml\"),\n        reid_weights=WEIGHTS / f\"{reid_name}.pt\",\n        device=device,\n        half=False,\n        per_class=False,\n        evolve_param_dict=cfg_dict,\n    )\n\n    # load with the user’s FPS\n    # runs/dets_n_embs/<dataset_name>/ when dataset_name is set\n    det_emb_root = Path(project_root) / \"dets_n_embs\"\n    if dataset_name:\n        det_emb_root = det_emb_root / dataset_name\n    dataset = MOTDataset(\n        mot_root=mot_root,\n        det_emb_root=str(det_emb_root),\n        model_name=model_name,\n        reid_name=reid_name,\n        target_fps=target_fps\n    )\n    sequence = dataset.get_sequence(seq_name)\n\n    all_tracks = []\n    kept_frame_ids = []\n    total_track_time_ms = 0.0\n    num_frames = 0\n    \n    for frame in sequence:\n        fid  = int(frame['frame_id'])\n        dets = frame['dets']\n        embs = frame['embs']\n        img  = frame['img']\n\n        kept_frame_ids.append(fid)\n        num_frames += 1\n\n        if dets.size and embs.size:\n            if dets.shape[0] != embs.shape[0]:\n                msg = (\n                    f\"Detection/embedding count mismatch for {seq_name} frame {fid}: \"\n                    f\"dets={dets.shape[0]} embs={embs.shape[0]}\"\n                )\n                LOGGER.error(msg)\n                raise ValueError(msg)\n\n            # Time the tracker update (association only, embeddings pre-computed)\n            t0 = time.perf_counter()\n            tracks = tracker.update(dets, img, embs)\n            total_track_time_ms += (time.perf_counter() - t0) * 1000\n            \n            if tracks.size:\n                all_tracks.append(convert_to_mot_format(tracks, fid))\n\n    out_arr = np.vstack(all_tracks) if all_tracks else np.empty((0, 0))\n    write_mot_results(Path(exp_folder) / f\"{seq_name}.txt\", out_arr)\n    \n    timing_dict = {\n        'track_time_ms': total_track_time_ms,\n        'num_frames': num_frames,\n    }\n    return seq_name, kept_frame_ids, timing_dict\n\n\nfrom boxmot.utils import configure_logging as _configure_logging\n\ndef _worker_init():\n    # each spawned process needs its own sinks\n    _configure_logging()\n\ndef run_generate_mot_results(args: argparse.Namespace, evolve_config: dict = None, timing_stats: Optional[TimingStats] = None) -> None:\n    \"\"\"\n    Run tracker on pre-computed detections/embeddings and generate MOT result files.\n    \n    Args:\n        args: CLI arguments.\n        evolve_config: Optional config dict for hyperparameter tuning.\n        timing_stats: Optional TimingStats to record tracking/association time.\n    \"\"\"\n    # Prepare experiment folder: runs/mot/<dataset_name>/model_reid_tracker when benchmark is set\n    base = args.project / \"mot\"\n    if getattr(args, \"benchmark\", None):\n        base = base / args.benchmark\n    base = base / f\"{args.yolo_model[0].stem}_{args.reid_model[0].stem}_{args.tracking_method}\"\n    exp_dir = increment_path(base, sep=\"_\", exist_ok=False)\n    exp_dir.mkdir(parents=True, exist_ok=True)\n    args.exp_dir = exp_dir\n\n    # Just collect sequence names by scanning directory names\n    sequence_names = []\n    for d in Path(args.source).iterdir():\n        if not d.is_dir():\n            continue\n        img_dir = d / \"img1\" if (d / \"img1\").exists() else d\n        if any(img_dir.glob(\"*.jpg\")) or any(img_dir.glob(\"*.png\")):\n            sequence_names.append(d.name)\n    sequence_names.sort()\n\n    # Build task arguments (include dataset_name for det_emb_root path)\n    dataset_name = getattr(args, \"benchmark\", None)\n    task_args = [\n        (\n            seq,\n            str(args.source),\n            str(args.project),\n            args.yolo_model[0].stem,\n            args.reid_model[0].stem,\n            args.tracking_method,\n            str(exp_dir),\n            getattr(args, \"fps\", None),\n            args.device,\n            evolve_config,\n            dataset_name,\n        )\n        for seq in sequence_names\n    ]\n\n    seq_frame_nums = {}\n    total_track_time_ms = 0.0\n    total_track_frames = 0\n\n    with concurrent.futures.ProcessPoolExecutor(max_workers=NUM_THREADS, initializer=_worker_init) as executor:\n        futures = {\n            executor.submit(process_sequence, *args): args[0] for args in task_args\n        }\n\n        for fut in concurrent.futures.as_completed(futures):\n            seq = futures[fut]\n            try:\n                seq_name, kept_ids, timing_dict = fut.result()\n                seq_frame_nums[seq_name] = kept_ids\n                # Aggregate timing from worker process\n                total_track_time_ms += timing_dict.get('track_time_ms', 0)\n                total_track_frames += timing_dict.get('num_frames', 0)\n            except Exception:\n                LOGGER.exception(f\"Error processing {seq}\")\n    \n    # Record aggregated tracking time in timing_stats\n    if timing_stats is not None:\n        timing_stats.totals['track'] += total_track_time_ms\n        # Also update frame count if not already set (from batch mode)\n        if timing_stats.frames == 0 and total_track_frames > 0:\n            timing_stats.frames = total_track_frames\n        # Log summary\n        if total_track_frames > 0:\n            avg_track = total_track_time_ms / total_track_frames\n            LOGGER.opt(colors=True).info(\n                f\"<bold>Tracking:</bold> {total_track_frames} frames, \"\n                f\"total: <cyan>{total_track_time_ms:.1f}ms</cyan>, \"\n                f\"avg: <cyan>{avg_track:.2f}ms/frame</cyan>\"\n            )\n\n    # Optional GSI postprocessing\n    if getattr(args, \"postprocessing\", \"none\") == \"gsi\":\n        LOGGER.opt(colors=True).info(\"<cyan>[3b/4]</cyan> Applying GSI postprocessing...\")\n        from boxmot.postprocessing.gsi import gsi\n        gsi(mot_results_folder=exp_dir)\n\n    elif getattr(args, \"postprocessing\", \"none\") == \"gbrc\":\n        LOGGER.opt(colors=True).info(\"<cyan>[3b/4]</cyan> Applying GBRC postprocessing...\")\n        from boxmot.postprocessing.gbrc import gbrc\n        gbrc(mot_results_folder=exp_dir)\n\n\ndef run_trackeval(args: argparse.Namespace, verbose: bool = True) -> dict:\n    \"\"\"\n    Runs the trackeval function to evaluate tracking results.\n\n    Args:\n        args (Namespace): Parsed command line arguments.\n        verbose (bool): Whether to print results summary. Default True.\n    \"\"\"\n    seq_paths, seq_info = _collect_seq_info(args.source)\n    annotations_dir = args.source.parent / \"annotations\"\n    gt_folder = annotations_dir if annotations_dir.exists() else args.source\n\n    if not seq_paths:\n        raise ValueError(f\"No sequences with images found under {args.source}\")\n\n    if annotations_dir.exists():\n        for seq_name in list(seq_info.keys()):\n            ann_file = annotations_dir / f\"{seq_name}.txt\"\n            if not ann_file.exists():\n                continue\n            try:\n                with open(ann_file, \"r\") as f:\n                    max_frame = 0\n                    for line in f:\n                        if not line.strip():\n                            continue\n                        frame_id = int(float(line.split(\",\", 1)[0]))\n                        if frame_id > max_frame:\n                            max_frame = frame_id\n                    if max_frame:\n                        seq_info[seq_name] = max(seq_info.get(seq_name, 0) or 0, max_frame)\n            except Exception:\n                LOGGER.warning(f\"Failed to read annotation file {ann_file} for sequence length inference\")\n    # runs/<dataset_name>/<name> when benchmark is set\n    if getattr(args, \"benchmark\", None):\n        save_dir = Path(args.project) / args.benchmark / args.name\n    else:\n        save_dir = Path(args.project) / args.name\n\n    trackeval_results = trackeval(args, seq_paths, save_dir, gt_folder, seq_info=seq_info)\n    parsed_results = parse_mot_results(trackeval_results)\n\n    # Load config to filter classes\n    # Try to load config from benchmark name first, then fallback to source parent name\n    cfg_name = getattr(args, 'benchmark', str(args.source.parent.name))\n    try:\n        cfg = load_dataset_cfg(cfg_name)\n    except FileNotFoundError:\n        # If config not found, try to find it by checking if source path ends with a known config name\n        # This handles cases where source is a custom path\n        found = False\n        for config_file in DATASET_CONFIGS.glob(\"*.yaml\"):\n            if config_file.stem in str(args.source):\n                cfg = load_dataset_cfg(config_file.stem)\n                found = True\n                break\n        \n        if not found:\n            LOGGER.warning(f\"Could not find dataset config for {cfg_name}. Class filtering might be incorrect.\")\n            cfg = {}\n\n    # Filter parsed_results based on user provided classes (args.classes)\n    single_class_mode = False\n\n    # Priority 1: Benchmark config classes (overrides user classes)\n    if \"benchmark\" in cfg:\n        bench_cfg = cfg[\"benchmark\"]\n        bench_classes = None\n\n        if isinstance(bench_cfg, dict):\n            if \"eval_classes\" in bench_cfg:\n                bench_classes = [v for _, v in sorted(bench_cfg[\"eval_classes\"].items(), key=lambda kv: int(kv[0]))]\n            elif \"classes\" in bench_cfg:\n                bench_classes = bench_cfg[\"classes\"].split()\n\n        if bench_classes:\n            parsed_results = {k: v for k, v in parsed_results.items() if k in bench_classes}\n            if len(bench_classes) == 1:\n                single_class_mode = True\n    # Priority 2: User provided classes\n    elif hasattr(args, 'classes') and args.classes is not None:\n        class_indices = args.classes if isinstance(args.classes, list) else [args.classes]\n        user_classes = [COCO_CLASSES[int(i)] for i in class_indices]\n        parsed_results = {k: v for k, v in parsed_results.items() if k in user_classes}\n        if len(user_classes) == 1:\n            single_class_mode = True\n\n    if single_class_mode and len(parsed_results) > 0:\n        final_results = list(parsed_results.values())[0]\n    else:\n        final_results = parsed_results\n    \n    # Print results summary\n    if verbose:\n        LOGGER.info(\"\")\n        LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*105 + \"</blue>\")\n        LOGGER.opt(colors=True).info(f\"<bold><cyan>{'📊 RESULTS SUMMARY':^105}</cyan></bold>\")\n        LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*105 + \"</blue>\")\n        \n        headers = [\"Sequence\", \"HOTA\", \"MOTA\", \"IDF1\", \"AssA\", \"AssRe\", \"IDSW\", \"IDs\"]\n        header_str = \"{:<25} {:>10} {:>10} {:>10} {:>10} {:>10} {:>10} {:>10}\".format(*headers)\n        LOGGER.opt(colors=True).info(f\"<bold>{header_str}</bold>\")\n        LOGGER.opt(colors=True).info(\"<blue>\" + \"-\"*105 + \"</blue>\")\n        \n        for cls, class_metrics in parsed_results.items():\n            # Print per-sequence metrics first\n            per_sequence = class_metrics.get('per_sequence', {})\n            for seq_name in sorted(per_sequence.keys()):\n                seq_metrics = per_sequence[seq_name]\n                name_col = f\"{seq_name:<25}\"\n                vals = [\n                    f\"{seq_metrics.get('HOTA', 0):>10.2f}\",\n                    f\"{seq_metrics.get('MOTA', 0):>10.2f}\",\n                    f\"{seq_metrics.get('IDF1', 0):>10.2f}\",\n                    f\"{seq_metrics.get('AssA', 0):>10.2f}\",\n                    f\"{seq_metrics.get('AssRe', 0):>10.2f}\",\n                    f\"{seq_metrics.get('IDSW', 0):>10}\",\n                    f\"{seq_metrics.get('IDs', 0):>10}\"\n                ]\n                vals_str = \" \".join([f\"<blue>{v}</blue>\" for v in vals])\n                LOGGER.opt(colors=True).info(f\"{name_col} {vals_str}\")\n            \n            # Print COMBINED row (bold, highlighted)\n            LOGGER.opt(colors=True).info(\"<blue>\" + \"-\"*105 + \"</blue>\")\n            name_col = f\"{'COMBINED (' + cls + ')':<25}\"\n            vals = [\n                f\"{class_metrics.get('HOTA', 0):>10.2f}\",\n                f\"{class_metrics.get('MOTA', 0):>10.2f}\",\n                f\"{class_metrics.get('IDF1', 0):>10.2f}\",\n                f\"{class_metrics.get('AssA', 0):>10.2f}\",\n                f\"{class_metrics.get('AssRe', 0):>10.2f}\",\n                f\"{class_metrics.get('IDSW', 0):>10}\",\n                f\"{class_metrics.get('IDs', 0):>10}\"\n            ]\n            vals_str = \" \".join([f\"<cyan>{v}</cyan>\" for v in vals])\n            LOGGER.opt(colors=True).info(f\"<bold>{name_col} {vals_str}</bold>\")\n            \n        LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*105 + \"</blue>\")\n\n    if args.ci:\n        with open(args.tracking_method + \"_output.json\", \"w\") as outfile:\n            outfile.write(json.dumps(final_results))\n    \n    return final_results\n\n\ndef main(args):\n    # Print evaluation pipeline header (blue palette)\n    LOGGER.info(\"\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(\"<bold><cyan>🚀 BoxMOT Evaluation Pipeline</cyan></bold>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Detector:</bold>  <cyan>{args.yolo_model[0]}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>ReID:</bold>      <cyan>{args.reid_model[0]}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Tracker:</bold>   <cyan>{args.tracking_method}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Benchmark:</bold> <cyan>{args.source}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Image size:</bold> <cyan>{getattr(args, 'imgsz', None)}</cyan>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    \n    # Initialize timing stats for the evaluation pipeline\n    timing_stats = TimingStats()\n    \n    # Step 1: Download TrackEval\n    LOGGER.opt(colors=True).info(\"<cyan>[1/4]</cyan> Setting up TrackEval...\")\n    eval_init(args)\n\n    # Step 2: Generate detections and embeddings (with timing)\n    LOGGER.opt(colors=True).info(\"<cyan>[2/4]</cyan> Generating detections and embeddings...\")\n    run_generate_dets_embs(args, timing_stats=timing_stats)\n    \n    # Step 3: Generate MOT results (with tracking timing)\n    LOGGER.opt(colors=True).info(\"<cyan>[3/4]</cyan> Running tracker...\")\n    run_generate_mot_results(args, timing_stats=timing_stats)\n    \n    # Step 4: Evaluate with TrackEval\n    LOGGER.opt(colors=True).info(\"<cyan>[4/4]</cyan> Evaluating results...\")\n    results = run_trackeval(args)\n    \n    # Print timing summary if we collected timing data\n    if timing_stats.frames > 0:\n        timing_stats.print_summary()\n    \n    # Only plot if we have results for a single class or handle multi-class plotting differently\n    # For now, let's just skip the radar chart if we have multiple classes or complex structure\n    # Or pick the first class found?\n    # The original code expected a flat dict of metrics. Now we have {class: {metric: val}}\n    \n    # Let's try to plot for each class or just skip for now to avoid breaking\n    # If 'pedestrian' is in results, use that, otherwise use the first key\n    \n    # Check if results is flat (single class backward compatibility) or nested\n    is_flat = False\n    if results and isinstance(list(results.values())[0], (int, float)):\n        is_flat = True\n        metrics_data = results\n        plot_class = 'single_class'\n    else:\n        plot_class = 'pedestrian'\n        if plot_class not in results and len(results) > 0:\n            plot_class = list(results.keys())[0]\n        metrics_data = results.get(plot_class, {})\n\n    if metrics_data:\n        plotter = MetricsPlotter(args.exp_dir)\n        \n        # Filter only the metrics we want to plot\n        plot_metrics = ['HOTA', 'MOTA', 'IDF1']\n        plot_values = [metrics_data.get(m, 0) for m in plot_metrics]\n\n        plotter.plot_radar_chart(\n            {args.tracking_method: plot_values},\n            plot_metrics,\n            title=f\"MOT metrics radar Chart ({plot_class})\",\n            ylim=(0, 100),\n            yticks=[20, 40, 60, 80, 100],\n            ytick_labels=['20', '40', '60', '80', '100']\n        )\n        \n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "boxmot/engine/export.py",
    "content": "#!/usr/bin/env python3\nimport time\n\nimport torch\n\nfrom boxmot.reid.core import export_formats\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.reid.core.registry import ReIDModelRegistry\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\nfrom boxmot.utils import WEIGHTS\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.torch_utils import select_device\n\n\ndef validate_export_formats(include):\n    available_formats = tuple(export_formats()[\"Argument\"][1:])\n    include_lower = [fmt.lower() for fmt in include]\n    flags = [fmt in include_lower for fmt in available_formats]\n    if sum(flags) != len(include_lower):\n        raise AssertionError(\n            f\"ERROR: Invalid --include {include}, valid arguments are {available_formats}\"\n        )\n    return tuple(flags)\n\n\ndef setup_model(args):\n    args.device = select_device(args.device)\n    if args.half and args.device.type == \"cpu\":\n        raise AssertionError(\"--half only compatible with GPU export, use --device 0 for GPU\")\n\n    auto_backend = ReidAutoBackend(weights=args.weights, device=args.device, half=args.half)\n    model_name = ReIDModelRegistry.get_model_name(args.weights)\n    model = auto_backend.model.model.eval()\n\n    if args.optimize and args.device.type != \"cpu\":\n        raise AssertionError(\"--optimize not compatible with CUDA devices, use --device cpu\")\n\n    if \"vehicleid\" in args.weights.name or \"veri\" in args.weights.name:\n        args.imgsz = (256, 256)\n    elif \"lmbn\" in model_name:\n        args.imgsz = (384, 128)\n    elif \"hacnn\" in model_name:\n        args.imgsz = (160, 64)\n    else:\n        args.imgsz = (256, 128)\n\n    if args.half:\n        model = model.half()\n\n    first_param = next(model.parameters(), None)\n    if first_param is not None:\n        model_dtype = first_param.dtype\n    else:\n        first_buffer = next(model.buffers(), None)\n        model_dtype = first_buffer.dtype if first_buffer is not None else torch.float32\n    dummy_input = torch.empty(\n        args.batch_size,\n        3,\n        args.imgsz[0],\n        args.imgsz[1],\n        device=args.device,\n        dtype=model_dtype,\n    )\n    for _ in range(2):\n        _ = model(dummy_input)\n\n    return model, dummy_input\n\n\ndef create_export_tasks(args, model, dummy_input):\n    torchscript_flag, onnx_flag, openvino_flag, engine_flag, tflite_flag = validate_export_formats(args.include)\n    tasks = {}\n\n    if torchscript_flag:\n        from boxmot.reid.exporters.torchscript_exporter import \\\n            TorchScriptExporter\n        tasks[\"torchscript\"] = (\n            True,\n            TorchScriptExporter,\n            (model, dummy_input, args.weights, args.optimize),\n        )\n\n    if onnx_flag:\n        from boxmot.reid.exporters.onnx_exporter import ONNXExporter\n        tasks[\"onnx\"] = (\n            True,\n            ONNXExporter,\n            (model, dummy_input, args.weights, args.opset, args.dynamic, args.half, args.simplify),\n        )\n\n    if engine_flag:\n        from boxmot.reid.exporters.tensorrt_exporter import EngineExporter\n        tasks[\"engine\"] = (\n            True,\n            EngineExporter,\n            (model, dummy_input, args.weights, args.half, args.dynamic, args.simplify, args.verbose),\n        )\n\n    if tflite_flag:\n        from boxmot.reid.exporters.tflite_exporter import TFLiteExporter\n        tasks[\"tflite\"] = (\n            True,\n            TFLiteExporter,\n            (model, dummy_input, args.weights, args.opset, args.dynamic, args.half, args.simplify),\n        )\n\n    if openvino_flag:\n        from boxmot.reid.exporters.openvino_exporter import OpenVINOExporter\n        tasks[\"openvino\"] = (\n            True,\n            OpenVINOExporter,\n            (model, dummy_input, args.weights, args.half),\n        )\n\n    return tasks\n\n\n\ndef perform_exports(export_tasks):\n    exported_files = {}\n    for fmt, (flag, exporter_class, exp_args) in export_tasks.items():\n        if flag:\n            exporter = exporter_class(*exp_args)\n            # Exporters can optionally declare:\n            #   group=\"...\", or extra=\"...\", and extra_args=[\"--upgrade\"]\n            # The BaseExporter decorator will auto-install them.\n            exported_files[fmt] = exporter.export()\n    return exported_files\n\n\ndef main(args):\n    start_time = time.time()\n\n    WEIGHTS.mkdir(parents=True, exist_ok=True)\n    args.weights = WEIGHTS / args.weights.name\n    \n    # Print header\n    LOGGER.info(\"\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(\"<bold><cyan>🚀 BoxMOT ReID Export</cyan></bold>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Weights:</bold>    <cyan>{args.weights}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Formats:</bold>    <cyan>{', '.join(args.include)}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Device:</bold>     <cyan>{args.device}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Half:</bold>       <cyan>{args.half}</cyan>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"-\"*60 + \"</blue>\")\n\n    LOGGER.opt(colors=True).info(\"<cyan>[1/3]</cyan> Setting up model...\")\n    model, dummy_input = setup_model(args)\n\n    output = model(dummy_input)\n    output_tensor = output[0] if isinstance(output, tuple) else output\n    output_shape = tuple(output_tensor.shape)\n    LOGGER.opt(colors=True).info(\n        f\"<bold>Input shape:</bold>  <cyan>{tuple(dummy_input.shape)}</cyan>\"\n    )\n    LOGGER.opt(colors=True).info(\n        f\"<bold>Output shape:</bold> <cyan>{output_shape}</cyan> \"\n        f\"({BaseExporter.file_size(args.weights):.1f} MB)\"\n    )\n\n    LOGGER.opt(colors=True).info(\"<cyan>[2/3]</cyan> Exporting to formats...\")\n    export_tasks = create_export_tasks(args, model, dummy_input)\n    exported_files = perform_exports(export_tasks)\n\n    if exported_files:\n        elapsed_time = time.time() - start_time\n        LOGGER.opt(colors=True).info(\"<cyan>[3/3]</cyan> Export complete!\")\n        LOGGER.info(\"\")\n        LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n        LOGGER.opt(colors=True).info(\"<bold><cyan>✅ Export Summary</cyan></bold>\")\n        LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n        LOGGER.opt(colors=True).info(f\"<bold>Time:</bold>       <cyan>{elapsed_time:.1f}s</cyan>\")\n        LOGGER.opt(colors=True).info(f\"<bold>Saved to:</bold>   <cyan>{args.weights.parent.resolve()}</cyan>\")\n        for fmt, fpath in exported_files.items():\n            LOGGER.opt(colors=True).info(f\"<bold>  • {fmt}:</bold> <cyan>{fpath}</cyan>\")\n        LOGGER.opt(colors=True).info(\"<bold>Visualize:</bold>  <cyan>https://netron.app</cyan>\")\n        LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "boxmot/engine/inference.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\"\"\"\nUnified inference module for BoxMOT.\n\nThis module provides a consistent interface for running YOLO inference across\nboth real-time tracking (tracker.py) and batch evaluation (evaluator.py) workflows.\nIt handles model initialization, callbacks, and timing instrumentation.\n\"\"\"\n\nimport time\nfrom functools import partial\nfrom pathlib import Path\nfrom typing import Any, Callable, Generator, List, Optional, Union\n\nimport numpy as np\nimport torch\n\nfrom boxmot.detectors import (\n    default_imgsz,\n    get_yolo_inferer,\n    is_ultralytics_model,\n    is_rtdetr_model,\n    is_yolox_model,\n)\nfrom boxmot.utils import WEIGHTS, logger as LOGGER\nfrom boxmot.utils.checks import RequirementsChecker\nfrom boxmot.utils.misc import resolve_model_path\nfrom boxmot.utils.timing import TimingStats\n\nchecker = RequirementsChecker()\nchecker.check_packages((\"ultralytics\",))\n\nfrom ultralytics import YOLO\n\n\ndef resolve_yolo_model_path(yolo_model_path: Union[str, Path]) -> Path:\n    \"\"\"Resolve detector weights while preserving RT-DETR model names.\"\"\"\n    model_path = Path(yolo_model_path)\n\n    if is_rtdetr_model(yolo_model_path):\n        return Path(model_path.name)\n\n    return WEIGHTS / model_path.name\n\n\nclass TimedReIDModel:\n    \"\"\"\n    Wrapper around ReID model to track timing.\n    \n    This wrapper intercepts calls to get_features() and records the time\n    spent in ReID feature extraction.\n    \"\"\"\n    \n    def __init__(self, model, timing_stats: Optional[TimingStats] = None):\n        \"\"\"\n        Initialize the timed ReID model wrapper.\n        \n        Args:\n            model: The underlying ReID model with get_features() method.\n            timing_stats: Optional TimingStats to record ReID timing.\n        \"\"\"\n        self._model = model\n        self._timing_stats = timing_stats\n    \n    def get_features(self, xyxys: np.ndarray, img: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Extract ReID features with timing instrumentation.\n        \n        Args:\n            xyxys: Bounding boxes as numpy array of shape (N, 4) with [x1, y1, x2, y2].\n            img: The image as numpy array (BGR).\n        \n        Returns:\n            Feature embeddings as numpy array of shape (N, feature_dim).\n        \"\"\"\n        t0 = time.perf_counter()\n        features = self._model.get_features(xyxys, img)\n        elapsed_ms = (time.perf_counter() - t0) * 1000\n        \n        if self._timing_stats is not None:\n            self._timing_stats.add_reid_time(elapsed_ms)\n        \n        return features\n    \n    def __getattr__(self, name):\n        \"\"\"Forward all other attributes to the wrapped model.\"\"\"\n        return getattr(self._model, name)\n\n\nclass DetectorReIDPipeline:\n    \"\"\"\n    Unified pipeline for detection and ReID inference with timing instrumentation.\n    \n    This class provides a consistent interface for running YOLO detection and \n    ReID feature extraction across both real-time tracking and batch evaluation.\n    It handles:\n    - YOLO model initialization (Ultralytics and non-Ultralytics models)\n    - ReID model initialization with timing wrappers\n    - Batch and streaming inference\n    - Comprehensive timing statistics\n    \n    Attributes:\n        yolo_model_path: Path to the YOLO model weights.\n        reid_model_paths: List of paths to ReID model weights.\n        device: Device to run inference on.\n        timing_stats: TimingStats instance for timing instrumentation.\n    \"\"\"\n    \n    def __init__(\n        self,\n        yolo_model_path: Union[str, Path],\n        reid_model_paths: Optional[Union[str, Path, List[Union[str, Path]]]] = None,\n        device: str = \"\",\n        imgsz: Optional[Union[int, List[int]]] = None,\n        half: bool = False,\n        timing_stats: Optional[TimingStats] = None,\n    ):\n        \"\"\"\n        Initialize the detector and ReID pipeline.\n        \n        Args:\n            yolo_model_path: Path to the YOLO model weights.\n            reid_model_paths: Path(s) to ReID model weights. Can be single path or list.\n            device: Device to run inference on (e.g., 'cuda:0', 'cpu', 'mps').\n            imgsz: Image size for inference. If None, uses model-specific defaults.\n            half: Whether to use half precision (FP16).\n            timing_stats: Optional TimingStats instance. If None, creates a new one.\n        \"\"\"\n        # Determine model type\n        self.is_ultralytics = is_ultralytics_model(yolo_model_path)\n        self.is_yolox = is_yolox_model(yolo_model_path)\n        self.is_rtdetr = is_rtdetr_model(yolo_model_path)\n\n        self.yolo_model_path = resolve_yolo_model_path(yolo_model_path)\n        self.device = device\n        self.half = half\n        \n        # Initialize or use provided timing stats\n        self.timing_stats = timing_stats if timing_stats is not None else TimingStats()\n        \n        # Set default image size based on model type\n        if imgsz is None:\n            imgsz = default_imgsz(yolo_model_path)\n        self.imgsz = imgsz\n        \n        # Initialize the base YOLO model\n        placeholder = self.yolo_model_path if self.is_ultralytics else WEIGHTS / \"yolov8n.pt\"\n        self.yolo = YOLO(placeholder)\n        \n        # Custom model instance for non-ultralytics models\n        self._custom_model = None\n        \n        # Store user callbacks\n        self._user_callbacks = {\n            \"on_predict_start\": [],\n            \"on_predict_batch_start\": [],\n            \"on_predict_postprocess_end\": [],\n            \"on_predict_batch_end\": [],\n        }\n        \n        # Setup internal callbacks for YOLO\n        self._setup_yolo_callbacks()\n        \n        # Initialize ReID models with timing wrappers\n        self.reid_models: List[TimedReIDModel] = []\n        self.reid_model_names: List[str] = []\n        if reid_model_paths is not None:\n            self._init_reid_models(reid_model_paths)\n    \n    def _init_reid_models(self, reid_model_paths: Union[str, Path, List[Union[str, Path]]]):\n        \"\"\"\n        Initialize ReID models with timing wrappers.\n        \n        Args:\n            reid_model_paths: Path(s) to ReID model weights.\n        \"\"\"\n        # Import here to avoid circular imports\n        from boxmot.reid.core.auto_backend import ReidAutoBackend\n        \n        # Normalize to list\n        if isinstance(reid_model_paths, (str, Path)):\n            reid_model_paths = [reid_model_paths]\n        \n        for reid_path in reid_model_paths:\n            reid_path = resolve_model_path(reid_path)\n            reid_backend = ReidAutoBackend(\n                weights=reid_path,\n                device=self.device,\n                half=self.half,\n            )\n            # Wrap with timing\n            timed_model = TimedReIDModel(reid_backend.model, self.timing_stats)\n            self.reid_models.append(timed_model)\n            self.reid_model_names.append(reid_path.stem)\n    \n    def _setup_yolo_callbacks(self):\n        \"\"\"Setup internal callbacks for model initialization and timing.\"\"\"\n        \n        # Add callback to setup custom models (YOLOX, RT-DETR)\n        if not self.is_ultralytics:\n            self.yolo.add_callback(\"on_predict_start\", self._setup_custom_model)\n            \n            # Add callback to update image paths for YOLOX/RT-DETR\n            if self.is_yolox or self.is_rtdetr:\n                self.yolo.add_callback(\"on_predict_batch_start\", self._update_custom_paths)\n        \n        # Add timing callback for frame start\n        self.yolo.add_callback(\"on_predict_batch_start\", self._on_frame_start)\n    \n    def _setup_custom_model(self, predictor):\n        \"\"\"Setup callback for non-ultralytics models (YOLOX, RT-DETR).\"\"\"\n        if self._custom_model is not None:\n            return  # Already initialized\n        \n        # Get the appropriate model class\n        model_class = get_yolo_inferer(self.yolo_model_path)\n        \n        # Instantiate the model\n        self._custom_model = model_class(\n            model=self.yolo_model_path,\n            device=predictor.device,\n            args=predictor.args,\n        )\n        \n        # Replace predictor's model\n        predictor.model = self._custom_model\n        \n        # Override preprocess and postprocess for YOLOX/RT-DETR\n        if self.is_yolox or self.is_rtdetr:\n            predictor.preprocess = lambda im: self._custom_model.preprocess(im=im)\n            predictor.postprocess = lambda preds, im, im0s: self._custom_model.postprocess(\n                preds=preds, im=im, im0s=im0s\n            )\n    \n    def _update_custom_paths(self, predictor):\n        \"\"\"Update image paths for custom models.\"\"\"\n        if self._custom_model is not None:\n            self._custom_model.update_im_paths(predictor)\n    \n    def _on_frame_start(self, predictor):\n        \"\"\"Callback to mark start of frame processing for timing.\"\"\"\n        self.timing_stats.start_frame()\n    \n    def add_callback(self, event: str, callback: Callable):\n        \"\"\"\n        Add a callback for a specific event.\n        \n        Args:\n            event: Event name (e.g., 'on_predict_start', 'on_predict_postprocess_end').\n            callback: Callback function to call.\n        \"\"\"\n        # Register with the underlying YOLO model\n        self.yolo.add_callback(event, callback)\n        \n        # Also track user callbacks\n        if event in self._user_callbacks:\n            self._user_callbacks[event].append(callback)\n    \n    def get_reid_features(\n        self,\n        xyxys: np.ndarray,\n        img: np.ndarray,\n        reid_index: int = 0,\n    ) -> np.ndarray:\n        \"\"\"\n        Extract ReID features for detections with timing.\n        \n        Args:\n            xyxys: Bounding boxes as numpy array of shape (N, 4) with [x1, y1, x2, y2].\n            img: The image as numpy array (BGR).\n            reid_index: Index of the ReID model to use (default 0).\n        \n        Returns:\n            Feature embeddings as numpy array of shape (N, feature_dim).\n        \"\"\"\n        if not self.reid_models:\n            raise ValueError(\"No ReID models initialized. Pass reid_model_paths to constructor.\")\n        \n        if reid_index >= len(self.reid_models):\n            raise ValueError(f\"ReID index {reid_index} out of range. Have {len(self.reid_models)} models.\")\n        \n        return self.reid_models[reid_index].get_features(xyxys, img)\n    \n    def get_all_reid_features(\n        self,\n        xyxys: np.ndarray,\n        img: np.ndarray,\n    ) -> dict[str, np.ndarray]:\n        \"\"\"\n        Extract ReID features from all loaded ReID models.\n        \n        Args:\n            xyxys: Bounding boxes as numpy array of shape (N, 4) with [x1, y1, x2, y2].\n            img: The image as numpy array (BGR).\n        \n        Returns:\n            Dictionary mapping model name to feature embeddings.\n        \"\"\"\n        results = {}\n        for model, name in zip(self.reid_models, self.reid_model_names):\n            results[name] = model.get_features(xyxys, img)\n        return results\n    \n    def predict(\n        self,\n        source: Union[str, Path, List, np.ndarray],\n        conf: float = 0.25,\n        iou: float = 0.7,\n        agnostic_nms: bool = False,\n        classes: Optional[List[int]] = None,\n        stream: bool = False,\n        verbose: bool = False,\n        **kwargs,\n    ) -> Generator:\n        \"\"\"\n        Run YOLO inference on the source.\n        \n        Args:\n            source: Source for inference (path, list of images, or numpy array).\n            conf: Confidence threshold for detections.\n            iou: IoU threshold for NMS.\n            agnostic_nms: Whether to use class-agnostic NMS.\n            classes: List of class indices to filter.\n            stream: Whether to return a generator (for memory efficiency).\n            verbose: Whether to print verbose output.\n            **kwargs: Additional arguments passed to YOLO.predict().\n        \n        Yields:\n            Results from inference.\n        \"\"\"\n        results = self.yolo.predict(\n            source=source,\n            conf=conf,\n            iou=iou,\n            agnostic_nms=agnostic_nms,\n            device=self.device,\n            classes=classes,\n            imgsz=self.imgsz,\n            stream=stream,\n            verbose=verbose,\n            **kwargs,\n        )\n        \n        # Wrap results to record timing from Ultralytics\n        for result in results:\n            # Record Ultralytics timing\n            if hasattr(result, 'speed') and result.speed:\n                self.timing_stats.totals['preprocess'] += result.speed.get('preprocess', 0) or 0\n                self.timing_stats.totals['inference'] += result.speed.get('inference', 0) or 0\n                self.timing_stats.totals['postprocess'] += result.speed.get('postprocess', 0) or 0\n            \n            yield result\n    \n    def predict_batch(\n        self,\n        images: List[np.ndarray],\n        conf: float = 0.25,\n        iou: float = 0.7,\n        agnostic_nms: bool = False,\n        classes: Optional[List[int]] = None,\n        verbose: bool = False,\n        **kwargs,\n    ) -> List:\n        \"\"\"\n        Run batch inference on a list of images.\n        \n        This is more efficient for batch processing in evaluation workflows.\n        \n        Args:\n            images: List of numpy arrays (BGR images).\n            conf: Confidence threshold for detections.\n            iou: IoU threshold for NMS.\n            agnostic_nms: Whether to use class-agnostic NMS.\n            classes: List of class indices to filter.\n            verbose: Whether to print verbose output.\n            **kwargs: Additional arguments passed to YOLO.predict().\n        \n        Returns:\n            List of Results from inference.\n        \"\"\"\n        results = self.yolo.predict(\n            source=images,\n            conf=conf,\n            iou=iou,\n            agnostic_nms=agnostic_nms,\n            device=self.device,\n            classes=classes,\n            imgsz=self.imgsz,\n            stream=False,\n            verbose=verbose,\n            **kwargs,\n        )\n        \n        # Record timing for batch\n        for result in results:\n            if hasattr(result, 'speed') and result.speed:\n                self.timing_stats.totals['preprocess'] += result.speed.get('preprocess', 0) or 0\n                self.timing_stats.totals['inference'] += result.speed.get('inference', 0) or 0\n                self.timing_stats.totals['postprocess'] += result.speed.get('postprocess', 0) or 0\n        \n        return results\n    \n    def warmup(self):\n        \"\"\"\n        Warmup the model with a dummy inference.\n        \n        This helps ensure consistent timing for the first real inference.\n        \"\"\"\n        try:\n            if isinstance(self.imgsz, (list, tuple)):\n                h, w = int(self.imgsz[0]), int(self.imgsz[1])\n            else:\n                h = w = int(self.imgsz)\n            \n            dummy = np.zeros((h, w, 3), dtype=np.uint8)\n            _ = self.yolo.predict(\n                source=[dummy],\n                device=self.device,\n                verbose=False,\n                imgsz=self.imgsz,\n            )\n        except Exception as e:\n            LOGGER.warning(f\"Warmup failed: {e}\")\n    \n    def autotune_batch_size(self, requested_batch_size: int) -> int:\n        \"\"\"\n        Autotune batch size to find the maximum that fits in memory.\n        \n        Args:\n            requested_batch_size: Initial batch size to try.\n        \n        Returns:\n            The maximum batch size that fits in memory.\n        \"\"\"\n        dev_lower = str(self.device).lower()\n        use_accel = dev_lower.startswith((\"cuda\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"mps\", \"metal\"))\n        if not use_accel:\n            return max(1, requested_batch_size)\n        \n        def _empty_cache():\n            if dev_lower.startswith(\"cuda\") and torch.cuda.is_available():\n                torch.cuda.empty_cache()\n            elif dev_lower.startswith((\"mps\", \"metal\")) and hasattr(torch, \"mps\"):\n                try:\n                    torch.mps.empty_cache()\n                except Exception:\n                    pass\n        \n        if isinstance(self.imgsz, (list, tuple)):\n            h, w = int(self.imgsz[0]), int(self.imgsz[1])\n        else:\n            h = w = int(self.imgsz)\n        \n        dummy = np.zeros((h, w, 3), dtype=np.uint8)\n        \n        bs = max(1, int(requested_batch_size))\n        while bs >= 1:\n            try:\n                self.yolo.predict(\n                    source=[dummy] * bs,\n                    device=self.device,\n                    verbose=False,\n                    imgsz=self.imgsz,\n                )\n                if bs < requested_batch_size:\n                    LOGGER.info(f\"Auto-tuned batch size: {bs} (requested: {requested_batch_size})\")\n                return bs\n            except RuntimeError as e:\n                if \"out of memory\" not in str(e).lower():\n                    raise\n                _empty_cache()\n                next_bs = max(1, bs // 2)\n                LOGGER.warning(f\"Batch size {bs} OOM; trying {next_bs}.\")\n                if next_bs == bs:\n                    break\n                bs = next_bs\n        \n        raise RuntimeError(\"Unable to run even batch size 1; reduce image size or move to CPU.\")\n    \n    def print_timing_summary(self):\n        \"\"\"Print the timing summary.\"\"\"\n        self.timing_stats.print_summary()\n    \n    @property\n    def custom_model(self):\n        \"\"\"Get the custom model instance (for YOLOX/RT-DETR).\"\"\"\n        return self._custom_model\n\n\n# Backwards compatibility alias\nYOLOInference = DetectorReIDPipeline\n\n\ndef extract_detections(result) -> np.ndarray:\n    \"\"\"\n    Extract detections from a YOLO result in a consistent format.\n    \n    Args:\n        result: A YOLO result object.\n    \n    Returns:\n        numpy array of shape (N, 6) for AABB models with columns\n        [x1, y1, x2, y2, conf, cls], or shape (N, 7) for OBB models with\n        columns [cx, cy, w, h, angle, conf, cls].\n        Returns an empty array with the correct width when no detections are present.\n    \"\"\"\n    if getattr(result, \"boxes\", None) is not None:\n        if len(result.boxes) == 0:\n            return np.empty((0, 6), dtype=np.float32)\n        return result.boxes.data.cpu().numpy()\n\n    if getattr(result, \"obb\", None) is not None:\n        if len(result.obb) == 0:\n            return np.empty((0, 7), dtype=np.float32)\n        return result.obb.data.cpu().numpy()\n\n    return np.empty((0, 6), dtype=np.float32)\n\n\ndef filter_detections(\n    dets: np.ndarray,\n    min_area: float = 10.0,\n    remove_degenerate: bool = True,\n) -> np.ndarray:\n    \"\"\"\n    Filter detections to remove invalid boxes.\n    \n    Args:\n        dets: Detection array of shape (N, 6+) with [x1, y1, x2, y2, conf, cls, ...].\n        min_area: Minimum box area to keep.\n        remove_degenerate: Whether to remove boxes with non-positive dimensions.\n    \n    Returns:\n        Filtered detection array.\n    \"\"\"\n    if len(dets) == 0:\n        return dets\n\n    if dets.shape[1] == 7:\n        widths, heights = dets[:, 2], dets[:, 3]\n\n        if remove_degenerate:\n            valid = (widths > 0) & (heights > 0)\n            dets = dets[valid]\n            if len(dets) == 0:\n                return dets\n            widths, heights = dets[:, 2], dets[:, 3]\n\n        areas = widths * heights\n        return dets[areas >= min_area]\n    \n    x1, y1, x2, y2 = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3]\n    \n    # Remove degenerate boxes\n    if remove_degenerate:\n        valid = (x2 > x1) & (y2 > y1)\n        dets = dets[valid]\n        if len(dets) == 0:\n            return dets\n        x1, y1, x2, y2 = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3]\n    \n    # Remove tiny boxes\n    areas = (x2 - x1) * (y2 - y1)\n    valid_area = areas >= min_area\n    \n    return dets[valid_area]\n"
  },
  {
    "path": "boxmot/engine/results.py",
    "content": "import time\nfrom pathlib import Path\nfrom typing import Any, Callable, Iterator, Union\n\nimport cv2\nimport numpy as np\n\n\ntry:\n    from ultralytics.utils.plotting import Annotator, colors\nexcept ImportError:\n    Annotator = None\n\nclass Tracks:\n    def __init__(self, frame: np.ndarray, tracks: np.ndarray, get_drawer: Callable[[], Callable]):\n        self.frame = frame\n        self.tracks = tracks\n        self._get_drawer = get_drawer\n        \n    def show(self) -> bool:\n        drawer = self._get_drawer()\n        \n        if drawer is None:\n             drawn_frame = self._default_draw(self.frame, self.tracks)\n        else:\n             drawn_frame = drawer(self.frame, self.tracks)\n             \n        cv2.imshow(\"Tracking\", drawn_frame)\n        key = cv2.waitKey(1) & 0xFF\n        if key == ord('q') or key == 27: # 'q' or ESC\n             return False\n        return True\n\n    def _default_draw(self, frame, tracks):\n        if Annotator is None:\n            return frame\n        \n        annotator = Annotator(frame, line_width=2, example=str(\" \"))\n        for t in tracks:\n            bbox = t[:4]\n            id = int(t[4])\n            conf = t[5]\n            # cls maps to coco classes, but let's check length\n            # Some trackers might output differently. \n            # Standard BoxMOT output is: [x1, y1, x2, y2, id, conf, cls, det_ind]\n            \n            label = f\"{id} {conf:.2f}\"\n            annotator.box_label(bbox, label, color=colors(id, True))\n        return annotator.result()\n\n\nclass Results:\n    def __init__(self, source: Union[str, int, Path], detector: Any, reid: Any, tracker: Any, verbose: bool = True):\n        self.source = source\n        self.detector = detector\n        self.reid = reid\n        self.tracker = tracker\n        self.verbose = verbose\n        self.drawer = None \n        self._generator = None\n        self._cache = []\n        \n        # Timing accumulators\n        self.totals = {\n            'det': 0.0,\n            'reid': 0.0,\n            'track': 0.0,\n            'total': 0.0,\n            'frames': 0\n        }\n        \n    def __iter__(self) -> Iterator[Tracks]:\n        if self._generator is None:\n            self._generator = self._process()\n        return self\n\n    def __next__(self) -> Tracks:\n        if self._generator is None:\n             self._generator = self._process()\n        tracks = next(self._generator)\n        self._cache.append(tracks)\n        return tracks\n    \n    def _log_frame_timings(self, frame_num: int, det_time: float, reid_time: float, track_time: float) -> None:\n        \"\"\"Log timing information for a single frame.\"\"\"\n        total = det_time + reid_time + track_time\n        \n        log_msg = f\"Frame {frame_num} | Det: {det_time:.1f}ms\"\n        if self.reid:\n            log_msg += f\" | ReID: {reid_time:.1f}ms\"\n        log_msg += f\" | Track: {track_time:.1f}ms | Total: {total:.1f}ms\"\n        \n        print(log_msg)\n        \n        # Accumulate\n        self.totals['det'] += det_time\n        self.totals['reid'] += reid_time\n        self.totals['track'] += track_time\n        self.totals['total'] += total\n        self.totals['frames'] += 1\n\n    def _print_summary(self):\n        \"\"\"Print execution time summary table.\"\"\"\n        if self.totals['frames'] == 0:\n            return\n\n        frames = self.totals['frames']\n        det_avg = self.totals['det'] / frames\n        reid_avg = self.totals['reid'] / frames\n        track_avg = self.totals['track'] / frames\n        total_avg = self.totals['total'] / frames\n        \n        print(\"\\n\" + \"=\"*65)\n        print(f\"{'Component':<15} | {'Total Time (ms)':<20} | {'Average Time (ms)':<20}\")\n        print(\"-\" * 65)\n        print(f\"{'Detection':<15} | {self.totals['det']:<20.1f} | {det_avg:<20.1f}\")\n        if self.reid:\n            print(f\"{'ReID':<15} | {self.totals['reid']:<20.1f} | {reid_avg:<20.1f}\")\n        print(f\"{'Tracking':<15} | {self.totals['track']:<20.1f} | {track_avg:<20.1f}\")\n        print(\"-\" * 65)\n        print(f\"{'Total':<15} | {self.totals['total']:<20.1f} | {total_avg:<20.1f}\")\n        print(\"=\"*65 + \"\\n\")\n\n    def _get_frames(self):\n        src = self.source\n        # Check source type for directory\n        if isinstance(src, (str, Path)) and Path(src).is_dir():\n            path_src = Path(src)\n            exts = ['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tif', '*.tiff', '*.JPG', '*.JPEG', '*.PNG']\n            images = []\n            for ext in exts:\n                images.extend(path_src.glob(ext))\n            images = sorted(images)\n            \n            if not images:\n                raise ValueError(f\"No images found in {src}\")\n            \n            for img_path in images:\n                frame = cv2.imread(str(img_path))\n                if frame is None:\n                    continue\n                yield frame\n            return\n\n        # Video source logic\n        if isinstance(src, (str, Path)):\n             if str(src).isdigit():\n                  src = int(src)\n             else:\n                  src = str(src)\n        \n        cap = cv2.VideoCapture(src)\n        if not cap.isOpened():\n             raise ValueError(f\"Could not open video source: {src}\")\n        \n        try:\n            while True:\n                ret, frame = cap.read()\n                if not ret:\n                    break\n                yield frame\n        finally:\n            cap.release()\n\n    def _process(self):\n        frame_generator = self._get_frames()\n        frame_num = 0\n        \n        try:\n            for frame in frame_generator:\n                frame_num += 1\n                \n                # 1. Detect\n                t0 = time.time()\n                dets = self.detector(frame)\n                det_time = (time.time() - t0) * 1000\n                \n                # 2. ReID\n                if self.reid:\n                    t1 = time.time()\n                    features = self.reid(frame, dets)\n                    reid_time = (time.time() - t1) * 1000\n                else:\n                    features = None\n                    reid_time = 0.0\n                     \n                # 3. Track\n                t2 = time.time()\n                tracks = self.tracker.update(dets, frame, features)\n                track_time = (time.time() - t2) * 1000\n                \n                # Log timings (accumulates automatically)\n                if self.verbose:\n                    self._log_frame_timings(frame_num, det_time, reid_time, track_time)\n                \n                yield Tracks(frame, tracks, get_drawer=lambda: self.drawer)\n                \n        finally:\n            if self.verbose:\n                self._print_summary()\n\n    def show(self):\n        for track_result in self:\n            if not track_result.show():\n                break\n        cv2.destroyAllWindows()\n\n\ndef track(source, detector, reid, tracker, verbose: bool = True) -> Results:\n    return Results(source, detector, reid, tracker, verbose=verbose)\n"
  },
  {
    "path": "boxmot/engine/tracker.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom functools import partial\nfrom pathlib import Path\n\nimport cv2\nimport numpy as np\nimport torch\n\nfrom boxmot import TRACKERS\nfrom boxmot.detectors import default_imgsz\nfrom boxmot.engine.inference import DetectorReIDPipeline, extract_detections\nfrom boxmot.trackers.tracker_zoo import create_tracker\nfrom boxmot.utils import TRACKER_CONFIGS\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.timing import TimingStats, wrap_tracker_reid\n\n\nclass VideoWriter:\n    \"\"\"Handles video writing for tracking results.\"\"\"\n    \n    def __init__(self, output_path, fps=30):\n        self.output_path = Path(output_path)\n        self.output_path.parent.mkdir(parents=True, exist_ok=True)\n        self.fps = fps\n        self.writer = None\n        self.frame_size = None\n    \n    def write(self, frame):\n        \"\"\"Write a frame to the video.\"\"\"\n        if self.writer is None:\n            h, w = frame.shape[:2]\n            self.frame_size = (w, h)\n            fourcc = cv2.VideoWriter_fourcc(*'mp4v')\n            self.writer = cv2.VideoWriter(\n                str(self.output_path), fourcc, self.fps, self.frame_size\n            )\n            LOGGER.opt(colors=True).info(f\"<bold>Saving video to:</bold> <cyan>{self.output_path}</cyan>\")\n        \n        self.writer.write(frame)\n    \n    def release(self):\n        \"\"\"Release the video writer.\"\"\"\n        if self.writer is not None:\n            self.writer.release()\n            LOGGER.opt(colors=True).info(f\"<bold>Video saved:</bold> <cyan>{self.output_path}</cyan>\")\n\n\ndef on_predict_start(predictor, args, timing_stats=None):\n    \"\"\"\n    Initialize trackers for object tracking during prediction.\n    \n    Args:\n        predictor (object): The predictor object to initialize trackers for.\n        args: CLI arguments containing tracking configuration.\n        timing_stats: Optional TimingStats for ReID timing instrumentation.\n    \"\"\"\n    assert args.tracking_method in TRACKERS, \\\n        f\"'{args.tracking_method}' is not supported. Supported ones are {TRACKERS}\"\n\n    tracking_config = TRACKER_CONFIGS / (args.tracking_method + '.yaml')\n    trackers = []\n    # Ensure at least 1 tracker is created (bs might be 0 for some sources)\n    batch_size = max(1, predictor.dataset.bs)\n    for i in range(batch_size):\n        tracker = create_tracker(\n            args.tracking_method,\n            tracking_config,\n            args.reid_model,\n            predictor.device,\n            args.half,\n            args.per_class,\n        )\n        # set target_id if user passed it\n        if args.target_id is not None:\n            tracker.target_id = args.target_id\n        \n        # Wrap ReID model for timing instrumentation\n        if timing_stats is not None:\n            wrap_tracker_reid(tracker, timing_stats)\n        \n        trackers.append(tracker)\n\n    predictor.trackers = trackers\n    predictor.custom_args = args  # Store for later use\n\n\ndef plot_trajectories(predictor, timing_stats=None, video_writer=None):\n    \"\"\"\n    Callback to run tracking update and plot trajectories on each frame.\n    \n    Args:\n        predictor (object): The predictor object containing results and trackers.\n        timing_stats (TimingStats, optional): Timing statistics tracker.\n        video_writer (VideoWriter, optional): Video writer for saving output.\n    \"\"\"\n    # Ensure trackers are initialized\n    if not hasattr(predictor, 'trackers') or not predictor.trackers:\n        LOGGER.warning(\"Trackers not initialized, skipping frame\")\n        return\n        \n    # predictor.results is a list of Results, one per frame in the batch\n    for i, result in enumerate(predictor.results):\n        if i >= len(predictor.trackers):\n            LOGGER.warning(f\"No tracker for batch index {i}, skipping\")\n            continue\n            \n        tracker = predictor.trackers[i]\n        \n        # Get detections from result using unified extraction\n        dets = extract_detections(result)\n        img = result.orig_img\n        \n        # Reset per-frame ReID accumulator\n        if timing_stats:\n            timing_stats.reset_frame_reid()\n        \n        # Run tracking update (includes ReID)\n        if timing_stats:\n            timing_stats.start_tracking()\n        \n        tracks = tracker.update(dets, img)\n        \n        track_time = reid_time = assoc_time = 0\n        if timing_stats:\n            timing_stats.end_tracking()\n            track_time = timing_stats.get_last_track_time()\n            reid_time = timing_stats.get_last_reid_time()\n            assoc_time = track_time - reid_time\n        \n        # Store tracks in result for downstream use\n        result.tracks = tracks\n        n_tracks = len(tracks) if tracks is not None and len(tracks) > 0 else 0\n        \n        # Log per-frame tracking info (detection time shown by ultralytics above)\n        LOGGER.opt(colors=True).info(\n            f\"<bold>Track:</bold> <cyan>{n_tracks}</cyan> IDs, \"\n            f\"reid: <blue>{reid_time:.1f}ms</blue>, \"\n            f\"assoc: <blue>{assoc_time:.1f}ms</blue>, \"\n            f\"total: <cyan>{track_time:.1f}ms</cyan>\"\n        )\n        \n        # Plot results\n        if timing_stats:\n            timing_stats.start_plot()\n        \n        result.orig_img = tracker.plot_results(\n            img,\n            predictor.custom_args.show_trajectories,\n            show_lost=predictor.custom_args.show_lost\n        )\n        \n        if timing_stats:\n            timing_stats.end_plot()\n        \n        # Save frame to video\n        if video_writer is not None:\n            video_writer.write(result.orig_img)\n        \n        # Show the frame if requested\n        if predictor.custom_args.show:\n            cv2.imshow(\"BoxMOT\", result.orig_img)\n            key = cv2.waitKey(1) & 0xFF\n            # Exit on 'q' key press - set flag for clean shutdown\n            if key == ord('q'):\n                predictor.custom_args._user_quit = True\n    \n    # End frame timing\n    if timing_stats:\n        timing_stats.end_frame()\n\n\n@torch.no_grad()\ndef main(args):\n    \"\"\"\n    Run tracking using the integrated Ultralytics workflow.\n    \n    Args:\n        args: Arguments from CLI (SimpleNamespace from cli.py)\n    \"\"\"\n    # Print tracking pipeline header (blue palette)\n    LOGGER.info(\"\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(\"<bold><cyan>🎯 BoxMOT Tracking Pipeline</cyan></bold>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Detector:</bold>  <cyan>{args.yolo_model}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>ReID:</bold>      <cyan>{args.reid_model}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Tracker:</bold>   <cyan>{args.tracking_method}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Source:</bold>    <cyan>{args.source}</cyan>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    \n    # Set default image size based on model type\n    if args.imgsz is None:\n        args.imgsz = default_imgsz(args.yolo_model)\n    \n    # Initialize timing stats\n    timing_stats = TimingStats()\n    \n    # Initialize video writer if saving is enabled\n    video_writer = None\n    if args.save:\n        # Determine output path\n        project = Path(args.project) if args.project else Path(\"runs/track\")\n        name = args.name if args.name else \"exp\"\n        save_dir = project / name\n        \n        # Handle exist_ok\n        if not args.exist_ok:\n            i = 1\n            while save_dir.exists():\n                save_dir = project / f\"{name}{i}\"\n                i += 1\n        \n        # Determine video filename from source\n        source_path = Path(args.source)\n        if source_path.is_file():\n            video_name = source_path.stem + \"_tracked.mp4\"\n        elif source_path.is_dir():\n            video_name = source_path.name + \"_tracked.mp4\"\n        else:\n            video_name = \"tracking_output.mp4\"\n        \n        video_writer = VideoWriter(save_dir / video_name, fps=30)\n    \n    # Initialize unified detector + ReID pipeline with timing support\n    pipeline = DetectorReIDPipeline(\n        yolo_model_path=args.yolo_model,\n        reid_model_paths=None,  # ReID handled by tracker for real-time tracking\n        device=args.device,\n        imgsz=args.imgsz,\n        half=args.half,\n        timing_stats=timing_stats,\n    )\n\n    # Add callbacks for tracker initialization and trajectory plotting\n    # Pass args, timing_stats and video_writer through partial to make them available in callbacks\n    pipeline.add_callback(\"on_predict_start\", partial(on_predict_start, args=args, timing_stats=timing_stats))\n    pipeline.add_callback(\"on_predict_postprocess_end\", partial(plot_trajectories, timing_stats=timing_stats, video_writer=video_writer))\n\n    # Use predict() instead of track() to avoid Ultralytics' default tracking callbacks\n    results = pipeline.predict(\n        source=args.source,\n        conf=args.conf,\n        iou=args.iou,\n        agnostic_nms=args.agnostic_nms,\n        show=False,\n        stream=True,\n        show_conf=args.show_conf,\n        save_txt=args.save_txt,\n        show_labels=args.show_labels,\n        save=False,  # We handle video saving ourselves with tracking overlays\n        verbose=args.verbose,\n        exist_ok=args.exist_ok,\n        project=args.project,\n        name=args.name,\n        classes=args.classes,\n        vid_stride=args.vid_stride,\n        line_width=args.line_width,\n        save_crop=args.save_crop,\n    )\n\n    # Initialize quit flag\n    args._user_quit = False\n    \n    # Iterate through results to run the tracking pipeline\n    # The YOLOInference.predict() generator handles timing automatically\n    try:\n        for result in results:\n            # Check if user requested quit\n            if args._user_quit:\n                break\n    except KeyboardInterrupt:\n        pass  # Handle Ctrl+C gracefully\n    finally:\n        # Release video writer\n        if video_writer is not None:\n            video_writer.release()\n        # Always print timing summary when done\n        timing_stats.print_summary()\n        # Clean up windows\n        cv2.destroyAllWindows()\n\n\nif __name__ == \"__main__\":\n    raise SystemExit(\"Run via CLI: boxmot track [options]\")\n"
  },
  {
    "path": "boxmot/engine/tuner.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nThis script runs a hyperparameter tuning process for a multi-object tracking (MOT) tracker using Ray Tune,\nwith support for resuming (restoring) previous tuning runs.\n\"\"\"\n\nimport os\n\nos.environ[\"RAY_CHDIR_TO_TRIAL_DIR\"] = \"0\"   # keep CWD constant for all trials\nfrom pathlib import Path\n\nimport yaml\n\nfrom boxmot.engine.evaluator import (eval_init, run_generate_dets_embs,\n                                     run_generate_mot_results, run_trackeval)\nfrom boxmot.utils import NUM_THREADS, TRACKER_CONFIGS\nfrom boxmot.utils import logger as LOGGER\n\n\ndef load_yaml_config(tracking_method: str) -> dict:\n    \"\"\"\n    Loads the YAML configuration file for the given tracking method.\n    \"\"\"\n    config_path = TRACKER_CONFIGS / f\"{tracking_method}.yaml\"\n    with open(config_path, \"r\") as file:\n        return yaml.safe_load(file)\n\n\ndef yaml_to_search_space(config: dict, tune) -> dict:\n    \"\"\"\n    Converts a YAML configuration dictionary to a Ray Tune search space.\n    \n    Args:\n        config: YAML configuration dictionary\n        tune: Ray Tune module (passed to avoid import at module level)\n    \"\"\"\n    space = {}\n    for param, details in config.items():\n        t = details.get(\"type\")\n        if t == \"uniform\":\n            space[param] = tune.uniform(*details[\"range\"])\n        elif t == \"randint\":\n            space[param] = tune.randint(*details[\"range\"])\n        elif t == \"qrandint\":\n            space[param] = tune.qrandint(*details[\"range\"])\n        elif t == \"choice\":\n            space[param] = tune.choice(details.get(\"options\"))\n        elif t == \"grid_search\":\n            # Optuna doesn't support grid_search directly in the same way as basic Tune\n            # Mapping grid_search to choice for Optuna compatibility\n            space[param] = tune.choice(details[\"values\"])\n        elif t == \"loguniform\":\n            space[param] = tune.loguniform(*details[\"range\"])\n    return space\n\n\nclass Tracker:\n    \"\"\"\n    Encapsulates the evaluation of a tracking configuration.\n    \"\"\"\n    def __init__(self, opt):\n        self.opt = opt\n\n    def objective_function(self, config: dict) -> dict:\n        # Generate MOT-compliant results\n        run_generate_mot_results(self.opt, config)\n        # Evaluate and extract objectives\n        results = run_trackeval(self.opt)\n\n        if not results:\n            return {k: 0 for k in self.opt.objectives}\n\n        # Drop per-sequence breakdown if present; we only tune on combined metrics.\n        if isinstance(results, dict) and \"per_sequence\" in results:\n            results = {k: v for k, v in results.items() if k != \"per_sequence\"}\n\n        values = list(results.values())\n\n        # If results are nested (multi-class), average the metrics\n        if values and all(isinstance(v, dict) for v in values):\n            return {\n                k: max(\n                    0,\n                    sum(\n                        c.get(k, 0)\n                        for c in results.values()\n                        if isinstance(c, dict)\n                    )\n                    / max(1, len(results)),\n                )\n                for k in self.opt.objectives\n            }\n\n        return {k: max(0, results.get(k, 0)) for k in self.opt.objectives}\n\n\ndef main(args):\n    # Install evolve dependencies only once in main process\n    from boxmot.utils.checks import RequirementsChecker\n    checker = RequirementsChecker()\n    checker.sync_extra(extra=\"evolve\")\n    \n    # Import ray after dependencies are installed\n    from ray import tune\n    from ray.tune import RunConfig\n    from ray.tune.search.optuna import OptunaSearch\n\n    # Print tuning pipeline header (blue palette)\n    LOGGER.info(\"\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(\"<bold><cyan>🔧 BoxMOT Hyperparameter Tuning</cyan></bold>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Tracker:</bold>   <cyan>{args.tracking_method}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Detector:</bold>  <cyan>{args.yolo_model}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>ReID:</bold>      <cyan>{args.reid_model}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Trials:</bold>    <cyan>{args.n_trials}</cyan>\")\n    LOGGER.opt(colors=True).info(f\"<bold>Objectives:</bold> <cyan>{', '.join(args.objectives)}</cyan>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    \n    # --- initial setup ---\n    args.yolo_model = [Path(y).resolve() for y in args.yolo_model]\n    args.reid_model = [Path(r).resolve() for r in args.reid_model]\n\n    # Load search space\n    yaml_cfg = load_yaml_config(args.tracking_method)\n    search_space = yaml_to_search_space(yaml_cfg, tune)\n    tracker = Tracker(args)\n\n    # Optuna search setup\n    primary_metric = args.objectives[0]\n    optuna_search = OptunaSearch(metric=primary_metric, mode=\"max\")\n\n    def tune_wrapper(cfg):\n        return tracker.objective_function(cfg)\n\n    # Paths for storage and restore\n    tune_name = f\"{args.tracking_method}_tune\"\n    results_dir = args.project / \"ray\"\n    restore_path = results_dir / tune_name\n\n    # Define trainable\n    trainable = tune.with_resources(tune_wrapper, {\"cpu\": NUM_THREADS, \"gpu\": 0})\n\n    # Ensure evaluation tools are available\n    LOGGER.opt(colors=True).info(\"<cyan>[1/3]</cyan> Setting up evaluation environment...\")\n    eval_init(args)\n    \n    LOGGER.opt(colors=True).info(\"<cyan>[2/3]</cyan> Generating detections and embeddings...\")\n    run_generate_dets_embs(args)\n\n    # Check for existing run to resume\n    LOGGER.opt(colors=True).info(\"<cyan>[3/3]</cyan> Running hyperparameter optimization...\")\n    if tune.Tuner.can_restore(restore_path):\n        LOGGER.opt(colors=True).info(f\"<bold>Resuming tuning from:</bold> <cyan>{restore_path}</cyan>\")\n        tuner = tune.Tuner.restore(\n            str(restore_path),\n            trainable=trainable,\n            resume_errored=True,\n        )\n    else:\n        tuner = tune.Tuner(\n            trainable,\n            param_space=search_space,\n            tune_config=tune.TuneConfig(\n                num_samples=args.n_trials,\n                search_alg=optuna_search,\n            ),\n            run_config=RunConfig(\n                storage_path=results_dir,\n                name=tune_name,\n            ),\n        )\n\n    # Run or resume\n    tuner.fit()\n    \n    # Print results summary\n    results = tuner.get_results()\n    LOGGER.info(\"\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.opt(colors=True).info(\"<bold><cyan>📊 Tuning Results</cyan></bold>\")\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n    LOGGER.info(results)\n    LOGGER.opt(colors=True).info(\"<blue>\" + \"=\"*60 + \"</blue>\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "boxmot/motion/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/motion/cmc/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom importlib import import_module\nfrom typing import Callable, Dict, Iterable, Mapping, Optional, Type\n\nfrom boxmot.motion.cmc.base_cmc import BaseCMC\n\n\ndef _normalize(name: str) -> str:\n    \"\"\"Normalize user input to a canonical registry key.\"\"\"\n    return name.strip().lower().replace(\"-\", \"_\")\n\n\n@dataclass(frozen=True)\nclass _LazyLoader:\n    \"\"\"Lazily import and return a CMC class by module and attribute name.\"\"\"\n    module: str\n    attr: str\n\n    def __call__(self) -> Type[BaseCMC]:\n        mod = import_module(self.module)\n        cls = getattr(mod, self.attr)\n        # Optional: basic sanity check to fail fast if registry is misconfigured.\n        if not issubclass(cls, BaseCMC):\n            raise TypeError(f\"{self.module}.{self.attr} is not a BaseCMC subclass.\")\n        return cls\n\n\n# Registry of known methods (lazy-loaded).\n_CMC_REGISTRY: Mapping[str, Callable[[], Type[BaseCMC]]] = {\n    \"ecc\": _LazyLoader(\"boxmot.motion.cmc.ecc\", \"ECC\"),\n    \"orb\": _LazyLoader(\"boxmot.motion.cmc.orb\", \"ORB\"),\n    \"sof\": _LazyLoader(\"boxmot.motion.cmc.sof\", \"SOF\"),\n    \"sift\": _LazyLoader(\"boxmot.motion.cmc.sift\", \"SIFT\"),\n}\n\n\ndef available_cmc_methods() -> tuple[str, ...]:\n    \"\"\"Return the list of supported CMC method keys.\"\"\"\n    return tuple(sorted(_CMC_REGISTRY.keys()))\n\n\ndef get_cmc_method(name: Optional[str]) -> Optional[Type[BaseCMC]]:\n    \"\"\"\n    Resolve a CMC method name to its class.\n\n    Returns None only when name is None (useful for \"disabled\" configs).\n    Raises ValueError for unknown non-None names to fail fast and clearly.\n    \"\"\"\n    if name is None:\n        return None\n\n    key = _normalize(name)\n    loader = _CMC_REGISTRY.get(key)\n    if loader is None:\n        raise ValueError(\n            f\"Unknown cmc_method={name!r}. \"\n            f\"Supported values: {', '.join(available_cmc_methods())}\"\n        )\n    return loader()\n\n\ndef create_cmc(name: Optional[str], /, **kwargs) -> Optional[BaseCMC]:\n    \"\"\"\n    Convenience factory: create and return an instance.\n    \"\"\"\n    cls = get_cmc_method(name)\n    return None if cls is None else cls(**kwargs)\n"
  },
  {
    "path": "boxmot/motion/cmc/base_cmc.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom abc import ABC, abstractmethod\nfrom typing import Optional, Tuple, Union\n\nimport cv2\nimport numpy as np\n\n\nScale = Union[float, Tuple[int, int], None]\n\n\nclass BaseCMC(ABC):\n    \"\"\"\n    Base class for camera motion compensation (CMC) modules.\n\n    Contract:\n      - `apply(img, dets)` returns an affine warp matrix (2x3) or homography (3x3),\n        depending on the method and configuration.\n      - `dets` is expected in tlbr format (x1, y1, x2, y2) in *original image scale*.\n    \"\"\"\n\n    grayscale: bool = True\n    scale: Scale = 0.15\n\n    @abstractmethod\n    def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) -> np.ndarray:\n        raise NotImplementedError\n\n    def preprocess(self, img: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Convert BGR->GRAY (optional) and resize (optional).\n        Supports:\n          - scale as float (fx, fy)\n          - scale as (W, H) target size\n          - None => no resize\n        \"\"\"\n        if img is None or not hasattr(img, \"shape\"):\n            raise ValueError(\"Expected img to be a valid numpy array.\")\n\n        out = img\n        if getattr(self, \"grayscale\", True):\n            # assume BGR input\n            out = cv2.cvtColor(out, cv2.COLOR_BGR2GRAY)\n\n        sc = getattr(self, \"scale\", None)\n        if sc is None:\n            return out\n\n        if isinstance(sc, (int, float)):\n            if sc <= 0:\n                raise ValueError(f\"scale must be > 0, got {sc}\")\n            out = cv2.resize(out, (0, 0), fx=float(sc), fy=float(sc), interpolation=cv2.INTER_LINEAR)\n        else:\n            # treat as explicit size (W, H)\n            w, h = int(sc[0]), int(sc[1])\n            if w <= 0 or h <= 0:\n                raise ValueError(f\"Invalid target size for scale: {(w, h)}\")\n            out = cv2.resize(out, (w, h), interpolation=cv2.INTER_LINEAR)\n\n        return out\n\n    def generate_mask(self, img_gray: np.ndarray, dets: Optional[np.ndarray], scale: float) -> np.ndarray:\n        \"\"\"\n        Create a mask that:\n          - keeps a central safe region\n          - removes detected dynamic objects (dets)\n        `img_gray` must be a 2D grayscale image (after preprocess).\n        \"\"\"\n        if img_gray.ndim != 2:\n            raise ValueError(\"generate_mask expects a 2D grayscale image.\")\n\n        h, w = img_gray.shape[:2]\n        mask = np.zeros((h, w), dtype=np.uint8)\n\n        # Keep most of the image, drop extreme borders (often noisy for motion estimation).\n        y1, y2 = int(0.02 * h), int(0.98 * h)\n        x1, x2 = int(0.02 * w), int(0.98 * w)\n        mask[y1:y2, x1:x2] = 255\n\n        if dets is None:\n            return mask\n\n        dets = np.asarray(dets)\n        if dets.size == 0:\n            return mask\n\n        # dets in original scale -> map to preprocessed scale\n        for det in dets:\n            # guard shape issues\n            if len(det) < 4:\n                continue\n            tlbr = (np.asarray(det[:4], dtype=np.float32) * float(scale)).astype(int)\n\n            x1b, y1b, x2b, y2b = tlbr.tolist()\n            x1b = max(0, min(w, x1b))\n            x2b = max(0, min(w, x2b))\n            y1b = max(0, min(h, y1b))\n            y2b = max(0, min(h, y2b))\n\n            if x2b > x1b and y2b > y1b:\n                mask[y1b:y2b, x1b:x2b] = 0\n\n        return mask\n"
  },
  {
    "path": "boxmot/motion/cmc/ecc.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom typing import Optional\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.cmc.base_cmc import BaseCMC\nfrom boxmot.utils import logger as LOGGER\n\n\nclass ECC(BaseCMC):\n    \"\"\"\n    OpenCV ECC-based motion estimation using cv2.findTransformECC.\n    Produces:\n      - 2x3 affine-like matrix for TRANSLATION/EUCLIDEAN/AFFINE\n      - 3x3 homography matrix for HOMOGRAPHY\n    \"\"\"\n\n    def __init__(\n        self,\n        warp_mode: int = cv2.MOTION_TRANSLATION,\n        eps: float = 1e-5,\n        max_iter: int = 100,\n        scale: float = 0.15,\n        align: bool = False,\n        grayscale: bool = True,\n    ) -> None:\n        self.align = bool(align)\n        self.grayscale = bool(grayscale)\n        self.scale = float(scale)\n        self.warp_mode = int(warp_mode)\n\n        self.termination_criteria = (\n            cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT,\n            int(max_iter),\n            float(eps),\n        )\n\n        self.prev_img: Optional[np.ndarray] = None\n        self.prev_img_aligned: Optional[np.ndarray] = None\n\n    def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) -> np.ndarray:\n        if self.warp_mode == cv2.MOTION_HOMOGRAPHY:\n            warp_matrix = np.eye(3, 3, dtype=np.float32)\n        else:\n            warp_matrix = np.eye(2, 3, dtype=np.float32)\n\n        if self.prev_img is None:\n            self.prev_img = self.preprocess(img)\n            self.prev_img_aligned = None\n            return warp_matrix\n\n        curr = self.preprocess(img)\n\n        try:\n            _, warp_matrix = cv2.findTransformECC(\n                self.prev_img,\n                curr,\n                warp_matrix,\n                self.warp_mode,\n                self.termination_criteria,\n                None,\n                1,\n            )\n        except cv2.error as e:\n            # StsNoConv => ECC did not converge; return identity (common in practice).\n            try:\n                if e.code == cv2.Error.StsNoConv:\n                    LOGGER.warning(\"ECC did not converge; returning identity warp.\")\n                    self.prev_img = curr\n                    self.prev_img_aligned = None\n                    return warp_matrix\n            except Exception:\n                pass\n            raise\n\n        # upscale translation back to original image coordinates\n        if self.scale < 1.0:\n            warp_matrix = warp_matrix.copy()\n            warp_matrix[0, 2] /= self.scale\n            warp_matrix[1, 2] /= self.scale\n\n        if self.align:\n            h, w = self.prev_img.shape[:2]\n            if self.warp_mode == cv2.MOTION_HOMOGRAPHY:\n                self.prev_img_aligned = cv2.warpPerspective(self.prev_img, warp_matrix, (w, h), flags=cv2.INTER_LINEAR)\n            else:\n                self.prev_img_aligned = cv2.warpAffine(self.prev_img, warp_matrix, (w, h), flags=cv2.INTER_LINEAR)\n        else:\n            self.prev_img_aligned = None\n\n        self.prev_img = curr\n        return warp_matrix\n"
  },
  {
    "path": "boxmot/motion/cmc/orb.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nimport copy\nfrom typing import Optional\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.cmc.base_cmc import BaseCMC\n\n\nclass ORB(BaseCMC):\n    \"\"\"\n    FAST + ORB descriptors + BFMatcher (KNN) to estimate a 2x3 affine partial transform.\n    \"\"\"\n\n    def __init__(\n        self,\n        feature_detector_threshold: int = 20,\n        matcher_norm_type: int = cv2.NORM_HAMMING,\n        scale: float = 0.15,\n        grayscale: bool = True,\n        draw_keypoint_matches: bool = False,\n        align: bool = False,\n    ) -> None:\n        self.grayscale = bool(grayscale)\n        self.scale = float(scale)\n\n        self.detector = cv2.FastFeatureDetector_create(threshold=int(feature_detector_threshold))\n        self.extractor = cv2.ORB_create()\n        self.matcher = cv2.BFMatcher(int(matcher_norm_type))\n\n        self.prev_img: Optional[np.ndarray] = None\n        self.prev_keypoints = None\n        self.prev_descriptors: Optional[np.ndarray] = None\n        self.prev_dets: Optional[np.ndarray] = None\n\n        self.draw_keypoint_matches = bool(draw_keypoint_matches)\n        self.align = bool(align)\n\n        self.prev_img_aligned: Optional[np.ndarray] = None\n        self.matches_img: Optional[np.ndarray] = None\n\n    def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) -> np.ndarray:\n        H = np.eye(2, 3, dtype=np.float32)\n\n        img_p = self.preprocess(img)\n        h, w = img_p.shape[:2]\n\n        # dynamic object mask\n        mask = self.generate_mask(img_p, dets, self.scale)\n\n        # detect/describe\n        keypoints = self.detector.detect(img_p, mask)\n        keypoints, descriptors = self.extractor.compute(img_p, keypoints)\n\n        if descriptors is None or len(keypoints) < 4:\n            # Not enough features; just update prev and return identity\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        # first frame init\n        if self.prev_img is None or self.prev_descriptors is None or self.prev_keypoints is None:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        # match descriptors\n        knn = self.matcher.knnMatch(self.prev_descriptors, descriptors, k=2)\n        if not knn:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        # Lowe ratio + spatial gating\n        matches = []\n        spatial_distances = []\n        max_spatial_distance = 0.25 * np.array([w, h], dtype=np.float32)\n\n        for pair in knn:\n            if len(pair) != 2:\n                continue\n            m, n = pair\n            if m.distance >= 0.9 * n.distance:\n                continue\n\n            prev_pt = np.array(self.prev_keypoints[m.queryIdx].pt, dtype=np.float32)\n            curr_pt = np.array(keypoints[m.trainIdx].pt, dtype=np.float32)\n            dxy = prev_pt - curr_pt\n\n            if (abs(dxy[0]) < max_spatial_distance[0]) and (abs(dxy[1]) < max_spatial_distance[1]):\n                matches.append(m)\n                spatial_distances.append(dxy)\n\n        if len(matches) < 4:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        spatial_distances = np.asarray(spatial_distances, dtype=np.float32)\n        mean = spatial_distances.mean(axis=0)\n        std = spatial_distances.std(axis=0) + 1e-6\n        inliers_spatial = np.all((spatial_distances - mean) < 2.5 * std, axis=1)\n\n        good_matches = [matches[i] for i in range(len(matches)) if inliers_spatial[i]]\n        if len(good_matches) < 4:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        prev_pts = np.array([self.prev_keypoints[m.queryIdx].pt for m in good_matches], dtype=np.float32)\n        curr_pts = np.array([keypoints[m.trainIdx].pt for m in good_matches], dtype=np.float32)\n\n        H_est, ransac_inliers = cv2.estimateAffinePartial2D(prev_pts, curr_pts, method=cv2.RANSAC)\n        if H_est is None:\n            H_est = H\n        else:\n            H_est = H_est.astype(np.float32, copy=False)\n\n            # upscale translation back to original image coordinates\n            if self.scale < 1.0:\n                H_est = H_est.copy()\n                H_est[0, 2] /= self.scale\n                H_est[1, 2] /= self.scale\n\n            if self.align:\n                self.prev_img_aligned = cv2.warpAffine(self.prev_img, H_est, (w, h), flags=cv2.INTER_LINEAR)\n            else:\n                self.prev_img_aligned = None\n\n        # optional debug visualization\n        if self.draw_keypoint_matches:\n            self.matches_img = self._draw_matches(self.prev_img, img_p, self.prev_keypoints, keypoints, good_matches, dets)\n        else:\n            self.matches_img = None\n\n        # store for next iteration\n        self._store_state(img_p, keypoints, descriptors, dets)\n        return H_est\n\n    def _store_state(self, img_p: np.ndarray, keypoints, descriptors, dets) -> None:\n        self.prev_img = img_p.copy()\n        self.prev_keypoints = copy.copy(keypoints)\n        self.prev_descriptors = None if descriptors is None else descriptors.copy()\n        self.prev_dets = None if dets is None else np.asarray(dets).copy()\n\n    @staticmethod\n    def _draw_matches(prev_img: np.ndarray, curr_img: np.ndarray, prev_kp, curr_kp, matches, dets):\n        # prev_img/curr_img are grayscale\n        canvas = np.hstack((prev_img, curr_img))\n        canvas = cv2.cvtColor(canvas, cv2.COLOR_GRAY2BGR)\n\n        W = prev_img.shape[1]\n        for m in matches:\n            p = np.array(prev_kp[m.queryIdx].pt, dtype=np.int32)\n            c = np.array(curr_kp[m.trainIdx].pt, dtype=np.int32)\n            c[0] += W\n            cv2.line(canvas, tuple(p), tuple(c), (255, 255, 255), 1, cv2.LINE_AA)\n            cv2.circle(canvas, tuple(p), 2, (255, 255, 255), -1)\n            cv2.circle(canvas, tuple(c), 2, (255, 255, 255), -1)\n\n        if dets is not None:\n            # draw detections on the right image for context\n            h, w = curr_img.shape[:2]\n            for det in np.asarray(dets):\n                if len(det) < 4:\n                    continue\n                x1, y1, x2, y2 = det[:4].astype(int).tolist()\n                cv2.rectangle(canvas, (x1 + W, y1), (x2 + W, y2), (0, 0, 255), 2)\n\n        return canvas\n"
  },
  {
    "path": "boxmot/motion/cmc/sift.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nimport copy\nfrom typing import Optional\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.cmc.base_cmc import BaseCMC\n\n\nclass SIFT(BaseCMC):\n    \"\"\"\n    SIFT keypoints + BFMatcher(L2) to estimate a 2x3 affine partial transform.\n    \"\"\"\n\n    def __init__(\n        self,\n        warp_mode: int = cv2.MOTION_EUCLIDEAN,  # kept for API compatibility; we still output 2x3\n        eps: float = 1e-5,\n        max_iter: int = 100,\n        scale: float = 0.15,\n        grayscale: bool = True,\n        draw_keypoint_matches: bool = False,\n        align: bool = False,\n    ) -> None:\n        self.grayscale = bool(grayscale)\n        self.scale = float(scale)\n        self.warp_mode = int(warp_mode)  # not strictly used (kept as parameter)\n\n        self.detector = cv2.SIFT_create(nOctaveLayers=2, contrastThreshold=0.5, edgeThreshold=10)\n        self.extractor = cv2.SIFT_create(nOctaveLayers=2, contrastThreshold=0.5, edgeThreshold=10)\n        self.matcher = cv2.BFMatcher(cv2.NORM_L2)\n\n        self.prev_img: Optional[np.ndarray] = None\n        self.prev_keypoints = None\n        self.prev_descriptors: Optional[np.ndarray] = None\n        self.prev_dets: Optional[np.ndarray] = None\n\n        self.draw_keypoint_matches = bool(draw_keypoint_matches)\n        self.align = bool(align)\n\n        self.prev_img_aligned: Optional[np.ndarray] = None\n        self.matches_img: Optional[np.ndarray] = None\n\n    def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) -> np.ndarray:\n        H = np.eye(2, 3, dtype=np.float32)\n\n        img_p = self.preprocess(img)\n        h, w = img_p.shape[:2]\n\n        mask = self.generate_mask(img_p, dets, self.scale)\n\n        keypoints = self.detector.detect(img_p, mask)\n        keypoints, descriptors = self.extractor.compute(img_p, keypoints)\n\n        if descriptors is None or len(keypoints) < 4:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        if self.prev_img is None or self.prev_descriptors is None or self.prev_keypoints is None:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        knn = self.matcher.knnMatch(self.prev_descriptors, descriptors, k=2)\n        if not knn:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        matches = []\n        spatial_distances = []\n        max_spatial_distance = 0.25 * np.array([w, h], dtype=np.float32)\n\n        for pair in knn:\n            if len(pair) != 2:\n                continue\n            m, n = pair\n            if m.distance >= 0.9 * n.distance:\n                continue\n\n            prev_pt = np.array(self.prev_keypoints[m.queryIdx].pt, dtype=np.float32)\n            curr_pt = np.array(keypoints[m.trainIdx].pt, dtype=np.float32)\n            dxy = prev_pt - curr_pt\n\n            if (abs(dxy[0]) < max_spatial_distance[0]) and (abs(dxy[1]) < max_spatial_distance[1]):\n                spatial_distances.append(dxy)\n                matches.append(m)\n\n        if len(matches) < 4:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        spatial_distances = np.asarray(spatial_distances, dtype=np.float32)\n        mean = spatial_distances.mean(axis=0)\n        std = spatial_distances.std(axis=0) + 1e-6\n        inliers_spatial = np.all((spatial_distances - mean) < 2.5 * std, axis=1)\n\n        good_matches = [matches[i] for i in range(len(matches)) if inliers_spatial[i]]\n        if len(good_matches) < 4:\n            self._store_state(img_p, keypoints, descriptors, dets)\n            self.prev_img_aligned = None\n            self.matches_img = None\n            return H\n\n        prev_pts = np.array([self.prev_keypoints[m.queryIdx].pt for m in good_matches], dtype=np.float32)\n        curr_pts = np.array([keypoints[m.trainIdx].pt for m in good_matches], dtype=np.float32)\n\n        H_est, ransac_inliers = cv2.estimateAffinePartial2D(prev_pts, curr_pts, method=cv2.RANSAC)\n        if H_est is None:\n            H_est = H\n        else:\n            H_est = H_est.astype(np.float32, copy=False)\n\n            if self.scale < 1.0:\n                H_est = H_est.copy()\n                H_est[0, 2] /= self.scale\n                H_est[1, 2] /= self.scale\n\n            if self.align:\n                self.prev_img_aligned = cv2.warpAffine(self.prev_img, H_est, (w, h), flags=cv2.INTER_LINEAR)\n            else:\n                self.prev_img_aligned = None\n\n        if self.draw_keypoint_matches:\n            self.matches_img = ORBLikeDraw.draw(prev=self.prev_img, curr=img_p, prev_kp=self.prev_keypoints, curr_kp=keypoints, matches=good_matches, dets=dets)\n        else:\n            self.matches_img = None\n\n        self._store_state(img_p, keypoints, descriptors, dets)\n        return H_est\n\n    def _store_state(self, img_p: np.ndarray, keypoints, descriptors, dets) -> None:\n        self.prev_img = img_p.copy()\n        self.prev_keypoints = copy.copy(keypoints)\n        self.prev_descriptors = None if descriptors is None else descriptors.copy()\n        self.prev_dets = None if dets is None else np.asarray(dets).copy()\n\n\nclass ORBLikeDraw:\n    @staticmethod\n    def draw(prev: np.ndarray, curr: np.ndarray, prev_kp, curr_kp, matches, dets):\n        canvas = np.hstack((prev, curr))\n        canvas = cv2.cvtColor(canvas, cv2.COLOR_GRAY2BGR)\n\n        W = prev.shape[1]\n        for m in matches:\n            p = np.array(prev_kp[m.queryIdx].pt, dtype=np.int32)\n            c = np.array(curr_kp[m.trainIdx].pt, dtype=np.int32)\n            c[0] += W\n            cv2.line(canvas, tuple(p), tuple(c), (255, 255, 255), 1, cv2.LINE_AA)\n            cv2.circle(canvas, tuple(p), 2, (255, 255, 255), -1)\n            cv2.circle(canvas, tuple(c), 2, (255, 255, 255), -1)\n\n        if dets is not None:\n            for det in np.asarray(dets):\n                if len(det) < 4:\n                    continue\n                x1, y1, x2, y2 = det[:4].astype(int).tolist()\n                cv2.rectangle(canvas, (x1 + W, y1), (x2 + W, y2), (0, 0, 255), 2)\n\n        return canvas\n"
  },
  {
    "path": "boxmot/motion/cmc/sof.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom typing import Optional\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.cmc.base_cmc import BaseCMC\nfrom boxmot.utils import logger as LOGGER\n\n\nclass SOF(BaseCMC):\n    \"\"\"\n    Sparse Optical Flow tracker estimating a 2x3 affine partial transform between frames.\n    Uses:\n      - goodFeaturesToTrack for keypoints\n      - calcOpticalFlowPyrLK for tracking\n      - estimateAffinePartial2D (RANSAC) for robust motion estimation\n    \"\"\"\n\n    def __init__(self, scale: float = 0.15) -> None:\n        self.scale = float(scale)\n        self.grayscale = True\n\n        self.feature_params = dict(\n            maxCorners=1000,\n            qualityLevel=0.01,\n            minDistance=1,\n            blockSize=3,\n            useHarrisDetector=False,\n            k=0.04,\n        )\n\n        self.lk_params = dict(\n            winSize=(21, 21),\n            maxLevel=3,\n            criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 30, 0.01),\n        )\n\n        self.prev_frame: Optional[np.ndarray] = None\n        self.prev_keypoints: Optional[np.ndarray] = None\n        self.initialized: bool = False\n\n    def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) -> np.ndarray:\n        frame_gray = self.preprocess(img)\n        H = np.eye(2, 3, dtype=np.float32)\n\n        # First frame init\n        if not self.initialized or self.prev_frame is None or self.prev_keypoints is None:\n            kps = cv2.goodFeaturesToTrack(frame_gray, mask=None, **self.feature_params)\n            if kps is None or len(kps) < 4:\n                # can't initialize reliably; keep trying on next frame\n                self.prev_frame = frame_gray.copy()\n                self.prev_keypoints = kps\n                self.initialized = False\n                return H\n\n            # optional refinement for stability\n            term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 30, 0.01)\n            cv2.cornerSubPix(frame_gray, kps, winSize=(5, 5), zeroZone=(-1, -1), criteria=term_crit)\n\n            self.prev_frame = frame_gray.copy()\n            self.prev_keypoints = kps.copy()\n            self.initialized = True\n            return H\n\n        # Track keypoints\n        next_kps, status, _ = cv2.calcOpticalFlowPyrLK(\n            self.prev_frame, frame_gray, self.prev_keypoints, None, **self.lk_params\n        )\n\n        if next_kps is None or status is None:\n            self._reset(frame_gray)\n            return H\n\n        status = status.reshape(-1)\n        prev_valid = self.prev_keypoints[status == 1]\n        next_valid = next_kps[status == 1]\n\n        if prev_valid is None or next_valid is None or len(prev_valid) < 4:\n            # not enough matches -> re-detect\n            self._reset(frame_gray)\n            return H\n\n        # estimate transform\n        H_est, inliers = cv2.estimateAffinePartial2D(prev_valid, next_valid, method=cv2.RANSAC)\n        if H_est is None:\n            H_est = H\n        else:\n            H_est = H_est.astype(np.float32, copy=False)\n            if self.scale < 1.0:\n                H_est = H_est.copy()\n                H_est[0, 2] /= self.scale\n                H_est[1, 2] /= self.scale\n\n        # refresh keypoints each frame (more stable long-term than purely tracking)\n        new_kps = cv2.goodFeaturesToTrack(frame_gray, mask=None, **self.feature_params)\n        if new_kps is None or len(new_kps) < 4:\n            # fallback: keep tracked points\n            new_kps = next_valid\n\n        self.prev_frame = frame_gray.copy()\n        self.prev_keypoints = new_kps.copy()\n        self.initialized = True\n\n        return H_est\n\n    def _reset(self, frame_gray: np.ndarray) -> None:\n        kps = cv2.goodFeaturesToTrack(frame_gray, mask=None, **self.feature_params)\n        self.prev_frame = frame_gray.copy()\n        self.prev_keypoints = kps\n        self.initialized = kps is not None and len(kps) >= 4\n"
  },
  {
    "path": "boxmot/motion/kalman_filters/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom .base import BaseKalmanFilter\nfrom .xyah import KalmanFilterXYAH\nfrom .xyhr import KalmanFilterXYHR\nfrom .xysr import KalmanFilterXYSR\nfrom .xywh import KalmanFilterXYWH\n\n__all__ = [\n    \"BaseKalmanFilter\",\n    \"KalmanFilterXYWH\",\n    \"KalmanFilterXYAH\",\n    \"KalmanFilterXYHR\",\n    \"KalmanFilterXYSR\",\n]\n"
  },
  {
    "path": "boxmot/motion/kalman_filters/base.py",
    "content": "from collections import deque\nfrom typing import Optional, Tuple, Union\n\nimport numpy as np\nimport scipy.linalg\n\n\"\"\"\nTable for the 0.95 quantile of the chi-square distribution with N degrees of\nfreedom (contains values for N=1, ..., 9). Taken from MATLAB/Octave's chi2inv\nfunction and used as Mahalanobis gating threshold.\n\"\"\"\nchi2inv95 = {\n    1: 3.8415,\n    2: 5.9915,\n    3: 7.8147,\n    4: 9.4877,\n    5: 11.070,\n    6: 12.592,\n    7: 14.067,\n    8: 15.507,\n    9: 16.919,\n}\n\n\nclass BaseKalmanFilter:\n    \"\"\"\n    Base class for Kalman filters tracking bounding boxes in image space.\n    \"\"\"\n\n    def __init__(\n        self,\n        ndim: int,\n        *,\n        dim_x: Optional[int] = None,\n        dim_z: Optional[int] = None,\n        motion_mat: Optional[np.ndarray] = None,\n        update_mat: Optional[np.ndarray] = None,\n        max_obs: int = 50,\n    ):\n        self.ndim = ndim\n        self.dim_z = dim_z if dim_z is not None else ndim\n        self.dim_x = dim_x if dim_x is not None else 2 * self.ndim\n        self.dt = 1.0\n\n        # Create Kalman filter model matrices.\n        self._motion_mat = (\n            motion_mat.astype(float).copy()\n            if motion_mat is not None\n            else self._default_motion_matrix(self.dim_x, self.dim_z)\n        )\n        self._update_mat = (\n            update_mat.astype(float).copy()\n            if update_mat is not None\n            else np.eye(self.dim_z, self.dim_x)\n        )\n        self.F = self._motion_mat.copy()\n        self.H = self._update_mat.copy()\n\n        # Motion and observation uncertainty weights.\n        self._std_weight_position = 1.0 / 20\n        self._std_weight_velocity = 1.0 / 160\n\n        # Stateful Kalman filter members used by matrix-based subclasses.\n        self.x = np.zeros((self.dim_x, 1))\n        self.P = np.eye(self.dim_x)\n        self.Q = np.eye(self.dim_x)\n        self.R = np.eye(self.dim_z)\n        self.B = None\n        self._alpha_sq = 1.0\n        self.M = np.zeros((self.dim_x, self.dim_z))\n        self.z = np.array([[None] * self.dim_z]).T\n\n        self.K = np.zeros((self.dim_x, self.dim_z))\n        self.y = np.zeros((self.dim_z, 1))\n        self.S = np.zeros((self.dim_z, self.dim_z))\n        self.SI = np.zeros((self.dim_z, self.dim_z))\n        self._I = np.eye(self.dim_x)\n\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n\n        self.max_obs = max_obs\n        self.history_obs = deque([], maxlen=self.max_obs)\n        self.attr_saved = None\n        self.observed = False\n        self.last_measurement = None\n\n    @staticmethod\n    def _default_motion_matrix(dim_x: int, dim_z: int) -> np.ndarray:\n        \"\"\"Build a simple constant-velocity transition matrix.\"\"\"\n        motion_mat = np.eye(dim_x)\n        velocity_dims = min(dim_z, max(0, dim_x - dim_z))\n        for i in range(velocity_dims):\n            motion_mat[i, dim_z + i] = 1.0\n        return motion_mat\n\n    def _resolve_matrix(self, matrix: Optional[np.ndarray], fallback: np.ndarray) -> np.ndarray:\n        return matrix if matrix is not None else fallback\n\n    @staticmethod\n    def _reshape_measurement(z: np.ndarray, dim_z: int) -> np.ndarray:\n        measurement = np.asarray(z, dtype=float)\n        if measurement.ndim == 1:\n            measurement = measurement.reshape((-1, 1))\n        if measurement.shape != (dim_z, 1):\n            measurement = measurement.reshape((dim_z, 1))\n        return measurement\n\n    @staticmethod\n    def _wrap_angle(angle: Union[np.ndarray, float]) -> Union[np.ndarray, float]:\n        wrapped = (np.asarray(angle, dtype=float) + np.pi) % (2.0 * np.pi) - np.pi\n        if np.isscalar(angle):\n            return float(wrapped)\n        return wrapped\n\n    @classmethod\n    def _align_angle_to_reference(cls, angle: float, reference_angle: float) -> float:\n        return float(reference_angle + cls._wrap_angle(float(angle) - float(reference_angle)))\n\n    @staticmethod\n    def _theta_velocity_index(dim_x: int) -> int:\n        return dim_x - 1\n\n    @classmethod\n    def _select_obb_candidate(\n        cls,\n        *,\n        reference_sizes: Tuple[float, float],\n        reference_angle: float,\n        candidates: Tuple[Tuple[float, float, float], ...],\n        size_weight: float = 0.05,\n        eps: float = 1e-6,\n    ) -> Tuple[float, float, float]:\n        \"\"\"Choose equivalent OBB parameterization closest to reference state.\"\"\"\n        ref_s0 = max(float(reference_sizes[0]), eps)\n        ref_s1 = max(float(reference_sizes[1]), eps)\n        ref_theta = float(reference_angle)\n\n        best_cost = float(\"inf\")\n        best: Tuple[float, float, float] = candidates[0]\n        for cand_s0, cand_s1, cand_theta in candidates:\n            s0 = max(float(cand_s0), eps)\n            s1 = max(float(cand_s1), eps)\n            theta_aligned = cls._align_angle_to_reference(cand_theta, ref_theta)\n            angle_cost = abs(theta_aligned - ref_theta)\n            size_cost = abs(np.log(s0 / ref_s0)) + abs(np.log(s1 / ref_s1))\n            cost = angle_cost + (size_weight * size_cost)\n            if cost < best_cost:\n                best_cost = cost\n                best = (s0, s1, theta_aligned)\n        return best\n\n    @classmethod\n    def _enforce_state_geometry(\n        cls,\n        mean: np.ndarray,\n        *,\n        positive_indices: Tuple[int, ...],\n        angle_index: Optional[int] = None,\n        min_size: float = 1e-4,\n    ) -> np.ndarray:\n        \"\"\"Clamp geometry dimensions positive and optionally wrap angle.\"\"\"\n        if mean.ndim == 1:\n            for idx in positive_indices:\n                mean[idx] = max(float(mean[idx]), min_size)\n            if angle_index is not None:\n                mean[angle_index] = float(cls._wrap_angle(mean[angle_index]))\n            return mean\n\n        for idx in positive_indices:\n            mean[idx, :] = np.maximum(mean[idx, :], min_size)\n        if angle_index is not None:\n            mean[angle_index, :] = cls._wrap_angle(mean[angle_index, :])\n        return mean\n\n    @staticmethod\n    def _prepare_gating_inputs(\n        mean: np.ndarray,\n        covariance: np.ndarray,\n        measurements: np.ndarray,\n        project_fn,\n    ) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:\n        projected_mean, projected_cov = project_fn(mean, covariance)\n        projected_mean = np.asarray(projected_mean, dtype=float).reshape(-1)\n        measurements = np.asarray(measurements, dtype=float).copy()\n        if measurements.ndim == 1:\n            measurements = measurements.reshape(1, -1)\n        return projected_mean, projected_cov, measurements\n\n    @staticmethod\n    def _gating_from_residuals(\n        residuals: np.ndarray, covariance: np.ndarray, metric: str\n    ) -> np.ndarray:\n        if metric == \"gaussian\":\n            return np.sum(residuals * residuals, axis=1)\n        if metric == \"maha\":\n            cholesky_factor = np.linalg.cholesky(covariance)\n            solved = scipy.linalg.solve_triangular(\n                cholesky_factor,\n                residuals.T,\n                lower=True,\n                check_finite=False,\n                overwrite_b=True,\n            )\n            return np.sum(solved * solved, axis=0)\n        raise ValueError(\"invalid distance metric\")\n\n    def _zero_theta_velocity(self, mean: np.ndarray) -> np.ndarray:\n        theta_vel_idx = self._theta_velocity_index(self.dim_x)\n        if mean.ndim == 2:\n            mean[theta_vel_idx, :] = 0.0\n        else:\n            mean[theta_vel_idx] = 0.0\n        return mean\n\n    def _damp_theta_velocity(\n        self, mean: np.ndarray, damping: float = 0.8\n    ) -> np.ndarray:\n        \"\"\"Damp angular velocity to reduce jitter while preserving turn dynamics.\"\"\"\n        theta_vel_idx = self._theta_velocity_index(self.dim_x)\n        damping = float(np.clip(damping, 0.0, 1.0))\n        if mean.ndim == 2:\n            mean[theta_vel_idx, :] *= damping\n        else:\n            mean[theta_vel_idx] *= damping\n        return mean\n\n    def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Create track from unassociated measurement.\n        \"\"\"\n        mean_pos = measurement\n        mean_vel = np.zeros_like(mean_pos)\n        mean = np.r_[mean_pos, mean_vel]\n\n        std = self._get_initial_covariance_std(measurement)\n        covariance = np.diag(np.square(std))\n        return mean, covariance\n\n    def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Return initial standard deviations for the covariance matrix.\n        Should be implemented by subclasses.\n        \"\"\"\n        raise NotImplementedError\n\n    def predict(\n        self, mean: np.ndarray, covariance: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Run Kalman filter prediction step.\n        \"\"\"\n        std_pos, std_vel = self._get_process_noise_std(mean)\n        motion_cov = np.diag(np.square(np.r_[std_pos, std_vel]))\n\n        mean = np.dot(mean, self._motion_mat.T)\n        covariance = (\n            np.linalg.multi_dot((self._motion_mat, covariance, self._motion_mat.T))\n            + motion_cov\n        )\n\n        return mean, covariance\n\n    def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Return standard deviations for process noise.\n        Should be implemented by subclasses.\n        \"\"\"\n        raise NotImplementedError\n\n    def _get_measurement_noise_std(\n        self, mean: np.ndarray, confidence: float\n    ) -> np.ndarray:\n        \"\"\"\n        Return standard deviations for measurement noise.\n        Should be implemented by stateless subclasses.\n        \"\"\"\n        raise NotImplementedError\n\n    def project(\n        self, mean: np.ndarray, covariance: np.ndarray, confidence: float = 0.0\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Project state distribution to measurement space.\n        \"\"\"\n        std = self._get_measurement_noise_std(mean, confidence)\n\n        # NSA Kalman algorithm from GIAOTracker, which proposes a formula to\n        # adaptively calculate the noise covariance Rek:\n        # Rk = (1 − ck) Rk\n        # where Rk is the preset constant measurement noise covariance\n        # and ck is the detection confidence score at state k. Intuitively,\n        # the detection has a higher score ck when it has less noise,\n        # which results in a low Re.\n        std = [(1 - confidence) * x for x in std]\n\n        innovation_cov = np.diag(np.square(std))\n\n        mean = np.dot(self._update_mat, mean)\n        covariance = np.linalg.multi_dot(\n            (self._update_mat, covariance, self._update_mat.T)\n        )\n        return mean, covariance + innovation_cov\n\n    def multi_predict(\n        self, mean: np.ndarray, covariance: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Run Kalman filter prediction step (Vectorized version).\n        \"\"\"\n        std_pos, std_vel = self._get_multi_process_noise_std(mean)\n        sqr = np.square(np.r_[std_pos, std_vel]).T\n\n        motion_cov = [np.diag(sqr[i]) for i in range(len(mean))]\n        motion_cov = np.asarray(motion_cov)\n\n        mean = np.dot(mean, self._motion_mat.T)\n        left = np.dot(self._motion_mat, covariance).transpose((1, 0, 2))\n        covariance = np.dot(left, self._motion_mat.T) + motion_cov\n\n        return mean, covariance\n\n    def update(\n        self,\n        mean: np.ndarray,\n        covariance: np.ndarray,\n        measurement: np.ndarray,\n        confidence: float = 0.0,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Run Kalman filter correction step.\n        \"\"\"\n        projected_mean, projected_cov = self.project(mean, covariance, confidence)\n\n        chol_factor, lower = scipy.linalg.cho_factor(\n            projected_cov, lower=True, check_finite=False\n        )\n        kalman_gain = scipy.linalg.cho_solve(\n            (chol_factor, lower),\n            np.dot(covariance, self._update_mat.T).T,\n            check_finite=False,\n        ).T\n        innovation = measurement - projected_mean\n\n        new_mean = mean + np.dot(innovation, kalman_gain.T)\n        new_covariance = covariance - np.linalg.multi_dot(\n            (kalman_gain, projected_cov, kalman_gain.T)\n        )\n        return new_mean, new_covariance\n\n    def _get_multi_process_noise_std(\n        self, mean: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Return standard deviations for process noise in vectorized form.\n        Should be implemented by subclasses.\n        \"\"\"\n        raise NotImplementedError\n\n    def predict_state(\n        self,\n        u: Optional[np.ndarray] = None,\n        B: Optional[np.ndarray] = None,\n        F: Optional[np.ndarray] = None,\n        Q: Optional[np.ndarray] = None,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Stateful predict step for matrix-based filters.\n        \"\"\"\n        B = self._resolve_matrix(B, self.B)\n        F = self._resolve_matrix(F, self.F)\n        Q = self._resolve_matrix(Q, self.Q)\n\n        if np.isscalar(Q):\n            Q = np.eye(self.dim_x) * float(Q)\n\n        if B is not None and u is not None:\n            self.x = np.dot(F, self.x) + np.dot(B, u)\n        else:\n            self.x = np.dot(F, self.x)\n\n        self.P = self._alpha_sq * np.dot(np.dot(F, self.P), F.T) + Q\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n        return self.x, self.P\n\n    def project_state(\n        self,\n        x: Optional[np.ndarray] = None,\n        P: Optional[np.ndarray] = None,\n        H: Optional[np.ndarray] = None,\n        R: Optional[np.ndarray] = None,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Project a state distribution into measurement space.\n        \"\"\"\n        state = self.x if x is None else x\n        covariance = self.P if P is None else P\n        H = self._resolve_matrix(H, self.H)\n        R = self._resolve_matrix(R, self.R)\n        if np.isscalar(R):\n            R = np.eye(self.dim_z) * float(R)\n\n        projected_mean = np.dot(H, state)\n        projected_covariance = np.dot(np.dot(H, covariance), H.T) + R\n        return projected_mean, projected_covariance\n\n    def update_state(\n        self,\n        z: np.ndarray,\n        R: Optional[np.ndarray] = None,\n        H: Optional[np.ndarray] = None,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"\n        Stateful update step for matrix-based filters.\n        \"\"\"\n        H = self._resolve_matrix(H, self.H)\n        R = self._resolve_matrix(R, self.R)\n        if np.isscalar(R):\n            R = np.eye(self.dim_z) * float(R)\n\n        measurement = self._reshape_measurement(z, self.dim_z)\n        projected_mean, projected_cov = self.project_state(H=H, R=R)\n\n        chol_factor, lower = scipy.linalg.cho_factor(\n            projected_cov, lower=True, check_finite=False\n        )\n        self.K = scipy.linalg.cho_solve(\n            (chol_factor, lower),\n            np.dot(self.P, H.T).T,\n            check_finite=False,\n        ).T\n        self.y = measurement - projected_mean\n        self.S = projected_cov\n        self.SI = scipy.linalg.cho_solve(\n            (chol_factor, lower), np.eye(self.dim_z), check_finite=False\n        )\n\n        self.x = self.x + np.dot(self.K, self.y)\n        self.P = self.P - np.linalg.multi_dot((self.K, projected_cov, self.K.T))\n        self.z = measurement.copy()\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n        return self.x, self.P\n\n    def mahalanobis_distance(\n        self,\n        z: np.ndarray,\n        H: Optional[np.ndarray] = None,\n        R: Optional[np.ndarray] = None,\n    ) -> float:\n        \"\"\"\n        Compute Mahalanobis distance for a candidate measurement.\n        \"\"\"\n        measurement = self._reshape_measurement(z, self.dim_z)\n        projected_mean, projected_cov = self.project_state(H=H, R=R)\n        innovation = measurement - projected_mean\n        chol_factor = np.linalg.cholesky(projected_cov)\n        solved = scipy.linalg.solve_triangular(\n            chol_factor,\n            innovation,\n            lower=True,\n            check_finite=False,\n        )\n        return float(np.sqrt(np.dot(solved.T, solved)).item())\n\n    def gating_distance(\n        self,\n        mean: np.ndarray,\n        covariance: np.ndarray,\n        measurements: np.ndarray,\n        only_position: bool = False,\n        metric: str = \"maha\",\n    ) -> np.ndarray:\n        \"\"\"\n        Compute gating distance between state distribution and measurements.\n        \"\"\"\n        mean, covariance = self.project(mean, covariance)\n\n        if only_position:\n            mean, covariance = mean[:2], covariance[:2, :2]\n            measurements = measurements[:, :2]\n\n        d = measurements - mean\n        if metric == \"gaussian\":\n            return np.sum(d * d, axis=1)\n        elif metric == \"maha\":\n            cholesky_factor = np.linalg.cholesky(covariance)\n            z = scipy.linalg.solve_triangular(\n                cholesky_factor, d.T, lower=True, check_finite=False, overwrite_b=True\n            )\n            squared_maha = np.sum(z * z, axis=0)\n            return squared_maha\n        else:\n            raise ValueError(\"invalid distance metric\")\n"
  },
  {
    "path": "boxmot/motion/kalman_filters/xyah.py",
    "content": "from typing import Tuple\n\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.base import BaseKalmanFilter\n\n\nclass KalmanFilterXYAH(BaseKalmanFilter):\n    \"\"\"\n    Kalman filter for XYAH state with optional OBB angle extension.\n\n    - `ndim=4`: [x, y, a, h]\n    - `ndim=5`: [x, y, a, h, theta]\n    \"\"\"\n\n    def __init__(self, ndim: int = 4):\n        if ndim not in (4, 5):\n            raise ValueError(\"ndim must be 4 (AABB) or 5 (OBB)\")\n        super().__init__(ndim=ndim)\n        self._is_obb = ndim == 5\n\n    def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.ndarray:\n        # low uncertainty for aspect ratio and its velocity to keep ratio stable.\n        std = [\n            2 * self._std_weight_position * measurement[3],     # x\n            2 * self._std_weight_position * measurement[3],     # y\n            1e-2,                                               # a\n            2 * self._std_weight_position * measurement[3],     # h\n            10 * self._std_weight_velocity * measurement[3],    # vx\n            10 * self._std_weight_velocity * measurement[3],    # vy\n            1e-5,                                               # va\n            10 * self._std_weight_velocity * measurement[3],    # vh\n        ]\n        if self._is_obb:\n            std.insert(4, 1e-2)  # theta\n            std.append(1e-5)     # v_theta\n        return std\n\n    def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        std_pos = [\n            self._std_weight_position * mean[3],\n            self._std_weight_position * mean[3],\n            1e-2,\n            self._std_weight_position * mean[3],\n        ]\n        std_vel = [\n            self._std_weight_velocity * mean[3],\n            self._std_weight_velocity * mean[3],\n            1e-5,\n            self._std_weight_velocity * mean[3],\n        ]\n        if self._is_obb:\n            std_pos.append(1e-2)\n            std_vel.append(1e-5)\n        return std_pos, std_vel\n\n    def _get_measurement_noise_std(\n        self, mean: np.ndarray, confidence: float\n    ) -> np.ndarray:\n        std_noise = [\n            self._std_weight_position * mean[3],\n            self._std_weight_position * mean[3],\n            1e-1,\n            self._std_weight_position * mean[3],\n        ]\n        if self._is_obb:\n            std_noise.append(1e-1)\n        return std_noise\n\n    def _get_multi_process_noise_std(\n        self, mean: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        std_pos = [\n            self._std_weight_position * mean[:, 3],\n            self._std_weight_position * mean[:, 3],\n            1e-2 * np.ones_like(mean[:, 3]),\n            self._std_weight_position * mean[:, 3],\n        ]\n        std_vel = [\n            self._std_weight_velocity * mean[:, 3],\n            self._std_weight_velocity * mean[:, 3],\n            1e-5 * np.ones_like(mean[:, 3]),\n            self._std_weight_velocity * mean[:, 3],\n        ]\n        if self._is_obb:\n            std_pos.append(1e-2 * np.ones_like(mean[:, 3]))\n            std_vel.append(1e-5 * np.ones_like(mean[:, 3]))\n        return std_pos, std_vel\n\n    @classmethod\n    def _enforce_xyah_constraints(cls, mean: np.ndarray, is_obb: bool) -> np.ndarray:\n        return cls._enforce_state_geometry(\n            mean,\n            positive_indices=(2, 3),\n            angle_index=4 if is_obb else None,\n            min_size=1e-4,\n        )\n\n    def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        measurement = np.asarray(measurement, dtype=float).copy()\n        if self._is_obb:\n            measurement[4] = self._wrap_angle(measurement[4])\n        mean, covariance = super().initiate(measurement)\n        mean = self._enforce_xyah_constraints(mean, self._is_obb)\n        return mean, covariance\n\n    def predict(self, mean: np.ndarray, covariance: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        mean, covariance = super().predict(mean, covariance)\n        mean = self._enforce_xyah_constraints(mean, self._is_obb)\n        return mean, covariance\n\n    def multi_predict(\n        self, mean: np.ndarray, covariance: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        mean, covariance = super().multi_predict(mean, covariance)\n        mean[:, 2] = np.maximum(mean[:, 2], 1e-4)\n        mean[:, 3] = np.maximum(mean[:, 3], 1e-4)\n        if self._is_obb:\n            mean[:, 4] = self._wrap_angle(mean[:, 4])\n        return mean, covariance\n\n    def update(\n        self,\n        mean: np.ndarray,\n        covariance: np.ndarray,\n        measurement: np.ndarray,\n        confidence: float = 0.0,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        if self._is_obb:\n            mean_arr = np.asarray(mean, dtype=float)\n            measurement_arr = np.asarray(measurement, dtype=float).copy()\n            if mean_arr.ndim == 2:\n                measurement_arr = measurement_arr.reshape((self.ndim, 1))\n                reference_theta = float(mean_arr[4, 0])\n                measurement_arr[4, 0] = self._align_angle_to_reference(\n                    measurement_arr[4, 0], reference_theta\n                )\n            else:\n                measurement_arr = measurement_arr.reshape((self.ndim,))\n                reference_theta = float(mean_arr[4])\n                measurement_arr[4] = self._align_angle_to_reference(\n                    measurement_arr[4], reference_theta\n                )\n            measurement = measurement_arr\n        new_mean, new_covariance = super().update(mean, covariance, measurement, confidence)\n        new_mean = self._enforce_xyah_constraints(new_mean, self._is_obb)\n        return new_mean, new_covariance\n\n    def gating_distance(\n        self,\n        mean: np.ndarray,\n        covariance: np.ndarray,\n        measurements: np.ndarray,\n        only_position: bool = False,\n        metric: str = \"maha\",\n    ) -> np.ndarray:\n        if not self._is_obb or only_position:\n            return super().gating_distance(mean, covariance, measurements, only_position, metric)\n\n        projected_mean, projected_cov, measurements = self._prepare_gating_inputs(\n            mean, covariance, measurements, self.project\n        )\n        measurements[:, 4] = np.array(\n            [\n                self._align_angle_to_reference(angle, projected_mean[4])\n                for angle in measurements[:, 4]\n            ],\n            dtype=float,\n        )\n\n        residuals = measurements - projected_mean\n        return self._gating_from_residuals(residuals, projected_cov, metric)\n"
  },
  {
    "path": "boxmot/motion/kalman_filters/xyhr.py",
    "content": "from copy import deepcopy\nfrom typing import Optional, Tuple\n\nimport numpy as np\nimport scipy.linalg\n\nfrom boxmot.motion.kalman_filters.base import BaseKalmanFilter\n\n\nclass ConstantNoiseXYHR:\n    \"\"\"Constant process/measurement noise policy used by BoostTrack.\"\"\"\n\n    def __init__(self, dim_x: int, dim_z: int = 4):\n        self.dim_x = dim_x\n        self.dim_z = dim_z\n\n    def get_init_state_cov(self) -> np.ndarray:\n        covariance = np.eye(self.dim_x, dtype=float)\n        covariance[self.dim_z :, self.dim_z :] *= 1000.0\n        covariance *= 10.0\n        return covariance\n\n    def get_r(self) -> np.ndarray:\n        if self.dim_z == 5:\n            return np.diag([1.0, 1.0, 10.0, 0.01, 0.01]).astype(float)\n        return np.diag([1.0, 1.0, 10.0, 0.01]).astype(float)\n\n    def get_q(self) -> np.ndarray:\n        process_noise = np.eye(self.dim_x, dtype=float)\n        process_noise[self.dim_z :, self.dim_z :] *= 0.01\n        if self.dim_z == 5:\n            process_noise[4, 4] = 0.01\n        return process_noise\n\n\nclass KalmanFilterXYHR(BaseKalmanFilter):\n    \"\"\"\n    Constant-noise Kalman filter for XYHR with optional OBB extension.\n\n    - `dim_z=4, dim_x=8`: [x, y, h, r, vx, vy, vh, vr]\n    - `dim_z=5, dim_x=10`: [x, y, h, r, theta, vx, vy, vh, vr, vtheta]\n\n    This preserves BoostTrack's original constant-noise model while exposing\n    the filter under the shared `boxmot.motion.kalman_filters` namespace.\n    \"\"\"\n\n    def __init__(\n        self,\n        z: Optional[np.ndarray] = None,\n        ndim: int = 8,\n        dim_z: Optional[int] = None,\n        dt: float = 1.0,\n        track_id: int = -1,\n    ):\n        inferred_dim_z = 4\n        if z is not None:\n            z_size = int(np.asarray(z).size)\n            inferred_dim_z = 5 if z_size >= 5 else 4\n        if dim_z is None:\n            dim_z = inferred_dim_z\n        if dim_z not in (4, 5):\n            raise ValueError(\"dim_z must be 4 (AABB) or 5 (OBB)\")\n\n        if dim_z == 5 and ndim == 8:\n            ndim = 10\n        min_dim_x = 2 * dim_z\n        if ndim < min_dim_x:\n            raise ValueError(f\"ndim must be >= {min_dim_x} when dim_z is {dim_z}\")\n\n        self._is_obb = dim_z == 5\n        motion_mat = np.eye(ndim, dtype=float)\n        velocity_dims = min(dim_z, max(0, ndim - dim_z))\n        for i in range(velocity_dims):\n            motion_mat[i, dim_z + i] = float(dt)\n        update_mat = np.eye(dim_z, ndim, dtype=float)\n\n        super().__init__(\n            ndim=dim_z,\n            dim_x=ndim,\n            dim_z=dim_z,\n            motion_mat=motion_mat,\n            update_mat=update_mat,\n        )\n\n        self.dt = float(dt)\n        self.id = track_id\n        self.cov_update_policy = ConstantNoiseXYHR(ndim, dim_z)\n\n        # Keep BoostTrack-compatible 1D state vector semantics.\n        self.x = np.zeros((ndim,), dtype=float)\n        self.covariance = self.cov_update_policy.get_init_state_cov()\n\n        if z is not None:\n            self.x[: self.dim_z] = self._reshape_measurement_vector(z)\n            self._enforce_state_constraints()\n\n    @property\n    def covariance(self) -> np.ndarray:\n        return self.P\n\n    @covariance.setter\n    def covariance(self, value: np.ndarray) -> None:\n        self.P = np.asarray(value, dtype=float)\n\n    def _reshape_measurement_vector(self, z: np.ndarray) -> np.ndarray:\n        measurement = np.asarray(z, dtype=float)\n        if measurement.ndim == 2:\n            measurement = deepcopy(measurement.reshape((-1,)))\n        else:\n            measurement = measurement.reshape(-1)\n        if measurement.size < self.dim_z:\n            raise ValueError(\n                f\"measurement must have at least {self.dim_z} values, got {measurement.size}\"\n            )\n        measurement = measurement[: self.dim_z]\n        measurement[2] = max(float(measurement[2]), 1e-4)\n        measurement[3] = max(float(measurement[3]), 1e-4)\n        if self._is_obb:\n            measurement[4] = float(self._wrap_angle(measurement[4]))\n        return measurement\n\n    def _enforce_state_constraints(self) -> None:\n        self.x = self._enforce_state_geometry(\n            self.x,\n            positive_indices=(2, 3),\n            angle_index=4 if self._is_obb else None,\n            min_size=1e-4,\n        )\n        self.covariance = 0.5 * (self.covariance + self.covariance.T)\n\n    def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.ndarray:\n        del measurement\n        return np.sqrt(np.diag(self.cov_update_policy.get_init_state_cov()))\n\n    def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        del mean\n        q_diag = np.sqrt(np.diag(self.cov_update_policy.get_q()))\n        velocity_dims = min(self.dim_z, max(0, self.dim_x - self.dim_z))\n        std_pos = q_diag[: self.dim_z]\n        std_vel = q_diag[self.dim_z : self.dim_z + velocity_dims]\n        return std_pos, std_vel\n\n    def _get_measurement_noise_std(\n        self, mean: np.ndarray, confidence: float\n    ) -> np.ndarray:\n        del mean, confidence\n        return np.sqrt(np.diag(self.cov_update_policy.get_r()))\n\n    def _get_multi_process_noise_std(\n        self, mean: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        if mean.ndim != 2:\n            raise ValueError(\"Expected mean to have shape (n, dim_x)\")\n        n = mean.shape[0]\n        std_pos, std_vel = self._get_process_noise_std(mean[0])\n        std_pos_multi = [np.full(n, float(v), dtype=float) for v in std_pos]\n        std_vel_multi = [np.full(n, float(v), dtype=float) for v in std_vel]\n        return std_pos_multi, std_vel_multi\n\n    def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        mean = np.zeros((self.dim_x,), dtype=float)\n        mean[: self.dim_z] = self._reshape_measurement_vector(measurement)\n        covariance = self.cov_update_policy.get_init_state_cov()\n        if self._is_obb:\n            mean[4] = float(self._wrap_angle(mean[4]))\n        return mean, covariance\n\n    def predict(\n        self,\n        mean: Optional[np.ndarray] = None,\n        covariance: Optional[np.ndarray] = None,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        update = mean is None\n        if mean is None:\n            mean = self.x\n            covariance = self.covariance\n        mean = np.asarray(mean, dtype=float).reshape(-1)\n        covariance = np.asarray(covariance, dtype=float)\n\n        motion_cov = self.cov_update_policy.get_q()\n        mean = np.dot(self._motion_mat, mean)\n        covariance = (\n            np.linalg.multi_dot((self._motion_mat, covariance, self._motion_mat.T))\n            + motion_cov\n        )\n\n        if update:\n            self.x = mean\n            self.covariance = covariance\n            self._enforce_state_constraints()\n        return mean, covariance\n\n    def project(\n        self,\n        mean: Optional[np.ndarray] = None,\n        covariance: Optional[np.ndarray] = None,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        if mean is None:\n            mean = self.x\n            covariance = self.covariance\n        mean = np.asarray(mean, dtype=float).reshape(-1)\n        covariance = np.asarray(covariance, dtype=float)\n\n        innovation_cov = self.cov_update_policy.get_r()\n        projected_mean = np.dot(self._update_mat, mean)\n        projected_cov = np.linalg.multi_dot(\n            (self._update_mat, covariance, self._update_mat.T)\n        )\n        return projected_mean, projected_cov + innovation_cov\n\n    def update(self, z: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        measurement = self._reshape_measurement_vector(z)\n        if self._is_obb:\n            reference_theta = float(self.x[4])\n            measurement[4] = self._align_angle_to_reference(\n                measurement[4], reference_theta\n            )\n        projected_mean, projected_cov = self.project()\n\n        chol_factor, lower = scipy.linalg.cho_factor(\n            projected_cov, lower=True, check_finite=False\n        )\n        kalman_gain = scipy.linalg.cho_solve(\n            (chol_factor, lower),\n            np.dot(self.covariance, self._update_mat.T).T,\n            check_finite=False,\n        ).T\n\n        innovation = measurement - projected_mean\n        self.x = self.x + np.dot(innovation, kalman_gain.T)\n        self.covariance = self.covariance - np.linalg.multi_dot(\n            (kalman_gain, projected_cov, kalman_gain.T)\n        )\n        self._enforce_state_constraints()\n\n        return self.x, self.covariance\n"
  },
  {
    "path": "boxmot/motion/kalman_filters/xysr.py",
    "content": "from collections import deque\nfrom copy import deepcopy\nfrom typing import Optional, Tuple\n\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.base import BaseKalmanFilter\n\n\nclass KalmanFilterXYSR(BaseKalmanFilter):\n    \"\"\"\n    Linear Kalman filter for XYSR with optional OBB angle extension.\n\n    - `dim_z=4, dim_x=7`: [x, y, s, r, vx, vy, vs]\n    - `dim_z=5, dim_x=9`: [x, y, s, r, theta, vx, vy, vs, vtheta]\n    \"\"\"\n\n    def __init__(self, dim_x: int = 7, dim_z: int = 4, dim_u: int = 0, max_obs: int = 50):\n        if dim_x < 1:\n            raise ValueError(\"dim_x must be 1 or greater\")\n        if dim_z < 1:\n            raise ValueError(\"dim_z must be 1 or greater\")\n        if dim_u < 0:\n            raise ValueError(\"dim_u must be 0 or greater\")\n        if dim_z == 5 and dim_x != 9:\n            raise ValueError(\"dim_x must be 9 when dim_z is 5 (XYSR + theta)\")\n        if dim_z > 5:\n            raise ValueError(\"dim_z > 5 is not supported for XYSR\")\n\n        motion_mat = self._build_motion_matrix(dim_x=dim_x, dim_z=dim_z)\n        update_mat = np.zeros((dim_z, dim_x), dtype=float)\n        update_mat[:, :dim_z] = np.eye(dim_z, dtype=float)\n\n        super().__init__(\n            ndim=dim_z,\n            dim_x=dim_x,\n            dim_z=dim_z,\n            motion_mat=motion_mat,\n            update_mat=update_mat,\n            max_obs=max_obs,\n        )\n\n        self.dim_u = dim_u\n        self._is_obb = dim_z >= 5\n        self.inv = np.linalg.inv\n\n        self.max_obs = max_obs\n        self.history_obs = deque([], maxlen=self.max_obs)\n        self.attr_saved = None\n        self.observed = False\n        self.last_measurement = None\n\n    @staticmethod\n    def _build_motion_matrix(dim_x: int, dim_z: int) -> np.ndarray:\n        \"\"\"Build xysr-compatible transition matrix with a fallback for custom dims.\"\"\"\n        motion_mat = np.eye(dim_x, dtype=float)\n\n        if dim_x >= 9 and dim_z >= 5:\n            # [x, y, s, r, theta, vx, vy, vs, vtheta]\n            motion_mat[0, 5] = 1.0\n            motion_mat[1, 6] = 1.0\n            motion_mat[2, 7] = 1.0\n            motion_mat[4, 8] = 1.0\n            return motion_mat\n\n        if dim_x >= 7 and dim_z >= 4:\n            # [x, y, s, r, vx, vy, vs]\n            motion_mat[0, 4] = 1.0\n            motion_mat[1, 5] = 1.0\n            motion_mat[2, 6] = 1.0\n            return motion_mat\n\n        velocity_dims = min(dim_z, max(0, dim_x - dim_z))\n        for i in range(velocity_dims):\n            motion_mat[i, dim_z + i] = 1.0\n        return motion_mat\n\n    @staticmethod\n    def _scale_from_measurement(z: np.ndarray) -> float:\n        arr = np.asarray(z, dtype=float).reshape(-1)\n        if arr.size < 4:\n            return 1.0\n\n        s = max(arr[2], 1e-6)\n        r = max(abs(arr[3]), 1e-6)\n        w = np.sqrt(s * r)\n        h = np.sqrt(s / r)\n        return float(max(0.5 * (w + h), 1.0))\n\n    def _measurement_reference_state(self) -> Optional[np.ndarray]:\n        if self._is_obb:\n            return np.asarray(self.x[: self.dim_z, 0], dtype=float).copy()\n        return None\n\n    @classmethod\n    def _align_obb_measurement(\n        cls, measurement: np.ndarray, reference: np.ndarray\n    ) -> np.ndarray:\n        \"\"\"\n        Resolve equivalent OBB forms in XYSR space before update.\n\n        In XYSR-OBB, a rectangle can be represented as:\n        - (s, r, theta)\n        - (s, r, theta + pi)\n        - (s, 1/r, theta + pi/2)\n        - (s, 1/r, theta - pi/2)\n        Choose the form closest to the reference state to prevent angle flips.\n        \"\"\"\n        aligned = np.asarray(measurement, dtype=float).copy().reshape((-1,))\n        ref = np.asarray(reference, dtype=float).reshape((-1,))\n\n        ref_r = max(float(ref[3]), 1e-6)\n        ref_theta = float(ref[4])\n\n        s = max(float(aligned[2]), 1e-6)\n        r = max(float(aligned[3]), 1e-6)\n        theta = float(aligned[4])\n\n        candidates = (\n            (s, r, theta),\n            (s, r, theta + np.pi),\n            (s, 1.0 / r, theta + (np.pi / 2.0)),\n            (s, 1.0 / r, theta - (np.pi / 2.0)),\n        )\n        ratio_candidates = tuple(\n            (1.0, cand_r, cand_theta) for _, cand_r, cand_theta in candidates\n        )\n        _, best_r, best_theta = cls._select_obb_candidate(\n            reference_sizes=(1.0, ref_r),\n            reference_angle=ref_theta,\n            candidates=ratio_candidates,\n        )\n        aligned[2] = max(s, 1e-6)\n        aligned[3] = max(best_r, 1e-6)\n        aligned[4] = best_theta\n        return aligned\n\n    def _prepare_measurement(\n        self, z: np.ndarray, reference_state: Optional[np.ndarray] = None\n    ) -> np.ndarray:\n        measurement = self._reshape_measurement(z, self.dim_z)\n        measurement[2, 0] = max(float(measurement[2, 0]), 1e-6)\n        measurement[3, 0] = max(float(measurement[3, 0]), 1e-6)\n        if self._is_obb:\n            raw = float(self._wrap_angle(measurement[4, 0]))\n            measurement[4, 0] = raw\n            if reference_state is not None:\n                aligned = self._align_obb_measurement(\n                    measurement[:, 0], np.asarray(reference_state, dtype=float).reshape(-1)\n                )\n                measurement[:, 0] = aligned\n        return measurement\n\n    def _enforce_state_constraints(self) -> None:\n        self.x = self._enforce_state_geometry(\n            self.x,\n            positive_indices=(2, 3),\n            angle_index=4 if self._is_obb else None,\n            min_size=1e-6,\n        )\n        self.P = 0.5 * (self.P + self.P.T)\n\n    @staticmethod\n    def _affine_components(m: np.ndarray) -> Tuple[float, float, float]:\n        u, _, vh = np.linalg.svd(m)\n        rot = u @ vh\n        if np.linalg.det(rot) < 0:\n            u[:, -1] *= -1.0\n            rot = u @ vh\n        angle = float(np.arctan2(rot[1, 0], rot[0, 0]))\n        scale_x = max(float(np.linalg.norm(m[:, 0])), 1e-6)\n        scale_y = max(float(np.linalg.norm(m[:, 1])), 1e-6)\n        return scale_x, scale_y, angle\n\n    def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.ndarray:\n        scale = self._scale_from_measurement(measurement)\n        if self._is_obb:\n            return np.array(\n                [\n                    2.0 * self._std_weight_position * scale,  # x\n                    2.0 * self._std_weight_position * scale,  # y\n                    2.0 * self._std_weight_position * scale,  # s\n                    1e-2,                                     # r\n                    1e-2,                                     # theta\n                    10.0 * self._std_weight_velocity * scale, # vx\n                    10.0 * self._std_weight_velocity * scale, # vy\n                    10.0 * self._std_weight_velocity * scale, # vs\n                    1e-5,                                     # vtheta\n                ],\n                dtype=float,\n            )\n        return np.array(\n            [\n                2.0 * self._std_weight_position * scale,\n                2.0 * self._std_weight_position * scale,\n                2.0 * self._std_weight_position * scale,\n                1e-2,\n                10.0 * self._std_weight_velocity * scale,\n                10.0 * self._std_weight_velocity * scale,\n                10.0 * self._std_weight_velocity * scale,\n            ],\n            dtype=float,\n        )\n\n    def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        scale = self._scale_from_measurement(mean)\n        if self._is_obb:\n            std_pos = [\n                self._std_weight_position * scale,\n                self._std_weight_position * scale,\n                self._std_weight_position * scale,\n                1e-2,\n                1e-2,\n            ]\n            std_vel = [\n                self._std_weight_velocity * scale,\n                self._std_weight_velocity * scale,\n                self._std_weight_velocity * scale,\n                1e-5,\n            ]\n            return std_pos, std_vel\n        std_pos = [\n            self._std_weight_position * scale,\n            self._std_weight_position * scale,\n            self._std_weight_position * scale,\n            1e-2,\n        ]\n        std_vel = [\n            self._std_weight_velocity * scale,\n            self._std_weight_velocity * scale,\n            self._std_weight_velocity * scale,\n            1e-5,\n        ]\n        return std_pos, std_vel\n\n    def _get_measurement_noise_std(self, mean: np.ndarray, confidence: float) -> np.ndarray:\n        scale = self._scale_from_measurement(mean)\n        if self._is_obb:\n            return np.array(\n                [\n                    self._std_weight_position * scale,\n                    self._std_weight_position * scale,\n                    self._std_weight_position * scale,\n                    1e-1,\n                    1e-1,\n                ],\n                dtype=float,\n            )\n        return np.array(\n            [\n                self._std_weight_position * scale,\n                self._std_weight_position * scale,\n                self._std_weight_position * scale,\n                1e-1,\n            ],\n            dtype=float,\n        )\n\n    def _get_multi_process_noise_std(\n        self, mean: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        if mean.ndim != 2:\n            raise ValueError(\"Expected mean to have shape (n, dim_x)\")\n\n        scales = np.array([self._scale_from_measurement(row) for row in mean], dtype=float)\n        if self._is_obb:\n            std_pos = [\n                self._std_weight_position * scales,\n                self._std_weight_position * scales,\n                self._std_weight_position * scales,\n                1e-2 * np.ones_like(scales),\n                1e-2 * np.ones_like(scales),\n            ]\n            std_vel = [\n                self._std_weight_velocity * scales,\n                self._std_weight_velocity * scales,\n                self._std_weight_velocity * scales,\n                1e-5 * np.ones_like(scales),\n            ]\n            return std_pos, std_vel\n        std_pos = [\n            self._std_weight_position * scales,\n            self._std_weight_position * scales,\n            self._std_weight_position * scales,\n            1e-2 * np.ones_like(scales),\n        ]\n        std_vel = [\n            self._std_weight_velocity * scales,\n            self._std_weight_velocity * scales,\n            self._std_weight_velocity * scales,\n            1e-5 * np.ones_like(scales),\n        ]\n        return std_pos, std_vel\n\n    def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        \"\"\"Initialize xysr state [x, y, s, r, vx, vy, vs] from a measurement.\"\"\"\n        mean = np.zeros((self.dim_x, 1), dtype=float)\n        measurement = self._prepare_measurement(measurement, reference_state=None)\n        mean[: self.dim_z] = measurement\n\n        std = self._get_initial_covariance_std(measurement)\n        covariance = np.eye(self.dim_x, dtype=float)\n        covariance[: std.shape[0], : std.shape[0]] = np.diag(np.square(std))\n        mean[2, 0] = max(float(mean[2, 0]), 1e-6)\n        mean[3, 0] = max(float(mean[3, 0]), 1e-6)\n        if self._is_obb:\n            mean[4, 0] = float(self._wrap_angle(mean[4, 0]))\n        covariance = 0.5 * (covariance + covariance.T)\n        return mean, covariance\n\n    def apply_affine_correction(self, m: np.ndarray, t: np.ndarray) -> None:\n        \"\"\"Apply affine correction to state and covariance (used by DeepOcSort CMC).\"\"\"\n        m = np.asarray(m, dtype=float).reshape((2, 2))\n        t = np.asarray(t, dtype=float).reshape((2, 1))\n        scale_x, scale_y, rot = self._affine_components(m)\n        area_scale = scale_x * scale_y\n        ratio_scale = scale_x / scale_y\n\n        vel_slice = slice(5, 7) if self._is_obb else slice(4, 6)\n        self.x[:2] = m @ self.x[:2] + t\n        self.x[vel_slice] = m @ self.x[vel_slice]\n        if self._is_obb:\n            self.x[2, 0] *= area_scale\n            self.x[3, 0] *= ratio_scale\n            self.x[4, 0] = float(self._wrap_angle(self.x[4, 0] + rot))\n            self.x[7, 0] *= area_scale\n\n        self.P[:2, :2] = m @ self.P[:2, :2] @ m.T\n        self.P[vel_slice, vel_slice] = m @ self.P[vel_slice, vel_slice] @ m.T\n        if self._is_obb:\n            self.P[2, 2] *= area_scale**2\n            self.P[3, 3] *= ratio_scale**2\n            self.P[7, 7] *= area_scale**2\n\n        if not self.observed and self.attr_saved is not None:\n            self.attr_saved[\"x\"][:2] = m @ self.attr_saved[\"x\"][:2] + t\n            self.attr_saved[\"x\"][vel_slice] = m @ self.attr_saved[\"x\"][vel_slice]\n            if self._is_obb:\n                self.attr_saved[\"x\"][2, 0] *= area_scale\n                self.attr_saved[\"x\"][3, 0] *= ratio_scale\n                self.attr_saved[\"x\"][4, 0] = float(\n                    self._wrap_angle(self.attr_saved[\"x\"][4, 0] + rot)\n                )\n                self.attr_saved[\"x\"][7, 0] *= area_scale\n\n            self.attr_saved[\"P\"][:2, :2] = m @ self.attr_saved[\"P\"][:2, :2] @ m.T\n            self.attr_saved[\"P\"][vel_slice, vel_slice] = (\n                m @ self.attr_saved[\"P\"][vel_slice, vel_slice] @ m.T\n            )\n            if self._is_obb:\n                self.attr_saved[\"P\"][2, 2] *= area_scale**2\n                self.attr_saved[\"P\"][3, 3] *= ratio_scale**2\n                self.attr_saved[\"P\"][7, 7] *= area_scale**2\n\n            if self.attr_saved[\"last_measurement\"] is not None:\n                self.attr_saved[\"last_measurement\"][:2] = (\n                    m @ self.attr_saved[\"last_measurement\"][:2] + t\n                )\n                if self._is_obb:\n                    self.attr_saved[\"last_measurement\"][2, 0] *= area_scale\n                    self.attr_saved[\"last_measurement\"][3, 0] *= ratio_scale\n                    self.attr_saved[\"last_measurement\"][4, 0] = float(\n                        self._wrap_angle(self.attr_saved[\"last_measurement\"][4, 0] + rot)\n                    )\n\n        self._enforce_state_constraints()\n\n    def predict(\n        self,\n        u: Optional[np.ndarray] = None,\n        B: Optional[np.ndarray] = None,\n        F: Optional[np.ndarray] = None,\n        Q: Optional[np.ndarray] = None,\n    ) -> None:\n        \"\"\"Predict one state step using shared base framework.\"\"\"\n        self.predict_state(u=u, B=B, F=F, Q=Q)\n        self._enforce_state_constraints()\n\n    def freeze(self) -> None:\n        \"\"\"Save parameters before non-observation forward pass.\"\"\"\n        self.attr_saved = deepcopy(self.__dict__)\n\n    def unfreeze(self) -> None:\n        \"\"\"\n        Restore the previously frozen state and replay interpolated observations.\n        \"\"\"\n        if self.attr_saved is None:\n            return\n\n        new_history = deepcopy(list(self.history_obs))\n        self.__dict__ = self.attr_saved\n        self.history_obs = deque(list(self.history_obs)[:-1], maxlen=self.max_obs)\n\n        occur = [int(obs is None) for obs in new_history]\n        indices = np.where(np.array(occur) == 0)[0]\n        if len(indices) < 2:\n            return\n\n        index1, index2 = indices[-2], indices[-1]\n        box1, box2 = new_history[index1], new_history[index2]\n\n        box1 = np.asarray(box1, dtype=float).reshape(-1)\n        box2 = np.asarray(box2, dtype=float).reshape(-1)\n        if box1.size < self.dim_z or box2.size < self.dim_z:\n            return\n\n        x1, y1, s1, r1 = box1[:4]\n        w1, h1 = np.sqrt(s1 * r1), np.sqrt(s1 / r1)\n        x2, y2, s2, r2 = box2[:4]\n        w2, h2 = np.sqrt(s2 * r2), np.sqrt(s2 / r2)\n\n        time_gap = index2 - index1\n        if time_gap <= 0:\n            return\n        dx, dy = (x2 - x1) / time_gap, (y2 - y1) / time_gap\n        dw, dh = (w2 - w1) / time_gap, (h2 - h1) / time_gap\n        if self._is_obb:\n            t1, t2 = box1[4], box2[4]\n            dtheta = float(self._wrap_angle(t2 - t1)) / time_gap\n\n        for i in range(index2 - index1):\n            x = x1 + (i + 1) * dx\n            y = y1 + (i + 1) * dy\n            w = w1 + (i + 1) * dw\n            h = h1 + (i + 1) * dh\n            s, r = w * h, w / float(h)\n            if self._is_obb:\n                theta = float(self._wrap_angle(t1 + (i + 1) * dtheta))\n                new_box = np.array([x, y, s, r, theta], dtype=float).reshape((5, 1))\n            else:\n                new_box = np.array([x, y, s, r], dtype=float).reshape((4, 1))\n\n            self.update(new_box)\n            if i != (index2 - index1 - 1):\n                self.predict()\n                self.history_obs.pop()\n\n        self.history_obs.pop()\n\n    def update(\n        self,\n        z: Optional[np.ndarray],\n        R: Optional[np.ndarray] = None,\n        H: Optional[np.ndarray] = None,\n    ) -> None:\n        \"\"\"Update state with measurement or register missing observation when z is None.\"\"\"\n        measurement = None\n        if z is not None:\n            measurement = self._prepare_measurement(\n                z, reference_state=self._measurement_reference_state()\n            )\n        self.history_obs.append(None if measurement is None else measurement.copy())\n\n        if measurement is None:\n            if self.observed and len(self.history_obs) >= 2:\n                self.last_measurement = self.history_obs[-2]\n                self.freeze()\n\n            self.observed = False\n            self.z = np.array([[None] * self.dim_z]).T\n            self.x_post = self.x.copy()\n            self.P_post = self.P.copy()\n            self.y = np.zeros((self.dim_z, 1))\n            return\n\n        if not self.observed:\n            self.unfreeze()\n        self.observed = True\n\n        self.update_state(z=measurement, R=R, H=H)\n        if self._is_obb and self.dim_x >= 9:\n            self.x = self._damp_theta_velocity(self.x, damping=0.8)\n        self._enforce_state_constraints()\n\n        # Keep legacy behavior where observed measurements are appended twice.\n        self.history_obs.append(self.z.copy())\n\n    def md_for_measurement(self, z: np.ndarray) -> float:\n        \"\"\"Mahalanobis distance of measurement z against current predicted state.\"\"\"\n        measurement = self._prepare_measurement(\n            z, reference_state=self._measurement_reference_state()\n        )\n        return self.mahalanobis_distance(z=measurement, H=self.H, R=self.R)\n"
  },
  {
    "path": "boxmot/motion/kalman_filters/xywh.py",
    "content": "from typing import Tuple\n\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.base import BaseKalmanFilter\n\n\nclass KalmanFilterXYWH(BaseKalmanFilter):\n    \"\"\"\n    Kalman filter for XYWH state with optional OBB angle extension.\n\n    - `ndim=4`: [x, y, w, h]\n    - `ndim=5`: [x, y, w, h, theta]\n    \"\"\"\n\n    def __init__(self, ndim: int = 4):\n        if ndim not in (4, 5):\n            raise ValueError(\"ndim must be 4 (AABB) or 5 (OBB)\")\n        super().__init__(ndim=ndim)\n        self._is_obb = ndim == 5\n\n    def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.ndarray:\n        std = [\n            2 * self._std_weight_position * measurement[2],\n            2 * self._std_weight_position * measurement[3],\n            2 * self._std_weight_position * measurement[2],\n            2 * self._std_weight_position * measurement[3],\n            10 * self._std_weight_velocity * measurement[2],\n            10 * self._std_weight_velocity * measurement[3],\n            10 * self._std_weight_velocity * measurement[2],\n            10 * self._std_weight_velocity * measurement[3],\n        ]\n        if self._is_obb:\n            std.insert(4, 1e-2)  # theta\n            std.append(1e-5)     # v_theta\n        return std\n\n    def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        std_pos = [\n            self._std_weight_position * mean[2],\n            self._std_weight_position * mean[3],\n            self._std_weight_position * mean[2],\n            self._std_weight_position * mean[3],\n        ]\n        std_vel = [\n            self._std_weight_velocity * mean[2],\n            self._std_weight_velocity * mean[3],\n            self._std_weight_velocity * mean[2],\n            self._std_weight_velocity * mean[3],\n        ]\n        if self._is_obb:\n            std_pos.append(1e-2)\n            std_vel.append(1e-5)\n        return std_pos, std_vel\n\n    def _get_measurement_noise_std(self, mean: np.ndarray, confidence: float) -> np.ndarray:\n        std_noise = [\n            self._std_weight_position * mean[2],\n            self._std_weight_position * mean[3],\n            self._std_weight_position * mean[2],\n            self._std_weight_position * mean[3],\n        ]\n        if self._is_obb:\n            std_noise.append(1e-1)\n        return std_noise\n\n    def _get_multi_process_noise_std(\n        self, mean: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        std_pos = [\n            self._std_weight_position * mean[:, 2],\n            self._std_weight_position * mean[:, 3],\n            self._std_weight_position * mean[:, 2],\n            self._std_weight_position * mean[:, 3],\n        ]\n        std_vel = [\n            self._std_weight_velocity * mean[:, 2],\n            self._std_weight_velocity * mean[:, 3],\n            self._std_weight_velocity * mean[:, 2],\n            self._std_weight_velocity * mean[:, 3],\n        ]\n        if self._is_obb:\n            std_pos.append(1e-2 * np.ones_like(mean[:, 2]))\n            std_vel.append(1e-5 * np.ones_like(mean[:, 2]))\n        return std_pos, std_vel\n\n    @classmethod\n    def _align_obb_measurement(\n        cls, measurement: np.ndarray, reference: np.ndarray\n    ) -> np.ndarray:\n        \"\"\"\n        Resolve OBB representation ambiguity before update.\n\n        A rectangle can be represented by equivalent parameterizations:\n        - (w, h, theta)\n        - (w, h, theta + pi)\n        - (h, w, theta + pi/2)\n        - (h, w, theta - pi/2)\n        Pick the one closest to current state to avoid sudden angle flips.\n        \"\"\"\n        aligned = np.asarray(measurement, dtype=float).copy().reshape((-1,))\n        ref = np.asarray(reference, dtype=float).reshape((-1,))\n\n        ref_w = max(float(ref[2]), 1e-6)\n        ref_h = max(float(ref[3]), 1e-6)\n        ref_theta = float(ref[4])\n        w = max(float(aligned[2]), 1e-6)\n        h = max(float(aligned[3]), 1e-6)\n        theta = float(aligned[4])\n\n        candidates = (\n            (w, h, theta),\n            (w, h, theta + np.pi),\n            (h, w, theta + (np.pi / 2.0)),\n            (h, w, theta - (np.pi / 2.0)),\n        )\n        best_w, best_h, best_theta = cls._select_obb_candidate(\n            reference_sizes=(ref_w, ref_h),\n            reference_angle=ref_theta,\n            candidates=candidates,\n        )\n        aligned[2] = best_w\n        aligned[3] = best_h\n        aligned[4] = best_theta\n        return aligned\n\n    @classmethod\n    def _enforce_xywh_constraints(cls, mean: np.ndarray, is_obb: bool) -> np.ndarray:\n        return cls._enforce_state_geometry(\n            mean,\n            positive_indices=(2, 3),\n            angle_index=4 if is_obb else None,\n            min_size=1e-4,\n        )\n\n    def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        measurement = np.asarray(measurement, dtype=float).copy()\n        if self._is_obb:\n            measurement[4] = self._wrap_angle(measurement[4])\n        mean, covariance = super().initiate(measurement)\n        mean = self._enforce_xywh_constraints(mean, self._is_obb)\n        return mean, covariance\n\n    def predict(self, mean: np.ndarray, covariance: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n        mean, covariance = super().predict(mean, covariance)\n        mean = self._enforce_xywh_constraints(mean, self._is_obb)\n        return mean, covariance\n\n    def multi_predict(\n        self, mean: np.ndarray, covariance: np.ndarray\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        mean, covariance = super().multi_predict(mean, covariance)\n        if self._is_obb:\n            mean[:, 2] = np.maximum(mean[:, 2], 1e-4)\n            mean[:, 3] = np.maximum(mean[:, 3], 1e-4)\n            mean[:, 4] = self._wrap_angle(mean[:, 4])\n        else:\n            mean[:, 2] = np.maximum(mean[:, 2], 1e-4)\n            mean[:, 3] = np.maximum(mean[:, 3], 1e-4)\n        return mean, covariance\n\n    def update(\n        self,\n        mean: np.ndarray,\n        covariance: np.ndarray,\n        measurement: np.ndarray,\n        confidence: float = 0.0,\n    ) -> Tuple[np.ndarray, np.ndarray]:\n        if self._is_obb:\n            mean_arr = np.asarray(mean, dtype=float)\n            measurement_arr = np.asarray(measurement, dtype=float).copy()\n            if mean_arr.ndim == 2:\n                measurement_arr = measurement_arr.reshape((self.ndim, 1))\n                aligned = self._align_obb_measurement(\n                    measurement_arr[:, 0], mean_arr[:, 0]\n                )\n                measurement_arr[:, 0] = aligned\n            else:\n                measurement_arr = measurement_arr.reshape((self.ndim,))\n                measurement_arr = self._align_obb_measurement(measurement_arr, mean_arr)\n            measurement = measurement_arr\n        new_mean, new_covariance = super().update(mean, covariance, measurement, confidence)\n        if self._is_obb:\n            new_mean = self._damp_theta_velocity(new_mean, damping=0.8)\n        new_mean = self._enforce_xywh_constraints(new_mean, self._is_obb)\n        return new_mean, new_covariance\n\n    def gating_distance(\n        self,\n        mean: np.ndarray,\n        covariance: np.ndarray,\n        measurements: np.ndarray,\n        only_position: bool = False,\n        metric: str = \"maha\",\n    ) -> np.ndarray:\n        if not self._is_obb or only_position:\n            return super().gating_distance(mean, covariance, measurements, only_position, metric)\n\n        projected_mean, projected_cov, measurements = self._prepare_gating_inputs(\n            mean, covariance, measurements, self.project\n        )\n        for i in range(measurements.shape[0]):\n            measurements[i, :] = self._align_obb_measurement(measurements[i, :], projected_mean)\n\n        residuals = measurements - projected_mean\n        return self._gating_from_residuals(residuals, projected_cov, metric)\n"
  },
  {
    "path": "boxmot/postprocessing/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/postprocessing/gbrc.py",
    "content": "import argparse\nimport concurrent.futures\nfrom pathlib import Path\n\nimport numpy as np\nfrom sklearn.ensemble import GradientBoostingRegressor\nfrom tqdm import tqdm\n\nfrom boxmot.utils import logger as LOGGER\n\n\ndef linear_interpolation(data: np.ndarray, interval: int) -> np.ndarray:\n    \"\"\"\n    Apply linear interpolation between rows in the tracking results.\n\n    Assumes col0=frame, col1=id. Interpolates gaps:\n        previous_frame + 1 < current_frame < previous_frame + interval\n    \"\"\"\n    if data.size == 0:\n        return data\n\n    # Sort by id then frame (same as your other script style)\n    sorted_data = data[np.lexsort((data[:, 0], data[:, 1]))]\n\n    result_rows = []\n    previous_id = None\n    previous_frame = None\n    previous_row = None\n\n    for row in sorted_data:\n        current_frame, current_id = int(row[0]), int(row[1])\n\n        if (\n            previous_id is not None\n            and current_id == previous_id\n            and previous_frame + 1 < current_frame < previous_frame + interval\n        ):\n            gap = current_frame - previous_frame - 1\n            for i in range(1, gap + 1):\n                new_row = previous_row + (row - previous_row) * (\n                    i / (current_frame - previous_frame)\n                )\n                result_rows.append(new_row)\n\n        result_rows.append(row)\n        previous_id, previous_frame, previous_row = current_id, current_frame, row\n\n    out = np.array(result_rows)\n    return out[np.lexsort((out[:, 0], out[:, 1]))]\n\n\ndef _fit_predict_1d(regr: GradientBoostingRegressor, t: np.ndarray, y: np.ndarray) -> np.ndarray:\n    \"\"\"Fit regressor on (t -> y) and return predictions shaped (n,).\"\"\"\n    regr.fit(t, y.ravel())\n    return regr.predict(t)\n\n\ndef gradient_boosting_smooth(\n    data: np.ndarray,\n    n_estimators: int = 115,\n    learning_rate: float = 0.065,\n    min_samples_split: int = 6,\n) -> np.ndarray:\n    \"\"\"\n    Smooth columns 2..5 (x,y,w,h) per track id using GradientBoostingRegressor.\n    \"\"\"\n    if data.size == 0:\n        return data\n\n    smoothed_rows = []\n    unique_ids = np.unique(data[:, 1])\n\n    for obj_id in unique_ids:\n        tracks = data[data[:, 1] == obj_id]\n        if len(tracks) == 0:\n            continue\n\n        t = tracks[:, 0].reshape(-1, 1)\n\n        # If a track is extremely short, boosting can still fit,\n        # but smoothing isn't really meaningful; we still run it for consistency.\n        regr = GradientBoostingRegressor(\n            n_estimators=n_estimators,\n            learning_rate=learning_rate,\n            min_samples_split=min_samples_split,\n        )\n\n        tracks[:, 2] = _fit_predict_1d(regr, t, tracks[:, 2])\n        tracks[:, 3] = _fit_predict_1d(regr, t, tracks[:, 3])\n        tracks[:, 4] = _fit_predict_1d(regr, t, tracks[:, 4])\n        tracks[:, 5] = _fit_predict_1d(regr, t, tracks[:, 5])\n\n        smoothed_rows.append(tracks)\n\n    out = np.concatenate(smoothed_rows)\n    return out[np.lexsort((out[:, 0], out[:, 1]))]\n\n\ndef process_file(\n    file_path: Path,\n    interval: int,\n    n_estimators: int,\n    learning_rate: float,\n    min_samples_split: int,\n):\n    \"\"\"\n    Process a single MOT results file by applying linear interpolation and gradient boosting smoothing.\n    \"\"\"\n    LOGGER.info(f\"Applying GBRC/GBI to: {file_path}\")\n    tracking_results = np.loadtxt(file_path, delimiter=\",\")\n\n    if tracking_results.size == 0:\n        LOGGER.warning(f\"No tracking results in {file_path}. Skipping...\")\n        return\n\n    interpolated = linear_interpolation(tracking_results, interval)\n    smoothed = gradient_boosting_smooth(\n        interpolated,\n        n_estimators=n_estimators,\n        learning_rate=learning_rate,\n        min_samples_split=min_samples_split,\n    )\n\n    # Save like your GSI script: overwrite the same file\n    # Use integer frame/id, floats for bbox, then ints for trailing fields.\n    # Note: if you want commas instead, switch fmt + delimiter.\n    fmt = [\"%d\", \"%d\"] + [\"%.2f\"] * (smoothed.shape[1] - 2)\n    np.savetxt(\n        file_path,\n        smoothed,\n        fmt=fmt,\n        delimiter=\",\",\n    )\n\n\ndef gbrc(\n    mot_results_folder: Path,\n    interval: int = 20,\n    n_estimators: int = 115,\n    learning_rate: float = 0.065,\n    min_samples_split: int = 6,\n):\n    \"\"\"\n    Apply GBRC/GBI-style postprocessing to all MOT*.txt files in a folder.\n    \"\"\"\n    tracking_files = list(mot_results_folder.glob(\"MOT*.txt\"))\n    total_files = len(tracking_files)\n    LOGGER.debug(f\"GBRC: Found {total_files} file(s) to process.\")\n\n    with concurrent.futures.ProcessPoolExecutor() as executor:\n        futures = {\n            executor.submit(\n                process_file,\n                file_path,\n                interval,\n                n_estimators,\n                learning_rate,\n                min_samples_split,\n            ): file_path\n            for file_path in tracking_files\n        }\n\n        for future in tqdm(\n            concurrent.futures.as_completed(futures),\n            total=total_files,\n            desc=\"Processing files\",\n        ):\n            file_path = futures[future]\n            try:\n                future.result()\n            except Exception as e:\n                LOGGER.error(f\"Error processing file {file_path}: {e}\")\n\n\ndef main():\n    parser = argparse.ArgumentParser(\n        description=\"Apply Gradient Boosting Reconnection Context (GBRC/GBI) postprocessing to tracking results.\"\n    )\n    parser.add_argument(\"--path\", type=str, required=True, help=\"Path to MOT results folder\")\n    parser.add_argument(\"--interval\", type=int, default=20, help=\"Maximum gap to interpolate (default: 20)\")\n    parser.add_argument(\"--n_estimators\", type=int, default=115, help=\"GBR n_estimators (default: 115)\")\n    parser.add_argument(\"--learning_rate\", type=float, default=0.065, help=\"GBR learning_rate (default: 0.065)\")\n    parser.add_argument(\"--min_samples_split\", type=int, default=6, help=\"GBR min_samples_split (default: 6)\")\n    args = parser.parse_args()\n\n    mot_results_folder = Path(args.path)\n    gbrc(\n        mot_results_folder,\n        interval=args.interval,\n        n_estimators=args.n_estimators,\n        learning_rate=args.learning_rate,\n        min_samples_split=args.min_samples_split,\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "boxmot/postprocessing/gsi.py",
    "content": "import argparse\nimport concurrent.futures\nfrom pathlib import Path\n\nimport numpy as np\nfrom sklearn.gaussian_process import GaussianProcessRegressor as GPR\nfrom sklearn.gaussian_process.kernels import RBF\nfrom tqdm import tqdm\n\nfrom boxmot.utils import logger as LOGGER\n\n\ndef linear_interpolation(data: np.ndarray, interval: int) -> np.ndarray:\n    \"\"\"\n    Apply linear interpolation between rows in the tracking results.\n\n    The function assumes the first two columns of `data` represent frame number and object ID.\n    Interpolated rows are added when consecutive rows for the same ID have a gap of more than 1\n    frame but less than the specified interval.\n\n    Parameters:\n        data (np.ndarray): Input tracking results.\n        interval (int): Maximum gap to perform interpolation.\n\n    Returns:\n        np.ndarray: Tracking results with interpolated rows included.\n    \"\"\"\n    # Sort data by frame and then by ID\n    sorted_data = data[np.lexsort((data[:, 0], data[:, 1]))]\n    result_rows = []\n    previous_id = None\n    previous_frame = None\n    previous_row = None\n\n    for row in sorted_data:\n        current_frame, current_id = int(row[0]), int(row[1])\n        if (\n            previous_id is not None\n            and current_id == previous_id\n            and previous_frame + 1 < current_frame < previous_frame + interval\n        ):\n            gap = current_frame - previous_frame - 1\n            for i in range(1, gap + 1):\n                # Linear interpolation for each missing frame\n                new_row = previous_row + (row - previous_row) * (\n                    i / (current_frame - previous_frame)\n                )\n                result_rows.append(new_row)\n        result_rows.append(row)\n        previous_id, previous_frame, previous_row = current_id, current_frame, row\n\n    result_array = np.array(result_rows)\n    # Resort the array\n    return result_array[np.lexsort((result_array[:, 0], result_array[:, 1]))]\n\n\ndef gaussian_smooth(data: np.ndarray, tau: float) -> np.ndarray:\n    \"\"\"\n    Apply Gaussian process smoothing to specified columns in the tracking results.\n\n    For each unique object ID in the data, this function smooths columns 2 through 5 using\n    a Gaussian Process with an RBF kernel. Additional columns (columns 6 and 7) and a constant\n    value (-1) are appended to each row.\n\n    Parameters:\n        data (np.ndarray): Tracking results.\n        tau (float): Smoothing parameter.\n\n    Returns:\n        np.ndarray: Tracking results with smoothed columns.\n    \"\"\"\n    smoothed_output = []\n    unique_ids = np.unique(data[:, 1])\n    for obj_id in unique_ids:\n        tracks = data[data[:, 1] == obj_id]\n        num_tracks = len(tracks)\n        # Determine length scale using logarithmic scaling with clipping\n        length_scale = np.clip(tau * np.log(tau**3 / num_tracks), tau**-1, tau**2)\n        t = tracks[:, 0].reshape(-1, 1)\n        kernel = RBF(length_scale, length_scale_bounds=\"fixed\")\n        gpr = GPR(kernel)\n\n        # Smooth columns 2 to 5 simultaneously (if supported by your version of scikit-learn)\n        smoothed_columns = gpr.fit(t, tracks[:, 2:6]).predict(t)\n\n        # Build new rows with the smoothed data, retaining other columns and appending -1\n        for i in range(len(tracks)):\n            new_row = np.concatenate(\n                ([tracks[i, 0], obj_id], smoothed_columns[i], tracks[i, 6:8], [-1])\n            )\n            smoothed_output.append(new_row)\n\n    return np.array(smoothed_output)\n\n\ndef process_file(file_path: Path, interval: int, tau: float):\n    \"\"\"\n    Process a single MOT results file by applying linear interpolation and Gaussian smoothing.\n\n    Parameters:\n        file_path (Path): Path to the tracking results file.\n        interval (int): Interval for linear interpolation.\n        tau (float): Smoothing parameter for Gaussian process.\n    \"\"\"\n    LOGGER.info(f\"Applying GSI to: {file_path}\")\n    tracking_results = np.loadtxt(file_path, delimiter=\",\")\n    if tracking_results.size != 0:\n        interpolated_results = linear_interpolation(tracking_results, interval)\n        smoothed_results = gaussian_smooth(interpolated_results, tau)\n        np.savetxt(file_path, smoothed_results, fmt=\"%d %d %d %d %d %d %d %d %d\")\n    else:\n        LOGGER.warning(f\"No tracking results in {file_path}. Skipping...\")\n\n\ndef gsi(mot_results_folder: Path, interval: int = 20, tau: float = 10):\n    \"\"\"\n    Apply Gaussian Smoothed Interpolation (GSI) to all tracking result files in a folder.\n\n    Parameters:\n        mot_results_folder (Path): Path to the folder containing MOT result files.\n        interval (int, optional): Maximum gap to perform interpolation. Defaults to 20.\n        tau (float, optional): Smoothing parameter for Gaussian process. Defaults to 10.\n    \"\"\"\n    tracking_files = list(mot_results_folder.glob(\"MOT*.txt\"))\n    total_files = len(tracking_files)\n    LOGGER.debug(f\"GSI: Found {total_files} file(s) to process.\")\n\n    with concurrent.futures.ProcessPoolExecutor() as executor:\n        futures = {\n            executor.submit(process_file, file_path, interval, tau): file_path\n            for file_path in tracking_files\n        }\n        for future in tqdm(\n            concurrent.futures.as_completed(futures),\n            total=total_files,\n            desc=\"Processing files\",\n        ):\n            file_path = futures[future]\n            try:\n                future.result()\n            except Exception as e:\n                LOGGER.error(f\"Error processing file {file_path}: {e}\")\n\n\ndef main():\n    \"\"\"\n    Parse command line arguments and run the Gaussian Smoothed Interpolation process.\n    \"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Apply Gaussian Smoothed Interpolation (GSI) to tracking results.\"\n    )\n    parser.add_argument(\n        \"--path\", type=str, required=True, help=\"Path to MOT results folder\"\n    )\n    args = parser.parse_args()\n\n    mot_results_folder = Path(args.path)\n    gsi(mot_results_folder)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "boxmot/reid/__init__.py",
    "content": ""
  },
  {
    "path": "boxmot/reid/backbones/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/clip/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/clip/clip.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport hashlib\nimport os\nimport urllib\nimport warnings\nfrom typing import List, Union\n\nimport torch\nfrom PIL import Image\nfrom torchvision.transforms import (CenterCrop, Compose, Normalize, Resize,\n                                    ToTensor)\nfrom tqdm import tqdm\n\nfrom .model import build_model\nfrom .simple_tokenizer import SimpleTokenizer as _Tokenizer\n\ntry:\n    from torchvision.transforms import InterpolationMode\n\n    BICUBIC = InterpolationMode.BICUBIC\nexcept ImportError:\n    BICUBIC = Image.BICUBIC\n\n\n__all__ = [\"available_models\", \"load\", \"tokenize\"]\n_tokenizer = _Tokenizer()\n\n_MODELS = {\n    \"RN50\": \"https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt\",  # noqa: E501\n    \"RN101\": \"https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt\",  # noqa: E501\n    \"RN50x4\": \"https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt\",  # noqa: E501\n    \"RN50x16\": \"https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt\",  # noqa: E501\n    \"ViT-B-32\": \"https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt\",  # noqa: E501\n    \"ViT-B-16\": \"https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt\",  # noqa: E501\n}\n\n\ndef _download(url: str, root: str = os.path.expanduser(\"~/.cache/clip\")):\n    os.makedirs(root, exist_ok=True)\n    filename = os.path.basename(url)\n\n    expected_sha256 = url.split(\"/\")[-2]\n    download_target = os.path.join(root, filename)\n\n    if os.path.exists(download_target) and not os.path.isfile(download_target):\n        raise RuntimeError(f\"{download_target} exists and is not a regular file\")\n\n    if os.path.isfile(download_target):\n        if (\n            hashlib.sha256(open(download_target, \"rb\").read()).hexdigest()\n            == expected_sha256\n        ):\n            return download_target\n        else:\n            warnings.warn(\n                f\"{download_target} exists, but the SHA256 checksum does not match; re-downloading the file\"\n            )\n\n    with urllib.request.urlopen(url) as source, open(download_target, \"wb\") as output:\n        with tqdm(\n            total=int(source.info().get(\"Content-Length\")),\n            ncols=80,\n            unit=\"iB\",\n            unit_scale=True,\n        ) as loop:\n            while True:\n                buffer = source.read(8192)\n                if not buffer:\n                    break\n\n                output.write(buffer)\n                loop.update(len(buffer))\n\n    if (\n        hashlib.sha256(open(download_target, \"rb\").read()).hexdigest()\n        != expected_sha256\n    ):\n        raise RuntimeError(\n            \"Model has been downloaded but the SHA256 checksum does not not match\"\n        )\n\n    return download_target\n\n\ndef _transform(n_px):\n    return Compose(\n        [\n            Resize(n_px, interpolation=BICUBIC),\n            CenterCrop(n_px),\n            lambda image: image.convert(\"RGB\"),\n            ToTensor(),\n            Normalize(\n                (0.48145466, 0.4578275, 0.40821073),\n                (0.26862954, 0.26130258, 0.27577711),\n            ),\n        ]\n    )\n\n\ndef available_models() -> List[str]:\n    \"\"\"Returns the names of available CLIP models\"\"\"\n    return list(_MODELS.keys())\n\n\ndef load(\n    name: str,\n    device: Union[str, torch.device] = \"cuda\" if torch.cuda.is_available() else \"cpu\",\n    jit=False,\n):\n    \"\"\"Load a CLIP model\n\n    Parameters\n    ----------\n    name : str\n        A model name listed by `clip.available_models()`, or the path to a model checkpoint containing the state_dict\n\n    device : Union[str, torch.device]\n        The device to put the loaded model\n\n    jit : bool\n        Whether to load the optimized JIT model or more hackable non-JIT model (default).\n\n    Returns\n    -------\n    model : torch.nn.Module\n        The CLIP model\n\n    preprocess : Callable[[PIL.Image], torch.Tensor]\n        A torchvision transform that converts a PIL image into a tensor that the returned model can take as its input\n    \"\"\"\n    if name in _MODELS:\n        model_path = _download(_MODELS[name])\n    elif os.path.isfile(name):\n        model_path = name\n    else:\n        raise RuntimeError(\n            f\"Model {name} not found; available models = {available_models()}\"\n        )\n\n    try:\n        # loading JIT archive\n        model = torch.jit.load(model_path, map_location=device if jit else \"cpu\").eval()\n        state_dict = None\n    except RuntimeError:\n        # loading saved state dict\n        if jit:\n            warnings.warn(\n                f\"File {model_path} is not a JIT archive. Loading as a state dict instead\"\n            )\n            jit = False\n        state_dict = torch.load(model_path, map_location=\"cpu\")\n\n    if not jit:\n        model = build_model(state_dict or model.state_dict()).to(device)\n        if str(device) == \"cpu\":\n            model.float()\n        return model, _transform(model.visual.input_resolution)\n\n    # patch the device names\n    device_holder = torch.jit.trace(\n        lambda: torch.ones([]).to(torch.device(device)), example_inputs=[]\n    )\n    device_node = [\n        n\n        for n in device_holder.graph.findAllNodes(\"prim::Constant\")\n        if \"Device\" in repr(n)\n    ][-1]\n\n    def patch_device(module):\n        try:\n            graphs = [module.graph] if hasattr(module, \"graph\") else []\n        except RuntimeError:\n            graphs = []\n\n        if hasattr(module, \"forward1\"):\n            graphs.append(module.forward1.graph)\n\n        for graph in graphs:\n            for node in graph.findAllNodes(\"prim::Constant\"):\n                if \"value\" in node.attributeNames() and str(node[\"value\"]).startswith(\n                    \"cuda\"\n                ):\n                    node.copyAttributes(device_node)\n\n    model.apply(patch_device)\n    patch_device(model.encode_image)\n    patch_device(model.encode_text)\n\n    # patch dtype to float32 on CPU\n    if str(device) == \"cpu\":\n        float_holder = torch.jit.trace(\n            lambda: torch.ones([]).float(), example_inputs=[]\n        )\n        float_input = list(float_holder.graph.findNode(\"aten::to\").inputs())[1]\n        float_node = float_input.node()\n\n        def patch_float(module):\n            try:\n                graphs = [module.graph] if hasattr(module, \"graph\") else []\n            except RuntimeError:\n                graphs = []\n\n            if hasattr(module, \"forward1\"):\n                graphs.append(module.forward1.graph)\n\n            for graph in graphs:\n                for node in graph.findAllNodes(\"aten::to\"):\n                    inputs = list(node.inputs())\n                    for i in [1, 2]:  # dtype can be the second or third argument to aten::to()\n                        if inputs[i].node()[\"value\"] == 5:\n                            inputs[i].node().copyAttributes(float_node)\n\n        model.apply(patch_float)\n        patch_float(model.encode_image)\n        patch_float(model.encode_text)\n\n        model.float()\n\n    return model, _transform(model.input_resolution.item())\n\n\ndef tokenize(\n    texts: Union[str, List[str]], context_length: int = 77, truncate: bool = False\n) -> torch.LongTensor:\n    \"\"\"\n    Returns the tokenized representation of given input string(s)\n\n    Parameters\n    ----------\n    texts : Union[str, List[str]]\n        An input string or a list of input strings to tokenize\n\n    context_length : int\n        The context length to use; all CLIP models use 77 as the context length\n\n    truncate: bool\n        Whether to truncate the text in case its encoding is longer than the context length\n\n    Returns\n    -------\n    A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length]\n    \"\"\"\n    # import pdb\n    # pdb.set_trace()\n    if isinstance(texts, str):\n        texts = [texts]  # ['a photo of a face.']\n\n    sot_token = _tokenizer.encoder[\"<|startoftext|>\"]  # 49406\n    eot_token = _tokenizer.encoder[\"<|endoftext|>\"]  # 49407\n    all_tokens = [[sot_token] + _tokenizer.encode(text) + [eot_token] for text in texts]\n    result = torch.zeros(len(all_tokens), context_length, dtype=torch.long)  # 1,77\n\n    for i, tokens in enumerate(all_tokens):\n        if len(tokens) > context_length:  # context_length 77\n            if truncate:\n                tokens = tokens[:context_length]\n                tokens[-1] = eot_token\n            else:\n                raise RuntimeError(f\"Input {texts[i]} is too long for context length {context_length}\")\n        result[i, :len(tokens)] = torch.tensor(tokens)\n\n    return result\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/clip/model.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import OrderedDict\nfrom typing import Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\n\n\nclass Bottleneck(nn.Module):\n    expansion = 4\n\n    def __init__(self, inplanes, planes, stride=1):\n        super().__init__()\n\n        # all conv layers have stride 1. an avgpool is performed after the second convolution when stride > 1\n        self.conv1 = nn.Conv2d(inplanes, planes, 1, bias=False)\n        self.bn1 = nn.BatchNorm2d(planes)\n\n        self.conv2 = nn.Conv2d(planes, planes, 3, padding=1, bias=False)\n        self.bn2 = nn.BatchNorm2d(planes)\n\n        self.avgpool = nn.AvgPool2d(stride) if stride > 1 else nn.Identity()\n\n        self.conv3 = nn.Conv2d(planes, planes * self.expansion, 1, bias=False)\n        self.bn3 = nn.BatchNorm2d(planes * self.expansion)\n\n        self.relu = nn.ReLU(inplace=True)\n        self.downsample = None\n        self.stride = stride\n\n        if stride > 1 or inplanes != planes * Bottleneck.expansion:\n            # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1\n            self.downsample = nn.Sequential(OrderedDict([\n                (\"-1\", nn.AvgPool2d(stride)),\n                (\"0\", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)),\n                (\"1\", nn.BatchNorm2d(planes * self.expansion))\n            ]))\n\n    def forward(self, x: torch.Tensor):\n        identity = x\n\n        out = self.relu(self.bn1(self.conv1(x)))\n        out = self.relu(self.bn2(self.conv2(out)))\n        out = self.avgpool(out)\n        out = self.bn3(self.conv3(out))\n\n        if self.downsample is not None:\n            identity = self.downsample(x)\n\n        out += identity\n        out = self.relu(out)\n        return out\n\n\nclass AttentionPool2d(nn.Module):\n    def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None):\n        super().__init__()\n        self.positional_embedding = nn.Parameter(\n            torch.randn(spacial_dim + 1, embed_dim) / embed_dim**0.5\n        )\n        self.k_proj = nn.Linear(embed_dim, embed_dim)\n        self.q_proj = nn.Linear(embed_dim, embed_dim)\n        self.v_proj = nn.Linear(embed_dim, embed_dim)\n        self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim)\n        self.num_heads = num_heads\n\n    def forward(self, x):\n        # NCHW -> (HW)NC  #32,2048,7,7 ->49, 32, 2048\n        x = x.reshape(x.shape[0], x.shape[1], x.shape[2] * x.shape[3]).permute(2, 0, 1)\n        x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0)  # (HW+1)NC  50,32,2048\n        x = x + self.positional_embedding[:, None, :].to(x.dtype)  # (HW+1)NC\n        x, _ = F.multi_head_attention_forward(\n            query=x,\n            key=x,\n            value=x,\n            embed_dim_to_check=x.shape[-1],\n            num_heads=self.num_heads,\n            q_proj_weight=self.q_proj.weight,\n            k_proj_weight=self.k_proj.weight,\n            v_proj_weight=self.v_proj.weight,\n            in_proj_weight=None,\n            in_proj_bias=torch.cat([self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]),\n            bias_k=None,\n            bias_v=None,\n            add_zero_attn=False,\n            dropout_p=0,\n            out_proj_weight=self.c_proj.weight,\n            out_proj_bias=self.c_proj.bias,\n            use_separate_proj_weight=True,\n            training=self.training,\n            need_weights=False,\n        )\n\n        return x\n\n\nclass ModifiedResNet(nn.Module):\n    \"\"\"\n    A ResNet class that is similar to torchvision's but contains the following changes:\n    - There are now 3 \"stem\" convolutions as opposed to 1, with an average pool instead of a max pool.\n    - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 1\n    - The final pooling layer is a QKV attention instead of an average pool\n    \"\"\"\n\n    def __init__(self, layers, output_dim, heads, input_resolution=224, width=64):\n        super().__init__()\n        self.output_dim = output_dim\n        self.input_resolution = input_resolution\n\n        # the 3-layer stem\n        self.conv1 = nn.Conv2d(\n            3, width // 2, kernel_size=3, stride=2, padding=1, bias=False\n        )\n        self.bn1 = nn.BatchNorm2d(width // 2)\n        self.conv2 = nn.Conv2d(\n            width // 2, width // 2, kernel_size=3, padding=1, bias=False\n        )\n        self.bn2 = nn.BatchNorm2d(width // 2)\n        self.conv3 = nn.Conv2d(width // 2, width, kernel_size=3, padding=1, bias=False)\n        self.bn3 = nn.BatchNorm2d(width)\n        self.avgpool = nn.AvgPool2d(2)\n        self.relu = nn.ReLU(inplace=True)\n\n        # residual layers\n        self._inplanes = width  # this is a *mutable* variable used during construction\n        self.layer1 = self._make_layer(width, layers[0])\n        self.layer2 = self._make_layer(width * 2, layers[1], stride=2)\n        self.layer3 = self._make_layer(width * 4, layers[2], stride=2)\n        self.layer4 = self._make_layer(width * 8, layers[3], stride=1)\n        embed_dim = width * 32  # the ResNet feature dimension\n        self.attnpool = AttentionPool2d(input_resolution, embed_dim, heads, output_dim)\n\n    def _make_layer(self, planes, blocks, stride=1):\n        layers = [Bottleneck(self._inplanes, planes, stride)]\n\n        self._inplanes = planes * Bottleneck.expansion\n        for _ in range(1, blocks):\n            layers.append(Bottleneck(self._inplanes, planes))\n\n        return nn.Sequential(*layers)\n\n    def forward(self, x):\n        def stem(x):\n            for conv, bn in [\n                (self.conv1, self.bn1),\n                (self.conv2, self.bn2),\n                (self.conv3, self.bn3),\n            ]:\n                x = self.relu(bn(conv(x)))\n            x = self.avgpool(x)\n            return x\n\n        x = x.type(self.conv1.weight.dtype)\n        x = stem(x)\n        x = self.layer1(x)\n        x = self.layer2(x)\n        x3 = self.layer3(x)\n        x4 = self.layer4(x3)\n        xproj = self.attnpool(x4)\n\n        return x3, x4, xproj\n\n\nclass LayerNorm(nn.LayerNorm):\n    \"\"\"Subclass torch's LayerNorm to handle fp16.\"\"\"\n\n    def forward(self, x: torch.Tensor):\n        orig_type = x.dtype\n        for param in self.parameters():\n            if param.dtype == torch.float16:\n                param.data = param.data.to(torch.float32)\n        ret = super().forward(x.to(torch.float32))\n        return ret.to(orig_type)\n\n\nclass QuickGELU(nn.Module):\n    def forward(self, x: torch.Tensor):\n        return x * torch.sigmoid(1.702 * x)\n\n\nclass ResidualAttentionBlock(nn.Module):\n    def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None):\n        super().__init__()\n\n        self.attn = nn.MultiheadAttention(d_model, n_head)\n        self.ln_1 = LayerNorm(d_model)\n        self.mlp = nn.Sequential(OrderedDict([\n            (\"c_fc\", nn.Linear(d_model, d_model * 4)),\n            (\"gelu\", QuickGELU()),\n            (\"c_proj\", nn.Linear(d_model * 4, d_model))\n        ]))\n        self.ln_2 = LayerNorm(d_model)\n        self.attn_mask = attn_mask\n\n    def attention(self, x: torch.Tensor):\n        self.attn_mask = (\n            self.attn_mask.to(dtype=x.dtype, device=x.device)\n            if self.attn_mask is not None\n            else None\n        )\n        return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0]\n\n    def forward(self, x: torch.Tensor):\n        x = x + self.attention(self.ln_1(x))\n        x = x + self.mlp(self.ln_2(x))\n        return x\n\n\nclass Transformer(nn.Module):\n    def __init__(\n        self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None\n    ):\n        super().__init__()\n        self.width = width\n        self.layers = layers\n        self.resblocks = nn.Sequential(\n            *[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]\n        )\n\n    def forward(self, x: torch.Tensor):\n        return self.resblocks(x)\n\n\nclass VisionTransformer(nn.Module):\n    def __init__(\n        self,\n        h_resolution: int,\n        w_resolution: int,\n        patch_size: int,\n        stride_size: int,\n        width: int,\n        layers: int,\n        heads: int,\n        output_dim: int,\n    ):\n        super().__init__()\n        self.h_resolution = h_resolution\n        self.w_resolution = w_resolution\n        self.output_dim = output_dim\n        self.conv1 = nn.Conv2d(\n            in_channels=3,\n            out_channels=width,\n            kernel_size=patch_size,\n            stride=stride_size,\n            bias=False,\n        )\n\n        scale = width**-0.5\n        self.class_embedding = nn.Parameter(scale * torch.randn(width))\n        self.positional_embedding = nn.Parameter(\n            scale * torch.randn(h_resolution * w_resolution + 1, width)\n        )\n        self.ln_pre = LayerNorm(width)\n\n        self.transformer = Transformer(width, layers, heads)\n\n        self.ln_post = LayerNorm(width)\n        self.proj = nn.Parameter(scale * torch.randn(width, output_dim))\n\n    def forward(self, x: torch.Tensor, cv_emb=None):\n        x = self.conv1(x)  # shape = [*, width, grid, grid]\n        x = x.reshape(x.shape[0], x.shape[1], -1)  # shape = [*, width, grid ** 2]\n        x = x.permute(0, 2, 1)  # shape = [*, grid ** 2, width]\n        x = torch.cat(\n            [\n                self.class_embedding.to(x.dtype) +\n                # shape = [*, grid ** 2 + 1, width]\n                torch.zeros(x.shape[0], 1, x.shape[-1], dtype=x.dtype, device=x.device),\n                x,\n            ],\n            dim=1,\n        )\n        if cv_emb is not None:\n            x[:, 0] = x[:, 0] + cv_emb\n        x = x + self.positional_embedding.to(x.dtype)\n        x = self.ln_pre(x)\n\n        x = x.permute(1, 0, 2)  # NLD -> LND\n\n        x11 = self.transformer.resblocks[:11](x)\n        x12 = self.transformer.resblocks[11](x11)\n        x11 = x11.permute(1, 0, 2)  # LND -> NLD\n        x12 = x12.permute(1, 0, 2)  # LND -> NLD\n\n        x12 = self.ln_post(x12)\n\n        if self.proj is not None:\n            xproj = x12 @ self.proj\n\n        return x11, x12, xproj\n\n\nclass CLIP(nn.Module):\n    def __init__(self,\n        embed_dim: int,\n        # vision\n        image_resolution: int,\n        vision_layers: Union[Tuple[int, int, int, int], int],\n        vision_width: int,\n        vision_patch_size: int,\n        vision_stride_size: int,\n        # text\n        context_length: int,\n        vocab_size: int,\n        transformer_width: int,\n        transformer_heads: int,\n        transformer_layers: int,\n        h_resolution: int,\n        w_resolution: int,\n    ):\n        super().__init__()\n\n        self.context_length = context_length\n\n        if isinstance(vision_layers, (tuple, list)):\n            vision_heads = vision_width * 32 // 64\n            self.visual = ModifiedResNet(\n                layers=vision_layers,\n                output_dim=embed_dim,\n                heads=vision_heads,\n                input_resolution=h_resolution * w_resolution,\n                width=vision_width,\n            )\n        else:\n            vision_heads = vision_width // 64\n            self.visual = VisionTransformer(\n                h_resolution=h_resolution,\n                w_resolution=w_resolution,\n                patch_size=vision_patch_size,\n                stride_size=vision_stride_size,\n                width=vision_width,\n                layers=vision_layers,\n                heads=vision_heads,\n                output_dim=embed_dim,\n            )\n\n        self.transformer = Transformer(\n            width=transformer_width,\n            layers=transformer_layers,\n            heads=transformer_heads,\n            attn_mask=self.build_attention_mask(),\n        )\n\n        self.vocab_size = vocab_size\n        self.token_embedding = nn.Embedding(vocab_size, transformer_width)\n        self.positional_embedding = nn.Parameter(\n            torch.empty(self.context_length, transformer_width)\n        )\n        self.ln_final = LayerNorm(transformer_width)\n\n        self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim))\n        self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07))\n\n        self.initialize_parameters()\n\n    def initialize_parameters(self):\n        nn.init.normal_(self.token_embedding.weight, std=0.02)\n        nn.init.normal_(self.positional_embedding, std=0.01)\n\n        if isinstance(self.visual, ModifiedResNet):\n            if self.visual.attnpool is not None:\n                std = self.visual.attnpool.c_proj.in_features**-0.5\n                nn.init.normal_(self.visual.attnpool.q_proj.weight, std=std)\n                nn.init.normal_(self.visual.attnpool.k_proj.weight, std=std)\n                nn.init.normal_(self.visual.attnpool.v_proj.weight, std=std)\n                nn.init.normal_(self.visual.attnpool.c_proj.weight, std=std)\n\n            for resnet_block in [\n                self.visual.layer1,\n                self.visual.layer2,\n                self.visual.layer3,\n                self.visual.layer4,\n            ]:\n                for name, param in resnet_block.named_parameters():\n                    if name.endswith(\"bn3.weight\"):\n                        nn.init.zeros_(param)\n\n        proj_std = (self.transformer.width**-0.5) * (\n            (2 * self.transformer.layers) ** -0.5\n        )\n        attn_std = self.transformer.width**-0.5\n        fc_std = (2 * self.transformer.width) ** -0.5\n        for block in self.transformer.resblocks:\n            nn.init.normal_(block.attn.in_proj_weight, std=attn_std)\n            nn.init.normal_(block.attn.out_proj.weight, std=proj_std)\n            nn.init.normal_(block.mlp.c_fc.weight, std=fc_std)\n            nn.init.normal_(block.mlp.c_proj.weight, std=proj_std)\n\n        if self.text_projection is not None:\n            nn.init.normal_(self.text_projection, std=self.transformer.width**-0.5)\n\n    def build_attention_mask(self):\n        # lazily create causal attention mask, with full attention between the vision tokens\n        # pytorch uses additive attention mask; fill with -inf\n        mask = torch.empty(self.context_length, self.context_length)\n        mask.fill_(float(\"-inf\"))\n        mask.triu_(1)  # zero out the lower diagonal\n        return mask\n\n    @property\n    def dtype(self):\n        return self.visual.conv1.weight.dtype\n\n    def encode_image(self, image):\n        return self.visual(image.type(self.dtype))\n\n    def encode_text(self, text):\n        x = self.token_embedding(text).type(self.dtype)\n\n        x = x + self.positional_embedding.type(self.dtype)\n        x = x.permute(1, 0, 2)\n        x = self.transformer(x)\n        x = x.permute(1, 0, 2)\n        x = self.ln_final(x).type(self.dtype)\n\n        x = x[torch.arange(x.shape[0]), text.argmax(dim=-1)] @ self.text_projection\n\n        return x\n\n    def forward(self, image, text):\n        image_features = self.encode_image(image)\n        text_features = self.encode_text(text)\n\n        # normalized features\n        image_features = image_features / image_features.norm(dim=-1, keepdim=True)\n        text_features = text_features / text_features.norm(dim=-1, keepdim=True)\n\n        # cosine similarity as logits\n        logit_scale = self.logit_scale.exp()\n        logits_per_image = logit_scale * image_features @ text_features.t()\n        logits_per_text = logit_scale * text_features @ image_features.t()\n\n        # shape = [global_batch_size, global_batch_size]\n        return logits_per_image, logits_per_text\n\n\ndef convert_weights(model: nn.Module):\n    \"\"\"Convert applicable model parameters to fp16\"\"\"\n\n    def _convert_weights_to_fp16(l):\n        if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)):\n            l.weight.data = l.weight.data.float()\n            if l.bias is not None:\n                l.bias.data = l.bias.data.float()\n\n        if isinstance(l, nn.MultiheadAttention):\n            for attr in [\n                *[f\"{s}_proj_weight\" for s in [\"in\", \"q\", \"k\", \"v\"]],\n                \"in_proj_bias\",\n                \"bias_k\",\n                \"bias_v\",\n            ]:\n                tensor = getattr(l, attr)\n                if tensor is not None:\n                    tensor.data = tensor.data.float()\n\n        for name in [\"text_projection\", \"proj\"]:\n            if hasattr(l, name):\n                attr = getattr(l, name)\n                if attr is not None:\n                    attr.data = attr.data.float()\n\n    model.apply(_convert_weights_to_fp16)\n\n\ndef build_model(\n    state_dict: dict, h_resolution: int, w_resolution: int, vision_stride_size: int\n):\n    vit = \"visual.proj\" in state_dict\n\n    if vit:\n        vision_width = state_dict[\"visual.conv1.weight\"].shape[0]\n        vision_layers = len(\n            [\n                k\n                for k in state_dict.keys()\n                if k.startswith(\"visual.\") and k.endswith(\".attn.in_proj_weight\")\n            ]\n        )\n        vision_patch_size = state_dict[\"visual.conv1.weight\"].shape[-1]\n        grid_size = round(\n            (state_dict[\"visual.positional_embedding\"].shape[0] - 1) ** 0.5\n        )\n        image_resolution = vision_patch_size * grid_size\n    else:  # RN50\n        counts: list = [\n            len(\n                set(\n                    k.split(\".\")[2]\n                    for k in state_dict\n                    if k.startswith(f\"visual.layer{b}\")\n                )\n            )\n            for b in [1, 2, 3, 4]\n        ]\n        vision_layers = tuple(counts)\n        vision_width = state_dict[\"visual.layer1.0.conv1.weight\"].shape[0]\n        output_width = round(\n            (state_dict[\"visual.attnpool.positional_embedding\"].shape[0] - 1) ** 0.5\n        )\n        vision_patch_size = None\n        assert (\n            output_width**2 + 1\n            == state_dict[\"visual.attnpool.positional_embedding\"].shape[0]\n        )\n        image_resolution = output_width * 32\n\n    embed_dim = state_dict[\"text_projection\"].shape[1]\n    context_length = state_dict[\"positional_embedding\"].shape[0]  # 77 (77,512)\n    vocab_size = state_dict[\"token_embedding.weight\"].shape[0]\n    transformer_width = state_dict[\"ln_final.weight\"].shape[0]\n    transformer_heads = transformer_width // 64\n    transformer_layers = len(\n        set(\n            k.split(\".\")[2] for k in state_dict if k.startswith(\"transformer.resblocks\")\n        )\n    )\n\n    model = CLIP(\n        embed_dim,\n        image_resolution,\n        vision_layers,\n        vision_width,\n        vision_patch_size,\n        vision_stride_size,\n        context_length,\n        vocab_size,\n        transformer_width,\n        transformer_heads,\n        transformer_layers,\n        h_resolution,\n        w_resolution,\n    )\n    if vit:\n        state_dict[\"visual.positional_embedding\"] = resize_pos_embed(\n            state_dict[\"visual.positional_embedding\"],\n            model.visual.positional_embedding,\n            h_resolution,\n            w_resolution,\n        )\n    else:  # RN50\n        state_dict[\"visual.attnpool.positional_embedding\"] = resize_pos_embed(\n            state_dict[\"visual.attnpool.positional_embedding\"],\n            model.visual.attnpool.positional_embedding,\n            h_resolution,\n            w_resolution,\n        )\n\n    for key in [\"input_resolution\", \"context_length\", \"vocab_size\"]:\n        if key in state_dict:\n            del state_dict[key]\n\n    convert_weights(model)\n\n    model.load_state_dict(state_dict)\n    return model.eval()\n\n\nimport math\n\n\ndef resize_pos_embed(posemb, posemb_new, hight, width):\n    # Rescale the grid of position embeddings when loading from state_dict. Adapted from\n    # https://github.com/google-research/vision_transformer/blob/00883dd691c63a6830751563748663526e811cee/vit_jax/checkpoint.py#L224\n    print(\"Resized position embedding: %s to %s\", posemb.shape, posemb_new.shape)\n\n    ntok_new = posemb_new.shape[0]  # 129,2048\n\n    posemb_token, posemb_grid = posemb[:1], posemb[1:]\n    ntok_new -= 1\n\n    gs_old = int(math.sqrt(len(posemb_grid)))  # 14\n    print(\"Position embedding resize to height:{} width: {}\".format(hight, width))\n    posemb_grid = posemb_grid.reshape(1, gs_old, gs_old, -1).permute(0, 3, 1, 2)\n    posemb_grid = F.interpolate(posemb_grid, size=(hight, width), mode=\"bilinear\")\n    posemb_grid = posemb_grid.permute(0, 2, 3, 1).reshape(1, hight * width, -1)\n    posemb = torch.cat([posemb_token, posemb_grid.squeeze()], dim=0)\n    return posemb\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/clip/simple_tokenizer.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport gzip\nimport html\nfrom functools import lru_cache\n\nimport ftfy\nimport regex as re\n\nfrom boxmot.utils import BOXMOT\n\n\n@lru_cache()\ndef default_bpe():\n    return BOXMOT / \"reid/backbones/clip/clip/bpe_simple_vocab_16e6.txt.gz\"\n\n\n@lru_cache()\ndef bytes_to_unicode():\n    \"\"\"\n    Returns list of utf-8 byte and a corresponding list of unicode strings.\n    The reversible bpe codes work on unicode strings.\n    This means you need a large # of unicode characters in your vocab if you want to avoid UNKs.\n    When you're at something like a 10B token dataset you end up needing around 5K for decent coverage.\n    This is a signficant percentage of your normal, say, 32K bpe vocab.\n    To avoid that, we want lookup tables between utf-8 bytes and unicode strings.\n    And avoids mapping to whitespace/control characters the bpe code barfs on.\n    \"\"\"\n    bs = (\n        list(range(ord(\"!\"), ord(\"~\") + 1))\n        + list(range(ord(\"¡\"), ord(\"¬\") + 1))\n        + list(range(ord(\"®\"), ord(\"ÿ\") + 1))\n    )\n    cs = bs[:]\n    n = 0\n    for b in range(2**8):\n        if b not in bs:\n            bs.append(b)\n            cs.append(2**8 + n)\n            n += 1\n    cs = [chr(n) for n in cs]\n    return dict(zip(bs, cs))\n\n\ndef get_pairs(word):\n    \"\"\"Return set of symbol pairs in a word.\n    Word is represented as tuple of symbols (symbols being variable-length strings).\n    \"\"\"\n    pairs = set()\n    prev_char = word[0]\n    for char in word[1:]:\n        pairs.add((prev_char, char))\n        prev_char = char\n    return pairs\n\n\ndef basic_clean(text):\n    text = ftfy.fix_text(text)\n    text = html.unescape(html.unescape(text))\n    return text.strip()\n\n\ndef whitespace_clean(text):\n    text = re.sub(r\"\\s+\", \" \", text)\n    text = text.strip()\n    return text\n\n\nclass SimpleTokenizer(object):\n    def __init__(self, bpe_path: str = default_bpe()):\n        self.byte_encoder = bytes_to_unicode()\n        self.byte_decoder = {v: k for k, v in self.byte_encoder.items()}\n        merges = gzip.open(bpe_path).read().decode(\"utf-8\").split(\"\\n\")\n        merges = merges[1 : 49152 - 256 - 2 + 1]\n        merges = [tuple(merge.split()) for merge in merges]\n        vocab = list(bytes_to_unicode().values())\n        vocab = vocab + [v + \"</w>\" for v in vocab]\n        for merge in merges:\n            vocab.append(\"\".join(merge))\n        vocab.extend([\"<|startoftext|>\", \"<|endoftext|>\"])\n        self.encoder = dict(zip(vocab, range(len(vocab))))\n        self.decoder = {v: k for k, v in self.encoder.items()}\n        self.bpe_ranks = dict(zip(merges, range(len(merges))))\n        self.cache = {\n            \"<|startoftext|>\": \"<|startoftext|>\",\n            \"<|endoftext|>\": \"<|endoftext|>\",\n        }\n        self.pat = re.compile(\n            r\"\"\"<\\|startoftext\\|>|<\\|endoftext\\|>|'s|'t|'re|'ve|'m|'ll|'d|[\\p{L}]+|[\\p{N}]|[^\\s\\p{L}\\p{N}]+\"\"\",\n            re.IGNORECASE,\n        )  # noqa: E501\n\n    def bpe(self, token):\n        if token in self.cache:\n            return self.cache[token]\n        word = tuple(token[:-1]) + (token[-1] + \"</w>\",)\n        pairs = get_pairs(word)\n\n        if not pairs:\n            return token + \"</w>\"\n\n        while True:\n            bigram = min(pairs, key=lambda pair: self.bpe_ranks.get(pair, float(\"inf\")))\n            if bigram not in self.bpe_ranks:\n                break\n            first, second = bigram\n            new_word = []\n            i = 0\n            while i < len(word):\n                try:\n                    j = word.index(first, i)\n                    new_word.extend(word[i:j])\n                    i = j\n                except Exception:\n\n                    new_word.extend(word[i:])\n                    break\n\n                if word[i] == first and i < len(word) - 1 and word[i + 1] == second:\n                    new_word.append(first + second)\n                    i += 2\n                else:\n                    new_word.append(word[i])\n                    i += 1\n            new_word = tuple(new_word)\n            word = new_word\n            if len(word) == 1:\n                break\n            else:\n                pairs = get_pairs(word)\n        word = \" \".join(word)\n        self.cache[token] = word\n        return word\n\n    def encode(self, text):\n        bpe_tokens = []\n        text = whitespace_clean(basic_clean(text)).lower()\n        for token in re.findall(self.pat, text):\n            token = \"\".join(self.byte_encoder[b] for b in token.encode(\"utf-8\"))\n            bpe_tokens.extend(\n                self.encoder[bpe_token] for bpe_token in self.bpe(token).split(\" \")\n            )\n        return bpe_tokens\n\n    def decode(self, tokens):\n        text = \"\".join([self.decoder[token] for token in tokens])\n        text = (\n            bytearray([self.byte_decoder[c] for c in text])\n            .decode(\"utf-8\", errors=\"replace\")\n            .replace(\"</w>\", \" \")\n        )\n        return text\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/config/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/config/defaults.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom yacs.config import CfgNode as CN\n\n# -----------------------------------------------------------------------------\n# Convention about Training / Test specific parameters\n# -----------------------------------------------------------------------------\n# Whenever an argument can be either used for training or for testing, the\n# corresponding name will be post-fixed by a _TRAIN for a training parameter,\n\n# -----------------------------------------------------------------------------\n# Config definition\n# -----------------------------------------------------------------------------\n\n_C = CN()\n# -----------------------------------------------------------------------------\n# MODEL\n# -----------------------------------------------------------------------------\n_C.MODEL = CN()\n# Using cuda or cpu for training\n_C.MODEL.DEVICE = \"cuda\"\n# ID number of GPU\n_C.MODEL.DEVICE_ID = \"0\"\n# Name of backbone\n_C.MODEL.NAME = \"ViT-B-16\"\n# Last stride of backbone\n_C.MODEL.LAST_STRIDE = 1\n# Path to pretrained model of backbone\n_C.MODEL.PRETRAIN_PATH = \"/home/mikel.brostrom/boxmot/clip_market1501.pt\"\n\n# Use ImageNet pretrained model to initialize backbone or use self trained model to initialize the whole model\n# Options: 'imagenet' , 'self' , 'finetune'\n_C.MODEL.PRETRAIN_CHOICE = \"imagenet\"\n\n# If train with BNNeck, options: 'bnneck' or 'no'\n_C.MODEL.NECK = \"bnneck\"\n# If train loss include center loss, options: 'yes' or 'no'. Loss with center loss has different optimizer configuration\n_C.MODEL.IF_WITH_CENTER = \"no\"\n\n_C.MODEL.ID_LOSS_TYPE = \"softmax\"\n_C.MODEL.ID_LOSS_WEIGHT = 1.0\n_C.MODEL.TRIPLET_LOSS_WEIGHT = 1.0\n_C.MODEL.I2T_LOSS_WEIGHT = 1.0\n\n_C.MODEL.METRIC_LOSS_TYPE = \"triplet\"\n# If train with multi-gpu ddp mode, options: 'True', 'False'\n_C.MODEL.DIST_TRAIN = False\n# If train with soft triplet loss, options: 'True', 'False'\n_C.MODEL.NO_MARGIN = False\n# If train with label smooth, options: 'on', 'off'\n_C.MODEL.IF_LABELSMOOTH = \"on\"\n# If train with arcface loss, options: 'True', 'False'\n_C.MODEL.COS_LAYER = False\n\n# Transformer setting\n_C.MODEL.DROP_PATH = 0.1\n_C.MODEL.DROP_OUT = 0.0\n_C.MODEL.ATT_DROP_RATE = 0.0\n_C.MODEL.TRANSFORMER_TYPE = \"None\"\n_C.MODEL.STRIDE_SIZE = [16, 16]\n\n# SIE Parameter\n_C.MODEL.SIE_COE = 3.0\n_C.MODEL.SIE_CAMERA = False\n_C.MODEL.SIE_VIEW = False\n\n# -----------------------------------------------------------------------------\n# INPUT\n# -----------------------------------------------------------------------------\n_C.INPUT = CN()\n# Size of the image during training\n_C.INPUT.SIZE_TRAIN = [256, 128]\n# Size of the image during test\n_C.INPUT.SIZE_TEST = [256, 128]\n# Random probability for image horizontal flip\n_C.INPUT.PROB = 0.5\n# Random probability for random erasing\n_C.INPUT.RE_PROB = 0.5\n# Values to be used for image normalization\n_C.INPUT.PIXEL_MEAN = [0.485, 0.456, 0.406]\n# Values to be used for image normalization\n_C.INPUT.PIXEL_STD = [0.229, 0.224, 0.225]\n# Value of padding size\n_C.INPUT.PADDING = 10\n\n# -----------------------------------------------------------------------------\n# Dataset\n# -----------------------------------------------------------------------------\n_C.DATASETS = CN()\n# List of the dataset names for training, as present in paths_catalog.py\n_C.DATASETS.NAMES = \"market1501\"\n# Root directory where datasets should be used (and downloaded if not found)\n_C.DATASETS.ROOT_DIR = \"../data\"\n\n\n# -----------------------------------------------------------------------------\n# DataLoader\n# -----------------------------------------------------------------------------\n_C.DATALOADER = CN()\n# Number of data loading threads\n_C.DATALOADER.NUM_WORKERS = 8\n# Sampler for data loading\n_C.DATALOADER.SAMPLER = \"softmax\"\n# Number of instance for one batch\n_C.DATALOADER.NUM_INSTANCE = 16\n\n# ---------------------------------------------------------------------------- #\n# Solver\n_C.SOLVER = CN()\n_C.SOLVER.SEED = 1234\n_C.SOLVER.MARGIN = 0.3\n\n# stage1\n# ---------------------------------------------------------------------------- #\n# Name of optimizer\n_C.SOLVER.STAGE1 = CN()\n\n_C.SOLVER.STAGE1.IMS_PER_BATCH = 64\n\n_C.SOLVER.STAGE1.OPTIMIZER_NAME = \"Adam\"\n# Number of max epoches\n_C.SOLVER.STAGE1.MAX_EPOCHS = 100\n# Base learning rate\n_C.SOLVER.STAGE1.BASE_LR = 3e-4\n# Momentum\n_C.SOLVER.STAGE1.MOMENTUM = 0.9\n\n# Settings of weight decay\n_C.SOLVER.STAGE1.WEIGHT_DECAY = 0.0005\n_C.SOLVER.STAGE1.WEIGHT_DECAY_BIAS = 0.0005\n\n# warm up factor\n_C.SOLVER.STAGE1.WARMUP_FACTOR = 0.01\n#  warm up epochs\n_C.SOLVER.STAGE1.WARMUP_EPOCHS = 5\n_C.SOLVER.STAGE1.WARMUP_LR_INIT = 0.01\n_C.SOLVER.STAGE1.LR_MIN = 0.000016\n\n_C.SOLVER.STAGE1.WARMUP_ITERS = 500\n# method of warm up, option: 'constant','linear'\n_C.SOLVER.STAGE1.WARMUP_METHOD = \"linear\"\n\n_C.SOLVER.STAGE1.COSINE_MARGIN = 0.5\n_C.SOLVER.STAGE1.COSINE_SCALE = 30\n\n# epoch number of saving checkpoints\n_C.SOLVER.STAGE1.CHECKPOINT_PERIOD = 10\n# iteration of display training log\n_C.SOLVER.STAGE1.LOG_PERIOD = 100\n# epoch number of validation\n# Number of images per batch\n# This is global, so if we have 8 GPUs and IMS_PER_BATCH = 128, each GPU will\n# contain 16 images per batch\n# _C.SOLVER.STAGE1.IMS_PER_BATCH = 64\n_C.SOLVER.STAGE1.EVAL_PERIOD = 10\n\n# ---------------------------------------------------------------------------- #\n# Solver\n# stage1\n# ---------------------------------------------------------------------------- #\n_C.SOLVER.STAGE2 = CN()\n\n_C.SOLVER.STAGE2.IMS_PER_BATCH = 64\n# Name of optimizer\n_C.SOLVER.STAGE2.OPTIMIZER_NAME = \"Adam\"\n# Number of max epoches\n_C.SOLVER.STAGE2.MAX_EPOCHS = 100\n# Base learning rate\n_C.SOLVER.STAGE2.BASE_LR = 3e-4\n# Whether using larger learning rate for fc layer\n_C.SOLVER.STAGE2.LARGE_FC_LR = False\n# Factor of learning bias\n_C.SOLVER.STAGE2.BIAS_LR_FACTOR = 1\n# Momentum\n_C.SOLVER.STAGE2.MOMENTUM = 0.9\n# Margin of triplet loss\n# Learning rate of SGD to learn the centers of center loss\n_C.SOLVER.STAGE2.CENTER_LR = 0.5\n# Balanced weight of center loss\n_C.SOLVER.STAGE2.CENTER_LOSS_WEIGHT = 0.0005\n\n# Settings of weight decay\n_C.SOLVER.STAGE2.WEIGHT_DECAY = 0.0005\n_C.SOLVER.STAGE2.WEIGHT_DECAY_BIAS = 0.0005\n\n# decay rate of learning rate\n_C.SOLVER.STAGE2.GAMMA = 0.1\n# decay step of learning rate\n_C.SOLVER.STAGE2.STEPS = (40, 70)\n# warm up factor\n_C.SOLVER.STAGE2.WARMUP_FACTOR = 0.01\n#  warm up epochs\n_C.SOLVER.STAGE2.WARMUP_EPOCHS = 5\n_C.SOLVER.STAGE2.WARMUP_LR_INIT = 0.01\n_C.SOLVER.STAGE2.LR_MIN = 0.000016\n\n\n_C.SOLVER.STAGE2.WARMUP_ITERS = 500\n# method of warm up, option: 'constant','linear'\n_C.SOLVER.STAGE2.WARMUP_METHOD = \"linear\"\n\n_C.SOLVER.STAGE2.COSINE_MARGIN = 0.5\n_C.SOLVER.STAGE2.COSINE_SCALE = 30\n\n# epoch number of saving checkpoints\n_C.SOLVER.STAGE2.CHECKPOINT_PERIOD = 10\n# iteration of display training log\n_C.SOLVER.STAGE2.LOG_PERIOD = 100\n# epoch number of validation\n_C.SOLVER.STAGE2.EVAL_PERIOD = 10\n# Number of images per batch\n# This is global, so if we have 8 GPUs and IMS_PER_BATCH = 128, each GPU will\n# contain 16 images per batch\n\n# ---------------------------------------------------------------------------- #\n# TEST\n# ---------------------------------------------------------------------------- #\n\n_C.TEST = CN()\n# Number of images per batch during test\n_C.TEST.IMS_PER_BATCH = 128\n# If test with re-ranking, options: 'True','False'\n_C.TEST.RE_RANKING = False\n# Path to trained model\n_C.TEST.WEIGHT = \"\"\n# Which feature of BNNeck to be used for test, before or after BNNneck, options: 'before' or 'after'\n_C.TEST.NECK_FEAT = \"after\"\n# Whether feature is nomalized before test, if yes, it is equivalent to cosine distance\n_C.TEST.FEAT_NORM = \"yes\"\n\n# Name for saving the distmat after testing.\n_C.TEST.DIST_MAT = \"dist_mat.npy\"\n# Whether calculate the eval score option: 'True', 'False'\n_C.TEST.EVAL = False\n# ---------------------------------------------------------------------------- #\n# Misc options\n# ---------------------------------------------------------------------------- #\n# Path to checkpoint and saved log of trained model\n_C.OUTPUT_DIR = \"\"\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/config/defaults_base.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom yacs.config import CfgNode as CN\n\n# -----------------------------------------------------------------------------\n# Convention about Training / Test specific parameters\n# -----------------------------------------------------------------------------\n# Whenever an argument can be either used for training or for testing, the\n# corresponding name will be post-fixed by a _TRAIN for a training parameter,\n\n# -----------------------------------------------------------------------------\n# Config definition\n# -----------------------------------------------------------------------------\n\n_C = CN()\n# -----------------------------------------------------------------------------\n# MODEL\n# -----------------------------------------------------------------------------\n_C.MODEL = CN()\n# Using cuda or cpu for training\n_C.MODEL.DEVICE = \"cuda\"\n# ID number of GPU\n_C.MODEL.DEVICE_ID = \"0\"\n# Name of backbone\n_C.MODEL.NAME = \"resnet50\"\n# Last stride of backbone\n_C.MODEL.LAST_STRIDE = 1\n# Path to pretrained model of backbone\n_C.MODEL.PRETRAIN_PATH = \"\"\n\n# Use ImageNet pretrained model to initialize backbone or use self trained model to initialize the whole model\n# Options: 'imagenet' , 'self' , 'finetune'\n_C.MODEL.PRETRAIN_CHOICE = \"imagenet\"\n\n# If train with BNNeck, options: 'bnneck' or 'no'\n_C.MODEL.NECK = \"bnneck\"\n# If train loss include center loss, options: 'yes' or 'no'. Loss with center loss has different optimizer configuration\n_C.MODEL.IF_WITH_CENTER = \"no\"\n\n_C.MODEL.ID_LOSS_TYPE = \"softmax\"\n_C.MODEL.ID_LOSS_WEIGHT = 1.0\n_C.MODEL.TRIPLET_LOSS_WEIGHT = 1.0\n_C.MODEL.I2T_LOSS_WEIGHT = 1.0\n\n_C.MODEL.METRIC_LOSS_TYPE = \"triplet\"\n# If train with multi-gpu ddp mode, options: 'True', 'False'\n_C.MODEL.DIST_TRAIN = False\n# If train with soft triplet loss, options: 'True', 'False'\n_C.MODEL.NO_MARGIN = False\n# If train with label smooth, options: 'on', 'off'\n_C.MODEL.IF_LABELSMOOTH = \"on\"\n# If train with arcface loss, options: 'True', 'False'\n_C.MODEL.COS_LAYER = False\n\n# Transformer setting\n_C.MODEL.DROP_PATH = 0.1\n_C.MODEL.DROP_OUT = 0.0\n_C.MODEL.ATT_DROP_RATE = 0.0\n_C.MODEL.TRANSFORMER_TYPE = \"None\"\n_C.MODEL.STRIDE_SIZE = [16, 16]\n\n# SIE Parameter\n_C.MODEL.SIE_COE = 3.0\n_C.MODEL.SIE_CAMERA = False\n_C.MODEL.SIE_VIEW = False\n\n# -----------------------------------------------------------------------------\n# INPUT\n# -----------------------------------------------------------------------------\n_C.INPUT = CN()\n# Size of the image during training\n_C.INPUT.SIZE_TRAIN = [384, 128]\n# Size of the image during test\n_C.INPUT.SIZE_TEST = [384, 128]\n# Random probability for image horizontal flip\n_C.INPUT.PROB = 0.5\n# Random probability for random erasing\n_C.INPUT.RE_PROB = 0.5\n# Values to be used for image normalization\n_C.INPUT.PIXEL_MEAN = [0.485, 0.456, 0.406]\n# Values to be used for image normalization\n_C.INPUT.PIXEL_STD = [0.229, 0.224, 0.225]\n# Value of padding size\n_C.INPUT.PADDING = 10\n\n# -----------------------------------------------------------------------------\n# Dataset\n# -----------------------------------------------------------------------------\n_C.DATASETS = CN()\n# List of the dataset names for training, as present in paths_catalog.py\n_C.DATASETS.NAMES = \"market1501\"\n# Root directory where datasets should be used (and downloaded if not found)\n_C.DATASETS.ROOT_DIR = \"../data\"\n\n\n# -----------------------------------------------------------------------------\n# DataLoader\n# -----------------------------------------------------------------------------\n_C.DATALOADER = CN()\n# Number of data loading threads\n_C.DATALOADER.NUM_WORKERS = 8\n# Sampler for data loading\n_C.DATALOADER.SAMPLER = \"softmax\"\n# Number of instance for one batch\n_C.DATALOADER.NUM_INSTANCE = 16\n\n# ---------------------------------------------------------------------------- #\n# Solver\n# ---------------------------------------------------------------------------- #\n_C.SOLVER = CN()\n# Name of optimizer\n_C.SOLVER.OPTIMIZER_NAME = \"Adam\"\n# Number of max epoches\n_C.SOLVER.MAX_EPOCHS = 100\n# Base learning rate\n_C.SOLVER.BASE_LR = 3e-4\n# Whether using larger learning rate for fc layer\n_C.SOLVER.LARGE_FC_LR = False\n# Factor of learning bias\n_C.SOLVER.BIAS_LR_FACTOR = 1\n# Factor of learning bias\n_C.SOLVER.SEED = 1234\n# Momentum\n_C.SOLVER.MOMENTUM = 0.9\n# Margin of triplet loss\n_C.SOLVER.MARGIN = 0.3\n# Learning rate of SGD to learn the centers of center loss\n_C.SOLVER.CENTER_LR = 0.5\n# Balanced weight of center loss\n_C.SOLVER.CENTER_LOSS_WEIGHT = 0.0005\n\n# Settings of weight decay\n_C.SOLVER.WEIGHT_DECAY = 0.0005\n_C.SOLVER.WEIGHT_DECAY_BIAS = 0.0005\n\n# decay rate of learning rate\n_C.SOLVER.GAMMA = 0.1\n# decay step of learning rate\n_C.SOLVER.STEPS = (40, 70)\n# warm up factor\n_C.SOLVER.WARMUP_FACTOR = 0.01\n#  warm up epochs\n_C.SOLVER.WARMUP_EPOCHS = 5\n_C.SOLVER.WARMUP_LR_INIT = 0.01\n_C.SOLVER.LR_MIN = 0.000016\n\n\n_C.SOLVER.WARMUP_ITERS = 500\n# method of warm up, option: 'constant','linear'\n_C.SOLVER.WARMUP_METHOD = \"linear\"\n\n_C.SOLVER.COSINE_MARGIN = 0.5\n_C.SOLVER.COSINE_SCALE = 30\n\n# epoch number of saving checkpoints\n_C.SOLVER.CHECKPOINT_PERIOD = 10\n# iteration of display training log\n_C.SOLVER.LOG_PERIOD = 100\n# epoch number of validation\n_C.SOLVER.EVAL_PERIOD = 10\n# Number of images per batch\n# This is global, so if we have 8 GPUs and IMS_PER_BATCH = 128, each GPU will\n# contain 16 images per batch\n_C.SOLVER.IMS_PER_BATCH = 64\n\n# ---------------------------------------------------------------------------- #\n# TEST\n# ---------------------------------------------------------------------------- #\n\n_C.TEST = CN()\n# Number of images per batch during test\n_C.TEST.IMS_PER_BATCH = 128\n# If test with re-ranking, options: 'True','False'\n_C.TEST.RE_RANKING = False\n# Path to trained model\n_C.TEST.WEIGHT = \"\"\n# Which feature of BNNeck to be used for test, before or after BNNneck, options: 'before' or 'after'\n_C.TEST.NECK_FEAT = \"after\"\n# Whether feature is nomalized before test, if yes, it is equivalent to cosine distance\n_C.TEST.FEAT_NORM = \"yes\"\n\n# Name for saving the distmat after testing.\n_C.TEST.DIST_MAT = \"dist_mat.npy\"\n# Whether calculate the eval score option: 'True', 'False'\n_C.TEST.EVAL = False\n# ---------------------------------------------------------------------------- #\n# Misc options\n# ---------------------------------------------------------------------------- #\n# Path to checkpoint and saved log of trained model\n_C.OUTPUT_DIR = \"\"\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/make_model.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport torch\nimport torch.nn as nn\n\nfrom .clip.simple_tokenizer import SimpleTokenizer as _Tokenizer\n\n_tokenizer = _Tokenizer()\n\n\ndef weights_init_kaiming(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Linear\") != -1:\n        nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_out\")\n        nn.init.constant_(m.bias, 0.0)\n\n    elif classname.find(\"Conv\") != -1:\n        nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_in\")\n        if m.bias is not None:\n            nn.init.constant_(m.bias, 0.0)\n    elif classname.find(\"BatchNorm\") != -1:\n        if m.affine:\n            nn.init.constant_(m.weight, 1.0)\n            nn.init.constant_(m.bias, 0.0)\n\n\ndef weights_init_classifier(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Linear\") != -1:\n        nn.init.normal_(m.weight, std=0.001)\n        if m.bias:\n            nn.init.constant_(m.bias, 0.0)\n\n\nclass build_transformer(nn.Module):\n    def __init__(self, num_classes, camera_num, view_num, cfg):\n        super(build_transformer, self).__init__()\n        self.model_name = cfg.MODEL.NAME\n        self.cos_layer = cfg.MODEL.COS_LAYER\n        self.neck = cfg.MODEL.NECK\n        self.neck_feat = cfg.TEST.NECK_FEAT\n        if self.model_name == \"ViT-B-16\":\n            self.in_planes = 768\n            self.in_planes_proj = 512\n        elif self.model_name == \"RN50\":\n            self.in_planes = 2048\n            self.in_planes_proj = 1024\n        self.num_classes = num_classes\n        self.camera_num = camera_num\n        self.view_num = view_num\n        self.sie_coe = cfg.MODEL.SIE_COE\n\n        self.classifier = nn.Linear(self.in_planes, self.num_classes, bias=False)\n        self.classifier.apply(weights_init_classifier)\n        self.classifier_proj = nn.Linear(self.in_planes_proj, self.num_classes, bias=False)\n        self.classifier_proj.apply(weights_init_classifier)\n\n        self.bottleneck = nn.BatchNorm1d(self.in_planes)\n        self.bottleneck.bias.requires_grad_(False)\n        self.bottleneck.apply(weights_init_kaiming)\n        self.bottleneck_proj = nn.BatchNorm1d(self.in_planes_proj)\n        self.bottleneck_proj.bias.requires_grad_(False)\n        self.bottleneck_proj.apply(weights_init_kaiming)\n\n        self.h_resolution = int((cfg.INPUT.SIZE_TRAIN[0] - 16) // cfg.MODEL.STRIDE_SIZE[0] + 1)\n        self.w_resolution = int((cfg.INPUT.SIZE_TRAIN[1] - 16) // cfg.MODEL.STRIDE_SIZE[1] + 1)\n        self.vision_stride_size = cfg.MODEL.STRIDE_SIZE[0]\n        clip_model = load_clip_to_cpu(\n            self.model_name,\n            self.h_resolution,\n            self.w_resolution,\n            self.vision_stride_size,\n        )\n\n        self.image_encoder = clip_model.visual\n\n        # if cfg.MODEL.SIE_CAMERA and cfg.MODEL.SIE_VIEW:\n        #     self.cv_embed = nn.Parameter(torch.zeros(camera_num * view_num, self.in_planes))\n        #     trunc_normal_(self.cv_embed, std=.02)\n        #     print('camera number is : {}'.format(camera_num))\n        # elif cfg.MODEL.SIE_CAMERA:\n        #     self.cv_embed = nn.Parameter(torch.zeros(camera_num, self.in_planes))\n        #     trunc_normal_(self.cv_embed, std=.02)\n        #     print('camera number is : {}'.format(camera_num))\n        # elif cfg.MODEL.SIE_VIEW:\n        #     self.cv_embed = nn.Parameter(torch.zeros(view_num, self.in_planes))\n        #     trunc_normal_(self.cv_embed, std=.02)\n        #     print('camera number is : {}'.format(view_num))\n\n    def forward(self, x, label=None, cam_label=None, view_label=None):\n        if self.model_name == \"RN50\":\n            image_features_last, image_features, image_features_proj = (\n                self.image_encoder(x)\n            )  # B,512  B,128,512\n            img_feature_last = nn.functional.avg_pool2d(\n                image_features_last, image_features_last.shape[2:4]\n            ).view(x.shape[0], -1)\n            img_feature = nn.functional.avg_pool2d(\n                image_features, image_features.shape[2:4]\n            ).view(x.shape[0], -1)\n            img_feature_proj = image_features_proj[0]\n\n        elif self.model_name == \"ViT-B-16\":\n            if cam_label is not None and view_label is not None:\n                cv_embed = (\n                    self.sie_coe * self.cv_embed[cam_label * self.view_num + view_label]\n                )\n            elif cam_label is not None:\n                cv_embed = self.sie_coe * self.cv_embed[cam_label]\n            elif view_label is not None:\n                cv_embed = self.sie_coe * self.cv_embed[view_label]\n            else:\n                cv_embed = None\n            # B,512  B,128,512\n            image_features_last, image_features, image_features_proj = (\n                self.image_encoder(x, cv_embed)\n            )\n            img_feature_last = image_features_last[:, 0]\n            img_feature = image_features[:, 0]\n            img_feature_proj = image_features_proj[:, 0]\n\n        feat = self.bottleneck(img_feature)\n        feat_proj = self.bottleneck_proj(img_feature_proj)\n\n        if self.training:\n            cls_score = self.classifier(feat)\n            cls_score_proj = self.classifier_proj(feat_proj)\n            return [cls_score, cls_score_proj], [\n                img_feature_last,\n                img_feature,\n                img_feature_proj,\n            ]\n\n        else:\n            if self.neck_feat == \"after\":\n                # print(\"Test with feature after BN\")\n                return torch.cat([feat, feat_proj], dim=1)\n            else:\n                return torch.cat([img_feature, img_feature_proj], dim=1)\n\n    def load_param(self, trained_path):\n        param_dict = torch.load(trained_path, map_location=torch.device(\"cpu\"))\n        for i in self.state_dict():\n            self.state_dict()[i.replace(\"module.\", \"\")].copy_(param_dict[i])\n        # print('Loading pretrained model from {}'.format('/home/mikel.brostrom/boxmot/clip_market1501.pt'))\n\n    def load_param_finetune(self, model_path):\n        param_dict = torch.load(model_path)\n        for i in param_dict:\n            self.state_dict()[i].copy_(param_dict[i])\n        # print('Loading pretrained model for finetuning from {}'.format(model_path))\n\n\ndef make_model(cfg, num_class, camera_num, view_num):\n    model = build_transformer(num_class, camera_num, view_num, cfg)\n    return model\n\n\nfrom .clip import clip\n\n\ndef load_clip_to_cpu(backbone_name, h_resolution, w_resolution, vision_stride_size):\n    url = clip._MODELS[backbone_name]\n    model_path = clip._download(url)\n\n    try:\n        # loading JIT archive\n        model = torch.jit.load(model_path, map_location=\"cpu\").eval()\n        state_dict = None\n\n    except RuntimeError:\n        state_dict = torch.load(model_path, map_location=\"cpu\")\n\n    model = clip.build_model(\n        state_dict or model.state_dict(), h_resolution, w_resolution, vision_stride_size\n    )\n\n    return model\n"
  },
  {
    "path": "boxmot/reid/backbones/clip/make_model_clipreid.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport torch\nimport torch.nn as nn\n\nfrom .clip.simple_tokenizer import SimpleTokenizer as _Tokenizer\n\n_tokenizer = _Tokenizer()\n\n\ndef weights_init_kaiming(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Linear\") != -1:\n        nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_out\")\n        nn.init.constant_(m.bias, 0.0)\n\n    elif classname.find(\"Conv\") != -1:\n        nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_in\")\n        if m.bias is not None:\n            nn.init.constant_(m.bias, 0.0)\n    elif classname.find(\"BatchNorm\") != -1:\n        if m.affine:\n            nn.init.constant_(m.weight, 1.0)\n            nn.init.constant_(m.bias, 0.0)\n\n\ndef weights_init_classifier(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Linear\") != -1:\n        nn.init.normal_(m.weight, std=0.001)\n        if m.bias:\n            nn.init.constant_(m.bias, 0.0)\n\n\nclass TextEncoder(nn.Module):\n    def __init__(self, clip_model):\n        super().__init__()\n        self.transformer = clip_model.transformer\n        self.positional_embedding = clip_model.positional_embedding\n        self.ln_final = clip_model.ln_final\n        self.text_projection = clip_model.text_projection\n        self.dtype = clip_model.dtype\n\n    def forward(self, prompts, tokenized_prompts):\n        x = prompts + self.positional_embedding.type(self.dtype)\n        x = x.permute(1, 0, 2)  # NLD -> LND\n        x = self.transformer(x)\n        x = x.permute(1, 0, 2)  # LND -> NLD\n        x = self.ln_final(x).type(self.dtype)\n\n        # x.shape = [batch_size, n_ctx, transformer.width]\n        # take features from the eot embedding (eot_token is the highest number in each sequence)\n        x = x[torch.arange(x.shape[0]), tokenized_prompts.argmax(dim=-1)] @ self.text_projection\n        return x\n\n\nclass build_transformer(nn.Module):\n    def __init__(self, num_classes, camera_num, view_num, cfg):\n        super(build_transformer, self).__init__()\n        self.model_name = cfg.MODEL.NAME\n        self.cos_layer = cfg.MODEL.COS_LAYER\n        self.neck = cfg.MODEL.NECK\n        self.neck_feat = cfg.TEST.NECK_FEAT\n        if self.model_name == \"ViT-B-16\":\n            self.in_planes = 768\n            self.in_planes_proj = 512\n        elif self.model_name == \"RN50\":\n            self.in_planes = 2048\n            self.in_planes_proj = 1024\n        self.num_classes = num_classes\n        self.camera_num = camera_num\n        self.view_num = view_num\n        self.sie_coe = cfg.MODEL.SIE_COE\n\n        self.classifier = nn.Linear(self.in_planes, self.num_classes, bias=False)\n        self.classifier.apply(weights_init_classifier)\n        self.classifier_proj = nn.Linear(\n            self.in_planes_proj, self.num_classes, bias=False\n        )\n        self.classifier_proj.apply(weights_init_classifier)\n\n        self.bottleneck = nn.BatchNorm1d(self.in_planes)\n        self.bottleneck.bias.requires_grad_(False)\n        self.bottleneck.apply(weights_init_kaiming)\n        self.bottleneck_proj = nn.BatchNorm1d(self.in_planes_proj)\n        self.bottleneck_proj.bias.requires_grad_(False)\n        self.bottleneck_proj.apply(weights_init_kaiming)\n\n        self.h_resolution = int((cfg.INPUT.SIZE_TRAIN[0] - 16) // cfg.MODEL.STRIDE_SIZE[0] + 1)\n        self.w_resolution = int((cfg.INPUT.SIZE_TRAIN[1] - 16) // cfg.MODEL.STRIDE_SIZE[1] + 1)\n        self.vision_stride_size = cfg.MODEL.STRIDE_SIZE[0]\n        clip_model = load_clip_to_cpu(\n            self.model_name,\n            self.h_resolution,\n            self.w_resolution,\n            self.vision_stride_size,\n        )\n\n        self.image_encoder = clip_model.visual\n\n        # if cfg.MODEL.SIE_CAMERA and cfg.MODEL.SIE_VIEW:\n        #     self.cv_embed = nn.Parameter(torch.zeros(camera_num * view_num, self.in_planes))\n        #     trunc_normal_(self.cv_embed, std=.02)\n        #     print('camera number is : {}'.format(camera_num))\n        # elif cfg.MODEL.SIE_CAMERA:\n        #     self.cv_embed = nn.Parameter(torch.zeros(camera_num, self.in_planes))\n        #     trunc_normal_(self.cv_embed, std=.02)\n        #     print('camera number is : {}'.format(camera_num))\n        # elif cfg.MODEL.SIE_VIEW:\n        #     self.cv_embed = nn.Parameter(torch.zeros(view_num, self.in_planes))\n        #     trunc_normal_(self.cv_embed, std=.02)\n        #     print('camera number is : {}'.format(view_num))\n\n        dataset_name = cfg.DATASETS.NAMES\n        self.prompt_learner = PromptLearner(\n            num_classes, dataset_name, clip_model.dtype, clip_model.token_embedding\n        )\n        self.text_encoder = TextEncoder(clip_model)\n\n    def forward(\n        self,\n        x=None,\n        label=None,\n        get_image=False,\n        get_text=False,\n        cam_label=None,\n        view_label=None,\n    ):\n        if get_text is True:\n            prompts = self.prompt_learner(label)\n            text_features = self.text_encoder(\n                prompts, self.prompt_learner.tokenized_prompts\n            )\n            return text_features\n\n        if get_image is True:\n            image_features_last, image_features, image_features_proj = self.image_encoder(x)\n            if self.model_name == \"RN50\":\n                return image_features_proj[0]\n            elif self.model_name == \"ViT-B-16\":\n                return image_features_proj[:, 0]\n\n        if self.model_name == \"RN50\":\n            image_features_last, image_features, image_features_proj = (\n                self.image_encoder(x)\n            )\n            img_feature_last = nn.functional.avg_pool2d(\n                image_features_last, image_features_last.shape[2:4]\n            ).view(x.shape[0], -1)\n            img_feature = nn.functional.avg_pool2d(\n                image_features, image_features.shape[2:4]\n            ).view(x.shape[0], -1)\n            img_feature_proj = image_features_proj[0]\n\n        elif self.model_name == \"ViT-B-16\":\n            if cam_label is not None and view_label is not None:\n                cv_embed = (\n                    self.sie_coe * self.cv_embed[cam_label * self.view_num + view_label]\n                )\n            elif cam_label is not None:\n                cv_embed = self.sie_coe * self.cv_embed[cam_label]\n            elif view_label is not None:\n                cv_embed = self.sie_coe * self.cv_embed[view_label]\n            else:\n                cv_embed = None\n            image_features_last, image_features, image_features_proj = self.image_encoder(x, cv_embed)\n            img_feature_last = image_features_last[:, 0]\n            img_feature = image_features[:, 0]\n            img_feature_proj = image_features_proj[:, 0]\n\n        feat = self.bottleneck(img_feature)\n        feat_proj = self.bottleneck_proj(img_feature_proj)\n\n        if self.training:\n            cls_score = self.classifier(feat)\n            cls_score_proj = self.classifier_proj(feat_proj)\n            return (\n                [cls_score, cls_score_proj],\n                [img_feature_last, img_feature, img_feature_proj],\n                img_feature_proj,\n            )\n\n        else:\n            if self.neck_feat == \"after\":\n                # print(\"Test with feature after BN\")\n                return torch.cat([feat, feat_proj], dim=1)\n            else:\n                return torch.cat([img_feature, img_feature_proj], dim=1)\n\n    def load_param(self, trained_path):\n        param_dict = torch.load(trained_path)\n        for i in param_dict:\n            self.state_dict()[i.replace(\"module.\", \"\")].copy_(param_dict[i])\n        print(\"Loaded pretrained model from {}\".format(trained_path))\n\n    def load_param_finetune(self, model_path):\n        param_dict = torch.load(model_path)\n        for i in param_dict:\n            self.state_dict()[i].copy_(param_dict[i])\n        print(\"Loading pretrained model for finetuning from {}\".format(model_path))\n\n\ndef make_model(cfg, num_class, camera_num, view_num):\n    model = build_transformer(num_class, camera_num, view_num, cfg)\n    return model\n\n\nfrom .clip import clip\n\n\ndef load_clip_to_cpu(backbone_name, h_resolution, w_resolution, vision_stride_size):\n    url = clip._MODELS[backbone_name]\n    model_path = clip._download(url)\n\n    try:\n        # loading JIT archive\n        model = torch.jit.load(model_path, map_location=\"cpu\").eval()\n        state_dict = None\n\n    except RuntimeError:\n        state_dict = torch.load(model_path, map_location=\"cpu\")\n\n    model = clip.build_model(\n        state_dict or model.state_dict(), h_resolution, w_resolution, vision_stride_size\n    )\n\n    return model\n\n\nclass PromptLearner(nn.Module):\n    def __init__(self, num_class, dataset_name, dtype, token_embedding):\n        super().__init__()\n        if dataset_name == \"VehicleID\" or dataset_name == \"veri\":\n            ctx_init = \"A photo of a X X X X vehicle.\"\n        else:\n            ctx_init = \"A photo of a X X X X person.\"\n\n        ctx_dim = 512\n        # use given words to initialize context vectors\n        ctx_init = ctx_init.replace(\"_\", \" \")\n        n_ctx = 4\n\n        tokenized_prompts = clip.tokenize(ctx_init).cuda()\n        with torch.no_grad():\n            embedding = token_embedding(tokenized_prompts).type(dtype)\n        self.tokenized_prompts = tokenized_prompts  # torch.Tensor\n\n        n_cls_ctx = 4\n        cls_vectors = torch.empty(num_class, n_cls_ctx, ctx_dim, dtype=dtype)\n        nn.init.normal_(cls_vectors, std=0.02)\n        self.cls_ctx = nn.Parameter(cls_vectors)\n\n        # These token vectors will be saved when in save_model(),\n        # but they should be ignored in load_model() as we want to use\n        # those computed using the current class names\n        self.register_buffer(\"token_prefix\", embedding[:, : n_ctx + 1, :])\n        self.register_buffer(\"token_suffix\", embedding[:, n_ctx + 1 + n_cls_ctx :, :])\n        self.num_class = num_class\n        self.n_cls_ctx = n_cls_ctx\n\n    def forward(self, label):\n        cls_ctx = self.cls_ctx[label]\n        b = label.shape[0]\n        prefix = self.token_prefix.expand(b, -1, -1)\n        suffix = self.token_suffix.expand(b, -1, -1)\n\n        prompts = torch.cat(\n            [\n                prefix,  # (n_cls, 1, dim)\n                cls_ctx,  # (n_cls, n_ctx, dim)\n                suffix,  # (n_cls, *, dim)\n            ],\n            dim=1,\n        )\n\n        return prompts\n"
  },
  {
    "path": "boxmot/reid/backbones/hacnn.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\n__all__ = [\"HACNN\"]\n\n\nclass ConvBlock(nn.Module):\n    \"\"\"Basic convolutional block.\n\n    convolution + batch normalization + relu.\n\n    Args:\n        in_c (int): number of input channels.\n        out_c (int): number of output channels.\n        k (int or tuple): kernel size.\n        s (int or tuple): stride.\n        p (int or tuple): padding.\n    \"\"\"\n\n    def __init__(self, in_c, out_c, k, s=1, p=0):\n        super(ConvBlock, self).__init__()\n        self.conv = nn.Conv2d(in_c, out_c, k, stride=s, padding=p)\n        self.bn = nn.BatchNorm2d(out_c)\n\n    def forward(self, x):\n        return F.relu(self.bn(self.conv(x)))\n\n\nclass InceptionA(nn.Module):\n    def __init__(self, in_channels, out_channels):\n        super(InceptionA, self).__init__()\n        mid_channels = out_channels // 4\n\n        self.stream1 = nn.Sequential(\n            ConvBlock(in_channels, mid_channels, 1),\n            ConvBlock(mid_channels, mid_channels, 3, p=1),\n        )\n        self.stream2 = nn.Sequential(\n            ConvBlock(in_channels, mid_channels, 1),\n            ConvBlock(mid_channels, mid_channels, 3, p=1),\n        )\n        self.stream3 = nn.Sequential(\n            ConvBlock(in_channels, mid_channels, 1),\n            ConvBlock(mid_channels, mid_channels, 3, p=1),\n        )\n        self.stream4 = nn.Sequential(\n            nn.AvgPool2d(3, stride=1, padding=1),\n            ConvBlock(in_channels, mid_channels, 1),\n        )\n\n    def forward(self, x):\n        s1 = self.stream1(x)\n        s2 = self.stream2(x)\n        s3 = self.stream3(x)\n        s4 = self.stream4(x)\n        y = torch.cat([s1, s2, s3, s4], dim=1)\n        return y\n\n\nclass InceptionB(nn.Module):\n    def __init__(self, in_channels, out_channels):\n        super(InceptionB, self).__init__()\n        mid_channels = out_channels // 4\n\n        self.stream1 = nn.Sequential(\n            ConvBlock(in_channels, mid_channels, 1),\n            ConvBlock(mid_channels, mid_channels, 3, s=2, p=1),\n        )\n        self.stream2 = nn.Sequential(\n            ConvBlock(in_channels, mid_channels, 1),\n            ConvBlock(mid_channels, mid_channels, 3, p=1),\n            ConvBlock(mid_channels, mid_channels, 3, s=2, p=1),\n        )\n        self.stream3 = nn.Sequential(\n            nn.MaxPool2d(3, stride=2, padding=1),\n            ConvBlock(in_channels, mid_channels * 2, 1),\n        )\n\n    def forward(self, x):\n        s1 = self.stream1(x)\n        s2 = self.stream2(x)\n        s3 = self.stream3(x)\n        y = torch.cat([s1, s2, s3], dim=1)\n        return y\n\n\nclass SpatialAttn(nn.Module):\n    \"\"\"Spatial Attention (Sec. 3.1.I.1)\"\"\"\n\n    def __init__(self):\n        super(SpatialAttn, self).__init__()\n        self.conv1 = ConvBlock(1, 1, 3, s=2, p=1)\n        self.conv2 = ConvBlock(1, 1, 1)\n\n    def forward(self, x):\n        # global cross-channel averaging\n        x = x.mean(1, keepdim=True)\n        # 3-by-3 conv\n        x = self.conv1(x)\n        # bilinear resizing\n        x = F.interpolate(\n            x, (x.size(2) * 2, x.size(3) * 2), mode=\"bilinear\", align_corners=True\n        )\n        # scaling conv\n        x = self.conv2(x)\n        return x\n\n\nclass ChannelAttn(nn.Module):\n    \"\"\"Channel Attention (Sec. 3.1.I.2)\"\"\"\n\n    def __init__(self, in_channels, reduction_rate=16):\n        super(ChannelAttn, self).__init__()\n        assert in_channels % reduction_rate == 0\n        self.conv1 = ConvBlock(in_channels, in_channels // reduction_rate, 1)\n        self.conv2 = ConvBlock(in_channels // reduction_rate, in_channels, 1)\n\n    def forward(self, x):\n        # squeeze operation (global average pooling)\n        x = F.avg_pool2d(x, x.size()[2:])\n        # excitation operation (2 conv layers)\n        x = self.conv1(x)\n        x = self.conv2(x)\n        return x\n\n\nclass SoftAttn(nn.Module):\n    \"\"\"Soft Attention (Sec. 3.1.I)\n\n    Aim: Spatial Attention + Channel Attention\n\n    Output: attention maps with shape identical to input.\n    \"\"\"\n\n    def __init__(self, in_channels):\n        super(SoftAttn, self).__init__()\n        self.spatial_attn = SpatialAttn()\n        self.channel_attn = ChannelAttn(in_channels)\n        self.conv = ConvBlock(in_channels, in_channels, 1)\n\n    def forward(self, x):\n        y_spatial = self.spatial_attn(x)\n        y_channel = self.channel_attn(x)\n        y = y_spatial * y_channel\n        y = torch.sigmoid(self.conv(y))\n        return y\n\n\nclass HardAttn(nn.Module):\n    \"\"\"Hard Attention (Sec. 3.1.II)\"\"\"\n\n    def __init__(self, in_channels):\n        super(HardAttn, self).__init__()\n        self.fc = nn.Linear(in_channels, 4 * 2)\n        self.init_params()\n\n    def init_params(self):\n        self.fc.weight.data.zero_()\n        self.fc.bias.data.copy_(\n            torch.tensor([0, -0.75, 0, -0.25, 0, 0.25, 0, 0.75], dtype=torch.float)\n        )\n\n    def forward(self, x):\n        # squeeze operation (global average pooling)\n        x = F.avg_pool2d(x, x.size()[2:]).view(x.size(0), x.size(1))\n        # predict transformation parameters\n        theta = torch.tanh(self.fc(x))\n        theta = theta.view(-1, 4, 2)\n        return theta\n\n\nclass HarmAttn(nn.Module):\n    \"\"\"Harmonious Attention (Sec. 3.1)\"\"\"\n\n    def __init__(self, in_channels):\n        super(HarmAttn, self).__init__()\n        self.soft_attn = SoftAttn(in_channels)\n        self.hard_attn = HardAttn(in_channels)\n\n    def forward(self, x):\n        y_soft_attn = self.soft_attn(x)\n        theta = self.hard_attn(x)\n        return y_soft_attn, theta\n\n\nclass HACNN(nn.Module):\n    \"\"\"Harmonious Attention Convolutional Neural Network.\n\n    Reference:\n        Li et al. Harmonious Attention Network for Person Re-identification. CVPR 2018.\n\n    Public keys:\n        - ``hacnn``: HACNN.\n    \"\"\"\n\n    # Args:\n    #    num_classes (int): number of classes to predict\n    #    nchannels (list): number of channels AFTER concatenation\n    #    feat_dim (int): feature dimension for a single stream\n    #    learn_region (bool): whether to learn region features (i.e. local branch)\n\n    def __init__(\n        self,\n        num_classes,\n        loss=\"softmax\",\n        nchannels=[128, 256, 384],\n        feat_dim=512,\n        learn_region=True,\n        use_gpu=True,\n        **kwargs,\n    ):\n        super(HACNN, self).__init__()\n        self.loss = loss\n        self.learn_region = learn_region\n        self.use_gpu = use_gpu\n\n        self.conv = ConvBlock(3, 32, 3, s=2, p=1)\n\n        # Construct Inception + HarmAttn blocks\n        # ============== Block 1 ==============\n        self.inception1 = nn.Sequential(\n            InceptionA(32, nchannels[0]),\n            InceptionB(nchannels[0], nchannels[0]),\n        )\n        self.ha1 = HarmAttn(nchannels[0])\n\n        # ============== Block 2 ==============\n        self.inception2 = nn.Sequential(\n            InceptionA(nchannels[0], nchannels[1]),\n            InceptionB(nchannels[1], nchannels[1]),\n        )\n        self.ha2 = HarmAttn(nchannels[1])\n\n        # ============== Block 3 ==============\n        self.inception3 = nn.Sequential(\n            InceptionA(nchannels[1], nchannels[2]),\n            InceptionB(nchannels[2], nchannels[2]),\n        )\n        self.ha3 = HarmAttn(nchannels[2])\n\n        self.fc_global = nn.Sequential(\n            nn.Linear(nchannels[2], feat_dim),\n            nn.BatchNorm1d(feat_dim),\n            nn.ReLU(),\n        )\n        self.classifier_global = nn.Linear(feat_dim, num_classes)\n\n        if self.learn_region:\n            self.init_scale_factors()\n            self.local_conv1 = InceptionB(32, nchannels[0])\n            self.local_conv2 = InceptionB(nchannels[0], nchannels[1])\n            self.local_conv3 = InceptionB(nchannels[1], nchannels[2])\n            self.fc_local = nn.Sequential(\n                nn.Linear(nchannels[2] * 4, feat_dim),\n                nn.BatchNorm1d(feat_dim),\n                nn.ReLU(),\n            )\n            self.classifier_local = nn.Linear(feat_dim, num_classes)\n            self.feat_dim = feat_dim * 2\n        else:\n            self.feat_dim = feat_dim\n\n    def init_scale_factors(self):\n        # initialize scale factors (s_w, s_h) for four regions\n        self.scale_factors = []\n        self.scale_factors.append(torch.tensor([[1, 0], [0, 0.25]], dtype=torch.float))\n        self.scale_factors.append(torch.tensor([[1, 0], [0, 0.25]], dtype=torch.float))\n        self.scale_factors.append(torch.tensor([[1, 0], [0, 0.25]], dtype=torch.float))\n        self.scale_factors.append(torch.tensor([[1, 0], [0, 0.25]], dtype=torch.float))\n\n    def stn(self, x, theta):\n        \"\"\"Performs spatial transform\n\n        x: (batch, channel, height, width)\n        theta: (batch, 2, 3)\n        \"\"\"\n        grid = F.affine_grid(theta, x.size())\n        x = F.grid_sample(x, grid)\n        return x\n\n    def transform_theta(self, theta_i, region_idx):\n        \"\"\"Transforms theta to include (s_w, s_h), resulting in (batch, 2, 3)\"\"\"\n        scale_factors = self.scale_factors[region_idx]\n        theta = torch.zeros(theta_i.size(0), 2, 3)\n        theta[:, :, :2] = scale_factors\n        theta[:, :, -1] = theta_i\n        if self.use_gpu:\n            theta = theta.to(next(self.parameters()).device)\n        return theta\n\n    def forward(self, x):\n        assert (\n            x.size(2) == 160 and x.size(3) == 64\n        ), \"Input size does not match, expected (160, 64) but got ({}, {})\".format(\n            x.size(2), x.size(3)\n        )\n        x = self.conv(x)\n\n        # ============== Block 1 ==============\n        # global branch\n        x1 = self.inception1(x)\n        x1_attn, x1_theta = self.ha1(x1)\n        x1_out = x1 * x1_attn\n        # local branch\n        if self.learn_region:\n            x1_local_list = []\n            for region_idx in range(4):\n                x1_theta_i = x1_theta[:, region_idx, :]\n                x1_theta_i = self.transform_theta(x1_theta_i, region_idx)\n                x1_trans_i = self.stn(x, x1_theta_i)\n                x1_trans_i = F.interpolate(\n                    x1_trans_i, (24, 28), mode=\"bilinear\", align_corners=True\n                )\n                x1_local_i = self.local_conv1(x1_trans_i)\n                x1_local_list.append(x1_local_i)\n\n        # ============== Block 2 ==============\n        # Block 2\n        # global branch\n        x2 = self.inception2(x1_out)\n        x2_attn, x2_theta = self.ha2(x2)\n        x2_out = x2 * x2_attn\n        # local branch\n        if self.learn_region:\n            x2_local_list = []\n            for region_idx in range(4):\n                x2_theta_i = x2_theta[:, region_idx, :]\n                x2_theta_i = self.transform_theta(x2_theta_i, region_idx)\n                x2_trans_i = self.stn(x1_out, x2_theta_i)\n                x2_trans_i = F.interpolate(\n                    x2_trans_i, (12, 14), mode=\"bilinear\", align_corners=True\n                )\n                x2_local_i = x2_trans_i + x1_local_list[region_idx]\n                x2_local_i = self.local_conv2(x2_local_i)\n                x2_local_list.append(x2_local_i)\n\n        # ============== Block 3 ==============\n        # Block 3\n        # global branch\n        x3 = self.inception3(x2_out)\n        x3_attn, x3_theta = self.ha3(x3)\n        x3_out = x3 * x3_attn\n        # local branch\n        if self.learn_region:\n            x3_local_list = []\n            for region_idx in range(4):\n                x3_theta_i = x3_theta[:, region_idx, :]\n                x3_theta_i = self.transform_theta(x3_theta_i, region_idx)\n                x3_trans_i = self.stn(x2_out, x3_theta_i)\n                x3_trans_i = F.interpolate(\n                    x3_trans_i, (6, 7), mode=\"bilinear\", align_corners=True\n                )\n                x3_local_i = x3_trans_i + x2_local_list[region_idx]\n                x3_local_i = self.local_conv3(x3_local_i)\n                x3_local_list.append(x3_local_i)\n\n        # ============== Feature generation ==============\n        # global branch\n        x_global = F.avg_pool2d(x3_out, x3_out.size()[2:]).view(\n            x3_out.size(0), x3_out.size(1)\n        )\n        x_global = self.fc_global(x_global)\n        # local branch\n        if self.learn_region:\n            x_local_list = []\n            for region_idx in range(4):\n                x_local_i = x3_local_list[region_idx]\n                x_local_i = F.avg_pool2d(x_local_i, x_local_i.size()[2:]).view(\n                    x_local_i.size(0), -1\n                )\n                x_local_list.append(x_local_i)\n            x_local = torch.cat(x_local_list, 1)\n            x_local = self.fc_local(x_local)\n\n        if not self.training:\n            # l2 normalization before concatenation\n            if self.learn_region:\n                x_global = x_global / x_global.norm(p=2, dim=1, keepdim=True)\n                x_local = x_local / x_local.norm(p=2, dim=1, keepdim=True)\n                return torch.cat([x_global, x_local], 1)\n            else:\n                return x_global\n\n        prelogits_global = self.classifier_global(x_global)\n        if self.learn_region:\n            prelogits_local = self.classifier_local(x_local)\n\n        if self.loss == \"softmax\":\n            if self.learn_region:\n                return (prelogits_global, prelogits_local)\n            else:\n                return prelogits_global\n\n        elif self.loss == \"triplet\":\n            if self.learn_region:\n                return (prelogits_global, prelogits_local), (x_global, x_local)\n            else:\n                return prelogits_global, x_global\n\n        else:\n            raise KeyError(\"Unsupported loss: {}\".format(self.loss))\n"
  },
  {
    "path": "boxmot/reid/backbones/lmbn/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/reid/backbones/lmbn/attention.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport math\nimport random\n\nimport torch\nfrom torch import nn\nfrom torch.nn import Conv2d, Module, Parameter, ReLU, Sigmoid, Softmax\nfrom torch.nn import functional as F\n\ntorch_ver = torch.__version__[:3]\n\n__all__ = [\n    \"BatchDrop\",\n    \"BatchFeatureErase_Top\",\n    \"BatchRandomErasing\",\n    \"PAM_Module\",\n    \"CAM_Module\",\n    \"Dual_Module\",\n    \"SE_Module\",\n]\n\n\nclass BatchRandomErasing(nn.Module):\n    def __init__(\n        self, probability=0.5, sl=0.02, sh=0.4, r1=0.3, mean=[0.4914, 0.4822, 0.4465]\n    ):\n        super(BatchRandomErasing, self).__init__()\n\n        self.probability = probability\n        self.mean = mean\n        self.sl = sl\n        self.sh = sh\n        self.r1 = r1\n\n    def forward(self, img):\n        if self.training:\n            if random.uniform(0, 1) > self.probability:\n                return img\n\n            for attempt in range(100):\n                area = img.size()[2] * img.size()[3]\n\n                target_area = random.uniform(self.sl, self.sh) * area\n                aspect_ratio = random.uniform(self.r1, 1 / self.r1)\n\n                h = int(round(math.sqrt(target_area * aspect_ratio)))\n                w = int(round(math.sqrt(target_area / aspect_ratio)))\n\n                if w < img.size()[3] and h < img.size()[2]:\n                    x1 = random.randint(0, img.size()[2] - h)\n                    y1 = random.randint(0, img.size()[3] - w)\n                    if img.size()[1] == 3:\n                        img[:, 0, x1 : x1 + h, y1 : y1 + w] = self.mean[0]\n                        img[:, 1, x1 : x1 + h, y1 : y1 + w] = self.mean[1]\n                        img[:, 2, x1 : x1 + h, y1 : y1 + w] = self.mean[2]\n                    else:\n                        img[:, 0, x1 : x1 + h, y1 : y1 + w] = self.mean[0]\n                    return img\n\n        return img\n\n\nclass BatchDrop(nn.Module):\n    \"\"\"\n    Ref: Batch DropBlock Network for Person Re-identification and Beyond\n    https://github.com/daizuozhuo/batch-dropblock-network/blob/master/models/networks.py\n    Created by: daizuozhuo\n    \"\"\"\n\n    def __init__(self, h_ratio, w_ratio):\n        super(BatchDrop, self).__init__()\n        self.h_ratio = h_ratio\n        self.w_ratio = w_ratio\n\n    def forward(self, x):\n        if self.training:\n            h, w = x.size()[-2:]\n            rh = round(self.h_ratio * h)\n            rw = round(self.w_ratio * w)\n            sx = random.randint(0, h - rh)\n            sy = random.randint(0, w - rw)\n            mask = x.new_ones(x.size())\n            mask[:, :, sx : sx + rh, sy : sy + rw] = 0\n            x = x * mask\n        return x\n\n\nclass BatchDropTop(nn.Module):\n    \"\"\"\n    Ref: Top-DB-Net: Top DropBlock for Activation Enhancement in Person Re-Identification\n    https://github.com/RQuispeC/top-dropblock/blob/master/torchreid/models/bdnet.py\n    Created by: RQuispeC\n\n    \"\"\"\n\n    def __init__(self, h_ratio):\n        super(BatchDropTop, self).__init__()\n        self.h_ratio = h_ratio\n\n    def forward(self, x, visdrop=False):\n        if self.training or visdrop:\n            b, c, h, w = x.size()\n            rh = round(self.h_ratio * h)\n            act = (x**2).sum(1)\n            act = act.view(b, h * w)\n            act = F.normalize(act, p=2, dim=1)\n            act = act.view(b, h, w)\n            max_act, _ = act.max(2)\n            ind = torch.argsort(max_act, 1)\n            ind = ind[:, -rh:]\n            mask = []\n            for i in range(b):\n                rmask = torch.ones(h)\n                rmask[ind[i]] = 0\n                mask.append(rmask.unsqueeze(0))\n            mask = torch.cat(mask)\n            mask = torch.repeat_interleave(mask, w, 1).view(b, h, w)\n            mask = torch.repeat_interleave(mask, c, 0).view(b, c, h, w)\n            if x.is_cuda:\n                mask = mask.cuda()\n            if visdrop:\n                return mask\n            x = x * mask\n        return x\n\n\nclass BatchFeatureErase_Top(nn.Module):\n    \"\"\"\n    Ref: Top-DB-Net: Top DropBlock for Activation Enhancement in Person Re-Identification\n    https://github.com/RQuispeC/top-dropblock/blob/master/torchreid/models/bdnet.py\n    Created by: RQuispeC\n\n    \"\"\"\n\n    def __init__(\n        self,\n        channels,\n        bottleneck_type,\n        h_ratio=0.33,\n        w_ratio=1.0,\n        double_bottleneck=False,\n    ):\n        super(BatchFeatureErase_Top, self).__init__()\n\n        self.drop_batch_bottleneck = bottleneck_type(channels, 512)\n\n        self.drop_batch_drop_basic = BatchDrop(h_ratio, w_ratio)\n        self.drop_batch_drop_top = BatchDropTop(h_ratio)\n\n    def forward(self, x, drop_top=True, bottleneck_features=True, visdrop=False):\n        features = self.drop_batch_bottleneck(x)\n\n        if drop_top:\n            x = self.drop_batch_drop_top(features, visdrop=visdrop)\n        else:\n            x = self.drop_batch_drop_basic(features, visdrop=visdrop)\n        if visdrop:\n            return x  # x is dropmask\n        if bottleneck_features:\n            return x, features\n        else:\n            return x\n\n\nclass SE_Module(Module):\n    def __init__(self, channels, reduction=4):\n        super(SE_Module, self).__init__()\n        self.fc1 = Conv2d(channels, channels // reduction, kernel_size=1, padding=0)\n        self.relu = ReLU(inplace=True)\n        self.fc2 = Conv2d(channels // reduction, channels, kernel_size=1, padding=0)\n        self.sigmoid = Sigmoid()\n\n    def forward(self, x):\n        module_input = x\n        x = self.fc1(x)\n        x = self.relu(x)\n        x = self.fc2(x)\n        x = self.sigmoid(x)\n        return module_input * x\n\n\nclass PAM_Module(Module):\n    \"\"\"Position attention module\"\"\"\n\n    # Ref from SAGAN\n\n    def __init__(self, in_dim):\n        super(PAM_Module, self).__init__()\n        self.chanel_in = in_dim\n\n        self.query_conv = Conv2d(\n            in_channels=in_dim, out_channels=in_dim // 8, kernel_size=1\n        )\n        self.key_conv = Conv2d(\n            in_channels=in_dim, out_channels=in_dim // 8, kernel_size=1\n        )\n        self.value_conv = Conv2d(in_channels=in_dim, out_channels=in_dim, kernel_size=1)\n        self.gamma = Parameter(torch.zeros(1))\n\n        self.softmax = Softmax(dim=-1)\n\n    def forward(self, x):\n        \"\"\"\n        inputs :\n            x : input feature maps( B X C X H X W)\n        returns :\n            out : attention value + input feature\n            attention: B X (HxW) X (HxW)\n        \"\"\"\n        m_batchsize, C, height, width = x.size()\n        proj_query = (\n            self.query_conv(x).view(m_batchsize, -1, width * height).permute(0, 2, 1)\n        )\n        proj_key = self.key_conv(x).view(m_batchsize, -1, width * height)\n        energy = torch.bmm(proj_query, proj_key)\n        attention = self.softmax(energy)\n        proj_value = self.value_conv(x).view(m_batchsize, -1, width * height)\n\n        out = torch.bmm(proj_value, attention.permute(0, 2, 1))\n        out = out.view(m_batchsize, C, height, width)\n\n        out = self.gamma * out + x\n        return out\n\n\nclass CAM_Module(Module):\n    \"\"\"Channel attention module\"\"\"\n\n    def __init__(self, in_dim):\n        super(CAM_Module, self).__init__()\n        self.chanel_in = in_dim\n\n        self.gamma = Parameter(torch.zeros(1))\n        self.softmax = Softmax(dim=-1)\n\n    def forward(self, x):\n        \"\"\"\n        inputs :\n            x : input feature maps( B X C X H X W)\n        returns :\n            out : attention value + input feature\n            attention: B X C X C\n        \"\"\"\n        m_batchsize, C, height, width = x.size()\n        proj_query = x.view(m_batchsize, C, -1)\n        proj_key = x.view(m_batchsize, C, -1).permute(0, 2, 1)\n        # proj_key = x.view(m_batchsize, C, -1).permute(0, 2, 1).contiguous()\n        energy = torch.bmm(proj_query, proj_key)\n        energy_new = torch.max(energy, -1, keepdim=True)[0].expand_as(energy) - energy\n        attention = self.softmax(energy_new)\n        proj_value = x.view(m_batchsize, C, -1)\n\n        out = torch.bmm(attention, proj_value)\n        out = out.view(m_batchsize, C, height, width)\n\n        out = self.gamma * out + x\n        return out\n\n\nclass Dual_Module(Module):\n    \"\"\"\n    # Created by: CASIA IVA\n    # Email: jliu@nlpr.ia.ac.cn\n    # Copyright (c) 2018\n\n    # Reference: Dual Attention Network for Scene Segmentation\n    # https://arxiv.org/pdf/1809.02983.pdf\n    # https://github.com/junfu1115/DANet/blob/master/encoding/nn/attention.py\n    \"\"\"\n\n    def __init__(self, in_dim):\n        super(Dual_Module).__init__()\n        self.indim = in_dim\n        self.pam = PAM_Module(in_dim)\n        self.cam = CAM_Module(in_dim)\n\n    def forward(self, x):\n        out1 = self.pam(x)\n        out2 = self.cam(x)\n        return out1 + out2\n"
  },
  {
    "path": "boxmot/reid/backbones/lmbn/bnneck.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom torch import nn\n\n\nclass BNNeck(nn.Module):\n    def __init__(self, input_dim, class_num, return_f=False):\n        super(BNNeck, self).__init__()\n        self.return_f = return_f\n        self.bn = nn.BatchNorm1d(input_dim)\n        self.bn.bias.requires_grad_(False)\n        self.classifier = nn.Linear(input_dim, class_num, bias=False)\n        self.bn.apply(self.weights_init_kaiming)\n        self.classifier.apply(self.weights_init_classifier)\n\n    def forward(self, x):\n        before_neck = x.view(x.size(0), x.size(1))\n        after_neck = self.bn(before_neck)\n\n        if self.return_f:\n            score = self.classifier(after_neck)\n            return after_neck, score, before_neck\n        else:\n            x = self.classifier(x)\n            return x\n\n    def weights_init_kaiming(self, m):\n        classname = m.__class__.__name__\n        if classname.find(\"Linear\") != -1:\n            nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_out\")\n            nn.init.constant_(m.bias, 0.0)\n        elif classname.find(\"Conv\") != -1:\n            nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_in\")\n            if m.bias is not None:\n                nn.init.constant_(m.bias, 0.0)\n        elif classname.find(\"BatchNorm\") != -1:\n            if m.affine:\n                nn.init.constant_(m.weight, 1.0)\n                nn.init.constant_(m.bias, 0.0)\n\n    def weights_init_classifier(self, m):\n        classname = m.__class__.__name__\n        if classname.find(\"Linear\") != -1:\n            nn.init.normal_(m.weight, std=0.001)\n            if m.bias:\n                nn.init.constant_(m.bias, 0.0)\n\n\nclass BNNeck3(nn.Module):\n    def __init__(self, input_dim, class_num, feat_dim, return_f=False):\n        super(BNNeck3, self).__init__()\n        self.return_f = return_f\n        # self.reduction = nn.Linear(input_dim, feat_dim)\n        # self.bn = nn.BatchNorm1d(feat_dim)\n\n        self.reduction = nn.Conv2d(input_dim, feat_dim, 1, bias=False)\n        self.bn = nn.BatchNorm1d(feat_dim)\n\n        self.bn.bias.requires_grad_(False)\n        self.classifier = nn.Linear(feat_dim, class_num, bias=False)\n        self.bn.apply(self.weights_init_kaiming)\n        self.classifier.apply(self.weights_init_classifier)\n\n    def forward(self, x):\n        x = self.reduction(x)\n        # before_neck = x.squeeze(dim=3).squeeze(dim=2)\n        # after_neck = self.bn(x).squeeze(dim=3).squeeze(dim=2)\n        before_neck = x.view(x.size(0), x.size(1))\n        after_neck = self.bn(before_neck)\n        if self.return_f:\n            score = self.classifier(after_neck)\n            return after_neck, score, before_neck\n        else:\n            x = self.classifier(x)\n            return x\n\n    def weights_init_kaiming(self, m):\n        classname = m.__class__.__name__\n        if classname.find(\"Linear\") != -1:\n            nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_out\")\n            nn.init.constant_(m.bias, 0.0)\n        elif classname.find(\"Conv\") != -1:\n            nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_in\")\n            if m.bias is not None:\n                nn.init.constant_(m.bias, 0.0)\n        elif classname.find(\"BatchNorm\") != -1:\n            if m.affine:\n                nn.init.constant_(m.weight, 1.0)\n                nn.init.constant_(m.bias, 0.0)\n\n    def weights_init_classifier(self, m):\n        classname = m.__class__.__name__\n        if classname.find(\"Linear\") != -1:\n            nn.init.normal_(m.weight, std=0.001)\n            if m.bias:\n                nn.init.constant_(m.bias, 0.0)\n\n\n# Defines the new fc layer and classification layer\n# |--Linear--|--bn--|--relu--|--Linear--|\n\n\nclass ClassBlock(nn.Module):\n    def __init__(\n        self,\n        input_dim,\n        class_num,\n        droprate=0,\n        relu=False,\n        bnorm=True,\n        num_bottleneck=512,\n        linear=True,\n        return_f=False,\n    ):\n        super(ClassBlock, self).__init__()\n        self.return_f = return_f\n        add_block = []\n        if linear:\n            add_block += [nn.Linear(input_dim, num_bottleneck)]\n        else:\n            num_bottleneck = input_dim\n        if bnorm:\n            add_block += [nn.BatchNorm1d(num_bottleneck)]\n        if relu:\n            add_block += [nn.LeakyReLU(0.1)]\n        if droprate > 0:\n            add_block += [nn.Dropout(p=droprate)]\n        add_block = nn.Sequential(*add_block)\n        add_block.apply(self.weights_init_kaiming)\n\n        classifier = []\n        classifier += [nn.Linear(num_bottleneck, class_num)]\n        classifier = nn.Sequential(*classifier)\n        classifier.apply(self.weights_init_classifier)\n\n        self.add_block = add_block\n        self.classifier = classifier\n\n    def forward(self, x):\n        x = self.add_block(x.squeeze(3).squeeze(2))\n        if self.return_f:\n            f = x\n            x = self.classifier(x)\n            return f, x, f\n        else:\n            x = self.classifier(x)\n            return x\n\n    def weights_init_kaiming(self, m):\n        classname = m.__class__.__name__\n        # print(classname)\n        if classname.find(\"Conv\") != -1:\n            # For old pytorch, you may use kaiming_normal.\n            nn.init.kaiming_normal_(m.weight.data, a=0, mode=\"fan_in\")\n        elif classname.find(\"Linear\") != -1:\n            nn.init.kaiming_normal_(m.weight.data, a=0, mode=\"fan_out\")\n            nn.init.constant_(m.bias.data, 0.0)\n        elif classname.find(\"BatchNorm1d\") != -1:\n            nn.init.normal_(m.weight.data, 1.0, 0.02)\n            nn.init.constant_(m.bias.data, 0.0)\n\n    def weights_init_classifier(self, m):\n        classname = m.__class__.__name__\n        if classname.find(\"Linear\") != -1:\n            nn.init.normal_(m.weight.data, std=0.001)\n            nn.init.constant_(m.bias.data, 0.0)\n"
  },
  {
    "path": "boxmot/reid/backbones/lmbn/lmbn_n.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport copy\n\nimport torch\nfrom torch import nn\n\nfrom boxmot.reid.backbones.lmbn.attention import BatchFeatureErase_Top\nfrom boxmot.reid.backbones.lmbn.bnneck import BNNeck, BNNeck3\nfrom boxmot.reid.backbones.osnet import OSBlock, osnet_x1_0\n\n\nclass LMBN_n(nn.Module):\n    def __init__(self, num_classes, loss, pretrained, use_gpu):\n        super(LMBN_n, self).__init__()\n\n        self.n_ch = 2\n        self.chs = 512 // self.n_ch\n        self.training = False\n\n        osnet = osnet_x1_0(pretrained=False)\n\n        self.backone = nn.Sequential(\n            osnet.conv1, osnet.maxpool, osnet.conv2, osnet.conv3[0]\n        )\n\n        conv3 = osnet.conv3[1:]\n\n        self.global_branch = nn.Sequential(\n            copy.deepcopy(conv3), copy.deepcopy(osnet.conv4), copy.deepcopy(osnet.conv5)\n        )\n\n        self.partial_branch = nn.Sequential(\n            copy.deepcopy(conv3), copy.deepcopy(osnet.conv4), copy.deepcopy(osnet.conv5)\n        )\n\n        self.channel_branch = nn.Sequential(\n            copy.deepcopy(conv3), copy.deepcopy(osnet.conv4), copy.deepcopy(osnet.conv5)\n        )\n\n        self.global_pooling = nn.AdaptiveMaxPool2d((1, 1))\n        self.partial_pooling = nn.AdaptiveAvgPool2d((2, 1))\n        self.channel_pooling = nn.AdaptiveAvgPool2d((1, 1))\n\n        reduction = BNNeck3(512, num_classes, 512, return_f=True)\n\n        self.reduction_0 = copy.deepcopy(reduction)\n        self.reduction_1 = copy.deepcopy(reduction)\n        self.reduction_2 = copy.deepcopy(reduction)\n        self.reduction_3 = copy.deepcopy(reduction)\n        self.reduction_4 = copy.deepcopy(reduction)\n\n        self.shared = nn.Sequential(\n            nn.Conv2d(self.chs, 512, 1, bias=False), nn.BatchNorm2d(512), nn.ReLU(True)\n        )\n        self.weights_init_kaiming(self.shared)\n\n        self.reduction_ch_0 = BNNeck(512, num_classes, return_f=True)\n        self.reduction_ch_1 = BNNeck(512, num_classes, return_f=True)\n\n        # if args.drop_block:\n        #     print('Using batch random erasing block.')\n        #     self.batch_drop_block = BatchRandomErasing()\n        # print('Using batch drop block.')\n        # self.batch_drop_block = BatchDrop(\n        #     h_ratio=args.h_ratio, w_ratio=args.w_ratio)\n        self.batch_drop_block = BatchFeatureErase_Top(512, OSBlock)\n\n        self.activation_map = False\n\n    def forward(self, x):\n        # if self.batch_drop_block is not None:\n        #     x = self.batch_drop_block(x)\n\n        x = self.backone(x)\n\n        glo = self.global_branch(x)\n        par = self.partial_branch(x)\n        cha = self.channel_branch(x)\n\n        if self.activation_map:\n            glo_ = glo\n\n        if self.batch_drop_block is not None:\n            glo_drop, glo = self.batch_drop_block(glo)\n\n        if self.activation_map:\n            _, _, h_par, _ = par.size()\n\n            fmap_p0 = par[:, :, : h_par // 2, :]\n            fmap_p1 = par[:, :, h_par // 2 :, :]\n            fmap_c0 = cha[:, : self.chs, :, :]\n            fmap_c1 = cha[:, self.chs :, :, :]\n            print(\"Generating activation maps...\")\n\n            return glo, glo_, fmap_c0, fmap_c1, fmap_p0, fmap_p1\n\n        glo_drop = self.global_pooling(glo_drop)\n        glo = self.channel_pooling(glo)  # shape:(batchsize, 512,1,1)\n        g_par = self.global_pooling(par)  # shape:(batchsize, 512,1,1)\n        p_par = self.partial_pooling(par)  # shape:(batchsize, 512,2,1)\n        cha = self.channel_pooling(cha)  # shape:(batchsize, 256,1,1)\n\n        p0 = p_par[:, :, 0:1, :]\n        p1 = p_par[:, :, 1:2, :]\n\n        f_glo = self.reduction_0(glo)\n        f_p0 = self.reduction_1(g_par)\n        f_p1 = self.reduction_2(p0)\n        f_p2 = self.reduction_3(p1)\n        f_glo_drop = self.reduction_4(glo_drop)\n\n        ################\n\n        c0 = cha[:, : self.chs, :, :]\n        c1 = cha[:, self.chs :, :, :]\n        c0 = self.shared(c0)\n        c1 = self.shared(c1)\n        f_c0 = self.reduction_ch_0(c0)\n        f_c1 = self.reduction_ch_1(c1)\n\n        ################\n\n        fea = [f_glo[-1], f_glo_drop[-1], f_p0[-1]]\n\n        if not self.training:\n            features = torch.stack(\n                [f_glo[0], f_glo_drop[0], f_p0[0], f_p1[0], f_p2[0], f_c0[0], f_c1[0]],\n                dim=2,\n            )\n            features = features.flatten(1, 2)\n            return features\n\n        return [\n            f_glo[1],\n            f_glo_drop[1],\n            f_p0[1],\n            f_p1[1],\n            f_p2[1],\n            f_c0[1],\n            f_c1[1],\n        ], fea\n\n    def weights_init_kaiming(self, m):\n        classname = m.__class__.__name__\n        if classname.find(\"Linear\") != -1:\n            nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_out\")\n            nn.init.constant_(m.bias, 0.0)\n        elif classname.find(\"Conv\") != -1:\n            nn.init.kaiming_normal_(m.weight, a=0, mode=\"fan_in\")\n            if m.bias is not None:\n                nn.init.constant_(m.bias, 0.0)\n        elif classname.find(\"BatchNorm\") != -1:\n            if m.affine:\n                nn.init.constant_(m.weight, 1.0)\n                nn.init.constant_(m.bias, 0.0)\n\n\nif __name__ == \"__main__\":\n    # Here I left a simple forward function.\n    # Test the model, before you train it.\n    import argparse\n\n    parser = argparse.ArgumentParser(description=\"MGN\")\n    parser.add_argument(\"--num_classes\", type=int, default=751, help=\"\")\n    parser.add_argument(\"--bnneck\", type=bool, default=True)\n    parser.add_argument(\"--pool\", type=str, default=\"max\")\n    parser.add_argument(\"--feats\", type=int, default=512)\n    parser.add_argument(\"--drop_block\", type=bool, default=True)\n    parser.add_argument(\"--w_ratio\", type=float, default=1.0, help=\"\")\n\n    args = parser.parse_args()\n    # net = MCMP_n(args)\n    # net.classifier = nn.Sequential()\n    # print([p for p in net.parameters()])\n    # a=filter(lambda p: p.requires_grad, net.parameters())\n    # print(a)\n\n    # print(net)\n    # input = Variable(torch.FloatTensor(8, 3, 384, 128))\n    # net.eval()\n    # output = net(input)\n    # print(output.shape)\n    print(\"net output size:\")\n    # print(len(output))\n"
  },
  {
    "path": "boxmot/reid/backbones/mlfn.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport torch\nimport torch.utils.model_zoo as model_zoo\nfrom torch import nn\nfrom torch.nn import functional as F\n\n__all__ = [\"mlfn\"]\n\nmodel_urls = {\n    # training epoch = 5, top1 = 51.6\n    \"imagenet\": \"https://mega.nz/#!YHxAhaxC!yu9E6zWl0x5zscSouTdbZu8gdFFytDdl-RAdD2DEfpk\",\n}\n\n\nclass MLFNBlock(nn.Module):\n    def __init__(self, in_channels, out_channels, stride, fsm_channels, groups=32):\n        super(MLFNBlock, self).__init__()\n        self.groups = groups\n        mid_channels = out_channels // 2\n\n        # Factor Modules\n        self.fm_conv1 = nn.Conv2d(in_channels, mid_channels, 1, bias=False)\n        self.fm_bn1 = nn.BatchNorm2d(mid_channels)\n        self.fm_conv2 = nn.Conv2d(\n            mid_channels,\n            mid_channels,\n            3,\n            stride=stride,\n            padding=1,\n            bias=False,\n            groups=self.groups,\n        )\n        self.fm_bn2 = nn.BatchNorm2d(mid_channels)\n        self.fm_conv3 = nn.Conv2d(mid_channels, out_channels, 1, bias=False)\n        self.fm_bn3 = nn.BatchNorm2d(out_channels)\n\n        # Factor Selection Module\n        self.fsm = nn.Sequential(\n            nn.AdaptiveAvgPool2d(1),\n            nn.Conv2d(in_channels, fsm_channels[0], 1),\n            nn.BatchNorm2d(fsm_channels[0]),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(fsm_channels[0], fsm_channels[1], 1),\n            nn.BatchNorm2d(fsm_channels[1]),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(fsm_channels[1], self.groups, 1),\n            nn.BatchNorm2d(self.groups),\n            nn.Sigmoid(),\n        )\n\n        self.downsample = None\n        if in_channels != out_channels or stride > 1:\n            self.downsample = nn.Sequential(\n                nn.Conv2d(in_channels, out_channels, 1, stride=stride, bias=False),\n                nn.BatchNorm2d(out_channels),\n            )\n\n    def forward(self, x):\n        residual = x\n        s = self.fsm(x)\n\n        # reduce dimension\n        x = self.fm_conv1(x)\n        x = self.fm_bn1(x)\n        x = F.relu(x, inplace=True)\n\n        # group convolution\n        x = self.fm_conv2(x)\n        x = self.fm_bn2(x)\n        x = F.relu(x, inplace=True)\n\n        # factor selection\n        b, c = x.size(0), x.size(1)\n        n = c // self.groups\n        ss = s.repeat(1, n, 1, 1)  # from (b, g, 1, 1) to (b, g*n=c, 1, 1)\n        ss = ss.view(b, n, self.groups, 1, 1)\n        ss = ss.permute(0, 2, 1, 3, 4).contiguous()\n        ss = ss.view(b, c, 1, 1)\n        x = ss * x\n\n        # recover dimension\n        x = self.fm_conv3(x)\n        x = self.fm_bn3(x)\n        x = F.relu(x, inplace=True)\n\n        if self.downsample is not None:\n            residual = self.downsample(residual)\n\n        return F.relu(residual + x, inplace=True), s\n\n\nclass MLFN(nn.Module):\n    \"\"\"Multi-Level Factorisation Net.\n\n    Reference:\n        Chang et al. Multi-Level Factorisation Net for\n        Person Re-Identification. CVPR 2018.\n\n    Public keys:\n        - ``mlfn``: MLFN (Multi-Level Factorisation Net).\n    \"\"\"\n\n    def __init__(\n        self,\n        num_classes,\n        loss=\"softmax\",\n        groups=32,\n        channels=[64, 256, 512, 1024, 2048],\n        embed_dim=1024,\n        **kwargs,\n    ):\n        super(MLFN, self).__init__()\n        self.loss = loss\n        self.groups = groups\n\n        # first convolutional layer\n        self.conv1 = nn.Conv2d(3, channels[0], 7, stride=2, padding=3)\n        self.bn1 = nn.BatchNorm2d(channels[0])\n        self.maxpool = nn.MaxPool2d(3, stride=2, padding=1)\n\n        # main body\n        self.feature = nn.ModuleList(\n            [\n                # layer 1-3\n                MLFNBlock(channels[0], channels[1], 1, [128, 64], self.groups),\n                MLFNBlock(channels[1], channels[1], 1, [128, 64], self.groups),\n                MLFNBlock(channels[1], channels[1], 1, [128, 64], self.groups),\n                # layer 4-7\n                MLFNBlock(channels[1], channels[2], 2, [256, 128], self.groups),\n                MLFNBlock(channels[2], channels[2], 1, [256, 128], self.groups),\n                MLFNBlock(channels[2], channels[2], 1, [256, 128], self.groups),\n                MLFNBlock(channels[2], channels[2], 1, [256, 128], self.groups),\n                # layer 8-13\n                MLFNBlock(channels[2], channels[3], 2, [512, 128], self.groups),\n                MLFNBlock(channels[3], channels[3], 1, [512, 128], self.groups),\n                MLFNBlock(channels[3], channels[3], 1, [512, 128], self.groups),\n                MLFNBlock(channels[3], channels[3], 1, [512, 128], self.groups),\n                MLFNBlock(channels[3], channels[3], 1, [512, 128], self.groups),\n                MLFNBlock(channels[3], channels[3], 1, [512, 128], self.groups),\n                # layer 14-16\n                MLFNBlock(channels[3], channels[4], 2, [512, 128], self.groups),\n                MLFNBlock(channels[4], channels[4], 1, [512, 128], self.groups),\n                MLFNBlock(channels[4], channels[4], 1, [512, 128], self.groups),\n            ]\n        )\n        self.global_avgpool = nn.AdaptiveAvgPool2d(1)\n\n        # projection functions\n        self.fc_x = nn.Sequential(\n            nn.Conv2d(channels[4], embed_dim, 1, bias=False),\n            nn.BatchNorm2d(embed_dim),\n            nn.ReLU(inplace=True),\n        )\n        self.fc_s = nn.Sequential(\n            nn.Conv2d(self.groups * 16, embed_dim, 1, bias=False),\n            nn.BatchNorm2d(embed_dim),\n            nn.ReLU(inplace=True),\n        )\n\n        self.classifier = nn.Linear(embed_dim, num_classes)\n\n        self.init_params()\n\n    def init_params(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight, mode=\"fan_out\", nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.BatchNorm2d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.Linear):\n                nn.init.normal_(m.weight, 0, 0.01)\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = self.bn1(x)\n        x = F.relu(x, inplace=True)\n        x = self.maxpool(x)\n\n        s_hat = []\n        for block in self.feature:\n            x, s = block(x)\n            s_hat.append(s)\n        s_hat = torch.cat(s_hat, 1)\n\n        x = self.global_avgpool(x)\n        x = self.fc_x(x)\n        s_hat = self.fc_s(s_hat)\n\n        v = (x + s_hat) * 0.5\n        v = v.view(v.size(0), -1)\n\n        if not self.training:\n            return v\n\n        y = self.classifier(v)\n\n        if self.loss == \"softmax\":\n            return y\n        elif self.loss == \"triplet\":\n            return y, v\n        else:\n            raise KeyError(\"Unsupported loss: {}\".format(self.loss))\n\n\ndef init_pretrained_weights(model, model_url):\n    \"\"\"Initializes model with pretrained weights.\n\n    Layers that don't match with pretrained layers in name or size are kept unchanged.\n    \"\"\"\n    pretrain_dict = model_zoo.load_url(model_url)\n    model_dict = model.state_dict()\n    pretrain_dict = {\n        k: v\n        for k, v in pretrain_dict.items()\n        if k in model_dict and model_dict[k].size() == v.size()\n    }\n    model_dict.update(pretrain_dict)\n    model.load_state_dict(model_dict)\n\n\ndef mlfn(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = MLFN(num_classes, loss, **kwargs)\n    if pretrained:\n        # init_pretrained_weights(model, model_urls['imagenet'])\n        import warnings\n\n        warnings.warn(\n            \"The imagenet pretrained weights need to be manually downloaded from {}\".format(\n                model_urls[\"imagenet\"]\n            )\n        )\n    return model\n"
  },
  {
    "path": "boxmot/reid/backbones/mobilenetv2.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport torch.utils.model_zoo as model_zoo\nfrom torch import nn\nfrom torch.nn import functional as F\n\n__all__ = [\"mobilenetv2_x1_0\", \"mobilenetv2_x1_4\"]\n\nmodel_urls = {\n    # 1.0: top-1 71.3\n    \"mobilenetv2_x1_0\": \"https://mega.nz/#!NKp2wAIA!1NH1pbNzY_M2hVk_hdsxNM1NUOWvvGPHhaNr-fASF6c\",\n    # 1.4: top-1 73.9\n    \"mobilenetv2_x1_4\": \"https://mega.nz/#!RGhgEIwS!xN2s2ZdyqI6vQ3EwgmRXLEW3khr9tpXg96G9SUJugGk\",\n}\n\n\nclass ConvBlock(nn.Module):\n    \"\"\"Basic convolutional block.\n\n    convolution (bias discarded) + batch normalization + relu6.\n\n    Args:\n        in_c (int): number of input channels.\n        out_c (int): number of output channels.\n        k (int or tuple): kernel size.\n        s (int or tuple): stride.\n        p (int or tuple): padding.\n        g (int): number of blocked connections from input channels\n            to output channels (default: 1).\n    \"\"\"\n\n    def __init__(self, in_c, out_c, k, s=1, p=0, g=1):\n        super(ConvBlock, self).__init__()\n        self.conv = nn.Conv2d(in_c, out_c, k, stride=s, padding=p, bias=False, groups=g)\n        self.bn = nn.BatchNorm2d(out_c)\n\n    def forward(self, x):\n        return F.relu6(self.bn(self.conv(x)))\n\n\nclass Bottleneck(nn.Module):\n    def __init__(self, in_channels, out_channels, expansion_factor, stride=1):\n        super(Bottleneck, self).__init__()\n        mid_channels = in_channels * expansion_factor\n        self.use_residual = stride == 1 and in_channels == out_channels\n        self.conv1 = ConvBlock(in_channels, mid_channels, 1)\n        self.dwconv2 = ConvBlock(\n            mid_channels, mid_channels, 3, stride, 1, g=mid_channels\n        )\n        self.conv3 = nn.Sequential(\n            nn.Conv2d(mid_channels, out_channels, 1, bias=False),\n            nn.BatchNorm2d(out_channels),\n        )\n\n    def forward(self, x):\n        m = self.conv1(x)\n        m = self.dwconv2(m)\n        m = self.conv3(m)\n        if self.use_residual:\n            return x + m\n        else:\n            return m\n\n\nclass MobileNetV2(nn.Module):\n    \"\"\"MobileNetV2.\n\n    Reference:\n        Sandler et al. MobileNetV2: Inverted Residuals and\n        Linear Bottlenecks. CVPR 2018.\n\n    Public keys:\n        - ``mobilenetv2_x1_0``: MobileNetV2 x1.0.\n        - ``mobilenetv2_x1_4``: MobileNetV2 x1.4.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_classes,\n        width_mult=1,\n        loss=\"softmax\",\n        fc_dims=None,\n        dropout_p=None,\n        **kwargs,\n    ):\n        super(MobileNetV2, self).__init__()\n        self.loss = loss\n        self.in_channels = int(32 * width_mult)\n        self.feature_dim = int(1280 * width_mult) if width_mult > 1 else 1280\n\n        # construct layers\n        self.conv1 = ConvBlock(3, self.in_channels, 3, s=2, p=1)\n        self.conv2 = self._make_layer(Bottleneck, 1, int(16 * width_mult), 1, 1)\n        self.conv3 = self._make_layer(Bottleneck, 6, int(24 * width_mult), 2, 2)\n        self.conv4 = self._make_layer(Bottleneck, 6, int(32 * width_mult), 3, 2)\n        self.conv5 = self._make_layer(Bottleneck, 6, int(64 * width_mult), 4, 2)\n        self.conv6 = self._make_layer(Bottleneck, 6, int(96 * width_mult), 3, 1)\n        self.conv7 = self._make_layer(Bottleneck, 6, int(160 * width_mult), 3, 2)\n        self.conv8 = self._make_layer(Bottleneck, 6, int(320 * width_mult), 1, 1)\n        self.conv9 = ConvBlock(self.in_channels, self.feature_dim, 1)\n\n        self.global_avgpool = nn.AdaptiveAvgPool2d(1)\n        self.fc = self._construct_fc_layer(fc_dims, self.feature_dim, dropout_p)\n        self.classifier = nn.Linear(self.feature_dim, num_classes)\n\n        self._init_params()\n\n    def _make_layer(self, block, t, c, n, s):\n        # t: expansion factor\n        # c: output channels\n        # n: number of blocks\n        # s: stride for first layer\n        layers = []\n        layers.append(block(self.in_channels, c, t, s))\n        self.in_channels = c\n        for i in range(1, n):\n            layers.append(block(self.in_channels, c, t))\n        return nn.Sequential(*layers)\n\n    def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):\n        \"\"\"Constructs fully connected layer.\n\n        Args:\n            fc_dims (list or tuple): dimensions of fc layers, if None, no fc layers are constructed\n            input_dim (int): input dimension\n            dropout_p (float): dropout probability, if None, dropout is unused\n        \"\"\"\n        if fc_dims is None:\n            self.feature_dim = input_dim\n            return None\n\n        assert isinstance(\n            fc_dims, (list, tuple)\n        ), \"fc_dims must be either list or tuple, but got {}\".format(type(fc_dims))\n\n        layers = []\n        for dim in fc_dims:\n            layers.append(nn.Linear(input_dim, dim))\n            layers.append(nn.BatchNorm1d(dim))\n            layers.append(nn.ReLU(inplace=True))\n            if dropout_p is not None:\n                layers.append(nn.Dropout(p=dropout_p))\n            input_dim = dim\n\n        self.feature_dim = fc_dims[-1]\n\n        return nn.Sequential(*layers)\n\n    def _init_params(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight, mode=\"fan_out\", nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.BatchNorm2d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.BatchNorm1d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.Linear):\n                nn.init.normal_(m.weight, 0, 0.01)\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def featuremaps(self, x):\n        x = self.conv1(x)\n        x = self.conv2(x)\n        x = self.conv3(x)\n        x = self.conv4(x)\n        x = self.conv5(x)\n        x = self.conv6(x)\n        x = self.conv7(x)\n        x = self.conv8(x)\n        x = self.conv9(x)\n        return x\n\n    def forward(self, x):\n        f = self.featuremaps(x)\n        v = self.global_avgpool(f)\n        v = v.view(v.size(0), -1)\n\n        if self.fc is not None:\n            v = self.fc(v)\n\n        if not self.training:\n            return v\n\n        y = self.classifier(v)\n\n        if self.loss == \"softmax\":\n            return y\n        elif self.loss == \"triplet\":\n            return y, v\n        else:\n            raise KeyError(\"Unsupported loss: {}\".format(self.loss))\n\n\ndef init_pretrained_weights(model, model_url):\n    \"\"\"Initializes model with pretrained weights.\n\n    Layers that don't match with pretrained layers in name or size are kept unchanged.\n    \"\"\"\n    pretrain_dict = model_zoo.load_url(model_url)\n    model_dict = model.state_dict()\n    pretrain_dict = {\n        k: v\n        for k, v in pretrain_dict.items()\n        if k in model_dict and model_dict[k].size() == v.size()\n    }\n    model_dict.update(pretrain_dict)\n    model.load_state_dict(model_dict)\n\n\ndef mobilenetv2_x1_0(num_classes, loss, pretrained=True, **kwargs):\n    model = MobileNetV2(\n        num_classes, loss=loss, width_mult=1, fc_dims=None, dropout_p=None, **kwargs\n    )\n    if pretrained:\n        # init_pretrained_weights(model, model_urls['mobilenetv2_x1_0'])\n        import warnings\n\n        warnings.warn(\n            \"The imagenet pretrained weights need to be manually downloaded from {}\".format(\n                model_urls[\"mobilenetv2_x1_0\"]\n            )\n        )\n    return model\n\n\ndef mobilenetv2_x1_4(num_classes, loss, pretrained=True, **kwargs):\n    model = MobileNetV2(\n        num_classes, loss=loss, width_mult=1.4, fc_dims=None, dropout_p=None, **kwargs\n    )\n    if pretrained:\n        # init_pretrained_weights(model, model_urls['mobilenetv2_x1_4'])\n        import warnings\n\n        warnings.warn(\n            \"The imagenet pretrained weights need to be manually downloaded from {}\".format(\n                model_urls[\"mobilenetv2_x1_4\"]\n            )\n        )\n    return model\n"
  },
  {
    "path": "boxmot/reid/backbones/osnet.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport warnings\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\n__all__ = [\"osnet_x1_0\", \"osnet_x0_75\", \"osnet_x0_5\", \"osnet_x0_25\", \"osnet_ibn_x1_0\"]\n\npretrained_urls = {\n    \"osnet_x1_0\": \"https://drive.google.com/uc?id=1LaG1EJpHrxdAxKnSCJ_i0u-nbxSAeiFY\",\n    \"osnet_x0_75\": \"https://drive.google.com/uc?id=1uwA9fElHOk3ZogwbeY5GkLI6QPTX70Hq\",\n    \"osnet_x0_5\": \"https://drive.google.com/uc?id=16DGLbZukvVYgINws8u8deSaOqjybZ83i\",\n    \"osnet_x0_25\": \"https://drive.google.com/uc?id=1rb8UN5ZzPKRc_xvtHlyDh-cSz88YX9hs\",\n    \"osnet_ibn_x1_0\": \"https://drive.google.com/uc?id=1sr90V6irlYYDd4_4ISU2iruoRG8J__6l\",\n}\n\n\n##########\n# Basic layers\n##########\nclass ConvLayer(nn.Module):\n    \"\"\"Convolution layer (conv + bn + relu).\"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        kernel_size,\n        stride=1,\n        padding=0,\n        groups=1,\n        IN=False,\n    ):\n        super(ConvLayer, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels,\n            out_channels,\n            kernel_size,\n            stride=stride,\n            padding=padding,\n            bias=False,\n            groups=groups,\n        )\n        if IN:\n            self.bn = nn.InstanceNorm2d(out_channels, affine=True)\n        else:\n            self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU(inplace=True)\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.bn(x)\n        x = self.relu(x)\n        return x\n\n\nclass Conv1x1(nn.Module):\n    \"\"\"1x1 convolution + bn + relu.\"\"\"\n\n    def __init__(self, in_channels, out_channels, stride=1, groups=1):\n        super(Conv1x1, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels,\n            out_channels,\n            1,\n            stride=stride,\n            padding=0,\n            bias=False,\n            groups=groups,\n        )\n        self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU(inplace=True)\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.bn(x)\n        x = self.relu(x)\n        return x\n\n\nclass Conv1x1Linear(nn.Module):\n    \"\"\"1x1 convolution + bn (w/o non-linearity).\"\"\"\n\n    def __init__(self, in_channels, out_channels, stride=1):\n        super(Conv1x1Linear, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels, out_channels, 1, stride=stride, padding=0, bias=False\n        )\n        self.bn = nn.BatchNorm2d(out_channels)\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.bn(x)\n        return x\n\n\nclass Conv3x3(nn.Module):\n    \"\"\"3x3 convolution + bn + relu.\"\"\"\n\n    def __init__(self, in_channels, out_channels, stride=1, groups=1):\n        super(Conv3x3, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels,\n            out_channels,\n            3,\n            stride=stride,\n            padding=1,\n            bias=False,\n            groups=groups,\n        )\n        self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU(inplace=True)\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.bn(x)\n        x = self.relu(x)\n        return x\n\n\nclass LightConv3x3(nn.Module):\n    \"\"\"Lightweight 3x3 convolution.\n\n    1x1 (linear) + dw 3x3 (nonlinear).\n    \"\"\"\n\n    def __init__(self, in_channels, out_channels):\n        super(LightConv3x3, self).__init__()\n        self.conv1 = nn.Conv2d(\n            in_channels, out_channels, 1, stride=1, padding=0, bias=False\n        )\n        self.conv2 = nn.Conv2d(\n            out_channels,\n            out_channels,\n            3,\n            stride=1,\n            padding=1,\n            bias=False,\n            groups=out_channels,\n        )\n        self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU(inplace=True)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = self.conv2(x)\n        x = self.bn(x)\n        x = self.relu(x)\n        return x\n\n\n##########\n# Building blocks for omni-scale feature learning\n##########\nclass ChannelGate(nn.Module):\n    \"\"\"A mini-network that generates channel-wise gates conditioned on input tensor.\"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        num_gates=None,\n        return_gates=False,\n        gate_activation=\"sigmoid\",\n        reduction=16,\n        layer_norm=False,\n    ):\n        super(ChannelGate, self).__init__()\n        if num_gates is None:\n            num_gates = in_channels\n        self.return_gates = return_gates\n        self.global_avgpool = nn.AdaptiveAvgPool2d(1)\n        self.fc1 = nn.Conv2d(\n            in_channels, in_channels // reduction, kernel_size=1, bias=True, padding=0\n        )\n        self.norm1 = None\n        if layer_norm:\n            self.norm1 = nn.LayerNorm((in_channels // reduction, 1, 1))\n        self.relu = nn.ReLU(inplace=True)\n        self.fc2 = nn.Conv2d(\n            in_channels // reduction, num_gates, kernel_size=1, bias=True, padding=0\n        )\n        if gate_activation == \"sigmoid\":\n            self.gate_activation = nn.Sigmoid()\n        elif gate_activation == \"relu\":\n            self.gate_activation = nn.ReLU(inplace=True)\n        elif gate_activation == \"linear\":\n            self.gate_activation = None\n        else:\n            raise RuntimeError(\"Unknown gate activation: {}\".format(gate_activation))\n\n    def forward(self, x):\n        input = x\n        x = self.global_avgpool(x)\n        x = self.fc1(x)\n        if self.norm1 is not None:\n            x = self.norm1(x)\n        x = self.relu(x)\n        x = self.fc2(x)\n        if self.gate_activation is not None:\n            x = self.gate_activation(x)\n        if self.return_gates:\n            return x\n        return input * x\n\n\nclass OSBlock(nn.Module):\n    \"\"\"Omni-scale feature learning block.\"\"\"\n\n    def __init__(\n        self, in_channels, out_channels, IN=False, bottleneck_reduction=4, **kwargs\n    ):\n        super(OSBlock, self).__init__()\n        mid_channels = out_channels // bottleneck_reduction\n        self.conv1 = Conv1x1(in_channels, mid_channels)\n        self.conv2a = LightConv3x3(mid_channels, mid_channels)\n        self.conv2b = nn.Sequential(\n            LightConv3x3(mid_channels, mid_channels),\n            LightConv3x3(mid_channels, mid_channels),\n        )\n        self.conv2c = nn.Sequential(\n            LightConv3x3(mid_channels, mid_channels),\n            LightConv3x3(mid_channels, mid_channels),\n            LightConv3x3(mid_channels, mid_channels),\n        )\n        self.conv2d = nn.Sequential(\n            LightConv3x3(mid_channels, mid_channels),\n            LightConv3x3(mid_channels, mid_channels),\n            LightConv3x3(mid_channels, mid_channels),\n            LightConv3x3(mid_channels, mid_channels),\n        )\n        self.gate = ChannelGate(mid_channels)\n        self.conv3 = Conv1x1Linear(mid_channels, out_channels)\n        self.downsample = None\n        if in_channels != out_channels:\n            self.downsample = Conv1x1Linear(in_channels, out_channels)\n        self.IN = None\n        if IN:\n            self.IN = nn.InstanceNorm2d(out_channels, affine=True)\n\n    def forward(self, x):\n        identity = x\n        x1 = self.conv1(x)\n        x2a = self.conv2a(x1)\n        x2b = self.conv2b(x1)\n        x2c = self.conv2c(x1)\n        x2d = self.conv2d(x1)\n        x2 = self.gate(x2a) + self.gate(x2b) + self.gate(x2c) + self.gate(x2d)\n        x3 = self.conv3(x2)\n        if self.downsample is not None:\n            identity = self.downsample(identity)\n        out = x3 + identity\n        if self.IN is not None:\n            out = self.IN(out)\n        return F.relu(out)\n\n\n##########\n# Network architecture\n##########\nclass OSNet(nn.Module):\n    \"\"\"Omni-Scale Network.\n\n    Reference:\n        - Zhou et al. Omni-Scale Feature Learning for Person Re-Identification. ICCV, 2019.\n        - Zhou et al. Learning Generalisable Omni-Scale Representations\n          for Person Re-Identification. TPAMI, 2021.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_classes,\n        blocks,\n        layers,\n        channels,\n        feature_dim=512,\n        loss=\"softmax\",\n        IN=False,\n        **kwargs,\n    ):\n        super(OSNet, self).__init__()\n        num_blocks = len(blocks)\n        assert num_blocks == len(layers)\n        assert num_blocks == len(channels) - 1\n        self.loss = loss\n        self.feature_dim = feature_dim\n\n        # convolutional backbone\n        self.conv1 = ConvLayer(3, channels[0], 7, stride=2, padding=3, IN=IN)\n        self.maxpool = nn.MaxPool2d(3, stride=2, padding=1)\n        self.conv2 = self._make_layer(\n            blocks[0],\n            layers[0],\n            channels[0],\n            channels[1],\n            reduce_spatial_size=True,\n            IN=IN,\n        )\n        self.conv3 = self._make_layer(\n            blocks[1], layers[1], channels[1], channels[2], reduce_spatial_size=True\n        )\n        self.conv4 = self._make_layer(\n            blocks[2], layers[2], channels[2], channels[3], reduce_spatial_size=False\n        )\n        self.conv5 = Conv1x1(channels[3], channels[3])\n        self.global_avgpool = nn.AdaptiveAvgPool2d(1)\n        # fully connected layer\n        self.fc = self._construct_fc_layer(\n            self.feature_dim, channels[3], dropout_p=None\n        )\n        # identity classification layer\n        self.classifier = nn.Linear(self.feature_dim, num_classes)\n\n        self._init_params()\n\n    def _make_layer(\n        self, block, layer, in_channels, out_channels, reduce_spatial_size, IN=False\n    ):\n        layers = []\n\n        layers.append(block(in_channels, out_channels, IN=IN))\n        for i in range(1, layer):\n            layers.append(block(out_channels, out_channels, IN=IN))\n\n        if reduce_spatial_size:\n            layers.append(\n                nn.Sequential(\n                    Conv1x1(out_channels, out_channels), nn.AvgPool2d(2, stride=2)\n                )\n            )\n\n        return nn.Sequential(*layers)\n\n    def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):\n        if fc_dims is None or fc_dims < 0:\n            self.feature_dim = input_dim\n            return None\n\n        if isinstance(fc_dims, int):\n            fc_dims = [fc_dims]\n\n        layers = []\n        for dim in fc_dims:\n            layers.append(nn.Linear(input_dim, dim))\n            layers.append(nn.BatchNorm1d(dim))\n            layers.append(nn.ReLU(inplace=True))\n            if dropout_p is not None:\n                layers.append(nn.Dropout(p=dropout_p))\n            input_dim = dim\n\n        self.feature_dim = fc_dims[-1]\n\n        return nn.Sequential(*layers)\n\n    def _init_params(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight, mode=\"fan_out\", nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.BatchNorm2d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.BatchNorm1d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.Linear):\n                nn.init.normal_(m.weight, 0, 0.01)\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def featuremaps(self, x):\n        x = self.conv1(x)\n        x = self.maxpool(x)\n        x = self.conv2(x)\n        x = self.conv3(x)\n        x = self.conv4(x)\n        x = self.conv5(x)\n        return x\n\n    def forward(self, x, return_featuremaps=False):\n        x = self.featuremaps(x)\n        if return_featuremaps:\n            return x\n        v = self.global_avgpool(x)\n        v = v.view(v.size(0), -1)\n        if self.fc is not None:\n            v = self.fc(v)\n        if not self.training:\n            return v\n        y = self.classifier(v)\n        if self.loss == \"softmax\":\n            return y\n        elif self.loss == \"triplet\":\n            return y, v\n        else:\n            raise KeyError(\"Unsupported loss: {}\".format(self.loss))\n\n\ndef init_pretrained_weights(model, key=\"\"):\n    \"\"\"Initializes model with pretrained weights.\n\n    Layers that don't match with pretrained layers in name or size are kept unchanged.\n    \"\"\"\n    import errno\n    import os\n    from collections import OrderedDict\n\n    import gdown\n\n    def _get_torch_home():\n        ENV_TORCH_HOME = \"TORCH_HOME\"\n        ENV_XDG_CACHE_HOME = \"XDG_CACHE_HOME\"\n        DEFAULT_CACHE_DIR = \"~/.cache\"\n        torch_home = os.path.expanduser(\n            os.getenv(\n                ENV_TORCH_HOME,\n                os.path.join(os.getenv(ENV_XDG_CACHE_HOME, DEFAULT_CACHE_DIR), \"torch\"),\n            )\n        )\n        return torch_home\n\n    torch_home = _get_torch_home()\n    model_dir = os.path.join(torch_home, \"checkpoints\")\n    try:\n        os.makedirs(model_dir)\n    except OSError as e:\n        if e.errno == errno.EEXIST:\n            # Directory already exists, ignore.\n            pass\n        else:\n            # Unexpected OSError, re-raise.\n            raise\n    filename = key + \"_imagenet.pth\"\n    cached_file = os.path.join(model_dir, filename)\n\n    if not os.path.exists(cached_file):\n        gdown.download(pretrained_urls[key], cached_file, quiet=False)\n\n    state_dict = torch.load(cached_file)\n    model_dict = model.state_dict()\n    new_state_dict = OrderedDict()\n    matched_layers, discarded_layers = [], []\n\n    for k, v in state_dict.items():\n        if k.startswith(\"module.\"):\n            k = k[7:]  # discard module.\n\n        if k in model_dict and model_dict[k].size() == v.size():\n            new_state_dict[k] = v\n            matched_layers.append(k)\n        else:\n            discarded_layers.append(k)\n\n    model_dict.update(new_state_dict)\n    model.load_state_dict(model_dict)\n\n    if len(matched_layers) == 0:\n        warnings.warn(\n            'The pretrained weights from \"{}\" cannot be loaded, '\n            \"please check the key names manually \"\n            \"(** ignored and continue **)\".format(cached_file)\n        )\n    else:\n        print(\n            'Successfully loaded imagenet pretrained weights from \"{}\"'.format(\n                cached_file\n            )\n        )\n        if len(discarded_layers) > 0:\n            print(\n                \"** The following layers are discarded \"\n                \"due to unmatched keys or layer size: {}\".format(discarded_layers)\n            )\n\n\n##########\n# Instantiation\n##########\ndef osnet_x1_0(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    # standard size (width x1.0)\n    model = OSNet(\n        num_classes,\n        blocks=[OSBlock, OSBlock, OSBlock],\n        layers=[2, 2, 2],\n        channels=[64, 256, 384, 512],\n        loss=loss,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_x1_0\")\n    return model\n\n\ndef osnet_x0_75(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    # medium size (width x0.75)\n    model = OSNet(\n        num_classes,\n        blocks=[OSBlock, OSBlock, OSBlock],\n        layers=[2, 2, 2],\n        channels=[48, 192, 288, 384],\n        loss=loss,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_x0_75\")\n    return model\n\n\ndef osnet_x0_5(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    # tiny size (width x0.5)\n    model = OSNet(\n        num_classes,\n        blocks=[OSBlock, OSBlock, OSBlock],\n        layers=[2, 2, 2],\n        channels=[32, 128, 192, 256],\n        loss=loss,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_x0_5\")\n    return model\n\n\ndef osnet_x0_25(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    # very tiny size (width x0.25)\n    model = OSNet(\n        num_classes,\n        blocks=[OSBlock, OSBlock, OSBlock],\n        layers=[2, 2, 2],\n        channels=[16, 64, 96, 128],\n        loss=loss,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_x0_25\")\n    return model\n\n\ndef osnet_ibn_x1_0(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    # standard size (width x1.0) + IBN layer\n    # Ref: Pan et al. Two at Once: Enhancing Learning and Generalization Capacities via IBN-Net. ECCV, 2018.\n    model = OSNet(\n        num_classes,\n        blocks=[OSBlock, OSBlock, OSBlock],\n        layers=[2, 2, 2],\n        channels=[64, 256, 384, 512],\n        loss=loss,\n        IN=True,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_ibn_x1_0\")\n    return model\n"
  },
  {
    "path": "boxmot/reid/backbones/osnet_ain.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport warnings\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\n__all__ = [\"osnet_ain_x1_0\", \"osnet_ain_x0_75\", \"osnet_ain_x0_5\", \"osnet_ain_x0_25\"]\n\npretrained_urls = {\n    \"osnet_ain_x1_0\": \"https://drive.google.com/uc?id=1-CaioD9NaqbHK_kzSMW8VE4_3KcsRjEo\",\n    \"osnet_ain_x0_75\": \"https://drive.google.com/uc?id=1apy0hpsMypqstfencdH-jKIUEFOW4xoM\",\n    \"osnet_ain_x0_5\": \"https://drive.google.com/uc?id=1KusKvEYyKGDTUBVRxRiz55G31wkihB6l\",\n    \"osnet_ain_x0_25\": \"https://drive.google.com/uc?id=1SxQt2AvmEcgWNhaRb2xC4rP6ZwVDP0Wt\",\n}\n\n\n##########\n# Basic layers\n##########\nclass ConvLayer(nn.Module):\n    \"\"\"Convolution layer (conv + bn + relu).\"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        kernel_size,\n        stride=1,\n        padding=0,\n        groups=1,\n        IN=False,\n    ):\n        super(ConvLayer, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels,\n            out_channels,\n            kernel_size,\n            stride=stride,\n            padding=padding,\n            bias=False,\n            groups=groups,\n        )\n        if IN:\n            self.bn = nn.InstanceNorm2d(out_channels, affine=True)\n        else:\n            self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU()\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.bn(x)\n        return self.relu(x)\n\n\nclass Conv1x1(nn.Module):\n    \"\"\"1x1 convolution + bn + relu.\"\"\"\n\n    def __init__(self, in_channels, out_channels, stride=1, groups=1):\n        super(Conv1x1, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels,\n            out_channels,\n            1,\n            stride=stride,\n            padding=0,\n            bias=False,\n            groups=groups,\n        )\n        self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU()\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.bn(x)\n        return self.relu(x)\n\n\nclass Conv1x1Linear(nn.Module):\n    \"\"\"1x1 convolution + bn (w/o non-linearity).\"\"\"\n\n    def __init__(self, in_channels, out_channels, stride=1, bn=True):\n        super(Conv1x1Linear, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels, out_channels, 1, stride=stride, padding=0, bias=False\n        )\n        self.bn = None\n        if bn:\n            self.bn = nn.BatchNorm2d(out_channels)\n\n    def forward(self, x):\n        x = self.conv(x)\n        if self.bn is not None:\n            x = self.bn(x)\n        return x\n\n\nclass Conv3x3(nn.Module):\n    \"\"\"3x3 convolution + bn + relu.\"\"\"\n\n    def __init__(self, in_channels, out_channels, stride=1, groups=1):\n        super(Conv3x3, self).__init__()\n        self.conv = nn.Conv2d(\n            in_channels,\n            out_channels,\n            3,\n            stride=stride,\n            padding=1,\n            bias=False,\n            groups=groups,\n        )\n        self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU()\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.bn(x)\n        return self.relu(x)\n\n\nclass LightConv3x3(nn.Module):\n    \"\"\"Lightweight 3x3 convolution.\n\n    1x1 (linear) + dw 3x3 (nonlinear).\n    \"\"\"\n\n    def __init__(self, in_channels, out_channels):\n        super(LightConv3x3, self).__init__()\n        self.conv1 = nn.Conv2d(\n            in_channels, out_channels, 1, stride=1, padding=0, bias=False\n        )\n        self.conv2 = nn.Conv2d(\n            out_channels,\n            out_channels,\n            3,\n            stride=1,\n            padding=1,\n            bias=False,\n            groups=out_channels,\n        )\n        self.bn = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU()\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = self.conv2(x)\n        x = self.bn(x)\n        return self.relu(x)\n\n\nclass LightConvStream(nn.Module):\n    \"\"\"Lightweight convolution stream.\"\"\"\n\n    def __init__(self, in_channels, out_channels, depth):\n        super(LightConvStream, self).__init__()\n        assert depth >= 1, \"depth must be equal to or larger than 1, but got {}\".format(\n            depth\n        )\n        layers = []\n        layers += [LightConv3x3(in_channels, out_channels)]\n        for i in range(depth - 1):\n            layers += [LightConv3x3(out_channels, out_channels)]\n        self.layers = nn.Sequential(*layers)\n\n    def forward(self, x):\n        return self.layers(x)\n\n\n##########\n# Building blocks for omni-scale feature learning\n##########\nclass ChannelGate(nn.Module):\n    \"\"\"A mini-network that generates channel-wise gates conditioned on input tensor.\"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        num_gates=None,\n        return_gates=False,\n        gate_activation=\"sigmoid\",\n        reduction=16,\n        layer_norm=False,\n    ):\n        super(ChannelGate, self).__init__()\n        if num_gates is None:\n            num_gates = in_channels\n        self.return_gates = return_gates\n        self.global_avgpool = nn.AdaptiveAvgPool2d(1)\n        self.fc1 = nn.Conv2d(\n            in_channels, in_channels // reduction, kernel_size=1, bias=True, padding=0\n        )\n        self.norm1 = None\n        if layer_norm:\n            self.norm1 = nn.LayerNorm((in_channels // reduction, 1, 1))\n        self.relu = nn.ReLU()\n        self.fc2 = nn.Conv2d(\n            in_channels // reduction, num_gates, kernel_size=1, bias=True, padding=0\n        )\n        if gate_activation == \"sigmoid\":\n            self.gate_activation = nn.Sigmoid()\n        elif gate_activation == \"relu\":\n            self.gate_activation = nn.ReLU()\n        elif gate_activation == \"linear\":\n            self.gate_activation = None\n        else:\n            raise RuntimeError(\"Unknown gate activation: {}\".format(gate_activation))\n\n    def forward(self, x):\n        input = x\n        x = self.global_avgpool(x)\n        x = self.fc1(x)\n        if self.norm1 is not None:\n            x = self.norm1(x)\n        x = self.relu(x)\n        x = self.fc2(x)\n        if self.gate_activation is not None:\n            x = self.gate_activation(x)\n        if self.return_gates:\n            return x\n        return input * x\n\n\nclass OSBlock(nn.Module):\n    \"\"\"Omni-scale feature learning block.\"\"\"\n\n    def __init__(self, in_channels, out_channels, reduction=4, T=4, **kwargs):\n        super(OSBlock, self).__init__()\n        assert T >= 1\n        assert out_channels >= reduction and out_channels % reduction == 0\n        mid_channels = out_channels // reduction\n\n        self.conv1 = Conv1x1(in_channels, mid_channels)\n        self.conv2 = nn.ModuleList()\n        for t in range(1, T + 1):\n            self.conv2 += [LightConvStream(mid_channels, mid_channels, t)]\n        self.gate = ChannelGate(mid_channels)\n        self.conv3 = Conv1x1Linear(mid_channels, out_channels)\n        self.downsample = None\n        if in_channels != out_channels:\n            self.downsample = Conv1x1Linear(in_channels, out_channels)\n\n    def forward(self, x):\n        identity = x\n        x1 = self.conv1(x)\n        x2 = 0\n        for conv2_t in self.conv2:\n            x2_t = conv2_t(x1)\n            x2 = x2 + self.gate(x2_t)\n        x3 = self.conv3(x2)\n        if self.downsample is not None:\n            identity = self.downsample(identity)\n        out = x3 + identity\n        return F.relu(out)\n\n\nclass OSBlockINin(nn.Module):\n    \"\"\"Omni-scale feature learning block with instance normalization.\"\"\"\n\n    def __init__(self, in_channels, out_channels, reduction=4, T=4, **kwargs):\n        super(OSBlockINin, self).__init__()\n        assert T >= 1\n        assert out_channels >= reduction and out_channels % reduction == 0\n        mid_channels = out_channels // reduction\n\n        self.conv1 = Conv1x1(in_channels, mid_channels)\n        self.conv2 = nn.ModuleList()\n        for t in range(1, T + 1):\n            self.conv2 += [LightConvStream(mid_channels, mid_channels, t)]\n        self.gate = ChannelGate(mid_channels)\n        self.conv3 = Conv1x1Linear(mid_channels, out_channels, bn=False)\n        self.downsample = None\n        if in_channels != out_channels:\n            self.downsample = Conv1x1Linear(in_channels, out_channels)\n        self.IN = nn.InstanceNorm2d(out_channels, affine=True)\n\n    def forward(self, x):\n        identity = x\n        x1 = self.conv1(x)\n        x2 = 0\n        for conv2_t in self.conv2:\n            x2_t = conv2_t(x1)\n            x2 = x2 + self.gate(x2_t)\n        x3 = self.conv3(x2)\n        x3 = self.IN(x3)  # IN inside residual\n        if self.downsample is not None:\n            identity = self.downsample(identity)\n        out = x3 + identity\n        return F.relu(out)\n\n\n##########\n# Network architecture\n##########\nclass OSNet(nn.Module):\n    \"\"\"Omni-Scale Network.\n\n    Reference:\n        - Zhou et al. Omni-Scale Feature Learning for Person Re-Identification. ICCV, 2019.\n        - Zhou et al. Learning Generalisable Omni-Scale Representations\n          for Person Re-Identification. TPAMI, 2021.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_classes,\n        blocks,\n        layers,\n        channels,\n        feature_dim=512,\n        loss=\"softmax\",\n        conv1_IN=False,\n        **kwargs,\n    ):\n        super(OSNet, self).__init__()\n        num_blocks = len(blocks)\n        assert num_blocks == len(layers)\n        assert num_blocks == len(channels) - 1\n        self.loss = loss\n        self.feature_dim = feature_dim\n\n        # convolutional backbone\n        self.conv1 = ConvLayer(3, channels[0], 7, stride=2, padding=3, IN=conv1_IN)\n        self.maxpool = nn.MaxPool2d(3, stride=2, padding=1)\n        self.conv2 = self._make_layer(blocks[0], layers[0], channels[0], channels[1])\n        self.pool2 = nn.Sequential(\n            Conv1x1(channels[1], channels[1]), nn.AvgPool2d(2, stride=2)\n        )\n        self.conv3 = self._make_layer(blocks[1], layers[1], channels[1], channels[2])\n        self.pool3 = nn.Sequential(\n            Conv1x1(channels[2], channels[2]), nn.AvgPool2d(2, stride=2)\n        )\n        self.conv4 = self._make_layer(blocks[2], layers[2], channels[2], channels[3])\n        self.conv5 = Conv1x1(channels[3], channels[3])\n        self.global_avgpool = nn.AdaptiveAvgPool2d(1)\n        # fully connected layer\n        self.fc = self._construct_fc_layer(\n            self.feature_dim, channels[3], dropout_p=None\n        )\n        # identity classification layer\n        self.classifier = nn.Linear(self.feature_dim, num_classes)\n\n        self._init_params()\n\n    def _make_layer(self, blocks, layer, in_channels, out_channels):\n        layers = []\n        layers += [blocks[0](in_channels, out_channels)]\n        for i in range(1, len(blocks)):\n            layers += [blocks[i](out_channels, out_channels)]\n        return nn.Sequential(*layers)\n\n    def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):\n        if fc_dims is None or fc_dims < 0:\n            self.feature_dim = input_dim\n            return None\n\n        if isinstance(fc_dims, int):\n            fc_dims = [fc_dims]\n\n        layers = []\n        for dim in fc_dims:\n            layers.append(nn.Linear(input_dim, dim))\n            layers.append(nn.BatchNorm1d(dim))\n            layers.append(nn.ReLU())\n            if dropout_p is not None:\n                layers.append(nn.Dropout(p=dropout_p))\n            input_dim = dim\n\n        self.feature_dim = fc_dims[-1]\n\n        return nn.Sequential(*layers)\n\n    def _init_params(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight, mode=\"fan_out\", nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.BatchNorm2d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.BatchNorm1d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.InstanceNorm2d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.Linear):\n                nn.init.normal_(m.weight, 0, 0.01)\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def featuremaps(self, x):\n        x = self.conv1(x)\n        x = self.maxpool(x)\n        x = self.conv2(x)\n        x = self.pool2(x)\n        x = self.conv3(x)\n        x = self.pool3(x)\n        x = self.conv4(x)\n        x = self.conv5(x)\n        return x\n\n    def forward(self, x, return_featuremaps=False):\n        x = self.featuremaps(x)\n        if return_featuremaps:\n            return x\n        v = self.global_avgpool(x)\n        v = v.view(v.size(0), -1)\n        if self.fc is not None:\n            v = self.fc(v)\n        if not self.training:\n            return v\n        y = self.classifier(v)\n        if self.loss == \"softmax\":\n            return y\n        elif self.loss == \"triplet\":\n            return y, v\n        else:\n            raise KeyError(\"Unsupported loss: {}\".format(self.loss))\n\n\ndef init_pretrained_weights(model, key=\"\"):\n    \"\"\"Initializes model with pretrained weights.\n\n    Layers that don't match with pretrained layers in name or size are kept unchanged.\n    \"\"\"\n    import errno\n    import os\n    from collections import OrderedDict\n\n    import gdown\n\n    def _get_torch_home():\n        ENV_TORCH_HOME = \"TORCH_HOME\"\n        ENV_XDG_CACHE_HOME = \"XDG_CACHE_HOME\"\n        DEFAULT_CACHE_DIR = \"~/.cache\"\n        torch_home = os.path.expanduser(\n            os.getenv(\n                ENV_TORCH_HOME,\n                os.path.join(os.getenv(ENV_XDG_CACHE_HOME, DEFAULT_CACHE_DIR), \"torch\"),\n            )\n        )\n        return torch_home\n\n    torch_home = _get_torch_home()\n    model_dir = os.path.join(torch_home, \"checkpoints\")\n    try:\n        os.makedirs(model_dir)\n    except OSError as e:\n        if e.errno == errno.EEXIST:\n            # Directory already exists, ignore.\n            pass\n        else:\n            # Unexpected OSError, re-raise.\n            raise\n    filename = key + \"_imagenet.pth\"\n    cached_file = os.path.join(model_dir, filename)\n\n    if not os.path.exists(cached_file):\n        gdown.download(pretrained_urls[key], cached_file, quiet=False)\n\n    state_dict = torch.load(cached_file)\n    model_dict = model.state_dict()\n    new_state_dict = OrderedDict()\n    matched_layers, discarded_layers = [], []\n\n    for k, v in state_dict.items():\n        if k.startswith(\"module.\"):\n            k = k[7:]  # discard module.\n\n        if k in model_dict and model_dict[k].size() == v.size():\n            new_state_dict[k] = v\n            matched_layers.append(k)\n        else:\n            discarded_layers.append(k)\n\n    model_dict.update(new_state_dict)\n    model.load_state_dict(model_dict)\n\n    if len(matched_layers) == 0:\n        warnings.warn(\n            'The pretrained weights from \"{}\" cannot be loaded, '\n            \"please check the key names manually \"\n            \"(** ignored and continue **)\".format(cached_file)\n        )\n    else:\n        print(\n            'Successfully loaded imagenet pretrained weights from \"{}\"'.format(\n                cached_file\n            )\n        )\n        if len(discarded_layers) > 0:\n            print(\n                \"** The following layers are discarded \"\n                \"due to unmatched keys or layer size: {}\".format(discarded_layers)\n            )\n\n\n##########\n# Instantiation\n##########\ndef osnet_ain_x1_0(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    model = OSNet(\n        num_classes,\n        blocks=[\n            [OSBlockINin, OSBlockINin],\n            [OSBlock, OSBlockINin],\n            [OSBlockINin, OSBlock],\n        ],\n        layers=[2, 2, 2],\n        channels=[64, 256, 384, 512],\n        loss=loss,\n        conv1_IN=True,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_ain_x1_0\")\n    return model\n\n\ndef osnet_ain_x0_75(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    model = OSNet(\n        num_classes,\n        blocks=[\n            [OSBlockINin, OSBlockINin],\n            [OSBlock, OSBlockINin],\n            [OSBlockINin, OSBlock],\n        ],\n        layers=[2, 2, 2],\n        channels=[48, 192, 288, 384],\n        loss=loss,\n        conv1_IN=True,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_ain_x0_75\")\n    return model\n\n\ndef osnet_ain_x0_5(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    model = OSNet(\n        num_classes,\n        blocks=[\n            [OSBlockINin, OSBlockINin],\n            [OSBlock, OSBlockINin],\n            [OSBlockINin, OSBlock],\n        ],\n        layers=[2, 2, 2],\n        channels=[32, 128, 192, 256],\n        loss=loss,\n        conv1_IN=True,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_ain_x0_5\")\n    return model\n\n\ndef osnet_ain_x0_25(num_classes=1000, pretrained=True, loss=\"softmax\", **kwargs):\n    model = OSNet(\n        num_classes,\n        blocks=[\n            [OSBlockINin, OSBlockINin],\n            [OSBlock, OSBlockINin],\n            [OSBlockINin, OSBlock],\n        ],\n        layers=[2, 2, 2],\n        channels=[16, 64, 96, 128],\n        loss=loss,\n        conv1_IN=True,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, key=\"osnet_ain_x0_25\")\n    return model\n"
  },
  {
    "path": "boxmot/reid/backbones/resnet.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\"\"\"\nCode source: https://github.com/pytorch/vision\n\"\"\"\nfrom __future__ import absolute_import, division\n\nimport torch.utils.model_zoo as model_zoo\nfrom torch import nn\n\n__all__ = [\n    \"resnet18\",\n    \"resnet34\",\n    \"resnet50\",\n    \"resnet101\",\n    \"resnet152\",\n    \"resnext50_32x4d\",\n    \"resnext101_32x8d\",\n    \"resnet50_fc512\",\n]\n\nmodel_urls = {\n    \"resnet18\": \"https://download.pytorch.org/models/resnet18-5c106cde.pth\",\n    \"resnet34\": \"https://download.pytorch.org/models/resnet34-333f7ec4.pth\",\n    \"resnet50\": \"https://download.pytorch.org/models/resnet50-19c8e357.pth\",\n    \"resnet101\": \"https://download.pytorch.org/models/resnet101-5d3b4d8f.pth\",\n    \"resnet152\": \"https://download.pytorch.org/models/resnet152-b121ed2d.pth\",\n    \"resnext50_32x4d\": \"https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth\",\n    \"resnext101_32x8d\": \"https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth\",\n}\n\n\ndef conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1):\n    \"\"\"3x3 convolution with padding\"\"\"\n    return nn.Conv2d(\n        in_planes,\n        out_planes,\n        kernel_size=3,\n        stride=stride,\n        padding=dilation,\n        groups=groups,\n        bias=False,\n        dilation=dilation,\n    )\n\n\ndef conv1x1(in_planes, out_planes, stride=1):\n    \"\"\"1x1 convolution\"\"\"\n    return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False)\n\n\nclass BasicBlock(nn.Module):\n    expansion = 1\n\n    def __init__(\n        self,\n        inplanes,\n        planes,\n        stride=1,\n        downsample=None,\n        groups=1,\n        base_width=64,\n        dilation=1,\n        norm_layer=None,\n    ):\n        super(BasicBlock, self).__init__()\n        if norm_layer is None:\n            norm_layer = nn.BatchNorm2d\n        if groups != 1 or base_width != 64:\n            raise ValueError(\"BasicBlock only supports groups=1 and base_width=64\")\n        if dilation > 1:\n            raise NotImplementedError(\"Dilation > 1 not supported in BasicBlock\")\n        # Both self.conv1 and self.downsample layers downsample the input when stride != 1\n        self.conv1 = conv3x3(inplanes, planes, stride)\n        self.bn1 = norm_layer(planes)\n        self.relu = nn.ReLU(inplace=True)\n        self.conv2 = conv3x3(planes, planes)\n        self.bn2 = norm_layer(planes)\n        self.downsample = downsample\n        self.stride = stride\n\n    def forward(self, x):\n        identity = x\n\n        out = self.conv1(x)\n        out = self.bn1(out)\n        out = self.relu(out)\n\n        out = self.conv2(out)\n        out = self.bn2(out)\n\n        if self.downsample is not None:\n            identity = self.downsample(x)\n\n        out += identity\n        out = self.relu(out)\n\n        return out\n\n\nclass Bottleneck(nn.Module):\n    expansion = 4\n\n    def __init__(\n        self,\n        inplanes,\n        planes,\n        stride=1,\n        downsample=None,\n        groups=1,\n        base_width=64,\n        dilation=1,\n        norm_layer=None,\n    ):\n        super(Bottleneck, self).__init__()\n        if norm_layer is None:\n            norm_layer = nn.BatchNorm2d\n        width = int(planes * (base_width / 64.0)) * groups\n        # Both self.conv2 and self.downsample layers downsample the input when stride != 1\n        self.conv1 = conv1x1(inplanes, width)\n        self.bn1 = norm_layer(width)\n        self.conv2 = conv3x3(width, width, stride, groups, dilation)\n        self.bn2 = norm_layer(width)\n        self.conv3 = conv1x1(width, planes * self.expansion)\n        self.bn3 = norm_layer(planes * self.expansion)\n        self.relu = nn.ReLU(inplace=True)\n        self.downsample = downsample\n        self.stride = stride\n\n    def forward(self, x):\n        identity = x\n\n        out = self.conv1(x)\n        out = self.bn1(out)\n        out = self.relu(out)\n\n        out = self.conv2(out)\n        out = self.bn2(out)\n        out = self.relu(out)\n\n        out = self.conv3(out)\n        out = self.bn3(out)\n\n        if self.downsample is not None:\n            identity = self.downsample(x)\n\n        out += identity\n        out = self.relu(out)\n\n        return out\n\n\nclass ResNet(nn.Module):\n    \"\"\"Residual network.\n\n    Reference:\n        - He et al. Deep Residual Learning for Image Recognition. CVPR 2016.\n        - Xie et al. Aggregated Residual Transformations for Deep Neural Networks. CVPR 2017.\n\n    Public keys:\n        - ``resnet18``: ResNet18.\n        - ``resnet34``: ResNet34.\n        - ``resnet50``: ResNet50.\n        - ``resnet101``: ResNet101.\n        - ``resnet152``: ResNet152.\n        - ``resnext50_32x4d``: ResNeXt50.\n        - ``resnext101_32x8d``: ResNeXt101.\n        - ``resnet50_fc512``: ResNet50 + FC.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_classes,\n        loss,\n        block,\n        layers,\n        zero_init_residual=False,\n        groups=1,\n        width_per_group=64,\n        replace_stride_with_dilation=None,\n        norm_layer=None,\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        **kwargs,\n    ):\n        super(ResNet, self).__init__()\n        if norm_layer is None:\n            norm_layer = nn.BatchNorm2d\n        self._norm_layer = norm_layer\n        self.loss = loss\n        self.feature_dim = 512 * block.expansion\n        self.inplanes = 64\n        self.dilation = 1\n        if replace_stride_with_dilation is None:\n            # each element in the tuple indicates if we should replace\n            # the 2x2 stride with a dilated convolution instead\n            replace_stride_with_dilation = [False, False, False]\n        if len(replace_stride_with_dilation) != 3:\n            raise ValueError(\n                \"replace_stride_with_dilation should be None \"\n                \"or a 3-element tuple, got {}\".format(replace_stride_with_dilation)\n            )\n        self.groups = groups\n        self.base_width = width_per_group\n        self.conv1 = nn.Conv2d(\n            3, self.inplanes, kernel_size=7, stride=2, padding=3, bias=False\n        )\n        self.bn1 = norm_layer(self.inplanes)\n        self.relu = nn.ReLU(inplace=True)\n        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\n        self.layer1 = self._make_layer(block, 64, layers[0])\n        self.layer2 = self._make_layer(\n            block, 128, layers[1], stride=2, dilate=replace_stride_with_dilation[0]\n        )\n        self.layer3 = self._make_layer(\n            block, 256, layers[2], stride=2, dilate=replace_stride_with_dilation[1]\n        )\n        self.layer4 = self._make_layer(\n            block,\n            512,\n            layers[3],\n            stride=last_stride,\n            dilate=replace_stride_with_dilation[2],\n        )\n        self.global_avgpool = nn.AdaptiveAvgPool2d((1, 1))\n        self.fc = self._construct_fc_layer(fc_dims, 512 * block.expansion, dropout_p)\n        self.classifier = nn.Linear(self.feature_dim, num_classes)\n\n        self._init_params()\n\n        # Zero-initialize the last BN in each residual branch,\n        # so that the residual branch starts with zeros, and each residual block behaves like an identity.\n        # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677\n        if zero_init_residual:\n            for m in self.modules():\n                if isinstance(m, Bottleneck):\n                    nn.init.constant_(m.bn3.weight, 0)\n                elif isinstance(m, BasicBlock):\n                    nn.init.constant_(m.bn2.weight, 0)\n\n    def _make_layer(self, block, planes, blocks, stride=1, dilate=False):\n        norm_layer = self._norm_layer\n        downsample = None\n        previous_dilation = self.dilation\n        if dilate:\n            self.dilation *= stride\n            stride = 1\n        if stride != 1 or self.inplanes != planes * block.expansion:\n            downsample = nn.Sequential(\n                conv1x1(self.inplanes, planes * block.expansion, stride),\n                norm_layer(planes * block.expansion),\n            )\n\n        layers = []\n        layers.append(\n            block(\n                self.inplanes,\n                planes,\n                stride,\n                downsample,\n                self.groups,\n                self.base_width,\n                previous_dilation,\n                norm_layer,\n            )\n        )\n        self.inplanes = planes * block.expansion\n        for _ in range(1, blocks):\n            layers.append(\n                block(\n                    self.inplanes,\n                    planes,\n                    groups=self.groups,\n                    base_width=self.base_width,\n                    dilation=self.dilation,\n                    norm_layer=norm_layer,\n                )\n            )\n\n        return nn.Sequential(*layers)\n\n    def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):\n        \"\"\"Constructs fully connected layer\n\n        Args:\n            fc_dims (list or tuple): dimensions of fc layers, if None, no fc layers are constructed\n            input_dim (int): input dimension\n            dropout_p (float): dropout probability, if None, dropout is unused\n        \"\"\"\n        if fc_dims is None:\n            self.feature_dim = input_dim\n            return None\n\n        assert isinstance(\n            fc_dims, (list, tuple)\n        ), \"fc_dims must be either list or tuple, but got {}\".format(type(fc_dims))\n\n        layers = []\n        for dim in fc_dims:\n            layers.append(nn.Linear(input_dim, dim))\n            layers.append(nn.BatchNorm1d(dim))\n            layers.append(nn.ReLU(inplace=True))\n            if dropout_p is not None:\n                layers.append(nn.Dropout(p=dropout_p))\n            input_dim = dim\n\n        self.feature_dim = fc_dims[-1]\n\n        return nn.Sequential(*layers)\n\n    def _init_params(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight, mode=\"fan_out\", nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.BatchNorm2d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.BatchNorm1d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.Linear):\n                nn.init.normal_(m.weight, 0, 0.01)\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def featuremaps(self, x):\n        x = self.conv1(x)\n        x = self.bn1(x)\n        x = self.relu(x)\n        x = self.maxpool(x)\n        x = self.layer1(x)\n        x = self.layer2(x)\n        x = self.layer3(x)\n        x = self.layer4(x)\n        return x\n\n    def forward(self, x):\n        f = self.featuremaps(x)\n        v = self.global_avgpool(f)\n        v = v.view(v.size(0), -1)\n\n        if self.fc is not None:\n            v = self.fc(v)\n\n        if not self.training:\n            return v\n\n        y = self.classifier(v)\n\n        if self.loss == \"softmax\":\n            return y\n        elif self.loss == \"triplet\":\n            return y, v\n        else:\n            raise KeyError(\"Unsupported loss: {}\".format(self.loss))\n\n\ndef init_pretrained_weights(model, model_url):\n    \"\"\"Initializes model with pretrained weights.\n\n    Layers that don't match with pretrained layers in name or size are kept unchanged.\n    \"\"\"\n    pretrain_dict = model_zoo.load_url(model_url)\n    model_dict = model.state_dict()\n    pretrain_dict = {\n        k: v\n        for k, v in pretrain_dict.items()\n        if k in model_dict and model_dict[k].size() == v.size()\n    }\n    model_dict.update(pretrain_dict)\n    model.load_state_dict(model_dict)\n\n\n\"\"\"ResNet\"\"\"\n\n\ndef resnet18(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=BasicBlock,\n        layers=[2, 2, 2, 2],\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnet18\"])\n    return model\n\n\ndef resnet34(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=BasicBlock,\n        layers=[3, 4, 6, 3],\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnet34\"])\n    return model\n\n\ndef resnet50(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=Bottleneck,\n        layers=[3, 4, 6, 3],\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnet50\"])\n    return model\n\n\ndef resnet101(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=Bottleneck,\n        layers=[3, 4, 23, 3],\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnet101\"])\n    return model\n\n\ndef resnet152(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=Bottleneck,\n        layers=[3, 8, 36, 3],\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnet152\"])\n    return model\n\n\n\"\"\"ResNeXt\"\"\"\n\n\ndef resnext50_32x4d(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=Bottleneck,\n        layers=[3, 4, 6, 3],\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        groups=32,\n        width_per_group=4,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnext50_32x4d\"])\n    return model\n\n\ndef resnext101_32x8d(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=Bottleneck,\n        layers=[3, 4, 23, 3],\n        last_stride=2,\n        fc_dims=None,\n        dropout_p=None,\n        groups=32,\n        width_per_group=8,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnext101_32x8d\"])\n    return model\n\n\n\"\"\"\nResNet + FC\n\"\"\"\n\n\ndef resnet50_fc512(num_classes, loss=\"softmax\", pretrained=True, **kwargs):\n    model = ResNet(\n        num_classes=num_classes,\n        loss=loss,\n        block=Bottleneck,\n        layers=[3, 4, 6, 3],\n        last_stride=1,\n        fc_dims=[512],\n        dropout_p=None,\n        **kwargs,\n    )\n    if pretrained:\n        init_pretrained_weights(model, model_urls[\"resnet50\"])\n    return model\n"
  },
  {
    "path": "boxmot/reid/backends/base_backend.py",
    "content": "import os\nfrom abc import abstractmethod\nfrom pathlib import Path\n\nimport cv2\nimport gdown\nimport numpy as np\nimport torch\nfrom filelock import SoftFileLock\n\nfrom boxmot.reid.core.registry import ReIDModelRegistry\nfrom boxmot.utils import WEIGHTS, logger as LOGGER\nfrom boxmot.utils.checks import RequirementsChecker\nfrom boxmot.utils.misc import resolve_model_path\n\n\nclass BaseModelBackend:\n    def __init__(self, weights, device, half):\n        self.weights = weights[0] if isinstance(weights, list) else weights\n        if isinstance(self.weights, str):\n            self.weights = Path(self.weights)\n        self.weights = resolve_model_path(self.weights)\n        LOGGER.info(self.weights)\n        self.device = device\n        self.half = half\n        self.model = None\n        self.cuda = torch.cuda.is_available() and self.device.type != \"cpu\"\n\n        self.download_model(self.weights)\n        self.model_name = ReIDModelRegistry.get_model_name(self.weights)\n\n        self.model = ReIDModelRegistry.build_model(\n            self.model_name,\n            self.weights,\n            num_classes=ReIDModelRegistry.get_nr_classes(self.weights),\n            pretrained=not (self.weights and self.weights.is_file()),\n            use_gpu=device,\n        )\n        self.checker = RequirementsChecker()\n        self.load_model(self.weights)\n\n        self.mean_array = torch.tensor([0.485, 0.456, 0.406], device=self.device).view(1, 3, 1, 1)\n        self.std_array = torch.tensor([0.229, 0.224, 0.225], device=self.device).view(1, 3, 1, 1)\n        if \"clip\" in self.model_name:\n            self.mean_array = torch.tensor([0.5, 0.5, 0.5], device=self.device).view(1, 3, 1, 1)\n            self.std_array = torch.tensor([0.5, 0.5, 0.5], device=self.device).view(1, 3, 1, 1)\n\n        # Determine input shape, depending on dataset and model name\n        if \"vehicleid\" in self.weights.name or \"veri\" in self.weights.name:\n            input_shape = (256, 256)\n        elif \"lmbn\" in self.model_name:\n            input_shape = (384, 128)\n        elif \"hacnn\" in self.model_name:\n            input_shape = (160, 64)\n        else: \n            input_shape = (256, 128)\n        self.input_shape = input_shape\n\n    @staticmethod\n    def _obb_to_xyxy(box: np.ndarray) -> np.ndarray:\n        \"\"\"Convert a single OBB `[cx, cy, w, h, angle]` to its enclosing AABB.\"\"\"\n        box = np.asarray(box, dtype=np.float32).reshape(-1)\n        cx, cy, bw, bh, angle = box[:5]\n        rect = ((float(cx), float(cy)), (max(float(bw), 1e-4), max(float(bh), 1e-4)), float(np.degrees(angle)))\n        corners = cv2.boxPoints(rect)\n        x1, y1 = corners.min(axis=0)\n        x2, y2 = corners.max(axis=0)\n        return np.array([x1, y1, x2, y2], dtype=np.float32)\n\n    @staticmethod\n    def _order_corners(corners: np.ndarray) -> np.ndarray:\n        \"\"\"Return corners ordered as top-left, top-right, bottom-right, bottom-left.\"\"\"\n        corners = np.asarray(corners, dtype=np.float32)\n        ordered = np.zeros((4, 2), dtype=np.float32)\n        s = corners.sum(axis=1)\n        d = np.diff(corners, axis=1).reshape(-1)\n        ordered[0] = corners[np.argmin(s)]\n        ordered[2] = corners[np.argmax(s)]\n        ordered[1] = corners[np.argmin(d)]\n        ordered[3] = corners[np.argmax(d)]\n        return ordered\n\n    @staticmethod\n    def _crop_obb(box: np.ndarray, img: np.ndarray) -> np.ndarray:\n        \"\"\"Extract a rectified crop from an oriented box `[cx, cy, w, h, angle]`.\"\"\"\n        box = np.asarray(box, dtype=np.float32).reshape(-1)\n        cx, cy, bw, bh, angle = box[:5]\n        bw = max(float(bw), 1.0)\n        bh = max(float(bh), 1.0)\n        rect = ((float(cx), float(cy)), (bw, bh), float(np.degrees(angle)))\n        src = BaseModelBackend._order_corners(cv2.boxPoints(rect))\n        dst = np.array(\n            [[0, 0], [bw - 1, 0], [bw - 1, bh - 1], [0, bh - 1]],\n            dtype=np.float32,\n        )\n        matrix = cv2.getPerspectiveTransform(src, dst)\n        return cv2.warpPerspective(\n            img,\n            matrix,\n            (max(int(round(bw)), 1), max(int(round(bh)), 1)),\n            flags=cv2.INTER_LINEAR,\n            borderMode=cv2.BORDER_CONSTANT,\n            borderValue=(0, 0, 0),\n        )\n\n    @staticmethod\n    def _is_obb_box(box: np.ndarray) -> bool:\n        \"\"\"Return whether a single row is in one of the supported OBB layouts.\"\"\"\n        return np.asarray(box).reshape(-1).shape[0] in (5, 7, 9)\n\n    @classmethod\n    def _boxes_to_xyxy(cls, boxes: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Normalize AABB/OBB detections to `[x1, y1, x2, y2]` for ReID cropping.\n\n        Accepted layouts:\n        - AABB: `[x1, y1, x2, y2]` or rows with at least 4 leading AABB coordinates\n        - OBB: `[cx, cy, w, h, angle]`, `[cx, cy, w, h, angle, conf, cls]`,\n          or track outputs with 9 leading OBB fields.\n        \"\"\"\n        boxes = np.asarray(boxes, dtype=np.float32)\n        if boxes.size == 0:\n            return boxes.reshape(0, 4)\n        if boxes.ndim == 1:\n            boxes = boxes.reshape(1, -1)\n\n        if boxes.shape[1] in (5, 7, 9):\n            return np.vstack([cls._obb_to_xyxy(box[:5]) for box in boxes]).astype(np.float32)\n\n        if boxes.shape[1] < 4:\n            raise ValueError(\"Expected detections with at least 4 coordinates\")\n\n        return boxes[:, :4].astype(np.float32, copy=False)\n\n    def get_crops(self, xyxys, img):\n        h, w = img.shape[:2]\n        interpolation_method = cv2.INTER_LINEAR\n        xyxys = np.asarray(xyxys, dtype=np.float32)\n        if xyxys.size == 0:\n            xyxys = xyxys.reshape(0, 4)\n        elif xyxys.ndim == 1:\n            xyxys = xyxys.reshape(1, -1)\n        \n        # Preallocate tensor for crops\n        num_crops = len(xyxys)\n        crops = torch.empty(\n            (num_crops, 3, *self.input_shape),\n            dtype=torch.half if self.half else torch.float,\n            device=self.device,\n        )\n\n        for i, box in enumerate(xyxys):\n            if self._is_obb_box(box):\n                crop = self._crop_obb(box[:5], img)\n            else:\n                x1, y1, x2, y2 = box[:4].round().astype(\"int\")\n                x1, y1, x2, y2 = max(0, x1), max(0, y1), min(w, x2), min(h, y2)\n\n                if x2 <= x1:\n                    x1 = min(max(0, x1), max(0, w - 1))\n                    x2 = min(w, x1 + 1)\n                if y2 <= y1:\n                    y1 = min(max(0, y1), max(0, h - 1))\n                    y2 = min(h, y1 + 1)\n\n                crop = img[y1:y2, x1:x2]\n\n            # Resize and convert color in one step\n            crop = cv2.resize(\n                crop,\n                (self.input_shape[1], self.input_shape[0]),\n                interpolation=interpolation_method,\n            )\n            crop = cv2.cvtColor(crop, cv2.COLOR_BGR2RGB)\n\n            # Convert to tensor and normalize (convert to [0, 1] by dividing by 255 in batch later)\n            crop = torch.from_numpy(crop).to(\n                self.device, dtype=torch.half if self.half else torch.float\n            )\n            crops[i] = torch.permute(crop, (2, 0, 1))  # Change to (C, H, W)\n\n        # Normalize the entire batch in one go\n        crops = crops / 255.0\n\n        # Standardize the batch\n        crops = (crops - self.mean_array) / self.std_array\n\n        return crops\n\n    @torch.no_grad()\n    def get_features(self, xyxys, img):\n        if xyxys.size != 0:\n            crops = self.get_crops(xyxys, img)\n            crops = self.inference_preprocess(crops)\n            features = self.forward(crops)\n            features = self.inference_postprocess(features)\n        else:\n            features = np.array([])\n        features = features / np.linalg.norm(features, axis=-1, keepdims=True)\n        return features\n\n    def warmup(self, imgsz=[(256, 128, 3)]):\n        # warmup model by running inference once\n        if self.device.type != \"cpu\":\n            im = np.random.randint(0, 255, *imgsz, dtype=np.uint8)\n            crops = self.get_crops(\n                xyxys=np.array([[0, 0, 64, 64], [0, 0, 128, 128]]), img=im\n            )\n            crops = self.inference_preprocess(crops)\n            self.forward(crops)  # warmup\n\n    def to_numpy(self, x):\n        return x.cpu().numpy() if isinstance(x, torch.Tensor) else x\n\n    def inference_preprocess(self, x):\n        if self.half:\n            if isinstance(x, torch.Tensor):\n                if x.dtype != torch.float16:\n                    x = x.half()\n            elif isinstance(x, np.ndarray):\n                if x.dtype != np.float16:\n                    x = x.astype(np.float16)\n\n        if self.nhwc:\n            if isinstance(x, torch.Tensor):\n                x = x.permute(0, 2, 3, 1)  # Convert from NCHW to NHWC\n            elif isinstance(x, np.ndarray):\n                x = np.transpose(x, (0, 2, 3, 1))  # Convert from NCHW to NHWC\n        return x\n\n    def inference_postprocess(self, features):\n        if isinstance(features, (list, tuple)):\n            return (\n                self.to_numpy(features[0]) if len(features) == 1 else [self.to_numpy(x) for x in features]\n            )\n        else:\n            return self.to_numpy(features)\n\n    @abstractmethod\n    def forward(self, im_batch):\n        raise NotImplementedError(\"This method should be implemented by subclasses.\")\n\n    @abstractmethod\n    def load_model(self, w):\n        raise NotImplementedError(\"This method should be implemented by subclasses.\")\n\n\n    def download_model(self, w):\n        if isinstance(w, str): \n            w = Path(w)\n        w = resolve_model_path(w)\n\n        if w.suffix != \".pt\":\n            return\n\n        w.parent.mkdir(parents=True, exist_ok=True)\n\n        model_url = ReIDModelRegistry.get_model_url(w)\n        lock = SoftFileLock(str(w) + \".lock\", timeout=300)  # Wait up to 5 minutes\n\n        with lock:\n            if w.exists() or \"openvino\" in w.name:\n                LOGGER.info(f\"[PID {os.getpid()}] Found existing ReID weights at {w}; skipping download.\")\n                return\n\n            if model_url:\n                LOGGER.info(f\"[PID {os.getpid()}] Downloading ReID weights from {model_url} → {w}\")\n                gdown.download(model_url, str(w), quiet=False)\n            else:\n                LOGGER.error(\n                    f\"No URL associated with the chosen ReID weights ({w}).\\n\"\n                    f\"Choose one of the following:\"\n                )\n                ReIDModelRegistry.show_downloadable_models()\n"
  },
  {
    "path": "boxmot/reid/backends/onnx_backend.py",
    "content": "from boxmot.reid.backends.base_backend import BaseModelBackend\n\n\nclass ONNXBackend(BaseModelBackend):\n\n    def __init__(self, weights, device, half):\n        super().__init__(weights, device, half)\n        self.nhwc = False\n        self.half = half\n\n    def load_model(self, w):\n\n        # ONNXRuntime will attempt to use the first provider, and if it fails or is not\n        # available for some reason, it will fall back to the next provider in the list\n        if self.device.type == \"mps\":\n            self.checker.check_packages((\"onnxruntime-silicon>=1.18.1\",))\n            providers = [\"MPSExecutionProvider\", \"CPUExecutionProvider\"]\n        elif self.device.type == \"cuda\":\n            self.checker.check_packages((\"onnxruntime-gpu>=1.18.1\",))\n            providers = [\"CUDAExecutionProvider\", \"CPUExecutionProvider\"]\n        else:\n            self.checker.check_packages((\"onnxruntime>=1.18.1\",))\n            providers = [\"CPUExecutionProvider\"]\n\n        # Load the ONNX model using onnxruntime\n        import onnxruntime\n\n        self.session = onnxruntime.InferenceSession(str(w), providers=providers)\n\n    def forward(self, im_batch):\n        # Convert torch tensor to numpy (onnxruntime expects numpy arrays)\n        im_batch = im_batch.cpu().numpy()\n\n        # Run inference using ONNX session\n        features = self.session.run(\n            [self.session.get_outputs()[0].name],\n            {self.session.get_inputs()[0].name: im_batch},\n        )[0]\n\n        return features\n"
  },
  {
    "path": "boxmot/reid/backends/openvino_backend.py",
    "content": "from pathlib import Path\n\nfrom boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.utils import logger as LOGGER\n\n\nclass OpenVinoBackend(BaseModelBackend):\n\n    def __init__(self, weights, device, half):\n        super().__init__(weights, device, half)\n        self.nhwc = False\n        self.half = half\n\n    def load_model(self, w):\n        self.checker.check_packages((\"openvino>=2025.2.0\",))\n\n        LOGGER.info(f\"Loading {w} for OpenVINO inference...\")\n        try:\n            # requires openvino-dev: https://pypi.org/project/openvino-dev/\n            from openvino import Core, Layout\n        except ImportError:\n            LOGGER.error(\n                f\"Running {self.__class__} with the specified OpenVINO weights\\n{w.name}\\n\"\n                \"requires openvino pip package to be installed!\\n\"\n                \"$ pip install openvino>=2025.2.0\\n\"\n            )\n        ie = Core()\n        w = Path(w)\n        LOGGER.info(w)\n        if w.suffix == '.bin':\n            w = w.with_suffix('.xml')\n\n        if not w.is_file():  # if not *.xml\n            w = next(\n                Path(w).glob(\"*.xml\")\n            )  # get *.xml file from *_openvino_model dir\n        network = ie.read_model(model=w, weights=Path(w).with_suffix(\".bin\"))\n        if network.get_parameters()[0].get_layout().empty:\n            network.get_parameters()[0].set_layout(Layout(\"NCWH\"))\n        self.executable_network = ie.compile_model(\n            network, device_name=\"CPU\"\n        )  # device_name=\"MYRIAD\" for Intel NCS2\n        self.output_layer = next(iter(self.executable_network.outputs))\n\n    def forward(self, im_batch):\n        im_batch = im_batch.cpu().numpy()  # FP32\n        features = self.executable_network([im_batch])[self.output_layer]\n        return features\n"
  },
  {
    "path": "boxmot/reid/backends/pytorch_backend.py",
    "content": "from boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.reid.core.registry import ReIDModelRegistry\n\n\nclass PyTorchBackend(BaseModelBackend):\n\n    def __init__(self, weights, device, half):\n        super().__init__(weights, device, half)\n        self.nhwc = False\n        self.half = half\n\n    def load_model(self, w):\n        # Load a PyTorch model\n        if w and w.is_file():\n            ReIDModelRegistry.load_pretrained_weights(self.model, w)\n        self.model.to(self.device).eval()\n        self.model.half() if self.half else self.model.float()\n\n    def forward(self, im_batch):\n        features = self.model(im_batch)\n        return features\n"
  },
  {
    "path": "boxmot/reid/backends/tensorrt_backend.py",
    "content": "from collections import OrderedDict, namedtuple\n\nimport numpy as np\nimport torch\n\nfrom boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.utils import logger as LOGGER\n\n\nclass TensorRTBackend(BaseModelBackend):\n    def __init__(self, weights, device, half):\n        self.is_trt10 = False\n        super().__init__(weights, device, half)\n        self.nhwc = False\n        self.half = half\n        self.device = device\n        self.weights = weights\n        self.fp16 = False  # Will be updated in load_model\n        self.load_model(self.weights)\n\n    def load_model(self, w):\n        LOGGER.info(f\"Loading {w} for TensorRT inference...\")\n        self.checker.check_packages((\"nvidia-tensorrt\",))\n        try:\n            import tensorrt as trt  # TensorRT library\n        except ImportError:\n            raise ImportError(\"Please install tensorrt to use this backend.\")\n\n        if self.device.type == \"cpu\":\n            if torch.cuda.is_available():\n                self.device = torch.device(\"cuda:0\")\n            else:\n                raise ValueError(\"CUDA device not available for TensorRT inference.\")\n\n        Binding = namedtuple(\"Binding\", (\"name\", \"dtype\", \"shape\", \"data\", \"ptr\"))\n        logger = trt.Logger(trt.Logger.INFO)\n\n        # Deserialize the engine\n        with open(w, \"rb\") as f, trt.Runtime(logger) as runtime:\n            self.model_ = runtime.deserialize_cuda_engine(f.read())\n\n        # Execution context\n        self.context = self.model_.create_execution_context()\n        self.bindings = OrderedDict()\n        self.input_name = None\n        self.output_name = None\n\n        self.is_trt10 = not hasattr(self.model_, \"num_bindings\")\n        num = range(self.model_.num_io_tensors) if self.is_trt10 else range(self.model_.num_bindings)\n\n        # Parse bindings\n        for index in num:\n            if self.is_trt10:\n                name = self.model_.get_tensor_name(index)\n                dtype = trt.nptype(self.model_.get_tensor_dtype(name))\n                is_input = self.model_.get_tensor_mode(name) == trt.TensorIOMode.INPUT\n                if is_input and -1 in tuple(self.model_.get_tensor_shape(name)):\n                        self.context.set_input_shape(name, tuple(self.model_.get_tensor_profile_shape(name, 0)[1]))\n                if is_input and dtype == np.float16:\n                    self.fp16 = True\n\n                shape = tuple(self.context.get_tensor_shape(name))\n\n            else:\n                name = self.model_.get_binding_name(index)\n                dtype = trt.nptype(self.model_.get_binding_dtype(index))\n                is_input = self.model_.binding_is_input(index)\n\n                # Handle dynamic shapes\n                if is_input and -1 in self.model_.get_binding_shape(index):\n                    profile_index = 0\n                    min_shape, opt_shape, max_shape = self.model_.get_profile_shape(profile_index, index)\n                    self.context.set_binding_shape(index, opt_shape)\n\n                if is_input and dtype == np.float16:\n                    self.fp16 = True\n\n                shape = tuple(self.context.get_binding_shape(index))\n            data = torch.from_numpy(np.empty(shape, dtype=dtype)).to(self.device)\n            self.bindings[name] = Binding(name, dtype, shape, data, int(data.data_ptr()))\n\n            if is_input and self.input_name is None:\n                self.input_name = name\n            if not is_input and self.output_name is None:\n                self.output_name = name\n\n        # Prefer canonical names when present, otherwise fallback to first I/O tensor.\n        if \"images\" in self.bindings:\n            self.input_name = \"images\"\n        if \"output\" in self.bindings:\n            self.output_name = \"output\"\n        elif \"output0\" in self.bindings:\n            self.output_name = \"output0\"\n\n        if self.input_name is None or self.output_name is None:\n            raise RuntimeError(\n                f\"Failed to infer TensorRT I/O bindings. Available bindings: {list(self.bindings.keys())}\"\n            )\n\n        self.binding_addrs = OrderedDict((n, d.ptr) for n, d in self.bindings.items())\n\n    def forward(self, im_batch):\n        temp_im_batch = im_batch.clone()\n        batch_array = []\n        inp_batch = im_batch.shape[0]\n        out_batch = self.bindings[self.output_name].shape[0]\n        resultant_features = []\n\n        # Divide batch to sub batches\n        while inp_batch > out_batch:\n            batch_array.append(temp_im_batch[:out_batch])\n            temp_im_batch = temp_im_batch[out_batch:]\n            inp_batch = temp_im_batch.shape[0]\n        if temp_im_batch.shape[0] > 0:\n            batch_array.append(temp_im_batch)\n\n        for temp_batch in batch_array:\n            # Adjust for dynamic shapes\n            if temp_batch.shape != self.bindings[self.input_name].shape:\n                if self.is_trt10:\n\n                    self.context.set_input_shape(self.input_name, temp_batch.shape)\n                    self.bindings[self.input_name] = self.bindings[self.input_name]._replace(shape=temp_batch.shape)\n                    self.bindings[self.output_name].data.resize_(tuple(self.context.get_tensor_shape(self.output_name)))\n                else:\n                    i_in = self.model_.get_binding_index(self.input_name)\n                    i_out = self.model_.get_binding_index(self.output_name)\n                    self.context.set_binding_shape(i_in, temp_batch.shape)\n                    self.bindings[self.input_name] = self.bindings[self.input_name]._replace(shape=temp_batch.shape)\n                    output_shape = tuple(self.context.get_binding_shape(i_out))\n                    self.bindings[self.output_name].data.resize_(output_shape)\n\n            s = self.bindings[self.input_name].shape\n            assert temp_batch.shape == s, f\"Input size {temp_batch.shape} does not match model size {s}\"\n\n            self.binding_addrs[self.input_name] = int(temp_batch.data_ptr())\n\n            # Execute inference\n            self.context.execute_v2(list(self.binding_addrs.values()))\n            features = self.bindings[self.output_name].data\n            resultant_features.append(features.clone())\n\n        if len(resultant_features) == 1:\n            return resultant_features[0]\n        else:\n            rslt_features = torch.cat(resultant_features, dim=0)\n            rslt_features = rslt_features[: im_batch.shape[0]]\n            return rslt_features\n"
  },
  {
    "path": "boxmot/reid/backends/tflite_backend.py",
    "content": "from pathlib import Path\nfrom importlib import import_module\nfrom typing import Any\n\nimport numpy as np\nimport torch\n\nfrom boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.utils import logger as LOGGER\n\n\nclass TFLiteBackend(BaseModelBackend):\n    \"\"\"\n    A class to handle LiteRT inference for TFLite models with dynamic batch size support.\n\n    Attributes:\n        nhwc (bool): A flag indicating the order of dimensions.\n        half (bool): A flag to indicate if half precision is used.\n        interpreter: The LiteRT interpreter instance.\n        current_allocated_batch_size (int): The current batch size allocated in the interpreter.\n    \"\"\"\n\n    def __init__(self, weights: Path, device: str, half: bool):\n        \"\"\"\n        Initializes the TFLiteBackend with given weights, device, and precision flag.\n\n        Args:\n            weights (Path): Path to the TFLite model file.\n            device (str): Device type (e.g., 'cpu', 'gpu').\n            half (bool): Flag to indicate if half precision is used.\n        \"\"\"\n        super().__init__(weights, device, half)\n        self.nhwc = True\n        self.half = False\n        # self.interpreter: tf.lite.Interpreter = None\n        # self.current_allocated_batch_size: int = None\n\n    def _get_interpreter_class(self) -> type[Any]:\n        \"\"\"Resolve the LiteRT interpreter class, installing LiteRT when needed.\"\"\"\n        try:\n            litert = import_module(\"ai_edge_litert.interpreter\")\n        except ModuleNotFoundError:\n            self.checker.check_packages((\"ai-edge-litert\",))\n            litert = import_module(\"ai_edge_litert.interpreter\")\n        return litert.Interpreter\n\n    def load_model(self, w):\n        \"\"\"\n        Loads the TFLite model and initializes the LiteRT interpreter.\n\n        Args:\n            w (str): Path to the TFLite model file.\n        \"\"\"\n        interpreter_class = self._get_interpreter_class()\n        LOGGER.info(f\"Loading {str(w)} for LiteRT inference...\")\n        self.interpreter = interpreter_class(model_path=str(w))\n\n        self.interpreter.allocate_tensors()  # allocate\n        self.input_details = self.interpreter.get_input_details()  # inputs\n        self.output_details = self.interpreter.get_output_details()  # outputs\n        self.current_allocated_batch_size = self.input_details[0][\"shape\"][0]\n\n    def forward(self, im_batch: torch.Tensor) -> np.ndarray:\n        \"\"\"\n        Runs forward pass for the given image batch through the TFLite model.\n\n        Args:\n            im_batch (torch.Tensor): Input image batch tensor.\n\n        Returns:\n            np.ndarray: Output features from the TFLite model.\n        \"\"\"\n        im_batch = im_batch.cpu().numpy()\n\n        # Extract batch size from im_batch\n        batch_size = im_batch.shape[0]\n\n        # Resize tensors if the new batch size is different from the current allocated batch size\n        if batch_size != self.current_allocated_batch_size:\n            # print(f\"Resizing tensor input to batch size {batch_size}\")\n            self.interpreter.resize_tensor_input(\n                self.input_details[0][\"index\"], [batch_size, 256, 128, 3]\n            )\n            self.interpreter.allocate_tensors()\n            self.current_allocated_batch_size = batch_size\n\n        # Set the tensor to point to the input data\n        self.interpreter.set_tensor(self.input_details[0][\"index\"], im_batch)\n\n        # Run inference\n        self.interpreter.invoke()\n\n        # Get the output data\n        features = self.interpreter.get_tensor(self.output_details[0][\"index\"])\n\n        return features\n"
  },
  {
    "path": "boxmot/reid/backends/torchscript_backend.py",
    "content": "import torch\n\nfrom boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.utils import logger as LOGGER\n\n\nclass TorchscriptBackend(BaseModelBackend):\n\n    def __init__(self, weights, device, half):\n        super().__init__(weights, device, half)\n        self.nhwc = False\n        self.half = half\n\n    def load_model(self, w):\n\n        LOGGER.info(f\"Loading {w} for TorchScript inference...\")\n        self.model = torch.jit.load(w)\n        self.model.half() if self.half else self.model.float()\n\n    def forward(self, im_batch):\n        features = self.model(im_batch)\n        return features\n"
  },
  {
    "path": "boxmot/reid/core/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport pandas as pd\n\n\ndef export_formats():\n    # yolo tracking export formats\n    x = [\n        [\"PyTorch\", \"-\", \".pt\", True, True],\n        [\"TorchScript\", \"torchscript\", \".torchscript\", True, True],\n        [\"ONNX\", \"onnx\", \".onnx\", True, True],\n        [\"OpenVINO\", \"openvino\", \"_openvino_model\", True, False],\n        [\"TensorRT\", \"engine\", \".engine\", False, True],\n        [\"TensorFlow Lite\", \"tflite\", \".tflite\", True, False],\n    ]\n    return pd.DataFrame(x, columns=[\"Format\", \"Argument\", \"Suffix\", \"CPU\", \"GPU\"])\n\n\nfrom .reid_handler import ReID\n"
  },
  {
    "path": "boxmot/reid/core/auto_backend.py",
    "content": "from pathlib import Path\nfrom typing import Tuple, Union\n\nimport torch\n\nfrom boxmot.reid.backends.onnx_backend import ONNXBackend\nfrom boxmot.reid.backends.openvino_backend import OpenVinoBackend\nfrom boxmot.reid.backends.pytorch_backend import PyTorchBackend\nfrom boxmot.reid.backends.tensorrt_backend import TensorRTBackend\nfrom boxmot.reid.backends.tflite_backend import TFLiteBackend\nfrom boxmot.reid.backends.torchscript_backend import TorchscriptBackend\nfrom boxmot.reid.core import export_formats\nfrom boxmot.utils import WEIGHTS\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.torch_utils import select_device\n\n\nclass ReidAutoBackend:\n    def __init__(\n        self,\n        weights: Path = WEIGHTS / \"osnet_x0_25_msmt17.pt\",\n        device: torch.device = torch.device(\"cpu\"),\n        half: bool = False,\n    ) -> None:\n        \"\"\"\n        Initializes the ReidAutoBackend instance with specified weights, device, and precision mode.\n\n        Args:\n            weights (Union[str, List[str]]): Path to the model weights. Can be a string or a list of strings; if a list, the first element is used.\n            device (torch.device): The device to run the model on, e.g., CPU or GPU.\n            half (bool): Whether to use half precision for model inference.\n        \"\"\"\n        super().__init__()\n        w = weights[0] if isinstance(weights, list) else weights\n        (\n            self.pt,\n            self.jit,\n            self.onnx,\n            self.xml,\n            self.engine,\n            self.tflite,\n        ) = self.model_type(w)  # get backend\n\n        self.weights = weights\n        self.device = select_device(device)\n        self.half = half\n        self.model = self.get_backend()\n\n    def get_backend(\n        self,\n    ) -> Union[\n        \"PyTorchBackend\",\n        \"TorchscriptBackend\",\n        \"ONNXBackend\",\n        \"TensorRTBackend\",\n        \"OpenVinoBackend\",\n        \"TFLiteBackend\",\n    ]:\n        \"\"\"\n        Returns an instance of the appropriate backend based on the model type.\n\n        Returns:\n            An instance of a backend class corresponding to the detected model type.\n\n        Raises:\n            SystemExit: If no supported model framework is detected.\n        \"\"\"\n\n        # Mapping of conditions to backend constructors\n        backend_map = {\n            self.pt: PyTorchBackend,\n            self.jit: TorchscriptBackend,\n            self.onnx: ONNXBackend,\n            self.engine: TensorRTBackend,\n            self.xml: OpenVinoBackend,\n            self.tflite: TFLiteBackend,\n        }\n\n        # Iterate through the mapping and return the first matching backend\n        for condition, backend_class in backend_map.items():\n            if condition:\n                return backend_class(self.weights, self.device, self.half)\n\n        # If no condition is met, log an error and exit\n        LOGGER.error(\"This model framework is not supported yet!\")\n        exit()\n\n    def check_suffix(\n        self,\n        file: Path = \"osnet_x0_25_msmt17.pt\",\n        suffix: Union[str, Tuple[str, ...]] = (\".pt\",),\n        msg: str = \"\",\n    ) -> None:\n        \"\"\"\n        Validates that the file or files have an acceptable suffix.\n\n        Args:\n            file (Union[str, List[str], Path]): The file or files to check.\n            suffix (Union[str, Tuple[str, ...]]): Acceptable suffix or suffixes.\n            msg (str): Additional message to log in case of an error.\n        \"\"\"\n\n        suffix = [suffix] if isinstance(suffix, str) else list(suffix)\n        files = [file] if isinstance(file, (str, Path)) else list(file)\n\n        for f in files:\n            file_suffix = Path(f).suffix.lower()\n            if file_suffix and file_suffix not in suffix:\n                LOGGER.error(\n                    f\"File {f} does not have an acceptable suffix. Expected: {suffix}\"\n                )\n\n    def model_type(self, p: Path) -> Tuple[bool, ...]:\n        \"\"\"\n        Determines the model type based on the file's suffix.\n\n        Args:\n            path (str): The file path to the model.\n\n        Returns:\n            Tuple[bool, ...]: A tuple of booleans indicating the model type, corresponding to pt, jit, onnx, xml, engine, and tflite.\n        \"\"\"\n\n        sf = list(export_formats().Suffix)  # export suffixes\n        self.check_suffix(p, sf)  # checks\n        types = [s in Path(p).name for s in sf]\n        \n        # Explicitly check for OpenVINO extensions (xml, bin)\n        if Path(p).suffix in ['.xml', '.bin']:\n            # Find index of OpenVINO suffix\n            try:\n                ov_idx = sf.index('_openvino_model')\n                types[ov_idx] = True\n            except ValueError:\n                pass\n        \n        return types\n"
  },
  {
    "path": "boxmot/reid/core/config.py",
    "content": "MODEL_TYPES = [\n    \"resnet50\",\n    \"resnet101\",\n    \"mlfn\",\n    \"hacnn\",\n    \"mobilenetv2_x1_0\",\n    \"mobilenetv2_x1_4\",\n    \"osnet_x1_0\",\n    \"osnet_x0_75\",\n    \"osnet_x0_5\",\n    \"osnet_x0_25\",\n    \"osnet_ibn_x1_0\",\n    \"osnet_ain_x1_0\",\n    \"lmbn_n\",\n    \"clip\",\n]\n\nTRAINED_URLS = {\n    # resnet50\n    \"resnet50_market1501.pt\": \"https://drive.google.com/uc?id=1dUUZ4rHDWohmsQXCRe2C_HbYkzz94iBV\",\n    \"resnet50_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=17ymnLglnc64NRvGOitY3BqMRS9UWd1wg\",\n    \"resnet50_msmt17.pt\": \"https://drive.google.com/uc?id=1ep7RypVDOthCRIAqDnn4_N-UhkkFHJsj\",\n    \"resnet50_fc512_market1501.pt\": \"https://drive.google.com/uc?id=1kv8l5laX_YCdIGVCetjlNdzKIA3NvsSt\",\n    \"resnet50_fc512_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=13QN8Mp3XH81GK4BPGXobKHKyTGH50Rtx\",\n    \"resnet50_fc512_msmt17.pt\": \"https://drive.google.com/uc?id=1fDJLcz4O5wxNSUvImIIjoaIF9u1Rwaud\",\n    # mlfn\n    \"mlfn_market1501.pt\": \"https://drive.google.com/uc?id=1wXcvhA_b1kpDfrt9s2Pma-MHxtj9pmvS\",\n    \"mlfn_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=1rExgrTNb0VCIcOnXfMsbwSUW1h2L1Bum\",\n    \"mlfn_msmt17.pt\": \"https://drive.google.com/uc?id=18JzsZlJb3Wm7irCbZbZ07TN4IFKvR6p-\",\n    # hacnn\n    \"hacnn_market1501.pt\": \"https://drive.google.com/uc?id=1LRKIQduThwGxMDQMiVkTScBwR7WidmYF\",\n    \"hacnn_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=1zNm6tP4ozFUCUQ7Sv1Z98EAJWXJEhtYH\",\n    \"hacnn_msmt17.pt\": \"https://drive.google.com/uc?id=1MsKRtPM5WJ3_Tk2xC0aGOO7pM3VaFDNZ\",\n    # mobilenetv2\n    \"mobilenetv2_x1_0_market1501.pt\": \"https://drive.google.com/uc?id=18DgHC2ZJkjekVoqBWszD8_Xiikz-fewp\",\n    \"mobilenetv2_x1_0_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=1q1WU2FETRJ3BXcpVtfJUuqq4z3psetds\",\n    \"mobilenetv2_x1_0_msmt17.pt\": \"https://drive.google.com/uc?id=1j50Hv14NOUAg7ZeB3frzfX-WYLi7SrhZ\",\n    \"mobilenetv2_x1_4_market1501.pt\": \"https://drive.google.com/uc?id=1t6JCqphJG-fwwPVkRLmGGyEBhGOf2GO5\",\n    \"mobilenetv2_x1_4_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=12uD5FeVqLg9-AFDju2L7SQxjmPb4zpBN\",\n    \"mobilenetv2_x1_4_msmt17.pt\": \"https://drive.google.com/uc?id=1ZY5P2Zgm-3RbDpbXM0kIBMPvspeNIbXz\",\n    # osnet\n    \"osnet_x1_0_market1501.pt\": \"https://drive.google.com/uc?id=1vduhq5DpN2q1g4fYEZfPI17MJeh9qyrA\",\n    \"osnet_x1_0_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=1QZO_4sNf4hdOKKKzKc-TZU9WW1v6zQbq\",\n    \"osnet_x1_0_msmt17.pt\": \"https://drive.google.com/uc?id=112EMUfBPYeYg70w-syK6V6Mx8-Qb9Q1M\",\n    \"osnet_x0_75_market1501.pt\": \"https://drive.google.com/uc?id=1ozRaDSQw_EQ8_93OUmjDbvLXw9TnfPer\",\n    \"osnet_x0_75_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=1IE3KRaTPp4OUa6PGTFL_d5_KQSJbP0Or\",\n    \"osnet_x0_75_msmt17.pt\": \"https://drive.google.com/uc?id=1QEGO6WnJ-BmUzVPd3q9NoaO_GsPNlmWc\",\n    \"osnet_x0_5_market1501.pt\": \"https://drive.google.com/uc?id=1PLB9rgqrUM7blWrg4QlprCuPT7ILYGKT\",\n    \"osnet_x0_5_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=1KoUVqmiST175hnkALg9XuTi1oYpqcyTu\",\n    \"osnet_x0_5_msmt17.pt\": \"https://drive.google.com/uc?id=1UT3AxIaDvS2PdxzZmbkLmjtiqq7AIKCv\",\n    \"osnet_x0_25_market1501.pt\": \"https://drive.google.com/uc?id=1z1UghYvOTtjx7kEoRfmqSMu-z62J6MAj\",\n    \"osnet_x0_25_dukemtmcreid.pt\": \"https://drive.google.com/uc?id=1eumrtiXT4NOspjyEV4j8cHmlOaaCGk5l\",\n    \"osnet_x0_25_msmt17.pt\": \"https://drive.google.com/uc?id=1sSwXSUlj4_tHZequ_iZ8w_Jh0VaRQMqF\",\n    # osnet_ain | osnet_ibn\n    \"osnet_ibn_x1_0_msmt17.pt\": \"https://drive.google.com/uc?id=1q3Sj2ii34NlfxA4LvmHdWO_75NDRmECJ\",\n    \"osnet_ain_x1_0_msmt17.pt\": \"https://drive.google.com/uc?id=1SigwBE6mPdqiJMqhuIY4aqC7--5CsMal\",\n    # lmbn\n    \"lmbn_n_duke.pt\": \"https://github.com/mikel-brostrom/yolov8_tracking/releases/download/v9.0/lmbn_n_duke.pth\",\n    \"lmbn_n_market.pt\": \"https://github.com/mikel-brostrom/yolov8_tracking/releases/download/v9.0/lmbn_n_market.pth\",\n    \"lmbn_n_cuhk03_d.pt\": \"https://github.com/mikel-brostrom/yolov8_tracking/releases/download/v9.0/lmbn_n_cuhk03_d.pth\",\n    # clip\n    \"clip_market1501.pt\": \"https://drive.google.com/uc?id=1GnyAVeNOg3Yug1KBBWMKKbT2x43O5Ch7\",\n    \"clip_duke.pt\": \"https://drive.google.com/uc?id=1ldjSkj-7pXAWmx8on5x0EftlCaolU4dY\",\n    \"clip_veri.pt\": \"https://drive.google.com/uc?id=1RyfHdOBI2pan_wIGSim5-l6cM4S2WN8e\",\n    \"clip_vehicleid.pt\": \"https://drive.google.com/uc?id=168BLegHHxNqatW5wx1YyL2REaThWoof5\",\n}\n\nNR_CLASSES_DICT = {\n    \"market1501\": 751,\n    \"duke\": 702,\n    \"veri\": 576,\n    \"vehicleid\": 576,\n}\n"
  },
  {
    "path": "boxmot/reid/core/factory.py",
    "content": "from boxmot.reid.backbones.clip.make_model import make_model\nfrom boxmot.reid.backbones.hacnn import HACNN\nfrom boxmot.reid.backbones.lmbn.lmbn_n import LMBN_n\nfrom boxmot.reid.backbones.mlfn import mlfn\nfrom boxmot.reid.backbones.mobilenetv2 import (mobilenetv2_x1_0,\n                                               mobilenetv2_x1_4)\nfrom boxmot.reid.backbones.osnet import (osnet_ibn_x1_0, osnet_x0_5,\n                                         osnet_x0_25, osnet_x0_75, osnet_x1_0)\nfrom boxmot.reid.backbones.osnet_ain import (osnet_ain_x0_5, osnet_ain_x0_25,\n                                             osnet_ain_x0_75, osnet_ain_x1_0)\nfrom boxmot.reid.backbones.resnet import resnet50, resnet101\n\n# Map model names to their respective constructors\nMODEL_FACTORY = {\n    \"resnet50\": resnet50,\n    \"resnet101\": resnet101,\n    \"mobilenetv2_x1_0\": mobilenetv2_x1_0,\n    \"mobilenetv2_x1_4\": mobilenetv2_x1_4,\n    \"hacnn\": HACNN,\n    \"mlfn\": mlfn,\n    \"osnet_x1_0\": osnet_x1_0,\n    \"osnet_x0_75\": osnet_x0_75,\n    \"osnet_x0_5\": osnet_x0_5,\n    \"osnet_x0_25\": osnet_x0_25,\n    \"osnet_ibn_x1_0\": osnet_ibn_x1_0,\n    \"osnet_ain_x1_0\": osnet_ain_x1_0,\n    \"osnet_ain_x0_75\": osnet_ain_x0_75,\n    \"osnet_ain_x0_5\": osnet_ain_x0_5,\n    \"osnet_ain_x0_25\": osnet_ain_x0_25,\n    \"lmbn_n\": LMBN_n,\n    \"clip\": make_model,\n}\n"
  },
  {
    "path": "boxmot/reid/core/registry.py",
    "content": "# model_registry.py\nfrom collections import OrderedDict\n\nimport torch\n\nfrom boxmot.reid.core.config import MODEL_TYPES, NR_CLASSES_DICT, TRAINED_URLS\nfrom boxmot.reid.core.factory import MODEL_FACTORY\nfrom boxmot.utils import logger as LOGGER\n\n\nclass ReIDModelRegistry:\n    \"\"\"Encapsulates model registration and related utilities.\"\"\"\n\n    @staticmethod\n    def show_downloadable_models():\n        LOGGER.info(\"Available .pt ReID models for automatic download\")\n        LOGGER.info(list(TRAINED_URLS.keys()))\n\n    @staticmethod\n    def get_model_name(model):\n        for name in MODEL_TYPES:\n            if name in model.name:\n                return name\n        return None\n\n    @staticmethod\n    def get_model_url(model):\n        return TRAINED_URLS.get(model.name, None)\n\n    @staticmethod\n    def load_pretrained_weights(model, weight_path):\n        \"\"\"\n        Loads pretrained weights into a model.\n        Chooses the proper map_location based on CUDA availability.\n        \"\"\"\n        device = \"cpu\" if not torch.cuda.is_available() else None\n        checkpoint = torch.load(\n            weight_path, \n            map_location=torch.device(\"cpu\") if device == \"cpu\" else None,\n            weights_only=False,\n            encoding='latin1',\n        )\n        state_dict = checkpoint.get(\"state_dict\", checkpoint)\n        model_dict = model.state_dict()\n\n        if \"lmbn\" in weight_path.parts:\n            model.load_state_dict(model_dict, strict=True)\n        else:\n            new_state_dict = OrderedDict()\n            matched_layers, discarded_layers = [], []\n            for k, v in state_dict.items():\n                # Remove 'module.' prefix if present\n                key = k[7:] if k.startswith(\"module.\") else k\n                if key in model_dict and model_dict[key].size() == v.size():\n                    new_state_dict[key] = v\n                    matched_layers.append(key)\n                else:\n                    discarded_layers.append(key)\n            model_dict.update(new_state_dict)\n            model.load_state_dict(model_dict)\n\n            if not matched_layers:\n                LOGGER.debug(\n                    f\"Pretrained weights from {weight_path} cannot be loaded. Check key names manually.\"\n                )\n            else:\n                LOGGER.success(f\"Loaded pretrained weights from {weight_path}\")\n\n            if discarded_layers:\n                LOGGER.debug(\n                    f\"Discarded layers due to unmatched keys or size: {discarded_layers}\"\n                )\n\n    @staticmethod\n    def show_available_models():\n        LOGGER.info(\"Available models:\")\n        LOGGER.info(list(MODEL_FACTORY.keys()))\n\n    @staticmethod\n    def get_nr_classes(weights):\n        # Extract dataset name from weights name, then look up in the class dictionary\n        dataset_key = weights.name.split(\"_\")[1]\n        return NR_CLASSES_DICT.get(dataset_key, 1)\n\n    @staticmethod\n    def build_model(name, weights, num_classes, loss=\"softmax\", pretrained=True, use_gpu=True):\n        if name not in MODEL_FACTORY:\n            available = list(MODEL_FACTORY.keys())\n            raise KeyError(f\"Unknown model '{name}'. Must be one of {available}\")\n\n        # Special case handling for clip model\n        if \"clip\" in name:\n            from boxmot.reid.backbones.clip.config.defaults import _C as cfg\n\n            if \"vehicleid\" in weights.name or \"veri\" in weights.name:\n                cfg.INPUT.SIZE_TRAIN = [256, 256]\n                cfg.INPUT.SIZE_TEST = [256, 256]\n\n            return MODEL_FACTORY[name](\n                cfg, num_class=num_classes, camera_num=2, view_num=1\n            )\n\n        return MODEL_FACTORY[name](\n            num_classes=num_classes, loss=loss, pretrained=pretrained, use_gpu=use_gpu\n        )\n"
  },
  {
    "path": "boxmot/reid/core/reid_handler.py",
    "content": "from pathlib import Path\nfrom typing import Union\n\nimport numpy as np\n\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\n\n\nclass ReID:\n    def __init__(self, weights: Union[str, Path], device='cpu', half=False):\n        self.weights = Path(weights)\n        self.device = device\n        self.half = half\n        \n        # Instantiate the backend\n        # ReidAutoBackend detects model type from weights suffix automatically\n        self.backend = ReidAutoBackend(weights=self.weights, device=device, half=half)\n        self.model = self.backend.model\n        \n    def __call__(self, frame: np.ndarray, dets: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Extract features for detections in a frame.\n        \n        Args:\n            frame: (H, W, C) BGR image\n            dets: (N, 6) detections (x1, y1, x2, y2, conf, cls) or similar. \n        \n        Returns:\n            embs: (N, D) embeddings.\n        \"\"\"\n        if dets.shape[0] == 0:\n            # We don't know embedding dimension D until we run, but typical is 2048 or 128.\n            # If empty, return empty 2D array.\n            return np.empty((0, 0)) \n            \n        xyxy = dets[:, :4]\n        \n        # Delegate to the backend model\n        embs = self.model.get_features(xyxy, frame)\n        return embs\n\n"
  },
  {
    "path": "boxmot/reid/exporters/base_exporter.py",
    "content": "from pathlib import Path\n\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.checks import RequirementsChecker\n\n\ndef export_decorator(export_func):\n    def wrapper(self, *args, **kwargs):\n        try:\n            # If a subclass defined a dependency bucket, install it now.\n            if hasattr(self, \"group\") and self.group:\n                # Optional: subclasses can define `cmd` or `extra_args` for installer flags\n                extra_args = getattr(self, \"cmd\", None) or getattr(self, \"extra_args\", None)\n                # Allow either a uv group or a project extra. If you want extras, set `self.extra`\n                extra = getattr(self, \"extra\", None)\n                if extra and self.group:\n                    raise ValueError(\"Provide only one of `group` or `extra` in exporter.\")\n                if self.group:\n                    self.checker.sync_extra(extra=self.group, extra_args=extra_args)\n                elif extra:\n                    self.checker.sync_extra(extra=extra, extra_args=extra_args)\n\n            LOGGER.info(f\"\\nStarting {self.file} export with {self.__class__.__name__}...\")\n            result = export_func(self, *args, **kwargs)\n            if result:\n                LOGGER.info(\n                    f\"Export success, saved as {result} ({self.file_size(result):.1f} MB)\"\n                )\n            return result\n        except Exception as e:\n            LOGGER.error(f\"Export failure: {e}\")\n            return None\n\n    return wrapper\n\n\nclass BaseExporter:\n    def __init__(self, model, im, file, optimize=True, dynamic=True, half=True, simplify=True):\n        self.model = model\n        self.im = im\n        self.file = Path(file)\n        self.optimize = optimize\n        self.dynamic = dynamic\n        self.half = half\n        self.simplify = simplify\n        self.checker = RequirementsChecker()\n        self.workspace = 4\n\n    @staticmethod\n    def file_size(path):\n        path = Path(path)\n        if path.is_file():\n            return path.stat().st_size / 1e6\n        elif path.is_dir():\n            return sum(f.stat().st_size for f in path.glob(\"**/*\") if f.is_file()) / 1e6\n        else:\n            return 0.0\n\n    def export(self):\n        raise NotImplementedError(\"Export method must be implemented in subclasses.\")\n\n    def __init_subclass__(cls, **kwargs):\n        super().__init_subclass__(**kwargs)\n        if \"export\" in cls.__dict__:\n            cls.export = export_decorator(cls.export)\n"
  },
  {
    "path": "boxmot/reid/exporters/onnx_exporter.py",
    "content": "import inspect\nimport torch\nfrom torch.export import Dim\n\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\nfrom boxmot.utils import logger as LOGGER\n\n\nclass ONNXExporter(BaseExporter):\n    group = \"onnx\"\n\n    def __init__(self, model, im, file, opset=None, dynamic=False, half=False, simplify=False):\n        # keep BaseExporter behavior (optimize handled elsewhere in boxmot)\n        super().__init__(model, im, file, optimize=False, dynamic=dynamic, half=half, simplify=simplify)\n        self.opset = opset  # None -> auto\n\n    def export(self):\n        import onnx\n\n        f = self.file.with_suffix(\".onnx\")\n\n        opset = self.opset or self._best_onnx_opset(onnx, cuda=torch.cuda.is_available())\n        LOGGER.info(f\"Exporting ONNX with onnx {onnx.__version__} opset {opset}...\")\n\n        # Determine output count for correct output_names length\n        output_names = self._infer_output_names()\n\n        # --- Export ---\n        args = (self.im,)\n        export_sig = inspect.signature(torch.onnx.export)\n        has_dynamo_arg = \"dynamo\" in export_sig.parameters\n\n        export_kwargs = {\n            \"opset_version\": opset,\n            \"input_names\": [\"images\"],\n            \"output_names\": output_names,\n        }\n\n        if self.dynamic:\n            # Constrain dynamic batch range to satisfy torch.export shape guards on CUDA.\n            export_kwargs[\"dynamic_shapes\"] = ({0: Dim(\"batch\", min=1, max=65535)},)\n\n        if has_dynamo_arg:\n            export_kwargs[\"dynamo\"] = True\n\n        try:\n            torch.onnx.export(\n                self.model,\n                args,\n                str(f),\n                **export_kwargs,\n            )\n        except Exception as e:\n            if not self.dynamic:\n                raise\n\n            LOGGER.warning(\n                f\"Dynamic export via torch.export failed ({e}). \"\n                \"Retrying with legacy dynamic_axes export...\"\n            )\n\n            # Fallback for torch.export/dynamo dynamic shape guard failures.\n            fallback_kwargs = {\n                \"opset_version\": opset,\n                \"input_names\": [\"images\"],\n                \"output_names\": output_names,\n                \"dynamic_axes\": self._build_dynamic_axes(output_names),\n            }\n            if has_dynamo_arg:\n                fallback_kwargs[\"dynamo\"] = False\n\n            torch.onnx.export(\n                self.model,\n                args,\n                str(f),\n                **fallback_kwargs,\n            )\n\n        # --- Load + validate ---\n        model_onnx = onnx.load(str(f))\n        onnx.checker.check_model(model_onnx)\n\n        # --- Simplify (onnxslim) ---\n        if self.simplify:\n            model_onnx = self.simplify_model(model_onnx)\n\n        # --- IR version clamp for ONNXRuntime compatibility ---\n        if getattr(model_onnx, \"ir_version\", 0) > 10:\n            LOGGER.info(\n                f\"Limiting IR version {model_onnx.ir_version} -> 10 for ONNXRuntime compatibility...\"\n            )\n            model_onnx.ir_version = 10\n\n        # --- Optional FP16 conversion for CPU export ---\n        # (If you already exported in FP16 on GPU, you typically don't need this.)\n        if self.half and self.im.device.type == \"cpu\":\n            model_onnx = self._try_fp16_convert_cpu(model_onnx)\n\n        onnx.save(model_onnx, str(f))\n        return f\n\n    def simplify_model(self, model_onnx):\n        try:\n            import onnxslim\n\n            LOGGER.info(f\"Slimming with onnxslim {onnxslim.__version__}...\")\n            return onnxslim.slim(model_onnx)\n        except Exception as e:\n            LOGGER.warning(f\"Simplifier failure: {e}\")\n            return model_onnx\n\n    # -----------------\n    # Helpers\n    # -----------------\n    def _best_onnx_opset(self, onnx, cuda: bool = False) -> int:\n        \"\"\"\n        - If torch exposes ONNX_MAX_OPSET: use second-latest for safety, and reduce further on CUDA.\n        - Else fallback by torch major.minor mapping.\n        \"\"\"\n        # torch.onnx.utils._constants.ONNX_MAX_OPSET exists in newer torch; safest is \"max-1\"\n        max_opset = getattr(getattr(torch.onnx.utils, \"_constants\", None), \"ONNX_MAX_OPSET\", None)\n        if isinstance(max_opset, int) and max_opset > 0:\n            opset = max_opset - 1\n            if cuda:\n                opset -= 2  # matches Ultralytics CUDA-quirk mitigation\n        else:\n            # Fallback mapping (Ultralytics-style)\n            v = \".\".join(torch.__version__.split(\".\")[:2])\n            opset = {\n                \"1.8\": 12,\n                \"1.9\": 12,\n                \"1.10\": 13,\n                \"1.11\": 14,\n                \"1.12\": 15,\n                \"1.13\": 17,\n                \"2.0\": 17,\n                \"2.1\": 17,\n                \"2.2\": 17,\n                \"2.3\": 17,\n                \"2.4\": 20,\n                \"2.5\": 20,\n                \"2.6\": 20,\n                \"2.7\": 20,\n                \"2.8\": 23,\n            }.get(v, 12)\n\n        return min(int(opset), int(onnx.defs.onnx_opset_version()))\n\n    def _infer_output_names(self):\n        # Ensure output_names matches the number of ONNX graph outputs.\n        try:\n            self.model.eval()\n            with torch.no_grad():\n                y = self.model(self.im)\n            if isinstance(y, (tuple, list)):\n                return [f\"output{i}\" for i in range(len(y))]\n        except Exception:\n            # If inference fails here, keep single output name (previous behavior)\n            pass\n        return [\"output0\"]\n\n    def _build_dynamic_axes(self, output_names):\n        # Ultralytics always makes images dynamic in batch/H/W when dynamic=True\n        dyn = {\"images\": {0: \"batch\", 2: \"height\", 3: \"width\"}}\n\n        # For outputs, always make batch dynamic; add extra dims only when obvious\n        try:\n            with torch.no_grad():\n                y = self.model(self.im)\n            ys = list(y) if isinstance(y, (tuple, list)) else [y]\n            for name, t in zip(output_names, ys):\n                if not isinstance(t, torch.Tensor):\n                    dyn[name] = {0: \"batch\"}\n                    continue\n                if t.dim() == 4:\n                    dyn[name] = {0: \"batch\", 2: f\"{name}_h\", 3: f\"{name}_w\"}\n                elif t.dim() == 3:\n                    dyn[name] = {0: \"batch\", 2: f\"{name}_n\"}\n                else:\n                    dyn[name] = {0: \"batch\"}\n        except Exception:\n            for name in output_names:\n                dyn[name] = {0: \"batch\"}\n\n        return dyn\n\n    def _try_fp16_convert_cpu(self, model_onnx):\n        try:\n            from onnxruntime.transformers import float16\n\n            LOGGER.info(\"Converting ONNX graph to FP16 (CPU export)...\")\n            return float16.convert_float_to_float16(model_onnx, keep_io_types=True)\n        except Exception as e:\n            LOGGER.warning(f\"FP16 conversion failure: {e}\")\n            return model_onnx\n"
  },
  {
    "path": "boxmot/reid/exporters/openvino_exporter.py",
    "content": "\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\nfrom boxmot.utils import logger as LOGGER\n\n\nclass OpenVINOExporter(BaseExporter):\n    group = \"openvino\"\n\n    def export(self) -> str:\n        import openvino as ov\n\n        onnx_path = self.file.with_suffix(\".onnx\")\n        export_dir = self.file.parent / f\"{self.file.stem}_openvino_model\"\n        export_dir.mkdir(parents=True, exist_ok=True)\n        xml_path = export_dir / self.file.with_suffix(\".xml\").name\n\n        LOGGER.info(f\"Exporting OpenVINO with openvino {ov.__version__}...\")\n\n        # Ensure ONNX exists (since you run --include onnx this should be true)\n        if not onnx_path.exists():\n            raise FileNotFoundError(f\"Missing ONNX file for OpenVINO export: {onnx_path}\")\n\n        # Fixed CHW for your ReID crops; only batch should vary\n        c, h, w = 3, 256, 128\n\n        # Bounded dynamic batch (pick something that covers your worst case)\n        max_batch = 80\n        batch_dim = ov.Dimension(1, max_batch)\n\n        if self.dynamic:\n            shape = [batch_dim, c, h, w]\n        else:\n            n = int(self.im.shape[0])\n            shape = [n, c, h, w]\n\n        # Convert from ONNX and FORCE the input shape (name must match ONNX input: \"images\")\n        ov_model = ov.convert_model(\n            str(onnx_path),\n            input=[(\"images\", shape)],\n        )\n\n        LOGGER.info(f\"OpenVINO input partial shape (final): {ov_model.inputs[0].partial_shape}\")\n\n        # Save IR (compress_to_fp16 only affects weights)\n        try:\n            ov.save_model(ov_model, str(xml_path), compress_to_fp16=bool(self.half))\n        except TypeError:\n            ov.save_model(ov_model, str(xml_path))\n\n        return str(xml_path)\n"
  },
  {
    "path": "boxmot/reid/exporters/tensorrt_exporter.py",
    "content": "from boxmot.reid.exporters.base_exporter import BaseExporter\nfrom boxmot.reid.exporters.onnx_exporter import ONNXExporter\nfrom boxmot.utils import logger as LOGGER\n\n\nclass EngineExporter(BaseExporter):\n    required_packages = (\"nvidia-tensorrt\",)\n    cmds = \"--extra-index-url https://pypi.ngc.nvidia.com\"\n\n    def export(self):\n\n        assert (\n            self.im.device.type != \"cpu\"\n        ), \"export running on CPU but must be on GPU, i.e. `python export.py --device 0`\"\n        try:\n            import tensorrt as trt\n        except ImportError:\n            import tensorrt as trt\n\n        onnx_file = self.export_onnx()\n        LOGGER.info(f\"\\nStarting export with TensorRT {trt.__version__}...\")\n        is_trt10 = int(trt.__version__.split(\".\")[0]) >= 10  # is TensorRT >= 10\n        assert onnx_file.exists(), f\"Failed to export ONNX file: {onnx_file}\"\n        f = self.file.with_suffix(\".engine\")\n        logger = trt.Logger(trt.Logger.INFO)\n        if True:\n            logger.min_severity = trt.Logger.Severity.VERBOSE\n\n        builder = trt.Builder(logger)\n        config = builder.create_builder_config()\n        workspace = int(self.workspace * (1 << 30))\n        if is_trt10:\n            config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, workspace)\n        else:  # TensorRT versions 7, 8\n            config.max_workspace_size = workspace\n\n        flag = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)\n        network = builder.create_network(flag)\n        parser = trt.OnnxParser(network, logger)\n        if not parser.parse_from_file(str(onnx_file)):\n            raise RuntimeError(f\"Failed to load ONNX file: {onnx_file}\")\n\n        inputs = [network.get_input(i) for i in range(network.num_inputs)]\n        outputs = [network.get_output(i) for i in range(network.num_outputs)]\n        LOGGER.info(\"Network Description:\")\n        for inp in inputs:\n            LOGGER.info(f'\\tinput \"{inp.name}\" with shape {inp.shape} and dtype {inp.dtype}')\n        for out in outputs:\n            LOGGER.info(f'\\toutput \"{out.name}\" with shape {out.shape} and dtype {out.dtype}')\n\n        if self.dynamic:\n            if self.im.shape[0] <= 1:\n                LOGGER.warning(\"WARNING: --dynamic model requires maximum --batch-size argument\")\n            profile = builder.create_optimization_profile()\n            for inp in inputs:\n                if self.half:\n                    inp.dtype = trt.float16\n                profile.set_shape(\n                    inp.name,\n                    (1, *self.im.shape[1:]),\n                    (max(1, self.im.shape[0] // 2), *self.im.shape[1:]),\n                    self.im.shape,\n                )\n            config.add_optimization_profile(profile)\n\n        LOGGER.info(\n            f\"Building FP{16 if builder.platform_has_fast_fp16 and self.half else 32} engine in {f}\"\n        )\n        if builder.platform_has_fast_fp16 and self.half:\n            config.set_flag(trt.BuilderFlag.FP16)\n            config.default_device_type = trt.DeviceType.GPU\n\n        build = builder.build_serialized_network if is_trt10 else builder.build_engine\n        with build(network, config) as engine, open(f, \"wb\") as t:\n            t.write(engine if is_trt10 else engine.serialize())\n\n        return f\n\n    def export_onnx(self):\n        onnx_exporter = ONNXExporter(\n            self.model,\n            self.im,\n            self.file,\n            self.optimize,\n            self.dynamic,\n            self.half,\n            self.simplify,\n        )\n        return onnx_exporter.export()\n"
  },
  {
    "path": "boxmot/reid/exporters/tflite_exporter.py",
    "content": "import inspect\nimport os\nimport shutil\nimport sys\nfrom pathlib import Path\nfrom typing import Optional, Tuple\n\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\nfrom boxmot.reid.exporters.onnx_exporter import ONNXExporter\nfrom boxmot.utils import logger as LOGGER\n\n\nclass TFLiteExporter(BaseExporter):\n    group = \"tflite\"\n\n    def __init__(self, model, im, file, opset=None, dynamic=False, half=False, simplify=False):\n        super().__init__(model, im, file, optimize=False, dynamic=dynamic, half=half, simplify=simplify)\n        self.opset = opset\n\n    def export(self) -> str:\n        if sys.version_info < (3, 12):\n            raise RuntimeError(\"TFLite export requires Python 3.12 for the pinned onnx2tf flatbuffer_direct stack.\")\n        if sys.platform not in {\"linux\", \"win32\"}:\n            raise RuntimeError(\"TFLite export is only supported on Linux or Windows in this environment.\")\n\n        import onnx2tf\n        import tensorflow as tf\n\n        LOGGER.info(\n            f\"Exporting TFLite with tensorflow {tf.__version__} and onnx2tf {onnx2tf.__version__}...\"\n        )\n\n        onnx_path = self._ensure_onnx_file()\n        export_dir = self.file.parent / f\"{self.file.stem}_saved_model\"\n        output_folder_path = str(export_dir) + os.sep\n\n        if export_dir.is_dir():\n            shutil.rmtree(export_dir)\n\n        onnx2tf.convert(**self._build_convert_kwargs(onnx2tf, onnx_path, output_folder_path))\n\n        tflite_path = self._select_tflite_artifact(export_dir)\n        if tflite_path is None:\n            raise RuntimeError(f\"onnx2tf completed without producing a .tflite artifact in {export_dir}\")\n\n        return str(tflite_path)\n\n    def _ensure_onnx_file(self) -> Path:\n        onnx_path = self.file.with_suffix(\".onnx\")\n        if onnx_path.exists():\n            return onnx_path\n\n        LOGGER.info(\"Missing ONNX export; generating an intermediate ONNX model for TFLite conversion...\")\n        exported = ONNXExporter(\n            self.model,\n            self.im,\n            self.file,\n            opset=self.opset,\n            dynamic=self.dynamic,\n            half=self.half,\n            simplify=self.simplify,\n        ).export()\n        if not exported:\n            raise RuntimeError(\"ONNX export failed; cannot continue with TFLite export.\")\n\n        return Path(exported)\n\n    def _build_convert_kwargs(self, onnx2tf_module, onnx_path: Path, output_folder_path: str) -> dict:\n        kwargs = {\n            \"input_onnx_file_path\": str(onnx_path),\n            \"output_folder_path\": output_folder_path,\n        }\n\n        try:\n            sig = inspect.signature(onnx2tf_module.convert)\n        except (TypeError, ValueError):\n            sig = None\n\n        self._set_if_supported(kwargs, sig, \"tflite_backend\", \"flatbuffer_direct\")\n        self._set_if_supported(kwargs, sig, \"verbosity\", \"info\")\n        self._set_if_supported(kwargs, sig, \"output_float16_tflite\", bool(self.half))\n\n        return kwargs\n\n    @staticmethod\n    def _set_if_supported(kwargs: dict, sig, name: str, value) -> None:\n        if sig is None or name in sig.parameters:\n            kwargs[name] = value\n\n    def _select_tflite_artifact(self, export_dir: Path) -> Optional[Path]:\n        tflites = sorted(export_dir.rglob(\"*.tflite\"))\n        tflites = [p for p in tflites if \"quant_with_int16_act.tflite\" not in p.name]\n        if not tflites:\n            return None\n\n        if self.half:\n            preferred_tokens = (\"float16\", \"fp16\")\n            fallback_tokens = (\"float32\", \"fp32\")\n        else:\n            preferred_tokens = (\"float32\", \"fp32\")\n            fallback_tokens = (\"float16\", \"fp16\")\n\n        preferred = next((p for p in tflites if self._matches_any_token(p, preferred_tokens)), None)\n        fallback = next((p for p in tflites if self._matches_any_token(p, fallback_tokens)), None)\n\n        return preferred or fallback or tflites[0]\n\n    @staticmethod\n    def _matches_any_token(path: Path, tokens: Tuple[str, ...]) -> bool:\n        stem = path.stem.lower()\n        return any(token in stem for token in tokens)\n"
  },
  {
    "path": "boxmot/reid/exporters/torchscript_exporter.py",
    "content": "import torch\n\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\n\n\nclass TorchScriptExporter(BaseExporter):\n    def export(self):\n        f = self.file.with_suffix(\".torchscript\")\n        ts = torch.jit.trace(self.model, self.im, strict=False)\n        if self.optimize:\n            torch.utils.mobile_optimizer.optimize_for_mobile(\n                ts\n            )._save_for_lite_interpreter(str(f))\n        else:\n            ts.save(str(f))\n\n        return f\n"
  },
  {
    "path": "boxmot/trackers/__init__.py",
    "content": "from boxmot.trackers.boosttrack.boosttrack import BoostTrack\nfrom boxmot.trackers.botsort.botsort import BotSort\nfrom boxmot.trackers.bytetrack.bytetrack import ByteTrack\nfrom boxmot.trackers.deepocsort.deepocsort import DeepOcSort\nfrom boxmot.trackers.hybridsort.hybridsort import HybridSort\nfrom boxmot.trackers.ocsort.ocsort import OcSort\nfrom boxmot.trackers.sfsort.sfsort import SFSORT\nfrom boxmot.trackers.strongsort.strongsort import StrongSort\n"
  },
  {
    "path": "boxmot/trackers/basetracker.py",
    "content": "import colorsys\nimport hashlib\nfrom abc import ABC, abstractmethod\n\nimport cv2 as cv\nimport numpy as np\n\nfrom boxmot.trackers.detection_layout import (get_detection_layout,\n                                              infer_detection_layout)\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.iou import AssociationFunction\nfrom boxmot.utils.visualization import VisualizationMixin\n\n\nclass BaseTracker(VisualizationMixin):\n    supports_obb = False\n\n    def __init__(\n        self,\n        det_thresh: float = 0.3,\n        max_age: int = 30,\n        max_obs: int = 50,\n        min_hits: int = 3,\n        iou_threshold: float = 0.3,\n        per_class: bool = False,\n        nr_classes: int = 80,\n        asso_func: str = \"iou\",\n        is_obb: bool = False,\n        **kwargs,\n    ):\n        \"\"\"\n        Initialize the BaseTracker object\n\n        Parameters:\n        - det_thresh (float): Detection threshold for considering detections.\n        - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n        - max_obs (int): Maximum number of historical observations (bounding boxes) stored for each track. max_obs is always greater than max_age by minimum 5.\n        - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n        - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n        - per_class (bool): Enables class-separated tracking\n        - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True)\n        - asso_func (str): Algorithm name used for data association between detections and tracks\n            Options:\n                - \"iou\" (default): Standard Intersection over Union\n                - \"iou_obb\": IoU for oriented bounding boxes\n                - \"hmiou\": Height-modified IoU that incorporates vertical overlap ratio\n                - \"giou\": Generalized IoU that penalizes non-overlapping boxes\n                - \"ciou\": Complete IoU with center point distance and aspect ratio consistency\n                - \"diou\": Distance IoU that considers center point distance\n                - \"centroid\": Distance between centroids of bounding boxes\n                - \"centroid_obb\": Centroid distance for oriented bounding boxes\n        - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes?\n                If False (default): If True: dets.shape[1] == 6, i.e. (x1,y1,x2,y2,conf,cls)\n                If True: dets.shape[1] == 7, i.e. (cx,cy,w,h,angle,conf,cls)\n\n        Attributes:\n        - frame_count (int): Counter for the frames processed.\n        - active_tracks (list): List to hold active tracks, may be used differently in subclasses.\n        \"\"\"\n\n        self.det_thresh = det_thresh\n        self.max_age = max_age\n        self.max_obs = max_obs\n        self.min_hits = min_hits\n        self.iou_threshold = iou_threshold\n        self.per_class = per_class\n        self.nr_classes = nr_classes\n        self._asso_func_base_name = asso_func\n        self.detection_layout = get_detection_layout(is_obb)\n        self.asso_func_name = self.detection_layout.association_mode_name(asso_func)\n        self.is_obb = self.detection_layout.is_obb\n\n        # Attributes\n        self.frame_count = 0\n        self.active_tracks = []  # This might be handled differently in derived classes\n\n        self.per_class_active_tracks = None\n        self._first_frame_processed = (\n            False  # Flag to track if the first frame has been processed\n        )\n        self._first_dets_processed = False\n        self.last_emb_size = None  # Tracks the dimensionality of embedding vectors used for re-identification during tracking.\n\n        # Initialize per-class active tracks\n        if self.per_class:\n            self.per_class_active_tracks = {}\n            for i in range(self.nr_classes):\n                self.per_class_active_tracks[i] = []\n\n        if self.max_age >= self.max_obs:\n            LOGGER.warning(\n                \"Max age > max observations, increasing size of max observations...\"\n            )\n            self.max_obs = self.max_age + 5\n\n        # Plotting lifecycle bookkeeping\n        self._plot_frame_idx = -1\n        self._removed_first_seen = {}\n        self._removed_expired = set()\n        self.removed_display_frames = getattr(self, \"removed_display_frames\", 10)\n\n        # Log all params if tracker_name provided via kwargs\n        tracker_name = kwargs.pop('_tracker_name', None)\n        if tracker_name:\n            base_params = {\n                'det_thresh': det_thresh, 'max_age': max_age, 'max_obs': max_obs,\n                'min_hits': min_hits, 'iou_threshold': iou_threshold, 'per_class': per_class,\n                'asso_func': asso_func,\n            }\n            # Filter out internal/non-config params\n            filtered_kwargs = {k: v for k, v in kwargs.items() \n                              if not k.startswith('_') and k not in ('__class__', 'reid_weights', 'device', 'half')}\n            all_params = {**base_params, **filtered_kwargs}\n            params_str = \", \".join(f\"{k}={v}\" for k, v in all_params.items())\n            LOGGER.success(f\"{tracker_name}: {params_str}\")\n\n    @abstractmethod\n    def update(\n        self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None\n    ) -> np.ndarray:\n        \"\"\"\n        Abstract method to update the tracker with new detections for a new frame. This method\n        should be implemented by subclasses.\n\n        Parameters:\n        - dets (np.ndarray): Array of detections for the current frame.\n        - img (np.ndarray): The current frame as an image array.\n        - embs (np.ndarray, optional): Embeddings associated with the detections, if any.\n\n        Raises:\n        - NotImplementedError: If the subclass does not implement this method.\n        \"\"\"\n        raise NotImplementedError(\n            \"The update method needs to be implemented by the subclass.\"\n        )\n\n    def get_class_dets_n_embs(self, dets, embs, cls_id):\n        # Initialize empty arrays for detections and embeddings\n        class_dets = self.detection_layout.empty_dets(dtype=np.float32)\n        class_embs = (\n            np.empty((0, self.last_emb_size))\n            if self.last_emb_size is not None\n            else None\n        )\n\n        # Check if there are detections\n        if dets.size == 0:\n            return class_dets, class_embs\n\n        class_indices = np.where(dets[:, self.detection_layout.cls_idx] == cls_id)[0]\n        class_dets = dets[class_indices]\n\n        if embs is None:\n            return class_dets, class_embs\n\n        # Assert that if embeddings are provided, they have the same number of elements as detections\n        assert dets.shape[0] == embs.shape[0], (\n            \"Detections and embeddings must have the same number of elements when both are provided\"\n        )\n        class_embs = None\n        if embs.size > 0:\n            class_embs = embs[class_indices]\n            self.last_emb_size = class_embs.shape[\n                1\n            ]  # Update the last known embedding size\n        return class_dets, class_embs\n\n    def _set_detection_mode(self, is_obb: bool) -> None:\n        \"\"\"Update the tracker detection mode and association function name.\"\"\"\n        self.detection_layout = get_detection_layout(is_obb)\n        self.is_obb = self.detection_layout.is_obb\n        self.asso_func_name = self.detection_layout.association_mode_name(\n            self._asso_func_base_name\n        )\n\n        if self._first_frame_processed and hasattr(self, \"w\") and hasattr(self, \"h\"):\n            self.asso_func = AssociationFunction(\n                w=self.w, h=self.h, asso_mode=self.asso_func_name\n            ).asso_func\n\n    def empty_detections(self, dtype=np.float32) -> np.ndarray:\n        return self.detection_layout.empty_dets(dtype=dtype)\n\n    def empty_output(self, dtype=float) -> np.ndarray:\n        return self.detection_layout.empty_output(dtype=dtype)\n\n    @staticmethod\n    def setup_decorator(method):\n        \"\"\"\n        Decorator to perform setup on the first frame only.\n        This ensures that initialization tasks (like setting the association function) only\n        happen once, on the first frame, and are skipped on subsequent frames.\n        \"\"\"\n\n        def wrapper(self, *args, **kwargs):\n            # Extract detections and image from args\n            dets = args[0]\n            img = args[1] if len(args) > 1 else None\n\n            # Unwrap `data` attribute if present\n            if hasattr(dets, \"data\"):\n                dets = dets.data\n\n            # Convert memoryview to numpy array if needed\n            if isinstance(dets, memoryview):\n                dets = np.array(dets, dtype=np.float32)  # Adjust dtype if needed\n\n            # First-time detection setup\n            if not self._first_dets_processed and dets is not None:\n                layout = infer_detection_layout(dets)\n                if layout is not None:\n                    if layout.is_obb and not self.supports_obb:\n                        raise AssertionError(\n                            f\"{self.__class__.__name__} does not support OBB detections. \"\n                            \"Use an OBB-capable tracker such as ByteTrack, BotSort, OCSort, or SFSORT.\"\n                        )\n                    self._set_detection_mode(layout.is_obb)\n                    self._first_dets_processed = True\n\n            # First frame image-based setup\n            if not self._first_frame_processed and img is not None:\n                self.h, self.w = img.shape[0:2]\n                self.asso_func = AssociationFunction(\n                    w=self.w, h=self.h, asso_mode=self.asso_func_name\n                ).asso_func\n                self._first_frame_processed = True\n\n            # Call the original method with the unwrapped `dets`\n            return method(self, dets, img, *args[2:], **kwargs)\n\n        return wrapper\n\n    @staticmethod\n    def per_class_decorator(update_method):\n        \"\"\"\n        Decorator for the update method to handle per-class processing.\n        \"\"\"\n\n        def wrapper(self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None):\n            # handle different types of inputs\n            if dets is None or len(dets) == 0:\n                dets = self.empty_detections()\n\n            if not self.per_class:\n                # Process all detections at once if per_class is False\n                return update_method(self, dets=dets, img=img, embs=embs)\n            # else:\n            # Initialize an array to store the tracks for each class\n            per_class_tracks = []\n\n            # same frame count for all classes\n            frame_count = self.frame_count\n\n            for cls_id in range(self.nr_classes):\n                # Get detections and embeddings for the current class\n                class_dets, class_embs = self.get_class_dets_n_embs(dets, embs, cls_id)\n\n                LOGGER.debug(\n                    f\"Processing class {int(cls_id)}: {class_dets.shape} with embeddings\"\n                    f\" {class_embs.shape if class_embs is not None else None}\"\n                )\n\n                # Activate the specific active tracks for this class id\n                self.active_tracks = self.per_class_active_tracks[cls_id]\n\n                # Reset frame count for every class\n                self.frame_count = frame_count\n\n                # Update detections using the decorated method\n                tracks = update_method(self, dets=class_dets, img=img, embs=class_embs)\n\n                # Save the updated active tracks\n                self.per_class_active_tracks[cls_id] = self.active_tracks\n\n                if tracks.size > 0:\n                    per_class_tracks.append(tracks)\n\n            # Increase frame count by 1\n            self.frame_count = frame_count + 1\n            if per_class_tracks:\n                return np.vstack(per_class_tracks)\n\n            return self.empty_output()\n\n        return wrapper\n\n    def check_inputs(self, dets, img, embs=None):\n        assert isinstance(dets, np.ndarray), (\n            f\"Unsupported 'dets' input format '{type(dets)}', valid format is np.ndarray\"\n        )\n        assert isinstance(img, np.ndarray), (\n            f\"Unsupported 'img_numpy' input format '{type(img)}', valid format is np.ndarray\"\n        )\n        assert len(dets.shape) == 2, (\n            \"Unsupported 'dets' dimensions, valid number of dimensions is two\"\n        )\n\n        if embs is not None:\n            assert dets.shape[0] == embs.shape[0], (\n                \"Missmatch between detections and embeddings sizes\"\n            )\n\n        self.detection_layout.validate_dets(dets)\n\n    def reset(self):\n        pass\n"
  },
  {
    "path": "boxmot/trackers/boosttrack/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/boosttrack/assoc.py",
    "content": "import warnings\nfrom copy import deepcopy\nfrom typing import Optional\n\nimport lap\nimport numpy as np\n\n\ndef shape_similarity(detects: np.ndarray, tracks: np.ndarray, s_sim_corr: bool) -> np.ndarray:\n    if not s_sim_corr:\n        return shape_similarity_v1(detects, tracks)\n    return shape_similarity_v2(detects, tracks)\n\n\ndef shape_similarity_v1(detects: np.ndarray, tracks: np.ndarray) -> np.ndarray:\n    if detects.size == 0 or tracks.size == 0:\n        return np.zeros((0, 0))\n\n    dw = (detects[:, 2] - detects[:, 0]).reshape((-1, 1))\n    dh = (detects[:, 3] - detects[:, 1]).reshape((-1, 1))\n    tw = (tracks[:, 2] - tracks[:, 0]).reshape((1, -1))\n    th = (tracks[:, 3] - tracks[:, 1]).reshape((1, -1))\n    return np.exp(-(np.abs(dw - tw) / np.maximum(dw, tw) + np.abs(dh - th) / np.maximum(dw, tw)))\n\n\ndef shape_similarity_v2(detects: np.ndarray, tracks: np.ndarray) -> np.ndarray:\n    if detects.size == 0 or tracks.size == 0:\n        return np.zeros((0, 0))\n\n    dw = (detects[:, 2] - detects[:, 0]).reshape((-1, 1))\n    dh = (detects[:, 3] - detects[:, 1]).reshape((-1, 1))\n    tw = (tracks[:, 2] - tracks[:, 0]).reshape((1, -1))\n    th = (tracks[:, 3] - tracks[:, 1]).reshape((1, -1))\n    return np.exp(-(np.abs(dw - tw) / np.maximum(dw, tw) + np.abs(dh - th) / np.maximum(dh, th)))\n\n\ndef MhDist_similarity(mahalanobis_distance: np.ndarray, softmax_temp: float = 1.0) -> np.ndarray:\n    limit = 13.2767  # 99% conf interval https://www.mathworks.com/help/stats/chi2inv.html\n    mahalanobis_distance = deepcopy(mahalanobis_distance)\n    mask = mahalanobis_distance > limit\n    mahalanobis_distance[mask] = limit\n    mahalanobis_distance = limit - mahalanobis_distance\n\n    mahalanobis_distance = np.exp(mahalanobis_distance / softmax_temp) / np.exp(\n        mahalanobis_distance / softmax_temp).sum(0).reshape((1, -1))\n    mahalanobis_distance = np.where(mask, 0, mahalanobis_distance)\n    return mahalanobis_distance\n\n\ndef iou_batch(bboxes1, bboxes2):\n    \"\"\"\n    From SORT: Computes IOU between two bboxes in the form [x1,y1,x2,y2]\n    \"\"\"\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0.0, xx2 - xx1)\n    h = np.maximum(0.0, yy2 - yy1)\n    wh = w * h\n    return wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n            + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1])\n            - wh)\n\n\ndef soft_biou_batch(bboxes1, bboxes2):\n    \"\"\"\n    Computes soft BIoU between two bboxes in the form [x1,y1,x2,y2]\n    BIoU is introduced in https://arxiv.org/pdf/2211.14317\n    Soft BIoU is introduced as part of BoostTrack++\n    # Author : Vukasin Stanojevic\n    # Email  : vukasin.stanojevic@pmf.edu.rs\n    \"\"\"\n\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n    k1 = 0.25\n    k2 = 0.5\n    b2conf = bboxes2[..., 4]\n    b1x1 = bboxes1[..., 0] - (bboxes1[..., 2] - bboxes1[..., 0]) * (1 - b2conf) * k1\n    b2x1 = bboxes2[..., 0] - (bboxes2[..., 2] - bboxes2[..., 0]) * (1 - b2conf) * k2\n    xx1 = np.maximum(b1x1, b2x1)\n\n    b1y1 = bboxes1[..., 1] - (bboxes1[..., 3] - bboxes1[..., 1]) * (1 - b2conf) * k1\n    b2y1 = bboxes2[..., 1] - (bboxes2[..., 3] - bboxes2[..., 1]) * (1 - b2conf) * k2\n    yy1 = np.maximum(b1y1, b2y1)\n\n    b1x2 = bboxes1[..., 2] + (bboxes1[..., 2] - bboxes1[..., 0]) * (1 - b2conf) * k1\n    b2x2 = bboxes2[..., 2] + (bboxes2[..., 2] - bboxes2[..., 0]) * (1 - b2conf) * k2\n    xx2 = np.minimum(b1x2, b2x2)\n\n    b1y2 = bboxes1[..., 3] + (bboxes1[..., 3] - bboxes1[..., 1]) * (1 - b2conf) * k1\n    b2y2 = bboxes2[..., 3] + (bboxes2[..., 3] - bboxes2[..., 1]) * (1 - b2conf) * k2\n    yy2 = np.minimum(b1y2, b2y2)\n\n    w = np.maximum(0.0, xx2 - xx1)\n    h = np.maximum(0.0, yy2 - yy1)\n    wh = w * h\n\n    return wh / ((b1x2 - b1x1) * (b1y2 - b1y1) + (b2x2 - b2x1) * (b2y2 - b2y1) - wh)\n\n\ndef match(cost_matrix: np.ndarray, threshold: float) -> np.ndarray:\n    if cost_matrix.size == 0:\n        return np.empty(shape=(0, 2))\n\n    a = (cost_matrix > threshold).astype(np.int32)\n    if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n        return np.stack(np.where(a), axis=1)  # matched\n    _, x, y = lap.lapjv(-cost_matrix, extend_cost=True)\n    return np.array([[y[i], i] for i in x if i >= 0])  # matched\n\n\ndef linear_assignment(\n    detections: np.ndarray,\n    trackers: np.ndarray,\n    iou_matrix: np.ndarray,\n    cost_matrix: np.ndarray,\n    threshold: float,\n    emb_cost: Optional[np.ndarray] = None,\n):\n    if iou_matrix is None and cost_matrix is None:\n        raise Exception(\"Both iou_matrix and cost_matrix are None!\")\n    if iou_matrix is None:\n        iou_matrix = deepcopy(cost_matrix)\n    if cost_matrix is None:\n        cost_matrix = deepcopy(iou_matrix)\n    matched_indices = match(cost_matrix, threshold)\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if d not in matched_indices[:, 0]:\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if t not in matched_indices[:, 1]:\n            unmatched_trackers.append(t)\n\n    # filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        valid_match = iou_matrix[m[0], m[1]] >= threshold or (\n            False if emb_cost is None else (iou_matrix[m[0], m[1]] >= threshold / 2 and emb_cost[m[0], m[1]] >= 0.75))\n        if valid_match:\n            matches.append(m.reshape(1, 2))\n        else:\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n\n    matches = np.concatenate(matches, axis=0) if len(matches) else np.empty((0, 2), dtype=int)\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers), cost_matrix\n\n\ndef associate(\n        detections,\n        trackers,\n        iou_threshold,\n        mahalanobis_distance: Optional[np.ndarray] = None,\n        track_confidence: Optional[np.ndarray] = None,\n        detection_confidence: Optional[np.ndarray] = None,\n        emb_cost: Optional[np.ndarray] = None,\n        lambda_iou: float = 0.5,\n        lambda_mhd: float = 0.25,\n        lambda_shape: float = 0.25,\n        s_sim_corr: bool = False,\n):\n    if len(trackers) == 0:\n        return (\n            np.empty((0, 2), dtype=int),\n            np.arange(len(detections)),\n            np.empty((0, 5), dtype=int),\n            np.empty((0, 0)),\n        )\n    iou_matrix = iou_batch(detections, trackers)\n\n    cost_matrix = deepcopy(iou_matrix)\n\n    if detection_confidence is not None and track_confidence is not None:\n        conf = np.multiply(detection_confidence.reshape((-1, 1)), track_confidence.reshape((1, -1)))\n        conf[iou_matrix < iou_threshold] = 0\n\n        cost_matrix += lambda_iou * conf * iou_batch(detections, trackers)\n    else:\n        warnings.warn(\"Detections or tracklet confidence is None and detection-tracklet confidence cannot be computed!\")\n        conf = None\n\n    if mahalanobis_distance is not None and mahalanobis_distance.size > 0:\n        mahalanobis_distance = MhDist_similarity(mahalanobis_distance)\n\n        cost_matrix += lambda_mhd * mahalanobis_distance\n        if conf is not None:\n            cost_matrix += lambda_shape * conf * shape_similarity(detections, trackers, s_sim_corr)\n\n    if emb_cost is not None:\n        lambda_emb = (1 + lambda_iou + lambda_shape + lambda_mhd) * 1.5\n        cost_matrix += lambda_emb * emb_cost\n\n    return linear_assignment(detections, trackers, iou_matrix, cost_matrix, iou_threshold, emb_cost)\n"
  },
  {
    "path": "boxmot/trackers/boosttrack/boosttrack.py",
    "content": "from collections import deque\nfrom typing import List, Optional\n\nimport numpy as np\n\nfrom boxmot.motion.cmc import get_cmc_method\nfrom boxmot.motion.kalman_filters.xyhr import KalmanFilterXYHR\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.trackers.boosttrack.assoc import (MhDist_similarity, associate,\n                                              iou_batch, shape_similarity,\n                                              soft_biou_batch)\n\n\ndef convert_bbox_to_z(bbox):\n    \"\"\"\n    Converts a bounding box [x1,y1,x2,y2] to state vector [x, y, h, r].\n    \"\"\"\n    w = bbox[2] - bbox[0]\n    h = bbox[3] - bbox[1]\n    x = bbox[0] + w / 2.0\n    y = bbox[1] + h / 2.0\n    r = w / float(h + 1e-6)\n    return np.array([x, y, h, r]).reshape((4, 1))\n\n\ndef convert_x_to_bbox(x, score=None):\n    \"\"\"\n    Converts a state vector [x, y, h, r] back to bounding box [x1,y1,x2,y2].\n    \"\"\"\n    h = x[2]\n    r = x[3]\n    w = 0 if r <= 0 else r * h\n    if score is None:\n        return np.array([x[0] - w / 2.0, x[1] - h / 2.0,\n                         x[0] + w / 2.0, x[1] + h / 2.0]).reshape((1, 4))\n    return np.array([x[0] - w / 2.0, x[1] - h / 2.0,\n                     x[0] + w / 2.0, x[1] + h / 2.0, score]).reshape((1, 5))\n\n\nclass KalmanBoxTracker:\n    \"\"\"\n    Single object tracker using a Kalman filter.\n    \"\"\"\n\n    count = 0\n\n    def __init__(self, det, max_obs, emb: Optional[np.ndarray] = None):\n        KalmanBoxTracker.count += 1\n\n        self.time_since_update = 0\n        self.id = KalmanBoxTracker.count\n        self.kf = KalmanFilterXYHR(convert_bbox_to_z(det[:4]))\n        self.conf = det[4]\n        self.cls = det[5]\n        self.det_ind = det[6]\n        self.emb = emb\n        self.hit_streak = 0\n        self.age = 0\n        self.history_observations = deque([], maxlen=max_obs)\n\n    def get_confidence(self, coef: float = 0.9) -> float:\n        n = 7\n        if self.age < n:\n            return coef ** (n - self.age)\n        return coef ** (self.time_since_update - 1)\n\n    def update(self, det: np.ndarray):\n        self.time_since_update = 0\n        self.hit_streak += 1\n        self.history_observations.append(self.get_state()[0])\n        self.kf.update(convert_bbox_to_z(det))\n        self.conf = det[4]\n        self.cls = det[5]\n        self.det_ind = det[6]\n\n    def camera_update(self, transform: np.ndarray):\n        \"\"\"\n        Handle either a 2×3 affine or a 3×3 homography, by\n        promoting the 2×3 to 3×3 [ …; 0 0 1 ].\n        \"\"\"\n        # ——— normalize to 3×3 —————\n        wm = np.asarray(transform, dtype=float)\n        if wm.shape == (2, 3):\n            wm = np.vstack([wm, [0.0, 0.0, 1.0]])\n        elif wm.shape != (3, 3):\n            raise ValueError(f\"Expected 2×3 or 3×3 matrix, got {wm.shape}\")\n\n        # ——— warp your current bbox —————\n        x1, y1, x2, y2 = self.get_state()[0]\n        p1 = wm @ np.array([x1, y1, 1.0])\n        p2 = wm @ np.array([x2, y2, 1.0])\n        x1_, y1_, _ = p1\n        x2_, y2_, _ = p2\n\n        # ——— rebuild Kalman state —————\n        w, h = x2_ - x1_, y2_ - y1_\n        cx, cy = x1_ + w / 2, y1_ + h / 2\n        self.kf.x[:4] = [cx, cy, h, w / h]\n\n    def predict(self):\n        self.kf.predict()\n        self.age += 1\n        if self.time_since_update > 0:\n            self.hit_streak = 0\n        self.time_since_update += 1\n        return self.get_state()\n\n    def get_state(self):\n        return convert_x_to_bbox(self.kf.x)\n\n    def update_emb(self, emb, alpha=0.9):\n        self.emb = alpha * self.emb + (1 - alpha) * emb\n        self.emb /= np.linalg.norm(self.emb)\n\n    def get_emb(self):\n        return self.emb\n\n\nclass BoostTrack(BaseTracker):\n    \"\"\"\n    Initialize the BoostTrack tracker with various parameters.\n\n    Parameters:\n    - reid_weights (Path): Path to the re-identification model weights.\n    - device (torch.device): Device to run the model on (e.g., 'cpu', 'cuda').\n    - half (bool): Whether to use half-precision (fp16) for faster inference.\n    - det_thresh (float): Detection threshold for considering detections.\n    - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n    - max_obs (int): Maximum number of historical observations stored for each track. Always greater than max_age by minimum 5.\n    - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n    - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n    - per_class (bool): Enables class-separated tracking.\n    - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True).\n    - asso_func (str): Algorithm name used for data association between detections and tracks.\n    - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes.\n    \n    BoostTrack-specific parameters:\n    - use_ecc (bool): Whether to use ECC for camera motion compensation.\n    - min_box_area (int): Minimum box area for detections.\n    - aspect_ratio_thresh (float): Aspect ratio threshold for detections.\n    - cmc_method (str): Method for camera motion compensation.\n    - lambda_iou (float): Weight for IoU-based association.\n    - lambda_mhd (float): Weight for Mahalanobis distance-based association.\n    - lambda_shape (float): Weight for shape-based association.\n    - use_dlo_boost (bool): Whether to use DLO boost for confidence adjustment.\n    - use_duo_boost (bool): Whether to use DUO boost for confidence adjustment.\n    - dlo_boost_coef (float): Coefficient for DLO boost.\n    - s_sim_corr (bool): Whether to use shape similarity correction.\n    - use_rich_s (bool): Whether to use rich shape features.\n    - use_sb (bool): Whether to use soft-BIoU.\n    - use_vt (bool): Whether to use visual tracking.\n    - with_reid (bool): Whether to use re-identification.\n    \n    Attributes:\n    - frame_count (int): Counter for the frames processed.\n    - active_tracks (list): List to hold active tracks.\n    - trackers (List[KalmanBoxTracker]): List of active Kalman filter trackers.\n    - cmc: Camera motion compensation object.\n    - reid_model: Re-identification model instance (if with_reid=True).\n    \"\"\"\n\n    def __init__(\n        self,\n        reid_weights=None,\n        device='cpu',\n        half: bool = False,\n        # BoostTrack-specific parameters\n        use_ecc: bool = True,\n        min_box_area: int = 10,\n        aspect_ratio_thresh: float = 1.6,\n        cmc_method: str = \"ecc\",\n        lambda_iou: float = 0.5,\n        lambda_mhd: float = 0.25,\n        lambda_shape: float = 0.25,\n        use_dlo_boost: bool = True,\n        use_duo_boost: bool = True,\n        dlo_boost_coef: float = 0.65,\n        s_sim_corr: bool = False,\n        use_rich_s: bool = False,\n        use_sb: bool = False,\n        use_vt: bool = False,\n        with_reid: bool = False,\n        reid=None,\n        **kwargs  # BaseTracker parameters\n    ):\n        # Capture all init params for logging\n        init_args = {k: v for k, v in locals().items() if k not in ('self', 'kwargs')}\n        super().__init__(**init_args, _tracker_name='BoostTrack', **kwargs)\n        \n        self.active_tracks = []\n        self.frame_count = 0\n        self.trackers: List[KalmanBoxTracker] = []\n\n        # Parameters for BoostTrack (these can be tuned as needed)\n        self.use_ecc = use_ecc            # use ECC for camera motion compensation\n        self.min_box_area = min_box_area  # minimum box area for detections\n        self.aspect_ratio_thresh = aspect_ratio_thresh  # aspect ratio threshold for detections\n        self.cmc_method = cmc_method\n\n        self.lambda_iou = lambda_iou\n        self.lambda_mhd = lambda_mhd\n        self.lambda_shape = lambda_shape\n        self.use_dlo_boost = use_dlo_boost\n        self.use_duo_boost = use_duo_boost\n        self.dlo_boost_coef = dlo_boost_coef\n        self.s_sim_corr = s_sim_corr\n\n        self.use_rich_s = use_rich_s\n        self.use_sb = use_sb\n        self.use_vt = use_vt\n\n        self.with_reid = with_reid\n        \n        if reid is not None:\n             self.reid_model = reid\n             self.with_reid = True\n        elif self.with_reid and reid_weights is not None:\n             self.reid_model = ReidAutoBackend(weights=reid_weights, device=device, half=half).model\n        else:\n             self.reid_model = None\n\n        if self.use_ecc:\n            self.cmc = get_cmc_method(cmc_method)()\n        else:\n            self.cmc = None\n\n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(self, dets: np.ndarray, img: np.ndarray, embs: Optional[np.ndarray] = None) -> np.ndarray:\n        \"\"\"\n        Update the tracker with detections and an image.\n\n        Args:\n          dets (np.ndarray): Detection boxes in the format [[x1,y1,x2,y2,score], ...]\n          img (np.ndarray): The current image frame.\n          embs (Optional[np.ndarray]): Optional precomputed embeddings.\n\n        Returns:\n          np.ndarray: Tracked objects in the format\n                      [x1, y1, x2, y2, id, confidence, cls, det_ind]\n                      (with cls and det_ind set to -1 if unused)\n        \"\"\"\n        self.check_inputs(dets=dets, embs=embs, img=img)\n\n        dets = np.hstack([dets, np.arange(len(dets)).reshape(-1, 1)])\n\n        self.frame_count += 1\n\n        if self.cmc is not None:\n            transform = self.cmc.apply(img, dets)\n            for trk in self.trackers:\n                trk.camera_update(transform)\n\n        trks = []\n        confs = []\n\n        for trk in self.trackers:\n            pos = trk.predict()[0]\n            conf = trk.get_confidence()\n            confs.append(conf)\n            trks.append(np.concatenate([pos, [conf]]))\n        trks_np = np.vstack(trks) if len(trks) > 0 else np.empty((0, 5))\n\n        if self.use_dlo_boost:\n            dets = self.dlo_confidence_boost(dets)\n        if self.use_duo_boost:\n            dets = self.duo_confidence_boost(dets)\n\n        dets_embs = np.ones((dets.shape[0], 1))\n        if dets.size > 0:\n            remain_inds = dets[:, 4] >= self.det_thresh\n            dets = dets[remain_inds]\n            scores = dets[:, 4]\n\n            if self.with_reid:\n                if embs is not None:\n                    dets_embs = embs[remain_inds]\n                else:\n                    dets_embs = self.reid_model.get_features(dets[:, :4], img)\n        else:\n            scores = np.empty(0)\n            dets_embs = np.ones((dets.shape[0], 1))\n\n        if self.with_reid and len(self.trackers) > 0:\n            tracker_embs = np.array([trk.get_emb() for trk in self.trackers])\n            if dets_embs.shape[0] == 0:\n                emb_cost = np.empty((0, tracker_embs.shape[0]))\n            else:\n                emb_cost = dets_embs.reshape(dets_embs.shape[0], -1) @ tracker_embs.reshape((tracker_embs.shape[0], -1)).T\n        else:\n            emb_cost = None\n\n        mh_dist_matrix = self.get_mh_dist_matrix(dets)\n\n        matched, unmatched_dets, unmatched_trks, _ = associate(\n            dets,\n            trks_np,\n            self.iou_threshold,\n            mahalanobis_distance=mh_dist_matrix,\n            track_confidence=np.array(confs).reshape(-1, 1),\n            detection_confidence=scores,\n            emb_cost=emb_cost,\n            lambda_iou=self.lambda_iou,\n            lambda_mhd=self.lambda_mhd,\n            lambda_shape=self.lambda_shape,\n            s_sim_corr=self.s_sim_corr,\n        )\n\n        if dets.size > 0:\n            trust = (dets[:, 4] - self.det_thresh) / (1 - self.det_thresh)\n            af = 0.95\n            dets_alpha = af + (1 - af) * (1 - trust)\n        else:\n            dets_alpha = np.empty(0)\n\n        for m in matched:\n            self.trackers[m[1]].update(dets[m[0], :])\n            self.trackers[m[1]].update_emb(dets_embs[m[0]], alpha=dets_alpha[m[0]])\n\n        for i in unmatched_dets:\n            if dets[i, 4] >= self.det_thresh:\n                self.trackers.append(\n                    KalmanBoxTracker(dets[i, :], max_obs=self.max_obs, emb=dets_embs[i])\n                )\n\n        outputs = []\n        self.active_tracks = []\n        for trk in self.trackers:\n            d = trk.get_state()[0]\n            if (trk.time_since_update < 1) and (\n                trk.hit_streak >= self.min_hits or self.frame_count <= self.min_hits\n            ):\n                # Format: [x1, y1, x2, y2, id, confidence, cls, det_ind]\n                outputs.append(np.array([d[0], d[1], d[2], d[3], trk.id, trk.conf, trk.cls, trk.det_ind]))\n                self.active_tracks.append(trk)\n            \n        self.trackers = [trk for trk in self.trackers if trk.time_since_update <= self.max_age]\n\n        if len(outputs) == 0:\n            return np.empty((0, 8))\n        outputs = np.vstack(outputs)\n        return self.filter_outputs(outputs)\n\n    def filter_outputs(self, outputs: np.ndarray) -> np.ndarray:\n\n        w_arr = outputs[:, 2] - outputs[:, 0]\n        h_arr = outputs[:, 3] - outputs[:, 1]\n\n        vertical_filter = w_arr / h_arr <= self.aspect_ratio_thresh\n        area_filter = w_arr * h_arr > self.min_box_area\n\n        return outputs[vertical_filter & area_filter]\n    \n    def get_iou_matrix(self, detections: np.ndarray, buffered: bool = False) -> np.ndarray:\n        trackers = np.zeros((len(self.trackers), 5))\n        for t, trk in enumerate(trackers):\n            pos = self.trackers[t].get_state()[0]\n            trk[:] = [pos[0], pos[1], pos[2], pos[3], self.trackers[t].get_confidence()]\n\n        return iou_batch(detections, trackers) if not buffered else soft_biou_batch(detections, trackers)\n\n    def get_mh_dist_matrix(self, detections: np.ndarray, n_dims: int = 4) -> np.ndarray:\n        if len(self.trackers) == 0:\n            return np.zeros((0, 0))\n        z = np.zeros((len(detections), n_dims), dtype=float)\n        x = np.zeros((len(self.trackers), n_dims), dtype=float)\n        sigma_inv = np.zeros((len(self.trackers), n_dims), dtype=float)\n\n        for i in range(len(detections)):\n            z[i, :n_dims] = convert_bbox_to_z(detections[i, :]).reshape(-1)[:n_dims]\n        for i, trk in enumerate(self.trackers):\n            x[i] = trk.kf.x[:n_dims]\n            sigma_inv[i] = np.reciprocal(np.diag(trk.kf.covariance[:n_dims, :n_dims]))\n        return ((z.reshape((-1, 1, n_dims)) - x.reshape((1, -1, n_dims))) ** 2 *\n                sigma_inv.reshape((1, -1, n_dims))).sum(axis=2)\n\n\n    def duo_confidence_boost(self, detections: np.ndarray) -> np.ndarray:\n        if len(detections) == 0:\n            return detections\n\n        n_dims = 4\n        limit = 13.2767\n        mh_dist = self.get_mh_dist_matrix(detections, n_dims)\n\n        # If there are no existing trackers, bail out immediately\n        if mh_dist.size == 0:\n            return detections\n\n        min_dists = mh_dist.min(1)\n        mask = (min_dists > limit) & (detections[:, 4] < self.det_thresh)\n        boost_inds = np.where(mask)[0]\n        iou_limit = 0.3\n        if len(boost_inds) == 0:\n            return detections\n\n        bdiou = iou_batch(detections[boost_inds], detections[boost_inds]) - np.eye(\n            len(boost_inds)\n        )\n        bdiou_max = bdiou.max(axis=1)\n        remaining = boost_inds[bdiou_max <= iou_limit]\n        args = np.where(bdiou_max > iou_limit)[0]\n        for i in range(len(args)):\n            bi = args[i]\n            tmp = np.where(bdiou[bi] > iou_limit)[0]\n            args_tmp = np.append(\n                np.intersect1d(boost_inds[args], boost_inds[tmp]), boost_inds[bi]\n            )\n            conf_max = np.max(detections[args_tmp, 4])\n            if detections[boost_inds[bi], 4] == conf_max:\n                remaining = np.concatenate([remaining, [boost_inds[bi]]])\n\n        mask_boost = np.zeros_like(detections[:, 4], dtype=bool)\n        mask_boost[remaining] = True\n        detections[:, 4] = np.where(\n            mask_boost, self.det_thresh + 1e-4, detections[:, 4]\n        )\n        return detections\n\n    def dlo_confidence_boost(self, detections: np.ndarray) -> np.ndarray:\n        if len(detections) == 0:\n            return detections\n\n        sbiou_matrix = self.get_iou_matrix(detections, True)\n        if sbiou_matrix.size == 0:\n            return detections\n\n        trackers = np.zeros((len(self.trackers), 6))\n        for t, trk in enumerate(self.trackers):\n            pos = trk.get_state()[0]\n            trackers[t] = [pos[0], pos[1], pos[2], pos[3], 0, trk.time_since_update - 1]\n\n        if self.use_rich_s:\n            mhd_sim = MhDist_similarity(self.get_mh_dist_matrix(detections), 1)\n            shape_sim = shape_similarity(detections, trackers, self.s_sim_corr)\n            S = (mhd_sim + shape_sim + sbiou_matrix) / 3\n        else:\n            S = self.get_iou_matrix(detections, False)\n\n        if not self.use_sb and not self.use_vt:\n            max_s = S.max(1)\n            detections[:, 4] = np.maximum(detections[:, 4], max_s * self.dlo_boost_coef)\n            return detections\n\n        if self.use_sb:\n            max_s = S.max(1)\n            alpha = 0.65\n            detections[:, 4] = np.maximum(\n                detections[:, 4], alpha * detections[:, 4] + (1 - alpha) * max_s**1.5\n            )\n        if self.use_vt:\n            threshold_s = 0.95\n            threshold_e = 0.8\n            n_steps = 20\n            # alpha = (threshold_s - threshold_e) / n_steps # todo alpha is not being used probably a bug\n            tmp = (S > np.maximum(\n                threshold_s - np.array([trk.time_since_update - 1 for trk in self.trackers]),\n                                    threshold_e)).max(1)\n            scores = detections[:, 4].copy()\n            scores[tmp] = np.maximum(scores[tmp], self.det_thresh + 1e-5)\n            detections[:, 4] = scores\n        return detections\n"
  },
  {
    "path": "boxmot/trackers/botsort/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/botsort/basetrack.py",
    "content": "from collections import OrderedDict\n\nimport numpy as np\n\n\nclass TrackState:\n    \"\"\"\n    Enum-like class for tracking states.\n\n    Attributes:\n        New (int): Represents a newly created track.\n        Tracked (int): Represents a currently tracked object.\n        Lost (int): Represents a temporarily lost track.\n        LongLost (int): Represents a track that has been lost for a long time.\n        Removed (int): Represents a track that has been removed.\n    \"\"\"\n\n    New = 0\n    Tracked = 1\n    Lost = 2\n    LongLost = 3\n    Removed = 4\n\n\nclass BaseTrack:\n    \"\"\"\n    Base class for managing the state of a track in multi-object tracking.\n\n    Attributes:\n        _count (int): Class variable to keep track of the number of tracks created.\n        track_id (int): The unique ID assigned to the track.\n        is_activated (bool): Whether the track has been activated.\n        state (TrackState): The current state of the track.\n        history (OrderedDict): A history of the track's past states or observations.\n        features (list): A list of feature vectors associated with the track.\n        curr_feature (np.ndarray): The most recent feature vector.\n        score (float): The confidence score of the track.\n        start_frame (int): The frame where the track started.\n        frame_id (int): The most recent frame ID associated with the track.\n        time_since_update (int): The number of frames since the track was last updated.\n        location (tuple): The location of the object in multi-camera tracking (set to infinity by default).\n    \"\"\"\n\n    _count = 0\n\n    track_id: int = 0\n    is_activated: bool = False\n    state: int = TrackState.New\n\n    history: OrderedDict = OrderedDict()\n    features: list = []\n    curr_feature: np.ndarray = None\n    score: float = 0\n    start_frame: int = 0\n    frame_id: int = 0\n    time_since_update: int = 0\n\n    # multi-camera\n    location: tuple = (np.inf, np.inf)\n\n    @property\n    def end_frame(self) -> int:\n        \"\"\"\n        Returns the last frame the track was updated.\n\n        Returns:\n            int: The frame ID of the last update.\n        \"\"\"\n        return self.frame_id\n\n    @staticmethod\n    def next_id() -> int:\n        \"\"\"\n        Generates the next unique track ID.\n\n        Returns:\n            int: A unique track ID.\n        \"\"\"\n        BaseTrack._count += 1\n        return BaseTrack._count\n\n    def activate(self, *args):\n        \"\"\"\n        Activates the track. This method should be implemented in subclasses.\n\n        Args:\n            *args: Variable length argument list.\n\n        Raises:\n            NotImplementedError: If this method is not implemented in the subclass.\n        \"\"\"\n        raise NotImplementedError\n\n    def predict(self):\n        \"\"\"\n        Predicts the next state of the track using a motion model. This method should be implemented in subclasses.\n\n        Raises:\n            NotImplementedError: If this method is not implemented in the subclass.\n        \"\"\"\n        raise NotImplementedError\n\n    def update(self, *args, **kwargs):\n        \"\"\"\n        Updates the state of the track based on a new observation. This method should be implemented in subclasses.\n\n        Args:\n            *args: Variable length argument list.\n            **kwargs: Arbitrary keyword arguments.\n\n        Raises:\n            NotImplementedError: If this method is not implemented in the subclass.\n        \"\"\"\n        raise NotImplementedError\n\n    def mark_lost(self):\n        \"\"\"\n        Marks the track as lost.\n        \"\"\"\n        self.state = TrackState.Lost\n\n    def mark_long_lost(self):\n        \"\"\"\n        Marks the track as long lost.\n        \"\"\"\n        self.state = TrackState.LongLost\n\n    def mark_removed(self):\n        \"\"\"\n        Marks the track as removed.\n        \"\"\"\n        self.state = TrackState.Removed\n\n    @staticmethod\n    def clear_count():\n        \"\"\"\n        Resets the track ID counter to 0.\n        \"\"\"\n        BaseTrack._count = 0\n"
  },
  {
    "path": "boxmot/trackers/botsort/botsort.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom pathlib import Path\n\nimport numpy as np\nimport torch\n\nfrom boxmot.motion.cmc import get_cmc_method\nfrom boxmot.motion.kalman_filters.xywh import KalmanFilterXYWH\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.trackers.botsort.basetrack import BaseTrack, TrackState\nfrom boxmot.trackers.botsort.botsort_track import STrack\nfrom boxmot.trackers.botsort.botsort_utils import (joint_stracks,\n                                                   remove_duplicate_stracks,\n                                                   sub_stracks)\nfrom boxmot.utils.matching import (embedding_distance, fuse_score,\n                                   iou_distance, linear_assignment)\n\n\nclass BotSort(BaseTracker):\n    supports_obb = True\n\n    \"\"\"\n    Initialize the BotSort tracker with various parameters.\n\n    Parameters:\n    - reid_weights (Path): Path to the re-identification model weights.\n    - device (torch.device): Device to run the model on (e.g., 'cpu', 'cuda').\n    - half (bool): Whether to use half-precision (fp16) for faster inference.\n    - det_thresh (float): Detection threshold for considering detections.\n    - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n    - max_obs (int): Maximum number of historical observations stored for each track. Always greater than max_age by minimum 5.\n    - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n    - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n    - per_class (bool): Enables class-separated tracking.\n    - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True).\n    - asso_func (str): Algorithm name used for data association between detections and tracks.\n    - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes.\n    \n    BotSort-specific parameters:\n    - track_high_thresh (float): Detection confidence threshold for first association.\n    - track_low_thresh (float): Detection confidence threshold for ignoring detections.\n    - new_track_thresh (float): Threshold for creating a new track.\n    - track_buffer (int): Frames to keep a track alive after last detection.\n    - match_thresh (float): Matching threshold for data association.\n    - proximity_thresh (float): IoU threshold for first-round association.\n    - appearance_thresh (float): Appearance embedding distance threshold for ReID.\n    - cmc_method (str): Method for correcting camera motion, e.g., \"sof\" (simple optical flow).\n    - frame_rate (int): Video frame rate, used to scale the track buffer.\n    - fuse_first_associate (bool): Fuse appearance and motion in the first association step.\n    - with_reid (bool): Use ReID features for association.\n    \n    Attributes:\n    - frame_count (int): Counter for the frames processed.\n    - active_tracks (list): List to hold active tracks.\n    - lost_stracks (list[STrack]): List of lost tracks.\n    - removed_stracks (list[STrack]): List of removed tracks.\n    - buffer_size (int): Size of the track buffer based on frame rate.\n    - max_time_lost (int): Maximum time a track can be lost.\n    - kalman_filter (KalmanFilterXYWH): Kalman filter for motion prediction.\n    \"\"\"\n\n    def __init__(\n        self,\n        reid_weights: Path,\n        device: torch.device,\n        half: bool,\n        # BotSort-specific parameters\n        track_high_thresh: float = 0.5,\n        track_low_thresh: float = 0.1,\n        new_track_thresh: float = 0.6,\n        track_buffer: int = 30,\n        match_thresh: float = 0.8,\n        proximity_thresh: float = 0.5,\n        appearance_thresh: float = 0.25,\n        cmc_method: str = \"ecc\",\n        frame_rate: int = 30,\n        fuse_first_associate: bool = False,\n        with_reid: bool = True,\n        **kwargs  # BaseTracker parameters\n    ):\n        # Capture all init params for logging\n        init_args = {k: v for k, v in locals().items() if k not in ('self', 'kwargs')}\n        super().__init__(**init_args, _tracker_name='BotSort', **kwargs)\n        \n        self.lost_stracks = []  # type: list[STrack]\n        self.removed_stracks = []  # type: list[STrack]\n        BaseTrack.clear_count()\n\n        self.track_high_thresh = track_high_thresh\n        self.track_low_thresh = track_low_thresh\n        self.new_track_thresh = new_track_thresh\n        self.match_thresh = match_thresh\n\n        self.buffer_size = int(frame_rate / 30.0 * track_buffer)\n        self.max_time_lost = self.buffer_size\n        self.kalman_filter = KalmanFilterXYWH(ndim=5 if self.is_obb else 4)\n\n        # ReID module\n        self.proximity_thresh = proximity_thresh\n        self.appearance_thresh = appearance_thresh\n        self.with_reid = with_reid\n        if self.with_reid:\n            self.model = ReidAutoBackend(\n                weights=reid_weights, device=device, half=half\n            ).model\n\n        self.cmc = get_cmc_method(cmc_method)() if not self.is_obb else None\n        self.fuse_first_associate = fuse_first_associate\n\n    def _kalman_ndim(self) -> int:\n        return self.detection_layout.box_cols\n\n    def _detection_boxes(self, dets: np.ndarray) -> np.ndarray:\n        return self.detection_layout.boxes(dets)\n        \n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(\n        self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None\n    ) -> np.ndarray:\n        self.check_inputs(dets, img, embs)\n        self.kalman_filter = KalmanFilterXYWH(ndim=self._kalman_ndim())\n        if self.is_obb and self.cmc is not None:\n            self.cmc = None\n        self.frame_count += 1\n\n        activated_stracks, refind_stracks, lost_stracks, removed_stracks = [], [], [], []\n\n        # Preprocess detections\n        dets, dets_first, embs_first, dets_second = self._split_detections(dets, embs)\n\n        # Extract appearance features\n        if self.with_reid and embs is None:\n            features_high = self.model.get_features(self._detection_boxes(dets_first), img)\n        else:\n            features_high = embs_first if embs_first is not None else []\n\n        # Create detections\n        detections = self._create_detections(dets_first, features_high)\n\n        # Separate unconfirmed and active tracks\n        unconfirmed, active_tracks = self._separate_tracks()\n\n        strack_pool = joint_stracks(active_tracks, self.lost_stracks)\n\n        # First association\n        matches_first, u_track_first, u_detection_first = self._first_association(\n            dets,\n            dets_first,\n            active_tracks,\n            unconfirmed,\n            img,\n            detections,\n            activated_stracks,\n            refind_stracks,\n            strack_pool,\n        )\n\n        # Second association\n        matches_second, u_track_second, u_detection_second = self._second_association(\n            dets_second,\n            activated_stracks,\n            lost_stracks,\n            refind_stracks,\n            u_track_first,\n            strack_pool,\n        )\n\n        # Handle unconfirmed tracks\n        matches_unc, u_track_unc, u_detection_unc = self._handle_unconfirmed_tracks(\n            u_detection_first,\n            detections,\n            activated_stracks,\n            removed_stracks,\n            unconfirmed,\n        )\n\n        # Initialize new tracks\n        self._initialize_new_tracks(\n            u_detection_unc,\n            activated_stracks,\n            [detections[i] for i in u_detection_first],\n        )\n\n        # Update lost and removed tracks\n        self._update_track_states(removed_stracks)\n\n        # Merge and prepare output\n        return self._prepare_output(\n            activated_stracks, refind_stracks, lost_stracks, removed_stracks\n        )\n\n    def _split_detections(self, dets, embs):\n        dets = self.detection_layout.with_detection_indices(dets)\n        confs = self.detection_layout.confidences(dets)\n        second_mask = np.logical_and(\n            confs > self.track_low_thresh, confs < self.track_high_thresh\n        )\n        dets_second = dets[second_mask]\n        first_mask = confs > self.track_high_thresh\n        dets_first = dets[first_mask]\n        embs_first = embs[first_mask] if embs is not None else None\n        return dets, dets_first, embs_first, dets_second\n\n    def _create_detections(self, dets_first, features_high):\n        if len(dets_first) > 0:\n            if self.with_reid:\n                detections = [\n                    STrack(det, f, max_obs=self.max_obs, is_obb=self.is_obb)\n                    for (det, f) in zip(dets_first, features_high)\n                ]\n            else:\n                detections = [STrack(det, max_obs=self.max_obs, is_obb=self.is_obb) for det in dets_first]\n        else:\n            detections = []\n        return detections\n\n    def _separate_tracks(self):\n        unconfirmed, active_tracks = [], []\n        for track in self.active_tracks:\n            if not track.is_activated:\n                unconfirmed.append(track)\n            else:\n                active_tracks.append(track)\n        return unconfirmed, active_tracks\n\n    def _first_association(\n        self,\n        dets,\n        dets_first,\n        active_tracks,\n        unconfirmed,\n        img,\n        detections,\n        activated_stracks,\n        refind_stracks,\n        strack_pool,\n    ):\n\n        STrack.multi_predict(strack_pool)\n\n        # Fix camera motion\n        if self.cmc is not None:\n            warp = self.cmc.apply(img, dets)\n            STrack.multi_gmc(strack_pool, warp)\n            STrack.multi_gmc(unconfirmed, warp)\n\n        # Associate with high confidence detection boxes\n        ious_dists = iou_distance(strack_pool, detections, is_obb=self.is_obb)\n        ious_dists_mask = ious_dists > self.proximity_thresh\n        if self.fuse_first_associate:\n            ious_dists = fuse_score(ious_dists, detections)\n\n        if self.with_reid:\n            emb_dists = embedding_distance(strack_pool, detections)\n            emb_dists[emb_dists > self.appearance_thresh] = 1.0\n            emb_dists[ious_dists_mask] = 1.0\n            dists = np.minimum(ious_dists, emb_dists)\n        else:\n            dists = ious_dists\n\n        matches, u_track, u_detection = linear_assignment(\n            dists, thresh=self.match_thresh\n        )\n\n        for itracked, idet in matches:\n            track = strack_pool[itracked]\n            det = detections[idet]\n            if track.state == TrackState.Tracked:\n                track.update(detections[idet], self.frame_count)\n                activated_stracks.append(track)\n            else:\n                track.re_activate(det, self.frame_count, new_id=False)\n                refind_stracks.append(track)\n\n        return matches, u_track, u_detection\n\n    def _second_association(\n        self,\n        dets_second,\n        activated_stracks,\n        lost_stracks,\n        refind_stracks,\n        u_track_first,\n        strack_pool,\n    ):\n        if len(dets_second) > 0:\n            detections_second = [\n                STrack(det, max_obs=self.max_obs, is_obb=self.is_obb) for det in dets_second\n            ]\n        else:\n            detections_second = []\n\n        r_tracked_stracks = [\n            strack_pool[i]\n            for i in u_track_first\n            if strack_pool[i].state == TrackState.Tracked\n        ]\n\n        dists = iou_distance(r_tracked_stracks, detections_second, is_obb=self.is_obb)\n        matches, u_track, u_detection = linear_assignment(dists, thresh=0.5)\n\n        for itracked, idet in matches:\n            track = r_tracked_stracks[itracked]\n            det = detections_second[idet]\n            if track.state == TrackState.Tracked:\n                track.update(det, self.frame_count)\n                activated_stracks.append(track)\n            else:\n                track.re_activate(det, self.frame_count, new_id=False)\n                refind_stracks.append(track)\n\n        for it in u_track:\n            track = r_tracked_stracks[it]\n            if not track.state == TrackState.Lost:\n                track.mark_lost()\n                lost_stracks.append(track)\n\n        return matches, u_track, u_detection\n\n    def _handle_unconfirmed_tracks(\n        self, u_detection, detections, activated_stracks, removed_stracks, unconfirmed\n    ):\n        \"\"\"\n        Handle unconfirmed tracks (tracks with only one detection frame).\n\n        Args:\n            u_detection: Unconfirmed detection indices.\n            detections: Current list of detections.\n            activated_stracks: List of newly activated tracks.\n            removed_stracks: List of tracks to remove.\n        \"\"\"\n        # Only use detections that are unconfirmed (filtered by u_detection)\n        detections = [detections[i] for i in u_detection]\n\n        # Calculate IoU distance between unconfirmed tracks and detections\n        ious_dists = iou_distance(unconfirmed, detections, is_obb=self.is_obb)\n\n        # Apply IoU mask to filter out distances that exceed proximity threshold\n        ious_dists_mask = ious_dists > self.proximity_thresh\n        ious_dists = fuse_score(ious_dists, detections)\n\n        # Fuse scores for IoU-based and embedding-based matching (if applicable)\n        if self.with_reid:\n            emb_dists = embedding_distance(unconfirmed, detections) / 2.0\n            emb_dists[emb_dists > self.appearance_thresh] = 1.0\n            emb_dists[ious_dists_mask] = (\n                1.0  # Apply the IoU mask to embedding distances\n            )\n            dists = np.minimum(ious_dists, emb_dists)\n        else:\n            dists = ious_dists\n\n        # Perform data association using linear assignment on the combined distances\n        matches, u_unconfirmed, u_detection = linear_assignment(dists, thresh=0.7)\n\n        # Update matched unconfirmed tracks\n        for itracked, idet in matches:\n            unconfirmed[itracked].update(detections[idet], self.frame_count)\n            activated_stracks.append(unconfirmed[itracked])\n\n        # Mark unmatched unconfirmed tracks as removed\n        for it in u_unconfirmed:\n            track = unconfirmed[it]\n            track.mark_removed()\n            removed_stracks.append(track)\n\n        return matches, u_unconfirmed, u_detection\n\n    def _initialize_new_tracks(self, u_detections, activated_stracks, detections):\n        for inew in u_detections:\n            track = detections[inew]\n            if track.conf < self.new_track_thresh:\n                continue\n\n            track.activate(self.kalman_filter, self.frame_count)\n            activated_stracks.append(track)\n\n    def _update_tracks(\n        self,\n        matches,\n        strack_pool,\n        detections,\n        activated_stracks,\n        refind_stracks,\n        mark_removed=False,\n    ):\n        # Update or reactivate matched tracks\n        for itracked, idet in matches:\n            track = strack_pool[itracked]\n            det = detections[idet]\n            if track.state == TrackState.Tracked:\n                track.update(det, self.frame_count)\n                activated_stracks.append(track)\n            else:\n                track.re_activate(det, self.frame_count, new_id=False)\n                refind_stracks.append(track)\n\n        # Mark only unmatched tracks as removed, if mark_removed flag is True\n        if mark_removed:\n            unmatched_tracks = [\n                strack_pool[i]\n                for i in range(len(strack_pool))\n                if i not in [m[0] for m in matches]\n            ]\n            for track in unmatched_tracks:\n                track.mark_removed()\n\n    def _update_track_states(self, removed_stracks):\n        for track in self.lost_stracks:\n            if self.frame_count - track.end_frame > self.max_time_lost:\n                track.mark_removed()\n                removed_stracks.append(track)\n\n    def _prepare_output(\n        self, activated_stracks, refind_stracks, lost_stracks, removed_stracks\n    ):\n        self.active_tracks = [\n            t for t in self.active_tracks if t.state == TrackState.Tracked\n        ]\n        self.active_tracks = joint_stracks(self.active_tracks, activated_stracks)\n        self.active_tracks = joint_stracks(self.active_tracks, refind_stracks)\n        self.lost_stracks = sub_stracks(self.lost_stracks, self.active_tracks)\n        self.lost_stracks.extend(lost_stracks)\n        self.lost_stracks = sub_stracks(self.lost_stracks, self.removed_stracks)\n        self.removed_stracks.extend(removed_stracks)\n        self.active_tracks, self.lost_stracks = remove_duplicate_stracks(\n            self.active_tracks, self.lost_stracks\n        )\n\n        outputs = [\n            [*(t.xywha if self.is_obb else t.xyxy), t.id, t.conf, t.cls, t.det_ind]\n            for t in self.active_tracks\n            if t.is_activated\n        ]\n\n        return np.asarray(outputs, dtype=np.float32) if outputs else self.empty_output(dtype=np.float32)\n"
  },
  {
    "path": "boxmot/trackers/botsort/botsort_track.py",
    "content": "from collections import deque\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.xywh import KalmanFilterXYWH\nfrom boxmot.trackers.botsort.basetrack import BaseTrack, TrackState\nfrom boxmot.utils.ops import xywh2xyxy, xyxy2xywh\n\n\nclass STrack(BaseTrack):\n    shared_kalman = KalmanFilterXYWH()\n    shared_kalman_obb = KalmanFilterXYWH(ndim=5)\n\n    def __init__(self, det, feat=None, feat_history=50, max_obs=50, is_obb=False):\n        # Initialize detection parameters\n        self.is_obb = is_obb\n        det = np.asarray(det, dtype=np.float32)\n        if self.is_obb:\n            self._init_from_obb_detection(det)\n        else:\n            self._init_from_aabb_detection(det)\n        self.max_obs = max_obs\n\n        # Kalman filter and tracking state\n        self.kalman_filter = None\n        self.mean, self.covariance = None, None\n        self.is_activated = False\n        self.tracklet_len = 0\n\n        # Classification history and feature history\n        self.cls_hist = []\n        self.history_observations = deque(maxlen=self.max_obs)\n        self._plot_angle = None\n        self.features = deque(maxlen=feat_history)\n        self.smooth_feat = None\n        self.curr_feat = None\n        self.alpha = 0.9\n\n        # Update initial class and features\n        self.update_cls(self.cls, self.conf)\n        if feat is not None:\n            self.update_features(feat)\n\n    def _init_from_aabb_detection(self, det: np.ndarray) -> None:\n        self.xywh = xyxy2xywh(det[:4])\n        self.conf = det[4]\n        self.cls = det[5]\n        self.det_ind = det[6]\n\n    def _init_from_obb_detection(self, det: np.ndarray) -> None:\n        self.xywh = det[:5].copy()\n        self.conf = det[5]\n        self.cls = det[6]\n        self.det_ind = det[7]\n\n    def update_features(self, feat):\n        \"\"\"Normalize and update feature vectors.\"\"\"\n        feat /= np.linalg.norm(feat)\n        self.curr_feat = feat\n        if self.smooth_feat is None:\n            self.smooth_feat = feat\n        else:\n            self.smooth_feat = self.alpha * self.smooth_feat + (1 - self.alpha) * feat\n        self.smooth_feat /= np.linalg.norm(self.smooth_feat)\n        self.features.append(feat)\n\n    def update_cls(self, cls, conf):\n        \"\"\"Update class history based on detection confidence.\"\"\"\n        max_freq = 0\n        found = False\n        for c in self.cls_hist:\n            if cls == c[0]:\n                c[1] += conf\n                found = True\n            if c[1] > max_freq:\n                max_freq = c[1]\n                self.cls = c[0]\n        if not found:\n            self.cls_hist.append([cls, conf])\n            self.cls = cls\n\n    def predict(self):\n        \"\"\"Predict the next state using Kalman filter.\"\"\"\n        mean_state = self.mean.copy()\n        if self.state != TrackState.Tracked:\n            if self.is_obb:\n                mean_state[7:10] = 0  # Reset size/angle velocities\n            else:\n                mean_state[6:8] = 0\n        self.mean, self.covariance = self.kalman_filter.predict(\n            mean_state, self.covariance\n        )\n\n    @staticmethod\n    def multi_predict(stracks):\n        \"\"\"Perform batch prediction for multiple tracks.\"\"\"\n        if not stracks:\n            return\n        multi_mean = np.asarray([st.mean.copy() for st in stracks])\n        multi_covariance = np.asarray([st.covariance for st in stracks])\n        is_obb = getattr(stracks[0], \"is_obb\", False)\n        for i, st in enumerate(stracks):\n            if st.state != TrackState.Tracked:\n                if is_obb:\n                    multi_mean[i][7:10] = 0\n                else:\n                    multi_mean[i][6:8] = 0  # Reset velocities\n        kalman = STrack.shared_kalman_obb if is_obb else STrack.shared_kalman\n        multi_mean, multi_covariance = kalman.multi_predict(\n            multi_mean, multi_covariance\n        )\n        for st, mean, cov in zip(stracks, multi_mean, multi_covariance):\n            st.mean, st.covariance = mean, cov\n\n    @staticmethod\n    def multi_gmc(stracks, H=np.eye(2, 3)):\n        \"\"\"Apply geometric motion compensation to multiple tracks.\"\"\"\n        if not stracks:\n            return\n        if getattr(stracks[0], \"is_obb\", False):\n            return\n        R = H[:2, :2]\n        R8x8 = np.kron(np.eye(4), R)\n        t = H[:2, 2]\n\n        for st in stracks:\n            mean = R8x8.dot(st.mean)\n            mean[:2] += t\n            st.mean = mean\n            st.covariance = R8x8.dot(st.covariance).dot(R8x8.T)\n\n    def activate(self, kalman_filter, frame_id):\n        \"\"\"Activate a new track.\"\"\"\n        self.kalman_filter = kalman_filter\n        self.id = self.next_id()\n        self.mean, self.covariance = self.kalman_filter.initiate(self.xywh)\n        self.tracklet_len = 0\n        self.state = TrackState.Tracked\n        if frame_id == 1:\n            self.is_activated = True\n        self.frame_id = frame_id\n        self.start_frame = frame_id\n\n    def re_activate(self, new_track, frame_id, new_id=False):\n        \"\"\"Re-activate a track with a new detection.\"\"\"\n        self.mean, self.covariance = self.kalman_filter.update(\n            self.mean, self.covariance, new_track.xywh\n        )\n        if new_track.curr_feat is not None:\n            self.update_features(new_track.curr_feat)\n        self.tracklet_len = 0\n        self.state = TrackState.Tracked\n        self.is_activated = True\n        self.frame_id = frame_id\n        if new_id:\n            self.id = self.next_id()\n        self.conf = new_track.conf\n        self.cls = new_track.cls\n        self.det_ind = new_track.det_ind\n        self.update_cls(new_track.cls, new_track.conf)\n\n    def update(self, new_track, frame_id):\n        \"\"\"Update the current track with a matched detection.\"\"\"\n        self.frame_id = frame_id\n        self.tracklet_len += 1\n        if not self.is_obb:\n            self.history_observations.append(self.xyxy)\n\n        self.mean, self.covariance = self.kalman_filter.update(\n            self.mean, self.covariance, new_track.xywh\n        )\n        if new_track.curr_feat is not None:\n            self.update_features(new_track.curr_feat)\n\n        self.state = TrackState.Tracked\n        self.is_activated = True\n        self.conf = new_track.conf\n        self.cls = new_track.cls\n        self.det_ind = new_track.det_ind\n        self.update_cls(new_track.cls, new_track.conf)\n        if self.is_obb:\n            self.history_observations.append(self._state_obb_for_plot())\n\n    @staticmethod\n    def _wrap_pi_periodic(delta: float) -> float:\n        return float((delta + (np.pi / 2.0)) % np.pi - (np.pi / 2.0))\n\n    def _state_obb_for_plot(self) -> np.ndarray:\n        \"\"\"Return post-update OBB state as 4 corners with state-only angle smoothing.\"\"\"\n        box = self.xywha.copy()\n        if box[3] > box[2]:\n            box[2], box[3] = box[3], box[2]\n            box[4] = box[4] + (np.pi / 2.0)\n        target = float((box[4] + np.pi) % (2.0 * np.pi) - np.pi)\n        if self._plot_angle is None:\n            self._plot_angle = target\n        else:\n            self._plot_angle = self._plot_angle + self._wrap_pi_periodic(\n                target - self._plot_angle\n            )\n        box[4] = self._plot_angle\n        rect = (\n            (float(box[0]), float(box[1])),\n            (max(float(box[2]), 1e-4), max(float(box[3]), 1e-4)),\n            float(np.degrees(box[4])),\n        )\n        corners = cv2.boxPoints(rect).reshape(-1)\n        return np.asarray(corners, dtype=np.float32)\n\n    @property\n    def xyxy(self):\n        \"\"\"Convert bounding box format to `(min x, min y, max x, max y)`.\"\"\"\n        if self.is_obb:\n            cx, cy, w, h, angle = self.xywha\n            rect = ((float(cx), float(cy)), (max(float(w), 1e-4), max(float(h), 1e-4)), float(np.degrees(angle)))\n            corners = cv2.boxPoints(rect)\n            x1, y1 = corners.min(axis=0)\n            x2, y2 = corners.max(axis=0)\n            return np.array([x1, y1, x2, y2], dtype=np.float32)\n        ret = self.mean[:4].copy() if self.mean is not None else self.xywh.copy()\n        return xywh2xyxy(ret)\n\n    @property\n    def xywha(self):\n        \"\"\"Return oriented bbox format `(cx, cy, w, h, angle)` when OBB mode is enabled.\"\"\"\n        if not self.is_obb:\n            xywh = self.mean[:4].copy() if self.mean is not None else self.xywh.copy()\n            return np.array([xywh[0], xywh[1], xywh[2], xywh[3], 0.0], dtype=np.float32)\n        ret = self.mean[:5].copy() if self.mean is not None else self.xywh.copy()\n        return np.asarray(ret, dtype=np.float32)\n"
  },
  {
    "path": "boxmot/trackers/botsort/botsort_utils.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom typing import List, Tuple\n\nimport numpy as np\n\nfrom boxmot.utils.matching import iou_distance\n\n\ndef joint_stracks(tlista: List[\"STrack\"], tlistb: List[\"STrack\"]) -> List[\"STrack\"]:\n    \"\"\"\n    Joins two lists of tracks, ensuring that there are no duplicates based on track IDs.\n\n    Args:\n        tlista (List[STrack]): The first list of tracks.\n        tlistb (List[STrack]): The second list of tracks.\n\n    Returns:\n        List[STrack]: A combined list of tracks from both input lists, without duplicates.\n    \"\"\"\n    exists = {}\n    res = []\n    for t in tlista:\n        exists[t.id] = 1\n        res.append(t)\n    for t in tlistb:\n        tid = t.id\n        if not exists.get(tid, 0):\n            exists[tid] = 1\n            res.append(t)\n    return res\n\n\ndef sub_stracks(tlista: List[\"STrack\"], tlistb: List[\"STrack\"]) -> List[\"STrack\"]:\n    \"\"\"\n    Subtracts the tracks in tlistb from tlista based on track IDs.\n\n    Args:\n        tlista (List[STrack]): The list of tracks from which tracks will be removed.\n        tlistb (List[STrack]): The list of tracks to be removed from tlista.\n\n    Returns:\n        List[STTrack]: The remaining tracks after removal.\n    \"\"\"\n    stracks = {t.id: t for t in tlista}\n    for t in tlistb:\n        tid = t.id\n        if tid in stracks:\n            del stracks[tid]\n    return list(stracks.values())\n\n\ndef remove_duplicate_stracks(\n    stracksa: List[\"STrack\"], stracksb: List[\"STrack\"]\n) -> Tuple[List[\"STrack\"], List[\"STrack\"]]:\n    \"\"\"\n    Removes duplicate tracks between two lists based on their IoU distance and track duration.\n\n    Args:\n        stracksa (List[STrack]): The first list of tracks.\n        stracksb (List[STrack]): The second list of tracks.\n\n    Returns:\n        Tuple[List[STrack], List[STrack]]: The filtered track lists, with duplicates removed.\n    \"\"\"\n    is_obb = any(getattr(t, \"is_obb\", False) for t in stracksa + stracksb)\n    pdist = iou_distance(stracksa, stracksb, is_obb=is_obb)\n    pairs = np.where(pdist < 0.15)\n    dupa, dupb = [], []\n\n    for p, q in zip(*pairs):\n        timep = stracksa[p].frame_id - stracksa[p].start_frame\n        timeq = stracksb[q].frame_id - stracksb[q].start_frame\n        if timep > timeq:\n            dupb.append(q)\n        else:\n            dupa.append(p)\n\n    resa = [t for i, t in enumerate(stracksa) if i not in dupa]\n    resb = [t for i, t in enumerate(stracksb) if i not in dupb]\n\n    return resa, resb\n"
  },
  {
    "path": "boxmot/trackers/bytetrack/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/bytetrack/basetrack.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import OrderedDict\n\nimport numpy as np\n\n\nclass TrackState(object):\n    New = 0\n    Tracked = 1\n    Lost = 2\n    Removed = 3\n\n\nclass BaseTrack(object):\n    _count = 0\n\n    track_id = 0\n    is_activated = False\n    state = TrackState.New\n\n    history = OrderedDict()\n    features = []\n    curr_feature = None\n    conf = 0\n    start_frame = 0\n    frame_id = 0\n    time_since_update = 0\n\n    # multi-camera\n    location = (np.inf, np.inf)\n\n    @property\n    def end_frame(self):\n        return self.frame_id\n\n    @staticmethod\n    def next_id():\n        BaseTrack._count += 1\n        return BaseTrack._count\n\n    def activate(self, *args):\n        raise NotImplementedError\n\n    def predict(self):\n        raise NotImplementedError\n\n    def update(self, *args, **kwargs):\n        raise NotImplementedError\n\n    def mark_lost(self):\n        self.state = TrackState.Lost\n\n    def mark_removed(self):\n        self.state = TrackState.Removed\n\n    @staticmethod\n    def clear_count():\n        BaseTrack._count = 0\n"
  },
  {
    "path": "boxmot/trackers/bytetrack/bytetrack.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import deque\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.xywh import KalmanFilterXYWH\nfrom boxmot.motion.kalman_filters.xyah import KalmanFilterXYAH\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.trackers.bytetrack.basetrack import BaseTrack, TrackState\nfrom boxmot.utils.matching import fuse_score, iou_distance, linear_assignment\nfrom boxmot.utils.ops import tlwh2xyah, xywh2tlwh, xywh2xyxy, xyxy2xywh\n\n\nclass STrack(BaseTrack):\n    shared_kalman = KalmanFilterXYAH()\n    shared_kalman_obb = KalmanFilterXYWH(ndim=5)\n\n    def __init__(self, det, max_obs, is_obb: bool = False):\n        # wait activate\n        self.is_obb = is_obb\n        det = np.asarray(det, dtype=np.float32)\n        if self.is_obb:\n            self._init_from_obb_detection(det)\n        else:\n            self._init_from_aabb_detection(det)\n        self.max_obs = max_obs\n        self.kalman_filter = None\n        self.mean, self.covariance = None, None\n        self.is_activated = False\n        self.tracklet_len = 0\n        self.history_observations = deque([], maxlen=self.max_obs)\n        self._plot_angle = None\n\n    def _init_from_aabb_detection(self, det: np.ndarray) -> None:\n        self.xywh = xyxy2xywh(det[0:4])\n        self.tlwh = xywh2tlwh(self.xywh)\n        self.xyah = tlwh2xyah(self.tlwh)\n        self.conf = det[4]\n        self.cls = det[5]\n        self.det_ind = det[6]\n\n    def _init_from_obb_detection(self, det: np.ndarray) -> None:\n        self.xywh = det[:5].copy()\n        self.tlwh = None\n        self.xyah = None\n        self.conf = det[5]\n        self.cls = det[6]\n        self.det_ind = det[7]\n\n    def predict(self):\n        mean_state = self.mean.copy()\n        if self.state != TrackState.Tracked:\n            if self.is_obb:\n                mean_state[7:10] = 0\n            else:\n                mean_state[7] = 0\n        self.mean, self.covariance = self.kalman_filter.predict(\n            mean_state, self.covariance\n        )\n\n    @staticmethod\n    def multi_predict(stracks):\n        if len(stracks) > 0:\n            multi_mean = np.asarray([st.mean.copy() for st in stracks])\n            multi_covariance = np.asarray([st.covariance for st in stracks])\n            is_obb = getattr(stracks[0], \"is_obb\", False)\n            for i, st in enumerate(stracks):\n                if st.state != TrackState.Tracked:\n                    if is_obb:\n                        multi_mean[i][7:10] = 0\n                    else:\n                        multi_mean[i][7] = 0\n            kalman = STrack.shared_kalman_obb if is_obb else STrack.shared_kalman\n            multi_mean, multi_covariance = kalman.multi_predict(\n                multi_mean, multi_covariance\n            )\n            for i, (mean, cov) in enumerate(zip(multi_mean, multi_covariance)):\n                stracks[i].mean = mean\n                stracks[i].covariance = cov\n\n    def activate(self, kalman_filter, frame_id):\n        \"\"\"Start a new tracklet\"\"\"\n        self.kalman_filter = kalman_filter\n        self.id = self.next_id()\n        self.mean, self.covariance = self.kalman_filter.initiate(\n            self.xywh if self.is_obb else self.xyah\n        )\n\n        self.tracklet_len = 0\n        self.state = TrackState.Tracked\n        if frame_id == 1:\n            self.is_activated = True\n        # self.is_activated = True\n        self.frame_id = frame_id\n        self.start_frame = frame_id\n\n    def re_activate(self, new_track, frame_id, new_id=False):\n        self.mean, self.covariance = self.kalman_filter.update(\n            self.mean,\n            self.covariance,\n            new_track.xywh if self.is_obb else new_track.xyah,\n        )\n        self.tracklet_len = 0\n        self.state = TrackState.Tracked\n        self.is_activated = True\n        self.frame_id = frame_id\n        if new_id:\n            self.id = self.next_id()\n        self.conf = new_track.conf\n        self.cls = new_track.cls\n        self.det_ind = new_track.det_ind\n\n    def update(self, new_track, frame_id):\n        \"\"\"\n        Update a matched track\n        :type new_track: STrack\n        :type frame_id: int\n        :type update_feature: bool\n        :return:\n        \"\"\"\n        self.frame_id = frame_id\n        self.tracklet_len += 1\n        if not self.is_obb:\n            self.history_observations.append(self.xyxy)\n\n        self.mean, self.covariance = self.kalman_filter.update(\n            self.mean,\n            self.covariance,\n            new_track.xywh if self.is_obb else new_track.xyah,\n        )\n        self.state = TrackState.Tracked\n        self.is_activated = True\n\n        self.conf = new_track.conf\n        self.cls = new_track.cls\n        self.det_ind = new_track.det_ind\n        if self.is_obb:\n            self.history_observations.append(self._state_obb_for_plot())\n\n    @staticmethod\n    def _wrap_pi_periodic(delta: float) -> float:\n        return float((delta + (np.pi / 2.0)) % np.pi - (np.pi / 2.0))\n\n    def _state_obb_for_plot(self) -> np.ndarray:\n        \"\"\"Return post-update OBB state as 4 corners with state-only angle smoothing.\"\"\"\n        box = self.xywha.copy()\n        if box[3] > box[2]:\n            box[2], box[3] = box[3], box[2]\n            box[4] = box[4] + (np.pi / 2.0)\n        target = float((box[4] + np.pi) % (2.0 * np.pi) - np.pi)\n        if self._plot_angle is None:\n            self._plot_angle = target\n        else:\n            self._plot_angle = self._plot_angle + self._wrap_pi_periodic(\n                target - self._plot_angle\n            )\n        box[4] = self._plot_angle\n        rect = (\n            (float(box[0]), float(box[1])),\n            (max(float(box[2]), 1e-4), max(float(box[3]), 1e-4)),\n            float(np.degrees(box[4])),\n        )\n        corners = cv2.boxPoints(rect).reshape(-1)\n        return np.asarray(corners, dtype=np.float32)\n\n    @property\n    def xyxy(self):\n        \"\"\"Convert bounding box to format `(min x, min y, max x, max y)`, i.e.,\n        `(top left, bottom right)`.\n        \"\"\"\n        if self.is_obb:\n            cx, cy, w, h, angle = self.xywha\n            rect = ((float(cx), float(cy)), (max(float(w), 1e-4), max(float(h), 1e-4)), float(np.degrees(angle)))\n            corners = cv2.boxPoints(rect)\n            x1, y1 = corners.min(axis=0)\n            x2, y2 = corners.max(axis=0)\n            return np.array([x1, y1, x2, y2], dtype=np.float32)\n        if self.mean is None:\n            ret = self.xywh.copy()  # (xc, yc, w, h)\n        else:\n            ret = self.mean[:4].copy()  # kf (xc, yc, a, h)\n            ret[2] *= ret[3]  # (xc, yc, a, h)  -->  (xc, yc, w, h)\n        ret = xywh2xyxy(ret)\n        return ret\n\n    @property\n    def xywha(self):\n        if self.is_obb:\n            ret = self.mean[:5].copy() if self.mean is not None else self.xywh.copy()\n            return np.asarray(ret, dtype=np.float32)\n        xywh = self.mean[:4].copy() if self.mean is not None else self.xywh.copy()\n        return np.array([xywh[0], xywh[1], xywh[2], xywh[3], 0.0], dtype=np.float32)\n\n\nclass ByteTrack(BaseTracker):\n    supports_obb = True\n\n    \"\"\"\n    Initialize the ByteTrack tracker with various parameters.\n\n    Parameters:\n    - det_thresh (float): Detection threshold for considering detections.\n    - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n    - max_obs (int): Maximum number of historical observations stored for each track. Always greater than max_age by minimum 5.\n    - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n    - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n    - per_class (bool): Enables class-separated tracking.\n    - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True).\n    - asso_func (str): Algorithm name used for data association between detections and tracks.\n    - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes.\n    \n    ByteTrack-specific parameters:\n    - min_conf (float): Threshold for detection confidence. Detections below this threshold are discarded.\n    - track_thresh (float): Threshold for detection confidence. Detections above this threshold are considered for tracking in the first association round.\n    - match_thresh (float): Threshold for the matching step in data association. Controls the maximum distance allowed between tracklets and detections for a match.\n    - track_buffer (int): Number of frames to keep a track alive after it was last detected.\n    - frame_rate (int): Frame rate of the video being processed. Used to scale the track buffer size.\n    \n    Attributes:\n    - frame_count (int): Counter for the frames processed.\n    - active_tracks (list): List to hold active tracks.\n    - lost_stracks (list[STrack]): List of lost tracks.\n    - removed_stracks (list[STrack]): List of removed tracks.\n    - buffer_size (int): Size of the track buffer based on frame rate.\n    - max_time_lost (int): Maximum time a track can be lost.\n    - kalman_filter (KalmanFilterXYAH): Kalman filter for motion prediction.\n    \"\"\"\n\n    def __init__(\n        self,\n        # ByteTrack-specific parameters\n        min_conf: float = 0.1,\n        track_thresh: float = 0.45,\n        match_thresh: float = 0.8,\n        track_buffer: int = 25,\n        frame_rate: int = 30,\n        **kwargs  # BaseTracker parameters\n    ):\n        # Capture all init params for logging\n        init_args = {k: v for k, v in locals().items() if k not in ('self', 'kwargs')}\n        super().__init__(**init_args, _tracker_name='ByteTrack', **kwargs)\n        \n        # Track lifecycle parameters\n        self.frame_id = 0\n        self.track_buffer = track_buffer\n        self.buffer_size = int(frame_rate / 30.0 * track_buffer)\n        self.max_time_lost = self.buffer_size\n\n        # Detection thresholds\n        self.min_conf = min_conf\n        self.track_thresh = track_thresh\n        self.match_thresh = match_thresh\n        self.det_thresh = track_thresh  # Same as track_thresh\n\n        # Motion model\n        self.kalman_filter = KalmanFilterXYAH()\n        \n        self.active_tracks = []  # type: list[STrack]\n        self.lost_stracks = []  # type: list[STrack]\n        self.removed_stracks = []  # type: list[STrack]\n\n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(\n        self, dets: np.ndarray, img: np.ndarray = None, embs: np.ndarray = None\n    ) -> np.ndarray:\n\n        self.check_inputs(dets, img)\n\n        self.kalman_filter = KalmanFilterXYWH(ndim=5) if self.is_obb else KalmanFilterXYAH()\n        dets = self.detection_layout.with_detection_indices(dets)\n        self.frame_count += 1\n        activated_starcks = []\n        refind_stracks = []\n        lost_stracks = []\n        removed_stracks = []\n        confs = self.detection_layout.confidences(dets)\n\n        remain_inds = confs > self.track_thresh\n\n        inds_low = confs > self.min_conf\n        inds_high = confs < self.track_thresh\n        inds_second = np.logical_and(inds_low, inds_high)\n\n        dets_second = dets[inds_second]\n        dets = dets[remain_inds]\n\n        if len(dets) > 0:\n            \"\"\"Detections\"\"\"\n            detections = [STrack(det, max_obs=self.max_obs, is_obb=self.is_obb) for det in dets]\n        else:\n            detections = []\n\n        \"\"\" Add newly detected tracklets to tracked_stracks\"\"\"\n        unconfirmed = []\n        tracked_stracks = []  # type: list[STrack]\n        for track in self.active_tracks:\n            if not track.is_activated:\n                unconfirmed.append(track)\n            else:\n                tracked_stracks.append(track)\n\n        \"\"\" Step 2: First association, with high conf detection boxes\"\"\"\n        strack_pool = joint_stracks(tracked_stracks, self.lost_stracks)\n        # Predict the current location with KF\n        STrack.multi_predict(strack_pool)\n        dists = iou_distance(strack_pool, detections, is_obb=self.is_obb)\n        # if not self.args.mot20:\n        dists = fuse_score(dists, detections)\n        matches, u_track, u_detection = linear_assignment(\n            dists, thresh=self.match_thresh\n        )\n\n        for itracked, idet in matches:\n            track = strack_pool[itracked]\n            det = detections[idet]\n            if track.state == TrackState.Tracked:\n                track.update(detections[idet], self.frame_count)\n                activated_starcks.append(track)\n            else:\n                track.re_activate(det, self.frame_count, new_id=False)\n                refind_stracks.append(track)\n\n        \"\"\" Step 3: Second association, with low conf detection boxes\"\"\"\n        # association the untrack to the low conf detections\n        if len(dets_second) > 0:\n            \"\"\"Detections\"\"\"\n            detections_second = [\n                STrack(det_second, max_obs=self.max_obs, is_obb=self.is_obb)\n                for det_second in dets_second\n            ]\n        else:\n            detections_second = []\n        r_tracked_stracks = [\n            strack_pool[i]\n            for i in u_track\n            if strack_pool[i].state == TrackState.Tracked\n        ]\n        dists = iou_distance(r_tracked_stracks, detections_second, is_obb=self.is_obb)\n        matches, u_track, u_detection_second = linear_assignment(dists, thresh=0.5)\n        for itracked, idet in matches:\n            track = r_tracked_stracks[itracked]\n            det = detections_second[idet]\n            if track.state == TrackState.Tracked:\n                track.update(det, self.frame_count)\n                activated_starcks.append(track)\n            else:\n                track.re_activate(det, self.frame_count, new_id=False)\n                refind_stracks.append(track)\n\n        for it in u_track:\n            track = r_tracked_stracks[it]\n            if not track.state == TrackState.Lost:\n                track.mark_lost()\n                lost_stracks.append(track)\n\n        \"\"\"Deal with unconfirmed tracks, usually tracks with only one beginning frame\"\"\"\n        detections = [detections[i] for i in u_detection]\n        dists = iou_distance(unconfirmed, detections, is_obb=self.is_obb)\n        # if not self.args.mot20:\n        dists = fuse_score(dists, detections)\n        matches, u_unconfirmed, u_detection = linear_assignment(dists, thresh=0.7)\n        for itracked, idet in matches:\n            unconfirmed[itracked].update(detections[idet], self.frame_count)\n            activated_starcks.append(unconfirmed[itracked])\n        for it in u_unconfirmed:\n            track = unconfirmed[it]\n            track.mark_removed()\n            removed_stracks.append(track)\n\n        \"\"\" Step 4: Init new stracks\"\"\"\n        for inew in u_detection:\n            track = detections[inew]\n            if track.conf < self.det_thresh:\n                continue\n            track.activate(self.kalman_filter, self.frame_count)\n            activated_starcks.append(track)\n        \"\"\" Step 5: Update state\"\"\"\n        for track in self.lost_stracks:\n            if self.frame_count - track.end_frame > self.max_time_lost:\n                track.mark_removed()\n                removed_stracks.append(track)\n\n        self.active_tracks = [\n            t for t in self.active_tracks if t.state == TrackState.Tracked\n        ]\n        self.active_tracks = joint_stracks(self.active_tracks, activated_starcks)\n        self.active_tracks = joint_stracks(self.active_tracks, refind_stracks)\n        self.lost_stracks = sub_stracks(self.lost_stracks, self.active_tracks)\n        self.lost_stracks.extend(lost_stracks)\n        self.lost_stracks = sub_stracks(self.lost_stracks, self.removed_stracks)\n        self.removed_stracks.extend(removed_stracks)\n        self.active_tracks, self.lost_stracks = remove_duplicate_stracks(\n            self.active_tracks, self.lost_stracks\n        )\n        # get confs of lost tracks\n        output_stracks = [track for track in self.active_tracks if track.is_activated]\n        outputs = []\n        for t in output_stracks:\n            output = []\n            output.extend(t.xywha if self.is_obb else t.xyxy)\n            output.append(t.id)\n            output.append(t.conf)\n            output.append(t.cls)\n            output.append(t.det_ind)\n            outputs.append(output)\n        return np.asarray(outputs, dtype=np.float32) if outputs else self.empty_output(dtype=np.float32)\n\n\n# id, class_id, conf\n\n\ndef joint_stracks(tlista, tlistb):\n    exists = {}\n    res = []\n    for t in tlista:\n        exists[t.id] = 1\n        res.append(t)\n    for t in tlistb:\n        tid = t.id\n        if not exists.get(tid, 0):\n            exists[tid] = 1\n            res.append(t)\n    return res\n\n\ndef sub_stracks(tlista, tlistb):\n    stracks = {}\n    for t in tlista:\n        stracks[t.id] = t\n    for t in tlistb:\n        tid = t.id\n        if stracks.get(tid, 0):\n            del stracks[tid]\n    return list(stracks.values())\n\n\ndef remove_duplicate_stracks(stracksa, stracksb):\n    pdist = iou_distance(stracksa, stracksb)\n    pairs = np.where(pdist < 0.15)\n    dupa, dupb = list(), list()\n    for p, q in zip(*pairs):\n        timep = stracksa[p].frame_id - stracksa[p].start_frame\n        timeq = stracksb[q].frame_id - stracksb[q].start_frame\n        if timep > timeq:\n            dupb.append(q)\n        else:\n            dupa.append(p)\n    resa = [t for i, t in enumerate(stracksa) if i not in dupa]\n    resb = [t for i, t in enumerate(stracksb) if i not in dupb]\n    return resa, resb\n"
  },
  {
    "path": "boxmot/trackers/deepocsort/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/deepocsort/deepocsort.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import deque\nfrom pathlib import Path\n\nimport numpy as np\nimport torch\n\nfrom boxmot.motion.cmc import get_cmc_method\nfrom boxmot.motion.kalman_filters.xysr import KalmanFilterXYSR\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.utils.association import associate, linear_assignment\nfrom boxmot.utils.ops import xyxy2xysr\n\n\ndef k_previous_obs(observations, cur_age, k):\n    if len(observations) == 0:\n        return [-1, -1, -1, -1, -1]\n    for i in range(k):\n        dt = k - i\n        if cur_age - dt in observations:\n            return observations[cur_age - dt]\n    max_age = max(observations.keys())\n    return observations[max_age]\n\n\ndef convert_x_to_bbox(x, score=None):\n    \"\"\"\n    Takes a bounding box in the centre form [x,y,s,r] and returns it in the form\n      [x1,y1,x2,y2] where x1,y1 is the top left and x2,y2 is the bottom right\n    \"\"\"\n    w = np.sqrt(x[2] * x[3])\n    h = x[2] / w\n    if score is None:\n        return np.array([x[0] - w / 2.0, x[1] - h / 2.0,\n                         x[0] + w / 2.0, x[1] + h / 2.0]).reshape((1, 4))\n    return np.array([x[0] - w / 2.0, x[1] - h / 2.0,\n                     x[0] + w / 2.0, x[1] + h / 2.0, score]\n        ).reshape((1, 5))\n\n\ndef speed_direction(bbox1, bbox2):\n    cx1, cy1 = (bbox1[0] + bbox1[2]) / 2.0, (bbox1[1] + bbox1[3]) / 2.0\n    cx2, cy2 = (bbox2[0] + bbox2[2]) / 2.0, (bbox2[1] + bbox2[3]) / 2.0\n    speed = np.array([cy2 - cy1, cx2 - cx1])\n    norm = np.sqrt((cy2 - cy1) ** 2 + (cx2 - cx1) ** 2) + 1e-6\n    return speed / norm\n\n\nclass KalmanBoxTracker:\n    \"\"\"\n    This class represents the internal state of individual tracked objects observed as bbox.\n    \"\"\"\n\n    count = 0\n\n    def __init__(\n        self,\n        det,\n        delta_t=3,\n        emb=None,\n        alpha=0,\n        max_obs=50,\n        Q_xy_scaling=0.01,\n        Q_s_scaling=0.0001,\n    ):\n        \"\"\"\n        Initialises a tracker using initial bounding box.\n\n        \"\"\"\n        # define constant velocity model\n        self.max_obs = max_obs\n        bbox = det[0:5]\n        self.conf = det[4]\n        self.cls = det[5]\n        self.det_ind = det[6]\n\n        self.Q_xy_scaling = Q_xy_scaling\n        self.Q_s_scaling = Q_s_scaling\n\n        self.kf = KalmanFilterXYSR(dim_x=7, dim_z=4)\n        self.kf.F = np.array(\n            [\n                # x  y  s  r  x' y' s'\n                [1, 0, 0, 0, 1, 0, 0],\n                [0, 1, 0, 0, 0, 1, 0],\n                [0, 0, 1, 0, 0, 0, 1],\n                [0, 0, 0, 1, 0, 0, 0],\n                [0, 0, 0, 0, 1, 0, 0],\n                [0, 0, 0, 0, 0, 1, 0],\n                [0, 0, 0, 0, 0, 0, 1],\n            ]\n        )\n        self.kf.H = np.array(\n            [\n                [1, 0, 0, 0, 0, 0, 0],\n                [0, 1, 0, 0, 0, 0, 0],\n                [0, 0, 1, 0, 0, 0, 0],\n                [0, 0, 0, 1, 0, 0, 0],\n            ]\n        )\n        self.kf.R[2:, 2:] *= 10.0\n        self.kf.P[\n            4:, 4:\n        ] *= 1000.0  # give high uncertainty to the unobservable initial velocities\n        self.kf.P *= 10.0\n        self.kf.Q[4:6, 4:6] *= self.Q_xy_scaling\n        self.kf.Q[-1, -1] *= self.Q_s_scaling\n\n        self.bbox_to_z_func = xyxy2xysr\n        self.x_to_bbox_func = convert_x_to_bbox\n\n        self.kf.x[:4] = self.bbox_to_z_func(bbox)\n\n        self.time_since_update = 0\n        self.id = KalmanBoxTracker.count\n        KalmanBoxTracker.count += 1\n        self.history = deque([], maxlen=self.max_obs)\n        self.hits = 0\n        self.hit_streak = 0\n        self.age = 0\n        \"\"\"\n        NOTE: [-1,-1,-1,-1,-1] is a compromising placeholder for non-observation status, the same for the return of\n        function k_previous_obs. It is ugly and I do not like it. But to support generate observation array in a\n        fast and unified way, which you would see below k_observations = np.array([k_previous_obs(...]]),\n        let's bear it for now.\n        \"\"\"\n        # Used for OCR\n        self.last_observation = np.array([-1, -1, -1, -1, -1])  # placeholder\n        # Used to output track after min_hits reached\n        self.features = deque([], maxlen=self.max_obs)\n        # Used for velocity\n        self.observations = dict()\n        self.velocity = None\n        self.delta_t = delta_t\n        self.history_observations = deque([], maxlen=self.max_obs)\n\n        self.emb = emb\n\n        self.frozen = False\n\n    def update(self, det):\n        \"\"\"\n        Updates the state vector with observed bbox.\n        \"\"\"\n\n        if det is not None:\n            bbox = det[0:5]\n            self.conf = det[4]\n            self.cls = det[5]\n            self.det_ind = det[6]\n            self.frozen = False\n\n            if self.last_observation.sum() >= 0:  # no previous observation\n                previous_box = None\n                for dt in range(self.delta_t, 0, -1):\n                    if self.age - dt in self.observations:\n                        previous_box = self.observations[self.age - dt]\n                        break\n                if previous_box is None:\n                    previous_box = self.last_observation\n                # Estimate the track speed direction with observations Δt steps away\n                self.velocity = speed_direction(previous_box, bbox)\n            \"\"\"\n              Insert new observations. This is a ugly way to maintain both self.observations\n              and self.history_observations. Bear it for the moment.\n            \"\"\"\n            self.last_observation = bbox\n            self.observations[self.age] = bbox\n            self.history_observations.append(bbox)\n\n            self.time_since_update = 0\n            self.hits += 1\n            self.hit_streak += 1\n\n            self.kf.update(self.bbox_to_z_func(bbox))\n        else:\n            self.kf.update(det)\n            self.frozen = True\n\n    def update_emb(self, emb, alpha=0.9):\n        self.emb = alpha * self.emb + (1 - alpha) * emb\n        self.emb /= np.linalg.norm(self.emb)\n\n    def get_emb(self):\n        return self.emb\n\n    def apply_affine_correction(self, affine):\n        m = affine[:, :2]\n        t = affine[:, 2].reshape(2, 1)\n        # For OCR\n        if self.last_observation.sum() > 0:\n            ps = self.last_observation[:4].reshape(2, 2).T\n            ps = m @ ps + t\n            self.last_observation[:4] = ps.T.reshape(-1)\n\n        # Apply to each box in the range of velocity computation\n        for dt in range(self.delta_t, -1, -1):\n            if self.age - dt in self.observations:\n                ps = self.observations[self.age - dt][:4].reshape(2, 2).T\n                ps = m @ ps + t\n                self.observations[self.age - dt][:4] = ps.T.reshape(-1)\n\n        # Also need to change kf state, but might be frozen\n        self.kf.apply_affine_correction(m, t)\n\n    def predict(self):\n        \"\"\"\n        Advances the state vector and returns the predicted bounding box estimate.\n        \"\"\"\n        # Don't allow negative bounding boxes\n        if (self.kf.x[6] + self.kf.x[2]) <= 0:\n            self.kf.x[6] *= 0.0\n        Q = None\n\n        self.kf.predict(Q=Q)\n        self.age += 1\n        if self.time_since_update > 0:\n            self.hit_streak = 0\n        self.time_since_update += 1\n        self.history.append(self.x_to_bbox_func(self.kf.x))\n        return self.history[-1]\n\n    def get_state(self):\n        \"\"\"\n        Returns the current bounding box estimate.\n        \"\"\"\n        return self.x_to_bbox_func(self.kf.x)\n\n    def mahalanobis(self, bbox):\n        \"\"\"Should be run after a predict() call for accuracy.\"\"\"\n        return self.kf.md_for_measurement(self.bbox_to_z_func(bbox))\n\n\nclass DeepOcSort(BaseTracker):\n    \"\"\"\n    Initialize the DeepOcSort tracker with various parameters.\n\n    Parameters:\n    - reid_weights (Path): Path to the re-identification model weights.\n    - device (torch.device): Device to run the model on (e.g., 'cpu', 'cuda').\n    - half (bool): Whether to use half-precision (fp16) for faster inference.\n    - det_thresh (float): Detection threshold for considering detections.\n    - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n    - max_obs (int): Maximum number of historical observations stored for each track. Always greater than max_age by minimum 5.\n    - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n    - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n    - per_class (bool): Enables class-separated tracking.\n    - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True).\n    - asso_func (str): Algorithm name used for data association between detections and tracks.\n    - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes.\n    \n    DeepOcSort-specific parameters:\n    - delta_t (int): Time window size for motion estimation.\n    - inertia (float): Motion model weight, higher values favor motion consistency.\n    - w_association_emb (float): Weight for embedding association in the matching cost.\n    - alpha_fixed_emb (float): Fixed update rate for embeddings.\n    - aw_param (float): Adaptive weight parameter for cost function.\n    - embedding_off (bool): Whether to disable appearance embedding for tracking.\n    - cmc_off (bool): Whether to disable camera motion compensation.\n    - aw_off (bool): Whether to disable adaptive weights for appearance/motion balance.\n    - Q_xy_scaling (float): Scaling factor for process noise in position coordinates.\n    - Q_s_scaling (float): Scaling factor for process noise in scale coordinates.\n    \n    Attributes:\n    - frame_count (int): Counter for the frames processed.\n    - active_tracks (list): List to hold active tracks.\n    - model: ReID model for appearance feature extraction.\n    - cmc: Camera motion compensation object.\n    - kalman_filter: Kalman filter for motion estimation.\n    \"\"\"\n\n    def __init__(\n        self,\n        reid_weights: Path,\n        device: torch.device,\n        half: bool,\n        # DeepOcSort-specific parameters\n        delta_t: int = 3,\n        inertia: float = 0.2,\n        w_association_emb: float = 0.5,\n        alpha_fixed_emb: float = 0.95,\n        aw_param: float = 0.5,\n        embedding_off: bool = False,\n        cmc_off: bool = False,\n        aw_off: bool = False,\n        Q_xy_scaling: float = 0.01,\n        Q_s_scaling: float = 0.0001,\n        **kwargs  # BaseTracker parameters\n    ):\n        # Capture all init params for logging\n        init_args = {k: v for k, v in locals().items() if k not in ('self', 'kwargs')}\n        super().__init__(**init_args, _tracker_name='DeepOcSort', **kwargs)\n        \n        \"\"\"\n        Sets key parameters for SORT\n        \"\"\"\n        self.delta_t = delta_t\n        self.inertia = inertia\n        self.w_association_emb = w_association_emb\n        self.alpha_fixed_emb = alpha_fixed_emb\n        self.aw_param = aw_param\n        self.Q_xy_scaling = Q_xy_scaling\n        self.Q_s_scaling = Q_s_scaling\n        KalmanBoxTracker.count = 1\n\n        self.model = ReidAutoBackend(\n            weights=reid_weights, device=device, half=half\n        ).model\n        # \"similarity transforms using feature point extraction, optical flow, and RANSAC\"\n        self.cmc = get_cmc_method(\"sof\")()\n        self.embedding_off = embedding_off\n        self.cmc_off = cmc_off\n        self.aw_off = aw_off\n        \n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(\n        self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None\n    ) -> np.ndarray:\n        \"\"\"\n        Params:\n          dets - a numpy array of detections in the format [[x1,y1,x2,y2,score],[x1,y1,x2,y2,score],...]\n        Requires: this method must be called once for each frame even with empty detections\n        (use np.empty((0, 5)) for frames without detections).\n        Returns the a similar array, where the last column is the object ID.\n        NOTE: The number of objects returned may differ from the number of detections provided.\n        \"\"\"\n        # dets, s, c = dets.data\n        # print(dets, s, c)\n        self.check_inputs(dets, img, embs)\n\n        self.frame_count += 1\n        self.height, self.width = img.shape[:2]\n\n        scores = dets[:, 4]\n        dets = np.hstack([dets, np.arange(len(dets)).reshape(-1, 1)])\n        assert dets.shape[1] == 7\n        remain_inds = scores > self.det_thresh\n        dets = dets[remain_inds]\n\n        # appearance descriptor extraction\n        if self.embedding_off or dets.shape[0] == 0:\n            dets_embs = np.ones((dets.shape[0], 1))\n        elif embs is not None:\n            dets_embs = embs[remain_inds]\n        else:\n            # (Ndets x X) [512, 1024, 2048]\n            dets_embs = self.model.get_features(dets[:, 0:4], img)\n\n        # CMC\n        if not self.cmc_off:\n            transform = self.cmc.apply(img, dets[:, :4])\n            for trk in self.active_tracks:\n                trk.apply_affine_correction(transform)\n\n        trust = (dets[:, 4] - self.det_thresh) / (1 - self.det_thresh)\n        af = self.alpha_fixed_emb\n        # From [self.alpha_fixed_emb, 1], goes to 1 as detector is less confident\n        dets_alpha = af + (1 - af) * (1 - trust)\n\n        # get predicted locations from existing trackers.\n        trks = np.zeros((len(self.active_tracks), 5))\n        trk_embs = []\n        to_del = []\n        ret = []\n        for t, trk in enumerate(trks):\n            pos = self.active_tracks[t].predict()[0]\n            trk[:] = [pos[0], pos[1], pos[2], pos[3], 0]\n            if np.any(np.isnan(pos)):\n                to_del.append(t)\n            else:\n                trk_embs.append(self.active_tracks[t].get_emb())\n        trks = np.ma.compress_rows(np.ma.masked_invalid(trks))\n\n        if len(trk_embs) > 0:\n            trk_embs = np.vstack(trk_embs)\n        else:\n            trk_embs = np.array(trk_embs)\n\n        for t in reversed(to_del):\n            self.active_tracks.pop(t)\n\n        velocities = np.array(\n            [trk.velocity if trk.velocity is not None else np.array((0, 0)) for trk in self.active_tracks])\n        last_boxes = np.array([trk.last_observation for trk in self.active_tracks])\n        k_observations = np.array(\n            [k_previous_obs(trk.observations, trk.age, self.delta_t) for trk in self.active_tracks])\n\n        \"\"\"\n            First round of association\n        \"\"\"\n        # (M detections X N tracks, final score)\n        if self.embedding_off or dets.shape[0] == 0 or trk_embs.shape[0] == 0:\n            stage1_emb_cost = None\n        else:\n            stage1_emb_cost = dets_embs @ trk_embs.T\n        matched, unmatched_dets, unmatched_trks = associate(\n            dets[:, 0:5],\n            trks,\n            self.asso_func,\n            self.iou_threshold,\n            velocities,\n            k_observations,\n            self.inertia,\n            img.shape[1],  # w\n            img.shape[0],  # h\n            stage1_emb_cost,\n            self.w_association_emb,\n            self.aw_off,\n            self.aw_param,\n        )\n        for m in matched:\n            self.active_tracks[m[1]].update(dets[m[0], :])\n            self.active_tracks[m[1]].update_emb(dets_embs[m[0]], alpha=dets_alpha[m[0]])\n\n        \"\"\"\n            Second round of associaton by OCR\n        \"\"\"\n        if unmatched_dets.shape[0] > 0 and unmatched_trks.shape[0] > 0:\n            left_dets = dets[unmatched_dets]\n            left_dets_embs = dets_embs[unmatched_dets]\n            left_trks = last_boxes[unmatched_trks]\n            left_trks_embs = trk_embs[unmatched_trks]\n\n            iou_left = self.asso_func(left_dets, left_trks)\n            # TODO: is better without this\n            emb_cost_left = left_dets_embs @ left_trks_embs.T\n            if self.embedding_off:\n                emb_cost_left = np.zeros_like(emb_cost_left)\n            iou_left = np.array(iou_left)\n            if iou_left.max() > self.iou_threshold:\n                \"\"\"\n                NOTE: by using a lower threshold, e.g., self.iou_threshold - 0.1, you may\n                get a higher performance especially on MOT17/MOT20 datasets. But we keep it\n                uniform here for simplicity\n                \"\"\"\n                rematched_indices = linear_assignment(-iou_left)\n                to_remove_det_indices = []\n                to_remove_trk_indices = []\n                for m in rematched_indices:\n                    det_ind, trk_ind = unmatched_dets[m[0]], unmatched_trks[m[1]]\n                    if iou_left[m[0], m[1]] < self.iou_threshold:\n                        continue\n                    self.active_tracks[trk_ind].update(dets[det_ind, :])\n                    self.active_tracks[trk_ind].update_emb(\n                        dets_embs[det_ind], alpha=dets_alpha[det_ind]\n                    )\n                    to_remove_det_indices.append(det_ind)\n                    to_remove_trk_indices.append(trk_ind)\n                unmatched_dets = np.setdiff1d(\n                    unmatched_dets, np.array(to_remove_det_indices)\n                )\n                unmatched_trks = np.setdiff1d(\n                    unmatched_trks, np.array(to_remove_trk_indices)\n                )\n\n        for m in unmatched_trks:\n            self.active_tracks[m].update(None)\n\n        # create and initialise new trackers for unmatched detections\n        for i in unmatched_dets:\n            trk = KalmanBoxTracker(\n                dets[i],\n                delta_t=self.delta_t,\n                emb=dets_embs[i],\n                alpha=dets_alpha[i],\n                Q_xy_scaling=self.Q_xy_scaling,\n                Q_s_scaling=self.Q_s_scaling,\n                max_obs=self.max_obs,\n            )\n            self.active_tracks.append(trk)\n        i = len(self.active_tracks)\n        for trk in reversed(self.active_tracks):\n            if trk.last_observation.sum() < 0:\n                d = trk.get_state()[0]\n            else:\n                \"\"\"\n                this is optional to use the recent observation or the kalman filter prediction,\n                we didn't notice significant difference here\n                \"\"\"\n                d = trk.last_observation[:4]\n            if (trk.time_since_update < 1) and (\n                trk.hit_streak >= self.min_hits or self.frame_count <= self.min_hits\n            ):\n                # +1 as MOT benchmark requires positive\n                ret.append(\n                    np.concatenate(\n                        (d, [trk.id], [trk.conf], [trk.cls], [trk.det_ind])\n                    ).reshape(1, -1)\n                )\n            i -= 1\n            # remove dead tracklet\n            if trk.time_since_update > self.max_age:\n                self.active_tracks.pop(i)\n        if len(ret) > 0:\n            return np.concatenate(ret)\n        return np.array([])\n"
  },
  {
    "path": "boxmot/trackers/detection_layout.py",
    "content": "from __future__ import annotations\n\nfrom dataclasses import dataclass\n\nimport numpy as np\n\n\n@dataclass(frozen=True)\nclass DetectionLayout:\n    \"\"\"Shared indexing and shape rules for tracker detection tensors.\"\"\"\n\n    name: str\n    is_obb: bool\n    det_cols: int\n    box_cols: int\n    conf_idx: int\n    cls_idx: int\n    output_cols: int\n\n    @property\n    def box_with_conf_cols(self) -> int:\n        return self.box_cols + 1\n\n    def association_mode_name(self, base_name: str) -> str:\n        return f\"{base_name}_obb\" if self.is_obb else base_name\n\n    def empty_dets(self, dtype=np.float32) -> np.ndarray:\n        return np.empty((0, self.det_cols), dtype=dtype)\n\n    def empty_output(self, dtype=float) -> np.ndarray:\n        return np.empty((0, self.output_cols), dtype=dtype)\n\n    def boxes(self, dets: np.ndarray) -> np.ndarray:\n        if dets.size == 0:\n            return np.empty((0, self.box_cols), dtype=dets.dtype if hasattr(dets, \"dtype\") else np.float32)\n        return dets[:, : self.box_cols]\n\n    def confidences(self, dets: np.ndarray) -> np.ndarray:\n        if dets.size == 0:\n            return np.empty((0,), dtype=dets.dtype if hasattr(dets, \"dtype\") else np.float32)\n        return dets[:, self.conf_idx]\n\n    def classes(self, dets: np.ndarray) -> np.ndarray:\n        if dets.size == 0:\n            return np.empty((0,), dtype=dets.dtype if hasattr(dets, \"dtype\") else np.float32)\n        return dets[:, self.cls_idx]\n\n    def with_detection_indices(self, dets: np.ndarray) -> np.ndarray:\n        if dets.size == 0:\n            return np.empty((0, self.det_cols + 1), dtype=dets.dtype if hasattr(dets, \"dtype\") else np.float32)\n        det_inds = np.arange(len(dets), dtype=np.int32).reshape(-1, 1)\n        return np.hstack([dets, det_inds])\n\n    def validate_dets(self, dets: np.ndarray) -> None:\n        assert dets.shape[1] == self.det_cols, (\n            \"Unsupported 'dets' 2nd dimension length, valid length is \"\n            f\"{self.det_cols} {self.name}\"\n        )\n\n\nclass AxisAlignedDetections(DetectionLayout):\n    def __init__(self) -> None:\n        super().__init__(\n            name=\"(x1,y1,x2,y2,conf,cls)\",\n            is_obb=False,\n            det_cols=6,\n            box_cols=4,\n            conf_idx=4,\n            cls_idx=5,\n            output_cols=8,\n        )\n\n\nclass OrientedDetections(DetectionLayout):\n    def __init__(self) -> None:\n        super().__init__(\n            name=\"(cx,cy,w,h,angle,conf,cls)\",\n            is_obb=True,\n            det_cols=7,\n            box_cols=5,\n            conf_idx=5,\n            cls_idx=6,\n            output_cols=9,\n        )\n\n\nAABB_DETECTIONS = AxisAlignedDetections()\nOBB_DETECTIONS = OrientedDetections()\n\n\ndef get_detection_layout(is_obb: bool) -> DetectionLayout:\n    return OBB_DETECTIONS if is_obb else AABB_DETECTIONS\n\n\ndef infer_detection_layout(dets: np.ndarray) -> DetectionLayout | None:\n    if dets is None or not isinstance(dets, np.ndarray) or dets.ndim != 2:\n        return None\n    if dets.shape[1] == AABB_DETECTIONS.det_cols:\n        return AABB_DETECTIONS\n    if dets.shape[1] == OBB_DETECTIONS.det_cols:\n        return OBB_DETECTIONS\n    return None"
  },
  {
    "path": "boxmot/trackers/hybridsort/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/hybridsort/association.py",
    "content": "\nimport numpy as np\n\n\ndef intersection_batch(bboxes1, bboxes2):\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0., xx2 - xx1)\n    h = np.maximum(0., yy2 - yy1)\n    intersections = w * h\n    return intersections\n\ndef box_area(bbox):\n    area = (bbox[2] - bbox[0]) * (bbox[3] - bbox[1])\n    return area\n\ndef iou_batch(bboxes1, bboxes2):\n    \"\"\"\n    From SORT: Computes IOU between two bboxes in the form [x1,y1,x2,y2]\n    \"\"\"\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n    \n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0., xx2 - xx1)\n    h = np.maximum(0., yy2 - yy1)\n    wh = w * h\n    o = wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])                                      \n        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh)                                              \n    return(o)\n\n\ndef cal_score_dif_batch(bboxes1, bboxes2):\n    \"\"\"\n    From SORT: Computes IOU between two bboxes in the form [x1,y1,x2,y2]\n    \"\"\"\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    score2 = bboxes2[..., 4]\n    score1 = bboxes1[..., 4]\n\n    return (abs(score2 - score1))\n\ndef cal_score_dif_batch_two_score(bboxes1, bboxes2):\n    \"\"\"\n    From SORT: Computes IOU between two bboxes in the form [x1,y1,x2,y2]\n    \"\"\"\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    score2 = bboxes2[..., 5]\n    score1 = bboxes1[..., 4]\n\n    return (abs(score2 - score1))\n\ndef hmiou(bboxes1, bboxes2):\n    \"\"\"\n    Height_Modulated_IoU\n    \"\"\"\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    yy11 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    yy12 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n\n    yy21 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n    yy22 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n    o = (yy12 - yy11) / (yy22 - yy21)\n\n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0., xx2 - xx1)\n    h = np.maximum(0., yy2 - yy1)\n    wh = w * h\n    o *= wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh)\n    return (o)\n\ndef giou_batch(bboxes1, bboxes2):\n    \"\"\"\n    :param bbox_p: predict of bbox(N,4)(x1,y1,x2,y2)\n    :param bbox_g: groundtruth of bbox(N,4)(x1,y1,x2,y2)\n    :return:\n    \"\"\"\n    # for details should go to https://arxiv.org/pdf/1902.09630.pdf\n    # ensure predict's bbox form\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0., xx2 - xx1)\n    h = np.maximum(0., yy2 - yy1)\n    wh = w * h\n    iou = wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh)  \n\n    xxc1 = np.minimum(bboxes1[..., 0], bboxes2[..., 0])\n    yyc1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n    xxc2 = np.maximum(bboxes1[..., 2], bboxes2[..., 2])\n    yyc2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n    wc = xxc2 - xxc1 \n    hc = yyc2 - yyc1 \n    assert((wc > 0).all() and (hc > 0).all())\n    area_enclose = wc * hc \n    giou = iou - (area_enclose - wh) / area_enclose\n    giou = (giou + 1.)/2.0 # resize from (-1,1) to (0,1)\n    return giou\n\ndef giou_batch_true(bboxes1, bboxes2):\n    \"\"\"\n    :param bbox_p: predict of bbox(N,4)(x1,y1,x2,y2)\n    :param bbox_g: groundtruth of bbox(N,4)(x1,y1,x2,y2)\n    :return:\n    \"\"\"\n    # for details should go to https://arxiv.org/pdf/1902.09630.pdf\n    # ensure predict's bbox form\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0., xx2 - xx1)\n    h = np.maximum(0., yy2 - yy1)\n    wh = w * h\n    union = ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh)\n    iou = wh / union\n\n    xxc1 = np.minimum(bboxes1[..., 0], bboxes2[..., 0])\n    yyc1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n    xxc2 = np.maximum(bboxes1[..., 2], bboxes2[..., 2])\n    yyc2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n    wc = xxc2 - xxc1\n    hc = yyc2 - yyc1\n    assert((wc > 0).all() and (hc > 0).all())\n    area_enclose = wc * hc\n    giou = iou - (area_enclose - union) / area_enclose\n    giou = (giou + 1.)/2.0 # resize from (-1,1) to (0,1)\n    return giou\n\ndef diou_batch(bboxes1, bboxes2):\n    \"\"\"\n    :param bbox_p: predict of bbox(N,4)(x1,y1,x2,y2)\n    :param bbox_g: groundtruth of bbox(N,4)(x1,y1,x2,y2)\n    :return:\n    \"\"\"\n    # for details should go to https://arxiv.org/pdf/1902.09630.pdf\n    # ensure predict's bbox form\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    # calculate the intersection box\n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0., xx2 - xx1)\n    h = np.maximum(0., yy2 - yy1)\n    wh = w * h\n    iou = wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])                                      \n        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh) \n\n    centerx1 = (bboxes1[..., 0] + bboxes1[..., 2]) / 2.0\n    centery1 = (bboxes1[..., 1] + bboxes1[..., 3]) / 2.0\n    centerx2 = (bboxes2[..., 0] + bboxes2[..., 2]) / 2.0\n    centery2 = (bboxes2[..., 1] + bboxes2[..., 3]) / 2.0\n\n    inner_diag = (centerx1 - centerx2) ** 2 + (centery1 - centery2) ** 2\n\n    xxc1 = np.minimum(bboxes1[..., 0], bboxes2[..., 0])\n    yyc1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n    xxc2 = np.maximum(bboxes1[..., 2], bboxes2[..., 2])\n    yyc2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n\n    outer_diag = (xxc2 - xxc1) ** 2 + (yyc2 - yyc1) ** 2\n    diou = iou - inner_diag / outer_diag\n\n    return (diou + 1) / 2.0 # resize from (-1,1) to (0,1)\n\ndef ciou_batch(bboxes1, bboxes2):\n    \"\"\"\n    :param bbox_p: predict of bbox(N,4)(x1,y1,x2,y2)\n    :param bbox_g: groundtruth of bbox(N,4)(x1,y1,x2,y2)\n    :return:\n    \"\"\"\n    # for details should go to https://arxiv.org/pdf/1902.09630.pdf\n    # ensure predict's bbox form\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    # calculate the intersection box\n    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n    w = np.maximum(0., xx2 - xx1)\n    h = np.maximum(0., yy2 - yy1)\n    wh = w * h\n    iou = wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])                                      \n        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh) \n\n    centerx1 = (bboxes1[..., 0] + bboxes1[..., 2]) / 2.0\n    centery1 = (bboxes1[..., 1] + bboxes1[..., 3]) / 2.0\n    centerx2 = (bboxes2[..., 0] + bboxes2[..., 2]) / 2.0\n    centery2 = (bboxes2[..., 1] + bboxes2[..., 3]) / 2.0\n\n    inner_diag = (centerx1 - centerx2) ** 2 + (centery1 - centery2) ** 2\n\n    xxc1 = np.minimum(bboxes1[..., 0], bboxes2[..., 0])\n    yyc1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n    xxc2 = np.maximum(bboxes1[..., 2], bboxes2[..., 2])\n    yyc2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n\n    outer_diag = (xxc2 - xxc1) ** 2 + (yyc2 - yyc1) ** 2\n    \n    w1 = bboxes1[..., 2] - bboxes1[..., 0]\n    h1 = bboxes1[..., 3] - bboxes1[..., 1]\n    w2 = bboxes2[..., 2] - bboxes2[..., 0]\n    h2 = bboxes2[..., 3] - bboxes2[..., 1]\n\n    # prevent dividing over zero. add one pixel shift\n    h2 = h2 + 1.\n    h1 = h1 + 1.\n    arctan = np.arctan(w2/h2) - np.arctan(w1/h1)\n    v = (4 / (np.pi ** 2)) * (arctan ** 2)\n    S = 1 - iou \n    alpha = v / (S+v)\n    ciou = iou - inner_diag / outer_diag - alpha * v\n    \n    return (ciou + 1) / 2.0 # resize from (-1,1) to (0,1)\n\n\ndef ct_dist(bboxes1, bboxes2):\n    \"\"\"\n        Measure the center distance between two sets of bounding boxes,\n        this is a coarse implementation, we don't recommend using it only\n        for association, which can be unstable and sensitive to frame rate\n        and object speed.\n    \"\"\"\n    bboxes2 = np.expand_dims(bboxes2, 0)\n    bboxes1 = np.expand_dims(bboxes1, 1)\n\n    centerx1 = (bboxes1[..., 0] + bboxes1[..., 2]) / 2.0\n    centery1 = (bboxes1[..., 1] + bboxes1[..., 3]) / 2.0\n    centerx2 = (bboxes2[..., 0] + bboxes2[..., 2]) / 2.0\n    centery2 = (bboxes2[..., 1] + bboxes2[..., 3]) / 2.0\n\n    ct_dist2 = (centerx1 - centerx2) ** 2 + (centery1 - centery2) ** 2\n\n    ct_dist = np.sqrt(ct_dist2)\n\n    # The linear rescaling is a naive version and needs more study\n    ct_dist = ct_dist / ct_dist.max()\n    return ct_dist.max() - ct_dist # resize to (0,1)\n\n\ndef speed_direction_batch(dets, tracks):\n    \"\"\"\n    batch formulation of function 'speed_direction', compute normalized speed from batch bboxes\n    @param dets:\n    @param tracks:\n    @return: normalized speed in batch\n    \"\"\"\n    tracks = tracks[..., np.newaxis]\n    CX1, CY1 = (dets[:,0] + dets[:,2])/2.0, (dets[:,1]+dets[:,3])/2.0\n    CX2, CY2 = (tracks[:,0] + tracks[:,2]) /2.0, (tracks[:,1]+tracks[:,3])/2.0\n    dx = CX1 - CX2 \n    dy = CY1 - CY2 \n    norm = np.sqrt(dx**2 + dy**2) + 1e-6\n    dx = dx / norm \n    dy = dy / norm\n    return dy, dx # size: num_track x num_det\n\n\ndef linear_assignment(cost_matrix, thresh=0.):\n    try:        # [hgx0411] goes here!\n        import lap\n        if thresh != 0:\n            _, x, y = lap.lapjv(cost_matrix, extend_cost=True, cost_limit=thresh)\n        else:\n            _, x, y = lap.lapjv(cost_matrix, extend_cost=True)\n        return np.array([[y[i], i] for i in x if i >= 0])\n    except ImportError:\n        from scipy.optimize import linear_sum_assignment\n        x, y = linear_sum_assignment(cost_matrix)\n        return np.array(list(zip(x, y)))\n\n\ndef associate_detections_to_trackers(detections,trackers,iou_threshold = 0.3):\n    \"\"\"\n    Assigns detections to tracked object (both represented as bounding boxes)\n    Returns 3 lists of matches, unmatched_detections and unmatched_trackers\n    \"\"\"\n    if(len(trackers)==0):\n        return np.empty((0,2),dtype=int), np.arange(len(detections)), np.empty((0,5),dtype=int)\n\n    iou_matrix = iou_batch(detections, trackers)\n\n    if min(iou_matrix.shape) > 0:\n        a = (iou_matrix > iou_threshold).astype(np.int32)\n        if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n            matched_indices = np.stack(np.where(a), axis=1)\n        else:\n            matched_indices = linear_assignment(-iou_matrix)\n    else:\n        matched_indices = np.empty(shape=(0,2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if(d not in matched_indices[:,0]):\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if(t not in matched_indices[:,1]):\n            unmatched_trackers.append(t)\n\n    #filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        if(iou_matrix[m[0], m[1]]<iou_threshold):\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n        else:\n            matches.append(m.reshape(1,2))\n    if(len(matches)==0):\n        matches = np.empty((0,2),dtype=int)\n    else:\n        matches = np.concatenate(matches,axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n\n\ndef associate(detections, trackers, iou_threshold, velocities, previous_obs, vdc_weight):    \n    if(len(trackers)==0):\n        return np.empty((0,2),dtype=int), np.arange(len(detections)), np.empty((0,5),dtype=int)\n\n    Y, X = speed_direction_batch(detections, previous_obs)\n    inertia_Y, inertia_X = velocities[:,0], velocities[:,1]\n    inertia_Y = np.repeat(inertia_Y[:, np.newaxis], Y.shape[1], axis=1)\n    inertia_X = np.repeat(inertia_X[:, np.newaxis], X.shape[1], axis=1)\n    diff_angle_cos = inertia_X * X + inertia_Y * Y\n    diff_angle_cos = np.clip(diff_angle_cos, a_min=-1, a_max=1)\n    diff_angle = np.arccos(diff_angle_cos)\n    diff_angle = (np.pi /2.0 - np.abs(diff_angle)) / np.pi\n\n    valid_mask = np.ones(previous_obs.shape[0])\n    valid_mask[np.where(previous_obs[:,4]<0)] = 0\n    \n    iou_matrix = iou_batch(detections, trackers)\n    scores = np.repeat(detections[:,-1][:, np.newaxis], trackers.shape[0], axis=1)\n    # iou_matrix = iou_matrix * scores # a trick sometiems works, we don't encourage this\n    valid_mask = np.repeat(valid_mask[:, np.newaxis], X.shape[1], axis=1)\n\n    angle_diff_cost = (valid_mask * diff_angle) * vdc_weight\n    angle_diff_cost = angle_diff_cost.T\n    angle_diff_cost = angle_diff_cost * scores\n\n    if min(iou_matrix.shape) > 0:\n        a = (iou_matrix > iou_threshold).astype(np.int32)\n        if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n            matched_indices = np.stack(np.where(a), axis=1)\n        else:\n            matched_indices = linear_assignment(-(iou_matrix+angle_diff_cost))\n    else:\n        matched_indices = np.empty(shape=(0,2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if(d not in matched_indices[:,0]):\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if(t not in matched_indices[:,1]):\n            unmatched_trackers.append(t)\n\n    # filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        if(iou_matrix[m[0], m[1]]<iou_threshold):\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n        else:\n            matches.append(m.reshape(1,2))\n    if(len(matches)==0):\n        matches = np.empty((0,2),dtype=int)\n    else:\n        matches = np.concatenate(matches,axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n\n\ndef cost_vel(Y, X, trackers, velocities, detections, previous_obs, vdc_weight):\n    # Y, X = speed_direction_batch(detections, previous_obs)\n    inertia_Y, inertia_X = velocities[:, 0], velocities[:, 1]\n    inertia_Y = np.repeat(inertia_Y[:, np.newaxis], Y.shape[1], axis=1)\n    inertia_X = np.repeat(inertia_X[:, np.newaxis], X.shape[1], axis=1)\n    diff_angle_cos = inertia_X * X + inertia_Y * Y\n    diff_angle_cos = np.clip(diff_angle_cos, a_min=-1, a_max=1)\n    diff_angle = np.arccos(diff_angle_cos)\n    diff_angle = (np.pi / 2.0 - np.abs(diff_angle)) / np.pi\n\n    valid_mask = np.ones(previous_obs.shape[0])\n    valid_mask[np.where(previous_obs[:, 4] < 0)] = 0\n\n    # iou_matrix = iou_batch(detections, trackers)\n    scores = np.repeat(detections[:, -1][:, np.newaxis], trackers.shape[0], axis=1)\n    # iou_matrix = iou_matrix * scores # a trick sometiems works, we don't encourage this\n    valid_mask = np.repeat(valid_mask[:, np.newaxis], X.shape[1], axis=1)\n\n    angle_diff_cost = (valid_mask * diff_angle) * vdc_weight\n    angle_diff_cost = angle_diff_cost.T\n    angle_diff_cost = angle_diff_cost * scores\n    return angle_diff_cost\n\ndef speed_direction_batch_lt(dets, tracks):\n    tracks = tracks[..., np.newaxis]\n    CX1, CY1 = dets[:,0], dets[:,1]\n    CX2, CY2 = tracks[:,0], tracks[:,1]\n    dx = CX1 - CX2\n    dy = CY1 - CY2\n    norm = np.sqrt(dx**2 + dy**2) + 1e-6\n    dx = dx / norm\n    dy = dy / norm\n    return dy, dx # size: num_track x num_det\n\ndef speed_direction_batch_rt(dets, tracks):\n    tracks = tracks[..., np.newaxis]\n    CX1, CY1 = dets[:,0], dets[:,3]\n    CX2, CY2 = tracks[:,0], tracks[:,3]\n    dx = CX1 - CX2\n    dy = CY1 - CY2\n    norm = np.sqrt(dx**2 + dy**2) + 1e-6\n    dx = dx / norm\n    dy = dy / norm\n    return dy, dx # size: num_track x num_det\n\ndef speed_direction_batch_lb(dets, tracks):\n    tracks = tracks[..., np.newaxis]\n    CX1, CY1 = dets[:,2], dets[:,1]\n    CX2, CY2 = tracks[:,2], tracks[:,1]\n    dx = CX1 - CX2\n    dy = CY1 - CY2\n    norm = np.sqrt(dx**2 + dy**2) + 1e-6\n    dx = dx / norm\n    dy = dy / norm\n    return dy, dx # size: num_track x num_det\n\ndef speed_direction_batch_rb(dets, tracks):\n    tracks = tracks[..., np.newaxis]\n    CX1, CY1 = dets[:,2], dets[:,3]\n    CX2, CY2 = tracks[:,2], tracks[:,3]\n    dx = CX1 - CX2\n    dy = CY1 - CY2\n    norm = np.sqrt(dx**2 + dy**2) + 1e-6\n    dx = dx / norm\n    dy = dy / norm\n    return dy, dx # size: num_track x num_det\n\ndef associate_4_points(detections, trackers, iou_threshold, lt, rt, lb, rb, previous_obs, vdc_weight, iou_type=None, args=None):\n    if (len(trackers) == 0):\n        return np.empty((0, 2), dtype=int), np.arange(len(detections)), np.empty((0, 5), dtype=int)\n\n    Y1, X1 = speed_direction_batch_lt(detections, previous_obs)\n    Y2, X2 = speed_direction_batch_rt(detections, previous_obs)\n    Y3, X3 = speed_direction_batch_lb(detections, previous_obs)\n    Y4, X4 = speed_direction_batch_rb(detections, previous_obs)\n    YC, XC = speed_direction_batch(detections, previous_obs)\n    cost_lt = cost_vel(Y1, X1, trackers, lt, detections, previous_obs, vdc_weight)\n    cost_rt = cost_vel(Y2, X2, trackers, rt, detections, previous_obs, vdc_weight)\n    cost_lb = cost_vel(Y3, X3, trackers, lb, detections, previous_obs, vdc_weight)\n    cost_rb = cost_vel(Y4, X4, trackers, rb, detections, previous_obs, vdc_weight)\n\n    iou_matrix = iou_type(detections, trackers)\n    angle_diff_cost = cost_lt + cost_rt + cost_lb + cost_rb\n\n    if min(iou_matrix.shape) > 0:\n        a = (iou_matrix > iou_threshold).astype(np.int32)\n        if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n            matched_indices = np.stack(np.where(a), axis=1)\n        else:\n            matched_indices = linear_assignment(-(iou_matrix + angle_diff_cost))\n    else:\n        matched_indices = np.empty(shape=(0, 2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if (d not in matched_indices[:, 0]):\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if (t not in matched_indices[:, 1]):\n            unmatched_trackers.append(t)\n\n    # filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        if (iou_matrix[m[0], m[1]] < iou_threshold):\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n        else:\n            matches.append(m.reshape(1, 2))\n    if (len(matches) == 0):\n        matches = np.empty((0, 2), dtype=int)\n    else:\n        matches = np.concatenate(matches, axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n\ndef associate_4_points_with_score(detections, trackers, iou_threshold, lt, rt, lb, rb, previous_obs, vdc_weight, iou_type=None, args=None):\n    if (len(trackers) == 0):\n        return np.empty((0, 2), dtype=int), np.arange(len(detections)), np.empty((0, 5), dtype=int)\n\n    Y1, X1 = speed_direction_batch_lt(detections, previous_obs)\n    Y2, X2 = speed_direction_batch_rt(detections, previous_obs)\n    Y3, X3 = speed_direction_batch_lb(detections, previous_obs)\n    Y4, X4 = speed_direction_batch_rb(detections, previous_obs)\n    cost_lt = cost_vel(Y1, X1, trackers, lt, detections, previous_obs, vdc_weight)\n    cost_rt = cost_vel(Y2, X2, trackers, rt, detections, previous_obs, vdc_weight)\n    cost_lb = cost_vel(Y3, X3, trackers, lb, detections, previous_obs, vdc_weight)\n    cost_rb = cost_vel(Y4, X4, trackers, rb, detections, previous_obs, vdc_weight)\n    iou_matrix = iou_type(detections, trackers)\n    score_dif = cal_score_dif_batch(detections, trackers)\n\n    angle_diff_cost = cost_lt + cost_rt + cost_lb + cost_rb\n\n    # TCM\n    angle_diff_cost -= score_dif * 1.0 # args.TCM_first_step_weight\n\n    if min(iou_matrix.shape) > 0:\n        a = (iou_matrix > iou_threshold).astype(np.int32)\n        if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n            matched_indices = np.stack(np.where(a), axis=1)\n        else:\n            matched_indices = linear_assignment(-(iou_matrix + angle_diff_cost))\n    else:\n        matched_indices = np.empty(shape=(0, 2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if (d not in matched_indices[:, 0]):\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if (t not in matched_indices[:, 1]):\n            unmatched_trackers.append(t)\n\n    # filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        if (iou_matrix[m[0], m[1]] < iou_threshold):\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n        else:\n            matches.append(m.reshape(1, 2))\n    if (len(matches) == 0):\n        matches = np.empty((0, 2), dtype=int)\n    else:\n        matches = np.concatenate(matches, axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n\ndef associate_4_points_with_score_with_reid(detections, trackers, iou_threshold, lt, rt, lb, rb, previous_obs, vdc_weight,\n                                            iou_type=None, args=None,emb_cost=None, weights=(1.0, 0), thresh=0.8,\n                                            long_emb_dists=None, with_longterm_reid=False,\n                                            longterm_reid_weight=0.0, with_longterm_reid_correction=False,\n                                            longterm_reid_correction_thresh=0.0, dataset=\"dancetrack\"):\n    if (len(trackers) == 0):\n        return np.empty((0, 2), dtype=int), np.arange(len(detections)), np.empty((0, 5), dtype=int)\n\n    Y1, X1 = speed_direction_batch_lt(detections, previous_obs)\n    Y2, X2 = speed_direction_batch_rt(detections, previous_obs)\n    Y3, X3 = speed_direction_batch_lb(detections, previous_obs)\n    Y4, X4 = speed_direction_batch_rb(detections, previous_obs)\n    cost_lt = cost_vel(Y1, X1, trackers, lt, detections, previous_obs, vdc_weight)\n    cost_rt = cost_vel(Y2, X2, trackers, rt, detections, previous_obs, vdc_weight)\n    cost_lb = cost_vel(Y3, X3, trackers, lb, detections, previous_obs, vdc_weight)\n    cost_rb = cost_vel(Y4, X4, trackers, rb, detections, previous_obs, vdc_weight)\n    iou_matrix = iou_type(detections, trackers)\n    score_dif = cal_score_dif_batch(detections, trackers)\n\n    angle_diff_cost = cost_lt + cost_rt + cost_lb + cost_rb\n\n    # TCM\n    angle_diff_cost -= score_dif * 1.0 # args.TCM_first_step_weight\n\n    if min(iou_matrix.shape) > 0:\n        if emb_cost is None:\n            a = (iou_matrix > iou_threshold).astype(np.int32)\n            if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n                matched_indices = np.stack(np.where(a), axis=1)\n            else:\n                matched_indices = linear_assignment(-(iou_matrix + angle_diff_cost))\n        else:\n            if not with_longterm_reid:\n                matched_indices = linear_assignment(weights[0] * (-(iou_matrix + angle_diff_cost)) + weights[1] * emb_cost) # , thresh=thresh\n            else:   # long-term reid feats\n                matched_indices = linear_assignment(weights[0] * (-(iou_matrix + angle_diff_cost)) +\n                                                    weights[1] * emb_cost + longterm_reid_weight * long_emb_dists)  # , thresh=thresh\n\n        if matched_indices.size == 0:\n            matched_indices = np.empty(shape=(0, 2))\n    else:\n        matched_indices = np.empty(shape=(0, 2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if (d not in matched_indices[:, 0]):\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if (t not in matched_indices[:, 1]):\n            unmatched_trackers.append(t)\n\n    # filter out matched with low IOU (and long-term ReID feats)\n    matches = []\n    # iou_matrix_thre = iou_matrix if dataset == \"dancetrack\" else iou_matrix - score_dif\n    iou_matrix_thre = iou_matrix - score_dif\n    if with_longterm_reid_correction:\n        for m in matched_indices:\n            if (emb_cost[m[0], m[1]] > longterm_reid_correction_thresh) and (iou_matrix_thre[m[0], m[1]] < iou_threshold):\n                #print(\"correction:\", emb_cost[m[0], m[1]])\n                unmatched_detections.append(m[0])\n                unmatched_trackers.append(m[1])\n            else:\n                matches.append(m.reshape(1, 2))\n    else:\n        for m in matched_indices:\n            if (iou_matrix_thre[m[0], m[1]] < iou_threshold):\n                unmatched_detections.append(m[0])\n                unmatched_trackers.append(m[1])\n            else:\n                matches.append(m.reshape(1, 2))\n\n    if (len(matches) == 0):\n        matches = np.empty((0, 2), dtype=int)\n    else:\n        matches = np.concatenate(matches, axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n\n\ndef associate_kitti(detections, trackers, det_cates, iou_threshold, \n        velocities, previous_obs, vdc_weight):\n    if(len(trackers)==0):\n        return np.empty((0,2),dtype=int), np.arange(len(detections)), np.empty((0,5),dtype=int)\n\n    \"\"\"\n        Cost from the velocity direction consistency\n    \"\"\"\n    Y, X = speed_direction_batch(detections, previous_obs)\n    inertia_Y, inertia_X = velocities[:,0], velocities[:,1]\n    inertia_Y = np.repeat(inertia_Y[:, np.newaxis], Y.shape[1], axis=1)\n    inertia_X = np.repeat(inertia_X[:, np.newaxis], X.shape[1], axis=1)\n    diff_angle_cos = inertia_X * X + inertia_Y * Y\n    diff_angle_cos = np.clip(diff_angle_cos, a_min=-1, a_max=1)\n    diff_angle = np.arccos(diff_angle_cos)\n    diff_angle = (np.pi /2.0 - np.abs(diff_angle)) / np.pi\n\n    valid_mask = np.ones(previous_obs.shape[0])\n    valid_mask[np.where(previous_obs[:,4]<0)]=0  \n    valid_mask = np.repeat(valid_mask[:, np.newaxis], X.shape[1], axis=1)\n\n    scores = np.repeat(detections[:,-1][:, np.newaxis], trackers.shape[0], axis=1)\n    angle_diff_cost = (valid_mask * diff_angle) * vdc_weight\n    angle_diff_cost = angle_diff_cost.T\n    angle_diff_cost = angle_diff_cost * scores\n\n    \"\"\"\n        Cost from IoU\n    \"\"\"\n    iou_matrix = iou_batch(detections, trackers)\n    \n\n    \"\"\"\n        With multiple categories, generate the cost for catgory mismatch\n    \"\"\"\n    num_dets = detections.shape[0]\n    num_trk = trackers.shape[0]\n    cate_matrix = np.zeros((num_dets, num_trk))\n    for i in range(num_dets):\n            for j in range(num_trk):\n                if det_cates[i] != trackers[j, 4]:\n                        cate_matrix[i][j] = -1e6\n    \n    cost_matrix = - iou_matrix -angle_diff_cost - cate_matrix\n\n    if min(iou_matrix.shape) > 0:\n        a = (iou_matrix > iou_threshold).astype(np.int32)\n        if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n            matched_indices = np.stack(np.where(a), axis=1)\n        else:\n            matched_indices = linear_assignment(cost_matrix)\n    else:\n        matched_indices = np.empty(shape=(0,2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if(d not in matched_indices[:,0]):\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if(t not in matched_indices[:,1]):\n            unmatched_trackers.append(t)\n\n    #filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        if(iou_matrix[m[0], m[1]]<iou_threshold):\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n        else:\n            matches.append(m.reshape(1,2))\n    if(len(matches)==0):\n        matches = np.empty((0,2),dtype=int)\n    else:\n        matches = np.concatenate(matches,axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n\n# compute embedding distance and gating, borrowed and modified from FairMOT\nfrom scipy.spatial.distance import cdist\n\n\ndef embedding_distance(tracks_feat, detections_feat, metric='cosine'):\n    \"\"\"\n    :param tracks: list[KalmanBoxTracker]\n    :param detections: list[KalmanBoxTracker]\n    :param metric:\n    :return: cost_matrix np.ndarray\n    \"\"\"\n\n    cost_matrix = np.zeros((len(tracks_feat), len(detections_feat)), dtype=float)\n    if cost_matrix.size == 0:\n        return cost_matrix\n    # det_features = np.asarray([track.curr_feat for track in detections], dtype=np.float)    # [detection_num, emd_dim]\n    # #for i, track in enumerate(tracks):\n    #     #cost_matrix[i, :] = np.maximum(0.0, cdist(track.smooth_feat.reshape(1,-1), det_features, metric))\n    # track_features = np.asarray([track.smooth_feat for track in tracks], dtype=np.float)    # [track_num, emd_dim]\n    cost_matrix = np.maximum(0.0, cdist(tracks_feat, detections_feat, metric))  # Nomalized features, metric: cosine, [track_num, detection_num]\n    return cost_matrix\n\nchi2inv95 = {\n    1: 3.8415,\n    2: 5.9915,\n    3: 7.8147,\n    4: 9.4877,\n    5: 11.070,\n    6: 12.592,\n    7: 14.067,\n    8: 15.507,\n    9: 16.919}\n\n# [hgx0411] compute embedding distance and gating, borrowed and modified from FairMOT\ndef fuse_motion(cost_matrix, tracks, detections, only_position=False, lambda_=0.98):\n    if cost_matrix.size == 0:\n        return cost_matrix\n    gating_dim = 2 if only_position else 4\n    gating_threshold = chi2inv95[gating_dim]\n    for row, track in enumerate(tracks):\n        gating_distance = track.kf.gating_distance(detections, only_position, metric='maha')\n        cost_matrix[row, gating_distance > gating_threshold] = np.inf\n        cost_matrix[row] = lambda_ * cost_matrix[row] + (1 - lambda_) * gating_distance\n    return cost_matrix\n\n# [hgx0411] compute embedding distance and gating, borrowed and modified from FairMOT\nimport lap\n\n\ndef linear_assignment_appearance(cost_matrix, thresh):\n    if cost_matrix.size == 0:\n        return np.empty((0, 2), dtype=int), tuple(range(cost_matrix.shape[0])), tuple(range(cost_matrix.shape[1]))\n    matches, unmatched_a, unmatched_b = [], [], []\n    cost, x, y = lap.lapjv(cost_matrix, extend_cost=True, cost_limit=thresh)\n    for ix, mx in enumerate(x):\n        if mx >= 0:\n            matches.append([ix, mx])\n    unmatched_a = np.where(x < 0)[0]\n    unmatched_b = np.where(y < 0)[0]\n    matches = np.asarray(matches)\n    return matches, unmatched_a, unmatched_b\n\ndef fuse_score(cost_matrix, det_scores):\n    if cost_matrix.size == 0:\n        return cost_matrix\n    iou_sim = - cost_matrix\n    det_scores = np.expand_dims(det_scores, axis=1).repeat(cost_matrix.shape[1], axis=1)\n    fuse_sim = iou_sim * det_scores\n    fuse_cost = - fuse_sim\n    return fuse_cost"
  },
  {
    "path": "boxmot/trackers/hybridsort/hybridsort.py",
    "content": "# Hybrid-SORT-ReID with ECC + ReID (explicit config, BaseTracker-style)\n# - Assumes detection input is M x [x1, y1, x2, y2, conf, cls]\n# - ECC via get_cmc_method(...).apply(img, dets)\n# - ReID via ReidAutoBackend(weights, device, half).model.get_features(...)\n# - update(dets, img, embs=None) signature compatible with BoxMOT trackers\n# - Emits rows: [x1,y1,x2,y2, track_id, conf, cls, det_ind]\n# - Safe with COCO 80 classes; preserves det_ind; guards out-of-range indices\n\nfrom collections import deque\nfrom pathlib import Path\nfrom typing import List, Optional, Union\n\nimport numpy as np\nimport torch\n\nfrom boxmot.motion.cmc import get_cmc_method\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.trackers.basetracker import BaseTracker\n# Keep your original association functions:\nfrom boxmot.trackers.hybridsort.association import (\n    associate_4_points_with_score, associate_4_points_with_score_with_reid,\n    cal_score_dif_batch_two_score, ciou_batch, ct_dist, diou_batch,\n    embedding_distance, giou_batch, hmiou, iou_batch, linear_assignment)\n\n\ndef k_previous_obs(observations, cur_age, k):\n    if len(observations) == 0:\n        return [-1, -1, -1, -1, -1]\n    for i in range(k):\n        dt = k - i\n        if cur_age - dt in observations:\n            return observations[cur_age - dt]\n    max_age = max(observations.keys())\n    return observations[max_age]\n\n\ndef convert_bbox_to_z(bbox):\n    # [x1,y1,x2,y2,score] -> [x,y,s,score,r] or [x,y,s,r]\n    w = bbox[2] - bbox[0]\n    h = bbox[3] - bbox[1]\n    x = bbox[0] + w / 2.0\n    y = bbox[1] + h / 2.0\n    s = w * h\n    r = w / float(h + 1e-6)\n    score = bbox[4]\n    if score:\n        return np.array([x, y, s, score, r]).reshape((5, 1))\n    else:\n        return np.array([x, y, s, r]).reshape((4, 1))\n\n\ndef convert_x_to_bbox(x, score=None):\n    # [x,y,s,r, ...] -> [x1,y1,x2,y2,(score_from_state)]\n    w = np.sqrt(x[2] * x[4])\n    h = x[2] / w\n    score_val = x[3]\n    if score is None:\n        return np.array([x[0] - w / 2.0, x[1] - h / 2.0, x[0] + w / 2.0, x[1] + h / 2.0]).reshape((1, 4))\n    else:\n        return np.array([x[0] - w / 2.0, x[1] - h / 2.0, x[0] + w / 2.0, x[1] + h / 2.0, score_val]).reshape((1, 5))\n\n\ndef speed_direction_lt(bbox1, bbox2):\n    cx1, cy1 = bbox1[0], bbox1[1]\n    cx2, cy2 = bbox2[0], bbox2[1]\n    speed = np.array([cy2 - cy1, cx2 - cx1])\n    norm = np.sqrt((cy2 - cy1) ** 2 + (cx2 - cx1) ** 2) + 1e-6\n    return speed / norm\n\n\ndef speed_direction_rt(bbox1, bbox2):\n    cx1, cy1 = bbox1[0], bbox1[3]\n    cx2, cy2 = bbox2[0], bbox2[3]\n    speed = np.array([cy2 - cy1, cx2 - cx1])\n    norm = np.sqrt((cy2 - cy1) ** 2 + (cx2 - cx1) ** 2) + 1e-6\n    return speed / norm\n\n\ndef speed_direction_lb(bbox1, bbox2):\n    cx1, cy1 = bbox1[2], bbox1[1]\n    cx2, cy2 = bbox2[2], bbox2[1]\n    speed = np.array([cy2 - cy1, cx2 - cx1])\n    norm = np.sqrt((cy2 - cy1) ** 2 + (cx2 - cx1) ** 2) + 1e-6\n    return speed / norm\n\n\ndef speed_direction_rb(bbox1, bbox2):\n    cx1, cy1 = bbox1[2], bbox1[3]\n    cx2, cy2 = bbox2[2], bbox2[3]\n    speed = np.array([cy2 - cy1, cx2 - cx1])\n    norm = np.sqrt((cy2 - cy1) ** 2 + (cx2 - cx1) ** 2) + 1e-6\n    return speed / norm\n\n\nclass KalmanBoxTracker(object):\n    \"\"\"\n    Single-object tracker with 9D custom KF (u,v,s,c,r, du,dv,ds,dc) by default.\n    Stores `cls` and `det_ind` metadata from the most recent matched detection.\n    \"\"\"\n\n    count = 0\n\n    def __init__(\n        self,\n        bbox,\n        temp_feat,\n        *,\n        delta_t: int = 3,\n        use_custom_kf: bool = True,\n        longterm_bank_length: int = 30,\n        alpha: float = 0.9,\n        adapfs: bool = False,\n        track_thresh: float = 0.5,\n        cls: int = 0,\n        det_ind: int = -1,\n    ):\n        if use_custom_kf:\n            from .kalmanfilter_score_new import \\\n                KalmanFilterNew_score_new as KalmanFilter_score_new\n            self.kf = KalmanFilter_score_new(dim_x=9, dim_z=5)\n            self.kf.F = np.array(\n                [\n                    [1, 0, 0, 0, 0, 1, 0, 0, 0],\n                    [0, 1, 0, 0, 0, 0, 1, 0, 0],\n                    [0, 0, 1, 0, 0, 0, 0, 1, 0],\n                    [0, 0, 0, 1, 0, 0, 0, 0, 1],\n                    [0, 0, 0, 0, 1, 0, 0, 0, 0],\n                    [0, 0, 0, 0, 0, 1, 0, 0, 0],\n                    [0, 0, 0, 0, 0, 0, 1, 0, 0],\n                    [0, 0, 0, 0, 0, 0, 0, 1, 0],\n                    [0, 0, 0, 0, 0, 0, 0, 0, 1],\n                ]\n            )\n            self.kf.H = np.array(\n                [\n                    [1, 0, 0, 0, 0, 0, 0, 0, 0],\n                    [0, 1, 0, 0, 0, 0, 0, 0, 0],\n                    [0, 0, 1, 0, 0, 0, 0, 0, 0],\n                    [0, 0, 0, 1, 0, 0, 0, 0, 0],\n                    [0, 0, 0, 0, 1, 0, 0, 0, 0],\n                ]\n            )\n            self.kf.R[2:, 2:] *= 10.0\n            self.kf.P[5:, 5:] *= 1000.0\n            self.kf.P *= 10.0\n            self.kf.Q[-1, -1] *= 0.01\n            self.kf.Q[-2, -2] *= 0.01\n            self.kf.Q[5:, 5:] *= 0.01\n            self.kf.x[:5] = convert_bbox_to_z(bbox)\n        else:\n            from filterpy.kalman import KalmanFilter\n            self.kf = KalmanFilter(dim_x=7, dim_z=4)\n            self.kf.F = np.array(\n                [\n                    [1, 0, 0, 0, 0, 1, 0],\n                    [0, 1, 0, 0, 0, 0, 1],\n                    [0, 0, 1, 0, 0, 0, 0],\n                    [0, 0, 0, 1, 0, 0, 0],\n                    [0, 0, 0, 0, 1, 0, 0],\n                    [0, 0, 0, 0, 0, 1, 0],\n                    [0, 0, 0, 0, 0, 0, 1],\n                ]\n            )\n            self.kf.H = np.array(\n                [\n                    [1, 0, 0, 0, 0, 0, 0],\n                    [0, 1, 0, 0, 0, 0, 0],\n                    [0, 0, 1, 0, 0, 0, 0],\n                    [0, 0, 0, 1, 0, 0, 0],\n                ]\n            )\n            self.kf.R[2:, 2:] *= 10.0\n            self.kf.P[4:, 4:] *= 1000.0\n            self.kf.P *= 10.0\n            self.kf.x[:4] = convert_bbox_to_z(bbox)\n\n        # tracker state\n        self.time_since_update = 0\n        self.id = KalmanBoxTracker.count\n        KalmanBoxTracker.count += 1\n        self.history: List[np.ndarray] = []\n        self.hits = 0\n        self.hit_streak = 0\n        self.age = 0\n\n        # observations\n        self.last_observation = np.array([-1, -1, -1, -1, -1])\n        self.last_observation_save = np.array([-1, -1, -1, -1, -1])\n        self.observations = dict()\n        self.history_observations: List[np.ndarray] = []\n\n        # velocity aids\n        self.velocity_lt = None\n        self.velocity_rt = None\n        self.velocity_lb = None\n        self.velocity_rb = None\n\n        # parameters\n        self.delta_t = int(delta_t)\n        self.confidence_pre = None\n        self.conf = float(bbox[-1])\n\n        # ReID buffers\n        self.smooth_feat = None\n        self.features = deque([], maxlen=int(longterm_bank_length))\n        self.alpha = float(alpha)\n        self.adapfs = bool(adapfs)\n        self.track_thresh = float(track_thresh)\n\n        # metadata\n        self.cls = int(cls)\n        self.det_ind = int(det_ind)\n\n        # first feature update\n        self.update_features(temp_feat)\n\n    def update_features(self, feat, score: float = -1.0):\n        feat = feat.astype(np.float32)\n        n = np.linalg.norm(feat) + 1e-12\n        feat = feat / n\n        self.curr_feat = feat\n        if self.smooth_feat is None:\n            self.smooth_feat = feat\n        else:\n            if self.adapfs:\n                assert score > 0, \"score must be > 0 when adapfs=True\"\n                pre_w = self.alpha * (self.conf / (self.conf + score))\n                cur_w = (1.0 - self.alpha) * (score / (self.conf + score))\n                s = pre_w + cur_w\n                pre_w /= s\n                cur_w /= s\n                self.smooth_feat = pre_w * self.smooth_feat + cur_w * feat\n            else:\n                self.smooth_feat = self.alpha * self.smooth_feat + (1.0 - self.alpha) * feat\n        self.features.append(feat)\n        self.smooth_feat = self.smooth_feat / (np.linalg.norm(self.smooth_feat) + 1e-12)\n\n    def camera_update(self, warp_matrix):\n        # get box + score from KF state\n        x1, y1, x2, y2, score = convert_x_to_bbox(self.kf.x, score=True)[0]\n\n        M = np.asarray(warp_matrix, dtype=float)\n        # normalize to 3x3 homogeneous matrix\n        if M.shape == (2, 3):\n            M = np.vstack([M, [0.0, 0.0, 1.0]])\n        elif M.shape != (3, 3):\n            M = np.eye(3, dtype=float)\n\n        # transform corners in homogeneous coords\n        p1 = (M @ np.array([x1, y1, 1.0], dtype=float)).ravel()\n        p2 = (M @ np.array([x2, y2, 1.0], dtype=float)).ravel()\n\n        # homogeneous divide\n        w1 = p1[2] if abs(p1[2]) > 1e-12 else 1.0\n        w2 = p2[2] if abs(p2[2]) > 1e-12 else 1.0\n        x1_, y1_ = p1[0] / w1, p1[1] / w1\n        x2_, y2_ = p2[0] / w2, p2[1] / w2\n\n        # write back to KF (keep score)\n        self.kf.x[:5] = convert_bbox_to_z([x1_, y1_, x2_, y2_, float(score)])\n\n    def update(self, bbox, id_feature, update_feature: bool = True, *, cls: Optional[int] = None, det_ind: Optional[int] = None):\n        vlt = vrt = vlb = vrb = None\n        if bbox is not None:\n            if self.last_observation.sum() >= 0:\n                previous_box = None\n                for i in range(self.delta_t):\n                    if self.age - i - 1 in self.observations:\n                        previous_box = self.observations[self.age - i - 1]\n                        if vlt is not None:\n                            vlt += speed_direction_lt(previous_box, bbox)\n                            vrt += speed_direction_rt(previous_box, bbox)\n                            vlb += speed_direction_lb(previous_box, bbox)\n                            vrb += speed_direction_rb(previous_box, bbox)\n                        else:\n                            vlt = speed_direction_lt(previous_box, bbox)\n                            vrt = speed_direction_rt(previous_box, bbox)\n                            vlb = speed_direction_lb(previous_box, bbox)\n                            vrb = speed_direction_rb(previous_box, bbox)\n                if previous_box is None:\n                    previous_box = self.last_observation\n                    self.velocity_lt = speed_direction_lt(previous_box, bbox)\n                    self.velocity_rt = speed_direction_rt(previous_box, bbox)\n                    self.velocity_lb = speed_direction_lb(previous_box, bbox)\n                    self.velocity_rb = speed_direction_rb(previous_box, bbox)\n                else:\n                    self.velocity_lt, self.velocity_rt = vlt, vrt\n                    self.velocity_lb, self.velocity_rb = vlb, vrb\n\n            self.last_observation = bbox\n            self.last_observation_save = bbox\n            self.observations[self.age] = bbox\n            self.history_observations.append(bbox)\n\n            self.time_since_update = 0\n            self.history = []\n            self.hits += 1\n            self.hit_streak += 1\n            self.kf.update(convert_bbox_to_z(bbox))\n\n            # update metadata\n            if cls is not None:\n                self.cls = int(cls)\n            if det_ind is not None:\n                self.det_ind = int(det_ind)\n\n            if update_feature:\n                if self.adapfs:\n                    self.update_features(id_feature, score=bbox[-1])\n                else:\n                    self.update_features(id_feature)\n            self.confidence_pre = self.conf\n            self.conf = float(bbox[-1])\n        else:\n            self.kf.update(bbox)\n            self.confidence_pre = None\n\n    def predict(self):\n        if (self.kf.x[7] + self.kf.x[2]) <= 0:\n            self.kf.x[7] *= 0.0\n\n        self.kf.predict()\n        self.age += 1\n        if self.time_since_update > 0:\n            self.hit_streak = 0\n        self.time_since_update += 1\n\n        self.history.append(convert_x_to_bbox(self.kf.x))\n\n        # --- make scalars robustly ---\n        x3 = self.kf.x[3, 0] if self.kf.x.ndim == 2 else self.kf.x[3]\n        kalman_score = float(np.clip(x3, self.track_thresh, 1.0))\n\n        if not self.confidence_pre:\n            simple_score = float(np.clip(self.conf, 0.1, self.track_thresh))\n        else:\n            simple_score = float(np.clip(\n                self.conf - (self.confidence_pre - self.conf),\n                0.1,\n                self.track_thresh,\n            ))\n\n        return self.history[-1], kalman_score, simple_score\n\n\nASSO_FUNCS = {\n    \"iou\": iou_batch,\n    \"giou\": giou_batch,\n    \"ciou\": ciou_batch,\n    \"diou\": diou_batch,\n    \"ct_dist\": ct_dist,\n    \"hmiou\": hmiou,\n}\n\n\nclass HybridSort(BaseTracker):\n    \"\"\"\n    Hybrid SORT + ReID with ECC CMC\n\n    - Explicit configuration only (no self.args)\n    - ReID model and ECC setup like BotSort\n    - BaseTracker API: update(dets, img, embs=None) -> np.ndarray [[x1,y1,x2,y2,track_id,conf,cls,det_ind], ...]\n    - Now outputs real cls & det_ind and guards det_ind bounds\n    - Assumes detection input is [x1,y1,x2,y2,conf,cls]\n    \"\"\"\n\n    def __init__(\n        self,\n        # ReID & CMC\n        reid_weights: Optional[Union[Path, str]],\n        device: torch.device,\n        half: bool,\n        cmc_method: str = \"ecc\",\n        with_reid: bool = True,\n\n        # Hybrid-SORT specific\n        low_thresh: float = 0.1,\n        delta_t: int = 3,\n        inertia: float = 0.05,\n        use_byte: bool = True,\n\n        # KF / ReID\n        use_custom_kf: bool = True,\n        longterm_bank_length: int = 30,\n        alpha: float = 0.9,\n        adapfs: bool = False,\n        track_thresh: float = 0.5,\n\n        # Embedding-guided association\n        EG_weight_high_score: float = 4.6,\n        EG_weight_low_score: float = 1.3,\n\n        # Two-step toggles / thresholds\n        TCM_first_step: bool = True,\n        TCM_byte_step: bool = True,\n        TCM_byte_step_weight: float = 1.0,\n        high_score_matching_thresh: float = 0.7,\n\n        # Long-term reid\n        with_longterm_reid: bool = True,\n        longterm_reid_weight: float = 0.0,\n        with_longterm_reid_correction: bool = True,\n        longterm_reid_correction_thresh: float = 0.4,\n        longterm_reid_correction_thresh_low: float = 0.4,\n\n        # misc\n        dataset: str = \"\",\n        **kwargs,  # BaseTracker parameters\n    ):\n        # Capture all init params for logging\n        init_args = {k: v for k, v in locals().items() if k not in ('self', 'kwargs')}\n        super().__init__(**init_args, _tracker_name='HybridSort', **kwargs)\n\n        # store core knobs\n        self.low_thresh = float(low_thresh)\n        self.delta_t = int(delta_t)\n        self.inertia = float(inertia)\n        self.use_byte = bool(use_byte)\n\n        self.use_custom_kf = bool(use_custom_kf)\n        self.longterm_bank_length = int(longterm_bank_length)\n        self.alpha = float(alpha)\n        self.adapfs = bool(adapfs)\n        self.track_thresh = float(track_thresh)\n\n        self.EG_weight_high_score = float(EG_weight_high_score)\n        self.EG_weight_low_score = float(EG_weight_low_score)\n        self.TCM_first_step = bool(TCM_first_step)\n        self.TCM_byte_step = bool(TCM_byte_step)\n        self.TCM_byte_step_weight = float(TCM_byte_step_weight)\n        self.high_score_matching_thresh = float(high_score_matching_thresh)\n\n        self.with_longterm_reid = bool(with_longterm_reid)\n        self.longterm_reid_weight = float(longterm_reid_weight)\n        self.with_longterm_reid_correction = bool(with_longterm_reid_correction)\n        self.longterm_reid_correction_thresh = float(longterm_reid_correction_thresh)\n        self.longterm_reid_correction_thresh_low = float(longterm_reid_correction_thresh_low)\n        self.dataset = str(dataset)\n\n        # ReID module (BotSort-style)\n        self.with_reid = bool(with_reid)\n        self.model = None\n        if self.with_reid and reid_weights is not None:\n            self.model = ReidAutoBackend(weights=reid_weights, device=device, half=half).model\n\n        # ECC CMC (BotSort-style)\n        self.cmc = get_cmc_method(cmc_method)()\n\n        # container\n        self.active_tracks: List[KalmanBoxTracker] = []\n        KalmanBoxTracker.count = 0\n\n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None) -> np.ndarray:\n        \"\"\"\n        dets: ndarray [N,6] -> [x1,y1,x2,y2,conf,cls]\n        img: HxWxC image\n        embs: optional [N,D] appearance features. If None and with_reid=True, we extract features for provided dets.\n        Returns: ndarray [M,8]: [x1,y1,x2,y2,track_id,conf,cls,det_ind]\n        \"\"\"\n        self.check_inputs(dets, img, embs)\n        self.frame_count += 1\n\n        # --- parse inputs: detections are [x1,y1,x2,y2,conf,cls] ---\n        n_dets_full = int(dets.shape[0])\n\n        # core boxes + conf\n        dets_5 = dets[:, :5].copy() if n_dets_full else dets.reshape(0, 5)\n        confs = dets_5[:, 4] if n_dets_full else np.array([])\n\n        # classes (int)\n        dets_cls = dets[:, 5].astype(int) if n_dets_full else np.array([], dtype=int)\n\n        # stable det_ind column for downstream logic and output\n        dets_ind = np.arange(n_dets_full, dtype=int)\n\n        # helper guards\n        def _safe_detind(x: int, n: int) -> int:\n            xi = int(x)\n            return xi if 0 <= xi < n else -1\n\n        def _safe_cls(x: int, n: int) -> int:\n            xi = int(x)\n            return xi if 0 <= xi < n else xi  # change to -1 if you prefer strictness\n\n        # convenience view carrying det_ind in col 6th position\n        dets_idx = np.hstack([dets_5, dets_ind.reshape(-1, 1)]) if n_dets_full else dets.reshape(0, 6)\n\n        # ECC: compute warp using all current detections (BotSort pattern)\n        warp = self.cmc.apply(img, dets_idx) if len(dets_idx) else np.eye(3)\n\n        # Apply camera motion compensation to all active tracks\n        for tr in self.active_tracks:\n            tr.camera_update(warp)\n\n        # ReID: get features if not provided\n        if self.with_reid:\n            if embs is None and len(dets_idx):\n                # ReID features extracted on [x1,y1,x2,y2] boxes\n                embs = self.model.get_features(dets_idx[:, 0:4], img)\n            elif embs is None:\n                embs = np.zeros((0, 128), dtype=np.float32)  # safe shape\n\n        # FIRST/SECOND stage split (Hybrid semantics)\n        inds_low = confs > self.low_thresh\n        inds_high = confs < self.det_thresh\n        inds_second = np.logical_and(inds_low, inds_high)\n\n        dets_second = dets_idx[inds_second]         # low-conf for BYTE\n        remain_inds = confs > self.det_thresh\n        dets_keep = dets_idx[remain_inds]\n\n        # NEW: classes aligned to the two sets\n        cls_keep = dets_cls[remain_inds]\n        cls_second = dets_cls[inds_second]\n\n        # slice embeddings accordingly (if present)\n        if embs is None or len(embs) == 0:\n            id_feature_keep = np.zeros((len(dets_keep), 1), dtype=np.float32)\n            id_feature_second = np.zeros((len(dets_second), 1), dtype=np.float32)\n        else:\n            id_feature_keep = embs[remain_inds]\n            id_feature_second = embs[inds_second]\n\n        # Build dets arrays used by original hybrid code (no det_ind in the math)\n        dets_first = dets_keep[:, :5]\n        dets_low = dets_second[:, :5]\n\n        # carry det_ind arrays aligned with above\n        det_inds_keep = dets_keep[:, 5].astype(int) if len(dets_keep) else np.array([], dtype=int)\n        det_inds_second = dets_second[:, 5].astype(int) if len(dets_second) else np.array([], dtype=int)\n\n        # ---- Predict step for existing tracks\n        trks = np.zeros((len(self.active_tracks), 6))\n        to_del = []\n        for t in range(len(trks)):\n            pos, kal_score, simple_score = self.active_tracks[t].predict()\n            x1, y1, x2, y2 = pos[0].tolist()\n            trks[t] = [x1, y1, x2, y2, kal_score, simple_score]\n            if np.any(np.isnan(pos)):\n                to_del.append(t)\n        trks = np.ma.compress_rows(np.ma.masked_invalid(trks))\n        for t in reversed(to_del):\n            self.active_tracks.pop(t)\n\n        # Prepare motion cues\n        velocities_lt = np.array([t.velocity_lt if t.velocity_lt is not None else np.array((0, 0)) for t in self.active_tracks])\n        velocities_rt = np.array([t.velocity_rt if t.velocity_rt is not None else np.array((0, 0)) for t in self.active_tracks])\n        velocities_lb = np.array([t.velocity_lb if t.velocity_lb is not None else np.array((0, 0)) for t in self.active_tracks])\n        velocities_rb = np.array([t.velocity_rb if t.velocity_rb is not None else np.array((0, 0)) for t in self.active_tracks])\n        last_boxes = np.array([t.last_observation for t in self.active_tracks])\n        k_observations = np.array([k_previous_obs(t.observations, t.age, self.delta_t) for t in self.active_tracks])\n\n        # ===== First association (optionally embedding-guided)\n        if self.EG_weight_high_score > 0 and self.TCM_first_step and len(dets_first) and len(trks):\n            track_features = np.asarray([t.smooth_feat for t in self.active_tracks], dtype=float)\n            emb_dists = embedding_distance(track_features, id_feature_keep).T\n\n            long_emb_dists = None\n            if self.with_longterm_reid or self.with_longterm_reid_correction:\n                long_track_features = np.asarray(\n                    [np.vstack(list(t.features)).mean(0) if len(t.features) else t.smooth_feat for t in self.active_tracks],\n                    dtype=float,\n                )\n                long_emb_dists = embedding_distance(long_track_features, id_feature_keep).T\n\n            matched, unmatched_dets, unmatched_trks = associate_4_points_with_score_with_reid(\n                dets_first,\n                trks,\n                self.iou_threshold,\n                velocities_lt,\n                velocities_rt,\n                velocities_lb,\n                velocities_rb,\n                k_observations,\n                self.inertia,\n                ASSO_FUNCS[self.asso_func_name],  # from BaseTracker\n                emb_cost=emb_dists,\n                weights=(1.0, self.EG_weight_high_score),\n                thresh=self.high_score_matching_thresh,\n                long_emb_dists=long_emb_dists,\n                with_longterm_reid=self.with_longterm_reid,\n                longterm_reid_weight=self.longterm_reid_weight,\n                with_longterm_reid_correction=self.with_longterm_reid_correction,\n                longterm_reid_correction_thresh=self.longterm_reid_correction_thresh,\n                dataset=self.per_class and \"perclass\" or self.dataset,\n            )\n        elif self.TCM_first_step and len(dets_first) and len(trks):\n            matched, unmatched_dets, unmatched_trks = associate_4_points_with_score(\n                dets_first,\n                trks,\n                self.iou_threshold,\n                velocities_lt,\n                velocities_rt,\n                velocities_lb,\n                velocities_rb,\n                k_observations,\n                self.inertia,\n                ASSO_FUNCS[self.asso_func_name],\n            )\n        else:\n            matched = np.empty((0, 2), dtype=int)\n            unmatched_dets = np.arange(len(dets_first))\n            unmatched_trks = np.arange(len(trks))\n\n        # Update matched (update features here)  —— pass cls & det_ind (safe)\n        for m in matched:\n            det_i = m[0]\n            self.active_tracks[m[1]].update(\n                dets_first[det_i, :],\n                id_feature_keep[det_i, :],\n                cls=_safe_cls(cls_keep[det_i], self.nr_classes),\n                det_ind=_safe_detind(det_inds_keep[det_i], n_dets_full),\n            )\n\n        # ===== BYTE / low-score association (optional)\n        if self.use_byte and len(dets_low) > 0 and unmatched_trks.shape[0] > 0:\n            u_trks = trks[unmatched_trks]\n            iou_left = np.array(ASSO_FUNCS[self.asso_func_name](dets_low, u_trks))\n            iou_left_thre = iou_left.copy()\n            if self.TCM_byte_step:\n                iou_left -= np.array(cal_score_dif_batch_two_score(dets_low, u_trks) * self.TCM_byte_step_weight)\n\n            if iou_left.max() > self.iou_threshold:\n                if self.EG_weight_low_score > 0 and self.with_reid:\n                    u_tracklets = [self.active_tracks[idx] for idx in unmatched_trks]\n                    u_track_features = np.asarray([t.smooth_feat for t in u_tracklets], dtype=float)\n                    emb_dists_low = embedding_distance(u_track_features, id_feature_second).T\n                    matched_indices = linear_assignment(-iou_left + self.EG_weight_low_score * emb_dists_low)\n                else:\n                    matched_indices = linear_assignment(-iou_left)\n                to_remove_trk_indices = []\n                for mm in matched_indices:\n                    det_rel, trk_rel = mm[0], mm[1]\n                    trk_ind = unmatched_trks[trk_rel]\n                    if self.with_longterm_reid_correction and self.EG_weight_low_score > 0 and self.with_reid:\n                        if iou_left_thre[det_rel, trk_rel] < self.iou_threshold or emb_dists_low[det_rel, trk_rel] > self.longterm_reid_correction_thresh_low:\n                            continue\n                    else:\n                        if iou_left_thre[det_rel, trk_rel] < self.iou_threshold:\n                            continue\n                    # do not update features in BYTE pass\n                    self.active_tracks[trk_ind].update(\n                        dets_low[det_rel, :],\n                        id_feature_second[det_rel, :],\n                        update_feature=False,\n                        cls=_safe_cls(cls_second[det_rel], self.nr_classes),\n                        det_ind=_safe_detind(det_inds_second[det_rel], n_dets_full),\n                    )\n                    to_remove_trk_indices.append(trk_ind)\n                unmatched_trks = np.setdiff1d(unmatched_trks, np.array(to_remove_trk_indices))\n\n        # ===== Final chance: IoU vs last boxes\n        if unmatched_dets.shape[0] > 0 and unmatched_trks.shape[0] > 0:\n            left_dets = dets_first[unmatched_dets]\n            left_trks = last_boxes[unmatched_trks]\n            iou_left = np.array(ASSO_FUNCS[self.asso_func_name](left_dets, left_trks))\n            if iou_left.max() > self.iou_threshold:\n                rematched = linear_assignment(-iou_left)\n                to_remove_det_indices = []\n                to_remove_trk_indices = []\n                for mm in rematched:\n                    det_rel, trk_rel = mm[0], mm[1]\n                    if iou_left[det_rel, trk_rel] < self.iou_threshold:\n                        continue\n                    det_abs = unmatched_dets[det_rel]\n                    trk_abs = unmatched_trks[trk_rel]\n                    self.active_tracks[trk_abs].update(\n                        dets_first[det_abs, :],\n                        id_feature_keep[det_abs, :],\n                        update_feature=False,\n                        cls=_safe_cls(cls_keep[det_abs], self.nr_classes),\n                        det_ind=_safe_detind(det_inds_keep[det_abs], n_dets_full),\n                    )\n                    to_remove_det_indices.append(det_abs)\n                    to_remove_trk_indices.append(trk_abs)\n                unmatched_dets = np.setdiff1d(unmatched_dets, np.array(to_remove_det_indices))\n                unmatched_trks = np.setdiff1d(unmatched_trks, np.array(to_remove_trk_indices))\n\n        # Mark remaining unmatched tracks\n        for m in unmatched_trks:\n            self.active_tracks[m].update(None, None)\n\n        # Create new trackers for unmatched high-score detections\n        for i in unmatched_dets:\n            trk = KalmanBoxTracker(\n                dets_first[i, :],\n                id_feature_keep[i, :],\n                delta_t=self.delta_t,\n                use_custom_kf=self.use_custom_kf,\n                longterm_bank_length=self.longterm_bank_length,\n                alpha=self.alpha,\n                adapfs=self.adapfs,\n                track_thresh=self.track_thresh,\n                cls=_safe_cls(cls_keep[i], self.nr_classes),\n                det_ind=_safe_detind(det_inds_keep[i], n_dets_full) if len(det_inds_keep) else -1,\n            )\n            self.active_tracks.append(trk)\n\n        # Collect outputs (match BotSort/OcSort style)\n        outputs = []\n        for trk in self.active_tracks[::-1]:\n            if trk.last_observation.sum() < 0:\n                d = convert_x_to_bbox(trk.kf.x)[0][:4]\n            else:\n                d = trk.last_observation[:4]\n\n            # Only output fresh tracks and valid det_ind for this frame\n            if (trk.time_since_update < 1) and (trk.hit_streak >= self.min_hits or self.frame_count <= self.min_hits):\n                outputs.append([\n                    *d.tolist(),\n                    trk.id + 1,                 # track id\n                    float(trk.conf),      # conf\n                    int(trk.cls),               # cls (from detection)\n                    int(trk.det_ind),           # det index (frame-local)\n                ])\n\n        # Remove dead tracks\n        i = len(self.active_tracks)\n        for trk in self.active_tracks[::-1]:\n            i -= 1\n            if trk.time_since_update > self.max_age:\n                self.active_tracks.pop(i)\n\n        return np.asarray(outputs) if len(outputs) else np.zeros((0, 8), dtype=float)\n"
  },
  {
    "path": "boxmot/trackers/hybridsort/kalmanfilter_score.py",
    "content": "\n# -*- coding: utf-8 -*-\n# pylint: disable=invalid-name, too-many-arguments, too-many-branches,\n# pylint: disable=too-many-locals, too-many-instance-attributes, too-many-lines\n\n\"\"\"\nThis module implements the linear Kalman filter in both an object\noriented and procedural form. The KalmanFilter class implements\nthe filter by storing the various matrices in instance variables,\nminimizing the amount of bookkeeping you have to do.\nAll Kalman filters operate with a predict->update cycle. The\npredict step, implemented with the method or function predict(),\nuses the state transition matrix F to predict the state in the next\ntime period (epoch). The state is stored as a gaussian (x, P), where\nx is the state (column) vector, and P is its covariance. Covariance\nmatrix Q specifies the process covariance. In Bayesian terms, this\nprediction is called the *prior*, which you can think of colloquially\nas the estimate prior to incorporating the measurement.\nThe update step, implemented with the method or function `update()`,\nincorporates the measurement z with covariance R, into the state\nestimate (x, P). The class stores the system uncertainty in S,\nthe innovation (residual between prediction and measurement in\nmeasurement space) in y, and the Kalman gain in k. The procedural\nform returns these variables to you. In Bayesian terms this computes\nthe *posterior* - the estimate after the information from the\nmeasurement is incorporated.\nWhether you use the OO form or procedural form is up to you. If\nmatrices such as H, R, and F are changing each epoch, you'll probably\nopt to use the procedural form. If they are unchanging, the OO\nform is perhaps easier to use since you won't need to keep track\nof these matrices. This is especially useful if you are implementing\nbanks of filters or comparing various KF designs for performance;\na trivial coding bug could lead to using the wrong sets of matrices.\nThis module also offers an implementation of the RTS smoother, and\nother helper functions, such as log likelihood computations.\nThe Saver class allows you to easily save the state of the\nKalmanFilter class after every update\nThis module expects NumPy arrays for all values that expect\narrays, although in a few cases, particularly method parameters,\nit will accept types that convert to NumPy arrays, such as lists\nof lists. These exceptions are documented in the method or function.\nExamples\n--------\nThe following example constructs a constant velocity kinematic\nfilter, filters noisy data, and plots the results. It also demonstrates\nusing the Saver class to save the state of the filter at each epoch.\n.. code-block:: Python\n    import matplotlib.pyplot as plt\n    import numpy as np\n    from filterpy.kalman import KalmanFilter\n    from filterpy.common import Q_discrete_white_noise, Saver\n    r_std, q_std = 2., 0.003\n    cv = KalmanFilter(dim_x=2, dim_z=1)\n    cv.x = np.array([[0., 1.]]) # position, velocity\n    cv.F = np.array([[1, dt],[ [0, 1]])\n    cv.R = np.array([[r_std^^2]])\n    f.H = np.array([[1., 0.]])\n    f.P = np.diag([.1^^2, .03^^2)\n    f.Q = Q_discrete_white_noise(2, dt, q_std**2)\n    saver = Saver(cv)\n    for z in range(100):\n        cv.predict()\n        cv.update([z + randn() * r_std])\n        saver.save() # save the filter's state\n    saver.to_array()\n    plt.plot(saver.x[:, 0])\n    # plot all of the priors\n    plt.plot(saver.x_prior[:, 0])\n    # plot mahalanobis distance\n    plt.figure()\n    plt.plot(saver.mahalanobis)\nThis code implements the same filter using the procedural form\n    x = np.array([[0., 1.]]) # position, velocity\n    F = np.array([[1, dt],[ [0, 1]])\n    R = np.array([[r_std^^2]])\n    H = np.array([[1., 0.]])\n    P = np.diag([.1^^2, .03^^2)\n    Q = Q_discrete_white_noise(2, dt, q_std**2)\n    for z in range(100):\n        x, P = predict(x, P, F=F, Q=Q)\n        x, P = update(x, P, z=[z + randn() * r_std], R=R, H=H)\n        xs.append(x[0, 0])\n    plt.plot(xs)\nFor more examples see the test subdirectory, or refer to the\nbook cited below. In it I both teach Kalman filtering from basic\nprinciples, and teach the use of this library in great detail.\nFilterPy library.\nhttp://github.com/rlabbe/filterpy\nDocumentation at:\nhttps://filterpy.readthedocs.org\nSupporting book at:\nhttps://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python\nThis is licensed under an MIT license. See the readme.MD file\nfor more information.\nCopyright 2014-2018 Roger R Labbe Jr.\n\"\"\"\n\nfrom __future__ import absolute_import, division\n\nimport sys\nfrom copy import deepcopy\nfrom math import exp, log, sqrt\n\nimport numpy as np\nimport numpy.linalg as linalg\nfrom filterpy.common import pretty_str, reshape_z\nfrom filterpy.stats import logpdf\nfrom numpy import dot, eye, isscalar, shape, zeros\n\n\nclass KalmanFilterNew_score(object):\n    \"\"\" Implements a Kalman filter. You are responsible for setting the\n    various state variables to reasonable values; the defaults  will\n    not give you a functional filter.\n    For now the best documentation is my free book Kalman and Bayesian\n    Filters in Python [2]_. The test files in this directory also give you a\n    basic idea of use, albeit without much description.\n    In brief, you will first construct this object, specifying the size of\n    the state vector with dim_x and the size of the measurement vector that\n    you will be using with dim_z. These are mostly used to perform size checks\n    when you assign values to the various matrices. For example, if you\n    specified dim_z=2 and then try to assign a 3x3 matrix to R (the\n    measurement noise matrix you will get an assert exception because R\n    should be 2x2. (If for whatever reason you need to alter the size of\n    things midstream just use the underscore version of the matrices to\n    assign directly: your_filter._R = a_3x3_matrix.)\n    After construction the filter will have default matrices created for you,\n    but you must specify the values for each. It’s usually easiest to just\n    overwrite them rather than assign to each element yourself. This will be\n    clearer in the example below. All are of type numpy.array.\n    Examples\n    --------\n    Here is a filter that tracks position and velocity using a sensor that only\n    reads position.\n    First construct the object with the required dimensionality. Here the state\n    (`dim_x`) has 2 coefficients (position and velocity), and the measurement\n    (`dim_z`) has one. In FilterPy `x` is the state, `z` is the measurement.\n    .. code::\n        from filterpy.kalman import KalmanFilter\n        f = KalmanFilter (dim_x=2, dim_z=1)\n    Assign the initial value for the state (position and velocity). You can do this\n    with a two dimensional array like so:\n        .. code::\n            f.x = np.array([[2.],    # position\n                            [0.]])   # velocity\n    or just use a one dimensional array, which I prefer doing.\n    .. code::\n        f.x = np.array([2., 0.])\n    Define the state transition matrix:\n        .. code::\n            f.F = np.array([[1.,1.],\n                            [0.,1.]])\n    Define the measurement function. Here we need to convert a position-velocity\n    vector into just a position vector, so we use:\n        .. code::\n        f.H = np.array([[1., 0.]])\n    Define the state's covariance matrix P. \n    .. code::\n        f.P = np.array([[1000.,    0.],\n                        [   0., 1000.] ])\n    Now assign the measurement noise. Here the dimension is 1x1, so I can\n    use a scalar\n    .. code::\n        f.R = 5\n    I could have done this instead:\n    .. code::\n        f.R = np.array([[5.]])\n    Note that this must be a 2 dimensional array.\n    Finally, I will assign the process noise. Here I will take advantage of\n    another FilterPy library function:\n    .. code::\n        from filterpy.common import Q_discrete_white_noise\n        f.Q = Q_discrete_white_noise(dim=2, dt=0.1, var=0.13)\n    Now just perform the standard predict/update loop:\n    .. code::\n        while some_condition_is_true:\n            z = get_sensor_reading()\n            f.predict()\n            f.update(z)\n            do_something_with_estimate (f.x)\n    **Procedural Form**\n    This module also contains stand alone functions to perform Kalman filtering.\n    Use these if you are not a fan of objects.\n    **Example**\n    .. code::\n        while True:\n            z, R = read_sensor()\n            x, P = predict(x, P, F, Q)\n            x, P = update(x, P, z, R, H)\n    See my book Kalman and Bayesian Filters in Python [2]_.\n    You will have to set the following attributes after constructing this\n    object for the filter to perform properly. Please note that there are\n    various checks in place to ensure that you have made everything the\n    'correct' size. However, it is possible to provide incorrectly sized\n    arrays such that the linear algebra can not perform an operation.\n    It can also fail silently - you can end up with matrices of a size that\n    allows the linear algebra to work, but are the wrong shape for the problem\n    you are trying to solve.\n    Parameters\n    ----------\n    dim_x : int\n        Number of state variables for the Kalman filter. For example, if\n        you are tracking the position and velocity of an object in two\n        dimensions, dim_x would be 4.\n        This is used to set the default size of P, Q, and u\n    dim_z : int\n        Number of of measurement inputs. For example, if the sensor\n        provides you with position in (x,y), dim_z would be 2.\n    dim_u : int (optional)\n        size of the control input, if it is being used.\n        Default value of 0 indicates it is not used.\n    compute_log_likelihood : bool (default = True)\n        Computes log likelihood by default, but this can be a slow\n        computation, so if you never use it you can turn this computation\n        off.\n    Attributes\n    ----------\n    x : numpy.array(dim_x, 1)\n        Current state estimate. Any call to update() or predict() updates\n        this variable.\n    P : numpy.array(dim_x, dim_x)\n        Current state covariance matrix. Any call to update() or predict()\n        updates this variable.\n    x_prior : numpy.array(dim_x, 1)\n        Prior (predicted) state estimate. The *_prior and *_post attributes\n        are for convenience; they store the  prior and posterior of the\n        current epoch. Read Only.\n    P_prior : numpy.array(dim_x, dim_x)\n        Prior (predicted) state covariance matrix. Read Only.\n    x_post : numpy.array(dim_x, 1)\n        Posterior (updated) state estimate. Read Only.\n    P_post : numpy.array(dim_x, dim_x)\n        Posterior (updated) state covariance matrix. Read Only.\n    z : numpy.array\n        Last measurement used in update(). Read only.\n    R : numpy.array(dim_z, dim_z)\n        Measurement noise covariance matrix. Also known as the\n        observation covariance.\n    Q : numpy.array(dim_x, dim_x)\n        Process noise covariance matrix. Also known as the transition\n        covariance.\n    F : numpy.array()\n        State Transition matrix. Also known as `A` in some formulation.\n    H : numpy.array(dim_z, dim_x)\n        Measurement function. Also known as the observation matrix, or as `C`.\n    y : numpy.array\n        Residual of the update step. Read only.\n    K : numpy.array(dim_x, dim_z)\n        Kalman gain of the update step. Read only.\n    S :  numpy.array\n        System uncertainty (P projected to measurement space). Read only.\n    SI :  numpy.array\n        Inverse system uncertainty. Read only.\n    log_likelihood : float\n        log-likelihood of the last measurement. Read only.\n    likelihood : float\n        likelihood of last measurement. Read only.\n        Computed from the log-likelihood. The log-likelihood can be very\n        small,  meaning a large negative value such as -28000. Taking the\n        exp() of that results in 0.0, which can break typical algorithms\n        which multiply by this value, so by default we always return a\n        number >= sys.float_info.min.\n    mahalanobis : float\n        mahalanobis distance of the innovation. Read only.\n    inv : function, default numpy.linalg.inv\n        If you prefer another inverse function, such as the Moore-Penrose\n        pseudo inverse, set it to that instead: kf.inv = np.linalg.pinv\n        This is only used to invert self.S. If you know it is diagonal, you\n        might choose to set it to filterpy.common.inv_diagonal, which is\n        several times faster than numpy.linalg.inv for diagonal matrices.\n    alpha : float\n        Fading memory setting. 1.0 gives the normal Kalman filter, and\n        values slightly larger than 1.0 (such as 1.02) give a fading\n        memory effect - previous measurements have less influence on the\n        filter's estimates. This formulation of the Fading memory filter\n        (there are many) is due to Dan Simon [1]_.\n    References\n    ----------\n    .. [1] Dan Simon. \"Optimal State Estimation.\" John Wiley & Sons.\n       p. 208-212. (2006)\n    .. [2] Roger Labbe. \"Kalman and Bayesian Filters in Python\"\n       https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python\n    \"\"\"\n\n    def __init__(self, dim_x, dim_z, dim_u=0, args=None):\n        if dim_x < 1:\n            raise ValueError('dim_x must be 1 or greater')\n        if dim_z < 1:\n            raise ValueError('dim_z must be 1 or greater')\n        if dim_u < 0:\n            raise ValueError('dim_u must be 0 or greater')\n\n        self.dim_x = dim_x\n        self.dim_z = dim_z\n        self.dim_u = dim_u\n\n        self.x = zeros((dim_x, 1))        # state\n        self.P = eye(dim_x)               # uncertainty covariance\n        self.Q = eye(dim_x)               # process uncertainty\n        self.B = None                     # control transition matrix\n        self.F = eye(dim_x)               # state transition matrix\n        self.H = zeros((dim_z, dim_x))    # measurement function\n        self.R = eye(dim_z)               # measurement uncertainty\n        self._alpha_sq = 1.               # fading memory control\n        self.M = np.zeros((dim_x, dim_z)) # process-measurement cross correlation\n        self.z = np.array([[None]*self.dim_z]).T\n\n        # gain and residual are computed during the innovation step. We\n        # save them so that in case you want to inspect them for various\n        # purposes\n        self.K = np.zeros((dim_x, dim_z)) # kalman gain\n        self.y = zeros((dim_z, 1))\n        self.S = np.zeros((dim_z, dim_z)) # system uncertainty\n        self.SI = np.zeros((dim_z, dim_z)) # inverse system uncertainty\n\n        # identity matrix. Do not alter this.\n        self._I = np.eye(dim_x)\n\n        # these will always be a copy of x,P after predict() is called\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n\n        # these will always be a copy of x,P after update() is called\n        self.x_post = self.x.copy()             \n        self.P_post = self.P.copy()\n\n        # Only computed only if requested via property\n        self._log_likelihood = log(sys.float_info.min)\n        self._likelihood = sys.float_info.min\n        self._mahalanobis = None\n\n        # keep all observations \n        self.history_obs = []\n\n        self.inv = np.linalg.inv\n\n        self.attr_saved = None\n        self.observed = False\n        self.args = args\n\n\n    def predict(self, u=None, B=None, F=None, Q=None):\n        \"\"\"\n        Predict next state (prior) using the Kalman filter state propagation\n        equations.\n        Parameters\n        ----------\n        u : np.array, default 0\n            Optional control vector.\n        B : np.array(dim_x, dim_u), or None\n            Optional control transition matrix; a value of None\n            will cause the filter to use `self.B`.\n        F : np.array(dim_x, dim_x), or None\n            Optional state transition matrix; a value of None\n            will cause the filter to use `self.F`.\n        Q : np.array(dim_x, dim_x), scalar, or None\n            Optional process noise matrix; a value of None will cause the\n            filter to use `self.Q`.\n        \"\"\"\n\n        if B is None:\n            B = self.B\n        if F is None:\n            F = self.F\n        if Q is None:\n            Q = self.Q\n        elif isscalar(Q):\n            Q = eye(self.dim_x) * Q\n\n\n        # x = Fx + Bu\n        if B is not None and u is not None:\n            self.x = dot(F, self.x) + dot(B, u)\n        else:\n            self.x = dot(F, self.x)\n\n        # P = FPF' + Q\n        self.P = self._alpha_sq * dot(dot(F, self.P), F.T) + Q\n\n        # save prior\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n\n\n    def freeze(self):\n        \"\"\"\n            Save the parameters before non-observation forward\n        \"\"\"\n        self.attr_saved = deepcopy(self.__dict__)\n\n\n    def unfreeze(self):\n        if self.attr_saved is not None:\n            new_history = deepcopy(self.history_obs)\n            self.__dict__ = self.attr_saved\n            # self.history_obs = new_history \n            self.history_obs = self.history_obs[:-1]\n            occur = [int(d is None) for d in new_history]\n            indices = np.where(np.array(occur)==0)[0]\n            if len(indices) < 2:\n                return\n            index1 = indices[-2]\n            index2 = indices[-1]\n            score1 = float(np.asarray(new_history[index1], dtype=float).reshape(-1)[0])\n            # x1, y1, s1, r1 = box1\n            # w1 = np.sqrt(s1 * r1)\n            # h1 = np.sqrt(s1 / r1)\n            score2 = float(np.asarray(new_history[index2], dtype=float).reshape(-1)[0])\n            # x2, y2, s2, r2 = box2\n            # w2 = np.sqrt(s2 * r2)\n            # h2 = np.sqrt(s2 / r2)\n            time_gap = index2 - index1\n            # dx = (x2-x1)/time_gap\n            # dy = (y2-y1)/time_gap\n            # dw = (w2-w1)/time_gap\n            # dh = (h2-h1)/time_gap\n            dscore = (score2 - score1) / time_gap\n            for i in range(index2 - index1):\n                \"\"\"\n                    The default virtual trajectory generation is by linear\n                    motion (constant speed hypothesis), you could modify this \n                    part to implement your own. \n                \"\"\"\n                # x = x1 + (i+1) * dx\n                # y = y1 + (i+1) * dy\n                # w = w1 + (i+1) * dw\n                # h = h1 + (i+1) * dh\n                # s = w * h\n                # r = w / float(h)\n                score = score1 + (i+1) * dscore\n                new_score = np.array([[score]], dtype=float)\n                \"\"\"\n                    I still use predict-update loop here to refresh the parameters,\n                    but this can be faster by directly modifying the internal parameters\n                    as suggested in the paper. I keep this naive but slow way for \n                    easy read and understanding\n                \"\"\"\n                self.update(new_score)\n                if not i == (index2-index1-1):\n                    self.predict()\n\n\n    def update(self, z, R=None, H=None, confidence=0.0):\n        \"\"\"\n        Add a new measurement (z) to the Kalman filter.\n        If z is None, nothing is computed. However, x_post and P_post are\n        updated with the prior (x_prior, P_prior), and self.z is set to None.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n            If you pass in a value of H, z must be a column vector the\n            of the correct size.\n        R : np.array, scalar, or None\n            Optionally provide R to override the measurement noise for this\n            one call, otherwise  self.R will be used.\n        H : np.array, or None\n            Optionally provide H to override the measurement function for this\n            one call, otherwise self.H will be used.\n        \"\"\"\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n        # append the observation\n        self.history_obs.append(z)\n        \n        if z is None:\n            if self.observed:\n                \"\"\"\n                    Got no observation so freeze the current parameters for future\n                    potential online smoothing.\n                \"\"\"\n                self.freeze()\n            self.observed = False \n            self.z = np.array([[None]*self.dim_z]).T\n            self.x_post = self.x.copy()\n            self.P_post = self.P.copy()\n            self.y = zeros((self.dim_z, 1))\n            return\n        \n        # self.observed = True\n        if not self.observed:\n            \"\"\"\n                Get observation, use online smoothing to re-update parameters\n            \"\"\"\n            self.unfreeze()\n        self.observed = True\n\n        if R is None:\n            R = self.R\n        elif isscalar(R):\n            R = eye(self.dim_z) * R\n\n        # if self.args.use_nsa_kalman:\n        #     R = [(1 - confidence) * self.args.nsa_kalman_interval * x for x in R]\n\n        if H is None:\n            z = reshape_z(z, self.dim_z, self.x.ndim)\n            H = self.H\n\n        # y = z - Hx\n        # error (residual) between measurement and prediction\n        self.y = z - dot(H, self.x)\n\n        # common subexpression for speed\n        PHT = dot(self.P, H.T)\n\n        # S = HPH' + R\n        # project system uncertainty into measurement space\n        self.S = dot(H, PHT) + R\n        self.SI = self.inv(self.S)\n        # K = PH'inv(S)\n        # map system uncertainty into kalman gain\n        self.K = dot(PHT, self.SI)\n\n        # x = x + Ky\n        # predict new x with residual scaled by the kalman gain\n        self.x = self.x + dot(self.K, self.y)\n\n        # P = (I-KH)P(I-KH)' + KRK'\n        # This is more numerically stable\n        # and works for non-optimal K vs the equation\n        # P = (I-KH)P usually seen in the literature.\n\n        I_KH = self._I - dot(self.K, H)\n        self.P = dot(dot(I_KH, self.P), I_KH.T) + dot(dot(self.K, R), self.K.T)\n\n        # save measurement and posterior state\n        self.z = deepcopy(z)\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n\n    def predict_steadystate(self, u=0, B=None):\n        \"\"\"\n        Predict state (prior) using the Kalman filter state propagation\n        equations. Only x is updated, P is left unchanged. See\n        update_steadstate() for a longer explanation of when to use this\n        method.\n        Parameters\n        ----------\n        u : np.array\n            Optional control vector. If non-zero, it is multiplied by B\n            to create the control input into the system.\n        B : np.array(dim_x, dim_u), or None\n            Optional control transition matrix; a value of None\n            will cause the filter to use `self.B`.\n        \"\"\"\n\n        if B is None:\n            B = self.B\n\n        # x = Fx + Bu\n        if B is not None:\n            self.x = dot(self.F, self.x) + dot(B, u)\n        else:\n            self.x = dot(self.F, self.x)\n\n        # save prior\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n\n    def update_steadystate(self, z):\n        \"\"\"\n        Add a new measurement (z) to the Kalman filter without recomputing\n        the Kalman gain K, the state covariance P, or the system\n        uncertainty S.\n        You can use this for LTI systems since the Kalman gain and covariance\n        converge to a fixed value. Precompute these and assign them explicitly,\n        or run the Kalman filter using the normal predict()/update(0 cycle\n        until they converge.\n        The main advantage of this call is speed. We do significantly less\n        computation, notably avoiding a costly matrix inversion.\n        Use in conjunction with predict_steadystate(), otherwise P will grow\n        without bound.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        Examples\n        --------\n        >>> cv = kinematic_kf(dim=3, order=2) # 3D const velocity filter\n        >>> # let filter converge on representative data, then save k and P\n        >>> for i in range(100):\n        >>>     cv.predict()\n        >>>     cv.update([i, i, i])\n        >>> saved_k = np.copy(cv.K)\n        >>> saved_P = np.copy(cv.P)\n        later on:\n        >>> cv = kinematic_kf(dim=3, order=2) # 3D const velocity filter\n        >>> cv.K = np.copy(saved_K)\n        >>> cv.P = np.copy(saved_P)\n        >>> for i in range(100):\n        >>>     cv.predict_steadystate()\n        >>>     cv.update_steadystate([i, i, i])\n        \"\"\"\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n        if z is None:\n            self.z = np.array([[None]*self.dim_z]).T\n            self.x_post = self.x.copy()\n            self.P_post = self.P.copy()\n            self.y = zeros((self.dim_z, 1))\n            return\n\n        z = reshape_z(z, self.dim_z, self.x.ndim)\n\n        # y = z - Hx\n        # error (residual) between measurement and prediction\n        self.y = z - dot(self.H, self.x)\n\n        # x = x + Ky\n        # predict new x with residual scaled by the kalman gain\n        self.x = self.x + dot(self.K, self.y)\n\n        self.z = deepcopy(z)\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n    def update_correlated(self, z, R=None, H=None):\n        \"\"\" Add a new measurement (z) to the Kalman filter assuming that\n        process noise and measurement noise are correlated as defined in\n        the `self.M` matrix.\n        A partial derivation can be found in [1]\n        If z is None, nothing is changed.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        R : np.array, scalar, or None\n            Optionally provide R to override the measurement noise for this\n            one call, otherwise  self.R will be used.\n        H : np.array,  or None\n            Optionally provide H to override the measurement function for this\n            one call, otherwise  self.H will be used.\n        References\n        ----------\n        .. [1] Bulut, Y. (2011). Applied Kalman filter theory (Doctoral dissertation, Northeastern University).\n               http://people.duke.edu/~hpgavin/SystemID/References/Balut-KalmanFilter-PhD-NEU-2011.pdf\n        \"\"\"\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n        if z is None:\n            self.z = np.array([[None]*self.dim_z]).T\n            self.x_post = self.x.copy()\n            self.P_post = self.P.copy()\n            self.y = zeros((self.dim_z, 1))\n            return\n\n        if R is None:\n            R = self.R\n        elif isscalar(R):\n            R = eye(self.dim_z) * R\n\n        # rename for readability and a tiny extra bit of speed\n        if H is None:\n            z = reshape_z(z, self.dim_z, self.x.ndim)\n            H = self.H\n\n        # handle special case: if z is in form [[z]] but x is not a column\n        # vector dimensions will not match\n        if self.x.ndim == 1 and shape(z) == (1, 1):\n            z = z[0]\n\n        if shape(z) == (): # is it scalar, e.g. z=3 or z=np.array(3)\n            z = np.asarray([z])\n\n        # y = z - Hx\n        # error (residual) between measurement and prediction\n        self.y = z - dot(H, self.x)\n\n        # common subexpression for speed\n        PHT = dot(self.P, H.T)\n\n        # project system uncertainty into measurement space\n        self.S = dot(H, PHT) + dot(H, self.M) + dot(self.M.T, H.T) + R\n        self.SI = self.inv(self.S)\n\n        # K = PH'inv(S)\n        # map system uncertainty into kalman gain\n        self.K = dot(PHT + self.M, self.SI)\n\n        # x = x + Ky\n        # predict new x with residual scaled by the kalman gain\n        self.x = self.x + dot(self.K, self.y)\n        self.P = self.P - dot(self.K, dot(H, self.P) + self.M.T)\n\n        self.z = deepcopy(z)\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n\n    def batch_filter(self, zs, Fs=None, Qs=None, Hs=None,\n                     Rs=None, Bs=None, us=None, update_first=False,\n                     saver=None):\n        \"\"\" Batch processes a sequences of measurements.\n        Parameters\n        ----------\n        zs : list-like\n            list of measurements at each time step `self.dt`. Missing\n            measurements must be represented by `None`.\n        Fs : None, list-like, default=None\n            optional value or list of values to use for the state transition\n            matrix F.\n            If Fs is None then self.F is used for all epochs.\n            Otherwise it must contain a list-like list of F's, one for\n            each epoch.  This allows you to have varying F per epoch.\n        Qs : None, np.array or list-like, default=None\n            optional value or list of values to use for the process error\n            covariance Q.\n            If Qs is None then self.Q is used for all epochs.\n            Otherwise it must contain a list-like list of Q's, one for\n            each epoch.  This allows you to have varying Q per epoch.\n        Hs : None, np.array or list-like, default=None\n            optional list of values to use for the measurement matrix H.\n            If Hs is None then self.H is used for all epochs.\n            If Hs contains a single matrix, then it is used as H for all\n            epochs.\n            Otherwise it must contain a list-like list of H's, one for\n            each epoch.  This allows you to have varying H per epoch.\n        Rs : None, np.array or list-like, default=None\n            optional list of values to use for the measurement error\n            covariance R.\n            If Rs is None then self.R is used for all epochs.\n            Otherwise it must contain a list-like list of R's, one for\n            each epoch.  This allows you to have varying R per epoch.\n        Bs : None, np.array or list-like, default=None\n            optional list of values to use for the control transition matrix B.\n            If Bs is None then self.B is used for all epochs.\n            Otherwise it must contain a list-like list of B's, one for\n            each epoch.  This allows you to have varying B per epoch.\n        us : None, np.array or list-like, default=None\n            optional list of values to use for the control input vector;\n            If us is None then None is used for all epochs (equivalent to 0,\n            or no control input).\n            Otherwise it must contain a list-like list of u's, one for\n            each epoch.\n       update_first : bool, optional, default=False\n            controls whether the order of operations is update followed by\n            predict, or predict followed by update. Default is predict->update.\n        saver : filterpy.common.Saver, optional\n            filterpy.common.Saver object. If provided, saver.save() will be\n            called after every epoch\n        Returns\n        -------\n        means : np.array((n,dim_x,1))\n            array of the state for each time step after the update. Each entry\n            is an np.array. In other words `means[k,:]` is the state at step\n            `k`.\n        covariance : np.array((n,dim_x,dim_x))\n            array of the covariances for each time step after the update.\n            In other words `covariance[k,:,:]` is the covariance at step `k`.\n        means_predictions : np.array((n,dim_x,1))\n            array of the state for each time step after the predictions. Each\n            entry is an np.array. In other words `means[k,:]` is the state at\n            step `k`.\n        covariance_predictions : np.array((n,dim_x,dim_x))\n            array of the covariances for each time step after the prediction.\n            In other words `covariance[k,:,:]` is the covariance at step `k`.\n        Examples\n        --------\n        .. code-block:: Python\n            # this example demonstrates tracking a measurement where the time\n            # between measurement varies, as stored in dts. This requires\n            # that F be recomputed for each epoch. The output is then smoothed\n            # with an RTS smoother.\n            zs = [t + random.randn()*4 for t in range (40)]\n            Fs = [np.array([[1., dt], [0, 1]] for dt in dts]\n            (mu, cov, _, _) = kf.batch_filter(zs, Fs=Fs)\n            (xs, Ps, Ks, Pps) = kf.rts_smoother(mu, cov, Fs=Fs)\n        \"\"\"\n\n        #pylint: disable=too-many-statements\n        n = np.size(zs, 0)\n        if Fs is None:\n            Fs = [self.F] * n\n        if Qs is None:\n            Qs = [self.Q] * n\n        if Hs is None:\n            Hs = [self.H] * n\n        if Rs is None:\n            Rs = [self.R] * n\n        if Bs is None:\n            Bs = [self.B] * n\n        if us is None:\n            us = [0] * n\n\n        # mean estimates from Kalman Filter\n        if self.x.ndim == 1:\n            means = zeros((n, self.dim_x))\n            means_p = zeros((n, self.dim_x))\n        else:\n            means = zeros((n, self.dim_x, 1))\n            means_p = zeros((n, self.dim_x, 1))\n\n        # state covariances from Kalman Filter\n        covariances = zeros((n, self.dim_x, self.dim_x))\n        covariances_p = zeros((n, self.dim_x, self.dim_x))\n\n        if update_first:\n            for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n                self.update(z, R=R, H=H)\n                means[i, :] = self.x\n                covariances[i, :, :] = self.P\n\n                self.predict(u=u, B=B, F=F, Q=Q)\n                means_p[i, :] = self.x\n                covariances_p[i, :, :] = self.P\n\n                if saver is not None:\n                    saver.save()\n        else:\n            for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n                self.predict(u=u, B=B, F=F, Q=Q)\n                means_p[i, :] = self.x\n                covariances_p[i, :, :] = self.P\n\n                self.update(z, R=R, H=H)\n                means[i, :] = self.x\n                covariances[i, :, :] = self.P\n\n                if saver is not None:\n                    saver.save()\n\n        return (means, covariances, means_p, covariances_p)\n\n    def rts_smoother(self, Xs, Ps, Fs=None, Qs=None, inv=np.linalg.inv):\n        \"\"\"\n        Runs the Rauch-Tung-Striebel Kalman smoother on a set of\n        means and covariances computed by a Kalman filter. The usual input\n        would come from the output of `KalmanFilter.batch_filter()`.\n        Parameters\n        ----------\n        Xs : numpy.array\n           array of the means (state variable x) of the output of a Kalman\n           filter.\n        Ps : numpy.array\n            array of the covariances of the output of a kalman filter.\n        Fs : list-like collection of numpy.array, optional\n            State transition matrix of the Kalman filter at each time step.\n            Optional, if not provided the filter's self.F will be used\n        Qs : list-like collection of numpy.array, optional\n            Process noise of the Kalman filter at each time step. Optional,\n            if not provided the filter's self.Q will be used\n        inv : function, default numpy.linalg.inv\n            If you prefer another inverse function, such as the Moore-Penrose\n            pseudo inverse, set it to that instead: kf.inv = np.linalg.pinv\n        Returns\n        -------\n        x : numpy.ndarray\n           smoothed means\n        P : numpy.ndarray\n           smoothed state covariances\n        K : numpy.ndarray\n            smoother gain at each step\n        Pp : numpy.ndarray\n           Predicted state covariances\n        Examples\n        --------\n        .. code-block:: Python\n            zs = [t + random.randn()*4 for t in range (40)]\n            (mu, cov, _, _) = kalman.batch_filter(zs)\n            (x, P, K, Pp) = rts_smoother(mu, cov, kf.F, kf.Q)\n        \"\"\"\n\n        if len(Xs) != len(Ps):\n            raise ValueError('length of Xs and Ps must be the same')\n\n        n = Xs.shape[0]\n        dim_x = Xs.shape[1]\n\n        if Fs is None:\n            Fs = [self.F] * n\n        if Qs is None:\n            Qs = [self.Q] * n\n\n        # smoother gain\n        K = zeros((n, dim_x, dim_x))\n\n        x, P, Pp = Xs.copy(), Ps.copy(), Ps.copy()\n        for k in range(n-2, -1, -1):\n            Pp[k] = dot(dot(Fs[k+1], P[k]), Fs[k+1].T) + Qs[k+1]\n\n            #pylint: disable=bad-whitespace\n            K[k]  = dot(dot(P[k], Fs[k+1].T), inv(Pp[k]))\n            x[k] += dot(K[k], x[k+1] - dot(Fs[k+1], x[k]))\n            P[k] += dot(dot(K[k], P[k+1] - Pp[k]), K[k].T)\n\n        return (x, P, K, Pp)\n\n    def get_prediction(self, u=None, B=None, F=None, Q=None):\n        \"\"\"\n        Predict next state (prior) using the Kalman filter state propagation\n        equations and returns it without modifying the object.\n        Parameters\n        ----------\n        u : np.array, default 0\n            Optional control vector.\n        B : np.array(dim_x, dim_u), or None\n            Optional control transition matrix; a value of None\n            will cause the filter to use `self.B`.\n        F : np.array(dim_x, dim_x), or None\n            Optional state transition matrix; a value of None\n            will cause the filter to use `self.F`.\n        Q : np.array(dim_x, dim_x), scalar, or None\n            Optional process noise matrix; a value of None will cause the\n            filter to use `self.Q`.\n        Returns\n        -------\n        (x, P) : tuple\n            State vector and covariance array of the prediction.\n        \"\"\"\n\n        if B is None:\n            B = self.B\n        if F is None:\n            F = self.F\n        if Q is None:\n            Q = self.Q\n        elif isscalar(Q):\n            Q = eye(self.dim_x) * Q\n\n        # x = Fx + Bu\n        if B is not None and u is not None:\n            x = dot(F, self.x) + dot(B, u)\n        else:\n            x = dot(F, self.x)\n\n        # P = FPF' + Q\n        P = self._alpha_sq * dot(dot(F, self.P), F.T) + Q\n\n        return x, P\n\n    def get_update(self, z=None):\n        \"\"\"\n        Computes the new estimate based on measurement `z` and returns it\n        without altering the state of the filter.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        Returns\n        -------\n        (x, P) : tuple\n            State vector and covariance array of the update.\n       \"\"\"\n\n        if z is None:\n            return self.x, self.P\n        z = reshape_z(z, self.dim_z, self.x.ndim)\n\n        R = self.R\n        H = self.H\n        P = self.P\n        x = self.x\n\n        # error (residual) between measurement and prediction\n        y = z - dot(H, x)\n\n        # common subexpression for speed\n        PHT = dot(P, H.T)\n\n        # project system uncertainty into measurement space\n        S = dot(H, PHT) + R\n\n        # map system uncertainty into kalman gain\n        K = dot(PHT, self.inv(S))\n\n        # predict new x with residual scaled by the kalman gain\n        x = x + dot(K, y)\n\n        # P = (I-KH)P(I-KH)' + KRK'\n        I_KH = self._I - dot(K, H)\n        P = dot(dot(I_KH, P), I_KH.T) + dot(dot(K, R), K.T)\n\n        return x, P\n\n    def residual_of(self, z):\n        \"\"\"\n        Returns the residual for the given measurement (z). Does not alter\n        the state of the filter.\n        \"\"\"\n        z = reshape_z(z, self.dim_z, self.x.ndim)\n        return z - dot(self.H, self.x_prior)\n\n    def measurement_of_state(self, x):\n        \"\"\"\n        Helper function that converts a state into a measurement.\n        Parameters\n        ----------\n        x : np.array\n            kalman state vector\n        Returns\n        -------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        \"\"\"\n\n        return dot(self.H, x)\n\n    @property\n    def log_likelihood(self):\n        \"\"\"\n        log-likelihood of the last measurement.\n        \"\"\"\n        if self._log_likelihood is None:\n            self._log_likelihood = logpdf(x=self.y, cov=self.S)\n        return self._log_likelihood\n\n    @property\n    def likelihood(self):\n        \"\"\"\n        Computed from the log-likelihood. The log-likelihood can be very\n        small,  meaning a large negative value such as -28000. Taking the\n        exp() of that results in 0.0, which can break typical algorithms\n        which multiply by this value, so by default we always return a\n        number >= sys.float_info.min.\n        \"\"\"\n        if self._likelihood is None:\n            self._likelihood = exp(self.log_likelihood)\n            if self._likelihood == 0:\n                self._likelihood = sys.float_info.min\n        return self._likelihood\n\n    @property\n    def mahalanobis(self):\n        \"\"\"\"\n        Mahalanobis distance of measurement. E.g. 3 means measurement\n        was 3 standard deviations away from the predicted value.\n        Returns\n        -------\n        mahalanobis : float\n        \"\"\"\n        if self._mahalanobis is None:\n            self._mahalanobis = sqrt(float(dot(dot(self.y.T, self.SI), self.y)))\n        return self._mahalanobis\n\n    @property\n    def alpha(self):\n        \"\"\"\n        Fading memory setting. 1.0 gives the normal Kalman filter, and\n        values slightly larger than 1.0 (such as 1.02) give a fading\n        memory effect - previous measurements have less influence on the\n        filter's estimates. This formulation of the Fading memory filter\n        (there are many) is due to Dan Simon [1]_.\n        \"\"\"\n        return self._alpha_sq**.5\n\n    def log_likelihood_of(self, z):\n        \"\"\"\n        log likelihood of the measurement `z`. This should only be called\n        after a call to update(). Calling after predict() will yield an\n        incorrect result.\"\"\"\n\n        if z is None:\n            return log(sys.float_info.min)\n        return logpdf(z, dot(self.H, self.x), self.S)\n\n    @alpha.setter\n    def alpha(self, value):\n        if not np.isscalar(value) or value < 1:\n            raise ValueError('alpha must be a float greater than 1')\n\n        self._alpha_sq = value**2\n\n    def __repr__(self):\n        return '\\n'.join([\n            'KalmanFilter object',\n            pretty_str('dim_x', self.dim_x),\n            pretty_str('dim_z', self.dim_z),\n            pretty_str('dim_u', self.dim_u),\n            pretty_str('x', self.x),\n            pretty_str('P', self.P),\n            pretty_str('x_prior', self.x_prior),\n            pretty_str('P_prior', self.P_prior),\n            pretty_str('x_post', self.x_post),\n            pretty_str('P_post', self.P_post),\n            pretty_str('F', self.F),\n            pretty_str('Q', self.Q),\n            pretty_str('R', self.R),\n            pretty_str('H', self.H),\n            pretty_str('K', self.K),\n            pretty_str('y', self.y),\n            pretty_str('S', self.S),\n            pretty_str('SI', self.SI),\n            pretty_str('M', self.M),\n            pretty_str('B', self.B),\n            pretty_str('z', self.z),\n            pretty_str('log-likelihood', self.log_likelihood),\n            pretty_str('likelihood', self.likelihood),\n            pretty_str('mahalanobis', self.mahalanobis),\n            pretty_str('alpha', self.alpha),\n            pretty_str('inv', self.inv)\n            ])\n\n    def test_matrix_dimensions(self, z=None, H=None, R=None, F=None, Q=None):\n        \"\"\"\n        Performs a series of asserts to check that the size of everything\n        is what it should be. This can help you debug problems in your design.\n        If you pass in H, R, F, Q those will be used instead of this object's\n        value for those matrices.\n        Testing `z` (the measurement) is problamatic. x is a vector, and can be\n        implemented as either a 1D array or as a nx1 column vector. Thus Hx\n        can be of different shapes. Then, if Hx is a single value, it can\n        be either a 1D array or 2D vector. If either is true, z can reasonably\n        be a scalar (either '3' or np.array('3') are scalars under this\n        definition), a 1D, 1 element array, or a 2D, 1 element array. You are\n        allowed to pass in any combination that works.\n        \"\"\"\n\n        if H is None:\n            H = self.H\n        if R is None:\n            R = self.R\n        if F is None:\n            F = self.F\n        if Q is None:\n            Q = self.Q\n        x = self.x\n        P = self.P\n\n        assert x.ndim == 1 or x.ndim == 2, \\\n                \"x must have one or two dimensions, but has {}\".format(x.ndim)\n\n        if x.ndim == 1:\n            assert x.shape[0] == self.dim_x, \\\n                   \"Shape of x must be ({},{}), but is {}\".format(\n                       self.dim_x, 1, x.shape)\n        else:\n            assert x.shape == (self.dim_x, 1), \\\n                   \"Shape of x must be ({},{}), but is {}\".format(\n                       self.dim_x, 1, x.shape)\n\n        assert P.shape == (self.dim_x, self.dim_x), \\\n               \"Shape of P must be ({},{}), but is {}\".format(\n                   self.dim_x, self.dim_x, P.shape)\n\n        assert Q.shape == (self.dim_x, self.dim_x), \\\n               \"Shape of Q must be ({},{}), but is {}\".format(\n                   self.dim_x, self.dim_x, P.shape)\n\n        assert F.shape == (self.dim_x, self.dim_x), \\\n               \"Shape of F must be ({},{}), but is {}\".format(\n                   self.dim_x, self.dim_x, F.shape)\n\n        assert np.ndim(H) == 2, \\\n               \"Shape of H must be (dim_z, {}), but is {}\".format(\n                   P.shape[0], shape(H))\n\n        assert H.shape[1] == P.shape[0], \\\n               \"Shape of H must be (dim_z, {}), but is {}\".format(\n                   P.shape[0], H.shape)\n\n        # shape of R must be the same as HPH'\n        hph_shape = (H.shape[0], H.shape[0])\n        r_shape = shape(R)\n\n        if H.shape[0] == 1:\n            # r can be scalar, 1D, or 2D in this case\n            assert r_shape in [(), (1,), (1, 1)], \\\n            \"R must be scalar or one element array, but is shaped {}\".format(\n                r_shape)\n        else:\n            assert r_shape == hph_shape, \\\n            \"shape of R should be {} but it is {}\".format(hph_shape, r_shape)\n\n\n        if z is not None:\n            z_shape = shape(z)\n        else:\n            z_shape = (self.dim_z, 1)\n\n        # H@x must have shape of z\n        Hx = dot(H, x)\n\n        if z_shape == (): # scalar or np.array(scalar)\n            assert Hx.ndim == 1 or shape(Hx) == (1, 1), \\\n            \"shape of z should be {}, not {} for the given H\".format(\n                shape(Hx), z_shape)\n\n        elif shape(Hx) == (1,):\n            assert z_shape[0] == 1, 'Shape of z must be {} for the given H'.format(shape(Hx))\n\n        else:\n            assert (z_shape == shape(Hx) or\n                    (len(z_shape) == 1 and shape(Hx) == (z_shape[0], 1))), \\\n                    \"shape of z should be {}, not {} for the given H\".format(\n                        shape(Hx), z_shape)\n\n        if np.ndim(Hx) > 1 and shape(Hx) != (1, 1):\n            assert shape(Hx) == z_shape, \\\n               'shape of z should be {} for the given H, but it is {}'.format(\n                   shape(Hx), z_shape)\n\n\ndef update(x, P, z, R, H=None, return_all=False):\n    \"\"\"\n    Add a new measurement (z) to the Kalman filter. If z is None, nothing\n    is changed.\n    This can handle either the multidimensional or unidimensional case. If\n    all parameters are floats instead of arrays the filter will still work,\n    and return floats for x, P as the result.\n    update(1, 2, 1, 1, 1)  # univariate\n    update(x, P, 1\n    Parameters\n    ----------\n    x : numpy.array(dim_x, 1), or float\n        State estimate vector\n    P : numpy.array(dim_x, dim_x), or float\n        Covariance matrix\n    z : (dim_z, 1): array_like\n        measurement for this update. z can be a scalar if dim_z is 1,\n        otherwise it must be convertible to a column vector.\n    R : numpy.array(dim_z, dim_z), or float\n        Measurement noise matrix\n    H : numpy.array(dim_x, dim_x), or float, optional\n        Measurement function. If not provided, a value of 1 is assumed.\n    return_all : bool, default False\n        If true, y, K, S, and log_likelihood are returned, otherwise\n        only x and P are returned.\n    Returns\n    -------\n    x : numpy.array\n        Posterior state estimate vector\n    P : numpy.array\n        Posterior covariance matrix\n    y : numpy.array or scalar\n        Residua. Difference between measurement and state in measurement space\n    K : numpy.array\n        Kalman gain\n    S : numpy.array\n        System uncertainty in measurement space\n    log_likelihood : float\n        log likelihood of the measurement\n    \"\"\"\n\n    #pylint: disable=bare-except\n\n    if z is None:\n        if return_all:\n            return x, P, None, None, None, None\n        return x, P\n\n    if H is None:\n        H = np.array([1])\n\n    if np.isscalar(H):\n        H = np.array([H])\n\n    Hx = np.atleast_1d(dot(H, x))\n    z = reshape_z(z, Hx.shape[0], x.ndim)\n\n    # error (residual) between measurement and prediction\n    y = z - Hx\n\n    # project system uncertainty into measurement space\n    S = dot(dot(H, P), H.T) + R\n\n\n    # map system uncertainty into kalman gain\n    try:\n        K = dot(dot(P, H.T), linalg.inv(S))\n    except:\n        # can't invert a 1D array, annoyingly\n        K = dot(dot(P, H.T), 1./S)\n\n\n    # predict new x with residual scaled by the kalman gain\n    x = x + dot(K, y)\n\n    # P = (I-KH)P(I-KH)' + KRK'\n    KH = dot(K, H)\n\n    try:\n        I_KH = np.eye(KH.shape[0]) - KH\n    except:\n        I_KH = np.array([1 - KH])\n    P = dot(dot(I_KH, P), I_KH.T) + dot(dot(K, R), K.T)\n\n\n    if return_all:\n        # compute log likelihood\n        log_likelihood = logpdf(z, dot(H, x), S)\n        return x, P, y, K, S, log_likelihood\n    return x, P\n\n\ndef update_steadystate(x, z, K, H=None):\n    \"\"\"\n    Add a new measurement (z) to the Kalman filter. If z is None, nothing\n    is changed.\n    Parameters\n    ----------\n    x : numpy.array(dim_x, 1), or float\n        State estimate vector\n    z : (dim_z, 1): array_like\n        measurement for this update. z can be a scalar if dim_z is 1,\n        otherwise it must be convertible to a column vector.\n    K : numpy.array, or float\n        Kalman gain matrix\n    H : numpy.array(dim_x, dim_x), or float, optional\n        Measurement function. If not provided, a value of 1 is assumed.\n    Returns\n    -------\n    x : numpy.array\n        Posterior state estimate vector\n    Examples\n    --------\n    This can handle either the multidimensional or unidimensional case. If\n    all parameters are floats instead of arrays the filter will still work,\n    and return floats for x, P as the result.\n    >>> update_steadystate(1, 2, 1)  # univariate\n    >>> update_steadystate(x, P, z, H)\n    \"\"\"\n\n\n    if z is None:\n        return x\n\n    if H is None:\n        H = np.array([1])\n\n    if np.isscalar(H):\n        H = np.array([H])\n\n    Hx = np.atleast_1d(dot(H, x))\n    z = reshape_z(z, Hx.shape[0], x.ndim)\n\n    # error (residual) between measurement and prediction\n    y = z - Hx\n\n    # estimate new x with residual scaled by the kalman gain\n    return x + dot(K, y)\n\n\ndef predict(x, P, F=1, Q=0, u=0, B=1, alpha=1.):\n    \"\"\"\n    Predict next state (prior) using the Kalman filter state propagation\n    equations.\n    Parameters\n    ----------\n    x : numpy.array\n        State estimate vector\n    P : numpy.array\n        Covariance matrix\n    F : numpy.array()\n        State Transition matrix\n    Q : numpy.array, Optional\n        Process noise matrix\n    u : numpy.array, Optional, default 0.\n        Control vector. If non-zero, it is multiplied by B\n        to create the control input into the system.\n    B : numpy.array, optional, default 0.\n        Control transition matrix.\n    alpha : float, Optional, default=1.0\n        Fading memory setting. 1.0 gives the normal Kalman filter, and\n        values slightly larger than 1.0 (such as 1.02) give a fading\n        memory effect - previous measurements have less influence on the\n        filter's estimates. This formulation of the Fading memory filter\n        (there are many) is due to Dan Simon\n    Returns\n    -------\n    x : numpy.array\n        Prior state estimate vector\n    P : numpy.array\n        Prior covariance matrix\n    \"\"\"\n\n    if np.isscalar(F):\n        F = np.array(F)\n    x = dot(F, x) + dot(B, u)\n    P = (alpha * alpha) * dot(dot(F, P), F.T) + Q\n\n    return x, P\n\n\ndef predict_steadystate(x, F=1, u=0, B=1):\n    \"\"\"\n    Predict next state (prior) using the Kalman filter state propagation\n    equations. This steady state form only computes x, assuming that the\n    covariance is constant.\n    Parameters\n    ----------\n    x : numpy.array\n        State estimate vector\n    P : numpy.array\n        Covariance matrix\n    F : numpy.array()\n        State Transition matrix\n    u : numpy.array, Optional, default 0.\n        Control vector. If non-zero, it is multiplied by B\n        to create the control input into the system.\n    B : numpy.array, optional, default 0.\n        Control transition matrix.\n    Returns\n    -------\n    x : numpy.array\n        Prior state estimate vector\n    \"\"\"\n\n    if np.isscalar(F):\n        F = np.array(F)\n    x = dot(F, x) + dot(B, u)\n\n    return x\n\n\n\ndef batch_filter(x, P, zs, Fs, Qs, Hs, Rs, Bs=None, us=None,\n                 update_first=False, saver=None):\n    \"\"\"\n    Batch processes a sequences of measurements.\n    Parameters\n    ----------\n    zs : list-like\n        list of measurements at each time step. Missing measurements must be\n        represented by None.\n    Fs : list-like\n        list of values to use for the state transition matrix matrix.\n    Qs : list-like\n        list of values to use for the process error\n        covariance.\n    Hs : list-like\n        list of values to use for the measurement matrix.\n    Rs : list-like\n        list of values to use for the measurement error\n        covariance.\n    Bs : list-like, optional\n        list of values to use for the control transition matrix;\n        a value of None in any position will cause the filter\n        to use `self.B` for that time step.\n    us : list-like, optional\n        list of values to use for the control input vector;\n        a value of None in any position will cause the filter to use\n        0 for that time step.\n    update_first : bool, optional\n        controls whether the order of operations is update followed by\n        predict, or predict followed by update. Default is predict->update.\n        saver : filterpy.common.Saver, optional\n            filterpy.common.Saver object. If provided, saver.save() will be\n            called after every epoch\n    Returns\n    -------\n    means : np.array((n,dim_x,1))\n        array of the state for each time step after the update. Each entry\n        is an np.array. In other words `means[k,:]` is the state at step\n        `k`.\n    covariance : np.array((n,dim_x,dim_x))\n        array of the covariances for each time step after the update.\n        In other words `covariance[k,:,:]` is the covariance at step `k`.\n    means_predictions : np.array((n,dim_x,1))\n        array of the state for each time step after the predictions. Each\n        entry is an np.array. In other words `means[k,:]` is the state at\n        step `k`.\n    covariance_predictions : np.array((n,dim_x,dim_x))\n        array of the covariances for each time step after the prediction.\n        In other words `covariance[k,:,:]` is the covariance at step `k`.\n    Examples\n    --------\n    .. code-block:: Python\n        zs = [t + random.randn()*4 for t in range (40)]\n        Fs = [kf.F for t in range (40)]\n        Hs = [kf.H for t in range (40)]\n        (mu, cov, _, _) = kf.batch_filter(zs, Rs=R_list, Fs=Fs, Hs=Hs, Qs=None,\n                                          Bs=None, us=None, update_first=False)\n        (xs, Ps, Ks, Pps) = kf.rts_smoother(mu, cov, Fs=Fs, Qs=None)\n    \"\"\"\n\n    n = np.size(zs, 0)\n    dim_x = x.shape[0]\n\n    # mean estimates from Kalman Filter\n    if x.ndim == 1:\n        means = zeros((n, dim_x))\n        means_p = zeros((n, dim_x))\n    else:\n        means = zeros((n, dim_x, 1))\n        means_p = zeros((n, dim_x, 1))\n\n    # state covariances from Kalman Filter\n    covariances = zeros((n, dim_x, dim_x))\n    covariances_p = zeros((n, dim_x, dim_x))\n\n    if us is None:\n        us = [0.] * n\n        Bs = [0.] * n\n\n    if update_first:\n        for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n            x, P = update(x, P, z, R=R, H=H)\n            means[i, :] = x\n            covariances[i, :, :] = P\n\n            x, P = predict(x, P, u=u, B=B, F=F, Q=Q)\n            means_p[i, :] = x\n            covariances_p[i, :, :] = P\n            if saver is not None:\n                saver.save()\n    else:\n        for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n            x, P = predict(x, P, u=u, B=B, F=F, Q=Q)\n            means_p[i, :] = x\n            covariances_p[i, :, :] = P\n\n            x, P = update(x, P, z, R=R, H=H)\n            means[i, :] = x\n            covariances[i, :, :] = P\n            if saver is not None:\n                saver.save()\n\n    return (means, covariances, means_p, covariances_p)\n\n\n\ndef rts_smoother(Xs, Ps, Fs, Qs):\n    \"\"\"\n    Runs the Rauch-Tung-Striebel Kalman smoother on a set of\n    means and covariances computed by a Kalman filter. The usual input\n    would come from the output of `KalmanFilter.batch_filter()`.\n    Parameters\n    ----------\n    Xs : numpy.array\n       array of the means (state variable x) of the output of a Kalman\n       filter.\n    Ps : numpy.array\n        array of the covariances of the output of a kalman filter.\n    Fs : list-like collection of numpy.array\n        State transition matrix of the Kalman filter at each time step.\n    Qs : list-like collection of numpy.array, optional\n        Process noise of the Kalman filter at each time step.\n    Returns\n    -------\n    x : numpy.ndarray\n       smoothed means\n    P : numpy.ndarray\n       smoothed state covariances\n    K : numpy.ndarray\n        smoother gain at each step\n    pP : numpy.ndarray\n       predicted state covariances\n    Examples\n    --------\n    .. code-block:: Python\n        zs = [t + random.randn()*4 for t in range (40)]\n        (mu, cov, _, _) = kalman.batch_filter(zs)\n        (x, P, K, pP) = rts_smoother(mu, cov, kf.F, kf.Q)\n    \"\"\"\n\n    if len(Xs) != len(Ps):\n        raise ValueError('length of Xs and Ps must be the same')\n\n    n = Xs.shape[0]\n    dim_x = Xs.shape[1]\n\n    # smoother gain\n    K = zeros((n, dim_x, dim_x))\n    x, P, pP = Xs.copy(), Ps.copy(), Ps.copy()\n\n    for k in range(n-2, -1, -1):\n        pP[k] = dot(dot(Fs[k], P[k]), Fs[k].T) + Qs[k]\n\n        #pylint: disable=bad-whitespace\n        K[k]  = dot(dot(P[k], Fs[k].T), linalg.inv(pP[k]))\n        x[k] += dot(K[k], x[k+1] - dot(Fs[k], x[k]))\n        P[k] += dot(dot(K[k], P[k+1] - pP[k]), K[k].T)\n\n    return (x, P, K, pP)\n"
  },
  {
    "path": "boxmot/trackers/hybridsort/kalmanfilter_score_new.py",
    "content": "# -*- coding: utf-8 -*-\n# pylint: disable=invalid-name, too-many-arguments, too-many-branches,\n# pylint: disable=too-many-locals, too-many-instance-attributes, too-many-lines\n\n\"\"\"\nThis module implements the linear Kalman filter in both an object\noriented and procedural form. The KalmanFilter class implements\nthe filter by storing the various matrices in instance variables,\nminimizing the amount of bookkeeping you have to do.\nAll Kalman filters operate with a predict->update cycle. The\npredict step, implemented with the method or function predict(),\nuses the state transition matrix F to predict the state in the next\ntime period (epoch). The state is stored as a gaussian (x, P), where\nx is the state (column) vector, and P is its covariance. Covariance\nmatrix Q specifies the process covariance. In Bayesian terms, this\nprediction is called the *prior*, which you can think of colloquially\nas the estimate prior to incorporating the measurement.\nThe update step, implemented with the method or function `update()`,\nincorporates the measurement z with covariance R, into the state\nestimate (x, P). The class stores the system uncertainty in S,\nthe innovation (residual between prediction and measurement in\nmeasurement space) in y, and the Kalman gain in k. The procedural\nform returns these variables to you. In Bayesian terms this computes\nthe *posterior* - the estimate after the information from the\nmeasurement is incorporated.\nWhether you use the OO form or procedural form is up to you. If\nmatrices such as H, R, and F are changing each epoch, you'll probably\nopt to use the procedural form. If they are unchanging, the OO\nform is perhaps easier to use since you won't need to keep track\nof these matrices. This is especially useful if you are implementing\nbanks of filters or comparing various KF designs for performance;\na trivial coding bug could lead to using the wrong sets of matrices.\nThis module also offers an implementation of the RTS smoother, and\nother helper functions, such as log likelihood computations.\nThe Saver class allows you to easily save the state of the\nKalmanFilter class after every update\nThis module expects NumPy arrays for all values that expect\narrays, although in a few cases, particularly method parameters,\nit will accept types that convert to NumPy arrays, such as lists\nof lists. These exceptions are documented in the method or function.\nExamples\n--------\nThe following example constructs a constant velocity kinematic\nfilter, filters noisy data, and plots the results. It also demonstrates\nusing the Saver class to save the state of the filter at each epoch.\n.. code-block:: Python\n    import matplotlib.pyplot as plt\n    import numpy as np\n    from filterpy.kalman import KalmanFilter\n    from filterpy.common import Q_discrete_white_noise, Saver\n    r_std, q_std = 2., 0.003\n    cv = KalmanFilter(dim_x=2, dim_z=1)\n    cv.x = np.array([[0., 1.]]) # position, velocity\n    cv.F = np.array([[1, dt],[ [0, 1]])\n    cv.R = np.array([[r_std^^2]])\n    f.H = np.array([[1., 0.]])\n    f.P = np.diag([.1^^2, .03^^2)\n    f.Q = Q_discrete_white_noise(2, dt, q_std**2)\n    saver = Saver(cv)\n    for z in range(100):\n        cv.predict()\n        cv.update([z + randn() * r_std])\n        saver.save() # save the filter's state\n    saver.to_array()\n    plt.plot(saver.x[:, 0])\n    # plot all of the priors\n    plt.plot(saver.x_prior[:, 0])\n    # plot mahalanobis distance\n    plt.figure()\n    plt.plot(saver.mahalanobis)\nThis code implements the same filter using the procedural form\n    x = np.array([[0., 1.]]) # position, velocity\n    F = np.array([[1, dt],[ [0, 1]])\n    R = np.array([[r_std^^2]])\n    H = np.array([[1., 0.]])\n    P = np.diag([.1^^2, .03^^2)\n    Q = Q_discrete_white_noise(2, dt, q_std**2)\n    for z in range(100):\n        x, P = predict(x, P, F=F, Q=Q)\n        x, P = update(x, P, z=[z + randn() * r_std], R=R, H=H)\n        xs.append(x[0, 0])\n    plt.plot(xs)\nFor more examples see the test subdirectory, or refer to the\nbook cited below. In it I both teach Kalman filtering from basic\nprinciples, and teach the use of this library in great detail.\nFilterPy library.\nhttp://github.com/rlabbe/filterpy\nDocumentation at:\nhttps://filterpy.readthedocs.org\nSupporting book at:\nhttps://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python\nThis is licensed under an MIT license. See the readme.MD file\nfor more information.\nCopyright 2014-2018 Roger R Labbe Jr.\n\"\"\"\n\nfrom __future__ import absolute_import, division\n\nimport sys\nfrom copy import deepcopy\nfrom math import exp, log, sqrt\n\nimport numpy as np\nimport numpy.linalg as linalg\nfrom filterpy.common import pretty_str, reshape_z\nfrom filterpy.stats import logpdf\nfrom numpy import dot, eye, isscalar, shape, zeros\n\n\nclass KalmanFilterNew_score_new(object):\n    \"\"\" Implements a Kalman filter. You are responsible for setting the\n    various state variables to reasonable values; the defaults  will\n    not give you a functional filter.\n    For now the best documentation is my free book Kalman and Bayesian\n    Filters in Python [2]_. The test files in this directory also give you a\n    basic idea of use, albeit without much description.\n    In brief, you will first construct this object, specifying the size of\n    the state vector with dim_x and the size of the measurement vector that\n    you will be using with dim_z. These are mostly used to perform size checks\n    when you assign values to the various matrices. For example, if you\n    specified dim_z=2 and then try to assign a 3x3 matrix to R (the\n    measurement noise matrix you will get an assert exception because R\n    should be 2x2. (If for whatever reason you need to alter the size of\n    things midstream just use the underscore version of the matrices to\n    assign directly: your_filter._R = a_3x3_matrix.)\n    After construction the filter will have default matrices created for you,\n    but you must specify the values for each. It’s usually easiest to just\n    overwrite them rather than assign to each element yourself. This will be\n    clearer in the example below. All are of type numpy.array.\n    Examples\n    --------\n    Here is a filter that tracks position and velocity using a sensor that only\n    reads position.\n    First construct the object with the required dimensionality. Here the state\n    (`dim_x`) has 2 coefficients (position and velocity), and the measurement\n    (`dim_z`) has one. In FilterPy `x` is the state, `z` is the measurement.\n    .. code::\n        from filterpy.kalman import KalmanFilter\n        f = KalmanFilter (dim_x=2, dim_z=1)\n    Assign the initial value for the state (position and velocity). You can do this\n    with a two dimensional array like so:\n        .. code::\n            f.x = np.array([[2.],    # position\n                            [0.]])   # velocity\n    or just use a one dimensional array, which I prefer doing.\n    .. code::\n        f.x = np.array([2., 0.])\n    Define the state transition matrix:\n        .. code::\n            f.F = np.array([[1.,1.],\n                            [0.,1.]])\n    Define the measurement function. Here we need to convert a position-velocity\n    vector into just a position vector, so we use:\n        .. code::\n        f.H = np.array([[1., 0.]])\n    Define the state's covariance matrix P. \n    .. code::\n        f.P = np.array([[1000.,    0.],\n                        [   0., 1000.] ])\n    Now assign the measurement noise. Here the dimension is 1x1, so I can\n    use a scalar\n    .. code::\n        f.R = 5\n    I could have done this instead:\n    .. code::\n        f.R = np.array([[5.]])\n    Note that this must be a 2 dimensional array.\n    Finally, I will assign the process noise. Here I will take advantage of\n    another FilterPy library function:\n    .. code::\n        from filterpy.common import Q_discrete_white_noise\n        f.Q = Q_discrete_white_noise(dim=2, dt=0.1, var=0.13)\n    Now just perform the standard predict/update loop:\n    .. code::\n        while some_condition_is_true:\n            z = get_sensor_reading()\n            f.predict()\n            f.update(z)\n            do_something_with_estimate (f.x)\n    **Procedural Form**\n    This module also contains stand alone functions to perform Kalman filtering.\n    Use these if you are not a fan of objects.\n    **Example**\n    .. code::\n        while True:\n            z, R = read_sensor()\n            x, P = predict(x, P, F, Q)\n            x, P = update(x, P, z, R, H)\n    See my book Kalman and Bayesian Filters in Python [2]_.\n    You will have to set the following attributes after constructing this\n    object for the filter to perform properly. Please note that there are\n    various checks in place to ensure that you have made everything the\n    'correct' size. However, it is possible to provide incorrectly sized\n    arrays such that the linear algebra can not perform an operation.\n    It can also fail silently - you can end up with matrices of a size that\n    allows the linear algebra to work, but are the wrong shape for the problem\n    you are trying to solve.\n    Parameters\n    ----------\n    dim_x : int\n        Number of state variables for the Kalman filter. For example, if\n        you are tracking the position and velocity of an object in two\n        dimensions, dim_x would be 4.\n        This is used to set the default size of P, Q, and u\n    dim_z : int\n        Number of of measurement inputs. For example, if the sensor\n        provides you with position in (x,y), dim_z would be 2.\n    dim_u : int (optional)\n        size of the control input, if it is being used.\n        Default value of 0 indicates it is not used.\n    compute_log_likelihood : bool (default = True)\n        Computes log likelihood by default, but this can be a slow\n        computation, so if you never use it you can turn this computation\n        off.\n    Attributes\n    ----------\n    x : numpy.array(dim_x, 1)\n        Current state estimate. Any call to update() or predict() updates\n        this variable.\n    P : numpy.array(dim_x, dim_x)\n        Current state covariance matrix. Any call to update() or predict()\n        updates this variable.\n    x_prior : numpy.array(dim_x, 1)\n        Prior (predicted) state estimate. The *_prior and *_post attributes\n        are for convenience; they store the  prior and posterior of the\n        current epoch. Read Only.\n    P_prior : numpy.array(dim_x, dim_x)\n        Prior (predicted) state covariance matrix. Read Only.\n    x_post : numpy.array(dim_x, 1)\n        Posterior (updated) state estimate. Read Only.\n    P_post : numpy.array(dim_x, dim_x)\n        Posterior (updated) state covariance matrix. Read Only.\n    z : numpy.array\n        Last measurement used in update(). Read only.\n    R : numpy.array(dim_z, dim_z)\n        Measurement noise covariance matrix. Also known as the\n        observation covariance.\n    Q : numpy.array(dim_x, dim_x)\n        Process noise covariance matrix. Also known as the transition\n        covariance.\n    F : numpy.array()\n        State Transition matrix. Also known as `A` in some formulation.\n    H : numpy.array(dim_z, dim_x)\n        Measurement function. Also known as the observation matrix, or as `C`.\n    y : numpy.array\n        Residual of the update step. Read only.\n    K : numpy.array(dim_x, dim_z)\n        Kalman gain of the update step. Read only.\n    S :  numpy.array\n        System uncertainty (P projected to measurement space). Read only.\n    SI :  numpy.array\n        Inverse system uncertainty. Read only.\n    log_likelihood : float\n        log-likelihood of the last measurement. Read only.\n    likelihood : float\n        likelihood of last measurement. Read only.\n        Computed from the log-likelihood. The log-likelihood can be very\n        small,  meaning a large negative value such as -28000. Taking the\n        exp() of that results in 0.0, which can break typical algorithms\n        which multiply by this value, so by default we always return a\n        number >= sys.float_info.min.\n    mahalanobis : float\n        mahalanobis distance of the innovation. Read only.\n    inv : function, default numpy.linalg.inv\n        If you prefer another inverse function, such as the Moore-Penrose\n        pseudo inverse, set it to that instead: kf.inv = np.linalg.pinv\n        This is only used to invert self.S. If you know it is diagonal, you\n        might choose to set it to filterpy.common.inv_diagonal, which is\n        several times faster than numpy.linalg.inv for diagonal matrices.\n    alpha : float\n        Fading memory setting. 1.0 gives the normal Kalman filter, and\n        values slightly larger than 1.0 (such as 1.02) give a fading\n        memory effect - previous measurements have less influence on the\n        filter's estimates. This formulation of the Fading memory filter\n        (there are many) is due to Dan Simon [1]_.\n    References\n    ----------\n    .. [1] Dan Simon. \"Optimal State Estimation.\" John Wiley & Sons.\n       p. 208-212. (2006)\n    .. [2] Roger Labbe. \"Kalman and Bayesian Filters in Python\"\n       https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python\n    \"\"\"\n\n    def __init__(self, dim_x, dim_z, dim_u=0, args=None):\n        if dim_x < 1:\n            raise ValueError('dim_x must be 1 or greater')\n        if dim_z < 1:\n            raise ValueError('dim_z must be 1 or greater')\n        if dim_u < 0:\n            raise ValueError('dim_u must be 0 or greater')\n\n        self.dim_x = dim_x\n        self.dim_z = dim_z\n        self.dim_u = dim_u\n\n        self.x = zeros((dim_x, 1))        # state\n        self.P = eye(dim_x)               # uncertainty covariance\n        self.Q = eye(dim_x)               # process uncertainty\n        self.B = None                     # control transition matrix\n        self.F = eye(dim_x)               # state transition matrix\n        self.H = zeros((dim_z, dim_x))    # measurement function\n        self.R = eye(dim_z)               # measurement uncertainty\n        self._alpha_sq = 1.               # fading memory control\n        self.M = np.zeros((dim_x, dim_z)) # process-measurement cross correlation\n        self.z = np.array([[None]*self.dim_z]).T\n\n        # gain and residual are computed during the innovation step. We\n        # save them so that in case you want to inspect them for various\n        # purposes\n        self.K = np.zeros((dim_x, dim_z)) # kalman gain\n        self.y = zeros((dim_z, 1))\n        self.S = np.zeros((dim_z, dim_z)) # system uncertainty\n        self.SI = np.zeros((dim_z, dim_z)) # inverse system uncertainty\n\n        # identity matrix. Do not alter this.\n        self._I = np.eye(dim_x)\n\n        # these will always be a copy of x,P after predict() is called\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n\n        # these will always be a copy of x,P after update() is called\n        self.x_post = self.x.copy()             \n        self.P_post = self.P.copy()\n\n        # Only computed only if requested via property\n        self._log_likelihood = log(sys.float_info.min)\n        self._likelihood = sys.float_info.min\n        self._mahalanobis = None\n\n        # keep all observations \n        self.history_obs = []\n\n        self.inv = np.linalg.inv\n\n        self.attr_saved = None\n        self.observed = False\n        self.args = args\n\n\n    def predict(self, u=None, B=None, F=None, Q=None):\n        \"\"\"\n        Predict next state (prior) using the Kalman filter state propagation\n        equations.\n        Parameters\n        ----------\n        u : np.array, default 0\n            Optional control vector.\n        B : np.array(dim_x, dim_u), or None\n            Optional control transition matrix; a value of None\n            will cause the filter to use `self.B`.\n        F : np.array(dim_x, dim_x), or None\n            Optional state transition matrix; a value of None\n            will cause the filter to use `self.F`.\n        Q : np.array(dim_x, dim_x), scalar, or None\n            Optional process noise matrix; a value of None will cause the\n            filter to use `self.Q`.\n        \"\"\"\n\n        if B is None:\n            B = self.B\n        if F is None:\n            F = self.F\n        if Q is None:\n            Q = self.Q\n        elif isscalar(Q):\n            Q = eye(self.dim_x) * Q\n\n\n        # x = Fx + Bu\n        if B is not None and u is not None:\n            self.x = dot(F, self.x) + dot(B, u)\n        else:\n            self.x = dot(F, self.x)\n\n        # P = FPF' + Q\n        self.P = self._alpha_sq * dot(dot(F, self.P), F.T) + Q\n\n        # save prior\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n\n\n\n    def freeze(self):\n        \"\"\"\n            Save the parameters before non-observation forward\n        \"\"\"\n        self.attr_saved = deepcopy(self.__dict__)\n\n\n    def unfreeze(self):\n        if self.attr_saved is not None:\n            new_history = deepcopy(self.history_obs)\n            self.__dict__ = self.attr_saved\n            # self.history_obs = new_history \n            self.history_obs = self.history_obs[:-1]\n            occur = [int(d is None) for d in new_history]\n            indices = np.where(np.array(occur)==0)[0]\n            if len(indices) < 2:\n                return\n            index1 = indices[-2]\n            index2 = indices[-1]\n            box1 = np.asarray(new_history[index1], dtype=float).reshape(-1)\n            if box1.size < 5:\n                return\n            x1, y1, s1, c1, r1 = box1\n            w1 = np.sqrt(s1 * r1)\n            h1 = np.sqrt(s1 / r1)\n            box2 = np.asarray(new_history[index2], dtype=float).reshape(-1)\n            if box2.size < 5:\n                return\n            x2, y2, s2, c2, r2 = box2\n            w2 = np.sqrt(s2 * r2)\n            h2 = np.sqrt(s2 / r2)\n            time_gap = index2 - index1\n            dx = (x2-x1)/time_gap\n            dy = (y2-y1)/time_gap \n            dw = (w2-w1)/time_gap \n            dh = (h2-h1)/time_gap\n            dc = (c2 - c1) / time_gap\n            for i in range(index2 - index1):\n                \"\"\"\n                    The default virtual trajectory generation is by linear\n                    motion (constant speed hypothesis), you could modify this \n                    part to implement your own. \n                \"\"\"\n                x = x1 + (i+1) * dx \n                y = y1 + (i+1) * dy \n                w = w1 + (i+1) * dw \n                h = h1 + (i+1) * dh\n                s = w * h \n                r = w / (h + 1e-12)\n                c = c1 + (i+1) * dc\n                new_box = np.array([x, y, s, c, r], dtype=float).reshape((5, 1))\n                \"\"\"\n                    I still use predict-update loop here to refresh the parameters,\n                    but this can be faster by directly modifying the internal parameters\n                    as suggested in the paper. I keep this naive but slow way for \n                    easy read and understanding\n                \"\"\"\n\n                if not i == (index2-index1-1):\n                    self.update(new_box)\n                    self.predict()\n                else:\n                    self.update(new_box)\n\n\n    def update(self, z, R=None, H=None):\n        \"\"\"\n        Add a new measurement (z) to the Kalman filter.\n        If z is None, nothing is computed. However, x_post and P_post are\n        updated with the prior (x_prior, P_prior), and self.z is set to None.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n            If you pass in a value of H, z must be a column vector the\n            of the correct size.\n        R : np.array, scalar, or None\n            Optionally provide R to override the measurement noise for this\n            one call, otherwise  self.R will be used.\n        H : np.array, or None\n            Optionally provide H to override the measurement function for this\n            one call, otherwise self.H will be used.\n        \"\"\"\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n        # append the observation\n        self.history_obs.append(z)\n        \n        if z is None:\n            if self.observed:\n                \"\"\"\n                    Got no observation so freeze the current parameters for future\n                    potential online smoothing.\n                \"\"\"\n                self.freeze()\n            self.observed = False \n            self.z = np.array([[None]*self.dim_z]).T\n            self.x_post = self.x.copy()\n            self.P_post = self.P.copy()\n            self.y = zeros((self.dim_z, 1))\n            return\n        \n        # self.observed = True\n        if not self.observed:\n            \"\"\"\n                Get observation, use online smoothing to re-update parameters\n            \"\"\"\n            self.unfreeze()\n        self.observed = True\n\n        if R is None:\n            R = self.R\n        elif isscalar(R):\n            R = eye(self.dim_z) * R\n\n        # if self.args.use_nsa_kalman:\n        #     if confidence > 0.6:\n        #         R = [(1 - confidence) * self.args.nsa_kalman_interval * x for x in R]\n        #     else:\n        #         R = [self.args.nsa_kalman_interval_sec * x for x in R]\n\n        if H is None:\n            z = reshape_z(z, self.dim_z, self.x.ndim)\n            H = self.H\n\n        # y = z - Hx\n        # error (residual) between measurement and prediction\n        self.y = z - dot(H, self.x)\n\n        # common subexpression for speed\n        PHT = dot(self.P, H.T)\n\n        # S = HPH' + R\n        # project system uncertainty into measurement space\n        self.S = dot(H, PHT) + R\n        self.SI = self.inv(self.S)\n        # K = PH'inv(S)\n        # map system uncertainty into kalman gain\n        self.K = dot(PHT, self.SI)\n\n        # x = x + Ky\n        # predict new x with residual scaled by the kalman gain\n        self.x = self.x + dot(self.K, self.y)\n\n        # P = (I-KH)P(I-KH)' + KRK'\n        # This is more numerically stable\n        # and works for non-optimal K vs the equation\n        # P = (I-KH)P usually seen in the literature.\n\n        I_KH = self._I - dot(self.K, H)\n        self.P = dot(dot(I_KH, self.P), I_KH.T) + dot(dot(self.K, R), self.K.T)\n\n        # save measurement and posterior state\n        self.z = deepcopy(z)\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n\n    def predict_steadystate(self, u=0, B=None):\n        \"\"\"\n        Predict state (prior) using the Kalman filter state propagation\n        equations. Only x is updated, P is left unchanged. See\n        update_steadstate() for a longer explanation of when to use this\n        method.\n        Parameters\n        ----------\n        u : np.array\n            Optional control vector. If non-zero, it is multiplied by B\n            to create the control input into the system.\n        B : np.array(dim_x, dim_u), or None\n            Optional control transition matrix; a value of None\n            will cause the filter to use `self.B`.\n        \"\"\"\n\n        if B is None:\n            B = self.B\n\n        # x = Fx + Bu\n        if B is not None:\n            self.x = dot(self.F, self.x) + dot(B, u)\n        else:\n            self.x = dot(self.F, self.x)\n\n        # save prior\n        self.x_prior = self.x.copy()\n        self.P_prior = self.P.copy()\n\n    def update_steadystate(self, z):\n        \"\"\"\n        Add a new measurement (z) to the Kalman filter without recomputing\n        the Kalman gain K, the state covariance P, or the system\n        uncertainty S.\n        You can use this for LTI systems since the Kalman gain and covariance\n        converge to a fixed value. Precompute these and assign them explicitly,\n        or run the Kalman filter using the normal predict()/update(0 cycle\n        until they converge.\n        The main advantage of this call is speed. We do significantly less\n        computation, notably avoiding a costly matrix inversion.\n        Use in conjunction with predict_steadystate(), otherwise P will grow\n        without bound.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        Examples\n        --------\n        >>> cv = kinematic_kf(dim=3, order=2) # 3D const velocity filter\n        >>> # let filter converge on representative data, then save k and P\n        >>> for i in range(100):\n        >>>     cv.predict()\n        >>>     cv.update([i, i, i])\n        >>> saved_k = np.copy(cv.K)\n        >>> saved_P = np.copy(cv.P)\n        later on:\n        >>> cv = kinematic_kf(dim=3, order=2) # 3D const velocity filter\n        >>> cv.K = np.copy(saved_K)\n        >>> cv.P = np.copy(saved_P)\n        >>> for i in range(100):\n        >>>     cv.predict_steadystate()\n        >>>     cv.update_steadystate([i, i, i])\n        \"\"\"\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n        if z is None:\n            self.z = np.array([[None]*self.dim_z]).T\n            self.x_post = self.x.copy()\n            self.P_post = self.P.copy()\n            self.y = zeros((self.dim_z, 1))\n            return\n\n        z = reshape_z(z, self.dim_z, self.x.ndim)\n\n        # y = z - Hx\n        # error (residual) between measurement and prediction\n        self.y = z - dot(self.H, self.x)\n\n        # x = x + Ky\n        # predict new x with residual scaled by the kalman gain\n        self.x = self.x + dot(self.K, self.y)\n\n        self.z = deepcopy(z)\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n    def update_correlated(self, z, R=None, H=None):\n        \"\"\" Add a new measurement (z) to the Kalman filter assuming that\n        process noise and measurement noise are correlated as defined in\n        the `self.M` matrix.\n        A partial derivation can be found in [1]\n        If z is None, nothing is changed.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        R : np.array, scalar, or None\n            Optionally provide R to override the measurement noise for this\n            one call, otherwise  self.R will be used.\n        H : np.array,  or None\n            Optionally provide H to override the measurement function for this\n            one call, otherwise  self.H will be used.\n        References\n        ----------\n        .. [1] Bulut, Y. (2011). Applied Kalman filter theory (Doctoral dissertation, Northeastern University).\n               http://people.duke.edu/~hpgavin/SystemID/References/Balut-KalmanFilter-PhD-NEU-2011.pdf\n        \"\"\"\n\n        # set to None to force recompute\n        self._log_likelihood = None\n        self._likelihood = None\n        self._mahalanobis = None\n\n        if z is None:\n            self.z = np.array([[None]*self.dim_z]).T\n            self.x_post = self.x.copy()\n            self.P_post = self.P.copy()\n            self.y = zeros((self.dim_z, 1))\n            return\n\n        if R is None:\n            R = self.R\n        elif isscalar(R):\n            R = eye(self.dim_z) * R\n\n        # rename for readability and a tiny extra bit of speed\n        if H is None:\n            z = reshape_z(z, self.dim_z, self.x.ndim)\n            H = self.H\n\n        # handle special case: if z is in form [[z]] but x is not a column\n        # vector dimensions will not match\n        if self.x.ndim == 1 and shape(z) == (1, 1):\n            z = z[0]\n\n        if shape(z) == (): # is it scalar, e.g. z=3 or z=np.array(3)\n            z = np.asarray([z])\n\n        # y = z - Hx\n        # error (residual) between measurement and prediction\n        self.y = z - dot(H, self.x)\n\n        # common subexpression for speed\n        PHT = dot(self.P, H.T)\n\n        # project system uncertainty into measurement space\n        self.S = dot(H, PHT) + dot(H, self.M) + dot(self.M.T, H.T) + R\n        self.SI = self.inv(self.S)\n\n        # K = PH'inv(S)\n        # map system uncertainty into kalman gain\n        self.K = dot(PHT + self.M, self.SI)\n\n        # x = x + Ky\n        # predict new x with residual scaled by the kalman gain\n        self.x = self.x + dot(self.K, self.y)\n        self.P = self.P - dot(self.K, dot(H, self.P) + self.M.T)\n\n        self.z = deepcopy(z)\n        self.x_post = self.x.copy()\n        self.P_post = self.P.copy()\n\n    def batch_filter(self, zs, Fs=None, Qs=None, Hs=None,\n                     Rs=None, Bs=None, us=None, update_first=False,\n                     saver=None):\n        \"\"\" Batch processes a sequences of measurements.\n        Parameters\n        ----------\n        zs : list-like\n            list of measurements at each time step `self.dt`. Missing\n            measurements must be represented by `None`.\n        Fs : None, list-like, default=None\n            optional value or list of values to use for the state transition\n            matrix F.\n            If Fs is None then self.F is used for all epochs.\n            Otherwise it must contain a list-like list of F's, one for\n            each epoch.  This allows you to have varying F per epoch.\n        Qs : None, np.array or list-like, default=None\n            optional value or list of values to use for the process error\n            covariance Q.\n            If Qs is None then self.Q is used for all epochs.\n            Otherwise it must contain a list-like list of Q's, one for\n            each epoch.  This allows you to have varying Q per epoch.\n        Hs : None, np.array or list-like, default=None\n            optional list of values to use for the measurement matrix H.\n            If Hs is None then self.H is used for all epochs.\n            If Hs contains a single matrix, then it is used as H for all\n            epochs.\n            Otherwise it must contain a list-like list of H's, one for\n            each epoch.  This allows you to have varying H per epoch.\n        Rs : None, np.array or list-like, default=None\n            optional list of values to use for the measurement error\n            covariance R.\n            If Rs is None then self.R is used for all epochs.\n            Otherwise it must contain a list-like list of R's, one for\n            each epoch.  This allows you to have varying R per epoch.\n        Bs : None, np.array or list-like, default=None\n            optional list of values to use for the control transition matrix B.\n            If Bs is None then self.B is used for all epochs.\n            Otherwise it must contain a list-like list of B's, one for\n            each epoch.  This allows you to have varying B per epoch.\n        us : None, np.array or list-like, default=None\n            optional list of values to use for the control input vector;\n            If us is None then None is used for all epochs (equivalent to 0,\n            or no control input).\n            Otherwise it must contain a list-like list of u's, one for\n            each epoch.\n       update_first : bool, optional, default=False\n            controls whether the order of operations is update followed by\n            predict, or predict followed by update. Default is predict->update.\n        saver : filterpy.common.Saver, optional\n            filterpy.common.Saver object. If provided, saver.save() will be\n            called after every epoch\n        Returns\n        -------\n        means : np.array((n,dim_x,1))\n            array of the state for each time step after the update. Each entry\n            is an np.array. In other words `means[k,:]` is the state at step\n            `k`.\n        covariance : np.array((n,dim_x,dim_x))\n            array of the covariances for each time step after the update.\n            In other words `covariance[k,:,:]` is the covariance at step `k`.\n        means_predictions : np.array((n,dim_x,1))\n            array of the state for each time step after the predictions. Each\n            entry is an np.array. In other words `means[k,:]` is the state at\n            step `k`.\n        covariance_predictions : np.array((n,dim_x,dim_x))\n            array of the covariances for each time step after the prediction.\n            In other words `covariance[k,:,:]` is the covariance at step `k`.\n        Examples\n        --------\n        .. code-block:: Python\n            # this example demonstrates tracking a measurement where the time\n            # between measurement varies, as stored in dts. This requires\n            # that F be recomputed for each epoch. The output is then smoothed\n            # with an RTS smoother.\n            zs = [t + random.randn()*4 for t in range (40)]\n            Fs = [np.array([[1., dt], [0, 1]] for dt in dts]\n            (mu, cov, _, _) = kf.batch_filter(zs, Fs=Fs)\n            (xs, Ps, Ks, Pps) = kf.rts_smoother(mu, cov, Fs=Fs)\n        \"\"\"\n\n        #pylint: disable=too-many-statements\n        n = np.size(zs, 0)\n        if Fs is None:\n            Fs = [self.F] * n\n        if Qs is None:\n            Qs = [self.Q] * n\n        if Hs is None:\n            Hs = [self.H] * n\n        if Rs is None:\n            Rs = [self.R] * n\n        if Bs is None:\n            Bs = [self.B] * n\n        if us is None:\n            us = [0] * n\n\n        # mean estimates from Kalman Filter\n        if self.x.ndim == 1:\n            means = zeros((n, self.dim_x))\n            means_p = zeros((n, self.dim_x))\n        else:\n            means = zeros((n, self.dim_x, 1))\n            means_p = zeros((n, self.dim_x, 1))\n\n        # state covariances from Kalman Filter\n        covariances = zeros((n, self.dim_x, self.dim_x))\n        covariances_p = zeros((n, self.dim_x, self.dim_x))\n\n        if update_first:\n            for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n                self.update(z, R=R, H=H)\n                means[i, :] = self.x\n                covariances[i, :, :] = self.P\n\n                self.predict(u=u, B=B, F=F, Q=Q)\n                means_p[i, :] = self.x\n                covariances_p[i, :, :] = self.P\n\n                if saver is not None:\n                    saver.save()\n        else:\n            for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n                self.predict(u=u, B=B, F=F, Q=Q)\n                means_p[i, :] = self.x\n                covariances_p[i, :, :] = self.P\n\n                self.update(z, R=R, H=H)\n                means[i, :] = self.x\n                covariances[i, :, :] = self.P\n\n                if saver is not None:\n                    saver.save()\n\n        return (means, covariances, means_p, covariances_p)\n\n    def rts_smoother(self, Xs, Ps, Fs=None, Qs=None, inv=np.linalg.inv):\n        \"\"\"\n        Runs the Rauch-Tung-Striebel Kalman smoother on a set of\n        means and covariances computed by a Kalman filter. The usual input\n        would come from the output of `KalmanFilter.batch_filter()`.\n        Parameters\n        ----------\n        Xs : numpy.array\n           array of the means (state variable x) of the output of a Kalman\n           filter.\n        Ps : numpy.array\n            array of the covariances of the output of a kalman filter.\n        Fs : list-like collection of numpy.array, optional\n            State transition matrix of the Kalman filter at each time step.\n            Optional, if not provided the filter's self.F will be used\n        Qs : list-like collection of numpy.array, optional\n            Process noise of the Kalman filter at each time step. Optional,\n            if not provided the filter's self.Q will be used\n        inv : function, default numpy.linalg.inv\n            If you prefer another inverse function, such as the Moore-Penrose\n            pseudo inverse, set it to that instead: kf.inv = np.linalg.pinv\n        Returns\n        -------\n        x : numpy.ndarray\n           smoothed means\n        P : numpy.ndarray\n           smoothed state covariances\n        K : numpy.ndarray\n            smoother gain at each step\n        Pp : numpy.ndarray\n           Predicted state covariances\n        Examples\n        --------\n        .. code-block:: Python\n            zs = [t + random.randn()*4 for t in range (40)]\n            (mu, cov, _, _) = kalman.batch_filter(zs)\n            (x, P, K, Pp) = rts_smoother(mu, cov, kf.F, kf.Q)\n        \"\"\"\n\n        if len(Xs) != len(Ps):\n            raise ValueError('length of Xs and Ps must be the same')\n\n        n = Xs.shape[0]\n        dim_x = Xs.shape[1]\n\n        if Fs is None:\n            Fs = [self.F] * n\n        if Qs is None:\n            Qs = [self.Q] * n\n\n        # smoother gain\n        K = zeros((n, dim_x, dim_x))\n\n        x, P, Pp = Xs.copy(), Ps.copy(), Ps.copy()\n        for k in range(n-2, -1, -1):\n            Pp[k] = dot(dot(Fs[k+1], P[k]), Fs[k+1].T) + Qs[k+1]\n\n            #pylint: disable=bad-whitespace\n            K[k]  = dot(dot(P[k], Fs[k+1].T), inv(Pp[k]))\n            x[k] += dot(K[k], x[k+1] - dot(Fs[k+1], x[k]))\n            P[k] += dot(dot(K[k], P[k+1] - Pp[k]), K[k].T)\n\n        return (x, P, K, Pp)\n\n    def get_prediction(self, u=None, B=None, F=None, Q=None):\n        \"\"\"\n        Predict next state (prior) using the Kalman filter state propagation\n        equations and returns it without modifying the object.\n        Parameters\n        ----------\n        u : np.array, default 0\n            Optional control vector.\n        B : np.array(dim_x, dim_u), or None\n            Optional control transition matrix; a value of None\n            will cause the filter to use `self.B`.\n        F : np.array(dim_x, dim_x), or None\n            Optional state transition matrix; a value of None\n            will cause the filter to use `self.F`.\n        Q : np.array(dim_x, dim_x), scalar, or None\n            Optional process noise matrix; a value of None will cause the\n            filter to use `self.Q`.\n        Returns\n        -------\n        (x, P) : tuple\n            State vector and covariance array of the prediction.\n        \"\"\"\n\n        if B is None:\n            B = self.B\n        if F is None:\n            F = self.F\n        if Q is None:\n            Q = self.Q\n        elif isscalar(Q):\n            Q = eye(self.dim_x) * Q\n\n        # x = Fx + Bu\n        if B is not None and u is not None:\n            x = dot(F, self.x) + dot(B, u)\n        else:\n            x = dot(F, self.x)\n\n        # P = FPF' + Q\n        P = self._alpha_sq * dot(dot(F, self.P), F.T) + Q\n\n        return x, P\n\n    def get_update(self, z=None):\n        \"\"\"\n        Computes the new estimate based on measurement `z` and returns it\n        without altering the state of the filter.\n        Parameters\n        ----------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        Returns\n        -------\n        (x, P) : tuple\n            State vector and covariance array of the update.\n       \"\"\"\n\n        if z is None:\n            return self.x, self.P\n        z = reshape_z(z, self.dim_z, self.x.ndim)\n\n        R = self.R\n        H = self.H\n        P = self.P\n        x = self.x\n\n        # error (residual) between measurement and prediction\n        y = z - dot(H, x)\n\n        # common subexpression for speed\n        PHT = dot(P, H.T)\n\n        # project system uncertainty into measurement space\n        S = dot(H, PHT) + R\n\n        # map system uncertainty into kalman gain\n        K = dot(PHT, self.inv(S))\n\n        # predict new x with residual scaled by the kalman gain\n        x = x + dot(K, y)\n\n        # P = (I-KH)P(I-KH)' + KRK'\n        I_KH = self._I - dot(K, H)\n        P = dot(dot(I_KH, P), I_KH.T) + dot(dot(K, R), K.T)\n\n        return x, P\n\n    def residual_of(self, z):\n        \"\"\"\n        Returns the residual for the given measurement (z). Does not alter\n        the state of the filter.\n        \"\"\"\n        z = reshape_z(z, self.dim_z, self.x.ndim)\n        return z - dot(self.H, self.x_prior)\n\n    def measurement_of_state(self, x):\n        \"\"\"\n        Helper function that converts a state into a measurement.\n        Parameters\n        ----------\n        x : np.array\n            kalman state vector\n        Returns\n        -------\n        z : (dim_z, 1): array_like\n            measurement for this update. z can be a scalar if dim_z is 1,\n            otherwise it must be convertible to a column vector.\n        \"\"\"\n\n        return dot(self.H, x)\n\n    @property\n    def log_likelihood(self):\n        \"\"\"\n        log-likelihood of the last measurement.\n        \"\"\"\n        if self._log_likelihood is None:\n            self._log_likelihood = logpdf(x=self.y, cov=self.S)\n        return self._log_likelihood\n\n    @property\n    def likelihood(self):\n        \"\"\"\n        Computed from the log-likelihood. The log-likelihood can be very\n        small,  meaning a large negative value such as -28000. Taking the\n        exp() of that results in 0.0, which can break typical algorithms\n        which multiply by this value, so by default we always return a\n        number >= sys.float_info.min.\n        \"\"\"\n        if self._likelihood is None:\n            self._likelihood = exp(self.log_likelihood)\n            if self._likelihood == 0:\n                self._likelihood = sys.float_info.min\n        return self._likelihood\n\n    @property\n    def mahalanobis(self):\n        \"\"\"\"\n        Mahalanobis distance of measurement. E.g. 3 means measurement\n        was 3 standard deviations away from the predicted value.\n        Returns\n        -------\n        mahalanobis : float\n        \"\"\"\n        if self._mahalanobis is None:\n            self._mahalanobis = sqrt(float(dot(dot(self.y.T, self.SI), self.y)))\n        return self._mahalanobis\n\n    @property\n    def alpha(self):\n        \"\"\"\n        Fading memory setting. 1.0 gives the normal Kalman filter, and\n        values slightly larger than 1.0 (such as 1.02) give a fading\n        memory effect - previous measurements have less influence on the\n        filter's estimates. This formulation of the Fading memory filter\n        (there are many) is due to Dan Simon [1]_.\n        \"\"\"\n        return self._alpha_sq**.5\n\n    def log_likelihood_of(self, z):\n        \"\"\"\n        log likelihood of the measurement `z`. This should only be called\n        after a call to update(). Calling after predict() will yield an\n        incorrect result.\"\"\"\n\n        if z is None:\n            return log(sys.float_info.min)\n        return logpdf(z, dot(self.H, self.x), self.S)\n\n    @alpha.setter\n    def alpha(self, value):\n        if not np.isscalar(value) or value < 1:\n            raise ValueError('alpha must be a float greater than 1')\n\n        self._alpha_sq = value**2\n\n    def __repr__(self):\n        return '\\n'.join([\n            'KalmanFilter object',\n            pretty_str('dim_x', self.dim_x),\n            pretty_str('dim_z', self.dim_z),\n            pretty_str('dim_u', self.dim_u),\n            pretty_str('x', self.x),\n            pretty_str('P', self.P),\n            pretty_str('x_prior', self.x_prior),\n            pretty_str('P_prior', self.P_prior),\n            pretty_str('x_post', self.x_post),\n            pretty_str('P_post', self.P_post),\n            pretty_str('F', self.F),\n            pretty_str('Q', self.Q),\n            pretty_str('R', self.R),\n            pretty_str('H', self.H),\n            pretty_str('K', self.K),\n            pretty_str('y', self.y),\n            pretty_str('S', self.S),\n            pretty_str('SI', self.SI),\n            pretty_str('M', self.M),\n            pretty_str('B', self.B),\n            pretty_str('z', self.z),\n            pretty_str('log-likelihood', self.log_likelihood),\n            pretty_str('likelihood', self.likelihood),\n            pretty_str('mahalanobis', self.mahalanobis),\n            pretty_str('alpha', self.alpha),\n            pretty_str('inv', self.inv)\n            ])\n\n    def test_matrix_dimensions(self, z=None, H=None, R=None, F=None, Q=None):\n        \"\"\"\n        Performs a series of asserts to check that the size of everything\n        is what it should be. This can help you debug problems in your design.\n        If you pass in H, R, F, Q those will be used instead of this object's\n        value for those matrices.\n        Testing `z` (the measurement) is problamatic. x is a vector, and can be\n        implemented as either a 1D array or as a nx1 column vector. Thus Hx\n        can be of different shapes. Then, if Hx is a single value, it can\n        be either a 1D array or 2D vector. If either is true, z can reasonably\n        be a scalar (either '3' or np.array('3') are scalars under this\n        definition), a 1D, 1 element array, or a 2D, 1 element array. You are\n        allowed to pass in any combination that works.\n        \"\"\"\n\n        if H is None:\n            H = self.H\n        if R is None:\n            R = self.R\n        if F is None:\n            F = self.F\n        if Q is None:\n            Q = self.Q\n        x = self.x\n        P = self.P\n\n        assert x.ndim == 1 or x.ndim == 2, \\\n                \"x must have one or two dimensions, but has {}\".format(x.ndim)\n\n        if x.ndim == 1:\n            assert x.shape[0] == self.dim_x, \\\n                   \"Shape of x must be ({},{}), but is {}\".format(\n                       self.dim_x, 1, x.shape)\n        else:\n            assert x.shape == (self.dim_x, 1), \\\n                   \"Shape of x must be ({},{}), but is {}\".format(\n                       self.dim_x, 1, x.shape)\n\n        assert P.shape == (self.dim_x, self.dim_x), \\\n               \"Shape of P must be ({},{}), but is {}\".format(\n                   self.dim_x, self.dim_x, P.shape)\n\n        assert Q.shape == (self.dim_x, self.dim_x), \\\n               \"Shape of Q must be ({},{}), but is {}\".format(\n                   self.dim_x, self.dim_x, P.shape)\n\n        assert F.shape == (self.dim_x, self.dim_x), \\\n               \"Shape of F must be ({},{}), but is {}\".format(\n                   self.dim_x, self.dim_x, F.shape)\n\n        assert np.ndim(H) == 2, \\\n               \"Shape of H must be (dim_z, {}), but is {}\".format(\n                   P.shape[0], shape(H))\n\n        assert H.shape[1] == P.shape[0], \\\n               \"Shape of H must be (dim_z, {}), but is {}\".format(\n                   P.shape[0], H.shape)\n\n        # shape of R must be the same as HPH'\n        hph_shape = (H.shape[0], H.shape[0])\n        r_shape = shape(R)\n\n        if H.shape[0] == 1:\n            # r can be scalar, 1D, or 2D in this case\n            assert r_shape in [(), (1,), (1, 1)], \\\n            \"R must be scalar or one element array, but is shaped {}\".format(\n                r_shape)\n        else:\n            assert r_shape == hph_shape, \\\n            \"shape of R should be {} but it is {}\".format(hph_shape, r_shape)\n\n\n        if z is not None:\n            z_shape = shape(z)\n        else:\n            z_shape = (self.dim_z, 1)\n\n        # H@x must have shape of z\n        Hx = dot(H, x)\n\n        if z_shape == (): # scalar or np.array(scalar)\n            assert Hx.ndim == 1 or shape(Hx) == (1, 1), \\\n            \"shape of z should be {}, not {} for the given H\".format(\n                shape(Hx), z_shape)\n\n        elif shape(Hx) == (1,):\n            assert z_shape[0] == 1, 'Shape of z must be {} for the given H'.format(shape(Hx))\n\n        else:\n            assert (z_shape == shape(Hx) or\n                    (len(z_shape) == 1 and shape(Hx) == (z_shape[0], 1))), \\\n                    \"shape of z should be {}, not {} for the given H\".format(\n                        shape(Hx), z_shape)\n\n        if np.ndim(Hx) > 1 and shape(Hx) != (1, 1):\n            assert shape(Hx) == z_shape, \\\n               'shape of z should be {} for the given H, but it is {}'.format(\n                   shape(Hx), z_shape)\n\n\ndef update(x, P, z, R, H=None, return_all=False):\n    \"\"\"\n    Add a new measurement (z) to the Kalman filter. If z is None, nothing\n    is changed.\n    This can handle either the multidimensional or unidimensional case. If\n    all parameters are floats instead of arrays the filter will still work,\n    and return floats for x, P as the result.\n    update(1, 2, 1, 1, 1)  # univariate\n    update(x, P, 1\n    Parameters\n    ----------\n    x : numpy.array(dim_x, 1), or float\n        State estimate vector\n    P : numpy.array(dim_x, dim_x), or float\n        Covariance matrix\n    z : (dim_z, 1): array_like\n        measurement for this update. z can be a scalar if dim_z is 1,\n        otherwise it must be convertible to a column vector.\n    R : numpy.array(dim_z, dim_z), or float\n        Measurement noise matrix\n    H : numpy.array(dim_x, dim_x), or float, optional\n        Measurement function. If not provided, a value of 1 is assumed.\n    return_all : bool, default False\n        If true, y, K, S, and log_likelihood are returned, otherwise\n        only x and P are returned.\n    Returns\n    -------\n    x : numpy.array\n        Posterior state estimate vector\n    P : numpy.array\n        Posterior covariance matrix\n    y : numpy.array or scalar\n        Residua. Difference between measurement and state in measurement space\n    K : numpy.array\n        Kalman gain\n    S : numpy.array\n        System uncertainty in measurement space\n    log_likelihood : float\n        log likelihood of the measurement\n    \"\"\"\n\n    #pylint: disable=bare-except\n\n    if z is None:\n        if return_all:\n            return x, P, None, None, None, None\n        return x, P\n\n    if H is None:\n        H = np.array([1])\n\n    if np.isscalar(H):\n        H = np.array([H])\n\n    Hx = np.atleast_1d(dot(H, x))\n    z = reshape_z(z, Hx.shape[0], x.ndim)\n\n    # error (residual) between measurement and prediction\n    y = z - Hx\n\n    # project system uncertainty into measurement space\n    S = dot(dot(H, P), H.T) + R\n\n\n    # map system uncertainty into kalman gain\n    try:\n        K = dot(dot(P, H.T), linalg.inv(S))\n    except:\n        # can't invert a 1D array, annoyingly\n        K = dot(dot(P, H.T), 1./S)\n\n\n    # predict new x with residual scaled by the kalman gain\n    x = x + dot(K, y)\n\n    # P = (I-KH)P(I-KH)' + KRK'\n    KH = dot(K, H)\n\n    try:\n        I_KH = np.eye(KH.shape[0]) - KH\n    except:\n        I_KH = np.array([1 - KH])\n    P = dot(dot(I_KH, P), I_KH.T) + dot(dot(K, R), K.T)\n\n\n    if return_all:\n        # compute log likelihood\n        log_likelihood = logpdf(z, dot(H, x), S)\n        return x, P, y, K, S, log_likelihood\n    return x, P\n\n\ndef update_steadystate(x, z, K, H=None):\n    \"\"\"\n    Add a new measurement (z) to the Kalman filter. If z is None, nothing\n    is changed.\n    Parameters\n    ----------\n    x : numpy.array(dim_x, 1), or float\n        State estimate vector\n    z : (dim_z, 1): array_like\n        measurement for this update. z can be a scalar if dim_z is 1,\n        otherwise it must be convertible to a column vector.\n    K : numpy.array, or float\n        Kalman gain matrix\n    H : numpy.array(dim_x, dim_x), or float, optional\n        Measurement function. If not provided, a value of 1 is assumed.\n    Returns\n    -------\n    x : numpy.array\n        Posterior state estimate vector\n    Examples\n    --------\n    This can handle either the multidimensional or unidimensional case. If\n    all parameters are floats instead of arrays the filter will still work,\n    and return floats for x, P as the result.\n    >>> update_steadystate(1, 2, 1)  # univariate\n    >>> update_steadystate(x, P, z, H)\n    \"\"\"\n\n\n    if z is None:\n        return x\n\n    if H is None:\n        H = np.array([1])\n\n    if np.isscalar(H):\n        H = np.array([H])\n\n    Hx = np.atleast_1d(dot(H, x))\n    z = reshape_z(z, Hx.shape[0], x.ndim)\n\n    # error (residual) between measurement and prediction\n    y = z - Hx\n\n    # estimate new x with residual scaled by the kalman gain\n    return x + dot(K, y)\n\n\ndef predict(x, P, F=1, Q=0, u=0, B=1, alpha=1.):\n    \"\"\"\n    Predict next state (prior) using the Kalman filter state propagation\n    equations.\n    Parameters\n    ----------\n    x : numpy.array\n        State estimate vector\n    P : numpy.array\n        Covariance matrix\n    F : numpy.array()\n        State Transition matrix\n    Q : numpy.array, Optional\n        Process noise matrix\n    u : numpy.array, Optional, default 0.\n        Control vector. If non-zero, it is multiplied by B\n        to create the control input into the system.\n    B : numpy.array, optional, default 0.\n        Control transition matrix.\n    alpha : float, Optional, default=1.0\n        Fading memory setting. 1.0 gives the normal Kalman filter, and\n        values slightly larger than 1.0 (such as 1.02) give a fading\n        memory effect - previous measurements have less influence on the\n        filter's estimates. This formulation of the Fading memory filter\n        (there are many) is due to Dan Simon\n    Returns\n    -------\n    x : numpy.array\n        Prior state estimate vector\n    P : numpy.array\n        Prior covariance matrix\n    \"\"\"\n\n    if np.isscalar(F):\n        F = np.array(F)\n    x = dot(F, x) + dot(B, u)\n    P = (alpha * alpha) * dot(dot(F, P), F.T) + Q\n\n    return x, P\n\n\ndef predict_steadystate(x, F=1, u=0, B=1):\n    \"\"\"\n    Predict next state (prior) using the Kalman filter state propagation\n    equations. This steady state form only computes x, assuming that the\n    covariance is constant.\n    Parameters\n    ----------\n    x : numpy.array\n        State estimate vector\n    P : numpy.array\n        Covariance matrix\n    F : numpy.array()\n        State Transition matrix\n    u : numpy.array, Optional, default 0.\n        Control vector. If non-zero, it is multiplied by B\n        to create the control input into the system.\n    B : numpy.array, optional, default 0.\n        Control transition matrix.\n    Returns\n    -------\n    x : numpy.array\n        Prior state estimate vector\n    \"\"\"\n\n    if np.isscalar(F):\n        F = np.array(F)\n    x = dot(F, x) + dot(B, u)\n\n    return x\n\n\n\ndef batch_filter(x, P, zs, Fs, Qs, Hs, Rs, Bs=None, us=None,\n                 update_first=False, saver=None):\n    \"\"\"\n    Batch processes a sequences of measurements.\n    Parameters\n    ----------\n    zs : list-like\n        list of measurements at each time step. Missing measurements must be\n        represented by None.\n    Fs : list-like\n        list of values to use for the state transition matrix matrix.\n    Qs : list-like\n        list of values to use for the process error\n        covariance.\n    Hs : list-like\n        list of values to use for the measurement matrix.\n    Rs : list-like\n        list of values to use for the measurement error\n        covariance.\n    Bs : list-like, optional\n        list of values to use for the control transition matrix;\n        a value of None in any position will cause the filter\n        to use `self.B` for that time step.\n    us : list-like, optional\n        list of values to use for the control input vector;\n        a value of None in any position will cause the filter to use\n        0 for that time step.\n    update_first : bool, optional\n        controls whether the order of operations is update followed by\n        predict, or predict followed by update. Default is predict->update.\n        saver : filterpy.common.Saver, optional\n            filterpy.common.Saver object. If provided, saver.save() will be\n            called after every epoch\n    Returns\n    -------\n    means : np.array((n,dim_x,1))\n        array of the state for each time step after the update. Each entry\n        is an np.array. In other words `means[k,:]` is the state at step\n        `k`.\n    covariance : np.array((n,dim_x,dim_x))\n        array of the covariances for each time step after the update.\n        In other words `covariance[k,:,:]` is the covariance at step `k`.\n    means_predictions : np.array((n,dim_x,1))\n        array of the state for each time step after the predictions. Each\n        entry is an np.array. In other words `means[k,:]` is the state at\n        step `k`.\n    covariance_predictions : np.array((n,dim_x,dim_x))\n        array of the covariances for each time step after the prediction.\n        In other words `covariance[k,:,:]` is the covariance at step `k`.\n    Examples\n    --------\n    .. code-block:: Python\n        zs = [t + random.randn()*4 for t in range (40)]\n        Fs = [kf.F for t in range (40)]\n        Hs = [kf.H for t in range (40)]\n        (mu, cov, _, _) = kf.batch_filter(zs, Rs=R_list, Fs=Fs, Hs=Hs, Qs=None,\n                                          Bs=None, us=None, update_first=False)\n        (xs, Ps, Ks, Pps) = kf.rts_smoother(mu, cov, Fs=Fs, Qs=None)\n    \"\"\"\n\n    n = np.size(zs, 0)\n    dim_x = x.shape[0]\n\n    # mean estimates from Kalman Filter\n    if x.ndim == 1:\n        means = zeros((n, dim_x))\n        means_p = zeros((n, dim_x))\n    else:\n        means = zeros((n, dim_x, 1))\n        means_p = zeros((n, dim_x, 1))\n\n    # state covariances from Kalman Filter\n    covariances = zeros((n, dim_x, dim_x))\n    covariances_p = zeros((n, dim_x, dim_x))\n\n    if us is None:\n        us = [0.] * n\n        Bs = [0.] * n\n\n    if update_first:\n        for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n            x, P = update(x, P, z, R=R, H=H)\n            means[i, :] = x\n            covariances[i, :, :] = P\n\n            x, P = predict(x, P, u=u, B=B, F=F, Q=Q)\n            means_p[i, :] = x\n            covariances_p[i, :, :] = P\n            if saver is not None:\n                saver.save()\n    else:\n        for i, (z, F, Q, H, R, B, u) in enumerate(zip(zs, Fs, Qs, Hs, Rs, Bs, us)):\n\n            x, P = predict(x, P, u=u, B=B, F=F, Q=Q)\n            means_p[i, :] = x\n            covariances_p[i, :, :] = P\n\n            x, P = update(x, P, z, R=R, H=H)\n            means[i, :] = x\n            covariances[i, :, :] = P\n            if saver is not None:\n                saver.save()\n\n    return (means, covariances, means_p, covariances_p)\n\n\n\ndef rts_smoother(Xs, Ps, Fs, Qs):\n    \"\"\"\n    Runs the Rauch-Tung-Striebel Kalman smoother on a set of\n    means and covariances computed by a Kalman filter. The usual input\n    would come from the output of `KalmanFilter.batch_filter()`.\n    Parameters\n    ----------\n    Xs : numpy.array\n       array of the means (state variable x) of the output of a Kalman\n       filter.\n    Ps : numpy.array\n        array of the covariances of the output of a kalman filter.\n    Fs : list-like collection of numpy.array\n        State transition matrix of the Kalman filter at each time step.\n    Qs : list-like collection of numpy.array, optional\n        Process noise of the Kalman filter at each time step.\n    Returns\n    -------\n    x : numpy.ndarray\n       smoothed means\n    P : numpy.ndarray\n       smoothed state covariances\n    K : numpy.ndarray\n        smoother gain at each step\n    pP : numpy.ndarray\n       predicted state covariances\n    Examples\n    --------\n    .. code-block:: Python\n        zs = [t + random.randn()*4 for t in range (40)]\n        (mu, cov, _, _) = kalman.batch_filter(zs)\n        (x, P, K, pP) = rts_smoother(mu, cov, kf.F, kf.Q)\n    \"\"\"\n\n    if len(Xs) != len(Ps):\n        raise ValueError('length of Xs and Ps must be the same')\n\n    n = Xs.shape[0]\n    dim_x = Xs.shape[1]\n\n    # smoother gain\n    K = zeros((n, dim_x, dim_x))\n    x, P, pP = Xs.copy(), Ps.copy(), Ps.copy()\n\n    for k in range(n-2, -1, -1):\n        pP[k] = dot(dot(Fs[k], P[k]), Fs[k].T) + Qs[k]\n\n        #pylint: disable=bad-whitespace\n        K[k]  = dot(dot(P[k], Fs[k].T), linalg.inv(pP[k]))\n        x[k] += dot(K[k], x[k+1] - dot(Fs[k], x[k]))\n        P[k] += dot(dot(K[k], P[k+1] - pP[k]), K[k].T)\n\n    return (x, P, K, pP)\n"
  },
  {
    "path": "boxmot/trackers/ocsort/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/ocsort/ocsort.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\"\"\"\nThis script is adopted from the SORT script by Alex Bewley alex@bewley.ai\n\"\"\"\nfrom collections import deque\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.xysr import KalmanFilterXYSR\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.utils.association import associate, linear_assignment\nfrom boxmot.utils.ops import xyxy2xysr\n\n\ndef k_previous_obs(observations, cur_age, k, is_obb=False):\n    if len(observations) == 0:\n        if is_obb:\n            return [-1, -1, -1, -1, -1, -1]\n        else:\n            return [-1, -1, -1, -1, -1]\n    for i in range(k):\n        dt = k - i\n        if cur_age - dt in observations:\n            return observations[cur_age - dt]\n    max_age = max(observations.keys())\n    return observations[max_age]\n\n\ndef convert_x_to_bbox(x, score=None):\n    \"\"\"\n    Takes a bounding box in the centre form [x,y,s,r] and returns it in the form\n      [x1,y1,x2,y2] where x1,y1 is the top left and x2,y2 is the bottom right\n    \"\"\"\n    w = np.sqrt(x[2] * x[3])\n    h = x[2] / w\n    if score is None:\n        return np.array(\n            [x[0] - w / 2.0, x[1] - h / 2.0, x[0] + w / 2.0, x[1] + h / 2.0]\n        ).reshape((1, 4))\n    else:\n        return np.array(\n            [x[0] - w / 2.0, x[1] - h / 2.0, x[0] + w / 2.0, x[1] + h / 2.0, score]\n        ).reshape((1, 5))\n\n\ndef convert_obb_to_z(obb):\n    \"\"\"\n    Convert [cx, cy, w, h, theta] to [cx, cy, s, r, theta].\n    \"\"\"\n    obb = np.asarray(obb, dtype=float).reshape(-1)\n    cx, cy, w, h, theta = obb\n    w = max(float(w), 1e-6)\n    h = max(float(h), 1e-6)\n    s = w * h\n    r = w / h\n    return np.array([cx, cy, s, r, theta], dtype=float).reshape((5, 1))\n\n\ndef convert_x_to_obb(x, score=None):\n    \"\"\"\n    Convert [x, y, s, r, theta] to [x, y, w, h, theta].\n    \"\"\"\n    x = np.asarray(x, dtype=float).reshape(-1)\n    w = np.sqrt(max(float(x[2] * x[3]), 1e-12))\n    h = float(x[2]) / max(w, 1e-6)\n    if score is None:\n        return np.array([x[0], x[1], w, h, x[4]], dtype=float).reshape((1, 5))\n    return np.array([x[0], x[1], w, h, x[4], score], dtype=float).reshape((1, 6))\n\n\ndef speed_direction(bbox1, bbox2):\n    cx1, cy1 = (bbox1[0] + bbox1[2]) / 2.0, (bbox1[1] + bbox1[3]) / 2.0\n    cx2, cy2 = (bbox2[0] + bbox2[2]) / 2.0, (bbox2[1] + bbox2[3]) / 2.0\n    speed = np.array([cy2 - cy1, cx2 - cx1])\n    norm = np.sqrt((cy2 - cy1) ** 2 + (cx2 - cx1) ** 2) + 1e-6\n    return speed / norm\n\n\ndef speed_direction_obb(bbox1, bbox2):\n    cx1, cy1 = bbox1[0], bbox1[1]\n    cx2, cy2 = bbox2[0], bbox2[1]\n    speed = np.array([cy2 - cy1, cx2 - cx1])\n    norm = np.sqrt((cy2 - cy1) ** 2 + (cx2 - cx1) ** 2) + 1e-6\n    return speed / norm\n\n\nclass KalmanBoxTracker(object):\n    \"\"\"\n    This class represents the internal state of individual tracked objects observed as bbox.\n    \"\"\"\n\n    count = 0\n\n    def __init__(\n        self,\n        bbox,\n        cls,\n        det_ind,\n        delta_t=3,\n        max_obs=50,\n        Q_xy_scaling=0.01,\n        Q_s_scaling=0.0001,\n        is_obb=False,\n        Q_a_scaling=0.0001,\n    ):\n        \"\"\"\n        Initialises a tracker using initial bounding box.\n\n        \"\"\"\n        # define constant velocity model\n        self.det_ind = det_ind\n\n        self.Q_xy_scaling = Q_xy_scaling\n        self.Q_s_scaling = Q_s_scaling\n        self.Q_a_scaling = Q_a_scaling\n        self.is_obb = is_obb\n\n        if self.is_obb:\n            self.kf = KalmanFilterXYSR(dim_x=9, dim_z=5, max_obs=max_obs)\n            self.kf.F = np.array(\n                [\n                    [1, 0, 0, 0, 0, 1, 0, 0, 0],  # x += vx\n                    [0, 1, 0, 0, 0, 0, 1, 0, 0],  # y += vy\n                    [0, 0, 1, 0, 0, 0, 0, 1, 0],  # s += vs\n                    [0, 0, 0, 1, 0, 0, 0, 0, 0],  # r static\n                    [0, 0, 0, 0, 1, 0, 0, 0, 1],  # theta += vtheta\n                    [0, 0, 0, 0, 0, 1, 0, 0, 0],\n                    [0, 0, 0, 0, 0, 0, 1, 0, 0],\n                    [0, 0, 0, 0, 0, 0, 0, 1, 0],\n                    [0, 0, 0, 0, 0, 0, 0, 0, 1],\n                ]\n            )\n            self.kf.H = np.array(\n                [\n                    [1, 0, 0, 0, 0, 0, 0, 0, 0],  # x\n                    [0, 1, 0, 0, 0, 0, 0, 0, 0],  # y\n                    [0, 0, 1, 0, 0, 0, 0, 0, 0],  # s\n                    [0, 0, 0, 1, 0, 0, 0, 0, 0],  # r\n                    [0, 0, 0, 0, 1, 0, 0, 0, 0],  # theta\n                ]\n            )\n            self.kf.R[2:, 2:] *= 10.0\n            self.kf.P[\n                5:, 5:\n            ] *= 1000.0  # give high uncertainty to the unobservable initial velocities\n            self.kf.P *= 10.0\n\n            self.kf.Q[5:7, 5:7] *= self.Q_xy_scaling\n            self.kf.Q[7, 7] *= self.Q_s_scaling\n            self.kf.Q[8, 8] *= self.Q_a_scaling\n            self.kf.x[:5] = convert_obb_to_z(bbox[:5])\n        else:\n            self.kf = KalmanFilterXYSR(dim_x=7, dim_z=4, max_obs=max_obs)\n            self.kf.F = np.array(\n                [\n                    [1, 0, 0, 0, 1, 0, 0],\n                    [0, 1, 0, 0, 0, 1, 0],\n                    [0, 0, 1, 0, 0, 0, 1],\n                    [0, 0, 0, 1, 0, 0, 0],\n                    [0, 0, 0, 0, 1, 0, 0],\n                    [0, 0, 0, 0, 0, 1, 0],\n                    [0, 0, 0, 0, 0, 0, 1],\n                ]\n            )\n            self.kf.H = np.array(\n                [\n                    [1, 0, 0, 0, 0, 0, 0],\n                    [0, 1, 0, 0, 0, 0, 0],\n                    [0, 0, 1, 0, 0, 0, 0],\n                    [0, 0, 0, 1, 0, 0, 0],\n                ]\n            )\n\n            self.kf.R[2:, 2:] *= 10.0\n            self.kf.P[\n                4:, 4:\n            ] *= 1000.0  # give high uncertainty to the unobservable initial velocities\n            self.kf.P *= 10.0\n\n            self.kf.Q[4:6, 4:6] *= self.Q_xy_scaling\n            self.kf.Q[-1, -1] *= self.Q_s_scaling\n            self.kf.x[:4] = xyxy2xysr(bbox)\n        self.time_since_update = 0\n        self.id = KalmanBoxTracker.count\n        KalmanBoxTracker.count += 1\n        self.max_obs = max_obs\n        self.history = deque([], maxlen=self.max_obs)\n        self.hits = 0\n        self.hit_streak = 0\n        self.age = 0\n        self.conf = bbox[-1]\n        self.cls = cls\n        \"\"\"\n        NOTE: [-1,-1,-1,-1,-1] is a compromising placeholder for non-observation status, the same for the return of\n        function k_previous_obs. It is ugly and I do not like it. But to support generate observation array in a\n        fast and unified way, which you would see below k_observations = np.array([k_previous_obs(...]]),\n        let's bear it for now.\n        \"\"\"\n        self.last_observation = (\n            np.array([-1, -1, -1, -1, -1, -1])\n            if self.is_obb\n            else np.array([-1, -1, -1, -1, -1])\n        )\n        self.observations = dict()\n        self.history_observations = deque([], maxlen=self.max_obs)\n        self.velocity = None\n        self.delta_t = delta_t\n        self._plot_angle = None\n\n    @staticmethod\n    def _wrap_pi_periodic(delta: float) -> float:\n        return float((delta + (np.pi / 2.0)) % np.pi - (np.pi / 2.0))\n\n    def _state_obb_for_plot(self) -> np.ndarray:\n        \"\"\"Return current OBB state as corners with state-only angle smoothing.\"\"\"\n        box = convert_x_to_obb(self.kf.x)[0].astype(np.float32)\n        if box[3] > box[2]:\n            box[2], box[3] = box[3], box[2]\n            box[4] = box[4] + (np.pi / 2.0)\n        target = float((box[4] + np.pi) % (2.0 * np.pi) - np.pi)\n        if self._plot_angle is None:\n            self._plot_angle = target\n        else:\n            self._plot_angle = self._plot_angle + self._wrap_pi_periodic(\n                target - self._plot_angle\n            )\n        rect = (\n            (float(box[0]), float(box[1])),\n            (max(float(box[2]), 1e-4), max(float(box[3]), 1e-4)),\n            float(np.degrees(self._plot_angle)),\n        )\n        corners = cv2.boxPoints(rect).reshape(-1)\n        return np.asarray(corners, dtype=np.float32)\n\n    def update(self, bbox, cls, det_ind):\n        \"\"\"\n        Updates the state vector with observed bbox.\n        \"\"\"\n        self.det_ind = det_ind\n        if bbox is not None:\n            self.conf = bbox[-1]\n            self.cls = cls\n            if self.last_observation.sum() >= 0:  # no previous observation\n                previous_box = None\n                for i in range(self.delta_t):\n                    dt = self.delta_t - i\n                    if self.age - dt in self.observations:\n                        previous_box = self.observations[self.age - dt]\n                        break\n                if previous_box is None:\n                    previous_box = self.last_observation\n                # Estimate the track speed direction with observations Δt steps away\n                if self.is_obb:\n                    self.velocity = speed_direction_obb(previous_box, bbox)\n                else:\n                    self.velocity = speed_direction(previous_box, bbox)\n\n            \"\"\"\n              Insert new observations. This is a ugly way to maintain both self.observations\n              and self.history_observations. Bear it for the moment.\n            \"\"\"\n            self.last_observation = bbox\n            self.observations[self.age] = bbox\n            self.time_since_update = 0\n            self.hits += 1\n            self.hit_streak += 1\n            if self.is_obb:\n                self.kf.update(convert_obb_to_z(bbox[:5]))\n                self.history_observations.append(self._state_obb_for_plot())\n            else:\n                self.kf.update(xyxy2xysr(bbox))\n                self.history_observations.append(bbox)\n        else:\n            self.kf.update(bbox)\n\n    def predict(self):\n        \"\"\"\n        Advances the state vector and returns the predicted bounding box estimate.\n        \"\"\"\n        if self.is_obb:\n            if (self.kf.x[7] + self.kf.x[2]) <= 0:\n                self.kf.x[7] *= 0.0\n        else:\n            if (self.kf.x[6] + self.kf.x[2]) <= 0:\n                self.kf.x[6] *= 0.0\n\n        self.kf.predict()\n        self.age += 1\n        if self.time_since_update > 0:\n            self.hit_streak = 0\n        self.time_since_update += 1\n        if self.is_obb:\n            self.history.append(convert_x_to_obb(self.kf.x))\n        else:\n            self.history.append(convert_x_to_bbox(self.kf.x))\n        return self.history[-1]\n\n    def get_state(self):\n        \"\"\"\n        Returns the current bounding box estimate.\n        \"\"\"\n        if self.is_obb:\n            return convert_x_to_obb(self.kf.x)\n        return convert_x_to_bbox(self.kf.x)\n\n\nclass OcSort(BaseTracker):\n    supports_obb = True\n\n    \"\"\"\n    Initialize the OcSort tracker with various parameters.\n\n    Parameters:\n    - det_thresh (float): Detection threshold for considering detections.\n    - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n    - max_obs (int): Maximum number of historical observations stored for each track. Always greater than max_age by minimum 5.\n    - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n    - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n    - per_class (bool): Enables class-separated tracking.\n    - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True).\n    - asso_func (str): Algorithm name used for data association between detections and tracks.\n    - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes.\n    \n    OcSort-specific parameters:\n    - min_conf (float): Minimum confidence threshold for detections to be considered in second-stage association.\n    - delta_t (int): Time window size for velocity estimation in Kalman Filter.\n    - inertia (float): Motion model weight for velocity direction in matching cost.\n    - use_byte (bool): Whether to use BYTE association in the second association step.\n    - Q_xy_scaling (float): Scaling factor for process noise in position coordinates.\n    - Q_s_scaling (float): Scaling factor for process noise in scale coordinates.\n    \n    Attributes:\n    - frame_count (int): Counter for the frames processed.\n    - active_tracks (list): List to hold active tracks.\n    - trackers (list): List of Kalman filter trackers.\n    \"\"\"\n\n    def __init__(\n        self,\n        # OcSort-specific parameters\n        min_conf: float = 0.1,\n        delta_t: int = 3,\n        inertia: float = 0.2,\n        use_byte: bool = False,\n        Q_xy_scaling: float = 0.01,\n        Q_s_scaling: float = 0.0001,\n        **kwargs  # BaseTracker parameters\n    ):\n        # Capture all init params for logging\n        init_args = {k: v for k, v in locals().items() if k not in ('self', 'kwargs')}\n        super().__init__(**init_args, _tracker_name='OcSort', **kwargs)\n        \n        # Store OcSort-specific parameters\n        self.min_conf: float = min_conf\n        self.asso_threshold: float = self.iou_threshold  # Use from BaseTracker\n        self.delta_t: int = delta_t\n        self.inertia: float = inertia\n        self.use_byte: bool = use_byte\n        self.Q_xy_scaling: float = Q_xy_scaling\n        self.Q_s_scaling: float = Q_s_scaling\n        self.frame_count: int = 0\n        KalmanBoxTracker.count = 0\n        \n        # Initialize tracker collections\n        self.active_tracks: list = []\n        \n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(\n        self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None\n    ) -> np.ndarray:\n        \"\"\"\n        Params:\n          dets - a numpy array of detections in the format [[x1,y1,x2,y2,score],[x1,y1,x2,y2,score],...]\n        Requires: this method must be called once for each frame even with empty detections\n        (use np.empty((0, 5)) for frames without detections).\n        Returns the a similar array, where the last column is the object ID.\n        NOTE: The number of objects returned may differ from the number of detections provided.\n        \"\"\"\n\n        self.check_inputs(dets, img)\n\n        self.frame_count += 1\n        h, w = img.shape[0:2]\n\n        dets = self.detection_layout.with_detection_indices(dets)\n        confs = self.detection_layout.confidences(dets)\n\n        inds_low = confs > self.min_conf\n        inds_high = confs < self.det_thresh\n        inds_second = np.logical_and(\n            inds_low, inds_high\n        )  # self.det_thresh > score > 0.1, for second matching\n        dets_second = dets[inds_second]  # detections for second matching\n        remain_inds = confs > self.det_thresh\n        dets = dets[remain_inds]\n\n        # get predicted locations from existing trackers.\n        trks = np.zeros((len(self.active_tracks), self.detection_layout.box_with_conf_cols))\n        to_del = []\n        ret = []\n        for t, trk in enumerate(trks):\n            pos = self.active_tracks[t].predict()[0]\n            trk[:] = [pos[i] for i in range(self.detection_layout.box_cols)] + [0]\n            if np.any(np.isnan(pos)):\n                to_del.append(t)\n        trks = np.ma.compress_rows(np.ma.masked_invalid(trks))\n        for t in reversed(to_del):\n            self.active_tracks.pop(t)\n\n        velocities = np.array(\n            [\n                trk.velocity if trk.velocity is not None else np.array((0, 0))\n                for trk in self.active_tracks\n            ]\n        )\n        last_boxes = np.array([trk.last_observation for trk in self.active_tracks])\n\n        k_observations = np.array(\n            [\n                k_previous_obs(\n                    trk.observations, trk.age, self.delta_t, is_obb=self.is_obb\n                )\n                for trk in self.active_tracks\n            ]\n        )\n\n        \"\"\"\n            First round of association\n        \"\"\"\n        matched, unmatched_dets, unmatched_trks = associate(\n            dets[:, 0 : self.detection_layout.box_with_conf_cols],\n            trks,\n            self.asso_func,\n            self.asso_threshold,\n            velocities,\n            k_observations,\n            self.inertia,\n            w,\n            h,\n        )\n        for m in matched:\n            self.active_tracks[m[1]].update(\n                dets[m[0], :-2], dets[m[0], -2], dets[m[0], -1]\n            )\n\n        \"\"\"\n            Second round of associaton by OCR\n        \"\"\"\n        # BYTE association\n        if self.use_byte and len(dets_second) > 0 and unmatched_trks.shape[0] > 0:\n            u_trks = trks[unmatched_trks]\n            iou_left = self.asso_func(\n                dets_second, u_trks\n            )  # iou between low score detections and unmatched tracks\n            iou_left = np.array(iou_left)\n            if iou_left.max() > self.asso_threshold:\n                \"\"\"\n                NOTE: by using a lower threshold, e.g., self.asso_threshold - 0.1, you may\n                get a higher performance especially on MOT17/MOT20 datasets. But we keep it\n                uniform here for simplicity\n                \"\"\"\n                matched_indices = linear_assignment(-iou_left)\n                to_remove_trk_indices = []\n                for m in matched_indices:\n                    det_ind, trk_ind = m[0], unmatched_trks[m[1]]\n                    if iou_left[m[0], m[1]] < self.asso_threshold:\n                        continue\n                    self.active_tracks[trk_ind].update(\n                        dets_second[det_ind, :-2],\n                        dets_second[det_ind, -2],\n                        dets_second[det_ind, -1],\n                    )\n                    to_remove_trk_indices.append(trk_ind)\n                unmatched_trks = np.setdiff1d(\n                    unmatched_trks, np.array(to_remove_trk_indices)\n                )\n\n        if unmatched_dets.shape[0] > 0 and unmatched_trks.shape[0] > 0:\n            left_dets = dets[unmatched_dets]\n            left_trks = last_boxes[unmatched_trks]\n            iou_left = self.asso_func(left_dets, left_trks)\n            iou_left = np.array(iou_left)\n            if iou_left.max() > self.asso_threshold:\n                \"\"\"\n                NOTE: by using a lower threshold, e.g., self.asso_threshold - 0.1, you may\n                get a higher performance especially on MOT17/MOT20 datasets. But we keep it\n                uniform here for simplicity\n                \"\"\"\n                rematched_indices = linear_assignment(-iou_left)\n                to_remove_det_indices = []\n                to_remove_trk_indices = []\n                for m in rematched_indices:\n                    det_ind, trk_ind = unmatched_dets[m[0]], unmatched_trks[m[1]]\n                    if iou_left[m[0], m[1]] < self.asso_threshold:\n                        continue\n                    self.active_tracks[trk_ind].update(\n                        dets[det_ind, :-2], dets[det_ind, -2], dets[det_ind, -1]\n                    )\n                    to_remove_det_indices.append(det_ind)\n                    to_remove_trk_indices.append(trk_ind)\n                unmatched_dets = np.setdiff1d(\n                    unmatched_dets, np.array(to_remove_det_indices)\n                )\n                unmatched_trks = np.setdiff1d(\n                    unmatched_trks, np.array(to_remove_trk_indices)\n                )\n\n        for m in unmatched_trks:\n            self.active_tracks[m].update(None, None, None)\n\n        # create and initialise new trackers for unmatched detections\n        for i in unmatched_dets:\n            trk = KalmanBoxTracker(\n                dets[i, : self.detection_layout.box_with_conf_cols],\n                dets[i, self.detection_layout.cls_idx],\n                dets[i, self.detection_layout.det_cols],\n                delta_t=self.delta_t,\n                Q_xy_scaling=self.Q_xy_scaling,\n                Q_s_scaling=self.Q_s_scaling,\n                Q_a_scaling=self.Q_s_scaling,\n                max_obs=self.max_obs,\n                is_obb=self.is_obb,\n            )\n            self.active_tracks.append(trk)\n        i = len(self.active_tracks)\n        for trk in reversed(self.active_tracks):\n            if trk.last_observation.sum() < 0:\n                d = trk.get_state()[0]\n            else:\n                \"\"\"\n                this is optional to use the recent observation or the kalman filter prediction,\n                we didn't notice significant difference here\n                \"\"\"\n                d = trk.last_observation[: self.detection_layout.box_cols]\n            if (trk.time_since_update < 1) and (\n                trk.hit_streak >= self.min_hits or self.frame_count <= self.min_hits\n            ):\n                # +1 as MOT benchmark requires positive\n                ret.append(\n                    np.concatenate(\n                        (d, [trk.id + 1], [trk.conf], [trk.cls], [trk.det_ind])\n                    ).reshape(1, -1)\n                )\n            i -= 1\n            # remove dead tracklet\n            if trk.time_since_update > self.max_age:\n                self.active_tracks.pop(i)\n        if len(ret) > 0:\n            return np.concatenate(ret)\n        return np.array([])\n"
  },
  {
    "path": "boxmot/trackers/sfsort/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/sfsort/sfsort.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n# SFSORT implementation adapted for BoxMOT\n\nfrom __future__ import annotations\n\nfrom collections import deque\nfrom dataclasses import dataclass\nfrom typing import Iterable\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.utils.iou import AssociationFunction\nfrom boxmot.utils.matching import linear_assignment\n\n\nclass TrackState:\n    \"\"\"Enumeration of possible states of a track.\"\"\"\n\n    Active = 0\n    Lost_Central = 1\n    Lost_Marginal = 2\n\n\n@dataclass(eq=False)\nclass Track:\n    \"\"\"Lightweight track container for SFSORT.\"\"\"\n\n    bbox: np.ndarray\n    last_frame: int\n    track_id: int\n    conf: float\n    cls: int\n    det_ind: int\n    state: int = TrackState.Active\n    history_observations: deque = None\n    time_since_update: int = 0\n    _plot_angle: float | None = None\n    theta_damping: float = 0.8\n    _theta_velocity: float = 0.0\n\n    def __post_init__(self) -> None:\n        self.bbox = np.asarray(self.bbox, dtype=np.float32)\n        self.conf = float(self.conf)\n        self.cls = int(self.cls)\n        self.det_ind = int(self.det_ind)\n        self.theta_damping = float(np.clip(self.theta_damping, 0.0, 1.0))\n        if self.bbox.shape[0] == 5:\n            self.history_observations = deque([self._state_obb_for_plot()], maxlen=50)\n        else:\n            self.history_observations = deque([self.bbox.copy()], maxlen=50)\n        self.time_since_update = 0\n        self._theta_velocity = 0.0\n\n    @property\n    def id(self) -> int:\n        return self.track_id\n\n    @staticmethod\n    def _wrap_pi_periodic(delta: float) -> float:\n        return float((delta + (np.pi / 2.0)) % np.pi - (np.pi / 2.0))\n\n    @staticmethod\n    def _wrap_angle(angle: float) -> float:\n        return float((angle + np.pi) % (2.0 * np.pi) - np.pi)\n\n    @classmethod\n    def _align_obb_measurement(\n        cls, measurement: np.ndarray, reference: np.ndarray\n    ) -> np.ndarray:\n        \"\"\"Align equivalent OBB forms to the current track state.\"\"\"\n        aligned = np.asarray(measurement, dtype=np.float32).copy().reshape(-1)\n        ref = np.asarray(reference, dtype=np.float32).reshape(-1)\n\n        ref_w = max(float(ref[2]), 1e-6)\n        ref_h = max(float(ref[3]), 1e-6)\n        ref_theta = float(ref[4])\n        w = max(float(aligned[2]), 1e-6)\n        h = max(float(aligned[3]), 1e-6)\n        theta = float(aligned[4])\n\n        candidates = (\n            (w, h, theta),\n            (w, h, theta + np.pi),\n            (h, w, theta + (np.pi / 2.0)),\n            (h, w, theta - (np.pi / 2.0)),\n        )\n        best_cost = float(\"inf\")\n        best = candidates[0]\n        for cand_w, cand_h, cand_theta in candidates:\n            theta_aligned = ref_theta + cls._wrap_angle(cand_theta - ref_theta)\n            angle_cost = abs(theta_aligned - ref_theta)\n            size_cost = abs(np.log(max(cand_w, 1e-6) / ref_w)) + abs(\n                np.log(max(cand_h, 1e-6) / ref_h)\n            )\n            cost = angle_cost + (0.05 * size_cost)\n            if cost < best_cost:\n                best_cost = cost\n                best = (cand_w, cand_h, theta_aligned)\n\n        aligned[2] = float(best[0])\n        aligned[3] = float(best[1])\n        aligned[4] = float(best[2])\n        return aligned\n\n    def _state_obb_for_plot(self) -> np.ndarray:\n        \"\"\"Return current OBB state as corners with state-only angle smoothing.\"\"\"\n        box = self.bbox.copy()\n        if box[3] > box[2]:\n            box[2], box[3] = box[3], box[2]\n            box[4] = box[4] + (np.pi / 2.0)\n        target = float((box[4] + np.pi) % (2.0 * np.pi) - np.pi)\n        if self._plot_angle is None:\n            self._plot_angle = target\n        else:\n            self._plot_angle = self._plot_angle + self._wrap_pi_periodic(\n                target - self._plot_angle\n            )\n        rect = (\n            (float(box[0]), float(box[1])),\n            (max(float(box[2]), 1e-4), max(float(box[3]), 1e-4)),\n            float(np.degrees(self._plot_angle)),\n        )\n        corners = cv2.boxPoints(rect).reshape(-1)\n        return np.asarray(corners, dtype=np.float32)\n\n    def update(self, box: np.ndarray, frame_id: int, conf: float, cls: int, det_ind: int) -> None:\n        \"\"\"Update a matched track with latest detection.\"\"\"\n\n        incoming_bbox = np.asarray(box, dtype=np.float32).reshape(-1)\n        if self.bbox.shape[0] == 5 and incoming_bbox.shape[0] == 5:\n            aligned = self._align_obb_measurement(incoming_bbox, self.bbox)\n            prev_theta = float(self.bbox[4])\n            theta_delta = self._wrap_angle(float(aligned[4]) - prev_theta)\n            self._theta_velocity = (\n                (self.theta_damping * self._theta_velocity)\n                + ((1.0 - self.theta_damping) * theta_delta)\n            )\n            aligned[4] = self._wrap_angle(prev_theta + self._theta_velocity)\n            self.bbox = aligned.astype(np.float32)\n        else:\n            self.bbox = incoming_bbox\n\n        if self.bbox.shape[0] == 5:\n            self.history_observations.append(self._state_obb_for_plot())\n        else:\n            self.history_observations.append(self.bbox.copy())\n        self.state = TrackState.Active\n        self.time_since_update = 0\n        self.last_frame = frame_id\n        self.conf = float(conf)\n        self.cls = int(cls)\n        self.det_ind = int(det_ind)\n\n\nclass SFSORT(BaseTracker):\n    supports_obb = True\n\n    \"\"\"\n    SFSORT tracker (v4.2) adapted for BoxMOT.\n\n    Parameters:\n    - det_thresh (float): Detection threshold for considering detections.\n    - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n    - max_obs (int): Maximum number of historical observations stored for each track.\n    - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n    - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n    - per_class (bool): Enables class-separated tracking.\n    - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True).\n    - asso_func (str): Algorithm name used for data association between detections and tracks.\n    - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes.\n\n    SFSORT-specific parameters:\n    - high_th (float): High confidence threshold for detections.\n    - match_th_first (float): Match threshold for the first association step.\n    - new_track_th (float): Confidence threshold for initializing new tracks.\n    - low_th (float): Low confidence threshold for second association step.\n    - match_th_second (float): Match threshold for the second association step.\n    - dynamic_tuning (bool): Enable dynamic threshold tuning based on detection density.\n    - cth (float): Confidence threshold for counting detections (dynamic tuning).\n    - high_th_m (float): Dynamic adjustment scale for high_th.\n    - new_track_th_m (float): Dynamic adjustment scale for new_track_th.\n    - match_th_first_m (float): Dynamic adjustment scale for match_th_first.\n    - obb_theta_damping (float): Damping factor for OBB angular-velocity updates (0=no history, 1=full history).\n    - marginal_timeout (int): Timeout for marginally lost tracks.\n    - central_timeout (int): Timeout for centrally lost tracks.\n    - frame_width (int | None): Optional frame width for margin computation.\n    - frame_height (int | None): Optional frame height for margin computation.\n    - horizontal_margin (int | None): Horizontal margin for central loss definition.\n    - vertical_margin (int | None): Vertical margin for central loss definition.\n    \"\"\"\n\n    def __init__(\n        self,\n        high_th: float | None = 0.6,\n        match_th_first: float | None = 0.67,\n        new_track_th: float | None = 0.7,\n        low_th: float | None = 0.1,\n        match_th_second: float | None = 0.3,\n        dynamic_tuning: bool = False,\n        cth: float | None = 0.5,\n        high_th_m: float | None = 0.0,\n        new_track_th_m: float | None = 0.0,\n        match_th_first_m: float | None = 0.0,\n        obb_theta_damping: float = 0.8,\n        marginal_timeout: int | None = 0,\n        central_timeout: int | None = 0,\n        frame_width: int | None = None,\n        frame_height: int | None = None,\n        horizontal_margin: int | None = None,\n        vertical_margin: int | None = None,\n        **kwargs,\n    ) -> None:\n        init_args = {k: v for k, v in locals().items() if k not in (\"self\", \"kwargs\")}\n        det_thresh = 0.6 if high_th is None else float(high_th)\n        super().__init__(det_thresh=det_thresh, _tracker_name=\"SFSORT\", **init_args, **kwargs)\n\n        self.high_th = self._resolve_or_default(high_th, 0.6, 0.0, 1.0)\n        self.match_th_first = self._resolve_or_default(match_th_first, 0.67, 0.0, 0.67)\n        self.new_track_th = self._resolve_or_default(new_track_th, 0.7, self.high_th, 1.0)\n        self.low_th = self._resolve_or_default(low_th, 0.1, 0.0, self.high_th)\n        self.match_th_second = self._resolve_or_default(match_th_second, 0.3, 0.0, 1.0)\n\n        self.dynamic_tuning = bool(dynamic_tuning)\n        self.cth = self._resolve_or_default(cth, 0.5, self.low_th, 1.0)\n        if self.dynamic_tuning:\n            self.high_th_m = self._resolve_or_default(high_th_m, 0.0, 0.02, 0.1)\n            self.new_track_th_m = self._resolve_or_default(new_track_th_m, 0.0, 0.02, 0.08)\n            self.match_th_first_m = self._resolve_or_default(match_th_first_m, 0.0, 0.02, 0.08)\n        else:\n            self.high_th_m = 0.0 if high_th_m is None else float(high_th_m)\n            self.new_track_th_m = 0.0 if new_track_th_m is None else float(new_track_th_m)\n            self.match_th_first_m = 0.0 if match_th_first_m is None else float(match_th_first_m)\n        self.obb_theta_damping = self._resolve_or_default(obb_theta_damping, 0.8, 0.0, 1.0)\n\n        self.marginal_timeout = int(self._resolve_or_default(marginal_timeout, 0, 0, 500))\n        self.central_timeout = int(self._resolve_or_default(central_timeout, 0, 0, 1000))\n\n        self.frame_width = frame_width\n        self.frame_height = frame_height\n        self.horizontal_margin = horizontal_margin\n        self.vertical_margin = vertical_margin\n\n        self.l_margin = 0.0\n        self.r_margin = 0.0\n        self.t_margin = 0.0\n        self.b_margin = 0.0\n        self._margins_ready = False\n        self._maybe_set_margins(frame_width, frame_height)\n\n        self.id_counter = 0\n        self.active_tracks: list[Track] = []\n        self.lost_tracks: list[Track] = []\n\n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray | None = None) -> np.ndarray:\n        self.check_inputs(dets=dets, img=img, embs=embs)\n\n        if not self._margins_ready and hasattr(self, \"w\") and hasattr(self, \"h\"):\n            self._maybe_set_margins(self.w, self.h)\n\n        self.frame_count += 1\n\n        boxes, scores, classes = self._split_detections(dets)\n        det_inds = np.arange(len(dets)) if dets.size else np.empty((0,), dtype=int)\n\n        hth, nth, mth = self._dynamic_thresholds(scores)\n\n        next_active_tracks: list[Track] = []\n\n        self._purge_stale_lost_tracks()\n\n        track_pool = self.active_tracks + self.lost_tracks\n\n        unmatched_tracks = np.array([], dtype=int)\n        high_score = scores > hth\n        if high_score.any():\n            definite_boxes = boxes[high_score]\n            definite_scores = scores[high_score]\n            definite_classes = classes[high_score]\n            definite_det_inds = det_inds[high_score]\n\n            if track_pool:\n                cost = self.calculate_cost(track_pool, definite_boxes, is_obb=self.is_obb)\n                matches, unmatched_tracks, unmatched_detections = linear_assignment(cost, mth)\n                for track_idx, detection_idx in matches:\n                    track = track_pool[track_idx]\n                    track.update(\n                        definite_boxes[detection_idx],\n                        self.frame_count,\n                        definite_scores[detection_idx],\n                        definite_classes[detection_idx],\n                        definite_det_inds[detection_idx],\n                    )\n                    next_active_tracks.append(track)\n                    if track in self.lost_tracks:\n                        self.lost_tracks.remove(track)\n\n                for detection_idx in unmatched_detections:\n                    if definite_scores[detection_idx] > nth:\n                        next_active_tracks.append(\n                            self._new_track(\n                                box=definite_boxes[detection_idx],\n                                frame_id=self.frame_count,\n                                conf=definite_scores[detection_idx],\n                                cls=definite_classes[detection_idx],\n                                det_ind=definite_det_inds[detection_idx],\n                            )\n                        )\n            else:\n                for detection_idx, score in enumerate(definite_scores):\n                    if score > nth:\n                        next_active_tracks.append(\n                            self._new_track(\n                                box=definite_boxes[detection_idx],\n                                frame_id=self.frame_count,\n                                conf=definite_scores[detection_idx],\n                                cls=definite_classes[detection_idx],\n                                det_ind=definite_det_inds[detection_idx],\n                            )\n                        )\n\n        unmatched_track_pool = [track_pool[idx] for idx in unmatched_tracks] if len(unmatched_tracks) else []\n        next_lost_tracks = unmatched_track_pool.copy()\n\n        intermediate_score = np.logical_and(self.low_th < scores, scores < hth)\n        if intermediate_score.any() and len(unmatched_tracks):\n            possible_boxes = boxes[intermediate_score]\n            possible_scores = scores[intermediate_score]\n            possible_classes = classes[intermediate_score]\n            possible_det_inds = det_inds[intermediate_score]\n\n            cost = self.calculate_cost(\n                unmatched_track_pool,\n                possible_boxes,\n                iou_only=True,\n                is_obb=self.is_obb,\n            )\n            matches, _, unmatched_detections = linear_assignment(cost, self.match_th_second)\n\n            for track_idx, detection_idx in matches:\n                track = unmatched_track_pool[track_idx]\n                track.update(\n                    possible_boxes[detection_idx],\n                    self.frame_count,\n                    possible_scores[detection_idx],\n                    possible_classes[detection_idx],\n                    possible_det_inds[detection_idx],\n                )\n                next_active_tracks.append(track)\n                if track in self.lost_tracks:\n                    self.lost_tracks.remove(track)\n                if track in next_lost_tracks:\n                    next_lost_tracks.remove(track)\n\n        if not (high_score.any() or intermediate_score.any()):\n            next_lost_tracks = track_pool.copy()\n\n        self._update_lost_tracks(next_lost_tracks)\n        self.active_tracks = next_active_tracks.copy()\n\n        outputs = [self._format_track(track) for track in next_active_tracks]\n        return np.asarray(outputs, dtype=float) if outputs else self.empty_output(dtype=float)\n\n    def _split_detections(self, dets: np.ndarray) -> tuple[np.ndarray, np.ndarray, np.ndarray]:\n        if self.is_obb:\n            return self._split_obb_detections(dets)\n        return self._split_aabb_detections(dets)\n\n    def _split_aabb_detections(self, dets: np.ndarray) -> tuple[np.ndarray, np.ndarray, np.ndarray]:\n        if dets.size == 0:\n            return (\n                np.empty((0, 4), dtype=np.float32),\n                np.empty((0,), dtype=np.float32),\n                np.empty((0,), dtype=np.float32),\n            )\n        return dets[:, :4], dets[:, 4], dets[:, 5]\n\n    def _split_obb_detections(self, dets: np.ndarray) -> tuple[np.ndarray, np.ndarray, np.ndarray]:\n        if dets.size == 0:\n            return (\n                np.empty((0, 5), dtype=np.float32),\n                np.empty((0,), dtype=np.float32),\n                np.empty((0,), dtype=np.float32),\n            )\n        return dets[:, :5], dets[:, 5], dets[:, 6]\n\n    def _dynamic_thresholds(self, scores: np.ndarray) -> tuple[float, float, float]:\n        hth = self.high_th\n        nth = self.new_track_th\n        mth = self.match_th_first\n        if self.dynamic_tuning:\n            count = len(scores[scores > self.cth])\n            if count < 1:\n                count = 1\n            lnc = np.log10(count)\n            hth = self.clamp(hth - (self.high_th_m * lnc), 0.0, 1.0)\n            nth = self.clamp(nth + (self.new_track_th_m * lnc), hth, 1.0)\n            mth = self.clamp(mth - (self.match_th_first_m * lnc), 0.0, 0.67)\n        return hth, nth, mth\n\n    def _purge_stale_lost_tracks(self) -> None:\n        for track in self.lost_tracks.copy():\n            if track.state == TrackState.Lost_Central:\n                if self.frame_count - track.last_frame > self.central_timeout:\n                    self.lost_tracks.remove(track)\n            else:\n                if self.frame_count - track.last_frame > self.marginal_timeout:\n                    self.lost_tracks.remove(track)\n\n    def _update_lost_tracks(self, next_lost_tracks: Iterable[Track]) -> None:\n        for track in next_lost_tracks:\n            track.time_since_update = max(0, self.frame_count - track.last_frame)\n            if track not in self.lost_tracks:\n                self.lost_tracks.append(track)\n                if track.bbox.shape[0] == 5:\n                    u, v = float(track.bbox[0]), float(track.bbox[1])\n                else:\n                    u = track.bbox[0] + (track.bbox[2] - track.bbox[0]) / 2.0\n                    v = track.bbox[1] + (track.bbox[3] - track.bbox[1]) / 2.0\n                if (self.l_margin < u < self.r_margin) and (self.t_margin < v < self.b_margin):\n                    track.state = TrackState.Lost_Central\n                else:\n                    track.state = TrackState.Lost_Marginal\n\n    def _maybe_set_margins(self, frame_width: int | None, frame_height: int | None) -> None:\n        if frame_width is None or frame_height is None:\n            return\n\n        self.l_margin = 0.0\n        self.r_margin = float(frame_width)\n        if self.horizontal_margin is not None:\n            self.l_margin = float(self.clamp(self.horizontal_margin, 0, frame_width))\n            self.r_margin = float(\n                self.clamp(frame_width - self.horizontal_margin, 0, frame_width)\n            )\n\n        self.t_margin = 0.0\n        self.b_margin = float(frame_height)\n        if self.vertical_margin is not None:\n            self.t_margin = float(self.clamp(self.vertical_margin, 0, frame_height))\n            self.b_margin = float(\n                self.clamp(frame_height - self.vertical_margin, 0, frame_height)\n            )\n\n        self._margins_ready = True\n\n    def _new_track(self, box: np.ndarray, frame_id: int, conf: float, cls: float, det_ind: int) -> Track:\n        track = Track(\n            bbox=box,\n            last_frame=frame_id,\n            track_id=self.id_counter,\n            conf=float(conf),\n            cls=int(cls),\n            det_ind=int(det_ind),\n            theta_damping=self.obb_theta_damping,\n        )\n        self.id_counter += 1\n        return track\n\n    @staticmethod\n    def _format_track(track: Track) -> list[float]:\n        bbox = [float(v) for v in track.bbox.tolist()]\n        return bbox + [\n            float(track.track_id),\n            float(track.conf),\n            float(track.cls),\n            float(track.det_ind),\n        ]\n\n    @staticmethod\n    def clamp(value: float, min_value: float, max_value: float) -> float:\n        return max(min_value, min(value, max_value))\n\n    @staticmethod\n    def _resolve_or_default(\n        value: float | None, default: float, min_value: float, max_value: float\n    ) -> float:\n        resolved = default if value is None else value\n        return SFSORT.clamp(resolved, min_value, max_value)\n\n    @staticmethod\n    def _obb_to_xyxy(box: np.ndarray) -> np.ndarray:\n        box = np.asarray(box, dtype=np.float32).reshape(-1)\n        cx, cy, w, h, angle = box[:5]\n        rect = ((float(cx), float(cy)), (max(float(w), 1e-4), max(float(h), 1e-4)), float(np.degrees(angle)))\n        corners = cv2.boxPoints(rect)\n        x1, y1 = corners.min(axis=0)\n        x2, y2 = corners.max(axis=0)\n        return np.array([x1, y1, x2, y2], dtype=np.float32)\n\n    @staticmethod\n    def calculate_cost(\n        tracks: list[Track],\n        boxes: np.ndarray,\n        iou_only: bool = False,\n        is_obb: bool = False,\n    ) -> np.ndarray:\n        \"\"\"Calculates the association cost based on IoU and box similarity.\"\"\"\n        active_boxes = [track.bbox for track in tracks]\n        if len(active_boxes) == 0 or boxes.size == 0:\n            return np.empty((len(active_boxes), len(boxes)))\n\n        active_boxes = np.asarray(active_boxes, dtype=np.float32)\n        boxes = np.asarray(boxes, dtype=np.float32)\n\n        if is_obb:\n            return SFSORT._calculate_cost_obb(active_boxes, boxes, iou_only=iou_only)\n        return SFSORT._calculate_cost_aabb(active_boxes, boxes, iou_only=iou_only)\n\n    @staticmethod\n    def _calculate_cost_obb(\n        active_boxes: np.ndarray,\n        boxes: np.ndarray,\n        iou_only: bool = False,\n    ) -> np.ndarray:\n        eps = 1e-7\n        iou = AssociationFunction.iou_batch_obb(active_boxes, boxes)\n        if iou_only:\n            return 1.0 - iou\n\n        centerx1 = active_boxes[:, 0]\n        centery1 = active_boxes[:, 1]\n        centerx2 = boxes[:, 0]\n        centery2 = boxes[:, 1]\n        active_xyxy = np.vstack([SFSORT._obb_to_xyxy(box) for box in active_boxes])\n        boxes_xyxy = np.vstack([SFSORT._obb_to_xyxy(box) for box in boxes])\n        box1_width = active_boxes[:, 2]\n        box2_width = boxes[:, 2]\n        box1_height = active_boxes[:, 3]\n        box2_height = boxes[:, 3]\n        sw = np.minimum(box1_width[:, None], box2_width) / (\n            np.maximum(box1_width[:, None], box2_width) + eps\n        )\n        sh = np.minimum(box1_height[:, None], box2_height) / (\n            np.maximum(box1_height[:, None], box2_height) + eps\n        )\n\n        return SFSORT._combine_cost_terms(\n            iou=iou,\n            centerx1=centerx1,\n            centery1=centery1,\n            centerx2=centerx2,\n            centery2=centery2,\n            active_xyxy=active_xyxy,\n            boxes_xyxy=boxes_xyxy,\n            sw=sw,\n            sh=sh,\n        )\n\n    @staticmethod\n    def _calculate_cost_aabb(\n        active_boxes: np.ndarray,\n        boxes: np.ndarray,\n        iou_only: bool = False,\n    ) -> np.ndarray:\n        eps = 1e-7\n        b1_x1, b1_y1, b1_x2, b1_y2 = active_boxes.T\n        b2_x1, b2_y1, b2_x2, b2_y2 = boxes.T\n\n        h_intersection = (\n            np.minimum(b1_x2[:, None], b2_x2) - np.maximum(b1_x1[:, None], b2_x1)\n        ).clip(0)\n        w_intersection = (\n            np.minimum(b1_y2[:, None], b2_y2) - np.maximum(b1_y1[:, None], b2_y1)\n        ).clip(0)\n\n        intersection = h_intersection * w_intersection\n\n        box1_height = b1_x2 - b1_x1\n        box2_height = b2_x2 - b2_x1\n        box1_width = b1_y2 - b1_y1\n        box2_width = b2_y2 - b2_y1\n\n        box1_area = box1_height * box1_width\n        box2_area = box2_height * box2_width\n        union = box2_area + box1_area[:, None] - intersection + eps\n        iou = intersection / union\n\n        if iou_only:\n            return 1.0 - iou\n\n        centerx1 = (b1_x1 + b1_x2) / 2.0\n        centery1 = (b1_y1 + b1_y2) / 2.0\n        centerx2 = (b2_x1 + b2_x2) / 2.0\n        centery2 = (b2_y1 + b2_y2) / 2.0\n        delta_w = np.abs(box2_width - box1_width[:, None])\n        sw = w_intersection / np.abs(w_intersection + delta_w + eps)\n        delta_h = np.abs(box2_height - box1_height[:, None])\n        sh = h_intersection / np.abs(h_intersection + delta_h + eps)\n\n        return SFSORT._combine_cost_terms(\n            iou=iou,\n            centerx1=centerx1,\n            centery1=centery1,\n            centerx2=centerx2,\n            centery2=centery2,\n            active_xyxy=active_boxes,\n            boxes_xyxy=boxes,\n            sw=sw,\n            sh=sh,\n        )\n\n    @staticmethod\n    def _combine_cost_terms(\n        iou: np.ndarray,\n        centerx1: np.ndarray,\n        centery1: np.ndarray,\n        centerx2: np.ndarray,\n        centery2: np.ndarray,\n        active_xyxy: np.ndarray,\n        boxes_xyxy: np.ndarray,\n        sw: np.ndarray,\n        sh: np.ndarray,\n    ) -> np.ndarray:\n        eps = 1e-7\n        inner_diag = np.abs(centerx1[:, None] - centerx2) + np.abs(centery1[:, None] - centery2)\n\n        xxc1 = np.minimum(active_xyxy[:, 0][:, None], boxes_xyxy[:, 0])\n        yyc1 = np.minimum(active_xyxy[:, 1][:, None], boxes_xyxy[:, 1])\n        xxc2 = np.maximum(active_xyxy[:, 2][:, None], boxes_xyxy[:, 2])\n        yyc2 = np.maximum(active_xyxy[:, 3][:, None], boxes_xyxy[:, 3])\n        outer_diag = np.abs(xxc2 - xxc1) + np.abs(yyc2 - yyc1)\n        outer_diag = np.maximum(outer_diag, eps)\n\n        diou = iou - (inner_diag / outer_diag)\n        bbsi = diou + sh + sw\n        return 1.0 - (bbsi / 3.0)\n"
  },
  {
    "path": "boxmot/trackers/strongsort/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/strongsort/sort/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
  },
  {
    "path": "boxmot/trackers/strongsort/sort/detection.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\nclass Detection(object):\n    \"\"\"\n    This class represents a bounding box detection in a single image.\n\n    Parameters\n    ----------\n    tlwh : array_like\n        Bounding box in format `(x, y, w, h)`.\n    confidence : float\n        Detector confidence score.\n    feature : array_like\n        A feature vector that describes the object contained in this image.\n\n    Attributes\n    ----------\n    tlwh : ndarray\n        Bounding box in format `(top left x, top left y, width, height)`.\n    confidence : ndarray\n        Detector confidence score.\n    feature : ndarray | NoneType\n        A feature vector that describes the object contained in this image.\n\n    \"\"\"\n\n    def __init__(self, tlwh, conf, cls, det_ind, feat):\n        self.tlwh = tlwh\n        self.conf = conf\n        self.cls = cls\n        self.det_ind = det_ind\n        self.feat = feat\n\n    def to_xyah(self):\n        \"\"\"Convert bounding box to format `(center x, center y, aspect ratio,\n        height)`, where the aspect ratio is `width / height`.\n        \"\"\"\n        ret = self.tlwh.copy()\n        ret[:2] += ret[2:] / 2\n        ret[2] /= ret[3]\n        return ret\n"
  },
  {
    "path": "boxmot/trackers/strongsort/sort/iou_matching.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import\n\nimport numpy as np\n\nfrom . import linear_assignment\n\n\ndef iou(bbox, candidates):\n    \"\"\"Computer intersection over union.\n\n    Parameters\n    ----------\n    bbox : ndarray\n        A bounding box in format `(top left x, top left y, width, height)`.\n    candidates : ndarray\n        A matrix of candidate bounding boxes (one per row) in the same format\n        as `bbox`.\n\n    Returns\n    -------\n    ndarray\n        The intersection over union in [0, 1] between the `bbox` and each\n        candidate. A higher score means a larger fraction of the `bbox` is\n        occluded by the candidate.\n\n    \"\"\"\n    bbox_tl, bbox_br = bbox[:2], bbox[:2] + bbox[2:]\n    candidates_tl = candidates[:, :2]\n    candidates_br = candidates[:, :2] + candidates[:, 2:]\n\n    tl = np.c_[\n        np.maximum(bbox_tl[0], candidates_tl[:, 0])[:, np.newaxis],\n        np.maximum(bbox_tl[1], candidates_tl[:, 1])[:, np.newaxis],\n    ]\n    br = np.c_[\n        np.minimum(bbox_br[0], candidates_br[:, 0])[:, np.newaxis],\n        np.minimum(bbox_br[1], candidates_br[:, 1])[:, np.newaxis],\n    ]\n    wh = np.maximum(0.0, br - tl)\n\n    area_intersection = wh.prod(axis=1)\n    area_bbox = bbox[2:].prod()\n    area_candidates = candidates[:, 2:].prod(axis=1)\n    return area_intersection / (area_bbox + area_candidates - area_intersection)\n\n\ndef iou_cost(tracks, detections, track_indices=None, detection_indices=None):\n    \"\"\"An intersection over union distance metric.\n\n    Parameters\n    ----------\n    tracks : List[deep_sort.track.Track]\n        A list of tracks.\n    detections : List[deep_sort.detection.Detection]\n        A list of detections.\n    track_indices : Optional[List[int]]\n        A list of indices to tracks that should be matched. Defaults to\n        all `tracks`.\n    detection_indices : Optional[List[int]]\n        A list of indices to detections that should be matched. Defaults\n        to all `detections`.\n\n    Returns\n    -------\n    ndarray\n        Returns a cost matrix of shape\n        len(track_indices), len(detection_indices) where entry (i, j) is\n        `1 - iou(tracks[track_indices[i]], detections[detection_indices[j]])`.\n\n    \"\"\"\n    if track_indices is None:\n        track_indices = np.arange(len(tracks))\n    if detection_indices is None:\n        detection_indices = np.arange(len(detections))\n\n    cost_matrix = np.zeros((len(track_indices), len(detection_indices)))\n    for row, track_idx in enumerate(track_indices):\n        if tracks[track_idx].time_since_update > 1:\n            cost_matrix[row, :] = linear_assignment.INFTY_COST\n            continue\n\n        bbox = tracks[track_idx].to_tlwh()\n        candidates = np.asarray([detections[i].tlwh for i in detection_indices])\n        cost_matrix[row, :] = 1.0 - iou(bbox, candidates)\n    return cost_matrix\n"
  },
  {
    "path": "boxmot/trackers/strongsort/sort/linear_assignment.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import\n\nimport numpy as np\nimport torch\nfrom scipy.optimize import linear_sum_assignment\n\nfrom boxmot.utils.matching import chi2inv95\n\nINFTY_COST = 1e5\n\n\ndef min_cost_matching(\n    distance_metric,\n    max_distance,\n    tracks,\n    detections,\n    track_indices=None,\n    detection_indices=None,\n):\n    \"\"\"Solve linear assignment problem.\n    Parameters\n    ----------\n    distance_metric : Callable[List[Track], List[Detection], List[int], List[int]) -> ndarray\n        The distance metric is given a list of tracks and detections as well as\n        a list of N track indices and M detection indices. The metric should\n        return the NxM dimensional cost matrix, where element (i, j) is the\n        association cost between the i-th track in the given track indices and\n        the j-th detection in the given detection_indices.\n    max_distance : float\n        Gating threshold. Associations with cost larger than this value are\n        disregarded.\n    tracks : List[track.Track]\n        A list of predicted tracks at the current time step.\n    detections : List[detection.Detection]\n        A list of detections at the current time step.\n    track_indices : List[int]\n        List of track indices that maps rows in `cost_matrix` to tracks in\n        `tracks` (see description above).\n    detection_indices : List[int]\n        List of detection indices that maps columns in `cost_matrix` to\n        detections in `detections` (see description above).\n    Returns\n    -------\n    (List[(int, int)], List[int], List[int])\n        Returns a tuple with the following three entries:\n        * A list of matched track and detection indices.\n        * A list of unmatched track indices.\n        * A list of unmatched detection indices.\n    \"\"\"\n    if track_indices is None:\n        track_indices = np.arange(len(tracks))\n    if detection_indices is None:\n        detection_indices = np.arange(len(detections))\n\n    if len(detection_indices) == 0 or len(track_indices) == 0:\n        return [], track_indices, detection_indices  # Nothing to match.\n\n    cost_matrix = distance_metric(tracks, detections, track_indices, detection_indices)\n    cost_matrix[cost_matrix > max_distance] = max_distance + 1e-5\n    row_indices, col_indices = linear_sum_assignment(cost_matrix)\n\n    matches, unmatched_tracks, unmatched_detections = [], [], []\n    for col, detection_idx in enumerate(detection_indices):\n        if col not in col_indices:\n            unmatched_detections.append(detection_idx)\n    for row, track_idx in enumerate(track_indices):\n        if row not in row_indices:\n            unmatched_tracks.append(track_idx)\n    for row, col in zip(row_indices, col_indices):\n        track_idx = track_indices[row]\n        detection_idx = detection_indices[col]\n        if cost_matrix[row, col] > max_distance:\n            unmatched_tracks.append(track_idx)\n            unmatched_detections.append(detection_idx)\n        else:\n            matches.append((track_idx, detection_idx))\n    return matches, unmatched_tracks, unmatched_detections\n\n\ndef matching_cascade(\n    distance_metric,\n    max_distance,\n    cascade_depth,\n    tracks,\n    detections,\n    track_indices=None,\n    detection_indices=None,\n):\n    \"\"\"Run matching cascade.\n    Parameters\n    ----------\n    distance_metric : Callable[List[Track], List[Detection], List[int], List[int]) -> ndarray\n        The distance metric is given a list of tracks and detections as well as\n        a list of N track indices and M detection indices. The metric should\n        return the NxM dimensional cost matrix, where element (i, j) is the\n        association cost between the i-th track in the given track indices and\n        the j-th detection in the given detection indices.\n    max_distance : float\n        Gating threshold. Associations with cost larger than this value are\n        disregarded.\n    cascade_depth: int\n        The cascade depth, should be se to the maximum track age.\n    tracks : List[track.Track]\n        A list of predicted tracks at the current time step.\n    detections : List[detection.Detection]\n        A list of detections at the current time step.\n    track_indices : Optional[List[int]]\n        List of track indices that maps rows in `cost_matrix` to tracks in\n        `tracks` (see description above). Defaults to all tracks.\n    detection_indices : Optional[List[int]]\n        List of detection indices that maps columns in `cost_matrix` to\n        detections in `detections` (see description above). Defaults to all\n        detections.\n    Returns\n    -------\n    (List[(int, int)], List[int], List[int])\n        Returns a tuple with the following three entries:\n        * A list of matched track and detection indices.\n        * A list of unmatched track indices.\n        * A list of unmatched detection indices.\n    \"\"\"\n    if track_indices is None:\n        track_indices = list(range(len(tracks)))\n    if detection_indices is None:\n        detection_indices = list(range(len(detections)))\n\n    unmatched_detections = detection_indices\n    matches = []\n    track_indices_l = [k for k in track_indices]\n    matches_l, _, unmatched_detections = min_cost_matching(\n        distance_metric,\n        max_distance,\n        tracks,\n        detections,\n        track_indices_l,\n        unmatched_detections,\n    )\n    matches += matches_l\n    unmatched_tracks = list(set(track_indices) - set(k for k, _ in matches))\n    return matches, unmatched_tracks, unmatched_detections\n\n\ndef gate_cost_matrix(\n    cost_matrix,\n    tracks,\n    detections,\n    track_indices,\n    detection_indices,\n    mc_lambda,\n    gated_cost=INFTY_COST,\n    only_position=False,\n):\n    \"\"\"Invalidate infeasible entries in cost matrix based on the state\n    distributions obtained by Kalman filtering.\n    Parameters\n    ----------\n    kf : The Kalman filter.\n    cost_matrix : ndarray\n        The NxM dimensional cost matrix, where N is the number of track indices\n        and M is the number of detection indices, such that entry (i, j) is the\n        association cost between `tracks[track_indices[i]]` and\n        `detections[detection_indices[j]]`.\n    tracks : List[track.Track]\n        A list of predicted tracks at the current time step.\n    detections : List[detection.Detection]\n        A list of detections at the current time step.\n    track_indices : List[int]\n        List of track indices that maps rows in `cost_matrix` to tracks in\n        `tracks` (see description above).\n    detection_indices : List[int]\n        List of detection indices that maps columns in `cost_matrix` to\n        detections in `detections` (see description above).\n    gated_cost : Optional[float]\n        Entries in the cost matrix corresponding to infeasible associations are\n        set this value. Defaults to a very large value.\n    only_position : Optional[bool]\n        If True, only the x, y position of the state distribution is considered\n        during gating. Defaults to False.\n    Returns\n    -------\n    ndarray\n        Returns the modified cost matrix.\n    \"\"\"\n\n    gating_threshold = chi2inv95[4]\n    measurements = np.asarray([detections[i].to_xyah() for i in detection_indices])\n    for row, track_idx in enumerate(track_indices):\n        track = tracks[track_idx]\n        gating_distance = track.kf.gating_distance(\n            track.mean, track.covariance, measurements, only_position\n        )\n        cost_matrix[row, gating_distance > gating_threshold] = gated_cost\n        cost_matrix[row] = (\n            mc_lambda * cost_matrix[row] + (1 - mc_lambda) * gating_distance\n        )\n    return cost_matrix\n\n\ndef _cosine_distance(a, b, data_is_normalized=False):\n    \"\"\"Compute pair-wise cosine distance between points in `a` and `b`.\n    Parameters\n    ----------\n    a : array_like\n        An NxM matrix of N samples of dimensionality M.\n    b : array_like\n        An LxM matrix of L samples of dimensionality M.\n    data_is_normalized : Optional[bool]\n        If True, assumes rows in a and b are unit length vectors.\n        Otherwise, a and b are explicitly normalized to lenght 1.\n    Returns\n    -------\n    ndarray\n        Returns a matrix of size len(a), len(b) such that eleement (i, j)\n        contains the squared distance between `a[i]` and `b[j]`.\n    \"\"\"\n    if not data_is_normalized:\n        a = np.asarray(a) / np.linalg.norm(a, axis=1, keepdims=True)\n        b = np.asarray(b) / np.linalg.norm(b, axis=1, keepdims=True)\n    return 1.0 - np.dot(a, b.T)\n\ndef _pdist(a, b):\n    \"\"\"Compute pair-wise squared distance between points in `a` and `b`.\n    Parameters\n    ----------\n    a : array_like\n        An NxM matrix of N samples of dimensionality M.\n    b : array_like\n        An LxM matrix of L samples of dimensionality M.\n    Returns\n    -------\n    ndarray\n        Returns a matrix of size len(a), len(b) such that eleement (i, j)\n        contains the squared distance between `a[i]` and `b[j]`.\n    \"\"\"\n    a, b = np.asarray(a), np.asarray(b)\n    if len(a) == 0 or len(b) == 0:\n        return np.zeros((len(a), len(b)))\n    a2, b2 = np.square(a).sum(axis=1), np.square(b).sum(axis=1)\n    r2 = -2.0 * np.dot(a, b.T) + a2[:, None] + b2[None, :]\n    r2 = np.clip(r2, 0.0, float(np.inf))\n    return r2\n\n\ndef _nn_euclidean_distance(x, y):\n    \"\"\"Helper function for nearest neighbor distance metric (Euclidean).\n    Parameters\n    ----------\n    x : ndarray\n        A matrix of N row-vectors (sample points).\n    y : ndarray\n        A matrix of M row-vectors (query points).\n    Returns\n    -------\n    ndarray\n        A vector of length M that contains for each entry in `y` the\n        smallest Euclidean distance to a sample in `x`.\n    \"\"\"\n    # x_ = torch.from_numpy(np.asarray(x) / np.linalg.norm(x, axis=1, keepdims=True))\n    # y_ = torch.from_numpy(np.asarray(y) / np.linalg.norm(y, axis=1, keepdims=True))\n    distances = distances = _pdist(x, y)\n    return np.maximum(0.0, torch.min(distances, axis=0)[0].numpy())\n\n\ndef _nn_cosine_distance(x, y):\n    \"\"\"Helper function for nearest neighbor distance metric (cosine).\n    Parameters\n    ----------\n    x : ndarray\n        A matrix of N row-vectors (sample points).\n    y : ndarray\n        A matrix of M row-vectors (query points).\n    Returns\n    -------\n    ndarray\n        A vector of length M that contains for each entry in `y` the\n        smallest cosine distance to a sample in `x`.\n    \"\"\"\n    x_ = torch.from_numpy(np.asarray(x))\n    y_ = torch.from_numpy(np.asarray(y))\n    distances = _cosine_distance(x_, y_)\n    distances = distances\n    return distances.min(axis=0)\n\nclass NearestNeighborDistanceMetric(object):\n    \"\"\"\n    A nearest neighbor distance metric that, for each target, returns\n    the closest distance to any sample that has been observed so far.\n    Parameters\n    ----------\n    metric : str\n        Either \"euclidean\" or \"cosine\".\n    matching_threshold: float\n        The matching threshold. Samples with larger distance are considered an\n        invalid match.\n    budget : Optional[int]\n        If not None, fix samples per class to at most this number. Removes\n        the oldest samples when the budget is reached.\n    Attributes\n    ----------\n    samples : Dict[int -> List[ndarray]]\n        A dictionary that maps from target identities to the list of samples\n        that have been observed so far.\n    \"\"\"\n\n    def __init__(self, metric, matching_threshold, budget=None):\n        if metric == \"euclidean\":\n            self._metric = _nn_euclidean_distance\n        elif metric == \"cosine\":\n            self._metric = _nn_cosine_distance\n        else:\n            raise ValueError(\"Invalid metric; must be either 'euclidean' or 'cosine'\")\n        self.matching_threshold = matching_threshold\n        self.budget = budget\n        self.samples = {}\n\n    def partial_fit(self, features, targets, active_targets):\n        \"\"\"Update the distance metric with new data.\n        Parameters\n        ----------\n        features : ndarray\n            An NxM matrix of N features of dimensionality M.\n        targets : ndarray\n            An integer array of associated target identities.\n        active_targets : List[int]\n            A list of targets that are currently present in the scene.\n        \"\"\"\n        for feature, target in zip(features, targets):\n            self.samples.setdefault(target, []).append(feature)\n            if self.budget is not None:\n                self.samples[target] = self.samples[target][-self.budget :]\n        self.samples = {k: self.samples[k] for k in active_targets}\n\n    def distance(self, features, targets):\n        \"\"\"Compute distance between features and targets.\n        Parameters\n        ----------\n        features : ndarray\n            An NxM matrix of N features of dimensionality M.\n        targets : List[int]\n            A list of targets to match the given `features` against.\n        Returns\n        -------\n        ndarray\n            Returns a cost matrix of shape len(targets), len(features), where\n            element (i, j) contains the closest squared distance between\n            `targets[i]` and `features[j]`.\n        \"\"\"\n        cost_matrix = np.zeros((len(targets), len(features)))\n        for i, target in enumerate(targets):\n            cost_matrix[i, :] = self._metric(self.samples[target], features)\n        return cost_matrix\n"
  },
  {
    "path": "boxmot/trackers/strongsort/sort/track.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport os\n\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.xyah import KalmanFilterXYAH\n\n\nclass TrackState:\n    \"\"\"\n    Enumeration type for the single target track state. Newly created tracks are\n    classified as `tentative` until enough evidence has been collected. Then,\n    the track state is changed to `confirmed`. Tracks that are no longer alive\n    are classified as `deleted` to mark them for removal from the set of active\n    tracks.\n\n    \"\"\"\n\n    Tentative = 1\n    Confirmed = 2\n    Deleted = 3\n\n\nclass Track:\n    \"\"\"\n    A single target track with state space `(x, y, a, h)` and associated\n    velocities, where `(x, y)` is the center of the bounding box, `a` is the\n    aspect ratio and `h` is the height.\n\n    Parameters\n    ----------\n    mean : ndarray\n        Mean vector of the initial state distribution.\n    covariance : ndarray\n        Covariance matrix of the initial state distribution.\n    track_id : int\n        A unique track identifier.\n    n_init : int\n        Number of consecutive detections before the track is confirmed. The\n        track state is set to `Deleted` if a miss occurs within the first\n        `n_init` frames.\n    max_age : int\n        The maximum number of consecutive misses before the track state is\n        set to `Deleted`.\n    feature : Optional[ndarray]\n        Feature vector of the detection this track originates from. If not None,\n        this feature is added to the `features` cache.\n\n    Attributes\n    ----------\n    mean : ndarray\n        Mean vector of the initial state distribution.\n    covariance : ndarray\n        Covariance matrix of the initial state distribution.\n    track_id : int\n        A unique track identifier.\n    hits : int\n        Total number of measurement updates.\n    age : int\n        Total number of frames since first occurance.\n    time_since_update : int\n        Total number of frames since last measurement update.\n    state : TrackState\n        The current track state.\n    features : List[ndarray]\n        A cache of features. On each measurement update, the associated feature\n        vector is added to this list.\n\n    \"\"\"\n\n    def __init__(\n        self,\n        detection,\n        id,\n        n_init,\n        max_age,\n        ema_alpha,\n    ):\n        self.id = id\n        self.bbox = detection.to_xyah()\n        self.conf = detection.conf\n        self.cls = detection.cls\n        self.det_ind = detection.det_ind\n        self.hits = 1\n        self.age = 1\n        self.time_since_update = 0\n        self.ema_alpha = ema_alpha\n\n        # start with confirmed in Ci as test expect equal amount of outputs as inputs\n        self.state = (\n            TrackState.Confirmed\n            if (\n                os.getenv(\"GITHUB_ACTIONS\") == \"true\"\n                and os.getenv(\"GITHUB_JOB\") != \"mot-metrics-benchmark\"\n            )\n            else TrackState.Tentative\n        )\n        self.features = []\n        if detection.feat is not None:\n            detection.feat /= np.linalg.norm(detection.feat)\n            self.features.append(detection.feat)\n\n        self._n_init = n_init\n        self._max_age = max_age\n\n        self.kf = KalmanFilterXYAH()\n        self.mean, self.covariance = self.kf.initiate(self.bbox)\n\n    def to_tlwh(self):\n        \"\"\"Get current position in bounding box format `(top left x, top left y,\n        width, height)`.\n\n        Returns\n        -------\n        ndarray\n            The bounding box.\n\n        \"\"\"\n        ret = self.mean[:4].copy()\n        ret[2] *= ret[3]\n        ret[:2] -= ret[2:] / 2\n        return ret\n\n    def to_tlbr(self):\n        \"\"\"Get kf estimated current position in bounding box format `(min x, miny, max x,\n        max y)`.\n\n        Returns\n        -------\n        ndarray\n            The predicted kf bounding box.\n\n        \"\"\"\n        ret = self.to_tlwh()\n        ret[2:] = ret[:2] + ret[2:]\n        return ret\n\n    def camera_update(self, warp_matrix):\n        [a, b] = warp_matrix\n        warp_matrix = np.array([a, b, [0, 0, 1]])\n        warp_matrix = warp_matrix.tolist()\n        x1, y1, x2, y2 = self.to_tlbr()\n        x1_, y1_, _ = warp_matrix @ np.array([x1, y1, 1]).T\n        x2_, y2_, _ = warp_matrix @ np.array([x2, y2, 1]).T\n        w, h = x2_ - x1_, y2_ - y1_\n        cx, cy = x1_ + w / 2, y1_ + h / 2\n        self.mean[:4] = [cx, cy, w / h, h]\n\n    def increment_age(self):\n        self.age += 1\n        self.time_since_update += 1\n\n    def predict(self):\n        \"\"\"Propagate the state distribution to the current time step using a\n        Kalman filter prediction step.\n        \"\"\"\n        self.mean, self.covariance = self.kf.predict(self.mean, self.covariance)\n        self.age += 1\n        self.time_since_update += 1\n\n    def update(self, detection):\n        \"\"\"Perform Kalman filter measurement update step and update the feature\n        cache.\n        Parameters\n        ----------\n        detection : Detection\n            The associated detection.\n        \"\"\"\n        self.bbox = detection.to_xyah()\n        self.conf = detection.conf\n        self.cls = detection.cls\n        self.det_ind = detection.det_ind\n        self.mean, self.covariance = self.kf.update(\n            self.mean, self.covariance, self.bbox, self.conf\n        )\n\n        feature = detection.feat / np.linalg.norm(detection.feat)\n\n        smooth_feat = (\n            self.ema_alpha * self.features[-1] + (1 - self.ema_alpha) * feature\n        )\n        smooth_feat /= np.linalg.norm(smooth_feat)\n        self.features = [smooth_feat]\n\n        self.hits += 1\n        self.time_since_update = 0\n        if self.state == TrackState.Tentative and self.hits >= self._n_init:\n            self.state = TrackState.Confirmed\n\n    def mark_missed(self):\n        \"\"\"Mark this track as missed (no association at the current time step).\"\"\"\n        if self.state == TrackState.Tentative:\n            self.state = TrackState.Deleted\n        elif self.time_since_update > self._max_age:\n            self.state = TrackState.Deleted\n\n    def is_tentative(self):\n        \"\"\"Returns True if this track is tentative (unconfirmed).\"\"\"\n        return self.state == TrackState.Tentative\n\n    def is_confirmed(self):\n        \"\"\"Returns True if this track is confirmed.\"\"\"\n        return self.state == TrackState.Confirmed\n\n    def is_deleted(self):\n        \"\"\"Returns True if this track is dead and should be deleted.\"\"\"\n        return self.state == TrackState.Deleted\n"
  },
  {
    "path": "boxmot/trackers/strongsort/sort/tracker.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import\n\nimport numpy as np\n\nfrom boxmot.motion.cmc import get_cmc_method\nfrom boxmot.trackers.strongsort.sort import iou_matching, linear_assignment\nfrom boxmot.trackers.strongsort.sort.track import Track\nfrom boxmot.utils.matching import chi2inv95\n\n\nclass Tracker:\n    \"\"\"\n    This is the multi-target tracker.\n    Parameters\n    ----------\n    metric : nn_matching.NearestNeighborDistanceMetric\n        A distance metric for measurement-to-track association.\n    max_age : int\n        Maximum number of missed misses before a track is deleted.\n    n_init : int\n        Number of consecutive detections before the track is confirmed. The\n        track state is set to `Deleted` if a miss occurs within the first\n        `n_init` frames.\n    Attributes\n    ----------\n    metric : nn_matching.NearestNeighborDistanceMetric\n        The distance metric used for measurement to track association.\n    max_age : int\n        Maximum number of missed misses before a track is deleted.\n    n_init : int\n        Number of frames that a track remains in initialization phase.\n    tracks : List[Track]\n        The list of active tracks at the current time step.\n    \"\"\"\n\n    GATING_THRESHOLD = np.sqrt(chi2inv95[4])\n\n    def __init__(\n        self,\n        metric,\n        max_iou_dist=0.9,\n        max_age=30,\n        n_init=3,\n        _lambda=0,\n        ema_alpha=0.9,\n        mc_lambda=0.995,\n    ):\n        self.metric = metric\n        self.max_iou_dist = max_iou_dist\n        self.max_age = max_age\n        self.n_init = n_init\n        self._lambda = _lambda\n        self.ema_alpha = ema_alpha\n        self.mc_lambda = mc_lambda\n\n        self.tracks = []\n        self._next_id = 1\n        self.cmc = get_cmc_method(\"ecc\")()\n\n    def predict(self):\n        \"\"\"Propagate track state distributions one time step forward.\n\n        This function should be called once every time step, before `update`.\n        \"\"\"\n        for track in self.tracks:\n            track.predict()\n\n    def increment_ages(self):\n        for track in self.tracks:\n            track.increment_age()\n            track.mark_missed()\n\n    def update(self, detections):\n        \"\"\"Perform measurement update and track management.\n\n        Parameters\n        ----------\n        detections : List[deep_sort.detection.Detection]\n            A list of detections at the current time step.\n\n        \"\"\"\n        # Run matching cascade.\n        matches, unmatched_tracks, unmatched_detections = self._match(detections)\n\n        # Update track set.\n        for track_idx, detection_idx in matches:\n            self.tracks[track_idx].update(detections[detection_idx])\n        for track_idx in unmatched_tracks:\n            self.tracks[track_idx].mark_missed()\n        for detection_idx in unmatched_detections:\n            self._initiate_track(detections[detection_idx])\n        self.tracks = [t for t in self.tracks if not t.is_deleted()]\n\n        # Update distance metric.\n        active_targets = [t.id for t in self.tracks if t.is_confirmed()]\n        features, targets = [], []\n        for track in self.tracks:\n            if not track.is_confirmed():\n                continue\n            features += track.features\n            targets += [track.id for _ in track.features]\n        self.metric.partial_fit(\n            np.asarray(features), np.asarray(targets), active_targets\n        )\n\n    def _match(self, detections):\n        def gated_metric(tracks, dets, track_indices, detection_indices):\n            features = np.array([dets[i].feat for i in detection_indices])\n            targets = np.array([tracks[i].id for i in track_indices])\n            cost_matrix = self.metric.distance(features, targets)\n            cost_matrix = linear_assignment.gate_cost_matrix(\n                cost_matrix,\n                tracks,\n                dets,\n                track_indices,\n                detection_indices,\n                self.mc_lambda,\n            )\n\n            return cost_matrix\n\n        # Split track set into confirmed and unconfirmed tracks.\n        confirmed_tracks = [i for i, t in enumerate(self.tracks) if t.is_confirmed()]\n        unconfirmed_tracks = [i for i, t in enumerate(self.tracks) if not t.is_confirmed()]\n\n        # Associate confirmed tracks using appearance features.\n        matches_a, unmatched_tracks_a, unmatched_detections = linear_assignment.matching_cascade(\n            gated_metric,\n            self.metric.matching_threshold,\n            self.max_age,\n            self.tracks,\n            detections,\n            confirmed_tracks,\n        )\n\n        # Associate remaining tracks together with unconfirmed tracks using IOU.\n        iou_track_candidates = unconfirmed_tracks + [\n            k for k in unmatched_tracks_a if self.tracks[k].time_since_update == 1\n        ]\n        unmatched_tracks_a = [\n            k for k in unmatched_tracks_a if self.tracks[k].time_since_update != 1\n        ]\n\n        matches_b, unmatched_tracks_b, unmatched_detections = linear_assignment.min_cost_matching(\n            iou_matching.iou_cost,\n            self.max_iou_dist,\n            self.tracks,\n            detections,\n            iou_track_candidates,\n            unmatched_detections,\n        )\n\n        matches = matches_a + matches_b\n        unmatched_tracks = list(set(unmatched_tracks_a + unmatched_tracks_b))\n        return matches, unmatched_tracks, unmatched_detections\n\n    def _initiate_track(self, detection):\n        self.tracks.append(\n            Track(\n                detection,\n                self._next_id,\n                self.n_init,\n                self.max_age,\n                self.ema_alpha,\n            )\n        )\n        self._next_id += 1\n"
  },
  {
    "path": "boxmot/trackers/strongsort/strongsort.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom pathlib import Path\n\nimport numpy as np\nfrom torch import device\n\nfrom boxmot.motion.cmc import get_cmc_method\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.trackers.strongsort.sort.detection import Detection\nfrom boxmot.trackers.strongsort.sort.linear_assignment import \\\n    NearestNeighborDistanceMetric\nfrom boxmot.trackers.strongsort.sort.tracker import Tracker\nfrom boxmot.utils.ops import xyxy2tlwh\n\n\nclass StrongSort(BaseTracker):\n    \"\"\"\n    Initialize the StrongSort tracker with various parameters.\n\n    Parameters:\n    - reid_weights (Path): Path to the re-identification model weights.\n    - device (torch.device): Device to run the model on (e.g., 'cpu', 'cuda').\n    - half (bool): Whether to use half-precision (fp16) for faster inference.\n    - det_thresh (float): Detection threshold for considering detections.\n    - max_age (int): Maximum age (in frames) of a track before it is considered lost.\n    - max_obs (int): Maximum number of historical observations stored for each track. Always greater than max_age by minimum 5.\n    - min_hits (int): Minimum number of detection hits before a track is considered confirmed.\n    - iou_threshold (float): IOU threshold for determining match between detection and tracks.\n    - per_class (bool): Enables class-separated tracking.\n    - nr_classes (int): Total number of object classes that the tracker will handle (for per_class=True).\n    - asso_func (str): Algorithm name used for data association between detections and tracks.\n    - is_obb (bool): Work with Oriented Bounding Boxes (OBB) instead of standard axis-aligned bounding boxes.\n    \n    StrongSort-specific parameters:\n    - min_conf (float): Minimum confidence threshold for detections.\n    - max_cos_dist (float): Maximum cosine distance for ReID feature matching in Nearest Neighbor Distance Metric.\n    - max_iou_dist (float): Maximum IoU distance for data association.\n    - n_init (int): Number of consecutive frames required to confirm a track.\n    - nn_budget (int): Maximum size of the feature library for Nearest Neighbor Distance Metric.\n    - mc_lambda (float): Weight for motion consistency in the track state estimation.\n    - ema_alpha (float): Alpha value for exponential moving average (EMA) update of appearance features.\n    \n    Attributes:\n    - model: ReID model for appearance feature extraction.\n    - tracker: StrongSort tracker instance.\n    - cmc: Camera motion compensation object.\n    \"\"\"\n\n    def __init__(\n        self,\n        reid_weights: Path,\n        device: device,\n        half: bool,\n        # StrongSort-specific parameters\n        min_conf: float = 0.1,\n        max_cos_dist: float = 0.2,\n        max_iou_dist: float = 0.7,\n        n_init: int = 3,\n        nn_budget: int = 100,\n        mc_lambda: float = 0.98,\n        ema_alpha: float = 0.9,\n        **kwargs  # BaseTracker parameters\n    ):\n        # Capture all init params for logging\n        init_args = {k: v for k, v in locals().items() if k not in ('self', 'kwargs')}\n        super().__init__(**init_args, _tracker_name='StrongSort', **kwargs)\n        \n        # Store StrongSort-specific parameters\n        self.min_conf = min_conf\n        \n        # Initialize ReID model\n        self.model = ReidAutoBackend(\n            weights=reid_weights, device=device, half=half\n        ).model\n\n        # Initialize StrongSort tracker\n        self.tracker = Tracker(\n            metric=NearestNeighborDistanceMetric(\"cosine\", max_cos_dist, nn_budget),\n            max_iou_dist=max_iou_dist,\n            max_age=self.max_age,\n            n_init=n_init,\n            mc_lambda=mc_lambda,\n            ema_alpha=ema_alpha,\n        )\n        \n        # Initialize camera motion compensation\n        self.cmc = get_cmc_method(\"ecc\")()\n        \n    @BaseTracker.per_class_decorator\n    def update(\n        self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None\n    ) -> np.ndarray:\n        assert isinstance(\n            dets, np.ndarray\n        ), f\"Unsupported 'dets' input format '{type(dets)}', valid format is np.ndarray\"\n        assert isinstance(\n            img, np.ndarray\n        ), f\"Unsupported 'img' input format '{type(img)}', valid format is np.ndarray\"\n        assert (\n            len(dets.shape) == 2\n        ), \"Unsupported 'dets' dimensions, valid number of dimensions is two\"\n        assert (\n            dets.shape[1] == 6\n        ), \"Unsupported 'dets' 2nd dimension lenght, valid lenghts is 6\"\n        if embs is not None:\n            assert (\n                dets.shape[0] == embs.shape[0]\n            ), \"Missmatch between detections and embeddings sizes\"\n\n        dets = np.hstack([dets, np.arange(len(dets)).reshape(-1, 1)])\n        remain_inds = dets[:, 4] >= self.min_conf\n        dets = dets[remain_inds]\n\n        xyxy = dets[:, 0:4]\n        confs = dets[:, 4]\n        clss = dets[:, 5]\n        det_ind = dets[:, 6]\n\n        if len(self.tracker.tracks) >= 1:\n            warp_matrix = self.cmc.apply(img, xyxy)\n            for track in self.tracker.tracks:\n                track.camera_update(warp_matrix)\n\n        # extract appearance information for each detection\n        if embs is not None:\n            features = embs[remain_inds]\n        else:\n            features = self.model.get_features(xyxy, img)\n\n        tlwh = xyxy2tlwh(xyxy)\n        detections = [\n            Detection(box, conf, cls, det_ind, feat)\n            for box, conf, cls, det_ind, feat in zip(\n                tlwh, confs, clss, det_ind, features\n            )\n        ]\n\n        # update tracker\n        self.tracker.predict()\n        self.tracker.update(detections)\n\n        # output bbox identities\n        outputs = []\n        for track in self.tracker.tracks:\n            if not track.is_confirmed() or track.time_since_update >= 1:\n                continue\n\n            x1, y1, x2, y2 = track.to_tlbr()\n\n            id = track.id\n            conf = track.conf\n            cls = track.cls\n            det_ind = track.det_ind\n\n            outputs.append(\n                np.concatenate(\n                    ([x1, y1, x2, y2], [id], [conf], [cls], [det_ind])\n                ).reshape(1, -1)\n            )\n        if len(outputs) > 0:\n            return np.concatenate(outputs)\n        return np.array([])\n\n    def reset(self):\n        pass"
  },
  {
    "path": "boxmot/trackers/strongsort/strongsort_kf.py",
    "content": "# vim: expandtab:ts=4:sw=4\nimport numpy as np\nimport scipy.linalg\n\n\"\"\"\nTable for the 0.95 quantile of the chi-square distribution with N degrees of\nfreedom (contains values for N=1, ..., 9). Taken from MATLAB/Octave's chi2inv\nfunction and used as Mahalanobis gating threshold.\n\"\"\"\nchi2inv95 = {\n    1: 3.8415,\n    2: 5.9915,\n    3: 7.8147,\n    4: 9.4877,\n    5: 11.070,\n    6: 12.592,\n    7: 14.067,\n    8: 15.507,\n    9: 16.919,\n}\n\n\nclass KalmanFilter(object):\n    \"\"\"\n    A simple Kalman filter for tracking bounding boxes in image space.\n\n    The 8-dimensional state space\n\n        x, y, a, h, vx, vy, va, vh\n\n    contains the bounding box center position (x, y), aspect ratio a, height h,\n    and their respective velocities.\n\n    Object motion follows a constant velocity model. The bounding box location\n    (x, y, a, h) is taken as direct observation of the state space (linear\n    observation model).\n\n    \"\"\"\n\n    def __init__(self):\n        ndim, dt = 4, 1.0\n\n        # Create Kalman filter model matrices.\n        self._motion_mat = np.eye(2 * ndim, 2 * ndim)\n        for i in range(ndim):\n            self._motion_mat[i, ndim + i] = dt\n\n        self._update_mat = np.eye(ndim, 2 * ndim)\n\n        # Motion and observation uncertainty are chosen relative to the current\n        # state estimate. These weights control the amount of uncertainty in\n        # the model. This is a bit hacky.\n        self._std_weight_position = 1.0 / 20\n        self._std_weight_velocity = 1.0 / 160\n\n    def initiate(self, measurement):\n        \"\"\"Create track from unassociated measurement.\n\n        Parameters\n        ----------\n        measurement : ndarray\n            Bounding box coordinates (x, y, a, h) with center position (x, y),\n            aspect ratio a, and height h.\n\n        Returns\n        -------\n        (ndarray, ndarray)\n            Returns the mean vector (8 dimensional) and covariance matrix (8x8\n            dimensional) of the new track. Unobserved velocities are initialized\n            to 0 mean.\n\n        \"\"\"\n        mean_pos = measurement\n        mean_vel = np.zeros_like(mean_pos)\n        mean = np.r_[mean_pos, mean_vel]\n\n        std = [\n            2 * self._std_weight_position * measurement[3],\n            2 * self._std_weight_position * measurement[3],\n            1e-2,\n            2 * self._std_weight_position * measurement[3],\n            10 * self._std_weight_velocity * measurement[3],\n            10 * self._std_weight_velocity * measurement[3],\n            1e-5,\n            10 * self._std_weight_velocity * measurement[3],\n        ]\n        covariance = np.diag(np.square(std))\n        return mean, covariance\n\n    def predict(self, mean, covariance):\n        \"\"\"Run Kalman filter prediction step.\n\n        Parameters\n        ----------\n        mean : ndarray\n            The 8 dimensional mean vector of the object state at the previous\n            time step.\n        covariance : ndarray\n            The 8x8 dimensional covariance matrix of the object state at the\n            previous time step.\n\n        Returns\n        -------\n        (ndarray, ndarray)\n            Returns the mean vector and covariance matrix of the predicted\n            state. Unobserved velocities are initialized to 0 mean.\n\n        \"\"\"\n        std_pos = [\n            self._std_weight_position * mean[3],\n            self._std_weight_position * mean[3],\n            1e-2,\n            self._std_weight_position * mean[3],\n        ]\n        std_vel = [\n            self._std_weight_velocity * mean[3],\n            self._std_weight_velocity * mean[3],\n            1e-5,\n            self._std_weight_velocity * mean[3],\n        ]\n        motion_cov = np.diag(np.square(np.r_[std_pos, std_vel]))\n\n        mean = np.dot(self._motion_mat, mean)\n        covariance = np.linalg.multi_dot((\n            self._motion_mat, covariance, self._motion_mat.T)) + motion_cov\n\n        return mean, covariance\n\n    def project(self, mean, covariance, confidence=0.0):\n        \"\"\"Project state distribution to measurement space.\n\n        Parameters\n        ----------\n        mean : ndarray\n            The state's mean vector (8 dimensional array).\n        covariance : ndarray\n            The state's covariance matrix (8x8 dimensional).\n        confidence: (dyh) 检测框置信度\n        Returns\n        -------\n        (ndarray, ndarray)\n            Returns the projected mean and covariance matrix of the given state\n            estimate.\n\n        \"\"\"\n        std = [\n            self._std_weight_position * mean[3],\n            self._std_weight_position * mean[3],\n            1e-1,\n            self._std_weight_position * mean[3],\n        ]\n\n        std = [(1 - confidence) * x for x in std]\n\n        innovation_cov = np.diag(np.square(std))\n\n        mean = np.dot(self._update_mat, mean)\n        covariance = np.linalg.multi_dot(\n            (self._update_mat, covariance, self._update_mat.T)\n        )\n        return mean, covariance + innovation_cov\n\n    def update(self, mean, covariance, measurement, confidence=0.0):\n        \"\"\"Run Kalman filter correction step.\n\n        Parameters\n        ----------\n        mean : ndarray\n            The predicted state's mean vector (8 dimensional).\n        covariance : ndarray\n            The state's covariance matrix (8x8 dimensional).\n        measurement : ndarray\n            The 4 dimensional measurement vector (x, y, a, h), where (x, y)\n            is the center position, a the aspect ratio, and h the height of the\n            bounding box.\n        confidence: (dyh)检测框置信度\n        Returns\n        -------\n        (ndarray, ndarray)\n            Returns the measurement-corrected state distribution.\n\n        \"\"\"\n        projected_mean, projected_cov = self.project(mean, covariance, confidence)\n\n        chol_factor, lower = scipy.linalg.cho_factor(\n            projected_cov, lower=True, check_finite=False\n        )\n        kalman_gain = scipy.linalg.cho_solve(\n            (chol_factor, lower),\n            np.dot(covariance, self._update_mat.T).T,\n            check_finite=False,\n        ).T\n        innovation = measurement - projected_mean\n\n        new_mean = mean + np.dot(innovation, kalman_gain.T)\n        new_covariance = covariance - np.linalg.multi_dot(\n            (kalman_gain, projected_cov, kalman_gain.T)\n        )\n        return new_mean, new_covariance\n\n    def gating_distance(self, mean, covariance, measurements, only_position=False):\n        \"\"\"Compute gating distance between state distribution and measurements.\n\n        A suitable distance threshold can be obtained from `chi2inv95`. If\n        `only_position` is False, the chi-square distribution has 4 degrees of\n        freedom, otherwise 2.\n\n        Parameters\n        ----------\n        mean : ndarray\n            Mean vector over the state distribution (8 dimensional).\n        covariance : ndarray\n            Covariance of the state distribution (8x8 dimensional).\n        measurements : ndarray\n            An Nx4 dimensional matrix of N measurements, each in\n            format (x, y, a, h) where (x, y) is the bounding box center\n            position, a the aspect ratio, and h the height.\n        only_position : Optional[bool]\n            If True, distance computation is done with respect to the bounding\n            box center position only.\n\n        Returns\n        -------\n        ndarray\n            Returns an array of length N, where the i-th element contains the\n            squared Mahalanobis distance between (mean, covariance) and\n            `measurements[i]`.\n\n        \"\"\"\n        mean, covariance = self.project(mean, covariance)\n\n        if only_position:\n            mean, covariance = mean[:2], covariance[:2, :2]\n            measurements = measurements[:, :2]\n\n        cholesky_factor = np.linalg.cholesky(covariance)\n        d = measurements - mean\n        z = scipy.linalg.solve_triangular(\n            cholesky_factor, d.T, lower=True, check_finite=False, overwrite_b=True\n        )\n        squared_maha = np.sum(z * z, axis=0)\n        return squared_maha\n"
  },
  {
    "path": "boxmot/trackers/tracker_zoo.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport importlib\nimport yaml\n\nfrom boxmot.utils import TRACKER_CONFIGS\n\nREID_TRACKERS = [\"strongsort\", \"botsort\", \"deepocsort\", \"hybridsort\", \"boosttrack\"]\n\nTRACKER_MAPPING = {\n    \"strongsort\": \"boxmot.trackers.strongsort.strongsort.StrongSort\",\n    \"ocsort\"    : \"boxmot.trackers.ocsort.ocsort.OcSort\",\n    \"bytetrack\" : \"boxmot.trackers.bytetrack.bytetrack.ByteTrack\",\n    \"sfsort\"    : \"boxmot.trackers.sfsort.sfsort.SFSORT\",\n    \"botsort\"   : \"boxmot.trackers.botsort.botsort.BotSort\",\n    \"deepocsort\": \"boxmot.trackers.deepocsort.deepocsort.DeepOcSort\",\n    \"hybridsort\": \"boxmot.trackers.hybridsort.hybridsort.HybridSort\",\n    \"boosttrack\": \"boxmot.trackers.boosttrack.boosttrack.BoostTrack\",\n}\n\n\ndef get_tracker_config(tracker_type):\n    \"\"\"Returns the path to the tracker configuration file.\"\"\"\n    return TRACKER_CONFIGS / f\"{tracker_type}.yaml\"\n\n\ndef create_tracker(\n    tracker_type,\n    tracker_config=None,\n    reid_weights=None,\n    device=None,\n    half=None,\n    per_class=None,\n    evolve_param_dict=None,\n):\n    \"\"\"\n    Creates and returns an instance of the specified tracker type.\n\n    Parameters:\n    - tracker_type: The type of the tracker (e.g., 'strongsort', 'ocsort').\n    - tracker_config: Path to the tracker configuration file.\n    - reid_weights: Weights for ReID (re-identification).\n    - device: Device to run the tracker on (e.g., 'cpu', 'cuda').\n    - half: Boolean indicating whether to use half-precision.\n    - per_class: Boolean for class-specific tracking (optional).\n    - evolve_param_dict: A dictionary of parameters for evolving the tracker.\n\n    Returns:\n    - An instance of the selected tracker.\n\n    Raises:\n    - ValueError: If `tracker_type` is not recognized.\n    \"\"\"\n\n    if tracker_type not in TRACKER_MAPPING:\n        available = \", \".join(TRACKER_MAPPING.keys())\n        raise ValueError(f\"Unknown tracker type: '{tracker_type}'. Available trackers are: {available}\")\n\n    # Load configuration from file or use provided dictionary\n    if evolve_param_dict is None:\n        if tracker_config is None: \n            # Load default tracker config \n            tracker_config = get_tracker_config(tracker_type)\n        with open(tracker_config, \"r\") as f:\n            yaml_config = yaml.safe_load(f)\n            tracker_args = {\n                param: details[\"default\"] for param, details in yaml_config.items()\n            }\n    else:\n        tracker_args = evolve_param_dict.copy()\n\n    # Prepare arguments\n    tracker_args[\"per_class\"] = per_class\n\n    if tracker_type in REID_TRACKERS:\n        tracker_args.update({\n            \"reid_weights\": reid_weights,\n            \"device\": device,\n            \"half\": half,\n        })\n\n    # Tracker-specific adjustments\n    if tracker_type == \"strongsort\":\n        tracker_args.pop(\"per_class\", None)\n\n    # Dynamically import and instantiate the correct tracker class\n    module_path, class_name = TRACKER_MAPPING[tracker_type].rsplit(\".\", 1)\n    module = importlib.import_module(module_path)\n    tracker_class = getattr(module, class_name)\n\n    # Return the instantiated tracker class with arguments and warmed-up models\n    tracker = tracker_class(**tracker_args)\n    if hasattr(tracker, \"model\"):\n        tracker.model.warmup()\n    return tracker\n"
  },
  {
    "path": "boxmot/utils/__init__.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport multiprocessing as mp\nimport os\nimport sys\nimport threading\nfrom pathlib import Path\n\nimport numpy as np\n# global logger\nfrom loguru import logger\n\nROOT = Path(__file__).resolve().parents[2]\n\n# If running from a cloned repository, prefer the local path\n# This handles the case where the package is installed in site-packages\n# but the user is running from the source root and expects local data/configs.\n_local_root = Path.cwd()\nif (_local_root / \"pyproject.toml\").is_file() and (_local_root / \"boxmot\").is_dir():\n    ROOT = _local_root\n\nDATA = ROOT / \"data\"\nTOML = ROOT / \"pyproject.toml\"\n\nBOXMOT     = ROOT / \"boxmot\"\nCONFIGS    = BOXMOT / \"configs\"\nTRACKER_CONFIGS   = CONFIGS / \"trackers\"\nDATASET_CONFIGS   = CONFIGS / \"datasets\"\n\nENGINE   = BOXMOT / \"engine\"\nWEIGHTS  = ROOT / \"models\"\nTRACKEVAL  = ENGINE / \"trackeval\"\n\nNUM_THREADS = min(8, max(1, os.cpu_count() - 1))  # number of multiprocessing threads\n\ndef _is_main_process(record):\n    # Works correctly even with enqueue=True\n    return record[\"process\"].name == \"MainProcess\"\n\ndef configure_logging(main_only: bool = True):\n    logger.remove()\n    logger.add(\n        sys.stderr,\n        level=\"INFO\",\n        colorize=True,\n        backtrace=True,\n        diagnose=True,\n        enqueue=True,  # safe with ProcessPool / spawn\n        filter=_is_main_process if main_only else None,\n        format=\"<level>{level: <8}</level> | <level>{message}</level>\",\n    )\n    return logger\n    \nconfigure_logging()"
  },
  {
    "path": "boxmot/utils/analysis/mot_ds_kf_tuning.py",
    "content": "#!/usr/bin/env python3\nimport argparse\nfrom pathlib import Path\n\nimport numpy as np\nfrom scipy.linalg import pinv\n\nfrom boxmot.motion.kalman_filters.aabb.xywh_kf import KalmanFilterXYWH\nfrom boxmot.utils import TRACKEVAL\n\n\ndef load_gt_data(seq_dir: Path, annotations_dir: Path = None, use_temp_gt: bool = False):\n    \"\"\"\n    Load ground-truth data for a sequence.\n    \n    Supports two layouts:\n    - MOT17: seq_dir/gt/gt.txt (or gt_temp.txt)\n    - VisDrone: annotations_dir/{seq_name}.txt\n    \n    Returns:\n        np.ndarray with columns: [frame_id, obj_id, x, y, w, h, ...]\n    \"\"\"\n    # Try VisDrone layout first (flat annotations folder)\n    if annotations_dir is not None and annotations_dir.exists():\n        ann_file = annotations_dir / f\"{seq_dir.name}.txt\"\n        if ann_file.exists():\n            return np.loadtxt(ann_file, delimiter=',')\n    \n    # Fall back to MOT17 layout\n    gt_file = seq_dir / \"gt\" / (\"gt_temp.txt\" if use_temp_gt else \"gt.txt\")\n    if gt_file.exists():\n        return np.loadtxt(gt_file, delimiter=',')\n    \n    raise FileNotFoundError(f\"No GT file found for sequence {seq_dir.name}\")\n\n\ndef build_tracks_from_sequence(\n    seq_dir: Path,\n    annotations_dir: Path = None,\n    use_temp_gt: bool = False,\n    min_detections: int = 5,\n):\n    \"\"\"\n    Load ground-truth from a single MOT sequence folder,\n    build 8-D state/4-D measurement tracks for each object,\n    and return (tracks, widths, heights).\n    \"\"\"\n    # load GT\n    orig_gt = load_gt_data(seq_dir, annotations_dir, use_temp_gt)\n    # filter distractors\n    MOT_DISTRACTOR_IDS = []\n    mask = ~np.isin(orig_gt[:,1].astype(int), MOT_DISTRACTOR_IDS)\n    orig_gt = orig_gt[mask]\n\n    dt = 1.0\n    tracks = []\n    all_ws = []\n    all_hs = []\n\n    for obj_id in np.unique(orig_gt[:,1].astype(int)):\n        sel = orig_gt[orig_gt[:,1] == obj_id]\n        sel = sel[np.argsort(sel[:,0].astype(int))]\n        # centers\n        ctrs = np.stack([\n            sel[:,2] + sel[:,4]/2,\n            sel[:,3] + sel[:,5]/2\n        ], axis=1)\n        # widths/heights\n        wh = sel[:,4:6]\n        # velocities\n        v_ctr = np.vstack(([[0,0]], np.diff(ctrs, axis=0)/dt))\n        v_wh  = np.vstack(([[0,0]], np.diff(wh,  axis=0)/dt))\n        # true 8-D state: [x,y,w,h,vx,vy,vw,vh]\n        x_seq = np.hstack((ctrs, wh, v_ctr, v_wh))\n        # measurements are [x,y,w,h]\n        z_seq = np.hstack((ctrs, wh))\n\n        if len(z_seq) >= min_detections:\n            tracks.append((z_seq, x_seq))\n\n        # collect box sizes for mean computation\n        all_ws.append(sel[:,4])\n        all_hs.append(sel[:,5])\n\n    if not tracks:\n        raise RuntimeError(f\"No object with >= {min_detections} detections in {seq_dir}\")\n\n    widths = np.concatenate(all_ws)\n    heights = np.concatenate(all_hs)\n    return tracks, widths, heights\n\n\ndef main(\n    train_root: Path,\n    use_temp_gt: bool = True,\n    min_detections: int = 5,\n):\n    # prepare dynamic model\n    D = 8\n    F = np.eye(D)\n    for i in range(4):\n        F[i, i+4] = 1.0  # dt=1\n    H = np.zeros((4, D))\n    H[0,0] = H[1,1] = H[2,2] = H[3,3] = 1\n\n    # Detect dataset layout\n    # VisDrone: has \"annotations\" and \"sequences\" subdirectories\n    # MOT17: sequence folders directly under train_root, each with gt/gt.txt\n    annotations_dir = train_root.parent / \"annotations\" if (train_root.parent / \"annotations\").exists() else None\n    \n    # For VisDrone, sequences are in a \"sequences\" subfolder\n    if train_root.name == \"sequences\":\n        seq_root = train_root\n    elif (train_root / \"sequences\").exists():\n        seq_root = train_root / \"sequences\"\n        annotations_dir = train_root / \"annotations\"\n    else:\n        seq_root = train_root\n    \n    print(f\"Dataset root: {train_root}\")\n    print(f\"Sequences dir: {seq_root}\")\n    if annotations_dir:\n        print(f\"Annotations dir: {annotations_dir}\")\n\n    # aggregate across all sequences\n    all_tracks = []\n    all_ws = []\n    all_hs = []\n\n    for seq_dir in sorted(seq_root.iterdir()):\n        if not seq_dir.is_dir():\n            continue\n        print(f\"Processing sequence: {seq_dir.name}\")\n        try:\n            tracks, ws, hs = build_tracks_from_sequence(\n                seq_dir, annotations_dir=annotations_dir, \n                use_temp_gt=use_temp_gt, min_detections=min_detections)\n            all_tracks.extend(tracks)\n            all_ws.append(ws)\n            all_hs.append(hs)\n        except FileNotFoundError as e:\n            print(f\"  Skipping: {e}\")\n        except Exception as e:\n            print(f\"  Error: {e}\")\n\n    if not all_tracks:\n        raise RuntimeError(\"No valid tracks found in any sequence. Check dataset path and format.\")\n\n    # flatten widths/heights\n    all_ws = np.concatenate(all_ws)\n    all_hs = np.concatenate(all_hs)\n    mean_w = all_ws.mean()\n    mean_h = all_hs.mean()\n    print(f\"Mean box width: {mean_w:.2f}, height: {mean_h:.2f}\")\n\n    # method-of-moments estimation\n    def estimate_noise_covariances(tracks, F, H):\n        dim_x = F.shape[0]\n        dim_z = H.shape[0]\n        sum_innov = np.zeros((dim_z, dim_z))\n        sum_proc  = np.zeros((dim_x, dim_x))\n        count = 0\n\n        for z_seq, x_true_seq in tracks:\n            x_est = x_true_seq[0].copy()\n            P = np.eye(dim_x) * 1e-3\n            prev_x, prev_P = None, None\n            for z in z_seq:\n                # 1) Predict\n                x_pred = F @ x_est\n                P_pred = F @ P @ F.T\n                # 2) Innovation\n                nu = z - (H @ x_pred)\n                sum_innov += np.outer(nu, nu) - (H @ P_pred @ H.T)\n                count += 1\n                # 3) Update\n                S = H @ P_pred @ H.T\n                K = P_pred @ H.T @ pinv(S)\n                x_est = x_pred + K @ nu\n                P = (np.eye(dim_x) - K @ H) @ P_pred\n                # 4) Process noise\n                if prev_x is not None:\n                    w = x_est - (F @ prev_x)\n                    sum_proc += np.outer(w, w) - (F @ prev_P @ F.T)\n                prev_x, prev_P = x_est.copy(), P.copy()\n\n        if count == 0:\n            raise RuntimeError(\"No valid innovation samples found.\")\n        R_hat = sum_innov / count\n        Q_hat = sum_proc  / count\n        return Q_hat, R_hat\n\n    Q_hat, R_hat = estimate_noise_covariances(all_tracks, F, H)\n    print(\"Estimated R (4×4):\\n\", R_hat)\n    print(\"Estimated Q (8×8):\\n\", Q_hat)\n\n    # derive std weights\n    var_R = np.diag(R_hat)           # [Var(x), Var(y), Var(w), Var(h)]\n    var_Q = np.diag(Q_hat)[4:8]      # [Var(vx), Var(vy), Var(vw), Var(vh)]\n    mean_box = (mean_w + mean_h) / 2\n\n    std_pos_xy = np.sqrt(var_R[0]) / mean_box\n    std_pos_wh = np.sqrt(var_R[2]) / mean_box\n    std_wpos  = float((std_pos_xy + std_pos_wh) / 2)\n\n    std_vel_xy = np.sqrt(var_Q[0]) / mean_box\n    std_vel_wh = np.sqrt(var_Q[2]) / mean_box\n    std_wvel  = float((std_vel_xy + std_vel_wh) / 2)\n\n    # convert absolute‐unit std_wpos into fraction of mean box height\n    # (KalmanFilterXYWH expects a relative weight)\n    mean_height = mean_h         # ≈172.91 from the pooled data\n    std_pos_abs  = std_wpos      # ≈3.2864 (absolute std in px)\n    std_pos_frac = std_pos_abs / mean_height  # ≈0.0190\n\n    print(f\"→ std_weight_position = {std_pos_frac:.4f}\")\n    print(f\"→ std_weight_velocity = {std_wvel:.4f}\")\n\n    # configure KalmanFilter\n    kf = KalmanFilterXYWH()\n    kf._std_weight_position = std_pos_frac\n    kf._std_weight_velocity = std_wvel\n    print(\"KalmanFilterXYWH configured with pooled data-driven weights.\")\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"Estimate Q/R and std_weight_* across all sequences in a MOT dataset\",\n        epilog=\"\"\"\nExamples:\n  # MOT17-ablation\n  python -m boxmot.utils.analysis.mot_ds_kf_tuning --train_root boxmot/engine/trackeval/MOT17-ablation/train\n  \n  # VisDrone\n  python -m boxmot.utils.analysis.mot_ds_kf_tuning --train_root boxmot/engine/trackeval/VisDrone2019-MOT-test-dev\n\"\"\"\n    )\n    parser.add_argument(\n        \"--train_root\", \n        type=Path,\n        default=TRACKEVAL / \"MOT17-ablation/train\",\n        help=\"Root folder containing sequences (auto-detects MOT17 or VisDrone layout)\"\n    )\n    parser.add_argument(\n        \"--use_temp_gt\", action=\"store_true\",\n        help=\"Use gt_temp.txt instead of gt.txt\"\n    )\n    parser.add_argument(\n        \"--min_detections\", type=int, default=5,\n        help=\"Minimum detections per track to include\"\n    )\n    args = parser.parse_args()\n    main(args.train_root, args.use_temp_gt, args.min_detections)\n"
  },
  {
    "path": "boxmot/utils/analysis/mot_seq_bb_plot.py",
    "content": "#!/usr/bin/env python3\nimport argparse\nfrom pathlib import Path\nfrom typing import Union\n\nimport cv2\nimport matplotlib.patches as patches\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nfrom boxmot.utils import TRACKEVAL\n\n\ndef plot_gt_boxes_with_trajectories(\n    seq_dir: Union[str, Path],\n    use_temp_gt: bool = True,\n    pad: int = 0\n):\n    \"\"\"\n    Plot all ground-truth boxes for a MOT17 sequence, coloring each object ID\n    with a unique color and drawing its trajectory through the centers of its boxes.\n\n    Args:\n        seq_dir (str | Path): Path to the sequence folder (containing img1/ and gt/).\n        use_temp_gt (bool): If True, plot gt/gt_temp.txt (filtered by FPS).\n                            Otherwise plot gt/gt.txt.\n        pad (int): Extra padding (in pixels) to add around the outermost boxes.\n    \"\"\"\n    seq_dir = Path(seq_dir)\n    # --- 1) grab image size from first frame ---\n    img_files = sorted((seq_dir / \"img1\").glob(\"*.jpg\"))\n    if not img_files:\n        raise RuntimeError(f\"No images found in {seq_dir / 'img1'}\")\n    first_img = img_files[0]\n    img = cv2.imread(str(first_img))\n    if img is None:\n        raise RuntimeError(f\"Could not load image {first_img}\")\n    height, width = img.shape[:2]\n\n    # --- 2) load the GT file ---\n    gt_file = seq_dir / \"gt\" / (\"gt_temp.txt\" if use_temp_gt else \"gt.txt\")\n    orig_gt = np.loadtxt(gt_file, delimiter=\",\")\n    MOT_DISTRACTOR_IDS = [2, 7, 8, 12, 13]  # e.g., person_on_vehicle, static_person, etc.\n    class_ids = orig_gt[:, 1].astype(int)\n    mask = ~np.isin(class_ids, MOT_DISTRACTOR_IDS)\n    orig_gt = orig_gt[mask]\n    # we'll unpack the first 6 columns for plotting\n\n    # --- 3) compute the full extents of all boxes ---\n    boxes = orig_gt[:, 2:6]  # x, y, w, h\n    xs      = boxes[:, 0]\n    ys      = boxes[:, 1]\n    rights  = xs + boxes[:, 2]\n    bottoms = ys + boxes[:, 3]\n\n    xmin = min(xs.min(), 0) - pad\n    ymin = min(ys.min(), 0) - pad\n    xmax = max(rights.max(), width) + pad\n    ymax = max(bottoms.max(), height) + pad\n\n    # --- 4) set up Matplotlib figure ---\n    fig, ax = plt.subplots(\n        figsize=(10, 10 * (ymax - ymin) / (xmax - xmin))\n    )\n    ax.set_xlim(xmin, xmax)\n    # invert y so origin is top-left\n    ax.set_ylim(ymax, ymin)\n    ax.set_aspect('equal')\n    ax.set_title(\n        f\"GT boxes & trajectories for sequence {seq_dir.name}\\n\"\n        f\"Image size: {width}×{height}, total boxes: {len(boxes)}\"\n    )\n    ax.set_xlabel(\"x\")\n    ax.set_ylabel(\"y\")\n\n    # --- 5) draw the original image and its border ---\n    ax.imshow(\n        cv2.cvtColor(img, cv2.COLOR_BGR2RGB),\n        extent=(0, width, height, 0),\n        zorder=0\n    )\n    img_border = patches.Rectangle(\n        (0, 0), width, height,\n        linewidth=1, edgecolor='gray', linestyle='--',\n        facecolor='none', zorder=1\n    )\n    ax.add_patch(img_border)\n\n    # --- 6) plot each box in a unique color per ID ---\n    ids = orig_gt[:, 1].astype(int)\n    unique_ids = np.unique(ids)\n    cmap = plt.colormaps.get_cmap('tab20')\n    colors = [cmap(i / len(unique_ids)) for i in range(len(unique_ids))]\n    id2color = {obj_id: colors[i] for i, obj_id in enumerate(unique_ids)}\n\n    for row in orig_gt:\n        frame, obj_id, x, y, w_box, h_box = row[:6]\n        obj_id = int(obj_id)\n        color = id2color[obj_id]\n        outside = (\n            x < 0 or y < 0 or\n            x + w_box > width or\n            y + h_box > height\n        )\n        rect = patches.Rectangle(\n            (x, y),\n            w_box, h_box,\n            linewidth=1,\n            edgecolor=color,\n            facecolor='none',\n            linestyle='--' if outside else '-',\n            zorder=2\n        )\n        ax.add_patch(rect)\n\n    # annotate count of out‐of‐frame boxes\n    n_outside = sum(\n        (row[2] < 0 or row[3] < 0 or\n         row[2] + row[4] > width or\n         row[3] + row[5] > height)\n        for row in orig_gt\n    )\n    ax.text(\n        xmin + 0.01*(xmax - xmin),\n        ymax - 0.02*(ymax - ymin),\n        f\"Outside boxes: {n_outside} / {len(boxes)}\",\n        color='red', fontsize=12, va='top', zorder=3\n    )\n\n    # --- 7) plot each ID’s trajectory via box centers ---\n    for obj_id in unique_ids:\n        sel = orig_gt[orig_gt[:, 1] == obj_id]\n        # center = (x + w/2, y + h/2)\n        centers = np.stack([\n            sel[:, 2] + sel[:, 4] / 2,\n            sel[:, 3] + sel[:, 5] / 2\n        ], axis=1)\n        # sort by frame index\n        order = np.argsort(sel[:, 0].astype(int))\n        centers = centers[order]\n        ax.plot(\n            centers[:, 0], centers[:, 1],\n            '-', linewidth=1,\n            color=id2color[obj_id],\n            zorder=3\n        )\n\n    # (optional) legend if number of IDs is small\n    # ax.legend(\n    #     [f\"ID {i}\" for i in unique_ids],\n    #     loc='upper right',\n    #     fontsize='small',\n    #     ncol=2,\n    #     framealpha=0.5\n    # )\n\n    plt.tight_layout()\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"Plot MOT17 ground-truth boxes and trajectories\"\n    )\n    parser.add_argument(\n        \"--seq_dir\",\n        default=TRACKEVAL / \"MOT17-ablation/train/MOT17-09\",\n        help=\"Path to the MOT17 sequence folder (must contain img1/ and gt/ subfolders)\"\n    )\n    parser.add_argument(\n        \"--use_temp_gt\",\n        action=\"store_true\",\n        help=\"Plot gt/gt_temp.txt instead of gt/gt.txt\"\n    )\n    parser.add_argument(\n        \"--pad\",\n        type=int,\n        default=0,\n        help=\"Extra padding (pixels) around the outermost boxes\"\n    )\n    args = parser.parse_args()\n\n    plot_gt_boxes_with_trajectories(\n        args.seq_dir,\n        use_temp_gt=args.use_temp_gt,\n        pad=args.pad\n    )\n"
  },
  {
    "path": "boxmot/utils/analysis/ray_results.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nratune.py\n\nLoad a Ray Tune experiment directory, print summaries, plot chosen metrics\nfor each trial by trial index, show Pareto fronts for MOTA vs HOTA (2D),\nand interactive 3D scatter (all points + Pareto front) for MOTA vs HOTA vs IDF1 using Plotly.\n\"\"\"\n\nimport argparse\nfrom pathlib import Path\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport plotly.graph_objects as go\nfrom matplotlib.ticker import FixedLocator\nfrom ray.tune.analysis import ExperimentAnalysis\n\n\ndef is_pareto_efficient(points: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Find the Pareto-efficient points (maximization problem).\n    Args:\n        points: an (N, D) array of N points in D dimensions.\n    Returns:\n        mask: boolean array of length N, True if point is Pareto-efficient.\n    \"\"\"\n    N = points.shape[0]\n    is_efficient = np.ones(N, dtype=bool)\n    for i in range(N):\n        if not is_efficient[i]:\n            continue\n        p = points[i]\n        domination = np.any(\n            np.all(points >= p, axis=1) & np.any(points > p, axis=1)\n        )\n        if domination:\n            is_efficient[i] = False\n    return is_efficient\n\n\ndef plot_metrics_by_trial(df, metrics=(\"HOTA\", \"MOTA\", \"IDF1\"), exp_path=None):\n    \"\"\"\n    Plot several metrics vs. trial index on one shared figure.\n\n    Parameters\n    ----------\n    df : pandas.DataFrame\n        DataFrame that contains one column per metric plus an\n        implicit trial order (row index).\n    metrics : list/tuple of str\n        The metric column names to plot together.\n    \"\"\"\n    # Only keep the metrics that are actually present\n    avail = [m for m in metrics if m in df.columns]\n    if not avail:\n        print(\"⚠️  None of the requested metrics are in the DataFrame.\")\n        return\n\n    indices = list(range(len(df)))\n    fig, ax = plt.subplots(figsize=(10, 5))\n\n    for metric in avail:\n        ax.plot(indices,\n                df[metric].values,\n                marker=\"o\",\n                linestyle=\"-\",\n                label=metric)\n\n    ax.xaxis.set_major_locator(FixedLocator(indices))\n    ax.set_xticklabels(indices, rotation=90)\n    ax.set_xlabel(\"Trial index\")\n    ax.set_ylabel(\"Metric value\")\n    ax.set_title(\"Final HOTA, MOTA & IDF1 by Trial Number\")\n    ax.grid(True, linestyle=\"--\", alpha=0.4)\n    ax.legend(title=\"Metric\")\n    plt.tight_layout()\n    plt.show()\n    fig.savefig(exp_path / \"hota_mota_idf1_by_trial.png\", dpi=1200)\n\n\ndef main():\n    parser = argparse.ArgumentParser(\n        description=\"Analyze a Ray Tune experiment directory.\"\n    )\n    parser.add_argument(\n        \"--exp_path\",\n        default=Path(\"ray/botsort_tune\"),\n        help=\"Path to your Tune experiment folder\"\n    )\n    parser.add_argument(\n        \"--metric\",\n        default=\"HOTA\",\n        help=\"Name of the metric to summarize & plot (default: HOTA)\",\n    )\n    parser.add_argument(\n        \"--mode\",\n        choices=[\"max\", \"min\"],\n        default=\"max\",\n        help=\"Whether to pick the trial with maximum or minimum final metric (default: max)\",\n    )\n    args = parser.parse_args()\n\n    # Load experiment\n    exp_dir = Path(args.exp_path).expanduser().resolve()\n    exp_uri = exp_dir.as_uri()\n    analysis = ExperimentAnalysis(exp_uri)\n\n    # Summary of experiment\n    if getattr(analysis, \"errors\", None):\n        print(\"⚠️  Some trials errored.\")\n    else:\n        print(\"✅ No trial errors detected.\")\n    trial_dfs = analysis.trial_dataframes\n    num_runs = len(trial_dfs)\n    print(f\"Found {num_runs} completed trials.\\n\")\n\n    # Final metrics table\n    results_df = analysis.dataframe().reset_index(drop=True)\n    results_df['run_number'] = results_df.index\n\n    # Prepare display of selected metric and time\n    display_cols = ['run_number', args.metric, 'time_total_s']\n    available = [c for c in display_cols if c in results_df.columns]\n    ascending = (args.mode == \"min\")\n    sorted_df = results_df[available].sort_values(by=args.metric, ascending=ascending)\n\n    # Print all runs sorted\n    print(\"Final reported metrics for all trials:\")\n    print(sorted_df.to_string(index=False))\n    print()\n\n    # Best trial\n    best = results_df.sort_values(by=args.metric, ascending=ascending).iloc[0]\n    print(f\"Best trial by '{args.metric}' ({args.mode}):\")\n    print(best.to_string())\n    print()\n\n    # Plot default metric and extras\n    plot_metrics_by_trial(results_df, [\"HOTA\", \"MOTA\", \"IDF1\"], exp_path = args.exp_path)\n\n    # 3D scatter for all points + Pareto front using Plotly\n    x_metric, y_metric, z_metric = \"HOTA\", \"MOTA\", \"IDF1\"\n    if all(m in results_df.columns for m in [x_metric, y_metric, z_metric]):\n        df3 = results_df.dropna(subset=[x_metric, y_metric, z_metric]).reset_index(drop=True)\n        pts3 = df3[[x_metric, y_metric, z_metric]].values\n        mask3 = is_pareto_efficient(pts3)\n        others3 = df3[~mask3].copy()\n        front3 = df3[mask3].copy()\n\n        # build a hover-text column\n        def make_hover(df):\n            return (\n                \"run: \" + df['run_number'].astype(str)\n                + \"<br>HOTA: \" + df[x_metric].map(\"{:.3f}\".format)   # x_metric *is* HOTA\n                + \"<br>MOTA: \" + df[y_metric].map(\"{:.3f}\".format)   # y_metric *is* MOTA\n                + \"<br>IDF1: \" + df[z_metric].map(\"{:.3f}\".format)\n            )\n        others3['hover'] = make_hover(others3)\n        front3 ['hover'] = make_hover(front3)\n\n        fig = go.Figure()\n        \n        # --- Identify the single best-HOTA trial -----------------------------\n        best_idx  = df3[x_metric].idxmax()          # x_metric == \"HOTA\"\n        best_row  = df3.loc[[best_idx]].copy()\n        best_row['hover'] = make_hover(best_row)    # reuse the same hover builder\n\n        # all other trials\n        fig.add_trace(go.Scatter3d(\n            x=others3[x_metric],\n            y=others3[y_metric],\n            z=others3[z_metric],\n            mode='markers',\n            name='Trials',\n            marker=dict(size=4, opacity=0.6),\n            hoverinfo='text',\n            hovertext=others3['hover']\n        ))\n\n        # Pareto front\n        fig.add_trace(go.Scatter3d(\n            x=front3[x_metric],\n            y=front3[y_metric],\n            z=front3[z_metric],\n            mode='markers',\n            name='Pareto Front',\n            marker=dict(size=6, symbol='circle', color='red'),\n            hoverinfo='text',\n            hovertext=front3['hover']\n        ))\n        \n        # ★ Best HOTA trial (highlighted) ★\n        fig.add_trace(go.Scatter3d(\n            x=best_row[x_metric],\n            y=best_row[y_metric],\n            z=best_row[z_metric],\n            mode='markers',\n            name='Best HOTA',                       # new legend entry\n            marker=dict(size=9, color='gold',       # any eye-catching colour\n                        symbol='diamond'),\n            hoverinfo='text',\n            hovertext=best_row['hover']\n        ))\n\n        fig.update_layout(\n            title=f\"3D Scatter: all points + Pareto front ({x_metric}, {y_metric}, {z_metric})\",\n            scene=dict(\n                xaxis_title=x_metric,\n                yaxis_title=y_metric,\n                zaxis_title=z_metric\n            ),\n            legend=dict(x=0.8, y=0.9)\n        )\n        fig.show()\n\n        # To export to standalone HTML:\n        fig.write_html(args.exp_path / \"pareto3d_allpoints.html\")\n    else:\n        print(f\"Cannot plot 3D scatter: one or more of '{x_metric}', '{y_metric}', '{z_metric}' not in results.\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "boxmot/utils/association.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport numpy as np\n\nfrom boxmot.utils.iou import AssociationFunction\n\n\ndef speed_direction_batch(dets, tracks):\n    tracks = tracks[..., np.newaxis]\n    CX1, CY1 = (dets[:, 0] + dets[:, 2]) / 2.0, (dets[:, 1] + dets[:, 3]) / 2.0\n    CX2, CY2 = (tracks[:, 0] + tracks[:, 2]) / 2.0, (tracks[:, 1] + tracks[:, 3]) / 2.0\n    dx = CX1 - CX2\n    dy = CY1 - CY2\n    norm = np.sqrt(dx**2 + dy**2) + 1e-6\n    dx = dx / norm\n    dy = dy / norm\n    return dy, dx  # size: num_track x num_det\n\n\ndef linear_assignment(cost_matrix):\n    try:\n        import lap\n\n        _, x, y = lap.lapjv(cost_matrix, extend_cost=True)\n        return np.array([[y[i], i] for i in x if i >= 0])  #\n    except ImportError:\n        from scipy.optimize import linear_sum_assignment\n\n        x, y = linear_sum_assignment(cost_matrix)\n        return np.array([list(zip(x, y))])\n\n\n\n\ndef compute_aw_max_metric(emb_cost, w_association_emb, bottom=0.5):\n    w_emb = np.full_like(emb_cost, w_association_emb)\n\n    for idx in range(emb_cost.shape[0]):\n        inds = np.argsort(-emb_cost[idx])\n        # If there's less than two matches, just keep original weight\n        if len(inds) < 2:\n            continue\n        if emb_cost[idx, inds[0]] == 0:\n            row_weight = 0\n        else:\n            row_weight = 1 - max(\n                (emb_cost[idx, inds[1]] / emb_cost[idx, inds[0]]) - bottom, 0\n            ) / (1 - bottom)\n        w_emb[idx] *= row_weight\n\n    for idj in range(emb_cost.shape[1]):\n        inds = np.argsort(-emb_cost[:, idj])\n        # If there's less than two matches, just keep original weight\n        if len(inds) < 2:\n            continue\n        if emb_cost[inds[0], idj] == 0:\n            col_weight = 0\n        else:\n            col_weight = 1 - max(\n                (emb_cost[inds[1], idj] / emb_cost[inds[0], idj]) - bottom, 0\n            ) / (1 - bottom)\n        w_emb[:, idj] *= col_weight\n\n    return w_emb * emb_cost\n\n\ndef associate(\n    detections,\n    trackers,\n    asso_func,\n    iou_threshold,\n    velocities,\n    previous_obs,\n    vdc_weight,\n    w,\n    h,\n    emb_cost=None,\n    w_assoc_emb=None,\n    aw_off=None,\n    aw_param=None,\n):\n    if len(trackers) == 0:\n        return (\n            np.empty((0, 2), dtype=int),\n            np.arange(len(detections)),\n            np.empty((0, 5), dtype=int),\n        )\n\n    Y, X = speed_direction_batch(detections, previous_obs)\n    inertia_Y, inertia_X = velocities[:, 0], velocities[:, 1]\n    inertia_Y = np.repeat(inertia_Y[:, np.newaxis], Y.shape[1], axis=1)\n    inertia_X = np.repeat(inertia_X[:, np.newaxis], X.shape[1], axis=1)\n    diff_angle_cos = inertia_X * X + inertia_Y * Y\n    diff_angle_cos = np.clip(diff_angle_cos, a_min=-1, a_max=1)\n    diff_angle = np.arccos(diff_angle_cos)\n    diff_angle = (np.pi / 2.0 - np.abs(diff_angle)) / np.pi\n\n    valid_mask = np.ones(previous_obs.shape[0])\n    valid_mask[np.where(previous_obs[:, 4] < 0)] = 0\n\n    iou_matrix = asso_func(detections, trackers)\n    # iou_matrix = iou_batch(detections, trackers)\n    scores = np.repeat(detections[:, -1][:, np.newaxis], trackers.shape[0], axis=1)\n    # iou_matrix = iou_matrix * scores # a trick sometiems works, we don't encourage this\n    valid_mask = np.repeat(valid_mask[:, np.newaxis], X.shape[1], axis=1)\n\n    angle_diff_cost = (valid_mask * diff_angle) * vdc_weight\n    angle_diff_cost = angle_diff_cost.T\n    angle_diff_cost = angle_diff_cost * scores\n\n    if min(iou_matrix.shape):\n        a = (iou_matrix > iou_threshold).astype(np.int32)\n        if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n            matched_indices = np.stack(np.where(a), axis=1)\n        else:\n            if emb_cost is None:\n                emb_cost = 0\n            else:\n                emb_cost = emb_cost\n                emb_cost[iou_matrix <= 0] = 0\n                if not aw_off:\n                    emb_cost = compute_aw_max_metric(\n                        emb_cost, w_assoc_emb, bottom=aw_param\n                    )\n                else:\n                    emb_cost *= w_assoc_emb\n\n            final_cost = -(iou_matrix + angle_diff_cost + emb_cost)\n            matched_indices = linear_assignment(final_cost)\n            if matched_indices.size == 0:\n                matched_indices = np.empty(shape=(0, 2))\n\n    else:\n        matched_indices = np.empty(shape=(0, 2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if d not in matched_indices[:, 0]:\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if t not in matched_indices[:, 1]:\n            unmatched_trackers.append(t)\n\n    # filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        if iou_matrix[m[0], m[1]] < iou_threshold:\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n        else:\n            matches.append(m.reshape(1, 2))\n    if len(matches) == 0:\n        matches = np.empty((0, 2), dtype=int)\n    else:\n        matches = np.concatenate(matches, axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n\n\ndef associate_kitti(\n    detections, trackers, det_cates, iou_threshold, velocities, previous_obs, vdc_weight\n):\n    if len(trackers) == 0:\n        return (\n            np.empty((0, 2), dtype=int),\n            np.arange(len(detections)),\n            np.empty((0, 5), dtype=int),\n        )\n\n    \"\"\"\n        Cost from the velocity direction consistency\n    \"\"\"\n    Y, X = speed_direction_batch(detections, previous_obs)\n    inertia_Y, inertia_X = velocities[:, 0], velocities[:, 1]\n    inertia_Y = np.repeat(inertia_Y[:, np.newaxis], Y.shape[1], axis=1)\n    inertia_X = np.repeat(inertia_X[:, np.newaxis], X.shape[1], axis=1)\n    diff_angle_cos = inertia_X * X + inertia_Y * Y\n    diff_angle_cos = np.clip(diff_angle_cos, a_min=-1, a_max=1)\n    diff_angle = np.arccos(diff_angle_cos)\n    diff_angle = (np.pi / 2.0 - np.abs(diff_angle)) / np.pi\n\n    valid_mask = np.ones(previous_obs.shape[0])\n    valid_mask[np.where(previous_obs[:, 4] < 0)] = 0\n    valid_mask = np.repeat(valid_mask[:, np.newaxis], X.shape[1], axis=1)\n\n    scores = np.repeat(detections[:, -1][:, np.newaxis], trackers.shape[0], axis=1)\n    angle_diff_cost = (valid_mask * diff_angle) * vdc_weight\n    angle_diff_cost = angle_diff_cost.T\n    angle_diff_cost = angle_diff_cost * scores\n\n    \"\"\"\n        Cost from IoU\n    \"\"\"\n    iou_matrix = AssociationFunction.iou_batch(detections, trackers)\n\n    \"\"\"\n        With multiple categories, generate the cost for catgory mismatch\n    \"\"\"\n    num_dets = detections.shape[0]\n    num_trk = trackers.shape[0]\n    cate_matrix = np.zeros((num_dets, num_trk))\n    for i in range(num_dets):\n        for j in range(num_trk):\n            if det_cates[i] != trackers[j, 4]:\n                cate_matrix[i][j] = -1e6\n\n    cost_matrix = -iou_matrix - angle_diff_cost - cate_matrix\n\n    if min(iou_matrix.shape) > 0:\n        a = (iou_matrix > iou_threshold).astype(np.int32)\n        if a.sum(1).max() == 1 and a.sum(0).max() == 1:\n            matched_indices = np.stack(np.where(a), axis=1)\n        else:\n            matched_indices = linear_assignment(cost_matrix)\n    else:\n        matched_indices = np.empty(shape=(0, 2))\n\n    unmatched_detections = []\n    for d, det in enumerate(detections):\n        if d not in matched_indices[:, 0]:\n            unmatched_detections.append(d)\n    unmatched_trackers = []\n    for t, trk in enumerate(trackers):\n        if t not in matched_indices[:, 1]:\n            unmatched_trackers.append(t)\n\n    # filter out matched with low IOU\n    matches = []\n    for m in matched_indices:\n        if iou_matrix[m[0], m[1]] < iou_threshold:\n            unmatched_detections.append(m[0])\n            unmatched_trackers.append(m[1])\n        else:\n            matches.append(m.reshape(1, 2))\n    if len(matches) == 0:\n        matches = np.empty((0, 2), dtype=int)\n    else:\n        matches = np.concatenate(matches, axis=0)\n\n    return matches, np.array(unmatched_detections), np.array(unmatched_trackers)\n"
  },
  {
    "path": "boxmot/utils/checks.py",
    "content": "import shutil\nimport subprocess\nimport sys\nfrom importlib.metadata import PackageNotFoundError, version\nfrom pathlib import Path\nfrom typing import Iterable, Optional, Sequence\n\nfrom packaging.requirements import Requirement\n\n# Replace this import with your logger, or use logging.getLogger(__name__)\nfrom boxmot.utils import logger as LOGGER, ROOT\n\nREQUIREMENTS_FILE = Path(\"requirements.txt\")\n\n\nclass RequirementsChecker:\n    \"\"\"\n    Runtime dependency helper.\n\n    Features:\n      - Check/install a list of requirement specifiers (e.g., [\"yolox\", \"onnx>=1.15\"])\n      - Read and install from a requirements.txt\n      - Install a uv dependency *group* (requires uv)\n      - Install a project *extra* (PEP 621 optional-dependencies) via uv\n      - Backward-compatible alias: `cmds` == `extra_args`\n    \"\"\"\n\n    def __init__(\n        self, group: Optional[str] = None, requirements_file: Path = REQUIREMENTS_FILE\n    ):\n        \"\"\"\n        If `group` is provided, you *may* choose to call `sync_group_or_extra(group=group)`\n        before doing work. Otherwise you can use `check_requirements_file()` or `check_packages()`.\n        \"\"\"\n        self.group = group\n        self.requirements_file = requirements_file\n\n    # ---------- public API ----------\n\n    def check_packages(\n        self,\n        requirements: Iterable[str],\n        extra_args: Optional[Sequence[str]] = None,\n        cmds: Optional[Sequence[str]] = None,  # legacy alias\n    ):\n        \"\"\"\n        Check & install packages specified by requirement strings.\n\n        :param requirements: iterable of requirement specifiers as strings\n        :param extra_args: extra args for the installer (e.g. [\"--upgrade\"])\n        :param cmds: legacy alias for extra_args\n        \"\"\"\n        if extra_args is None and cmds is not None:\n            extra_args = list(cmds)\n\n        specs = [Requirement(r) for r in requirements]\n        missing: list[str] = []\n\n        for req in specs:\n            name = req.name\n            try:\n                inst_ver = version(name)\n            except PackageNotFoundError:\n                LOGGER.error(f\"Package {name!r} is not installed.\")\n                missing.append(str(req))\n            else:\n                if req.specifier and not req.specifier.contains(\n                    inst_ver, prereleases=True\n                ):\n                    LOGGER.error(\n                        f\"{name!r} has version {inst_ver} which does not satisfy {req.specifier}.\"\n                    )\n                    missing.append(str(req))\n\n        if missing:\n            self._install_packages(missing, extra_args)\n\n    def sync_extra(\n        self,\n        extra: str,\n        extra_args: Optional[Sequence[str]] = None,\n    ):\n        \"\"\"\n        Install a project *extra* (PEP 621 optional-dependencies).\n        - From source checkout + uv available: uv pip install -e \".[extra]\"\n        - From PyPI install:                  uv pip install \"boxmot[extra]\"\n        \"\"\"\n        if not extra:\n            raise ValueError(\"Extra name must be provided (e.g. 'openvino', 'export').\")\n        LOGGER.warning(f\"Installing extra '{extra}'...\")\n\n        # Check if we are running from a source install (editable)\n        # ROOT is the package root. If pyproject.toml exists there, it's an editable install.\n        root_pyproject = ROOT / \"pyproject.toml\"\n        \n        cmd: list[str]\n\n        if root_pyproject.is_file():\n            # Editable install detected or running from source root\n            # We use ROOT to point to the source directory\n            target = f\"{ROOT}[{extra}]\"\n            cmd = [\"uv\", \"pip\", \"install\", \"--no-cache-dir\", \"-e\", target]\n        else:\n            # Installed from PyPI: install the published dist extra\n            cmd = [\"uv\", \"pip\", \"install\", f\"boxmot[{extra}]\"]\n\n        if extra_args:\n            cmd.extend(extra_args)\n\n        try:\n            subprocess.check_call(cmd)\n            LOGGER.info(f\"Extra '{extra}' installed successfully.\")\n        except subprocess.CalledProcessError as e:\n            LOGGER.error(f\"Failed to install extra '{extra}': {e}\")\n            raise RuntimeError(f\"Failed to install extra '{extra}': {e}\")\n\n    # ---------- internals ----------\n\n    def _install_packages(\n        self, packages: Sequence[str], extra_args: Optional[Sequence[str]] = None\n    ):\n        \"\"\"\n        Install an explicit list of requirement specifiers with uv.\n        \"\"\"\n        try:\n            LOGGER.warning(\n                f\"\\nMissing or mismatched packages: {', '.join(packages)}\\n\"\n                \"Attempting installation...\"\n            )\n            cmd = [\"uv\", \"pip\", \"install\", \"--no-cache-dir\"]\n\n            if extra_args:\n                cmd += list(extra_args)\n            cmd += list(packages)\n\n            subprocess.check_call(cmd)\n            LOGGER.info(\"All missing packages were installed successfully.\")\n        except Exception as e:\n            LOGGER.error(f\"Failed to install packages: {e}\")\n            raise RuntimeError(f\"Failed to install packages: {e}\")"
  },
  {
    "path": "boxmot/utils/clean.py",
    "content": "import os\nimport shutil\n\n\ndef cleanup_mot17(data_dir, keep_detection='FRCNN'):\n    \"\"\"\n    Cleans up the MOT17 dataset to resemble the MOT16 format by keeping only one detection folder per sequence.\n    Skips sequences that have already been cleaned.\n\n    Args:\n    - data_dir (str): Path to the MOT17 train directory.\n    - keep_detection (str): Detection type to keep (options: 'DPM', 'FRCNN', 'SDP'). Default is 'DPM'.\n    \"\"\"\n\n    # Get all folders in the train directory\n    all_dirs = [d for d in os.listdir(data_dir) if os.path.isdir(os.path.join(data_dir, d))]\n\n    # Identify unique sequences by removing detection suffixes\n    unique_sequences = set(seq.split('-')[0] + '-' + seq.split('-')[1] for seq in all_dirs)\n\n    for seq in unique_sequences:\n        # Directory path to the cleaned sequence\n        cleaned_seq_dir = os.path.join(data_dir, seq)\n\n        # Skip if the sequence is already cleaned\n        if os.path.exists(cleaned_seq_dir):\n            print(f\"Sequence {seq} is already cleaned. Skipping.\")\n            continue\n\n        # Directories for each detection method\n        seq_dirs = [os.path.join(data_dir, d)\n                    for d in all_dirs if d.startswith(seq)]\n\n        # Directory path for the detection folder to keep\n        keep_dir = os.path.join(data_dir, f\"{seq}-{keep_detection}\")\n\n        if os.path.exists(keep_dir):\n            # Move the directory to a new name (removing the detection suffix)\n            shutil.move(keep_dir, cleaned_seq_dir)\n            print(f\"Moved {keep_dir} to {cleaned_seq_dir}\")\n\n            # Remove other detection directories\n            for seq_dir in seq_dirs:\n                if os.path.exists(seq_dir) and seq_dir != keep_dir:\n                    shutil.rmtree(seq_dir)\n                    print(f\"Removed {seq_dir}\")\n        else:\n            print(f\"Directory for {seq} with {keep_detection} detection does not exist. Skipping.\")\n\n    print(\"MOT17 Cleanup completed!\")"
  },
  {
    "path": "boxmot/utils/custom_mot_challenge_2d_box.py",
    "content": "import numpy as np\nfrom scipy.optimize import linear_sum_assignment\nfrom trackeval.datasets.mot_challenge_2d_box import MotChallenge2DBox\nimport trackeval._timing as _timing\n\n# Default COCO80 mapping; used when dataset configs do not supply explicit ids.\nDEFAULT_CLASS_NAME_TO_ID = {\n    'person': 1, 'bicycle': 2, 'car': 3, 'motorcycle': 4, 'airplane': 5, 'bus': 6, 'train': 7, 'truck': 8, 'boat': 9, 'traffic light': 10,\n    'fire hydrant': 11, 'stop sign': 12, 'parking meter': 13, 'bench': 14, 'bird': 15, 'cat': 16, 'dog': 17, 'horse': 18, 'sheep': 19, 'cow': 20,\n    'elephant': 21, 'bear': 22, 'zebra': 23, 'giraffe': 24, 'backpack': 25, 'umbrella': 26, 'handbag': 27, 'tie': 28, 'suitcase': 29, 'frisbee': 30,\n    'skis': 31, 'snowboard': 32, 'sports ball': 33, 'kite': 34, 'baseball bat': 35, 'baseball glove': 36, 'skateboard': 37, 'surfboard': 38, 'tennis racket': 39, 'bottle': 40,\n    'wine glass': 41, 'cup': 42, 'fork': 43, 'knife': 44, 'spoon': 45, 'bowl': 46, 'banana': 47, 'apple': 48, 'sandwich': 49, 'orange': 50,\n    'broccoli': 51, 'carrot': 52, 'hot dog': 53, 'pizza': 54, 'donut': 55, 'cake': 56, 'chair': 57, 'couch': 58, 'potted plant': 59, 'bed': 60,\n    'dining table': 61, 'toilet': 62, 'tv': 63, 'laptop': 64, 'mouse': 65, 'remote': 66, 'keyboard': 67, 'cell phone': 68, 'microwave': 69, 'oven': 70,\n    'toaster': 71, 'sink': 72, 'refrigerator': 73, 'book': 74, 'clock': 75, 'vase': 76, 'scissors': 77, 'teddy bear': 78, 'hair drier': 79, 'toothbrush': 80\n}\n\nclass CustomMotChallenge2DBox(MotChallenge2DBox):\n    \"\"\"Custom Dataset class for MOT Challenge 2D bounding box tracking with multi-class support\"\"\"\n\n    @staticmethod\n    def get_default_dataset_config():\n        \"\"\"Default class config values\"\"\"\n        default_config = MotChallenge2DBox.get_default_dataset_config()\n        default_config['CLASSES_TO_EVAL'] = ['person']\n        default_config['CLASS_IDS'] = [1]\n        default_config['DISTRACTOR_CLASS_IDS'] = []\n        return default_config\n\n    def __init__(self, config=None):\n        \"\"\"Initialise dataset, checking that all required files are present\"\"\"\n        cfg = {} if config is None else dict(config)\n\n        # Persist the actual evaluation classes in lowercase to keep consistency with TrackEval internals.\n        real_classes = [cls.lower() for cls in cfg.get('CLASSES_TO_EVAL', ['person'])]\n        class_ids = cfg.get('CLASS_IDS')\n        distractor_ids = cfg.get('DISTRACTOR_CLASS_IDS') or []\n\n        # Create a temp config with 'pedestrian' to pass super().__init__ validation\n        temp_config = cfg.copy()\n        temp_config['CLASSES_TO_EVAL'] = ['pedestrian']\n        \n        # Initialize parent with temp config\n        super().__init__(temp_config)\n        \n        # Restore real classes and ids in self.config\n        self.config['CLASSES_TO_EVAL'] = real_classes\n        self.config['CLASS_IDS'] = class_ids\n        self.config['DISTRACTOR_CLASS_IDS'] = distractor_ids\n        \n        # Overwrite class validation and list with real classes\n        self.valid_classes = real_classes\n        self.class_list = real_classes\n\n        # Build the class-id map from config if provided, otherwise fallback to COCO-80.\n        if class_ids is not None and len(class_ids) == len(real_classes):\n            self.class_name_to_class_id = {cls: int(cid) for cls, cid in zip(real_classes, class_ids)}\n        else:\n            self.class_name_to_class_id = DEFAULT_CLASS_NAME_TO_ID\n\n        self.distractor_class_ids = [int(i) for i in distractor_ids] if distractor_ids else None\n        self.valid_class_numbers = list(self.class_name_to_class_id.values())\n\n    @_timing.time\n    def get_preprocessed_seq_data(self, raw_data, cls):\n        self._check_unique_ids(raw_data)\n        cls_id = self.class_name_to_class_id[cls]\n        # MOT distractor set; prefer config override, otherwise fall back to legacy defaults\n        #if self.distractor_class_ids is not None:\n        distractor_classes = self.distractor_class_ids\n        # else:\n        #     distractor_classes = [12, 8, 6, 7, 2] if self.benchmark == 'MOT20' else [12, 8, 7, 2]\n\n        data_keys = ['gt_ids', 'tracker_ids', 'gt_dets', 'tracker_dets',\n                    'tracker_confidences', 'similarity_scores']\n        data = {k: [None] * raw_data['num_timesteps'] for k in data_keys}\n\n        unique_gt_ids, unique_tracker_ids = [], []\n        num_gt_dets = num_tracker_dets = 0\n\n        for t in range(raw_data['num_timesteps']):\n            gt_ids            = raw_data['gt_ids'][t]\n            gt_dets           = raw_data['gt_dets'][t]\n            gt_classes        = raw_data['gt_classes'][t]\n            gt_zero_marked    = raw_data['gt_extras'][t]['zero_marked']\n\n            tracker_ids         = raw_data['tracker_ids'][t]\n            tracker_dets        = raw_data['tracker_dets'][t]\n            tracker_classes     = raw_data['tracker_classes'][t]\n            tracker_confs       = raw_data['tracker_confidences'][t]\n            similarity_scores   = raw_data['similarity_scores'][t]  # shape (num_gt, num_trk)\n\n            # --- Keep only trackers of the eval class (columns) ---\n            trk_keep_mask = (tracker_classes == cls_id)\n            kept_tracker_ids   = tracker_ids[trk_keep_mask]\n            kept_tracker_dets  = tracker_dets[trk_keep_mask, :] if tracker_dets.size else tracker_dets\n            kept_tracker_confs = tracker_confs[trk_keep_mask]\n            sim = similarity_scores\n            sim = sim[:, trk_keep_mask]  # always slice columns; may yield (N, 0)\n\n            # --- Remove trackers that match distractor GT (match vs ALL GT, not filtered by class) ---\n            if self.do_preproc and self.benchmark != 'MOT15' and gt_ids.shape[0] > 0 and kept_tracker_ids.shape[0] > 0 and sim.size > 0:\n                # threshold & Hungarian (same as original)\n                matching_scores = sim.copy()\n                matching_scores[matching_scores < 0.5 - np.finfo('float').eps] = 0\n                match_rows, match_cols = linear_sum_assignment(-matching_scores)\n                actually_matched = matching_scores[match_rows, match_cols] > 0 + np.finfo('float').eps\n                match_rows = match_rows[actually_matched]\n                match_cols = match_cols[actually_matched]\n\n                # mark tracker columns to remove if matched GT is a distractor class\n                is_distr = np.isin(gt_classes[match_rows], distractor_classes)\n                to_remove_cols = match_cols[is_distr]\n\n                if to_remove_cols.size > 0:\n                    kept_tracker_ids   = np.delete(kept_tracker_ids,   to_remove_cols, axis=0)\n                    kept_tracker_dets  = np.delete(kept_tracker_dets,  to_remove_cols, axis=0) if kept_tracker_dets.size else kept_tracker_dets\n                    kept_tracker_confs = np.delete(kept_tracker_confs, to_remove_cols, axis=0)\n                    sim                = np.delete(sim, to_remove_cols, axis=1)\n\n            # --- Now keep ONLY GT of the eval class and not zero-marked (rows) ---\n            if self.do_preproc and self.benchmark != 'MOT15':\n                gt_keep_mask = (gt_zero_marked != 0) & (gt_classes == cls_id)\n            else:\n                gt_keep_mask = (gt_zero_marked != 0)\n\n            kept_gt_ids  = gt_ids[gt_keep_mask]\n            kept_gt_dets = gt_dets[gt_keep_mask, :] if gt_dets.size else gt_dets\n            sim = sim[gt_keep_mask, :]  # always slice rows; ensures sim.shape == (len(kept_gt_ids), len(kept_tracker_ids))\n\n            # --- Write timestep outputs ---\n            data['tracker_ids'][t]          = kept_tracker_ids\n            data['tracker_dets'][t]         = kept_tracker_dets\n            data['tracker_confidences'][t]  = kept_tracker_confs\n            data['gt_ids'][t]               = kept_gt_ids\n            data['gt_dets'][t]              = kept_gt_dets\n            data['similarity_scores'][t]    = sim\n\n            unique_gt_ids      += list(np.unique(kept_gt_ids))\n            unique_tracker_ids += list(np.unique(kept_tracker_ids))\n            num_tracker_dets   += len(kept_tracker_ids)\n            num_gt_dets        += len(kept_gt_ids)\n\n        # --- Relabel to contiguous ids (no gaps) ---\n        if len(unique_gt_ids) > 0:\n            unique_gt_ids = np.unique(unique_gt_ids)\n            gt_map = np.nan * np.ones((np.max(unique_gt_ids) + 1))\n            gt_map[unique_gt_ids] = np.arange(len(unique_gt_ids))\n            for t in range(raw_data['num_timesteps']):\n                if len(data['gt_ids'][t]) > 0:\n                    data['gt_ids'][t] = gt_map[data['gt_ids'][t]].astype(int)\n\n        if len(unique_tracker_ids) > 0:\n            unique_tracker_ids = np.unique(unique_tracker_ids)\n            trk_map = np.nan * np.ones((np.max(unique_tracker_ids) + 1))\n            trk_map[unique_tracker_ids] = np.arange(len(unique_tracker_ids))\n            for t in range(raw_data['num_timesteps']):\n                if len(data['tracker_ids'][t]) > 0:\n                    data['tracker_ids'][t] = trk_map[data['tracker_ids'][t]].astype(int)\n\n        # --- Stats & checks ---\n        data['num_tracker_dets'] = num_tracker_dets\n        data['num_gt_dets']      = num_gt_dets\n        data['num_tracker_ids']  = len(np.unique(unique_tracker_ids)) if len(unique_tracker_ids) > 0 else 0\n        data['num_gt_ids']       = len(np.unique(unique_gt_ids)) if len(unique_gt_ids) > 0 else 0\n        data['num_timesteps']    = raw_data['num_timesteps']\n        data['seq']              = raw_data['seq']\n\n        self._check_unique_ids(data, after_preproc=True)\n        return data\n"
  },
  {
    "path": "boxmot/utils/dataloaders/dataset.py",
    "content": "\"\"\"\nMOT Dataset Loader\n==================\n\nProvides :class:`MOTDataset` and :class:`MOTSequence` for loading and iterating\nover multi-object tracking datasets stored in the **MOT sequence format**.\n\nExpected dataset layout\n-----------------------\n\nThe MOT sequence format (used by MOTChallenge and supported by annotation tools\nsuch as `CVAT <https://docs.cvat.ai/docs/dataset_management/formats/format-mot/>`_)\norganises data as follows::\n\n    <dataset_root>/\n    ├── <sequence_1>/\n    │   ├── img1/               # frame images (sequentially numbered)\n    │   │   ├── 000001.jpg\n    │   │   ├── 000002.jpg\n    │   │   └── ...\n    │   ├── gt/\n    │   │   ├── gt.txt          # ground-truth annotations\n    │   │   └── labels.txt      # (optional) class label names\n    │   └── seqinfo.ini         # (optional) sequence metadata\n    ├── <sequence_2>/\n    │   └── ...\n    └── ...\n\nGround-truth file (``gt/gt.txt``)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nEach line follows the format::\n\n    frame_id, track_id, x, y, w, h, not_ignored, class_id, visibility[, ...]\n\n* ``frame_id`` – 1-based frame number.\n* ``track_id`` – unique identity of the tracked object.\n* ``x, y, w, h`` – bounding box (top-left corner + width/height).\n* ``not_ignored`` – ``1`` if the annotation should be evaluated, ``0`` otherwise.\n* ``class_id`` – integer class label (see ``labels.txt``).\n* ``visibility`` – occlusion / visibility ratio in ``[0, 1]``.\n\nLabels file (``gt/labels.txt``) *(optional)*\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nOne class name per line.  Mandatory when the dataset uses non-standard labels.\n\nSequence info (``seqinfo.ini``) *(optional)*\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAn INI file with at least a ``[Sequence]`` section that can contain::\n\n    [Sequence]\n    name=<sequence_name>\n    imDir=img1\n    frameRate=30\n    seqLength=600\n    imWidth=1920\n    imHeight=1080\n    imExt=.jpg\n\n``frameRate`` is used by this module for FPS-based frame downsampling when\na ``target_fps`` is provided.\n\"\"\"\n\nimport configparser\nimport shutil\nfrom pathlib import Path\nfrom typing import Dict, Generator, List, Optional, Union\n\nimport cv2\nimport numpy as np\nfrom tqdm import tqdm\n\nfrom boxmot.utils import logger as LOGGER\n\n\ndef read_seq_fps(seq_dir: Path) -> int:\n    \"\"\"Read the original FPS from the ``seqinfo.ini`` of a sequence.\n\n    Args:\n        seq_dir: Path to the sequence directory.\n\n    Returns:\n        Original frame rate of the sequence.\n\n    Raises:\n        FileNotFoundError: If ``seqinfo.ini`` is not found in *seq_dir*.\n    \"\"\"\n    cfg_file = seq_dir / \"seqinfo.ini\"\n    if not cfg_file.exists():\n        raise FileNotFoundError(f\"Missing seqinfo.ini in {seq_dir}\")\n    cfg = configparser.ConfigParser()\n    cfg.read(cfg_file)\n    return cfg.getint(\"Sequence\", \"frameRate\")\n\n\ndef compute_fps_mask(frames: np.ndarray, orig_fps: int, target_fps: int) -> np.ndarray:\n    \"\"\"Compute a boolean mask for selecting frames to match *target_fps*.\n\n    Args:\n        frames: Array of original frame IDs.\n        orig_fps: Original FPS of the sequence (from ``seqinfo.ini``).\n        target_fps: Desired FPS.\n\n    Returns:\n        Boolean mask indicating which frames to keep.\n    \"\"\"\n    tgt = min(orig_fps, target_fps)\n    step = orig_fps / tgt\n    wanted = set(np.arange(1, int(frames.max()) + 1, step).astype(int))\n    return np.isin(frames.astype(int), list(wanted))\n\n\nclass MOTDataset:\n    \"\"\"Dataset class for MOT-format sequences with optional detection and embedding data.\n\n    Scans ``mot_root`` for sequence sub-directories that follow the standard\n    MOT layout (see module docstring).  When *det_emb_root*, *model_name* and\n    *reid_name* are provided, pre-computed detections and ReID embeddings are\n    associated with each sequence.\n\n    Args:\n        mot_root: Root path to the MOT dataset (contains sequence folders).\n        det_emb_root: Root path for detection and embedding outputs.\n        model_name: Name of the detection model used.\n        reid_name: Name of the re-identification model used.\n        target_fps: FPS to downsample to.  When set, the ``seqinfo.ini``\n            inside each sequence is read to determine the original frame rate.\n    \"\"\"\n\n    def __init__(\n        self,\n        mot_root: str,\n        det_emb_root: Optional[str] = None,\n        model_name: Optional[str] = None,\n        reid_name: Optional[str] = None,\n        target_fps: Optional[int] = None\n    ):\n        self.root = Path(mot_root)\n        self.target_fps = target_fps\n        self.seqs: Dict[str, Dict] = {}\n\n        if det_emb_root and model_name and reid_name:\n            base = Path(det_emb_root) / model_name\n            self.dets_dir = base / 'dets'\n            self.embs_dir = base / 'embs' / reid_name\n        else:\n            self.dets_dir = self.embs_dir = None\n\n        self._index_sequences()\n\n    def _index_sequences(self) -> None:\n        \"\"\"Index all sequences in the dataset folder.\n\n        For each sub-directory the loader looks for an ``img1/`` folder first;\n        if absent it falls back to using the sequence directory itself as the\n        image source.  Image files (``*.jpg``, ``*.png``) are collected and\n        sorted by name to determine frame ordering.\n        \"\"\"\n        for seq_dir in sorted(self.root.iterdir()):\n            if not seq_dir.is_dir():\n                continue\n            name = seq_dir.name\n            img_dir = seq_dir / 'img1'\n            if not img_dir.exists():\n                img_dir = seq_dir\n            imgs = sorted(list(img_dir.glob('*.jpg')) + list(img_dir.glob('*.png')))\n            if not imgs:\n                continue\n            frame_ids = [int(p.stem) for p in imgs]\n\n            det_path = self.dets_dir / f'{name}.txt' if self.dets_dir else None\n            emb_path = self.embs_dir / f'{name}.txt' if self.embs_dir else None\n\n            self.seqs[name] = {\n                'seq_dir': seq_dir,\n                'frame_ids': np.array(frame_ids, dtype=int),\n                'frame_paths': imgs,\n                'det_path': det_path,\n                'emb_path': emb_path\n            }\n\n    def sequence_names(self) -> List[str]:\n        \"\"\"Return the list of all available sequence names.\"\"\"\n        return list(self.seqs.keys())\n\n    def get_sequence(self, name: str) -> \"MOTSequence\":\n        \"\"\"Return a :class:`MOTSequence` iterator for the given sequence.\n\n        Args:\n            name: Name of the sequence (must match a sub-directory name).\n\n        Raises:\n            KeyError: If *name* is not found among indexed sequences.\n        \"\"\"\n        if name not in self.seqs:\n            raise KeyError(f\"Unknown sequence {name}\")\n        return MOTSequence(name, self.seqs[name], self.target_fps)\n\n\nclass MOTSequence:\n    \"\"\"Single MOT sequence that streams frame data with optional detections and embeddings.\n\n    Iterating over an instance yields dictionaries with the following keys:\n\n    * ``frame_id`` – integer frame number (1-based).\n    * ``img`` – BGR image as a NumPy array (loaded via OpenCV).\n    * ``dets`` – ``(N, D)`` detection array for the frame (columns after\n      ``frame_id`` from the detections file).\n    * ``embs`` – ``(N, E)`` ReID embedding array aligned with *dets*.\n\n    When *target_fps* is set and a ``seqinfo.ini`` with ``frameRate`` is\n    present, frames (together with detections, embeddings and ground truth)\n    are subsampled accordingly.  A temporary ``gt_temp.txt`` is written\n    next to the original ``gt.txt`` so that evaluation tools can use the\n    filtered annotations.\n\n    Args:\n        name: Sequence name.\n        meta: Internal metadata dictionary produced by :class:`MOTDataset`.\n        target_fps: Desired FPS for downsampling.\n    \"\"\"\n\n    def __init__(self, name: str, meta: Dict, target_fps: Optional[int]):\n        self.name = name\n        self.meta = meta\n        self.target_fps = target_fps\n        self.dets: Optional[np.ndarray] = None\n        self.embs: Optional[np.ndarray] = None\n        self.frame_ids: np.ndarray = meta['frame_ids']\n        self.frame_paths: List[Path] = meta['frame_paths']\n        self._prepare()\n\n    def _prepare(self) -> None:\n        \"\"\"Load detections / embeddings and optionally downsample to *target_fps*.\n\n        Always ensures gt_temp.txt exists for evaluation: either filtered by FPS\n        when downsampling, or a copy of gt.txt when nothing changed.\n        \"\"\"\n        updated_gt = False\n        gt_dir = self.meta['seq_dir'] / 'gt'\n\n        # 1) Load dets & embs\n        if self.meta['det_path'] and self.meta['emb_path']:\n            self.dets = np.loadtxt(self.meta['det_path'], comments=\"#\")\n            self.embs = np.loadtxt(self.meta['emb_path'], comments=\"#\")\n            if self.dets.shape[0] != self.embs.shape[0]:\n                raise ValueError(f\"Row mismatch in {self.name}\")\n\n            # 2) If target_fps is set, build a frame mask using seqinfo.ini\n            if self.target_fps:\n                seq_info_file = self.meta['seq_dir'] / 'seqinfo.ini'\n                if not seq_info_file.exists():\n                    LOGGER.warning(f\"Missing seqinfo.ini in {self.meta['seq_dir']}, skipping FPS downsample\")\n                else:\n                    orig_fps = read_seq_fps(self.meta['seq_dir'])\n                    mask = compute_fps_mask(self.dets[:, 0], orig_fps, self.target_fps)\n\n                    # a) Filter dets / embs / frame_ids / frame_paths\n                    self.dets = self.dets[mask]\n                    self.embs = self.embs[mask]\n                    keep_ids = set(self.dets[:, 0].astype(int))\n                    idxs_to_keep = [i for i, fid in enumerate(self.frame_ids) if fid in keep_ids]\n                    self.frame_ids = self.frame_ids[idxs_to_keep]\n                    self.frame_paths = [self.frame_paths[i] for i in idxs_to_keep]\n\n                    # b) Filter GT and write gt_temp.txt for evaluation\n                    orig_gt = np.loadtxt(gt_dir / 'gt.txt', delimiter=',')\n                    gt_mask = np.isin(orig_gt[:, 0].astype(int), list(keep_ids))\n                    filtered_gt = orig_gt[gt_mask]\n                    np.savetxt(\n                        gt_dir / 'gt_temp.txt',\n                        filtered_gt,\n                        delimiter=',',\n                        fmt=\"%d\" if filtered_gt.dtype.kind in 'iu' else \"%f\",\n                    )\n                    updated_gt = True\n\n        # 3) Ensure gt_temp.txt always exists for the evaluator (copy gt.txt if unchanged)\n        if (gt_dir / 'gt.txt').exists() and not updated_gt:\n            shutil.copy2(gt_dir / 'gt.txt', gt_dir / 'gt_temp.txt')\n\n    def __iter__(self) -> Generator[Dict[str, Union[int, np.ndarray]], None, None]:\n        \"\"\"Yield frame dictionaries one by one.\n\n        Yields:\n            A dict with keys ``frame_id``, ``img``, ``dets``, ``embs``.\n        \"\"\"\n        for fid, img_p in tqdm(\n            zip(self.frame_ids, self.frame_paths),\n            total=len(self.frame_ids),\n            desc=f\"Frames {self.name}\",\n        ):\n            img = cv2.imread(str(img_p))\n            if img is None:\n                LOGGER.warning(f\"Failed to load {img_p}\")\n                continue\n\n            if self.dets is not None:\n                mask = (self.dets[:, 0].astype(int) == fid)\n                dets_f = self.dets[mask, 1:]\n                embs_f = self.embs[mask]\n            else:\n                dets_f = np.zeros((0, 5))\n                embs_f = np.zeros((0, 128))\n\n            yield {\n                'frame_id': fid,\n                'img': img,\n                'dets': dets_f,\n                'embs': embs_f\n            }\n\n\ndef process_sequences_lazily(dataset: MOTDataset) -> None:\n    \"\"\"Example usage of lazy-loading and processing sequences from the dataset.\n\n    Args:\n        dataset: A :class:`MOTDataset` instance.\n    \"\"\"\n    for seq_name in dataset.sequence_names():\n        LOGGER.info(f\"Processing sequence: {seq_name}\")\n        for frame_data in dataset.get_sequence(seq_name):\n            print(\n                f\"Seq: {seq_name}, \"\n                f\"Frame: {frame_data['frame_id']}, \"\n                f\"Dets: {frame_data['dets'].shape[0]}\"\n            )\n\n\nif __name__ == \"__main__\":\n    dataset = MOTDataset(\n        mot_root=\"./tracking/TrackEval/MOT17-ablation/train\",\n        det_emb_root=\"./runs/dets_n_embs\",\n        model_name=\"yolox_x_ablation\",\n        reid_name=\"lmbn_n_duke\",\n        target_fps=15\n    )\n\n    process_sequences_lazily(dataset)\n"
  },
  {
    "path": "boxmot/utils/dataloaders/video.py",
    "content": "import csv\nimport glob\nimport os\nfrom pathlib import Path\nfrom typing import Generator, List, Union\n\nimport cv2\nimport numpy as np\n\n\nclass LazyDataLoader:\n    def __init__(self, source: Union[str, int, Path]):\n        self.source = str(source)\n        self.generator = self._get_generator()\n\n    def __iter__(self):\n        return self.generator\n\n    def _get_generator(self) -> Generator:\n        source = self.source\n\n        if source.endswith('.csv'):\n            return self._load_from_csv(source)\n        elif source.endswith('.streams'):\n            return self._load_from_stream_list(source)\n        elif source.startswith(('http://', 'https://')):\n            if 'youtube.com' in source or 'youtu.be' in source:\n                return self._load_from_youtube(source)\n            else:\n                return self._load_from_stream(source)\n        elif source.startswith(('rtsp://', 'rtmp://', 'tcp://')):\n            return self._load_from_stream(source)\n        elif '*' in source:\n            return self._load_from_glob(source)\n        elif os.path.isdir(source):\n            return self._load_from_directory(source)\n        elif os.path.isfile(source):\n            return self._load_from_video(source)\n        elif source.isdigit():\n            return self._load_from_webcam(int(source))\n        elif isinstance(source, int):\n            return self._load_from_webcam(source)\n        else:\n            raise ValueError(f\"Unsupported source type: {source}\")\n\n    def _load_from_csv(self, csv_path: str) -> Generator:\n        with open(csv_path, newline='') as f:\n            reader = csv.reader(f)\n            for row in reader:\n                if row:\n                    yield from iter(LazyDataLoader(row[0]))\n\n    def _load_from_video(self, video_path: str) -> Generator:\n        cap = cv2.VideoCapture(video_path)\n        if not cap.isOpened():\n            print(f\"[ERROR] Failed to open video file: {video_path}\")\n            return\n        while cap.isOpened():\n            ret, frame = cap.read()\n            if not ret:\n                break\n            yield frame\n        cap.release()\n\n    def _load_from_directory(self, path: str) -> Generator:\n        for f in sorted(Path(path).glob('*')):\n            if f.suffix.lower() in ['.jpg', '.png', '.jpeg', '.mp4', '.avi']:\n                yield from iter(LazyDataLoader(str(f)))\n\n    def _load_from_glob(self, pattern: str) -> Generator:\n        for f in sorted(glob.glob(pattern)):\n            yield from iter(LazyDataLoader(f))\n\n    def _load_from_youtube(self, url: str) -> Generator:\n        try:\n            import yt_dlp\n        except ImportError as e:\n            raise ImportError(\"yt_dlp is required for YouTube video support. Install it with `pip install yt_dlp`.\") from e\n\n        with yt_dlp.YoutubeDL({'quiet': True, 'format': 'best'}) as ydl:\n            info = ydl.extract_info(url, download=False)\n            video_url = info['url']\n            yield from self._load_from_stream(video_url)\n\n    def _load_from_stream(self, url: str) -> Generator:\n        cap = cv2.VideoCapture(url)\n        if not cap.isOpened():\n            print(f\"[ERROR] Failed to open stream: {url}\")\n            return\n        while cap.isOpened():\n            ret, frame = cap.read()\n            if not ret:\n                break\n            yield frame\n        cap.release()\n\n    def _load_from_stream_list(self, file_path: str) -> Generator[List[np.ndarray], None, None]:\n        with open(file_path) as f:\n            urls = [line.strip() for line in f if line.strip()]\n        caps = [cv2.VideoCapture(url) for url in urls]\n\n        for i, cap in enumerate(caps):\n            if not cap.isOpened():\n                print(f\"[ERROR] Failed to open stream {i}: {urls[i]}\")\n\n        while True:\n            frames = []\n            for cap in caps:\n                ret, frame = cap.read()\n                frames.append(frame if ret else None)\n            if all(f is None for f in frames):\n                break\n            yield frames\n\n        for cap in caps:\n            cap.release()\n\n    def _load_from_webcam(self, index: int) -> Generator:\n        cap = cv2.VideoCapture(index)\n        if not cap.isOpened():\n            print(f\"[ERROR] Failed to open webcam at index {index}\")\n            return\n        while cap.isOpened():\n            ret, frame = cap.read()\n            if not ret:\n                break\n            yield frame\n        cap.release()\n"
  },
  {
    "path": "boxmot/utils/download.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nUtility script to download and extract BoxMOT releases and MOT evaluation tools.\n\"\"\"\n\nimport argparse\nfrom pathlib import Path\nfrom typing import Optional\nfrom zipfile import BadZipFile, ZipFile\n\nimport gdown\nimport requests\nfrom requests.adapters import HTTPAdapter\nfrom tqdm import tqdm\nfrom urllib3.util.retry import Retry\n\nfrom boxmot.utils import logger as LOGGER\n\n# Mapping for deprecated numpy types\nDEPRECATED_TYPES = {\"np.float\": \"float\", \"np.int\": \"int\", \"np.bool\": \"bool\"}\n\n\ndef get_http_session(retries: int = 3, backoff_factor: float = 0.3) -> requests.Session:\n    \"\"\"Create HTTP session with retry strategy.\"\"\"\n    session = requests.Session()\n    retry_strategy = Retry(\n        total=retries,\n        status_forcelist=[429, 500, 502, 503, 504],\n        allowed_methods=[\"GET\", \"POST\"],\n        backoff_factor=backoff_factor\n    )\n    adapter = HTTPAdapter(max_retries=retry_strategy)\n    session.mount(\"https://\", adapter)\n    session.mount(\"http://\", adapter)\n    return session\n\n\ndef download_file(url: str, dest: Path, chunk_size: int = 8192, overwrite: bool = False, timeout: int = 10) -> Path:\n    \"\"\"\n    Download a file from a URL to a destination path, with progress and logging.\n    Returns the path to the downloaded file.\n    \"\"\"\n    if dest.exists() and not overwrite:\n        LOGGER.debug(f\"Cached: {dest.name}\")\n        return dest\n\n    # Ensure parent dir\n    dest.parent.mkdir(parents=True, exist_ok=True)\n    LOGGER.info(f\"Downloading {dest.name}...\")\n\n    if \"drive.google.com\" in url or \"drive.usercontent.google.com\" in url:\n        # Google Drive: use gdown (handles confirm tokens automatically)\n        gdown.download(\n            url=url,\n            output=str(dest),\n            quiet=False,\n            fuzzy=True\n        )\n    else:\n        session = get_http_session()\n        response = session.get(url, stream=True, timeout=timeout)\n        response.raise_for_status()\n\n        total = int(response.headers.get(\"Content-Length\", 0))\n\n        with open(dest, \"wb\") as f, tqdm(\n            total=total,\n            unit=\"B\",\n            unit_scale=True,\n            desc=f\"Downloading {dest.name}\"\n        ) as pbar:\n            for chunk in response.iter_content(chunk_size=chunk_size):\n                if chunk:\n                    f.write(chunk)\n                    pbar.update(len(chunk))\n\n    return dest\n\n\ndef extract_zip(zip_path: Path, extract_to: Path, overwrite: bool = False) -> None:\n    \"\"\"\n    Extract a ZIP archive to a target directory.\n    \"\"\"\n    if not zip_path.is_file():\n        raise FileNotFoundError(f\"ZIP file not found: {zip_path}\")\n\n    try:\n        with ZipFile(zip_path, 'r') as zf:\n            members = zf.infolist()\n            total_files = len(members)\n\n            if not overwrite:\n                already = [member.filename for member in members if (extract_to / member.filename).exists()]\n                if len(already) == total_files:\n                    LOGGER.debug(f\"Cached: {zip_path.name} (extracted)\")\n                    return\n\n            LOGGER.info(f\"Extracting {zip_path.name}...\")\n            for member in tqdm(members, desc=f\"Extracting {zip_path.name}\"):\n                target = extract_to / member.filename\n                if target.exists() and not overwrite:\n                    continue\n                extract_to.mkdir(parents=True, exist_ok=True)\n                zf.extract(member, extract_to)\n\n    except BadZipFile:\n        LOGGER.error(f\"Corrupt ZIP: {zip_path.name}\")\n        try:\n            zip_path.unlink()\n        except FileNotFoundError:\n            pass\n        raise\n\n\ndef patch_deprecated_types(root: Path, deprecated: dict = DEPRECATED_TYPES) -> None:\n    \"\"\"Patch deprecated numpy types in Python files.\"\"\"\n    LOGGER.debug(f\"Patching numpy types in: {root.name}\")\n    for file in root.rglob(\"*\"):\n        if file.suffix not in {\".py\", \".txt\"}:\n            continue\n        text = file.read_text(encoding=\"utf-8\")\n        updated = text\n        for old, new in deprecated.items():\n            updated = updated.replace(old, new)\n        if updated != text:\n            file.write_text(updated, encoding=\"utf-8\")\n\n\ndef download_trackeval(dest: Path, branch: str = \"master\", overwrite: bool = False) -> None:\n    \"\"\"\n    Download and set up the TrackEval repository into the given destination folder.\n\n    Args:\n        dest (Path): target directory for TrackEval (e.g. boxmot/engine/trackeval)\n        branch (str): Git branch to download (default \"master\")\n        overwrite (bool): if True, force re-download even if dest already exists\n    \"\"\"\n    # If already exists and we're not overwriting, skip\n    if dest.exists() and not overwrite:\n        LOGGER.debug(\"TrackEval already present\")\n        return\n\n    LOGGER.info(\"Downloading TrackEval...\")\n    repo_url = \"https://github.com/JonathonLuiten/TrackEval\"\n    zip_url = f\"{repo_url}/archive/refs/heads/{branch}.zip\"\n    zip_file = dest.parent / f\"{dest.name}-{branch}.zip\"\n\n    # Download the archive\n    zip_path = download_file(zip_url, zip_file, overwrite=overwrite)\n\n    # Extract into the parent folder\n    extract_zip(zip_path, dest.parent, overwrite=overwrite)\n\n    # GitHub will unpack to \"TrackEval-master\" (with original casing); \n    # rename it case-insensitively to our lowercase 'trackeval' folder\n    extracted = None\n    for d in dest.parent.iterdir():\n        if d.is_dir() and d.name.lower().startswith(\"trackeval\") and d.name.lower().endswith(f\"-{branch}\"):\n            extracted = d\n            break\n\n    if extracted is None:\n        LOGGER.warning(\"Couldn't locate extracted TrackEval folder\")\n    else:\n        extracted.rename(dest)\n\n    # Clean up the downloaded zip\n    try:\n        zip_file.unlink()\n    except FileNotFoundError:\n        pass\n\n    # Apply any necessary patches for deprecated types\n    patch_deprecated_types(dest)\n\n    LOGGER.debug(\"TrackEval setup complete\")\n\n    \ndef download_hf_dataset(repo_id: str, dest: Path, overwrite: bool = False) -> None:\n    \"\"\"\n    Download a dataset from HuggingFace Hub to the given destination.\n\n    Requires ``huggingface_hub`` to be installed (``pip install huggingface_hub``).\n\n    Args:\n        repo_id: HuggingFace dataset repo ID (e.g. \"user/dataset\").\n        dest: Local directory to save the dataset into.\n        overwrite: If True, re-download even if *dest* already exists.\n    \"\"\"\n    if dest.exists() and not overwrite:\n        LOGGER.debug(f\"HF dataset already present at {dest}\")\n        return\n\n    try:\n        from huggingface_hub import HfApi, snapshot_download\n    except ImportError:\n        import subprocess, sys\n        LOGGER.info(\"Installing huggingface_hub ...\")\n        subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"huggingface_hub\"])\n        from huggingface_hub import HfApi, snapshot_download\n\n    from tqdm.auto import tqdm as base_tqdm\n    from huggingface_hub.hf_api import RepoFile\n\n    # Get file list with real sizes upfront\n    api = HfApi()\n    files = [\n        f for f in api.list_repo_tree(repo_id=repo_id, repo_type=\"dataset\", recursive=True)\n        if isinstance(f, RepoFile)\n    ]\n    num_files = len(files)\n    total_size = sum(f.size or (f.lfs.size if f.lfs else 0) for f in files)\n\n    LOGGER.info(f\"Downloading HuggingFace dataset {repo_id} \"\n                f\"({num_files} files, {total_size / 1e9:.1f} GB) ...\")\n\n    class _TqdmKnownTotal(base_tqdm):\n        \"\"\"tqdm wrapper that injects pre-computed totals for HF progress bars.\"\"\"\n        _lock_total = False\n\n        def __init__(self, *args, **kwargs):\n            kwargs.pop(\"name\", None)\n            desc = kwargs.get(\"desc\", \"\")\n            if desc.startswith(\"Downloading\"):\n                kwargs[\"total\"] = total_size\n                kwargs[\"desc\"] = \"Downloading\"\n            elif desc.startswith(\"Fetching\"):\n                kwargs[\"total\"] = num_files\n                kwargs[\"desc\"] = f\"Fetching {num_files} files\"\n            super().__init__(*args, **kwargs)\n            if desc.startswith(\"Downloading\"):\n                self._lock_total = True\n\n        def __setattr__(self, name, value):\n            if name == \"total\" and self._lock_total:\n                return\n            super().__setattr__(name, value)\n\n    snapshot_download(\n        repo_id=repo_id,\n        repo_type=\"dataset\",\n        local_dir=str(dest.parent),\n        tqdm_class=_TqdmKnownTotal,\n    )\n    LOGGER.debug(f\"HF dataset ready at {dest}\")\n\n\ndef download_eval_data(\n    *,\n    runs_url: Optional[str] = None,\n    dataset_url: str,\n    dataset_dest: Path,\n    overwrite: bool = False\n) -> None:\n    \"\"\"\n    Download & extract TrackEval evaluation data.\n    If `runs_url` is truthy, downloads+unzips runs.zip; otherwise skips it.\n    Always downloads+unzips the benchmark data.\n    \"\"\"\n    LOGGER.info(\"Setting up evaluation data...\")\n\n    # Optional runs data\n    if runs_url:\n        runs_zip = download_file(runs_url, Path(\"runs.zip\"), overwrite=overwrite)\n        extract_zip(runs_zip, Path(\".\"), overwrite=overwrite)\n\n    if not dataset_url:\n        return\n\n    # HuggingFace dataset (hf://owner/repo/subfolder)\n    if dataset_url.startswith(\"hf://\"):\n        parts = dataset_url[len(\"hf://\"):].split(\"/\")\n        repo_id = \"/\".join(parts[:2])        # e.g. \"Fleyderer/FastTracker-Benchmark-MOT\"\n        download_hf_dataset(repo_id, dataset_dest, overwrite=overwrite)\n        return\n\n    # benchmark ZIP\n    benchmark_zip = download_file(dataset_url, dataset_dest, overwrite=overwrite)\n    extract_zip(benchmark_zip, dataset_dest.parent, overwrite=overwrite)\n\n    LOGGER.debug(f\"Benchmark data ready at: {dataset_dest.parent}\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Download BoxMOT datasets and MOT evaluation tools.\")\n    parser.add_argument(\"--branch\", default=\"master\", help=\"Branch of TrackEval to download.\")\n    parser.add_argument(\"--overwrite\", action=\"store_true\", help=\"Overwrite existing downloads and extractions.\")\n    parser.add_argument(\"--verbose\", action=\"store_true\", help=\"Enable detailed logging.\")\n    args = parser.parse_args()\n\n    download_trackeval(\n        dest=Path(\"TrackEval\"),\n        branch=args.branch,\n        overwrite=args.overwrite\n    )\n\n    download_eval_data(\n        runs_url=\"https://github.com/mikel-brostrom/boxmot/releases/download/v16.0.11/runs.zip\",\n        dataset_url=\"https://github.com/mikel-brostrom/boxmot/releases/download/v10.0.83/MOT17-50.zip\",\n        dataset_dest=Path(\"boxmot/engine/TrackEval/MOT17-ablation.zip\"),\n        overwrite=args.overwrite\n    )\n"
  },
  {
    "path": "boxmot/utils/iou.py",
    "content": "import cv2 as cv\nimport numpy as np\n\n\ndef iou_obb_pair(i, j, bboxes1, bboxes2):\n    \"\"\"\n    Compute IoU for the rotated rectangles at index i and j in the batches `bboxes1`, `bboxes2` .\n    \"\"\"\n    rect1 = np.asarray(bboxes1[int(i)], dtype=float).reshape(-1)\n    rect2 = np.asarray(bboxes2[int(j)], dtype=float).reshape(-1)\n\n    (cx1, cy1, w1, h1, angle1) = rect1[0:5]\n    (cx2, cy2, w2, h2, angle2) = rect2[0:5]\n\n    angle1 = np.degrees(angle1)\n    angle2 = np.degrees(angle2)\n\n    r1 = ((cx1, cy1), (w1, h1), angle1)\n    r2 = ((cx2, cy2), (w2, h2), angle2)\n\n    # Compute intersection\n    ret, intersect = cv.rotatedRectangleIntersection(r1, r2)\n    if ret == 0 or intersect is None:\n        return 0.0  # No intersection\n\n    # Calculate intersection area\n    intersection_area = cv.contourArea(intersect)\n\n    # Calculate union area\n    area1 = w1 * h1\n    area2 = w2 * h2\n    union_area = area1 + area2 - intersection_area\n\n    # Compute IoU\n    return intersection_area / union_area if union_area > 0 else 0.0\n\n\nclass AssociationFunction:\n    def __init__(self, w, h, asso_mode=\"iou\"):\n        \"\"\"\n        Initializes the AssociationFunction class with the necessary parameters for bounding box operations.\n        The association function is selected based on the `asso_mode` string provided during class creation.\n\n        Parameters:\n        w (int): The width of the frame, used for normalizing centroid distance.\n        h (int): The height of the frame, used for normalizing centroid distance.\n        asso_mode (str): The association function to use (e.g., \"iou\", \"giou\", \"centroid\", etc.).\n        \"\"\"\n        self.w = w\n        self.h = h\n        self.asso_func = self._get_asso_func(asso_mode)\n\n    @staticmethod\n    def iou_batch(bboxes1, bboxes2) -> np.ndarray:\n        bboxes2 = np.expand_dims(bboxes2, 0)\n        bboxes1 = np.expand_dims(bboxes1, 1)\n\n        xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n        yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n        xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n        yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n        w = np.maximum(0.0, xx2 - xx1)\n        h = np.maximum(0.0, yy2 - yy1)\n        wh = w * h\n        o = wh / (\n            (bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n            + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1])\n            - wh\n        )\n        return o\n\n    @staticmethod\n    def iou_batch_obb(bboxes1, bboxes2) -> np.ndarray:\n        N, M = len(bboxes1), len(bboxes2)\n\n        def wrapper(i, j):\n            return iou_obb_pair(i, j, bboxes1, bboxes2)\n\n        iou_matrix = np.fromfunction(np.vectorize(wrapper), shape=(N, M), dtype=int)\n        return iou_matrix\n\n    @staticmethod\n    def hmiou_batch(bboxes1, bboxes2):\n        \"\"\"\n        Compute a modified Intersection over Union (hIoU) between two batches of bounding boxes,\n        incorporating a vertical overlap ratio.\n\n        Parameters:\n        - bboxes1: (N, 4) array of bounding boxes [x1, y1, x2, y2]\n        - bboxes2: (M, 4) array of bounding boxes [x1, y1, x2, y2]\n\n        Returns:\n        - hmiou: (N, M) array where hmiou[i, j] is the modified IoU between bboxes1[i] and bboxes2[j]\n        \"\"\"\n        # Expand dimensions for broadcasting\n        bboxes1 = np.expand_dims(bboxes1, axis=1)  # Shape: (N, 1, 4)\n        bboxes2 = np.expand_dims(bboxes2, axis=0)  # Shape: (1, M, 4)\n\n        # Compute vertical overlap ratio 'o'\n        intersect_y1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n        intersect_y2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n        intersection_height = np.maximum(0.0, intersect_y2 - intersect_y1)\n\n        union_y1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n        union_y2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n        union_height = np.maximum(1e-10, union_y2 - union_y1)\n\n        o = intersection_height / union_height\n\n        # Compute standard IoU\n        inter_x1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n        inter_y1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n        inter_x2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n        inter_y2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n\n        inter_w = np.maximum(0.0, inter_x2 - inter_x1)\n        inter_h = np.maximum(0.0, inter_y2 - inter_y1)\n        inter_area = inter_w * inter_h\n\n        area1 = (bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])  # Shape: (N, 1)\n        area2 = (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1])  # Shape: (1, M)\n\n        union_area = area1 + area2 - inter_area\n\n        iou = inter_area / (union_area + 1e-10)\n\n        # Modify IoU with vertical overlap ratio\n        hmiou = iou * o\n\n        return hmiou\n\n    @staticmethod\n    def giou_batch(bboxes1, bboxes2) -> np.ndarray:\n        \"\"\"\n        :param bboxes1: predict of bbox(N,4)(x1,y1,x2,y2)\n        :param bboxes2: groundtruth of bbox(N,4)(x1,y1,x2,y2)\n        :return:\n        \"\"\"\n        # Ensure predict's bbox form\n        bboxes2 = np.expand_dims(bboxes2, 0)\n        bboxes1 = np.expand_dims(bboxes1, 1)\n\n        xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n        yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n        xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n        yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n        w = np.maximum(0.0, xx2 - xx1)\n        h = np.maximum(0.0, yy2 - yy1)\n        wh = w * h  # Intersection area\n\n        # Compute areas of individual boxes\n        area1 = (bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n        area2 = (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1])\n\n        # Union area\n        union_area = area1 + area2 - wh\n\n        iou = wh / union_area\n\n        xxc1 = np.minimum(bboxes1[..., 0], bboxes2[..., 0])\n        yyc1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n        xxc2 = np.maximum(bboxes1[..., 2], bboxes2[..., 2])\n        yyc2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n        wc = xxc2 - xxc1\n        hc = yyc2 - yyc1\n        assert (wc > 0).all() and (hc > 0).all()\n        area_enclose = wc * hc  # Area of the smallest enclosing box\n\n        # Corrected GIoU computation\n        giou = iou - (area_enclose - union_area) / area_enclose\n        giou = (giou + 1.0) / 2.0  # Resize from (-1,1) to (0,1)\n        return giou\n\n    def centroid_batch(self, bboxes1, bboxes2) -> np.ndarray:\n        centroids1 = np.stack(((bboxes1[..., 0] + bboxes1[..., 2]) / 2,\n                               (bboxes1[..., 1] + bboxes1[..., 3]) / 2), axis=-1)\n        centroids2 = np.stack(((bboxes2[..., 0] + bboxes2[..., 2]) / 2,\n                               (bboxes2[..., 1] + bboxes2[..., 3]) / 2), axis=-1)\n\n        centroids1 = np.expand_dims(centroids1, 1)\n        centroids2 = np.expand_dims(centroids2, 0)\n\n        distances = np.sqrt(np.sum((centroids1 - centroids2) ** 2, axis=-1))\n        norm_factor = np.sqrt(self.w**2 + self.h**2)\n        normalized_distances = distances / norm_factor\n\n        return 1 - normalized_distances\n\n    def centroid_batch_obb(self, bboxes1, bboxes2) -> np.ndarray:\n        centroids1 = np.stack((bboxes1[..., 0], bboxes1[..., 1]), axis=-1)\n        centroids2 = np.stack((bboxes2[..., 0], bboxes2[..., 1]), axis=-1)\n\n        centroids1 = np.expand_dims(centroids1, 1)\n        centroids2 = np.expand_dims(centroids2, 0)\n\n        distances = np.sqrt(np.sum((centroids1 - centroids2) ** 2, axis=-1))\n        norm_factor = np.sqrt(self.w**2 + self.h**2)\n        normalized_distances = distances / norm_factor\n\n        return 1 - normalized_distances\n\n    @staticmethod\n    def ciou_batch(bboxes1, bboxes2) -> np.ndarray:\n        \"\"\"\n        Calculate Complete Intersection over Union (CIoU) for batches of bounding boxes.\n\n        :param bboxes1: Predicted bounding boxes of shape (N, 4) as (x1, y1, x2, y2)\n        :param bboxes2: Ground truth bounding boxes of shape (N, 4) as (x1, y1, x2, y2)\n        :return: CIoU scores scaled between 0 and 1\n        \"\"\"\n        epsilon = 1e-7  # Small value to prevent division by zero\n\n        # Expand dimensions for broadcasting\n        bboxes2 = np.expand_dims(bboxes2, 0)  # Shape: (1, M, 4)\n        bboxes1 = np.expand_dims(bboxes1, 1)  # Shape: (N, 1, 4)\n\n        # Calculate the intersection box\n        xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n        yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n        xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n        yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n        w = np.maximum(0.0, xx2 - xx1)\n        h = np.maximum(0.0, yy2 - yy1)\n        wh = w * h\n\n        # Calculate IoU\n        area1 = (bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n        area2 = (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1])\n        iou = wh / (area1 + area2 - wh + epsilon)\n\n        # Calculate center points\n        centerx1 = (bboxes1[..., 0] + bboxes1[..., 2]) / 2.0\n        centery1 = (bboxes1[..., 1] + bboxes1[..., 3]) / 2.0\n        centerx2 = (bboxes2[..., 0] + bboxes2[..., 2]) / 2.0\n        centery2 = (bboxes2[..., 1] + bboxes2[..., 3]) / 2.0\n\n        # Calculate squared center distance\n        inner_diag = (centerx1 - centerx2) ** 2 + (centery1 - centery2) ** 2\n\n        # Calculate smallest enclosing box diagonal\n        xxc1 = np.minimum(bboxes1[..., 0], bboxes2[..., 0])\n        yyc1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n        xxc2 = np.maximum(bboxes1[..., 2], bboxes2[..., 2])\n        yyc2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n        outer_diag = (xxc2 - xxc1) ** 2 + (yyc2 - yyc1) ** 2 + epsilon\n\n        # Calculate aspect ratio consistency\n        w1 = bboxes1[..., 2] - bboxes1[..., 0]\n        h1 = bboxes1[..., 3] - bboxes1[..., 1]\n        w2 = bboxes2[..., 2] - bboxes2[..., 0]\n        h2 = bboxes2[..., 3] - bboxes2[..., 1]\n\n        # Prevent division by zero\n        h2 = h2 + epsilon\n        h1 = h1 + epsilon\n        arctan_diff = np.arctan(w2 / h2) - np.arctan(w1 / h1)\n        v = (4 / (np.pi**2)) * (arctan_diff**2)\n\n        # Calculate alpha\n        S = 1 - iou\n        alpha = v / (S + v + epsilon)\n\n        # Compute CIoU\n        ciou = iou - (inner_diag / outer_diag) + (alpha * v)\n\n        # Scale CIoU to [0, 1]\n        return (ciou + 1) / 2.0\n\n    @staticmethod\n    def diou_batch(bboxes1, bboxes2) -> np.ndarray:\n        \"\"\"\n        :param bbox_p: predict of bbox(N,4)(x1,y1,x2,y2)\n        :param bbox_g: groundtruth of bbox(N,4)(x1,y1,x2,y2)\n        :return:\n        \"\"\"\n        # for details should go to https://arxiv.org/pdf/1902.09630.pdf\n        # ensure predict's bbox form\n        bboxes2 = np.expand_dims(bboxes2, 0)\n        bboxes1 = np.expand_dims(bboxes1, 1)\n\n        # calculate the intersection box\n        xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])\n        yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])\n        xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])\n        yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])\n        w = np.maximum(0.0, xx2 - xx1)\n        h = np.maximum(0.0, yy2 - yy1)\n        wh = w * h\n        iou = wh / (\n            (bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])\n            + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1])\n            - wh\n        )\n\n        centerx1 = (bboxes1[..., 0] + bboxes1[..., 2]) / 2.0\n        centery1 = (bboxes1[..., 1] + bboxes1[..., 3]) / 2.0\n        centerx2 = (bboxes2[..., 0] + bboxes2[..., 2]) / 2.0\n        centery2 = (bboxes2[..., 1] + bboxes2[..., 3]) / 2.0\n\n        inner_diag = (centerx1 - centerx2) ** 2 + (centery1 - centery2) ** 2\n\n        xxc1 = np.minimum(bboxes1[..., 0], bboxes2[..., 0])\n        yyc1 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])\n        xxc2 = np.maximum(bboxes1[..., 2], bboxes2[..., 2])\n        yyc2 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])\n\n        outer_diag = (xxc2 - xxc1) ** 2 + (yyc2 - yyc1) ** 2\n        diou = iou - inner_diag / outer_diag\n\n        return (diou + 1) / 2.0\n\n    @staticmethod\n    def run_asso_func(self, bboxes1, bboxes2):\n        \"\"\"\n        Runs the selected association function (based on the initialization string) on the input bounding boxes.\n\n        Parameters:\n        bboxes1: First set of bounding boxes.\n        bboxes2: Second set of bounding boxes.\n        \"\"\"\n        return self.asso_func(bboxes1, bboxes2)\n\n    def _get_asso_func(self, asso_mode):\n        \"\"\"\n        Returns the corresponding association function based on the provided mode string.\n\n        Parameters:\n        asso_mode (str): The association function to use (e.g., \"iou\", \"giou\", \"centroid\", etc.).\n\n        Returns:\n        function: The appropriate function for the association calculation.\n        \"\"\"\n        ASSO_FUNCS = {\n            \"iou\": AssociationFunction.iou_batch,\n            \"iou_obb\": AssociationFunction.iou_batch_obb,\n            \"hmiou\": AssociationFunction.hmiou_batch,\n            \"giou\": AssociationFunction.giou_batch,\n            \"ciou\": AssociationFunction.ciou_batch,\n            \"diou\": AssociationFunction.diou_batch,\n            \"centroid\": self.centroid_batch,  # only not being staticmethod\n            \"centroid_obb\": self.centroid_batch_obb,\n        }\n\n        if asso_mode not in ASSO_FUNCS:\n            raise ValueError(\n                f\"Invalid association mode: {asso_mode}. Choose from {list(ASSO_FUNCS.keys())}\"\n            )\n\n        return ASSO_FUNCS[asso_mode]\n"
  },
  {
    "path": "boxmot/utils/matching.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport lap\nimport numpy as np\nfrom scipy.spatial.distance import cdist\n\nfrom boxmot.utils.iou import AssociationFunction\n\n\"\"\"\nTable for the 0.95 quantile of the chi-square distribution with N degrees of\nfreedom (contains values for N=1, ..., 9). Taken from MATLAB/Octave's chi2inv\nfunction and used as Mahalanobis gating threshold.\n\"\"\"\nchi2inv95 = {\n    1: 3.8415,\n    2: 5.9915,\n    3: 7.8147,\n    4: 9.4877,\n    5: 11.070,\n    6: 12.592,\n    7: 14.067,\n    8: 15.507,\n    9: 16.919,\n}\n\n\n\ndef linear_assignment(cost_matrix, thresh):\n    if cost_matrix.size == 0:\n        return (\n            np.empty((0, 2), dtype=int),\n            tuple(range(cost_matrix.shape[0])),\n            tuple(range(cost_matrix.shape[1])),\n        )\n    matches, unmatched_a, unmatched_b = [], [], []\n    cost, x, y = lap.lapjv(cost_matrix, extend_cost=True, cost_limit=thresh)\n    for ix, mx in enumerate(x):\n        if mx >= 0:\n            matches.append([ix, mx])\n    unmatched_a = np.where(x < 0)[0]\n    unmatched_b = np.where(y < 0)[0]\n    matches = np.asarray(matches)\n    return matches, unmatched_a, unmatched_b\n\n\ndef iou_distance(atracks, btracks, is_obb: bool = False):\n    \"\"\"\n    Compute cost based on IoU\n    :type atracks: list[STrack]\n    :type btracks: list[STrack]\n\n    :rtype cost_matrix np.ndarray\n    \"\"\"\n\n    if (len(atracks) > 0 and isinstance(atracks[0], np.ndarray)) or (\n        len(btracks) > 0 and isinstance(btracks[0], np.ndarray)\n    ):\n        atlbrs = atracks\n        btlbrs = btracks\n    else:\n        is_obb = is_obb or any(getattr(track, \"is_obb\", False) for track in atracks + btracks)\n        if is_obb:\n            atlbrs = [track.xywha for track in atracks]\n            btlbrs = [track.xywha for track in btracks]\n        else:\n            atlbrs = [track.xyxy for track in atracks]\n            btlbrs = [track.xyxy for track in btracks]\n\n    ious = np.zeros((len(atlbrs), len(btlbrs)), dtype=np.float32)\n    if ious.size == 0:\n        return ious\n    _ious = (\n        AssociationFunction.iou_batch_obb(atlbrs, btlbrs)\n        if is_obb\n        else AssociationFunction.iou_batch(atlbrs, btlbrs)\n    )\n\n    cost_matrix = 1 - _ious\n\n    return cost_matrix\n\n\n\n\ndef embedding_distance(tracks, detections, metric=\"cosine\"):\n    \"\"\"\n    :param tracks: list[STrack]\n    :param detections: list[BaseTrack]\n    :param metric:\n    :return: cost_matrix np.ndarray\n    \"\"\"\n\n    cost_matrix = np.zeros((len(tracks), len(detections)), dtype=np.float32)\n    if cost_matrix.size == 0:\n        return cost_matrix\n    det_features = np.asarray(\n        [track.curr_feat for track in detections], dtype=np.float32\n    )\n    # for i, track in enumerate(tracks):\n    # cost_matrix[i, :] = np.maximum(0.0, cdist(track.smooth_feat.reshape(1,-1), det_features, metric))\n    track_features = np.asarray(\n        [track.smooth_feat for track in tracks], dtype=np.float32\n    )\n    cost_matrix = np.maximum(\n        0.0, cdist(track_features, det_features, metric)\n    )  # Nomalized features\n    return cost_matrix\n\n\ndef fuse_motion(kf, cost_matrix, tracks, detections, only_position=False, lambda_=0.98):\n    if cost_matrix.size == 0:\n        return cost_matrix\n    gating_dim = 2 if only_position else 4\n    gating_threshold = chi2inv95[gating_dim]\n    measurements = np.asarray([det.to_xyah() for det in detections])\n    for row, track in enumerate(tracks):\n        gating_distance = kf.gating_distance(\n            track.mean, track.covariance, measurements, only_position, metric=\"maha\"\n        )\n        cost_matrix[row, gating_distance > gating_threshold] = np.inf\n        cost_matrix[row] = lambda_ * cost_matrix[row] + (1 - lambda_) * gating_distance\n    return cost_matrix\n\n\ndef fuse_iou(cost_matrix, tracks, detections):\n    if cost_matrix.size == 0:\n        return cost_matrix\n    reid_sim = 1 - cost_matrix\n    iou_dist = iou_distance(tracks, detections)\n    iou_sim = 1 - iou_dist\n    fuse_sim = reid_sim * (1 + iou_sim) / 2\n    det_confs = np.array([det.conf for det in detections])\n    det_confs = np.expand_dims(det_confs, axis=0).repeat(cost_matrix.shape[0], axis=0)\n    # fuse_sim = fuse_sim * (1 + det_confs) / 2\n    fuse_cost = 1 - fuse_sim\n    return fuse_cost\n\n\ndef fuse_score(cost_matrix, detections):\n    if cost_matrix.size == 0:\n        return cost_matrix\n    iou_sim = 1 - cost_matrix\n    det_confs = np.array([det.conf for det in detections])\n    det_confs = np.expand_dims(det_confs, axis=0).repeat(cost_matrix.shape[0], axis=0)\n    fuse_sim = iou_sim * det_confs\n    fuse_cost = 1 - fuse_sim\n    return fuse_cost\n"
  },
  {
    "path": "boxmot/utils/misc.py",
    "content": "import sys\nimport threading\nfrom pathlib import Path\n\nimport click\n\nfrom boxmot.utils import WEIGHTS, logger as LOGGER\n\n\ndef parse_imgsz(ctx, param, value):\n    \"\"\"\n    Parse the imgsz argument.\n    Can be an integer for square images or a tuple (height, width) for specific dimensions.\n    \"\"\"\n    if value is None:\n        return None\n    if isinstance(value, int):\n        return value\n    if isinstance(value, (tuple, list)):\n        if len(value) == 1:\n            return int(value[0])\n        elif len(value) == 2:\n            return (int(value[0]), int(value[1]))\n        else:\n             raise click.BadParameter(f\"Invalid --imgsz: {value}\")\n\n    # Parse string\n    s = value.replace(',', ' ')\n    parts = s.split()\n    try:\n        if len(parts) == 1:\n            return int(parts[0])\n        elif len(parts) == 2:\n            return (int(parts[0]), int(parts[1]))\n    except ValueError:\n        pass\n    \n    raise click.BadParameter(f\"Invalid --imgsz: {value}\")\n\n\ndef resolve_model_path(model_path, default_dir: Path = WEIGHTS) -> Path:\n    \"\"\"\n    Preserve explicit model paths and fall back to the weights directory for bare names.\n\n    Examples:\n    - ``osnet_x0_25_msmt17.pt`` -> ``models/osnet_x0_25_msmt17.pt``\n    - ``models/foo/bar.tflite`` -> ``models/foo/bar.tflite``\n    - ``/abs/path/model.onnx`` -> ``/abs/path/model.onnx``\n    \"\"\"\n    path = Path(model_path)\n    if path.is_absolute() or path.exists() or path.parent != Path(\".\"):\n        return path\n    return default_dir / path.name\n\n\n\ndef increment_path(path, exist_ok=False, sep=\"\", mkdir=False):\n    \"\"\"\n    Generates an incremented file or directory path if it already exists, with an option to create the directory.\n\n    Args:\n        path (str or Path): Initial file or directory path.\n        exist_ok (bool): If True, returns the original path even if it exists.\n        sep (str): Separator to use between path stem and increment.\n        mkdir (bool): If True, creates the directory if it doesn’t exist.\n\n    Returns:\n        Path: Incremented path, or original if exist_ok is True.\n\n    Example:\n        runs/exp --> runs/exp2, runs/exp3, etc.\n    \"\"\"\n    path = Path(path)  # ensures OS compatibility\n    if path.exists() and not exist_ok:\n        base, suffix = (path.with_suffix(\"\"), path.suffix) if path.is_file() else (path, \"\")\n        \n        # Increment path until a non-existing one is found\n        for n in range(2, 9999):\n            new_path = f\"{base}{sep}{n}{suffix}\"\n            if not Path(new_path).exists():\n                path = Path(new_path)\n                break\n\n    if mkdir:\n        path.mkdir(parents=True, exist_ok=True)  # creates the directory if it doesn’t exist\n\n    return path\n\n\ndef prompt_overwrite(path_type: str, path: Path, ci: bool = True) -> bool:\n    \"\"\"\n    Prompts the user to confirm overwriting an existing file, with a timeout.\n    In CI mode (or if stdin isn’t interactive), always returns False.\n\n    Args:\n        path_type (str): Type of the path (e.g., 'Detections and Embeddings', 'MOT Result').\n        path (Path): The path to check.\n        ci (bool): If True, automatically reuse existing file without prompting (for CI environments).\n\n    Returns:\n        bool: True if user confirms to overwrite, False otherwise.\n    \"\"\"\n    # auto-skip in CI or when there's no interactive stdin\n    if ci or not sys.stdin.isatty():\n        LOGGER.debug(f\"{path_type} {path} already exists. Use existing due to no UI mode.\")\n        return False\n\n    def input_with_timeout(prompt: str, timeout: float = 3.0) -> bool:\n        print(prompt, end='', flush=True)\n        result = []\n        got_input = threading.Event()\n\n        def _read():\n            resp = sys.stdin.readline().strip().lower()\n            result.append(resp)\n            got_input.set()\n\n        t = threading.Thread(target=_read)\n        t.daemon = True\n        t.start()\n        t.join(timeout)\n\n        if got_input.is_set():\n            return result[0] in ('y', 'yes')\n        else:\n            print(\"\\nNo response, not proceeding with overwrite...\")\n            return False\n"
  },
  {
    "path": "boxmot/utils/mot_utils.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport re\nfrom pathlib import Path\nfrom typing import Tuple, Union\n\nimport numpy as np\nimport pandas as pd\nimport torch\nfrom ultralytics.engine.results import Results\nfrom ultralytics.utils import ops\n\nfrom boxmot.utils import logger as LOGGER\n\n\ndef split_dataset(src_fldr: Path, percent_to_delete: float = 0.5) -> Tuple[Path, str]:\n    \"\"\"\n    Copies the dataset to a new location and removes a specified percentage of images and annotations,\n    adjusting the frame index to start at 1. Works for MOT17, MOT20, etc.\n\n    Args:\n        src_fldr (Path): Source folder (e.g. /…/MOT20/train or /…/MOT20/test)\n        percent_to_delete (float): Fraction of the frames to drop (0.5 → drop 50%)\n\n    Returns:\n        dst_fldr (Path): The root of the new, smaller split (e.g. …/MOT20-50/train)\n        new_benchmark_name (str): e.g. \"MOT20-50\"\n    \"\"\"\n    src_fldr = Path(src_fldr)\n\n    # --- detect the \"MOTxx\" part in the path ---\n    m = re.search(r\"(MOT\\d+)\", str(src_fldr))\n    if not m:\n        raise ValueError(f\"Could not find MOT benchmark in path: {src_fldr}\")\n    benchmark = m.group(1)\n\n    # build the new benchmark name\n    new_benchmark_name = f\"{benchmark}-ablation\"\n    dst_fldr = Path(str(src_fldr).replace(benchmark, new_benchmark_name))\n\n    # copy entire folder tree if not already done\n    if not dst_fldr.exists():\n        for item in src_fldr.rglob(\"*\"):\n            target = dst_fldr / item.relative_to(src_fldr)\n            if item.is_dir():\n                target.mkdir(parents=True, exist_ok=True)\n            else:\n                target.write_bytes(item.read_bytes())\n\n    # iterate every sequence under dst_fldr\n    for seq_path in dst_fldr.iterdir():\n        if not seq_path.is_dir():\n            continue\n\n        gt_path = seq_path / \"gt\" / \"gt.txt\"\n        if not gt_path.exists():\n            LOGGER.warning(f\"Skipping `{seq_path}` – no gt.txt found\")\n            continue\n\n        # load and compute split point\n        df = pd.read_csv(gt_path, header=None)\n        max_frame = int(df[0].max())\n        split_frame = int(max_frame * (1 - percent_to_delete))\n\n        if split_frame >= max_frame:\n            LOGGER.info(f\"`{seq_path}` already ≤ split size, skipping.\")\n            continue\n\n        LOGGER.info(f\"{seq_path.name}: keeping frames {split_frame+1}-{max_frame}\")\n\n        # filter and re‐index gt\n        df = df[df[0] > split_frame].copy()\n        df[0] = df[0] - split_frame\n        df.to_csv(gt_path, header=False, index=False)\n\n        # delete early images\n        img_folder = seq_path / \"img1\"\n        for img in img_folder.glob(\"*.jpg\"):\n            if int(img.stem) <= split_frame:\n                img.unlink()\n\n        # rename rest to 000001…000xxx\n        remaining = sorted(img_folder.glob(\"*.jpg\"))\n        for idx, img in enumerate(remaining, start=1):\n            img.rename(img_folder / f\"{idx:06}.jpg\")\n\n        LOGGER.info(f\"{seq_path.name}: now {len(remaining)} images\")\n\n    return dst_fldr, new_benchmark_name\n\n\ndef convert_to_mot_format(\n    results: Union[Results, np.ndarray], frame_idx: int\n) -> np.ndarray:\n    \"\"\"\n    Converts tracking results for a single frame into MOT challenge format.\n\n    This function supports inputs as either a custom object with a 'boxes' attribute or a numpy array.\n    For custom object inputs, 'boxes' should contain 'id', 'xyxy', 'conf', and 'cls' sub-attributes.\n    For numpy array inputs, the expected format per row is: (xmin, ymin, xmax, ymax, id, conf, cls).\n\n    Parameters:\n    - results (Union[Results, np.ndarray]): Tracking results for the current frame.\n    - frame_idx (int): The zero-based index of the frame being processed.\n\n    Returns:\n    - np.ndarray: An array containing the MOT formatted results for the frame.\n    \"\"\"\n\n    # Check if results are not empty\n    if results.size != 0:\n        if isinstance(results, np.ndarray):\n            # Convert numpy array results to MOT format\n            tlwh = ops.xyxy2ltwh(results[:, 0:4])\n            frame_idx_column = np.full((results.shape[0], 1), frame_idx, dtype=np.int32)\n            mot_results = np.column_stack((\n                frame_idx_column, # frame index\n                results[:, 4].astype(np.int32),  # track id\n                tlwh.round().astype(np.int32),  # top,left,width,height\n                np.ones((results.shape[0], 1), dtype=np.int32),  # \"not ignored\"\n                results[:, 6].astype(np.int32) + 1,  # class\n                results[:, 5],  # confidence (float)\n            ))\n            return mot_results\n        else:\n            # Convert ultralytics results to MOT format\n            num_detections = len(results.boxes)\n            frame_indices = torch.full((num_detections, 1), frame_idx + 1, dtype=torch.int32)\n            not_ignored = torch.ones((num_detections, 1), dtype=torch.int32)\n\n            mot_results = torch.cat([\n                frame_indices, # frame index\n                results.boxes.id.unsqueeze(1).astype(np.int32), # track id\n                ops.xyxy2ltwh(results.boxes.xyxy).astype(np.int32),  ## top,left,width,height\n                not_ignored, # \"not ignored\"\n                results.boxes.cls.unsqueeze(1).astype(np.int32) + 1, # class\n                results.boxes.conf.unsqueeze(1).astype(np.float32), # confidence (float)\n            ], dim=1)\n\n            return mot_results.numpy()\n\n\ndef write_mot_results(txt_path: Path, mot_results: np.ndarray) -> None:\n    \"\"\"\n    Writes the MOT challenge formatted results to a text file.\n\n    Parameters:\n    - txt_path (Path): The path to the text file where results are saved.\n    - mot_results (np.ndarray): An array containing the MOT formatted results.\n\n    Note: The text file will be created if it does not exist, and the directory\n    path to the file will be created as well if necessary.\n    \"\"\"\n    if mot_results is not None:\n        # Ensure the parent directory of the txt_path exists\n        txt_path.parent.mkdir(parents=True, exist_ok=True)\n\n        # Ensure the file exists before opening\n        txt_path.touch(exist_ok=True)\n\n        if mot_results.size != 0:\n            # Open the file in append mode and save the MOT results\n            with open(str(txt_path), \"a\") as file:\n                np.savetxt(file, mot_results, fmt=\"%d,%d,%d,%d,%d,%d,%d,%d,%.6f\")\n\n\n# new_folder, name = split_dataset(Path(\"./boxmot/engine/trackeval/data/MOT20/train\"), percent_to_delete=0.5)\n# print(new_folder, name)"
  },
  {
    "path": "boxmot/utils/ops.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom typing import Tuple, Union\n\nimport cv2\nimport numpy as np\nimport torch\n\n\ndef xyxy2xywh(x):\n    \"\"\"\n    Convert bounding box coordinates from (x1, y1, x2, y2) format to (x, y, width, height) format.\n\n    Args:\n        x (np.ndarray) or (torch.Tensor): The input bounding box coordinates in (x1, y1, x2, y2) format.\n    Returns:\n       y (np.ndarray) or (torch.Tensor): The bounding box coordinates in (x, y, width, height) format.\n    \"\"\"\n    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)\n    y[..., 0] = (x[..., 0] + x[..., 2]) / 2  # x center\n    y[..., 1] = (x[..., 1] + x[..., 3]) / 2  # y center\n    y[..., 2] = x[..., 2] - x[..., 0]  # width\n    y[..., 3] = x[..., 3] - x[..., 1]  # height\n    return y\n\n\ndef xywh2xyxy(x):\n    \"\"\"\n    Convert bounding box coordinates from (x_c, y_c, width, height) format to\n    (x1, y1, x2, y2) format where (x1, y1) is the top-left corner and (x2, y2)\n    is the bottom-right corner.\n\n    Args:\n        x (np.ndarray) or (torch.Tensor): The input bounding box coordinates in (x, y, width, height) format.\n    Returns:\n        y (np.ndarray) or (torch.Tensor): The bounding box coordinates in (x1, y1, x2, y2) format.\n    \"\"\"\n    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)\n    y[..., 0] = x[..., 0] - x[..., 2] / 2  # top left x\n    y[..., 1] = x[..., 1] - x[..., 3] / 2  # top left y\n    y[..., 2] = x[..., 0] + x[..., 2] / 2  # bottom right x\n    y[..., 3] = x[..., 1] + x[..., 3] / 2  # bottom right y\n    return y\n\n\ndef xywh2tlwh(x):\n    \"\"\"\n    Convert bounding box coordinates from (x c, y c, w, h) format to (t, l, w, h) format where (t, l) is the\n    top-left corner and (w, h) is width and height.\n\n    Args:\n        x (np.ndarray) or (torch.Tensor): The input bounding box coordinates in (x, y, width, height) format.\n    Returns:\n        y (np.ndarray) or (torch.Tensor): The bounding box coordinates in (x1, y1, x2, y2) format.\n    \"\"\"\n    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)\n    y[..., 0] = x[..., 0] - x[..., 2] / 2.0  # xc --> t\n    y[..., 1] = x[..., 1] - x[..., 3] / 2.0  # yc --> l\n    y[..., 2] = x[..., 2]                    # width\n    y[..., 3] = x[..., 3]                    # height\n    return y\n\n\ndef tlwh2xyxy(x):\n    \"\"\"\n    Convert bounding box coordinates from (t, l ,w ,h) format to (t, l, w, h) format where (t, l) is the\n    top-left corner and (w, h) is width and height.\n    \"\"\"\n    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)\n    y[..., 0] = x[..., 0]\n    y[..., 1] = x[..., 1]\n    y[..., 2] = x[..., 0] + x[..., 2]\n    y[..., 3] = x[..., 1] + x[..., 3]\n    return y\n\n\ndef xyxy2tlwh(x):\n    \"\"\"\n    Convert bounding box coordinates from (t, l ,w ,h) format to (t, l, w, h) format where (t, l) is the\n    top-left corner and (w, h) is width and height.\n    \"\"\"\n    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)\n    y[..., 0] = x[..., 0]\n    y[..., 1] = x[..., 1]\n    y[..., 2] = x[..., 2] - x[..., 0]\n    y[..., 3] = x[..., 3] - x[..., 1]\n    return y\n\n\ndef tlwh2xyah(x):\n    \"\"\"\n    Convert bounding box coordinates from (t, l ,w ,h)\n    to (center x, center y, aspect ratio, height)`, where the aspect ratio is `width / height`.\n    \"\"\"\n    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)\n    y[..., 0] = x[..., 0] + (x[..., 2] / 2)\n    y[..., 1] = x[..., 1] + (x[..., 3] / 2)\n    y[..., 2] = x[..., 2] / x[..., 3]\n    y[..., 3] = x[..., 3]\n    return y\n\n\ndef xyxy2xysr(x):\n    \"\"\"\n    Converts bounding box coordinates from (x1, y1, x2, y2) format to (x, y, s, r) format.\n\n    Args:\n        bbox (np.ndarray) or (torch.Tensor): The input bounding box coordinates in (x1, y1, x2, y2) format.\n    Returns:\n        z (np.ndarray) or (torch.Tensor): The bounding box coordinates in (x, y, s, r) format, where\n                                          x, y is the center of the box,\n                                          s is the scale (area), and\n                                          r is the aspect ratio.\n    \"\"\"\n    x = x[0:4]\n    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)\n    w = y[..., 2] - y[..., 0]        # width\n    h = y[..., 3] - y[..., 1]        # height\n    y[..., 0] = y[..., 0] + w / 2.0  # x center\n    y[..., 1] = y[..., 1] + h / 2.0  # y center\n    y[..., 2] = w * h                # scale (area)\n    y[..., 3] = w / (h + 1e-6)       # aspect ratio\n    y = y.reshape((4, 1))\n    return y\n\n\ndef letterbox(\n    img: np.ndarray,\n    new_shape: Union[int, Tuple[int, int]] = (640, 640),\n    color: Tuple[int, int, int] = (114, 114, 114),\n    auto: bool = True,\n    scaleFill: bool = False,\n    scaleup: bool = True,\n) -> Tuple[np.ndarray, Tuple[float, float], Tuple[float, float]]:\n    \"\"\"\n    Resizes an image to a new shape while maintaining aspect ratio, padding with color if needed.\n\n    Args:\n        img (np.ndarray): The original image in BGR format.\n        new_shape (Union[int, Tuple[int, int]], optional): Desired size as an integer (e.g., 640)\n            or tuple (width, height). Default is (640, 640).\n        color (Tuple[int, int, int], optional): Padding color in BGR format. Default is (114, 114, 114).\n        auto (bool, optional): If True, adjusts padding to be a multiple of 32. Default is True.\n        scaleFill (bool, optional): If True, stretches the image to fill the new shape. Default is False.\n        scaleup (bool, optional): If True, allows scaling up; otherwise, only scales down. Default is True.\n\n    Returns:\n        Tuple[np.ndarray, Tuple[float, float], Tuple[float, float]]:\n            - Resized and padded image as np.ndarray.\n            - Scaling ratio used for width and height as (width_ratio, height_ratio).\n            - Padding applied to width and height as (width_padding, height_padding).\n    \"\"\"\n    shape = img.shape[:2]  # current shape [height, width]\n\n    # Ensure new_shape is a tuple (width, height)\n    if isinstance(new_shape, int):\n        new_shape = (new_shape, new_shape)\n\n    # Calculate scale ratio\n    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])\n    if not scaleup:\n        r = min(r, 1.0)  # only scale down\n\n    # Calculate new dimensions and padding\n    ratio = (r, r)\n    new_unpad = (int(round(shape[1] * r)), int(round(shape[0] * r)))\n    dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]\n\n    if auto:  # minimum rectangle\n        dw, dh = np.mod(dw, 32), np.mod(dh, 32)\n    elif scaleFill:  # stretch to fill\n        dw, dh = 0.0, 0.0\n        new_unpad = new_shape\n        ratio = (new_shape[1] / shape[1], new_shape[0] / shape[0])\n\n    # Divide padding by 2 for even distribution\n    dw /= 2\n    dh /= 2\n\n    # Resize image if necessary\n    if shape[::-1] != new_unpad:\n        img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR)\n\n    # Add border to the image\n    top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))\n    left, right = int(round(dw - 0.1)), int(round(dw + 0.1))\n    img = cv2.copyMakeBorder(\n        img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color\n    )\n\n    return img, ratio, (dw, dh)\n"
  },
  {
    "path": "boxmot/utils/plots.py",
    "content": "import os\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n\nclass MetricsPlotter:\n    \"\"\"\n    A class for plotting tracking metrics in both radar and FPS-vs-metric line charts.\n    Instead of displaying the plots, this version saves them to disk in a specified root folder.\n\n    Attributes\n    ----------\n    root_folder : str\n        The directory where both plots will be saved.\n\n    Methods\n    -------\n    plot_radar_chart(data, labels, title='Radar Chart',\n                     figsize=(6, 6), ylim=(0, 100.0),\n                     yticks=None, ytick_labels=None,\n                     filename='radar_chart.png')\n        Plots a radar chart for multiple methods over a fixed set of metrics, then saves it\n        into the root folder under `filename`.\n\n    plot_fps_metrics(fps, data, title=None, figsize=(10, 6),\n                     filename='fps_metrics.png')\n        Plots metrics (e.g., HOTA, MOTA, IDF1) versus FPS as line curves, then saves it\n        into the root folder under `filename`.\n    \"\"\"\n\n    def __init__(self, root_folder: str = '.'):\n        \"\"\"\n        Initialize the MetricsPlotter with a root folder for saving plots.\n\n        Parameters\n        ----------\n        root_folder : str, optional\n            The directory in which to save both the radar chart and the FPS-vs-metrics plot.\n            Default is the current working directory ('.').\n        \"\"\"\n        self.root_folder = root_folder\n        # Create the directory if it does not exist\n        os.makedirs(self.root_folder, exist_ok=True)\n\n    def plot_radar_chart(self,\n                         data: dict,\n                         labels: list,\n                         title: str = 'Radar Chart',\n                         figsize: tuple = (6, 6),\n                         ylim: tuple = (0, 100.0),\n                         yticks: list = None,\n                         ytick_labels: list = None,\n                         filename: str = 'radar_chart.png'):\n        \"\"\"\n        Plots a radar chart for multiple methods over a fixed set of metrics, then saves it.\n\n        Parameters\n        ----------\n        data : dict\n            Keys are method names (strings), values are lists of numeric scores\n            (one score per label). Each list must have the same length as `labels`.\n        labels : list of str\n            Names of the metrics (e.g. ['HOTA', 'AssA', 'AssR', ...]).\n        title : str, optional\n            Title of the plot (default: 'Radar Chart').\n        figsize : tuple, optional\n            Size of the figure in inches (default: (6, 6)).\n        ylim : tuple, optional\n            The (min, max) range for the radial axis (default: (0, 100.0)).\n        yticks : list of float, optional\n            Values at which to draw horizontal grid lines (default:\n            [0.2 * ylim[1], 0.4 * ylim[1], 0.6 * ylim[1], 0.8 * ylim[1], ylim[1]]).\n        ytick_labels : list of str, optional\n            String labels for each entry in `yticks` (default: same as numeric ticks).\n        filename : str, optional\n            Name of the file (with extension) under which to save the radar chart.\n            It will be placed inside `root_folder`. Default: 'radar_chart.png'.\n        \"\"\"\n        num_vars = len(labels)\n        # Compute equally spaced angles around the circle, then close the loop by appending the first angle again\n        angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()\n        angles += angles[:1]\n\n        # Prepare figure and polar axes\n        fig, ax = plt.subplots(figsize=figsize, subplot_kw=dict(polar=True))\n        ax.set_ylim(*ylim)\n\n        # Default yticks if none provided\n        if yticks is None:\n            yticks = [ylim[1] * (0.2 * i) for i in range(1, 6)]\n        if ytick_labels is None:\n            ytick_labels = [str(t) for t in yticks]\n\n        # Plot each method\n        for method, values in data.items():\n            if len(values) != num_vars:\n                raise ValueError(\n                    f\"Length of values for '{method}' ({len(values)}) \"\n                    f\"does not match number of labels ({num_vars}).\"\n                )\n\n            # Close the loop by appending the first value at the end:\n            vals = values + values[:1]\n            ax.plot(angles, vals, label=method, linewidth=2)\n            ax.fill(angles, vals, alpha=0.1)\n\n        # Set the category labels at the proper angles\n        ax.set_xticks(angles[:-1])\n        ax.set_xticklabels(labels)\n\n        # Draw radial grid lines and set tick labels\n        ax.set_yticks(yticks)\n        ax.set_yticklabels(ytick_labels)\n        ax.yaxis.grid(True)\n\n        # Place legend below the plot\n        plt.legend(loc='lower center', bbox_to_anchor=(0.5, -0.25), ncol=2)\n        plt.title(title, y=1.08)\n\n        plt.tight_layout()\n        # Determine full save path and save\n        save_path = os.path.join(self.root_folder, filename)\n        plt.savefig(save_path, dpi=300, bbox_inches='tight')\n        plt.close(fig)  # Close the figure to free memory\n\n    def plot_fps_metrics(self,\n                         fps: list,\n                         data: dict,\n                         title: str = None,\n                         figsize: tuple = (10, 6),\n                         filename: str = 'fps_metrics.png'):\n        \"\"\"\n        Plots tracking metrics (e.g., HOTA, MOTA, IDF1) versus FPS as line curves, then saves it.\n\n        Parameters\n        ----------\n        fps : list or array-like\n            A sequence of FPS values (e.g., [2, 4, 8, 16, 24, 32]).\n        data : dict\n            Keys are metric names (strings), values are lists of metric scores\n            corresponding to each FPS in `fps`. All lists must be the same length as `fps`.\n            Example keys: ['BoostTrack HOTA', 'BoostTrack MOTA', 'BoostTrack IDF1'].\n        title : str, optional\n            Title of the plot. If None, defaults to\n            'Metrics vs FPS' or includes metric names automatically.\n        figsize : tuple, optional\n            Size of the figure in inches (default: (10, 6)).\n        filename : str, optional\n            Name of the file (with extension) under which to save the FPS-vs-metrics plot.\n            It will be placed inside `root_folder`. Default: 'fps_metrics.png'.\n        \"\"\"\n        # Validate input lengths\n        for metric, values in data.items():\n            if len(values) != len(fps):\n                raise ValueError(\n                    f\"Length of values for '{metric}' ({len(values)}) does not match length of fps ({len(fps)}).\"\n                )\n\n        # If no title provided, create a generic one\n        if title is None:\n            metric_names = \", \".join(data.keys())\n            title = f\"Metrics vs FPS ({metric_names})\"\n\n        fig, ax = plt.subplots(figsize=figsize)\n        for metric, values in data.items():\n            ax.plot(fps, values, marker='o', label=metric, linewidth=2)\n\n        ax.set_xlabel(\"FPS\")\n        ax.set_ylabel(\"Metric Value\")\n        ax.set_title(title)\n        ax.grid(True, linestyle='--', alpha=0.5)\n        ax.legend(loc='lower right')\n\n        plt.tight_layout()\n        # Determine full save path and save\n        save_path = os.path.join(self.root_folder, filename)\n        plt.savefig(save_path, dpi=300, bbox_inches='tight')\n        plt.close(fig)  # Close the figure to free memory\n\n\n# Example usage:\nif __name__ == \"__main__\":\n    # Create a MetricsPlotter that saves everything under \"plots/\" directory\n    plotter = MetricsPlotter(root_folder='./')\n\n    # 1) Radar chart example (will be saved as 'plots/radar_chart.png' by default)\n    labels = ['HOTA', 'AssA', 'AssR', 'MOTA', 'IDF1']\n    radar_data = {\n        \"BoostTrack\": [69.25, 73.859, 77.49, 75.908, 83.199],\n        \"ByteTrack\":  [67.68, 69.145, 75.031, 78.039, 79.157],\n        \"BoTSORT\":    [68.888, 71.15, 76.626, 78.232, 81.331],\n        \"OCSORT\":     [66.441, 69.111, 73.787, 74.548, 77.899],\n        \"StrongSORT\": [68.05, 71.092, 74.983, 76.185, 80.763],\n    }\n    plotter.plot_radar_chart(\n        radar_data,\n        labels,\n        title='Radar Chart of Method Combinations on DanceTrack',\n        ylim=(65, 85),\n        yticks=[65, 70, 75, 80, 85],\n        ytick_labels=['65', '70', '75', '80', '85']\n    )\n\n    # 2) FPS vs Metrics example (will be saved as 'plots/fps_metrics.png' by default)\n    fps = [2, 4, 8, 16, 24, 32]\n    fps_data = {\n        \"BoostTrack HOTA\": [56.7, 62.7, 66.5, 68.4, 68.9, 68.8],\n        \"BoostTrack MOTA\": [54.1, 65.9, 73.0, 75.2, 75.7, 75.9],\n        \"BoostTrack IDF1\": [69.8, 76.9, 80.1, 81.6, 82.1, 82.2],\n    }\n    plotter.plot_fps_metrics(\n        fps,\n        fps_data,\n        title='YOLOX-X + BoostTrack MOT17 metrics vs FPS',\n        figsize=(12, 6)\n    )\n"
  },
  {
    "path": "boxmot/utils/run_mot_challenge.py",
    "content": "\"\"\" run_mot_challenge.py\n\nRun example:\nrun_mot_challenge.py --USE_PARALLEL False --METRICS Hota --TRACKERS_TO_EVAL Lif_T\n\nCommand Line Arguments: Defaults, # Comments\n    Eval arguments:\n        'USE_PARALLEL': False,\n        'NUM_PARALLEL_CORES': 8,\n        'BREAK_ON_ERROR': True,\n        'PRINT_RESULTS': True,\n        'PRINT_ONLY_COMBINED': False,\n        'PRINT_CONFIG': True,\n        'TIME_PROGRESS': True,\n        'OUTPUT_SUMMARY': True,\n        'OUTPUT_DETAILED': True,\n        'PLOT_CURVES': True,\n    Dataset arguments:\n        'GT_FOLDER': os.path.join(code_path, 'data/gt/mot_challenge/'),  # Location of GT data\n        'TRACKERS_FOLDER': os.path.join(code_path, 'data/trackers/mot_challenge/'),  # Trackers location\n        'OUTPUT_FOLDER': None,  # Where to save eval results (if None, same as TRACKERS_FOLDER)\n        'TRACKERS_TO_EVAL': None,  # Filenames of trackers to eval (if None, all in folder)\n        'CLASSES_TO_EVAL': ['pedestrian'],  # Valid: ['pedestrian']\n        'BENCHMARK': 'MOT17',  # Valid: 'MOT17', 'MOT16', 'MOT20', 'MOT15'\n        'SPLIT_TO_EVAL': 'train',  # Valid: 'train', 'test', 'all'\n        'INPUT_AS_ZIP': False,  # Whether tracker input files are zipped\n        'PRINT_CONFIG': True,  # Whether to print current config\n        'DO_PREPROC': True,  # Whether to perform preprocessing (never done for 2D_MOT_2015)\n        'TRACKER_SUB_FOLDER': 'data',  # Tracker files are in TRACKER_FOLDER/tracker_name/TRACKER_SUB_FOLDER\n        'OUTPUT_SUB_FOLDER': '',  # Output files are saved in OUTPUT_FOLDER/tracker_name/OUTPUT_SUB_FOLDER\n    Metric arguments:\n        'METRICS': ['HOTA', 'CLEAR', 'Identity', 'VACE']\n\"\"\"\n\nimport sys\nimport os\nimport argparse\nfrom multiprocessing import freeze_support\nfrom pathlib import Path\n\n# Setup paths\ncurrent_dir = Path(__file__).resolve().parent\nboxmot_dir = current_dir.parent\ntrackeval_dir = boxmot_dir / \"engine\" / \"trackeval\"\n\n# Add trackeval to sys.path\nsys.path.insert(0, str(trackeval_dir))\n# Add current dir to sys.path to find custom_mot_challenge_2d_box.py\nsys.path.insert(0, str(current_dir))\n\nimport trackeval  # noqa: E402\nfrom custom_mot_challenge_2d_box import CustomMotChallenge2DBox\n\nif __name__ == '__main__':\n    freeze_support()\n\n    # Command line interface:\n    default_eval_config = trackeval.Evaluator.get_default_eval_config()\n    default_eval_config['DISPLAY_LESS_PROGRESS'] = False\n    \n    # Use CustomMotChallenge2DBox for default config\n    default_dataset_config = CustomMotChallenge2DBox.get_default_dataset_config()\n    \n    default_metrics_config = {'METRICS': ['HOTA', 'CLEAR', 'Identity'], 'THRESHOLD': 0.5}\n    config = {**default_eval_config, **default_dataset_config, **default_metrics_config}  # Merge default configs\n    parser = argparse.ArgumentParser()\n    for setting in config.keys():\n        if setting == 'DISTRACTOR_CLASS_IDS':\n            parser.add_argument(\"--\" + setting, nargs='*')  # allow empty list\n        elif type(config[setting]) == list or type(config[setting]) == type(None):\n            parser.add_argument(\"--\" + setting, nargs='+')\n        else:\n            parser.add_argument(\"--\" + setting)\n    args = parser.parse_args().__dict__\n    for setting in args.keys():\n        if args[setting] is not None:\n            if type(config[setting]) == type(True):\n                if args[setting] == 'True':\n                    x = True\n                elif args[setting] == 'False':\n                    x = False\n                else:\n                    raise Exception('Command line parameter ' + setting + 'must be True or False')\n            elif type(config[setting]) == type(1):\n                x = int(args[setting])\n            elif type(args[setting]) == type(None):\n                x = None\n            elif setting == 'SEQ_INFO':\n                seq_info_dict = {}\n                for entry in args[setting]:\n                    if ':' in entry:\n                        name, length = entry.split(':', 1)\n                        seq_info_dict[name] = int(length) if length else None\n                    elif '=' in entry:\n                        name, length = entry.split('=', 1)\n                        seq_info_dict[name] = int(length) if length else None\n                    else:\n                        seq_info_dict[entry] = None\n                x = seq_info_dict\n            elif setting in {'CLASS_IDS', 'DISTRACTOR_CLASS_IDS'}:\n                x = [int(v) for v in args[setting]] if args[setting] is not None else []\n            else:\n                x = args[setting]\n            config[setting] = x\n    eval_config = {k: v for k, v in config.items() if k in default_eval_config.keys()}\n    dataset_config = {k: v for k, v in config.items() if k in default_dataset_config.keys()}\n    metrics_config = {k: v for k, v in config.items() if k in default_metrics_config.keys()}\n\n    # Run code\n    evaluator = trackeval.Evaluator(eval_config)\n    # Use CustomMotChallenge2DBox\n    dataset_list = [CustomMotChallenge2DBox(dataset_config)]\n    metrics_list = []\n    for metric in [trackeval.metrics.HOTA, trackeval.metrics.CLEAR, trackeval.metrics.Identity, trackeval.metrics.VACE]:\n        if metric.get_name() in metrics_config['METRICS']:\n            metrics_list.append(metric(metrics_config))\n    if len(metrics_list) == 0:\n        raise Exception('No metrics selected for evaluation')\n    evaluator.evaluate(dataset_list, metrics_list)\n"
  },
  {
    "path": "boxmot/utils/timing.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport time\n\nfrom boxmot.utils import logger as LOGGER\n\n\nclass TimingStats:\n    \"\"\"Track timing statistics for detection, ReID, and tracking phases.\"\"\"\n    \n    def __init__(self):\n        self.reset()\n    \n    def reset(self):\n        self.totals = {\n            'preprocess': 0.0,\n            'inference': 0.0,\n            'postprocess': 0.0,\n            'reid': 0.0,\n            'track': 0.0,\n            'plot': 0.0,\n            'total': 0.0,\n        }\n        self.frames = 0\n        self._frame_start = None\n        self._track_start = None\n        self._plot_start = None\n    \n    def start_frame(self):\n        \"\"\"Mark the start of frame processing.\"\"\"\n        self._frame_start = time.perf_counter()\n    \n    def start_tracking(self):\n        \"\"\"Mark the start of tracking phase.\"\"\"\n        self._track_start = time.perf_counter()\n    \n    def end_tracking(self):\n        \"\"\"Mark the end of tracking phase and record time.\"\"\"\n        if self._track_start is not None:\n            elapsed = (time.perf_counter() - self._track_start) * 1000\n            self.totals['track'] += elapsed\n            self._last_track_time = elapsed\n            self._track_start = None\n    \n    def get_last_track_time(self):\n        \"\"\"Get the last tracking time in ms.\"\"\"\n        return getattr(self, '_last_track_time', 0)\n    \n    def get_last_reid_time(self):\n        \"\"\"Get the last ReID time in ms (accumulated during last track update).\"\"\"\n        return getattr(self, '_last_reid_time', 0)\n    \n    def reset_frame_reid(self):\n        \"\"\"Reset per-frame ReID accumulator (call before each track update).\"\"\"\n        self._last_reid_time = 0\n    \n    def start_plot(self):\n        \"\"\"Mark the start of plotting phase.\"\"\"\n        self._plot_start = time.perf_counter()\n    \n    def end_plot(self):\n        \"\"\"Mark the end of plotting phase and record time.\"\"\"\n        if self._plot_start is not None:\n            self.totals['plot'] += (time.perf_counter() - self._plot_start) * 1000\n            self._plot_start = None\n    \n    def add_reid_time(self, time_ms):\n        \"\"\"Add ReID time in milliseconds.\"\"\"\n        self.totals['reid'] += time_ms\n        # Also accumulate for per-frame tracking\n        self._last_reid_time = getattr(self, '_last_reid_time', 0) + time_ms\n    \n    def record_ultralytics_times(self, predictor):\n        \"\"\"Record timing from Ultralytics results.\"\"\"\n        # Ultralytics stores speed info in results[].speed dict\n        # speed contains: preprocess, inference, postprocess times in ms\n        if hasattr(predictor, 'results') and predictor.results:\n            for result in predictor.results:\n                if hasattr(result, 'speed') and result.speed:\n                    self.totals['preprocess'] += result.speed.get('preprocess', 0) or 0\n                    self.totals['inference'] += result.speed.get('inference', 0) or 0\n                    self.totals['postprocess'] += result.speed.get('postprocess', 0) or 0\n    \n    def end_frame(self):\n        \"\"\"Mark the end of frame processing.\"\"\"\n        if self._frame_start is not None:\n            self.totals['total'] += (time.perf_counter() - self._frame_start) * 1000\n            self.frames += 1\n            self._frame_start = None\n    \n    def print_summary(self):\n        \"\"\"Print execution time summary table with blue color palette.\"\"\"\n        # Check if we have any data to display\n        has_data = any(v > 0 for v in self.totals.values())\n        if not has_data:\n            return\n        \n        frames = self.frames if self.frames > 0 else 1  # Avoid division by zero\n        \n        # Calculate detection total\n        det_total = self.totals['preprocess'] + self.totals['inference'] + self.totals['postprocess']\n        total_time = self.totals['total']\n        plot_time = self.totals['plot']\n        reid_total = self.totals['reid']\n        track_total = self.totals['track']\n        \n        # Determine workflow mode based on what was recorded\n        # - Real-time tracking: tracking done frame-by-frame with ReID embedded (assoc = track - reid)\n        # - Batch evaluation: ReID + tracking both recorded separately (assoc = track only since ReID is standalone)\n        # \n        # In batch mode, ReID is done *before* tracking with pre-computed embeddings,\n        # so track_total is pure association time. In real-time, ReID is inside track.\n        # We can detect batch mode if frames==0 (timing was aggregated from subprocess)\n        # or by looking for a flag. For now, use heuristic: if reid_total > 0 but frames==0, batch mode.\n        \n        is_batch_mode = self.frames == 0 or (reid_total > 0 and det_total > 0)\n        \n        # In batch mode: track_total is pure association (ReID was separate)\n        # In real-time mode: association = track - reid\n        if is_batch_mode:\n            assoc_time = track_total  # Track is association-only when ReID is pre-computed\n        else:\n            assoc_time = max(0, track_total - reid_total)\n        \n        # Calculate overhead (unaccounted time) - only meaningful if total was recorded\n        accounted = det_total + reid_total + track_total + plot_time\n        \n        # If no total time recorded, estimate from components\n        if total_time == 0:\n            total_time = accounted\n        \n        # For batch mode, track time doesn't overlap with det+reid\n        overhead = max(0, total_time - accounted)\n        \n        # Helper to calculate percentage\n        def pct(value):\n            return (value / total_time * 100) if total_time > 0 else 0\n        \n        # Helper to calculate FPS from avg ms\n        def fps_from_avg(avg_ms):\n            return 1000 / avg_ms if avg_ms > 0 else 0\n        \n        # Helper for colored logging\n        def log(msg):\n            LOGGER.opt(colors=True).info(msg)\n        \n        log(\"\")\n        log(\"<blue>\" + \"=\" * 105 + \"</blue>\")\n        log(f\"<bold><cyan>{'📊 TIMING SUMMARY':^105}</cyan></bold>\")\n        log(\"<blue>\" + \"=\" * 105 + \"</blue>\")\n        log(f\"<bold>{'Component':<20}</bold> | {'Total (ms)':<12} | {'Avg (ms)':<12} | {'FPS':<10} | {'% of Total':<12}\")\n        log(\"<blue>\" + \"-\" * 105 + \"</blue>\")\n        \n        # Detection pipeline\n        for key in ['preprocess', 'inference', 'postprocess']:\n            total = self.totals[key]\n            avg = total / frames\n            fps = fps_from_avg(avg)\n            log(f\"{key.capitalize():<20} | <blue>{total:<12.1f}</blue> | <blue>{avg:<12.2f}</blue> | <blue>{fps:<10.1f}</blue> | {pct(total):<12.1f}\")\n        \n        det_avg = det_total / frames\n        det_fps = fps_from_avg(det_avg)\n        log(f\"<bold>{'Detection (total)':<20}</bold> | <cyan>{det_total:<12.1f}</cyan> | <cyan>{det_avg:<12.2f}</cyan> | <cyan>{det_fps:<10.1f}</cyan> | {pct(det_total):<12.1f}\")\n        \n        log(\"<blue>\" + \"-\" * 105 + \"</blue>\")\n        \n        # ReID / Tracking section - display depends on workflow mode\n        reid_avg = reid_total / frames if frames > 0 else 0\n        reid_fps = fps_from_avg(reid_avg)\n        log(f\"{'ReID':<20} | <blue>{reid_total:<12.1f}</blue> | <blue>{reid_avg:<12.2f}</blue> | <blue>{reid_fps:<10.1f}</blue> | {pct(reid_total):<12.1f}\")\n        \n        # Show association/track in both modes\n        if track_total > 0:\n            assoc_avg = assoc_time / frames if frames > 0 else 0\n            assoc_fps = fps_from_avg(assoc_avg)\n            log(f\"{'Association':<20} | <blue>{assoc_time:<12.1f}</blue> | <blue>{assoc_avg:<12.2f}</blue> | <blue>{assoc_fps:<10.1f}</blue> | {pct(assoc_time):<12.1f}\")\n\n            tracking_total = track_total if not is_batch_mode else (reid_total + track_total)\n            tracking_avg = tracking_total / frames if frames > 0 else 0\n            tracking_fps = fps_from_avg(tracking_avg)\n            log(\n                f\"<bold>{'Tracking (total)':<20}</bold> | <cyan>{tracking_total:<12.1f}</cyan> | \"\n                f\"<cyan>{tracking_avg:<12.2f}</cyan> | <cyan>{tracking_fps:<10.1f}</cyan> | {pct(tracking_total):<12.1f}\"\n            )\n        \n        log(\"<blue>\" + \"-\" * 105 + \"</blue>\")\n        \n        # Plotting and overhead\n        if plot_time > 0:\n            plot_avg = plot_time / frames\n            plot_fps = fps_from_avg(plot_avg)\n            log(f\"{'Plotting':<20} | <blue>{plot_time:<12.1f}</blue> | <blue>{plot_avg:<12.2f}</blue> | <blue>{plot_fps:<10.1f}</blue> | {pct(plot_time):<12.1f}\")\n        \n        if overhead > 0:\n            overhead_avg = overhead / frames\n            overhead_fps = fps_from_avg(overhead_avg)\n            log(f\"{'Other (I/O, etc)':<20} | <blue>{overhead:<12.1f}</blue> | <blue>{overhead_avg:<12.2f}</blue> | <blue>{overhead_fps:<10.1f}</blue> | {pct(overhead):<12.1f}\")\n        \n        log(\"<blue>\" + \"-\" * 105 + \"</blue>\")\n        avg_total = total_time / frames\n        total_fps = fps_from_avg(avg_total)\n        log(f\"<bold>{'Total':<20}</bold> | <cyan>{total_time:<12.1f}</cyan> | <cyan>{avg_total:<12.2f}</cyan> | <cyan>{total_fps:<10.1f}</cyan> | {100.0:<12.1f}\")\n        log(f\"<bold>{'Frames':<20}</bold> | <cyan>{frames:<12}</cyan>\")\n        \n        log(\"<blue>\" + \"=\" * 105 + \"</blue>\")\n        log(\"\")\n\n\nclass TimedReIDWrapper:\n    \"\"\"Wrapper around ReID model to track timing.\"\"\"\n    \n    def __init__(self, model, timing_stats):\n        self._model = model\n        self._timing_stats = timing_stats\n    \n    def get_features(self, *args, **kwargs):\n        \"\"\"Wrap get_features to measure timing.\"\"\"\n        t0 = time.perf_counter()\n        result = self._model.get_features(*args, **kwargs)\n        elapsed_ms = (time.perf_counter() - t0) * 1000\n        self._timing_stats.add_reid_time(elapsed_ms)\n        return result\n    \n    def __getattr__(self, name):\n        \"\"\"Forward all other attributes to the wrapped model.\"\"\"\n        return getattr(self._model, name)\n\n\ndef wrap_tracker_reid(tracker, timing_stats):\n    \"\"\"\n    Wrap a tracker's ReID model with timing instrumentation.\n    \n    Args:\n        tracker: The tracker instance.\n        timing_stats: TimingStats instance to record ReID timing.\n    \"\"\"\n    # Different trackers store ReID model in different attributes\n    reid_model = None\n    reid_attr = None\n    \n    if hasattr(tracker, 'model') and tracker.model is not None:\n        reid_model = tracker.model\n        reid_attr = 'model'\n    elif hasattr(tracker, 'reid_model') and tracker.reid_model is not None:\n        reid_model = tracker.reid_model\n        reid_attr = 'reid_model'\n    \n    if reid_model is not None and hasattr(reid_model, 'get_features'):\n        wrapped = TimedReIDWrapper(reid_model, timing_stats)\n        setattr(tracker, reid_attr, wrapped)\n"
  },
  {
    "path": "boxmot/utils/torch_utils.py",
    "content": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport os\nimport platform\n\nimport torch\n\nfrom .. import __version__\nfrom . import logger as LOGGER\n\n\ndef get_system_info():\n    return f\"BoxMOT v{__version__} 🚀 Python-{platform.python_version()} torch-{torch.__version__}\"\n\n\ndef parse_device(device):\n    device = (\n        str(device)\n        .lower()\n        .replace(\"cuda:\", \"\")\n        .replace(\"none\", \"\")\n        .replace(\"(\", \"\")\n        .replace(\")\", \"\")\n        .replace(\"[\", \"\")\n        .replace(\"]\", \"\")\n        .replace(\"'\", \"\")\n        .replace(\" \", \"\")\n    )\n    return device\n\n\ndef assert_cuda_available(device):\n    if not (\n        torch.cuda.is_available()\n        and torch.cuda.device_count() >= len(device.replace(\",\", \"\"))\n    ):\n        install = (\n            \"See https://pytorch.org/get-started/locally/ for up-to-date torch install instructions if no CUDA devices are seen by torch.\\n\"\n            if torch.cuda.device_count() == 0\n            else \"\"\n        )\n        raise ValueError(\n            f\"Invalid CUDA 'device={device}' requested. Use 'device=cpu' or pass valid CUDA device(s) if available, i.e. 'device=0' or 'device=0,1,2,3' for Multi-GPU.\\n\"\n            + f\"\\ntorch.cuda.is_available(): {torch.cuda.is_available()}\"\n            + f\"\\ntorch.cuda.device_count(): {torch.cuda.device_count()}\"\n            + f\"\\nos.environ['CUDA_VISIBLE_DEVICES']: {os.environ.get('CUDA_VISIBLE_DEVICES', None)}\\n{install}\"\n        )\n\n\ndef select_device(device=\"\", batch=0):\n    s = get_system_info()\n    device = parse_device(device)\n    mps = device == \"mps\"\n    cpu = device == \"cpu\" or device == \"\" and not torch.cuda.is_available()\n\n    if cpu or mps:\n        os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"-1\"\n    elif device:\n        os.environ[\"CUDA_VISIBLE_DEVICES\"] = device\n        assert_cuda_available(device)\n\n    if not cpu and not mps and torch.cuda.is_available():\n        devices = device.split(\",\") if device else [\"0\"]\n        n = len(devices)\n        if n > 1 and batch > 0 and batch % n != 0:\n            raise ValueError(f\"'batch={batch}' must be a multiple of GPU count {n}.\")\n        s += \"\\n\" + \"\\n\".join(\n            f\"CUDA:{d} ({torch.cuda.get_device_properties(i).name}, {torch.cuda.get_device_properties(i).total_memory / (1 << 20):.0f}MiB)\"\n            for i, d in enumerate(devices)\n        )\n        arg = \"cuda:\" + devices[0]\n    elif mps:\n        s += \"MPS\"\n        arg = \"mps\"\n    else:\n        s += \"CPU\"\n        arg = \"cpu\"\n    LOGGER.info(s)\n    return torch.device(arg)\n"
  },
  {
    "path": "boxmot/utils/visualization.py",
    "content": "import colorsys\nimport hashlib\nfrom abc import ABC, abstractmethod\n\nimport cv2 as cv\nimport numpy as np\n\n\nclass BaseVisualization(ABC):\n    \"\"\"\n    Abstract base class for visualization methods in BaseTracker.\n    \"\"\"\n    \n    def id_to_color(\n        self,\n        id: int,\n        saturation: float = 0.75,\n        value: float = 0.95,\n        state: str = \"confirmed\"\n    ) -> tuple:\n        \"\"\"\n        Returns green for target_id, otherwise generates a consistent unique BGR color using ID hashing.\n        \"\"\"\n        target_id = getattr(self, \"target_id\", None)\n        if target_id is not None:\n            return (0, 255, 0) if id == target_id else (0, 0, 0)\n\n        # Default: consistent hashed color for other IDs\n        hash_object = hashlib.sha256(str(id).encode())\n        hash_digest = hash_object.hexdigest()\n        hue = int(hash_digest[:8], 16) / 0xFFFFFFFF\n\n        # Convert HSV to RGB\n        rgb = colorsys.hsv_to_rgb(hue, saturation, value)\n        rgb_255 = tuple(int(component * 255) for component in rgb)\n\n        # Convert to BGR\n        return rgb_255[::-1]\n\n    def _draw_dashed_rect(self, img, x1, y1, x2, y2, color, thickness, dash=10, gap=10):\n        \"\"\"Dashed rectangle for AABB (used for 'lost'/'predicted').\"\"\"\n        # Top / Bottom\n        for i in range(x1, x2, dash + gap):\n            img = cv.line(img, (i, y1), (min(i + dash, x2), y1), color, thickness)\n            img = cv.line(img, (i, y2), (min(i + dash, x2), y2), color, thickness)\n        # Left / Right\n        for i in range(y1, y2, dash + gap):\n            img = cv.line(img, (x1, i), (x1, min(i + dash, y2)), color, thickness)\n            img = cv.line(img, (x2, i), (x2, min(i + dash, y2)), color, thickness)\n        return img\n\n    @staticmethod\n    def _obb_to_polygon(box: tuple) -> np.ndarray:\n        arr = np.asarray(box, dtype=np.float32).reshape(-1)\n        if arr.size >= 8:\n            return arr[:8].reshape(4, 2)\n        angle = arr[4] * 180.0 / np.pi\n        box_poly = ((arr[0], arr[1]), (arr[2], arr[3]), angle)\n        return cv.boxPoints(box_poly).astype(np.float32)\n\n    def plot_box_on_img(\n        self,\n        img: np.ndarray,\n        box: tuple,\n        conf: float,\n        cls: int,\n        id: int,\n        thickness: int = 2,\n        fontscale: float = 0.5,\n        state: str = \"confirmed\",\n        style: str = \"solid\",  # \"solid\" | \"dashed\" (dashed only for AABB)\n    ) -> np.ndarray:\n        \"\"\"\n        Draws a bounding box with ID, confidence, and class information on an image.\n        \"\"\"\n        color = self.id_to_color(id, state=state)\n        if self.is_obb:\n            box_arr = np.asarray(box, dtype=np.float32).reshape(-1)\n            box_poly = np.int_(self._obb_to_polygon(box))\n            center = np.mean(box_poly, axis=0).astype(int)\n            label = f\"id: {int(id)}, conf: {conf:.2f}, c: {int(cls)}\"\n            if box_arr.size >= 5 and box_arr.size < 8:\n                label += f\", a: {box_arr[4]:.2f}\"\n\n            # Draw the rectangle on the image\n            img = cv.polylines(\n                img,\n                [box_poly],\n                isClosed=True,\n                color=color,\n                thickness=thickness,\n            )\n\n            img = cv.putText(\n                img,\n                label,\n                (int(center[0]), int(center[1]) - 10),\n                cv.FONT_HERSHEY_SIMPLEX,\n                fontscale,\n                color,\n                thickness,\n            )\n        else:\n            x1, y1, x2, y2 = map(int, (box[0], box[1], box[2], box[3]))\n            if style == \"dashed\":\n                img = self._draw_dashed_rect(img, x1, y1, x2, y2, color, thickness)\n            else:\n                img = cv.rectangle(\n                    img,\n                    (x1, y1),\n                    (x2, y2),\n                    color,\n                    thickness,\n                )\n            img = cv.putText(\n                img,\n                f\"id: {int(id)}, conf: {conf:.2f}, c: {int(cls)}\",\n                (x1, max(0, y1 - 10)),\n                cv.FONT_HERSHEY_SIMPLEX,\n                fontscale,\n                color,\n                thickness,\n            )\n        return img\n\n    def plot_trackers_trajectories(\n        self, img: np.ndarray, observations: list, id: int, state: str = \"confirmed\"\n    ) -> np.ndarray:\n        \"\"\"\n        Draws the trajectories of tracked objects based on historical observations.\n        \"\"\"\n        for i, box in enumerate(observations):\n            trajectory_thickness = int(np.sqrt(float(i + 1)) * 1.2)\n            if self.is_obb:\n                poly = self._obb_to_polygon(box)\n                center = np.mean(poly, axis=0)\n                img = cv.circle(\n                    img,\n                    (int(center[0]), int(center[1])),\n                    2,\n                    color=self.id_to_color(int(id), state=state),\n                    thickness=trajectory_thickness,\n                )\n            else:\n                img = cv.circle(\n                    img,\n                    (int((box[0] + box[2]) / 2), int((box[1] + box[3]) / 2)),\n                    2,\n                    color=self.id_to_color(int(id), state=state),\n                    thickness=trajectory_thickness,\n                )\n        return img\n\n    # ---------- Helpers for a DRY plot_results ----------\n    def _all_active_tracks(self):\n        \"\"\"Flatten active tracks across classes (if per-class).\"\"\"\n        if getattr(self, \"per_class_active_tracks\", None) is None:\n            return list(getattr(self, \"active_tracks\", []) or [])\n        tracks = []\n        for k in self.per_class_active_tracks.keys():\n            tracks += self.per_class_active_tracks[k]\n        return tracks\n\n    def _infer_state(self, a):\n        \"\"\"Infer a generic state string for a track when lost/removed lists are not present.\"\"\"\n        if hasattr(a, \"hits\"):  # DeepOCSort / OCSort\n            if a.hits < getattr(self, \"min_hits\", 0):\n                return None  # not yet confirmed -> skip\n        elif hasattr(a, \"is_activated\"):  # ByteTrack\n            if not a.is_activated:\n                return None\n\n        if hasattr(a, \"time_since_update\"):\n            if a.time_since_update == 0:\n                return \"confirmed\"\n            elif a.time_since_update <= getattr(self, \"max_age\", 1_000_000):\n                return \"predicted\"\n            else:\n                return \"lost\"\n\n        if hasattr(a, \"state\"):\n            try:\n                from boxmot.trackers.bytetrack.basetrack import TrackState\n                if a.state == TrackState.Tracked:\n                    return \"confirmed\"\n                elif a.state == TrackState.Lost:\n                    return \"predicted\"\n                else:\n                    return \"lost\"\n            except Exception:\n                return \"confirmed\" if getattr(a, \"is_activated\", True) else \"lost\"\n\n        return \"confirmed\"\n\n    @abstractmethod\n    def _display_groups(self):\n        pass\n\n    def _draw_track(self, img, a, forced_state, style, thickness, fontscale, show_trajectories):\n        if not getattr(a, \"history_observations\", None):\n            return img\n\n        state = forced_state or self._infer_state(a)\n        if state is None:\n            return img  # e.g., below min_hits\n\n        # If the track is lost (predicted), use the current Kalman Filter prediction\n        # instead of the last history observation (which is the last seen detection)\n        if state == \"predicted\":\n            if self.is_obb and hasattr(a, \"_state_obb_for_plot\"):\n                box = a._state_obb_for_plot()\n            elif self.is_obb and hasattr(a, \"xywha\"):\n                box = a.xywha\n            elif hasattr(a, \"xyxy\"):\n                box = a.xyxy\n            elif hasattr(a, \"get_state\"):\n                box = a.get_state()\n                # Handle OCSORT's get_state returning (1, 4) array\n                if isinstance(box, np.ndarray) and box.ndim == 2 and box.shape[0] == 1:\n                    box = box[0]\n            else:\n                box = a.history_observations[-1]\n        else:\n            box = a.history_observations[-1]\n\n        conf = getattr(a, \"conf\", 1.0)\n        cls = getattr(a, \"cls\", -1)\n\n        img = self.plot_box_on_img(\n            img=img,\n            box=box,\n            conf=conf,\n            cls=cls,\n            id=int(getattr(a, \"id\")),\n            thickness=thickness,\n            fontscale=fontscale,\n            state=state,\n            style=style if (state == \"predicted\" and not self.is_obb) else \"solid\",\n        )\n\n        if show_trajectories:\n            img = self.plot_trackers_trajectories(img, a.history_observations, int(getattr(a, \"id\")), state=state)\n        return img\n\n    def plot_results(\n        self,\n        img: np.ndarray,\n        show_trajectories: bool,\n        thickness: int = 2,\n        fontscale: float = 0.5,\n        show_lost: bool = False,\n    ) -> np.ndarray:\n        \"\"\"\n        Visualizes the trajectories of all active tracks on the image.\n        \"\"\"\n        for tracks, forced_state, style in self._display_groups():\n            if not show_lost and forced_state in (\"predicted\", \"removed\"):\n                continue\n\n            for a in tracks:\n                if not show_lost and forced_state is None:\n                    state = self._infer_state(a)\n                    if state != \"confirmed\":\n                        continue\n\n                img = self._draw_track(\n                    img,\n                    a,\n                    forced_state=forced_state,\n                    style=style,\n                    thickness=thickness,\n                    fontscale=fontscale,\n                    show_trajectories=show_trajectories,\n                )\n        return img\n\n\nclass ExplicitStateVisualization(BaseVisualization):\n    \"\"\"\n    Visualization for trackers that maintain explicit lists for lost and removed tracks.\n    \"\"\"\n\n    def _display_groups(self):\n        lost_list = getattr(self, \"lost_stracks\", None)\n        removed_list = getattr(self, \"removed_stracks\", None)\n\n        # Maintain internal frame index for TTL accounting\n        self._plot_frame_idx += 1\n        now = self._plot_frame_idx\n\n        ttl = int(max(0, getattr(self, \"removed_display_frames\", self.removed_display_frames)))\n\n        # Active\n        yield (self._all_active_tracks(), \"confirmed\", \"solid\")\n\n        # Lost (dashed, orange)\n        if lost_list:\n            yield (list(lost_list), \"predicted\", \"dashed\")\n\n        # Removed (gray, solid), with TTL + tombstone\n        if removed_list and ttl > 0:\n            filtered_removed = []\n            for a in removed_list:\n                if not getattr(a, \"history_observations\", None):\n                    continue\n                sf = int(getattr(a, \"start_frame\", getattr(a, \"birth_frame\", -1)))\n                rid = int(getattr(a, \"id\"))\n                key = (rid, sf) if sf >= 0 else rid\n\n                if key in self._removed_expired:\n                    continue\n\n                if key not in self._removed_first_seen:\n                    self._removed_first_seen[key] = now\n\n                if (now - self._removed_first_seen[key]) < ttl:\n                    filtered_removed.append(a)\n                else:\n                    self._removed_expired.add(key)\n\n            if filtered_removed:\n                yield (filtered_removed, \"removed\", \"solid\")\n\n        # Optional: simple memory cap\n        if len(self._removed_expired) > 10000:\n            horizon = getattr(self, \"removed_tombstone_horizon\", 10000)\n            cutoff = now - max(ttl, 1) - horizon\n            to_drop = [k for k, t0 in self._removed_first_seen.items() if t0 < cutoff]\n            for k in to_drop:\n                self._removed_first_seen.pop(k, None)\n                self._removed_expired.discard(k)\n\n\nclass InferredStateVisualization(BaseVisualization):\n    \"\"\"\n    Visualization for trackers that only expose active tracks and state is inferred.\n    \"\"\"\n\n    def _display_groups(self):\n        # Maintain internal frame index for TTL accounting\n        self._plot_frame_idx += 1\n        \n        # Generic fallback: only active tracks; state per track\n        active_tracks = self._all_active_tracks()\n        if active_tracks:\n            yield (active_tracks, None, \"dashed\")\n\n\nclass VisualizationMixin(BaseVisualization):\n    \"\"\"\n    Mixin class for visualization methods in BaseTracker.\n    \"\"\"\n    \n    def _display_groups(self):\n        lost_list = getattr(self, \"lost_stracks\", None)\n        removed_list = getattr(self, \"removed_stracks\", None)\n        \n        if (lost_list is not None) or (removed_list is not None):\n            return ExplicitStateVisualization._display_groups(self)\n        else:\n            return InferredStateVisualization._display_groups(self)\n"
  },
  {
    "path": "docs/modes/eval.md",
    "content": "# eval\n\n::: mkdocs-click\n    :module: boxmot.engine.cli\n    :command: boxmot\n    :depth: 1\n    :command: eval\n    :style: table\n    :prog_name: boxmot eval"
  },
  {
    "path": "docs/modes/generate.md",
    "content": "# generate\n\n::: mkdocs-click\n    :module: boxmot.engine.cli\n    :command: boxmot\n    :depth: 1\n    :command: generate\n    :style: table\n    :prog_name: boxmot generate"
  },
  {
    "path": "docs/modes/track.md",
    "content": "# track\n\n::: mkdocs-click\n    :module: boxmot.engine.cli\n    :command: boxmot\n    :depth: 1\n    :command: track\n    :style: table\n    :prog_name: boxmot track"
  },
  {
    "path": "docs/modes/tune.md",
    "content": "# tune\n\n::: mkdocs-click\n    :module: boxmot.engine.cli\n    :command: boxmot\n    :depth: 1\n    :command: tune\n    :style: table\n    :prog_name: boxmot tune"
  },
  {
    "path": "docs/trackers/boosttrack.md",
    "content": "# BoostTrack\n\n::: boxmot.trackers.boosttrack.boosttrack.BoostTrack"
  },
  {
    "path": "docs/trackers/botsort.md",
    "content": "# BotSort\n\n::: boxmot.trackers.botsort.botsort.BotSort"
  },
  {
    "path": "docs/trackers/bytetrack.md",
    "content": "<!-- docs/api/trackers/bytetrack.md -->\n# ByteTrack\n\n::: boxmot.trackers.bytetrack.bytetrack.ByteTrack"
  },
  {
    "path": "docs/trackers/deepocsort.md",
    "content": "# DeepOcSort\n\n::: boxmot.trackers.deepocsort.deepocsort.DeepOcSort"
  },
  {
    "path": "docs/trackers/ocsort.md",
    "content": "# OcSort\n\n::: boxmot.trackers.ocsort.ocsort.OcSort"
  },
  {
    "path": "docs/trackers/sfsort.md",
    "content": "# SFSORT\n\n::: boxmot.trackers.sfsort.sfsort.SFSORT\n"
  },
  {
    "path": "docs/trackers/strongsort.md",
    "content": "# StrongSort\n\n::: boxmot.trackers.strongsort.strongsort.StrongSort\n"
  },
  {
    "path": "examples/det/efficientdet_boxmot.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pip install effdet\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pathlib import Path\\n\",\n    \"\\n\",\n    \"import cv2\\n\",\n    \"import torch\\n\",\n    \"from effdet import create_model\\n\",\n    \"from effdet.config import get_efficientdet_config\\n\",\n    \"from torchvision import transforms\\n\",\n    \"\\n\",\n    \"from boxmot import BotSort\\n\",\n    \"from boxmot.utils.ops import letterbox\\n\",\n    \"\\n\",\n    \"# Load EfficientDet model\\n\",\n    \"device = torch.device('mps')  # Use 'cuda' if you have a GPU\\n\",\n    \"\\n\",\n    \"model_name = 'tf_efficientdet_d0'  # You can choose a different variant like 'tf_efficientdet_d3'\\n\",\n    \"config = get_efficientdet_config(model_name)\\n\",\n    \"model = create_model(model_name, bench_task='predict', pretrained=True).to(device)\\n\",\n    \"model.eval()\\n\",\n    \"\\n\",\n    \"# Initialize the tracker\\n\",\n    \"tracker = BotSort(\\n\",\n    \"    reid_weights=Path('osnet_x0_25_msmt17.pt'),  # Path to ReID model\\n\",\n    \"    device=device,  # Use CPU for inference\\n\",\n    \"    half=False\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"input_size = config.image_size\\n\",\n    \"\\n\",\n    \"preprocess = transforms.Compose([\\n\",\n    \"    transforms.ToTensor(),\\n\",\n    \"    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\\n\",\n    \"])\\n\",\n    \"\\n\",\n    \"# Open the video file\\n\",\n    \"vid = cv2.VideoCapture(0)  # or 'path/to/your.avi'\\n\",\n    \"\\n\",\n    \"while True:\\n\",\n    \"    # Capture frame-by-frame\\n\",\n    \"    ret, frame = vid.read()\\n\",\n    \"\\n\",\n    \"    # If ret is False, it means we have reached the end of the video\\n\",\n    \"    if not ret:\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"    # Apply letterbox resizing\\n\",\n    \"    frame_letterbox, ratio, (dw, dh) = letterbox(frame, new_shape=input_size, auto=False, scaleFill=True)\\n\",\n    \"    \\n\",\n    \"    # Preprocess frame for EfficientDet (resize and normalize)\\n\",\n    \"    frame_tensor = preprocess(frame_letterbox).unsqueeze(0).to(device)\\n\",\n    \"\\n\",\n    \"    # Perform detection\\n\",\n    \"    with torch.no_grad():\\n\",\n    \"        detections = model(frame_tensor)[0]\\n\",\n    \"                \\n\",\n    \"    # Assuming detections is shaped [100, 6], with [x1, y1, x2, y2, confidence, class]\\n\",\n    \"    confidence_threshold = 0.5\\n\",\n    \"    \\n\",\n    \"    # Filter detections based on confidence threshold\\n\",\n    \"    mask = detections[:, 4] >= confidence_threshold\\n\",\n    \"    filtered_dets = detections[mask]\\n\",\n    \"\\n\",\n    \"    # Rescale coordinates from letterbox back to the original frame size\\n\",\n    \"    filtered_dets[:, 0] = (filtered_dets[:, 0] - dw) / ratio[0]\\n\",\n    \"    filtered_dets[:, 1] = (filtered_dets[:, 1] - dh) / ratio[1]\\n\",\n    \"    filtered_dets[:, 2] = (filtered_dets[:, 2] - dw) / ratio[0]\\n\",\n    \"    filtered_dets[:, 3] = (filtered_dets[:, 3] - dh) / ratio[1]\\n\",\n    \"\\n\",\n    \"    # Convert class to integer and stack results\\n\",\n    \"    dets = torch.cat((filtered_dets[:, :5], filtered_dets[:, 5].unsqueeze(1).int()), dim=1)\\n\",\n    \"\\n\",\n    \"    # Convert to numpy array (N X (x, y, x, y, conf, cls))\\n\",\n    \"    dets = dets.cpu().numpy()\\n\",\n    \"\\n\",\n    \"    # Update the tracker\\n\",\n    \"    res = tracker.update(dets, frame)  # --> M X (x, y, x, y, id, conf, cls, ind)\\n\",\n    \"\\n\",\n    \"    # Plot tracking results on the image\\n\",\n    \"    tracker.plot_results(frame, show_trajectories=True)\\n\",\n    \"\\n\",\n    \"    # Display the frame\\n\",\n    \"    cv2.imshow('BoXMOT + EfficientDet', frame)\\n\",\n    \"\\n\",\n    \"    # Simulate wait for key press to continue, press 'q' to exit\\n\",\n    \"    key = cv2.waitKey(1) & 0xFF\\n\",\n    \"    if key == ord('q'):\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"# Release resources\\n\",\n    \"vid.release()\\n\",\n    \"cv2.destroyAllWindows()\\n\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"boxmot-YDNZdsaB-py3.11\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/det/obb.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"2\\r\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import cv2\\n\",\n    \"import numpy as np\\n\",\n    \"\\n\",\n    \"from boxmot import OcSort\\n\",\n    \"\\n\",\n    \"# Initialize the tracker\\n\",\n    \"tracker = OcSort(\\n\",\n    \"    asso_func=\\\"centroid\\\",\\n\",\n    \"    min_hits=10,\\n\",\n    \"    asso_threshold=0.98,\\n\",\n    \"    det_thresh = 0.7,\\n\",\n    \"    max_age=20,\\n\",\n    \"    use_byte=True,\\n\",\n    \"    Q_xy_scaling = 0.01,\\n\",\n    \"    Q_s_scaling = 0.0001,\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"def get_parabolic_array(i):\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    Generates coordinates where x increases linearly,\\n\",\n    \"    y follows a parabolic curve (y = base + coeff * i^2),\\n\",\n    \"    and the angle matches the tangent of the curve.\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    # -- FIRST ROW --\\n\",\n    \"    # Define x1, y1\\n\",\n    \"    x1 = 144 + i\\n\",\n    \"    y1 = 212 + 0.01 * (i ** 2)\\n\",\n    \"    \\n\",\n    \"    # Slope = 2 * coeff * i => for 0.01 * i^2, slope = 2*0.01*i = 0.02*i\\n\",\n    \"    slope1 = 0.02 * i\\n\",\n    \"    # Angle in radians\\n\",\n    \"    angle1 = np.arctan(slope1)\\n\",\n    \"    \\n\",\n    \"    # -- SECOND ROW --\\n\",\n    \"    # Define x2, y2 with a different coefficient\\n\",\n    \"    x2 = 425 + i\\n\",\n    \"    y2 = 281 + 0.02 * (i ** 2)\\n\",\n    \"    \\n\",\n    \"    # Slope for 0.02 * i^2 is 2*0.02*i = 0.04*i\\n\",\n    \"    slope2 = 0.04 * i\\n\",\n    \"    # Angle in radians\\n\",\n    \"    angle2 = np.arctan(slope2)\\n\",\n    \"    \\n\",\n    \"    # Build the array\\n\",\n    \"    det = np.array([\\n\",\n    \"        [x1, y1, 45, 30, angle1, 0.82,  0],   # row 1\\n\",\n    \"        [x2, y2, 45, 30, angle2, 0.72, 65]    # row 2\\n\",\n    \"    ])\\n\",\n    \"    \\n\",\n    \"    return det\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"for i in range(0, 100):\\n\",\n    \"\\n\",\n    \"    #frame = cv2.imread(str(img_dir / (file.stem + '.png')))\\n\",\n    \"    frame = np.zeros((1080,1080,3))\\n\",\n    \"    \\n\",\n    \"    det = get_parabolic_array(i)\\n\",\n    \"\\n\",\n    \"    # Update the tracker\\n\",\n    \"    res = tracker.update(det, frame)  # --> M X (x, y, x, y, id, conf, cls, ind)\\n\",\n    \"    \\n\",\n    \"    # Plot tracking results on the image\\n\",\n    \"    tracker.plot_results(frame, show_trajectories=True, fontscale=2, thickness=4)\\n\",\n    \"\\n\",\n    \"    # Display the frame\\n\",\n    \"    cv2.imshow('BoXMOT', frame)\\n\",\n    \"\\n\",\n    \"    print(len(tracker.active_tracks),end='\\\\r')\\n\",\n    \"\\n\",\n    \"    key = cv2.waitKey(1) & 0xFF\\n\",\n    \"    if key == ord('q') or key ==27:\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"cv2.destroyAllWindows()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"boxmot-YDNZdsaB-py3.11\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/det/rfdetr_boxmot.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Requirement already satisfied: rfdetr in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (1.0.8)\\n\",\n      \"Requirement already satisfied: cython in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (3.0.12)\\n\",\n      \"Requirement already satisfied: pycocotools in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (2.0.8)\\n\",\n      \"Requirement already satisfied: torch>=1.13.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (2.2.2)\\n\",\n      \"Requirement already satisfied: torchvision>=0.14.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.17.2)\\n\",\n      \"Requirement already satisfied: fairscale in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.4.13)\\n\",\n      \"Requirement already satisfied: scipy in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (1.13.1)\\n\",\n      \"Requirement already satisfied: timm in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (1.0.15)\\n\",\n      \"Requirement already satisfied: tqdm in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (4.67.1)\\n\",\n      \"Requirement already satisfied: numpy in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (1.26.4)\\n\",\n      \"Requirement already satisfied: accelerate in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (1.5.2)\\n\",\n      \"Requirement already satisfied: transformers in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (4.50.2)\\n\",\n      \"Requirement already satisfied: peft in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.15.1)\\n\",\n      \"Requirement already satisfied: ninja in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (1.11.1.4)\\n\",\n      \"Requirement already satisfied: einops in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.8.1)\\n\",\n      \"Requirement already satisfied: wandb in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.19.8)\\n\",\n      \"Requirement already satisfied: pandas in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (2.2.3)\\n\",\n      \"Requirement already satisfied: pylabel in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.1.55)\\n\",\n      \"Requirement already satisfied: onnx in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (1.16.1)\\n\",\n      \"Requirement already satisfied: onnxsim in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.4.36)\\n\",\n      \"Requirement already satisfied: onnx_graphsurgeon in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.5.7)\\n\",\n      \"Requirement already satisfied: polygraphy in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.49.20)\\n\",\n      \"Requirement already satisfied: open_clip_torch in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (2.31.0)\\n\",\n      \"Requirement already satisfied: rf100vl in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (1.0.0)\\n\",\n      \"Requirement already satisfied: pydantic in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (2.11.0)\\n\",\n      \"Requirement already satisfied: supervision in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rfdetr) (0.25.1)\\n\",\n      \"Requirement already satisfied: filelock in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from torch>=1.13.0->rfdetr) (3.18.0)\\n\",\n      \"Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from torch>=1.13.0->rfdetr) (4.12.2)\\n\",\n      \"Requirement already satisfied: sympy in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from torch>=1.13.0->rfdetr) (1.13.3)\\n\",\n      \"Requirement already satisfied: networkx in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from torch>=1.13.0->rfdetr) (3.1)\\n\",\n      \"Requirement already satisfied: jinja2 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from torch>=1.13.0->rfdetr) (3.1.6)\\n\",\n      \"Requirement already satisfied: fsspec in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from torch>=1.13.0->rfdetr) (2025.3.0)\\n\",\n      \"Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from torchvision>=0.14.0->rfdetr) (11.1.0)\\n\",\n      \"Requirement already satisfied: packaging>=20.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from accelerate->rfdetr) (24.2)\\n\",\n      \"Requirement already satisfied: psutil in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from accelerate->rfdetr) (7.0.0)\\n\",\n      \"Requirement already satisfied: pyyaml in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from accelerate->rfdetr) (6.0.2)\\n\",\n      \"Requirement already satisfied: huggingface-hub>=0.21.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from accelerate->rfdetr) (0.29.3)\\n\",\n      \"Requirement already satisfied: safetensors>=0.4.3 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from accelerate->rfdetr) (0.5.3)\\n\",\n      \"Requirement already satisfied: protobuf>=3.20.2 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from onnx->rfdetr) (5.29.4)\\n\",\n      \"Requirement already satisfied: rich in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from onnxsim->rfdetr) (13.9.4)\\n\",\n      \"Requirement already satisfied: regex in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from open_clip_torch->rfdetr) (2024.11.6)\\n\",\n      \"Requirement already satisfied: ftfy in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from open_clip_torch->rfdetr) (6.3.1)\\n\",\n      \"Requirement already satisfied: python-dateutil>=2.8.2 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pandas->rfdetr) (2.9.0.post0)\\n\",\n      \"Requirement already satisfied: pytz>=2020.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pandas->rfdetr) (2025.1)\\n\",\n      \"Requirement already satisfied: tzdata>=2022.7 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pandas->rfdetr) (2025.1)\\n\",\n      \"Requirement already satisfied: matplotlib>=2.1.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pycocotools->rfdetr) (3.9.4)\\n\",\n      \"Requirement already satisfied: annotated-types>=0.6.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pydantic->rfdetr) (0.7.0)\\n\",\n      \"Requirement already satisfied: pydantic-core==2.33.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pydantic->rfdetr) (2.33.0)\\n\",\n      \"Requirement already satisfied: typing-inspection>=0.4.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pydantic->rfdetr) (0.4.0)\\n\",\n      \"Requirement already satisfied: bbox-visualizer in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pylabel->rfdetr) (0.2.0)\\n\",\n      \"Requirement already satisfied: opencv-python in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pylabel->rfdetr) (4.11.0.86)\\n\",\n      \"Requirement already satisfied: scikit-learn in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pylabel->rfdetr) (1.6.1)\\n\",\n      \"Requirement already satisfied: jupyter-bbox-widget in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pylabel->rfdetr) (0.6.0)\\n\",\n      \"Requirement already satisfied: roboflow in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rf100vl->rfdetr) (1.1.58)\\n\",\n      \"Requirement already satisfied: contourpy>=1.0.7 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from supervision->rfdetr) (1.3.0)\\n\",\n      \"Requirement already satisfied: defusedxml<0.8.0,>=0.7.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from supervision->rfdetr) (0.7.1)\\n\",\n      \"Requirement already satisfied: requests>=2.26.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from supervision->rfdetr) (2.32.3)\\n\",\n      \"Requirement already satisfied: tokenizers<0.22,>=0.21 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from transformers->rfdetr) (0.21.1)\\n\",\n      \"Requirement already satisfied: click!=8.0.0,>=7.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from wandb->rfdetr) (8.1.8)\\n\",\n      \"Requirement already satisfied: docker-pycreds>=0.4.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from wandb->rfdetr) (0.4.0)\\n\",\n      \"Requirement already satisfied: gitpython!=3.1.29,>=1.0.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from wandb->rfdetr) (3.1.44)\\n\",\n      \"Requirement already satisfied: platformdirs in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from wandb->rfdetr) (4.3.7)\\n\",\n      \"Requirement already satisfied: sentry-sdk>=2.0.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from wandb->rfdetr) (2.24.1)\\n\",\n      \"Requirement already satisfied: setproctitle in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from wandb->rfdetr) (1.3.5)\\n\",\n      \"Requirement already satisfied: setuptools in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from wandb->rfdetr) (69.1.0)\\n\",\n      \"Requirement already satisfied: six>=1.4.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from docker-pycreds>=0.4.0->wandb->rfdetr) (1.17.0)\\n\",\n      \"Requirement already satisfied: gitdb<5,>=4.0.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from gitpython!=3.1.29,>=1.0.0->wandb->rfdetr) (4.0.12)\\n\",\n      \"Requirement already satisfied: cycler>=0.10 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from matplotlib>=2.1.0->pycocotools->rfdetr) (0.12.1)\\n\",\n      \"Requirement already satisfied: fonttools>=4.22.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from matplotlib>=2.1.0->pycocotools->rfdetr) (4.56.0)\\n\",\n      \"Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from matplotlib>=2.1.0->pycocotools->rfdetr) (1.4.7)\\n\",\n      \"Requirement already satisfied: pyparsing>=2.3.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from matplotlib>=2.1.0->pycocotools->rfdetr) (3.2.1)\\n\",\n      \"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from requests>=2.26.0->supervision->rfdetr) (3.4.1)\\n\",\n      \"Requirement already satisfied: idna<4,>=2.5 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from requests>=2.26.0->supervision->rfdetr) (3.7)\\n\",\n      \"Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from requests>=2.26.0->supervision->rfdetr) (2.3.0)\\n\",\n      \"Requirement already satisfied: certifi>=2017.4.17 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from requests>=2.26.0->supervision->rfdetr) (2025.1.31)\\n\",\n      \"Requirement already satisfied: wcwidth in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ftfy->open_clip_torch->rfdetr) (0.2.13)\\n\",\n      \"Requirement already satisfied: MarkupSafe>=2.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from jinja2->torch>=1.13.0->rfdetr) (3.0.2)\\n\",\n      \"Requirement already satisfied: anywidget>=0.9.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from jupyter-bbox-widget->pylabel->rfdetr) (0.9.18)\\n\",\n      \"Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rich->onnxsim->rfdetr) (3.0.0)\\n\",\n      \"Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from rich->onnxsim->rfdetr) (2.19.1)\\n\",\n      \"Requirement already satisfied: opencv-python-headless==4.10.0.84 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from roboflow->rf100vl->rfdetr) (4.10.0.84)\\n\",\n      \"Requirement already satisfied: pillow-heif>=0.18.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from roboflow->rf100vl->rfdetr) (0.22.0)\\n\",\n      \"Requirement already satisfied: python-dotenv in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from roboflow->rf100vl->rfdetr) (1.1.0)\\n\",\n      \"Requirement already satisfied: requests-toolbelt in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from roboflow->rf100vl->rfdetr) (1.0.0)\\n\",\n      \"Requirement already satisfied: filetype in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from roboflow->rf100vl->rfdetr) (1.2.0)\\n\",\n      \"Requirement already satisfied: joblib>=1.2.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from scikit-learn->pylabel->rfdetr) (1.4.2)\\n\",\n      \"Requirement already satisfied: threadpoolctl>=3.1.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from scikit-learn->pylabel->rfdetr) (3.6.0)\\n\",\n      \"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from sympy->torch>=1.13.0->rfdetr) (1.3.0)\\n\",\n      \"Requirement already satisfied: ipywidgets>=7.6.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (8.1.5)\\n\",\n      \"Requirement already satisfied: psygnal>=0.8.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.12.0)\\n\",\n      \"Requirement already satisfied: smmap<6,>=3.0.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from gitdb<5,>=4.0.1->gitpython!=3.1.29,>=1.0.0->wandb->rfdetr) (5.0.2)\\n\",\n      \"Requirement already satisfied: mdurl~=0.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich->onnxsim->rfdetr) (0.1.2)\\n\",\n      \"Requirement already satisfied: comm>=0.1.3 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.2.2)\\n\",\n      \"Requirement already satisfied: ipython>=6.1.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (8.18.1)\\n\",\n      \"Requirement already satisfied: traitlets>=4.3.1 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (5.14.3)\\n\",\n      \"Requirement already satisfied: widgetsnbextension~=4.0.12 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (4.0.13)\\n\",\n      \"Requirement already satisfied: jupyterlab-widgets~=3.0.12 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (3.0.13)\\n\",\n      \"Requirement already satisfied: decorator in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (5.2.1)\\n\",\n      \"Requirement already satisfied: jedi>=0.16 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.19.2)\\n\",\n      \"Requirement already satisfied: matplotlib-inline in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.1.7)\\n\",\n      \"Requirement already satisfied: prompt-toolkit<3.1.0,>=3.0.41 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (3.0.50)\\n\",\n      \"Requirement already satisfied: stack-data in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.6.3)\\n\",\n      \"Requirement already satisfied: pexpect>4.3 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (4.9.0)\\n\",\n      \"Requirement already satisfied: parso<0.9.0,>=0.8.4 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.8.4)\\n\",\n      \"Requirement already satisfied: ptyprocess>=0.5 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.7.0)\\n\",\n      \"Requirement already satisfied: executing>=1.2.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (2.2.0)\\n\",\n      \"Requirement already satisfied: asttokens>=2.1.0 in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (3.0.0)\\n\",\n      \"Requirement already satisfied: pure-eval in /Users/mikel.brostrom/Library/Caches/pypoetry/virtualenvs/boxmot-YDNZdsaB-py3.11/lib/python3.11/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget>=0.9.0->jupyter-bbox-widget->pylabel->rfdetr) (0.2.3)\\n\",\n      \"\\n\",\n      \"\\u001b[1m[\\u001b[0m\\u001b[34;49mnotice\\u001b[0m\\u001b[1;39;49m]\\u001b[0m\\u001b[39;49m A new release of pip is available: \\u001b[0m\\u001b[31;49m24.0\\u001b[0m\\u001b[39;49m -> \\u001b[0m\\u001b[32;49m25.0.1\\u001b[0m\\n\",\n      \"\\u001b[1m[\\u001b[0m\\u001b[34;49mnotice\\u001b[0m\\u001b[1;39;49m]\\u001b[0m\\u001b[39;49m To update, run: \\u001b[0m\\u001b[32;49mpip install --upgrade pip\\u001b[0m\\n\",\n      \"Note: you may need to restart the kernel to use updated packages.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"pip install rfdetr\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[32m2025-03-28 12:02:18.458\\u001b[0m | \\u001b[1mINFO    \\u001b[0m | \\u001b[36mboxmot.utils.torch_utils\\u001b[0m:\\u001b[36mselect_device\\u001b[0m:\\u001b[36m52\\u001b[0m - \\u001b[1mBoxMOT v12.0.2 🚀 Python-3.11.5 torch-2.2.2CPU\\u001b[0m\\n\",\n      \"\\u001b[32m2025-03-28 12:02:18.479\\u001b[0m | \\u001b[32m\\u001b[1mSUCCESS \\u001b[0m | \\u001b[36mboxmot.appearance.reid_model_factory\\u001b[0m:\\u001b[36mload_pretrained_weights\\u001b[0m:\\u001b[36m183\\u001b[0m - \\u001b[32m\\u001b[1mLoaded pretrained weights from osnet_x0_25_msmt17.pt\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Loading pretrain weights\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from pathlib import Path\\n\",\n    \"\\n\",\n    \"import cv2\\n\",\n    \"import numpy as np\\n\",\n    \"import torch\\n\",\n    \"from PIL import Image\\n\",\n    \"from rfdetr import RFDETRBase\\n\",\n    \"\\n\",\n    \"from boxmot import BotSort\\n\",\n    \"\\n\",\n    \"# Load RFDETR model\\n\",\n    \"model = RFDETRBase(device='cpu')\\n\",\n    \"\\n\",\n    \"# Initialize the tracker\\n\",\n    \"tracker = BotSort(\\n\",\n    \"    reid_weights=Path(\\\"osnet_x0_25_msmt17.pt\\\"),  # Path to ReID model\\n\",\n    \"    device=torch.device(\\\"cpu\\\"),  # Change to 'cuda' if using GPU\\n\",\n    \"    half=False\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"# Open the video file (0 for webcam or path to a video file)\\n\",\n    \"vid = cv2.VideoCapture(0)\\n\",\n    \"\\n\",\n    \"while True:\\n\",\n    \"    # Capture frame-by-frame\\n\",\n    \"    ret, frame = vid.read()\\n\",\n    \"    if not ret:\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"    # Convert frame to PIL Image format for RFDETR\\n\",\n    \"    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"    image = Image.fromarray(frame_rgb)\\n\",\n    \"\\n\",\n    \"    # Perform detection\\n\",\n    \"    detections = model.predict(image, threshold=0.5)\\n\",\n    \"    \\n\",\n    \"    # Convert detections to numpy array in format: (x1, y1, x2, y2, conf, cls)\\n\",\n    \"    dets = np.column_stack((\\n\",\n    \"        detections.xyxy,  # Bounding boxes (x1, y1, x2, y2)\\n\",\n    \"        detections.confidence,  # Confidence scores\\n\",\n    \"        detections.class_id.astype(int)  # Class IDs\\n\",\n    \"    ))\\n\",\n    \"\\n\",\n    \"    # Update the tracker\\n\",\n    \"    res = tracker.update(dets, frame)  # M X (x1, y1, x2, y2, id, conf, cls, ind)\\n\",\n    \"\\n\",\n    \"    # Plot tracking results on the image\\n\",\n    \"    tracker.plot_results(frame, show_trajectories=True)\\n\",\n    \"\\n\",\n    \"    cv2.imshow('BoXMOT + Torchvision', frame)\\n\",\n    \"\\n\",\n    \"    # Press 'q' to exit\\n\",\n    \"    if cv2.waitKey(1) & 0xFF == ord('q'):\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"# Release resources\\n\",\n    \"vid.release()\\n\",\n    \"cv2.destroyAllWindows()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"boxmot-YDNZdsaB-py3.11\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/det/torchvision_boxmot.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Downloading: \\\"https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_v2_coco-dd69338a.pth\\\" to /Users/mikel.brostrom/.cache/torch/hub/checkpoints/fasterrcnn_resnet50_fpn_v2_coco-dd69338a.pth\\n\",\n      \"100%|██████████| 167M/167M [00:19<00:00, 9.00MB/s] \\n\",\n      \"\\u001b[32m2025-07-28 14:46:08.697\\u001b[0m | \\u001b[1mINFO    \\u001b[0m | \\u001b[36mboxmot.utils.torch_utils\\u001b[0m:\\u001b[36mselect_device\\u001b[0m:\\u001b[36m78\\u001b[0m - \\u001b[1mBoxMOT v15.0.2 🚀 Python-3.11.5 torch-2.2.2CPU\\u001b[0m\\n\",\n      \"\\u001b[32m2025-07-28 14:46:08.698\\u001b[0m | \\u001b[1mINFO    \\u001b[0m | \\u001b[36mboxmot.appearance.backends.base_backend\\u001b[0m:\\u001b[36mdownload_model\\u001b[0m:\\u001b[36m138\\u001b[0m - \\u001b[1mDownloading ReID weights from %s → %s\\u001b[0m\\n\",\n      \"Downloading...\\n\",\n      \"From: https://drive.google.com/uc?id=1sSwXSUlj4_tHZequ_iZ8w_Jh0VaRQMqF\\n\",\n      \"To: /Users/mikel.brostrom/boxmot/examples/det/osnet_x0_25_msmt17.pt\\n\",\n      \"100%|██████████| 3.06M/3.06M [00:00<00:00, 7.95MB/s]\\n\",\n      \"\\u001b[32m2025-07-28 14:46:14.452\\u001b[0m | \\u001b[32m\\u001b[1mSUCCESS \\u001b[0m | \\u001b[36mboxmot.appearance.reid.registry\\u001b[0m:\\u001b[36mload_pretrained_weights\\u001b[0m:\\u001b[36m64\\u001b[0m - \\u001b[32m\\u001b[1mLoaded pretrained weights from osnet_x0_25_msmt17.pt\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"ename\": \"KeyboardInterrupt\",\n     \"evalue\": \"\",\n     \"output_type\": \"error\",\n     \"traceback\": [\n      \"\\u001b[31m---------------------------------------------------------------------------\\u001b[39m\",\n      \"\\u001b[31mKeyboardInterrupt\\u001b[39m                         Traceback (most recent call last)\",\n      \"\\u001b[36mCell\\u001b[39m\\u001b[36m \\u001b[39m\\u001b[32mIn[2]\\u001b[39m\\u001b[32m, line 28\\u001b[39m\\n\\u001b[32m     26\\u001b[39m         tracker.plot_results(bgr, show_trajectories=\\u001b[38;5;28;01mTrue\\u001b[39;00m)\\n\\u001b[32m     27\\u001b[39m         cv2.imshow(\\u001b[33m'\\u001b[39m\\u001b[33mBoXMOT + Torchvision\\u001b[39m\\u001b[33m'\\u001b[39m, bgr)\\n\\u001b[32m---> \\u001b[39m\\u001b[32m28\\u001b[39m         \\u001b[38;5;28;01mif\\u001b[39;00m cv2.waitKey(\\u001b[32m1\\u001b[39m) & \\u001b[32m0xFF\\u001b[39m == \\u001b[38;5;28mord\\u001b[39m(\\u001b[33m'\\u001b[39m\\u001b[33mq\\u001b[39m\\u001b[33m'\\u001b[39m): \\u001b[38;5;28;01mbreak\\u001b[39;00m\\n\\u001b[32m     29\\u001b[39m cap.release(); cv2.destroyAllWindows()\\n\",\n      \"\\u001b[31mKeyboardInterrupt\\u001b[39m: \"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import cv2, torch, numpy as np\\n\",\n    \"from pathlib import Path\\n\",\n    \"from boxmot import BotSort\\n\",\n    \"from torchvision.models.detection import fasterrcnn_resnet50_fpn_v2, FasterRCNN_ResNet50_FPN_V2_Weights as W\\n\",\n    \"\\n\",\n    \"dev = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\\n\",\n    \"w = W.DEFAULT\\n\",\n    \"model = fasterrcnn_resnet50_fpn_v2(weights=w, box_score_thresh=0.5).to(dev).eval()\\n\",\n    \"prep = w.transforms()\\n\",\n    \"tracker = BotSort(reid_weights=Path('osnet_x0_25_msmt17.pt'), device=dev, half=False)\\n\",\n    \"\\n\",\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"with torch.inference_mode():\\n\",\n    \"    while True:\\n\",\n    \"        ok, bgr = cap.read()\\n\",\n    \"        if not ok: break\\n\",\n    \"        rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)\\n\",\n    \"        t = torch.from_numpy(rgb).permute(2,0,1).to(torch.uint8)\\n\",\n    \"        out = model([prep(t).to(dev)])[0]\\n\",\n    \"        s = out['scores'].cpu().numpy()\\n\",\n    \"        keep = s >= 0.5\\n\",\n    \"        dets = np.concatenate([out['boxes'][keep].cpu().numpy(),\\n\",\n    \"                               s[keep,None],\\n\",\n    \"                               out['labels'][keep,None].cpu().numpy()], 1)\\n\",\n    \"        tracker.update(dets, bgr)\\n\",\n    \"        tracker.plot_results(bgr, show_trajectories=True)\\n\",\n    \"        cv2.imshow('BoXMOT + Torchvision', bgr)\\n\",\n    \"        if cv2.waitKey(1) & 0xFF == ord('q'): break\\n\",\n    \"cap.release(); cv2.destroyAllWindows()\\n\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"boxmot-YDNZdsaB-py3.11\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/det/yolox_boxmot.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pip install yolox --no-deps  # onnxruntime==1.8.0 is putdated, hence --no-deps\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pathlib import Path\\n\",\n    \"\\n\",\n    \"import cv2\\n\",\n    \"import gdown\\n\",\n    \"import numpy as np\\n\",\n    \"import torch\\n\",\n    \"from yolox.exp import get_exp\\n\",\n    \"from yolox.utils import postprocess\\n\",\n    \"from yolox.utils.model_utils import fuse_model\\n\",\n    \"\\n\",\n    \"from boxmot import BotSort\\n\",\n    \"from boxmot.utils.ops import yolox_preprocess\\n\",\n    \"\\n\",\n    \"# Dictionary for YOLOX model weights URLs\\n\",\n    \"YOLOX_ZOO = {\\n\",\n    \"    'yolox_n.pt': 'https://drive.google.com/uc?id=1AoN2AxzVwOLM0gJ15bcwqZUpFjlDV1dX',\\n\",\n    \"    'yolox_s.pt': 'https://drive.google.com/uc?id=1uSmhXzyV1Zvb4TJJCzpsZOIcw7CCJLxj',\\n\",\n    \"    'yolox_m.pt': 'https://drive.google.com/uc?id=11Zb0NN_Uu7JwUd9e6Nk8o2_EUfxWqsun',\\n\",\n    \"    'yolox_l.pt': 'https://drive.google.com/uc?id=1XwfUuCBF4IgWBWK2H7oOhQgEj9Mrb3rz',\\n\",\n    \"    'yolox_x.pt': 'https://drive.google.com/uc?id=1P4mY0Yyd3PPTybgZkjMYhFri88nTmJX5',\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"# Preprocessing pipeline\\n\",\n    \"input_size = [800, 1440]\\n\",\n    \"device = torch.device('cpu')\\n\",\n    \"yolox_model = 'yolox_s.pt'\\n\",\n    \"yolox_model_path = Path(yolox_model)\\n\",\n    \"\\n\",\n    \"# Download model if not present\\n\",\n    \"if not yolox_model_path.exists():\\n\",\n    \"    gdown.download(YOLOX_ZOO[yolox_model], output=str(yolox_model_path), quiet=False)\\n\",\n    \"\\n\",\n    \"# Initialize YOLOX model\\n\",\n    \"exp = get_exp(None, 'yolox_s')\\n\",\n    \"exp.num_classes = 1\\n\",\n    \"ckpt = torch.load(yolox_model_path, map_location=device)\\n\",\n    \"\\n\",\n    \"model = exp.get_model()\\n\",\n    \"model.load_state_dict(ckpt[\\\"model\\\"])\\n\",\n    \"model = fuse_model(model).to(device).eval()\\n\",\n    \"\\n\",\n    \"# Initialize tracker\\n\",\n    \"tracker = BotSort(reid_weights=Path('osnet_x0_25_msmt17.pt'), device=device, half=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Video capture setup\\n\",\n    \"vid = cv2.VideoCapture(0)\\n\",\n    \"\\n\",\n    \"while True:\\n\",\n    \"    ret, frame = vid.read()\\n\",\n    \"    if not ret:\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"    # Preprocess frame\\n\",\n    \"    frame_img, ratio = yolox_preprocess(frame, input_size=input_size)\\n\",\n    \"    frame_tensor = torch.Tensor(frame_img).unsqueeze(0).to(device)\\n\",\n    \"\\n\",\n    \"    # Detection with YOLOX\\n\",\n    \"    with torch.no_grad():\\n\",\n    \"        dets = model(frame_tensor)\\n\",\n    \"    dets = postprocess(dets, 1, 0.5, 0.7, class_agnostic=True)[0]\\n\",\n    \"\\n\",\n    \"    if dets is not None:\\n\",\n    \"        # Rescale coordinates from letterbox back to the original frame size\\n\",\n    \"        dets[:, 0] = (dets[:, 0]) / ratio\\n\",\n    \"        dets[:, 1] = (dets[:, 1]) / ratio\\n\",\n    \"        dets[:, 2] = (dets[:, 2]) / ratio\\n\",\n    \"        dets[:, 3] = (dets[:, 3]) / ratio\\n\",\n    \"        dets[:, 4] *= dets[:, 5]\\n\",\n    \"        dets = dets[:, [0, 1, 2, 3, 4, 6]].cpu().numpy()\\n\",\n    \"    else:\\n\",\n    \"        dets = np.empty((0, 6))\\n\",\n    \"\\n\",\n    \"    # Update tracker\\n\",\n    \"    res = tracker.update(dets, frame)\\n\",\n    \"\\n\",\n    \"    # Plot results and display\\n\",\n    \"    tracker.plot_results(frame, show_trajectories=True)\\n\",\n    \"    cv2.imshow('BoXMOT + YOLOX', frame)\\n\",\n    \"\\n\",\n    \"    if cv2.waitKey(1) & 0xFF == ord('q'):\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"# Release resources\\n\",\n    \"vid.release()\\n\",\n    \"cv2.destroyAllWindows()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"boxmot-YDNZdsaB-py3.11\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/pose/torchvision_boxmot.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pathlib import Path\\n\",\n    \"\\n\",\n    \"import cv2\\n\",\n    \"import numpy as np\\n\",\n    \"import torch\\n\",\n    \"import torchvision\\n\",\n    \"\\n\",\n    \"from boxmot import BotSort\\n\",\n    \"\\n\",\n    \"# Load a pre-trained Keypoint R-CNN model from torchvision\\n\",\n    \"device = torch.device('cpu')  # Change to 'cuda' if you have a GPU available\\n\",\n    \"pose_model = torchvision.models.detection.keypointrcnn_resnet50_fpn(pretrained=True)\\n\",\n    \"pose_model.eval().to(device)\\n\",\n    \"\\n\",\n    \"tracker = BotSort(\\n\",\n    \"    reid_weights=Path('osnet_x0_25_msmt17.pt'),  # ReID model to use\\n\",\n    \"    device=device,\\n\",\n    \"    half=False,\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"# Open the video file\\n\",\n    \"vid = cv2.VideoCapture(0)\\n\",\n    \"\\n\",\n    \"# Function to generate a unique color for each track ID\\n\",\n    \"def get_color(track_id):\\n\",\n    \"    np.random.seed(int(track_id))\\n\",\n    \"    return tuple(np.random.randint(0, 255, 3).tolist())\\n\",\n    \"\\n\",\n    \"while True:\\n\",\n    \"    ret, im = vid.read()\\n\",\n    \"    if not ret:\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"    # Convert frame to tensor and move to device\\n\",\n    \"    frame_tensor = torchvision.transforms.functional.to_tensor(im).unsqueeze(0).to(device)\\n\",\n    \"\\n\",\n    \"    # Run the Keypoint R-CNN model to detect keypoints and bounding boxes\\n\",\n    \"    with torch.no_grad():\\n\",\n    \"        results = pose_model(frame_tensor)[0]\\n\",\n    \"\\n\",\n    \"    # Extract detections (bounding boxes and keypoints)\\n\",\n    \"    dets = []\\n\",\n    \"    keypoints = []\\n\",\n    \"\\n\",\n    \"    confidence_threshold = 0.5\\n\",\n    \"    for i, score in enumerate(results['scores']):\\n\",\n    \"        if score >= confidence_threshold:\\n\",\n    \"            # Extract bounding box and score\\n\",\n    \"            x1, y1, x2, y2 = results['boxes'][i].cpu().numpy()\\n\",\n    \"            conf = score.item()\\n\",\n    \"            cls = results['labels'][i].item()  # Assuming that 'labels' would be person class\\n\",\n    \"            dets.append([x1, y1, x2, y2, conf, cls])\\n\",\n    \"\\n\",\n    \"            # Extract keypoints\\n\",\n    \"            keypoint = results['keypoints'][i].cpu().numpy().tolist()\\n\",\n    \"            keypoints.append(keypoint)\\n\",\n    \"\\n\",\n    \"    # Convert detections to a numpy array (N x (x, y, x, y, conf, cls))\\n\",\n    \"    dets = np.array(dets)\\n\",\n    \"\\n\",\n    \"    # Update tracker with detections and image\\n\",\n    \"    tracks = tracker.update(dets, im)  # M x (x, y, x, y, id, conf, cls, ind)\\n\",\n    \"\\n\",\n    \"    if len(tracks) > 0:\\n\",\n    \"        inds = tracks[:, 7].astype('int')  # Get track indices as int\\n\",\n    \"\\n\",\n    \"        # Use the indices to match tracks with keypoints\\n\",\n    \"        keypoints = [keypoints[i] for i in inds if i < len(keypoints)]  # Reorder keypoints to match the tracks\\n\",\n    \"\\n\",\n    \"        # Draw bounding boxes and keypoints in the same loop\\n\",\n    \"        for i, track in enumerate(tracks):\\n\",\n    \"            x1, y1, x2, y2, track_id, conf, cls = track[:7].astype('int')\\n\",\n    \"            color = get_color(track_id)\\n\",\n    \"\\n\",\n    \"            # Draw bounding box with unique color\\n\",\n    \"            cv2.rectangle(im, (x1, y1), (x2, y2), color, 2)\\n\",\n    \"\\n\",\n    \"            # Add text with ID, confidence, and class\\n\",\n    \"            cv2.putText(im, f'ID: {track_id}, Conf: {conf:.2f}, Class: {cls}', \\n\",\n    \"                        (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)\\n\",\n    \"\\n\",\n    \"            # Draw keypoints for the corresponding track\\n\",\n    \"            if i < len(keypoints):\\n\",\n    \"                kp = keypoints[i]\\n\",\n    \"                for point in kp:\\n\",\n    \"                    x, y, confidence = int(point[0]), int(point[1]), point[2]\\n\",\n    \"                    if confidence > 0.5:  # Only draw keypoints with confidence > 0.5\\n\",\n    \"                        cv2.circle(im, (x, y), 3, color, -1)  # Draw keypoints in the color of the corresponding track\\n\",\n    \"\\n\",\n    \"    # Display the image\\n\",\n    \"    cv2.imshow('Pose Tracking', im)\\n\",\n    \"\\n\",\n    \"    # Break on pressing q or space\\n\",\n    \"    key = cv2.waitKey(1) & 0xFF\\n\",\n    \"    if key == ord(' ') or key == ord('q'):\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"vid.release()\\n\",\n    \"cv2.destroyAllWindows()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"boxmot-YDNZdsaB-py3.11\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/seg/torchvision_boxmot.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pathlib import Path\\n\",\n    \"\\n\",\n    \"import cv2\\n\",\n    \"import numpy as np\\n\",\n    \"import torch\\n\",\n    \"import torchvision\\n\",\n    \"\\n\",\n    \"from boxmot import BotSort\\n\",\n    \"\\n\",\n    \"# Load a pre-trained Mask R-CNN model from torchvision\\n\",\n    \"device = torch.device('cpu')  # Change to 'cuda' if you have a GPU available\\n\",\n    \"segmentation_model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)\\n\",\n    \"segmentation_model.eval().to(device)\\n\",\n    \"\\n\",\n    \"tracker = BotSort(\\n\",\n    \"    reid_weights=Path('osnet_x0_25_msmt17.pt'),  # ReID model to use\\n\",\n    \"    device=device,\\n\",\n    \"    half=False,\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"# Open the video file\\n\",\n    \"vid = cv2.VideoCapture(0)\\n\",\n    \"\\n\",\n    \"# Function to generate a unique color for each track ID\\n\",\n    \"def get_color(track_id):\\n\",\n    \"    np.random.seed(int(track_id))\\n\",\n    \"    return tuple(np.random.randint(0, 255, 3).tolist())\\n\",\n    \"\\n\",\n    \"while True:\\n\",\n    \"    ret, im = vid.read()\\n\",\n    \"    if not ret:\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"    # Convert frame to tensor and move to device\\n\",\n    \"    frame_tensor = torchvision.transforms.functional.to_tensor(im).unsqueeze(0).to(device)\\n\",\n    \"\\n\",\n    \"    # Run the Mask R-CNN model to detect bounding boxes and masks\\n\",\n    \"    with torch.no_grad():\\n\",\n    \"        results = segmentation_model(frame_tensor)[0]\\n\",\n    \"\\n\",\n    \"    # Extract detections (bounding boxes, masks, and scores)\\n\",\n    \"    dets = []\\n\",\n    \"    masks = []\\n\",\n    \"    confidence_threshold = 0.5\\n\",\n    \"\\n\",\n    \"    for i, score in enumerate(results['scores']):\\n\",\n    \"        if score >= confidence_threshold:\\n\",\n    \"            # Extract bounding box and score\\n\",\n    \"            x1, y1, x2, y2 = results['boxes'][i].cpu().numpy()\\n\",\n    \"            conf = score.item()\\n\",\n    \"            cls = results['labels'][i].item()  # Assuming 'labels' represents the class\\n\",\n    \"            dets.append([x1, y1, x2, y2, conf, cls])\\n\",\n    \"\\n\",\n    \"            # Extract mask and add to list\\n\",\n    \"            mask = results['masks'][i, 0].cpu().numpy()  # Use the first channel (binary mask)\\n\",\n    \"            masks.append(mask)\\n\",\n    \"\\n\",\n    \"    # Convert detections to a numpy array (N x (x, y, x, y, conf, cls))\\n\",\n    \"    dets = np.array(dets)\\n\",\n    \"\\n\",\n    \"    # Update tracker with detections and image\\n\",\n    \"    tracks = tracker.update(dets, im)  # M x (x, y, x, y, id, conf, cls, ind)\\n\",\n    \"\\n\",\n    \"    # Draw segmentation masks and bounding boxes in a single loop\\n\",\n    \"    if len(tracks) > 0:\\n\",\n    \"        inds = tracks[:, 7].astype('int')  # Get track indices as int\\n\",\n    \"\\n\",\n    \"        # Use the indices to match tracks with masks\\n\",\n    \"        if len(masks) > 0:\\n\",\n    \"            masks = [masks[i] for i in inds if i < len(masks)]  # Reorder masks to match the tracks\\n\",\n    \"\\n\",\n    \"        # Iterate over tracks and corresponding masks to draw them together\\n\",\n    \"        for track, mask in zip(tracks, masks):\\n\",\n    \"            track_id = int(track[4])  # Extract track ID\\n\",\n    \"            color = get_color(track_id)  # Use unique color for each track\\n\",\n    \"            \\n\",\n    \"            # Draw the segmentation mask on the image\\n\",\n    \"            if mask is not None:\\n\",\n    \"                # Binarize the mask\\n\",\n    \"                mask = (mask > 0.5).astype(np.uint8)\\n\",\n    \"                \\n\",\n    \"                # Blend mask color with the image\\n\",\n    \"                im[mask == 1] = im[mask == 1] * 0.5 + np.array(color) * 0.5\\n\",\n    \"\\n\",\n    \"            # Draw the bounding box\\n\",\n    \"            x1, y1, x2, y2 = track[:4].astype('int')\\n\",\n    \"            cv2.rectangle(im, (x1, y1), (x2, y2), color, 2)\\n\",\n    \"            \\n\",\n    \"            # Add text with ID, confidence, and class\\n\",\n    \"            conf = track[5]\\n\",\n    \"            cls = track[6]\\n\",\n    \"            cv2.putText(im, f'ID: {track_id}, Conf: {conf:.2f}, Class: {cls}', \\n\",\n    \"                        (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)\\n\",\n    \"\\n\",\n    \"    # Display the image\\n\",\n    \"    cv2.imshow('Segmentation Tracking', im)\\n\",\n    \"\\n\",\n    \"    # Break on pressing q or space\\n\",\n    \"    key = cv2.waitKey(1) & 0xFF\\n\",\n    \"    if key == ord(' ') or key == ord('q'):\\n\",\n    \"        break\\n\",\n    \"\\n\",\n    \"vid.release()\\n\",\n    \"cv2.destroyAllWindows()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"boxmot-YDNZdsaB-py3.11\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "mkdocs.yml",
    "content": "site_name: \"\"\ntheme:\n  name: material\n  logo: logo/logo.png\n  features:\n    - navigation.sections\n    - navigation.expand\n\nmarkdown_extensions:\n  - mkdocs-click\n  - md_in_html\n  - pymdownx.highlight:\n      anchor_linenums: true\n      line_spans: __span\n      pygments_lang_class: true\n  - pymdownx.inlinehilite\n  - pymdownx.snippets\n  - pymdownx.superfences\n\nplugins:\n  - search\n  - include-markdown\n  - mkdocstrings:\n      handlers:\n        python:\n          options:\n            selection:\n              members: \"__all__\"\n              filters:\n                - \"!^update$\"\n\nnav:\n  - Home: index.md\n  - Quickstart: quickstart.md\n  - CLI:\n      - Track:        modes/track.md\n      - Generate:     modes/generate.md\n      - Evaluate:     modes/eval.md\n      - Tune:         modes/tune.md\n  - Trackers:\n      - ByteTrack:    trackers/bytetrack.md\n      - BotSort:      trackers/botsort.md\n      - SFSORT:       trackers/sfsort.md\n      - StrongSort:   trackers/strongsort.md\n      - OcSort:       trackers/ocsort.md\n      - DeepOcSort:   trackers/deepocsort.md\n      # - HybridSort:   api/trackers/hybridsort.md\n      - BoostTrack:   trackers/boosttrack.md\n"
  },
  {
    "path": "pyproject.toml",
    "content": "# =====================================================\n# pyproject.toml for BoxMOT\n# =====================================================\n\n#########################\n# UV-specific Overrides #\n#########################\n\n# Override yolox's outdated dependencies\n[[tool.uv.dependency-metadata]]\nname          = \"yolox\"\nversion       = \"0.3.0\"\nrequires-dist = [\n  \"onnx>=1.17.0\",\n  \"onnxsim>=0.4.33,<0.5 ; python_version < '3.12'\",\n  \"onnxsim-prebuilt>=0.4.36.post1 ; python_version >= '3.12'\",\n  \"tabulate\",\n]\n\n############\n# Flake8   #\n############\n\n[tool.uv.extra-build-dependencies]\nyolox = [\"setuptools\", \"torch<3.0.0,>=2.2.1\"]\n[tool.ruff]\nline-length = 120\nexclude = [\".tox\", \"*.egg\", \"build\", \"temp\"]\n\n[tool.ruff.lint]\nselect = [\"E\", \"W\", \"F\", \"I\"]\nignore = [\"E731\", \"F405\", \"E402\", \"W504\", \"W605\", \"E741\"]\n\n##############\n# Build System #\n##############\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n###########\n# Project #\n###########\n\n[project]\nname            = \"boxmot\"\nversion         = \"16.0.11\"\ndescription     = \"BoxMOT: pluggable SOTA tracking modules for segmentation, object detection and pose estimation models\"\nreadme          = \"README.md\"\nrequires-python = \">=3.9,<3.13\"\nlicense         = { text = \"AGPL-3.0\" }\n\nauthors = [\n  { name = \"Mikel Broström\" },\n]\n\nclassifiers = [\n  \"Development Status :: 4 - Beta\",\n  \"Intended Audience :: Developers\",\n  \"Intended Audience :: Education\",\n  \"Intended Audience :: Science/Research\",\n  \"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)\",\n  \"Programming Language :: Python :: 3\",\n  \"Programming Language :: Python :: 3.9\",\n  \"Programming Language :: Python :: 3.10\",\n  \"Programming Language :: Python :: 3.11\",\n  \"Programming Language :: Python :: 3.12\",\n  \"Topic :: Software Development\",\n  \"Topic :: Scientific/Engineering\",\n  \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n  \"Topic :: Scientific/Engineering :: Image Recognition\",\n  \"Topic :: Scientific/Engineering :: Image Processing\",\n]\n\nkeywords = [\n  \"tracking\",\n  \"tracking-by-detection\",\n  \"machine-learning\",\n  \"deep-learning\",\n  \"vision\",\n  \"ML\",\n  \"DL\",\n  \"AI\",\n  \"YOLO\",\n]\n\ndependencies = [\n  # Kalman filters for motion models (SORT/OCSort/HybridSort)\n  \"filterpy<2.0.0,>=1.4.5\",\n  # Download pretrained weights/checkpoints from Google Drive\n  \"gdown<6.0.0,>=5.1.0\",\n  # Fast LAP/Hungarian solver for data association\n  \"lapx<1.0.0,>=0.5.5\",\n  \"loguru<1.0.0,>=0.7.2\",\n  \"numpy\",\n  \"regex<2025.0.0,>=2024.0.0\",\n\n  \"scikit-learn<2.0.0,>=1.3.0\",\n  \"pandas<3.0.0,>=2.0.0\",\n  \"opencv-python<5.0.0,>=4.7.0\",\n\n  \"torch>=2.2.1,<3.0.0\",\n  \"torchvision>=0.17.1,<1.0.0\",\n  \"click>=8.1.8\",\n\n  # clip reid needs\n  \"ftfy<7.0.0,>=6.1.3\",\n  \"yacs<1.0.0,>=0.1.8\",\n]\n\n[project.scripts]\nboxmot = \"boxmot.engine.cli:main\"\n\n########################################\n# local-only “dev/test/docs/ci” stacks #\n########################################\n\n[dependency-groups]\ndev  = [\"ipykernel>=6.29.5,<7.0.0\", \"pre-commit>=4.0.1\"]\ntest = [\"pytest>=8.0.2,<10.0.0\", \"pytest-cov>=6.0.0,<7.0.0\"]\ndocs = [\n  \"mkdocs>=1.6.1\", \"mkdocs-click>=0.9.0\",\n  \"mkdocs-include-markdown-plugin>=7.1.6\",\n  \"mkdocs-material>=9.6.15\",\n  \"mkdocstrings>=0.30.0\", \"mkdocstrings-python>=1.16.12\",\n]\n\n#############################\n# runtime / feature toggles #\n#############################\n\n[project.optional-dependencies]\nyolo = [\n  \"ultralytics>=3.8.200\",\n  \"yolox==0.3.0\",\n]\n\nevolve = [\n  \"ray[tune]==2.49.2\",\n  \"plotly==5.19.0\",\n  \"bayesian-optimization==2.0.4\",\n  \"optuna==3.5.0\",\n  \"pydantic==2.7.2\"\n]\n\nonnx = [\n  \"onnx==1.17.0 ; python_version < '3.10'\",\n  \"onnx==1.20.1 ; python_version >= '3.10'\",\n  \"onnxruntime==1.18.1 ; python_version < '3.10'\",\n  \"onnxruntime==1.24.3 ; python_version >= '3.10'\",\n  \"onnxslim>=0.1.67\",\n  \"onnxscript>=0.1.0\"\n]\n\nopenvino = [\"openvino>=2025.2.0\"]\n\ntflite = [\n  # onnx2tf flatbuffer_direct stack: only on linux/win, and only on py3.12\n  \"onnx2tf>=2.3.3,<3.0.0 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n\n  \"onnx==1.20.1 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"onnxruntime==1.24.3 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"onnxsim-prebuilt==0.4.39.post2 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"onnxoptimizer==0.4.2 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"sne4onnx>=2.0.1 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"sng4onnx>=2.0.1 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n\n  \"tensorflow==2.19.0 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"tf-keras==2.19.0 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"h5py==3.12.1 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n\n  \"psutil==5.9.5 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"ml-dtypes==0.5.1 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"flatbuffers==25.12.19 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n  \"onnxslim>=0.1.31 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n\n  \"ai-edge-litert==2.1.2 ; python_version >= '3.12' and python_version < '3.13' and (sys_platform == 'linux' or sys_platform == 'win32')\",\n]\n"
  },
  {
    "path": "tests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/performance/__init__.py",
    "content": ""
  },
  {
    "path": "tests/performance/test_cmcs_p.py",
    "content": "import time\n\nimport cv2\nimport numpy as np\nimport pytest\n\nfrom boxmot.motion.cmc.ecc import ECC\nfrom boxmot.motion.cmc.orb import ORB\nfrom boxmot.motion.cmc.sift import SIFT\nfrom boxmot.motion.cmc.sof import SOF\nfrom boxmot.utils import ROOT\n\n\n# Fixture for creating CMC objects\n@pytest.fixture\ndef cmc_object(request):\n    cmc_class = request.param\n    return cmc_class()\n\n\n# Define the test function\n@pytest.mark.parametrize(\"cmc_object\", [ECC, ORB, SIFT, SOF], indirect=True)\ndef test_cmc_apply(cmc_object):\n\n    # Create dummy images and detections\n    curr_img = cv2.imread(\n        str(ROOT / \"assets/MOT17-mini/train/MOT17-04-FRCNN/img1/000005.jpg\")\n    )\n    prev_img = cv2.imread(\n        str(ROOT / \"assets/MOT17-mini/train/MOT17-04-FRCNN/img1/000001.jpg\")\n    )\n\n    print(curr_img.shape)\n    print(prev_img.shape)\n\n    dets = np.array([[0, 0, 10, 10]])\n\n    n_runs = 100\n    start = time.process_time()\n    for i in range(0, n_runs):\n        warp_matrix = cmc_object.apply(prev_img, dets)\n        warp_matrix = cmc_object.apply(curr_img, dets)\n    end = time.process_time()\n    elapsed_time_per_interation = (end - start) / n_runs\n\n    # Define a threshold for the maximum allowed time\n    max_allowed_time = 0.1\n\n    # Assert that the elapsed time is within the allowed limit\n    assert (\n        elapsed_time_per_interation < max_allowed_time\n    ), \"CMC algorithm processing time exceeds the allowed limit\"\n"
  },
  {
    "path": "tests/performance/test_tracking_p.py",
    "content": "import subprocess\nimport time\n\nimport numpy as np\nimport pytest\n\nfrom boxmot import create_tracker, get_tracker_config\nfrom boxmot.utils import WEIGHTS\nfrom tests.test_config import (\n    MOTION_N_APPEARANCE_TRACKING_NAMES,\n    MOTION_ONLY_TRACKING_NAMES,\n)\n\n\n@pytest.mark.parametrize(\"tracker_type\", MOTION_ONLY_TRACKING_NAMES)\ndef test_motion_tracker_update_time(tracker_type):\n    tracker_conf = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=tracker_conf,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=False,\n    )\n\n    rgb = np.random.randint(0, 255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([[144, 212, 578, 480, 0.82, 0],\n                    [425, 281, 576, 472, 0.56, 65]])\n\n    n_runs = 100\n\n    # Warm-up iteration to ensure initialization overhead is not measured\n    tracker.update(det, rgb)\n\n    start = time.perf_counter()\n    for _ in range(n_runs):\n        tracker.update(det, rgb)\n    end = time.perf_counter()\n\n    elapsed_time_per_iteration = (end - start) / n_runs\n    fps = 1.0 / elapsed_time_per_iteration\n\n    # Print FPS for each tracker type\n    print(f\"Tracker type: {tracker_type} - FPS: {fps:.2f}\")\n    result = subprocess.run(\n        \"cat /proc/cpuinfo | grep 'model name' | head -1\",\n        shell=True,\n        capture_output=True,\n        text=True,\n    )\n    print(result.stdout.strip())\n    max_allowed_time = 0.005  # maximum allowed time per iteration in seconds\n\n    assert elapsed_time_per_iteration < max_allowed_time, (\n        f\"Tracking algorithm's processing time per iteration ({elapsed_time_per_iteration:.6f}s) \"\n        f\"exceeds the allowed limit of {max_allowed_time}s.\"\n    )\n\n\n@pytest.mark.parametrize(\"tracker_type\", MOTION_N_APPEARANCE_TRACKING_NAMES)\ndef test_motion_n_appearance_tracker_update_time(tracker_type):\n    tracker_conf = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=tracker_conf,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=False,\n    )\n\n    rgb = np.random.randint(0, 255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([[144, 212, 578, 480, 0.82, 0],\n                    [425, 281, 576, 472, 0.56, 65]])\n\n    n_runs = 100\n\n    # Warm-up iteration to avoid initialization overhead in timing\n    tracker.update(det, rgb)\n\n    start = time.perf_counter()\n    for _ in range(n_runs):\n        tracker.update(det, rgb)\n    end = time.perf_counter()\n\n    elapsed_time_per_iteration = (end - start) / n_runs\n    fps = 1.0 / elapsed_time_per_iteration\n\n    # Print FPS for each tracker type\n    print(f\"Tracker type: {tracker_type} - FPS: {fps:.2f}\")\n    max_allowed_time = 6  # maximum allowed time per iteration in seconds\n\n    assert elapsed_time_per_iteration < max_allowed_time, (\n        f\"Tracking algorithm's processing time per iteration ({elapsed_time_per_iteration:.4f}s) \"\n        f\"exceeds the allowed limit of {max_allowed_time}s.\"\n    )\n"
  },
  {
    "path": "tests/test_config.py",
    "content": "from boxmot import (\n    BoostTrack,\n    BotSort,\n    ByteTrack,\n    DeepOcSort,\n    OcSort,\n    StrongSort,\n    HybridSort,\n    SFSORT,\n)\n\nMOTION_N_APPEARANCE_TRACKING_NAMES = [\n    \"botsort\",\n    \"deepocsort\",\n    \"strongsort\",\n    \"boosttrack\",\n    \"hybridsort\",\n]\nMOTION_ONLY_TRACKING_NAMES = [\"ocsort\", \"bytetrack\", \"sfsort\"]\n\nMOTION_N_APPEARANCE_TRACKING_METHODS = [StrongSort, BotSort, DeepOcSort, BoostTrack, HybridSort]\nMOTION_ONLY_TRACKING_METHODS = [OcSort, ByteTrack, SFSORT]\n\nALL_TRACKERS = [\n    \"botsort\",\n    \"deepocsort\",\n    \"ocsort\",\n    \"bytetrack\",\n    \"sfsort\",\n    \"strongsort\",\n    \"boosttrack\",\n    \"hybridsort\",\n]\nPER_CLASS_TRACKERS = [\n    \"botsort\",\n    \"deepocsort\",\n    \"ocsort\",\n    \"bytetrack\",\n    \"sfsort\",\n    \"boosttrack\",\n    \"hybridsort\",\n]\n"
  },
  {
    "path": "tests/unit/__init__.py",
    "content": ""
  },
  {
    "path": "tests/unit/test_base_backend.py",
    "content": "import numpy as np\nimport torch\nimport cv2\nfrom pathlib import Path\n\nfrom boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.reid.core.registry import ReIDModelRegistry\n\n\nclass DummyBackend(BaseModelBackend):\n    def __init__(self):\n        self.device = torch.device(\"cpu\")\n        self.half = False\n        self.input_shape = (16, 8)\n        self.mean_array = torch.zeros((1, 3, 1, 1), device=self.device)\n        self.std_array = torch.ones((1, 3, 1, 1), device=self.device)\n        self.nhwc = False\n\n    def forward(self, im_batch):\n        return im_batch\n\n    def load_model(self, w):\n        return None\n\n\nclass InitOnlyBackend(BaseModelBackend):\n    def forward(self, im_batch):\n        return im_batch\n\n    def load_model(self, w):\n        self.loaded_weights = Path(w)\n\n\ndef test_boxes_to_xyxy_keeps_aabb_boxes():\n    boxes = np.array([[10, 20, 30, 40, 0.9, 0]], dtype=np.float32)\n\n    xyxy = DummyBackend._boxes_to_xyxy(boxes)\n\n    assert xyxy.shape == (1, 4)\n    np.testing.assert_array_equal(xyxy[0], np.array([10, 20, 30, 40], dtype=np.float32))\n\n\ndef test_boxes_to_xyxy_converts_obb_detections():\n    boxes = np.array([[32, 24, 20, 10, 0.0, 0.9, 0]], dtype=np.float32)\n\n    xyxy = DummyBackend._boxes_to_xyxy(boxes)\n\n    assert xyxy.shape == (1, 4)\n    np.testing.assert_allclose(xyxy[0], np.array([22, 19, 42, 29], dtype=np.float32), atol=1e-4)\n\n\ndef test_boxes_to_xyxy_converts_obb_track_outputs():\n    boxes = np.array([[32, 24, 20, 10, 0.0, 7, 0.9, 0, 5]], dtype=np.float32)\n\n    xyxy = DummyBackend._boxes_to_xyxy(boxes)\n\n    assert xyxy.shape == (1, 4)\n    np.testing.assert_allclose(xyxy[0], np.array([22, 19, 42, 29], dtype=np.float32), atol=1e-4)\n\n\ndef test_get_crops_accepts_obb_boxes():\n    backend = DummyBackend()\n    img = np.zeros((64, 64, 3), dtype=np.uint8)\n    img[19:29, 22:42] = 255\n    boxes = np.array([[32, 24, 20, 10, 0.0]], dtype=np.float32)\n\n    crops = backend.get_crops(boxes, img)\n\n    assert tuple(crops.shape) == (1, 3, 16, 8)\n    assert torch.count_nonzero(crops) > 0\n\n\ndef test_get_crops_rectifies_rotated_obb_boxes():\n    backend = DummyBackend()\n    img = np.zeros((96, 96, 3), dtype=np.uint8)\n    rect = ((48.0, 48.0), (40.0, 20.0), 35.0)\n    corners = cv2.boxPoints(rect).astype(np.int32)\n    cv2.fillConvexPoly(img, corners, (255, 255, 255))\n    box = np.array([[48.0, 48.0, 40.0, 20.0, np.deg2rad(35.0)]], dtype=np.float32)\n\n    crops = backend.get_crops(box, img)\n    crop = crops[0].permute(1, 2, 0).cpu().numpy()\n\n    assert tuple(crops.shape) == (1, 3, 16, 8)\n    assert crop.mean() > 0.2\n\n\ndef test_base_backend_preserves_explicit_export_paths(monkeypatch):\n    monkeypatch.setattr(ReIDModelRegistry, \"get_model_name\", lambda _weights: \"osnet_x0_25\")\n    monkeypatch.setattr(ReIDModelRegistry, \"get_nr_classes\", lambda _weights: 1)\n    monkeypatch.setattr(ReIDModelRegistry, \"build_model\", lambda *args, **kwargs: object())\n\n    explicit_path = Path(\"models/osnet_x0_25_msmt17_saved_model/osnet_x0_25_msmt17_float32.tflite\")\n    backend = InitOnlyBackend(explicit_path, torch.device(\"cpu\"), half=False)\n\n    assert backend.weights == explicit_path\n    assert backend.loaded_weights == explicit_path\n"
  },
  {
    "path": "tests/unit/test_cmcs_u.py",
    "content": "import numpy as np\nimport pytest\n\nfrom boxmot.motion.cmc.ecc import ECC\nfrom boxmot.motion.cmc.orb import ORB\nfrom boxmot.motion.cmc.sift import SIFT\nfrom boxmot.motion.cmc.sof import SOF\n\n\n# Fixture for creating CMC objects\n@pytest.fixture\ndef cmc_object(request):\n    cmc_class = request.param\n    return cmc_class()\n\n\n# Define the test function\n@pytest.mark.parametrize(\"cmc_object\", [ECC, ORB, SIFT, SOF], indirect=True)\ndef test_cmc_apply(cmc_object):\n    # Create dummy images and detections\n    prev_img = np.zeros((100, 100, 3), dtype=np.uint8)\n    dets = np.array([[0, 0, 10, 10]])\n    # Apply the CMC algorithm\n    result = cmc_object.apply(prev_img, dets)\n    # Assert the type of result\n    assert isinstance(result, np.ndarray)\n\n\n# Test preprocessing function\n@pytest.mark.parametrize(\"cmc_object\", [ECC, ORB, SIFT, SOF], indirect=True)\ndef test_cmc_preprocess(cmc_object):\n    # Create a dummy image\n    img = np.zeros((200, 200, 3), dtype=np.uint8)\n    processed_img = cmc_object.preprocess(img)\n    # Assert the shape of the processed image, scale is 0.1 by default\n    assert processed_img.shape == (30, 30)\n\n\n# Test apply function with empty detections\n@pytest.mark.parametrize(\"cmc_object\", [ECC, ORB, SIFT, SOF], indirect=True)\ndef test_cmc_apply_empty_detections(cmc_object):\n    # Create dummy images and empty detections\n    prev_img = np.zeros((100, 100, 3), dtype=np.uint8)\n    dets = np.array([])\n    # Apply the CMC algorithm\n    result = cmc_object.apply(prev_img, dets)\n    # Assert that result is an identity matrix\n    assert np.array_equal(result, np.eye(2, 3, dtype=np.float32))\n"
  },
  {
    "path": "tests/unit/test_cuda.py",
    "content": "from pathlib import Path\n\nimport pytest\nimport torch\n\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\n\nREID_MODELS = [\n    Path(\"mobilenetv2_x1_0_market1501.pt\"),\n]\n\n\n@pytest.mark.parametrize(\"reid_model\", REID_MODELS)\ndef test_reidbackend_device(reid_model):\n\n    device = \"cuda:0\" if torch.cuda.is_available() else \"cpu\"\n\n    rab = ReidAutoBackend(weights=reid_model, device=device, half=False)\n    r = rab.get_backend()\n\n    if torch.cuda.is_available():\n        assert next(r.model.parameters()).is_cuda\n    else:\n        assert next(r.model.parameters()).device.type == \"cpu\"\n\n\n@pytest.mark.parametrize(\"reid_model\", REID_MODELS)\ndef test_reidbackend_half(reid_model):\n\n    half = True if torch.cuda.is_available() else False\n    device = \"cuda:0\" if torch.cuda.is_available() else \"cpu\"\n    rab = ReidAutoBackend(weights=reid_model, device=device, half=False)\n    r = rab.get_backend()\n\n    if device == \"cpu\":\n        expected_dtype = torch.float32\n    else:\n        expected_dtype = torch.float16\n    actual_dtype = next(r.model.parameters()).dtype\n    assert actual_dtype == expected_dtype\n"
  },
  {
    "path": "tests/unit/test_dataloader.py",
    "content": "import pytest\nimport numpy as np\nimport configparser\nimport cv2\nfrom pathlib import Path\nfrom boxmot.utils.dataloaders.dataset import (\n    read_seq_fps,\n    compute_fps_mask,\n    MOTDataset,\n    MOTSequence,\n)\n\n\ndef test_read_seq_fps(tmp_path):\n    # create a seqinfo.ini\n    seq_dir = tmp_path / \"SEQ01\"\n    seq_dir.mkdir()\n    cfg = configparser.ConfigParser()\n    cfg[\"Sequence\"] = {\"frameRate\": \"30\"}\n    with open(seq_dir / \"seqinfo.ini\", \"w\") as f:\n        cfg.write(f)\n\n    assert read_seq_fps(seq_dir) == 30\n\n    # missing file should raise\n    with pytest.raises(FileNotFoundError):\n        read_seq_fps(tmp_path / \"NONEXISTENT\")\n\n\ndef test_compute_fps_mask():\n    frames = np.arange(1, 7)  # [1,2,3,4,5,6]\n    # downsample from 6→3 fps => step=2 → keep [1,3,5]\n    mask = compute_fps_mask(frames, orig_fps=6, target_fps=3)\n    assert mask.dtype == bool\n    assert frames[mask].tolist() == [1, 3, 5]\n\n\n@pytest.fixture\ndef simple_sequence(tmp_path):\n    \"\"\"\n    Create a minimal MOT sequence structure:\n      seq_dir/\n        img1/000001.jpg, 000002.jpg\n        seqinfo.ini (fps 2)\n        gt/gt.txt\n      det_emb_root/model/dets/SEQ.txt\n      det_emb_root/model/embs/reid/SEQ.txt\n    \"\"\"\n    # seq dir & images\n    seq_dir = tmp_path / \"SEQ\"\n    img_dir = seq_dir / \"img1\"\n    gt_dir = seq_dir / \"gt\"\n    img_dir.mkdir(parents=True)\n    gt_dir.mkdir()\n    # write two dummy images\n    img = np.zeros((8, 8, 3), np.uint8)\n    for i in (1, 2):\n        cv2.imwrite(str(img_dir / f\"{i:06d}.jpg\"), img)\n\n    # seqinfo.ini fps=2\n    cfg = configparser.ConfigParser()\n    cfg[\"Sequence\"] = {\"frameRate\": \"2\"}\n    with open(seq_dir / \"seqinfo.ini\", \"w\") as f:\n        cfg.write(f)\n\n    # ground truth with two frames\n    gt = np.array([[1, 0, 0, 0, 0, 0], [2, 1, 1, 1, 1, 1]])\n    np.savetxt(gt_dir / \"gt.txt\", gt, delimiter=\",\")\n\n    # detection + embedding roots\n    det_emb_root = tmp_path / \"runs\"\n    model = det_emb_root / \"model\"\n    det_dir = model / \"dets\"\n    emb_dir = model / \"embs\" / \"reid\"\n    det_dir.mkdir(parents=True)\n    emb_dir.mkdir(parents=True)\n\n    # two det rows (frame_id, x,y,w,h,score)\n    dets = np.array([[1, 0, 0, 1, 1, 0.9], [2, 0, 0, 1, 1, 0.8]])\n    np.savetxt(det_dir / \"SEQ.txt\", dets, fmt=\"%f\")\n\n    # two 128-d embeddings\n    embs = np.vstack([np.arange(128), np.arange(128)])\n    np.savetxt(emb_dir / \"SEQ.txt\", embs, fmt=\"%f\")\n\n    return {\n        \"mot_root\": tmp_path,\n        \"det_emb_root\": det_emb_root,\n        \"model_name\": \"model\",\n        \"reid_name\": \"reid\",\n        \"seq_name\": \"SEQ\",\n        \"seq_dir\": seq_dir,\n    }\n\n\ndef test_dataset_indexing_and_iteration(simple_sequence):\n    ds = MOTDataset(\n        mot_root=str(simple_sequence[\"mot_root\"]),\n        det_emb_root=str(simple_sequence[\"det_emb_root\"]),\n        model_name=simple_sequence[\"model_name\"],\n        reid_name=simple_sequence[\"reid_name\"],\n        target_fps=None,\n    )\n    # sequence_names\n    assert simple_sequence[\"seq_name\"] in ds.sequence_names()\n\n    # get_sequence yields 2 frames in order\n    seq = ds.get_sequence(simple_sequence[\"seq_name\"])\n    out = list(seq)\n    assert len(out) == 2\n    for idx, frame in enumerate(out, start=1):\n        assert frame[\"frame_id\"] == idx\n        assert frame[\"img\"].shape == (8, 8, 3)\n        # without downsampling, dets and embs should match original\n        assert frame[\"dets\"].shape[0] == 1\n        assert frame[\"embs\"].shape == (1, 128)\n\n\ndef test_unknown_sequence_raises(simple_sequence):\n    ds = MOTDataset(mot_root=str(simple_sequence[\"mot_root\"]))\n    with pytest.raises(KeyError):\n        _ = ds.get_sequence(\"DOES_NOT_EXIST\")\n\n\ndef test_mismatched_dets_embs_raise(tmp_path, simple_sequence):\n    # overwrite embeddings with only one row\n    emb_file = (\n        tmp_path\n        / \"runs\"\n        / \"model\"\n        / \"embs\"\n        / \"reid\"\n        / \"SEQ.txt\"\n    )\n    one_emb = np.arange(128)\n    np.savetxt(emb_file, one_emb[None, :], fmt=\"%f\")\n\n    with pytest.raises(ValueError):\n        MOTDataset(\n            mot_root=str(simple_sequence[\"mot_root\"]),\n            det_emb_root=str(simple_sequence[\"det_emb_root\"]),\n            model_name=simple_sequence[\"model_name\"],\n            reid_name=simple_sequence[\"reid_name\"],\n            target_fps=None,\n        ).get_sequence(simple_sequence[\"seq_name\"])\n\n\ndef test_fps_downsampling_and_gt_temp(tmp_path):\n    # manually create minimal sequence as before\n    seq_dir = tmp_path / \"S\"\n    img_dir = seq_dir / \"img1\"\n    gt_dir = seq_dir / \"gt\"\n    img_dir.mkdir(parents=True)\n    gt_dir.mkdir()\n\n    # two dummy images\n    img = np.zeros((4, 4, 3), np.uint8)\n    for i in (1, 2):\n        cv2.imwrite(str(img_dir / f\"{i:06d}.jpg\"), img)\n\n    # seqinfo.ini fps=2\n    cfg = configparser.ConfigParser()\n    cfg[\"Sequence\"] = {\"frameRate\": \"2\"}\n    with open(seq_dir / \"seqinfo.ini\", \"w\") as f:\n        cfg.write(f)\n\n    # ground truth with two rows\n    gt = np.array([[1, 9], [2, 8]])\n    np.savetxt(gt_dir / \"gt.txt\", gt, delimiter=\",\", fmt=\"%d\")\n\n    # create dets/embs with both frames\n    det_emb_root = tmp_path / \"R\"\n    det_dir = det_emb_root / \"M\" / \"dets\"\n    emb_dir = det_emb_root / \"M\" / \"embs\" / \"R\"\n    det_dir.mkdir(parents=True)\n    emb_dir.mkdir(parents=True)\n    dets = np.array([[1, 0, 0, 1, 1, 0.5], [2, 0, 0, 1, 1, 0.4]])\n    embs = np.vstack([np.arange(128), np.arange(128)])\n    np.savetxt(det_dir / \"S.txt\", dets, fmt=\"%f\")\n    np.savetxt(emb_dir / \"S.txt\", embs, fmt=\"%f\")\n\n    # instantiate and trigger downsampling & gt_temp write\n    ds = MOTDataset(\n        mot_root=str(tmp_path),\n        det_emb_root=str(det_emb_root),\n        model_name=\"M\",\n        reid_name=\"R\",\n        target_fps=1,\n    )\n    _ = ds.get_sequence(\"S\")  # triggers prep\n\n    # load gt_temp.txt (numpy.loadtxt returns 1d for single row)\n    gt_temp = np.loadtxt(seq_dir / \"gt\" / \"gt_temp.txt\", delimiter=\",\")\n\n    # ensure only frame 1 remains\n    # handle single-row vs 2d output\n    if gt_temp.ndim == 1:\n        # single row array\n        assert gt_temp[0] == 1 and gt_temp[1] == 9\n    else:\n        assert gt_temp.shape == (1, 2)\n        assert gt_temp[0, 0] == 1 and gt_temp[0, 1] == 9\n\n"
  },
  {
    "path": "tests/unit/test_exporters_dynamic.py",
    "content": "import types\nimport sys\nfrom pathlib import Path\n\nimport pytest\nimport torch\n\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.reid.exporters.onnx_exporter import ONNXExporter\nfrom boxmot.utils import ROOT, WEIGHTS\nfrom boxmot.utils.checks import RequirementsChecker\n\n\ndef _load_existing_osnet_model_and_input(batch_size=2):\n    candidates = [\n        ROOT / \"osnet_x0_25_msmt17.pt\",\n        WEIGHTS / \"osnet_x0_25_msmt17.pt\",\n    ]\n    weights = next((p for p in candidates if p.exists()), None)\n    if weights is None:\n        pytest.skip(\"Missing osnet_x0_25_msmt17.pt in repository root or engine/weights.\")\n\n    backend = ReidAutoBackend(weights=weights, device=\"cpu\", half=False)\n    model = backend.model.model.eval()\n    im = torch.randn(batch_size, 3, 256, 128)\n    return model, im\n\n\ndef _install_fake_onnx(monkeypatch):\n    fake_onnx_model = types.SimpleNamespace(ir_version=9)\n    fake_onnx = types.SimpleNamespace(\n        __version__=\"0.0-test\",\n        defs=types.SimpleNamespace(onnx_opset_version=lambda: 18),\n        checker=types.SimpleNamespace(check_model=lambda _m: None),\n        load=lambda _p: fake_onnx_model,\n        save=lambda _m, _p: None,\n    )\n    monkeypatch.setitem(sys.modules, \"onnx\", fake_onnx)\n\n\ndef _disable_dep_sync(monkeypatch):\n    monkeypatch.setattr(RequirementsChecker, \"sync_extra\", lambda *args, **kwargs: None)\n\n\n@pytest.mark.parametrize(\"batch_size\", [1, 2, 4])\ndef test_onnx_export_dynamic_uses_dynamic_shapes(monkeypatch, tmp_path, batch_size):\n    _disable_dep_sync(monkeypatch)\n    _install_fake_onnx(monkeypatch)\n\n    calls = []\n\n    def fake_export(model, args, f, **kwargs):\n        calls.append((args, kwargs))\n        Path(f).touch()\n\n    monkeypatch.setattr(torch.onnx, \"export\", fake_export)\n\n    model, im = _load_existing_osnet_model_and_input(batch_size=batch_size)\n    out_file = tmp_path / \"osnet_x0_25_msmt17.pt\"\n\n    exporter = ONNXExporter(model, im, out_file, opset=17, dynamic=True, half=False, simplify=False)\n    exported = exporter.export()\n\n    assert exported == out_file.with_suffix(\".onnx\")\n    assert len(calls) == 1\n    export_args, export_kwargs = calls[0]\n    assert export_args[0].shape[0] == batch_size\n    assert \"dynamic_shapes\" in export_kwargs\n    assert \"dynamic_axes\" not in export_kwargs\n\n\n@pytest.mark.parametrize(\"batch_size\", [1, 3])\ndef test_onnx_export_dynamic_fallback_uses_dynamic_axes(monkeypatch, tmp_path, batch_size):\n    _disable_dep_sync(monkeypatch)\n    _install_fake_onnx(monkeypatch)\n\n    calls = []\n\n    def fake_export(model, args, f, **kwargs):\n        calls.append((args, kwargs))\n        if len(calls) == 1:\n            raise RuntimeError(\"force dynamic fallback\")\n        Path(f).touch()\n\n    monkeypatch.setattr(torch.onnx, \"export\", fake_export)\n\n    model, im = _load_existing_osnet_model_and_input(batch_size=batch_size)\n    out_file = tmp_path / \"osnet_x0_25_msmt17.pt\"\n\n    exporter = ONNXExporter(model, im, out_file, opset=17, dynamic=True, half=False, simplify=False)\n    exported = exporter.export()\n\n    assert exported == out_file.with_suffix(\".onnx\")\n    assert len(calls) == 2\n    first_args, first_kwargs = calls[0]\n    second_args, second_kwargs = calls[1]\n    assert first_args[0].shape[0] == batch_size\n    assert second_args[0].shape[0] == batch_size\n    assert \"dynamic_shapes\" in first_kwargs\n    assert \"dynamic_axes\" in second_kwargs\n\n\n@pytest.mark.parametrize(\"batch_size\", [1, 2, 5])\ndef test_onnx_export_static_has_no_dynamic_shapes(monkeypatch, tmp_path, batch_size):\n    _disable_dep_sync(monkeypatch)\n    _install_fake_onnx(monkeypatch)\n\n    calls = []\n\n    def fake_export(model, args, f, **kwargs):\n        calls.append((args, kwargs))\n        Path(f).touch()\n\n    monkeypatch.setattr(torch.onnx, \"export\", fake_export)\n\n    model, im = _load_existing_osnet_model_and_input(batch_size=batch_size)\n    out_file = tmp_path / \"osnet_x0_25_msmt17.pt\"\n\n    exporter = ONNXExporter(model, im, out_file, opset=17, dynamic=False, half=False, simplify=False)\n    exported = exporter.export()\n\n    assert exported == out_file.with_suffix(\".onnx\")\n    assert len(calls) == 1\n    export_args, export_kwargs = calls[0]\n    assert export_args[0].shape[0] == batch_size\n    assert \"dynamic_shapes\" not in export_kwargs\n    assert \"dynamic_axes\" not in export_kwargs\n"
  },
  {
    "path": "tests/unit/test_inference.py",
    "content": "from pathlib import Path\n\nimport numpy as np\n\nfrom boxmot.engine.cli import ensure_model_extension\nfrom boxmot.engine.inference import extract_detections, filter_detections, resolve_yolo_model_path\nfrom boxmot.trackers.ocsort.ocsort import convert_obb_to_z, convert_x_to_obb\nfrom boxmot.trackers.basetracker import BaseTracker\nfrom boxmot.trackers.detection_layout import AABB_DETECTIONS, OBB_DETECTIONS\nfrom boxmot.utils.iou import iou_obb_pair\nfrom boxmot.utils import WEIGHTS\n\n\nclass _TensorWrapper:\n    def __init__(self, array: np.ndarray):\n        self._array = np.asarray(array, dtype=np.float32)\n\n    def cpu(self):\n        return self\n\n    def numpy(self):\n        return self._array\n\n    @property\n    def shape(self):\n        return self._array.shape\n\n\nclass _PredictionWrapper:\n    def __init__(self, array: np.ndarray):\n        self.data = _TensorWrapper(array)\n\n    def __len__(self):\n        return len(self.data.numpy())\n\n\nclass _Result:\n    def __init__(self, boxes=None, obb=None):\n        self.boxes = boxes\n        self.obb = obb\n\n\nclass _DummyTracker(BaseTracker):\n    @BaseTracker.setup_decorator\n    @BaseTracker.per_class_decorator\n    def update(self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray = None) -> np.ndarray:\n        self.check_inputs(dets, img, embs)\n        return np.empty((0, 9 if self.is_obb else 8), dtype=np.float32)\n\n    def _display_groups(self):\n        return []\n\n\nclass _DummyOBBTracker(_DummyTracker):\n    supports_obb = True\n\n\ndef test_extract_detections_reads_aabb_results():\n    boxes = _PredictionWrapper([[1, 2, 3, 4, 0.9, 0]])\n    result = _Result(boxes=boxes)\n\n    dets = extract_detections(result)\n\n    assert dets.shape == (1, 6)\n    np.testing.assert_array_equal(dets[0], np.array([1, 2, 3, 4, 0.9, 0], dtype=np.float32))\n\n\ndef test_extract_detections_reads_obb_results():\n    obb = _PredictionWrapper([[10, 20, 30, 40, 0.5, 0.8, 1]])\n    result = _Result(obb=obb)\n\n    dets = extract_detections(result)\n\n    assert dets.shape == (1, 7)\n    np.testing.assert_array_equal(\n        dets[0],\n        np.array([10, 20, 30, 40, 0.5, 0.8, 1], dtype=np.float32),\n    )\n\n\ndef test_extract_detections_preserves_empty_obb_width():\n    result = _Result(obb=_PredictionWrapper(np.empty((0, 7), dtype=np.float32)))\n\n    dets = extract_detections(result)\n\n    assert dets.shape == (0, 7)\n\n\ndef test_filter_detections_keeps_valid_obb_boxes():\n    dets = np.array(\n        [\n            [100, 100, 20, 10, 0.2, 0.9, 0],\n            [100, 100, 0, 10, 0.2, 0.9, 0],\n        ],\n        dtype=np.float32,\n    )\n\n    filtered = filter_detections(dets, min_area=50.0)\n\n    assert filtered.shape == (1, 7)\n    np.testing.assert_array_equal(filtered[0], dets[0])\n\n\ndef test_tracker_infers_obb_mode_on_empty_followup_frame():\n    tracker = _DummyOBBTracker(asso_func=\"iou\")\n    image = np.zeros((64, 64, 3), dtype=np.uint8)\n    obb_dets = np.array([[32, 32, 20, 10, 0.1, 0.9, 0]], dtype=np.float32)\n\n    tracker.update(obb_dets, image)\n    tracker.update(np.empty((0, 7), dtype=np.float32), image)\n\n    assert tracker.is_obb is True\n    assert tracker.detection_layout is OBB_DETECTIONS\n    assert tracker.asso_func_name == \"iou_obb\"\n\n\ndef test_tracker_layout_helpers_switch_with_detection_mode():\n    tracker = _DummyOBBTracker(asso_func=\"iou\")\n\n    tracker._set_detection_mode(False)\n    assert tracker.detection_layout is AABB_DETECTIONS\n    assert tracker.empty_detections().shape == (0, 6)\n    assert tracker.empty_output().shape == (0, 8)\n\n    tracker._set_detection_mode(True)\n    assert tracker.detection_layout is OBB_DETECTIONS\n    assert tracker.empty_detections().shape == (0, 7)\n    assert tracker.empty_output().shape == (0, 9)\n\n\ndef test_tracker_rejects_obb_when_not_supported():\n    tracker = _DummyTracker(asso_func=\"iou\")\n    image = np.zeros((64, 64, 3), dtype=np.uint8)\n    obb_dets = np.array([[32, 32, 20, 10, 0.1, 0.9, 0]], dtype=np.float32)\n\n    try:\n        tracker.update(obb_dets, image)\n    except AssertionError as exc:\n        assert str(exc) == (\n            \"_DummyTracker does not support OBB detections. \"\n            \"Use an OBB-capable tracker such as ByteTrack, BotSort, OCSort, or SFSORT.\"\n        )\n    else:\n        raise AssertionError(\"Expected unsupported OBB trackers to fail fast\")\n\n\ndef test_ocsort_obb_state_roundtrip_handles_column_vectors():\n    obb = np.array([32, 24, 20, 10, 0.25], dtype=np.float32)\n\n    state = convert_obb_to_z(obb)\n    decoded = convert_x_to_obb(state)\n\n    assert decoded.shape == (1, 5)\n    np.testing.assert_allclose(decoded[0], obb, rtol=1e-6, atol=1e-6)\n\n\ndef test_iou_obb_pair_accepts_column_like_inputs_and_radians():\n    dets = np.array([[32, 24, 20, 10, 0.25, 0.9]], dtype=object)\n    trks = np.array([[32, 24, 20, 10, 0.25, 0.8]], dtype=object)\n\n    iou = iou_obb_pair(0, 0, dets, trks)\n\n    assert iou > 0.99\n\n\ndef test_resolve_yolo_model_path_routes_non_rtdetr_to_weights_dir():\n    resolved = resolve_yolo_model_path(\"yolov8n.pt\")\n\n    assert resolved == WEIGHTS / \"yolov8n.pt\"\n\n\ndef test_resolve_yolo_model_path_keeps_rtdetr_name_without_path_prefix():\n    resolved = resolve_yolo_model_path(\"/tmp/models/rtdetr_v2_r18vd.pt\")\n\n    assert resolved.name == \"rtdetr_v2_r18vd.pt\"\n    assert str(resolved.parent) == \".\"\n\n\ndef test_ensure_model_extension_preserves_explicit_export_paths():\n    model_path = \"models/osnet_x0_25_msmt17_saved_model/osnet_x0_25_msmt17_float32.tflite\"\n\n    resolved = ensure_model_extension(model_path)\n\n    assert resolved == Path(model_path)\n\n\ndef test_ensure_model_extension_keeps_bare_reid_names_in_weights_dir():\n    resolved = ensure_model_extension(\"osnet_x0_25_msmt17\")\n\n    assert resolved == WEIGHTS / \"osnet_x0_25_msmt17.pt\"\n"
  },
  {
    "path": "tests/unit/test_kalman_filters_modes.py",
    "content": "import numpy as np\nimport pytest\n\nfrom boxmot.motion.kalman_filters.xyah import KalmanFilterXYAH\nfrom boxmot.motion.kalman_filters.xyhr import KalmanFilterXYHR\nfrom boxmot.motion.kalman_filters.xysr import KalmanFilterXYSR\nfrom boxmot.motion.kalman_filters.xywh import KalmanFilterXYWH\n\n\ndef _angle_diff(a: float, b: float) -> float:\n    return float((a - b + np.pi) % (2.0 * np.pi) - np.pi)\n\n\n@pytest.mark.parametrize(\n    (\"kf_cls\", \"init_measurement\", \"update_measurement\"),\n    [\n        (\n            KalmanFilterXYWH,\n            np.array([100.0, 80.0, 40.0, 20.0]),\n            np.array([101.0, 79.5, 40.5, 20.5]),\n        ),\n        (\n            KalmanFilterXYAH,\n            np.array([100.0, 80.0, 1.6, 60.0]),\n            np.array([100.5, 80.2, 1.58, 60.1]),\n        ),\n    ],\n)\ndef test_xywh_xyah_support_aabb_mode(kf_cls, init_measurement, update_measurement):\n    kf = kf_cls(ndim=4)\n    mean, covariance = kf.initiate(init_measurement)\n    mean, covariance = kf.predict(mean, covariance)\n    new_mean, new_cov = kf.update(mean, covariance, update_measurement, confidence=0.9)\n\n    assert new_mean.shape == (8,)\n    assert new_cov.shape == (8, 8)\n    assert new_mean[2] > 0 and new_mean[3] > 0\n    assert np.all(np.isfinite(new_mean))\n    assert np.all(np.isfinite(new_cov))\n    distance = kf.gating_distance(new_mean, new_cov, update_measurement[None, :])\n    assert distance.shape == (1,)\n    assert np.isfinite(distance[0])\n\n\n@pytest.mark.parametrize(\n    (\"kf_cls\", \"init_measurement\", \"update_measurement\"),\n    [\n        (\n            KalmanFilterXYWH,\n            np.array([100.0, 80.0, 40.0, 20.0, np.pi - 0.01]),\n            np.array([101.0, 79.5, 40.5, 20.5, -np.pi + 0.02]),\n        ),\n        (\n            KalmanFilterXYAH,\n            np.array([100.0, 80.0, 1.6, 60.0, np.pi - 0.03]),\n            np.array([100.5, 80.2, 1.58, 60.1, -np.pi + 0.01]),\n        ),\n    ],\n)\ndef test_xywh_xyah_support_obb_mode(kf_cls, init_measurement, update_measurement):\n    kf = kf_cls(ndim=5)\n    mean, covariance = kf.initiate(init_measurement)\n    mean, covariance = kf.predict(mean, covariance)\n    new_mean, new_cov = kf.update(mean, covariance, update_measurement, confidence=0.9)\n\n    assert new_mean.shape == (10,)\n    assert new_cov.shape == (10, 10)\n    assert new_mean[2] > 0 and new_mean[3] > 0\n    assert -np.pi <= float(new_mean[4]) < np.pi\n    assert abs(_angle_diff(float(new_mean[4]), update_measurement[4])) < 0.2\n    distance = kf.gating_distance(new_mean, new_cov, update_measurement[None, :])\n    assert distance.shape == (1,)\n    assert np.isfinite(distance[0])\n\n\ndef test_xysr_supports_aabb_mode():\n    kf = KalmanFilterXYSR(dim_x=7, dim_z=4, max_obs=50)\n    init_measurement = np.array([[300.0], [200.0], [50000.0], [1.5]])\n    mean, covariance = kf.initiate(init_measurement)\n    kf.x = mean.copy()\n    kf.P = covariance.copy()\n\n    kf.predict()\n    measurement = np.array([[305.0], [202.0], [50500.0], [1.45]])\n    kf.update(measurement)\n\n    assert kf.x.shape == (7, 1)\n    assert kf.P.shape == (7, 7)\n    assert kf.x[2, 0] > 0 and kf.x[3, 0] > 0\n    assert np.all(np.isfinite(kf.x))\n    assert np.all(np.isfinite(kf.P))\n    assert np.isfinite(kf.md_for_measurement(measurement))\n\n\ndef test_xysr_supports_obb_mode():\n    kf = KalmanFilterXYSR(dim_x=9, dim_z=5, max_obs=50)\n    init_measurement = np.array([[300.0], [200.0], [50000.0], [1.5], [np.pi - 0.01]])\n    mean, covariance = kf.initiate(init_measurement)\n    kf.x = mean.copy()\n    kf.P = covariance.copy()\n\n    kf.predict()\n    measurement = np.array([[305.0], [202.0], [50500.0], [1.45], [-np.pi + 0.02]])\n    kf.update(measurement)\n\n    assert kf.x.shape == (9, 1)\n    assert kf.P.shape == (9, 9)\n    assert kf.x[2, 0] > 0 and kf.x[3, 0] > 0\n    assert -np.pi <= float(kf.x[4, 0]) < np.pi\n    assert abs(float(kf.y[4, 0])) < 0.2\n    assert np.isfinite(float(kf.x[8, 0]))\n    assert abs(float(kf.x[8, 0])) < 0.2\n    assert np.isfinite(kf.md_for_measurement(measurement))\n\n\ndef test_xysr_obb_aligns_equivalent_ratio_angle_forms():\n    kf = KalmanFilterXYSR(dim_x=9, dim_z=5, max_obs=50)\n\n    theta_ref = 0.35\n    init_measurement = np.array([[300.0], [200.0], [50000.0], [2.0], [theta_ref]])\n    mean, covariance = kf.initiate(init_measurement)\n    kf.x = mean.copy()\n    kf.P = covariance.copy()\n\n    kf.predict()\n\n    # Equivalent rectangle representation in XYSR:\n    # r -> 1/r and theta -> theta + pi/2\n    equivalent_measurement = np.array(\n        [[300.5], [199.5], [50050.0], [0.5], [theta_ref + (np.pi / 2.0)]]\n    )\n    kf.update(equivalent_measurement)\n\n    assert abs(_angle_diff(float(kf.x[4, 0]), theta_ref)) < 0.25\n    assert abs(np.log(float(kf.x[3, 0]) / 2.0)) < 0.35\n    assert np.isfinite(float(kf.x[8, 0]))\n    assert abs(float(kf.x[8, 0])) < 0.2\n\n\ndef test_xysr_obb_unfreeze_handles_angle_wrap():\n    kf = KalmanFilterXYSR(dim_x=9, dim_z=5, max_obs=50)\n\n    obs1 = np.array([[300.0], [200.0], [50000.0], [1.5], [np.pi - 0.05]])\n    obs2 = np.array([[320.0], [210.0], [51000.0], [1.4], [-np.pi + 0.04]])\n    obs3 = np.array([[350.0], [230.0], [52000.0], [1.3], [np.pi - 0.02]])\n\n    kf.predict()\n    kf.update(obs1)\n    kf.predict()\n    kf.update(obs2)\n\n    for _ in range(5):\n        kf.predict()\n        kf.update(None)\n\n    kf.predict()\n    kf.update(obs3)\n\n    assert np.all(np.isfinite(kf.x))\n    assert -np.pi <= float(kf.x[4, 0]) < np.pi\n    assert abs(float(kf.y[4, 0])) < 0.3\n\n\ndef test_xysr_unfreeze_with_column_vectors():\n    \"\"\"Regression test for mikel-brostrom/boxmot#2207.\"\"\"\n    kf = KalmanFilterXYSR(dim_x=7, dim_z=4, max_obs=50)\n\n    kf.F = np.eye(7)\n    kf.F[:4, 4:] = np.pad(np.eye(3), ((0, 1), (0, 0)))\n    kf.H = np.zeros((4, 7))\n    kf.H[:4, :4] = np.eye(4)\n    kf.R *= 10.0\n\n    obs1 = np.array([[300.0], [200.0], [50000.0], [1.5]])\n    obs2 = np.array([[320.0], [210.0], [51000.0], [1.4]])\n\n    kf.predict()\n    kf.update(obs1)\n    kf.predict()\n    kf.update(obs2)\n\n    for _ in range(5):\n        kf.predict()\n        kf.update(None)\n\n    obs3 = np.array([[350.0], [230.0], [52000.0], [1.3]])\n    kf.predict()\n    kf.update(obs3)\n\n    state = kf.x.flatten()\n    assert np.all(np.isfinite(state)), f\"State contains non-finite values: {state}\"\n    assert abs(state[0] - 350.0) < 100\n    assert abs(state[1] - 230.0) < 100\n\n\ndef test_xysr_unfreeze_insufficient_history():\n    \"\"\"Guard against missing replay anchors after history truncation.\"\"\"\n    kf = KalmanFilterXYSR(dim_x=7, dim_z=4, max_obs=4)\n\n    kf.F = np.eye(7)\n    kf.F[:4, 4:] = np.pad(np.eye(3), ((0, 1), (0, 0)))\n    kf.H = np.zeros((4, 7))\n    kf.H[:4, :4] = np.eye(4)\n    kf.R *= 10.0\n\n    obs1 = np.array([[300.0], [200.0], [50000.0], [1.5]])\n\n    kf.predict()\n    kf.update(obs1)\n\n    for _ in range(10):\n        kf.predict()\n        kf.update(None)\n\n    obs2 = np.array([[320.0], [210.0], [51000.0], [1.4]])\n    kf.predict()\n    kf.update(obs2)\n\n    state = kf.x.flatten()\n    assert np.all(np.isfinite(state)), f\"State contains non-finite values: {state}\"\n\n\ndef test_xyhr_supports_aabb_mode_and_column_measurement():\n    kf = KalmanFilterXYHR(np.array([[100.0], [80.0], [40.0], [1.2]]), dim_z=4, ndim=8)\n    pred_x, pred_cov = kf.predict()\n    upd_x, upd_cov = kf.update(np.array([101.0, 80.5, 39.0, 1.25]))\n\n    assert pred_x.shape == (8,)\n    assert pred_cov.shape == (8, 8)\n    assert upd_x.shape == (8,)\n    assert upd_cov.shape == (8, 8)\n    assert upd_x[2] > 0 and upd_x[3] > 0\n    assert np.all(np.isfinite(upd_x))\n    assert np.all(np.isfinite(upd_cov))\n\n\ndef test_xyhr_supports_obb_mode_and_inference():\n    inferred = KalmanFilterXYHR(np.array([10.0, 11.0, 12.0, 1.1, 0.3]))\n    assert inferred.dim_z == 5\n    assert inferred.dim_x == 10\n\n    kf = KalmanFilterXYHR(\n        np.array([100.0, 80.0, 40.0, 1.2, np.pi - 0.02]),\n        dim_z=5,\n        ndim=10,\n    )\n    pred_x, pred_cov = kf.predict()\n    measurement = np.array([101.0, 80.5, 39.0, 1.25, -np.pi + 0.01])\n    upd_x, upd_cov = kf.update(measurement)\n\n    assert pred_x.shape == (10,)\n    assert pred_cov.shape == (10, 10)\n    assert upd_x.shape == (10,)\n    assert upd_cov.shape == (10, 10)\n    assert upd_x[2] > 0 and upd_x[3] > 0\n    assert -np.pi <= float(upd_x[4]) < np.pi\n    assert abs(_angle_diff(float(upd_x[4]), measurement[4])) < 0.2\n"
  },
  {
    "path": "tests/unit/test_postprocessing.py",
    "content": "import numpy as np\n\nfrom boxmot.postprocessing.gsi import gaussian_smooth, linear_interpolation\nfrom boxmot.postprocessing.gbrc import gradient_boosting_smooth\nfrom boxmot.postprocessing.gbrc import linear_interpolation as gbrc_linear_interpolation\n\n\ndef test_gsi():\n    tracking_results = np.array(\n        [\n            [1, 1, 1475, 419, 75, 169, 0, 0, -1],\n            [2, 1, 1475, 419, 75, 169, 0, 0, -1],\n            [4, 1, 1475, 419, 75, 169, 0, 0, -1],\n            [6, 1, 1475, 419, 75, 169, 0, 0, -1],\n        ]\n    )\n    li = linear_interpolation(tracking_results, interval=20)\n    gsi = gaussian_smooth(li, tau=10)\n    assert len(gsi) == 6\n\n\ndef test_gbrc():\n    tracking_results = np.array(\n        [\n            [1, 1, 1475, 419, 75, 169, 0, 0, -1],\n            [2, 1, 1475, 419, 75, 169, 0, 0, -1],\n            [4, 1, 1475, 419, 75, 169, 0, 0, -1],\n            [6, 1, 1475, 419, 75, 169, 0, 0, -1],\n        ]\n    )\n    li = gbrc_linear_interpolation(tracking_results, interval=20)\n    gbrc = gradient_boosting_smooth(li)\n    assert len(gbrc) == 6\n    assert gbrc.shape[1] == 9\n"
  },
  {
    "path": "tests/unit/test_reidbackend.py",
    "content": "from pathlib import Path\n\nimport cv2\nimport numpy as np\nimport pytest\n\nfrom boxmot.reid.backends.onnx_backend import ONNXBackend\nfrom boxmot.reid.backends.openvino_backend import OpenVinoBackend\nfrom boxmot.reid.backends.pytorch_backend import PyTorchBackend\nfrom boxmot.reid.backends.torchscript_backend import TorchscriptBackend\nfrom boxmot.reid.core.auto_backend import ReidAutoBackend\nfrom boxmot.utils import ROOT, WEIGHTS\n\n# Exported artifacts are covered by the dedicated CI export job.\nREID_MODEL_CASES = [\n    (WEIGHTS / \"osnet_x0_25_msmt17.pt\", PyTorchBackend, False),\n    (WEIGHTS / \"osnet_x0_25_msmt17.torchscript\", TorchscriptBackend, True),\n    (WEIGHTS / \"osnet_x0_25_msmt17.onnx\", ONNXBackend, True),\n    (WEIGHTS / \"osnet_x0_25_msmt17_openvino_model\", OpenVinoBackend, True),\n]\n\n\ndef get_backend(weights: Path, requires_export: bool):\n    \"\"\"Return a backend instance, skipping exported formats when artifacts are absent.\"\"\"\n    if requires_export and not weights.exists():\n        pytest.skip(f\"Missing exported ReID artifact: {weights}\")\n\n    rab = ReidAutoBackend(weights=weights, device=\"cpu\", half=False)\n    return rab.get_backend()\n\n\n@pytest.mark.parametrize(\"reid_model, _, requires_export\", REID_MODEL_CASES)\ndef test_reidbackend_output(reid_model, _, requires_export):\n    b = get_backend(reid_model, requires_export)\n\n    img = cv2.imread(\n        str(ROOT / \"assets/MOT17-mini/train/MOT17-04-FRCNN/img1/000001.jpg\")\n    )\n    dets = np.array([[144, 212, 578, 480, 0.82, 0],\n                     [425, 281, 576, 472, 0.56, 65]])\n\n    embs = b.get_features(dets[:, 0:4], img)\n    assert embs.shape[0] == 2  # two crops should give two embeddings\n    assert embs.shape[1] == 512  # osnet embeddings are of size 512\n\n\n@pytest.mark.parametrize(\"reid_model, backend, requires_export\", REID_MODEL_CASES)\ndef test_reidbackend_type(reid_model, backend, requires_export):\n    b = get_backend(reid_model, requires_export)\n    assert isinstance(b, backend)\n"
  },
  {
    "path": "tests/unit/test_tflite_backend.py",
    "content": "import types\n\nimport boxmot.reid.backends.tflite_backend as tflite_backend_module\nfrom boxmot.reid.backends.tflite_backend import TFLiteBackend\n\n\nclass DummyChecker:\n    def __init__(self):\n        self.calls = []\n\n    def check_packages(self, requirements):\n        self.calls.append(tuple(requirements))\n\n\ndef make_backend() -> TFLiteBackend:\n    backend = TFLiteBackend.__new__(TFLiteBackend)\n    backend.checker = DummyChecker()\n    return backend\n\n\ndef test_tflite_backend_prefers_litert_interpreter(monkeypatch):\n    backend = make_backend()\n    litert_interpreter = type(\"LiteRTInterpreter\", (), {})\n\n    def fake_import_module(name):\n        if name == \"ai_edge_litert.interpreter\":\n            return types.SimpleNamespace(Interpreter=litert_interpreter)\n        raise AssertionError(f\"Unexpected import: {name}\")\n\n    monkeypatch.setattr(tflite_backend_module, \"import_module\", fake_import_module)\n\n    interpreter_class = backend._get_interpreter_class()\n\n    assert interpreter_class is litert_interpreter\n    assert backend.checker.calls == []\n\n\ndef test_tflite_backend_installs_litert_when_no_runtime_is_available(monkeypatch):\n    backend = make_backend()\n    litert_interpreter = type(\"LiteRTInterpreter\", (), {})\n\n    calls = []\n\n    def fake_import_module(name):\n        calls.append(name)\n        if name != \"ai_edge_litert.interpreter\":\n            raise AssertionError(f\"Unexpected import: {name}\")\n        if len(calls) == 1:\n            raise ModuleNotFoundError(name)\n        return types.SimpleNamespace(Interpreter=litert_interpreter)\n\n    monkeypatch.setattr(tflite_backend_module, \"import_module\", fake_import_module)\n\n    interpreter_class = backend._get_interpreter_class()\n\n    assert interpreter_class is litert_interpreter\n    assert backend.checker.calls == [(\"ai-edge-litert\",)]\n    assert calls == [\"ai_edge_litert.interpreter\", \"ai_edge_litert.interpreter\"]\n"
  },
  {
    "path": "tests/unit/test_tflite_exporter.py",
    "content": "import os\nimport sys\nimport types\nfrom pathlib import Path\n\nimport torch\n\nimport boxmot.reid.exporters.tflite_exporter as tflite_exporter_module\nfrom boxmot.engine.export import create_export_tasks\nfrom boxmot.reid.exporters.tflite_exporter import TFLiteExporter\nfrom boxmot.utils.checks import RequirementsChecker\n\n\ndef _disable_dep_sync(monkeypatch):\n    monkeypatch.setattr(RequirementsChecker, \"sync_extra\", lambda *args, **kwargs: None)\n\n\ndef _install_fake_tflite_stack(monkeypatch, convert_impl):\n    monkeypatch.setitem(\n        sys.modules,\n        \"onnx2tf\",\n        types.SimpleNamespace(__version__=\"2.4.0\", convert=convert_impl),\n    )\n    monkeypatch.setitem(sys.modules, \"tensorflow\", types.SimpleNamespace(__version__=\"2.19.0\"))\n    monkeypatch.setattr(tflite_exporter_module.sys, \"platform\", \"linux\")\n\n\ndef test_tflite_export_uses_flatbuffer_direct_and_prefers_float32(monkeypatch, tmp_path):\n    _disable_dep_sync(monkeypatch)\n\n    weights = tmp_path / \"osnet_x0_25_msmt17.pt\"\n    weights.with_suffix(\".onnx\").touch()\n    calls = []\n\n    def fake_convert(\n        *,\n        input_onnx_file_path,\n        output_folder_path,\n        tflite_backend=None,\n        verbosity=None,\n        output_float16_tflite=None,\n    ):\n        calls.append(\n            {\n                \"input_onnx_file_path\": input_onnx_file_path,\n                \"output_folder_path\": output_folder_path,\n                \"tflite_backend\": tflite_backend,\n                \"verbosity\": verbosity,\n                \"output_float16_tflite\": output_float16_tflite,\n            }\n        )\n        output_dir = Path(output_folder_path)\n        output_dir.mkdir(parents=True, exist_ok=True)\n        (output_dir / \"osnet_x0_25_msmt17_float16.tflite\").touch()\n        (output_dir / \"osnet_x0_25_msmt17_float32.tflite\").touch()\n\n    _install_fake_tflite_stack(monkeypatch, fake_convert)\n\n    exporter = TFLiteExporter(None, None, weights, opset=18, dynamic=True, half=False, simplify=True)\n    exported = exporter.export()\n\n    assert Path(exported).name == \"osnet_x0_25_msmt17_float32.tflite\"\n    assert len(calls) == 1\n    assert calls[0][\"input_onnx_file_path\"] == str(weights.with_suffix(\".onnx\"))\n    assert calls[0][\"output_folder_path\"].endswith(os.sep)\n    assert calls[0][\"tflite_backend\"] == \"flatbuffer_direct\"\n    assert calls[0][\"verbosity\"] == \"info\"\n    assert calls[0][\"output_float16_tflite\"] is False\n\n\ndef test_tflite_export_generates_onnx_when_missing(monkeypatch, tmp_path):\n    _disable_dep_sync(monkeypatch)\n\n    weights = tmp_path / \"osnet_x0_25_msmt17.pt\"\n    onnx_calls = []\n\n    class FakeONNXExporter:\n        def __init__(self, model, im, file, opset=None, dynamic=False, half=False, simplify=False):\n            onnx_calls.append(\n                {\n                    \"model\": model,\n                    \"im\": im,\n                    \"file\": file,\n                    \"opset\": opset,\n                    \"dynamic\": dynamic,\n                    \"half\": half,\n                    \"simplify\": simplify,\n                }\n            )\n            self.file = Path(file)\n\n        def export(self):\n            onnx_path = self.file.with_suffix(\".onnx\")\n            onnx_path.touch()\n            return onnx_path\n\n    def fake_convert(\n        *,\n        input_onnx_file_path,\n        output_folder_path,\n        tflite_backend=None,\n        verbosity=None,\n        output_float16_tflite=None,\n    ):\n        output_dir = Path(output_folder_path)\n        output_dir.mkdir(parents=True, exist_ok=True)\n        (output_dir / \"osnet_x0_25_msmt17_float16.tflite\").touch()\n\n    monkeypatch.setattr(tflite_exporter_module, \"ONNXExporter\", FakeONNXExporter)\n    _install_fake_tflite_stack(monkeypatch, fake_convert)\n\n    image = torch.randn(1, 3, 256, 128)\n    model = object()\n    exporter = TFLiteExporter(model, image, weights, opset=17, dynamic=True, half=True, simplify=False)\n    exported = exporter.export()\n\n    assert Path(exported).name == \"osnet_x0_25_msmt17_float16.tflite\"\n    assert len(onnx_calls) == 1\n    assert onnx_calls[0][\"model\"] is model\n    assert onnx_calls[0][\"im\"] is image\n    assert onnx_calls[0][\"file\"] == weights\n    assert onnx_calls[0][\"opset\"] == 17\n    assert onnx_calls[0][\"dynamic\"] is True\n    assert onnx_calls[0][\"half\"] is True\n    assert onnx_calls[0][\"simplify\"] is False\n\n\ndef test_create_export_tasks_passes_tflite_export_settings():\n    args = types.SimpleNamespace(\n        include=(\"tflite\",),\n        weights=Path(\"models/osnet_x0_25_msmt17.pt\"),\n        opset=18,\n        dynamic=True,\n        half=True,\n        simplify=False,\n        optimize=False,\n        verbose=False,\n    )\n    model = object()\n    dummy_input = torch.randn(2, 3, 256, 128)\n\n    tasks = create_export_tasks(args, model, dummy_input)\n\n    flag, exporter_class, exp_args = tasks[\"tflite\"]\n    assert flag is True\n    assert exporter_class is TFLiteExporter\n    assert exp_args[0] is model\n    assert exp_args[1] is dummy_input\n    assert exp_args[2] == args.weights\n    assert exp_args[3:] == (18, True, True, False)\n"
  },
  {
    "path": "tests/unit/test_trackers.py",
    "content": "from pathlib import Path\n\nimport numpy as np\nimport pytest\n\nfrom boxmot import (\n    DeepOcSort,\n    OcSort,\n    create_tracker,\n    get_tracker_config,\n)\nfrom boxmot.trackers.deepocsort.deepocsort import (\n    KalmanBoxTracker as DeepOCSortKalmanBoxTracker,\n)\nfrom boxmot.trackers.botsort.botsort import BotSort\nfrom boxmot.trackers.botsort.botsort_track import STrack as BotSortTrack\nfrom boxmot.trackers.bytetrack.bytetrack import ByteTrack, STrack as ByteTrackTrack\nfrom boxmot.trackers.ocsort.ocsort import KalmanBoxTracker as OCSortKalmanBoxTracker\nfrom boxmot.trackers.sfsort.sfsort import SFSORT\nfrom boxmot.utils.matching import iou_distance\nfrom boxmot.utils import WEIGHTS\nfrom tests.test_config import (\n    ALL_TRACKERS,\n    MOTION_N_APPEARANCE_TRACKING_METHODS,\n    MOTION_N_APPEARANCE_TRACKING_NAMES,\n    MOTION_ONLY_TRACKING_METHODS,\n    PER_CLASS_TRACKERS,\n)\n\n# --- existing tests ---\n\n\n@pytest.mark.parametrize(\"Tracker\", MOTION_N_APPEARANCE_TRACKING_METHODS)\ndef test_motion_n_appearance_trackers_instantiation(Tracker):\n    Tracker(\n        reid_weights=Path(WEIGHTS / \"osnet_x0_25_msmt17.pt\"),\n        device=\"cpu\",\n        half=True,\n    )\n\n\n@pytest.mark.parametrize(\"Tracker\", MOTION_ONLY_TRACKING_METHODS)\ndef test_motion_only_trackers_instantiation(Tracker):\n    Tracker()\n\n\n@pytest.mark.parametrize(\"tracker_type\", ALL_TRACKERS)\ndef test_tracker_output_size(tracker_type):\n    tracker_conf = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=tracker_conf,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=False,\n    )\n\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([[144, 212, 400, 480, 0.82, 0], [425, 281, 576, 472, 0.72, 65]])\n\n    output = tracker.update(det, rgb)\n    assert output.shape == (2, 8)\n\n\ndef test_dynamic_max_obs_based_on_max_age():\n    max_age = 400\n    ocsort = OcSort(max_age=max_age)\n    assert ocsort.max_obs == (max_age + 5)\n\n\ndef create_kalman_box_tracker_ocsort(bbox, cls, det_ind, tracker):\n    return OCSortKalmanBoxTracker(\n        bbox,\n        cls,\n        det_ind,\n        Q_xy_scaling=tracker.Q_xy_scaling,\n        Q_s_scaling=tracker.Q_s_scaling,\n    )\n\n\ndef create_kalman_box_tracker_deepocsort(bbox, cls, det_ind, tracker):\n    det = np.concatenate([bbox, [cls, det_ind]])\n    return DeepOCSortKalmanBoxTracker(\n        det, Q_xy_scaling=tracker.Q_xy_scaling, Q_s_scaling=tracker.Q_s_scaling\n    )\n\n\nTRACKER_CREATORS = {\n    OcSort: create_kalman_box_tracker_ocsort,\n    DeepOcSort: create_kalman_box_tracker_deepocsort,\n}\n\n\n@pytest.mark.parametrize(\n    \"Tracker, init_args\",\n    [\n        (OcSort, {}),\n        (\n            DeepOcSort,\n            {\n                \"reid_weights\": Path(WEIGHTS / \"osnet_x0_25_msmt17.pt\"),\n                \"device\": \"cpu\",\n                \"half\": True,\n            },\n        ),\n    ],\n)\ndef test_Q_matrix_scaling(Tracker, init_args):\n    bbox = np.array([0, 0, 100, 100, 0.9])\n    cls = 1\n    det_ind = 0\n    Q_xy_scaling = 0.05\n    Q_s_scaling = 0.0005\n\n    tracker = Tracker(Q_xy_scaling=Q_xy_scaling, Q_s_scaling=Q_s_scaling, **init_args)\n\n    create_kalman_box_tracker = TRACKER_CREATORS[Tracker]\n    kalman_box_tracker = create_kalman_box_tracker(bbox, cls, det_ind, tracker)\n\n    assert kalman_box_tracker.kf.Q[4, 4] == Q_xy_scaling, \"Q_xy scaling incorrect for x' velocity\"\n    assert kalman_box_tracker.kf.Q[5, 5] == Q_xy_scaling, \"Q_xy scaling incorrect for y' velocity\"\n    assert kalman_box_tracker.kf.Q[6, 6] == Q_s_scaling, \"Q_s scaling incorrect for s' (scale) velocity\"\n\n@pytest.mark.parametrize(\"tracker_type\", PER_CLASS_TRACKERS)\ndef test_per_class_tracker_output_size(tracker_type):\n    tracker_conf = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=tracker_conf,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=True,\n    )\n\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([\n        [100, 100, 300, 250, 0.95,   0],  # class 0\n        [400, 300, 550, 450, 0.90,  65],  # class 65\n    ])\n    embs = np.random.random(size=(2, 512))\n\n    _ = tracker.update(det, rgb, embs)\n    output = tracker.update(det, rgb, embs)\n    assert output.shape == (2, 8)\n\n\n@pytest.mark.parametrize(\"tracker_type\", PER_CLASS_TRACKERS)\ndef test_per_class_tracker_active_tracks(tracker_type):\n    tracker_conf = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=tracker_conf,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=True,\n    )\n\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([\n        [100, 100, 300, 250, 0.95,   0],  # class 0\n        [400, 300, 550, 450, 0.90,  65],  # class 65\n    ])\n    embs = np.random.random(size=(2, 512))\n\n    tracker.update(det, rgb, embs)\n    assert tracker.per_class_active_tracks[0], \"No active tracks for class 0\"\n    assert tracker.per_class_active_tracks[65], \"No active tracks for class 65\"\n\n\ndef test_botsort_supports_obb_without_reid():\n    tracker = BotSort(\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        with_reid=False,\n    )\n\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([[320, 240, 80, 40, 0.15, 0.95, 0]], dtype=np.float32)\n\n    out1 = tracker.update(det, rgb)\n    out2 = tracker.update(det, rgb)\n\n    assert out1.shape[1] == 9\n    assert out2.shape[1] == 9\n    np.testing.assert_allclose(out2[0, :5], det[0, :5], atol=1e-2)\n\n\ndef test_botsort_obb_matching_uses_oriented_geometry():\n    det = np.array([320, 240, 80, 40, 0.15, 0.95, 0, 0], dtype=np.float32)\n    track_a = BotSortTrack(det, max_obs=10, is_obb=True)\n    track_b = BotSortTrack(det, max_obs=10, is_obb=True)\n\n    cost = iou_distance([track_a], [track_b], is_obb=True)\n\n    assert cost.shape == (1, 1)\n    assert cost[0, 0] < 1e-3\n\n\ndef test_botsort_obb_state_history_follows_rotation_without_flips():\n    tracker = BotSort(\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        with_reid=False,\n    )\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    angles = np.linspace(0.0, 6.1, 20, dtype=np.float32)\n\n    for angle in angles:\n        det = np.array([[320, 240, 90, 40, angle, 0.95, 0]], dtype=np.float32)\n        tracker.update(det, rgb)\n\n    assert tracker.active_tracks\n    history = np.asarray(tracker.active_tracks[0].history_observations, dtype=np.float32)\n    assert history.shape[1] == 8\n    centers = history.reshape(-1, 4, 2).mean(axis=1)\n    assert np.max(np.abs(centers - centers[0])) < 1e-2\n    assert np.max(np.abs(history[-1] - history[0])) > 1.0\n\n\ndef test_bytetrack_supports_obb_outputs():\n    tracker = ByteTrack()\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([[320, 240, 80, 40, 0.15, 0.95, 0]], dtype=np.float32)\n\n    out1 = tracker.update(det, rgb)\n    out2 = tracker.update(det, rgb)\n\n    assert out1.shape == (1, 9)\n    assert out2.shape == (1, 9)\n    np.testing.assert_allclose(out2[0, :5], det[0, :5], atol=1e-2)\n\n\ndef test_bytetrack_obb_matching_uses_oriented_geometry():\n    det = np.array([320, 240, 80, 40, 0.15, 0.95, 0, 0], dtype=np.float32)\n    track_a = ByteTrackTrack(det, max_obs=10, is_obb=True)\n    track_b = ByteTrackTrack(det, max_obs=10, is_obb=True)\n\n    cost = iou_distance([track_a], [track_b], is_obb=True)\n\n    assert cost.shape == (1, 1)\n    assert cost[0, 0] < 1e-3\n\n\ndef test_bytetrack_obb_state_history_follows_rotation_without_flips():\n    tracker = ByteTrack(track_thresh=0.1, min_conf=0.01, match_thresh=0.99)\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    angles = np.linspace(0.0, 6.1, 20, dtype=np.float32)\n\n    for angle in angles:\n        det = np.array([[320, 240, 90, 40, angle, 0.95, 0]], dtype=np.float32)\n        tracker.update(det, rgb)\n\n    assert tracker.active_tracks\n    history = np.asarray(tracker.active_tracks[0].history_observations, dtype=np.float32)\n    assert history.shape[1] == 8\n    centers = history.reshape(-1, 4, 2).mean(axis=1)\n    assert np.max(np.abs(centers - centers[0])) < 1e-2\n    assert np.max(np.abs(history[-1] - history[0])) > 1.0\n\n\ndef test_ocsort_obb_state_history_uses_state_corners():\n    tracker = OcSort(det_thresh=0.1)\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    angles = np.linspace(0.0, 6.1, 20, dtype=np.float32)\n\n    for angle in angles:\n        det = np.array([[320, 240, 90, 40, angle, 0.95, 0]], dtype=np.float32)\n        tracker.update(det, rgb)\n\n    assert tracker.active_tracks\n    history = np.asarray(tracker.active_tracks[0].history_observations, dtype=np.float32)\n    assert history.shape[1] == 8\n    assert np.max(np.abs(history[-1] - history[0])) > 1.0\n\n\ndef test_ocsort_obb_state_history_uses_post_update_state_center():\n    tracker = OcSort(det_thresh=0.1, min_hits=1)\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n\n    det1 = np.array([[100, 100, 90, 40, 0.0, 0.95, 0]], dtype=np.float32)\n    det2 = np.array([[102, 102, 90, 40, 1.0, 0.95, 0]], dtype=np.float32)\n\n    tracker.update(det1, rgb)\n    tracker.update(det2, rgb)\n\n    assert tracker.active_tracks\n    track = tracker.active_tracks[0]\n    assert len(track.history_observations) >= 1\n\n    history_center = (\n        np.asarray(track.history_observations[-1], dtype=np.float32).reshape(4, 2).mean(axis=0)\n    )\n    state_center = np.asarray(track.get_state()[0][:2], dtype=np.float32)\n    np.testing.assert_allclose(history_center, state_center, atol=0.75)\n\n\ndef test_sfsort_obb_state_history_uses_state_corners():\n    tracker = SFSORT()\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    angles = np.linspace(0.0, 6.1, 20, dtype=np.float32)\n\n    for angle in angles:\n        det = np.array([[320, 240, 90, 40, angle, 0.95, 0]], dtype=np.float32)\n        tracker.update(det, rgb)\n\n    assert tracker.active_tracks\n    history = np.asarray(tracker.active_tracks[0].history_observations, dtype=np.float32)\n    assert history.shape[1] == 8\n    assert np.max(np.abs(history[-1] - history[0])) > 1.0\n\n\ndef test_sfsort_supports_obb_outputs():\n    tracker = SFSORT()\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    det = np.array([[320, 240, 80, 40, 0.15, 0.95, 0]], dtype=np.float32)\n\n    out1 = tracker.update(det, rgb)\n    out2 = tracker.update(det, rgb)\n\n    assert out1.shape == (1, 9)\n    assert out2.shape == (1, 9)\n    np.testing.assert_allclose(out2[0, :5], det[0, :5], atol=1e-2)\n\n\ndef test_sfsort_obb_angle_update_uses_damping():\n    tracker = SFSORT(obb_theta_damping=0.8)\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n\n    det1 = np.array([[320, 240, 80, 40, 0.00, 0.95, 0]], dtype=np.float32)\n    det2 = np.array([[320, 240, 80, 40, 0.40, 0.95, 0]], dtype=np.float32)\n\n    out1 = tracker.update(det1, rgb)\n    out2 = tracker.update(det2, rgb)\n\n    assert out1.shape == (1, 9)\n    assert out2.shape == (1, 9)\n    assert int(out2[0, 5]) == int(out1[0, 5])\n\n    measured_delta = abs(float(det2[0, 4] - det1[0, 4]))\n    tracked_delta = abs(float(out2[0, 4] - out1[0, 4]))\n    assert 0.0 < tracked_delta < measured_delta\n\n\ndef test_sfsort_obb_plotting_draws_tracks():\n    tracker = SFSORT()\n    img = np.zeros((256, 256, 3), dtype=np.uint8)\n    det = np.array([[128, 128, 60, 30, 0.3, 0.95, 0]], dtype=np.float32)\n\n    tracker.update(det, img)\n    rendered = tracker.plot_results(img.copy(), show_trajectories=True)\n\n    assert np.any(rendered != 0)\n\n\n@pytest.mark.parametrize(\"tracker_type\", ALL_TRACKERS)\n@pytest.mark.parametrize(\"dets\", [None, np.array([])])\ndef test_tracker_with_no_detections(tracker_type, dets):\n    tracker_conf = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=tracker_conf,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=False,\n    )\n\n    rgb = np.random.randint(255, size=(640, 640, 3), dtype=np.uint8)\n    embs = np.random.random(size=(0, 512))\n\n    output = tracker.update(dets, rgb, embs)\n    assert output.size == 0, \"Output should be empty when no detections are provided\"\n\n\n@pytest.mark.parametrize(\"tracker_type\", PER_CLASS_TRACKERS)\ndef test_per_class_isolation(tracker_type):\n    tracker = create_tracker(\n        tracker_type,\n        get_tracker_config(tracker_type),\n        WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=True,\n    )\n    det = np.array(\n        [\n            [100, 100, 150, 150, 0.9, 1],\n            [102, 102, 152, 152, 0.9, 2],\n        ]\n    )\n    rgb = np.zeros((640, 640, 3), dtype=np.uint8)\n    embs = np.random.rand(2, 512)\n    out = tracker.update(det, rgb, embs)\n    ids = set(out[:, 1].tolist())\n    assert len(ids) == 2, \"Each class should get a separate track even if overlapping\"\n\n\n@pytest.mark.parametrize(\"tracker_type\", MOTION_N_APPEARANCE_TRACKING_NAMES)\ndef test_emb_trackers_requires_embeddings(tracker_type):\n    tracker_conf = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=tracker_conf,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=False,\n    )\n    det = np.array([[10, 10, 20, 20, 0.7, 0]])\n    rgb = np.zeros((640, 640, 3), dtype=np.uint8)\n    with pytest.raises(AssertionError):\n        tracker.update(det, rgb, np.random.rand(2, 512))\n\n\n@pytest.mark.parametrize(\"tracker_type\", ALL_TRACKERS)\ndef test_invalid_det_array_shape(tracker_type):\n    tracker = create_tracker(\n        tracker_type,\n        get_tracker_config(tracker_type),\n        WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=False,\n    )\n    img = np.zeros((640, 640, 3), dtype=np.uint8)\n    embs = np.random.rand(2, 512)\n    bad_det = np.random.rand(2, 5)\n    with pytest.raises(AssertionError):\n        tracker.update(bad_det, img, embs)\n\n\n# def test_get_tracker_config_invalid_name():\n#     \"\"\"Requesting config for an unknown tracker should raise a KeyError.\"\"\"\n#     with pytest.raises(KeyError):\n#         get_tracker_config(\"not_a_tracker\")\n\n\n@pytest.mark.parametrize(\"tracker_type\", ALL_TRACKERS)\ndef test_track_id_stable_over_frames(tracker_type):\n    \"\"\"\n    If the same detection appears in successive frames,\n    the tracker should assign the same track ID.\n    \"\"\"\n    cfg = get_tracker_config(tracker_type)\n    tracker = create_tracker(\n        tracker_type=tracker_type,\n        tracker_config=cfg,\n        reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n        device=\"cpu\",\n        half=False,\n        per_class=False,\n    )\n\n    det = np.array([[50, 50, 100, 100, 0.95, 3]])\n    rgb = np.zeros((640, 640, 3), dtype=np.uint8)\n\n    # choose embedding only if needed\n    if tracker_type in MOTION_N_APPEARANCE_TRACKING_NAMES:\n        embs = np.random.rand(1, 512)\n        out1 = tracker.update(det, rgb, embs)\n        out2 = tracker.update(det, rgb, embs)\n    else:\n        out1 = tracker.update(det, rgb)\n        out2 = tracker.update(det, rgb)\n\n    assert out1.shape == out2.shape == (1, 8), \"Unexpected output shape\"\n    # track ID is at column 1\n    assert out1[0, 4] == out2[0, 4], \"Track ID should remain the same across frames\"\n\n\ndef test_create_tracker_invalid_tracker_name():\n    \"\"\"Creating a tracker with an unknown name should raise a ValueError.\"\"\"\n    with pytest.raises(ValueError, match=\"Unknown tracker type: 'nonexistent_tracker'\"):\n        create_tracker(\n            tracker_type=\"nonexistent_tracker\",\n            tracker_config=get_tracker_config(\"botsort\"),\n            reid_weights=WEIGHTS / \"mobilenetv2_x1_4_dukemtmcreid.pt\",\n            device=\"cpu\",\n            half=False,\n            per_class=False,\n        )\n"
  },
  {
    "path": "tests/unit/test_visualization.py",
    "content": "import unittest\nimport numpy as np\nimport cv2\nfrom unittest.mock import MagicMock, patch\nfrom boxmot.utils.visualization import VisualizationMixin\n\nclass MockTracker(VisualizationMixin):\n    def __init__(self):\n        self.is_obb = False\n        self.target_id = None\n        self.removed_display_frames = 10\n        self._plot_frame_idx = 0\n        self._removed_first_seen = {}\n        self._removed_expired = set()\n        self.removed_tombstone_horizon = 100\n        self.active_tracks = []\n        self.lost_stracks = []\n        self.removed_stracks = []\n\nclass MockTrack:\n    def __init__(self, id, history, state=\"confirmed\", conf=0.9, cls=0):\n        self.id = id\n        self.history_observations = history\n        self.state = state\n        self.conf = conf\n        self.cls = cls\n        self.time_since_update = 0\n        self.is_activated = True\n        self.hits = 10\n        self.xyxy = history[-1] if history else [0, 0, 10, 10]\n        \n    def get_state(self):\n        return np.array(self.xyxy)\n\nclass TestVisualization(unittest.TestCase):\n    def setUp(self):\n        self.tracker = MockTracker()\n        self.img = np.zeros((100, 100, 3), dtype=np.uint8)\n        \n    def test_plot_results_regular(self):\n        # Setup active track\n        track = MockTrack(1, [[10, 10, 50, 50]])\n        self.tracker.active_tracks = [track]\n        \n        # Plot without show_lost\n        res = self.tracker.plot_results(\n            self.img.copy(),\n            show_trajectories=True,\n            show_lost=False\n        )\n        \n        # Verify something was drawn (image not all zeros)\n        # The box is at 10,10 to 50,50, so check a pixel in that region\n        # Note: exact pixel values depend on color hashing, but shouldn't be 0\n        self.assertTrue(np.any(res[10:50, 10:50] != 0), \"Should draw active track\")\n\n    def test_plot_results_show_lost(self):\n        # Setup lost track\n        lost_track = MockTrack(2, [[20, 20, 60, 60]], state=\"lost\")\n        # Mock state inference for lost track\n        lost_track.time_since_update = 5\n        \n        self.tracker.lost_stracks = [lost_track]\n        \n        # Plot with show_lost=True\n        res = self.tracker.plot_results(\n            self.img.copy(),\n            show_trajectories=True,\n            show_lost=True\n        )\n        \n        # Verify lost track is drawn\n        self.assertTrue(np.any(res[20:60, 20:60] != 0), \"Should draw lost track when show_lost=True\")\n        \n    def test_plot_results_hide_lost(self):\n        # Setup lost track\n        lost_track = MockTrack(2, [[20, 20, 60, 60]], state=\"lost\")\n        lost_track.time_since_update = 5\n        \n        self.tracker.lost_stracks = [lost_track]\n        \n        # Plot with show_lost=False\n        res = self.tracker.plot_results(\n            self.img.copy(),\n            show_trajectories=True,\n            show_lost=False\n        )\n        \n        # Verify lost track is NOT drawn (image should remain all zeros)\n        self.assertTrue(np.all(res == 0), \"Should not draw lost track when show_lost=False\")\n\n    def test_dashed_rect(self):\n        # Test internal dashed rect drawing\n        img = np.zeros((100, 100, 3), dtype=np.uint8)\n        color = (255, 255, 255)\n        self.tracker._draw_dashed_rect(img, 10, 10, 90, 90, color, 2)\n        \n        # Check corners are drawn\n        self.assertTrue(np.any(img[10, 10:20] != 0), \"Top-left corner should be drawn\")\n        # Check gaps exist (approximate check based on dash/gap size)\n        # dash=10, gap=10. So 10-20 drawn, 20-30 gap.\n        self.assertTrue(np.all(img[10, 22:28] == 0), \"Gap should be present in dashed line\")\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/unit/test_yolox_batch.py",
    "content": "import pytest\n\nfrom boxmot.detectors import get_yolo_inferer\n\n\ndef test_get_yolo_inferer_routes_yolox_model():\n    inferer_cls = get_yolo_inferer(\"yolox_s.pt\")\n    assert inferer_cls.__name__ == \"YoloXStrategy\"\n\n\ndef test_get_yolo_inferer_returns_callable_strategy_for_yolox():\n    inferer_cls = get_yolo_inferer(\"yolox_n.pt\")\n    assert callable(inferer_cls)\n\n\n@pytest.mark.parametrize(\"name\", [\"yolox_s.pt\", \"yolox_x_MOT17_ablation.pt\"])\ndef test_get_yolo_inferer_accepts_common_yolox_names(name):\n    inferer_cls = get_yolo_inferer(name)\n    assert inferer_cls.__name__ == \"YoloXStrategy\"\n"
  }
]