cleanup.ps1
|
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')] param( $module = "dbatools" ) # Which process should we be looking for? if ($psedition -eq 'Core') { $process = "pwsh" } else { $process = "powershell" } if (($PSVersionTable.PSVersion.Major -le 5) -or ($PSVersionTable.PSVersion.Major -gt 6 -and $PSVersionTable.OS -contains "Windows")) { $isElevated = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) $ise = Get-Process powershell_ise -ErrorAction SilentlyContinue if ($ise) { return "PowerShell ISE found in use. Please close this program before using this script." } } else { $isElevated = $null; $ise = $null; } $installedVersion = Get-InstalledModule $module -AllVersions | Select-Object Version, InstalledLocation Write-Output "The currently installed version(s) of $module is/are: " $installedVersion.Version $results = foreach ($v in $installedVersion) { if ($v.InstalledLocation -match "C:\\Users") { Add-Member -Force -InputObject $v -MemberType NoteProperty -Name IsUserScope -value $true } else { if (-not $isElevated) { Write-Output "$module version $v.Version cannot be removed without elevated session." } Add-Member -Force -InputObject $v -MemberType NoteProperty -Name IsUserScope -value $false } $v } $newestVersion = Find-Module $module | Select-Object Version Write-Output "`nThe latest version of $module in the PSGallery is: $($newestVersion.Version)" $olderVersions = @( ) if ($installedVersion.Count -gt 1) { $olderVersions = @($installedVersion | Where-Object { [version]$_.Version -lt [version]$newestVersion.Version }) } if ( ($olderVersions.Count -gt 0) -and $newestVersion.Version -in $installedVersion.Version ) { Write-Output "Latest version of $module found on $env:COMPUTERNAME." Write-Output "Older versions of $module also found. These will be uninstalled now." if ($isElevated) { $processes = Get-Process $process -IncludeUserName -ErrorAction SilentlyContinue | Where-Object Id -NE $pid } else { $processes = Get-Process $process -ErrorAction SilentlyContinue | Where-Object Id -NE $PID } if ($processes.Count -gt 0) { if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Killing $($processes.Count) processes of powershell running")) { Write-Output "Death to the following process(es): $(($processes.Id) -join ",")" $processes | Stop-Process -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { Write-Warning "Not able to kill following processes: $((Get-Process $process | Where-Object Id -NE $pid).Id -join ",")" } } } if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Removing old versions of $module.")) { foreach ($v in $olderVersions.Version) { Uninstall-Module $module -RequiredVersion $v -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { if ($dangit.Exception -like "*Administrator rights*") { Write-Warning "Elevated session is required to uninstall $module version: $v" } else { Write-Warning "Unable to remove $module version [$v] due to: `n`t$($dangit.Exception)" } } } } Write-Output "The End" } elseif ( ($olderVersions.Count -gt 0) -and $newestVersion.Version -notin $installedVersion.Version ) { Write-Output "Update of $module is available" Write-Output "Older versions of $module found. These will be uninstalled now." if ($isElevated) { $processes = Get-Process $process -ErrorAction SilentlyContinue -IncludeUserName | Where-Object Id -NE $pid } else { $processes = Get-Process $process -ErrorAction SilentlyContinue | Where-Object Id -NE $PID } if ($processes.Count -gt 0) { if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Killing $($processes.Count) processes of powershell running")) { Write-Output "Death to the following process(es): $(($processes.Id) -join ",")" $processes | Stop-Process -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { Write-Warning "Not able to kill following processes: $((Get-Process $process | Where-Object Id -NE $pid).Id -join ",")" } } } if ($Pscmdlet.ShouldProcess("$env:COMPUTERNAME", "Removing old versions of $module.")) { foreach ($v in $olderVersions.Version) { Uninstall-Module $module -RequiredVersion $v -ErrorVariable dangit -ErrorAction SilentlyContinue -Force if ($dangit) { if ($dangit.Exception -like "*Administrator rights*") { Write-Warning "Elevated session is required to uninstall $module version: $v" } else { Write-Warning "Unable to remove $module version [$v] due to: `n`t$($dangit.Exception)" } } } } Write-Output "Continuing to install latest release of $module" Install-Module $module -Force Write-Output "The End" } else { Write-Output "No update/actions required." } # SIG # Begin signature block # MIIt3AYJKoZIhvcNAQcCoIItzTCCLckCAQMxDTALBglghkgBZQMEAgEwewYKKwYB # BAGCNwIBBKBtBGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBbC7m38uJKN0Fh # yce8/lpvD8KrpB4HRQCSsGB5ShHRlaCCFdswggbXMIIEv6ADAgECAhMzAAac8WZV # O5eVqwu+AAAABpzxMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDIwHhcNMjUxMjIxMDU1MTE1WhcNMjUxMjI0 # MDU1MTE1WjBXMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExDzANBgNV # BAcTBlZpZW5uYTERMA8GA1UEChMIZGJhdG9vbHMxETAPBgNVBAMTCGRiYXRvb2xz # MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAhd+udwnPfq0pBCD/vPYO # 1Co6bHJ4xecr2bl77J6rYpbe6IC+PjPoJbeGnJn8IBhMKRw3PzBiSNIjxzJI/7lv # YuAW8uLJEsduRXDRcBtmWeauDcbjU+1Vw8mcJbrGqQCX6AhdX6Hkk3BCQnGrMbwF # 6iPD9dkshhCNkPKkvJMqUd5Z85O1czDi5W0gCKsXm6RViZEFl1WkiT7etE6tAQ/V # unLchbwx8nx/JPu+eK7Z2NS0DNcQxaerL6Ymwur9lmSEP3yAXJtl9Gs8dVu/dP8O # b0BTQziAL3MNVUPMJZcKuSGmpMtFk3Q9NzO6EwAyOcQcUV7lzjPQXJ4R2+kylGhI # rb/98tJYZMm75MfAT31A/txaXJs0Ja2hI9GitWN+lUDrwas0RCztunrvfnWRte2M # E+/W0c9z2fgHFyY7ay02jfranR1mrE+4z/+ITnpe8m39NA7G/gA150JKqRDmTT0J # kNgPoI0djwlp9Ht7I7DAvRD4JNVjP2omvRvlEmkpxmH5AgMBAAGjggIXMIICEzAM # BgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA6BgNVHSUEMzAxBgorBgEEAYI3 # YQEABggrBgEFBQcDAwYZKwYBBAGCN2H5+cEspPS4DoOuxLIcm56wGDAdBgNVHQ4E # FgQUJep/tYN/JZfSsA//3DHk/N3urEUwHwYDVR0jBBgwFoAUJEWZoXeQKnzDyoOw # bmQWhCr4LGcwZwYDVR0fBGAwXjBcoFqgWIZWaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENTJTIw # QU9DJTIwQ0ElMjAwMi5jcmwwgaUGCCsGAQUFBwEBBIGYMIGVMGQGCCsGAQUFBzAC # hlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m # dCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENBJTIwMDIuY3J0MC0GCCsG # AQUFBzABhiFodHRwOi8vb25lb2NzcC5taWNyb3NvZnQuY29tL29jc3AwZgYDVR0g # BF8wXTBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5t # aWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMAgGBmeBDAEE # ATANBgkqhkiG9w0BAQwFAAOCAgEAXfDWECwZ3kwLcpaCPi/RSQNMQexZahlpGFrv # W6lxvG5zcq73NLlcKB7IFqh9+CD2brJG3Kd1D9Vt7K+jy0uXWnf9tO2x7kxZe3F8 # Fyf9tdIx2b9/Q++88iwI/uotM5WXauM/WSueRm6bzD8HvjEhoQGpTQmFr9ZrT69Z # tNllTXpdrcsiruR0npiE8R4Z4t2lod0Q0IJZz6bMz6uqoWPNJzKQTE31BgpiTkE2 # 6jHWaugvhk/Ttvkuu6GNu5so9X027YDcrJS58oNwdfadZp03diNgRCBKBPI+WP2J # M2sAWcAVSRw2V7t++Iy4QM9hXWZMuvxiyda5oDTewljHfWDI5vLzqqthDOGAnhv6 # cqm3Rl/bUj78O5NRlxySmkvxYzkvM08TdVneHi+Lp4mDlrRyOXFZ3LZZ7Yr+vuTh # N92c/dB53U23pemMLluo09799bgjUcRky4WCQs8Kw9eHL9OaSlovyaqYNzJ65AOp # LlKETO6s34XRnrT3AQK2wdU2WAvhzpdJYYGhvWbVx77lBHVkwE8aII8yUwMYO4Nl # AZ2boYiOKYIcTaG/Qxx65acL960d8RVJyCFa3I2R6YGwPwZxvZIR2QvMfZVT5gsK # SQWBu74fbQtD7pGWcSoO2Pu5HdxdhxWX+jqEm+zMmYht2C2gHTh4qesljMe4CsDR # 6Mc3X9YwggdaMIIFQqADAgECAhMzAAAABJZQS9Lb7suIAAAAAAAEMA0GCSqGSIb3 # DQEBDAUAMGMxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xNDAyBgNVBAMTK01pY3Jvc29mdCBJRCBWZXJpZmllZCBDb2RlIFNpZ25p # bmcgUENBIDIwMjEwHhcNMjEwNDEzMTczMTUyWhcNMjYwNDEzMTczMTUyWjBaMQsw # CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYD # VQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDAyMIICIjANBgkq # hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4c6g6DOiY6bAOwCPbBlQF2tjo3ckUZua # b5ZorMnRp4rOmwZDiTbIpzFkZ/k8k4ivBJV1w5/b/oykI+eXAqaaxMdyAO0ModnE # W7InfQ+rTkykEzHxRbCNg6KDsTnYc/YdL7IIiJli8k51upaHLL7CYm9YNc0SFYvl # aFj2O0HjO9y/NRmcWNjamZOlRjxW2cWgUsUdazSHgRCek87V2bM/17b+o8WXUW91 # IpggRasmiZ65WEFHXKbyhm2LbhBK6ZWmQoFeE+GWrKWCGK/q/4RiTaMNhHXWvWv+ # //I58UtOxVi3DaK1fQ6YLyIIGHzD4CmtcrGivxupq/crrHunGNB7//Qmul2ZP9Hc # OmY/aptgUnwT+20g/A37iDfuuVw6yS2Lo0/kp/jb+J8vE4FMqIiwxGByL482PMVB # C3qd/NbFQa8Mmj6ensU+HEqv9ar+AbcKwumbZqJJKmQrGaSNdWfk2NodgcWOmq7j # yhbxwZOjnLj0/bwnsUNcNAe09v+qiozyQQes8A3UXPcRQb8G+c0yaO2ICifWTK7y # SuyUJ88k1mtN22CNftbjitiAeafoZ9Vmhn5Rfb+S/K5arVvTcLukt5PdTDQxl557 # EIE6A+6XFBpdsjOzkLzdEh7ELk8PVPMjQfPCgKtJ84c17fd2C9+pxF1lEQUFXY/Y # tCL+Nms9cWUCAwEAAaOCAg4wggIKMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3 # FQEEAwIBADAdBgNVHQ4EFgQUJEWZoXeQKnzDyoOwbmQWhCr4LGcwVAYDVR0gBE0w # SzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv # bS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAZBgkrBgEEAYI3FAIEDB4KAFMA # dQBiAEMAQTASBgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFNlBKbAPD2Ns # 72nX9c0pnqRIajDmMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9z # b2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBD # b2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3JsMIGuBggrBgEFBQcBAQSBoTCB # njBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j # ZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ29kZSUyMFNpZ25pbmcl # MjBQQ0ElMjAyMDIxLmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3AubWlj # cm9zb2Z0LmNvbS9vY3NwMA0GCSqGSIb3DQEBDAUAA4ICAQBnLThdlbMNIokdKtzS # a8io+pEO95Cc3VOyY/hQsIIcdMyk2hJOzLt/M1WXfQyElDk/QtyLzX63TdOb5J+n # O8t0pzzwi7ZYvMiNqKvAQO50sMOJn3T3hCPppxNNhoGFVxz2UyiQ4b2vOrcsLK9T # OEFXWbUMJObR9PM0wZsABIhu4k6VVLxEDe0GSeQX/ZE7PHfTg44Luft4IKqYmnv1 # Cuosp3glFYsVegLnMWZUZ8UtO9F8QCiAouJYhL5OlCksgDb9ve/HQhLFnelfg6dQ # ubIFsqB9IlConYKJZ/HaMZvYtA7y9EORK4cxlvTetCXAHayiSXH0ueE/T92wVG0c # sv5VdUyj6yVrm22vlKYAkXINKvDOB8+s4h+TgShlUa2ACu2FWn7JzlTSbpk0IE8R # EuYmkuyE/BTkk93WDMx7PwLnn4J+5fkvbjjQ08OewfpMhh8SuPdQKqmZ40I4W2Uy # JKMMTbet16JFimSqDChgnCB6lwlpe0gfbo97U7prpbfBKp6B2k2f7Y+TjWrQYN+O # dcPOyQAdxGGPBwJSaJG3ohdklCxgAJ5anCxeYl7SjQ5Eua6atjIeVhN0KfPLFPpY # z5CQU+JC2H79x4d/O6YOFR9aYe54/CGup7dRUIfLSv1/j0DPc6Elf3YyWxloWj8y # eY3kHrZFaAlRMwhAXyPQ3rEX9zCCB54wggWGoAMCAQICEzMAAAAHh6M0o3uljhwA # AAAAAAcwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5 # IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4X # DTIxMDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUyMFowYzELMAkGA1UEBhMCVVMxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0 # IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZIhvcN # AQEBBQADggIPADCCAgoCggIBALLwwK8ZiCji3VR6TElsaQhVCbRS/3pK+MHrJSj3 # Zxd3KU3rlfL3qrZilYKJNqztA9OQacr1AwoNcHbKBLbsQAhBnIB34zxf52bDpIO3 # NJlfIaTE/xrweLoQ71lzCHkD7A4As1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C65rU4 # V9NQhNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ2Fbkd242o9kH82RZsH3HEyqjAB5a # 8+Ae2nPIPc8sZU6ZE7iRrRZywRmrKDp5+TcmJX9MRff241UaOBs4NmHOyke8oU1T # Yrkxh+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/FGngE # aNAWrbyfNrC69oKpRQXY9bGH6jn9NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9nf4lX # ezky6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3GhjIT # bCa4crCzTTHgYYjHs1NbOc6brH+eKpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7+yZt # G2wR461uckFu0t+gCwLdN0A6cFtSRtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKLsLef # RaQcVTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidLtvpX # RRo3AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMC # AQAwHQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0pnqRIajDmMFQGA1UdIARNMEswSQYE # VR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp # b3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD # AEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQ # T2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24l # MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCBwwYI # KwYBBQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZp # Y2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5j # cnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2Nz # cDANBgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7Uq+rdZgrbVyNMul5skONbhls5fccP # lmIbzi+OwVdPQ4H55v7VOInnmezQEeW4LqK0wja+fBznANbXLB0KrdMCbHQpbLvG # 6UA/Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOWeAzw # k+f9E5StNp5T8FG7/VEURIVWArbAzPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+Mtun # SQ1Rft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0byxNRG+fT2MCEhQl9g2i2fs6VOG1 # 9CNep7SquKaBjhWmirYyANb0RJSLWjinMLXNOAga10n8i9jqeprzSMU5ODmrMCJE # 12xS/NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqyUJ9H # BqS0DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+PDPB3xajYnzevs7eidBsM71PINK2 # BoE2UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQe6PT12418xon2iDGE81OGCreLzDc # MAZnrUAx4XQLUz6ZTl65yPUiOh3k7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vhKwmz # IeoB1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n58vh # avFIrmcxghdXMIIXUwIBATBxMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll # ZCBDUyBBT0MgQ0EgMDICEzMABpzxZlU7l5WrC74AAAAGnPEwCwYJYIZIAWUDBAIB # oHwwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw # HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIFKD # rUC9MfUl6WviS5DsMj8L+CQLkDYrBgi30kFi7KjkMAsGCSqGSIb3DQEBAQSCAYBv # eXMipO+Os0AFiYMfJIRFJ3I2oAUONQEIy41bZP5zRIH+LQ+IRLOtUB1yENBKmRWz # gERaPywAHiPlmHoH3EJuWqnTpHZ8h15ZpdUeaftuzfoR87IDlSx7BL70vUfvOmXu # Tn98s/w8QFPTa00zlrvov6qrkax2KDZ+Fe1YAJGzxcMvS+BnJHMhCDMnXHlCHqlx # k+sHwkwSOER9gPV+3UE+igQWe+BR58u2Pyk26V5W12U2zPsjIR/iCW1JKB2rA7Tw # IwysMBDlPQWyUfWM248iqmWwG7soWFITp31pttt9Hh1Ihtx5IgUk2PFW3FBqQlIF # sTSQsj5kBf6/r1VxMZKY9b1Cs4Hl6c9HorLt0o++L36Qg9diUlWDogt91V6BZYkd # gpCWh9c1okFO0mT/9N8a8IvwaHUG2E/uDfJ8hvdWZ4QGy5ovAjeUd6n7FGN+IKnh # VWne4PwiQKi4RQ3zjvp8AeObZl9O0+LAEgo8N8O9JI6Szo9cZwiDgMK2qFlAmXih # ghS9MIIUuQYKKwYBBAGCNwMDATGCFKkwghSlBgkqhkiG9w0BBwKgghSWMIIUkgIB # AzEPMA0GCWCGSAFlAwQCAQUAMIIBdQYLKoZIhvcNAQkQAQSgggFkBIIBYDCCAVwC # AQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEFAAQgvT/IPZ0rfVo8cw01alu2 # x1oixgluj0kM2cgg8DCLq90CBmlFbRhcvxgTMjAyNTEyMjEyMzUzMTMuOTUxWjAE # gAIB9AIJAMmbdHdDQHsLoIHppIHmMIHjMQswCQYDVQQGEwJVUzETMBEGA1UECBMK # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 # IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRp # b25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo3QjFBLTA1RTAt # RDk0NzE1MDMGA1UEAxMsTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZSBTdGFtcGlu # ZyBBdXRob3JpdHmggg8pMIIHgjCCBWqgAwIBAgITMwAAAAXlzw//Zi7JhwAAAAAA # BTANBgkqhkiG9w0BAQwFADB3MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMUgwRgYDVQQDEz9NaWNyb3NvZnQgSWRlbnRpdHkgVmVy # aWZpY2F0aW9uIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMjAwHhcNMjAx # MTE5MjAzMjMxWhcNMzUxMTE5MjA0MjMxWjBhMQswCQYDVQQGEwJVUzEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVi # bGljIFJTQSBUaW1lc3RhbXBpbmcgQ0EgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQAD # ggIPADCCAgoCggIBAJ5851Jj/eDFnwV9Y7UGIqMcHtfnlzPREwW9ZUZHd5HBXXBv # f7KrQ5cMSqFSHGqg2/qJhYqOQxwuEQXG8kB41wsDJP5d0zmLYKAY8Zxv3lYkuLDs # fMuIEqvGYOPURAH+Ybl4SJEESnt0MbPEoKdNihwM5xGv0rGofJ1qOYSTNcc55EbB # T7uq3wx3mXhtVmtcCEr5ZKTkKKE1CxZvNPWdGWJUPC6e4uRfWHIhZcgCsJ+sozf5 # EeH5KrlFnxpjKKTavwfFP6XaGZGWUG8TZaiTogRoAlqcevbiqioUz1Yt4FRK53P6 # ovnUfANjIgM9JDdJ4e0qiDRm5sOTiEQtBLGd9Vhd1MadxoGcHrRCsS5rO9yhv2fj # JHrmlQ0EIXmp4DhDBieKUGR+eZ4CNE3ctW4uvSDQVeSp9h1SaPV8UWEfyTxgGjOs # RpeexIveR1MPTVf7gt8hY64XNPO6iyUGsEgt8c2PxF87E+CO7A28TpjNq5eLiiun # hKbq0XbjkNoU5JhtYUrlmAbpxRjb9tSreDdtACpm3rkpxp7AQndnI0Shu/fk1/rE # 3oWsDqMX3jjv40e8KN5YsJBnczyWB4JyeeFMW3JBfdeAKhzohFe8U5w9WuvcP1E8 # cIxLoKSDzCCBOu0hWdjzKNu8Y5SwB1lt5dQhABYyzR3dxEO/T1K/BVF3rV69AgMB # AAGjggIbMIICFzAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYD # VR0OBBYEFGtpKDo1L0hjQM972K9J6T7ZPdshMFQGA1UdIARNMEswSQYEVR0gADBB # MD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0Rv # Y3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGC # NxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTI # ftJqhSobyhmYBAcnz1AQT2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHkl # MjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHkl # MjAyMDIwLmNybDCBlAYIKwYBBQUHAQEEgYcwgYQwgYEGCCsGAQUFBzAChnVodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElk # ZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0 # aG9yaXR5JTIwMjAyMC5jcnQwDQYJKoZIhvcNAQEMBQADggIBAF+Idsd+bbVaFXXn # THho+k7h2ESZJRWluLE0Oa/pO+4ge/XEizXvhs0Y7+KVYyb4nHlugBesnFqBGEdC # 2IWmtKMyS1OWIviwpnK3aL5JedwzbeBF7POyg6IGG/XhhJ3UqWeWTO+Czb1c2NP5 # zyEh89F72u9UIw+IfvM9lzDmc2O2END7MPnrcjWdQnrLn1Ntday7JSyrDvBdmgbN # nCKNZPmhzoa8PccOiQljjTW6GePe5sGFuRHzdFt8y+bN2neF7Zu8hTO1I64XNGqs # t8S+w+RUdie8fXC1jKu3m9KGIqF4aldrYBamyh3g4nJPj/LR2CBaLyD+2BuGZCVm # oNR/dSpRCxlot0i79dKOChmoONqbMI8m04uLaEHAv4qwKHQ1vBzbV/nG89LDKbRS # SvijmwJwxRxLLpMQ/u4xXxFfR4f/gksSkbJp7oqLwliDm/h+w0aJ/U5ccnYhYb7v # PKNMN+SZDWycU5ODIRfyoGl59BsXR/HpRGtiJquOYGmvA/pk5vC1lcnbeMrcWD/2 # 6ozePQ/TWfNXKBOmkFpvPE8CH+EeGGWzqTCjdAsno2jzTeNSxlx3glDGJgcdz5D/ # AAxw9Sdgq/+rY7jjgs7X6fqPTXPmaCAJKVHAP19oEjJIBwD1LyHbaEgBxFCogYSO # iUIr0Xqcr1nJfiWG2GwYe6ZoAF1bMIIHnzCCBYegAwIBAgITMwAAAE80tQfBK5dU # /AAAAAAATzANBgkqhkiG9w0BAQwFADBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMV # TWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGlj # IFJTQSBUaW1lc3RhbXBpbmcgQ0EgMjAyMDAeFw0yNTAyMjcxOTQwMTlaFw0yNjAy # MjYxOTQwMTlaMIHjMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQx # JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo3QjFBLTA1RTAtRDk0NzE1MDMGA1UE # AxMsTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZSBTdGFtcGluZyBBdXRob3JpdHkw # ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDCYKZaxss6ELoz4nczZrnN # UBJW+LPR4egxY32dIkgwxkTt5RVcEuGjvnQFdpFszOmTD1LucQgh/7S1iEqVYq1h # zstMHD3njkyNTzDLsP4xhoKKM9TfCoVZIRg5EcM5lWpafHnP0kEs4rmOAp+j5cdo # 6fJtxDuHDUr9Z6r9WN/g5yc8Ip7GPnLVl5RCWt0c3ZUXA+nvh7gUVwVFP1ITIaTt # WFEDZRYTttgqjTcpbQqGFw6YswtT6dtX5PLjmGDDskQ1oCZVnBBv/DFhG0BeHRte # Nn6RSMlfnrA1jzJ9+XQdycGe24Gyb/+iOZzThrGI6o8zd17vxZAGLgS8/l2BF6Pc # r7a1ptX8pRJedhLu6W/HJiNrvPUz6iE9IEnavaPC9A2U+8QCzORKt5uq9e7pdp2v # IvFy2t4i3wMxD3ta4/6IN0h1WaHIh72xc0ZI3haC7Mrf0nRnDMBAXtfdr5VidTly # KP/wF0G4XFvmr4M+UzMjz1niRJ484Da2Y8uHKxCQax3PoNW7nUbwZo/NfsHhTAZL # Xi9PwJGc1Xqgh6SKlkOAXmJxukZ3OT/GnhUBA8IP8O3e4SFcGy06NS9ZkY/ncVYF # GL3APcTCeIasrI/gPSKLygd00OUdgCJw0WgkZDWMmphb/ARp76YDUPMOSYsu1PmB # zCtUikqOJ+Y3LEBqW0KlIQIDAQABo4IByzCCAccwHQYDVR0OBBYEFL+i07fs/Gae # ebZHSNHuh1RG6jcwMB8GA1UdIwQYMBaAFGtpKDo1L0hjQM972K9J6T7ZPdshMGwG # A1UdHwRlMGMwYaBfoF2GW2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv # Y3JsL01pY3Jvc29mdCUyMFB1YmxpYyUyMFJTQSUyMFRpbWVzdGFtcGluZyUyMENB # JTIwMjAyMC5jcmwweQYIKwYBBQUHAQEEbTBrMGkGCCsGAQUFBzAChl1odHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFB1Ymxp # YyUyMFJTQSUyMFRpbWVzdGFtcGluZyUyMENBJTIwMjAyMC5jcnQwDAYDVR0TAQH/ # BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwZgYD # VR0gBF8wXTBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMAgGBmeB # DAEEAjANBgkqhkiG9w0BAQwFAAOCAgEANrM2h1Q2JWFV0rnVZXYRveI/PZdbet/v # oLLbuSqf7TEaYg7mz/GDeXthJdoSis7wlegfKGEum36dAFOvLgiH2GlIYBcnMVCM # GE41UubjBOI7pu7wX7Ouh2Fis0wyISAWkMQLlaIqubtz01lh3OzTTpXuDWK1U9+3 # 3wCcrGn8G+oGpfcEqW2dYFrAk3uMQDhrrYFW29vvLBjbnKBNyCMsMgB+RG3XzZHu # t3xQDqMflZD3dt6t8jGBZVFZd5BwTEpHpqVvyhpaDWJo4dxhEdY6w04MgParPXIl # JAPIXO5TbWYgceHY6TCcgP3C2jWzW1ErF2P+j1wXbxwT+jVpyooSQJToia9eDOKO # UkJEJ6UoRwcCHJ4i326EFZDuOYo/KvI9p6YMoxj9a8ZyW4foUIBIPVDQHKSreOJo # moSLkTsxwKJ6No+HDx+poSHqQhMxUWYhf1dzPakf5cdaNceL6UJxq2NR/XxRqU/p # AqihwxHb13QQM6+at6sijSHw5FHf4hPcjPqoKyrA68nHXlObRngcQftINF311RRp # okU8nWlBPxI3K+SwLOLt3eYrA3LtWEr8Pej7VrqmcaSzDkeGAnMzbLv3mAP1QHVo # m3BiCWxrUn94qJUCOsA2obEsRe85R1cgQg5tAmqBM9sxTRXmgTMbkXcqMEixYs5b # zpKXFnd38WQxggPUMIID0AIBATB4MGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMg # UlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwAhMzAAAATzS1B8Erl1T8AAAAAABPMA0G # CWCGSAFlAwQCAQUAoIIBLTAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJ # KoZIhvcNAQkEMSIEIGGQzlTB//kqogg+WU9EmwR7bFz5CdPRdb2cTuY1KQ0dMIHd # BgsqhkiG9w0BCRACLzGBzTCByjCBxzCBoAQgQWYrRg+SHrRyrR2i5H2xDXaCc4xX # INA2gLKS4C+C6g4wfDBlpGMwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jv # c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0Eg # VGltZXN0YW1waW5nIENBIDIwMjACEzMAAABPNLUHwSuXVPwAAAAAAE8wIgQgRfod # Zu0hHj4WYed9gADM7Z4ftLUXdbnuqmOMUR5ZLyAwDQYJKoZIhvcNAQELBQAEggIA # Af7xYWNC/1Og8X7QchhQ4rkoNgrNNBEBgvdCfArKDkJDt2FO9D4k/smdT3MXhjtv # pcc0b36N0y42IeDmvqMw1GjCtqO9C9ACg/XyTGRbM+v7+SNXYNxVg5NwK4XEUvkz # MWiY8sYFm1ar9UUIVaARIKjw+Mw+0rbGcnuZgZHqvsNDCe9Qcrkzer/s/39Y9QPi # NwWWrOvSpGzj+JanGm322226OQY6yz2J6NoPpaLut8l0ifluiePw612QbTbxpQVo # dOJAIYDeH0WIua4SNvIJVH6TvRE3LjpXz4ZGdD35xYwxdglaavuRl8jm5D9j/pBd # nYAXMIZ9a3vPGdnUp3EW7eykgcDKTeSAKeKlGghL59thMnMM0v70Ov+VwZHILK9l # XXgBA5fU+y7QNJi6UK8jZmQ9Bmt7E/63cvrrhLCoVAmsimL4t0qYKdLD18Cl8bUV # we//AtW5jY2dQCcRlQ5hNz17UlEC6Wtq/OyOY21XypYLzNI9BF8gvgluI4/0cwzC # ZIyGz9QT1Yto8vc5wG6nlxM1pdpc2x5SKgMPGuA8BUh7DZpy10OWPXFtS8e/OJ7E # 7TslEMEBB4EcAEbScZtx3PMnegQMYeC91AMIN1oTNy1YA2mUiBgzwfnMGSxwbjI4 # qP/DXqEiZ+fF13Jbnm/eGWGI3hRUlS3re2hj4JSmts8= # SIG # End signature block |