Skip to main content

Python bindings for extracting Stockfish NNUE neural network activations and evaluations

Project description

nnue-interface

Python bindings for extracting Stockfish NNUE neural network activations and evaluations.

Features

Key Capabilities:

  • Extract NNUE accumulator activations (hidden layer 0): 3072 dimensions (Big network) or 128 dimensions (Small network)
  • Extract intermediate layer activations (layers 1-2): For deep network analysis
  • Extract PSQT values: Piece-square table contributions
  • Get final evaluations in centipawns
  • Cross-platform: Works on Linux, macOS, and Windows
  • Fast: Compiled C++ extension via pybind11
  • ML-Ready: All outputs as float32 numpy arrays

Installation

From PyPI (recommended)

pip install nnue-interface

From Source

git clone https://github.com/yourusername/nnue-interface.git
cd nnue-interface
pip install -e .

Requirements:

  • Python 3.8+
  • C++17 compatible compiler (GCC, Clang, MSVC)
  • CMake 3.15+
  • NumPy 1.19+

Quick Start

import nnue_interface
import numpy as np

# Extract all NNUE activations and evaluation for a position
fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"

acc_white, acc_black, psqt, layer1, layer2, eval_final, eval_psqt = \
    nnue_interface.get_activations_and_eval(fen)

print(f"Evaluation: {eval_final:.2f} cp")
print(f"Accumulator shape: {acc_white.shape}")  # (3072,) for Big network
print(f"Layer 1 shape: {layer1.shape}")         # (30,) 
print(f"Layer 2 shape: {layer2.shape}")         # (32,)

API Reference

get_activations_and_eval(fen: str) -> tuple

Extract all NNUE activations and evaluation for a given position.

Parameters:

  • fen (str): FEN notation of the chess position

Returns:

  • acc_white (ndarray): White perspective accumulator, shape (3072,) or (128,)
  • acc_black (ndarray): Black perspective accumulator, shape (3072,) or (128,)
  • psqt (ndarray): PSQT values, shape (2, 8)
  • layer1 (ndarray): First hidden layer activations, shape (30,) or (15×2)
  • layer2 (ndarray): Second hidden layer activations, shape (32,)
  • eval_final (float): Final evaluation in centipawns
  • eval_psqt (float): PSQT-only evaluation in centipawns

get_evaluation(fen: str) -> float

