From a55fdf9583e8b283c22265a059b51604947146fd Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Wed, 17 Feb 2021 10:27:27 +0100 Subject: [PATCH] v20210217 cleaned --- bin/fp.py | 326 +++++++++++++++++++++++++++++++++ bin/fp.sh | 5 + bin/fpunload.sh | 8 + bin/savewlan.sh | 33 ++++ bin/scanwlan.sh | 30 +++ bin/startapp.sh | 6 + desktopapp/js/lang.js | 8 + vpn/DKS-VPN-ldin-hourtrax.ovpn | 153 ++++++++++++++++ 8 files changed, 569 insertions(+) create mode 100644 bin/fp.py create mode 100644 bin/fp.sh create mode 100644 bin/fpunload.sh create mode 100644 bin/savewlan.sh create mode 100644 bin/scanwlan.sh create mode 100644 bin/startapp.sh create mode 100644 desktopapp/js/lang.js create mode 100644 vpn/DKS-VPN-ldin-hourtrax.ovpn diff --git a/bin/fp.py b/bin/fp.py new file mode 100644 index 0000000..09797f6 --- /dev/null +++ b/bin/fp.py @@ -0,0 +1,326 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import serial +import time +import sys +import RPi.GPIO as GPIO + +MYCMD=sys.argv[1] +MYTIMEOUT=int(sys.argv[2]) +MYLEVEL=5 +MYLOW=-1 +MYHIGH=-1 +MYPERM=1 +#if len(sys.argv) == 4: +# MYLEVEL=int(sys.argv[3]) +if MYCMD == "deleteuser" or MYCMD == "replaceuser": + MYHIGH=int(sys.argv[3]) + MYLOW=int(sys.argv[4]) +elif MYCMD == "write": + if len(sys.argv) == 4: + MYPERM=int(sys.argv[3]) +# elif len(sys.argv) == 4: +# MYLEVEL=int(sys.argv[3]) + +TRUE = 1 +FALSE = 0 + +# Basic response message definition +ACK_SUCCESS = 0x00 +ACK_FAIL = 0x01 +ACK_FULL = 0x04 +ACK_NO_USER = 0x05 +ACK_TIMEOUT = 0x08 +ACK_GO_OUT = 0x0F # The center of the fingersys.stdout.write is out of alignment with sensor + +# User information definition +ACK_ALL_USER = 0x00 +ACK_GUEST_USER = 0x01 +ACK_NORMAL_USER = 0x02 +ACK_MASTER_USER = 0x03 + +USER_MAX_CNT = 1000 # Maximum fingersys.stdout.write number + +# Command definition +CMD_HEAD = 0xF5 +CMD_TAIL = 0xF5 +CMD_ADD_1 = 0x01 +CMD_ADD_2 = 0x02 +CMD_ADD_3 = 0x03 +CMD_MATCH = 0x0C +CMD_DEL = 0x04 +CMD_DEL_ALL = 0x05 +CMD_USER_CNT = 0x09 +CMD_COM_LEV = 0x28 +CMD_LP_MODE = 0x2C +CMD_TIMEOUT = 0x2E +CMD_ALLUSERS = 0x2B + +CMD_FINGER_DETECTED = 0x14 + + + +Finger_WAKE_Pin = 23 +Finger_RST_Pin = 24 + +GPIO.setmode(GPIO.BCM) +GPIO.setwarnings(False) +GPIO.setup(Finger_WAKE_Pin, GPIO.IN) +GPIO.setup(Finger_RST_Pin, GPIO.OUT) +GPIO.setup(Finger_RST_Pin, GPIO.OUT, initial=GPIO.HIGH) + +g_rx_buf = [] +PC_Command_RxBuf = [] +Finger_SleepFlag = 1 + +ser = serial.Serial("/dev/ttyS0", 19200) + + +def TxAndRxCmd(command_buf, rx_bytes_need, timeout): + global g_rx_buf + CheckSum = 0 + tx_buf = [] + tx = "" + + tx_buf.append(CMD_HEAD) + for byte in command_buf: + tx_buf.append(byte) + CheckSum ^= byte + + tx_buf.append(CheckSum) + tx_buf.append(CMD_TAIL) + + for i in tx_buf: + tx += chr(i) + + ser.flushInput() + ser.write(tx) + + g_rx_buf = [] + time_before = time.time() + time_after = time.time() + while time_after - time_before < timeout and len(g_rx_buf) < rx_bytes_need: # Waiting for response + bytes_can_recv = ser.inWaiting() + if bytes_can_recv != 0: + g_rx_buf += ser.read(bytes_can_recv) + time_after = time.time() + + for i in range(len(g_rx_buf)): + g_rx_buf[i] = ord(g_rx_buf[i]) + + if len(g_rx_buf) != rx_bytes_need: + return ACK_TIMEOUT * -1 + if g_rx_buf[0] != CMD_HEAD: + return ACK_FAIL * -1 + if g_rx_buf[rx_bytes_need - 1] != CMD_TAIL: + return ACK_FAIL * -1 + if g_rx_buf[1] != tx_buf[1]: + return ACK_FAIL * -1 + + CheckSum = 0 + for index, byte in enumerate(g_rx_buf): + if index == 0: + continue + if index == 6: + if CheckSum != byte: + return ACK_FAIL * -1 + CheckSum ^= byte + return ACK_SUCCESS; + + +def GetCompareLevel(): + global g_rx_buf + command_buf = [CMD_COM_LEV, 0, 0, 1, 0] + r = TxAndRxCmd(command_buf, 8, 0.1) + if r == ACK_TIMEOUT: + return ACK_TIMEOUT * -1 + if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS: + return g_rx_buf[3] + else: + return 0xFF + + +def SetCompareLevel(level): + global g_rx_buf + command_buf = [CMD_COM_LEV, 0, level, 0, 0] + r = TxAndRxCmd(command_buf, 8, 0.1) + + if r == ACK_TIMEOUT: + return ACK_TIMEOUT * -1 + if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS: + return g_rx_buf[3] + else: + return 0xFF + + +def GetUserCount(): + global g_rx_buf + command_buf = [CMD_USER_CNT, 0, 0, 0, 0] + r = TxAndRxCmd(command_buf, 8, 0.1) + if r == ACK_TIMEOUT: + return ACK_TIMEOUT + if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS: + return g_rx_buf[3] + else: + return 0xFF + +def GetTimeOut(): + global g_rx_buf + command_buf = [CMD_TIMEOUT, 0, 0, 1, 0] + r = TxAndRxCmd(command_buf, 8, 0.1) + if r == ACK_TIMEOUT: + return ACK_TIMEOUT * -1 + if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS: + return g_rx_buf[3] + else: + return 0xFF + + +def AddUser(perm): + global g_rx_buf,MYTIMEOUT + r = GetUserCount() + #sys.stdout.write ("users" + str(r)) + if r >= USER_MAX_CNT: + return ACK_FULL * -1 + + command_buf = [CMD_ADD_1, 0, r+1, perm, 0] + r = TxAndRxCmd(command_buf, 8, MYTIMEOUT) + #sys.stdout.write("1:" + str(g_rx_buf)) + if r == ACK_TIMEOUT: + return ACK_TIMEOUT * -1 + if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS: + command_buf[0] = CMD_ADD_3 + r = TxAndRxCmd(command_buf, 8, MYTIMEOUT) + #sys.stdout.write("2:" + str(g_rx_buf)) + if r == ACK_TIMEOUT: + return ACK_TIMEOUT * -1 + if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS: + sys.stdout.write("a") + r = VerifyUser() + return r + else: + return ACK_FAIL * -1 + else: + return ACK_FAIL * -1 + +def ReplaceUser(highbit,lowbit): + global g_rx_buf,MYTIMEOUT + r = DeleteUser(highbit,lowbit) + if r == ACK_SUCCESS: + r = AddUser(MYPERM) + return r + +def DeleteUser(highnit,lowbit): + global g_rx_buf,MYTIMEOUT + if highbit == -1: + return ACK_GO_OUT * -1 + if lowbit == -1: + return ACK_GO_OUT * -1 + command_buf = [CMD_DEL, highbit, lowbit, 0, 0] + #print("CMD",command_buf) + r = TxAndRxCmd(command_buf, 8, MYTIMEOUT) + #print(g_rx_buf) + if r == ACK_FAIL: + return ACK_FAIL * -1 + if r == ACK_SUCCESS: + return ACK_SUCCESS + +def ClearAllUser(): + global g_rx_buf + command_buf = [CMD_DEL_ALL, 0, 0, 0, 0] + r = TxAndRxCmd(command_buf, 8, 5) + if r == ACK_TIMEOUT: + return ACK_TIMEOUT * -1 + if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS: + return ACK_SUCCESS + else: + return ACK_FAIL * -1 + +def GetAllUsers(): + global g_rx_buf + command_buf = [CMD_ALLUSERS, 0, 0, 0, 0] + r = TxAndRxCmd(command_buf, 8, 20) + print(g_rx_buf) + if r == ACK_TIMEOUT: + return ACK_TIMEOUT * -1 + if r == ACK_SUCCESS: + return ACK_SUCCESS + else: + return ACK_FAIL * -1 + + #*************************************************************************** +# @brief Check if user ID is between 1 and 3 +#***************************************************************************/ +def IsMasterUser(user_id): + if user_id == 1 or user_id == 2 or user_id == 3: + return TRUE + else: + return FALSE + +def VerifyUser(): + global g_rx_buf,MYTIMEOUT + command_buf = [CMD_MATCH, 0, 0, 0, 0] + r = TxAndRxCmd(command_buf, 8, MYTIMEOUT) + #sys.stdout.write("v" + str(g_rx_buf)) + if r == ACK_TIMEOUT: + return str(ACK_TIMEOUT * -1) + if r == ACK_SUCCESS and IsMasterUser(g_rx_buf[4]) == TRUE: + #ACK_SUCCESS + return "u["+ str(g_rx_buf[2])+',' + str(g_rx_buf[3])+',' + str(g_rx_buf[4])+',' + str(g_rx_buf[6]) +"]" + else: + return "-" + str(ACK_NO_USER) # The center of the fingersys.stdout.write is out of alignment with sensor + +def ExitApp(reason): + if ser != None: + ser.close() + GPIO.cleanup() + sys.stdout.write(reason) + sys.exit() + +def Analysis_PC_Command(command): + global Finger_SleepFlag + exitmsg = "-50" + if command == "count": + ExitApp(str(GetUserCount())) + elif command == "write": + r = AddUser(MYPERM) + ExitApp(str(r)) + elif command == "read": + r = VerifyUser() + ExitApp(str(r)) + elif command == "clearall": + r = ClearAllUser() + ExitApp(str(r)) + elif command == "gettimeout": + r = GetTimeOut() + ExitApp(str(r)) + elif command == "allusers": + r = GetAllUsers() + ExitApp(str(r)) + elif command == "deleteuser": + r = DeleteUser(MYHIGH,MYLOW) + ExitApp(str(r)) + elif command == "replaceuser": + r = ReplaceUser(MYHIGH,MYLOW) + ExitApp(str(r)) + else: + exitmsg = "I" + ExitApp("-100") + + +def main(): + + GPIO.output(Finger_RST_Pin, GPIO.LOW) + time.sleep(0.25) + GPIO.output(Finger_RST_Pin, GPIO.HIGH) + time.sleep(0.25) # Wait for module to start + if SetCompareLevel(MYLEVEL) != MYLEVEL: + ExitApp("-20") + Analysis_PC_Command(MYCMD) + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + ExitApp("-30") diff --git a/bin/fp.sh b/bin/fp.sh new file mode 100644 index 0000000..cb832ce --- /dev/null +++ b/bin/fp.sh @@ -0,0 +1,5 @@ +#!/bin/bash +CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +DATADIR=`dirname ${CALLDIR}`; +DATADIR=${DATADIR}'/.hourtrax' +sqlite3 ${DATADIR}'/hourtrax.sqlite' "select 'u' || fingerhash from fingerprints where id_staff='1';" \ No newline at end of file diff --git a/bin/fpunload.sh b/bin/fpunload.sh new file mode 100644 index 0000000..0aca85d --- /dev/null +++ b/bin/fpunload.sh @@ -0,0 +1,8 @@ +#!/bin/bash +echo "Virtual unload!" +# MYPID=`ps ax | grep fp.py | grep -v "grep" | head -n 1 | awk '{ print $1 }'` +# if [ "${MYPID}" != "" ] +# then +# kill ${MYPID} +# fi + diff --git a/bin/savewlan.sh b/bin/savewlan.sh new file mode 100644 index 0000000..8c6ba01 --- /dev/null +++ b/bin/savewlan.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +WLANFILE="/etc/wpa_supplicant/wpa_supplicant.conf" +WLANDATA='ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev +update_config=1 +country=LU + +network={ + ssid="'$1'" + psk="'$2'" + priority=1 + id_str="local" +} + +network={ \ + ssid="ksphone" \ + psk="flk2kilx" + priority=1 + id_str="support" +} + +network={ + ssid="EireLAN24" + psk="daataalt2602@" + priority=2 + id_str="install" +}' +sudo echo ${WLANDATA} > ${WLANFILE} +sudo wpa_cli -i wlan0 reconfigure +#sudo dhclient -r wlan0 +#sudo ifdown wlan0 +#sudo ifup wlan0 +#sudo dhclient -v wlan0 \ No newline at end of file diff --git a/bin/scanwlan.sh b/bin/scanwlan.sh new file mode 100644 index 0000000..cd26358 --- /dev/null +++ b/bin/scanwlan.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +IFS=$'\n'; set -f; +WLANS=(`sudo iwlist wlan0 scan`) +OUTPUT="" +for w in "${!WLANS[@]}" +do + #echo $w + if [[ "${WLANS[$w]}" =~ "Cell " ]] + then + CELLDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | awk '{ print $2 }'` + if [[ "${OUTPUT}" != "" ]] + then + OUTPUT=${OUTPUT}"," + fi + OUTPUT=${OUTPUT}'{"id":"'${CELLDATA}'",' + fi + if [[ "${WLANS[$w]}" =~ "ESSID:" ]] + then + #echo ${WLANS[$w]} + SDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | sed 's/ESSID://g'` + OUTPUT=${OUTPUT}'"SSID":'${SDATA}'}' + fi + if [[ "${WLANS[$w]}" =~ "Quality=" ]] + then + QDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | awk '{ print $1 }' | sed 's/Quality=//g'` + OUTPUT=${OUTPUT}'"quality":"'${QDATA}'",' + fi +done +echo "["${OUTPUT}"]" \ No newline at end of file diff --git a/bin/startapp.sh b/bin/startapp.sh new file mode 100644 index 0000000..e1d16bd --- /dev/null +++ b/bin/startapp.sh @@ -0,0 +1,6 @@ +#/bin/bash +#/home/dks/bin/mountdrives.pl -m && +rm -rf ${HOME}"/cache/Hourtrax" && +#/home/dks/bin/hourtrax/hourtrax.pl && +${HOME}/bin/electron/electron & +xset dpms 0 0 60 & \ No newline at end of file diff --git a/desktopapp/js/lang.js b/desktopapp/js/lang.js new file mode 100644 index 0000000..79aaf67 --- /dev/null +++ b/desktopapp/js/lang.js @@ -0,0 +1,8 @@ +let lang = {"de": +{"pinerrormsg":"Pin-Code nicht korrekt!" + +}}; + +lang["fr"] = { + "pinerrormsg":"Code-Pin incorrecte!" +}; diff --git a/vpn/DKS-VPN-ldin-hourtrax.ovpn b/vpn/DKS-VPN-ldin-hourtrax.ovpn new file mode 100644 index 0000000..bf06068 --- /dev/null +++ b/vpn/DKS-VPN-ldin-hourtrax.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote vsrv01.dks.lu 1098 +remote arandks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 69:24:03:c7:c4:fb:5d:0e:9c:75:98:ca:31:79:79:40 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Jan 31 15:14:25 2021 GMT + Not After : Jan 29 15:14:25 2031 GMT + Subject: CN=ldin-hourtrax + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c7:e7:3b:52:90:cd:d1:c3:d6:a1:b3:f5:dd:c8: + 3b:e5:44:7c:24:11:2c:3d:9c:17:97:00:2d:a7:9b: + 36:e9:11:74:a1:ff:1e:f8:78:7d:08:54:98:50:71: + b4:bb:fc:15:7c:d1:ea:c3:64:03:a8:52:ac:26:d1: + b2:83:52:40:83:1d:67:c7:35:9c:e2:4a:7b:42:ca: + 69:b9:64:1c:78:ab:a9:41:81:1f:3c:e0:6e:94:1b: + 01:7c:e3:67:48:d5:97:45:71:e3:b8:ea:13:82:c2: + f4:89:ec:a4:19:09:59:5b:d4:2b:80:0b:f6:59:6e: + de:a5:4c:c7:13:cf:9f:fb:f2:a2:7c:bd:69:43:de: + bb:a5:5d:04:02:99:e1:79:40:b9:e4:f7:f6:c9:e7: + 93:07:16:c2:bd:87:c6:1d:b0:97:c6:15:bc:0f:0d: + 22:2a:a0:91:d7:5e:10:39:61:02:77:ad:61:d8:15: + 47:d2:37:05:56:64:71:c5:a1:3f:af:dc:62:06:3e: + 81:9d:ab:57:b6:ac:96:a2:7a:ee:a7:3c:5b:18:dd: + cc:13:4f:32:9f:0c:3c:88:f5:5b:ef:8d:ae:5e:3a: + fb:ff:c2:2d:58:49:4f:47:41:ef:84:d0:75:84:99: + 73:93:e8:54:ca:a9:ec:65:6b:13:54:bc:76:dd:cf: + 07:e3 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + 5D:14:14:8F:4C:8E:19:D1:1D:42:A5:D5:D1:5D:59:BC:1F:4D:F9:ED + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + ce:24:bd:c0:65:52:83:45:96:62:f7:14:27:31:87:6c:92:21: + f2:e8:7a:23:ca:3d:a8:d3:3d:86:08:5c:b0:53:60:d3:13:d6: + e4:8f:cf:69:b2:f2:d0:dc:87:88:e8:9a:21:22:26:19:ed:a1: + 40:e9:95:83:43:81:41:0f:e4:22:ab:b1:df:8e:c5:74:3b:85: + 57:f5:9e:a9:b8:71:6d:29:fe:be:54:bb:06:9d:9d:00:72:df: + 74:3c:11:1b:6b:89:06:7a:97:dc:0e:67:80:09:9a:50:6b:69: + 08:20:6e:86:d7:f8:49:d9:cd:21:8e:b7:a2:9c:ef:25:d5:51: + b5:96:36:e1:29:b3:c5:0a:8e:c7:8e:b9:c3:38:70:01:ab:f4: + 0b:97:ae:e2:20:09:35:fc:77:0c:0f:e2:35:ca:78:19:3c:d9: + 3d:a7:8b:f4:63:0b:ce:91:40:e8:36:af:83:88:81:76:02:0e: + 75:5c:85:7c:f1:25:6f:fb:8a:f3:e7:d2:3f:c0:d0:14:8c:62: + fe:e5:5c:83:16:47:4f:7a:7b:46:8a:e5:fe:cc:12:b6:60:9a: + 5e:08:4e:64:f5:6d:a6:7f:b2:8c:9a:1a:95:86:22:0d:29:88: + 45:dd:ef:6b:90:48:49:ff:92:30:c8:d0:d0:c2:80:2b:eb:c5: + bc:98:3d:ca +-----BEGIN CERTIFICATE----- +MIIDQjCCAiqgAwIBAgIQaSQDx8T7XQ6cdZjKMXl5QDANBgkqhkiG9w0BAQsFADAP +MQ0wCwYDVQQDDARhcmFuMB4XDTIxMDEzMTE1MTQyNVoXDTMxMDEyOTE1MTQyNVow +GDEWMBQGA1UEAwwNbGRpbi1ob3VydHJheDCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMfnO1KQzdHD1qGz9d3IO+VEfCQRLD2cF5cALaebNukRdKH/Hvh4 +fQhUmFBxtLv8FXzR6sNkA6hSrCbRsoNSQIMdZ8c1nOJKe0LKablkHHirqUGBHzzg +bpQbAXzjZ0jVl0Vx47jqE4LC9InspBkJWVvUK4AL9llu3qVMxxPPn/vyony9aUPe +u6VdBAKZ4XlAueT39snnkwcWwr2Hxh2wl8YVvA8NIiqgkddeEDlhAnetYdgVR9I3 +BVZkccWhP6/cYgY+gZ2rV7aslqJ67qc8WxjdzBNPMp8MPIj1W++Nrl46+//CLVhJ +T0dB74TQdYSZc5PoVMqp7GVrE1S8dt3PB+MCAwEAAaOBkDCBjTAJBgNVHRMEAjAA +MB0GA1UdDgQWBBRdFBSPTI4Z0R1CpdXRXVm8H0357TA/BgNVHSMEODA2gBSpUS+X +4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61AhpxApOU +MBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQsF +AAOCAQEAziS9wGVSg0WWYvcUJzGHbJIh8uh6I8o9qNM9hghcsFNg0xPW5I/PabLy +0NyHiOiaISImGe2hQOmVg0OBQQ/kIqux347FdDuFV/WeqbhxbSn+vlS7Bp2dAHLf +dDwRG2uJBnqX3A5ngAmaUGtpCCBuhtf4SdnNIY63opzvJdVRtZY24SmzxQqOx465 +wzhwAav0C5eu4iAJNfx3DA/iNcp4GTzZPaeL9GMLzpFA6Davg4iBdgIOdVyFfPEl +b/uK8+fSP8DQFIxi/uVcgxZHT3p7Rorl/swStmCaXghOZPVtpn+yjJoalYYiDSmI +Rd3va5BISf+SMMjQ0MKAK+vFvJg9yg== +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDH5ztSkM3Rw9ah +s/XdyDvlRHwkESw9nBeXAC2nmzbpEXSh/x74eH0IVJhQcbS7/BV80erDZAOoUqwm +0bKDUkCDHWfHNZziSntCymm5ZBx4q6lBgR884G6UGwF842dI1ZdFceO46hOCwvSJ +7KQZCVlb1CuAC/ZZbt6lTMcTz5/78qJ8vWlD3rulXQQCmeF5QLnk9/bJ55MHFsK9 +h8YdsJfGFbwPDSIqoJHXXhA5YQJ3rWHYFUfSNwVWZHHFoT+v3GIGPoGdq1e2rJai +eu6nPFsY3cwTTzKfDDyI9Vvvja5eOvv/wi1YSU9HQe+E0HWEmXOT6FTKqexlaxNU +vHbdzwfjAgMBAAECggEATht8Y2Nu+CJED8SoMbMWLBvZQaJwHdaKpRaNwCp2hxSp +9M4hRMaXXBTpuqzjCHyTzMScrSG8CB3dZAGVdZhC2rg3n2/ET+r4RH2gV67VLRUt +ugmAsiGjMz1mFG0qIxxJ0fmRF+RmITaZo/aRm7K6dpXtNUf3RrR6TC42rvf2M9PF +0C+ksWAfC0ZtWl3WqcF2/86WbwZR8MxAffmuXHDb+eADdKmbtrgw7Fq0QRzENGF2 +aP7HZ+Nk9GUU89a7wuIcctErp0DHGFn9bhuWrVQyXsgc1p+F0Ul8/9+u7YKyNyRJ +2Eu5VV0rq1MXPv1n97lN1JTIx2qNkUa2wx5TsRI3CQKBgQD3AS24ZM/eKbg1m0sX +5glj1H+Fjb+tZG+QD5vU9XhZLECKY11Zg5pSwtR5Ya0bGBevCxnMr4yvCaFfAqLp +dUw/HU7TOw1bGmep+/u3FNKDntue0Ibd7gbwvfrTXxPHTuf2ABfLLEFaSAeVWC2F +6jh7qnm0skgGEPkXZPwChezUlwKBgQDPLu18iRLMxgnpjuUgQWMi/E9kIefODPZN +rgKIUIbHZWrPT4+rN5sW2xOvdStjUWl2bsGXwsso4maVyWKIjw+rDauGbpHOfeL+ +TfiQ6If5+jVoFmGN9S3SdmKMCA6nlr4Dqdp0PHYoE/wS1UOK3omU7hg+0eDde+bS +YSt8snCUlQKBgFupFE5ZGspWsQUzm6pCszlYofntoDO4Ea5kHG/qp75vrYOtW/bb +32jW5AInPRXQ2vkaJXjPrGVILZoUYGBCJwlE1vuL7mjgY5ew6rgGAhjV2qoUt/ej +XO/5kBrgLXbI0Ut4vVuoEJhwImBJWJtZT5yUppVnk1Ks+cK0ttA44qoBAoGBAKxY +eDvxds8bKqG8OcPEQOiYhJ5iSgcw5y8lQnwMqKF0Lw63O2cNgZjYsx5w1J/w2E8p +wScyZnfjJb0SYkIA5+K+I2JX1ji0pcAwMkaw+HQs/IJSo+JIA08hJccg6LfmgLhh +chThOtUKEtXDzETX7BEUotyXEHyOFiwJovg/I8GlAoGBALKaEk1+zBXlqnZ4a2Mr +omaCR6dL2UydLqhaW3zTfnkHarx4K6LHDEZscyANyKXRikJdAuyqw0skMONjq1g6 +Ek8X3mAShBmlurTezjsUFsZq7QwUUZLqds+f/5plfgvOscDS6RQg6YZOtunpuXw8 +gbzvRh8eAvn58Bl1R8kMqVt5 +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC -- 2.39.5