Giter VIP home page Giter VIP logo

fishnet's Introduction

fishnet: distributed Stockfish analysis for lichess.org

crates.io Docker Build

Installation

  1. Request your personal fishnet key: https://lichess.org/get-fishnet

  2. Install and run the fishnet client.

    Download standalone binary

    Select the binary for your platform from the latest release and run it.

    # After download:
    mv fishnet-x86_64-unknown-linux-musl fishnet
    chmod +x fishnet
    ./fishnet --auto-update

    Useful commands

    ./fishnet configure              # Rerun config dialog
    ./fishnet systemd --auto-update  # Print a .service file
    ./fishnet --help                 # List commands and options

    Other installation methods: From source, Docker, Kubernetes, OpenShift

  3. Pick an update strategy.

    Automatic updates

    Run with --auto-update as recommended above.

    Subscribe to release announcements

    With a GitHub account, you can watch this repository (can be set to release announcements only). See the top right corner on this page.

Video introduction

Watch @arex explain fishnet.

Video introduction

FAQ

Which engine does fishnet use?

fishnet uses Stockfish (hence the name) and Fairy-Stockfish for chess variants.

What are the requirements?

Available for 64-bit Intel and AMD ARMv8 / Silicon
Linux x86_64-unknown-linux-musl aarch64-unknown-linux-musl
Windows x86_64-pc-windows-gnu.exe
macOS x86_64-apple-darwin aarch64-apple-darwin
FreeBSD build from source
  • Needs Linux or an operating system from around 2019 or later
  • Will max out the configured number of CPU cores
  • Uses about 64 MiB RAM per CPU core
  • A small amount of disk space
  • Low-bandwidth network communication with Lichess servers (only outgoing HTTP requests, so probably no firewall configuration required, IPv4 not required)

Is my CPU fast enough?

Almost all processors will be able to meet the requirement of ~2 meganodes in 6 seconds. Clients on the faster end will automatically be assigned analysis jobs that have humans waiting for the result (the user queue, as opposed to the system queue for slower clients).

Why does my client remain idle?

Your client may remain idle if fishnet estimates that another client would be able to complete the next batch more quickly, or if the client has been configured to join the queue only if a backlog is building up. By standing by, you're still contributing to reliability by providing redundancy, and also to the potential maximum throughput in case requests peak.

What happens if I stop my client?

Feel free to turn your client on and off at any time. By default, the client will try to finish any batches it has already started. On immediate shutdown, the client tries to inform Lichess that batches should be reassigned. If even that fails, Lichess will reassign the batches after a timeout.

Will fishnet use my GPU?

No, Stockfish is a classical alpha-beta engine. The neural network evaluation of Stockfish NNUE works efficiently on CPUs.

Is fishnet secure?

To the best of our knowledge. All engine input is carefully validated.

Note that you implicitly trust the authors and the GitHub and Amazon S3 infrastructure when running with --auto-update. You can mitigate this by running fishnet as an unprivileged user.

cargo-crev is used to review the trustworthiness of dependencies. cargo-auditable is used to embed dependency meta data into binaries.

Is there a leaderboard of contributors?

No, sorry, not publicly. It would incentivize gaming the metrics.

Can I autoscale fishnet in the cloud?

There is currently no ready-made solution, but an API for monitoring the job queue status is provided.

Protocol

Sequence diagram

See protocol.md for details. Also supports SSLKEYLOGFILE for inspection at runtime.

License

fishnet is licensed under the GPLv3+. See LICENSE.txt or ./fishnet license for the full license text.

fishnet's People

Contributors

ageneau avatar amotmot avatar ankitshahit avatar benediktwerner avatar bharrisau avatar bykow avatar cubox avatar ddugovic avatar eeqk avatar eolo999 avatar flevour avatar franciscouzo avatar islandc0der avatar kdave avatar kindrebelg avatar kriolyth avatar lakinwecker avatar larb0b avatar lgommans avatar lukhas avatar niklasf avatar nobriot avatar obj-obj avatar ornicar avatar richienb avatar sethtroisi avatar thesilican avatar toughiq avatar voteblake avatar wrigjl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fishnet's Issues

recover

sometimes stockfish segfaults.

can't start with python 2.7

fishnet@vm213:~$ python --version
Python 2.7.3
fishnet@vm213:~$ python fishnet.py --version
fishnet v1.3.4
fishnet@vm213:~$ python fishnet.py --no-conf --engine-dir=/home/fishnet --apikey=xxxxxxxx --cores=16 --threads=4 --memory=1024
usage: fishnet.py [-h] [--verbose] [--version] [--conf CONF] [--no-conf]
                  [--key KEY] [--engine-dir ENGINE_DIR]
                  [--engine-command ENGINE_COMMAND] [--cores CORES]
                  [--memory MEMORY] [--threads THREADS] [--endpoint ENDPOINT]
                  [--fixed-backoff]
                  {run,configure,systemd,stockfish} ...
fishnet.py: error: too few arguments
fishnet@vm213:~$

ask user to upgrade

nicely if server reports a newer version is available, or forcingly if server reports the client version is no longer accepted. See lichess-org/lila#1735

Needed to prevent 1.0.7 clients from sending borked analysis.

nps sanity check

Found on production:

{"bestmove": "e2e4", "pv": "e2e4 e7e6 g1f3 d7d5 e4d5 e6d5 d2d4 g8f6 
f1d3 f8e7 b1c3 b8c6 e1g1 e8g8 c1f4 c6b4 c3b5 b4d3 c2d3 c7c5", "seldepth": 26, "tbhits": 0, "depth": 18, "score": {"cp": 24}, "multipv": 1, "time": 1, "nodes": 2229080, "nps":
 2229080000}]}

nps is over 2 billions, and greater than scala max integer value. It's rejected by lichess, and might also skew movetime adjustment.

memory configuration

in the config file, let people declare how much memory they want to give fishnet in total; distribute it to the stockfish processes.

run benchmark on a single process

Since all processes should give the same result (bench runs on 1 thread).

bench perfs seem to degrade when run on many processes simultaneously.

multithreaded stockfish processes

In order to provide faster results. 4 threads per stockfish process might be reasonable.

Given maxThreadsPerProcess = 4,
Run (nbTotalThreads / maxThreadsPerProcess) processes of maxThreadsPerProcess threads, plus one process with the remaining threads.
Divide movetime by number of threads.

Also allow configuration override for move servers to set to 1.

easy install: Linux

Host stockfish binaries (for ARCH=x86-64-modern and ARCH=x86-64) so users don't need g++ and make

They still need git to clone then update.

unexpected output in mated positions

grep Very low time reported

there is a wrong infoand bestmove line

