Skip to main content

Python bindings for libgossip - a C++ Gossip protocol implementation

Project description

libgossip Python Bindings

This package provides Python bindings for the libgossip C++ library, which implements the Gossip protocol for decentralized distributed systems.

Installation

For regular usage, install the package from PyPI:

pip install libgossip

Then use it in your Python code:

import libgossip
# Use the library

Building from Source

To build the package from source, you need to have CMake and a C++17 compatible compiler installed.

git clone https://github.com/caomengxuan666/libgossip.git
cd libgossip
git submodule update --init
mkdir build
cd build
cmake .. -DBUILD_PYTHON_BINDINGS=ON
cmake --build .

Running Examples

For Users (After Installation)

After installing the package with pip install libgossip, you can run examples from anywhere:

python example.py

For Developers (Using Built Source)

The examples can be run directly from the bindings/python directory after building the project:

# Build the project first (as shown above)
# Then run examples from the bindings/python directory:

# Method 1: Set PYTHONPATH and run directly
set PYTHONPATH=.
python example.py

# Method 2: Run with python -m
python -m libgossip.example

# Method 3: Run examples from within the libgossip package directory
cd libgossip
python sdk_example.py
python decorator_example.py
cd ..

Note: Examples must be run from the bindings/python directory to work correctly with the built module.

Usage

Low-level API

import libgossip

# Create a node view for ourself
self_node = libgossip.NodeView()
self_node.ip = "127.0.0.1"
self_node.port = 7000
self_node.status = libgossip.NodeStatus.ONLINE

# Define callbacks
def send_callback(msg, target):
    print(f"Sending message of type {msg.type} to {target.ip}:{target.port}")

def event_callback(node, old_status):
    print(f"Node {node.ip}:{node.port} changed from {old_status} to {node.status}")

# Initialize gossip core
core = libgossip.GossipCore(self_node, send_callback, event_callback)

# Meet another node
other_node = libgossip.NodeView()
other_node.ip = "127.0.0.1"
other_node.port = 7001
other_node.status = libgossip.NodeStatus.JOINING

core.meet(other_node)

High-level API

import libgossip

# Create and start a node using the high-level API
with libgossip.create_node("127.0.0.1", 7000) as node:
    # Register handlers using decorators
    @node.on_message
    def log_message(msg, target):
        print(f"[SEND] {msg.type} to {target.ip}:{target.port}")
        
    @node.on_event
    def log_event(node_view, old_status):
        print(f"[EVENT] {node_view.ip}:{node_view.port} changed from {old_status} to {node_view.status}")
        
    # Create another node to meet
    other_node = libgossip.create_node("127.0.0.1", 7001)
    other_node.start()
    
    # Meet the other node
    node.meet(other_node)
    
    # Run gossip protocol for a few ticks
    for i in range(5):
        node.tick()

API Reference

The package provides both low-level and high-level APIs:

Low-level Classes

  • GossipCore - Main protocol implementation
  • NodeView - Node representation with metadata
  • GossipMessage - Message structure for network transport
  • NodeId - Node unique identifier
  • NodeStatus - Node status enumeration
  • MessageType - Message type enumeration
  • GossipStats - Statistics about the gossip protocol

High-level Classes

  • GossipNode - High-level wrapper for a gossip node
  • create_node() - Convenience function to create a GossipNode
  • create_cluster() - Convenience function to create a cluster of nodes

Decorators

  • @message_handler - Decorator for message handlers
  • @event_handler - Decorator for event handlers
  • @node.on_message - Method decorator for message handlers
  • @node.on_event - Method decorator for event handlers

Project details


Download files

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

Source Distribution

libgossip-0.1.1.tar.gz (8.6 kB view details)

Uploaded Source

Built Distributions

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

libgossip-0.1.1-cp312-cp312-win_amd64.whl (138.8 kB view details)

Uploaded CPython 3.12Windows x86-64

