Obs/scripts/AzureLocal.StandaloneObservability.psm1
<#############################################################
# # # Copyright (C) Microsoft Corporation. All rights reserved. # # # #############################################################> <# .SYNOPSIS Sends diagnostics data using standalone observability pipeline. .DESCRIPTION Sends diagnostics data using standalone observability pipeline. PS C:\> Enter-PsSession -ComputerName <NodeName> -Credential $cred PS C:\> Send-AzureLocalDiagnosticData .PARAMETER ResourceGroupName Azure Resource group name where temporary Arc resource will be created. This can be same parameter as used in AzS Deployment. .PARAMETER SubscriptionId Azure SubscriptionID where temporary Arc resource will be created. This can be same parameter as used in AzS Deployment. .PARAMETER RegistrationRegion Optional. Azure registration region where Arc resource will be created. This can be same parameter as used in AzS Deployment. .PARAMETER DiagnosticLogPath Diagnostic Log path which will be parsed and sent to Microsoft. .PARAMETER Cloud Optional. Azure Cloud name default: AzureCloud. .PARAMETER CacheFlushWaitTimeInSec Optional wait time to Flush the cache folder. default:600 .PARAMETER RegistrationCredential Azure credentials used for authentication to register ArcAgent. Needed only for DefaultSet .PARAMETER RegistrationWithDeviceCode This is RegistrationWithDeviceCode switch to use device code for authentication. .PARAMETER RegistrationWithExistingContext This is RegistrationWithExistingContext switch to use existing Azure context on the local machine. .PARAMETER RegistrationSPCredential This is SPN crednetials used for authentication to register ArcAgent. Needed only for ServicePrincipal set .EXAMPLE The example below . During Remote Support JEA configuration, WinRM will be restarted twice and that can break the PsSession to node if you are installing Remote Support remotely. In that case, connect to remote node again and execute Enable cmdlet again after 4-5 minutes. PS C:\> Enter-PsSession -ComputerName <NodeName> -Credential $cred PS C:\> Send-AzureLocalDiagnosticData Processing data from remote server v-host1 failed with the following error message: The I/O operation has been aborted because of either a thread exit or an application request. For more information, see the about_Remote_Troubleshooting Help topic. PS C:\> Enter-PsSession -ComputerName <NodeName> -Credential $cred PS C:\> Send-AzureLocalDiagnosticData .NOTES Requires Support VM to have stable internet connectivity. #> function Send-AzureLocalDiagnosticData { [CmdletBinding(PositionalBinding = $false, DefaultParameterSetName = "Interactive")] param( [Parameter(Mandatory = $true)] [System.String] $ResourceGroupName, [Parameter(Mandatory = $true)] [System.String] $SubscriptionId, [Parameter(Mandatory = $true, ParameterSetName = "DefaultSet")] [PSCredential] $RegistrationCredential, [Parameter(Mandatory = $true, ParameterSetName = "Interactive")] [Switch] $RegistrationWithDeviceCode, [Parameter(Mandatory = $true, ParameterSetName = "PassThrough")] [Switch] $RegistrationWithExistingContext, [Parameter(Mandatory = $true, ParameterSetName = "ServicePrincipal")] [PSCredential] $RegistrationSPCredential, [Parameter(Mandatory = $true, ParameterSetName = "AccessToken")] [System.String] $AccessToken, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [ValidateScript({ Test-Path -Path $_ -PathType Container })] [System.String] $DiagnosticLogPath, [Parameter(Mandatory=$false)] [System.String] $InstanceGuid = "", [Parameter(Mandatory=$false)] [System.String] $RegistrationRegion = "eastus", [Parameter(Mandatory=$false)] [System.String] $ObsRootFolderPath = "C:\StdObservability", [Parameter(Mandatory=$false)] [System.String] $Cloud = "AzureCloud", [Parameter(Mandatory=$false)] [Int] $CacheFlushWaitTimeInSec = 600 ) $functionName = $MyInvocation.MyCommand.Name $script:ErrorActionPreference = 'Stop' $skipArcForServer = $false try { $transcriptFileName = "{0}.{1:yyyy-MM-dd-hh-mm-ss}.log" -f $functionName, $(Get-Date) $transcriptFilePath = Join-Path -Path $ObsRootFolderPath -ChildPath $transcriptFileName Start-Transcript -Path $transcriptFilePath -Append Import-Module "$PSScriptRoot\StandaloneObservabilityHelper.psm1" -Force $TenantId = Get-TenantId -AzureEnvironment $Cloud -SubscriptionId $SubscriptionId # Fail if Arc Agent is already connected if(Test-IsArcAgentConnected) { $skipArcForServer = $true } $service = Get-Service "WatchdogAgent" -ErrorAction SilentlyContinue if ($null -ne $service) { throw "Watchdog is present. Use the extension instead of this Cmdlet" } # Ensure we are elevated if (Test-UserIsElevated) { Write-Host "Powershell running as Administrator. Continuing." } else { Write-Error -Message "Running as administrator is required for this operation. Please restart PowerShell as Administrator and retry." -Type Error -ConsoleOut throw "$functionName requires elevated permissions." } Push-Location -Path $PSScriptRoot if ($PSCmdlet.ParameterSetName -eq "ServicePrincipal") { & .\Install-StandaloneObservability.ps1 -ResourceGroupName $ResourceGroupName ` -SubscriptionId $SubscriptionId ` -TenantId $TenantId ` -RegistrationSPCredential $RegistrationSPCredential ` -FactoryLogShare $DiagnosticLogPath ` -ObsRootFolderPath $ObsRootFolderPath ` -InstanceGuid $InstanceGuid ` -Cloud $Cloud ` -RegistrationRegion $RegistrationRegion ` -GcsRegion $RegistrationRegion ` -SkipArcForServer $skipArcForServer -ParseOnce | Out-Null } elseif ($PSCmdlet.ParameterSetName -eq "Interactive") { & .\Install-StandaloneObservability.ps1 -ResourceGroupName $ResourceGroupName ` -SubscriptionId $SubscriptionId ` -TenantId $TenantId ` -Interactive ` -FactoryLogShare $DiagnosticLogPath ` -ObsRootFolderPath $ObsRootFolderPath ` -InstanceGuid $InstanceGuid ` -Cloud $Cloud ` -RegistrationRegion $RegistrationRegion ` -GcsRegion $RegistrationRegion ` -SkipArcForServer $skipArcForServer -ParseOnce | Out-Null } elseif ($PSCmdlet.ParameterSetName -eq "PassThrough") { & .\Install-StandaloneObservability.ps1 -ResourceGroupName $ResourceGroupName ` -SubscriptionId $SubscriptionId ` -TenantId $TenantId ` -PassThrough ` -FactoryLogShare $DiagnosticLogPath ` -ObsRootFolderPath $ObsRootFolderPath ` -InstanceGuid $InstanceGuid ` -Cloud $Cloud ` -RegistrationRegion $RegistrationRegion ` -GcsRegion $RegistrationRegion ` -SkipArcForServer $skipArcForServer -ParseOnce | Out-Null } elseif ($PSCmdlet.ParameterSetName -eq "AccessToken") { & .\Install-StandaloneObservability.ps1 -ResourceGroupName $ResourceGroupName ` -SubscriptionId $SubscriptionId ` -TenantId $TenantId ` -AccessToken $AccessToken ` -FactoryLogShare $DiagnosticLogPath ` -ObsRootFolderPath $ObsRootFolderPath ` -InstanceGuid $InstanceGuid ` -Cloud $Cloud ` -RegistrationRegion $RegistrationRegion ` -GcsRegion $RegistrationRegion ` -SkipArcForServer $skipArcForServer -ParseOnce | Out-Null } else { & .\Install-StandaloneObservability.ps1 -ResourceGroupName $ResourceGroupName ` -SubscriptionId $SubscriptionId ` -TenantId $TenantId ` -RegistrationCredential $RegistrationCredential ` -FactoryLogShare $DiagnosticLogPath ` -ObsRootFolderPath $ObsRootFolderPath ` -InstanceGuid $InstanceGuid ` -Cloud $Cloud ` -RegistrationRegion $RegistrationRegion ` -GcsRegion $RegistrationRegion ` -SkipArcForServer $skipArcForServer -ParseOnce | Out-Null } Write-Host "Going to Wait for MA to flush the Cahce folder: $CacheFlushWaitTimeInSec" Start-Sleep -Seconds $CacheFlushWaitTimeInSec } catch { $exception = $_ Write-Error "$functionName failed. $exception" Write-Error "$($exception.ScriptStackTrace)" throw $exception } finally { $Script:ErrorActionPreference = 'SilentlyContinue' if ($PSCmdlet.ParameterSetName -eq "AccessToken") { & .\Uninstall-StandaloneObservability.ps1 -AccessToken $AccessToken -SkipArcForServer $skipArcForServer | Out-Null } else { $token = Get-AzAccessToken if ($null -eq $token) { Import-Module "$PSScriptRoot\StandaloneObservabilityHelper.psm1" -Force $TenantId = Get-TenantId -AzureEnvironment $Cloud -SubscriptionId $SubscriptionId Write-Host "Token was null. Going to try to use Connect-AzAccount to get the token." if ($PSCmdlet.ParameterSetName -eq "ServicePrincipal") { Connect-AzAccount -Credential $RegistrationSPCredential -ServicePrincipal -Environment $Cloud -Tenant $TenantId -Subscription $SubscriptionId } elseif ($PSCmdlet.ParameterSetName -eq "Interactive") { Connect-AzAccount -UseDeviceAuthentication -Environment $Cloud -Tenant $TenantId -Subscription $SubscriptionId } elseif ($PSCmdlet.ParameterSetName -eq "DefaultSet") { Connect-AzAccount -Credential $RegistrationCredential -Environment $Cloud -Tenant $TenantId -Subscription $SubscriptionId } $token = Get-AzAccessToken } & .\Uninstall-StandaloneObservability.ps1 -AccessToken $token.Token -SkipArcForServer $skipArcForServer | Out-Null } Pop-Location Stop-Transcript -ErrorAction SilentlyContinue } } Export-ModuleMember -Function Send-AzureLocalDiagnosticData # SIG # Begin signature block # MIIoRgYJKoZIhvcNAQcCoIIoNzCCKDMCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCADNERI2iaZlk5o # iGg4plQR+D2j3bu4z2wW2dH7lQ2h66CCDXYwggX0MIID3KADAgECAhMzAAAEBGx0 # Bv9XKydyAAAAAAQEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjQwOTEyMjAxMTE0WhcNMjUwOTExMjAxMTE0WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQC0KDfaY50MDqsEGdlIzDHBd6CqIMRQWW9Af1LHDDTuFjfDsvna0nEuDSYJmNyz # NB10jpbg0lhvkT1AzfX2TLITSXwS8D+mBzGCWMM/wTpciWBV/pbjSazbzoKvRrNo # DV/u9omOM2Eawyo5JJJdNkM2d8qzkQ0bRuRd4HarmGunSouyb9NY7egWN5E5lUc3 # a2AROzAdHdYpObpCOdeAY2P5XqtJkk79aROpzw16wCjdSn8qMzCBzR7rvH2WVkvF # HLIxZQET1yhPb6lRmpgBQNnzidHV2Ocxjc8wNiIDzgbDkmlx54QPfw7RwQi8p1fy # 4byhBrTjv568x8NGv3gwb0RbAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU8huhNbETDU+ZWllL4DNMPCijEU4w # RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW # MBQGA1UEBRMNMjMwMDEyKzUwMjkyMzAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci # tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG # CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0 # MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAIjmD9IpQVvfB1QehvpC # Ge7QeTQkKQ7j3bmDMjwSqFL4ri6ae9IFTdpywn5smmtSIyKYDn3/nHtaEn0X1NBj # L5oP0BjAy1sqxD+uy35B+V8wv5GrxhMDJP8l2QjLtH/UglSTIhLqyt8bUAqVfyfp # h4COMRvwwjTvChtCnUXXACuCXYHWalOoc0OU2oGN+mPJIJJxaNQc1sjBsMbGIWv3 # cmgSHkCEmrMv7yaidpePt6V+yPMik+eXw3IfZ5eNOiNgL1rZzgSJfTnvUqiaEQ0X # dG1HbkDv9fv6CTq6m4Ty3IzLiwGSXYxRIXTxT4TYs5VxHy2uFjFXWVSL0J2ARTYL # E4Oyl1wXDF1PX4bxg1yDMfKPHcE1Ijic5lx1KdK1SkaEJdto4hd++05J9Bf9TAmi # u6EK6C9Oe5vRadroJCK26uCUI4zIjL/qG7mswW+qT0CW0gnR9JHkXCWNbo8ccMk1 # sJatmRoSAifbgzaYbUz8+lv+IXy5GFuAmLnNbGjacB3IMGpa+lbFgih57/fIhamq # 5VhxgaEmn/UjWyr+cPiAFWuTVIpfsOjbEAww75wURNM1Imp9NJKye1O24EspEHmb # DmqCUcq7NqkOKIG4PVm3hDDED/WQpzJDkvu4FrIbvyTGVU01vKsg4UfcdiZ0fQ+/ # V0hf8yrtq9CkB8iIuk5bBxuPMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq # hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 # IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg # Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03 # a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr # rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg # OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy # 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9 # sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh # dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k # A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB # w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn # Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90 # lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w # ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o # ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD # VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa # BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny # bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG # AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV # HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG # AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl # AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb # C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l # hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6 # I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0 # wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 # STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam # ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa # J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah # XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA # 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt # Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr # /Xmfwb1tbWrJUnMTDXpQzTGCGiYwghoiAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp # Z25pbmcgUENBIDIwMTECEzMAAAQEbHQG/1crJ3IAAAAABAQwDQYJYIZIAWUDBAIB # BQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO # MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIHD4U6QGKFyaRcZgQJ+HGlTN # GOwwErY051eGZwXPI736MEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8A # cwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB # BQAEggEAFvaDFtgDWeTwo+KwzykDKWzdjlRsKDlB1W6esJ6BSv7GIgthujvtH3AH # 2gUnTR/zoj3nYvUZ2f1U3OUjGXUAu7Cr40DH7xmLIkSfzyn78ZbMHTaBZABFCH2y # 61xBO/sJy9m9+KIiHftH1mKef6xvptS5NkkHGBFRWr1aJ6HAlY0Fw0awzXNjd1gi # EufCd1vVXxecUOsqJxYx1eNZXzDmtVtvPsjqHxA4QWHjPZ3fTgetDR9RanwqTqGY # +lbYkt/0yKznfhqfY8rlbmstfjrvJoEQeIbBhJnMFPpMyC8Dclx/uqHptB+frSsn # 8N3K5K0AGCbZbI95m26YqV2eYmHUVqGCF7AwghesBgorBgEEAYI3AwMBMYIXnDCC # F5gGCSqGSIb3DQEHAqCCF4kwgheFAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsq # hkiG9w0BCRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl # AwQCAQUABCCrDULgnJi70RaOmvq+B4GrAgv18vUl6wCVh289mAGWjwIGaC5kLxdx # GBMyMDI1MDYxMDE1NDgzMS41MzJaMASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl # bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT # Tjo2RjFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaCCEf4wggcoMIIFEKADAgECAhMzAAAB/Bigr8xpWoc6AAEAAAH8MA0G # CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI0 # MDcyNTE4MzExNFoXDTI1MTAyMjE4MzExNFowgdMxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w # ZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjZGMUEt # MDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl # MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp1DAKLxpbQcPVYPHlJHy # W7W5lBZjJWWDjMfl5WyhuAylP/LDm2hb4ymUmSymV0EFRQcmM8BypwjhWP8F7x4i # O88d+9GZ9MQmNh3jSDohhXXgf8rONEAyfCPVmJzM7ytsurZ9xocbuEL7+P7EkIwo # OuMFlTF2G/zuqx1E+wANslpPqPpb8PC56BQxgJCI1LOF5lk3AePJ78OL3aw/Ndlk # vdVl3VgBSPX4Nawt3UgUofuPn/cp9vwKKBwuIWQEFZ837GXXITshd2Mfs6oYfxXE # tmj2SBGEhxVs7xERuWGb0cK6afy7naKkbZI2v1UqsxuZt94rn/ey2ynvunlx0R6/ # b6nNkC1rOTAfWlpsAj/QlzyM6uYTSxYZC2YWzLbbRl0lRtSz+4TdpUU/oAZSB+Y+ # s12Rqmgzi7RVxNcI2lm//sCEm6A63nCJCgYtM+LLe9pTshl/Wf8OOuPQRiA+stTs # g89BOG9tblaz2kfeOkYf5hdH8phAbuOuDQfr6s5Ya6W+vZz6E0Zsenzi0OtMf5RC # a2hADYVgUxD+grC8EptfWeVAWgYCaQFheNN/ZGNQMkk78V63yoPBffJEAu+B5xlT # PYoijUdo9NXovJmoGXj6R8Tgso+QPaAGHKxCbHa1QL9ASMF3Os1jrogCHGiykfp1 # dKGnmA5wJT6Nx7BedlSDsAkCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBSY8aUrsUaz # hxByH79dhiQCL/7QdjAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBf # BgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmww # bAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El # MjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUF # BwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAT7ss/ZAZ0bTa # FsrsiJYd//LQ6ImKb9JZSKiRw9xs8hwk5Y/7zign9gGtweRChC2lJ8GVRHgrFkBx # ACjuuPprSz/UYX7n522JKcudnWuIeE1p30BZrqPTOnscD98DZi6WNTAymnaS7it5 # qAgNInreAJbTU2cAosJoeXAHr50YgSGlmJM+cN6mYLAL6TTFMtFYJrpK9TM5Ryh5 # eZmm6UTJnGg0jt1pF/2u8PSdz3dDy7DF7KDJad2qHxZORvM3k9V8Yn3JI5YLPuLs # o2J5s3fpXyCVgR/hq86g5zjd9bRRyyiC8iLIm/N95q6HWVsCeySetrqfsDyYWStw # L96hy7DIyLL5ih8YFMd0AdmvTRoylmADuKwE2TQCTvPnjnLk7ypJW29t17Yya4V+ # Jlz54sBnPU7kIeYZsvUT+YKgykP1QB+p+uUdRH6e79Vaiz+iewWrIJZ4tXkDMmL2 # 1nh0j+58E1ecAYDvT6B4yFIeonxA/6Gl9Xs7JLciPCIC6hGdliiEBpyYeUF0ohZF # n7NKQu80IZ0jd511WA2bq6x9aUq/zFyf8Egw+dunUj1KtNoWpq7VuJqapckYsmvm # mYHZXCjK1Eus7V1I+aXjrBYuqyM9QpeFZU4U01YG15uWwUCaj0uZlah/RGSYMd84 # y9DCqOpfeKE6PLMk7hLnhvcOQrnxP6kwggdxMIIFWaADAgECAhMzAAAAFcXna54C # m0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZp # Y2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMy # MjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV # BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51 # yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY # 6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9 # cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN # 7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDua # Rr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74 # kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2 # K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5 # TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZk # i1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9Q # BXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3Pmri # Lq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUC # BBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJl # pxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIB # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y # eS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUA # YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU # 1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2Ny # bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIw # MTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0w # Ni0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/yp # b+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulm # ZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM # 9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECW # OKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4 # FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3Uw # xTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPX # fx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVX # VAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGC # onsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU # 5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEG # ahC0HVUzWLOhcGbyoYIDWTCCAkECAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl # bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT # Tjo2RjFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaIjCgEBMAcGBSsOAwIaAxUATkEpJXOaqI2wfqBsw4NLVwqYqqqggYMw # gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD # VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsF # AAIFAOvylhYwIhgPMjAyNTA2MTAxMTMxMzRaGA8yMDI1MDYxMTExMzEzNFowdzA9 # BgorBgEEAYRZCgQBMS8wLTAKAgUA6/KWFgIBADAKAgEAAgIOyAIB/zAHAgEAAgIT # JjAKAgUA6/PnlgIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAow # CAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQAsKQ9mkBA4 # qk+CVKbWhbJmqLg+3TlrgZbl5jE25SF2AYBqbDaAzMbYRHJTKeXq1SqnjKHuZsvS # Tq9Z83A9mpl0iwkAHCLtFtrXSVjI3bfcwgSe/Y2cg8GFEHX/BcsQ28GKjAIZkmQE # fJisbWmY3ApNAvHaSxZOlu05OE2wEulv5qTcADPywB5WVk8SCz79nA6AlxD+O34i # r32k0koXZVdmRw2amhHs1rNSubKrsiJJdsZcUuEGsVKYx7+9kDHyOfjtsFnTwjGR # lRUEJYJnhhvo+T6liF2wMDqcEL91E+xoFpNElL2OwH986j21/ONNM7PwGBSxq2S1 # MRXoC7MVZfjrMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB # IDIwMTACEzMAAAH8GKCvzGlahzoAAQAAAfwwDQYJYIZIAWUDBAIBBQCgggFKMBoG # CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgXH/D+uRG # hmlSOlIRNhFSJuFdMkTCsLxCODYW0vZeBDQwgfoGCyqGSIb3DQEJEAIvMYHqMIHn # MIHkMIG9BCCVQq+Qu+/h/BOVP4wweUwbHuCUhh+T7hq3d5MCaNEtYjCBmDCBgKR+ # MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT # HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB/Bigr8xpWoc6AAEA # AAH8MCIEILw9OEBQ+nvDCWUFQXvc9xDSXxjqP+Ivb4dcArbk/RNXMA0GCSqGSIb3 # DQEBCwUABIICAHWtOTlu0uvJ2omZY7xSwx7FInO0VVIW4HdIHckUesGa3hUashyX # AN6g/0fPhZzkJcWYG9QzjhMOHaJ8b6n4kLJBWI54Hr0gNq4tEHelQ6Tq+IqDLF9T # TYtMOlcC2tP0Tzf+ZWbz5/2FzhmteNCxl2gTY9GHPyP2tLYmG+Xd8depyVeIe/YE # Q+m3DB+TGLnSy9Eie4I6yrhFndevl0IWyuluvhN8s9aY6Lx8zWlVykdl/LSv72HV # k/rhKNJuyRCBWE4GygNgow+udnFddBnDF0X1Ma8yeq8a469xp9fyKfN7XSq+uoWH # 5/kTAdOtN+xuutwOCXhxBp93umq+z//qfP+x6blbmY3FHitAYaZs1AsntzNXFueS # 0aC7seHXoUX3Ow8Te2mvJMPe1nrp95W6YhfmYtdTMrx7xnniB9XnnQR2CVLp9/j4 # hsixb8x8NdmQ4NkBzM97CDCFRuUjnpC/fZRxoyXl09Qky0RfvjSqytpqZwRTLJ9Z # mLwHfJvG0jdT5T6rwsaaeNYpgMnD68Px40gxVUKoAO6NKhtGt268hfKvSqA80Upr # ly6uJiJp0xL7Xd3HeB/W4KowyoVm68n+VcePKJdatyt2pEDdZ7NkReWOsIvcV6Ka # 8mUT777JZJFpRVa7UQHnk/YLis/xZyIUMepcYGiKntQWerVSIGzlWIXH # SIG # End signature block |