modules/AzStack.Insights/rules/locale/AzStackHci.DiagnosticSettings.OsConfig.HealthCheck.psd1

@{
    # Default message used when a non-healthy section did not carry its own upstream Message.
    DefaultErrorMessage = "OS configuration health check '{0}' reported a non-healthy result."
    Evaluated           = "Health section '{0}' result '{1}' mapped to status '{2}'."

    # Stable identity used for any section name not present in the table below (future / unknown sections).
    Fallback = @{
        Id          = "89082729-14bc-4847-b4e1-c176b2be66cf"
        Name        = "OS Configuration Health Check"
        Description = "An OS configuration health section reported by Get-AzStackHciOsConfigSettings that is not yet individually modelled by this consumer."
        ErrorCode   = "AzLocal_OsConfig_HealthCheckFailed"
        Remediation = "Review the named health section in the AzStackHci.DiagnosticSettings report and follow the guidance in the upstream message to remediate the affected node(s), then re-run the check."
    }

    # Stable SectionName (top-level summary property) -> rule identity + remediation. GUIDs are fixed so
    # cache keys / report anchors are deterministic across runs. Severity/Result are supplied by the upstream
    # module per section and are not re-declared here.
    Sections = @{
        ArcAgentHealth = @{
            Id          = "1310a1b7-015a-4e4b-a90d-b54b9abc24e3"
            Name        = "Arc Agent Health"
            Description = "Reports the health of the Azure Connected Machine (Arc) agent across the cluster node(s)."
            ErrorCode   = "AzLocal_OsConfig_ArcAgentUnhealthy"
            Remediation = "Investigate the Azure Connected Machine agent on the affected node(s). Confirm the 'himds' service is running and the agent status is 'Connected' (azcmagent show). Restart the agent or re-onboard the node if it is disconnected, then re-run the check."
        }
        NonMicrosoftServices = @{
            Id          = "82b90d20-f68c-4307-bc65-9dc5378e80f2"
            Name        = "Non-Microsoft Services"
            Description = "Reports non-Microsoft Windows services present on the cluster node(s), to provide details of third-party software components."
            ErrorCode   = "AzLocal_OsConfig_NonMicrosoftServicesPresent"
            Remediation = "Review the listed non-Microsoft services to identify the third-party software components (backup, AV, monitoring, etc.) installed on the node(s). Azure Local expects a clean, validated software baseline; confirm each third-party agent is expected and supported for your configuration, then re-run the check."
        }
        StorageHealth = @{
            Id          = "03270b48-b5e1-4bba-ad9c-6e4d984c63d3"
            Name        = "Storage Health"
            Description = "Reports the storage subsystem health (Storage Spaces Direct / physical disks) as summarised by the OS configuration check."
            ErrorCode   = "AzLocal_OsConfig_StorageUnhealthy"
            Remediation = "Investigate the storage subsystem on the affected node(s). Review Get-StorageSubSystem / Get-PhysicalDisk / Get-VirtualDisk health and any active Storage Health faults, replace or retire failed disks, and allow repair jobs to complete, then re-run the check."
        }
        KeyServicesHealth = @{
            Id          = "11880106-defc-4c3a-8790-91158bc93926"
            Name        = "Key Services Health"
            Description = "Reports the state of key Windows services required for Azure Local cluster operation across the node(s)."
            ErrorCode   = "AzLocal_OsConfig_KeyServicesUnhealthy"
            Remediation = "Review the key services flagged as not running / not in their expected start state. Start the affected service(s) and set the correct startup type, investigate why they stopped (event logs), then re-run the check."
        }
        StabilityEvents = @{
            Id          = "b0b5b586-c8b1-4b2c-89d6-39a0027a431f"
            Name        = "Stability Events"
            Description = "Reports recent system stability events (unexpected reboots, bugchecks, critical errors) observed on the cluster node(s)."
            ErrorCode   = "AzLocal_OsConfig_StabilityEventsDetected"
            Remediation = "Investigate the reported stability events (unexpected shutdowns / bugchecks) on the affected node(s). Correlate with the System event log and any memory.dmp, engage the hardware vendor for recurring bugchecks, and confirm firmware/driver currency, then re-run the check."
        }
        GPOHealthCheck = @{
            Id          = "fc98ff50-d4d1-439e-92ae-48250d5f44c9"
            Name        = "Domain Group Policies Applied"
            Description = "Reports whether domain Group Policy Objects (GPOs) are applied across the cluster node(s)."
            PublicDocs  = @(
                "https://learn.microsoft.com/en-us/azure/azure-local/deploy/deployment-prep-active-directory#considerations-for-large-scale-deployments"
            )
            ErrorCode   = "AzLocal_OsConfig_GpoUnhealthy"
            Remediation = "Review the domain Group Policies applied to the affected node(s). Confirm they do not conflict with Azure Local settings or the security baseline, then re-run the check."
        }
        NetworkATCHealth = @{
            Id          = "2ebb24e0-34b2-4ad4-9c07-8fb3dc303ec0"
            Name        = "Network ATC Health"
            Description = "Reports the health of the Network ATC intents (deployment / configuration state) across the cluster node(s)."
            ErrorCode   = "AzLocal_OsConfig_NetworkAtcUnhealthy"
            Remediation = "Investigate the Network ATC intents on the affected node(s). Run Get-NetIntent / Get-NetIntentStatus to confirm every intent reports a 'Success'/'Completed' provisioning and configuration state, remediate any failed or provisioning intents, then re-run the check."
        }
        PowerPlanHealth = @{
            Id          = "a8280b2d-90cf-48a3-a978-b2894297a733"
            Name        = "Power Plan Health"
            Description = "Reports whether each cluster node's active power plan is set to High performance, which Azure Local requires for predictable performance."
            PublicDocs  = @(
                "https://learn.microsoft.com/troubleshoot/windows-server/performance/slow-performance-when-using-power-plan"
            )
            ErrorCode   = "AzLocal_OsConfig_PowerPlanNotHighPerformance"
            Remediation = "Set the active power plan to 'High performance' on the affected node(s): <code>powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c</code> (verify with <code>powercfg /getactivescheme</code>). A non-High-performance plan (e.g. Balanced) can throttle CPU and degrade cluster performance. Re-run the check after applying."
        }
        TimeSyncHealth = @{
            Id          = "51d463ee-0c6f-44b8-80ca-6adc414761df"
            Name        = "Time Synchronization Health"
            Description = "Reports whether each cluster node's Windows Time (W32Time) service is synchronised to a real domain/NTP source rather than the local hardware clock."
            ErrorCode   = "AzLocal_OsConfig_TimeSourceNotSynchronized"
            Remediation = "Configure W32Time on the affected node(s) to synchronise from the domain hierarchy / a valid NTP source instead of 'Local CMOS Clock' or 'Free-running System Clock' (w32tm /query /source, w32tm /resync). An unsynchronised clock breaks Kerberos authentication and cluster communication. Re-run the check after correcting the time source."
        }
        PendingRebootHealth = @{
            Id          = "977acbaa-e900-4a26-8f81-fe6ae21e8a9e"
            Name        = "Pending Reboot Health"
            Description = "Reports whether a reboot is pending on each cluster node (Component Based Servicing / Windows Update / pending file rename operations)."
            ErrorCode   = "AzLocal_OsConfig_RebootPending"
            Remediation = "Complete a coordinated reboot of the affected node(s) using the cluster-aware drain/resume workflow (Suspend-ClusterNode -Drain, reboot, Resume-ClusterNode) so pending servicing operations finish. A lingering pending-reboot state can block updates and leave configuration half-applied. Re-run the check after the reboot."
        }
    }
}

