v20210217 cleaned
authorKilian Saffran <ksaffran@dks.lu>
Wed, 17 Feb 2021 09:27:27 +0000 (10:27 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Wed, 17 Feb 2021 09:27:27 +0000 (10:27 +0100)
bin/fp.py [new file with mode: 0644]
bin/fp.sh [new file with mode: 0644]
bin/fpunload.sh [new file with mode: 0644]
bin/savewlan.sh [new file with mode: 0644]
bin/scanwlan.sh [new file with mode: 0644]
bin/startapp.sh [new file with mode: 0644]
desktopapp/js/lang.js [new file with mode: 0644]
vpn/DKS-VPN-ldin-hourtrax.ovpn [new file with mode: 0644]

diff --git a/bin/fp.py b/bin/fp.py
new file mode 100644 (file)
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 (file)
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 (file)
index 0000000..0aca85d
--- /dev/null
@@ -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 (file)
index 0000000..8c6ba01
--- /dev/null
@@ -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 (file)
index 0000000..cd26358
--- /dev/null
@@ -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 (file)
index 0000000..e1d16bd
--- /dev/null
@@ -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 (file)
index 0000000..79aaf67
--- /dev/null
@@ -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 (file)
index 0000000..bf06068
--- /dev/null
@@ -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
+<ca>
+-----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-----
+</ca>
+<cert>
+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-----
+</cert>
+<key>
+-----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-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC