private/Get-AdsiADDomain.ps1

<#
    .SYNOPSIS
        Retrieves information about the Active Directory domain using ADSI.
    .DESCRIPTION
        The `Get-AdsiADDomain` function retrieves information about the Active Directory domain using ADSI. The function returns a custom object with the following properties:
        - DistinguishedName: The distinguished name of the domain.
        - DNSRoot: The DNS root of the domain.
        - DirectoryServer: The name of the directory server.
        - NetBIOSName: The NetBIOS name of the domain.
    .PARAMETER Credential
        Specifies a user account that has permission to perform this action. The default value is an empty credential object.
    .PARAMETER Server
        Specifies the name of the server to connect to. If this parameter is not specified, the function connects to the local server.
    .PARAMETER Port
        Specifies the port number to use when connecting to the server. If this parameter is not specified, the function uses the default port number.
    .EXAMPLE
        PS C:\> Get-AdsiADDomain
        Retrieves information about the local Active Directory domain.
    .EXAMPLE
        PS C:\> Get-AdsiADDomain -Server "dc01.contoso.com" -Port 389 -Credential (Get-Credential)
        Retrieves information about the Active Directory domain on the server "dc01.contoso.com" using port 389 and the specified credentials.
    .NOTES
        Funtion : Get-AdsiADDomain
        Author : John Billekens
        Copyright : Copyright (c) John Billekens Consultancy
        Version : 1.1
#>