Get only the final evaluation for a position (faster if you don't need activations).

Parameters:

  • fen (str): FEN notation

Returns:

  • Evaluation in centipawns (float)

get_network_info() -> dict

Get information about the NNUE network architecture.

Returns:

{
    'TransformedFeatureDimensionsBig': 3072,
    'TransformedFeatureDimensionsSmall': 128,
    'L2Big': 15,
    'L3Big': 32,
    'L2Small': 15,
    'L3Small': 32,
    'PSQTBuckets': 8,
}

Examples

Using Activations for Machine Learning

import nnue_interface
import numpy as np

# Collect training data
positions = [
    "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
    "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1",
    # ... more positions
]

X_acc = []  # Accumulator features
X_layers = []  # Intermediate layer features
y = []  # Target evaluations

for fen in positions:
    acc_w, acc_b, psqt, layer1, layer2, eval_final, _ = \
        nnue_interface.get_activations_and_eval(fen)
    
    # Combine features
    features = np.concatenate([acc_w, acc_b, psqt.flatten(), layer1, layer2])
    
    X_layers.append(features)
    y.append(eval_final)

X = np.array(X_layers)
y = np.array(y)

# Now use X and y for ML training (scikit-learn, PyTorch, TensorFlow, etc.)

Analyzing Network Activations

import nnue_interface

fen = "r1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4"

acc_w, acc_b, psqt, layer1, layer2, eval_final, _ = \
    nnue_interface.get_activations_and_eval(fen)

print(f"Position evaluation: {eval_final:.2f} cp")
print(f"\nAccumulator statistics (White):")
print(f"  Mean: {acc_w.mean():.2f}")
print(f"  Std:  {acc_w.std():.2f}")
print(f"  Min:  {acc_w.min():.2f}")
print(f"  Max:  {acc_w.max():.2f}")

print(f"\nLayer 1 sparsity: {(layer1 == 0).sum() / layer1.size * 100:.1f}%")
print(f"Layer 2 sparsity: {(layer2 == 0).sum() / layer2.size * 100:.1f}%")

Architecture

The NNUE network consists of:

  1. Input Layer (Accumulator): 3072 or 128 dimensions

    • Efficiently updatable representation of board state
    • Updated incrementally as moves are made
  2. Layer 1:

    • FC layer (sparse input) + SqrClippedReLU + ClippedReLU
    • Output: 15 dims × 2 (concatenated)
  3. Layer 2:

    • FC layer + ClippedReLU
    • Output: 32 dims
  4. Output Layer:

    • FC layer → single scalar evaluation
    • Also uses PSQT values for final output

All intermediate activations use int8/uint8 quantization for efficiency, converted to float32 for Python.

Performance

  • Speed: ~50-200 µs per position (depending on CPU)
  • Memory: ~2 MB for network weights
  • No dependencies: Only NumPy required at runtime

Building from Source

Linux / macOS

git clone https://github.com/realrushil/nnue-interface.git
cd nnue-interface
pip install -e .

Windows (MSYS2 UCRT64)

git clone https://github.com/realrushil/nnue-interface.git
cd nnue-interface
pip install -e .

Build Documentation

CMake is used for cross-platform builds. To manually build:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Testing

pip install pytest numpy
pytest tests/

License

GPL-3.0-or-later (same as Stockfish)

Citation

If you use this in research, please cite Stockfish:

@software{stockfish,
  title = {Stockfish},
  url = {https://stockfishchess.org/},
  author = {Tord Romstad and Marco Costalba and Joona Kiiski and Gary Linscott},
}

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests: pytest tests/
  5. Submit a pull request

Troubleshooting

Build fails on Linux with missing dependencies

# Ubuntu/Debian
sudo apt-get install build-essential cmake python3-dev

# Fedora
sudo dnf install gcc gcc-c++ cmake python3-devel

Import error on Windows

Make sure you're using the correct Python version (64-bit). The wheel must match your Python installation:

python -c "import struct; print('64-bit' if struct.calcsize('P') == 8 else '32-bit')"

Resources

Authors

  • Created with Stockfish source code
  • Python bindings by Rushil Saraf

Have questions? Open an issue on GitHub!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

nnue_interface-0.2.7-cp313-cp313-win_amd64.whl (351.1 kB view details)

Uploaded CPython 3.13Windows x86-64

nnue_interface-0.2.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.7-cp313-cp313-macosx_11_0_universal2.whl (589.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.7-cp313-cp313-macosx_10_15_universal2.whl (599.1 kB view details)

Uploaded CPython 3.13macOS 10.15+ universal2 (ARM64, x86-64)

nnue_interface-0.2.7-cp312-cp312-win_amd64.whl (351.0 kB view details)

Uploaded CPython 3.12Windows x86-64

nnue_interface-0.2.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.7-cp312-cp312-macosx_11_0_universal2.whl (589.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.7-cp312-cp312-macosx_10_15_universal2.whl (599.1 kB view details)

Uploaded CPython 3.12macOS 10.15+ universal2 (ARM64, x86-64)

nnue_interface-0.2.7-cp311-cp311-win_amd64.whl (349.5 kB view details)

Uploaded CPython 3.11Windows x86-64

nnue_interface-0.2.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.7-cp311-cp311-macosx_11_0_universal2.whl (588.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.7-cp311-cp311-macosx_10_15_universal2.whl (597.7 kB view details)

Uploaded CPython 3.11macOS 10.15+ universal2 (ARM64, x86-64)

nnue_interface-0.2.7-cp310-cp310-win_amd64.whl (348.7 kB view details)

Uploaded CPython 3.10Windows x86-64

nnue_interface-0.2.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.7-cp310-cp310-macosx_13_0_x86_64.whl (596.5 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

nnue_interface-0.2.7-cp310-cp310-macosx_11_0_universal2.whl (586.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

nnue_interface-0.2.7-cp39-cp39-win_amd64.whl (126.2 kB view details)

Uploaded CPython 3.9Windows x86-64

nnue_interface-0.2.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.7-cp39-cp39-macosx_13_0_x86_64.whl (374.9 kB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

nnue_interface-0.2.7-cp38-cp38-win_amd64.whl (125.1 kB view details)

Uploaded CPython 3.8Windows x86-64

nnue_interface-0.2.7-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nnue_interface-0.2.7-cp38-cp38-macosx_13_0_x86_64.whl (375.1 kB view details)

Uploaded CPython 3.8macOS 13.0+ x86-64

File details

Details for the file nnue_interface-0.2.7-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 209fffe99753c58c3b123745765f84d941ecfe71ca8ae1c2c4900af529b10724
MD5 65ce2b54e5fda5486362781ac5700dfb
BLAKE2b-256 902ae85cbc892ac2921a3fbd3f556634b53ce31347575a1e17aa556060580edd

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5e2fbefe3c89e2b093c39a29540269416f28c5bf55a81ee872d385101fa36c83
MD5 f3bce7f72598dced77db8e738ecffb44
BLAKE2b-256 830b8c3f5305b878da869b24c3eb5d2fbbc8df698a4b1dbd6ea31e4f2173ef68

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6a1bd785453c14c9b70cb715ba723b9a458d4307c7bba171330d1f4876fa9b8b
MD5 d2eca29e3aae7d270b688663ceb12845
BLAKE2b-256 51e94b832b01fdeea805cf08708949e722dd7a3175b3faa41ab7345142c79a92

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp313-cp313-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp313-cp313-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 0f30e1fa542feb62b252d90f20024c40ad4d50bed4a8996ba08cb7bf09fafe8f
MD5 e0e9be364caa6ab0443a5356c2087a74
BLAKE2b-256 0b9c63e8ff4cb8ea19a8560e86a7cf9fac8c9d238c652b0a009652f5d14ed8d7

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a4f2dce13dfecc0e8fbbcb2f820cd19142fb76ab630fa4e17c27e337abb717cc
MD5 9337b398b8f4f3d4008942a2af469395
BLAKE2b-256 6f69e328af49dd65e52402752d82454812a6cc1cecaab59fc7b5196f1eb7b5f1

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8efa6fb21275edf9f0fc3db13c3eb44a4f4d47dfa6aaddcacc4f5feb101595d8
MD5 60a9ecaf394894b60fe7f236abea270c
BLAKE2b-256 b72ce1e186d335d278691a2650c103f7ea19fa0d659e6c40ce831835067b8b46

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 7a1814d3c00f751511247e66c9a405b8dc8718f3dfed5f8f4ebcbe37ac39614f
MD5 7f97ec0e62d434a4b2fa9c2c6bf949ea
BLAKE2b-256 561fcc17cfea13797ea61cbdc490e09b29726f5f33204e490d52c8d995a479b3

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp312-cp312-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp312-cp312-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 4af9afc9534f08eefca727ae74ff5eb1d0fe1217a49446a81db5d071673f46dc
MD5 75381804a7aa58cae018f84965a63f3a
BLAKE2b-256 c4ef371b76c461a7c3cb6cda4798f045d950485f4165be24400973b363bae9fb

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 33c7df8fca55ddb63e27c2d66f1ddb99cf8cc24cb747aafa7041b9b6071b3012
MD5 37820d3e3471fbebfb5c3105bf6ebdea
BLAKE2b-256 6a79b9a2af1a1f59fcf47a3f564fe990226d71cfc57f739bc27f8ad82a445f0c

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 834219634d3808755b8387d1b2cf7aaead8aa3d9e75744e419560c9aa2d75859
MD5 ca53da5f76c1f60cddfa8f9a37f4d401
BLAKE2b-256 e1952917f3d0f889b5aa6ee328b9de64412823a58f880a5d2568c57bc7434af6

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 b8619a6ecf3d9be014bdcba7583f5e688f60d7129a88c77537a33d9039236463
MD5 258bdf7a606094d5fe835bb5736a77c1
BLAKE2b-256 f3c557cd89747337bd54879b284f1a8d61c97c95a7106f70a4aa9202175e6403

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp311-cp311-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp311-cp311-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 d00de5919d8db7d585eb9eae26c3153642aedd156af2d7742cf2693fedc5476f
MD5 c45019b488fbe8fbf0d91f9b818ac0c6
BLAKE2b-256 7d10c856cb969572d9ea667fda7b57a3f28b72e7d1f0fe20b639df9876d5d2a3

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 94b4bcf6d61c63644307867acbb005ad5c6d143d328db6f62503f3bd2d8da0ab
MD5 43264f781d09313704eb1f6ede0356ea
BLAKE2b-256 d114bc84903f43c22a260b05339721b37cdd3858b2f438cad26419c5804f87cc

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e2e2513b7b455d17a2953043e3ec709ae628bc41020d476347dbd183f0608151
MD5 f6eecbe772389c085fcd81fed882efec
BLAKE2b-256 532ef2e804ab04be0f71ad66c4823f6736e4178f785a6109deb67886b740d93a

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 9f910f3f1850cca1658dc48c0e9b599d71cbb9481705aa4ad6ef231116dbab4f
MD5 d8f6362e1604f9353703fc0223897af3
BLAKE2b-256 35c43e208dd64837e4435cde94e931dd75f55f4de1e5818f7b7c719ee283f20c

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 f32d0be47e4c42f054a9a3a0cc2b02c5dad207159400b271a4db93ef24aa2566
MD5 38b902530e0f1867b029933133562a10
BLAKE2b-256 7b98c7aa464aca4f427497e59391ae8c7c6c0e65b7ba06d2f177aaa60d01ffd7

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c9a973eab16811da6d8fd566fcd74ad48151f97d7eaaf9a68c359a9fa99be9f3
MD5 b139c545aaee407722afc1aa47048f35
BLAKE2b-256 b89680281b336809dc5859ec1564b6e677b5695bccf98a6b0b72721a8059c78b

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 161d7376e4ba0e8a7c6f2d822da1c6dec37e1bd25a85200399e42dc3b8ff86d5
MD5 feb19122ce103711c2f2aaf4052d655d
BLAKE2b-256 058283c4bb65938ce408974190cd694ad2a62c6fc90b06c7227df74f1b97f8b5

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e6132f785d7ccb7b656cb2e6fc29be831b348ab77b9f6fe1d942a295fc5656f6
MD5 483ec3c135a26106c0b6428199aac61c
BLAKE2b-256 10aada1b3c69f03952b8dbbf377a6650c7f3f3d71f2dfb5ac13f208fe8adb23b

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ae0d0f5a224be8dc63598ff4b0e72f108617d1cf7a463439e76d5626bfb353bb
MD5 f422fa24453b9a747e219a3248a3fe04
BLAKE2b-256 9fb144ff1998b6ff81050cf197a3fa689d1cfdf45aafd1c3718c629c2dd77139

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3972c45fa0e19520e42f455ae47dbd26b4f2136f0a2d477e82d2eceb8164d63d
MD5 e285e4fa38e4aa31bc9e0c2a1efbde49
BLAKE2b-256 115fa1f1ab5a4f1e144ea35b57cc0bbc3edc462e1447653eb14b0efced2fb824

See more details on using hashes here.

File details

Details for the file nnue_interface-0.2.7-cp38-cp38-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for nnue_interface-0.2.7-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8239491c7c0b09d57c78145b764c406f8d03040254ab913dd140b006fd86f2d9
MD5 bd71cdb21333c6a5cc15e1ad809f06b5
BLAKE2b-256 5d0712b2a4d10e024fdb419bec96e435de8719d80a3aaea322ea108581db3793

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page