DEBUG: ><> 1: 31614 >> info depth 4 seldepth 4 multipv 1 score cp -15 nodes 664 nps 332000 tbhits 0 time 2 pv f1g2 e7e5 e2e4 b8c6
DEBUG: ><> 1: 31614 >> info depth 5 seldepth 5 multipv 1 score cp -3 nodes 1227 nps 613500 tbhits 0 time 2 pv g1f3 b8c6 d2d4 d7d5 f1g2
DEBUG: ><> 1: 31614 >> info depth 6 seldepth 6 multipv 1 score cp -10 nodes 3177 nps 1059000 tbhits 0 time 3 pv d2d4 e7e6 f1g2 c7c5 g1f3 c5d4
DEBUG: ><> 1: 31614 >> info depth 7 seldepth 7 multipv 1 score cp -6 nodes 4992 nps 1664000 tbhits 0 time 3 pv d2d4 e7e6 c1f4 b8c6 b1c3 d7d5 g1f3
DEBUG: ><> 1: 31614 >> info depth 8 seldepth 10 multipv 1 score cp -7 nodes 13125 nps 2625000 tbhits 0 time 5 pv g1f3 c7c5 e2e4 d7d5 e4d5 e7e6 f1b5 c8d7 b5d7 b8d7
DEBUG: ><> 1: 31614 >> info depth 9 seldepth 11 multipv 1 score cp -12 nodes 22108 nps 3158285 tbhits 0 time 7 pv g1f3 c7c5 e2e4 f6e4 d2d3 e4f6 f1g2 d7d5 e1g1
DEBUG: ><> 2: 31618 >> info depth 15 seldepth 28 multipv 1 score cp 877 nodes 2213193 nps 7185691 tbhits 0 time 308 pv d5f4 c1h1 f4h3 f2e2 h3f4 e2f2 f6g5 h1d1 b6d5 d1a1 b3h3 a1a7 g7g6 a7a4 g5g4 a4c4 g6g5
DEBUG: ><> 1: 31614 >> info depth 10 seldepth 12 multipv 1 score cp -13 nodes 51206 nps 3657571 tbhits 0 time 14 pv f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 e1g1 d7d5 e4d5 f6d5 d2d4 e5d4
DEBUG: ><> 1: 31614 >> info depth 11 seldepth 13 multipv 1 score cp -13 nodes 53997 nps 3856928 tbhits 0 time 14 pv f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 e1g1 d7d5 e4d5 f6d5 d2d4 e5d4 e2d4
DEBUG: ><> 1: 31614 >> info depth 12 seldepth 15 multipv 1 score cp -13 nodes 62276 nps 3892250 tbhits 0 time 16 pv f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 e1g1 d7d5 e4d5 f6d5 d2d4 e5d4 e2d4 d5f6 d4b3
DEBUG: ><> 1: 31614 >> info depth 13 seldepth 15 multipv 1 score cp -13 nodes 86486 nps 3931181 tbhits 0 time 22 pv f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 e1g1 d7d5 e4d5 f6d5 d2d4 e5d4 e2d4 d5f6 d4b3
DEBUG: ><> 1: 31614 >> info depth 14 seldepth 16 multipv 1 score cp -13 nodes 120633 nps 4021100 tbhits 0 time 30 pv f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 e1g1 d7d5 e4d5 f6d5 d2d4 e5d4 e2d4 d5f6 d4b3 c5b6
DEBUG: ><> 1: 31614 >> info depth 15 seldepth 18 multipv 1 score cp -11 nodes 210414 nps 4046423 tbhits 0 time 52 pv f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 e1g1 d7d6 c2c3 c8g4 h2h3 g4e2 d1e2 b8d7 b2b4 c5b6 b1a3
DEBUG: ><> 2: 31618 >> info depth 16 seldepth 28 multipv 1 score cp 883 nodes 2851356 nps 7218622 tbhits 0 time 395 pv d5f4 c1a1 f6g5 a1a7 g7g6 a7b7 f4h3 f2e1 h3f4 e1d1 b3d3 d1c2 b6d5 b7b3 d5e3 c2b2 d3b3 b2b3 f4d5 b3a4 g5f6 g4g5 h6g5 a4b5 d5f4 b5c5 f6e5
DEBUG: ><> 2: 31618 >> info depth 17 seldepth 28 multipv 1 score cp 883 nodes 2913139 nps 7228632 tbhits 0 time 403 pv d5f4 c1c6 f6g5 c6c7 g7g6 c7b7 f4h3 f2e1 h3f4 e1d1 b3d3 d1c2 b6d5 b7b3 d5e3 c2b2 d3b3 b2b3 f4d5 b3a4 g5f6 g4g5 h6g5 a4b5 d5f4 b5c5 f6e5 c5b4
DEBUG: ><> 2: 31618 >> info depth 18 seldepth 29 multipv 1 score cp 883 nodes 3045996 nps 7252371 tbhits 0 time 420 pv d5f4 c1c6 f6g5 c6c7 g7g6 c7b7 f4h3 f2e1 h3f4 e1d1 b3d3 d1c2 b6d5 b7b3 d5e3 c2b2 d3b3 b2b3 f4d5 b3a4 g5f6 g4g5 h6g5 a4b5 d5f4 b5c5 f6e5 c5b4 g5g4
DEBUG: ><> 1: 31614 >> info depth 16 seldepth 22 multipv 1 score cp -17 nodes 536671 nps 4065689 tbhits 0 time 132 pv f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 c2c3 c5b6 d2d4 f8e8 e1g1 d7d5 e4d5 c8g4 h2h3 g4e2 d1e2 e5d4
DEBUG: ><> 4: HTTP request: POST http://en.lichess.org/fishnet/acquire, body: {"fishnet": {"apikey": "tTrhnrDt", "version": "1.0.7"}, "engine": {"options": {"threads": "4", "hash": "512.0"}, "name": "Stockfish 170316 64 POPCNT", "author": "T. Romstad, M. Costalba, J. Kiiski, G. Linscott"}}
DEBUG: ><> 4: HTTP response: 204 No Content
DEBUG: ><> 4: No job found. Backing off 12.5s
DEBUG: ><> 2: 31618 >> info depth 19 seldepth 32 multipv 1 score cp 891 nodes 4027709 nps 7283379 tbhits 0 time 553 pv d5f4 c1a1 f6g5 a1a7 g7g6 a7b7 f4h3 f2e1 h3f4 e1d1 b3d3 d1c2 b6d5 b7b3 d5e3 c2b2 d3b3 b2b3 g5f6 b3b4 f6e5 b4c5 g6g5 c5b5 e5d5
DEBUG: ><> 2: 31618 >> info depth 20 seldepth 32 multipv 1 score cp 891 nodes 4305126 nps 7296823 tbhits 0 time 590 pv d5f4 c1a1 f6g5 a1a7 g7g6 a7b7 f4h3 f2e1 h3f4 e1d1 b3d3 d1c2 b6d5 b7b3 d5e3 c2b2 d3b3 b2b3 g5f6 b3b4 f6e5 b4c5 g6g5 c5b5 e5d5 b5b4 d5d4 b4a4
DEBUG: ><> 2: 31618 >> info nodes 5045165 time 688
DEBUG: ><> 2: 31618 >> bestmove d5f4 ponder c1a1
INFO: ><> 2: Analysing http://en.lichess.org/F3A5ZeEN#76 with movetime 669 ms
DEBUG: ><> 2: 31618 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 e7e6 d2d4 d7d5 e4d5 e6d5 c2c4 g8f6 b1c3 d5c4 f1c4 f8d6 g1f3 e8g8 h2h3 f8e8 c1e3 c8f5 e1g1 c7c6 f3g5 f5g6 a2a4 d8c7 a1c1 h7h6 g5f3 b8d7 d1b3 e8e7 d4d5 a8e8 d5c6 b7c6 c3b5 c6b5 c4f7 g6f7 c1c7 f7b3 a4b5 d7b6 c7e7 e8e7 f3d4 b3e6 f1a1 f6d5 d4c6 e7c7 e3d4 e6d7 c6a7 b6c4 b2b3 c4b6 g2g3 d6c5 d4c5 c7c5 b3b4 c5c2 a1d1 g8f7 a7c6 d7c6 b5c6 c2c6 b4b5 c6c5 f2f4 c5b5 g1f2 b5b3 g3g4 f7f6
DEBUG: ><> 2: 31618 << isready
DEBUG: ><> 2: 31618 >> readyok
DEBUG: ><> 2: 31618 << go movetime 669 depth 99
DEBUG: ><> 2: 31618 >> info depth 1 seldepth 1 multipv 1 score cp -598 nodes 107 nps 107000 tbhits 0 time 1 pv f4f5 b3h3
DEBUG: ><> 2: 31618 >> info depth 2 seldepth 2 multipv 1 score cp -632 nodes 424 nps 424000 tbhits 0 time 1 pv h3h4 d5f4
DEBUG: ><> 2: 31618 >> info depth 3 seldepth 4 multipv 1 score cp -637 nodes 1161 nps 1161000 tbhits 0 time 1 pv g4g5 h6g5 f4g5 f6g5
DEBUG: ><> 2: 31618 >> info depth 4 seldepth 6 multipv 1 score cp -648 nodes 2847 nps 1423500 tbhits 0 time 2 pv h3h4 d5f4 d1d4 f6e5
DEBUG: ><> 2: 31618 >> info depth 5 seldepth 7 multipv 1 score cp -646 nodes 4215 nps 2107500 tbhits 0 time 2 pv h3h4 d5f4 d1d4 f4d3 f2e2 d3e5
DEBUG: ><> 2: 31618 >> info depth 6 seldepth 9 multipv 1 score cp -629 nodes 8632 nps 2877333 tbhits 0 time 3 pv g4g5 h6g5 f4g5 f6g5 d1g1 g5f6 h3h4 b3b2 f2f3
DEBUG: ><> 2: 31618 >> info depth 7 seldepth 9 multipv 1 score cp -648 nodes 13885 nps 4628333 tbhits 0 time 3 pv g4g5 h6g5 f4g5 f6g5 d1g1 g5f6 h3h4 b3h3 g1g4
DEBUG: ><> 2: 31618 >> info depth 8 seldepth 9 multipv 1 score cp -653 nodes 17202 nps 4300500 tbhits 0 time 4 pv g4g5 f6f5 g5h6 g7h6 h3h4 f5g4 d1d4 b3b2 f2e1
DEBUG: ><> 2: 31618 >> info depth 9 seldepth 14 multipv 1 score cp -663 nodes 82732 nps 5909428 tbhits 0 time 14 pv h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5d6 e8d8 d6c6 d8g8 f4d3 f2e2
DEBUG: ><> 2: 31618 >> info depth 10 seldepth 21 multipv 1 score cp -670 nodes 142165 nps 6462045 tbhits 0 time 22 pv h3h4 d5f4 d1d8 b6d5 d8f8 f6e7 f8g8 b3b2 f2f3 b2b3 f3f2 e7f6 g8f8 f6e5
DEBUG: ><> 2: 31618 >> info depth 11 seldepth 21 multipv 1 score cp -679 nodes 283695 nps 6754642 tbhits 0 time 42 pv h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5d4 e8g8 f4d3 f2g1 b3b1 g1h2 b1b2 h2g3 d3c5
DEBUG: ><> 2: 31618 >> info depth 12 seldepth 21 multipv 1 score cp -673 nodes 351692 nps 6763307 tbhits 0 time 52 pv d1d4 b3h3 d4e4 d5c3 e4d4 c3d5 d4e4 h3c3 f2g2 d5e3 g2f3 e3d5 f3f2 c3c2 f2f3 c2c3 f3f2
DEBUG: ><> 2: 31618 >> info depth 13 seldepth 23 multipv 1 score cp -682 nodes 510140 nps 6801866 tbhits 0 time 75 pv g4g5 f6f5 h3h4 f5f4 g5h6 b3b2 f2f1 g7h6 f1e1 b2h2 d1d3 h2h4 e1f2 h4h2 f2g1
DEBUG: ><> 2: 31618 >> info depth 14 seldepth 25 multipv 1 score cp -698 nodes 1476324 nps 6834833 tbhits 0 time 216 pv h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6 e8f8 f6e6 f8g8 e6f6 g8f8 f6e6 f8g8 e6f7 g8a8 d5f6
DEBUG: ><> 1: 31614 >> info nodes 2572836 time 650
DEBUG: ><> 1: 31614 >> bestmove g1f3
INFO: ><> 1: Analysing http://en.lichess.org/GLRfskIb#1 with movetime 645 ms
DEBUG: ><> 1: 31614 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves g2g3
DEBUG: ><> 1: 31614 << isready
DEBUG: ><> 1: 31614 >> readyok
DEBUG: ><> 1: 31614 << go movetime 645 depth 99
DEBUG: ><> 1: 31614 >> info depth 1 seldepth 1 multipv 1 score cp 63 nodes 42 nps 42000 tbhits 0 time 1 pv d7d5
DEBUG: ><> 1: 31614 >> info depth 2 seldepth 2 multipv 1 score cp 4 nodes 170 nps 170000 tbhits 0 time 1 pv d7d5 d2d4
DEBUG: ><> 1: 31614 >> info depth 3 seldepth 3 multipv 1 score cp 26 nodes 320 nps 320000 tbhits 0 time 1 pv d7d5 d2d4 e7e6
DEBUG: ><> 1: 31614 >> info depth 4 seldepth 4 multipv 1 score cp 6 nodes 890 nps 890000 tbhits 0 time 1 pv g8f6 g1f3 c7c5 f1g2
DEBUG: ><> 1: 31614 >> info depth 5 seldepth 5 multipv 1 score cp 18 nodes 2806 nps 1403000 tbhits 0 time 2 pv c7c5 d2d4 d7d5 g1f3 g8f6
DEBUG: ><> 1: 31614 >> info depth 6 seldepth 6 multipv 1 score cp 18 nodes 4008 nps 2004000 tbhits 0 time 2 pv c7c5 d2d4 d7d5 g1f3 g8f6 b1c3
DEBUG: ><> 1: 31614 >> info depth 7 seldepth 7 multipv 1 score cp 18 nodes 6078 nps 2026000 tbhits 0 time 3 pv c7c5 d2d4 d7d5 g1f3 g8f6 b1c3 c5d4
DEBUG: ><> 1: 31614 >> info depth 8 seldepth 8 multipv 1 score cp 18 nodes 14703 nps 2940600 tbhits 0 time 5 pv c7c5 g1f3 d7d5 d2d4 g8f6 d4c5 b8c6 c1f4
DEBUG: ><> 1: 31614 >> info depth 9 seldepth 9 multipv 1 score cp 10 nodes 21627 nps 3604500 tbhits 0 time 6 pv c7c5 g1f3 d7d5 d2d4 b8c6 e2e3 g8f6 f1g2 c5d4 e3d4
DEBUG: ><> 1: 31614 >> info depth 10 seldepth 14 multipv 1 score cp 25 nodes 66806 nps 4175375 tbhits 0 time 16 pv e7e5 d2d4 e5d4 c2c3 d4c3 b1c3 g8f6 e2e4 b8c6 g1f3 f8c5 f1g2
DEBUG: ><> 1: 31614 >> info depth 11 seldepth 14 multipv 1 score cp 44 nodes 122413 nps 4371892 tbhits 0 time 28 pv e7e5 d2d4 e5d4 c1f4 b8c6 g1f3 f8c5 e2e3 d4e3 f4e3 d7d6 e3c5
DEBUG: ><> 1: 31614 >> info depth 12 seldepth 19 multipv 1 score cp 21 nodes 375495 nps 4219044 tbhits 0 time 89 pv e7e5 g1f3 e5e4 f3h4 d7d5 d2d3 f7f5 f1g2 g8f6 e1g1 c7c5 d3e4 f5e4 b1c3
DEBUG: ><> 1: 31614 >> info depth 13 seldepth 22 multipv 1 score cp 31 nodes 697446 nps 4126899 tbhits 0 time 169 pv e7e5 g1f3 e5e4 f3h4 d7d5 d2d3 e4d3 c2d3 b8c6 f1g2 g8f6 e1g1 f8c5 c1f4 e8g8 b1d2
DEBUG: ><> 1: 31614 >> info depth 14 seldepth 22 multipv 1 score cp 29 nodes 938637 nps 4134964 tbhits 0 time 227 pv e7e5 g1f3 e5e4 f3h4 d7d5 d2d3 e4d3 d1d3 g8f6 f1g2 b8c6 e1g1 f8e7 b1c3 c6b4
DEBUG: ><> 2: 31618 >> info depth 15 seldepth 25 multipv 1 score cp -736 nodes 3487316 nps 6919277 tbhits 0 time 504 pv g4g5 f6f5 h3h4 b3b2 f2g3 b2b3 g3f2 b3h3 g5h6 g7h6 d1a1 h3h4 a1a3 h4f4 f2g3 b6c4 a3b3 c4e5 b3b5
DEBUG: ><> 2: 31618 >> info depth 16 seldepth 25 multipv 1 score cp -737 nodes 3955685 nps 6927644 tbhits 0 time 571 pv g4g5 f6f5 h3h4 b3h3 g5h6 g7h6 d1e1 h3h4 e1e8 h4f4 f2g3 d5f6 e8h8 f5g5 h8b8 f6e4 g3h3 b6c4 b8g8 g5f5 g8f8 f5e5 f8e8 e5f5
DEBUG: ><> 1: 31614 >> info depth 15 seldepth 23 multipv 1 score cp 22 nodes 1326218 nps 4144431 tbhits 0 time 320 pv e7e5 g1f3 e5e4 f3h4 g8f6 d2d3 e4d3 c2d3 d7d5 f1g2 c7c5 e1g1 f8e7 c1f4 e8g8 b1c3 b8c6 c3b5 a7a6
DEBUG: ><> 1: 31614 >> info depth 16 seldepth 23 multipv 1 score cp 19 nodes 1503356 nps 4152917 tbhits 0 time 362 pv e7e5 g1f3 e5e4 f3h4 g8f6 d2d3 e4d3 c2d3 d7d5 f1g2 f8e7 c1f4 b8c6 e1g1 f6h5 f4d2 e7h4 g3h4 e8g8 d2g5
DEBUG: ><> 2: 31618 >> info nodes 4655931 time 670
DEBUG: ><> 2: 31618 >> info depth 17 seldepth 26 multipv 1 score cp -737 nodes 4655931 nps 6938794 tbhits 0 time 671 pv g4g5 f6f5 h3h4 b3h3 g5h6 g7h6 d1g1 h3h4 g1g8 h4f4 f2g3 d5f6 g8h8 f5g5 h8b8 b6c4 g3h3 h6h5 b8f8
DEBUG: ><> 2: 31618 >> bestmove g4g5 ponder f6f5
INFO: ><> 2: Analysing http://en.lichess.org/F3A5ZeEN#75 with movetime 655 ms
DEBUG: ><> 2: 31618 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 e7e6 d2d4 d7d5 e4d5 e6d5 c2c4 g8f6 b1c3 d5c4 f1c4 f8d6 g1f3 e8g8 h2h3 f8e8 c1e3 c8f5 e1g1 c7c6 f3g5 f5g6 a2a4 d8c7 a1c1 h7h6 g5f3 b8d7 d1b3 e8e7 d4d5 a8e8 d5c6 b7c6 c3b5 c6b5 c4f7 g6f7 c1c7 f7b3 a4b5 d7b6 c7e7 e8e7 f3d4 b3e6 f1a1 f6d5 d4c6 e7c7 e3d4 e6d7 c6a7 b6c4 b2b3 c4b6 g2g3 d6c5 d4c5 c7c5 b3b4 c5c2 a1d1 g8f7 a7c6 d7c6 b5c6 c2c6 b4b5 c6c5 f2f4 c5b5 g1f2 b5b3 g3g4
DEBUG: ><> 2: 31618 << isready
DEBUG: ><> 2: 31618 >> readyok
DEBUG: ><> 2: 31618 << go movetime 655 depth 99
DEBUG: ><> 2: 31618 >> info depth 1 seldepth 1 multipv 1 score cp 737 nodes 114 nps 57000 tbhits 0 time 2 pv f7f6
DEBUG: ><> 2: 31618 >> info depth 2 seldepth 2 multipv 1 score cp 737 nodes 381 nps 190500 tbhits 0 time 2 pv f7f6 h3h4
DEBUG: ><> 2: 31618 >> info depth 3 seldepth 5 multipv 1 score cp 715 nodes 2326 nps 1163000 tbhits 0 time 2 pv b3b2 f2e1 d5f4 h3h4 f4g2 e1f1 g2h4
DEBUG: ><> 2: 31618 >> info depth 4 seldepth 6 multipv 1 score cp 737 nodes 3711 nps 1855500 tbhits 0 time 2 pv f7f6 h3h4 d5f4 d1d6 f6e5
DEBUG: ><> 2: 31618 >> info depth 5 seldepth 6 multipv 1 score cp 737 nodes 4302 nps 2151000 tbhits 0 time 2 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8
DEBUG: ><> 2: 31618 >> info depth 6 seldepth 7 multipv 1 score cp 737 nodes 4869 nps 2434500 tbhits 0 time 2 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5
DEBUG: ><> 2: 31618 >> info depth 7 seldepth 9 multipv 1 score cp 737 nodes 7075 nps 2358333 tbhits 0 time 3 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6
DEBUG: ><> 2: 31618 >> info depth 8 seldepth 11 multipv 1 score cp 737 nodes 15991 nps 3997750 tbhits 0 time 4 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6 e8f8 f6e6
DEBUG: ><> 2: 31618 >> info depth 9 seldepth 13 multipv 1 score cp 737 nodes 16921 nps 4230250 tbhits 0 time 4 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6 e8f8 f6e6 f8e8 e6f7
DEBUG: ><> 2: 31618 >> info depth 10 seldepth 16 multipv 1 score cp 737 nodes 19933 nps 3986600 tbhits 0 time 5 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6 e8f8 f6e6 g4g5 f4h3 f2e1 h6g5 h4g5
DEBUG: ><> 2: 31618 >> info depth 11 seldepth 23 multipv 1 score cp 737 nodes 46963 nps 5218111 tbhits 0 time 9 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6 e8f8 f6e6 g4g5 f4h3 f2e1 h6g5 f8e8 e6f6 h4g5 h3g5 e1d1 g5f3 e8d8
DEBUG: ><> 2: 31618 >> info depth 12 seldepth 23 multipv 1 score cp 737 nodes 60944 nps 6094400 tbhits 0 time 10 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6 e8f8 f6e6 g4g5 f4h3 f2e1 h6g5 f8e8 e6f6 h4g5 h3g5 e1d1 g5f3 e8d8 f6e5
DEBUG: ><> 2: 31618 >> info depth 13 seldepth 27 multipv 1 score cp 737 nodes 109154 nps 6064111 tbhits 0 time 18 pv f7f6 h3h4 d5f4 d1d6 f6e5 d6d8 b6d5 d8e8 e5f6 e8f8 f6e6 g4g5 f4h3 f2e1 h6g5 f8e8 e6f6 h4g5 h3g5 e1d1 g5f3 e8d8 f6e5 d8e8 e5f4 e8f8 f4e4
DEBUG: ><> 1: 31614 >> info depth 17 seldepth 23 multipv 1 score cp 26 nodes 1850227 nps 4129970 tbhits 0 time 448 pv e7e5 g1f3 e5e4 f3h4 g8f6 d2d3 e4d3 c2d3 d7d5 f1g2 f8e7 c1f4 h7h6 h4f3 c7c5 e1g1 b8c6
DEBUG: ><> 1: 31614 >> info depth 18 seldepth 23 multipv 1 score cp 26 nodes 2070091 nps 4123687 tbhits 0 time 502 pv e7e5 g1f3 e5e4 f3h4 g8f6 d2d3 e4d3 c2d3 d7d5 f1g2 f8e7 c1f4 h7h6 h4f3 e8g8 e1g1 b8c6 b1c3 g7g5 f4d2 d5d4
DEBUG: ><> 2: 31618 >> info depth 14 seldepth 35 multipv 1 score cp 745 nodes 976892 nps 6879521 tbhits 0 time 142 pv b3b2 f2f3 b2b3 f3f2 d5f4 h3h4 f7f6 d1a1 g7g5 h4g5 f6g5 a1a7 b6d5 a7a1 g5g4 a1g1 g4f5 g1a1 h6h5 a1a5 f5g5
DEBUG: ><> 1: 31614 >> info nodes 2644749 time 645
DEBUG: ><> 1: 31614 >> bestmove e7e5 ponder g1f3
INFO: ><> 1: Analysing http://en.lichess.org/GLRfskIb#0 with movetime 646 ms
DEBUG: ><> 1: 31614 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves 
DEBUG: ><> 1: 31614 << isready
DEBUG: ><> 1: 31614 >> readyok
DEBUG: ><> 1: 31614 << go movetime 646 depth 99
DEBUG: ><> 1: 31614 >> info depth 1 seldepth 1 multipv 1 score cp 75 nodes 48 nps 48000 tbhits 0 time 1 pv e2e4
DEBUG: ><> 1: 31614 >> info depth 2 seldepth 2 multipv 1 score cp 7 nodes 221 nps 221000 tbhits 0 time 1 pv e2e4 e7e5
DEBUG: ><> 1: 31614 >> info depth 3 seldepth 3 multipv 1 score cp 64 nodes 511 nps 255500 tbhits 0 time 2 pv g1f3 b8c6 d2d3
DEBUG: ><> 1: 31614 >> info depth 4 seldepth 4 multipv 1 score cp 7 nodes 1011 nps 505500 tbhits 0 time 2 pv g1f3 d7d5 d2d4 g8f6
DEBUG: ><> 1: 31614 >> info depth 5 seldepth 5 multipv 1 score cp 44 nodes 2053 nps 1026500 tbhits 0 time 2 pv e2e4 e7e5 d2d4 e5d4 g1e2
DEBUG: ><> 1: 31614 >> info depth 6 seldepth 6 multipv 1 score cp 40 nodes 4999 nps 1666333 tbhits 0 time 3 pv e2e4 e7e5 b1c3 b8c6 d2d3 d7d6
DEBUG: ><> 1: 31614 >> info depth 7 seldepth 7 multipv 1 score cp 46 nodes 6555 nps 2185000 tbhits 0 time 3 pv e2e4 d7d5 d2d4 d5e4 b1c3 g8f6 f1c4
DEBUG: ><> 1: 31614 >> info depth 8 seldepth 8 multipv 1 score cp 13 nodes 19540 nps 3256666 tbhits 0 time 6 pv e2e4 d7d5 e4e5 d5d4 d2d3 e7e6 g1f3 b8c6
DEBUG: ><> 1: 31614 >> info depth 9 seldepth 9 multipv 1 score cp 37 nodes 24425 nps 3489285 tbhits 0 time 7 pv e2e4 d7d5 e4d5 g8f6 b1c3 f6d5 d2d4 b8c6 g1f3
DEBUG: ><> 1: 31614 >> info depth 10 seldepth 15 multipv 1 score cp 39 nodes 61337 nps 3608058 tbhits 0 time 17 pv e2e4 d7d5 e4d5 c7c6 d2d4 c6d5 b1c3 g8f6 c1f4 b8c6 g1f3
DEBUG: ><> 1: 31614 >> info depth 11 seldepth 15 multipv 1 score cp 46 nodes 100395 nps 3861346 tbhits 0 time 26 pv e2e4 d7d5 e4d5 c7c6 d2d4 g8f6 g1f3 c6d5 b1c3 b8c6 c1f4 e7e6 c3b5
DEBUG: ><> 2: 31618 >> info depth 15 seldepth 35 multipv 1 score cp 758 nodes 1947848 nps 6931843 tbhits 0 time 281 pv b3b2 f2f3 b2b3 f3f2 d5f4 h3h4 f7f6 d1d8 b6d5 d8f8 f6e6 g4g5 f4h3 f2e2 h6g5 h4g5 h3g5 f8e8 e6f5 e8g8 f5f6 g8e8 f6f5
DEBUG: ><> 1: 31614 >> info depth 12 seldepth 15 multipv 1 score cp 23 nodes 340095 nps 4001117 tbhits 0 time 85 pv e2e4 e7e5 g1f3 g8f6 f3e5 d7d6 e5f3 f6e4 d1e2 d8e7 d2d4 d6d5 b1c3 e4c3
DEBUG: ><> 1: 31614 >> info depth 13 seldepth 20 multipv 1 score cp 17 nodes 872068 nps 3963945 tbhits 0 time 220 pv e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 g8f6 d4c6 b7c6 e4e5 f6d5 c2c4 d5b6 b1c3 f8b4
DEBUG: ><> 2: 31618 >> info depth 16 seldepth 35 multipv 1 score cp 769 nodes 3437517 nps 6972651 tbhits 0 time 493 pv d5f4 h3h4 f7f6 d1d8 b6d5 d8f8 f6e6 g4g5 h6g5 h4g5 f4h3 f2e2 h3g5 e2d1 g5f3 d1e2 f3e5 f8e8 e6f5 e8d8 f5e4 d8e8
DEBUG: ><> 1: 31614 >> info depth 14 seldepth 20 multipv 1 score cp 29 nodes 1261307 nps 3953940 tbhits 0 time 319 pv e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f1c4 g8f6 e1g1 f8d6 f3d4 c6e5 c4b3 f6e4 f1e1
DEBUG: ><> 2: 31618 >> info nodes 4596093 time 656
DEBUG: ><> 2: 31618 >> bestmove d5f4 ponder h3h4
INFO: ><> 2: Analysing http://en.lichess.org/F3A5ZeEN#74 with movetime 641 ms
DEBUG: ><> 2: 31618 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 e7e6 d2d4 d7d5 e4d5 e6d5 c2c4 g8f6 b1c3 d5c4 f1c4 f8d6 g1f3 e8g8 h2h3 f8e8 c1e3 c8f5 e1g1 c7c6 f3g5 f5g6 a2a4 d8c7 a1c1 h7h6 g5f3 b8d7 d1b3 e8e7 d4d5 a8e8 d5c6 b7c6 c3b5 c6b5 c4f7 g6f7 c1c7 f7b3 a4b5 d7b6 c7e7 e8e7 f3d4 b3e6 f1a1 f6d5 d4c6 e7c7 e3d4 e6d7 c6a7 b6c4 b2b3 c4b6 g2g3 d6c5 d4c5 c7c5 b3b4 c5c2 a1d1 g8f7 a7c6 d7c6 b5c6 c2c6 b4b5 c6c5 f2f4 c5b5 g1f2 b5b3
DEBUG: ><> 2: 31618 << isready
DEBUG: ><> 2: 31618 >> readyok
DEBUG: ><> 2: 31618 << go movetime 641 depth 99
DEBUG: ><> 2: 31618 >> info depth 1 seldepth 1 multipv 1 score cp -557 nodes 64 nps 32000 tbhits 0 time 2 pv h3h4
DEBUG: ><> 2: 31618 >> info depth 2 seldepth 3 multipv 1 score cp -551 nodes 509 nps 254500 tbhits 0 time 2 pv d1d2 h6h5
DEBUG: ><> 2: 31618 >> info depth 3 seldepth 3 multipv 1 score cp -571 nodes 1019 nps 509500 tbhits 0 time 2 pv d1d2 d5f6 d2d4
DEBUG: ><> 2: 31618 >> info depth 4 seldepth 6 multipv 1 score cp -568 nodes 2531 nps 1265500 tbhits 0 time 2 pv d1d4 b3b2 f2f3 b2b3 f3f2 f7f6
DEBUG: ><> 2: 31618 >> info depth 5 seldepth 9 multipv 1 score cp -584 nodes 7582 nps 2527333 tbhits 0 time 3 pv d1d4 d5f6 f4f5 h6h5 h3h4
DEBUG: ><> 2: 31618 >> info depth 6 seldepth 9 multipv 1 score cp -571 nodes 12266 nps 3066500 tbhits 0 time 4 pv d1a1 d5c3 a1e1 c3d5 h3h4 b3b2 f2f3
DEBUG: ><> 2: 31618 >> info depth 7 seldepth 9 multipv 1 score cp -593 nodes 23009 nps 4601800 tbhits 0 time 5 pv d1d4 d5f6 f4f5 h6h5 g3g4 b3h3 g4g5 f6g4 f2g2
DEBUG: ><> 2: 31618 >> info depth 8 seldepth 12 multipv 1 score cp -597 nodes 44549 nps 4949888 tbhits 0 time 9 pv d1d4 d5e3 d4d2 b6d5 d2d4 f7f6 h3h4 f6f5
DEBUG: ><> 2: 31618 >> info depth 9 seldepth 12 multipv 1 score cp -610 nodes 64985 nps 5415416 tbhits 0 time 12 pv d1d2 d5f6 d2d4 f6d5 h3h4 d5f6 f2g2 f6d5 g2f2
DEBUG: ><> 2: 31618 >> info depth 10 seldepth 19 multipv 1 score cp -610 nodes 138847 nps 5785291 tbhits 0 time 24 pv d1d4 d5f6 f2g2 b3b2 g2f1 b2b3 f1g2 f7e6 g3g4 f6d5 g2h2
DEBUG: ><> 2: 31618 >> info depth 11 seldepth 19 multipv 1 score cp -610 nodes 140046 nps 5835250 tbhits 0 time 24 pv d1d4 d5f6 f2g2 f7e6 g3g4 f6d5 g2h2 e6f6 h3h4 d5e3 g4g5 f6f5
DEBUG: ><> 2: 31618 >> info depth 12 seldepth 19 multipv 1 score cp -616 nodes 176419 nps 6083413 tbhits 0 time 29 pv d1d4 d5f6 f2g2 f7e6 g3g4 f6d5 g2h2 e6f6 h2g2 f6e6 d4e4 e6f6 e4d4 d5e3 g2f2 b6d5 d4a4 e3d1 f2g2
DEBUG: ><> 2: 31618 >> info depth 13 seldepth 21 multipv 1 score cp -641 nodes 777889 nps 6324300 tbhits 0 time 123 pv d1d2 d5f6 d2d4 b6d5 g3g4 b3h3 g4g5 f6g4 f2e2 g4e3 g5h6 h3h6 e2d3 h6h4
DEBUG: ><> 2: 31618 >> info depth 14 seldepth 21 multipv 1 score cp -644 nodes 1027093 nps 6379459 tbhits 0 time 161 pv d1d4 d5f6 f4f5 b6d5 d4a4 d5e7 a4f4 h6h5 f4a4 e7f5 g3g4 f5d6 a4a7 f7e6 a7g7 b3h3
DEBUG: ><> 1: 31614 >> info nodes 2610867 time 646
DEBUG: ><> 1: 31614 >> bestmove e2e4 ponder e7e6
DEBUG: ><> 1: HTTP request: POST http://en.lichess.org/fishnet/analysis/Ve3Kba1B, body: {"fishnet": {"apikey": "tTrhnrDt", "version": "1.0.7"}, "engine": {"options": {"threads": "4", "hash": "512.0"}, "name": "Stockfish 170316 64 POPCNT", "author": "T. Romstad, M. Costalba, J. Kiiski, G. Linscott"}, "analysis": [{"bestmove": "e2e4", "pv": "e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f1c4 g8f6 e1g1 f8d6 f3d4 c6e5 c4b3 f6e4 f1e1", "seldepth": 20, "tbhits": 0, "depth": 14, "score": {"cp": 29}, "multipv": 1, "time": 646, "nodes": 2610867, "nps": 3953940}, {"bestmove": "e7e5", "pv": "e7e5 g1f3 e5e4 f3h4 g8f6 d2d3 e4d3 c2d3 d7d5 f1g2 f8e7 c1f4 h7h6 h4f3 e8g8 e1g1 b8c6 b1c3 g7g5 f4d2 d5d4", "seldepth": 23, "tbhits": 0, "depth": 18, "score": {"cp": 26}, "multipv": 1, "time": 645, "nodes": 2644749, "nps": 4123687}, {"bestmove": "g1f3", "pv": "f1g2 e7e5 e2e4 f8c5 g1e2 e8g8 c2c3 c5b6 d2d4 f8e8 e1g1 d7d5 e4d5 c8g4 h2h3 g4e2 d1e2 e5d4", "seldepth": 22, "tbhits": 0, "depth": 16, "score": {"cp": -17}, "multipv": 1, "time": 650, "nodes": 2572836, "nps": 4065689}, {"bestmove": "e7e5", "pv": "e7e5 e2e4 b8c6 g1e2 f8c5 e1g1 d7d5 e4d5 f6d5 b1c3 c8e6 a2a3 e8g8 d2d3 a7a5 c1d2 d5c3 e2c3 c5b6 g1h1", "seldepth": 22, "tbhits": 0, "depth": 17, "score": {"cp": 16}, "multipv": 1, "time": 643, "nodes": 2487217, "nps": 3858427}, {"bestmove": "g1f3", "pv": "g1f3 d7d5 e1g1 e7e6 d2d4 b8d7 c1f4 f8e7 b1d2 e8g8 c2c4 h7h6 a1c1 b7b6 f3e5 d7e5 d4e5 f6d7 c4d5", "seldepth": 22, "tbhits": 0, "depth": 18, "score": {"cp": 11}, "multipv": 1, "time": 640, "nodes": 2526050, "nps": 3992610}, {"bestmove": "d7d5", "pv": "d7d5 g1f3 b8d7 c1f4 e7e5 f3e5 f6h5 e5f3 h5f4 g3f4 f8d6 e2e3 e8g8 b1d2 d7f6 e1g1 d8b6 d2b3 a7a5 a2a4 c8e6 h2h3 f6d7 d1e2", "seldepth": 26, "tbhits": 0, "depth": 18, "score": {"cp": 7}, "multipv": 1, "time": 640, "nodes": 2514523, "nps": 3925157}, {"bestmove": "g1f3", "pv": "g1f3 b8d7 d3d4 e7e6 e1g1 f8e7 c1f4 e8g8 b1d2 c6c5 e2e3 b7b6 c2c4 c8a6 a1c1 c5d4 f3d4 a8c8", "seldepth": 24, "tbhits": 0, "depth": 17, "score": {"cp": -12}, "multipv": 1, "time": 636, "nodes": 2601693, "nps": 4082069}, {"bestmove": "e7e5", "pv": "e7e5 g1f3 f8d6 e1g1 e8g8 b1d2 c8g4 h2h3 g4e6 e2e4 h7h6 b2b3 b8d7 c1b2 d8c7 f1e1 d5e4 d2e4 f6e4 e1e4 a8d8 b2c3 f8e8", "seldepth": 24, "tbhits": 0, "depth": 18, "score": {"cp": 25}, "multipv": 1, "time": 641, "nodes": 2663514, "nps": 4217859}, {"bestmove": "g1f3", "pv": "g1f3 f8d6 e1g1 e8g8 b1d2 b8d7 e2e4 f8e8 f1e1 b7b5 d3d4 a7a5 e4d5 c6d5 d4e5 d7e5 f3e5", "seldepth": 25, "tbhits": 0, "depth": 17, "score": {"cp": -34}, "multipv": 1, "time": 638, "nodes": 2606225, "nps": 4071200}, {"bestmove": "a7a5", "pv": "a7a5 g1f3 a5b4 e1g1 f8c5 c1b2 b4a3 b1a3 d8e7 d1c1 e8g8 c2c4 d5d4 a3c2 a8a1 c2a1 c8g4 a1b3 c5b6 c4c5 b6c7", "seldepth": 25, "tbhits": 0, "depth": 15, "score": {"cp": 101}, "multipv": 1, "time": 638, "nodes": 2737927, "nps": 4309892}, {"bestmove": "c1b2", "pv": "c1b2 a7a5 b1d2 e8g8 g1f3 b8d7 e1g1 a5b4 a3b4 a8a1 b2a1 b7b5 c2c3 d8c7 e2e4 d5e4 d2e4 f6e4 d3e4 c6c5 d1b1", "seldepth": 24, "tbhits": 0, "depth": 19, "score": {"cp": -52}, "multipv": 1, "time": 638, "nodes": 2740360, "nps": 4275404}, {"bestmove": "a7a5", "pv": "a7a5 b1d2 e8g8 g1f3 b8d7 e1g1 a5b4 a3b4 a8a1 b2a1 b7b5 c2c3 d8c7 a1b2 d7b6 d1c2 c8e6 f1a1 b6a4 f3g5 e6d7 e2e4 h7h6 g5f3 f8e8 c2b3 e8a8", "seldepth": 27, "tbhits": 0, "depth": 18, "score": {"cp": 59}, "multipv": 1, "time": 638, "nodes": 2655530, "nps": 4140322}, {"bestmove": "b1d2", "pv": "b1d2 a7a5 g1f3 b8d7 e1g1 a5b4 a3b4 a8a1 b2a1 b7b5 c2c3 d8c7 f1e1 c8b7 a1b2 f8a8 d1c2 d7b6 e2e4 b6a4 e1a1", "seldepth": 24, "tbhits": 0, "depth": 18, "score": {"cp": -51}, "multipv": 1, "time": 637, "nodes": 2690617, "nps": 4238778}, {"bestmove": "a7a5", "pv": "a7a5 g1f3 b8d7 c2c3 d7b6 e1g1 c8e6 c3c4 d5c4 f3e5 d6e5 b2e5 c4d3 e2d3 a5b4 a3b4 a8a1 d1a1 d8d3 e5f6", "seldepth": 26, "tbhits": 0, "depth": 16, "score": {"cp": 53}, "multipv": 1, "time": 637, "nodes": 2748320, "nps": 4305303}, {"bestmove": "c2c4", "pv": "c2c4 a7a5 c4c5 d6c7 g1f3 b8a6 e1g1 a8b8 d3d4 e5e4 f3e5 c7e5 d4e5 f6g4 d2b3 a5b4 a3b4 g4e5 b2e5 e8e5 d1d4 e5e8 d4d2 d8e7", "seldepth": 26, "tbhits": 0, "depth": 18, "score": {"cp": -58}, "multipv": 1, "time": 634, "nodes": 2739161, "nps": 4321317}, {"bestmove": "a7a5", "pv": "a7a5 c4c5 d6c7 g1f3 a5b4 a3b4 a8a1 d1a1 b8a6 e1g1 d5d4 b2a3 f6d5 d2c4 c8g4 h2h3 g4f5 g3g4 f5e6 f3e5 d5c3 f1e1", "seldepth": 30, "tbhits": 0, "depth": 17, "score": {"cp": 59}, "multipv": 1, "time": 639, "nodes": 2734578, "nps": 4304373}, {"bestmove": "c4c5", "pv": "c4c5 d6c7 g1f3 d5d4 e1g1 f6d5 d1b3 b8a6 d2c4 f7f6 e2e4 d4e3 f2e3 a5b4 a3b4 c8e6 e3e4 d5e3 f1f2 d8d7 g1h1 e3g2 h1g2", "seldepth": 31, "tbhits": 0, "depth": 17, "score": {"cp": -55}, "multipv": 1, "time": 637, "nodes": 2715705, "nps": 4263273}, {"bestmove": "d8a5", "pv": "d8a5 d1c2 d5c4 c2c4 b8d7 c4c3 a5c3 b2c3 a8a3 a1a3 d6a3 d2c4 a3c5 g1h3 c5d4 c3d4 e5d4", "seldepth": 25, "tbhits": 0, "depth": 16, "score": {"cp": 120}, "multipv": 1, "time": 639, "nodes": 2785081, "nps": 4332921}, {"bestmove": "d1c2", "pv": "d1c2 c8g4 h2h3 g4h5 b2c3 a5a7 g1f3 e5e4 d3e4 d5e4 c3d4 c6c5 d4f6 h5f3 d2e4 f3g2", "seldepth": 21, "tbhits": 0, "depth": 15, "score": {"cp": -122}, "multipv": 1, "time": 634, "nodes": 2580565, "nps": 4070055}, {"bestmove": "e5e4", "pv": "e5e4 d3e4 d5e4 f3d4 e4e3 f2e3 f6g4 g2f3 g4e3 d1c1 c8h3 c1c3 b8d7 c3a5 a8a5 e1f2 e3g4 f3g4 h3g4 h2h3 g4h5 g3g4 h5g6 h1g1", "seldepth": 39, "tbhits": 0, "depth": 19, "score": {"cp": 206}, "multipv": 1, "time": 640, "nodes": 3072616, "nps": 4800962}, {"bestmove": "d3e4", "pv": "d3e4 d5e4 f3d4 e4e3 f2e3 f6g4 g2f3 g4e3 d1c1 c8h3 c1c3 b8d7 c3a5 a8a5 e1f2 d7f6 h1b1 a5a4 d4b3 e3c4", "seldepth": 30, "tbhits": 0, "depth": 17, "score": {"cp": -212}, "multipv": 1, "time": 641, "nodes": 2993741, "nps": 4667247}, {"bestmove": "e4d3", "pv": "e4d3 e1g1 c6c5 e2e4 c5d4 c4d5 a5a4 f2f4 f6g4 e4e5 d6c7 d1b3 g4e3 f1f2 a4b3 d2b3 e3g2 g1g2 c8f5 d5d6 f5e4 g2g1", "seldepth": 31, "tbhits": 0, "depth": 18, "score": {"cp": 230}, "multipv": 1, "time": 647, "nodes": 3041874, "nps": 4701505}, {"bestmove": "e1g1", "pv": "e1g1 c6c5 e2e4 c5d4 c4d5 a5a4 f2f4 f6g4 e4e5 d6f8 d1a4 a8a4 f1c1 g4e3 g2e4 c8f5 e4f5 e3f5 d5d6 b8d7", "seldepth": 27, "tbhits": 0, "depth": 16, "score": {"cp": -227}, "multipv": 1, "time": 646, "nodes": 2975402, "nps": 4605885}, {"bestmove": "d5c4", "pv": "d5c4 d1c1 b7b5 e1g1 a5a4 d4c6 c8b7 c6d4 b7g2 g1g2 b8d7 f2f3 f6d5 d2e4 d6f8 d4f5 a4a6 e4c3 d5c3 c1c3 d7e5 c3d4 a6c6", "seldepth": 29, "tbhits": 0, "depth": 18, "score": {"cp": 268}, "multipv": 1, "time": 650, "nodes": 2877668, "nps": 4476026}, {"bestmove": "d1c1", "pv": "d1c1 b7b5 d4c6 b8c6 g2c6 c8d7 c6f3 a8c8 b2c3 a5c7 e1g1 d6e5 f1d1 d7c6 c3e5 e8e5 c1c3 e5c5 f3c6 c7c6", "seldepth": 25, "tbhits": 0, "depth": 17, "score": {"cp": -250}, "multipv": 1, "time": 652, "nodes": 2903749, "nps": 4452152}, {"bestmove": "c4c3", "pv": "c4c3 d2b3 c3b2 b3a5 b2a1q d1a1 a8a5 a3a4 b8d7 d4b3 a5a8 a1d4 d6f8 f1e1 c6c5 d4d3 a8a4 d3c2 d7e5 f2f4 e5c4 b3c5 e8e3 e1e3", "seldepth": 34, "tbhits": 0, "depth": 20, "score": {"cp": 298}, "multipv": 1, "time": 659, "nodes": 3249245, "nps": 4930569}, {"bestmove": "a3a4", "pv": "a3a4 a5d8 d4c6 b8c6 g2c6 c8h3 a4b5 a8a1 b2a1 h3f1 g1f1 d6e5 c6e8 d8e8 d2c4 e5a1 d1a1 e8b5 a1a8 f6e8", "seldepth": 30, "tbhits": 0, "depth": 16, "score": {"cp": 16}, "multipv": 1, "time": 659, "nodes": 3144282, "nps": 4753589}, {"bestmove": "b8c6", "pv": "b8c6 g2c6 c8d7 c6a8 a5a8 d1f3 a8f3 d2f3 f6e4 f1c1 d7g4 f3d4 d6e5 g1g2 d3d2 f2f3 d2c1q a1c1 c4c3 b2a1 e5d4 e3d4 g4f3 g2f3 e4d2 f3g4 d2b3 c1c3 b3a1", "seldepth": 33, "tbhits": 0, "depth": 20, "score": {"cp": 221}, "multipv": 1, "time": 671, "nodes": 3542464, "nps": 5326501}, {"bestmove": "g2c6", "pv": "g2c6 c8d7 c6a8 a5a8 d1f3 a8f3 d2f3 f6e4 a1c1 d7g4 f3d4 d3d2 d4b5 d2c1q f1c1 g4e2 b5d6 e4d6 b2c3 e8a8 c3b4 d6b5 g1g2 f7f6 f2f3 b5a3 c1a1", "seldepth": 29, "tbhits": 0, "depth": 19, "score": {"cp": -215}, "multipv": 1, "time": 676, "nodes": 3494836, "nps": 5169121}, {"bestmove": "c8d7", "pv": "c8d7 c6a8 a5a8 b2f6 g7f6 d1f3 a8f3 d2f3 e8a8 f3d4 d6a3 f1b1 c4c3 b1b3 b5b4 b3b4 c3c2 b4c4 a8c8 c4c8 d7c8 d4b3 d3d2 b3d2 c2c1q a1c1 a3c1 d2e4 c1b2 f2f3 g8g7 g1f2 c8d7 e4d6 b2c1 f2e2", "seldepth": 38, "tbhits": 0, "depth": 18, "score": {"cp": 208}, "multipv": 1, "time": 687, "nodes": 3550457, "nps": 5143513}, {"bestmove": "a3a4", "pv": "a3a4 a5b4 b2a3 b4a4 a3d6 a4d1 f1d1 a8a1 d1a1 e8c8 c6b7 c8e8 d6b4 f6d5 b7d5 e6d5 a1a5 d5c6 g1f1 f7f6 f1e1 g8f7 a5a7 f7g6 h2h4 e8a8 h4h5 g6h6", "seldepth": 35, "tbhits": 0, "depth": 18, "score": {"cp": 65}, "multipv": 1, "time": 695, "nodes": 3538377, "nps": 5091189}, {"bestmove": "f6e8", "pv": "f6e8 d2e4 d6e7 b2c3 a5d8 c3b4 e8c7 d1d2 e6d5 e4c3 e7f6 f2f3 c7a6 c3d5 d8d5 a1d1 a6b4 a3b4", "seldepth": 26, "tbhits": 0, "depth": 16, "score": {"cp": 143}, "multipv": 1, "time": 699, "nodes": 3370097, "nps": 4859465}, {"bestmove": "b2f6", "pv": "b2f6 g7f6", "seldepth": 33, "tbhits": 0, "depth": 17, "score": {"cp": -183}, "multipv": 1, "time": 711, "nodes": 3624734, "nps": 5098078}, {"bestmove": "f6e4", "pv": "f6e4 b2e5 d6a3 e5b2 b5b4 f3e5 a5d5 b2a3 e4c3 d1f3 b4a3 f3d5 e6d5 e3e4 c3e4 e5d3 c4d3", "seldepth": 26, "tbhits": 0, "depth": 16, "score": {"cp": 334}, "multipv": 1, "time": 716, "nodes": 3605574, "nps": 5030250}, {"bestmove": "b2f6", "pv": "b2f6 a5a8", "seldepth": 31, "tbhits": 0, "depth": 17, "score": {"cp": -296}, "multipv": 1, "time": 726, "nodes": 3644481, "nps": 5019946}, {"bestmove": "f6e4", "pv": "f6e4", "seldepth": 33, "tbhits": 0, "depth": 20, "score": {"cp": 489}, "multipv": 1, "time": 737, "nodes": 3758403, "nps": 5099597}, {"bestmove": "h2h3", "pv": "h2h3 g4h3 f3h4 h3f1 d1f1 g7g6 h4f3 a5c7 a1d1 d6a3 f3d2 e4d2 d1d2 b5b4 d2d1 h7h5 f1g2 c4c3 d1d3 c3c2", "seldepth": 25, "tbhits": 0, "depth": 16, "score": {"cp": -489}, "multipv": 1, "time": 748, "nodes": 3667632, "nps": 4887758}]}
DEBUG: ><> 2: 31618 >> info depth 15 seldepth 21 multipv 1 score cp -651 nodes 1520858 nps 6417122 tbhits 0 time 237 pv d1d4 d5f6 f2g2 b6d5 g2f2 d5c3 g3g4 c3b5 d4a4 b3h3 g4g5 f6g4 f2g2 h3b3 g5h6 g4h6
DEBUG: ><> 1: HTTP response: 202 Accepted
DEBUG: ><> 1: Got job: {"work":{"type":"analysis","id":"WpzY2erb"},"game_id":"AG4wdnGn","position":"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1","variant":"standard","moves":"e2e4 c7c5 g1f3 d7d6 f1c4 b8c6 d2d4 c5d4 f3d4 g8f6 d4c6 b7c6 b1c3 e7e6 f2f4 d6d5 e4e5 f6d7 c4b3 a7a5 a2a4 c8a6 c1e3 f8b4 d1d2 c6c5 d2f2 d5d4 e3d4 c5d4 f2d4 d8b6 e1c1 b6d4 d1d4 d7c5 b3a2 e8g8 c3e4 c5e4 d4e4 f8d8 c2c3 b4c5 b2b4 a5b4 c3b4 a6d3 e4e1 c5b4 e1d1 d8c8 c1b2 b4c3 b2a3 d3c2 d1c1 a8a4"}
DEBUG: ><> 1: 31614 << setoption name UCI_Chess960 value false
DEBUG: ><> 1: 31614 << setoption name UCI_Atomic value false
DEBUG: ><> 1: 31614 << setoption name UCI_Horde value false
DEBUG: ><> 1: 31614 << setoption name UCI_House value false
DEBUG: ><> 1: 31614 << setoption name UCI_KingOfTheHill value false
DEBUG: ><> 1: 31614 << setoption name UCI_Race value false
DEBUG: ><> 1: 31614 << setoption name UCI_3Check value false
DEBUG: ><> 1: 31614 << setoption name Skill Level value 20
DEBUG: ><> 1: 31614 << isready
DEBUG: ><> 1: 31614 >> readyok
DEBUG: ><> 1: 31614 << ucinewgame
DEBUG: ><> 1: 31614 << isready
DEBUG: ><> 2: 31618 >> info depth 16 seldepth 21 multipv 1 score cp -653 nodes 1838827 nps 6497621 tbhits 0 time 283 pv d1d4 d5f6 f2g2 b6d5 g2f2 d5c3 g3g4 c3b5 d4a4 b3h3 g4g5 f6g4 f2g2 h3b3 g5h6 g4h6 a4a5 h6f5 g2f2 f5d6
DEBUG: ><> 1: 31614 >> readyok
INFO: ><> 1: Analysing http://en.lichess.org/AG4wdnGn#58 with movetime 648 ms
DEBUG: ><> 1: 31614 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 c7c5 g1f3 d7d6 f1c4 b8c6 d2d4 c5d4 f3d4 g8f6 d4c6 b7c6 b1c3 e7e6 f2f4 d6d5 e4e5 f6d7 c4b3 a7a5 a2a4 c8a6 c1e3 f8b4 d1d2 c6c5 d2f2 d5d4 e3d4 c5d4 f2d4 d8b6 e1c1 b6d4 d1d4 d7c5 b3a2 e8g8 c3e4 c5e4 d4e4 f8d8 c2c3 b4c5 b2b4 a5b4 c3b4 a6d3 e4e1 c5b4 e1d1 d8c8 c1b2 b4c3 b2a3 d3c2 d1c1 a8a4
DEBUG: ><> 1: 31614 << isready
DEBUG: ><> 1: 31614 >> readyok
DEBUG: ><> 1: 31614 << go movetime 648 depth 99
DEBUG: ><> 1: 31614 >> info depth 0 score mate 0
DEBUG: ><> 1: 31614 >> info depth 15 seldepth 26 multipv 1 score cp 21 nodes 1931984 nps 965992000 tbhits 0 time 2 pv e2e4 e7e6
DEBUG: ><> 1: 31614 >> bestmove e2e4 ponder e7e6
WARNING: ><> 1: Very low time reported: 2 ms. Movetime was 648 ms
WARNING: ><> 1: Dropping exorbitant nps: 965992000
INFO: ><> 1: Analysing http://en.lichess.org/AG4wdnGn#57 with movetime 648 ms
DEBUG: ><> 1: 31614 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 c7c5 g1f3 d7d6 f1c4 b8c6 d2d4 c5d4 f3d4 g8f6 d4c6 b7c6 b1c3 e7e6 f2f4 d6d5 e4e5 f6d7 c4b3 a7a5 a2a4 c8a6 c1e3 f8b4 d1d2 c6c5 d2f2 d5d4 e3d4 c5d4 f2d4 d8b6 e1c1 b6d4 d1d4 d7c5 b3a2 e8g8 c3e4 c5e4 d4e4 f8d8 c2c3 b4c5 b2b4 a5b4 c3b4 a6d3 e4e1 c5b4 e1d1 d8c8 c1b2 b4c3 b2a3 d3c2 d1c1
DEBUG: ><> 1: 31614 << isready
DEBUG: ><> 1: 31614 >> readyok
DEBUG: ><> 1: 31614 << go movetime 648 depth 99
DEBUG: ><> 1: 31614 >> info depth 1 seldepth 2 multipv 1 score mate 1 nodes 208 nps 208000 tbhits 0 time 1 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 2 seldepth 2 multipv 1 score mate 1 nodes 489 nps 489000 tbhits 0 time 1 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 3 seldepth 2 multipv 1 score mate 1 nodes 868 nps 868000 tbhits 0 time 1 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 4 seldepth 2 multipv 1 score mate 1 nodes 1447 nps 1447000 tbhits 0 time 1 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 5 seldepth 2 multipv 1 score mate 1 nodes 1839 nps 919500 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 6 seldepth 2 multipv 1 score mate 1 nodes 2236 nps 1118000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 7 seldepth 2 multipv 1 score mate 1 nodes 2869 nps 1434500 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 8 seldepth 2 multipv 1 score mate 1 nodes 3358 nps 1679000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 9 seldepth 2 multipv 1 score mate 1 nodes 4059 nps 2029500 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 10 seldepth 2 multipv 1 score mate 1 nodes 4574 nps 2287000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 11 seldepth 2 multipv 1 score mate 1 nodes 5078 nps 2539000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 12 seldepth 2 multipv 1 score mate 1 nodes 5638 nps 2819000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 13 seldepth 2 multipv 1 score mate 1 nodes 5827 nps 2913500 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 14 seldepth 2 multipv 1 score mate 1 nodes 6069 nps 3034500 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 15 seldepth 2 multipv 1 score mate 1 nodes 6269 nps 3134500 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 16 seldepth 2 multipv 1 score mate 1 nodes 6453 nps 3226500 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 17 seldepth 2 multipv 1 score mate 1 nodes 6664 nps 3332000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 18 seldepth 2 multipv 1 score mate 1 nodes 6702 nps 3351000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 19 seldepth 2 multipv 1 score mate 1 nodes 6740 nps 3370000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 20 seldepth 2 multipv 1 score mate 1 nodes 6778 nps 3389000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 21 seldepth 2 multipv 1 score mate 1 nodes 6816 nps 3408000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 22 seldepth 2 multipv 1 score mate 1 nodes 6854 nps 3427000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 23 seldepth 2 multipv 1 score mate 1 nodes 6892 nps 3446000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 24 seldepth 2 multipv 1 score mate 1 nodes 6930 nps 3465000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 25 seldepth 2 multipv 1 score mate 1 nodes 6968 nps 3484000 tbhits 0 time 2 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 26 seldepth 2 multipv 1 score mate 1 nodes 7006 nps 2335333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 27 seldepth 2 multipv 1 score mate 1 nodes 7044 nps 2348000 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 28 seldepth 2 multipv 1 score mate 1 nodes 7082 nps 2360666 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 29 seldepth 2 multipv 1 score mate 1 nodes 7120 nps 2373333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 30 seldepth 2 multipv 1 score mate 1 nodes 7158 nps 2386000 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 31 seldepth 2 multipv 1 score mate 1 nodes 7196 nps 2398666 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 32 seldepth 2 multipv 1 score mate 1 nodes 7234 nps 2411333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 33 seldepth 2 multipv 1 score mate 1 nodes 7272 nps 2424000 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 34 seldepth 2 multipv 1 score mate 1 nodes 7310 nps 2436666 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 35 seldepth 2 multipv 1 score mate 1 nodes 7348 nps 2449333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 36 seldepth 2 multipv 1 score mate 1 nodes 7386 nps 2462000 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 37 seldepth 2 multipv 1 score mate 1 nodes 7424 nps 2474666 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 38 seldepth 2 multipv 1 score mate 1 nodes 7462 nps 2487333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 39 seldepth 2 multipv 1 score mate 1 nodes 7500 nps 2500000 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 40 seldepth 2 multipv 1 score mate 1 nodes 7538 nps 2512666 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 41 seldepth 2 multipv 1 score mate 1 nodes 7576 nps 2525333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 42 seldepth 2 multipv 1 score mate 1 nodes 7614 nps 2538000 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 43 seldepth 2 multipv 1 score mate 1 nodes 7652 nps 2550666 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 44 seldepth 2 multipv 1 score mate 1 nodes 7690 nps 2563333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 45 seldepth 2 multipv 1 score mate 1 nodes 7728 nps 2576000 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 46 seldepth 2 multipv 1 score mate 1 nodes 7766 nps 2588666 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 47 seldepth 2 multipv 1 score mate 1 nodes 7804 nps 2601333 tbhits 0 time 3 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 48 seldepth 2 multipv 1 score mate 1 nodes 7842 nps 1960500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 49 seldepth 2 multipv 1 score mate 1 nodes 7880 nps 1970000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 50 seldepth 2 multipv 1 score mate 1 nodes 7918 nps 1979500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 51 seldepth 2 multipv 1 score mate 1 nodes 7956 nps 1989000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 52 seldepth 2 multipv 1 score mate 1 nodes 7994 nps 1998500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 53 seldepth 2 multipv 1 score mate 1 nodes 8032 nps 2008000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 54 seldepth 2 multipv 1 score mate 1 nodes 8070 nps 2017500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 55 seldepth 2 multipv 1 score mate 1 nodes 8108 nps 2027000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 56 seldepth 2 multipv 1 score mate 1 nodes 8146 nps 2036500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 57 seldepth 2 multipv 1 score mate 1 nodes 8184 nps 2046000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 58 seldepth 2 multipv 1 score mate 1 nodes 8222 nps 2055500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 59 seldepth 2 multipv 1 score mate 1 nodes 8260 nps 2065000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 60 seldepth 2 multipv 1 score mate 1 nodes 8298 nps 2074500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 61 seldepth 2 multipv 1 score mate 1 nodes 8336 nps 2084000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 62 seldepth 2 multipv 1 score mate 1 nodes 8374 nps 2093500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 63 seldepth 2 multipv 1 score mate 1 nodes 8412 nps 2103000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 64 seldepth 2 multipv 1 score mate 1 nodes 8450 nps 2112500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 65 seldepth 2 multipv 1 score mate 1 nodes 8488 nps 2122000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 66 seldepth 2 multipv 1 score mate 1 nodes 8526 nps 2131500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 67 seldepth 2 multipv 1 score mate 1 nodes 8564 nps 2141000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 68 seldepth 2 multipv 1 score mate 1 nodes 8602 nps 2150500 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 69 seldepth 2 multipv 1 score mate 1 nodes 8640 nps 2160000 tbhits 0 time 4 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 70 seldepth 2 multipv 1 score mate 1 nodes 8678 nps 1735600 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 71 seldepth 2 multipv 1 score mate 1 nodes 8716 nps 1743200 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 72 seldepth 2 multipv 1 score mate 1 nodes 8754 nps 1750800 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 73 seldepth 2 multipv 1 score mate 1 nodes 8792 nps 1758400 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 74 seldepth 2 multipv 1 score mate 1 nodes 8830 nps 1766000 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 75 seldepth 2 multipv 1 score mate 1 nodes 8868 nps 1773600 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 76 seldepth 2 multipv 1 score mate 1 nodes 8906 nps 1781200 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 77 seldepth 2 multipv 1 score mate 1 nodes 8944 nps 1788800 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 78 seldepth 2 multipv 1 score mate 1 nodes 8982 nps 1796400 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 79 seldepth 2 multipv 1 score mate 1 nodes 9020 nps 1804000 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 80 seldepth 2 multipv 1 score mate 1 nodes 9058 nps 1811600 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 81 seldepth 2 multipv 1 score mate 1 nodes 9096 nps 1819200 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 82 seldepth 2 multipv 1 score mate 1 nodes 9134 nps 1826800 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 83 seldepth 2 multipv 1 score mate 1 nodes 9172 nps 1834400 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 84 seldepth 2 multipv 1 score mate 1 nodes 9210 nps 1842000 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 85 seldepth 2 multipv 1 score mate 1 nodes 9248 nps 1849600 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 86 seldepth 2 multipv 1 score mate 1 nodes 9286 nps 1857200 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 87 seldepth 2 multipv 1 score mate 1 nodes 9324 nps 1864800 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 88 seldepth 2 multipv 1 score mate 1 nodes 9362 nps 1872400 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 89 seldepth 2 multipv 1 score mate 1 nodes 9400 nps 1880000 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 90 seldepth 2 multipv 1 score mate 1 nodes 9438 nps 1887600 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 91 seldepth 2 multipv 1 score mate 1 nodes 9476 nps 1895200 tbhits 0 time 5 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 92 seldepth 2 multipv 1 score mate 1 nodes 9514 nps 1585666 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 93 seldepth 2 multipv 1 score mate 1 nodes 9552 nps 1592000 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 94 seldepth 2 multipv 1 score mate 1 nodes 9590 nps 1598333 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 95 seldepth 2 multipv 1 score mate 1 nodes 9628 nps 1604666 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 96 seldepth 2 multipv 1 score mate 1 nodes 9666 nps 1611000 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 97 seldepth 2 multipv 1 score mate 1 nodes 9704 nps 1617333 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 98 seldepth 2 multipv 1 score mate 1 nodes 9742 nps 1623666 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> info depth 99 seldepth 2 multipv 1 score mate 1 nodes 9780 nps 1630000 tbhits 0 time 6 pv a8a4
DEBUG: ><> 1: 31614 >> bestmove a8a4
INFO: ><> 1: Analysing http://en.lichess.org/AG4wdnGn#56 with movetime 648 ms
DEBUG: ><> 1: 31614 << position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 c7c5 g1f3 d7d6 f1c4 b8c6 d2d4 c5d4 f3d4 g8f6 d4c6 b7c6 b1c3 e7e6 f2f4 d6d5 e4e5 f6d7 c4b3 a7a5 a2a4 c8a6 c1e3 f8b4 d1d2 c6c5 d2f2 d5d4 e3d4 c5d4 f2d4 d8b6 e1c1 b6d4 d1d4 d7c5 b3a2 e8g8 c3e4 c5e4 d4e4 f8d8 c2c3 b4c5 b2b4 a5b4 c3b4 a6d3 e4e1 c5b4 e1d1 d8c8 c1b2 b4c3 b2a3 d3c2
DEBUG: ><> 1: 31614 << isready
DEBUG: ><> 1: 31614 >> readyok
DEBUG: ><> 1: 31614 << go movetime 648 depth 99
DEBUG: ><> 1: 31614 >> info depth 1 seldepth 1 multipv 1 score cp -435 nodes 104 nps 52000 tbhits 0 time 2 pv a2b3
DEBUG: ><> 1: 31614 >> info depth 2 seldepth 2 multipv 1 score cp -364 nodes 324 nps 162000 tbhits 0 time 2 pv a2b3 c2d1
DEBUG: ><> 1: 31614 >> info depth 3 seldepth 3 multipv 1 score cp -377 nodes 666 nps 333000 tbhits 0 time 2 pv a2b3 c3b4 a3b4
DEBUG: ><> 1: 31614 >> info depth 4 seldepth 5 multipv 1 score cp -427 nodes 1577 nps 788500 tbhits 0 time 2 pv a2b3 c2e4 g2g4 a8b8
DEBUG: ><> 1: 31614 >> info depth 5 seldepth 5 multipv 1 score cp -467 nodes 3210 nps 1605000 tbhits 0 time 2 pv a2b3 c2e4 g2g4 c8b8 g4g5
DEBUG: ><> 1: 31614 >> info depth 6 seldepth 9 multipv 1 score cp -423 nodes 5194 nps 1731333 tbhits 0 time 3 pv a2b3 c2b3 a3b3 a8b8 b3a3 c3b4 a3a2 c8c2 a2b3 c2g2
DEBUG: ><> 1: 31614 >> info depth 7 seldepth 10 multipv 1 score cp -427 nodes 6020 nps 2006666 tbhits 0 time 3 pv a2b3 c2b3 a3b3 a8b8 b3a3 c3b4 a3a2 c8c2 a2b1 c2g2
DEBUG: ><> 1: 31614 >> info depth 8 seldepth 11 multipv 1 score cp -476 nodes 9169 nps 3056333 tbhits 0 time 3 pv a2b3 c2b3 a3b3 a8b8 b3a3 c3b4 a3b2 b4d2 b2a1 d2c3 a1a2
DEBUG: ><> 1: 31614 >> info depth 9 seldepth 15 multipv 1 score cp -522 nodes 28214 nps 4030571 tbhits 0 time 7 pv a2b3 c2b3 a3b3 a8b8 b3c2 c3e5 c2d3 e5f4 g2g3 b8b3 d3e2 c8c2 e2e1
DEBUG: ><> 1: 31614 >> info depth 10 seldepth 21 multipv 1 score cp -484 nodes 75115 nps 5365357 tbhits 0 time 14 pv a2b3 c2b3 a3b3 a8b8 b3c2 c3e5 c2d3 c8c3 d3e2 e5f4 d1b1 b8d8 h1d1 c3c2 e2f3
DEBUG: ><> 1: 31614 >> info depth 11 seldepth 21 multipv 1 score cp -543 nodes 103876 nps 5467157 tbhits 0 time 19 pv a2b3 c2b3 a3b3 a8b8 b3c2 c3e5 c2d3 c8c3 d3e2 e5f4 d1b1 b8a8 b1d1 c3c2 e2f3 f4c7
DEBUG: ><> 1: 31614 >> info depth 12 seldepth 21 multipv 1 score cp -524 nodes 202751 nps 5792885 tbhits 0 time 35 pv a2b3 c2b3 a3b3 a8b8 b3c2 c3e5 c2d3 b8b3 d3e2 e5f4 h1e1 b3a3 d1a1 c8c2 e2f1 a3a1 e1a1 f4h2 a1b1

