public/Import-AppVManagementConnectionGroup.ps1
|
function Import-AppVManagementConnectionGroup { <# .SYNOPSIS Imports App-V Connection Groups from the Management Database to the AppVentiX configuration. .DESCRIPTION The Import-AppVManagementConnectionGroup function retrieves Connection Groups from the App-V Management Database and imports them into the AppVentiX configuration share. This function allows you to synchronize Connection Groups from the Management Server to make them available for seamless publishing. .PARAMETER SQLServer Specifies the SQL Server hostname or IP address. Default value: localhost .PARAMETER SQLInstance Specifies the SQL Server instance name. If not specified, the default instance will be used. .PARAMETER SQLDatabase Specifies the App-V Management database name. Default value: AppVManagement .PARAMETER SQLCredential Specifies the PSCredential object for SQL Server authentication. If not specified, Windows Integrated Authentication will be used. .PARAMETER MatchConnectionGroupWithMachineGroup When specified, packages in a Connection Group are matched to the Machine Group whose Content Share contains them, and the resulting publishing task is targeted at that Machine Group. When the packages span multiple Machine Groups, the Connection Group is published to 'All Machine Groups'. .PARAMETER PublishingMachineGroupFriendlyName The friendly name(s) of the AppVentiX Machine Group(s) to which the Connection Group's publishing task is published. If not specified, the publishing task is published to the same Machine Group the Connection Group itself was created for. .PARAMETER GUI When specified, displays a graphical user interface to select Connection Groups to import. .PARAMETER ConfigShare Specifies the AppVentiX configuration share path. This parameter is hidden and uses the module's configured ConfigShare by default. .EXAMPLE Import-AppVManagementConnectionGroup -SQLServer "sql01.domain.local" Imports all Connection Groups from the specified SQL Server. .EXAMPLE Import-AppVManagementConnectionGroup -SQLServer "sql01.domain.local" -GUI Displays a GUI to select specific Connection Groups to import. .EXAMPLE $cred = Get-Credential Import-AppVManagementConnectionGroup -SQLServer "sql01.domain.local" -SQLCredential $cred -GUI Imports Connection Groups using SQL authentication and GUI selection. .LINK Test-AppVManagementSQLConnection .LINK Get-AppVManagementPackage .LINK Get-AppVManagementConnectionGroup .LINK Import-AppVManagementPackage .LINK New-AppVentiXPublishingTask .LINK New-AppVentiXConnectionGroup .NOTES Function : Import-AppVManagementConnectionGroup Author : John Billekens Copyright: (c) John Billekens Consultancy & AppVentiX Version : 2026.707.1400 Requires : Valid AppVentiX license #> [CmdletBinding()] param ( [String]$SQLServer = "localhost", [String]$SQLInstance, [String]$SQLDatabase = 'AppVManagement', [switch]$MatchConnectionGroupWithMachineGroup, [String[]]$PublishingMachineGroupFriendlyName, [System.Management.Automation.PSCredential]$SQLCredential = [System.Management.Automation.PSCredential]::Empty, [switch]$GUI, [Parameter(DontShow)] [ValidateNotNullOrEmpty()] [String]$ConfigShare = $Script:AppVentiX.ConfigShare ) $PSDefaultParameterValues['Write-AppVentiXError:Cmdlet'] = $PSCmdlet # Correlation id for this invocation; stamped on every debug entry so one run's log can be grouped. $Script:AppVentiXDebugRunId = '{0:yyyyMMddHHmmss}-{1:x4}' -f [datetime]::Now, (Get-Random -Maximum 0x10000) if ($Script:AppVentiXDebugLogEnabled) { Write-AppVentiXDebugLog -Message 'Import-AppVManagementConnectionGroup started' -Data @{ SQLServer = $SQLServer SQLDatabase = $SQLDatabase MatchConnectionGroupWithMachineGroup = [bool]$MatchConnectionGroupWithMachineGroup GUI = [bool]$GUI ConfigShare = "$ConfigShare" } } if (Test-AppVentiXIsLicensed -ConfigShare $ConfigShare) { try { $SQLParams = @{ SQLServer = $SQLServer SQLInstance = $SQLInstance SQLDatabase = $SQLDatabase SQLCredential = $SQLCredential } try { Write-Verbose "Testing connection to App-V Management database '$SQLDatabase' on server '$SQLServer', instance '$SQLInstance'..." $connectionResult = Test-AppVManagementSQLConnection @SQLParams -ErrorAction Stop if (-not $connectionResult) { Write-AppVentiXError -Message "Cannot connect to the App-V Management database on server '$SQLServer', database '$SQLDatabase', instance '$SQLInstance'." ` -ErrorId 'SQLConnectionFailed' ` -Category ConnectionError ` -Cmdlet $PSCmdlet return } } catch { Write-AppVentiXError -Message "Cannot connect to the App-V Management database on server '$SQLServer', database '$SQLDatabase', instance '$SQLInstance'." ` -ErrorId 'SQLConnectionFailed' ` -Category ConnectionError ` -Cmdlet $PSCmdlet return } Write-Host "Connected to App-V Management database '$SQLDatabase' on server '$SQLServer', retrieving Connection Groups..." Write-AppVentiXDebugLog -Message 'SQL connection verified' -Level Timing Write-Verbose "Retrieving AppVentiX Content Share Packages from configuration share '$ConfigShare'..." $AppVentiXContentSharePackages = Get-AppVentiXContentSharePackages -ConfigShare $ConfigShare $MachineGroups = Get-AppVentiXMachineGroup -ConfigShare $ConfigShare Write-AppVentiXDebugLog -Message 'Retrieved Content Store packages and Machine Groups' -Level Timing -Data @{ ContentSharePackageCount = @($AppVentiXContentSharePackages).Count MachineGroupCount = @($MachineGroups).Count } if ($AppVManagementConnectionGroup = Get-AppVManagementConnectionGroup @SQLParams) { Write-AppVentiXDebugLog -Message 'Retrieved App-V Management Connection Groups from database' -Level Timing -Data @{ ConnectionGroupCount = @($AppVManagementConnectionGroup).Count } if ($GUI.IsPresent -eq $true) { Write-AppVentiXDebugLog -Message 'Displaying GUI for Connection Group selection' -Level Timing $AppVManagementConnectionGroup = @( $AppVManagementConnectionGroup | Select-ObjectFromGrid -Title "Select App-V Management Connection Groups to import" ` -ColumnsToShow @('ConnectionGroupId', 'ConnectionGroupName', 'ConnectionGroupEnabled', 'ConnectionGroupPriority', 'ConnectionGroupVersion', 'Description') ) Write-AppVentiXDebugLog -Message 'GUI selection completed' -Level Timing -Data @{ SelectedConnectionGroupCount = @($AppVManagementConnectionGroup).Count } } if (-not $AppVManagementConnectionGroup -or $AppVManagementConnectionGroup.Count -eq 0) { Write-AppVentiXDebugLog -Message 'No Connection Groups selected for import' -Level Warning Write-Warning "No App-V Management Connection Groups selected for import." return } Write-Host "`r`nImporting $($AppVManagementConnectionGroup.Count) App-V Management Connection Groups" $ImportResults = [System.Collections.Generic.List[object]]::new() foreach ($ConnectionGroup in $AppVManagementConnectionGroup) { Write-Host "`r`n================================" -ForegroundColor Cyan if ($ConnectionGroup.ConnectionGroupEnabled -ne $true) { Write-Host "`r`nSkipping disabled App-V Management Connection Group '$($ConnectionGroup.ConnectionGroupName)'" -ForegroundColor Yellow continue } Write-Host "`r`nImporting App-V Management Connection Group '$($ConnectionGroup.ConnectionGroupName)'" -ForegroundColor Cyan Write-AppVentiXDebugLog -Message 'Processing Connection Group' -Level Timing -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" PackageCount = @($ConnectionGroup.Packages).Count ADGroups = @($ConnectionGroup.ADGroups).Count } [PSCustomObject[]]$appVManagementPackages = @() $AppVentiXPackages = @() # Only set when a package's UNC path actually matches a configured Content Store root; # a later package falling back to its source share must not overwrite a real match. $ResolvedContentShare = $null Write-Host "Processing packages for Connection Group" -ForegroundColor Cyan foreach ($appVManagementPackage in $ConnectionGroup.Packages) { Write-Host " => Processing package '$($appVManagementPackage.PackageName)'" -ForegroundColor Cyan $MachineGroupFriendlyName = 'All Machine Groups' if (-not [string]::IsNullOrEmpty($appVManagementPackage.PackageUrl) -and $appVManagementPackage.PackageUrl.StartsWith('\\')) { $fileServer, $fileServerShare, $fileserverPath = $appVManagementPackage.PackageUrl.TrimStart('\\').Split('\', 3) $AppVentiXPackage = @($AppVentiXContentSharePackages | Where-Object { $_.FullName -like "\\$($fileServer)*\$($fileServerShare)\$($fileserverPath)" }) # Same check New-AppVentiXPublishingTask/ConvertTo-AppVentiXRelativePackagePath use: a # package only counts as "in AppVentiX" when its path is literally reachable under a # configured Content Share. $matchedContentShares = @(Get-ContentShareForPackage -Path $appVManagementPackage.PackageUrl -ConfigShare $ConfigShare) $PackagePath = $appVManagementPackage.PackageUrl Write-AppVentiXDebugLog -Message 'Matching Connection Group package with Content Store roots' -Level Timing -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" Package = "$($appVManagementPackage.PackageName)" PackagePath = "$PackagePath" Matched = $matchedContentShares.Count -gt 0 } if ($matchedContentShares.Count -eq 0) { Write-Verbose "No configured Content Store matches package '$($appVManagementPackage.PackageName)'." } else { # Longest prefix wins, so a nested Content Share (e.g. "\\srv\content\msix" under # "\\srv\content") is preferred, mirroring ConvertTo-AppVentiXRelativePackagePath. $ContentShare = ($matchedContentShares | Sort-Object -Property @{ Expression = { $_.ContentShare.TrimEnd('\').Length } } -Descending | Select-Object -First 1).ContentShare Write-Verbose "Package matches Content Share '$ContentShare'." if ([string]::IsNullOrEmpty($ResolvedContentShare)) { $ResolvedContentShare = $ContentShare } } if ($MatchConnectionGroupWithMachineGroup.IsPresent -eq $false) { if ($AppVentiXPackage.Count -eq 0) { Write-Warning "Package URL: '$($appVManagementPackage.PackageUrl)'" Write-Warning "Package not found in any of the configured Machine Group Content Shares. Trying to publish to All Machine Groups." } } elseif ($AppVentiXPackage.Count -eq 0) { Write-Warning "Package URL: '$($appVManagementPackage.PackageUrl)'" Write-Warning "Package not found in AppVentiX Content Share Packages. Trying to publish to All Machine Groups." } elseif ($AppVentiXPackage.Count -gt 1) { Write-Warning "Package URL: '$($appVManagementPackage.PackageUrl)'" Write-Warning "Multiple packages found ($($AppVentiXPackage.Count)) in AppVentiX Content Share Packages matching the specified URL." Write-Warning "Trying to publish to All Machine Groups." } else { Write-Host " => Found package in AppVentiX Content Share Packages." -ForegroundColor Green $AppVentiXPackages += $AppVentiXPackage } if (Test-Path -Path $PackagePath -PathType Leaf) { Write-Verbose "Package found in Content Store: $PackagePath" $appVManagementPackages += [PSCustomObject]@{ Path = $PackagePath Optional = $appVManagementPackage.Optional AnyVersion = $appVManagementPackage.UseAnyVersion } Write-AppVentiXDebugLog -Message 'Resolved Connection Group package path' -Level Timing -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" Package = "$($appVManagementPackage.PackageName)" PackagePath = "$PackagePath" } } else { Write-Warning "The package could not be found at path '$PackagePath'. Skipping package '$($appVManagementPackage.PackageName)'." Write-AppVentiXDebugLog -Message 'Connection Group package not found on disk, skipping' -Level Warning -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" Package = "$($appVManagementPackage.PackageName)" PackagePath = "$PackagePath" } } } else { Write-Warning "Package URL: '$($appVManagementPackage.PackageUrl)'" Write-Warning "Package is not a valid UNC path. Skipping package." Write-AppVentiXDebugLog -Message 'Connection Group package URL is not a valid UNC path' -Level Warning -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" Package = "$($appVManagementPackage.PackageName)" PackagePath = "$($appVManagementPackage.PackageUrl)" } continue } } if ([string]::IsNullOrEmpty($ResolvedContentShare)) { Write-Warning "No configured AppVentiX Content Store matched any package in Connection Group '$($ConnectionGroup.ConnectionGroupName)'. Skipping Connection Group creation." Write-AppVentiXDebugLog -Message 'No Content Store matched any package in Connection Group, skipping' -Level Warning -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" } continue } Write-Host "Creating Connection Group '$($ConnectionGroup.ConnectionGroupName)' with $($appVManagementPackages.Count) packages." -ForegroundColor Cyan try { if ($MatchConnectionGroupWithMachineGroup.IsPresent -eq $true -and $AppVentiXPackages.Count -gt 0) { $MachineGroupFriendlyName = $AppVentiXPackages | Select-Object -ExpandProperty MachineGroup -Unique if (($MachineGroupFriendlyName | Measure-Object).Count -gt 1) { Write-Warning "Packages belong to multiple Machine Groups: $($MachineGroupFriendlyName -join ', ')." Write-Warning "Publishing Connection Group to 'All Machine Groups'." $MachineGroupFriendlyName = 'All Machine Groups' } } else { $MachineGroupFriendlyName = 'All Machine Groups' } Write-Host "Continuing with Machine Group '$MachineGroupFriendlyName'" -ForegroundColor Cyan $AppVentiXConnectionGroup = New-AppVentiXConnectionGroup -Packages $appVManagementPackages ` -MachineGroupFriendlyName $MachineGroupFriendlyName ` -ConnectionGroupName $ConnectionGroup.ConnectionGroupName ` -ContentShare $ResolvedContentShare ` -Priority $ConnectionGroup.ConnectionGroupPriority Write-Host "Successfully created Connection Group '$($AppVentiXConnectionGroup.Name)'." -ForegroundColor Green Write-AppVentiXDebugLog -Message 'Created Connection Group' -Level Timing -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" MachineGroupFriendlyName = "$($MachineGroupFriendlyName -join ', ')" PackageCount = @($appVManagementPackages).Count } $publishTaskADGroup = @() foreach ($adGroup in $ConnectionGroup.ADGroups) { if ([string]::IsNullOrEmpty($($adGroup.Name))) { Write-Warning "Skipping empty AD Group for Connection Group '$($ConnectionGroup.ConnectionGroupName)'." continue } $publishTaskADGroup += '{0}\{1}' -f $adGroup.Domain, $adGroup.Name } # Independent from the Connection Group's own Machine Group: defaults to it, but can be overridden. $currentPublishingGroups = $PublishingMachineGroupFriendlyName if ([string]::IsNullOrEmpty($currentPublishingGroups)) { $currentPublishingGroups = $MachineGroupFriendlyName } $params = @{ MachineGroupFriendlyName = $currentPublishingGroups Group = $publishTaskADGroup Path = $AppVentiXConnectionGroup.Path } Write-Verbose "Creating publishing task for Connection Group '$($ConnectionGroup.ConnectionGroupName)' with parameters: $($params | Out-String)" $newTaskId = New-AppVentiXPublishingTask @params Write-AppVentiXDebugLog -Message 'Created publishing task for Connection Group' -Level Timing -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" TaskId = "$($newTaskId.Id)" MachineGroupFriendlyName = "$($MachineGroupFriendlyName -join ', ')" PublishingMachineGroupFriendlyName = "$($currentPublishingGroups -join ', ')" } $ImportResults.Add([PSCustomObject]@{ Name = $ConnectionGroup.ConnectionGroupName Id = $newTaskId.Id }) } catch { Write-Warning "Failed to create Connection Group '$($ConnectionGroup.ConnectionGroupName)': $($_.Exception.Message)" Write-AppVentiXDebugLog -Message 'Failed to create Connection Group' -ErrorRecord $_ -Data @{ ConnectionGroup = "$($ConnectionGroup.ConnectionGroupName)" } } Write-Host "Finished with the Connection Group '$($ConnectionGroup.ConnectionGroupName)'." -ForegroundColor Cyan } Write-Host "`r`n================================" -ForegroundColor Cyan Write-Host "`r`nFinished processing App-V Management Connection Groups.`r`n" -ForegroundColor Cyan Write-AppVentiXDebugLog -Message 'Finished processing App-V Management Connection Groups' -Level Timing -Data @{ TotalConnectionGroups = @($AppVManagementConnectionGroup).Count TasksCreated = $ImportResults.Count } $ImportResults } else { Write-AppVentiXDebugLog -Message 'No Connection Groups found in database' -Level Warning Write-Warning "No App-V Management Connection Groups found in the database '$SQLDatabase' on server '$SQLServer'." Write-Verbose $($_ | Get-ExceptionDetails -AsPlainText) } } catch { Write-AppVentiXDebugLog -Message 'Import failed' -ErrorRecord $_ $ErrorMessage = @{ Message = "Failed to import App-V Management Connection Groups: $($_.Exception.Message)" ErrorId = "ImportAppVManagementConnectionGroupFailed" Category = [System.Management.Automation.ErrorCategory]::NotSpecified TargetObject = $_.Exception } Write-Verbose $($_ | Get-ExceptionDetails -AsPlainText) Write-AppVentiXError @ErrorMessage } finally { # Clear the run id so later unrelated debug entries are not stamped with it. $Script:AppVentiXDebugRunId = $null } } else { throw "AppVentiX is not licensed. Please run the license setup before using this function." } } # SIG # Begin signature block # MII5zAYJKoZIhvcNAQcCoII5vTCCObkCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCHygu+LfYJGCpk # XuxtRkb+t+7ac+LLthfVz2/o/zGF4KCCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ # 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 # 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAAPYSYKV # Ad9dHyDxAAAAA9hJMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQwHhcNMjYwODAzMTQxNTE5WhcNMjYwODA2 # MTQxNTE5WjBoMQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDEP # MA0GA1UEBxMGSGVpbG9vMRcwFQYDVQQKEw5BcHBWZW50aVggQi5WLjEXMBUGA1UE # AxMOQXBwVmVudGlYIEIuVi4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB # gQDMBvk8GVv/OKuFNpoVE3yVe7hkpGgLaq5QJN1HHCgDWU6jHM1M99AR0yNyJkci # UNP701N6wA/F9ZqwDo/AX574HfqDJG5g7q+5mXHH7McXAmYE2FSVvkP2N9rTytb1 # 00Bsxcgg6bAhdMEtJSpr5Pl6fHBp0uZO9Ha84AkrkFYOkcIyGxnTkjmV4y+oxTMB # DanTYTVJVfdgzb6QlVIPn0bHeRP2oUvDEBOYdlTQ1Leo3zhrLNl/G+qIBa7gKkSv # sMoCrCDPz+aCGEcGF+yJEtiTZd7mRaLkIeFY4YQPQg9a8KDmrj6ziX9bFm9Klq6L # /iM4qyqA2J9b24NZBHZqlGaEyuNINtFd9SYMcAwOo7j/7pn/9FHsGMcbn1wzoJP6 # CGCLz5j/YNT1ZxtX19IHQltDskL/WyYdIi3XHh3IOOUAubpeYGQs4WRxmWGs2+5b # zf3Uw46HgbC72jQmTrKhS/VzX635WEGQ/4SbgrkLuAp4w1T6rkuwwEc0nH1qJCTJ # H/ECAwEAAaOCAdQwggHQMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDsG # A1UdJQQ0MDIGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhorBgEEAYI3YaL8yC6uh9F6 # gZ2lyVCBwcKCJzAdBgNVHQ4EFgQUjPC3d7gEvKwwvfQEwfoVKqHvSsEwHwYDVR0j # BBgwFoAUmvFUd3UMhxY3RqCs3nn59H/BeOkwZwYDVR0fBGAwXjBcoFqgWIZWaHR0 # cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl # MjBWZXJpZmllZCUyMENTJTIwRU9DJTIwQ0ElMjAwNC5jcmwwdAYIKwYBBQUHAQEE # aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUyMENB # JTIwMDQuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w # DQYJKoZIhvcNAQEMBQADggIBAEuJF58u6Pl5xjaytkvPWI4rO8ruvH4JIXNryvyE # hAr816SPRGym0fyNlotEco5QCwqbHtM0iiG/ynZ9tidzXK5YctOCJ/lfFFzyVnYf # Q6FWKON1QqybtdnLiQKtpwP9ZFCFIZCFBtJCkIda8ho56YYtTLI0T189JLKdMO0S # zKhybvo8NpjqYneuDXY82j3FWsKURwjohfIZrIwILI5luRLtIVdbO85Y+oaQEaAX # vi1Z1ws0xdgIR+wzLKPB6Pf6+347xMeOcq/BI3+s8qagFnsBL0J1U4yZsWCnehdS # cA7BSwgQRT325pWcYpUCWi4ve1OD4LH8aFv/ejERvstN2WZGYeVYBpH/n/dlgCki # Y7wgEdbzAFAKEqQfONvzIgz7LINqmhOp5yyN+33FZptvH2x/ZcSvtjp208eQxdz/ # qtSPK239/ZPOQbYUjj5ADGRsSGkQcNnErrCW1ak3no67BOyomlMlUSmzxMNMXbCX # K14FSbAX9d0PobnKu2PkQBoFsam/lP32ptBTHLMuLzqYNPQgGSVe4CKjinQafNTE # XPapu3eCnlARfo/wIOwDUpdt9IgZuhUh+hKzM/dS9IfdvakK74I+cpCPDF0RJHvk # pxX2AxoWX21pAPrJc5+3hiL+X06f+Jc7OGCLf0qkqCr7TyouecM1mqfg7DT/e7kU # WN0ZMIIGpTCCBI2gAwIBAgITMwAD2EmClQHfXR8g8QAAAAPYSTANBgkqhkiG9w0B # AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgRU9DIENBIDA0 # MB4XDTI2MDgwMzE0MTUxOVoXDTI2MDgwNjE0MTUxOVowaDELMAkGA1UEBhMCTkwx # FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxDzANBgNVBAcTBkhlaWxvbzEXMBUGA1UE # ChMOQXBwVmVudGlYIEIuVi4xFzAVBgNVBAMTDkFwcFZlbnRpWCBCLlYuMIIBojAN # BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAzAb5PBlb/zirhTaaFRN8lXu4ZKRo # C2quUCTdRxwoA1lOoxzNTPfQEdMjciZHIlDT+9NTesAPxfWasA6PwF+e+B36gyRu # YO6vuZlxx+zHFwJmBNhUlb5D9jfa08rW9dNAbMXIIOmwIXTBLSUqa+T5enxwadLm # TvR2vOAJK5BWDpHCMhsZ05I5leMvqMUzAQ2p02E1SVX3YM2+kJVSD59Gx3kT9qFL # wxATmHZU0NS3qN84ayzZfxvqiAWu4CpEr7DKAqwgz8/mghhHBhfsiRLYk2Xe5kWi # 5CHhWOGED0IPWvCg5q4+s4l/WxZvSpaui/4jOKsqgNifW9uDWQR2apRmhMrjSDbR # XfUmDHAMDqO4/+6Z//RR7BjHG59cM6CT+ghgi8+Y/2DU9WcbV9fSB0JbQ7JC/1sm # HSIt1x4dyDjlALm6XmBkLOFkcZlhrNvuW8391MOOh4Gwu9o0Jk6yoUv1c1+t+VhB # kP+Em4K5C7gKeMNU+q5LsMBHNJx9aiQkyR/xAgMBAAGjggHUMIIB0DAMBgNVHRMB # Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggr # BgEFBQcDAwYaKwYBBAGCN2Gi/MgurofReoGdpclQgcHCgicwHQYDVR0OBBYEFIzw # t3e4BLysML30BMH6FSqh70rBMB8GA1UdIwQYMBaAFJrxVHd1DIcWN0agrN55+fR/ # wXjpMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUy # MENBJTIwMDQuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy # MFZlcmlmaWVkJTIwQ1MlMjBFT0MlMjBDQSUyMDA0LmNydDBUBgNVHSAETTBLMEkG # BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQBLiRef # Luj5ecY2srZLz1iOKzvK7rx+CSFza8r8hIQK/Nekj0RsptH8jZaLRHKOUAsKmx7T # NIohv8p2fbYnc1yuWHLTgif5XxRc8lZ2H0OhVijjdUKsm7XZy4kCracD/WRQhSGQ # hQbSQpCHWvIaOemGLUyyNE9fPSSynTDtEsyocm76PDaY6mJ3rg12PNo9xVrClEcI # 6IXyGayMCCyOZbkS7SFXWzvOWPqGkBGgF74tWdcLNMXYCEfsMyyjwej3+vt+O8TH # jnKvwSN/rPKmoBZ7AS9CdVOMmbFgp3oXUnAOwUsIEEU99uaVnGKVAlouL3tTg+Cx # /Ghb/3oxEb7LTdlmRmHlWAaR/5/3ZYApImO8IBHW8wBQChKkHzjb8yIM+yyDapoT # qecsjft9xWabbx9sf2XEr7Y6dtPHkMXc/6rUjytt/f2TzkG2FI4+QAxkbEhpEHDZ # xK6wltWpN56OuwTsqJpTJVEps8TDTF2wlyteBUmwF/XdD6G5yrtj5EAaBbGpv5T9 # 9qbQUxyzLi86mDT0IBklXuAio4p0GnzUxFz2qbt3gp5QEX6P8CDsA1KXbfSIGboV # IfoSszP3UvSH3b2pCu+CPnKQjwxdESR75KcV9gMaFl9taQD6yXOft4Yi/l9On/iX # Ozhgi39KpKgq+08qLnnDNZqn4Ow0/3u5FFjdGTCCBygwggUQoAMCAQICEzMAAAAX # J0UJC4uHr8YAAAAAABcwDQYJKoZIhvcNAQEMBQAwYzELMAkGA1UEBhMCVVMxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0 # IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODEx # MzFaFw0zMTAzMjYxODExMzFaMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll # ZCBDUyBFT0MgQ0EgMDQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCC # x2T+Aw9mKgGVzJ+Tq0PMn49G3itIsYpbx7ClLSRHFe1RELdPcZ1sIqWOhsSfy6yy # qEapClGH9Je9FXA1cQgZvvpQbkg+QInVLr/0EPrVBCwrM96lbRI2PxNeCwXG9Lsy # W2hG6KQgintDmNCBo4zpDIr377plVdSliZm6UB7rHwmvBnR02QT6tnrqWq2ihzB6 # lRJVTEzuh0OafzIMeMnYM0+x+ve5EOLHdfiq+HXiMf9Jb7YLHtYgyHIiJA7bTWLq # FSLGaTh7ZlbxbsLXA91OOroEpv7OjzFuu3tkpC9FflA4Dp2Euq4+qPmxUqfGp+TX # 0gLRJp9NJOzzILjcTD3rkFFFbxUv1xyg6avivFDLtoKBhM2Td138umE1pNOacanu # SYtPHIeQHmB6haFi64avLBLwTTAm/Rbit860cFXR72wq+5Qh4hSmezHqKXERWPpV # Be+APrJ4Iqc+aPeMmIkoCWZQO22HnLNFUFSXjiwyIbgvlH/LIAJEqTafTzxDZgKh # lLU7zr6gwsq3WNpcYQI6NuxWnwh3VVDDyF7onQqKs5Ll7bleVN0Y8VvqgE45ppyB # bvwqN/Run5fMCCRz3aYMY0kZhKO92eP7t4zHqZ5bQMAgZ0tE2Pz/jb0wiykUF/Pc # oOqqk3vVLiRDYst6vd3GEMNzMpUUvQcvBG46+COIbwIDAQABo4IB3DCCAdgwDgYD # VR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSa8VR3dQyH # FjdGoKzeefn0f8F46TBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYz # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnku # aHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8C # AQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1zSmepEhqMOYwcAYDVR0fBGkwZzBl # oGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z # b2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAy # MS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1p # Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZp # ZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEB # DAUAA4ICAQCQdVoZ/U0m38l2iKaZFlsxavptpoOLyaR1a9ZK2TSF1kOnFJhMDse6 # KkCgsveoiEjXTVc6Xt86IKHn76Nk5qZB0BXv2iMRQ2giAJmYvZcmstoZqfB2M3Kd # 5wnJhUJOtF/b6HsqSelY6nhrF06zor1lDmDQixBZcLB9zR1+RKQso1jekNxYuUk+ # HaN3k1S57qk0O//YbkwU0mELCW04N5vICMZx5T5c7Nq/7uLvbVhCdD7f2bZpA4U7 # vOkB1ooB4AaER3pjoJ0Mad5LFyi6Na9p9Zu/hrLeOjU5FItS5YxsqvlfXxAThJ17 # 6CmkYstKRmytSHZ7JhKRfV6e9Zftk/ODb/CK4pGVAVqsOf4337bQGrOHHCQ3IvN9 # gmnUuDh8JdvbheoWPHxIN1GB5sUiY584tXN7xdD8LCSsRqJvQ8e7a3gZWTgViugR # s1QWq+N0G9Nje6JHlN1CjJehge+H5PGktJja+juGEr0P+ukSkcL6qaZxFQTh3SDI # 71lvW++3bl/Ezd6SO8N9Udw+reoyvRHCyTiSsplZQSBTVJdPmo3qCpGuyHFtPo5C # Bn3/FPTiqJd3M9BHoqKd0G9Kmg6fGcAvFwnLNXA2kov727wRljL3ypfqL7iAT/Yn # pxul6RwHRlcOf9dDGg1RRvr92NP/CWVXIb68geR2rvU/NsfmtjF1wDCCB54wggWG # 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 # Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQCEzMAA9hJgpUB310f # IPEAAAAD2EkwDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq # hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgJXkv0Shdknur # KTsbTz3LXfhtvj5IrCRjRKdkh42iC7YwDQYJKoZIhvcNAQEBBQAEggGAl9pc3vdC # bc0xW90bBzKPDKlZMRncoBx5HZue2bbiwP8m4i3D8UAkDQ2bq0j0XVR6qxaIzrTk # cNRLUNVQs0wkuFFIN8vX/cHaL6D+iRu4vdzYWw3htL0JiSTHL3gplp9MZkWZEEPo # vXQs9iSrfRL3livRQf92LPMCiwc6/1Hhu59jozlFIma90H2lvQpnm7tI6vm34Rs9 # M29FMG1fUFgdxXwWafRVe2znrAnw+Ub/YM30i1tK3qRlZNLLedgUXCvT+2l4Sb0B # 1vEPj4vgDtlqQG3dlsxc/YJTLQBqI3m4pugC4etSrjsFx+6YRsW/bkPePjPc593O # mgB1ZLDQAr3zwzRkhIgH62HCHiYIN0/OqCURv/5OuIqJX2azVho+glIxGKj1j7c0 # sPVs7P6ZQ5lK0BlUSIXlYwOuRa9cJ601WtknZE8FH6yx6Aky3GNot8VSiZLA8AFW # +3G+Rxn8EEqv3kVpOYhCg6VciY4d5on/gkuLCgdr7hg0dz0ZkOg5SNjtoYIUsjCC # FK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcCAQMxDzAN # BglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFRAgEBBgor # BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIJM3A1bq2kQOSxGoqdAyTomr8erz # yHhq7ftbCKp9QsnTAgZqNTBkI1MYEzIwMjYwODA0MTk0NTExLjQyOVowBIACAfSg # gemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr # BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG # A1UECxMeblNoaWVsZCBUU1MgRVNOOjQ5MUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxN # 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 # pmgAXVswggefMIIFh6ADAgECAhMzAAAAWvYNZ4yF7d0IAAAAAABaMA0GCSqGSIb3 # DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFtcGlu # ZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwM1oXDTI3MDEwNzE4NTkwM1owgeMxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv # c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs # ZCBUU1MgRVNOOjQ5MUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVi # bGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB # BQADggIPADCCAgoCggIBAO/0O0eWjgUb9rnHcQLRdfWPN4H+91a3YnlaP46E1m4u # D+JKx6csWMStX79fxLJUAqHJqQWE19UlNMhS9jEB32dAJ4yuWsHyUuM+dphjDz4E # 5jl4gYGZEmaOrKvNt+KqlFayyg/oTg3BlLRu4aBq8668A5qlHcfsuh6DdSqFID1i # xJFZzHrZFG1iGBG7U1Bn2ONLDo7jbwX5rMcPduTAUw/c7M3WhSxQBuZpQiz8RQGK # IqCKfIxgQkKdzpCpU0SWQOE/DgTXbz3c15KMRCdkGlL2zb+lnuSV4sseQm3qflZi # ZckLyn2xJI8ZXDkq+Ig+b/rsPPIfI8di228WvK1j67JXpyeVCaSUO9ErzlLnTrnj # QkeXVQIp73xuVBVrmvoTf/v4a7MnrmuKSyIXc5vJUHEGB345+O8omFt1w8b+Xg9D # 9PKIRqDPEv7HRk0C+Yvxu8FvHJvSocSIZK+v/FmKFOipYnpP76yAmJNnyheucShO # gk8QiU53USn/+AyMb7xW905gZnyNqb29HeVdQ175pDHJGEz8Cx5wiHeVliGz5hAB # ucFDylR9z3LSTmB6+3ZuIxeG9BZS46P6ANPkuVuD5m8wgc7GLLzg73CsDF09ukt8 # Uf8dTcMBX3ro+7/k9M6Xt8WPG7IL9v/4DvyMY03tkb9Y9Ri6HWavXRPYRCUePspP # AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQUjmOyQ6twMcP1ZbRytJxI4fnXmcIwHwYD # VR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZb # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIw # UHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5Bggr # BgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv # bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0 # YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM # MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQB # gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEB # DAUAA4ICAQCAlM8r+t3hIb2h1lDTAx+iYkQlxFuU7QONeyIFIBZ29xvGl8pehKxE # rDzIniOpIX/eluUAwQKoaI0zwuKAdR0mrSHXCniMoLNko5W+5r7sXNamKX7QMV3B # fGOX3gi9qVfxyUe7AHXbqQ8KBQHNYCnNFtQQHgARrlYhtyAKol5ctM0CAc/y3oY7 # bTMsVJvnA5u7DVWPeXoST2KEMDeLBvJYq0IJZ6yMpDOWLZ4UP82bksyShIB/Xdaw # irIGLdseudryRxVMk313mAcjGRb59+Ittt6otVvYQWqH+PGrTUzEcez8aQuO3umo # NZjKuFoX5VsPP/gSZse+orhG3zfZk9IDyE3DfUFrhvkv6H0tijK1D0uIGhwMBWSm # 9ktQ6oeU+aurZFx3MI+LODnHsbRFZAy11uMvwKq+ZNC1Se4tIM1u9piWAhnTPoh6 # mULKikHOVhHaO953tkzDCtjsse5GUKOx9yg9nqHKWMgnODp62/uPPzC/yDEISrXC # cU7UB7tATr3zWNEdtM4d009iXWI6dV/SdcIIX44rpoLyCLw+nXjxp+fY/dygLO7U # dSQaVaUFVj3K2nVyuujPspt5Lunc5FvuYPqmi/z8kASmmwbiF+W0P0UTWFaC84MW # fU2h6MDg5s0oxmdNFK76jXr3wZfdSoV7FCKfq5GdeGoy5UwDQwMC0DGCA9QwggPQ # AgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n # IENBIDIwMjACEzMAAABa9g1njIXt3QgAAAAAAFowDQYJYIZIAWUDBAIBBQCgggEt # MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgWwMV # QXwmpXtgzbxxPa3Z0a8AHIx37e3bLwDIW2KSouYwgd0GCyqGSIb3DQEJEAIvMYHN # MIHKMIHHMIGgBCBiuWRAi+p96PRsBt3TwW3jNozgPQS+Qco1CVm/NaU0QzB8MGWk # YzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg # MjAyMAITMwAAAFr2DWeMhe3dCAAAAAAAWjAiBCBsCIKbBVzkK4UpTLbF7yBejMI2 # YtIaiZ1AQn/5jcseOjANBgkqhkiG9w0BAQsFAASCAgB5WUvjdy5Q59+1zT3rMzQY # 29fstjzNk3tnFW70B5heDPik2FcErURK3naWguwyEW3HGDu5KseubthkTZHTcg1p # V0zgBvsbG4b+mj/PrrIm3ZjZ/U/FCeAf56ABKYpVwVv+IibPQYhQScwazpTLgISC # 6QrJqvz8QZ/b5pc3UNzk3KfLjdZ7oL6JG7//i/8Vlqz9x5afkgCFhX0CQvYpZqgh # iWHsgpDDW58cBPNSEtASKV4luBHkV30Y3Pv3uVfHmYFQLwQlMs0CGOQM5E1zrCUq # TxDLXhBe9DrO6zmglt64xIhK/lr9fssqp+X8C0GrVo4tjfCeK9YVgQfY6AOmaXQk # v4AQLuGlThQCH0xXvqkGkgSl0i57+cc9JePWgP9jRzhcw+/k9xtmp7Mte9HVv9R1 # 9jDUxNvnl9o5ET7cI77MAZWNf/vwRNMekEK/3TFEDkbOmkOqXsByJuKkdA5gg2AC # jH6MYEMo/DLPN7bC/2T2/FesijXg9VyV5Pp+MirymqBDAqeonRUetU8exIzKC4Pe # ANcPdFnsJDh1LNKbJOFrAOgujk0o6h+7r7AlH58W0EfiO2VpADLZDBC1n3dmexlY # zpSzev6C5R28A8Xo+G03aC7KAbdzJt9K1XkCIgqPDJ7qVG5HZrgay4y5ssVJO2g2 # ij+23x2Y37jxIpuGNk0JxQ== # SIG # End signature block |