# Installiert Cisco AnyConnect
# Quelle ist ..\bin
# 
# (c) tom-agplv3@jig.ch
# Dieses Software untersteht der AGPLv3 Lizenz: https://choosealicense.com/licenses/agpl-3.0/
# 
# Wichtig: Bitte beachte die Datei: Hinweis AGPLv3 Lizenz.txt
# 
# 
# 
# 001, 200730, tom-agplv3@jig.ch

[CmdletBinding(SupportsShouldProcess)]
Param (
	# Wird vom cmd genützt
	# 0  Keine Pause am Ende
	# 1  Pause am Ende
	# >1 Sleep am Ende
	[Int]$WaitOnEnd = 1
)


# Die Tools einbinden
. ("{0}\Tom-Tools.ps1" -f [IO.Path]::GetDirectoryName([IO.Path]::GetDirectoryName([IO.Path]::GetDirectoryName((Get-PSCallStack | select -ExpandProperty ScriptName)))))



## Config
$MSIExtrancedFiles_Dir = 'ExtractedMSIFiles'



# Elevate Script
# 200731: ExecutionPolicy übernehmen
# 200806
# 	NoExitElevatedSession
# 	PassParams
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
	$NoExitElevatedSession = $False
	$PassParams = $True
	# Relaunch as an elevated process
	If ($PassParams) {
		# Script-Parameter an die elevated Session weitergeben
		[String[]]$ScriptParams = $MyInvocation.BoundParameters.GetEnumerator() | 
			ForEach-Object {
				If ($_.Value -is [Switch]) { "-$($_.Key)" } Else { "-$($_.Key)", "$($_.Value)" }
			}
		$ScriptParams += $MyInvocation.UnboundArguments
	}

	# Die ExecutionPolicy übernehmen
	$MyExecutionPolicy = [String](Get-ExecutionPolicy)
	# Das Arbeitsverzeichnis übernehmen
	$WorkingDir = [IO.Path]::GetDirectoryName((Get-PSCallStack | select -ExpandProperty ScriptName))
	
	If ($NoExitElevatedSession) {
		[String[]]$PowerShellExeParams = @('-NoProfile', '-NoExit', "-ExecutionPolicy $MyExecutionPolicy", '-File', ('"{0}"' -f $MyInvocation.MyCommand.Path))
	} Else {
		[String[]]$PowerShellExeParams = @('-NoProfile', "-ExecutionPolicy $MyExecutionPolicy", '-File', ('"{0}"' -f $MyInvocation.MyCommand.Path))
	}

	$ArgumentList = $PowerShellExeParams + $ScriptParams
	# Die Datei signieren
	Start-Process -FilePath 'PowerShell.exe' -Verb RunAs -WorkingDirectory $WorkingDir -ArgumentList $ArgumentList
	Exit
}
# Now running elevated so launch the script:



