| Server IP : 209.209.40.120 / Your IP : 216.73.217.112 Web Server : Microsoft-IIS/10.0 System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586 User : NEWWWW$ ( 0) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/Windows/SecureBoot/ExampleRolloutScripts/ |
Upload File : |
<#
.SYNOPSIS
Deploys the Secure Boot Rollout Orchestrator as a Windows Scheduled Task.
.DESCRIPTION
Creates a scheduled task that runs the orchestrator continuously in the background.
The task runs with bypass execution policy so no security prompts appear.
The orchestrator will:
- Poll for device updates on the specified interval
- Automatically generate waves and deploy GPOs
- Continue until all eligible devices are updated
Monitor progress using: Get-SecureBootRolloutStatus.ps1
.PARAMETER AggregationInputPath
UNC path to JSON device data (from detection GPO)
.PARAMETER ReportBasePath
Local path for reports and state files
.PARAMETER TargetOU
OU to link GPOs (optional - defaults to domain root)
.PARAMETER PollIntervalMinutes
Minutes between status checks. Default: 30
.PARAMETER UseWinCS
Use WinCS (Windows Configuration System) instead of AvailableUpdatesPolicy GPO.
When enabled, deploys WinCsFlags.exe scheduled task to endpoints instead of registry GPO.
.PARAMETER WinCSKey
The WinCS key for Secure Boot configuration. Default: F33E0C8E002
.PARAMETER ServiceAccount
Account to run the task. Default: SYSTEM
For domain operations, use a domain admin service account.
.PARAMETER AllowListPath
Path to a file containing hostnames to ALLOW for rollout (targeted/pilot rollout).
Supports .txt (one hostname per line) or .csv (with Hostname/ComputerName/Name column).
When specified, ONLY these devices will be included in rollout.
.PARAMETER AllowADGroup
Name of an AD security group containing computer accounts to ALLOW.
Example: "SecureBoot-Pilot-Computers"
.PARAMETER ExclusionListPath
Path to a file containing hostnames to EXCLUDE from rollout (VIP/executive devices).
Supports .txt (one hostname per line) or .csv (with Hostname/ComputerName/Name column).
.PARAMETER ExcludeADGroup
Name of an AD security group containing computer accounts to exclude.
Example: "VIP-Computers"
.PARAMETER ScriptPath
Path to the orchestrator script. Default: Same folder as this script.
.PARAMETER Uninstall
Remove the scheduled task
.EXAMPLE
.\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports" -ServiceAccount "DOMAIN\svc_secureboot"
.EXAMPLE
.\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports"
.EXAMPLE
# Deploy using WinCS method instead of AvailableUpdatesPolicy
.\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports" -UseWinCS
.EXAMPLE
.\Deploy-OrchestratorTask.ps1 -Uninstall
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$AggregationInputPath,
[Parameter(Mandatory = $false)]
[string]$ReportBasePath,
[Parameter(Mandatory = $false)]
[string]$TargetOU,
[Parameter(Mandatory = $false)]
[int]$PollIntervalMinutes = 30,
[Parameter(Mandatory = $false)]
[switch]$UseWinCS,
[Parameter(Mandatory = $false)]
[string]$WinCSKey = "F33E0C8E002",
[Parameter(Mandatory = $false)]
[string]$ServiceAccount = "SYSTEM",
[Parameter(Mandatory = $false)]
[string]$AllowListPath,
[Parameter(Mandatory = $false)]
[string]$AllowADGroup,
[Parameter(Mandatory = $false)]
[string]$ExclusionListPath,
[Parameter(Mandatory = $false)]
[string]$ExcludeADGroup,
[Parameter(Mandatory = $false)]
[string]$ScriptPath,
[Parameter(Mandatory = $false)]
[switch]$Uninstall
)
$ErrorActionPreference = "Stop"
$TaskName = "SecureBoot-Rollout-Orchestrator"
$DownloadUrl = "https://aka.ms/getsecureboot"
$DownloadSubPage = "Deployment and Monitoring Samples"
# ============================================================================
# DEPENDENCY VALIDATION
# ============================================================================
function Test-ScriptDependencies {
<#
.SYNOPSIS
Validates that all required scripts are present.
.DESCRIPTION
Checks for required script dependencies and provides download instructions if missing.
#>
param(
[Parameter(Mandatory = $true)]
[string]$ScriptDirectory,
[Parameter(Mandatory = $true)]
[string[]]$RequiredScripts
)
$missingScripts = @()
foreach ($script in $RequiredScripts) {
$scriptPath = Join-Path $ScriptDirectory $script
if (-not (Test-Path $scriptPath)) {
$missingScripts += $script
}
}
if ($missingScripts.Count -gt 0) {
Write-Host ""
Write-Host ("=" * 70) -ForegroundColor Red
Write-Host " MISSING DEPENDENCIES" -ForegroundColor Red
Write-Host ("=" * 70) -ForegroundColor Red
Write-Host ""
Write-Host "The following required scripts were not found:" -ForegroundColor Yellow
foreach ($script in $missingScripts) {
Write-Host " - $script" -ForegroundColor White
}
Write-Host ""
Write-Host "Please download the latest scripts from:" -ForegroundColor Cyan
Write-Host " URL: $DownloadUrl" -ForegroundColor White
Write-Host " Navigate to: '$DownloadSubPage'" -ForegroundColor White
Write-Host ""
Write-Host "Extract all scripts to the same directory and run again." -ForegroundColor Yellow
Write-Host ""
return $false
}
return $true
}
# Required scripts for orchestrator deployment
$requiredScripts = @(
"Start-SecureBootRolloutOrchestrator.ps1",
"Aggregate-SecureBootData.ps1",
"Deploy-GPO-SecureBootCollection.ps1",
"Detect-SecureBootCertUpdateStatus.ps1",
"Get-SecureBootRolloutStatus.ps1",
"Enable-SecureBootUpdateTask.ps1"
)
if (-not (Test-ScriptDependencies -ScriptDirectory $PSScriptRoot -RequiredScripts $requiredScripts)) {
exit 1
}
# ============================================================================
# UNINSTALL
# ============================================================================
if ($Uninstall) {
Write-Host ""
Write-Host "Removing scheduled task: $TaskName" -ForegroundColor Yellow
$existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
if ($existingTask) {
Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
Write-Host "Task removed successfully." -ForegroundColor Green
} else {
Write-Host "Task not found." -ForegroundColor Gray
}
exit 0
}
# ============================================================================
# VALIDATION
# ============================================================================
if (-not $AggregationInputPath -or -not $ReportBasePath) {
Write-Host "ERROR: -AggregationInputPath and -ReportBasePath are required." -ForegroundColor Red
Write-Host ""
Write-Host "Example:" -ForegroundColor Yellow
Write-Host ' .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports"'
exit 1
}
# Find orchestrator script
if (-not $ScriptPath) {
$ScriptPath = Join-Path $PSScriptRoot "Start-SecureBootRolloutOrchestrator.ps1"
}
if (-not (Test-Path $ScriptPath)) {
Write-Host "ERROR: Orchestrator script not found: $ScriptPath" -ForegroundColor Red
exit 1
}
# Find aggregation script (needed by orchestrator)
$aggregateScript = Join-Path $PSScriptRoot "Aggregate-SecureBootData.ps1"
if (-not (Test-Path $aggregateScript)) {
Write-Host "WARNING: Aggregate-SecureBootData.ps1 not found in script directory" -ForegroundColor Yellow
Write-Host " Orchestrator may fail if it cannot find this script." -ForegroundColor Yellow
}
Write-Host ""
Write-Host ("=" * 70) -ForegroundColor Cyan
Write-Host " Secure Boot Rollout Orchestrator - Task Deployment" -ForegroundColor Cyan
Write-Host ("=" * 70) -ForegroundColor Cyan
Write-Host ""
# For display, show relative paths (script names only)
$displayScriptPath = Split-Path $ScriptPath -Leaf
Write-Host "Configuration:" -ForegroundColor Yellow
Write-Host " Task Name: $TaskName"
Write-Host " Orchestrator: $displayScriptPath"
Write-Host " Input Path: $AggregationInputPath"
Write-Host " Report Path: $ReportBasePath"
Write-Host " Target OU: $(if ($TargetOU) { $TargetOU } else { '(domain root)' })"
Write-Host " Poll Interval: $PollIntervalMinutes minutes"
Write-Host " Service Account: $ServiceAccount"
Write-Host " Deployment Method: $(if ($UseWinCS) { "WinCS (WinCsFlags.exe)" } else { "AvailableUpdatesPolicy (GPO)" })"
if ($UseWinCS) {
Write-Host " WinCS Key: $WinCSKey"
}
Write-Host ""
# ============================================================================
# GPO DETECTION - AUTO-DEPLOY IF MISSING
# ============================================================================
$CollectionGPOName = "SecureBoot-EventCollection"
$deployGpoScript = Join-Path $PSScriptRoot "Deploy-GPO-SecureBootCollection.ps1"
# Check if GroupPolicy module is available
if (Get-Module -ListAvailable -Name GroupPolicy) {
Import-Module GroupPolicy -ErrorAction SilentlyContinue
Write-Host "Checking for Detection GPO..." -ForegroundColor Yellow
try {
# Get the domain from the AggregationInputPath (e.g., \\domain\share)
$domainFromPath = if ($AggregationInputPath -match '^\\\\([^\\]+)\\') {
$matches[1]
} else {
$env:USERDNSDOMAIN
}
# Check if GPO exists
$existingGpo = Get-GPO -Name $CollectionGPOName -ErrorAction SilentlyContinue
if ($existingGpo) {
Write-Host " Detection GPO found: $CollectionGPOName" -ForegroundColor Green
} else {
Write-Host ""
Write-Host ("=" * 70) -ForegroundColor Yellow
Write-Host " DETECTION GPO NOT FOUND" -ForegroundColor Yellow
Write-Host ("=" * 70) -ForegroundColor Yellow
Write-Host ""
Write-Host "The detection GPO '$CollectionGPOName' was not found." -ForegroundColor Yellow
Write-Host "This GPO is required to collect device status data." -ForegroundColor Yellow
Write-Host ""
# Ask user if they want to deploy the GPO now
Write-Host "Would you like to deploy the Detection GPO now? (Y/N)" -ForegroundColor Cyan
$response = Read-Host
if ($response -match '^[Yy]') {
Write-Host ""
Write-Host "Launching GPO Deployment..." -ForegroundColor Cyan
Write-Host ""
# Build parameters for GPO deployment
$gpoParams = @{
DomainName = $domainFromPath
CollectionSharePath = $AggregationInputPath
ScriptSourcePath = Join-Path $PSScriptRoot "Detect-SecureBootCertUpdateStatus.ps1"
}
if ($TargetOU) {
$gpoParams.OUPath = $TargetOU
} else {
# Use AutoDetectOU to let user select
$gpoParams.AutoDetectOU = $true
}
# Run the GPO deployment script
& $deployGpoScript @gpoParams
if ($LASTEXITCODE -ne 0) {
Write-Host "GPO deployment may have encountered issues. Review the output above." -ForegroundColor Yellow
Write-Host "You can continue with orchestrator deployment or press Ctrl+C to abort." -ForegroundColor Yellow
Write-Host ""
Read-Host "Press Enter to continue"
} else {
Write-Host ""
Write-Host "Detection GPO deployed successfully!" -ForegroundColor Green
Write-Host ""
}
} else {
Write-Host ""
Write-Host "Skipping GPO deployment. The orchestrator will not receive device data" -ForegroundColor Yellow
Write-Host "until the Detection GPO is deployed manually." -ForegroundColor Yellow
Write-Host ""
Write-Host "To deploy the Detection GPO later, run:" -ForegroundColor Cyan
Write-Host " .\Deploy-GPO-SecureBootCollection.ps1 -DomainName `"$domainFromPath`" -AutoDetectOU" -ForegroundColor White
Write-Host ""
}
}
} catch {
Write-Host " Unable to check for GPO: $($_.Exception.Message)" -ForegroundColor Yellow
Write-Host " Continuing with orchestrator deployment..." -ForegroundColor Gray
}
} else {
Write-Host " GroupPolicy module not available - skipping GPO check" -ForegroundColor Gray
Write-Host " Ensure Detection GPO is deployed separately." -ForegroundColor Gray
}
Write-Host ""
# ============================================================================
# BUILD ARGUMENTS
# ============================================================================
$arguments = @(
"-NoProfile"
"-ExecutionPolicy Bypass"
"-File `"$ScriptPath`""
"-AggregationInputPath `"$AggregationInputPath`""
"-ReportBasePath `"$ReportBasePath`""
"-PollIntervalMinutes $PollIntervalMinutes"
)
if ($TargetOU) {
$arguments += "-TargetOU `"$TargetOU`""
}
if ($UseWinCS) {
$arguments += "-UseWinCS"
$arguments += "-WinCSKey `"$WinCSKey`""
}
if ($AllowListPath) {
$arguments += "-AllowListPath `"$AllowListPath`""
}
if ($AllowADGroup) {
$arguments += "-AllowADGroup `"$AllowADGroup`""
}
if ($ExclusionListPath) {
$arguments += "-ExclusionListPath `"$ExclusionListPath`""
}
if ($ExcludeADGroup) {
$arguments += "-ExcludeADGroup `"$ExcludeADGroup`""
}
$argumentString = $arguments -join " "
# Don't display raw arguments with full paths - it's confusing for published scripts
# The task will use the full path internally
# ============================================================================
# CREATE SCHEDULED TASK
# ============================================================================
# Check for existing task
$existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
if ($existingTask) {
Write-Host "Task already exists. Updating..." -ForegroundColor Yellow
Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
}
# Create task action
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument $argumentString -WorkingDirectory $PSScriptRoot
# Create trigger - run once, immediately (orchestrator loops internally)
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1)
# Create principal
if ($ServiceAccount -eq "SYSTEM") {
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
} else {
# Normalize local account format: COMPUTERNAME\User -> User
# Register-ScheduledTask does not accept COMPUTERNAME\User or .\User for local accounts
$taskUser = $ServiceAccount
if ($ServiceAccount -match "^$([regex]::Escape($env:COMPUTERNAME))\\(.+)$") {
$taskUser = $Matches[1]
Write-Host " Note: Local account detected, using '$taskUser' for task registration" -ForegroundColor Gray
}
# Prompt for password
Write-Host "Enter password for $ServiceAccount" -ForegroundColor Yellow
$cred = Get-Credential -UserName $taskUser -Message "Service account credentials for scheduled task"
if (-not $cred) {
Write-Host "Credential entry cancelled. Aborting." -ForegroundColor Red
exit 1
}
$principal = New-ScheduledTaskPrincipal -UserId $taskUser -LogonType Password -RunLevel Highest
}
# Task settings
$settings = New-ScheduledTaskSettingsSet `
-AllowStartIfOnBatteries `
-DontStopIfGoingOnBatteries `
-StartWhenAvailable `
-RunOnlyIfNetworkAvailable `
-RestartCount 3 `
-RestartInterval (New-TimeSpan -Minutes 5) `
-ExecutionTimeLimit (New-TimeSpan -Days 30) # Allow long-running
# Register task
try {
if ($ServiceAccount -eq "SYSTEM") {
Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Description "Secure Boot Certificate Rollout - Automated GPO deployment"
} else {
# Use New-ScheduledTask to embed the principal (with RunLevel Highest) into a task object,
# then register with -InputObject + -User/-Password (separate parameter set from -Principal)
$taskDefinition = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings
$taskDefinition.Description = "Secure Boot Certificate Rollout - Automated GPO deployment"
# Note: Register-ScheduledTask requires plain text password - no SecureString overload exists
$netCred = $cred.GetNetworkCredential()
Register-ScheduledTask -TaskName $TaskName -InputObject $taskDefinition -User $taskUser -Password $netCred.Password -ErrorAction Stop
$netCred = $null
}
Write-Host "Scheduled task created successfully!" -ForegroundColor Green
} catch {
Write-Host "Failed to create scheduled task: $($_.Exception.Message)" -ForegroundColor Red
exit 1
}
# ============================================================================
# CREATE STATUS SHORTCUT
# ============================================================================
$statusScript = Join-Path $PSScriptRoot "Get-SecureBootRolloutStatus.ps1"
if (Test-Path $statusScript) {
Write-Host ""
Write-Host "To check rollout status, run:" -ForegroundColor Yellow
Write-Host " .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath `"$ReportBasePath`"" -ForegroundColor Cyan
}
# ============================================================================
# OUTPUT
# ============================================================================
Write-Host ""
Write-Host ("=" * 70) -ForegroundColor Green
Write-Host " DEPLOYMENT COMPLETE" -ForegroundColor Green
Write-Host ("=" * 70) -ForegroundColor Green
Write-Host ""
Write-Host "The orchestrator will start in approximately 1 minute." -ForegroundColor White
Write-Host ""
Write-Host "MONITORING:" -ForegroundColor Yellow
Write-Host " View task status: Get-ScheduledTask -TaskName '$TaskName' | Select State"
Write-Host " View task log: Get-Content '$ReportBasePath\RolloutState\Orchestrator_$(Get-Date -Format 'yyyyMMdd').log' -Tail 50"
Write-Host " View rollout state: Get-Content '$ReportBasePath\RolloutState\RolloutState.json' | ConvertFrom-Json"
Write-Host " View dashboard: Start '$ReportBasePath\Aggregation_*\SecureBoot_Dashboard*.html'"
Write-Host " Quick status: .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath '$ReportBasePath'"
Write-Host ""
Write-Host "MANAGEMENT:" -ForegroundColor Yellow
Write-Host " Start manually: Start-ScheduledTask -TaskName '$TaskName'"
Write-Host " Stop: Stop-ScheduledTask -TaskName '$TaskName'"
Write-Host " Remove: .\Deploy-OrchestratorTask.ps1 -Uninstall"
Write-Host ""
# SIG # Begin signature block
# MIIpyAYJKoZIhvcNAQcCoIIpuTCCKbUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAhai1fTeMgZT/W
# RzS6QKGF2mE77In1fIATPvAv95cREaCCDeUwgga9MIIEpaADAgECAhMzAAAAHEif
# gd+hsLd3AAAAAAAcMA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJVUzETMBEG
# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
# cm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0
# aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yNDA4MDgyMTM2MjNaFw0zNTA2MjMy
# MjA0MDFaMF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIENvZGUgU2lnbmluZyBQ
# Q0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJp9a30nwXYq
# Lq7j1TT/zCtt7vxU+CCj+7BkifS/B2gXKGU7OV9SXRJGP1yFs5p6jpsYi4cYzF56
# AV0AEmmEjV8wT2lvPU5BhN3wV30HqYPIYEj5P3WXf0kXD9fvjUf1GAtXEriJ8w7A
# LNaVEm9Rs4ePA0ZsYHaCbU5kBUJQDXv76hafOcQgdFCA3I3zYtfzX2vOwx87uDOa
# CuyKORZih9c3zTf+TLC5QYLyhVMBnDXEHDOrvaw92DSyIqpdgRWpufzqDFy1egVj
# koXZhb+9pZ9heUzNXTXhOoXzexh6YzAL4flBWm+Bc1hQyESenEvBJznV+25u3h77
# jjgMUY44+WXQ4u9qddDe/U5SeAaKRvvibmi4z7QRpLvZsla0CPiOUGz00Do5sfkC
# 0EwlsSzfM3+8A9rsyFVOgWDVPzt98OJP2EoaEOq8GE9GCoN2i7/4C2FCwff1BSCT
# JWZO1Wcr2MteJE6UxGV+ihA8nN51YPKD2dYGoewrXvRzC/1HoUeSvlZf0mf9GHEt
# vvkbJVRRo6PBf0md5t87Vb1mM/fIp1eypyaxmXkgpcBwuylsOq2kSVOJ5wBPoaEs
# sJkeMcKnEuuu++UKdDHlS0DtsYjN0QnOucvTdSsdvhzKOSjJF3XVqr9f2C945LXT
# 5rxKIHUIEDBcNYU6BKDDH6rfpKOOCSilAgMBAAGjggFGMIIBQjAOBgNVHQ8BAf8E
# BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFB6C3w7XjLPXAjSDDtqr
# rWW5r7jsMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMB
# Af8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBL
# oEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv
# TWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggr
# BgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS
# b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQEMBQADggIBAENf+N8/
# u+mUjDtc9btoA52RBc0XVDSBMQBMqxu56hXHBwuctUWs1XBqDDMIFCHu9c6Y/UF+
# TN8EIgjnujApKYmHP4f4EM3ARSmlzrpF5ozOJx0BA5FUv1jmpdf/2ZbqpvCxlxv/
# G1R4KjrSmmqPHzs6igw3b7RTbj7BxIS8fOIkwYWQhB2fLjlg+3HSrDGPFIhpIJWV
# amMIR7a72OGonjdf45rspwqIHuynZU4avy9ruB/Rhhbwm+fMb8BMecIaTmkohx/E
# ZZ5GNWcN6oTYW3G2BM3B3YznWkl9t4shP60fMue+2ksdHGWSE8EVTdSmGUdj0jrU
# c46lGVFJISF3/MxcxnlNeP1Khyr+ZzT4Ets/I7mufpaLnLalzMR2zIuhGOAWWswe
# sbjtFzkVUFgDR2SW903I0XKlbPEA6q8epHGJ9roxh85nsEKcBNUw4Scp68KCqSpF
# BaKiyV1skd+l8U50WNePMb9Bzz0OfASal8v5sQG+DW01kN+I+RKUIbM5I50wJjiH
# ymQFNDsbobFx9I95mCEEPU7fUZ3VT/HOUVbkmX7ltIC/eQAu5GO8fu+ceETMybvb
# oxUM4dYNC+PzooUxfmC0DuKRwB21bX9+acuIBkxIm4Ed3O19w1VLoA7UNOUuJ7z6
# NQ2W/+q7cnfOPl2QVL4qlgCblUT2vmQpllV3MIIHIDCCBQigAwIBAgITMwAAASJs
# BjOj0VK23QAAAAABIjANBgkqhkiG9w0BAQwFADBfMQswCQYDVQQGEwJVUzEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQg
# V2luZG93cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwMzA1MTk1ODI0WhcN
# MjcwMzAzMTk1ODI0WjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggIiMA0GCSqGSIb3
# DQEBAQUAA4ICDwAwggIKAoICAQCeFlu3IJtMm0DcCUF5EKHUKh/L06a1JyvxX2aV
# aapyABxwDINwxmSS0MR5ObqvX4TKhYX2Ic7+HNhNjxZg7UJUTMamRDcmnS3QHYOe
# oqsgveL1mGQsvBqWROEi2tBe8PrwJrYd4tefld81kaQ1cnbzuUuou3fuAHNudJnA
# CW5SqPmZHF565Ij7jwMeJPxU5JHsPAs/Y11aWPxI85kVEUecjfOMpIx5oTXnNi9U
# nw7BSv/SSrXfkyAyFyqu+PN9ymIWLmOAPaAnJ+QxGRZ9D7jJy4fZK0RxO1GlPTaj
# h9xgbz7SDSeC70z8Ro8mgO3ImrCDv4KdJztT5dnCieVXLMSxCqWikfKznmoCaAqG
# 5skdylL5CFi8TQVKASb2QR0MjS1fqX0FpOkgibu7+m2EPzjp36SkgZ1TXVfAO3j5
# BjRZT/VXaWS0Zk+eNn8/SQf8U/LRRpnuJXhkOWVBNIGq5ew6EsKIQm5Dter5NTSK
# J8gUlqiwDKZ1HuaTEWn1PmgN0YYF9av8fDTeVbEPQe04yv47o8lYpldFM0B9kWOc
# kIc0U+hXNC/+pnDVUh2fjN+JtMaLKTTOciXM2F0tt3CbdKO+cCmlCzSuhN9aeQ2m
# GEnQY3v3V3W15uaUpYELTYOTeTwDVkYJXCZK/zNRXxU38rQ+LwxLOeRVNvEYh2Js
# 0nuX0QIDAQABo4IBvjCCAbowDgYDVR0PAQH/BAQDAgeAMB8GA1UdJQQYMBYGCisG
# AQQBgjc9BgEGCCsGAQUFBwMDMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFJ8ytbdA
# tti7ifaKbKxtPwbvlJiSMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQLEyRNaWNyb3Nv
# ZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxFjAUBgNVBAUTDTIzMDg2NSs1
# MDY5NjUwHwYDVR0jBBgwFoAUHoLfDteMs9cCNIMO2qutZbmvuOwwagYDVR0fBGMw
# YTBfoF2gW4ZZaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWlj
# cm9zb2Z0JTIwV2luZG93cyUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyNC5j
# cmwwdwYIKwYBBQUHAQEEazBpMGcGCCsGAQUFBzAChltodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2Rl
# JTIwU2lnbmluZyUyMFBDQSUyMDIwMjQuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQCY
# WFIyjTfk5OvOrxA8oAS2jbS6/P0DDLLiqZsyy6dY9vfid+P2uawuygeoVwkvGqMO
# 0UDWuupsy8VQ/5Fw+GXfx7n9AfvoVg30rHm883siWQ9/GaayCh219lbearlRziyq
# TZoz7ShvA23fRoKs3I9LlXWWOH1d5CeFtuyX0D4oRBU1pQS+ijDSv848ZiLwqjig
# Q7XBaYiPNVQI8xMkkVeIc6B575rVsxqLF5rQFMuXZhwU+BXEbVa4tmVAzY9geP3X
# dOP+L/OwWQV83Z6poT/RW6QMqkNpgf7Pc3oSGKGTpr32AwHIutwmWaEaj8asyDUj
# FABzJBG6AH8pugTf440r61uNlw6mDXppfOZVyuHuH93uNzaINvuW/Y/yEYSDdTvy
# 6Sn5GwWrHKNA23UR18Abu7B2uOeDhiTq69oePmKEAPjjHMTQBrZUX+VBwv+v7MJB
# r8A0s4zg/AY+A/LmN5veQpcAjTj9H+2mKEQobRTUHKBDW1T1fXYQb1JdWQXDK9In
# 6Lx8EaWOExYktAceGfzxC9NoCjxBUb8ba6QOQXNaqrzQlDzGwqxLsiClN+H6h58p
# BfFF2OoSaLlgpih0WRfp7sTGddsp6ajbAAX7VSI/W32o2G7KaDIc1jiok64BnBRo
# ewtKnNm3Ny0ulmJ6IgIZA5DOAxT9tPtEtNhwHmhshzGCGzkwghs1AgEBMHYwXzEL
# MAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEwMC4G
# A1UEAxMnTWljcm9zb2Z0IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0AhMz
# AAABImwGM6PRUrbdAAAAAAEiMA0GCWCGSAFlAwQCAQUAoIH6MBkGCSqGSIb3DQEJ
# AzEMBgorBgEEAYI3AgEEMC8GCSqGSIb3DQEJBDEiBCDPD4AexrlzLseR83SIjy8z
# HXGTOXWf9o/CRq+ElNbYAzBQBgorBgEEAYI3CgMcMUIMQDkzNjZBQTdGMURCQjE3
# QTE4MThDMTUyNzc1NDQ4QjFEOUFCQzhEMDBBNTFERTY1QjJDOTNCNDY3RTkyNEJE
# M0UwWgYKKwYBBAGCNwIBDDFMMEqgJIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAAVwBp
# AG4AZABvAHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2luZG93czAN
# BgkqhkiG9w0BAQEFAASCAgBLPOojELOkqWaksCeew78ZNCxuqnusvaL1teO8lz8T
# wtFDhpLNLfYJWxLhAcxBZqR+yrQGtRj3CTS1gABhtGc/G5xkoJtGEuEmRchiN7q5
# qGS9nqD/DV6rO6aUtBuDupYBWYUyncTccHDWppQdlBDZFNpnbLe+TrdaymfXzGg4
# XdWjSDwZ8JYYssNn9KGvFdbXQZJG+q03hr5MBZwNejIPK1qVHUmi9Xdy396eEYFi
# RnXNlwEC+pCWiQPbkk8D0RRrfZHGYcl3G81UkWPe8zkS1rN4kl+D1pMzzClOzu1b
# Mrn9bQCUNWbI9+8WKJxvN2adiKQlByZmz7Si0hq/CFYHlqtBcy0F15GXCePsB8bJ
# 4G+NTY13cZVPTFYf99QCCRKpwB+/04ifAkynsJlMfJ//cg9zb9/QHVfTF3e3V+Zk
# HHXHf9D3/baWgbGtI7xqFgKVFGeUc5aaNS3YpLGxl+jHi2LnbiaF9imAdZK1WBM4
# bLJeAQN3syTrqiV5+KT0QFyYod7lUcCbl2X+q9UEAk3OcIg2MVqHqWrjmWpm1kyM
# 9DRwjmkuSxbMec1rMSYenCxKsALQDMH6r4fE19UgkF/+com2YXLS3RQOyrj7vZvu
# eJl71LHT+I8XvzXJbwb1IHR9vS/wDZeExGrt2drm+UvoIB0azwM9hXFhur5bUImQ
# eqGCF5cwgheTBgorBgEEAYI3AwMBMYIXgzCCF38GCSqGSIb3DQEHAqCCF3Awghds
# AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9MIIB
# OQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCAWNA7IrjkMXXS7U9Rj
# xaRXk7TW0KOobVCgx13qb5WEEQIGahdRP/k1GBMyMDI2MDYwNjA4MzU1NS44NDJa
# MASAAgH0oIHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYD
# VQQLEx5uU2hpZWxkIFRTUyBFU046ODkwMC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1p
# Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WgghHtMIIHIDCCBQigAwIBAgITMwAA
# AiJB0vaq/8i1/wABAAACIjANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzET
# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
# dGFtcCBQQ0EgMjAxMDAeFw0yNjAyMTkxOTM5NTZaFw0yNzA1MTcxOTM5NTZaMIHL
# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxN
# aWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRT
# UyBFU046ODkwMC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0
# YW1wIFNlcnZpY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC1ueKJ
# ukIuUsAAJo/AY5DZRqH7bhgv7CWGNlEdbRGoITrdE6Wsn57NaNu1BTdjBbFcv7Rf
# ixte0x+HRvXSqsD+WeSX/6/y9wE0Mz+xRPTGIY20K7aQDa68OyzVyUeUCypyZC/g
# W/3ytO/ZOnU9H2ri77kJP8ABrqyy1UxX/OseEgvHsj8yikWT0ARtrjWbXMHFzSOo
# 5hQcfUmMXKqWWz6+N0+UynhGy1n+doW4WZgpH8Y5W7hpSokWj1M/Lu4wi3o6Dz9v
# VWukcgUFGjLAl4YZpOhah7HuiC/alXImMQf8C3A8q/6/1hFoeIZB4UGkywxB/OST
# OSsL6+39pDqzM7CgOpf4V799kN94yM9uXJI5T/SiA5MdIZIhEW0+bh85RqDh5YW3
# /oav54RPxw5OPlH64QV6KJkl0FIElMVoLNo8UWRQcMD179x7WASjC6LsaNZ7yK0q
# cESIsL1wiQmdfQBxcqrFCpIQfnmQFkOp9IyXUWqza8tmpz8E6aXg9b1eiAT3PVTg
# rOlPi/hYZCfPxX/6jGtyPjy1CiwOmJamohmSU//COAenfRT2G2HMRUpCX1zs+AmD
# mdQM1XRab4YSALLAlDzGCsgI77nnuJjoXAliJmv7NfrvWAcA5KqCUOWQ6kSPt5r2
# 8MfKXWJJpSXtFeS/MkDzJy/iJRVyHcFy/B+MtwIDAQABo4IBSTCCAUUwHQYDVR0O
# BBYEFFkHwGoDJ5ZbEEiu8KstiusqaozQMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl
# 0mWnG1M1GelyMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0
# LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAy
# MDEwKDEpLmNybDBsBggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93
# d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1T
# dGFtcCUyMFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/
# BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IC
# AQBiAM+nqrpwG29txSXv42o+CsTe2C4boaRfFju9JaWkLTHwq7pknNONL3n+UG3x
# /B083EKXiFYrAmul7BTHCGXU63/xRsZ2wj3ZmR0A4d9nf9saCJVm4juPVFBai/ok
# tOOYH2j+1+zM70woN5ongB/pvy7X8AfY6JB4XPvb80Qz7fY5eddbnwjzg1sZhUPF
# bbcweWeACINrzqFK62mMeXKmhtufMraoogJeJXfWY3x4/pbubgENT3+pXT65203C
# PF9kfdKE7GKAIRYy3xkBTDvFd8dufjOpCn38nK6qMlVtnBjDhWQG0PM3E/oxBs5U
# BrI6pBYkmIHtbjifDquHT+ThaVV7xHc6InoSc3aNzX49JHUgQmuvDdMjLkbYXeA0
# /1q5IxSg2U+ycZBOvAi3udZPKhA5VzODjf/ucu/vFtXrYcRkmGKN3jujaK3/yMZi
# 2Ju5NEL3ISWorwp7RjeZg+JMIK0fosuVj+YCm5r64LH/D9QJDAj+XfZaNeFdv90K
# 5A0QRRGP/poB9yTIVjEXj/uJzp8L4Dd44sAquqDOiHdkLgxfK8nPqpCSWPZ9G+RC
# Pm85o9cAfxENtrSuOwcpyKzxsRCYCL+PK4+98orit9EVJ/LLoCeG+jLlj0KaD4Qy
# 6sZe4rWMr1brQLosTBZNwFnXxNjInCWBd0i7is1yTS/4qTCCB3EwggVZoAMCAQIC
# EzMAAAAVxedrngKbSZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBS
# b290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoX
# DTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIi
# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC
# 0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VG
# Iwy1jRPPdzLAEBjoYH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP
# 2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/P
# XfT+jlPP1uyFVk3v3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361
# VI/c+gVVmG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwB
# Sru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9
# X4C626p+Nuw2TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M269e
# wvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDw
# wvoSCtdjbwzJNmSLW6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr
# 9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+e
# FnJpxq57t7c+auIurQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAj
# BgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+n
# FV0AXmJdg/Tl0mWnG1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEw
# PwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9j
# cy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3
# FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAf
# BgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBH
# hkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNS
# b29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUF
# BzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0Nl
# ckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4Swf
# ZwExJFvhnnJL/Klv6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTC
# j/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu
# 2D9IdQHZGN5tggz1bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/
# GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3D
# YXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbO
# xnT99kxybxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqO
# Cb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I
# 6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0
# zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaM
# mdbhIurwJ0I9JZTmdHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNT
# TY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNQMIICOAIBATCB+aGB0aSBzjCByzEL
# MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
# bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
# cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1Mg
# RVNOOjg5MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
# cCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQC7ycXVZx3bsDpJkr7VucgpksozuKCB
# gzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk
# BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3DQEB
# CwUAAgUA7c5UlDAiGA8yMDI2MDYwNjA4MTEwMFoYDzIwMjYwNjA3MDgxMTAwWjB3
# MD0GCisGAQQBhFkKBAExLzAtMAoCBQDtzlSUAgEAMAoCAQACAi/NAgH/MAcCAQAC
# AhNfMAoCBQDtz6YUAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwKg
# CjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBAEj5jCiV
# F+IC1a01X/8Z55ZTsorCoLPeSGcO8MSDvCAZKGxEK9hJtsqOdRTMCRkYxuvvJFNP
# mZirRU3qflmlEsST6P8rwuHwgn08k6VqGsyr3jvGuwY1NwG7VqHrQiV0TA4uAVZk
# k0UhjA/u7QbkXUZr2zI6JrnhIzQe4MagmvF/S8ZY9Mm0ibtUIzLU+dxLJfD1psxe
# t5yK/UELor9nzASUp0z4fPZIaHily3iAobG2rLSPIGesD5G7Cs0FGhNjmAcGbMje
# CXolHT4IHV+BJE6F7JH3HutJgpG/DvlA9Kd5KkCa+tt+lKd7g5gk3Fy7bklDd8An
# vvJUmT/3D/hM16UxggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
# Q0EgMjAxMAITMwAAAiJB0vaq/8i1/wABAAACIjANBglghkgBZQMEAgEFAKCCAUow
# GgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCAC+ZrQ
# hTqx/T71qeDHj5/7hiOOYJeZEy3waYQSt0BaDDCB+gYLKoZIhvcNAQkQAi8xgeow
# gecwgeQwgb0EIAVgXQEKBOfGgjNskmDOmbcEIOnHGNwA+QcRufDR5AkTMIGYMIGA
# pH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
# AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIiQdL2qv/Itf8A
# AQAAAiIwIgQgU4bV4KYfHyxeIuJc1As8bNIl1EIp03u/x8PRJNeq9PYwDQYJKoZI
# hvcNAQELBQAEggIAdiShHpeFSFxQ8PDqVdcUG0bkKOrne5ZFqm53b3BTFmrkyAYa
# nuGfbG2E0ETx3biogbVnpCW5xgsetR0Egf1Vg+MSpn+yBxRXDlGujDQNzv1TZTyL
# 70LC6Z58YFZxSDDk3MYpr57CxVcwFa3RoCqBs0JtJ10bPx6+tZAFfL45gkxDiy5O
# FhYCBev6LD0yzJIMsH8KCN8JTcnJ+GAAJnp5MPGidwkpo2XEvrTxB7l67MR5rkxL
# pcu91sMtJViUVk+i8R1j3ghoQqnzgXMElIrMyX0MEH/LAqM0+4x/fVBqJtRPIQXG
# 4zfN8VlNeaC0EV6sdHl6qrJDh0pKDWtw5XnAc0b1ZZ6NrKY2QITrG9n8p6NkYquY
# CdED4SlGqdLNTCtf2+8sBJ80xfmxwzXF8m4L0T+Xqg2IjvZwl1g/Iv7caJ4m4fYw
# iQMCwgsbGgxsWJdeGSRtPmSMiK9X5y/oXOphxG2CWjKHZe5BCneoHNV112mZyrsI
# iYMg/hxEIBRkirBOmWps6cJdMnCTFkD1m11S1LFjMZ+GpCdfJoux89qkOlLMG4hl
# x/S6POO+iDkp9GufeUXz+jKyGX41X3izREDitFKBjzrH7I1h+mj1v9w7DKonlghl
# tTNOtPdtYVfXtCGo558rCxJw3qAXu70s1zTy91YVIJgrkI2WuU8XeIGQrbU=
# SIG # End signature block