eDosStation/scripts/Upgrader.ps1
luc e4004ddd78 new reader3.dll
Diagnostics testdetector
2026-10-06 15:12:54 +02:00

366 lines
20 KiB
PowerShell

echo "start Powershell as admin"
Set-ExecutionPolicy -ExecutionPolicy unrestricted
function Test-AndInstallVcRedistX86 {
[CmdletBinding()]
param(
[string]$MinVersion = "14.51.36247",
[string]$InstallerPath = (Join-Path -Path $PSScriptRoot -ChildPath "vc_redist.x86.exe")
)
$minVerObj = [Version]$MinVersion
$isInstalled = $false
$installedVerStr = ""
# Path 1: Check official Microsoft Visual Studio Runtime registry key (Most Reliable)
$vcRegPath = "HKLM:\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86"
if (Test-Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86") {
$vcRegPath = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86"
}
if (Test-Path $vcRegPath) {
$regProps = Get-ItemProperty -Path $vcRegPath -ErrorAction SilentlyContinue
if ($regProps.Installed -eq 1) {
$major = $regProps.Major
$minor = $regProps.Minor
$bld = $regProps.Bld
$rbld = if ($regProps.Rbld) { $regProps.Rbld } else { 0 }
if ($major -and $minor -and $bld) {
$installedVerObj = [Version]"$major.$minor.$bld.$rbld"
$installedVerStr = $installedVerObj.ToString()
if ($installedVerObj -ge $minVerObj) {
$isInstalled = $true
}
}
}
}
# Path 2: Fallback check in Uninstall keys (Updated for "v14" naming)
if (-not $isInstalled) {
$uninstallPaths = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
foreach ($path in $uninstallPaths) {
$found = Get-ItemProperty -Path $path -ErrorAction SilentlyContinue | Where-Object {
($_.DisplayName -like "*Visual C++*" -or $_.DisplayName -like "*vc_redist*") -and
($_.DisplayName -like "*(x86)*") -and
($_.DisplayName -like "*2015*" -or $_.DisplayName -like "*2022*" -or $_.DisplayName -like "*v14*")
}
foreach ($item in $found) {
if ($item.DisplayVersion) {
$cleanVer = $item.DisplayVersion -replace '[^\d\.]', ''
try {
$parsedVer = [Version]$cleanVer
if ($parsedVer -ge $minVerObj) {
$isInstalled = $true
$installedVerStr = $item.DisplayVersion
break
}
} catch {}
}
}
if ($isInstalled) { break }
}
}
if ($isInstalled) {
Write-Host "[OK] VC++ Redistributable (x86) v$installedVerStr is already installed." -ForegroundColor Green
return $true
}
# 2. Install if missing or outdated
Write-Host "[!] VC++ Redistributable (x86) v$MinVersion+ is missing." -ForegroundColor Yellow
if (-not (Test-Path $InstallerPath)) {
Write-Error "Installer not found at '$InstallerPath'."
return $false
}
Write-Host "[+] Installing VC++ Redistributable (x86)..." -ForegroundColor Cyan
$process = Start-Process -FilePath $InstallerPath -ArgumentList "/install", "/quiet", "/norestart" -Wait -PassThru
if ($process.ExitCode -eq 0 -or $process.ExitCode -eq 3010) {
Write-Host "[OK] VC++ Redistributable installed successfully." -ForegroundColor Green
return $true
} else {
Write-Warning "VC++ Redistributable installation failed (Exit Code: $($process.ExitCode))."
return $false
}
}
echo Stop edossync
$psync="C:\Program Files\eDos\synceDosLocal"
$taskname="eDosSync"
$t = Get-ScheduledTask -TaskName $taskname -ea ignore
Stop-ScheduledTask -TaskName $taskname
# ==============================================================================
# Upgrade Script Main Section
# ==============================================================================
Write-Host "Starting Kiosk Station Upgrade..." -ForegroundColor Cyan
# Check / Install VC++ Runtime
Test-AndInstallVcRedistX86
# Proceed with your app upgrade steps...
Write-Host "Updating application files..."
$scriptPath = "c:\software\GetEdosStationZip.ps1"
# 1. Check if the generator script exists
if (-not (Test-Path -Path $scriptPath)) {
Write-Error "ALERT: Script missing at '$scriptPath'!"
exit 1
}
# 2. Execute the script to get the zip path/filename
$zip = & $scriptPath
# 3. Check if $zip is empty, null, or whitespace
if ([string]::IsNullOrWhiteSpace($zip)) {
Write-Error "ALERT: GetEdosStationZip.ps1 returned no value!"
exit 1
}
Write-Host "Copy soft"
Expand-Archive -Force c:\software\$zip "c:\program files\edos\edosStation"
Expand-Archive -Force c:\software\eDosSync.zip "c:\program files\edos\synceDosLocal"
echo Sql Updates
start-process -wait -workingdirectory "c:\software" -filepath "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\sqlcmd.exe" -argumentlist "-i c:\software\Updates.sql" -passthru
start-process -wait -workingdirectory "c:\software" -filepath "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\sqlcmd.exe" -argumentlist "-i c:\software\UpdateLocal.sql" -passthru
. "$PSScriptRoot\UpdateSql.ps1"
Write-Host "Other script finished! Continuing main script..." -ForegroundColor Green
echo Certificate
Import-Certificate -FilePath "c:\software\sckca.cer" -CertStoreLocation Cert:\LocalMachine\Root
Import-Certificate -FilePath "c:\software\ictinteremediate.cer" -CertStoreLocation Cert:\LocalMachine\Ca
Import-Certificate -FilePath "c:\software\signertrust.cer" -CertStoreLocation Cert:\LocalMachine\TrustedPublisher
$SourcePath = "C:\software\OfflineModules"
if (Test-Path -Path $SourcePath) {
Write-Host "Bronmap gevonden, kopiëren start..." -ForegroundColor Green
Copy-Item -Path "$SourcePath\*" -Destination "$env:ProgramFiles\WindowsPowerShell\Modules" -Recurse -Force
} else {
Write-Warning "Fout: De map $SourcePath bestaat niet!"
}
Start-ScheduledTask -TaskName $taskname
New-Item -Path "C:\software\OfflineModules" -ItemType Directory -Force | Out-Null
exit
# SIG # Begin signature block
# MIIlPAYJKoZIhvcNAQcCoIIlLTCCJSkCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU1L2UXczKE4y7wJgE9evMVuOj
# 62Sggh9wMIIFjTCCBHWgAwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0B
# AQwFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk
# IElEIFJvb3QgQ0EwHhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQsw
# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
# ZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQw
# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz
# 7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS
# 5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7
# bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfI
# SKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jH
# trHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14
# Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2
# h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt
# 6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPR
# iQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ER
# ElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4K
# Jpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAd
# BgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SS
# y4IxLVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAC
# hjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURS
# b290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0
# LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRV
# HSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyh
# hyzshV6pGrsi+IcaaVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO
# 0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo
# 8L8vC6bp8jQ87PcDx4eo0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++h
# UD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5x
# aiNrIv8SuFQtJ37YOtnwtoeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMIIFvDCCA6Sg
# AwIBAgIBHzANBgkqhkiG9w0BAQsFADBmMQswCQYDVQQGEwJCRTESMBAGA1UECBMJ
# QW50d2VycGVuMQwwCgYDVQQHEwNNb2wxDzANBgNVBAoTBlNDS0NFTjEMMAoGA1UE
# CxMDSUNUMRYwFAYDVQQDEw1TQ0tDRU4gSUNUIENBMB4XDTE4MDUyNDA2MTEwMFoX
# DTMwMDYwMTEyMDAwMFowTzEhMB8GA1UEAxMYVmFuZGVuYnJvdWNrZSBMdWMgQ1My
# MDIxMSowKAYJKoZIhvcNAQkBFhtsdWMudmFuZGVuYnJvdWNrZUBzY2tjZW4uYmUw
# ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD0WzD0gHTLFEbOjPUwobl2
# VntS0kJVV2FRzxkZZ0Hhe9fbYB0tRK5+9GltD7rwhApM1E2xh8N6Pmxfr49VGVsP
# NqDhGRmp5wKE8htQiMXTjHPOTHZsvim/vvSL8WuouGoX6TQxxNBefE6Jmjcg2NHb
# UVAxDGcPwNADJBZnYPQTp6q2HniwdDv/OmZM1JJUYn4v1mt7YtS1eFO30ekuGzJu
# 3WQYeOiFNht/6AXZTWALQtwzaJfm563AbxfnHBsBuZFcRGYPE7aRDI9NIZyPqzT4
# yOAK+phPN1ympNV+f8XXWaacfZXSWolbo8jqstHDjYYjf77Fj3WVN+y0GxtTsnRl
# AgMBAAGjggGKMIIBhjAJBgNVHRMEAjAAMB0GA1UdDgQWBBTftWyIS4unlpS288p5
# Xofe0LiBZTAfBgNVHSMEGDAWgBTwKRT1aiEUklZUE6Q91a3wITrFeDALBgNVHQ8E
# BAMCB4AwHwYDVR0lBBgwFgYIKwYBBQUHAwMGCisGAQQBgjcCARUwOgYDVR0RBDMw
# MYEbbHVjLnZhbmRlbmJyb3Vja2VAc2NrY2VuLmJlgRJsdmFuZGVuYkBzY2tjZW4u
# YmUwNQYDVR0SBC4wLIYqaHR0cDovL2NybC5zY2tjZW4uYmUvU0NLQ0VOJTIwSUNU
# JTIwQ0EuY3J0MDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6Ly9jcmwuc2NrY2VuLmJl
# L1NDS0NFTiUyMElDVCUyMENBLmNybDA+BgkrBgEEAYI3FQcEMTAvBicrBgEEAYI3
# FQiEjLwhgsj9d4KhkyKEl5RGhMaSLoEBgtSEIYH6yGkCAWQCAQgwGwYJKwYBBAGC
# NxUKBA4wDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQsFAAOCAgEARh/O37vbDW3A
# j1UAnSfYz+I0+fVk2ZurOQarjtdFC/Yu1ABJnXdMnwh1t5sjVIoEejvjnOlmu+B2
# 1IQJPpxIph8cz+SnDZyhOpcKrCDn+PSeRvth0Zk4FvbXsLK9/WYgdzRObNOHxxAN
# COOc7PMLIMqeDJa+b9wH82Ae4MYdB8XZvoqJ+z172yoQMiNxe6UE2GropZiwJB56
# Fw+k/jrKdOMEfZtfhzRqizCmMlTknbtFJ5hrqhwcaTA+4QCfCwouckererOATQnM
# 8Ic1KaOmYK7S5igmnA5mekiTKrBhcGp/xsZy0r8OUKVV1FSYnQ3035THia31oQzh
# Le48faEFkNuPbs8ZaiTFXwbdWGQ6uIK++soyulWOxeueNBAqIOGrj7XuDaIk+VD3
# RN0B0g//Nv3HS6FboRC0eKeG3yezzjU+8fImcyPAaAEofUiiQYdOpnJsiaLDpHO+
# 1r98pKmpe0fvy0IvYHicJLuk4tFyMvVBRgW1A+JtfHuXCnag88iB8AJ3tCUdGRCC
# z8yE1r4hbklyqhj9G5EmxoKZfi7mgh3CgL/tRUAXNqFltMj3cQlGKcKPUH004dKm
# FwAUAG4mzsO1Sk50S7EvdpvaW+sJ/bWMjXzLuq+xFwrsSTQ22KSm8XmnX2NGqws5
# Tk+pqQupcwan4CsjflVqMva5nc4YxI4wggZyMIIEWqADAgECAhM4AAAAAm7pDq12
# AeXXAAAAAAACMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNVBAYTAkJFMRIwEAYDVQQI
# EwlBbnR3ZXJwZW4xDDAKBgNVBAcTA01vbDEPMA0GA1UEChMGU0NLQ0VOMQwwCgYD
# VQQLEwNJQ1QxFzAVBgNVBAMTDlNDS0NFTiBSb290IENBMB4XDTE3MDYyMzExMzkz
# NFoXDTMyMDYyMzExNDkzNFowZjELMAkGA1UEBhMCQkUxEjAQBgNVBAgTCUFudHdl
# cnBlbjEMMAoGA1UEBxMDTW9sMQ8wDQYDVQQKEwZTQ0tDRU4xDDAKBgNVBAsTA0lD
# VDEWMBQGA1UEAxMNU0NLQ0VOIElDVCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBALFtbifIAikMI3YQIa+niSTV8PsH34uadkQePLs02kIdmPPT/u+T
# RYZO6njltLVcGnMWJLmzL4DamrAPUbJcpkRLMS35aDAonUT0kI/KNChNnHy2KI2K
# 3tUwoRcXND2aG4m2ewU7FNr++RkI57BBDJsc8CSwI0lNphVSiSo6yrOF7f6uo98N
# H3a0c9G2vM0jG0xztivAndUatxkAyz8rYScg8c6OmERO0xThXFxqyKRV75stVz3P
# yLYh8E6HDpkNZrBfuOltIH1rWxS7fGwvwp7hNmUD5wJqat5TlLvHDqv9nqoYoQHg
# JYuTHGHqWivqq9SbSzX4E0pJBRcNu3OXD18BQghNK8iXTfqjeF3ZNydos9IWshCe
# LBmopnSU17/zk5kscShjJz2FfgU75PzwyZxo1kKjq8n9D1oJsFUNSgKMGj4wQFyT
# hKLczZ81tPxSrb4CWC5N8RbN7CSehBug9NsAdkTbMzRjOurcqqsf2d+udccM4JGG
# EdRE3ZnXXKi+v92vh4n0uSvfTfqu61/0ad9QFJTbG+d8YYeNzVlAIOU862/SeeJg
# UemfzGn5k1R3CtpyukUWGlH8bP1rhNvjs1+zHRv1EYtZVbjru4aewCp0o3C5znAR
# u5ZEitUNaQrgAmDJLwpfu5HoqN++mpFH7pl9x6hFYCvLbWYkYIlR0e0NAgMBAAGj
# ggEWMIIBEjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU8CkU9WohFJJWVBOk
# PdWt8CE6xXgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGG
# MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUr8bKrgoIFExryOnviOUxtH5
# FDAwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5zY2tjZW4uYmUvU0NLQ0VO
# JTIwUm9vdCUyMENBLmNybDBHBggrBgEFBQcBAQQ7MDkwNwYIKwYBBQUHMAKGK2h0
# dHA6Ly9jcmwuc2NrY2VuLmJlL1NDS0NFTiUyMFJvb3QlMjBDQS5jcnQwDQYJKoZI
# hvcNAQELBQADggIBAIbENXjQHhcyihmPSltFTBqy1G7XHIx6HipRnVZ/soUvcYUm
# iBYJtNCD1Tuc4fYyrYAgN6PNU6mNMNVqEStVPLfPTp+UWWFct/aQ8rvqAZR4LpfS
# jriWyCi4IdFYBD72N7zNIdGy3cSK55SMXIVcYLOcv4f8Cyply47IPgLmM7CePvRg
# A+UrHRRqdo4ij3/WsOsxuu2p9sk6rbz33qEaZDFjvjMd/QllsH1NzGkMkpQMdPyc
# 2XKls5OkBYDdYfPcEgRw9JjBXZ2oRLYecvUIT5C8nT54omxeVWefYG1FZaRRc/FX
# XZgbcfcX3uWiGBI5I9+R5hFvxTe6sJyT93QpY8xYqkrniqohSDd6bp4x2zFKAMSZ
# 4m8ddV8+KRZuZnZPL/ea/rJ3B/EhSvz+Z1I4xGCAUSJ2YqL5ewvCnyNUQ/ZVyQz3
# cOclX5AqZAq/62DTTAR3w2GfhtTRLvVsxNja5JwuB+KqDSS5jI1T07MHCE+/NIjr
# xWUX9apftHtkylBwjpGfqZV7Zdx+jIpqzZOgf2UAMuJhEzR+nHmqLnVe1+WOx820
# 8ElwksOhgokDHWF4LBafpYqKKxJhWYVXNj07PqFF2zIvCFGgsihJurTGRyfjxlNW
# ARPEs8o+ZyNUlIW/mh7p0RpYYFz2+G5xHWVWjK7sRTNFG64hsJpDhL/XD1aQMIIG
# tDCCBJygAwIBAgIQDcesVwX/IZkuQEMiDDpJhjANBgkqhkiG9w0BAQsFADBiMQsw
# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
# ZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQw
# HhcNMjUwNTA3MDAwMDAwWhcNMzgwMTE0MjM1OTU5WjBpMQswCQYDVQQGEwJVUzEX
# MBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0
# ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExMIICIjAN
# BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtHgx0wqYQXK+PEbAHKx126NGaHS0
# URedTa2NDZS1mZaDLFTtQ2oRjzUXMmxCqvkbsDpz4aH+qbxeLho8I6jY3xL1IusL
# opuW2qftJYJaDNs1+JH7Z+QdSKWM06qchUP+AbdJgMQB3h2DZ0Mal5kYp77jYMVQ
# XSZH++0trj6Ao+xh/AS7sQRuQL37QXbDhAktVJMQbzIBHYJBYgzWIjk8eDrYhXDE
# pKk7RdoX0M980EpLtlrNyHw0Xm+nt5pnYJU3Gmq6bNMI1I7Gb5IBZK4ivbVCiZv7
# PNBYqHEpNVWC2ZQ8BbfnFRQVESYOszFI2Wv82wnJRfN20VRS3hpLgIR4hjzL0hpo
# YGk81coWJ+KdPvMvaB0WkE/2qHxJ0ucS638ZxqU14lDnki7CcoKCz6eum5A19WZQ
# HkqUJfdkDjHkccpL6uoG8pbF0LJAQQZxst7VvwDDjAmSFTUms+wV/FbWBqi7fTJn
# jq3hj0XbQcd8hjj/q8d6ylgxCZSKi17yVp2NL+cnT6Toy+rN+nM8M7LnLqCrO2JP
# 3oW//1sfuZDKiDEb1AQ8es9Xr/u6bDTnYCTKIsDq1BtmXUqEG1NqzJKS4kOmxkYp
# 2WyODi7vQTCBZtVFJfVZ3j7OgWmnhFr4yUozZtqgPrHRVHhGNKlYzyjlroPxul+b
# gIspzOwbtmsgY1MCAwEAAaOCAV0wggFZMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD
# VR0OBBYEFO9vU0rp5AZ8esrikFb2L9RJ7MtOMB8GA1UdIwQYMBaAFOzX44LScV1k
# TN8uZz/nupiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcD
# CDB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
# ZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
# L0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0
# cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmww
# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUA
# A4ICAQAXzvsWgBz+Bz0RdnEwvb4LyLU0pn/N0IfFiBowf0/Dm1wGc/Do7oVMY2mh
# XZXjDNJQa8j00DNqhCT3t+s8G0iP5kvN2n7Jd2E4/iEIUBO41P5F448rSYJ59Ib6
# 1eoalhnd6ywFLerycvZTAz40y8S4F3/a+Z1jEMK/DMm/axFSgoR8n6c3nuZB9BfB
# wAQYK9FHaoq2e26MHvVY9gCDA/JYsq7pGdogP8HRtrYfctSLANEBfHU16r3J05qX
# 3kId+ZOczgj5kjatVB+NdADVZKON/gnZruMvNYY2o1f4MXRJDMdTSlOLh0HCn2cQ
# LwQCqjFbqrXuvTPSegOOzr4EWj7PtspIHBldNE2K9i697cvaiIo2p61Ed2p8xMJb
# 82Yosn0z4y25xUbI7GIN/TpVfHIqQ6Ku/qjTY6hc3hsXMrS+U0yy+GWqAXam4ToW
# d2UQ1KYT70kZjE4YtL8Pbzg0c1ugMZyZZd/BdHLiRu7hAWE6bTEm4XYRkA6Tl4KS
# FLFk43esaUeqGkH/wyW4N7OigizwJWeukcyIPbAvjSabnf7+Pu0VrFgoiovRDiyx
# 3zEdmcif/sYQsfch28bZeUz2rtY/9TCA6TD8dC3JE3rYkrhLULy7Dc90G6e8Blqm
# yIjlgp2+VqsS9/wQD7yFylIz0scmbKvFoW2jNrbM1pD2T7m3XDCCBu0wggTVoAMC
# AQICEAhP3DNPfkVO28MPj/mSGDUwDQYJKoZIhvcNAQELBQAwaTELMAkGA1UEBhMC
# VVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBU
# cnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENBMTAe
# Fw0yNjA4MDUwMDAwMDBaFw0zNzExMDQyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcw
# FQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgU0hBMjU2
# IFJTQTQwOTYgVGltZXN0YW1wIFJlc3BvbmRlciAyMDI2IDEwggIiMA0GCSqGSIb3
# DQEBAQUAA4ICDwAwggIKAoICAQC2e6byyf7NSvjUm0xls/04xjD4fAkOkbnGQi7+
# Wpx81iYxfzViaxSIctuH3KSl5YEYpMuFgGsA31N2D9ATMbfZdw5uaAhuWevQKhDd
# ZIB4NnqcfpfpWQXJiQnDdAElETC+bhSEvNLGbA8DtwUpFMQ4yyYQSPqomT92osQA
# v6hBi47ATZS6JfVWe6XxhF4jJZ3iSAuf2Cros1czRSmWRHqMv9AfGZvp8ygYElhu
# dpQjtcPpwoOl6QrZJUyV3iINvN4cO05prGV0fkjG426xDr2d3z9lcSIHkdvGPdGU
# rXdxfVbgOUVcp2/8ISEzwKPW++Wa+E2ujI91EZtukGWDJ/xZ27k3oHKEXBRGfRTq
# jOU+jE3ba/5++JSE/7oNHnjs5mekExYN96LV/mxUbCKJb8pBNY4r3uD7hEmk/M81
# XhVgwDA7aMzYC3LZBg9WY5BMmbSay5ecmtJuXaB/0nKWmQmVZeqTVDgsmzHP5MQu
# hAJkiWNuC9MmCg9TZHXbJ2/yLVSov9p16UDTLtT0+aa1vN71fHeu1qMLlLNB3WOB
# /ADCxr3S/1hxI92Z6jKgEED/btwIvbfuXkNNhg8MtDg43c4tMZae9FvqMOt/9Pvm
# AxF9TNIsIFB8G6yb36ZJZGUL8N/pL971DyLXcK6HM5PYnH5X+eVtczhCgHCVQCF6
# XDAlPQIDAQABo4IBlTCCAZEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUFMljijAu
# 1Er7bpTz5uNAfvXszeIwHwYDVR0jBBgwFoAU729TSunkBnx6yuKQVvYv1Ensy04w
# DgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMIGVBggrBgEF
# BQcBAQSBiDCBhTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29t
# MF0GCCsGAQUFBzAChlFodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNl
# cnRUcnVzdGVkRzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAyNUNBMS5jcnQw
# XwYDVR0fBFgwVjBUoFKgUIZOaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lD
# ZXJ0VHJ1c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5NlNIQTI1NjIwMjVDQTEuY3Js
# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF
# AAOCAgEAjcU6YR6dUgrfmawJgH59KECxa9Ji8sEi2g10CBDaMiqsaxWyW5cwlT/6
# ZF5sFznazqVsoC85U9dqLOYqQwst+UQQoNlDHgKRLa3xoc+OReFreFhnTXSG0Vrd
# 2E2CZqUfm+5a+He1MJ/h+tNLuA+0Zzhn/Fo+FDYAHWZHx4R79ZsfRFYe9UiXpXBD
# f6DkUo183Y38NYmR/XfDYf7YZ+oR9t3flbDwK+hgGMs0gNNp1w9Z2CyOyI5or/sS
# womAuNQ0hWC9xoU4stD8aWsD7RkcmgVRs6vlIk3zPKQ+ylcheWkMlj+CoVRlFE55
# pv0ZWCaFt04lwP/rdGHE9qEVQZtyRE42ox7oNgC/r+Y4bSlZ3dw9K2x1xLtu6PkP
# KeLBFjzKigwfqm3Hm+k/+lnME8F5kPZTgiy2HLEHklpryqs6QHnPXrRNeIzkAMyy
# lnRN8P0wmirS0WkU+ywpEWFZ4QNg+9xS43tTuW9x0eXh7NDc1P/sV+zWxHXKH8tF
# t1ncHdVzqrZaYPyYMLSn2TOXajveJW1L3joiQSPsWRGxkbDDW15jERFE4LvjnGu2
# O9zD1nLJSMdlYZEikl4w2w+q4IN/R+TIe0H4ngCI1moJCTbevGH4punIxM1Uoi0n
# mX3ZK+XbRT01uowE5ViXWHng0RgsmrX/EdYUo80r3TfMlkD0/YMxggU2MIIFMgIB
# ATBrMGYxCzAJBgNVBAYTAkJFMRIwEAYDVQQIEwlBbnR3ZXJwZW4xDDAKBgNVBAcT
# A01vbDEPMA0GA1UEChMGU0NLQ0VOMQwwCgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVND
# S0NFTiBJQ1QgQ0ECAR8wCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKA
# AKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
# MAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFBNKsddxdX/BstQUtr5vzdtK
# JeaOMA0GCSqGSIb3DQEBAQUABIIBAKsDI/sFbCznU8VzvPh3Y9WAsmBZBYxovnAR
# rYrchSwvUoYgCg7UwjFveTfUyF0ijB2MU+28jblHXwK5XT2QuEJiaPGr+NLIt6o5
# 0eY46ySRCDO41kJ56mDJ5DU8bFeju+rGPf8ShcOSca9tiUgpNObfz4W/vdgMwfnJ
# tnFir6nLvkPvz6NdGf2mpgEmiP5WsQSNnJrP0apqHFsfXYVC7leJl29n7NW1mWyX
# rhKzYwA9fWx35IY5YheXxim3Z3gi97FL+4SLBm7z96sPiUHk5wtzAk3zR3nGNHgS
# E/oSxSH72x7vQz5O2EGoNHANy9eUinriHhHynB+Nj6qudf7kWj2hggMmMIIDIgYJ
# KoZIhvcNAQkGMYIDEzCCAw8CAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDA2MTMxMTI1WjAvBgkqhkiG9w0BCQQxIgQgQA4W
# TudUMSj26GjEde0OogQcz3Ps/urK0907DDBq6wMwDQYJKoZIhvcNAQEBBQAEggIA
# K9v7nGNsRBE5NJwRnHswCUnAEXVXbtWCIs4TzAot43kJX3/UUQM0eIpUn4oGXwSR
# ImkFPyhsoCybafcqACdQIv1x7FziV2wYv7muS/mhBUTmaVV2vT4/wd1OMK85Midb
# QkNZJxcEoQB7CkmNy/mdCQ0xa98mvrvoZ9rCDj22bpqQBWufXbosnrfncwY0njsw
# awl1/C6OOe9wfX4dYzXVrasyjQLwcyEAQNsHIKu9DMtibTXJP54TBnsP7Wvs2n1M
# B4uSO461LP9ivU90DWkqO827t4jC8UzZh16lrv84H6qzZJFtozyTBzQz18tCG9Ef
# cGPHY5Gyeo795ahsXUyxa9l3V5kgYRh8FmSWd1o25UI6iYgxvPVecwZ+SNu97JhL
# iwZ0tzM2LLgfNL0VbQfnfkDhCaa8CnbQeCs8lQ97x/OFHBRZ3KKPCmHRfouHd3dh
# 98qdH0GKWojsZkq58nbHzSiCZXIPwqtrZwXHPF1NhJVWNkGsr1uNt7RfY375lJV0
# mqydeNKbxsMfAxwdSfMTC3ufUDDT56W3L9SDD2L5ql/BW4UDTWDWU5gef/Wzi6ji
# 92sBuQXuOAYObDXbbhWiGUYXBA/WP+ek4Ki57FiuD483yLMz6wkt/iekyM4E6RUe
# SjPySxM39nbq0XMW79fC50c0cYz9EeBAkklyVZ9Zp5I=
# SIG # End signature block