Private/Uninstallation.ps1
|
function Get-DotNetUninstallExecutable { param( [Parameter(Mandatory = $true)] [object] $Installation ) $path = [string] $Installation.BundleCachePath if ([string]::IsNullOrWhiteSpace($path)) { $command = [string] $Installation.UninstallString if ($command -match '^\s*"(?<path>[^"]+\.exe)"(?:\s|$)') { $path = $Matches.path } elseif ($command -match '^\s*(?<path>[^\s"]+\.exe)(?:\s|$)') { $path = $Matches.path } } if (-not [IO.Path]::IsPathRooted($path) -or [IO.Path]::GetExtension($path) -ine '.exe' -or -not (Test-Path -LiteralPath $path -PathType Leaf)) { throw "The cached uninstall executable for $($Installation.DisplayName) was not found. No uninstall was attempted." } $fileName = [IO.Path]::GetFileName($path) if ($fileName -notmatch '(?i)^(?:dotnet-sdk|dotnet-runtime|aspnetcore-runtime|windowsdesktop-runtime)-\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?-win-(?:x64|x86|arm64)\.exe$' -and $fileName -notmatch '(?i)^dotnet-(?:dev-)?win-(?:x64|x86)\.\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?\.exe$') { throw "The cached uninstall executable does not have a recognized .NET bundle name: '$fileName'." } $executableIdentity = Get-DotNetBundleIdentity -DisplayName $Installation.DisplayName ` -BundleCachePath $path -UninstallString '' if ($null -eq $executableIdentity -or $executableIdentity.ProductType -ne $Installation.ProductType -or $executableIdentity.Version -ne $Installation.Version -or $executableIdentity.Architecture -ne $Installation.Architecture) { throw "The cached uninstall executable does not match $($Installation.DisplayName). No uninstall was attempted." } return $path } function Invoke-DotNetUninstallPlan { param( [Parameter(Mandatory = $true)] [object[]] $Installations, [ValidateSet('Quiet', 'Passive', 'Interactive')] [string] $InstallerMode = 'Passive', [Nullable[bool]] $Elevate ) $restartRequired = $false $elevationPlan = Get-DotNetElevationPlan -OperationCount $Installations.Count -Elevate $Elevate $isAdministrator = $elevationPlan.IsAdministrator if ($elevationPlan.UseWorker) { $restartRequired = Invoke-DotNetElevatedOperation -Action Uninstall -Items $Installations ` -InstallerMode $InstallerMode Write-Host 'Selected .NET installations were uninstalled successfully.' if ($restartRequired) { Write-Host 'Restart Windows to complete the selected .NET uninstalls.' } return $restartRequired } foreach ($installation in $Installations) { $path = Get-DotNetUninstallExecutable -Installation $installation [void] (Assert-InstallerSignature -InstallerPath $path ` -ProductLabel $installation.ProductType -Version $installation.Version) Write-Host "Uninstalling $($installation.ProductType) $($installation.Version) ($($installation.Rid))..." if (-not $isAdministrator) { Write-Host ' Windows will request administrator approval for this machine-wide uninstall.' } try { $arguments = @(Get-DotNetInstallerArguments -Action Uninstall -InstallerMode $InstallerMode) $process = Start-Process -FilePath $path ` -ArgumentList $arguments -Verb RunAs -Wait -PassThru } catch { $nativeErrorCodeProperty = $_.Exception.PSObject.Properties['NativeErrorCode'] if ($null -ne $nativeErrorCodeProperty -and $nativeErrorCodeProperty.Value -eq 1223) { throw "Administrator approval was cancelled for $($installation.DisplayName)." } throw } if ($process.ExitCode -eq 3010) { $restartRequired = $true Write-Host " $($installation.DisplayName) uninstalled; Windows reports that a restart is required." } elseif ($process.ExitCode -eq 0) { Write-Host " $($installation.DisplayName) uninstalled successfully." } else { throw "The $($installation.DisplayName) uninstaller exited with code $($process.ExitCode)." } } if ($restartRequired) { Write-Host 'Restart Windows to complete the selected .NET uninstalls.' } return $restartRequired } function Select-DotNetUninstallVersionBand { param( [Parameter(Mandatory = $true)] [AllowEmptyCollection()] [object[]] $Installations, [Parameter(Mandatory = $true)] [string[]] $VersionBand ) $selectors = @() foreach ($value in $VersionBand) { foreach ($part in $value.Split(',')) { if (-not [string]::IsNullOrWhiteSpace($part)) { $selectors += $part.Trim() } } } if ($selectors.Count -eq 0) { throw '-VersionBand must contain at least one version selector.' } Assert-VersionBandSelectors -Selectors $selectors return Select-InstallationsByVersionBand -Installations $Installations -Selectors $selectors } function Invoke-DotNetUninstallSelection { param( [Parameter(Mandatory = $true)] [AllowEmptyCollection()] [object[]] $Installations, [Parameter(Mandatory = $true)] [string] $ParameterSetName, [Parameter(Mandatory = $true)] [bool] $Force, [Parameter(Mandatory = $true)] [System.Management.Automation.PSCmdlet] $Cmdlet, [ValidateSet('Quiet', 'Passive', 'Interactive')] [string] $InstallerMode = 'Passive', [Nullable[bool]] $Elevate ) if ($Installations.Count -eq 0) { Write-Host 'No matching uninstallable standalone .NET installations were found.' return } $Installations = @(Sort-DotNetInstallations -Installations $Installations) Write-Host '' Write-Host 'Uninstallable standalone .NET installations:' $Installations | Select-Object ProductType, Version, Architecture | Format-Table -AutoSize | Out-Host if ($ParameterSetName -eq 'Interactive') { $Installations = @(Select-UpdateCandidates -Candidates $Installations -Action uninstall) if ($Installations.Count -eq 0) { Write-Host 'No .NET installations were selected.' return } } $targets = @($Installations | ForEach-Object { "$($_.ProductType) $($_.Version) ($($_.Rid))" }) if (-not $Cmdlet.ShouldProcess(($targets -join ', '), 'Uninstall standalone .NET installations')) { if ($WhatIfPreference) { Show-DotNetElevationPreview -OperationCount $Installations.Count -Elevate $Elevate } return } if (-not $Force) { $answer = Read-Host "Uninstall $($Installations.Count) selected .NET installation(s)? [y/N]" if ($answer -notmatch '^(?i:y|yes)$') { Write-Host 'Uninstall cancelled.' return } } [void] (Invoke-DotNetUninstallPlan -Installations $Installations ` -InstallerMode $InstallerMode -Elevate $Elevate) } # SIG # Begin signature block # MII9KQYJKoZIhvcNAQcCoII9GjCCPRYCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAZ+Y2Hf09+D5K2 # usmj7AJ5GDtbumW9wiGpkdkheBarjKCCIewwggXMMIIDtKADAgECAhBUmNLR1FsZ # 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 # 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggajMIIEi6ADAgECAhMzAAgr2Z9x # i8O7kaQ7AAAACCvZMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQwHhcNMjYxMDEyMDYyMjUxWhcNMjYxMDE1 # MDYyMjUxWjBnMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjERMA8G # A1UEBxMISXNzYXF1YWgxFzAVBgNVBAoTDkRhbWlhbiBFZHdhcmRzMRcwFQYDVQQD # Ew5EYW1pYW4gRWR3YXJkczCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGB # AIomJ3JmdXDfPb8TVKcrN5Y31yAowbFp5k4YkCdSKhMWDwW6XDnESb3/RCAd1qze # WoysMqJFCUpXsEosbCOLgGk43Xfcd+Gisik1Gh1LI3fuTUO7rUY+qASVFGcMGfaG # cpHur3a9ozx4XvKfz+wAWOjlRWfAQ8L/LDAgGq95N7QNu60AtK04AzQ3h60jjFWc # IEjqA0ow7Po/4Ck627qOO8Ypi7r4tyBXT/5YduFcoSoFXnmw3LOamy1tD55micXo # +6wkiXlHPpP/q+0/v11l7srgX23fHUzjYK4K+NGftC0KCF/OEOuCVS8+htao4xMH # MQDJiiTDDtx2yVRTDlwTde9BOn5CHMFY6K7f62L8aIJD9RqMfy0wSUf5QgLjxnat # zaeObQiIIwy3LIjuHqUyB4ARTCK1iLAbS1rYs7bFiXZYqsnZUJzI6Tt5nBn2S5bN # ij1mkCsj7khlrjJ1lCHD16cYiGeAz1bbM+HPqjX/7np+BIf79B+fVXp/jnrUe0yA # 9QIDAQABo4IB0zCCAc8wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwOgYD # VR0lBDMwMQYKKwYBBAGCN2EBAAYIKwYBBQUHAwMGGSsGAQQBgjdh8PiHLKGwwBPl # htEVg5ShoiEwHQYDVR0OBBYEFO695zvjoAP+VYZjonSFbhHTvX5UMB8GA1UdIwQY # MBaAFJrxVHd1DIcWN0agrN55+fR/wXjpMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6 # Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIw # VmVyaWZpZWQlMjBDUyUyMEVPQyUyMENBJTIwMDQuY3JsMHQGCCsGAQUFBwEBBGgw # ZjBkBggrBgEFBQcwAoZYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j # ZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBFT0MlMjBDQSUy # MDA0LmNydDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0G # CSqGSIb3DQEBDAUAA4ICAQAe7jGXSeClV2q/CGYfsh5QN4FXvDeuvJ5+gaxekkck # o/tCXLqRgyj4u2J7tWB0eAMsxwiFeIAxeG5BKAMZVw4k5xwIziQ8xFc73Frbb0iw # EQoIFpoOFq9nh0rdhok7xfYw0DpXIQEFi49wnorMdofEwHQhUF/U7eXwyC9acDTK # f4Ks4o8wZ7t6R/O+mKikIU9pkWzx33jjIU/tbMieg/9yS4L4GD3bN3jNtYu+JLw2 # 5eTOtvMp5lkoLC7ESfX9UR7EzV5YLIhleaw0yBwQAOwsGl22gpesoydw4loQM92/ # 8gqlIu96o5bgew60dY5SpV1YnAFzM9wnNCB3gG1I9BtqQ9BeQHN3eA/QhwC8TbYJ # uuCX58uvfrOpctQ+mN3FzhTd0xN16RgbdNUWNh23Es1A2ztpVRWz22tOvYCMEeOo # kOAEIxuIt9WIXg8mPT7Wmitg6HYyygQmxCysAVlm5jXc6l+CAKRHgb5lpIJOQjWI # czMDOSV9aSsvwTJc6qF/2aG797G5uyGjHb5qQgx7QDbciqnvuW8JfYT4bl/4vS2b # TlA3kSHTDVusbMEa8ddvnr4xtNjyCYzy52uHxUcwt7rE0H7o/W8tDANQ0PkWwihf # CJnpooi1GLvVAGz09LDQHqTJ12ROwLp0DGJmhGclR4B4c5lcx4CnZ+F9zBZVpQfb # ADCCBqMwggSLoAMCAQICEzMACCvZn3GLw7uRpDsAAAAIK9kwDQYJKoZIhvcNAQEM # BQAwWjELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjErMCkGA1UEAxMiTWljcm9zb2Z0IElEIFZlcmlmaWVkIENTIEVPQyBDQSAwNDAe # Fw0yNjEwMTIwNjIyNTFaFw0yNjEwMTUwNjIyNTFaMGcxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMREwDwYDVQQHEwhJc3NhcXVhaDEXMBUGA1UEChMO # RGFtaWFuIEVkd2FyZHMxFzAVBgNVBAMTDkRhbWlhbiBFZHdhcmRzMIIBojANBgkq # hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAiiYncmZ1cN89vxNUpys3ljfXICjBsWnm # ThiQJ1IqExYPBbpcOcRJvf9EIB3WrN5ajKwyokUJSlewSixsI4uAaTjdd9x34aKy # KTUaHUsjd+5NQ7utRj6oBJUUZwwZ9oZyke6vdr2jPHhe8p/P7ABY6OVFZ8BDwv8s # MCAar3k3tA27rQC0rTgDNDeHrSOMVZwgSOoDSjDs+j/gKTrbuo47ximLuvi3IFdP # /lh24VyhKgVeebDcs5qbLW0PnmaJxej7rCSJeUc+k/+r7T+/XWXuyuBfbd8dTONg # rgr40Z+0LQoIX84Q64JVLz6G1qjjEwcxAMmKJMMO3HbJVFMOXBN170E6fkIcwVjo # rt/rYvxogkP1Gox/LTBJR/lCAuPGdq3Np45tCIgjDLcsiO4epTIHgBFMIrWIsBtL # WtiztsWJdliqydlQnMjpO3mcGfZLls2KPWaQKyPuSGWuMnWUIcPXpxiIZ4DPVtsz # 4c+qNf/uen4Eh/v0H59Ven+OetR7TID1AgMBAAGjggHTMIIBzzAMBgNVHRMBAf8E # AjAAMA4GA1UdDwEB/wQEAwIHgDA6BgNVHSUEMzAxBgorBgEEAYI3YQEABggrBgEF # BQcDAwYZKwYBBAGCN2Hw+IcsobDAE+WG0RWDlKGiITAdBgNVHQ4EFgQU7r3nO+Og # A/5VhmOidIVuEdO9flQwHwYDVR0jBBgwFoAUmvFUd3UMhxY3RqCs3nn59H/BeOkw # ZwYDVR0fBGAwXjBcoFqgWIZWaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w # cy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENTJTIwRU9DJTIwQ0El # MjAwNC5jcmwwdAYIKwYBBQUHAQEEaDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVy # aWZpZWQlMjBDUyUyMEVPQyUyMENBJTIwMDQuY3J0MFQGA1UdIARNMEswSQYEVR0g # ADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L0RvY3MvUmVwb3NpdG9yeS5odG0wDQYJKoZIhvcNAQEMBQADggIBAB7uMZdJ4KVX # ar8IZh+yHlA3gVe8N668nn6BrF6SRySj+0JcupGDKPi7Ynu1YHR4AyzHCIV4gDF4 # bkEoAxlXDiTnHAjOJDzEVzvcWttvSLARCggWmg4Wr2eHSt2GiTvF9jDQOlchAQWL # j3Ceisx2h8TAdCFQX9Tt5fDIL1pwNMp/gqzijzBnu3pH876YqKQhT2mRbPHfeOMh # T+1syJ6D/3JLgvgYPds3eM21i74kvDbl5M628ynmWSgsLsRJ9f1RHsTNXlgsiGV5 # rDTIHBAA7CwaXbaCl6yjJ3DiWhAz3b/yCqUi73qjluB7DrR1jlKlXVicAXMz3Cc0 # IHeAbUj0G2pD0F5Ac3d4D9CHALxNtgm64Jfny69+s6ly1D6Y3cXOFN3TE3XpGBt0 # 1RY2HbcSzUDbO2lVFbPba069gIwR46iQ4AQjG4i31YheDyY9PtaaK2DodjLKBCbE # LKwBWWbmNdzqX4IApEeBvmWkgk5CNYhzMwM5JX1pKy/BMlzqoX/Zobv3sbm7IaMd # vmpCDHtANtyKqe+5bwl9hPhuX/i9LZtOUDeRIdMNW6xswRrx12+evjG02PIJjPLn # a4fFRzC3usTQfuj9by0MA1DQ+RbCKF8ImemiiLUYu9UAbPT0sNAepMnXZE7AunQM # YmaEZyVHgHhzmVzHgKdn4X3MFlWlB9sAMIIHKDCCBRCgAwIBAgITMwAAABcnRQkL # i4evxgAAAAAAFzANBgkqhkiG9w0BAQwFADBjMQswCQYDVQQGEwJVUzEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTQwMgYDVQQDEytNaWNyb3NvZnQgSUQg # VmVyaWZpZWQgQ29kZSBTaWduaW5nIFBDQSAyMDIxMB4XDTI2MDMyNjE4MTEzMVoX # DTMxMDMyNjE4MTEzMVowWjELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IElEIFZlcmlmaWVkIENT # IEVPQyBDQSAwNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAILHZP4D # D2YqAZXMn5OrQ8yfj0beK0ixilvHsKUtJEcV7VEQt09xnWwipY6GxJ/LrLKoRqkK # UYf0l70VcDVxCBm++lBuSD5AidUuv/QQ+tUELCsz3qVtEjY/E14LBcb0uzJbaEbo # pCCKe0OY0IGjjOkMivfvumVV1KWJmbpQHusfCa8GdHTZBPq2euparaKHMHqVElVM # TO6HQ5p/Mgx4ydgzT7H697kQ4sd1+Kr4deIx/0lvtgse1iDIciIkDttNYuoVIsZp # OHtmVvFuwtcD3U46ugSm/s6PMW67e2SkL0V+UDgOnYS6rj6o+bFSp8an5NfSAtEm # n00k7PMguNxMPeuQUUVvFS/XHKDpq+K8UMu2goGEzZN3Xfy6YTWk05pxqe5Ji08c # h5AeYHqFoWLrhq8sEvBNMCb9FuK3zrRwVdHvbCr7lCHiFKZ7MeopcRFY+lUF74A+ # sngipz5o94yYiSgJZlA7bYecs0VQVJeOLDIhuC+Uf8sgAkSpNp9PPENmAqGUtTvO # vqDCyrdY2lxhAjo27FafCHdVUMPIXuidCoqzkuXtuV5U3RjxW+qATjmmnIFu/Co3 # 9G6fl8wIJHPdpgxjSRmEo73Z4/u3jMepnltAwCBnS0TY/P+NvTCLKRQX89yg6qqT # e9UuJENiy3q93cYQw3MylRS9By8Ebjr4I4hvAgMBAAGjggHcMIIB2DAOBgNVHQ8B # Af8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFJrxVHd1DIcWN0ag # rN55+fR/wXjpMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w # GQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwEgYDVR0TAQH/BAgwBgEB/wIBADAf # BgNVHSMEGDAWgBTZQSmwDw9jbO9p1/XNKZ6kSGow5jBwBgNVHR8EaTBnMGWgY6Bh # hl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl # MjBJRCUyMFZlcmlmaWVkJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDIxLmNy # bDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6Ly93d3cubWljcm9z # b2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUy # MENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyMS5jcnQwDQYJKoZIhvcNAQEMBQAD # ggIBAJB1Whn9TSbfyXaIppkWWzFq+m2mg4vJpHVr1krZNIXWQ6cUmEwOx7oqQKCy # 96iISNdNVzpe3zogoefvo2TmpkHQFe/aIxFDaCIAmZi9lyay2hmp8HYzcp3nCcmF # Qk60X9voeypJ6VjqeGsXTrOivWUOYNCLEFlwsH3NHX5EpCyjWN6Q3Fi5ST4do3eT # VLnuqTQ7/9huTBTSYQsJbTg3m8gIxnHlPlzs2r/u4u9tWEJ0Pt/ZtmkDhTu86QHW # igHgBoRHemOgnQxp3ksXKLo1r2n1m7+Gst46NTkUi1LljGyq+V9fEBOEnXvoKaRi # y0pGbK1IdnsmEpF9Xp71l+2T84Nv8IrikZUBWqw5/jffttAas4ccJDci832CadS4 # OHwl29uF6hY8fEg3UYHmxSJjnzi1c3vF0PwsJKxGom9Dx7treBlZOBWK6BGzVBar # 43Qb02N7okeU3UKMl6GB74fk8aS0mNr6O4YSvQ/66RKRwvqppnEVBOHdIMjvWW9b # 77duX8TN3pI7w31R3D6t6jK9EcLJOJKymVlBIFNUl0+ajeoKka7IcW0+jkIGff8U # 9OKol3cz0Eeiop3Qb0qaDp8ZwC8XCcs1cDaSi/vbvBGWMvfKl+ovuIBP9ienG6Xp # HAdGVw5/10MaDVFG+v3Y0/8JZVchvryB5Hau9T82x+a2MXXAMIIHnjCCBYagAwIB # AgITMwAAAAeHozSje6WOHAAAAAAABzANBgkqhkiG9w0BAQwFADB3MQswCQYDVQQG # EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMUgwRgYDVQQDEz9N # aWNyb3NvZnQgSWRlbnRpdHkgVmVyaWZpY2F0aW9uIFJvb3QgQ2VydGlmaWNhdGUg # QXV0aG9yaXR5IDIwMjAwHhcNMjEwNDAxMjAwNTIwWhcNMzYwNDAxMjAxNTIwWjBj # MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTQw # MgYDVQQDEytNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ29kZSBTaWduaW5nIFBDQSAy # MDIxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsvDArxmIKOLdVHpM # SWxpCFUJtFL/ekr4weslKPdnF3cpTeuV8veqtmKVgok2rO0D05BpyvUDCg1wdsoE # tuxACEGcgHfjPF/nZsOkg7c0mV8hpMT/GvB4uhDvWXMIeQPsDgCzUGzTvoi76YDp # xDOxhgf8JuXWJzBDoLrmtThX01CE1TCCvH2sZD/+Hz3RDwl2MsvDSdX5rJDYVuR3 # bjaj2QfzZFmwfccTKqMAHlrz4B7ac8g9zyxlTpkTuJGtFnLBGasoOnn5NyYlf0xF # 9/bjVRo4Gzg2Yc7KR7yhTVNiuTGH5h4eB9ajm1OCShIyhrKqgOkc4smz6obxO+Hx # KeJ9bYmPf6KLXVNLz8UaeARo0BatvJ82sLr2gqlFBdj1sYfqOf00Qm/3B4XGFPDK # /H04kteZEZsBRc3VT2d/iVd7OTLpSH9yCORV3oIZQB/Qr4nD4YT/lWkhVtw2v2s0 # TnRJubL/hFMIQa86rcaGMhNsJrhysLNNMeBhiMezU1s5zpusf54qlYu2v5sZ5zL0 # KvBDLHtL8F9gn6jOy3v7Jm0bbBHjrW5yQW7S36ALAt03QDpwW1JG1Hxu/FUXJbBO # 2AwwVG4Fre+ZQ5Od8ouwt59FpBxVOBGfN4vN2m3fZx1gqn52GvaiBz6ozorgIEjn # +PhUXILhAV5Q/ZgCJ0u2+ldFGjcCAwEAAaOCAjUwggIxMA4GA1UdDwEB/wQEAwIB # hjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU2UEpsA8PY2zvadf1zSmepEhq # MOYwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAZBgkrBgEE # AYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaA # FMh+0mqFKhvKGZgEByfPUBBPaKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0 # eSUyMFZlcmlmaWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0 # eSUyMDIwMjAuY3JsMIHDBggrBgEFBQcBAQSBtjCBszCBgQYIKwYBBQUHMAKGdWh0 # dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIw # SWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBB # dXRob3JpdHklMjAyMDIwLmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3Au # bWljcm9zb2Z0LmNvbS9vY3NwMA0GCSqGSIb3DQEBDAUAA4ICAQB/JSqe/tSr6t1m # CttXI0y6XmyQ41uGWzl9xw+WYhvOL47BV09Dgfnm/tU4ieeZ7NAR5bguorTCNr58 # HOcA1tcsHQqt0wJsdClsu8bpQD9e/al+lUgTUJEV80Xhco7xdgRrehbyhUf4pkeA # hBEjABvIUpD2LKPho5Z4DPCT5/0TlK02nlPwUbv9URREhVYCtsDM+31OFU3fDV8B # mQXv5hT2RurVsJHZgP4y26dJDVF+3pcbtvh7R6NEDuYHYihfmE2HdQRq5jRvLE1E # b59PYwISFCX2DaLZ+zpU4bX0I16ntKq4poGOFaaKtjIA1vRElItaOKcwtc04CBrX # SfyL2Op6mvNIxTk4OaswIkTXbFL81ZKGD+24uMCwo/pLNhn7VHLfnxlMVzHQVL+b # Ha9KhTyzwdG/L6uderJQn0cGpLQMStUuNDArxW2wF16QGZ1NtBWgKA8Kqv48M8Hf # FqNifN6+zt6J0GwzvU8g0rYGgTZR8zDEIJfeZxwWDHpSxB5FJ1VVU1LIAtB7o9PX # bjXzGifaIMYTzU4YKt4vMNwwBmetQDHhdAtTPplOXrnI9SI6HeTtjDD3iUN/7ygb # ahmYOHk7VB7fwT4ze+ErCbMh6gHV1UuXPiLciloNxH6K4aMfZN1oLVk6YFeIJEok # uPgNPa6EnTiOL60cPqfny+Fq8UiuZzGCGpMwghqPAgEBMHEwWjELMAkGA1UEBhMC # VVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWlj # cm9zb2Z0IElEIFZlcmlmaWVkIENTIEVPQyBDQSAwNAITMwAIK9mfcYvDu5GkOwAA # AAgr2TANBglghkgBZQMEAgEFAKBeMBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 # DQEJAzEMBgorBgEEAYI3AgEEMC8GCSqGSIb3DQEJBDEiBCALE0KkBDiuHKpsKzlA # WNjLpJB4xxkAQcDGXktZZRIbPDANBgkqhkiG9w0BAQEFAASCAYA/oMt6tNuh8I49 # AxtoyjGeBuD/ed4tMG3NbwKJPJx1wTXKkh5ep1dITSBvxRs/hRX/zjBAbunFoOhd # Ul0m8bjRVeGXR1/7o3ZoliSPx4iadkjQ5Nk7pPDUYn+14/E6tQacaa9cq3/9AVlb # 72crPcV38tqt3i8ZkdWg5ruzUp/Em4VVOZihQqUz5lCs3GQyDOkBaCeUoAyU21Qj # 2NeHe6tsWzXla74JpkbNW56JOTAaJlLYxbLpvVKQdszHgeQhuSEPMH7OrFKnsQOw # 1c5c5fL1/3wP0B5804CHj3QlQJBp3xMxPwyy0lS6LyyVc4Rf8UgzZP2+DIAArdyE # AoQEJPLykqVJBpj7qMGynI3L/aSzDBmOzBABh3I8A8d6SO2alzpNtOjIt/jHcCrb # Ko7esL0T5AW37k7RU+KIB8ZSN13GWOGvAfU+s61bvz0cDL/Yz3NfH4BVffgHI87Y # G7Iy8DbsFd5jI0J1vhqG74tBWONZD910oHfh1DBsLYo+4Yo16aWhghgTMIIYDwYK # KwYBBAGCNwMDATGCF/8wghf7BgkqhkiG9w0BBwKgghfsMIIX6AIBAzEPMA0GCWCG # SAFlAwQCAQUAMIIBYQYLKoZIhvcNAQkQAQSgggFQBIIBTDCCAUgCAQEGCisGAQQB # hFkKAwEwMTANBglghkgBZQMEAgEFAAQgYYMJ/RHPea338Mc2CkDnQ1+R4smYlNuQ # CzZCDDvRCnQCBmrJPbEWRhgSMjAyNjEwMTMyMjEyMDkuMjRaMASAAgH0oIHhpIHe # MIHbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH # UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQL # ExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxk # IFRTUyBFU046N0QwMC0wNUUwLUQ5NDcxNTAzBgNVBAMTLE1pY3Jvc29mdCBQdWJs # aWMgUlNBIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5oIIPITCCB4IwggVqoAMCAQIC # EzMAAAAF5c8P/2YuyYcAAAAAAAUwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMC # VVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWlj # cm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1 # dGhvcml0eSAyMDIwMB4XDTIwMTExOTIwMzIzMVoXDTM1MTExOTIwNDIzMVowYTEL # MAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG # A1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAw # ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCefOdSY/3gxZ8FfWO1BiKj # HB7X55cz0RMFvWVGR3eRwV1wb3+yq0OXDEqhUhxqoNv6iYWKjkMcLhEFxvJAeNcL # AyT+XdM5i2CgGPGcb95WJLiw7HzLiBKrxmDj1EQB/mG5eEiRBEp7dDGzxKCnTYoc # DOcRr9KxqHydajmEkzXHOeRGwU+7qt8Md5l4bVZrXAhK+WSk5CihNQsWbzT1nRli # VDwunuLkX1hyIWXIArCfrKM3+RHh+Sq5RZ8aYyik2r8HxT+l2hmRllBvE2Wok6IE # aAJanHr24qoqFM9WLeBUSudz+qL51HwDYyIDPSQ3SeHtKog0ZubDk4hELQSxnfVY # XdTGncaBnB60QrEuazvcob9n4yR65pUNBCF5qeA4QwYnilBkfnmeAjRN3LVuLr0g # 0FXkqfYdUmj1fFFhH8k8YBozrEaXnsSL3kdTD01X+4LfIWOuFzTzuoslBrBILfHN # j8RfOxPgjuwNvE6YzauXi4orp4Sm6tF245DaFOSYbWFK5ZgG6cUY2/bUq3g3bQAq # Zt65KcaewEJ3ZyNEobv35Nf6xN6FrA6jF9447+NHvCjeWLCQZ3M8lgeCcnnhTFty # QX3XgCoc6IRXvFOcPVrr3D9RPHCMS6Ckg8wggTrtIVnY8yjbvGOUsAdZbeXUIQAW # Ms0d3cRDv09SvwVRd61evQIDAQABo4ICGzCCAhcwDgYDVR0PAQH/BAQDAgGGMBAG # CSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRraSg6NS9IY0DPe9ivSek+2T3bITBU # BgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy # b3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoG # CCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQF # MAMBAf8wHwYDVR0jBBgwFoAUyH7SaoUqG8oZmAQHJ89QEE9oqKIwgYQGA1UdHwR9 # MHsweaB3oHWGc2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p # Y3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRp # ZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcmwwgZQGCCsGAQUFBwEBBIGHMIGE # MIGBBggrBgEFBQcwAoZ1aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j # ZXJ0cy9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUyMFJvb3Ql # MjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3J0MA0GCSqGSIb3DQEB # DAUAA4ICAQBfiHbHfm21WhV150x4aPpO4dhEmSUVpbixNDmv6TvuIHv1xIs174bN # GO/ilWMm+Jx5boAXrJxagRhHQtiFprSjMktTliL4sKZyt2i+SXncM23gRezzsoOi # Bhv14YSd1Klnlkzvgs29XNjT+c8hIfPRe9rvVCMPiH7zPZcw5nNjthDQ+zD563I1 # nUJ6y59TbXWsuyUsqw7wXZoGzZwijWT5oc6GvD3HDokJY401uhnj3ubBhbkR83Rb # fMvmzdp3he2bvIUztSOuFzRqrLfEvsPkVHYnvH1wtYyrt5vShiKheGpXa2AWpsod # 4OJyT4/y0dggWi8g/tgbhmQlZqDUf3UqUQsZaLdIu/XSjgoZqDjamzCPJtOLi2hB # wL+KsCh0Nbwc21f5xvPSwym0Ukr4o5sCcMUcSy6TEP7uMV8RX0eH/4JLEpGyae6K # i8JYg5v4fsNGif1OXHJ2IWG+7zyjTDfkmQ1snFOTgyEX8qBpefQbF0fx6URrYiar # jmBprwP6ZObwtZXJ23jK3Fg/9uqM3j0P01nzVygTppBabzxPAh/hHhhls6kwo3QL # J6No803jUsZcd4JQxiYHHc+Q/wAMcPUnYKv/q2O444LO1+n6j01z5mggCSlRwD9f # aBIySAcA9S8h22hIAcRQqIGEjolCK9F6nK9ZyX4lhthsGHumaABdWzCCB5cwggV/ # oAMCAQICEzMAAABfKuT4I0W8GkkAAAAAAF8wDQYJKoZIhvcNAQEMBQAwYTELMAkG # A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE # AxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAwHhcN # MjYwOTE3MTg1NzI1WhcNMjcwOTE0MTg1NzI1WjCB2zELMAkGA1UEBhMCVVMxEzAR # BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg # T3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjdEMDAtMDVFMC1E # OTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5n # IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOdUl8Ne # dLs3VQ2koPcvNTdChdfvpgMFqTaUUIBfKxHPTVorMISrSoEXq4fj410h24sCKpWb # 1+LulcEQ3TZjaNqAUX4nhMRq0zcOepGiwgd9cFb8gTLeS8YuIZCHNtRJPqaAM1PR # IUYLFK+zGCUCynAS9Oxhl9/zxnUqyzU5IMWlM/9qGb3JkuH/KqqFQTlIdtomu0BS # Rz1DmtdpqMRps3tvBbvficbaPJCxGfRrPStgk2Ky8bOikj9dFsI6LgI9n0oKh9jz # qG93rooMy8KZo+mIfinSbtDWATX6BAUyS1e5D8eR6GV5En/2M94fRvV0DRXDYm06 # raZEfD6XY2DHUSb56BFWv/L633ObG7mKyZFXmfR9eh1VBg7Ax1j7y59TEsTE4OE3 # dyb+mObZwJ5f8h8YkBZRNc1v3Nnyn2Lw/mXEnihGL1E5qd9f22dFfKZhDg/SC94B # Am+2unBobDGb6c4OllDaVuugsC/5uTFyxM6zNKiTZ2FBdUZGkPCGLhmM3ST39Oot # Arv3XhLImS24ZAnGRt1lY/ybgY2EIipfDisKrP/0GsJ+znMsVNXFi9yd+8ej7Wug # siq8Wdq64hQTICAyRySAyeJMD4p75ZFA28C546NIbNEpovdN3pg3RvSB/71xsz0o # hSL3ofubIN3ol2G5JZHx2GTjOZkT+bBOhl1dAgMBAAGjggHLMIIBxzAdBgNVHQ4E # FgQUUodPDdEuenjFeaL29gqA7/w5WtwwHwYDVR0jBBgwFoAUa2koOjUvSGNAz3vY # r0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZbaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0 # YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5BggrBgEFBQcBAQRtMGswaQYIKwYBBQUH # MAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9z # b2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNy # dDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB # /wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIB # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y # eS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEBDAUAA4ICAQAxolcM7ro14Qopp30x # aTVEKAUJBtANX1pePyuKKhQoevySvsWXQONhjRqCGeUG8ZbOHDEwx3xAh6/gOWcy # GfQGTg7x5D670wG7St8HWspA721iwviz9Emadx6Xmql9/fjEqI7JZvgKKqasEAdM # Wswa2f3ktgIWqCjV3dHKC4SfRJ8M4TtPwuxYBhvri1kuagUO++ur6YLhI237TYr1 # OaHaPWF5T7j25oR0ScAXIWUhWyzVf/SXXHupw83RudfaO7DicMwCEiw05YVzdnsx # +DakSKRWKPTtqr4zV3zQ6KKah6HoNAaAz2nHaLoiU62eBdhcmEtZcEFq2NQkt+ts # 7pIRVnpQYjpPBwsX8lyz55KyiiHcSHoBFR8/9iM3IcUFXPY5NnfplGXVD0hsmmGQ # QBmGGP13Vef+xurwt1qGeHbnE6Aks4SOJN6fE5X57IDGkrkNvzK8rm1+8Oo7z8dP # jV4WLkvUTnMtkoLfOOqvswM4VjNmhWqcJn/2hr1CLT44hHHTZBH8E4Ri4ZTtqfjR # QwPHlgF+vVQjYoBgFIXsvTxSZG2LLWyxMRkyxCQdpplj6ZUnUDY4ij9cxOZPZcVs # naj/VLML72DHHvUJoS9XWaFMnu2NAbg81JwGj6CiY3tyQ/btHWA01Hcaouw9BWWy # OENI5eAuS/VLRsHyqi4THRXDIzGCB0YwggdCAgEBMHgwYTELMAkGA1UEBhMCVVMx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9z # b2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMAAABfKuT4I0W8 # GkkAAAAAAF8wDQYJYIZIAWUDBAIBBQCgggSfMBEGCyqGSIb3DQEJEAIPMQIFADAa # BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MTAx # MzIyMTIwOVowLwYJKoZIhvcNAQkEMSIEIJY02PouafNRQyGlpRlf9KH/67CeO3/s # DbFWA7qmHXVqMIG5BgsqhkiG9w0BCRACLzGBqTCBpjCBozCBoAQgbPYJfqtX9IDg # 0oUk9Eqwt1BebJx51uJ/MF5Sx1suJcMwfDBlpGMwYTELMAkGA1UEBhMCVVMxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0 # IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMAAABfKuT4I0W8GkkA # AAAAAF8wggNhBgsqhkiG9w0BCRACEjGCA1AwggNMoYIDSDCCA0QwggIsAgEBMIIB # CaGB4aSB3jCB2zELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEl # MCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMe # blNoaWVsZCBUU1MgRVNOOjdEMDAtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3Nv # ZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eaIjCgEBMAcGBSsO # AwIaAxUAcQk63vC8u5jLrwCI8lNL7oby7G+gZzBlpGMwYTELMAkGA1UEBhMCVVMx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9z # b2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAwDQYJKoZIhvcNAQEL # BQACBQDueQIuMCIYDzIwMjYxMDEzMTkxNzAyWhgPMjAyNjEwMTQxOTE3MDJaMHcw # PQYKKwYBBAGEWQoEATEvMC0wCgIFAO55Ai4CAQAwCgIBAAICCJsCAf8wBwIBAAIC # ErswCgIFAO56U64CAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAK # MAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQsFAAOCAQEAHbpeLeQG # dRn9mBHdonx+WjKtAdw/1yn8X3zz2mGdoH44WcoNKpthcPMTxMNNcBWDD4e5c9Qi # CZbxDWAWpQgVjvlE3ZsWIeKiNcFB71gSnuOFaFqCDU+XN1wcpDYefFJ07UAnbp3U # 5bxnhXQ6O+US7PuBbhR/uqzFIW5Lr0UWxZiyNdLBtiqbPx+TJI//oA5czGjbvTS4 # R+C4X7CU/2oBjT/rSadRaQnGFCoVo8VyuzSEzbMda81/NV8D8leyFb7rMQthzyMk # H2c3EFNbYdZ36o+xmYwvtlJxD000/veGmV24Q4d0L/FJPn9NWHqJTN1a+2FkXt8p # uqB2Khdnqgq8fTANBgkqhkiG9w0BAQEFAASCAgBPj05vrm1CP72BCX57wq0oPKJt # nTzUpsxsSriBJ1IPXlTC0oeAyj2Q+NMXTgaShDGomR/JfchoL+3mo2SC1TqD4O9a # GyCUX9WKb4zLtjm9AYzVStJaYruZlMyWnfsGFLXf24XspW0+LfrN5U6DjwqB7CKY # JxBKSMe+z4TMkyQAFOBRh9rkOUMIAABGzQkDvqcCqg+PZF4IAdGsEKjZHD33nrrA # Fgbk8OB++aZEK+MvmYGLA0A+7hI6L5NO8EpwZDn+hme2QrjXJHTuzo1tdcx7n1dR # jtvrtYJ4UPWP337Umy7lEcCuPuZVTGmGHB0037YVP65RVsUN7s8qbX+biFwg2+jx # WIr9TYfzw6CB7eJPZzB1512Orpe7REvSw8ts7R4IKYG1JOJxx76HNkq7Y8dSip9N # vMsDlqYUlEGYOn8jfo8MlJXOdD4sn8oFPK9cvoZ/P1MHYNX6DLs4idM058GdshkL # FGccQUKkoo++Y8rAGENuRt03w57398HaEgZNxXyVPwyWmG8lXBnHXuEuCHOnvOeN # 5uoPuRhKIA2TDKINx6szXJzfzwGTSIZRjkFGy9TMQ7OO89e6wgzSgG9yMhdnGRqs # agtUNZeQxQ8FkesfA8Tw+qgFLUL2IWmLLRHB5toUPPi9RcTewBze0WkXm6gcU30s # 2Rjxp2Jwg+TKXl/KNQ== # SIG # End signature block |