# Löscht das ZielDir und extrahiert das MIS-Exe File
Function Extract-MSI-Files($ExeFile, $ZielDir) {
	# Verzeichnis löschen und alte Daten löschen
	If (Test-Path -LiteralPath $ZielDir -PathType Container) {
		$Res = Remove-Item -Recurse -Force -LiteralPath $ZielDir
	}
	# Verzeichnis erstellen
	$Res = New-Item -ItemType Directory -Force -Path $ZielDir
	
	# MSI extrahieren
	Start-Process -Wait -FilePath $ExeFile -ArgumentList "/extract `"$ZielDir`" "
}



## Main
$ScriptDir = Get-ScriptDir
$OnboardingScriptDir = [IO.Path]::GetDirectoryName( [IO.Path]::GetDirectoryName( $ScriptDir ) )


Log 0 '20-10 Platziere die PowerShell-Console' 
## Das PowerShell-Fenster links positionieren
# Die Applikationsfenster-Deltas genüber dem Bildschirm berechnen
$WindowDeltas = Calc-Process-Window-Deltas
Set-Window-LeftRight -WindowDeltas $WindowDeltas -ProcessID $PID -PositionLeft

Log 0 '20-20 Lösche die alten Zertifikate'
Remove-UserNosergroupLan-Certificates


# Ist vermutlich meist nicht nötig, 
# weil ab Schritt 20 bis zum fertigen onboarding kein Reboot gemacht wird,
# nach dem wieder ein Script gestartet werden muss
# 
# Log 0 '20-20 Konfiguriere RunOnce'
# Log 1 "Explorer: $OnboardingScriptDir"
# Set-RunOnce -HKCU -KeyName 'OpenScriptDir' -Command "C:\Windows\explorer.exe `"$OnboardingScriptDir`""


Log 0 '20-30 Extrahiere das Cisco Setup Exe'

Log 1 'Suche das Cisco Setup exe'
$CiscoSetupFile = Select-Anyconnect-CoreVpnPredeploy -Folder (Get-Bin-Dir) -PreferedVersion $AnyconnectCoreVpnPredeployPreferedVersion

Log 0 '20-40 Suche das Cisco MSI Setup File'
$CiscoSetupMSI = $null
Switch ([IO.Path]::GetExtension($CiscoSetupFile)) {
	.msi {
		# Wir haben das msi bereits
		$CiscoSetupMSI = $CiscoSetupFile
	}
	
	.exe {
		# Aus dem Exe die MSI-Daten extrahieren
		# Das Zielverzeichnis, in das die MSI-Files kopiert werden
		$MSIExtrancedFiles_Dir = Join-Path $ScriptDir $MSIExtrancedFiles_Dir
		If ([String]::IsNullOrEmpty($CiscoSetupFile)) {
			Log 4 "Cisco Exe-Datei nicht gefunden in:`n$($ScriptDir)" -ForegroundColor Red
			Log 4 'Press any key to continue …'
			try { $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } catch {}
			Break Script
		} Else {
			Log 1 'Extrahiere das MSI-Exe'
			Extract-MSI-Files $CiscoSetupFile $MSIExtrancedFiles_Dir
		}
		# Das MSI Setup exe suchen
		$CiscoSetupMSI = Get-ChildItem -LiteralPath $MSIExtrancedFiles_Dir -Filter '*.msi' -Recurse | Select -First 1 -ExpandProperty FullName
	}
}


If ([String]::IsNullOrEmpty($CiscoSetupMSI)) {
	Log 4 "Cisco MSI-Datei nicht gefunden in:`n$($MSIExtrancedFiles_Dir)" -ForegroundColor Red
	Log 4 'Press any key to continue …'
	try { $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } catch {}
	Break Script
}


Log 0 '20-50 Installiere Cisco AnyConnect'
Start-Process -Wait -FilePath 'C:\Windows\system32\msiexec.exe' -ArgumentList @('/i', " `"$CiscoSetupMSI`"", '/passive')
Log 1 'Fertig.'


Switch ($WaitOnEnd) {
	0 {
		# Nichts zu tun, Script beenden
	}
	1 {
		# Pause
		Log 0 'Press any key to continue …'
		Try { $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } Catch {}
	}
	Default {
		# Start-Sleep -Seconds $WaitOnEnd
		Show-Countdown $WaitOnEnd
	}
}

# SIG # Begin signature block
# MIImxAYJKoZIhvcNAQcCoIImtTCCJrECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUwTie67v8Siiteba4tVUz+510
# qBqggh/VMIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B
# AQwFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVy
# MRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEh
# MB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAw
# MFoXDTI4MTIzMTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp
# Z28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n
# IFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeUEiIE
# JHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR41KKteKW3tCHYySJiv/vEpM7
# fbu2ir29BX8nm2tl06UMabG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr
# YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQxafptszSswXp43JJQ8mTH
# qi0Eq8Nq6uAvp6fcbtfo/9ohq0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv
# 64IplXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9lpwRrGNhx+swI8m2J
# mRCxrds+LOSqGLDGBwF1Z95t6WNjHjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0P
# OM1nqFOI+rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaCZEao9XOwBpXy
# bGWfv1VbHJxXGsd4RnxwqpQbghesh+m2yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyhe
# Be6QTHrnxvTQ/PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg80EY2NXyc
# uu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrFfwGcELEW/MxuGNxvYv6mUKe4e7id
# FT/+IAx1yCJaE5UZkADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1UdIwQY
# MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQy65Ka/zWWSC8oQEJw
# IDaRXBeF5jAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE
# DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEMGA1Ud
# HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmlj
# YXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0
# cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3Sa
# mES4aUa1qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiueTtTzbT72ES+
# BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0RQGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8
# ZsBRNraJAlTH/Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4CnvYFIUoQx
# 2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2JXfBjRkWxYhMZn0vY86Y6GnfrDyo
# XZ3JHFuu2PMvdM+4fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzsJA8p
# 1FiAhORFe1rYMIIGGjCCBAKgAwIBAgIQYh1tDFIBnjuQeRUgiSEcCjANBgkqhkiG
# 9w0BAQwFADBWMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk
# MS0wKwYDVQQDEyRTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYw
# HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBUMQswCQYDVQQGEwJHQjEY
# MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1Ymxp
# YyBDb2RlIFNpZ25pbmcgQ0EgUjM2MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
# igKCAYEAmyudU/o1P45gBkNqwM/1f/bIU1MYyM7TbH78WAeVF3llMwsRHgBGRmxD
# eEDIArCS2VCoVk4Y/8j6stIkmYV5Gej4NgNjVQ4BYoDjGMwdjioXan1hlaGFt4Wk
# 9vT0k2oWJMJjL9G//N523hAm4jF4UjrW2pvv9+hdPX8tbbAfI3v0VdJiJPFy/7Xw
# iunD7mBxNtecM6ytIdUlh08T2z7mJEXZD9OWcJkZk5wDuf2q52PN43jc4T9OkoXZ
# 0arWZVeffvMr/iiIROSCzKoDmWABDRzV/UiQ5vqsaeFaqQdzFf4ed8peNWh1OaZX
# nYvZQgWx/SXiJDRSAolRzZEZquE6cbcH747FHncs/Kzcn0Ccv2jrOW+LPmnOyB+t
# AfiWu01TPhCr9VrkxsHC5qFNxaThTG5j4/Kc+ODD2dX/fmBECELcvzUHf9shoFvr
# n35XGf2RPaNTO2uSZ6n9otv7jElspkfK9qEATHZcodp+R4q2OIypxR//YEb3fkDn
# 3UayWW9bAgMBAAGjggFkMIIBYDAfBgNVHSMEGDAWgBQy65Ka/zWWSC8oQEJwIDaR
# XBeF5jAdBgNVHQ4EFgQUDyrLIIcouOxvSK4rVKYpqhekzQwwDgYDVR0PAQH/BAQD
# AgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwGwYD
# VR0gBBQwEjAGBgRVHSAAMAgGBmeBDAEEATBLBgNVHR8ERDBCMECgPqA8hjpodHRw
# Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RS
# NDYuY3JsMHsGCCsGAQUFBwEBBG8wbTBGBggrBgEFBQcwAoY6aHR0cDovL2NydC5z
# ZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdSb290UjQ2LnA3YzAj
# BggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEM
# BQADggIBAAb/guF3YzZue6EVIJsT/wT+mHVEYcNWlXHRkT+FoetAQLHI1uBy/YXK
# ZDk8+Y1LoNqHrp22AKMGxQtgCivnDHFyAQ9GXTmlk7MjcgQbDCx6mn7yIawsppWk
# vfPkKaAQsiqaT9DnMWBHVNIabGqgQSGTrQWo43MOfsPynhbz2Hyxf5XWKZpRvr3d
# MapandPfYgoZ8iDL2OR3sYztgJrbG6VZ9DoTXFm1g0Rf97Aaen1l4c+w3DC+IkwF
# kvjFV3jS49ZSc4lShKK6BrPTJYs4NG1DGzmpToTnwoqZ8fAmi2XlZnuchC4NPSZa
# PATHvNIzt+z1PHo35D/f7j2pO1S8BCysQDHCbM5Mnomnq5aYcKCsdbh0czchOm8b
# kinLrYrKpii+Tk7pwL7TjRKLXkomm5D1Umds++pip8wH2cQpf93at3VDcOK4N7Ew
# oIJB0kak6pSzEu4I64U6gZs7tS/dGNSljf2OSSnRr7KWzq03zl8l75jy+hOds9TW
# SenLbjBQUGR96cFr6lEUfAIEHVC1L68Y1GGxx4/eRI82ut83axHMViw1+sVpbPxg
# 51Tbnio1lB93079WPFnYaOvfGAA0e0zcfF/M9gXr+korwQTh2Prqooq2bYNMvUoU
# KD85gnJ+t0smrWrb8dee2CvYZXD5laGtaAxOfy/VKNmwuWuAh9kcMIIGVzCCBL+g
# AwIBAgIRAJerP2s13dPOpevRLwsJhzgwDQYJKoZIhvcNAQEMBQAwVDELMAkGA1UE
# BhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDErMCkGA1UEAxMiU2VjdGln
# byBQdWJsaWMgQ29kZSBTaWduaW5nIENBIFIzNjAeFw0yMjAyMjIwMDAwMDBaFw0y
# NTAyMjEyMzU5NTlaMEIxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIDARCZXJuMREwDwYD
# VQQKDAhBS1JPUyBBRzERMA8GA1UEAwwIQUtST1MgQUcwggIiMA0GCSqGSIb3DQEB
# AQUAA4ICDwAwggIKAoICAQCpEHaWk6un+cfauC+UdCaWrIgc5OZFQIVVqo+wXffW
# GxD1tltMGe4tOmB2Vt+zCQl2pzJ0NZgMtO8a39023XuM0iPbp0o3OjEsWbqP4o2I
# HlJq5vhgn2cJpVDo16bwmbLywtnyNr9V2MRIh+Bil2/BeMPq+F9VHfiDaq6l0w5M
# BkOiNDSqNda+B79ShSoYcsGsYvLQfhFF5Pyh6a46SCtp/1AIaRVw3jnNJtocunCF
# ni7kb1UJP2Q16TEPo3lCxicyZWK0nof+o9KDmUOC84Tj6eat6dodXsW4vyOhoEYZ
# N2CprNBq7Q5crwWOTKNwz3+vNEOmlQlCqSIlrIKOFzBzDp3U2o9to+I8A9rsqY63
# BDrJFVq5KKe2DBRYwBZ5e7B9+MqS0Ug930xZBSDHQQ3DvvOEQgF7fKRQt1/X1g8T
# GO37MmN6sHd31OeM1kbx8lMM4f+DqegGD7IB6N8wKgnOazelyQXni38APNi/fpFA
# xixsFldvmI4Z8QoYqXsEiLDD05JKhUqpgITpRd8gLUiBuzOWs58FEXhx3X1C37iT
# TgyhBP7v4PUWWqe8KWukSPImE4J7y+1cJ7GqOPSLwkLgTuNm/Ko7wJyWfD4/LPNb
# O0a9YEHUTqbHoKIy55sIl7cmaaia5uz1Uzr3hzSVoVu1TwJl9qHdTQOM8/YnG7wQ
# 5wIDAQABo4IBtDCCAbAwHwYDVR0jBBgwFoAUDyrLIIcouOxvSK4rVKYpqhekzQww
# HQYDVR0OBBYEFBm6ziTh2H5Wi50vwBGP3n71Vh8FMA4GA1UdDwEB/wQEAwIHgDAM
# BgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMBEGCWCGSAGG+EIBAQQE
# AwIEEDBKBgNVHSAEQzBBMDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUFBwIBFhdo
# dHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBBAEwSQYDVR0fBEIwQDA+oDyg
# OoY4aHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25p
# bmdDQVIzNi5jcmwweQYIKwYBBQUHAQEEbTBrMEQGCCsGAQUFBzAChjhodHRwOi8v
# Y3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2LmNy
# dDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wFgYDVR0RBA8w
# DYELaXRAYWtyb3MuY2gwDQYJKoZIhvcNAQEMBQADggGBAFGyk9DeEOqnhYFNzxZ7
# HrS40+MelZjeyazVlzG5NfBIzxse6fpiP9C6f0zL//HrrjSkl9UyFNmn+5TfL/kw
# N40hogdDkna7DrsKxLQ1viBFLdJBxjg8Nz0KVgtcbUpi1Qj3H6UI4skLdUSir1iE
# oSR+QGkNzSJSrn2k8jijSMOYldbngzG+D9PzSNp/CjBCA1bTOBepuHVQQCl/5rY1
# bygvNL7Zua/Ca6iuxnAsJOisw9IkngKi3iznXTHQep0ytOOOvZhr3IRkOccy/cyz
# 9KA1jv68aKCsLiGpyUKCg8WqmwzLXCUfqxvouhrHr1yAYn2qHRRoQhiIw8TgghlE
# +PA9qKY6KIlmilX7VejuFScmrBQVkP0OuxLTufXIahY2jnPQfrJLz0U+fUL1YgHa
# 1oi+1rOZ/Z0iX2YXa1rDmrXueN8QNOtZuBEKBKUNSSq8hhH4rk2j7dVcYm1gljkd
# CR8vwGRBoj9oMJgehkTdMU9GAGu9Ny9COnT/J9mRc323HzCCBuwwggTUoAMCAQIC
# EDAPb6zdZph0fKlGNqd4LbkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVT
# MRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwG
# A1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3Qg
# UlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE5MDUwMjAwMDAwMFoXDTM4
# MDExODIzNTk1OVowfTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFu
# Y2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1p
# dGVkMSUwIwYDVQQDExxTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5nIENBMIICIjAN
# BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyBsBr9ksfoiZfQGYPyCQvZyAIVST
# uc+gPlPvs1rAdtYaBKXOR4O168TMSTTL80VlufmnZBYmCfvVMlJ5LsljwhObtoY/
# AQWSZm8hq9VxEHmH9EYqzcRaydvXXUlNclYP3MnjU5g6Kh78zlhJ07/zObu5pCNC
# rNAVw3+eolzXOPEWsnDTo8Tfs8VyrC4Kd/wNlFK3/B+VcyQ9ASi8Dw1Ps5EBjm6d
# J3VV0Rc7NCF7lwGUr3+Az9ERCleEyX9W4L1GnIK+lJ2/tCCwYH64TfUNP9vQ6oWM
# ilZx0S2UTMiMPNMUopy9Jv/TUyDHYGmbWApU9AXn/TGs+ciFF8e4KRmkKS9G493b
# kV+fPzY+DjBnK0a3Na+WvtpMYMyou58NFNQYxDCYdIIhz2JWtSFzEh79qsoIWId3
# pBXrGVX/0DlULSbuRRo6b83XhPDX8CjFT2SDAtT74t7xvAIo9G3aJ4oG0paH3uhr
# DvBbfel2aZMgHEqXLHcZK5OVmJyXnuuOwXhWxkQl3wYSmgYtnwNe/YOiU2fKsfqN
# oWTJiJJZy6hGwMnypv99V9sSdvqKQSTUG/xypRSi1K1DHKRJi0E5FAMeKfobpSKu
# pcNNgtCN2mu32/cYQFdz8HGj+0p9RTbB942C+rnJDVOAffq2OVgy728YUInXT50z
# vRq1naHelUF6p4MCAwEAAaOCAVowggFWMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh
# 2JvAnfKyA2bLMB0GA1UdDgQWBBQaofhhGSAPw0F3RSiO0TVfBhIEVTAOBgNVHQ8B
# Af8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNVHSUEDDAKBggrBgEFBQcD
# CDARBgNVHSAECjAIMAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2Ny
# bC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3Jp
# dHkuY3JsMHYGCCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51
# c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUF
# BzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4IC
# AQBtVIGlM10W4bVTgZF13wN6MgstJYQRsrDbKn0qBfW8Oyf0WqC5SVmQKWxhy7VQ
# 2+J9+Z8A70DDrdPi5Fb5WEHP8ULlEH3/sHQfj8ZcCfkzXuqgHCZYXPO0EQ/V1cPi
# vNVYeL9IduFEZ22PsEMQD43k+ThivxMBxYWjTMXMslMwlaTW9JZWCLjNXH8Blr5y
# Umo7Qjd8Fng5k5OUm7Hcsm1BbWfNyW+QPX9FcsEbI9bCVYRm5LPFZgb289ZLXq2j
# K0KKIZL+qG9aJXBigXNjXqC72NzXStM9r4MGOBIdJIct5PwC1j53BLwENrXnd8uc
# Lo0jGLmjwkcd8F3WoXNXBWiap8k3ZR2+6rzYQoNDBaWLpgn/0aGUpk6qPQn1BWy3
# 0mRa2Coiwkud8TleTN5IPZs0lpoJX47997FSkc4/ifYcobWpdR9xv1tDXWU9UIFu
# q/DQ0/yysx+2mZYm9Dx5i1xkzM3uJ5rloMAMcofBbk1a0x7q8ETmMm8c6xdOlMN4
# ZSA7D0GqH+mhQZ3+sbigZSo04N6o+TzmwTC7wKBjLPxcFgCo0MR/6hGdHgbGpm0y
# XbQ4CStJB6r97DDa8acvz7f9+tCjhNknnvsBZne5VhDhIG7GrrH5trrINV0zdo7x
# fCAMKneutaIChrop7rRaALGMq+P5CslUXdS5anSevUiumDCCBvUwggTdoAMCAQIC
# EDlMJeF8oG0nqGXiO9kdItQwDQYJKoZIhvcNAQEMBQAwfTELMAkGA1UEBhMCR0Ix
# GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEY
# MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSUwIwYDVQQDExxTZWN0aWdvIFJTQSBU
# aW1lIFN0YW1waW5nIENBMB4XDTIzMDUwMzAwMDAwMFoXDTM0MDgwMjIzNTk1OVow
# ajELMAkGA1UEBhMCR0IxEzARBgNVBAgTCk1hbmNoZXN0ZXIxGDAWBgNVBAoTD1Nl
# Y3RpZ28gTGltaXRlZDEsMCoGA1UEAwwjU2VjdGlnbyBSU0EgVGltZSBTdGFtcGlu
# ZyBTaWduZXIgIzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCkkyhS
# S88nh3akKRyZOMDnDtTRHOxoywFk5IrNd7BxZYK8n/yLu7uVmPslEY5aiAlmERRY
# sroiW+b2MvFdLcB6og7g4FZk7aHlgSByIGRBbMfDCPrzfV3vIZrCftcsw7oRmB78
# 0yAIQrNfv3+IWDKrMLPYjHqWShkTXKz856vpHBYusLA4lUrPhVCrZwMlobs46Q9v
# qVqakSgTNbkf8z3hJMhrsZnoDe+7TeU9jFQDkdD8Lc9VMzh6CRwH0SLgY4anvv3S
# g3MSFJuaTAlGvTS84UtQe3LgW/0Zux88ahl7brstRCq+PEzMrIoEk8ZXhqBzNiuB
# l/obm36Ih9hSeYn+bnc317tQn/oYJU8T8l58qbEgWimro0KHd+D0TAJI3VilU6aj
# oO0ZlmUVKcXtMzAl5paDgZr2YGaQWAeAzUJ1rPu0kdDF3QFAaraoEO72jXq3nnWv
# 06VLGKEMn1ewXiVHkXTNdRLRnG/kXg2b7HUm7v7T9ZIvUoXo2kRRKqLMAMqHZkOj
# GwDvorWWnWKtJwvyG0rJw5RCN4gghKiHrsO6I3J7+FTv+GsnsIX1p0OF2Cs5dNta
# dwLRpPr1zZw9zB+uUdB7bNgdLRFCU3F0wuU1qi1SEtklz/DT0JFDEtcyfZhs43dB
# yP8fJFTvbq3GPlV78VyHOmTxYEsFT++5L+wJEwIDAQABo4IBgjCCAX4wHwYDVR0j
# BBgwFoAUGqH4YRkgD8NBd0UojtE1XwYSBFUwHQYDVR0OBBYEFAMPMciRKpO9Y/PR
# XU2kNA/SlQEYMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB
# /wQMMAoGCCsGAQUFBwMIMEoGA1UdIARDMEEwNQYMKwYBBAGyMQECAQMIMCUwIwYI
# KwYBBQUHAgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEAjBEBgNV
# HR8EPTA7MDmgN6A1hjNodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29SU0FU
# aW1lU3RhbXBpbmdDQS5jcmwwdAYIKwYBBQUHAQEEaDBmMD8GCCsGAQUFBzAChjNo
# dHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29SU0FUaW1lU3RhbXBpbmdDQS5j
# cnQwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29tMA0GCSqGSIb3
# DQEBDAUAA4ICAQBMm2VY+uB5z+8VwzJt3jOR63dY4uu9y0o8dd5+lG3DIscEld9l
# aWETDPYMnvWJIF7Bh8cDJMrHpfAm3/j4MWUN4OttUVemjIRSCEYcKsLe8tqKRfO+
# 9/YuxH7t+O1ov3pWSOlh5Zo5d7y+upFkiHX/XYUWNCfSKcv/7S3a/76TDOxtog3M
# w/FuvSGRGiMAUq2X1GJ4KoR5qNc9rCGPcMMkeTqX8Q2jo1tT2KsAulj7NYBPXyhx
# bBlewoNykK7gxtjymfvqtJJlfAd8NUQdrVgYa2L73mzECqls0yFGcNwvjXVMI8JB
# 0HqWO8NL3c2SJnR2XDegmiSeTl9O048P5RNPWURlS0Nkz0j4Z2e5Tb/MDbE6MNCh
# PUitemXk7N/gAfCzKko5rMGk+al9NdAyQKCxGSoYIbLIfQVxGksnNqrgmByDdefH
# fkuEQ81D+5CXdioSrEDBcFuZCkD6gG2UYXvIbrnIZ2ckXFCNASDeB/cB1PguEc2d
# g+X4yiUcRD0n5bCGRyoLG4R2fXtoT4239xO07aAt7nMP2RC6nZksfNd1H48QxJTm
# fiTllUqIjCfWhWYd+a5kdpHoSP7IVQrtKcMf3jimwBT7Mj34qYNiNsjDvgCHHKv6
# SkIciQPc9Vx8cNldeE7un14g5glqfCsIo0j1FfwET9/NIRx65fWOGtS5QDGCBlkw
# ggZVAgEBMGkwVDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRl
# ZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5nIENBIFIzNgIR
# AJerP2s13dPOpevRLwsJhzgwCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAI
# oAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIB
# CzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFBmf2Xs8yIS1anJxjdA+
# OrFK6zW/MA0GCSqGSIb3DQEBAQUABIICAJ5+OykelUj4GRYTjvFQzt+d+cb9nTqQ
# egljEgIGXAJcL8r32KH6ApcRPGTBinZOJWb9DUa2AlPUlLRNej37zIfCdjNJi9mz
# bcje2vL+8JdhmLei+CvBbTD/fB/hSwz0VjoU7/3Fw0hsKeG5kq8554ARFW6DAsbe
# kJUlxXGe8qO/dgd1r2ej1OZOfNyEhD7xF48m0+MErEaqnEABbYh2eR4WBA1pt7AX
# R1/HszEF+ioXpD7pr4VGo6+Rwu2RKbHL98/71J9OU9XNtjg+myOcmJ+AveEV51L8
# y0A8SwwptMjwvMJFoxjyuqBdXqSUqaERjhzPSV3JCKf7h6OV8tH3aHMsuGlc6yAO
# LydVyudvu6IRrdN3kKNzOzJDebTaIaiW2K6WAu2xkNgcptEKULTBgstNgeAduvGz
# qg6/ul5jMz0qWzM3WiI5TZTRZfUcHeTwgfd6I35XzSDa8MrODx0Dzxaubs5f2XJl
# NwoxYRyuhO7uu5PGXEIRPWn3wOuhErD60mjS5Y0fw7FfiNg9Grr2rd2ehhn3TuTq
# inXXflF3Vgc0i0AT+R108ghu05PdSxZUnHOIs5/AebdhP3eQ5yR9IuACDdHUbBf/
# vB5AH2p3X/NwgVkF5vVfEx3U5YLVbWWCxIN1oLwkM0FygocWz3S+7o3cVO9svmuv
# Zlumfzk4W+O7oYIDSzCCA0cGCSqGSIb3DQEJBjGCAzgwggM0AgEBMIGRMH0xCzAJ
# BgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcT
# B1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UEAxMcU2Vj
# dGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQQIQOUwl4XygbSeoZeI72R0i1DANBglg
# hkgBZQMEAgIFAKB5MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcN
# AQkFMQ8XDTIzMDcwMzA4MDgxMFowPwYJKoZIhvcNAQkEMTIEMKIHgImlE85dsbAz
# 6NvfkKiBgGEceGWaFOBK5KJLTH+9Nys69b1ccLQhmnOBYcxzfjANBgkqhkiG9w0B
# AQEFAASCAgAsZUq0f3/pYm0H3tH+PWG05KpbdMi3OZRjMF0/zjb+RWkh7q+D8RB/
# j66cFzycEg753rRo68IGO1cSY1a225BLXGcBZ8iHhNgn61wMvJZ99cVFyIbyF1V8
# u0njl/iNw8A8zaO+/IB0tVikUgDbHselCX60Zw5aU7D92GllQvlBWvF/LQl+mnd2
# uKx9eAh9xKV0/2fpieSp7asDcIWrQ3nl+ddGl1OqMFNXZcJ6mcJsTiw5u/CU0w5V
# ui+1CqFPlhlG1MWP1d75QGDZ8GIEdSavC6FODRSP6qoMMmTukQa87ikZQFmvLk+n
# L9MyBY+6Zjcz7ySbreiQyjDgE/WgUjiJfe0drhu3XFoLR8HFrM1XWbvR6J8f1oaX
# v6hN+nfh1/zgK6ytegtALctOt30a0RtBTCdV6q7JyjjORYE1X3h3ygYpX83+crCw
# vdkv8hVBYJCKWm9zJxedW5+1ztaHetVHLg+/t6wOe7ROAqYXAIIh+M72fC0V0PWV
# 07SKoHo3uYdZcZW3Yd1YaNR04b/xBcgfeskieCdx1HKuz7XwtsMITAkUi5khmZQ1
# bt5CCJZVadfhlvcSz5tdEssOmwsy5osBJjNiUJZwskBnmZcrF/KQRO+T/w1UyoOw
# 4ngJV0RVlAP3SoZdfKIq5tkPRo0viS1qa0YmdtEMev/8Et/+as1KCw==
# SIG # End signature block