POST /abort/<workid> when exiting

If fishnet is killed during an analysis job, tell the server about it so it can redistribute the analysis without waiting for the timeout.

Enpoint is already available on stage, it returns a 204.

Game URL is wrong

><> 2: INFO: Analysing http://en.lichess.org/fishnet/yNgfYAD9#9

Should be

><> 2: INFO: Analysing http://lichess.org/yNgfYAD9#9

"

try to make it exciting to run - brainstorming

I like things that grow. I like being rewarded constantly.

Can we count and display stuff while fishnet runs? Like, sum of moves analysed, nodes searched, evaluation depth. Give me something to look at and brag about.

Also lichess could collect these stats on the server and send them to the client on start, for persistence.

--silent option

The move nodes can output up to a hundred lines per second to stdout. That's a lot of data with no use.

When ran with --silent fishnet would only output the summary message every minute.

I could (and actually do) > /dev/null but having the summary every minute would be nice.

make sure data is sent with the correct type

a single mistyped value loses the entire analysis. Here's what lichess expects from an analysis move:

    case class Evaluation(
        pv: Option[String],
        score: Score,
        time: Option[Int],
        nodes: Option[Int],
        nps: Option[Int],
        depth: Option[Int])

        case class Score(cp: Option[Int], mate: Option[Int])

