Skip to content

Commit e47af7e

Browse files
committed
Initial commit
0 parents  commit e47af7e

File tree

14 files changed

+828
-0
lines changed

14 files changed

+828
-0
lines changed

.editorconfig

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
indent_style = space
6+
indent_size = 2
7+
end_of_line = lf
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true
10+
11+
[*.py]
12+
charset = utf-8
13+
indent_style = space
14+
indent_size = 4
15+
end_of_line = lf
16+
insert_final_newline = true
17+
trim_trailing_whitespace = true
18+
19+
[*.{md,mdx}]
20+
trim_trailing_whitespace = false

.github/workflows/release.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Release
2+
3+
on:
4+
release:
5+
types: [created]
6+
7+
jobs:
8+
deploy:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/checkout@v2
12+
- name: Set up Python
13+
uses: actions/setup-python@v2
14+
with:
15+
python-version: "3.x"
16+
- name: Install dependencies
17+
run: |
18+
python -m pip install --upgrade pip
19+
pip install setuptools wheel twine
20+
- name: Build and publish
21+
env:
22+
TWINE_USERNAME: __token__
23+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
24+
run: |
25+
python setup.py sdist bdist_wheel
26+
twine upload --repository pypi dist/*

.gitignore

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
4+
*$py.class
5+
6+
# C extensions
7+
*.so
8+
9+
# Distribution / packaging
10+
.Python
11+
build/
12+
develop-eggs/
13+
dist/
14+
downloads/
15+
eggs/
16+
.eggs/
17+
lib/
18+
lib64/
19+
parts/
20+
sdist/
21+
var/
22+
wheels/
23+
pip-wheel-metadata/
24+
share/python-wheels/
25+
*.egg-info/
26+
.installed.cfg
27+
*.egg
28+
MANIFEST
29+
30+
# PyInstaller
31+
# Usually these files are written by a python script from a template
32+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
33+
*.manifest
34+
*.spec
35+
36+
# Installer logs
37+
pip-log.txt
38+
pip-delete-this-directory.txt
39+
40+
# Unit test / coverage reports
41+
htmlcov/
42+
.tox/
43+
.nox/
44+
.coverage
45+
.coverage.*
46+
.cache
47+
nosetests.xml
48+
coverage.xml
49+
*.cover
50+
*.py,cover
51+
.hypothesis/
52+
.pytest_cache/
53+
54+
# Translations
55+
*.mo
56+
*.pot
57+
58+
# Django stuff:
59+
*.log
60+
local_settings.py
61+
db.sqlite3
62+
db.sqlite3-journal
63+
64+
# Flask stuff:
65+
instance/
66+
.webassets-cache
67+
68+
# Scrapy stuff:
69+
.scrapy
70+
71+
# Sphinx documentation
72+
docs/_build/
73+
74+
# PyBuilder
75+
target/
76+
77+
# Jupyter Notebook
78+
.ipynb_checkpoints
79+
80+
# IPython
81+
profile_default/
82+
ipython_config.py
83+
84+
# pyenv
85+
.python-version
86+
87+
# pipenv
88+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
90+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
91+
# install all needed dependencies.
92+
#Pipfile.lock
93+
94+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
95+
__pypackages__/
96+
97+
# Celery stuff
98+
celerybeat-schedule
99+
celerybeat.pid
100+
101+
# SageMath parsed files
102+
*.sage.py
103+
104+
# Environments
105+
.env
106+
.venv
107+
env/
108+
venv/
109+
ENV/
110+
env.bak/
111+
venv.bak/
112+
113+
# Spyder project settings
114+
.spyderproject
115+
.spyproject
116+
117+
# Rope project settings
118+
.ropeproject
119+
120+
# mkdocs documentation
121+
/site
122+
123+
# mypy
124+
.mypy_cache/
125+
.dmypy.json
126+
dmypy.json
127+
128+
# Pyre type checker
129+
.pyre/

.vscode/settings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"python.testing.unittestEnabled": false,
3+
"python.testing.nosetestsEnabled": false,
4+
"python.testing.pytestEnabled": true,
5+
"python.envFile": "${workspaceRoot}/vscode.env",
6+
"python.linting.enabled": true,
7+
"python.linting.prospectorEnabled": true
8+
}

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2023 dreautall
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

MANIFEST.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
include pyproject.toml
2+
include *.md
3+
include LICENSE

README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Python client library for Stromnetz Graz API
2+
3+
[![PyPI package](https://img.shields.io/badge/pip%20install-stromnetzgraz-brightgreen)](https://pypi.org/project/stromnetzgraz/) [![version number](https://img.shields.io/pypi/v/stromnetzgraz?color=green&label=version)](https://github.com/dreautall/stromnetzgraz/releases) [![License](https://img.shields.io/github/license/dreautall/stromnetzgraz)](https://github.com/dreautall/stromnetzgraz/blob/main/LICENSE)
4+
5+
This is a simple client library for the (unofficial) [Stromnetz Graz Smart Meter Web API](https://webportal.stromnetz-graz.at/).
6+
7+
Please note that you must be able to login and view data on the portal before this library will work. Please refer to Stromnetz Graz how to set up access to the smart meter statistics. Best results are achieved in the `IME` mode (15 minute reading intervals), however the library can also fall back to `IMS` (daily reading interval). The most recent data available will be the one for the previous day (see also their [FAQ](https://www.stromnetz-graz.at/sgg/stromzaehler/intelligenter-stromzaehler/faqs)).
8+
9+
Example usage:
10+
11+
```python
12+
from sngraz import StromNetzGraz
13+
14+
sn = StromNetzGraz(mail, password)
15+
await sn.authenticate()
16+
await sn.update_info()
17+
18+
for installation in conn.get_installations():
19+
print("Installation ID", installation.id)
20+
print("Installation is installed at", installation._address)
21+
for meter in installation.get_meters():
22+
print("Meter ID", meter.id)
23+
print("Meter Name", meter._short_name)
24+
await meter.fetch_consumption_data()
25+
26+
# meter._data now contains the meter readings of the last 30 days
27+
print(meter._data)
28+
29+
await sn.close_connection()
30+
```
31+
32+
An `installation` is usually an house or apartment with an individual address and may contain multiple meters (for example a second meter for a hot water boiler). A `meter` is the actual single meter.
33+
34+
Stromnetz Graz assigns individual numerical IDs to both `installation`s and `meter`s. The usually used meter number (33 characters usually starting with `AT00`) is available as attributes (`meter._name` & `meter._short_name`).

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[build-system]
2+
requires = ["setuptools>=46.4.0", "wheel"]
3+
build-backend = "setuptools.build_meta"

setup.cfg

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[metadata]
2+
version = attr: sngraz.__version__
3+
license_files = LICENSE

setup.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import setuptools
2+
3+
with open("README.md", "r", encoding="utf-8") as fh:
4+
long_description = fh.read()
5+
6+
setuptools.setup(
7+
name="stromnetzgraz",
8+
author="dreautall",
9+
author_email="michael@online-net.eu",
10+
description="Python client library for Stromnetz Graz API",
11+
keywords="stromnetz graz,power,api",
12+
long_description=long_description,
13+
long_description_content_type="text/markdown",
14+
url="https://github.com/dreautall/stromnetzgraz",
15+
project_urls={
16+
"Documentation": "https://github.com/dreautall/stromnetzgraz",
17+
"Bug Reports": "https://github.com/dreautall/stromnetzgraz/issues",
18+
"Source Code": "https://github.com/dreautall/stromnetzgraz",
19+
# 'Funding': '',
20+
# 'Say Thanks!': '',
21+
},
22+
package_dir={"": "src"},
23+
packages=setuptools.find_packages(where="src"),
24+
classifiers=[
25+
# see https://pypi.org/classifiers/
26+
"Development Status :: 5 - Production/Stable",
27+
"Intended Audience :: Developers",
28+
"Programming Language :: Python :: 3",
29+
"Programming Language :: Python :: 3.6",
30+
"Programming Language :: Python :: 3.7",
31+
"Programming Language :: Python :: 3.8",
32+
"Programming Language :: Python :: 3.9",
33+
"Programming Language :: Python :: 3 :: Only",
34+
"License :: OSI Approved :: MIT License",
35+
"Operating System :: OS Independent",
36+
],
37+
python_requires=">=3.6",
38+
# install_requires=['Pillow'],
39+
extras_require={
40+
"dev": ["check-manifest"],
41+
# 'test': ['coverage'],
42+
},
43+
)

src/sngraz/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
__version__ = "0.1.1"
2+
3+
from .sngraz import *

src/sngraz/certchain.crt

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIGuTCCBaGgAwIBAgIQBxoQw2iEhlvoH1cQNUs+4zANBgkqhkiG9w0BAQsFADBZ
3+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMTMwMQYDVQQDEypS
4+
YXBpZFNTTCBUTFMgRFYgUlNBIE1peGVkIFNIQTI1NiAyMDIwIENBLTEwHhcNMjEw
5+
NDE2MDAwMDAwWhcNMjIwNTE3MjM1OTU5WjAmMSQwIgYDVQQDExt3ZWJwb3J0YWwu
6+
c3Ryb21uZXR6LWdyYXouYXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
7+
AQDWPaB4v0cMQ6NOeFfAWc2vICvZnHdXs+zk6Z1RCwn+xSOAAbNB4G4H08MlBIis
8+
tC/Q4gBqSppvtqzjqI3eviVBulUvVz6Ziopp3TKQxLHCQLsW6cv94d87/1q/5lvR
9+
r3OAZdz4WDBMQvAv+WQu7TOwjIKrwCPlWZ3RiwTGV5bQhuAdlPewoGdd4KFqoQ04
10+
6IoEsGpaQz0Ze3eLZBNc4SvYO3zxdxKoWOjgKloUWW9EjQUaJVENp51oKxn/6+/p
11+
A8IishAoUiAhmBUP+v2Z33PjoF3cpB7UCcl1C2cAqt4XZtod1HFk1si/X/Jkm1ao
12+
1IyVP+J8+R3+trKuZBE2r0khAgMBAAGjggOuMIIDqjAfBgNVHSMEGDAWgBSkjeW+
13+
fHnkcCNtLik0rSNY3PUxfzAdBgNVHQ4EFgQUeNmiZhPwVvm6GyHLaRPTcqJJCLAw
14+
RwYDVR0RBEAwPoIbd2VicG9ydGFsLnN0cm9tbmV0ei1ncmF6LmF0gh93d3cud2Vi
15+
cG9ydGFsLnN0cm9tbmV0ei1ncmF6LmF0MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE
16+
FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwgZsGA1UdHwSBkzCBkDBGoESgQoZAaHR0
17+
cDovL2NybDMuZGlnaWNlcnQuY29tL1JhcGlkU1NMVExTRFZSU0FNaXhlZFNIQTI1
18+
NjIwMjBDQS0xLmNybDBGoESgQoZAaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL1Jh
19+
cGlkU1NMVExTRFZSU0FNaXhlZFNIQTI1NjIwMjBDQS0xLmNybDA+BgNVHSAENzA1
20+
MDMGBmeBDAECATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNv
21+
bS9DUFMwgYUGCCsGAQUFBwEBBHkwdzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
22+
ZGlnaWNlcnQuY29tME8GCCsGAQUFBzAChkNodHRwOi8vY2FjZXJ0cy5kaWdpY2Vy
23+
dC5jb20vUmFwaWRTU0xUTFNEVlJTQU1peGVkU0hBMjU2MjAyMENBLTEuY3J0MAkG
24+
A1UdEwQCMAAwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB3ACl5vvCeOTkh8FZz
25+
n2Old+W+V32cYAr4+U1dJlwlXceEAAABeNomP4cAAAQDAEgwRgIhAPqOgKbG+1O0
26+
7TPspd147uD9GWUAipt+tBlTvxcAQ/tLAiEAjzm9goOZv6N9tK3LmDrGK+DjyGVQ
27+
bYBGTH1lhtaoLI8AdQAiRUUHWVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAA
28+
AXjaJj+sAAAEAwBGMEQCIEk/Op8b4PA6pnl681LpboBQQ4uTmGH4aPHySgPSzoVz
29+
AiA2xgLHKmrO6b1euFJLPqzQHNK5Y3ywJ7Bc7jKDySm4WgB1AFGjsPX9AXmcVm24
30+
N3iPDKR6zBsny/eeiEKaDf7UiwXlAAABeNomP8gAAAQDAEYwRAIgC4nsixdCpBE/
31+
E3KxrkNnIKUf+PD+1B8kGhS6kQKgujECIGIJcIDZVL5PD618fO1Sf4OhcMHUNuKZ
32+
qmMAa8z+6q3MMA0GCSqGSIb3DQEBCwUAA4IBAQBEHKNR6LFSTz1U+g4/oZVY2/Qv
33+
915ZrykxEIVM5IozpzdBELIaVJHZbjCK1fnfJpmHLSdE06P3YBmQYY4LaPC0tKvG
34+
ryuYOKK+m+X7L3yJzlVNEzucG6CAuzpUn08sA4Nyl0oIZH3T2GhcBo3QCNBbeyjy
35+
OHyfepnBwZ43j3EJMAUlJGAR11TNTppU8ma7L0HXvgvMQ/TKLtbYC+/tyJ6/KQal
36+
inaj5kMqFh6x2y4MvRANNY0FlHxCg9c2DpYT4hZ/D60ukDjN0rCRPom+IfnA2KTN
37+
ya60AS9MEo+R7a1dhV5JuG4ssIQ+HVT40rf1n6+XZjSoym37Q2QeKlxivSN5
38+
-----END CERTIFICATE-----
39+
-----BEGIN CERTIFICATE-----
40+
MIIFUTCCBDmgAwIBAgIQB5g2A63jmQghnKAMJ7yKbDANBgkqhkiG9w0BAQsFADBh
41+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
42+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
43+
QTAeFw0yMDA3MTYxMjI1MjdaFw0yMzA1MzEyMzU5NTlaMFkxCzAJBgNVBAYTAlVT
44+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxMzAxBgNVBAMTKlJhcGlkU1NMIFRMUyBE
45+
ViBSU0EgTWl4ZWQgU0hBMjU2IDIwMjAgQ0EtMTCCASIwDQYJKoZIhvcNAQEBBQAD
46+
ggEPADCCAQoCggEBANpuQ1VVmXvZlaJmxGVYotAMFzoApohbJAeNpzN+49LbgkrM
47+
Lv2tblII8H43vN7UFumxV7lJdPwLP22qa0sV9cwCr6QZoGEobda+4pufG0aSfHQC
48+
QhulaqKpPcYYOPjTwgqJA84AFYj8l/IeQ8n01VyCurMIHA478ts2G6GGtEx0ucnE
49+
fV2QHUL64EC2yh7ybboo5v8nFWV4lx/xcfxoxkFTVnAIRgHrH2vUdOiV9slOix3z
50+
5KPs2rK2bbach8Sh5GSkgp2HRoS/my0tCq1vjyLJeP0aNwPd3rk5O8LiffLev9j+
51+
UKZo0tt0VvTLkdGmSN4h1mVY6DnGfOwp1C5SK0MCAwEAAaOCAgswggIHMB0GA1Ud
52+
DgQWBBSkjeW+fHnkcCNtLik0rSNY3PUxfzAfBgNVHSMEGDAWgBQD3lA1VtFMu2bw
53+
o+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
54+
CCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwNAYIKwYBBQUHAQEEKDAmMCQG
55+
CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wewYDVR0fBHQwcjA3
56+
oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9v
57+
dENBLmNybDA3oDWgM4YxaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0
58+
R2xvYmFsUm9vdENBLmNybDCBzgYDVR0gBIHGMIHDMIHABgRVHSAAMIG3MCgGCCsG
59+
AQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGKBggrBgEFBQcC
60+
AjB+DHxBbnkgdXNlIG9mIHRoaXMgQ2VydGlmaWNhdGUgY29uc3RpdHV0ZXMgYWNj
61+
ZXB0YW5jZSBvZiB0aGUgUmVseWluZyBQYXJ0eSBBZ3JlZW1lbnQgbG9jYXRlZCBh
62+
dCBodHRwczovL3d3dy5kaWdpY2VydC5jb20vcnBhLXVhMA0GCSqGSIb3DQEBCwUA
63+
A4IBAQAi49xtSOuOygBycy50quCThG45xIdUAsQCaXFVRa9asPaB/jLINXJL3qV9
64+
J0Gh2bZM0k4yOMeAMZ57smP6JkcJihhOFlfQa18aljd+xNc6b+GX6oFcCHGr+gsE
65+
yPM8qvlKGxc5T5eHVzV6jpjpyzl6VEKpaxH6gdGVpQVgjkOR9yY9XAUlFnzlOCpq
66+
sm7r2ZUKpDfrhUnVzX2nSM15XSj48rVBBAnGJWkLPijlACd3sWFMVUiKRz1C5PZy
67+
el2l7J/W4d99KFLSYgoy5GDmARpwLc//fXfkr40nMY8ibCmxCsjXQTe0fJbtrrLL
68+
yWQlk9VDV296EI/kQOJNLVEkJ54P
69+
-----END CERTIFICATE-----
70+
-----BEGIN CERTIFICATE-----
71+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
72+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
73+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
74+
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
75+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
76+
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
77+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
78+
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
79+
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
80+
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
81+
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
82+
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
83+
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
84+
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
85+
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
86+
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
87+
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
88+
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
89+
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
90+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
91+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)