private/Get-ManifestDetail.ps1
|
<#
.SYNOPSIS Retrieves details from an MSIX or APPV package manifest. .DESCRIPTION The Get-ManifestDetail function retrieves details from an MSIX or APPV package manifest. The package is read through Open-AppVentiXPackageArchive, so it works for a package on a file system content share as well as one on an Azure Blob content share ('azure://<account>/<container>/<blob>'). .PARAMETER Filename Specifies the path to the package, either a file system path or an azure:// path. .NOTES Function : Get-ManifestDetail Author : John Billekens Copyright: Copyright (c) AppVentiX Version : 1.8 #> function Get-ManifestDetail { [CmdletBinding()] param ( [ValidateScript({ try { if (("$_" -match '^azure://' -or (Test-Path -Path "$_")) -and ("$_" -like '*.msix' -or "$_" -like '*.appv' -or "$_" -like '*.appg' -or "$_" -like '*.appattach')) { $true } else { throw [System.Management.Automation.ItemNotFoundException] "The parameter must be a valid and accessable *.msix, *.appattach, *.appv or *.appg file!" } } catch { throw [System.Management.Automation.ItemNotFoundException] "The parameter must be a valid and accessable *.msix, *.appattach, *.appv or *.appg file!" } })] [String]$Filename ) # A blob cannot be validated by the ValidateScript above without a network call, so existence is # established here. The same lookup provides the package timestamp for both backends. $packageItem = Get-AppVentiXPackageItem -Path $Filename if ($null -eq $packageItem) { throw [System.Management.Automation.ItemNotFoundException] "Package not found: `"$Filename`"" } $lastUpdated = ([DateTime]$packageItem.LastWriteTime).ToString("o").Substring(0, 27) $packageExtension = ([System.IO.Path]::GetExtension($Filename).TrimStart('.')).ToUpper() Write-Verbose "We have a package with extension: $packageExtension, Retrieve the manifest from the package" $appManifest = @{} if ($packageExtension -ieq "appg" -or $packageExtension -ieq "appattach") { Write-Verbose "Gather the App Attach metadata" $tempPath = $null try { if ($Filename -match '^azure://(?<account>[^/]+)/(?<container>[^/]+)/(?<blob>.+)$') { # An .appg/.appattach holds a VHD, not a zip, so a ranged read cannot help here: # Get-AppAttachMetadata needs a local file. Write-Verbose "Downloading `"$Filename`" to a temporary file to read its metadata" $tempPath = Save-AppVentiXAzureBlobItemToTempFile -StorageAccount $Matches.account -Container $Matches.container -Blob $Matches.blob $manifestData = Get-AppAttachMetadata -FilePath $tempPath } else { $manifestData = Get-AppAttachMetadata -FilePath $Filename } } finally { if ($tempPath) { Remove-Item -Path $tempPath -Force -ErrorAction SilentlyContinue } } } if ($packageExtension -ieq "appg") { $appManifest.Name = $manifestData.DisplayName $appManifest.DisplayName = $manifestData.DisplayName $appManifest.Type = "APPV" $appManifest.Version = $null $appManifest.GroupId = $manifestData.AppConnectionGroupId $appManifest.VersionId = $manifestData.VersionId $appManifest.PackageFullName = $null $appManifest.LastUpdated = $lastUpdated } elseif ($packageExtension -ieq "appattach") { Write-Verbose "Gather the APPATTACH package data" try { $name, $version, $architecture, $null, $publisherID = $manifestData.FullPackageName.Split("_") $appManifest.Version = $version $appManifest.Architecture = $architecture $appManifest.PublisherID = $publisherID } catch { $appManifest.Version = $manifestData.Version $appManifest.Architecture = $manifestData.FullPackageName.Split("_")[2] $appManifest.PublisherID = Get-PublisherId -Publisher $appManifest.Publisher } $appManifest.Name = $manifestData.Name $appManifest.Publisher = $manifestData.Publisher $appManifest.PackageFullName = $manifestData.FullPackageName $appManifest.Architecture = $manifestData.FullPackageName.Split("_")[2] $appManifest.Type = "MSIX" $appManifest.FamilyName = $manifestData.PackageFamilyName $appManifest.DisplayName = $manifestData.Name $appManifest.PublisherDisplayName = $manifestData.Name $appManifest.LastUpdated = $lastUpdated Write-Verbose "Gather the application data" $appManifest.Applications = @() $appNumber = 0 foreach ($application in $manifestData.Applications.Application) { Write-Verbose "Gather info for application: $($application.DefaultDisplayName)" $app = @{ Number = $appNumber Id = $manifestData.Id Executable = $application.Value Description = $application.DefaultDisplayName FriendlyName = $application.DefaultDisplayName Iconpath = $application.ScaledIcon IconWindowsPath = 'C:\Program Files\WindowsApps\{0}\{1}' -f $manifestData.FullPackageName, $application.ScaledIcon IconPackagePath = [io.path]::combine($appManifest.PackageFullName, $application.ScaledIcon) AppVentiXExecutable = $application.Value } $appManifest.Applications += [PSCustomObject]$app.Clone() $appNumber++ } } else { [xml]$manifestXml = Get-AppXManifest -Filename $Filename Write-Verbose "Gather the package data" $appManifest.Name = $manifestXml.Package.Identity.Name $appManifest.Version = $manifestXml.Package.Identity.Version $appManifest.Publisher = $manifestXml.Package.Identity.Publisher $appManifest.PublisherID = Get-PublisherId -Publisher $appManifest.Publisher switch ($packageExtension) { "MSIX" { Write-Verbose "Gather the MSIX package data" # ProcessorArchitecture is optional in the manifest; an omitted value means neutral. if ([String]::IsNullOrWhiteSpace($manifestXml.Package.Identity.ProcessorArchitecture)) { $appManifest.Architecture = 'neutral' } else { $appManifest.Architecture = $manifestXml.Package.Identity.ProcessorArchitecture } $appManifest.PackageFullName = Get-PackageFullName @appManifest } "APPV" { Write-Verbose "Gather the APPV package data" $appManifest.PackageId = $manifestXml.Package.Identity.PackageId $appManifest.VersionId = $manifestXml.Package.Identity.VersionId } default { Write-Warning "Unknown package type: $packageExtension" } } Write-Verbose "Gather the package data" $appManifest.Type = $packageExtension $appManifest.FamilyName = '{0}_{1}' -f $manifestXml.Package.Identity.Name, $appManifest.PublisherID $appManifest.DisplayName = $manifestXml.Package.Properties.DisplayName $appManifest.PublisherDisplayName = $manifestXml.Package.Properties.PublisherDisplayName $appManifest.LastUpdated = $lastUpdated Write-Verbose "Gather the application data" $appManifest.Applications = @() Write-Verbose "Get the package files, treat the package as zip file to extract file entries" $packageFiles = Open-AppVentiXPackageArchive -Filename $Filename $packageFilesEntries = $packageFiles.Archive.Entries Write-Verbose "Release the package as soon as possible to remove the lock on the file" $packageFiles.Archive.Dispose() if ($null -ne $packageFiles.Stream) { $packageFiles.Stream.Dispose() } $appvNumber = 0 foreach ($application in $manifestXml.Package.Applications.Application) { Write-Verbose "Gather info for application: $($application.Id)" $app = @{} switch ($packageExtension) { "msix" { $app.Id = $application.Id $app.AppUserModelID = '{0}!{1}' -f $appManifest.FamilyName, $application.Id $app.Executable = $application.Executable $app.Description = $application.VisualElements.Description $app.FriendlyName = $application.VisualElements.DisplayName $app.AppVentiXExecutable = '{0}#{1}' -f $application.Id, $application.Executable Write-Verbose "Select the icon image" #Select the icon image, this is a bit tricky because the icon image can be in different locations if (-not [String]::IsNullOrEmpty($($application.VisualElements.Square44x44Logo))) { $imageFilename = Split-Path -Path $application.VisualElements.Square44x44Logo -Leaf $imageExtension = $imageFilename.Split(".")[-1] $imageBase = $imageFilename.Replace(".$($imageExtension)", $null) $imagePath = Split-Path -Path $application.VisualElements.Square44x44Logo -Parent $iconImageNamePath = $packageFilesEntries | Where-Object { $_.Fullname -like "*$($imagePath)/$($imageBase)*.$($imageExtension)" } | Select-Object -ExpandProperty FullName if ([String]::IsNullOrEmpty($iconImageNamePath) -or $iconImageNamePath.Count -gt 1) { $iconImageNamePath = $packageFilesEntries | Where-Object { $_.Fullname -like "*$($imagePath)/$($imageBase)*scale-100*.$($imageExtension)" } | Select-Object -ExpandProperty FullName } } if ([String]::IsNullOrEmpty($iconImageNamePath) ) { $iconImageNamePath = $packageFilesEntries | Where-Object { $_.FullName -like "*Assets*$($application.Id)*Square44x44*" } | Select-Object -ExpandProperty FullName } if ($iconImageNamePath.Count -gt 1) { $iconImageNamePath = $iconImageNamePath | Where-Object { $_ -like "*scale-100*" } | Sort-Object | Select-Object -First 1 } if ($iconImageNamePath.Count -gt 1) { $iconImageNamePath = $iconImageNamePath | Sort-Object | Select-Object -First 1 } if ([String]::IsNullOrEmpty($iconImageNamePath)) { $iconImageNamePath = $packageFilesEntries | Where-Object { $_.FullName -like '*Square44x44Logo.*' -or $_.FullName -like '*Square44x44Logo.scale-100.*' } | Select-Object -ExpandProperty FullName | Select-Object -First 1 Write-Warning "Selected a random icon: $($iconImageNamePath)" } if ([String]::IsNullOrEmpty($iconImageNamePath)) { Write-Warning "Cannot set an application image (path), none found" } Write-Verbose "Icon image: $iconImageNamePath" $app.Iconpath = $iconImageNamePath.Replace('/', '\') $app.IconWindowsPath = [io.path]::combine('C:\Program Files\WindowsApps', $appManifest.PackageFullName, $iconImageNamePath.Replace('/', '\')) $app.IconPackagePath = [io.path]::combine($appManifest.PackageFullName, $iconImageNamePath.Replace('/', '\')) } "appv" { $app.Number = $appvNumber $app.Executable = $application.Target $app.Id = $application.Id $app.Description = $application.VisualElements.Description $app.FriendlyName = $application.VisualElements.Name $app.Version = $application.VisualElements.Version $app.Iconpath = $application.Target.Replace('[{', $null).Replace('}]', $null) $app.IconWindowsPath = [io.path]::combine('C:\ProgramData\App-V', $appManifest.PackageId, $appManifest.VersionId, 'Root\VFS', $app.Iconpath) $app.AppVentiXExecutable = $application.Target $appvNumber++ } default { Write-Warning "Unknown package type: $packageExtension" } } $appManifest.Applications += [PSCustomObject]$app.Clone() } } Write-Verbose "Clear the XML data" $manifestXml = $null Write-Verbose "Return all the gathered data" return [PSCustomObject]$appManifest } # SIG # Begin signature block # MII5zAYJKoZIhvcNAQcCoII5vTCCObkCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBSuHC1sCsvKd+d # wae9VMtVGNynRPd+L6JEM+lvdBLXl6CCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ # 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 # 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAAThpXeU # JOhQHNvpAAAABOGlMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDMwHhcNMjYwODI0MTUxMDI2WhcNMjYwODI3 # MTUxMDI2WjBoMQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDEP # MA0GA1UEBxMGSGVpbG9vMRcwFQYDVQQKEw5BcHBWZW50aVggQi5WLjEXMBUGA1UE # AxMOQXBwVmVudGlYIEIuVi4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB # gQCvQOouUdN8xUW/AovSLcmOGFGENiKF7FI3Onpuacun665zpQdK9Rk+b6yvSZFE # WRC+MJHUa56G2834s5T0ISpMQs7ERhKMw0GrkHPhmSMI5rYb/DkzuUrPC23g409f # yxIzlQxyfPPct8iH2X5splLVQZHzEma42M1F76kdMeONzKBo4WJOGrgE3SqbPD0I # FpgMkY9UW0lieFp6rA58Amnpmgo/cma4VqirnmpM+YvMNGcgL9TXirVQjBh4rzaU # /Pj9zfTeUKDgJ/J0FrVZULASoWGnvAz62s3qPyzP96roUYjzmkab5hbq9vu7Gk0w # Z8KFZ5E4J1iRvLKIblTVQ2gsV1/59bbBJ1Gpzi5HYbIIcWs3cAXZhPf6S1a8ekUi # EQwLWw67+HWcKyljuS9SBwdL1pAR+nB81/s2XJCavZQ7aY8HeDvfr/1HW0iRSq3I # 9YUGZIJ/MZeMONCb/7bVxJniyI31B01uFQ2kj/Tbv9lL7wCBpB51l2iJlub0uyJ+ # UVcCAwEAAaOCAdQwggHQMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDsG # A1UdJQQ0MDIGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhorBgEEAYI3YaL8yC6uh9F6 # gZ2lyVCBwcKCJzAdBgNVHQ4EFgQUNG4qlKmdVxHK5zZp7EmUGmvWVOswHwYDVR0j # BBgwFoAUa16lNMMFxWJKIVqOq3NgYtSsY4UwZwYDVR0fBGAwXjBcoFqgWIZWaHR0 # cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl # MjBWZXJpZmllZCUyMENTJTIwRU9DJTIwQ0ElMjAwMy5jcmwwdAYIKwYBBQUHAQEE # aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUyMENB # JTIwMDMuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w # DQYJKoZIhvcNAQEMBQADggIBAI+zxLATDMfXwmNbJEW3r38B/Oc55NyVpSXLgpBP # 698CDUM7UPGltXZbd6mI+fLudJAOXZCyzkU6wmWHdroqa1hPrsz2f3xRtr7Um1OT # HXWPdDJcClSU2IR2Ee3764dftI9eVTCfegGGKlwkgzPnA1eq0Wo70zSQMPjVAuNB # x4VOR4Qi1bIGY0xRYyPLRDAGm6oC2eSIIFMYmF+SLyzRpAjNHeupGmwLSH2veshf # W2AwFH0Yo4+EKLZ4lhe71ofiR3yGA5hX+dhXdR4lYi6yzfb8Y3uPOFCbA3XRyINb # b/cA6g7ZXsk0MQjw3jRwPlLvW1DHn/8+Qdqmefkukl307uM9mQnOvinn15nlOwox # 5ZxhJEG6SNTScRGxEitXJYouCI6cgZDs++iIdEhNrsU8PcHXEIXK/GIF2ZwmmpbL # /bZcB0iiGuZBZPDir5JPX4n6YynMWbWOG33l2XVO93VBLUs8HRYCxFpELYId1dFS # ZW6JG12CWnpWI4Zs0rgH/KBnuCnpptIQvZ97rU+5vve9OuxU7G1HlwkLtMzHv7/i # 31a9GOkTPyHQpSZqy44cMh1BCMFOycxtgY9XYoVWdCKwVHclASbv2v6BVKKaR9jo # Z8bCpkRn89UIZ8k6AXyDmMDWe6VqqYtktdfMKtV4McLYYUkOhWDRHmAYsQXxqh0n # t0XdMIIGpTCCBI2gAwIBAgITMwAE4aV3lCToUBzb6QAAAAThpTANBgkqhkiG9w0B # AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgRU9DIENBIDAz # MB4XDTI2MDgyNDE1MTAyNloXDTI2MDgyNzE1MTAyNlowaDELMAkGA1UEBhMCTkwx # FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxDzANBgNVBAcTBkhlaWxvbzEXMBUGA1UE # ChMOQXBwVmVudGlYIEIuVi4xFzAVBgNVBAMTDkFwcFZlbnRpWCBCLlYuMIIBojAN # BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAr0DqLlHTfMVFvwKL0i3JjhhRhDYi # hexSNzp6bmnLp+uuc6UHSvUZPm+sr0mRRFkQvjCR1GuehtvN+LOU9CEqTELOxEYS # jMNBq5Bz4ZkjCOa2G/w5M7lKzwtt4ONPX8sSM5UMcnzz3LfIh9l+bKZS1UGR8xJm # uNjNRe+pHTHjjcygaOFiThq4BN0qmzw9CBaYDJGPVFtJYnhaeqwOfAJp6ZoKP3Jm # uFaoq55qTPmLzDRnIC/U14q1UIwYeK82lPz4/c303lCg4CfydBa1WVCwEqFhp7wM # +trN6j8sz/eq6FGI85pGm+YW6vb7uxpNMGfChWeROCdYkbyyiG5U1UNoLFdf+fW2 # wSdRqc4uR2GyCHFrN3AF2YT3+ktWvHpFIhEMC1sOu/h1nCspY7kvUgcHS9aQEfpw # fNf7NlyQmr2UO2mPB3g736/9R1tIkUqtyPWFBmSCfzGXjDjQm/+21cSZ4siN9QdN # bhUNpI/027/ZS+8AgaQedZdoiZbm9LsiflFXAgMBAAGjggHUMIIB0DAMBgNVHRMB # Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggr # BgEFBQcDAwYaKwYBBAGCN2Gi/MgurofReoGdpclQgcHCgicwHQYDVR0OBBYEFDRu # KpSpnVcRyuc2aexJlBpr1lTrMB8GA1UdIwQYMBaAFGtepTTDBcViSiFajqtzYGLU # rGOFMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUy # MENBJTIwMDMuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy # MFZlcmlmaWVkJTIwQ1MlMjBFT0MlMjBDQSUyMDAzLmNydDBUBgNVHSAETTBLMEkG # BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQCPs8Sw # EwzH18JjWyRFt69/AfznOeTclaUly4KQT+vfAg1DO1DxpbV2W3epiPny7nSQDl2Q # ss5FOsJlh3a6KmtYT67M9n98Uba+1JtTkx11j3QyXApUlNiEdhHt++uHX7SPXlUw # n3oBhipcJIMz5wNXqtFqO9M0kDD41QLjQceFTkeEItWyBmNMUWMjy0QwBpuqAtnk # iCBTGJhfki8s0aQIzR3rqRpsC0h9r3rIX1tgMBR9GKOPhCi2eJYXu9aH4kd8hgOY # V/nYV3UeJWIuss32/GN7jzhQmwN10ciDW2/3AOoO2V7JNDEI8N40cD5S71tQx5// # PkHapnn5LpJd9O7jPZkJzr4p59eZ5TsKMeWcYSRBukjU0nERsRIrVyWKLgiOnIGQ # 7PvoiHRITa7FPD3B1xCFyvxiBdmcJpqWy/22XAdIohrmQWTw4q+ST1+J+mMpzFm1 # jht95dl1Tvd1QS1LPB0WAsRaRC2CHdXRUmVuiRtdglp6ViOGbNK4B/ygZ7gp6abS # EL2fe61Pub73vTrsVOxtR5cJC7TMx7+/4t9WvRjpEz8h0KUmasuOHDIdQQjBTsnM # bYGPV2KFVnQisFR3JQEm79r+gVSimkfY6GfGwqZEZ/PVCGfJOgF8g5jA1nulaqmL # ZLXXzCrVeDHC2GFJDoVg0R5gGLEF8aodJ7dF3TCCBygwggUQoAMCAQICEzMAAAAV # BT5uGY6TKdkAAAAAABUwDQYJKoZIhvcNAQEMBQAwYzELMAkGA1UEBhMCVVMxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0 # IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODEx # MjhaFw0zMTAzMjYxODExMjhaMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll # ZCBDUyBFT0MgQ0EgMDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDg # 9Ms9AqovDnMePvMOe+KybhCd8+lokzYORlS3kBVXseecbyGwBcsenlm5bLtMGPji # IFLzBQF+ghlVV/U29q5GcdeEEBCHTTGhL2koIrLc4UrliMRcbv9mOMtR/l7/xAmv # 0Fx4BJHn1dHt37fvrBqXmKjKfGf5DpyO/+hnV7TEreMtS19iO+bjZ/9Hnpg3PCk0 # e7YSbRTFkx97FZwRWpC4s3NepRfRXQh/WMAj7JmsYeVZohi4TF5yW2JMrJZqwHcy # zJZYtD2Hlno5ZEJkdiZcEaxHOobmwO06Z1J9c23ps9PGIhGaq1sKLEAz9Doc5rLk # YWGteDrscKhAp2kIc/oYlH9Ij6BkOqqgWINEkEtC8ZNG1Mak+h3o65aj0iQKmdxW # 7IZaHO5cuyoMi+KtYfXeIIg3sVIbS2EL8kUtsDGdEqNqAq/isqTi1jXqLe6iKp1n # i1SPdvPW9G03CTsYF68b/yuIQRwbdoBCXemMNJCS0dorCRY4b2WAAy4ng7SANcEg # rBgZf535+QfLU5hGzrKjIpbMabauWb5FKWUKkMsPcXFkXRWO4noKPm4KWlFypqOp # bJ/KONVReIlxHQRegAOBzIhRB7gr9IDQ1sc2MgOgQ+xVGW4oq4HD0mfAiwiyLskZ # rkaQ7JoanYjBNcR9RS26YxAVbcBtLitFTzCIEg5ZdQIDAQABo4IB3DCCAdgwDgYD # VR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRrXqU0wwXF # YkohWo6rc2Bi1KxjhTBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYz # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnku # aHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8C # AQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1zSmepEhqMOYwcAYDVR0fBGkwZzBl # oGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z # b2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAy # MS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1p # Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZp # ZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEB # DAUAA4ICAQBdbiI8zwXLX8glJEh/8Q22UMCUhWBO46Z9FPhwOR3mdlqRVLkYOon/ # MczUwrjDhx3X99SPH5PSflkGoTvnO9ZWHM5YFVYpO7NYuB+mfVSGAGZwiGOASWk0 # i2B7vn9nElJJmoiXxugfH5YdBsrUgTt0AFNXkzmqTgk+S1Hxb1u/0HCqEHVZPk2A # /6eJXYbtpRM5Fcz00jisUl9BRZgSebODV85bBzOveqyC3f0PnHCxRJNhMb8xP/sB # /VI7pf2rheSV7zqUSv8vn/fIMblXeaVIlpqoq8SP9BJMjE/CoVXJxnkZQRM1Fa7k # N9yztvReOhxSgPgpZx/Xl/jkwyEFVJTBfBp3sTgfIc/pmqv2ehtakL2AEj78EmOP # QohxJT3wyX+P78GA25tLpAvzj3RMMHd8z18ZuuVi+60MAzGpOASH1L8Nlr3fZRZn # QO+pyye2DCvYmHaIfdUgYJqn7noxxGVv89+RaETh1tgCDvwNpFCSG7vl5A4ako+2 # fx409r9TWjXC7Oif1IQ5ZJzB4Rf8GvBiHYjvMmHpledp1FGRLdSRFVpC3/OKpZY6 # avIqZp7+8pP/WQP903DdgrvAT6W4xPOBxXPa4tGksN3SuqJaiFYHSNyeBufn8ise # ujW4IbBSbHD4BPqbF3qZ+7nG9d/d/G2/Lx4kH9cCmBfmsZdSkHmukDCCB54wggWG # 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 # Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBFT0MgQ0EgMDMCEzMABOGld5Qk6FAc # 2+kAAAAE4aUwDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq # hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgkROaVduhmffF # KcBBOAdaUbRe4y2SfleOja0i5fhlQJowDQYJKoZIhvcNAQEBBQAEggGANGnhyeB9 # u+R0ZzoAqzFSeCJiy7VYfleFyM60z5CY1TEZU+g3HoJ49vQUIoOnvk6mgi0KB2QN # wVmRpQYKfP05x6LFJA5yDkPsmjq9vF9l6sOsUG+zwYrK2pJXXKL0iAtrhg557pDu # hjjDwQO3B0u+8PeQTikQ7/nCuIyxQyr7WbC+7xEIHMxh+dhNqoPQplbr78/JdWxo # ITeuNosyXS67PR22hcn2l4JXh0HH7flnHlHBpHjuOpR6lMJWBfRtsqhSSwZGk/w3 # kyzFevl1lMat9v8YxStKJMl7MarGoq2oWO838fV9iiH8/9oXaO9YR77EX+uEzDBy # X0IM6VsaonWuN0BrDrPBFaNAQUvewxRLLYpYApHlXR0owmj6uxrPp3PS/pgeiGar # UxkcXOHHxOClYi5eZBdD/5bgxJYO2imk90skO2u8NTZAGmBwf0gRrxrC0NVg5zBf # uJ0qAnhw0XQ9nlQRF+PHitXQoBrjJiNko8Eep1I/afPIUHjq0Qr036fVoYIUsjCC # FK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcCAQMxDzAN # BglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFRAgEBBgor # BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIL0FcSPLtCjo/LEf1HoJkXJqZzVR # H5UyQvl39EArYuh2AgZqg90jBbgYEzIwMjYwODI1MTcwNjU5LjE0NFowBIACAfSg # gemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr # BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG # A1UECxMeblNoaWVsZCBUU1MgRVNOOjdBMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxN # aWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eaCCDykw # ggeCMIIFaqADAgECAhMzAAAABeXPD/9mLsmHAAAAAAAFMA0GCSqGSIb3DQEBDAUA # MHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x # SDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBD # ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMDExMTkyMDMyMzFaFw0zNTEx # MTkyMDQyMzFaMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y # cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFt # cGluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnnzn # UmP94MWfBX1jtQYioxwe1+eXM9ETBb1lRkd3kcFdcG9/sqtDlwxKoVIcaqDb+omF # io5DHC4RBcbyQHjXCwMk/l3TOYtgoBjxnG/eViS4sOx8y4gSq8Zg49REAf5huXhI # kQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5hJM1xznkRsFPu6rfDHeZeG1Wa1wISvlk # pOQooTULFm809Z0ZYlQ8Lp7i5F9YciFlyAKwn6yjN/kR4fkquUWfGmMopNq/B8U/ # pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTPVi3gVErnc/qi+dR8A2MiAz0kN0nh7SqI # NGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKxLms73KG/Z+MkeuaVDQQheangOEMGJ4pQ # ZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxRYR/JPGAaM6xGl57Ei95HUw9NV/uC3yFj # rhc087qLJQawSC3xzY/EXzsT4I7sDbxOmM2rl4uKK6eEpurRduOQ2hTkmG1hSuWY # BunFGNv21Kt4N20AKmbeuSnGnsBCd2cjRKG79+TX+sTehawOoxfeOO/jR7wo3liw # kGdzPJYHgnJ54UxbckF914AqHOiEV7xTnD1a69w/UTxwjEugpIPMIIE67SFZ2PMo # 27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8FUXetXr0CAwEAAaOCAhswggIXMA4GA1Ud # DwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUa2koOjUvSGNA # z3vYr0npPtk92yEwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0 # dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0 # bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA # QTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFMh+0mqFKhvKGZgEByfPUBBP # aKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUy # MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3JsMIGUBggr # BgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUHMAKGdWh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmlj # YXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNy # dDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2x35ttVoVdedMeGj6TuHYRJklFaW4sTQ5 # r+k77iB79cSLNe+GzRjv4pVjJviceW6AF6ycWoEYR0LYhaa0ozJLU5Yi+LCmcrdo # vkl53DNt4EXs87KDogYb9eGEndSpZ5ZM74LNvVzY0/nPISHz0Xva71QjD4h+8z2X # MOZzY7YQ0Psw+etyNZ1CesufU211rLslLKsO8F2aBs2cIo1k+aHOhrw9xw6JCWON # NboZ497mwYW5EfN0W3zL5s3ad4Xtm7yFM7Ujrhc0aqy3xL7D5FR2J7x9cLWMq7eb # 0oYioXhqV2tgFqbKHeDick+P8tHYIFovIP7YG4ZkJWag1H91KlELGWi3SLv10o4K # Gag42pswjybTi4toQcC/irAodDW8HNtX+cbz0sMptFJK+KObAnDFHEsukxD+7jFf # EV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9TlxydiFhvu88o0w35JkNbJxTk4MhF/Kg # aXn0GxdH8elEa2Imq45gaa8D+mTm8LWVydt4ytxYP/bqjN49D9NZ81coE6aQWm88 # TwIf4R4YZbOpMKN0CyejaPNN41LGXHeCUMYmBx3PkP8ADHD1J2Cr/6tjuOOCztfp # +o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdtoSAHEUKiBhI6JQivRepyvWcl+JYbYbBh7 # pmgAXVswggefMIIFh6ADAgECAhMzAAAAW0q1jUEybdx0AAAAAABbMA0GCSqGSIb3 # DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFtcGlu # ZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwNVoXDTI3MDEwNzE4NTkwNVowgeMxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv # c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs # ZCBUU1MgRVNOOjdBMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVi # bGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB # BQADggIPADCCAgoCggIBAJBUzBbbnlDXee0B0KD5G4/475thFyfctCyuESTWQXvl # Li4Wx/td2qUdeq4ideeg6VWhiOHfu3wJV4TUGSRtqh9Ccr1BmiBKv9iuFpgHyIBu # 5Qx38ZsxwlFeXVS+ZqJJKnXRbDNQdcYSoC/6c0hQJ/PH50DBRDQkPXVwyFizLrRH # 9AlrJeUg7BKeT23zftS8/KOJLvEEbHOF6pSOY3ZVprZUWbWjWwRTmoHaQ/E8vrWt # LNyEJ+b089VW1Ikra3t4GTB5Wby3CL1K2zYnAxBIvafsKMFyj9OuXHcTPKMDoFSM # eamG9MKOMb6uoG1PjdnDgsLP6EOMRSzrLL7jED1mbB9RSd9fhty+HQr6vZgsBn6o # Uy+YTpNVLskwdtUM82WYAkPztlOt3AiL0qyV7/U3j/uq3vHMjPM0w0340M57Nei0 # g4BCcMt0dbqoc91VgCb3/36sHQANontn1HOF2oLk8190QRS43isHVra8H8sf5+Gl # qIYsYiCKX04HZiOzZW826nVI6d++8lyTeWmpj90Ua9uPbJhVjwE3oh6tO510ySqm # SMSLEN07p3Ibe3E6BAb2w93rWzb26+dpSthbKF4kApofqBsWPX4MEtHKSOftPmVT # CQ47tghrVuHia9jY+Hsj01m4KW4WtkmVm3L6hMZECMa4sjMxAXz+bX/AJhWTe6TZ # AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQU7/LqUlWWYhXJdXwgYKx4b8Gv0rYwHwYD # VR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZb # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIw # UHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5Bggr # BgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv # bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0 # YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM # MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQB # gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEB # DAUAA4ICAQAAH+zd+XKh4OxXYMWFmtgilXAQGctOjCUB1w/uBiC/OXcH3Ia4/Xbd # UhKzFbaiTbIE6vYZKd1p4u7nKOLkawymAMVyuO7LSl6rLKttZIyLhWjTK0zXOz0u # 4xLq9+bRtBEKJvA6sD5nJwH1IO6z1YizyuIRoalMCnbrUixfWxQn4TAmN7t9uk+X # 2FUThEa3ewzRwhtG+xwaAbLMkxRmR24JnfXd1VxKo90+m7Wzuov96Uugx5wZdewi # IIm1ZWTj4lCJHup679LcOa7tAxJMipVaSltQH9fm9TOKczlfxtWuBcLU4duZfqwg # sILsH7PMkcX1zwQzQD0yAtPhnYz9KNG125bX+iilOe1S8RHqv2bbBpMpao4kcUvQ # I6dMgKRvFmm1eLbhSNOQplDMTGD1tNVdNGkI96jUu+troUjWMMi46TQfBAHxtDTp # RhIu/87vAVQ8Z6RHhFxesz4Ed5JThaIQRAy6GcO/Jk+QzDzoZ0arRIkIsGJ7rZgO # VAjx9ctfw8lH9RfjcwB3wdGBYNMNVJqQpUai2Taddf5pXzTZEHIqLEF53SrBjIeI # noQrP7U5VlXiMQsxewLdINrAE2l2TR3KBikb+RQRygbTp8jj2yiC0NCUwG+K+ndg # lN5RMbXjFW6aKa59Xq+b8XzK/DK+AJtgOpHgJv8Qrk62A+twOVLOpjGCA9QwggPQ # AgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n # IENBIDIwMjACEzMAAABbSrWNQTJt3HQAAAAAAFswDQYJYIZIAWUDBAIBBQCgggEt # MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgco1W # yv4Jo4wDsn5AQhZ+4GFfmcFEtcJi6YrfznDkwVIwgd0GCyqGSIb3DQEJEAIvMYHN # MIHKMIHHMIGgBCAvMQNVXZ0b0xxlGw8X/3IEybObuT6a5W1d61CW+cGD7zB8MGWk # YzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg # MjAyMAITMwAAAFtKtY1BMm3cdAAAAAAAWzAiBCC1H6cEFOoHDdV9BDcMeZa3drci # 4s44xGkRNyRFVu/mnzANBgkqhkiG9w0BAQsFAASCAgBnEZJO/8jPVWxHADhL/IgF # rsDjSv2X4p6uUiNCWnN09PP27qHtj9OEztdYYvqldKJ4B1sk6P7f6uZdO4Yk3/WH # pY4cRf25DRu3Nik1xNJeCJsMp1btwg/g/h01+rubE0pGZKfkkN95VMy29dAfCtEb # +oifLzVgIeQxv54NrtkoD8gZnXe1tYd3vSfhuolL408RdgcqmvvQmU0IXytrRgPi # wkyjcUQ7WU+4MiWA53DX/XFFKv4Sb+gTb7GDaA4MICgRoOcD+ZDDf9tz0gG2SYYY # p9AWDlLDkcUIaB8KsvMH8ZvmgGDZm/Yb7tlmvIuTeq+yV17Lf0i6prC91zH4q0jZ # lH5OAtsRDo1ZIuar0xjvCvsjGSK/gjDGv1Q2SOCiZK3U9CQlM2ua0kjIVGJA2plV # fwUhXPOT37TQARVCil1Cv9cEnp0VTHmNV0c10v8ifBkBZPdoMm43g9/3PZl0JwfS # c5kFNRE2wpMomS1jIeiQ3MiIgMRsDozG7NeUy4IZZELzyolqIUwe2EdXzKdtKu5u # BxbFK+PlrUjYSPHNv7iwqtvQ1mPFX89lEaJlba07IudzKRUzHuTgVMzVslE1TIPA # O7VC28t80ku+bX4HWbnjJKiqrHsK41kl0v3iwfMwmeAbD0tPzSL7k0fuxgXajDHN # zPqBieqW9qmOJJ8gS9y7zQ== # SIG # End signature block |