function Get-AdsiADDomain {
    [CmdletBinding()]
    param(
        [Management.Automation.PSCredential]
        [Management.Automation.Credential()]$Credential = [Management.Automation.PSCredential]::Empty,

        [String]$Server,

        [Parameter()]
        [ValidateSet(0, 389, 636)]
        [Int]$Port = 389
    )
    Write-Verbose "Starting function : Get-AdsiADDomain"
    if ($Port -eq 0) { $Port = 389 }
    if (-not ($Credential -is [Management.Automation.PSCredential])) {
        $Credential = [Management.Automation.PSCredential]::Empty
    }
    # Session cache, keyed per server, port and account.
    if ($null -eq $Script:AppVentiX.ADDomainCache) {
        $Script:AppVentiX.ADDomainCache = @{}
    }
    $cacheKey = '{0}|{1}|{2}' -f "$Server".ToLower(), $Port, $Credential.UserName
    if ($Script:AppVentiX.ADDomainCache.ContainsKey($cacheKey)) {
        Write-Verbose "Returning cached domain for '$cacheKey'"
        Write-Output $Script:AppVentiX.ADDomainCache[$cacheKey]
        Write-Verbose "Ending function : Get-AdsiADDomain"
        return
    }
    $domainOutput = @{
        DNSRoot           = $null
        DistinguishedName = $null
        DirectoryServer   = $null
        NetBIOSName       = $null
        Port              = $Port
        LDAPPath          = $null
    }
    $LDAPPath = "LDAP://"
    if (-not [String]::IsNullOrEmpty($Server)) {
        $LDAPPath += "$($Server):$($Port)/"
    }
    $domainOutput.LDAPPath = $LDAPPath
    $LDAPPath += "RootDSE"
    Write-Verbose "LDAPPath : $LDAPPath"
    $root = $null
    $directoryEntry = $null
    try {
        if ($null -eq $Credential -or $Credential -eq [Management.Automation.PSCredential]::Empty) {
            $root = New-Object System.DirectoryServices.DirectoryEntry $LDAPPath
            Write-Verbose "Connecting : Without credential"
        } else {
            $root = New-Object System.DirectoryServices.DirectoryEntry $LDAPPath, $($Credential.UserName), $($Credential.GetNetworkCredential().password)
            Write-Verbose "Connecting : With credential"
        }
        try {
            # defaultNamingContext is the DC's own domain; rootDomainNamingContext would be the forest root.
            $domainOutput.DistinguishedName = $root | Select-Object -ExpandProperty defaultNamingContext
            $domainOutput.DNSRoot = $domainOutput.DistinguishedName -replace "\,(D|d)(C|c)\=", "." -replace "(D|d)(C|c)\=", $null
        } catch {
            Write-Verbose "Failed to retrieve domain DN and DNS root: $($_.Exception.Message)"
            $domainOutput.DistinguishedName = $null
            $domainOutput.DNSRoot = $null
        }
        try {
            $domainOutput.DirectoryServer = $root | Select-Object -ExpandProperty dnsHostName
        } catch {
            Write-Verbose "Failed to retrieve directory server hostname: $($_.Exception.Message)"
            $domainOutput.DirectoryServer = $null
        }

        try {
            $LDAPPath = "LDAP://$($domainOutput.DirectoryServer):$($Port)"
            if ($null -eq $Credential -or $Credential -eq [Management.Automation.PSCredential]::Empty) {
                $directoryEntry = New-Object System.DirectoryServices.DirectoryEntry $LDAPPath.TrimEnd('/')
            } else {
                $directoryEntry = New-Object System.DirectoryServices.DirectoryEntry $LDAPPath.TrimEnd('/'), $($Credential.UserName), $($Credential.GetNetworkCredential().password)
            }
            $domainOutput.LDAPPath = $LDAPPath
            $domainOutput.NetBIOSName = "$($directoryEntry.dc.ToString())".ToUpper()
        } catch {
            Write-Verbose "Failed to retrieve NetBIOS name: $($_.Exception.Message)"
            $domainOutput.NetBIOSName = $null
        }

        # The dc attribute is only the first DNS label; the real NetBIOS name is on the crossRef object.
        $partitionsEntry = $null
        $partitionsSearcher = $null
        try {
            $configNC = $root | Select-Object -ExpandProperty configurationNamingContext
            $partitionsPath = "LDAP://$($domainOutput.DirectoryServer):$($Port)/CN=Partitions,$($configNC)"
            if ($null -eq $Credential -or $Credential -eq [Management.Automation.PSCredential]::Empty) {
                $partitionsEntry = New-Object System.DirectoryServices.DirectoryEntry $partitionsPath
            } else {
                $partitionsEntry = New-Object System.DirectoryServices.DirectoryEntry $partitionsPath, $($Credential.UserName), $($Credential.GetNetworkCredential().password)
            }
            $partitionsSearcher = New-Object System.DirectoryServices.DirectorySearcher $partitionsEntry
            $partitionsSearcher.Filter = "(&(objectClass=crossRef)(nCName=$(ConvertTo-LdapFilterEscapedString -Value $domainOutput.DistinguishedName))(nETBIOSName=*))"
            $null = $partitionsSearcher.PropertiesToLoad.Add('netbiosname')
            $crossRef = $partitionsSearcher.FindOne()
            if ($null -ne $crossRef) {
                $domainOutput.NetBIOSName = "$($crossRef.Properties['netbiosname'][0])".ToUpper()
            } else {
                Write-Verbose "No crossRef found for '$($domainOutput.DistinguishedName)', keeping NetBIOS name '$($domainOutput.NetBIOSName)'"
            }
        } catch {
            Write-Verbose "Failed to read NetBIOS name from crossRef: $($_.Exception.Message)"
        } finally {
            if ($null -ne $partitionsSearcher) { $partitionsSearcher.Dispose() }
            if ($null -ne $partitionsEntry) { $partitionsEntry.Dispose() }
        }
        Write-Verbose "Domain DNS/NetBIOS: $($domainOutput.DNSRoot) / $($domainOutput.NetBIOSName)"

        $domainObject = [PSCustomObject]$domainOutput
        if (-not [String]::IsNullOrEmpty($domainOutput.DistinguishedName) -and -not [String]::IsNullOrEmpty($domainOutput.DirectoryServer)) {
            $Script:AppVentiX.ADDomainCache[$cacheKey] = $domainObject
        }
        Write-Output $domainObject
    } finally {
        if ($null -ne $directoryEntry) {
            try {
                $directoryEntry.Dispose()
            } catch {
                Write-Verbose "Failed to dispose DirectoryEntry object: $($_.Exception.Message)"
            }
        }
        if ($null -ne $root) {
            try {
                $root.Dispose()
            } catch {
                Write-Verbose "Failed to dispose Root DirectoryEntry object: $($_.Exception.Message)"
            }
        }
    }
    Write-Verbose "Ending function : Get-AdsiADDomain"
}

