Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
cbf1ae3
new: Initial merge types-redis
Rafiot Sep 6, 2024
48ac4a4
More rename, add few types
Rafiot Sep 9, 2024
7d75d41
make mypy happy
Rafiot Sep 10, 2024
3340e26
new: MyPy Github actions
Rafiot Sep 10, 2024
7bff49e
fix: python < 3.10 compat
Rafiot Sep 10, 2024
64bcdc1
Fixup typing for test suite (async)
Rafiot Sep 11, 2024
9febbc0
new: typecheck more tests
Rafiot Sep 11, 2024
aa44eac
v6.0.2
aiven-sal Sep 11, 2024
99d2079
check typing on bloom and cache
Rafiot Sep 17, 2024
71265af
smembers returns a list, not a set.
Rafiot Sep 17, 2024
d22dbe3
add more tests on mypy
Rafiot Nov 1, 2024
0a490f2
tests: added forgotten asserts in test_geosearch_member
Sep 20, 2024
802ee26
tests: added async geosearch tests
Sep 20, 2024
f1a8c3f
make documentation link more obvious
amirreza8002 Sep 23, 2024
6b5f6f0
Deleted outdated link
amirreza8002 Sep 24, 2024
6e7db0b
doc: fix rst format
aiven-sal Sep 24, 2024
1c8a665
drop compose format and commands v1, use supported v2+
ArtemIsmagilov Sep 29, 2024
68d58d1
build(deps): bump actions/cache from 3 to 4
dependabot[bot] Oct 1, 2024
b9d9ca0
build(deps): bump rojopolis/spellcheck-github-actions
dependabot[bot] Oct 1, 2024
fde6bab
sort methods `acl_deluser` and `acl_dryrun` by alphabetically, checke…
ArtemIsmagilov Sep 29, 2024
7823618
Temporarily fix https://github.com/actions/runner-images/issues/10781
aiven-sal Oct 15, 2024
60fa28a
parsers: resp3: be less verbose
aiven-sal Oct 15, 2024
8ec92e8
Revert "Temporarily fix https://github.com/actions/runner-images/issu…
aiven-sal Oct 30, 2024
39616e9
chg: Sync with upstream
Rafiot Nov 1, 2024
564231c
Temporarily fix https://github.com/actions/runner-images/issues/10781
aiven-sal Oct 15, 2024
fd67799
Revert "Temporarily fix https://github.com/actions/runner-images/issu…
aiven-sal Oct 30, 2024
9bca022
build(deps): bump rojopolis/spellcheck-github-actions
dependabot[bot] Nov 1, 2024
b26e9e9
Set socket_timeout default value to 5 seconds
zioproto Nov 7, 2024
6e2d71d
tests: take into account changed behaviour of READONLY
Nov 25, 2024
4325ae2
tests: mark test_hash for skipping
Nov 25, 2024
93b1e6a
tests: make test_client_kill_filter_by_maxage more robust
Nov 25, 2024
a87c4b7
Bump minimum libvalkey version to 4.0.1
aiven-sal Oct 30, 2024
92137ef
Update SSL certificates to include key usage
Nov 6, 2024
dd7c56d
tests: fix TLS tests with Python 3.13
Nov 25, 2024
70491ae
Add support for Python 3.13
aiven-sal Oct 30, 2024
32108c2
Remove expiration/TTL commands that are not supported by Valkey
aiven-sal Nov 27, 2024
0d56584
build(deps): bump codecov/codecov-action from 4 to 5
dependabot[bot] Dec 1, 2024
c147911
build(deps): bump rojopolis/spellcheck-github-actions
dependabot[bot] Dec 1, 2024
121ce37
v6.1.0b1
Dec 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .github/workflows/integration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
- uses: actions/checkout@v4
- name: Cache docker images
id: custom-cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ./custom-cache/
key: custom-cache
Expand All @@ -78,7 +78,7 @@ jobs:
max-parallel: 15
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.11.1', '3.12', 'pypy-3.9', 'pypy-3.10']
python-version: ['3.8', '3.9', '3.10', '3.11', '3.11.1', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10']
test-type: ['standalone', 'cluster']
connection-type: ['libvalkey', 'plain']
protocol-version: ['2','3']
Expand All @@ -94,7 +94,7 @@ jobs:

- name: Cache docker images
id: custom-cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ./custom-cache/
fail-on-cache-miss: true
Expand All @@ -108,7 +108,7 @@ jobs:
pip install -r requirements.txt
pip install -r dev_requirements.txt
if [ "${{matrix.connection-type}}" == "libvalkey" ]; then
pip install "libvalkey>=4.0.0"
pip install "libvalkey>=4.0.1"
fi
invoke devenv
if [[ "${{matrix.test-type}}" == "standalone" ]]; then
Expand All @@ -128,7 +128,7 @@ jobs:
path: '${{matrix.test-type}}*results.xml'

- name: Upload codecov coverage
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
with:
fail_ci_if_error: false
token: ${{ secrets.CODECOV_TOKEN }}
Expand All @@ -150,7 +150,7 @@ jobs:

- name: Cache docker images
id: custom-cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ./custom-cache/
fail-on-cache-miss: true
Expand All @@ -168,7 +168,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.11.1', '3.12', 'pypy-3.9', 'pypy-3.10']
python-version: ['3.8', '3.9', '3.10', '3.11', '3.11.1', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand Down
36 changes: 36 additions & 0 deletions .github/workflows/mypy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Python application

on:
push:
branches: [ types ]
pull_request:
branches: [ types ]

jobs:
build:

runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{matrix.python-version}}
uses: actions/setup-python@v5
with:
python-version: ${{matrix.python-version}}

- name: Install package
run: |
pip install mypy cryptography pyopenssl requests
pip install types-setuptools
pip install types-cachetools
pip install -r dev_requirements.txt
pip install .[libvalkey]

- name: Run MyPy
run: |
mypy --exclude build .
2 changes: 1 addition & 1 deletion .github/workflows/spellcheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Check Spelling
uses: rojopolis/spellcheck-github-actions@0.41.0
uses: rojopolis/spellcheck-github-actions@0.45.0
with:
config_path: .github/spellcheck-settings.yml
task_name: Markdown
83 changes: 61 additions & 22 deletions .mypy.ini
Original file line number Diff line number Diff line change
@@ -1,24 +1,63 @@
[mypy]
#, docs/examples, tests
files = valkey
check_untyped_defs = True
follow_imports_for_stubs asyncio.= True
#disallow_any_decorated = True
disallow_subclassing_any = True
#disallow_untyped_calls = True
disallow_untyped_decorators = True
#disallow_untyped_defs = True
implicit_reexport = False
no_implicit_optional = True
show_error_codes = True
strict_equality = True
warn_incomplete_stub = True
warn_redundant_casts = True
warn_unreachable = True
warn_unused_ignores = True
disallow_any_unimported = True
#warn_return_any = True

[mypy-valkey.asyncio.lock]
# TODO: Remove once locks has been rewritten
strict = True
show_error_context = True
pretty = True
exclude = docs|build

# These next few are various gradations of forcing use of type annotations
disallow_untyped_calls = False
disallow_incomplete_defs = False
disallow_untyped_defs = False

# This one can be tricky to get passing if you use a lot of untyped libraries
warn_return_any = False

[mypy-valkey._parsers.*]
ignore_errors = True

[mypy-valkey._cache]
ignore_errors = True

[mypy-tests.*]
ignore_errors = True
[mypy-tests.test_bloom]
ignore_errors = False
[mypy-tests.test_asyncio.test_bloom]
ignore_errors = False
[mypy-tests.test_cache]
ignore_errors = False
[mypy-tests.test_asyncio.test_cache]
ignore_errors = False
[mypy-tests.test_commands]
ignore_errors = False
[mypy-tests.test_asyncio.test_commands]
ignore_errors = False
#[mypy-tests.test_cluster]
#ignore_errors = False
#[mypy-tests.test_asyncio.test_cluster]
#ignore_errors = False
#[mypy-tests.test_connection_pool]
#ignore_errors = False
#[mypy-tests.test_asyncio.test_connection_pool]
#ignore_errors = False
#[mypy-tests.test_connection]
#ignore_errors = False
#[mypy-tests.test_asyncio.test_connection]
#ignore_errors = False
[mypy-tests.test_pipeline]
ignore_errors = False
[mypy-tests.test_asyncio.test_pipeline]
ignore_errors = False
[mypy-tests.test_pubsub]
ignore_errors = False
[mypy-tests.test_asyncio.test_pubsub]
ignore_errors = False

[mypy-benchmarks.*]
ignore_errors = True

[mypy-whitelist]
ignore_errors = True

[mypy-tasks]
ignore_errors = True
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Here's how to get started with your code contribution:
c. pip install -r dev_requirements.txt
c. pip install -r requirements.txt

4. If you need a development environment, run `invoke devenv`. Note: this relies on docker-compose to build environments, and assumes that you have a version supporting [docker profiles](https://docs.docker.com/compose/profiles/).
4. If you need a development environment, run `invoke devenv`. Note: this relies on docker compose to build environments, and assumes that you have a version supporting [docker profiles](https://docs.docker.com/compose/profiles/).
5. While developing, make sure the tests pass by running `invoke tests`
6. If you like the change and think the project could use it, send a
pull request
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ The Python interface to the Valkey key-value store.
[![pre-release](https://img.shields.io/github/v/release/valkey-io/valkey-py?include_prereleases&label=latest-prerelease)](https://github.com/valkey-io/valkey-py/releases)
[![codecov](https://codecov.io/gh/valkey-io/valkey-py/branch/main/graph/badge.svg?token=yenl5fzxxr)](https://codecov.io/gh/valkey-io/valkey-py)

[Installation](#installation) | [Usage](#usage) | [Advanced Topics](#advanced-topics) | [Contributing](https://github.com/valkey-io/valkey-py/blob/main/CONTRIBUTING.md)
[Installation](#installation) | [Usage](#usage) | [Documentation](#documentation) | [Advanced Topics](#advanced-topics) | [Contributing](https://github.com/valkey-io/valkey-py/blob/main/CONTRIBUTING.md)

---------------------------------------------

Expand Down Expand Up @@ -85,6 +85,10 @@ Alternatively, you might want to look at [Async connections](https://valkey-py.r

There is built-in support for all of the [out-of-the-box Valkey commands](https://valkey.io/commands). They are exposed using the raw Redis command names (`HSET`, `HGETALL`, etc.) except where a word (i.e. del) is reserved by the language. The complete set of commands can be found [here](https://github.com/valkey-io/valkey-py/tree/main/valkey/commands), or [the documentation](https://valkey-py.readthedocs.io/en/latest/commands.html).

## Documentation

Check out the [documentation](https://valkey-py.readthedocs.io/en/latest/index.html)

## Advanced Topics

The [official Valkey command documentation](https://valkey.io/commands)
Expand Down
2 changes: 0 additions & 2 deletions docker-compose.yml → compose.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---

version: "3.8"

services:

valkey:
Expand Down
32 changes: 22 additions & 10 deletions dockers/stunnel/create_certs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,56 @@

set -e

DESTDIR=`dirname "$0"`/keys
CONFIG_FILE=$(realpath "$(dirname "$0")")/openssl.cnf

DESTDIR=$(dirname "$0")/keys
test -d ${DESTDIR} || mkdir ${DESTDIR}
cd ${DESTDIR}

which openssl &>/dev/null
if [ $? -ne 0 ]; then
echo "No openssl binary present, exiting."
exit 1
echo "No openssl binary present, exiting."
exit 1
fi

openssl genrsa -out ca-key.pem 2048 &>/dev/null

openssl req -new -x509 -nodes -days 365000 \
-key ca-key.pem \
-out ca-cert.pem \
-subj "/CN=valkey-py-ca" &>/dev/null
-config "$CONFIG_FILE" \
-extensions v3_ca \
-subj "/CN=valkey-py-ca"

openssl req -newkey rsa:2048 -nodes -days 365000 \
openssl req -newkey rsa:2048 -nodes \
-keyout server-key.pem \
-out server-req.pem \
-subj "/CN=valkey-py-server" &>/dev/null
-config "$CONFIG_FILE" \
-extensions v3_req \
-subj "/CN=valkey-py-server"

openssl x509 -req -days 365000 -set_serial 01 \
-in server-req.pem \
-out server-cert.pem \
-CA ca-cert.pem \
-CAkey ca-key.pem &>/dev/null
-CAkey ca-key.pem \
-extfile "$CONFIG_FILE" \
-extensions v3_req

openssl req -newkey rsa:2048 -nodes -days 365000 \
openssl req -newkey rsa:2048 -nodes \
-keyout client-key.pem \
-out client-req.pem \
-subj "/CN=valkey-py-client" &>/dev/null
-config "$CONFIG_FILE" \
-extensions v3_req \
-subj "/CN=valkey-py-client"

openssl x509 -req -days 365000 -set_serial 01 \
-in client-req.pem \
-out client-cert.pem \
-CA ca-cert.pem \
-CAkey ca-key.pem &>/dev/null
-CAkey ca-key.pem \
-extfile "$CONFIG_FILE" \
-extensions v3_req

echo "Keys generated in ${DESTDIR}:"
ls
34 changes: 17 additions & 17 deletions dockers/stunnel/keys/ca-cert.pem
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDDzCCAfegAwIBAgIUZWdrJiIH/w7FJkNbLTYldxOFEpswDQYJKoZIhvcNAQEL
BQAwFjEUMBIGA1UEAwwLcmVkaXMtcHktY2EwIBcNMjQwNTA5MDcyMDE4WhgPMzAy
MzA5MTAwNzIwMThaMBYxFDASBgNVBAMMC3JlZGlzLXB5LWNhMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0N9BXLRx3Hxb+ZGuKi5hZabcDWDMEeUGunJG
F1ijxO9XbNWXxYiR127Le2dMkS3TefU3CNiiYJa7eRxMPAS/wGUp6Bb7LrCoeC3F
1bfJSYnzC6SwhMq66m51VhqctjAbJxBBAPYqyNBFB2w2BQZOIkKDNPgPJTDNmF/7
G/5jmAaOPlhm1GITnT+sSTyfr/JcoRRbV9VTVc9VUaTjk6ytHsW+K2sK+uWrjdig
qdzZDng0gtasTn907QkTDDyR4E/UY9N47aD2Jy5F3XHesy9kEfuppq+A1WYOs8/H
bXgEL53ncayqDNAgjnid5kHvKJ9wTAPSMDqmupHG0l5ADisahwIDAQABo1MwUTAd
BgNVHQ4EFgQUWg70hcbq4zibHXAFlZd8mHVEWzowHwYDVR0jBBgwFoAUWg70hcbq
4zibHXAFlZd8mHVEWzowDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
AQEAe1qupf8GoqCgtzTwFCwmcDygLibX4vI/EfCMOLVZHMgDacDwQbmYPlM+goJT
Pz8WCklopFcMJ6MSdUGy3g4hjKmJpKttTSuhEd3uZWPZYjhRj2SY8531/aAajg9/
oezyvlgN/DWXAREG31XWyXLzPU7VLbg99mYB+2+lo2cAciAOCBdIOu6WzqnQax82
aDSqXIHiTGc/5QYZ6ZIzdVRYiVdddKSxTNKZn9x0hu3L8r2e9ryGLLVKJmZfNZDS
tXYwiY3fE0EwYViIPiPlmBEXiBhHlC2kAQMFK8Qd4LgX6rGki4luL15GYxxKPQbF
EtDS9EqM4EdRWZq3SDjOA1zODA==
MIIC/TCCAeWgAwIBAgIUL0/OSD+P0ZISmuNtnbVNjymQn3wwDQYJKoZIhvcNAQEL
BQAwFzEVMBMGA1UEAwwMdmFsa2V5LXB5LWNhMCAXDTI0MTEwMTExNTEwMFoYDzMw
MjQwMzA0MTE1MTAwWjAXMRUwEwYDVQQDDAx2YWxrZXktcHktY2EwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaENi99I937j1QW4QOM7YSPHzymMHJpnRO
ZP9JYDxOO7XjKpRwhyU4hM3QfxeNJi04VKv+FZe8QswCSqyp6OeNFPAuQ2M3Shcl
neUymoSVsQqyqzrJ8G4qW3sAMdvG32rA8sRsOewSVABnsi0wUZS+0+4EMR+L372O
WDd9ZV88uePwsY6MTfqvxoyh0S+5E3xdyep956+LGotr+maDZ/MrEP2Kl1StWv4W
mS0Gd7bzJaGsCazGXfc22JLwztBG/JgZdjI6T3e1ION0VpaQ82uMqvFmajmPxWUU
8lbjAzeHSGOJq+BZmPVh6NFp6Pn1xdH8OOHW1CW8UMaAjQre37bHAgMBAAGjPzA9
MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQCiVq1mATQ
GX/9xPxG9l0soukgFzANBgkqhkiG9w0BAQsFAAOCAQEALUxF0RNlfpj55H2ku7r6
aYcKsElzmCdgICxc0jrhvlMT7yv03nt0EOxgx4yWeoCNNKcAhAy9rHh+3pfyXwS7
RAkwvwTxbqfdXB/mviolrPus0fn8dfC0ZpVSS8DYxS54ziFU0BkZi+odlkBA5PBE
p6p7kWwx6hc1h+F6abrNEivLe7G5V1Z8sIBNkj9Xj36muDXwNJjCOTq2FyeRRV4H
C9ztHK4iVhlw2UYHZ8dQjyI/MSPrAyMVbmbglhIdGGoE+JGAixWkB02kjySQ6lxh
Yt7b7icD4hmHxnXoxoN31wNF4YMePMZmQsuQEjjndSg5Nt+Vbk1Bk/jK88p297vi
gQ==
-----END CERTIFICATE-----
52 changes: 26 additions & 26 deletions dockers/stunnel/keys/ca-key.pem
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDQ30FctHHcfFv5
ka4qLmFlptwNYMwR5Qa6ckYXWKPE71ds1ZfFiJHXbst7Z0yRLdN59TcI2KJglrt5
HEw8BL/AZSnoFvsusKh4LcXVt8lJifMLpLCEyrrqbnVWGpy2MBsnEEEA9irI0EUH
bDYFBk4iQoM0+A8lMM2YX/sb/mOYBo4+WGbUYhOdP6xJPJ+v8lyhFFtX1VNVz1VR
pOOTrK0exb4rawr65auN2KCp3NkOeDSC1qxOf3TtCRMMPJHgT9Rj03jtoPYnLkXd
cd6zL2QR+6mmr4DVZg6zz8dteAQvnedxrKoM0CCOeJ3mQe8on3BMA9IwOqa6kcbS
XkAOKxqHAgMBAAECggEAB16eh28qcUrF/VPsNDrMtEcjOSmdfv14s6K34bepQkKQ
8BsdLsVhzUXF0jB+iBojfbMZjQCvwf6vgKzEl9LcZ8+/Sca9zWjtmMfsqgdrsmI2
psYvIDr9m1XoYpsFGnyEs2fPE1dG19eusn4D7et0svVr0bZK5SyypFoGmcyWUP/M
kA990HAP7enGzPfpvcpr++Iu3EwWlTY3rjYgh9a7AiFhtj9zDzb9Sg0+4Xl9+8TZ
dsOvyVsiLu09MZ3vScGg5l+46w+rai+R0IxpgI9QM0sMxAS3AYFY666akrJqn6NU
S0Q5Q9gZ5V9hHxU7IHfo3weygPQuBW07nbwtX6+JCQKBgQDp7+smBlstRD+1/ZHJ
KO4Xhi+yrhtkKzViC+gF2vXpZ1GQ+3plRJFzRMFu+LkBgn1jPfg479Tm7CM4W4vM
cTZo45+hhnpwmLGnltTf3Vw23yXzLdUMenaE2u66PWh3DFPkPHwNqb30QGnx131Q
Mjnp+2EsBdiZ1d8TFF815ucG7QKBgQDkkiz7I4JgGGCbd51AseFryHgUepsrgeaA
DIWKEKBOoxOnfWH7JOxtm0oXcpWHLciQ4M6FaTFNv2vNA9Hrz5yApXFwIkKgXVU9
+zsok4eWdEYmwxZFwjCNYvzsIDGBBwa1PQeps6C5L+nciOE8IZHYW7egAR96prV3
E4ZQ6aWkwwKBgQCL/nJXIAiiLyx9SVBb9C1/UGLs57ommKDqmrtv/ZeZ5KVwQL3/
KihstaGYOinkmGVW5XfNAuECjB+Lk2U2pC1uWYFm1SYiiY4O/3lGup57i9CXFT9g
p0yTtryUITmJvIvbksKeHo05RO7hthYczuHPfwqooJr9fHpxXYiYpiRtBQKBgCp0
kFBRhyzsOj2GWTokEDfh85PyNhI9vZ+5M7CyZ+RTXBo3KtToRdYSCxAR435JXcCz
UQjswhCr5o0dEYfYdzxZ/pkSdAevbl7l5FYkGQI0NLeMcv2gFT6dzVban/dUY8WU
QXEfAVKEeM7SyetOXPWwC4p3yu4QOxKUGNW8oFzbAoGBAK3WKV51jhmMz3dtCkGW
UZxcDp5q/3uV29/UUF3/CNEhLcVuQLtNOPYRG+S9zMvwo0SNsz4mZJH1nFDSWSNL
xGXg/Ret9Li4JQTWD47kcheBCVLoTtX1bc66D2LlXDKzN5DRBACxKkAJPUjouhMB
mPDd05msnfgzPBMHMwsNjg5W
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDaENi99I937j1Q
W4QOM7YSPHzymMHJpnROZP9JYDxOO7XjKpRwhyU4hM3QfxeNJi04VKv+FZe8QswC
Sqyp6OeNFPAuQ2M3ShclneUymoSVsQqyqzrJ8G4qW3sAMdvG32rA8sRsOewSVABn
si0wUZS+0+4EMR+L372OWDd9ZV88uePwsY6MTfqvxoyh0S+5E3xdyep956+LGotr
+maDZ/MrEP2Kl1StWv4WmS0Gd7bzJaGsCazGXfc22JLwztBG/JgZdjI6T3e1ION0
VpaQ82uMqvFmajmPxWUU8lbjAzeHSGOJq+BZmPVh6NFp6Pn1xdH8OOHW1CW8UMaA
jQre37bHAgMBAAECggEAUbk4kVADKI4nemMhxXTJymHS7dQj5B+2vN6K8gPX9fXY
v67ofJeZcmoK/BV1TRe+oLrSzmFnQU3DSSSVOwQnKy9qp9vnZgQlUpqvF9zizXrR
KI6VdLLfho5MNZF57Tkzt+YDiQ/YEjJbCIG0/8PDPBUOwZFrYi9SyfLzsNH59DaB
Nf64J6KpMLMEP8BzDf9MkDWjg/uZZ5rJ2VDkl11QZCmyAAPMXps1nH4WJojVEwB7
ul/VK8wrqiiyZqzDesw/jcET7DrCHtix35An8NJZAtWPILgHHnAlLPmG7a0uyy3Y
XaeqZRppUkuSv/OKf3Q0l/2IzjcNb3tjbktVSCXgGQKBgQDyxozi0V09Bc9w7yI3
DaREFSs0h134ByzvsoObJMZTc9Qkis8VZB+IhMO4RaP2DNstJVqkl0pQWCr/C5ln
d6tYUtueeQ/9SYusnLIxu+HtsySPzBKthLrWArPQ6U1q70irxNovcSxOWimuSUIA
ftzWV6mCdBUsCImGZaiKl7GqDQKBgQDl8blf5iVRArHA/8vTBwdBNf3tkuctFcE2
Pqmg5KQmGEvIO0S/DB2zAY+4JF4E4VrdJL47xXTnf+XN2ptQUf5kjwLflEaimupv
knwtNG+fq6hcWMeN+hnf0+A81b03Klo3H2JsuQ3EZ8kXOrpF8t/PanXz9UuV8Bkl
IjDwBLCTIwKBgQC9cIdRGjPaQSVsp30YXnG2mpobJCIEP30mETM2pYyIZBK+7P3I
YFdmzMp4iQb3IXMJmGNRmahoZ1QtrhxnK28tvYIX97mtWG1AJQm7WzNhqu81sfVF
JxQvmO49bz902QDo3/OtH2+GOD7b+9gf0N579u2TmQdIU+UUVVEdzF7bJQKBgFQX
TWKryNPSd20MXt7iwB1yAFYEljRfs1QCIIitdPZVhklIm4B+jtHq7UM7UYLZYyBi
kotLT9BlboYUvx3ljnH59uQK1rYaj0eUO4NQnM24ug5jjT73ysSXOHcm91aYT3u/
J4B5QHamOd0b5gk0o/K3jUFVYHoJ3zg8Q8dS/7wfAoGBAMTue1Uq2GZOklxHWGUf
AedLR0aeNrV01hvl/R+sVb0h/lPqSeg5jQeLUHvkgG4SIq93dNhCnzMI6Dhch+Yc
o337l8S4ZcmJblp0uDz2gg2BLpt3PUPDWYQy8oFAjGK4JVwNgxPzDchMXGPDHuhQ
8r+9yBZlU1k64S3EIYuK4m7a
-----END PRIVATE KEY-----
Loading