use nodes instead of movetime to limit analysis

go nodes 1000000

Actually we're limiting on movetime, and adjusting movetime based on nps. It seems like what we really want is ensure a certain number of nodes are crunched for each move, and since version 7 stockfish allows that.

Benefits:

  • No need to run initial benchmark!
  • No need to adjust movetime!
  • Clients can run with a Nice value, it doesn't matter that stockfish gets a full core. If the computer is running something else, the current move will take longer to analyse, but the quality remains the same.

Cons:

  • ?

memory usage

Set "Fixed Backoff" to 1 or 2 and watch the memory usage grow.

ctrl + c on windows kills engine processes directly

[fishnet v1.3.6] Analyzed 18994 positions, crunched 55324 million nodes                                                                       
><> 1: Analysing http://en.lichess.org/rtf87EdE#6                                                                                             
><> 1: WARNING: Unexpected engine output: ^C                                                                                                  
><> 1: ERROR: Engine process has died. Backing off 0.6s                                                                                       
Traceback (most recent call last):                                                                                                            
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 499, in run_inner                      
    path, request = self.work()                                                                                                               
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 590, in work                           
    result["analysis"] = self.analysis(self.job)                                                                                              
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 643, in analysis                       
    nodes=3000000, movetime=4000)                                                                                                             
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 343, in go                             
    command, arg = recv(p)                                                                                                                    
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 266, in recv                           
    raise EOFError()                                                                                                                          
EOFError                                                                                                                                      
><> 1: Started engine process, pid: 9784, threads: 4, identification: Stockfish 230316 64                                                     
><> 1: Analysing http://en.lichess.org/rtf87EdE#63                                                                                            
><> 1: WARNING: Unexpected engine output: ^C                                                                                                  
><> 1: ERROR: Engine process has died. Backing off 1.4s                                                                                       
Traceback (most recent call last):                                                                                                            
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 499, in run_inner                      
    path, request = self.work()                                                                                                               
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 590, in work                           
    result["analysis"] = self.analysis(self.job)                                                                                              
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 643, in analysis                       
    nodes=3000000, movetime=4000)                                                                                                             
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 343, in go                             
    command, arg = recv(p)                                                                                                                    
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 266, in recv                           
    raise EOFError()                                                                                                                          
EOFError                                                                                                                                      
><> 1: WARNING: Unexpected engine output: ^C                                                                                                  
><> 1: ERROR: Engine process has died. Backing off 2.7s                                                                                       
Traceback (most recent call last):                                                                                                            
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 496, in run_inner                      
    self.start_engine()                                                                                                                       
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 558, in start_engine                   
    self.engine_info = uci(self.process)                                                                                                      
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 284, in uci                            
    command, arg = recv(p)                                                                                                                    
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 266, in recv                           
    raise EOFError()                                                                                                                          