# SIG # Begin signature block
# MIInOQYJKoZIhvcNAQcCoIInKjCCJyYCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBoYXwnFp4SDeBg
# wRtHdAHz+HqMmD8/OwGzRkQEnhI6OKCCDMkwggYEMIID7KADAgECAhMzAAACHPrN
# xZvoL37EAAAAAAIcMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBD
# b2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwNDE2MTg1OTQxWhcNMjcwNDE1MTg1
# OTQxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYD
# VQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IB
# DwAwggEKAoIBAQDVsZfgOKmM31HPfoWOoNEiw0SlCiIxUMC0I9NMWbucKOw/e9lP
# oAoehQVu6SG65V4EPzrYsnBnFPNoi4/HoOdjhz1qkrEt4I6tEcxXU6oOeY9zGveC
# /3iBeuhLYxM3M/PkcUoebF+Nednm8OkdSPoDu8imViHPQq/8CQUu0WRR4rE+dMRf
# rpVqfmNi2qWCX94T4MsepijGVkwE//tJg0ryAiYdHT34LSnlG/RSBZmQRGWZ5g8j
# qnKjRParSqMft1gvjuUTVgtWNZfgcLFSK5Wa0myrq8OPcgTGGsRgun+tnSS+IxDT
# xVsAPH1OzvPjwomguByhUe/OcvUN0D5Wmp7xAgMBAAGjggGqMIIBpjAOBgNVHQ8B
# Af8EBAMCB4AwHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0O
# BBYEFNoH7a2YDjOSwpkp6DHcmUS7J+0yMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQL
# EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxFjAUBgNVBAUT
# DTIzMDAxMis1MDc1NjkwHwYDVR0jBBgwFoAUf1k/VCHarU/vBeXmo9ctBpQSCDEw
# YAYDVR0fBFkwVzBVoFOgUYZPaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w
# cy9jcmwvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNy
# bDBtBggrBgEFBQcBAQRhMF8wXQYIKwYBBQUHMAKGUWh0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmcl
# MjBQQ0ElMjAyMDI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IC
# AQAUnEqhaRXe0T3hIJjvdQErEkrA/7bByjn6t5IArODkkRjzkYwtKMc2yYj2quaN
# rLutWw2YZcngKPy1b71YyDJQTy4NDRwaSh9Tw5thrk3NmcPrAHia5vtcBJ1CgtKK
# 7mQbIcQ22d/N3813ayCDDFewu1+jsZmX+r/aTEqaOM4TVxVtRSkuCy8nAXKuChOK
# Li/zA4XuH8iEYqIsj2YoNaeSxVmeGiERXpKdo3dDmYi0kO5w2D8VS4c3+9h6gElY
# BaAAg/dYErBg27qT3vv0zRDJhJufvCNylA8S7/+8H5E/PV5cng6na9VV/w9OV3qu
# uND6zdGa2EX38Glp50F9AIQk3p2xXmcvorDeM4XJ7UlWYBi6g80J1SSOQnInCYFE
# msfUNn3+1AaTJKSJL83quKArTac2pKhu0Yzzzrzo6HrsRiQKzpnRBb1/dMa6P3hz
# 75XbMRBctNsFhZC07WCmjExdLg2eHW5uV0TY8D5+6wozJf7vF3+WHkYPO85Z+BC6
# U4FkNbYNycZ9cE4j1tXRdyDCfml6c0HWPHjNVDObrv9lKt3qUqFpX38VCqVCyNOO
# 1UcXfQiVjJw32U2WUKZjt/neJKHEBsm9kFsLuWzkQ53+qcaSaytmsCnk2gOglrlD
# 5d3kKyvvAw+rzm0lT8K38P6PLxfZQHhu4W8dV7Av8N2ZmDCCBr0wggSloAMCAQIC
# EzMAAAA5O7Y3Gb8GHWcAAAAAADkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBS
# b290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTI0MDgwODIwNTQxOFoX
# DTM2MDMyMjIyMTMwNFowVzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ
# Q0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANgBnB7jOMeq
# lRYHNa265v4IY9fH8TKhemHfPINe1gpLaV3dhg324WwH06LcHbpnsBukCDNitryo
# 0dtS/EW6I/yEL/bLSY8hKpbfQuWusBPr9qazYcDxCW/qnjb5JsI1s8bNOg3bVATv
# QVL4tcf03aTycsz8QeCdM0l/yHRObJ9QqazM1r6VPEOJ7LL+uEEb73w6QCuhs89a
# 1uv1zerOYMnsneRRwCbpyW11IcggU0cRKDDq1pjVJzIbIF6+oiXXbReOsgeI8zu1
# FyQfK0fVkaya8SmVHQ/tOf23mZ4W9k0Ri22QW9p3UgSC5OUDktKxxcCmGL6tXLfO
# GSWHIIV4YrTJTT6PNty5REojHJuZHArkF9VnHTERWoTjAzfI3kP+5b4alUdhgAZ7
# ttOu1bVnXfHaqPYl2rPs20ji03LOVWsh/radgE17es5hL+t6lV0eVHrVhsssROWJ
# uz2MXMCt7iw7lFPG9LXKGjsmonn2gotGdHIuEg5JnJMJVmixd5LRlkmgYRZKzhxS
# CwyoGIq0PhaA7Y+VPct5pCHkijcIIDm0nlkK+0KyepolcqGm0T/GYQRMhHJlGOOm
# VQop36wUVUYklUy++vDWeEgEo4s7hxN6mIbf2MSIQ/iIfMZgJxC69oukMUXCrOC3
# SkE/xIkgpfl22MM1itkZ35nNXkMolU1lAgMBAAGjggFOMIIBSjAOBgNVHQ8BAf8E
# BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFH9ZP1Qh2q1P7wXl5qPX
# LQaUEggxMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMB
# Af8wHwYDVR0jBBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBP
# oE2gS4ZJaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv
# TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAw
# TgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMv
# TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNydDANBgkqhkiG9w0BAQwFAAOC
# AgEAFJQfOChP7onn6fLIMKrSlN1WYKwDFgAddymOUO3FrM8d7B/W/iQ6DxXsDn7D
# 5W4wMwYeLystcEqfkjz4NURRgazyMu5yRzQh4LqjA4tStTcJh1opExo7nn5PuPBY
# nbu0+THSuVHTe0VTTPVhily/piFrDo3axQ9P4C+Ol5yet+2gTfekICS5xS+cYfSI
# vgn0JksVBVMYVI5QFu/qhnLhsEFEUzG8fvv0hjgkO+lkpV9ty6GkN4vdnd7ya6Q6
# aR9y34aiM1qmxaxBi6OUnyNl6fkuun/diTFnYDLTppOkr/mg5WSfCiDVMNCxtj4w
# PKC5OmHm1DQIt/MNokbbH3UGsFP1QbzsLocuSqLCvH09Io3fDPTmscR9Y75G4qX7
# RTX8AdBPo0I6OEojf39zuFZt0qOHm65YWQE69cZM2ueE1MB05dNNgHK9gTE7zKvK
# /fg8B2qjW88MT/WF5V5uvZGtqa9FSL2RazArA+rDPuf6JGYz4HpgMZHB4S6szWSK
# YBv0VisCzfxgeU+dquXW9bd0auYlOB58DPcOYKdc3Se94g+xL4pcEhbB54JOgAkw
# YTu/9dLeH2pDqeJZAABVDWRQCaXfO5LgyKwKCLYXpigrZYCjUSBcr+Ve8PFWMhVT
# Ql0v4q8J/AUmQN5W4n101cY2L4A7GTQG1h32HHAvfQESWP0xghnGMIIZwgIBATBu
# MFcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# KDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIc
# +s3Fm+gvfsQAAAAAAhwwDQYJYIZIAWUDBAIBBQCggZAwGQYJKoZIhvcNAQkDMQwG
# CisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEIMECL8CSCWMTKECW33/80As6JPaF
# FnYvRYjZvzZGwYpgMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv
# AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAE
# ggEAoixBcJv4shqDWleDDycwSbzbnv8n39gRl7efQvFv9crIV6dBkuIk+WYyzlYI
# fbNwxfW8G1JMT2uceV2LJaqSkYx9idlheRA2UPY9axYJHw+GmjNCZolOixUNREXe
# c7PAoIKHwx70rKWZkydk6Pr1+AnDSp77fMYvvBmpwc9s/eqJQyOsZhsSqt2HhW3R
# leYdgiwM6ZFWy+JyrbXdS5OMmZbK/aZFpsyiMQKmICmM/SnbHTCgZTJnmE4p2dvw
# oJXEEFexkLwISLOuwuAHPuz1AG0yUBHtj1TM/9xZ2RU4/JNU8dv3H6zxWBphUM9P
# +H5kA3o1EIQhUx7Q4QVUQHWbxaGCF5YwgheSBgorBgEEAYI3AwMBMYIXgjCCF34G
# CSqGSIb3DQEHAqCCF28wghdrAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFRBgsqhkiG
# 9w0BCRABBKCCAUAEggE8MIIBOAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQC
# AQUABCBcfeMu8NvECze32xGodapf7g1+fwmc2TB/ycvsK2kumwIGaoST+3+tGBIy
# MDI2MDkwMjE1MjY1Mi4xNlowBIACAfSggdGkgc4wgcsxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh
# IE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBMDAwLTA1RTAt
# RDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEe0w
# ggcgMIIFCKADAgECAhMzAAACK7sAUP9NO5qhAAEAAAIrMA0GCSqGSIb3DQEBCwUA
# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT
# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI2MDIxOTE5NDAxMVoX
# DTI3MDUxNzE5NDAxMVowgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAl
# BgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBMDAwLTA1RTAtRDk0NzElMCMGA1UEAxMc
# TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQAD
# ggIPADCCAgoCggIBAJfeaLo4PezJSpCbhCqCSso9tywr9DHd9hy0vz5UzW45jdui
# iLkbHBq5OBB/okUchNOjFLuCOoqUrw4UvMvpROXSPEQrm3oO45yAld2+62KahOU5
# LQLeTIhNcEBeiP+CnqFFH3PpZGKnUq2SKVvd0lcKNCpP0/YK66Ov5XPyv5n6MOXT
# 2OL+Jz/gbfiveZXCOz/8afH0+7fVXytcWJw2IDPGm5trClt3ymp/OVZPa+cbeQX2
# XoyJERu8ndcctTAdCyHS39OtIXH+z/IKqklZgnqgKUbvS2+wUfRpE/zAHhw/8IVr
# Ygu+TbqLc5wkGX6moqMdNIHL2a/BM8QOWfNyjQ23xHqlI9NdmAGyxweGgp8LRZCY
# 7NjaR5dsCZFNxkzJfPm/8AluagjTLTsFrO+3k2Rd10b1MStBbC2wXIgqsSUOBZ8d
# 4KhO7XC7ZyIPd0rvbPdxraDOgQPFPaP0FchQpqJPNN1A9GwAxo7d1TTNobAwyXC1
# InIOHXhgSBmhS7m9Lwy6Ayp2s2OmHIvrnIqGOkBZuFiQgc7/S5mO73m0/zNk2pch
# GHi119Yck8BOf2v5zGTK6HbHRUt1/HWWYr1fc2MfQ22ACzkkH/A6WTK653GYVN9Z
# XJGsvfuKyk5nxo8AWC/JHpw1OQamQWjfklGNyI2ZmJTipP1S3L5XmC50WTWPAgMB
# AAGjggFJMIIBRTAdBgNVHQ4EFgQUPhaO5BNQlu1t3eOa9mS7QVnZ5TYwHwYDVR0j
# BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGlt
# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggr
# BgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9N
# aWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0T
# AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4Aw
# DQYJKoZIhvcNAQELBQADggIBAM78IqxyIQzySvV+ofhOV9ProQ2hOPFfDzXSnISr
# Q92uAvB+BPfH7WDPsJAe1R16+oxDmofIMuGbqlP3XUJiQY37qD4xTt8xhOvp3dLG
# J4nAEihaR9HiDtKK0bMwpTjrkoRh6N912hSCi8L/FxGloAs7mnf8DbjwHKEmIy20
# FA0O2xP8doIXBEUJRFvL9/xzWSTLwXzGQJcXP78y1nl3WVYWPA4jaB5kdar1eKEM
# 6B57mdLaSijlXqfxcbbbRRN69V/6mCakgfvVcoNUhhMYZkmzrI+V8nZperDUwTg1
# HqiQ2xjc/UzfUfoMxhF8kY0E16nn3mRcaHdjMDdwKLKD6OYnnyH99O+OeAim5QV8
# 4OkOMXHSJzVigsA3GEIXdGFL2pgzsrjQ0SEqyFi5oCQgbZcEpiKDev/T9vSyO+MH
# CznkBiicybcDypxf/qT1V9zSa/122ice5YZ8DZv6oTaqkKeHMZt0MeruI5JkTDTW
# c26kAx/VzjWT0ihNDbPeLDrDhlmgs7KDhMoxunWSulPi2uKn/LfQK/mSHKoIM2pp
# dCkGQ5g43wuC2hDdqZU5fuLHmN2ufH+9TFNRKKBe+tZ0vtSTySmZLTO2jZOjLtpP
# mgHMJO9+P2In8E38TW+EUGSEkK9ns9W+wxKdNOaTHYVqXaVWTO24Ajjh8P+7Isl1
# oxBLMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0B
# AQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG
# A1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAw
# HhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzET
# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
# dGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOTh
# pkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xP
# x2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ
# 3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOt
# gFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYt
# cI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXA
# hjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0S
# idb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSC
# D/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEB
# c8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh
# 8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8Fdsa
# N8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkr
# BgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q
# /y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBR
# BgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv
# ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsG
# AQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
# BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjE
# MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
# Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
# BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
# a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEB
# CwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnX
# wnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOw
# Bb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jf
# ZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ
# 5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+
# ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgs
# sU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6
# OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p
# /cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6
# TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784
# cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCA1AwggI4
# AgEBMIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYD
# VQQLEx5uU2hpZWxkIFRTUyBFU046QTAwMC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1p
# Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMVAAmsP3TK
# Qemj/QAZvuWbC+wK2pE5oIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
# IDIwMTAwDQYJKoZIhvcNAQELBQACBQDuQi3PMCIYDzIwMjYwOTAyMDUwODMxWhgP
# MjAyNjA5MDMwNTA4MzFaMHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFAO5CLc8CAQAw
# CgIBAAICALMCAf8wBwIBAAICE/EwCgIFAO5Df08CAQAwNgYKKwYBBAGEWQoEAjEo
# MCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG
# 9w0BAQsFAAOCAQEAhNRomwGTgLT3LFT6yVOFWVxpWNasYUE4PmhXsvjU3HDrNp58
# PY6i+eOMP9hDknhDYe56ZabEx3yBr2JPex1Mb9mAdTT5kWQiXbySg+wOyKxiy3jd
# YOqw0p3maCiyE8dhse1j+GPUPFbzfzn+G/gh8oTlm13AYg4n45odlNQ5DloXiBVE
# f1kCK3qi9G/wfIbnN0r0S+9/izkXOQVqgNmhVCQ94crhv/PImIU8TFxuP51Qun/E
# eaIBAGphcQl5jUtJcQMLFw7oJ9eUMDXPTf8csmu0DBfyecpcTPxQuEkeCLI9dd8m
# hoPlSmPqRwh0hnwE+uJK3OJSNXKjfcMtibdRpjGCBA0wggQJAgEBMIGTMHwxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
# c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACK7sAUP9NO5qhAAEAAAIrMA0G
# CWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJ
# KoZIhvcNAQkEMSIEIDjC951SPBT80rK9Az846eUCz9JYy8auZ0wNkps/CLNQMIH6
# BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgcg4j9D+QV+1gD4zY5j7UHHdqMEPr
# 9YMC09Pa8WS/blIwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
# aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
# cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
# MAITMwAAAiu7AFD/TTuaoQABAAACKzAiBCBHveBSquEzpqoZ+b6l+b0v+nomdmbj
# n5Hq1UuDVpf1UDANBgkqhkiG9w0BAQsFAASCAgB+jorqBKaN+uTA8M/gMawOsHft
# v6ocva8HJ6HBlwOPXjHf/bf0zhNPO7mbG88dx1YvZMTyoDkVJRs+ipNKZ7645qBN
# JRkSE09tD5AaZK25invV2qd7PZl6ADYpGKMdQjU/SQg/kGJ2ouTPZt7NGEfChbY7
# dqGa8dT+Ze2uU5IuNWGmmJuGRvV3lgwa8m7J4OE0oxToeOsgzzdAsDiS7zDkpceO
# xpBo4grSusaB2Xig/HeZGsz/lDpju/9z4AmSaWy8cnfpcxpPjyJbXZJ3RS6sgjVR
# PrKt8l20WJTjrsepuABVT0z5g02BjHropcxq7gAlguZAoFduO8/1SO5N8SQ18ZJQ
# seKBYZ8q8RwIVQVd+KFbfOkreoQSdXq6GVcqfoOhnKWQ2VlnrLMNp4VwNXmtGErE
# sy/P5SZwuRzIXo/SJidgMtJJr8WT7nMR1l6Nf0VPJIpXG9DjNPAUd3075WRLgp/z
# qgZtm2LNxOWd/HfrpBGbllqQRNTB9I+Da1Fw/ky7f5cO5P6zCujbyhpRosVu+osf
# h8BIGYrswZz4WBasweO+Td0waDHdLregUhEDjKZH6ktxzw/v4w7iZ9uI/0XzXgEA
# H2TRWxIBe09ynmp1G8NaLvNw0MhtDUTQq0RNUW6g49u0VBEUs2AbQ3Ri9/NSxRZv
# 7S0irSOKWXxZlJMhug==
# SIG # End signature block