ConsoleMonster.psm1

# ConsoleMonster bootstrapper
# Auto-generated by PowerForge. Do not edit.

# PowerForge script preamble begin

# PowerForge script preamble end

$PowerForgeModuleName = 'ConsoleMonster'
$PowerForgeModuleRoot = $PSScriptRoot
$PowerForgeModulePath = $PSCommandPath
$script:PowerForgeDesktopAssemblyResolver = $null
$script:PowerForgeDependencyCheck = $null
$PowerForgeModuleImportCompleted = $false
try {
    # The loader runs in its own scope, so its working variables do not stay in the module.
    & {
        # Load the precompiled PowerForge module loader built for this PowerShell edition.
        if (-not ('PowerForge.ModuleLoader.V1.SharedAssemblyPolicy' -as [type])) {
            $PowerForgeLoaderEdition = if ($PSEdition -eq 'Core') {
                'Core' 
            } else {
                'Desktop' 
            }
            $PowerForgeLoaderPath = [IO.Path]::Combine($PowerForgeModuleRoot, 'Loader', $PowerForgeLoaderEdition, 'PowerForge.ModuleLoader.V1.dll')
            try {
                Add-Type -Path $PowerForgeLoaderPath -ErrorAction Stop
            } catch {
                # Another runspace can load the same loader between the probe and Add-Type.
                if (-not ('PowerForge.ModuleLoader.V1.SharedAssemblyPolicy' -as [type])) {
                    throw
                }
            }
        }
        # Export assemblies for this host, resolved from the Lib layout when the module was built.
        $BinaryModules = if ($PSEdition -eq 'Core') {
            @(
                @{ Name = 'ConsoleMonster.PowerShell.dll'; Path = 'Lib/Core/ConsoleMonster.PowerShell.dll' }
            )
        } else {
            @(
                @{ Name = 'ConsoleMonster.PowerShell.dll'; Path = 'Lib/Default/ConsoleMonster.PowerShell.dll' }
            )
        }
        $BinaryModulePaths = [string[]]@(foreach ($BinaryModule in $BinaryModules) {
                if ($BinaryModule['Path']) {
                    $BinaryModule.Path = [IO.Path]::GetFullPath([IO.Path]::Combine($PowerForgeModuleRoot, $BinaryModule.Path))
                    if ([IO.File]::Exists($BinaryModule.Path)) {
                        $BinaryModule.Path
                    } else {
                        # A file removed after the build fails on its own instead of breaking the group of every export.
                        $BinaryModule.Error = "Configured binary module '$($BinaryModule.Name)' was not found at '$($BinaryModule.Path)'."
                    }
                }
            })
        $BinaryModuleDirectories = [string[]]@($BinaryModulePaths | ForEach-Object { [IO.Path]::GetDirectoryName($_) } | Select-Object -Unique)
        if ($PSEdition -ne 'Core' -and $BinaryModuleDirectories.Count -gt 0) {
            # Windows PowerShell holds one copy of an assembly without a strong name per session. Reuse a compatible
            # copy another module already loaded and say so; stop here with one clear message when it cannot work.
            $script:PowerForgeDependencyCheck = [PowerForge.ModuleLoader.V1.DependencyConflictCheck]::Evaluate(
                $PowerForgeModuleName,
                $PowerForgeModuleRoot,
                $BinaryModuleDirectories,
                [string[]]@())
            foreach ($DependencyWarning in $PowerForgeDependencyCheck.Warnings) {
                Write-Warning -Message $DependencyWarning
            }
            if ($null -ne $PowerForgeDependencyCheck.Error) {
                throw $PowerForgeDependencyCheck.Error
            }
            # AssemblyResolve also runs on worker threads that have no runspace, so the handler is compiled
            # code from the PowerForge loader and is limited to this module's own binary folders.
            $script:PowerForgeDesktopAssemblyResolver = [PowerForge.ModuleLoader.V1.DesktopAssemblyResolver]::new($BinaryModuleDirectories, [string[]]@())
            $PowerForgeDesktopAssemblyResolver.Register()
            $DesktopAssemblyResolver = $PowerForgeDesktopAssemblyResolver
            $PreviousOnRemove = $ExecutionContext.SessionState.Module.OnRemove
            $ExecutionContext.SessionState.Module.OnRemove = {
                try {
                    $DesktopAssemblyResolver.Unregister()
                } finally {
                    if ($null -ne $PreviousOnRemove) {
                        & $PreviousOnRemove @args
                    }
                }
            }.GetNewClosure()
        }
        $LibrariesScript = [IO.Path]::Combine($PowerForgeModuleRoot, 'ConsoleMonster.Libraries.ps1')
        if ($PSEdition -ne 'Core' -and (Test-Path -LiteralPath $LibrariesScript)) {
            # Windows PowerShell loads the dependencies before the module assemblies that need them.
            . $LibrariesScript
        }
        $ImportModule = Get-Command -Name Import-Module -Module Microsoft.PowerShell.Core
        $LoadedDirectories = [Collections.Generic.List[string]]::new()
        foreach ($BinaryModule in $BinaryModules) {
            try {
                if ($BinaryModule['Error']) {
                    throw $BinaryModule['Error']
                }
                $ModuleAssemblyPath = $BinaryModule.Path
                $LibraryDirectory = [IO.Path]::GetDirectoryName($ModuleAssemblyPath)
                if ($PSEdition -eq 'Core') {
                    $ModuleAssembly = [PowerForge.ModuleLoader.V1.ModuleAssemblyLoadContext]::LoadModuleFromGroup(
                        [string[]]$BinaryModulePaths,
                        $ModuleAssemblyPath,
                        'ConsoleMonster',
                        [string[]]@())
                    # On a repeat import (Import-Module -Force, or after Remove-Module) PowerShell returns its cached module
                    # for this assembly without importing the commands here. Drop the cached copy so they import again.
                    foreach ($StaleModule in @(Get-Module -All | Where-Object { [object]::ReferenceEquals($_.ImplementingAssembly, $ModuleAssembly) })) {
                        Remove-Module -ModuleInfo $StaleModule -Force -ErrorAction SilentlyContinue
                    }
                    $InnerModule = & $ImportModule -Assembly $ModuleAssembly -Force -PassThru -ErrorAction Stop
                    # Type accelerators resolve from the module AssemblyLoadContext through the precompiled loader.
                    try {
                        $PowerForgeTypeAcceleratorRegistration = [PowerForge.ModuleLoader.V1.TypeAcceleratorRegistration]::RegisterFromLoadContext(
                            $ModuleAssembly,
                            $LibraryDirectory,
                            'AllowList',
                            [string[]]@('ConsoleMonster.Terminal', 'ConsoleMonster.Layout.IWidget', 'ConsoleMonster.Styling.Color', 'ConsoleMonster.Styling.RichColor', 'ConsoleMonster.Styling.Style', 'ConsoleMonster.Styling.RichStyle', 'ConsoleMonster.Styling.Theme', 'ConsoleMonster.Styling.ThemeToken', 'ConsoleMonster.Styling.StatusKind', 'ConsoleMonster.Text.RichText', 'ConsoleMonster.Interactive.InteractionMode', 'ConsoleMonster.Interactive.CommandLine', 'ConsoleMonster.Live.SimulatedClock', 'ConsoleMonster.Live.LiveEvent', 'ConsoleMonster.Capabilities.GlyphTier', 'ConsoleMonster.Capabilities.ColorDepth'),
                            [string[]]@(),
                            $PowerForgeModuleName,
                            $PSScriptRoot)
                        # Track the registration before writing messages: a warning that stops ($WarningPreference = Stop) must not
                        # leave accelerators nobody releases. A failed import releases them in the bootstrapper.
                        if ($null -eq $script:PowerForgeTypeAcceleratorRegistrations) {
                            $script:PowerForgeTypeAcceleratorRegistrations = [System.Collections.Generic.List[object]]::new()
                            $PowerForgeTypeAcceleratorRegistrations = $script:PowerForgeTypeAcceleratorRegistrations
                            if ($null -ne $ExecutionContext.SessionState.Module) {
                                # Remove-Module releases this module's accelerators; names another PowerForge module still owns stay.
                                $PreviousPowerForgeOnRemove = $ExecutionContext.SessionState.Module.OnRemove
                                $ExecutionContext.SessionState.Module.OnRemove = {
                                    try {
                                        foreach ($PowerForgeTypeAcceleratorOwner in $PowerForgeTypeAcceleratorRegistrations) {
                                            $PowerForgeTypeAcceleratorOwner.Unregister()
                                        }
                                    } finally {
                                        if ($null -ne $PreviousPowerForgeOnRemove) {
                                            & $PreviousPowerForgeOnRemove @args
                                        }
                                    }
                                }.GetNewClosure()
                            }
                        }
                        $script:PowerForgeTypeAcceleratorRegistrations.Add($PowerForgeTypeAcceleratorRegistration)
                        foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.Warnings) {
                            Write-Warning -Message $PowerForgeTypeAcceleratorMessage
                        }
                        foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.VerboseMessages) {
                            Write-Verbose -Message $PowerForgeTypeAcceleratorMessage
                        }
                    } catch {
                        Write-Warning -Message "ALC type accelerator registration failed: $($_.Exception.Message)"
                    }
                    if ($InnerModule) {
                        # The loader runs in its own scope, where Import-Module leaves the imported module's aliases.
                        # Define them on the module so its exports publish them.
                        foreach ($ImportedAlias in @($InnerModule.ExportedAliases.Values)) {
                            Set-Alias -Name $ImportedAlias.Name -Value $ImportedAlias.Definition -Scope Script -Force
                        }
                        # Import-Module -Assembly inside this script module imports the inner binary module as a nested module,
                        # so its cmdlets and aliases are visible here and Export-ModuleMember can publish them on this module.
                        $PowerForgeOuterModule = $ExecutionContext.SessionState.Module
                        $PowerForgeIsModuleWrapper = $false
                        if ($null -ne $PowerForgeOuterModule -and
                            -not [string]::IsNullOrWhiteSpace($PowerForgeOuterModule.Path) -and
                            -not [string]::IsNullOrWhiteSpace($PSCommandPath)) {
                            try {
                                [StringComparison] $PowerForgePathComparison = & {
                                    param([string] $PowerForgeProbePath)

                                    # Case behavior belongs to the containing filesystem. Windows can opt individual
                                    # directories into case sensitivity, while macOS volumes may be case-insensitive.
                                    # Inspect existing names without requiring write access; ambiguity fails closed.
                                    try {
                                        $PowerForgeProbeDirectory = [IO.Path]::GetDirectoryName([IO.Path]::GetFullPath($PowerForgeProbePath))
                                        $PowerForgeNames = New-Object 'System.Collections.Generic.HashSet[string]' ([StringComparer]::Ordinal)
                                        foreach ($PowerForgeEntry in [IO.Directory]::EnumerateFileSystemEntries($PowerForgeProbeDirectory)) {
                                            [void] $PowerForgeNames.Add([IO.Path]::GetFileName($PowerForgeEntry))
                                        }

                                        foreach ($PowerForgeName in $PowerForgeNames) {
                                            foreach ($PowerForgeAlternateName in @($PowerForgeName.ToUpperInvariant(), $PowerForgeName.ToLowerInvariant())) {
                                                if ([string]::Equals($PowerForgeName, $PowerForgeAlternateName, [StringComparison]::Ordinal) -or
                                                    $PowerForgeNames.Contains($PowerForgeAlternateName)) {
                                                    continue
                                                }

                                                $PowerForgeAlternatePath = [IO.Path]::Combine($PowerForgeProbeDirectory, $PowerForgeAlternateName)
                                                if ([IO.File]::Exists($PowerForgeAlternatePath) -or [IO.Directory]::Exists($PowerForgeAlternatePath)) {
                                                    return [StringComparison]::OrdinalIgnoreCase
                                                }

                                                return [StringComparison]::Ordinal
                                            }
                                        }
                                    } catch {
                                        # Ordinal comparison prevents an uncertain probe from exporting into a caller.
                                    }

                                    return [StringComparison]::Ordinal
                                } $PSCommandPath
                                $PowerForgeIsModuleWrapper = [string]::Equals(
                                    [IO.Path]::GetFullPath($PowerForgeOuterModule.Path),
                                    [IO.Path]::GetFullPath($PSCommandPath),
                                    $PowerForgePathComparison
                                )
                            } catch {
                                $PowerForgeIsModuleWrapper = $false
                            }
                        }
                        if (-not $PowerForgeIsModuleWrapper) {
                            # A Script/ScriptPacked entry point, including one dot-sourced by another module, must not mutate
                            # that caller's export table. The imported inner module's commands remain available to this script.
                        } else {
                            Export-ModuleMember -Cmdlet ([string[]]@($InnerModule.ExportedCmdlets.Keys)) -Alias ([string[]]@($InnerModule.ExportedAliases.Keys))
                        }
                    }
                } else {
                    $InitializeType = "$([IO.Path]::GetFileNameWithoutExtension($ModuleAssemblyPath)).Initialize" -as [type]
                    $InnerModule = if ($InitializeType) {
                        & $ImportModule -Force -Assembly $InitializeType.Assembly -PassThru
                    } else {
                        & $ImportModule $ModuleAssemblyPath -PassThru -ErrorAction Stop
                    }
                    if ($InnerModule) {
                        # The loader runs in its own scope, where Import-Module leaves the imported module's aliases.
                        # Define them on the module so its exports publish them.
                        foreach ($ImportedAlias in @($InnerModule.ExportedAliases.Values)) {
                            Set-Alias -Name $ImportedAlias.Name -Value $ImportedAlias.Definition -Scope Script -Force
                        }
                    }
                }
                if (-not $LoadedDirectories.Contains($LibraryDirectory)) {
                    $LoadedDirectories.Add($LibraryDirectory)
                }
            } catch {
                # A caller that does not stop on errors keeps the other export assemblies of the module.
                if ($ErrorActionPreference -eq 'Stop') {
                    throw
                }
                Write-Warning -Message "Importing module $($BinaryModule.Name) failed. Fix errors before continuing. Error: $($_.Exception.Message)"
            }
        }
        foreach ($LoadedDirectory in $LoadedDirectories) {
            if ($PSEdition -ne 'Core') {
                # Desktop loads module dependencies into the default AppDomain, so expose the same configured scripting types as Core.
                try {
                    $PowerForgeTypeAcceleratorRegistration = [PowerForge.ModuleLoader.V1.TypeAcceleratorRegistration]::RegisterFromDirectory(
                        ($LoadedDirectory),
                        'AllowList',
                        [string[]]@('ConsoleMonster.Terminal', 'ConsoleMonster.Layout.IWidget', 'ConsoleMonster.Styling.Color', 'ConsoleMonster.Styling.RichColor', 'ConsoleMonster.Styling.Style', 'ConsoleMonster.Styling.RichStyle', 'ConsoleMonster.Styling.Theme', 'ConsoleMonster.Styling.ThemeToken', 'ConsoleMonster.Styling.StatusKind', 'ConsoleMonster.Text.RichText', 'ConsoleMonster.Interactive.InteractionMode', 'ConsoleMonster.Interactive.CommandLine', 'ConsoleMonster.Live.SimulatedClock', 'ConsoleMonster.Live.LiveEvent', 'ConsoleMonster.Capabilities.GlyphTier', 'ConsoleMonster.Capabilities.ColorDepth'),
                        [string[]]@(),
                        [string[]]@(),
                        $PowerForgeModuleName,
                        $PSScriptRoot)
                    # Track the registration before writing messages: a warning that stops ($WarningPreference = Stop) must not
                    # leave accelerators nobody releases. A failed import releases them in the bootstrapper.
                    if ($null -eq $script:PowerForgeTypeAcceleratorRegistrations) {
                        $script:PowerForgeTypeAcceleratorRegistrations = [System.Collections.Generic.List[object]]::new()
                        $PowerForgeTypeAcceleratorRegistrations = $script:PowerForgeTypeAcceleratorRegistrations
                        if ($null -ne $ExecutionContext.SessionState.Module) {
                            # Remove-Module releases this module's accelerators; names another PowerForge module still owns stay.
                            $PreviousPowerForgeOnRemove = $ExecutionContext.SessionState.Module.OnRemove
                            $ExecutionContext.SessionState.Module.OnRemove = {
                                try {
                                    foreach ($PowerForgeTypeAcceleratorOwner in $PowerForgeTypeAcceleratorRegistrations) {
                                        $PowerForgeTypeAcceleratorOwner.Unregister()
                                    }
                                } finally {
                                    if ($null -ne $PreviousPowerForgeOnRemove) {
                                        & $PreviousPowerForgeOnRemove @args
                                    }
                                }
                            }.GetNewClosure()
                        }
                    }
                    $script:PowerForgeTypeAcceleratorRegistrations.Add($PowerForgeTypeAcceleratorRegistration)
                    foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.Warnings) {
                        Write-Warning -Message $PowerForgeTypeAcceleratorMessage
                    }
                    foreach ($PowerForgeTypeAcceleratorMessage in $PowerForgeTypeAcceleratorRegistration.VerboseMessages) {
                        Write-Verbose -Message $PowerForgeTypeAcceleratorMessage
                    }
                } catch {
                    Write-Warning -Message "Desktop type accelerator registration failed: $($_.Exception.Message)"
                }
            }
        }
        if ($null -ne $PowerForgeDesktopAssemblyResolver) {
            $PowerForgeDesktopAssemblyResolver.BootstrapActive = $false
        }
    }
    # PowerForge script payload begin

    # PowerForge script payload end
    # PowerForge exports begin
    $FunctionsToExport = @()
    $CmdletsToExport = @('Add-ConsoleJobSummary', 'Add-ConsoleRecordingMarker', 'Assert-ConsoleOutput', 'Compare-ConsoleObject', 'Compare-ConsoleText', 'Complete-ConsoleRun', 'ConvertTo-ConsoleView', 'Disable-ConsoleFormatting', 'Enable-ConsoleFormatting', 'Export-ConsoleFrame', 'Export-ConsoleRecording', 'Export-ConsoleTheme', 'Get-ConsoleCapability', 'Get-ConsoleDemo', 'Get-ConsoleFormatting', 'Get-ConsoleSetting', 'Import-ConsoleTheme', 'Invoke-ConsoleDashboard', 'Invoke-ConsoleHeadless', 'Invoke-ConsolePester', 'Invoke-ConsoleRecording', 'Invoke-ConsoleRun', 'New-ConsoleAccordion', 'New-ConsoleActivityList', 'New-ConsoleBinding', 'New-ConsoleBreadcrumb', 'New-ConsoleButton', 'New-ConsoleCalendar', 'New-ConsoleCellMap', 'New-ConsoleChart', 'New-ConsoleChartView', 'New-ConsoleCollapsible', 'New-ConsoleColumns', 'New-ConsoleCommand', 'New-ConsoleDashboard', 'New-ConsoleDashboardFrame', 'New-ConsoleDataGrid', 'New-ConsoleDatePicker', 'New-ConsoleDiagram', 'New-ConsoleDiagramGroup', 'New-ConsoleDiagramLink', 'New-ConsoleDiagramNode', 'New-ConsoleDiagramStep', 'New-ConsoleDiagramUseCase', 'New-ConsoleDialog', 'New-ConsoleFacts', 'New-ConsoleField', 'New-ConsoleFlow', 'New-ConsoleForm', 'New-ConsoleImage', 'New-ConsoleKeyValue', 'New-ConsoleLanes', 'New-ConsoleLayoutGrid', 'New-ConsoleLogo', 'New-ConsoleLogRegion', 'New-ConsoleMenu', 'New-ConsoleMenuItem', 'New-ConsoleOutline', 'New-ConsolePanel', 'New-ConsoleProgress', 'New-ConsoleRegion', 'New-ConsoleRows', 'New-ConsoleRule', 'New-ConsoleScreen', 'New-ConsoleScrollView', 'New-ConsoleSelect', 'New-ConsoleSplitter', 'New-ConsoleStack', 'New-ConsoleStatusList', 'New-ConsoleSummaryBar', 'New-ConsoleTable', 'New-ConsoleTabs', 'New-ConsoleText', 'New-ConsoleTextInput', 'New-ConsoleToggle', 'New-ConsoleTree', 'New-ConsoleTreeSelect', 'Read-ConsoleConfirm', 'Read-ConsoleDate', 'Read-ConsoleForm', 'Read-ConsoleNumber', 'Read-ConsolePath', 'Read-ConsoleSelect', 'Read-ConsoleText', 'Register-ConsoleView', 'Reset-ConsoleSetting', 'Set-ConsoleFormValue', 'Set-ConsoleSetting', 'Set-ConsoleTheme', 'Show-Console', 'Show-ConsoleApp', 'Show-ConsoleDemo', 'Show-ConsoleDiagram', 'Show-ConsoleGrid', 'Show-ConsoleHelp', 'Show-ConsoleImage', 'Show-ConsoleMenu', 'Show-ConsoleObject', 'Show-ConsoleOverview', 'Show-ConsolePresentation', 'Show-ConsoleReplay', 'Show-ConsoleSetting', 'Show-ConsoleStatusLine', 'Show-ConsoleTable', 'Start-ConsoleRun', 'Stop-ConsoleRecording', 'Test-ConsoleTheme', 'Unregister-ConsoleView', 'Update-Console', 'Use-ConsoleGroup', 'Use-ConsoleProgress', 'Use-ConsoleTarget', 'Wait-ConsoleDashboard', 'Watch-Console', 'Watch-ConsoleLog', 'Write-ConsoleAnnotation', 'Write-ConsoleLogEntry', 'Write-ConsoleText')
    $AliasesToExport = @()
    Export-ModuleMember -Function $FunctionsToExport -Alias $AliasesToExport -Cmdlet $CmdletsToExport
    # PowerForge exports end
    $PowerForgeModuleImportCompleted = $true
} catch {
    # Windows PowerShell: a library reused from another module can still lack a type this module needs.
    # Report that as the same conflict the dependency check describes, not as a raw type-load error.
    if ($null -ne $script:PowerForgeDependencyCheck) {
        $PowerForgeLoadFailure = $script:PowerForgeDependencyCheck.ExplainLoadFailure($_.Exception)
        if ($null -ne $PowerForgeLoadFailure) {
            throw $PowerForgeLoadFailure
        }
    }
    throw
} finally {
    if (-not $PowerForgeModuleImportCompleted -and $null -ne $script:PowerForgeDesktopAssemblyResolver) {
        $script:PowerForgeDesktopAssemblyResolver.Unregister()
    }
    # A failed import never reaches OnRemove, so release the accelerators it registered here.
    if (-not $PowerForgeModuleImportCompleted -and $null -ne $script:PowerForgeTypeAcceleratorRegistrations) {
        foreach ($PowerForgeTypeAcceleratorOwner in $script:PowerForgeTypeAcceleratorRegistrations) {
            $PowerForgeTypeAcceleratorOwner.Unregister()
        }
        $script:PowerForgeTypeAcceleratorRegistrations.Clear()
    }
}