EOFError                                                                                                                                      
><> 1: Started engine process, pid: 11036, threads: 4, identification: Stockfish 230316 64                                                    
><> 1: Analysing http://en.lichess.org/rtf87EdE#61                                                                                            
><> 1: WARNING: Unexpected engine output: ^C                                                                                                  
><> 1: ERROR: Engine process has died. Backing off 3.3s                                                                                       
Traceback (most recent call last):                                                                                                            
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 499, in run_inner                      
    path, request = self.work()                                                                                                               
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 590, in work                           
    result["analysis"] = self.analysis(self.job)                                                                                              
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 643, in analysis                       
    nodes=3000000, movetime=4000)                                                                                                             
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 343, in go                             
    command, arg = recv(p)                                                                                                                    
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 266, in recv                           
    raise EOFError()                                                                                                                          
EOFError                                                                                                                                      
><> 1: WARNING: Unexpected engine output: ^C                                                                                                  
><> 1: ERROR: Engine process has died. Backing off 3.2s                                                                                       
Traceback (most recent call last):                                                                                                            
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 496, in run_inner                      
    self.start_engine()                                                                                                                       
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 557, in start_engine                   
    self.process = popen_engine(get_engine_command(self.conf, False), get_engine_dir(self.conf))                                              
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 1114, in get_engine_command            
    return validate_engine_command(os.path.join(".", filename), conf)                                                                         
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 951, in validate_engine_command        
    command, arg = recv(process)                                                                                                              
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 266, in recv                           
    raise EOFError()                                                                                                                          
