Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 31307e2

Browse filesBrowse files
authored
Updates library versions and tests (GoogleCloudPlatform#1884)
* Updates library versions and tests
1 parent 45e706f commit 31307e2
Copy full SHA for 31307e2

File tree

Expand file treeCollapse file tree

10 files changed

+226
-68
lines changed
Filter options
Expand file treeCollapse file tree

10 files changed

+226
-68
lines changed

‎iot/api-client/manager/manager.py

Copy file name to clipboardExpand all lines: iot/api-client/manager/manager.py
+34-5Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,28 @@ def set_iam_permissions(
490490
# [END iot_set_iam_policy]
491491

492492

493+
def send_command(
494+
service_account_json, project_id, cloud_region, registry_id, device_id,
495+
command):
496+
"""Send a command to a device."""
497+
# [START iot_send_command]
498+
print('Sending command to device')
499+
client = get_client(service_account_json)
500+
device_path = 'projects/{}/locations/{}/registries/{}/devices/{}'.format(
501+
project_id, cloud_region, registry_id, device_id)
502+
503+
config_body = {
504+
'binaryData': base64.urlsafe_b64encode(
505+
command.encode('utf-8')).decode('ascii')
506+
}
507+
508+
return client.projects(
509+
).locations().registries(
510+
).devices().sendCommandToDevice(
511+
name=device_path, body=config_body).execute()
512+
# [END iot_send_command]
513+
514+
493515
def parse_command_line_args():
494516
"""Parse command line arguments."""
495517
default_registry = 'cloudiot_device_manager_example_registry_{}'.format(
@@ -546,6 +568,10 @@ def parse_command_line_args():
546568
'--role',
547569
default=None,
548570
help='Role used for IAM commands.')
571+
parser.add_argument(
572+
'--send_command',
573+
default='1',
574+
help='The command sent to the device')
549575

550576
# Command subparser
551577
command = parser.add_subparsers(dest='command')
@@ -566,6 +592,7 @@ def parse_command_line_args():
566592
command.add_parser('list-registries', help=list_registries.__doc__)
567593
command.add_parser('patch-es256', help=patch_es256_auth.__doc__)
568594
command.add_parser('patch-rs256', help=patch_rsa256_auth.__doc__)
595+
command.add_parser('send-command', help=send_command.__doc__)
569596
command.add_parser('set-config', help=patch_rsa256_auth.__doc__)
570597
command.add_parser('set-iam-permissions', help=set_iam_permissions.__doc__)
571598

@@ -679,6 +706,12 @@ def run_command(args):
679706
args.cloud_region, args.registry_id, args.device_id,
680707
args.rsa_certificate_file)
681708

709+
elif args.command == 'send-command':
710+
send_command(
711+
args.service_account_json, args.project_id,
712+
args.cloud_region, args.registry_id, args.device_id,
713+
args.send_command)
714+
682715
elif args.command == 'set-iam-permissions':
683716
if (args.member is None):
684717
sys.exit('Error: specify --member')
@@ -699,10 +732,6 @@ def run_command(args):
699732
args.version, args.config)
700733

701734

702-
def main():
735+
if __name__ == '__main__':
703736
args = parse_command_line_args()
704737
run_command(args)
705-
706-
707-
if __name__ == '__main__':
708-
main()

‎iot/api-client/manager/manager_test.py

Copy file name to clipboardExpand all lines: iot/api-client/manager/manager_test.py
+49Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,23 @@
1313
# limitations under the License.
1414

1515
import os
16+
import sys
1617
import time
1718

19+
# Add command receiver for bootstrapping device registry / device for testing
20+
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'mqtt_example')) # noqa
1821
from google.cloud import pubsub
1922
import pytest
2023

2124
import manager
25+
import cloudiot_mqtt_example
2226