# SIG # Begin signature block
# MIIt7AYJKoZIhvcNAQcCoIIt3TCCLdkCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDOx0otaT6lgIk5
# MFzqBGCxYffC3xwRstKJVg47i+bQsqCCJukwggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwggWQMIIDeKADAgECAhAFmxtXno4hMuI5B72nd3VcMA0GCSqG
# SIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy
# dXN0ZWQgUm9vdCBHNDAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGIx
# CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
# dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH
# NDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIw
# aTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLK
# EdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4Tm
# dDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembu
# d8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnD
# eMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1
# XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVld
# QnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTS
# YW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSm
# M9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzT
# QRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6Kx
# fgommfXkaS+YHS312amyHeUbAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
# VR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwPTzANBgkq
# hkiG9w0BAQwFAAOCAgEAu2HZfalsvhfEkRvDoaIAjeNkaA9Wz3eucPn9mkqZucl4
# XAwMX+TmFClWCzZJXURj4K2clhhmGyMNPXnpbWvWVPjSPMFDQK4dUPVS/JA7u5iZ
# aWvHwaeoaKQn3J35J64whbn2Z006Po9ZOSJTROvIXQPK7VB6fWIhCoDIc2bRoAVg
# X+iltKevqPdtNZx8WorWojiZ83iL9E3SIAveBO6Mm0eBcg3AFDLvMFkuruBx8lbk
# apdvklBtlo1oepqyNhR6BvIkuQkRUNcIsbiJeoQjYUIp5aPNoiBB19GcZNnqJqGL
# FNdMGbJQQXE9P01wI4YMStyB0swylIQNCAmXHE/A7msgdDDS4Dk0EIUhFQEI6FUy
# 3nFJ2SgXUE3mvk3RdazQyvtBuEOlqtPDBURPLDab4vriRbgjU2wGb2dVf0a1TD9u
# KFp5JtKkqGKX0h7i7UqLvBv9R0oN32dmfrJbQdA75PQ79ARj6e/CVABRoIoqyc54
# zNXqhwQYs86vSYiv85KZtrPmYQ/ShQDnUBrkG5WdGaG5nLGbsQAe79APT0JsyQq8
# 7kP6OnGlyE0mpTX9iV28hWIdMtKgK1TtmlfB2/oQzxm3i0objwG2J5VT6LaJbVu8
# aNQj6ItRolb58KaAoNYes7wPD1N1KarqE3fk3oyBIa0HEEcRrYc9B9F1vM/zZn4w
# ggawMIIEmKADAgECAhAIrUCyYNKcTJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIx
# CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
# dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH
# NDAeFw0yMTA0MjkwMDAwMDBaFw0zNjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVT
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1
# c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIi
# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUz
# jOs9gZdwxbvEhSYwn6SOaNhc9es0JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnB
# kcyBAz5NcCRks43iCH00fUyAVxJrQ5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjw
# iuCdCcBlp/qYgEk1hz1RGeiQIXhFLqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJN
# TIIRSFJo3hC9FFdd6BgTZcV/sk+FLEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubK
# wvSnowMOdKWvObarYBLj6Na59zHh3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9
# RBqSEIGPsDsJ18ebMlrC/2pgVItJwZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+T
# YTRcvJNFKIM2KmYoX7BzzosmJQayg9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73
# rQgedaZlzLvjSFDzd5Ea/ttQokbIYViY9XwCFjyDKK05huzUtw1T0PhH5nUwjeww
# k3YUpltLXXRhTT8SkXbev1jLchApQfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+
# QEdfyYFQc4UQIyFZYIpkVMHMIRroOBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez
# +rbsjDIJAsxsPAxWEQIDAQABo4IBWTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAd
# BgNVHQ4EFgQUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJx
# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF
# BwMDMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln
# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j
# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo
# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy
# bDAcBgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOC
# AgEAOiNEPY0Idu6PvDqZ01bgAhql+Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9
# nqN8JtU3vDpdSG2V1T9J9Ce7FoFFUP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQ
# eYiaiorBtr2hSBh+3NiAGhEZGM1hmYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o
# 618moZVYSNUa/tcnP/2Q0XaG3RywYFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rp
# avGiPttDuDPITzgUkpn13c5UbdldAhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1v
# djcshT8azibpGL6QB7BDf5WIIIJw8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/Lhlc
# OXHhvpynCgbWJme3kuZOX956rEnPLqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+ag
# uv06P0WmxOgWkVKLQcBIhEuWTatEQOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzL
# j4gLDb879M4ee47vtevLt/B3E+bnKD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwH
# S6DTBwJqakAwSEs0qFEgu60bhQjiWQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VI
# IflXO7ScA+2GRfS0YW6/aOImYIbqyK+p/pQd52MbOoZWeE4wgga0MIIEnKADAgEC
# AhANx6xXBf8hmS5AQyIMOkmGMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVT
# MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
# b20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yNTA1MDcw
# MDAwMDBaFw0zODAxMTQyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5E
# aWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1l
# U3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTEwggIiMA0GCSqGSIb3DQEB
# AQUAA4ICDwAwggIKAoICAQC0eDHTCphBcr48RsAcrHXbo0ZodLRRF51NrY0NlLWZ
# loMsVO1DahGPNRcybEKq+RuwOnPhof6pvF4uGjwjqNjfEvUi6wuim5bap+0lgloM
# 2zX4kftn5B1IpYzTqpyFQ/4Bt0mAxAHeHYNnQxqXmRinvuNgxVBdJkf77S2uPoCj
# 7GH8BLuxBG5AvftBdsOECS1UkxBvMgEdgkFiDNYiOTx4OtiFcMSkqTtF2hfQz3zQ
# Sku2Ws3IfDReb6e3mmdglTcaarps0wjUjsZvkgFkriK9tUKJm/s80FiocSk1VYLZ
# lDwFt+cVFBURJg6zMUjZa/zbCclF83bRVFLeGkuAhHiGPMvSGmhgaTzVyhYn4p0+
# 8y9oHRaQT/aofEnS5xLrfxnGpTXiUOeSLsJygoLPp66bkDX1ZlAeSpQl92QOMeRx
# ykvq6gbylsXQskBBBnGy3tW/AMOMCZIVNSaz7BX8VtYGqLt9MmeOreGPRdtBx3yG
# OP+rx3rKWDEJlIqLXvJWnY0v5ydPpOjL6s36czwzsucuoKs7Yk/ehb//Wx+5kMqI
# MRvUBDx6z1ev+7psNOdgJMoiwOrUG2ZdSoQbU2rMkpLiQ6bGRinZbI4OLu9BMIFm
# 1UUl9VnePs6BaaeEWvjJSjNm2qA+sdFUeEY0qVjPKOWug/G6X5uAiynM7Bu2ayBj
# UwIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU729T
# SunkBnx6yuKQVvYv1Ensy04wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4c
# D08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUF
# BwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEG
# CCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRU
# cnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5k
# aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAX
# MAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBABfO+xaA
# HP4HPRF2cTC9vgvItTSmf83Qh8WIGjB/T8ObXAZz8OjuhUxjaaFdleMM0lBryPTQ
# M2qEJPe36zwbSI/mS83afsl3YTj+IQhQE7jU/kXjjytJgnn0hvrV6hqWGd3rLAUt
# 6vJy9lMDPjTLxLgXf9r5nWMQwr8Myb9rEVKChHyfpzee5kH0F8HABBgr0UdqirZ7
# bowe9Vj2AIMD8liyrukZ2iA/wdG2th9y1IsA0QF8dTXqvcnTmpfeQh35k5zOCPmS
# Nq1UH410ANVko43+Cdmu4y81hjajV/gxdEkMx1NKU4uHQcKfZxAvBAKqMVuqte69
# M9J6A47OvgRaPs+2ykgcGV00TYr2Lr3ty9qIijanrUR3anzEwlvzZiiyfTPjLbnF
# RsjsYg39OlV8cipDoq7+qNNjqFzeGxcytL5TTLL4ZaoBdqbhOhZ3ZRDUphPvSRmM
# Thi0vw9vODRzW6AxnJll38F0cuJG7uEBYTptMSbhdhGQDpOXgpIUsWTjd6xpR6oa
# Qf/DJbg3s6KCLPAlZ66RzIg9sC+NJpud/v4+7RWsWCiKi9EOLLHfMR2ZyJ/+xhCx
# 9yHbxtl5TPau1j/1MIDpMPx0LckTetiSuEtQvLsNz3Qbp7wGWqbIiOWCnb5WqxL3
# /BAPvIXKUjPSxyZsq8WhbaM2tszWkPZPubdcMIIG7TCCBNWgAwIBAgIQCE/cM09+
# RU7bww+P+ZIYNTANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzEXMBUGA1UE
# ChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQg
# VGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExMB4XDTI2MDgwNTAw
# MDAwMFoXDTM3MTEwNDIzNTk1OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRp
# Z2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBTSEEyNTYgUlNBNDA5NiBU
# aW1lc3RhbXAgUmVzcG9uZGVyIDIwMjYgMTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBALZ7pvLJ/s1K+NSbTGWz/TjGMPh8CQ6RucZCLv5anHzWJjF/NWJr
# FIhy24fcpKXlgRiky4WAawDfU3YP0BMxt9l3Dm5oCG5Z69AqEN1kgHg2epx+l+lZ
# BcmJCcN0ASURML5uFIS80sZsDwO3BSkUxDjLJhBI+qiZP3aixAC/qEGLjsBNlLol
# 9VZ7pfGEXiMlneJIC5/YKuizVzNFKZZEeoy/0B8Zm+nzKBgSWG52lCO1w+nCg6Xp
# CtklTJXeIg283hw7TmmsZXR+SMbjbrEOvZ3fP2VxIgeR28Y90ZStd3F9VuA5RVyn
# b/whITPAo9b75Zr4Ta6Mj3URm26QZYMn/FnbuTegcoRcFEZ9FOqM5T6MTdtr/n74
# lIT/ug0eeOzmZ6QTFg33otX+bFRsIolvykE1jive4PuESaT8zzVeFWDAMDtozNgL
# ctkGD1ZjkEyZtJrLl5ya0m5doH/ScpaZCZVl6pNUOCybMc/kxC6EAmSJY24L0yYK
# D1Nkddsnb/ItVKi/2nXpQNMu1PT5prW83vV8d67WowuUs0HdY4H8AMLGvdL/WHEj
# 3ZnqMqAQQP9u3Ai9t+5eQ02GDwy0ODjdzi0xlp70W+ow63/0++YDEX1M0iwgUHwb
# rJvfpklkZQvw3+kv3vUPItdwroczk9icflf55W1zOEKAcJVAIXpcMCU9AgMBAAGj
# ggGVMIIBkTAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQUyWOKMC7USvtulPPm40B+
# 9ezN4jAfBgNVHSMEGDAWgBTvb1NK6eQGfHrK4pBW9i/USezLTjAOBgNVHQ8BAf8E
# BAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwgZUGCCsGAQUFBwEBBIGIMIGF
# MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXQYIKwYBBQUH
# MAKGUWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRH
# NFRpbWVTdGFtcGluZ1JTQTQwOTZTSEEyNTYyMDI1Q0ExLmNydDBfBgNVHR8EWDBW
# MFSgUqBQhk5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVk
# RzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAyNUNBMS5jcmwwIAYDVR0gBBkw
# FzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4ICAQCNxTph
# Hp1SCt+ZrAmAfn0oQLFr0mLywSLaDXQIENoyKqxrFbJblzCVP/pkXmwXOdrOpWyg
# LzlT12os5ipDCy35RBCg2UMeApEtrfGhz45F4Wt4WGdNdIbRWt3YTYJmpR+b7lr4
# d7Uwn+H600u4D7RnOGf8Wj4UNgAdZkfHhHv1mx9EVh71SJelcEN/oORSjXzdjfw1
# iZH9d8Nh/thn6hH23d+VsPAr6GAYyzSA02nXD1nYLI7Ijmiv+xLCiYC41DSFYL3G
# hTiy0PxpawPtGRyaBVGzq+UiTfM8pD7KVyF5aQyWP4KhVGUUTnmm/RlYJoW3TiXA
# /+t0YcT2oRVBm3JETjajHug2AL+v5jhtKVnd3D0rbHXEu27o+Q8p4sEWPMqKDB+q
# bceb6T/6WcwTwXmQ9lOCLLYcsQeSWmvKqzpAec9etE14jOQAzLKWdE3w/TCaKtLR
# aRT7LCkRYVnhA2D73FLje1O5b3HR5eHs0NzU/+xX7NbEdcofy0W3Wdwd1XOqtlpg
# /JgwtKfZM5dqO94lbUveOiJBI+xZEbGRsMNbXmMREUTgu+Oca7Y73MPWcslIx2Vh
# kSKSXjDbD6rgg39H5Mh7QfieAIjWagkJNt68Yfim6cjEzVSiLSeZfdkr5dtFPTW6
# jATlWJdYeeDRGCyatf8R1hSjzSvdN8yWQPT9gzCCB2MwggVLoAMCAQICEAhTOt+G
# wz3QWpc3Z3ZgARUwDQYJKoZIhvcNAQELBQAwaTELMAkGA1UEBhMCVVMxFzAVBgNV
# BAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0
# IENvZGUgU2lnbmluZyBSU0E0MDk2IFNIQTM4NCAyMDIxIENBMTAeFw0yNTEyMjYw
# MDAwMDBaFw0yODEyMjcyMzU5NTlaMGsxCzAJBgNVBAYTAlBMMRIwEAYDVQQHDAlN
# aWtvxYLDs3cxIzAhBgNVBAoTGkV2b3RlYyBTZXJ2aWNlcyBzcC4geiBvLm8uMSMw
# IQYDVQQDExpFdm90ZWMgU2VydmljZXMgc3AuIHogby5vLjCCAiIwDQYJKoZIhvcN
# AQEBBQADggIPADCCAgoCggIBANxbP/C0CFW8Z1gxi5+MxwMPmc5G8c3fIiV9S9FY
# Lic5MEFf2hrQJ2PIx/Xf7bsfkuk0cSeUTnTL/sZYI9U9Hjah1EAxSvryILnhjoyZ
# eedLTjOJkyWjoIs8cquJ8QAJgGYW8xhYp4e52MQGv8nHFkytFLebmrNJ88czDh4F
# 5+UvvYovOkxJ68kvAXU0MMdiF3SOLii+gWQRcmRFQNghMJo4jS0jDfp7EzKN5GHY
# iNbT5/xc1H16olQHZ37kIzGQlCel9+hTnPxf94eVouHo+HOQWlC55nujZAGFkID1
# h9EuRFCpPfapQVKmKSH8kxcJ1Ml11VQOE2HvFuMnOzE0DTq4qUSY7OZa5ddPXz5e
# usNIwiIVEIXfKZD+UHRZkmdoSEGoCNVJHLRDTEKxnNJeaGKihE/K+DgeCYVipITP
# 5MOwgG5nvOxILPs7CmxqaEGH9iT/xuJ4wiiBtLmvJiyJlHUOsVj0GtTdxMP5jjg2
# tIWVRAMkLRsfqSz31c9DbENEh7n8u6qqWAW3U2pWktY1i0PZt9vwfJnboZQnP91h
# +Lee9/3YGnVyXq6J/x0TkBD9tg3CD5cTBDtA3MyDYQ4AYkYoToj6QP8fJnecOHx7
# 8UuU+f3N//gAfAu1UR3cM044N3Btm6IuyaXaRrFCro8L0nAV0WFMGz/W1FWnqTfT
# SQ/XAgMBAAGjggIDMIIB/zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfRO
# QjAdBgNVHQ4EFgQUehhCwq/shewf/KCCM+q+nhvZG/wwPgYDVR0gBDcwNTAzBgZn
# gQwBBAEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BT
# MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGt
# MIGqMFOgUaBPhk1odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVz
# dGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZN
# aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNp
# Z25pbmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGE
# MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUH
# MAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRH
# NENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAw
# DQYJKoZIhvcNAQELBQADggIBAD/YXkCSn1GzVQkE3O/LO2XlSbJYUNUFpAN4F4JZ
# qAjQN1KCIdzWBPCOA844XDWo3fZox3sO/KF0tXVF2QeD7scK5bpd2gVE0tTqsWO0
# 9wR5VvzBHWZI3vWk6JfBT8pZK3++7iqpOYtZPQFYhHCk0pKqwL8K5ajrSRNoXcKK
# VK8+ITMgVuwKqRtYpCs3VjX/kEPZtVTXAOLWB875hcuaqWhHye199ZCtuV0xgp4k
# v1Euk42sN4s5nuFgS0M3ZTAAujJLSFsKnbGv086tbBiOjj/ntPwbKd2jwZu1MDSK
# rZjvKRvUvU2sK4xVu185n5Lfz4CU6j7XRVFAYYYDxvYfMJ9ABKiZgl5o++PPx66d
# gLxDKNC30YIAnQXgExaFEp1u5OCEQNJ/VmYjwl8SRvMy4A20sb9bczlFww8tpRb6
# 2WCRdhZck7rPLsPBjQgvkreachnOQAO8hMY5R4i9t88vBVq+cxj3tg0PMgqv7MWO
# mrgzBeTow7twTnSU9w1SgVoUi39M7t8pwX1E6xJQiJL+SFlBH+AJK0iByN7YZjW7
# 65xxum54/kolZb9hgWiGQABNQMBHhEGYG8LLuLdBotIFs4sL+aP7IJv5N0mierbK
# N5ROlavUwY4YIVqQSj+c1BU+f+uljQkZ5YFFt1y8oiYvTHkUkLYjL8cHVLvxTzsT
# Nd1ZMYIGWTCCBlUCAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNl
# cnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWdu
# aW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAIUzrfhsM90FqXN2d2YAEVMA0G
# CWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZI
# hvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC
# ARUwLwYJKoZIhvcNAQkEMSIEIIHqt+pzEJYnHE4+sIMQFsaxk6YdwlvPWvMfrk9W
# h70BMA0GCSqGSIb3DQEBAQUABIICAHJ4/vAjmuyRqccldJUTiPdroUEsXR7sUMNn
# JpYtMSjgZZPg+DszDnLlh7XCSsl7/xfbJ0R8DP7lefml4u10QntRI51QfVOm/lRu
# mt5M0iBH16Zjxs5OEkgChfx4/gSBVx/MTWfn8WyClegE93RY48HV0QgHKiDPyieK
# K3AFyLn47o6bTAekYSQ0xX3VaHYUfx6izDggLVKyk7HuFFgBFQsy+q2IijwGH8ih
# WdOA39nA6A97wkz933x+c371dZyuSgNujjF9yYAihv2VVrBPMzzRuPu1ST7gKExL
# ZiaO1nok498bZ0wMdC83gKwOD/3aO+UcMTBDAHCyzR2Mb2MsI90+kHPmrHs9AhA+
# 3YpFSPwpSyyr2BgBtU1tyRRIhS8U7my0Z39tMM0P6vwsTCKquRH7V2Op/rMEQKOZ
# mqyx406vL5Jx4wtkBBT+RVj1d5hiAd+5ROeuYcuM01gH7vAJS/IvAJRv8MfCQ3Gk
# Qs533Tn0gLX8MLrl8OcUmSdBCmeM1R42DD+LYk+g3qyUjeFWcfM0jc70n/ekbn3v
# Fyr+5KHkKeHncTwH+bp4dGddbUDpDVStldFUkeNl6tdsNScXW/X+67h8d0XsgJB4
# xWtK8RIRdbQaRJIBrmqt6ZXygS6JDaaUJTMeyGz8BdVnwQKCSaTnWw/DA1Vyo5Iu
# 9SLELlWeoYIDJjCCAyIGCSqGSIb3DQEJBjGCAxMwggMPAgEBMH0waTELMAkGA1UE
# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2Vy
# dCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENB
# MQIQCE/cM09+RU7bww+P+ZIYNTANBglghkgBZQMEAgEFAKBpMBgGCSqGSIb3DQEJ
# AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI2MTExMzIwMzY1NlowLwYJ
# KoZIhvcNAQkEMSIEIBgqviY82AKoxecAqBoDY7JntYUjeFHGjMgIWUY1EZaMMA0G
# CSqGSIb3DQEBAQUABIICAHdhTF1ocW9oGQ7Gv8FUDRdSPoKLMEX35i7VQTbU4DuF
# 2cmwa/LVfw+YDZUqJumI72u9T6K3gEskeb/cYcNuaM3E2HeKdWhyXUhYLCiAdOZz
# tvg7yockNtvPVgBZzlaSa5S/4cqQewtGZNHwNr/qtarMEH1Dsj9v3u/9mCCNSOdO
# tzmrC2+LF368E+Gj4qMJkALnd2alJ2udrq2bDHI/W917CwGl3bRqQ/ZBF1BLfbOJ
# Tq8kNcpDbJPlZlAP/wFfYy78MTu6IG8te5OOE0e4L7uA5eXc6yTDzIVg2eXDOlQl
# ButKfQdErE1UP9hlddNx3e/s4MqTTRRqK7PrNYb/HDtV/JEQZ+HRa7LaFXNBGCU8
# efnpoPoAH9nImOpqoP3dWePAadrokxGRbTdSihartMgjDsOco95gAZUQVKUhLu2l
# MFnX1sUKJFUX6vzIDM6/IYwPxrM+F5uW4XFOVIZlJAdsAnDRN5bh31X4siMmNXrh
# EzqBdUKkR2kPZVhDHCQEHYN3U2h8jlGe2Y3ioG0N7QVS5D+MxO32QXtKrnPrLz+B
# 2SJHVCYf2DgREuMzSfcgOhjANqZhWOmchn5wFXlDEJsECOB4cXpjZp479jF53CgD
# pEytXc9IAF1AQhNtwx64LMK7lHHee1+XPqE01S1YVKGzSr7ETd8l53vwVONDmWIa
# SIG # End signature block