libgossip-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl (749.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

libgossip-0.1.1-cp312-cp312-musllinux_1_1_i686.whl (816.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ i686

libgossip-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

libgossip-0.1.1-cp311-cp311-win_amd64.whl (137.3 kB view details)

Uploaded CPython 3.11Windows x86-64

libgossip-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl (751.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

libgossip-0.1.1-cp311-cp311-musllinux_1_1_i686.whl (819.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

libgossip-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (231.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

libgossip-0.1.1-cp310-cp310-win_amd64.whl (136.5 kB view details)

Uploaded CPython 3.10Windows x86-64

libgossip-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl (750.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

libgossip-0.1.1-cp310-cp310-musllinux_1_1_i686.whl (817.6 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

libgossip-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

libgossip-0.1.1-cp39-cp39-win_amd64.whl (143.6 kB view details)

Uploaded CPython 3.9Windows x86-64

libgossip-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl (750.5 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

libgossip-0.1.1-cp39-cp39-musllinux_1_1_i686.whl (817.6 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

libgossip-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

libgossip-0.1.1-cp38-cp38-win_amd64.whl (136.1 kB view details)

Uploaded CPython 3.8Windows x86-64

libgossip-0.1.1-cp38-cp38-musllinux_1_1_x86_64.whl (750.3 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

libgossip-0.1.1-cp38-cp38-musllinux_1_1_i686.whl (817.7 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

libgossip-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

libgossip-0.1.1-cp37-cp37m-win_amd64.whl (120.6 kB view details)

Uploaded CPython 3.7mWindows x86-64

libgossip-0.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl (728.1 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

libgossip-0.1.1-cp37-cp37m-musllinux_1_1_i686.whl (792.8 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ i686

libgossip-0.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (202.6 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

File details

Details for the file libgossip-0.1.1.tar.gz.

File metadata

  • Download URL: libgossip-0.1.1.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for libgossip-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a1530036b5e8b3d9b75fc95f701f3fc3828951438b78ead2fdd05cb111a6b26f
MD5 6814dc94160a6e660c80a9b6f2e82c41
BLAKE2b-256 006d8897c6c932a9142294d284304b8af7731379b09282297b29456dc149bedd

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: libgossip-0.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 138.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for libgossip-0.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d0b00b29bb1dbf202b5d84d4af6cc5a118a9ef62e980a69450a457a88bbe67ff
MD5 bd4d6a7750a2d1abe3ba0345476390ca
BLAKE2b-256 f7215e00d7edc6157ab8a552adcaeff7e91c9f96945fa9c20cc532688afa292e

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f4a94a69a93cc14c857346543a4c2e750f12a2082d62d59f5984f1a22e483804
MD5 3419b450a0db0777cfcb47716e2b1864
BLAKE2b-256 c0915faefb726551f34c463af95367ed5c2fe31810d37a3568cc3965bee139c1

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp312-cp312-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 5544bc09d499b1ee0166fe9c788334fac9f7834d384fbae8a8fab705d93ba7e8
MD5 7a1d82254f8a1bfcf8b232521fdf6784
BLAKE2b-256 8cd5f373a39530c440544845d7ddd154df2522b54c0ed1c0743b6f436ac8c48d

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d4972897797d490c363014cabdadae89c34557f3f48402cb5e299c8195fe549
MD5 cef9e9a6de78b8e05ec91740a1bca525
BLAKE2b-256 5cab09d46abcc3e707a128e10d5f26dfe1fde26c00d6696406d9cf7b7b6c3fce

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: libgossip-0.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 137.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for libgossip-0.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bd62439e14454aad2c6710c2006627f4906318b70f244e3a3aa054e8edeedf6b
MD5 a486ece9dc500b43a52caa3e0f7d6f17
BLAKE2b-256 6e5c7f6c7a7228970723c208d83d9467237a97cf6e8711dab7c541e2673cad6f

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5dfe877b27b477d3346ea6092514d1e7f917f4ff31c739167681f679376ff6a2
MD5 40b5a10804966955e98a745c1bd1719f
BLAKE2b-256 efc7b4fdb3efe6c06e7a4fdeb9f1fa9180953747f407f9e897f59df47f508708

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 879cd8dd047ce457c8e88b39718719c38a0be58034b331d0e1f9855adca9f884
MD5 9a098397b9401ee39651514e1ef81938
BLAKE2b-256 100ce17af7f3536cd0c127610fad04379151142321a0eefbc710e093874d64d7

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8207fbccc3776ce7c915332a15fee27cc9204a9fbf98ff31cdccdf70ff936d8b
MD5 de9e5b949dd82a92789bcceb2ef629f6
BLAKE2b-256 1bd16c944ffe9f98775dbb4e49ce6ad323d2547eb530a16ab9fb8890ff0c0012

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: libgossip-0.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 136.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for libgossip-0.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6fdda14a7d4a00e73a507b5acbd3f4b67aa33881f9f4575d20063bd5163b5343
MD5 763892d7249a9f2dea97aea887bea559
BLAKE2b-256 2960d62e7540a9a252f86eb352455b0df5f3770e72c902491d6c643cca1ae710

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8a40511654cd4cd2c68de51d49d21072ab7425c5d8e1bfb62deffa3ecbf01905
MD5 6787cfaf5fd110bda32775232a52676d
BLAKE2b-256 13ac0ceeb0b83d5fa3a5144049825b7180cc2a04e65c40470c4b7a4962c586fc

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 7c5bd1f58f53699b5d00526267a42abfc4aec18c396176554e192b7af7ea0432
MD5 8ff5913f58ee7ca0e64650f4eb9610a8
BLAKE2b-256 d2bd4f8d229d4289306760f1be685ed5eded519770f8113edfed84a1a317ffef

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 90663b6c8d209189773cb2e1cee0f7cf952a26263a38a4a054281ef0533d4aee
MD5 bf0355e3f69ef886fcbdcea501f7b024
BLAKE2b-256 9c91658b8c4825f88d5eb1c6cd89a367cfb8a5b020222a1a420291a8ada8fcd4

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: libgossip-0.1.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 143.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for libgossip-0.1.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4e0365d66435036a67e21c421d26c2eceece9b9ca46c1fa372b3d746187bc9f0
MD5 2c286c83dce399315b16499052b6b648
BLAKE2b-256 bf4f0a27365d3a77a68892a7f0665157b43cbe550243b4b260be7b1b9825213e

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f5ee3ed5abd36c1cc1a51e73ee681fa1153b7f8cf0d06fef1f46674759750554
MD5 1345b9d70302c0873009b8fa0b44ec31
BLAKE2b-256 5068efe6a981e3d060efed952754c3c7815fea9c46b79ca3f52e25d9f5046c2e

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 1a1e76a626f00fcb4fef7fc043546f7ff7ef5c2a685de36502e07e1d5e109b89
MD5 f438f73d237e31fa32bbec41e6721af3
BLAKE2b-256 1e601a64f3e3bf1d280f3f93188b2445bbb4297e08d1c544b53c9e34444ce11d

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 366346e4295b5c2009fda647bdbfcbddb2c1677ba4bff965b41a839628242278
MD5 05982e53f270f9db3a36d78a45912e64
BLAKE2b-256 d445cf0a9cf9f7f9b43214af4c7faa827e44f27928ec86ec44a2d9e10e7c1ae2

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: libgossip-0.1.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 136.1 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for libgossip-0.1.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ab3a1282e79d2818f2f2bd4e36163143bbd284c317a028f84755f2d053e35bf7
MD5 8cfa04be7bd44be5b733e4c9e0c5de16
BLAKE2b-256 238e25eae4ffbee2a8b6b46438ee991b027e376a809493776762237be08ac955

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 766e3a20ae6ad889e713006944491dc4f73c18a63ef9fc337e732a39f161832f
MD5 66a3d2533572cbdec056532f379f041b
BLAKE2b-256 95d79de050fd9d22b6b98f2f5534881d870cd7bb5135e084821e6e3cb3a64e4a

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a29d7cce7406122ede7ec5b1fc520c4b9c7d8cfbdc6968ee7fb6d92320597118
MD5 2c49d28421d1aac6d0b0dcd958d1a014
BLAKE2b-256 bb034c9b0a688d24d71b8f485098c92a4bd18825f1da80a2425b996acaebd299

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb1281d0bd597a0db3734eba0b53d8524b58c9bb41772dda35f7d594e84eb71e
MD5 3ed88236aa3d99efaa652acd69dbfca9
BLAKE2b-256 59bbfae5ccb7f0df63758708b9697a8e6f4c8973efac75b9cde7949cde217dc1

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: libgossip-0.1.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 120.6 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for libgossip-0.1.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 ce8d32d55a7c25fd7ac3e657564971bd75ee5f0a04e679dbbd7cd537ad31e390
MD5 89c5fd5575106c03ae8849d9ee06836b
BLAKE2b-256 c5985c82649bffb83b5505bb15582940b16e577df6e55e693f3482aee3401cfb

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 84ecca5a27a56072947126caa133b7eea5d45650b9f6619d442416e3c655d9c0
MD5 82bcecbbf95fa25f527ef99d1afe86c7
BLAKE2b-256 3b984c62cbde3ced1db7466b6c3f0265052405cb1a7f392fcc50e92ddecc79d2

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 67eba4ce9dfacf8934d5e14910a941f290500d8a776e00298030db133c4e7c81
MD5 d67101326a5a1cf24b60c9a9f6f153e7
BLAKE2b-256 1b0fdf0d1dd13dcf4083c06f403b6a680eda52bc49b9ca4b313494b50bd9fe51

See more details on using hashes here.

File details

Details for the file libgossip-0.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libgossip-0.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7fdc5b143f1e0cf173b6ddee375d8f6dcf33139df7fad14aa7b504e3b26774af
MD5 7258c2df9ffd207b5437cf4034379231
BLAKE2b-256 316bbf62f5c55fe19b52e72c141d9deca9283a823d3490bc7016c41cfd03539e

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