EOFError                                                                                                                                      


### Good bye! Aborting pending jobs ...                                                                                                       

Traceback (most recent call last):                                                                                                            
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 1197, in cmd_main                      
    worker.finished.wait(60 / len(workers))                                                                                                   
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 549, in wait                                       
    signaled = self._cond.wait(timeout)                                                                                                       
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 297, in wait                                       
    gotit = waiter.acquire(True, timeout)                                                                                                     
KeyboardInterrupt                                                                                                                             

During handling of the above exception, another exception occurred:                                                                           

Traceback (most recent call last):                                                                                                            
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\runpy.py", line 170, in _run_module_as_main                            
    "__main__", mod_spec)                                                                                                                     
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\runpy.py", line 85, in _run_code                                       
    exec(code, run_globals)                                                                                                                   
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 1401, in <module>                      
    sys.exit(main(sys.argv))                                                                                                                  
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 1391, in main                          
    sys.exit(args.func(args))                                                                                                                 
  File "C:\Users\freefal\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fishnet.py", line 1214, in cmd_main                      
    time.sleep(0.5)                                                                                                                           
KeyboardInterrupt                                                                                                                             

deploy in container

deploying the python client is easy. the sript runs without dependencies using python 2 or 3. however we also have to deploy stockfish.

@lukhas i remember you wanted to look into this, at some point