# SIG # Begin signature block
# MII5zAYJKoZIhvcNAQcCoII5vTCCObkCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCdbhFJFirkilWV
# Yh7T8Si8nRVMv6ohkfaZT3e4OIWoMaCCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ
# lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu
# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy
# MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv
# c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo
# b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD
# Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH
# or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD
# PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV
# qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70
# ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1
# vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3
# W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK
# xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg
# trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj
# O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7
# swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE
# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ
# T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn
# LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c
# Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF
# xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx
# AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8
# FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY
# lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2
# 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY
# uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al
# GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk
# ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T
# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAAe4lMek
# LWCItFCdAAAAB7iUMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDQwHhcNMjYxMDA0MTczMjE4WhcNMjYxMDA3
# MTczMjE4WjBoMQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDEP
# MA0GA1UEBxMGSGVpbG9vMRcwFQYDVQQKEw5BcHBWZW50aVggQi5WLjEXMBUGA1UE
# AxMOQXBwVmVudGlYIEIuVi4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
# gQCI1YwPphhyBceH5g229gOYpcXub+SVZ4RcqL0eDKgce/JNHuCeiSnOWTBpFjs1
# M7ammlzGHjOSSPR2izxQR7ASxv1A/x+qVkOzngfFAhjyz5P7CTpEr/tdd9GAsnQo
# Y+ODSJodTGTTh+YW+z3Oa0UWgUTxwvJxwIiqwdQoV22YdqWUPmPGPPM2fjhMVOor
# Z3dZvMLlOlQC/V73JLR4mrbZimOWNqzEiJzS81w7dsnx/MRDH12wFK5gK3u4W/9j
# dGYTdV5hnViw/qhJRdWH2aJ0mCwbWbUsYyRElWvtKFRF6w+PP2CuKh6jXFG0jUgP
# Fn2nwZu6glqWQnTSTy9x8JNMLufetz3vZCSeFooQ19AXoDVIOXxcRUhlMl0lVch+
# 1Ojvh6p4se7R8LUJo/ose5gRZpECDkzf1HzPclJSbelGvoFN/m5pfOmCdMDH9pa/
# IsPetrSGue/MoJL7TmOSpXxrMUTQxtD01UE0cm9cRnvxp0PvwI3Gk3844STwscT3
# 6VECAwEAAaOCAdQwggHQMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDsG
# A1UdJQQ0MDIGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhorBgEEAYI3YaL8yC6uh9F6
# gZ2lyVCBwcKCJzAdBgNVHQ4EFgQU5rNL9Y/7gtCZHqApckPUAAeCboQwHwYDVR0j
# BBgwFoAUayVB3vtrfP0YgAotf492XapzPbgwZwYDVR0fBGAwXjBcoFqgWIZWaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl
# MjBWZXJpZmllZCUyMENTJTIwQU9DJTIwQ0ElMjAwNC5jcmwwdAYIKwYBBQUHAQEE
# aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENB
# JTIwMDQuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w
# DQYJKoZIhvcNAQEMBQADggIBAIsYnfDTXNQ+Wp3KhJ7mSIeG0dQIM2TAij+/ZhSy
# 2RipxwGLRta9V9XjkNONTFAabsrw1YRBGr1RjkTsthZZFyYl0QFUfmuYFSgIQpqJ
# C74t5wR0fdpHHD4adj8qLc7QUHagHxHSYKYLxI6fdXLhO8s79QGyuhXUPOIX0UNk
# mK4maA4bgSUL9+ZdN03PQdeAWWHNz0ak5j+jbE5p+eTyEe+eCye7QAubE5ggf8Og
# lI4DTI21+uKEwjQfyliuiHerEliO0PJwRDQk/kt9Lzc68efLZmLzcMwLZjl7bcuW
# oO85Tf01mY1hFnYWhnST4W4B5TSHyXaYGoBaY5Xd1Img1iq835gf4rG/R0SK9RWN
# wD4GQCGcV0aUSrX3NXxHTSsa93vaSY0Xa3PJvmTPF4nnR95AU1SC2th0+t1P8kRr
# RcXdz16m1g3dvR95yYZduiIcodCcE+NFMc5qhSjYB6zhErgYoFunWr0qB+HFFjkL
# gxNk08Xu5AZ2HGWc2z8x6AuQN9mGTYqdUjMAZHMh9d1e5rMet94kEj6Yppc8RK36
# ii5VPkMAzToWgmU6paLw6ncNMIytJlK4wxvaiLgciIhFL4K7ksNkYT3eWQadYxzL
# J3Kefyt+C2caCB8i7hXGarl83CSviKuMVQuoEoKEaeD681/BEpnQwUQiVa26HmsR
# sq3GMIIGpTCCBI2gAwIBAgITMwAHuJTHpC1giLRQnQAAAAe4lDANBgkqhkiG9w0B
# AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDA0
# MB4XDTI2MTAwNDE3MzIxOFoXDTI2MTAwNzE3MzIxOFowaDELMAkGA1UEBhMCTkwx
# FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxDzANBgNVBAcTBkhlaWxvbzEXMBUGA1UE
# ChMOQXBwVmVudGlYIEIuVi4xFzAVBgNVBAMTDkFwcFZlbnRpWCBCLlYuMIIBojAN
# BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAiNWMD6YYcgXHh+YNtvYDmKXF7m/k
# lWeEXKi9HgyoHHvyTR7gnokpzlkwaRY7NTO2pppcxh4zkkj0dos8UEewEsb9QP8f
# qlZDs54HxQIY8s+T+wk6RK/7XXfRgLJ0KGPjg0iaHUxk04fmFvs9zmtFFoFE8cLy
# ccCIqsHUKFdtmHallD5jxjzzNn44TFTqK2d3WbzC5TpUAv1e9yS0eJq22Ypjljas
# xIic0vNcO3bJ8fzEQx9dsBSuYCt7uFv/Y3RmE3VeYZ1YsP6oSUXVh9midJgsG1m1
# LGMkRJVr7ShUResPjz9grioeo1xRtI1IDxZ9p8GbuoJalkJ00k8vcfCTTC7n3rc9
# 72QknhaKENfQF6A1SDl8XEVIZTJdJVXIftTo74eqeLHu0fC1CaP6LHuYEWaRAg5M
# 39R8z3JSUm3pRr6BTf5uaXzpgnTAx/aWvyLD3ra0hrnvzKCS+05jkqV8azFE0MbQ
# 9NVBNHJvXEZ78adD78CNxpN/OOEk8LHE9+lRAgMBAAGjggHUMIIB0DAMBgNVHRMB
# Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggr
# BgEFBQcDAwYaKwYBBAGCN2Gi/MgurofReoGdpclQgcHCgicwHQYDVR0OBBYEFOaz
# S/WP+4LQmR6gKXJD1AAHgm6EMB8GA1UdIwQYMBaAFGslQd77a3z9GIAKLX+Pdl2q
# cz24MGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
# a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUy
# MENBJTIwMDQuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy
# MFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBDQSUyMDA0LmNydDBUBgNVHSAETTBLMEkG
# BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
# aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQCLGJ3w
# 01zUPlqdyoSe5kiHhtHUCDNkwIo/v2YUstkYqccBi0bWvVfV45DTjUxQGm7K8NWE
# QRq9UY5E7LYWWRcmJdEBVH5rmBUoCEKaiQu+LecEdH3aRxw+GnY/Ki3O0FB2oB8R
# 0mCmC8SOn3Vy4TvLO/UBsroV1DziF9FDZJiuJmgOG4ElC/fmXTdNz0HXgFlhzc9G
# pOY/o2xOafnk8hHvngsnu0ALmxOYIH/DoJSOA0yNtfrihMI0H8pYroh3qxJYjtDy
# cEQ0JP5LfS83OvHny2Zi83DMC2Y5e23LlqDvOU39NZmNYRZ2FoZ0k+FuAeU0h8l2
# mBqAWmOV3dSJoNYqvN+YH+Kxv0dEivUVjcA+BkAhnFdGlEq19zV8R00rGvd72kmN
# F2tzyb5kzxeJ50feQFNUgtrYdPrdT/JEa0XF3c9eptYN3b0fecmGXboiHKHQnBPj
# RTHOaoUo2Aes4RK4GKBbp1q9KgfhxRY5C4MTZNPF7uQGdhxlnNs/MegLkDfZhk2K
# nVIzAGRzIfXdXuazHrfeJBI+mKaXPESt+oouVT5DAM06FoJlOqWi8Op3DTCMrSZS
# uMMb2oi4HIiIRS+Cu5LDZGE93lkGnWMcyydynn8rfgtnGggfIu4Vxmq5fNwkr4ir
# jFULqBKChGng+vNfwRKZ0MFEIlWtuh5rEbKtxjCCBygwggUQoAMCAQICEzMAAAAW
# MZKNkgJle5oAAAAAABYwDQYJKoZIhvcNAQEMBQAwYzELMAkGA1UEBhMCVVMxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0
# IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODEx
# MjlaFw0zMTAzMjYxODExMjlaMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll
# ZCBDUyBBT0MgQ0EgMDQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK
# VfrI2+gJMM/0bQ5OVKNdvOASzLbUUMvXuf+Vl7YGuofPaZHVo3gMHF5inT+GMSpI
# cfIZ9qtXU1UG68ry8vNbQtOL4Nm30ifXpqI1+ByiAWLO1YT0WnzG7XPOuoTeeWsN
# Zv5FmjxCsReBZvyzyzCyXZbu1EQfJxWTH4ebUwtAiW9rqMf9eDj/wYhiEfNteJV3
# ZFeibD2ztCHr9JhFdd97XbnCHgQoTIqc02X5xlRKtUGBa++OtHBBjiJ/uwBnzTkq
# u4FjpZjQeJtrmda+ur1CT2jflWIB/ypn7u7V9tvW9wJbJYt/H2EtJ0GONWxJZ7TE
# u8jWPindOO3lzPP7UtzS/mVDV94HucWaltmsra6zSG8BoEJ87IM8QSb7vfm/O41F
# hYkUv89WIj5ES2O4kxyiMSfe95CMivCuYrRP2hKvx7egPMrWgDDBkxMLgrKZO9hR
# NUMm8vk3w5b9SogHOyJVhxyFm8aFXfIxgqDF4S0g4bhbhnzljmSlCLlumMZcXFGD
# jpF2tNoAu3VGFGYtHtTSNVKvZpgB3b4ynaoDkbPf+Wg4523jt4VneasBgZhC1srZ
# I2NCnCBBfgjLq04pqEKAWEohyW2K29KSkkHvt5VaE1ac3Yt+oyiOzMS57tXwQDJL
# GvLg/OXFO0VNvczDndfIfXYExB/ab2PuMSwd5VIBOwIDAQABo4IB3DCCAdgwDgYD
# VR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRrJUHe+2t8
# /RiACi1/j3ZdqnM9uDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYz
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnku
# aHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8C
# AQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1zSmepEhqMOYwcAYDVR0fBGkwZzBl
# oGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z
# b2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAy
# MS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZp
# ZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEB
# DAUAA4ICAQAG1VBeVHTVRBljlcZD3IiMxwPyMjQyLNaEnVu5mODm2hRBJfH8GsBL
# ATmrHAc8F47jmk5CnpUPiIguCbw6Z/KVj4Dsoiq228NSLMLewFfGMri7uwNGLISC
# 5ccp8vUdADDEIsS2dE+QI9OwkDpv3XuUD7d+hAgcLVcMOl1AsfEZtsZenhGvSYUr
# m/FuLq0BqEGL9GXM5c+Ho9q8o+Vn/S+GWQN2y+gkRO15s0kI05nUpq/dOD4ri9rg
# Vs6tipEd0YZqGgD+CZNiaZWrDTOQbNPncd2F9qOsUa20miYruoT5PwJAaI+QQiTE
# 2ZJeMJOkOpzhTUgqVMZwZidEUZKCqudaeQA08WwnkQMfKyHzaU8j48ULcU4hUwvM
# sv7fSurOe9GAdRQCPvF8WcSK5oDHe8VVJM4tv6KKCm91HqLx9JamBgRI6R2SfY3n
# u26EGznu0rCg/769z8xWm4PVcC2ZaL6VlKVqFp1NsN8YqMyf5t+bbGVb09noFKcJ
# G/UwyGlxRmQBlfeBUQx5/ytlzZzsEnhrJF9fTAfje8j3OdX5lEnePTFQLRlvzZFB
# qUXnIeQKv3fHQjC9m2fo/Z01DII/qp3d8LhGVUW0BCG04fRwHJNH8iqqCG/qofMv
# +kym2AxBDnHzNgRjL60JOFiBgiurvLhYQNhB95KWojFA6shQnggkMTCCB54wggWG
# oAMCAQICEzMAAAAHh6M0o3uljhwAAAAAAAcwDQYJKoZIhvcNAQEMBQAwdzELMAkG
# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UE
# AxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmlj
# YXRlIEF1dGhvcml0eSAyMDIwMB4XDTIxMDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUy
# MFowYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQ
# Q0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALLwwK8ZiCji
# 3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3KU3rlfL3qrZilYKJNqztA9OQacr1AwoN
# cHbKBLbsQAhBnIB34zxf52bDpIO3NJlfIaTE/xrweLoQ71lzCHkD7A4As1Bs076I
# u+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQhNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ
# 2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae2nPIPc8sZU6ZE7iRrRZywRmrKDp5+Tcm
# JX9MRff241UaOBs4NmHOyke8oU1TYrkxh+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG
# 8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAWrbyfNrC69oKpRQXY9bGH6jn9NEJv9weF
# xhTwyvx9OJLXmRGbAUXN1U9nf4lXezky6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbc
# Nr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4crCzTTHgYYjHs1NbOc6brH+eKpWLtr+b
# Gecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR461uckFu0t+gCwLdN0A6cFtSRtR8bvxV
# FyWwTtgMMFRuBa3vmUOTnfKLsLefRaQcVTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K
# 4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8E
# BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0p
# nqRIajDmMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJ
# KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
# GDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRl
# bnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRo
# b3JpdHklMjAyMDIwLmNybDCBwwYIKwYBBQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAC
# hnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m
# dCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRl
# JTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVv
# Y3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7U
# q+rdZgrbVyNMul5skONbhls5fccPlmIbzi+OwVdPQ4H55v7VOInnmezQEeW4LqK0
# wja+fBznANbXLB0KrdMCbHQpbLvG6UA/Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH
# +KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9E5StNp5T8FG7/VEURIVWArbAzPt9ThVN
# 3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1Rft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0
# byxNRG+fT2MCEhQl9g2i2fs6VOG19CNep7SquKaBjhWmirYyANb0RJSLWjinMLXN
# OAga10n8i9jqeprzSMU5ODmrMCJE12xS/NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx
# 0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+
# PDPB3xajYnzevs7eidBsM71PINK2BoE2UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQ
# e6PT12418xon2iDGE81OGCreLzDcMAZnrUAx4XQLUz6ZTl65yPUiOh3k7Yww94lD
# f+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBX
# iCRKJLj4DT2uhJ04ji+tHD6n58vhavFIrmcxghcyMIIXLgIBATBxMFoxCzAJBgNV
# BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMT
# Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBBT0MgQ0EgMDQCEzMAB7iUx6QtYIi0
# UJ0AAAAHuJQwDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq
# hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQg+H34oiKXl0yA
# DVhX+ICoD7chXwXuIx+XWgDQY6VWCuYwDQYJKoZIhvcNAQEBBQAEggGAUkTyqM9P
# d6PxyFh2HkyGK7TTmN8vDNopCMKpb2Elw7e73/R7c1cuhN8UcnSYgYEiigmAMMaK
# F9gXMhihbUUmoZJMZUWzMt/m+WlCLC7ItGM916PAFDm6i5Z7rSRRgP4TWuk/mvOw
# UVTdI6dB91sYfbEmTEB9eNTiqIjTLfmFcdoDkLDMU5meAZCTuS6YlgRDfF1hOnuV
# TIz1LEzX8Zx/QYrGf8HxSuJzgdQNR6M7F5Nq5z+glX6T0XrbjdzhgTHlrLmyRH8A
# UEWRvtQeMPx00kgyuYI0IEH6maZmzfpYqvtGDVj5gzsaxiEt7dlPsImLWKGMYbHS
# rOAuEz9t+TmvApyZiXk+98gOPB1M9mwM5NJxeGMzJ4MQpBtGyvLbtt4SNp0fPYuJ
# ooby2BmfmorKQ+Hf7LueG+CpqdMo1fj1NHvjkQjs4Oiih7L0d0Z6ymEN0+kya3rG
# AKJlopPZi5yFhKiL5Cx2Jk5VxkQdYnbCE6Lt7sAVG1RjA9y34bEFz867oYIUsjCC
# FK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcCAQMxDzAN
# BglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFRAgEBBgor
# BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIFOxyMRtF5qzJo4cI0bK8CE1M4xv
# 2SxpGAX7GARfuY5cAgZqwF6ht04YEzIwMjYxMDA2MDkxMjA0LjQ3M1owBIACAfSg
# gemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr
# BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG
# A1UECxMeblNoaWVsZCBUU1MgRVNOOjdBMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxN
# aWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eaCCDykw
# ggeCMIIFaqADAgECAhMzAAAABeXPD/9mLsmHAAAAAAAFMA0GCSqGSIb3DQEBDAUA
# MHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# SDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBD
# ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMDExMTkyMDMyMzFaFw0zNTEx
# MTkyMDQyMzFaMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFt
# cGluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnnzn
# UmP94MWfBX1jtQYioxwe1+eXM9ETBb1lRkd3kcFdcG9/sqtDlwxKoVIcaqDb+omF
# io5DHC4RBcbyQHjXCwMk/l3TOYtgoBjxnG/eViS4sOx8y4gSq8Zg49REAf5huXhI
# kQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5hJM1xznkRsFPu6rfDHeZeG1Wa1wISvlk
# pOQooTULFm809Z0ZYlQ8Lp7i5F9YciFlyAKwn6yjN/kR4fkquUWfGmMopNq/B8U/
# pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTPVi3gVErnc/qi+dR8A2MiAz0kN0nh7SqI
# NGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKxLms73KG/Z+MkeuaVDQQheangOEMGJ4pQ
# ZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxRYR/JPGAaM6xGl57Ei95HUw9NV/uC3yFj
# rhc087qLJQawSC3xzY/EXzsT4I7sDbxOmM2rl4uKK6eEpurRduOQ2hTkmG1hSuWY
# BunFGNv21Kt4N20AKmbeuSnGnsBCd2cjRKG79+TX+sTehawOoxfeOO/jR7wo3liw
# kGdzPJYHgnJ54UxbckF914AqHOiEV7xTnD1a69w/UTxwjEugpIPMIIE67SFZ2PMo
# 27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8FUXetXr0CAwEAAaOCAhswggIXMA4GA1Ud
# DwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUa2koOjUvSGNA
# z3vYr0npPtk92yEwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0
# bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
# QTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFMh+0mqFKhvKGZgEByfPUBBP
# aKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUy
# MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3JsMIGUBggr
# BgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUHMAKGdWh0dHA6Ly93d3cubWljcm9zb2Z0
# LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmlj
# YXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNy
# dDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2x35ttVoVdedMeGj6TuHYRJklFaW4sTQ5
# r+k77iB79cSLNe+GzRjv4pVjJviceW6AF6ycWoEYR0LYhaa0ozJLU5Yi+LCmcrdo
# vkl53DNt4EXs87KDogYb9eGEndSpZ5ZM74LNvVzY0/nPISHz0Xva71QjD4h+8z2X
# MOZzY7YQ0Psw+etyNZ1CesufU211rLslLKsO8F2aBs2cIo1k+aHOhrw9xw6JCWON
# NboZ497mwYW5EfN0W3zL5s3ad4Xtm7yFM7Ujrhc0aqy3xL7D5FR2J7x9cLWMq7eb
# 0oYioXhqV2tgFqbKHeDick+P8tHYIFovIP7YG4ZkJWag1H91KlELGWi3SLv10o4K
# Gag42pswjybTi4toQcC/irAodDW8HNtX+cbz0sMptFJK+KObAnDFHEsukxD+7jFf
# EV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9TlxydiFhvu88o0w35JkNbJxTk4MhF/Kg
# aXn0GxdH8elEa2Imq45gaa8D+mTm8LWVydt4ytxYP/bqjN49D9NZ81coE6aQWm88
# TwIf4R4YZbOpMKN0CyejaPNN41LGXHeCUMYmBx3PkP8ADHD1J2Cr/6tjuOOCztfp
# +o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdtoSAHEUKiBhI6JQivRepyvWcl+JYbYbBh7
# pmgAXVswggefMIIFh6ADAgECAhMzAAAAW0q1jUEybdx0AAAAAABbMA0GCSqGSIb3
# DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFtcGlu
# ZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwNVoXDTI3MDEwNzE4NTkwNVowgeMxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv
# c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs
# ZCBUU1MgRVNOOjdBMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVi
# bGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB
# BQADggIPADCCAgoCggIBAJBUzBbbnlDXee0B0KD5G4/475thFyfctCyuESTWQXvl
# Li4Wx/td2qUdeq4ideeg6VWhiOHfu3wJV4TUGSRtqh9Ccr1BmiBKv9iuFpgHyIBu
# 5Qx38ZsxwlFeXVS+ZqJJKnXRbDNQdcYSoC/6c0hQJ/PH50DBRDQkPXVwyFizLrRH
# 9AlrJeUg7BKeT23zftS8/KOJLvEEbHOF6pSOY3ZVprZUWbWjWwRTmoHaQ/E8vrWt
# LNyEJ+b089VW1Ikra3t4GTB5Wby3CL1K2zYnAxBIvafsKMFyj9OuXHcTPKMDoFSM
# eamG9MKOMb6uoG1PjdnDgsLP6EOMRSzrLL7jED1mbB9RSd9fhty+HQr6vZgsBn6o
# Uy+YTpNVLskwdtUM82WYAkPztlOt3AiL0qyV7/U3j/uq3vHMjPM0w0340M57Nei0
# g4BCcMt0dbqoc91VgCb3/36sHQANontn1HOF2oLk8190QRS43isHVra8H8sf5+Gl
# qIYsYiCKX04HZiOzZW826nVI6d++8lyTeWmpj90Ua9uPbJhVjwE3oh6tO510ySqm
# SMSLEN07p3Ibe3E6BAb2w93rWzb26+dpSthbKF4kApofqBsWPX4MEtHKSOftPmVT
# CQ47tghrVuHia9jY+Hsj01m4KW4WtkmVm3L6hMZECMa4sjMxAXz+bX/AJhWTe6TZ
# AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQU7/LqUlWWYhXJdXwgYKx4b8Gv0rYwHwYD
# VR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZb
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIw
# UHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5Bggr
# BgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
# bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0
# YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM
# MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQB
# gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEB
# DAUAA4ICAQAAH+zd+XKh4OxXYMWFmtgilXAQGctOjCUB1w/uBiC/OXcH3Ia4/Xbd
# UhKzFbaiTbIE6vYZKd1p4u7nKOLkawymAMVyuO7LSl6rLKttZIyLhWjTK0zXOz0u
# 4xLq9+bRtBEKJvA6sD5nJwH1IO6z1YizyuIRoalMCnbrUixfWxQn4TAmN7t9uk+X
# 2FUThEa3ewzRwhtG+xwaAbLMkxRmR24JnfXd1VxKo90+m7Wzuov96Uugx5wZdewi
# IIm1ZWTj4lCJHup679LcOa7tAxJMipVaSltQH9fm9TOKczlfxtWuBcLU4duZfqwg
# sILsH7PMkcX1zwQzQD0yAtPhnYz9KNG125bX+iilOe1S8RHqv2bbBpMpao4kcUvQ
# I6dMgKRvFmm1eLbhSNOQplDMTGD1tNVdNGkI96jUu+troUjWMMi46TQfBAHxtDTp
# RhIu/87vAVQ8Z6RHhFxesz4Ed5JThaIQRAy6GcO/Jk+QzDzoZ0arRIkIsGJ7rZgO
# VAjx9ctfw8lH9RfjcwB3wdGBYNMNVJqQpUai2Taddf5pXzTZEHIqLEF53SrBjIeI
# noQrP7U5VlXiMQsxewLdINrAE2l2TR3KBikb+RQRygbTp8jj2yiC0NCUwG+K+ndg
# lN5RMbXjFW6aKa59Xq+b8XzK/DK+AJtgOpHgJv8Qrk62A+twOVLOpjGCA9QwggPQ
# AgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n
# IENBIDIwMjACEzMAAABbSrWNQTJt3HQAAAAAAFswDQYJYIZIAWUDBAIBBQCgggEt
# MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgJQHs
# S/RjzCunD56NF2l/JWm9leIuWtB2MiU6dw+qL3swgd0GCyqGSIb3DQEJEAIvMYHN
# MIHKMIHHMIGgBCAvMQNVXZ0b0xxlGw8X/3IEybObuT6a5W1d61CW+cGD7zB8MGWk
# YzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg
# MjAyMAITMwAAAFtKtY1BMm3cdAAAAAAAWzAiBCBcKxkqgzn9zhHNbpT5vNIYd6t6
# mXCLS7Cam5KohKuSPDANBgkqhkiG9w0BAQsFAASCAgBQwxxBRw8W+4YPxgJC+1iQ
# BlXiizFnh+eq+2+lXSNybkiBEyLdeiYqQQ/yLleBEM+5kemeqPOzsTojEATkqIlb
# riCOMqf46Uqa/Vf3pP9z7r1WH58RBGIAMBBC39MsP4JtemKyiqdj6QbsYoLP73sH
# XJop+gonDliThv5ow9VsIbKBXx19TENyNY/1mQ3IIlsZM48SV7jzTBk0qiVdToNG
# 1/3ql4i08OatB235VV2k487agr1qIR5mZlPhiEa5k2hnX7nlAKOxuOrR82Ud2yU7
# QafXKmlUdeuWTf4Um7KEhFDZJNijVsRdH6xHwjOOOhd50fSLB9TyKSX11WvweH+9
# cIYqUb0IXEakisN9QjZQpIAzhhTBCmz+dN3onwdCEA0AttwyybklWTWzqJMrgNG0
# BJDj6GMmO2XUyReK7dt9bv+8ZQ1rRYRBabspHWq9Q8IvlpIC9WO7dArCUteNOhfL
# 5qDhx+QhC+jqfBn+PidhaZ9Bb7v0dBu/NStRzAECOaPLfwFilwaLPVMgHxWvyXNl
# JAyZA/kid/yhx+7JOcOSLYF9t4duaVgwsdvVkkGkqFjEob/bl9XBnMN8lCutSrIa
# KWqXzTYUL3YspkSPtZMCqSeElpZszvxtFcaBSpb+aFSIIULzTVOD5aQXvFFPcBcH
# xu4f64O3wUe3hefZAI9vnQ==
# SIG # End signature block