2327
cloud_region = 'us-central1'
2428
device_id_template = 'test-device-{}'
29+
ca_cert_path = '../mqtt_example/resources/roots.pem'
2530
es_cert_path = 'resources/ec_public.pem'
2631
rsa_cert_path = 'resources/rsa_cert.pem'
32+
rsa_private_path = 'resources/rsa_private.pem' # Must match rsa_cert
2733
topic_id = 'test-device-events-{}'.format(int(time.time()))
2834

2935
project_id = os.environ['GCLOUD_PROJECT']
@@ -270,3 +276,46 @@ def test_add_patch_delete_es256(test_topic, capsys):
270276

271277
manager.delete_registry(
272278
service_account_json, project_id, cloud_region, registry_id)
279+
280+
281+
def test_send_command(test_topic, capsys):
282+
device_id = device_id_template.format('RSA256')
283+
manager.create_registry(
284+
service_account_json, project_id, cloud_region, pubsub_topic,
285+
registry_id)
286+
manager.create_rs256_device(
287+
service_account_json, project_id, cloud_region, registry_id,
288+
device_id, rsa_cert_path)
289+
290+
# Exercize the functionality
291+
client = cloudiot_mqtt_example.get_client(
292+
project_id, cloud_region, registry_id, device_id,
293+
rsa_private_path, 'RS256', ca_cert_path,
294+
'mqtt.googleapis.com', 443)
295+
client.loop_start()
296+
out, _ = capsys.readouterr()
297+
298+
# Pre-process commands
299+
for i in range(1, 5):
300+
client.loop()
301+
time.sleep(1)
302+
303+
manager.send_command(
304+
service_account_json, project_id, cloud_region, registry_id,
305+
device_id, 'me want cookies')
306+
out, _ = capsys.readouterr()
307+
308+
# Process commands
309+
for i in range(1, 5):
310+
client.loop()
311+
time.sleep(1)
312+
313+
# Clean up
314+
manager.delete_device(
315+
service_account_json, project_id, cloud_region, registry_id,
316+
device_id)
317+
manager.delete_registry(
318+
service_account_json, project_id, cloud_region, registry_id)
319+
320+
assert 'Sending command to device' in out
321+
assert '400' not in out
+6-2Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
google-api-python-client==1.7.4
1+
cryptography==2.4.2
2+
google-api-python-client==1.7.5
23
google-auth-httplib2==0.0.3
34
google-auth==1.6.1
4-
google-cloud-pubsub==0.38.0
5+
google-cloud-pubsub==0.39.0
6+
oauth2client==4.1.3
7+
paho-mqtt==1.4.0
8+
pyjwt==1.6.4
+16-17Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIDFzCCAf+gAwIBAgIJALsqlqk6FkVjMA0GCSqGSIb3DQEBBQUAMBExDzANBgNV
3-
BAMTBnVudXNlZDAeFw0xNzEyMDYyMjQwNDRaFw0yNzEyMDQyMjQwNDRaMBExDzAN
4-
BgNVBAMTBnVudXNlZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZg
5-
rgM97eLsTl3ul4m07pVHE/g9f0VP6/MDQcAjqj9kRmg5XMo/E6eRbNcIVwKEGHwC
6-
SuSvGO/j7reYN4cbjvBqimc8asecg5rtXjaDBm66feB/ktOjASSfGfuN79JOJf+r
7-
/BNcCrs8qWa1FSPEnQO7VTTUstkDKB8uvBFPOiPNVw438KM2lId2G/i63soMes0m
8-
9RjPdXbRqJI39WdMVDYXIqLSVIX11xOXvroetwDPkHIi4Tjzus1T6KMjwKD3f3sm
9-
DeUJeu4f1ZV4LPhhW62O9fkKeGy55LglfqOmWusySdOoNgEocN4V3iDQmJ7QOEXw
10-
yPX+ZhhPHuptDwBTWJcCAwEAAaNyMHAwHQYDVR0OBBYEFD7D1XyWbYOiMWDgDyBs
11-
po+JmlViMEEGA1UdIwQ6MDiAFD7D1XyWbYOiMWDgDyBspo+JmlVioRWkEzARMQ8w
12-
DQYDVQQDEwZ1bnVzZWSCCQC7KpapOhZFYzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3
13-
DQEBBQUAA4IBAQAlq4QHt5yqCBhhLsMNnTDmg6ev7lxXKnb+JRMm3Op0rgBDe4sQ
14-
U3Hxrhma+55f2rx32kwpcMQr4WWp0tUKL0OpWrNqdJc4oGFftLDqzKxXyT1nN5PH
15-
1p9HCkHHwxmGZ60fxKb64yu9PTgsZS64l21CWlNFEiC8IULa5HV/O0ZZdPuAZVv0
16-
hzmkalP/7uPqJ+z2tBEADQOjrU7SiB8uM+q1BLN9vnZrjo7CsXNwIiQ8N8eXpzsX
17-
did5acwQdAt67uNx9e/YXLMvuAn+qVN+crS4IliBiikMZiUkug5yBDsLySFwXsZg
18-
MGkUkV28QlgT4wzSQJ52yGtYCauqO2qU4zZg
2+
MIIC+DCCAeCgAwIBAgIJALt7HnuYGgVcMA0GCSqGSIb3DQEBCwUAMBExDzANBgNV
3+
BAMMBnVudXNlZDAeFw0xODEyMDMwMDE2MjNaFw0yODExMzAwMDE2MjNaMBExDzAN
4+
BgNVBAMMBnVudXNlZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrA
5+
b+5XMIgwyl6+CkdJkKKp4f+2hHAOoSqQroj2MR/i41YysUbKCk8KdQSZqTBtIvrY
6+
df7s6zDV3zmi3LBBHX6MGnz/1j5YIXlujBhsnQTRbTuUjjDx96ik2C2rR1w7okA7
7+
MmBsdVzRe8g5pfNQGdV0l15UaZK+qFlLg0xzasPPKmYFFUbKXeWPaKJmtw9d/l6a
8+
8jb87fwI3LTWjZr6Bk7L4Zf1TDlTDroMvNlkW9Z9xSkcgC77EjMtC7RYxxbelaxd
9+
qI9IdxIpmExg6pKMJEvJNA11GYhTlAxkJNh7gd0WlYvQlwDI7D6NJPbCmm4ac1P2
10+
AA1MFHVgxoKAFk/8V38CAwEAAaNTMFEwHQYDVR0OBBYEFC5Dlz2bTWzaJO6i1Qn8
11+
lTdDAigCMB8GA1UdIwQYMBaAFC5Dlz2bTWzaJO6i1Qn8lTdDAigCMA8GA1UdEwEB
12+
/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBANmnnBQaWPhJne5kOjMe+SEsdLbG
13+
OD9L8RmokOsRPXJbj2KoM07UUXMgUe57daYm72wDfKZpvG5qwybkkym+NnahJY+C
14+
u9FX1dTBjM/TqPWKI817mDp5W31a+q6DXdggG+Yf6pz0dMXGGzRtSTEpLKsKtXqe
15+
Y9f7266JCx9V5QFK14SmpIdBF38G0bcNPEvRJ6uKaVKBnU4+7o4YlQLuDczT29Tp
16+
CXL0egUViNT9kv03Pj9iSPR6EGcmOjnSZe1SFVg9OeCauF1wuuFCxUuCkWSEkEm7
17+
laNke9PHHTe9BoBxKMsTFEPivhVaAf9fUp+NQxZNmdgbux9AAlJgiyU0sFg=
1918
-----END CERTIFICATE-----
+28Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDqwG/uVzCIMMpe
3+
vgpHSZCiqeH/toRwDqEqkK6I9jEf4uNWMrFGygpPCnUEmakwbSL62HX+7Osw1d85
4+
otywQR1+jBp8/9Y+WCF5bowYbJ0E0W07lI4w8feopNgtq0dcO6JAOzJgbHVc0XvI
5+
OaXzUBnVdJdeVGmSvqhZS4NMc2rDzypmBRVGyl3lj2iiZrcPXf5emvI2/O38CNy0
6+
1o2a+gZOy+GX9Uw5Uw66DLzZZFvWfcUpHIAu+xIzLQu0WMcW3pWsXaiPSHcSKZhM
7+
YOqSjCRLyTQNdRmIU5QMZCTYe4HdFpWL0JcAyOw+jST2wppuGnNT9gANTBR1YMaC
8+
gBZP/Fd/AgMBAAECggEBAOevf4kColJ3nPM+qlRLJaV09yjyUOlrduLUon1oRXmL
9+
6wUCyPXtp5j04CLnKRUzUUezZVlxKHotSr/OnfKSgXKJAgeGVEN5paf8U+YzJBFC
10+
RIV+C4wA84WNFBKWrbo43Nx50DFcOcSet4UYaFGoJ6cFB/PAaeW7p9lhbreAXcnb
11+
g2z4SBsGGO2ZKZkSOcXg39GKX5S0bsEhHzIOFvPBdDQpaVAx/Bq76iBzVz1bRwGp
12+
A3SjJn0g4V+3TcTrpRzgtCRRNPM48JeLHw6/mdVSk6gIoEbg+WTB92Z7BlTbjqhI
13+
LPoMx3wQkg7J2gRrT0rPJIMkgdK9Q8RyWaulsRAn+gECgYEA/jfisAhn7IAPBXKz
14+
ED56NSr174qX97SO2JrB7PO614BV8lHSoV4QI+nQCBkNVhL/SuWvqB3naImo+UOX
15+
Smo6fmh78X+yIXKKhj9qY01jxRGcrnhA25L9gk7TFSNm7XaV2HxHq+TW6tvkL0uO
16+
jXSH3D+u8/f+5ZCt/egNq3eU4n8CgYEA7GWgBLq8jmiz/VVLYboJ0YcJVZ5XAjfJ
17+
vgzxdzX9hIkq5Cpt1ZpO9zE3IXClVvfECXcLpEzoHbiJkEve4dDqbSe4T4JPmpRx
18+
BKRPWFJvTieLA912UmHRBDTrQSA/nZ5zxHsXYmN52femqCwbPWYu5czoqud+GcNq
19+
ghj4oF9UCwECgYEAzpaHx1ntakne6yR807SSB2b0GUfdm1TFyMxqz655pesK7TMF
20+
IlGYeDbn8cy6A7rIcAsbplk21sMX6Ai/h5+wDU3He0e0cG3umI4sXKpla56WX0om
21+
Gsnm7eA0tTbhzBPUTeshK1V6Ob2cP7r9C4MpbRjriiN8pv3eBzpu8WrqOO0CgYAB
22+
8bgGMe75EN1iGQB8tkX8ZirqfFnk18ad/IdD3rrOCz7CD6NFnXZGzC3S5ZVGiNUg
23+
6sy6tjM2g10GRcl4e/phmXEHnl+/OrdPPXa1mD/4GZUoG/ssJEfOzAyfRX+gcTws
24+
goKnuX+4DjRdr7ctoxiBpVTIiwzbc2L93Oy2jPIpAQKBgGzaYhfOlB3SWo+iSKcb
25+
Vx++0gXru1Sgeo42TIn+6adO6DYfwVtfaScVL+Jcg7MZYY+94gnPCp+/ohVTJTvQ
26+
JZdI9Czem64VUtSvc0DCji5gPqvgsO5YgBQrGJJrbmVwu0A6RlNbDwxCdkqHuYk4
27+
7vsxlbXvNufb0LjnNN0lSUU2
28+
-----END PRIVATE KEY-----