^C minor issue

><> 1: INFO: Analysing http://en.lichess.org/fishnet/Y1U60EYF#1
><> 1: INFO: Analysing http://en.lichess.org/fishnet/Y1U60EYF#0
><> 1: INFO: Time taken for http://en.lichess.org/Y1U60EYF: 57.2s (1.2s per position)
^C[fishnet 1.2.0] Good bye. Aborting pending jobs ...
><> 1: INFO: Started engine process, pid: 27129, threads: 3, identification: Stockfish 220316 64 BMI2
[fishnet 1.2.0]  - Aborted 8gY26Cox
> fishnet ±(master 2db4c) 

Expected: shutdown
Happened: an engine process was spawned, then fishnet shutdown correctly
Annoyance level: incredibly low

missing process?

Happens sometimes (~20%) on a prod server. One of the 2 processes never logs a thing.

root@homer:/home/fishnet/fishnet# python fishnet.py polyglot.ini --verbose                                                                                        [780/1976]
  _____ _     _     _   _      _
 |  ___(_)___| |__ | \ | | ___| |_
 | |_  | / __| '_ \|  \| |/ _ \ __|
 |  _| | \__ \ | | | |\  |  __/ |_
 |_|   |_|___/_| |_|_| \_|\___|\__| 0.0.1
 Distributed Stockfish analysis for lichess.org

INFO: MainThread: Hashtable size per process: 256 MB
INFO: MainThread: Cores: 7 + 1
INFO: MainThread: Available memmory: 38631 MB / 60%
DEBUG: Process 2: 28075 << uci
DEBUG: Process 2: 28075 >> Stockfish 140316 64 POPCNT by T. Romstad, M. Costalba, J. Kiiski, G. Linscott
DEBUG: Process 2: 28075 >> id name Stockfish 140316 64 POPCNT
DEBUG: Process 2: 28075 >> id author T. Romstad, M. Costalba, J. Kiiski, G. Linscott
DEBUG: Process 2: 28075 >> 
DEBUG: Process 2: 28075 >> option name Write Debug Log type check default false
DEBUG: Process 2: 28075 >> option name Contempt type spin default 0 min -100 max 100
DEBUG: Process 2: 28075 >> option name Threads type spin default 1 min 1 max 128
DEBUG: Process 2: 28075 >> option name Hash type spin default 16 min 1 max 1048576
DEBUG: Process 2: 28075 >> option name Clear Hash type button
DEBUG: Process 2: 28075 >> option name Ponder type check default false
DEBUG: Process 2: 28075 >> option name MultiPV type spin default 1 min 1 max 500
DEBUG: Process 2: 28075 >> option name Skill Level type spin default 20 min 0 max 20
DEBUG: Process 2: 28075 >> option name Move Overhead type spin default 30 min 0 max 5000
DEBUG: Process 2: 28075 >> option name Minimum Thinking Time type spin default 20 min 0 max 5000
DEBUG: Process 2: 28075 >> option name Slow Mover type spin default 89 min 10 max 1000
DEBUG: Process 2: 28075 >> option name nodestime type spin default 0 min 0 max 10000
DEBUG: Process 2: 28075 >> option name UCI_Chess960 type check default false
DEBUG: Process 2: 28075 >> option name UCI_Atomic type check default false
DEBUG: Process 2: 28075 >> option name UCI_Horde type check default false
DEBUG: Process 2: 28075 >> option name UCI_House type check default false
DEBUG: Process 2: 28075 >> option name UCI_KingOfTheHill type check default false
DEBUG: Process 2: 28075 >> option name UCI_Race type check default false
DEBUG: Process 2: 28075 >> option name UCI_3Check type check default false
DEBUG: Process 2: 28075 >> option name SyzygyPath type string default <empty>
DEBUG: Process 2: 28075 >> option name SyzygyProbeDepth type spin default 1 min 1 max 100
DEBUG: Process 2: 28075 >> option name Syzygy50MoveRule type check default true
DEBUG: Process 2: 28075 >> option name SyzygyProbeLimit type spin default 6 min 0 max 6
DEBUG: Process 2: 28075 >> uciok
INFO: Process 2: Started engine process, pid: 28075, threads: 3, identification: Stockfish 140316 64 POPCNT
DEBUG: Process 2: 28075 << setoption name Threads value 3
DEBUG: Process 2: 28075 << setoption name hash value 256
DEBUG: Process 2: 28075 << isready
DEBUG: Process 2: 28075 >> readyok
DEBUG: Process 2: 28075 << bench

log continues with Process 2 working normally.

Once, when I ^C fishnet during this bug, the following message appeared:

^CException in thread Process 1 (most likely raised during interpreter shutdown):

Sometimes it's Process 1 not logging, sometimes it's Process 2.

It can be reproduced on homer, which you have access to, in /home/fishnet/fishnet. Give it several tries to reproduce it. It's ok if fishnet is down on homer.

analysis: bestmove != pv[0]

    {
      "nodes": 490319,
      "seldepth": 21,
      "tbhits": 0,
      "score": {
        "cp": -339
      },
      "pv": "d2d3 f8c5 g1f3 d7d6 c2c3 c5b6 d3d4 c8g4 e1g1 g4f3 d1f3 e5d4 c3d4 b6d4",
      "depth": 12,
      "bestmove": "g1f3",
      "time": 407,
      "nps": 1149230
    },

I can't show a g1f3 arrow and suggest a d2d3 line. What do?

client unique ID

Generate unique ID on client start (doesn't need to persist across runs).

Send it with all requests to the server.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.