‎iot/api-client/mqtt_example/cloudiot_mqtt_example.py

Copy file name to clipboardExpand all lines: iot/api-client/mqtt_example/cloudiot_mqtt_example.py
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ def get_client(
158158
# Subscribe to the config topic.
159159
client.subscribe(mqtt_config_topic, qos=1)
160160

161+
# The topic that the device will receive commands on.
162+
mqtt_command_topic = '/devices/{}/commands/#'.format(device_id)
163+
164+
# Subscribe to the commands topic, QoS 1 enables message acknowledgement.
165+
print('Subscribing to {}'.format(mqtt_command_topic))
166+
client.subscribe(mqtt_command_topic, qos=0)
167+
161168
return client
162169
# [END iot_mqtt_config]
163170

‎iot/api-client/mqtt_example/cloudiot_mqtt_example_test.py

Copy file name to clipboardExpand all lines: iot/api-client/mqtt_example/cloudiot_mqtt_example_test.py
+42Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,3 +176,45 @@ def test_config(test_topic, capsys):
176176
out, _ = capsys.readouterr()
177177
assert "Received message" in out
178178
assert '/devices/{}/config'.format(device_id) in out
179+
180+
181+
def test_receive_command(capsys):
182+
device_id = device_id_template.format('RSA256')
183+
manager.create_registry(
184+
service_account_json, project_id, cloud_region, pubsub_topic,
185+
registry_id)
186+
manager.create_rs256_device(
187+
service_account_json, project_id, cloud_region, registry_id,
188+
device_id, rsa_cert_path)
189+
190+
# Exercize the functionality
191+
client = cloudiot_mqtt_example.get_client(
192+
project_id, cloud_region, registry_id, device_id,
193+
rsa_private_path, 'RS256', ca_cert_path,
194+
'mqtt.googleapis.com', 443)
195+
client.loop_start()
196+
197+
# Pre-process commands
198+
for i in range(1, 3):
199+
client.loop()
200+
time.sleep(1)
201+
202+
manager.send_command(
203+
service_account_json, project_id, cloud_region, registry_id,
204+
device_id, 'me want cookies')
205+
206+
# Process commands
207+
for i in range(1, 3):
208+
client.loop()
209+
time.sleep(1)
210+
211+
# Clean up
212+
manager.delete_device(
213+
service_account_json, project_id, cloud_region, registry_id,
214+
device_id)
215+
manager.delete_registry(
216+
service_account_json, project_id, cloud_region, registry_id)
217+
218+
out, _ = capsys.readouterr()
219+
assert 'on_connect' in out # Verify can connect
220+
assert '\'me want cookies\'' in out # Verify can receive command
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
google-api-python-client==1.7.4
1+
google-api-python-client==1.7.5
22
google-auth-httplib2==0.0.3
33
google-auth==1.6.1
4-
google-cloud-pubsub==0.38.0
4+
google-cloud-pubsub==0.39.0
55
cryptography==2.4.2
66
pyjwt==1.6.4
77
paho-mqtt==1.4.0
+16-16Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIC9TCCAd2gAwIBAgIJALM44e3ivEWkMA0GCSqGSIb3DQEBCwUAMBExDzANBgNV
3-
BAMMBnVudXNlZDAeFw0xNzEyMDcwMDQ1MjdaFw0yNzEyMDUwMDQ1MjdaMBExDzAN
4-
BgNVBAMMBnVudXNlZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL4w
5-
BxHuEyYdbiwKiD8yXY7vYpcygeOQ4/ZdEg3wCB2OuYcaFRcCuqLcTLMnuzdcL+y3
6-
HBjWkrRW658cg3NG93Vj0iwSrga6u24CGBNYV+h8MBvwaDxk+uubnd5M/Q2OyL1J
7-
GiMxQ1blR/71Hr5hhqaQZ2+qOF6kuf1m9rLUtMUJwOKp/PjPDmy654ZGsFWFSZmy
8-
eRpNzmGU+KJg0o+Qf+sm75a8gQZ8AsrqveW0S/8o+zAjD0SkPcd01QBmYzQhjbi/
9-
LGGITrzbaB3ld9umJBIcXfnYPYisJfwSsT/jFwiXhrhpxNNaIaKlTzlQIt5l8bSs
10-
HXzJBbuIg5Jb/SyIEpkCAwEAAaNQME4wHQYDVR0OBBYEFOfaQTUVAoNb6fc7qzzl
11-
uKyHGrCYMB8GA1UdIwQYMBaAFOfaQTUVAoNb6fc7qzzluKyHGrCYMAwGA1UdEwQF
12-
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBALKKDtiV1YV8k0YsNdiIXRlS3jsuoGuI
13-
VVBrvDGz5Hel0rH9YmmfPS/Yn08kk3DF8Uynr4Xo1Zt9hmhgoq3ZoWm7MIP1+a9s
14-
WyACyEMhVQSCzQrexRvG5ElpHx/vNjbcwiBkE5urlIvMBVt+BRRNKMNWq6F9ae63
15-
FxRp7CtNFSbibtLJuPgCs6qoNs0nlt2FPsNvs7jpPipj69o+egVckvQjAyppirWO
16-
+jO5hCLy7EahLz2wCn90z0Xf9lhOZni9meaV1Vy3CHHg6jwIB8/XlRaHFrOGMGXg
17-
h8eQqsmpk9/3o8pv00yj6Hkq+swVg7Rg9FZaUiOv/HO/J7stWU7qPbI=
2+
MIIC+DCCAeCgAwIBAgIJALt7HnuYGgVcMA0GCSqGSIb3DQEBCwUAMBExDzANBgNV
3+
BAMMBnVudXNlZDAeFw0xODEyMDMwMDE2MjNaFw0yODExMzAwMDE2MjNaMBExDzAN
4+
BgNVBAMMBnVudXNlZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrA
5+
b+5XMIgwyl6+CkdJkKKp4f+2hHAOoSqQroj2MR/i41YysUbKCk8KdQSZqTBtIvrY
6+
df7s6zDV3zmi3LBBHX6MGnz/1j5YIXlujBhsnQTRbTuUjjDx96ik2C2rR1w7okA7
7+
MmBsdVzRe8g5pfNQGdV0l15UaZK+qFlLg0xzasPPKmYFFUbKXeWPaKJmtw9d/l6a
8+
8jb87fwI3LTWjZr6Bk7L4Zf1TDlTDroMvNlkW9Z9xSkcgC77EjMtC7RYxxbelaxd
9+
qI9IdxIpmExg6pKMJEvJNA11GYhTlAxkJNh7gd0WlYvQlwDI7D6NJPbCmm4ac1P2
10+
AA1MFHVgxoKAFk/8V38CAwEAAaNTMFEwHQYDVR0OBBYEFC5Dlz2bTWzaJO6i1Qn8
11+
lTdDAigCMB8GA1UdIwQYMBaAFC5Dlz2bTWzaJO6i1Qn8lTdDAigCMA8GA1UdEwEB
12+
/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBANmnnBQaWPhJne5kOjMe+SEsdLbG
13+
OD9L8RmokOsRPXJbj2KoM07UUXMgUe57daYm72wDfKZpvG5qwybkkym+NnahJY+C
14+
u9FX1dTBjM/TqPWKI817mDp5W31a+q6DXdggG+Yf6pz0dMXGGzRtSTEpLKsKtXqe
15+
Y9f7266JCx9V5QFK14SmpIdBF38G0bcNPEvRJ6uKaVKBnU4+7o4YlQLuDczT29Tp
16+
CXL0egUViNT9kv03Pj9iSPR6EGcmOjnSZe1SFVg9OeCauF1wuuFCxUuCkWSEkEm7
17+
laNke9PHHTe9BoBxKMsTFEPivhVaAf9fUp+NQxZNmdgbux9AAlJgiyU0sFg=
1818
-----END CERTIFICATE-----
+26-26Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC+MAcR7hMmHW4s
3-
Cog/Ml2O72KXMoHjkOP2XRIN8AgdjrmHGhUXArqi3EyzJ7s3XC/stxwY1pK0Vuuf
4-
HINzRvd1Y9IsEq4GurtuAhgTWFfofDAb8Gg8ZPrrm53eTP0Njsi9SRojMUNW5Uf+
5-
9R6+YYamkGdvqjhepLn9Zvay1LTFCcDiqfz4zw5suueGRrBVhUmZsnkaTc5hlPii
6-
YNKPkH/rJu+WvIEGfALK6r3ltEv/KPswIw9EpD3HdNUAZmM0IY24vyxhiE6822gd
7-
5XfbpiQSHF352D2IrCX8ErE/4xcIl4a4acTTWiGipU85UCLeZfG0rB18yQW7iIOS
8-
W/0siBKZAgMBAAECggEAfwLmBdRfl2m6JNFX0hSZpJY72kuRsN8XTnUzVHmDgfHJ
9-
9u61POvGpnLHCjIzdjIrk0NqETBjQup1aooJQ1gWdKAYQPSsobPc7geZ+nlaI9mj
10-
61Su1/58EBKZ6Faz/HTpnHeQbAY/OW3fmeYrBOtumBgB6/HauWH7D77Oa/lfS+Ij
11-
4f6OVAxevsi6PUtNmNtBwk5S0lZl9SFcKeHurVindquX9vWZjBEEFtNXazJttIJS
12-
z9KX29VYwoLfflIKaUKckn8X+wYc+3u3BvH8zJpd60yQ6MSo7Sb1XkxT9549m+JW
13-
Cb+i1K7MC/yQo4mvDtAQIVBh8p8qpd4VjpBwMuUbgQKBgQDexuAaLO3adSYFXGwW
14-
nom6Mz/ImYcpxYo0ouAR1talbmF5/oKl9Tcwh7l1eDHfe70gfeP+g4uwAcc1hx3a
15-
ZtXusrJFBktFezlFQnZXaE5ppryrFWeu0he0RYLAVxnL6IlP9dYQhVsTZm+7uX5d
16-
UP7aZtmOU9ZTEsAoqvjJQXvaCQKBgQDajPebXOxIUj8ffGTeiPZczTwXux04caDC
17-
eFKSCbAlHWgG7mR4P3fQONfEGWNHF0CxBSrew9CHmKdPyiISaExCfUaUWDDCPQCp
18-
UE5VAHPdjSlb4lqi+cyNVlJxBJGONtyYkbQNd6N9GHMnBS8jZi7zf8VzIXpeExA4
19-
n79Aml/YEQKBgDFrGId19AWD+z0xNWEHJjJB8CJFvHANvAzVHLOYXuEvzTvMs5qw
20-
/N8tHHzsftO+lUPB6XOqJrCSlGhRYtPx//8FcPpS3Ru6rAerKKlXIB3buPqSsv9a
21-
55s72DdmmvhayysLs8LSclOpY5vXGCsHLqGwMw6Zlm+zNyFOXAX5GspRAoGAaJMx
22-
W68ABK8OM0OzhGQm9kriKTzIg5yjXspyQBzQo0HJ6B8kBgHgk8rPO68mOPsgYlPl
23-
qogp/OgHjv9ahFJRwzLslckJM7g628loYfYAew+zrZrG4dsDjNG0Sw3zlAgeUAbQ
24-
D+2iVhZf61josFiRuMP3t9paEi+vAFk4C3KSz/ECgYBpi1akpIzsYehW5uOL7Jhw
25-
Hay5eshQ4vmHYuhDnn3gtT3h6J7TMwWs9pOygBG1I1b7GJ+tp4BZWJ2PmI7P8s45
26-
jdI99WODHwv03lAzjLwigoqDUDduaYqXcGghcGht5Sknkl2uYDChwLtI5JdBZ9/x
27-
8h9dE9oAiH/KTzhPmK1E1Q==
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDqwG/uVzCIMMpe
3+
vgpHSZCiqeH/toRwDqEqkK6I9jEf4uNWMrFGygpPCnUEmakwbSL62HX+7Osw1d85
4+
otywQR1+jBp8/9Y+WCF5bowYbJ0E0W07lI4w8feopNgtq0dcO6JAOzJgbHVc0XvI
5+
OaXzUBnVdJdeVGmSvqhZS4NMc2rDzypmBRVGyl3lj2iiZrcPXf5emvI2/O38CNy0
6+
1o2a+gZOy+GX9Uw5Uw66DLzZZFvWfcUpHIAu+xIzLQu0WMcW3pWsXaiPSHcSKZhM
7+
YOqSjCRLyTQNdRmIU5QMZCTYe4HdFpWL0JcAyOw+jST2wppuGnNT9gANTBR1YMaC
8+
gBZP/Fd/AgMBAAECggEBAOevf4kColJ3nPM+qlRLJaV09yjyUOlrduLUon1oRXmL
9+
6wUCyPXtp5j04CLnKRUzUUezZVlxKHotSr/OnfKSgXKJAgeGVEN5paf8U+YzJBFC
10+
RIV+C4wA84WNFBKWrbo43Nx50DFcOcSet4UYaFGoJ6cFB/PAaeW7p9lhbreAXcnb
11+
g2z4SBsGGO2ZKZkSOcXg39GKX5S0bsEhHzIOFvPBdDQpaVAx/Bq76iBzVz1bRwGp
12+
A3SjJn0g4V+3TcTrpRzgtCRRNPM48JeLHw6/mdVSk6gIoEbg+WTB92Z7BlTbjqhI
13+
LPoMx3wQkg7J2gRrT0rPJIMkgdK9Q8RyWaulsRAn+gECgYEA/jfisAhn7IAPBXKz
14+
ED56NSr174qX97SO2JrB7PO614BV8lHSoV4QI+nQCBkNVhL/SuWvqB3naImo+UOX
15+
Smo6fmh78X+yIXKKhj9qY01jxRGcrnhA25L9gk7TFSNm7XaV2HxHq+TW6tvkL0uO
16+
jXSH3D+u8/f+5ZCt/egNq3eU4n8CgYEA7GWgBLq8jmiz/VVLYboJ0YcJVZ5XAjfJ
17+
vgzxdzX9hIkq5Cpt1ZpO9zE3IXClVvfECXcLpEzoHbiJkEve4dDqbSe4T4JPmpRx
18+
BKRPWFJvTieLA912UmHRBDTrQSA/nZ5zxHsXYmN52femqCwbPWYu5czoqud+GcNq
19+
ghj4oF9UCwECgYEAzpaHx1ntakne6yR807SSB2b0GUfdm1TFyMxqz655pesK7TMF
20+
IlGYeDbn8cy6A7rIcAsbplk21sMX6Ai/h5+wDU3He0e0cG3umI4sXKpla56WX0om
21+
Gsnm7eA0tTbhzBPUTeshK1V6Ob2cP7r9C4MpbRjriiN8pv3eBzpu8WrqOO0CgYAB
22+
8bgGMe75EN1iGQB8tkX8ZirqfFnk18ad/IdD3rrOCz7CD6NFnXZGzC3S5ZVGiNUg
23+
6sy6tjM2g10GRcl4e/phmXEHnl+/OrdPPXa1mD/4GZUoG/ssJEfOzAyfRX+gcTws
24+
goKnuX+4DjRdr7ctoxiBpVTIiwzbc2L93Oy2jPIpAQKBgGzaYhfOlB3SWo+iSKcb
25+
Vx++0gXru1Sgeo42TIn+6adO6DYfwVtfaScVL+Jcg7MZYY+94gnPCp+/ohVTJTvQ
26+
JZdI9Czem64VUtSvc0DCji5gPqvgsO5YgBQrGJJrbmVwu0A6RlNbDwxCdkqHuYk4
27+
7vsxlbXvNufb0LjnNN0lSUU2
2828
-----END PRIVATE KEY-----

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.