public/New-AppVentiXPublishingTask.ps1
|
<#
.SYNOPSIS Creates a new AppVentiX publishing task. .DESCRIPTION The New-AppVentiXPublishingTask function creates a new publishing task for AppVentiX. It allows you to specify various parameters such as the type of package, machine group, priority, name, version, group, path, and more. The function also checks if the package exists and if AppVentiX is licensed before creating the publishing task. .PARAMETER MachineGroupFriendlyName Specifies the friendly name of the machine group. .PARAMETER Priority Specifies the priority of the publishing task. Default value is 100. .PARAMETER Group Specifies the group of the publishing task. Example: 'contoso.com\group1' .PARAMETER Path Specifies the path to the package file. .PARAMETER AlwaysPublish Indicates whether the package should always be published. .PARAMETER WhenNotExist Specifies the action to take when the package does not exist. Valid values are 'Add' and 'Skip'. .PARAMETER DynamicUserConfigurationPath Specifies the path to the dynamic user configuration file. .PARAMETER ReturnPublishCommand Indicates whether to return the publish command. .PARAMETER AutoLaunch Indicates whether to auto-launch the package. .PARAMETER ConfigShare Specifies the path to the AppVentiX configuration share. You can omit this parameter if Set-AppVentiXConfigShare has been called. .EXAMPLE New-AppVentiXPublishingTask -MachineGroupFriendlyName 'Group1' -Priority 50 -Group 'Group1' -Path '\\fileserver.domain.local\share\content\Package_v\Package_1.0.0.0_x64\package.msix' Creates a new publishing task with the specified parameters, returns the ID of the new task. .EXAMPLE New-AppVentiXPublishingTask -MachineGroupFriendlyName 'Group1' -Priority 100 -Group 'Group1' -Path '\\fileserver.domain.local\share\content\Package_v\Package_1.0.0.0_x64\package.appattach' Creates a new publishing task with the specified parameters, returns the ID of the new task. .EXAMPLE $params = @{ MachineGroupFriendlyName = 'Group1' Priority = 50 Group = 'Group1' Path = '\\fileserver.domain.local\share\content\Package_v\Package_1.0.0.0_x64\package.msix' } $newTask = New-AppVentiXPublishingTask @params Creates a new publishing task with the specified parameters, returns the ID of the new task. We can use the output to publish the task. .NOTES Function : New-AppVentiXPublishingTask Author : John Billekens Copyright: (c) John Billekens Consultancy & AppVentiX Version : 2026.130.1000 Requires : Valid AppVentiX license #> function New-AppVentiXPublishingTask { [CmdletBinding(DefaultParameterSetName = 'AutoLaunch', SupportsShouldProcess, ConfirmImpact = 'Low')] param( [Parameter(DontShow, ParameterSetName = 'PublishSeamless')] [Parameter(DontShow, ParameterSetName = 'AutoLaunch')] [ValidateSet('MSIX', 'APPV', 'Sharedcontainer')] [String]$Type, [Parameter(ParameterSetName = 'PublishSeamless')] [Parameter(ParameterSetName = 'AutoLaunch')] [String[]]$MachineGroupFriendlyName = @('All Machine Groups'), [Parameter(ParameterSetName = 'PublishSeamless')] [Parameter(ParameterSetName = 'AutoLaunch')] [int]$Priority = 100, [Parameter(ParameterSetName = 'PublishSeamless', Mandatory)] [Parameter(ParameterSetName = 'AutoLaunch', Mandatory)] [ValidateScript({ $invalidGroups = $_ | Where-Object { $_ -notmatch '^.*\.*$' } if ($invalidGroups) { throw "The following group names are invalid: $($invalidGroups -join ', ')" } return $true })] [String[]]$Group, [Parameter(ParameterSetName = 'PublishSeamless', Mandatory)] [Parameter(ParameterSetName = 'AutoLaunch', Mandatory)] [System.IO.FileInfo]$Path, [Parameter(ParameterSetName = 'PublishSeamless')] [Parameter(ParameterSetName = 'AutoLaunch')] [Switch]$AlwaysPublish, [Parameter(ParameterSetName = 'PublishSeamless')] [Parameter(ParameterSetName = 'AutoLaunch')] [ValidateSet('Add', 'Skip')] [String]$WhenNotExist = "Add", [Parameter(ParameterSetName = 'AutoLaunch')] [Switch]$AutoLaunch, [Parameter(ParameterSetName = 'PublishSeamless')] [Parameter(ParameterSetName = 'AutoLaunch')] [String]$DynamicUserConfigurationPath, [Parameter(ParameterSetName = 'PublishSeamless')] [Switch]$ReturnPublishCommand, [Parameter(DontShow, ParameterSetName = 'PublishSeamless')] [Parameter(DontShow, ParameterSetName = 'AutoLaunch')] [ValidateNotNullOrEmpty()] [String]$ConfigShare = $Script:AppVentix.ConfigShare ) if (Test-AppVentiXIsLicensed -ConfigShare $ConfigShare) { if (-not ($Path.Exists)) { throw [System.Management.Automation.ItemNotFoundException] "Package not found: `"$Path`"" } else { Write-Verbose "Package found: `"$($Path.Name)`" at specified location." #$PackagePaths = Get-ContentShareForPackage -Path $Path -ConfigShare $ConfigShare #foreach ($MG in $MachineGroupFriendlyName) { # if (Test-IsPackageInMachineGroupContentShare -Path $Path -MachineGroupFriendlyName $MG -ConfigShare $ConfigShare) { # [System.IO.FileInfo]$Path = Format-ContentSharePath -Path $Path.FullName -ConfigShare $ConfigShare # } else { # throw "Package `"$($Path.Name)`" is not found in the content share defined for Machine Group `"$MG`"!" # } #} } if ($Type) { Write-Warning "`"-Type`" was specified, but this is not needed anymore. The type is determined from the file extension." } $NewADGroup = @() foreach ($ADGroup in $Group) { if ($ADGroup -notmatch '^([\w-]+\.){1,}[\w-]+\\.+$') { Write-Warning "The parameter -Group should contain the fully qualified domain name and the groupname, e.g. `"DOMAIN.LOCAL\GROUP`"" Write-Warning "Falling back on default (user dns) value: `"$($env:USERDNSDOMAIN)\$ADGroup`"" try { if ($ADGroup -like "*\*") { $null, $ADGroup = "$ADGroup".split('\') } $ADGroup = "$($env:USERDNSDOMAIN)\$ADGroup" Write-Verbose "Group value modified to: `"$ADGroup`"" } catch { $ADGroup = "$($env:USERDNSDOMAIN)\$ADGroup" Write-Verbose "Group value modified to: `"$ADGroup`", but an error occurred: $($_.Exception.Message)" } if ($ADGroup -notmatch '^([\w-]+\.){1,}[\w-]+\\.+$') { throw "Cannot determine fully qualified domain name for group `"$ADGroup`"! Please specify the fully qualified domain name and the groupname, e.g. `"DOMAIN.LOCAL\GROUP`"" } } else { Write-Verbose "Group value is valid: `"$ADGroup`"" } $NewADGroup += $ADGroup Write-Verbose "Continuing with Group value: `"$ADGroup`"" } $isAppAttach = $false $isConnectionGroup = $false if ($Path -like "*.appattach") { $isAppAttach = $true $Type = 'MSIX' Write-Verbose "The publishing task is an AppAttach task." } elseif ($Path -like "*.msix") { $Type = 'MSIX' Write-Verbose "The publishing task is an MSIX task." } elseif ($Path -like "*.appv") { $Type = 'APPV' Write-Verbose "The publishing task is an APPV task." } elseif ($Path -like "*.appg") { $Type = 'APPV' Write-Verbose "The publishing task is an APPV Connection Group task." $isConnectionGroup = $true } elseif ($Path -like "*.msixbundle") { $Type = 'Sharedcontainer' Write-Verbose "The publishing task is a Sharedcontainer task." } else { throw "The file type of `"$Path`" is not supported! Must be .appv, .appg, .msix, .msixbundle or .appattach" } if ($Type -ieq 'APPV' -and $isAppAttach) { throw "The type 'APPV' is not valid for an AppAttach file! AppAttach files are always of type 'MSIX'" } $publishingTasksFullname = Join-Path -Path $ConfigShare -ChildPath $Script:AppVentiX.PublishingTasksFilename Write-Verbose "Reading data from $($publishingTasksFullname)" $publishingTasksXml = New-Object -TypeName System.Xml.XmlDocument try { $publishingTasksXml.Load($publishingTasksFullname) } catch { Write-Verbose "Could not load the Publishing Tasks file, $($_.Exception.Message)" if (Test-Path -Path $publishingTasksFullname) { Write-Warning "The Publishing Tasks file exists but is not accessible!" throw "The Publishing Tasks file exists but is not accessible!" } else { Write-Warning "The Publishing Tasks file does not yet exists, creating a new file!" } } $publishingTasksXml = Format-AppVentiXPublishingTasksXml -XmlDocument $publishingTasksXml Write-Verbose "Checking the machine group `"$MachineGroupFriendlyName`"" if (([String]::IsNullOrEmpty($MachineGroupFriendlyName)) -or $MachineGroupFriendlyName.Count -eq 0 -or ($MachineGroupFriendlyName -contains 'All Machine Groups')) { $MachineGroupFriendlyName = @('All Machine Groups') $machineGroup = 'All' } else { try { $machineGroupData = @() foreach ($mg in $MachineGroupFriendlyName) { $machineGroupResult = Get-AppVentiXMachineGroup -Name $mg -ConfigShare $ConfigShare if ($null -eq $machineGroupResult.FriendlyName -or $machineGroupResult.FriendlyName -notlike $mg) { throw "Machine group `"$mg`" not found!" } else { $machineGroupData += $machineGroupResult } } } catch { Write-Error $_ throw "Error retrieving machine group(s) `"$($MachineGroupFriendlyName -join ', ')`": $($_.Exception.Message)" } $MachineGroupFriendlyName = @($machineGroupData | Select-Object -ExpandProperty FriendlyName) $machineGroup = @($machineGroupData | Select-Object -ExpandProperty GroupName) } $Action = 'Publish' $Id = [GUID]::NewGuid() Write-Verbose "Generated a new ID for the task: $Id" if ($ReturnPublishCommand) { $output = [PSCustomObject]@{ Id = $Id AppsToPublish = @() } } else { $output = [PSCustomObject]@{ Id = $Id } } $packageDetails = Get-ManifestDetail -Filename $Path $DynamicUserConfigurationPath = $null if ($packageDetails.Type -like 'APPV') { Write-Verbose "Package type is APPV" $name = $packageDetails.DisplayName if ($isConnectionGroup -eq $false -and [String]::IsNullOrEmpty($DynamicUserConfigurationPath)) { $DynamicUserConfigurationPath = 'None' } } else { Write-Verbose "Package type is MSIX" $Name = $packageDetails.Name if (-not [String]::IsNullOrEmpty($DynamicUserConfigurationPath)) { Write-Warning "The parameter -DynamicUserConfigurationPath is not used for MSIX files, ignoring the parameter" } } $Version = $packageDetails.Version $PackageFullName = $packageDetails.PackageFullName Write-Verbose "Creating a new task element in the XML file" if ($isConnectionGroup -eq $false) { $ptUserPackagesElement = $publishingTasksXml.SelectSingleNode("//UserPublishingTasks/Packages") } else { $ptUserPackagesElement = $publishingTasksXml.SelectSingleNode("//UserPublishingTasks/Connectiongroups") } $ptTaskElement = $ptUserPackagesElement.AppendChild($publishingTasksXml.CreateElement("Task")) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Type"))).AppendChild($publishingTasksXml.CreateTextNode($Type)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Priority"))).AppendChild($publishingTasksXml.CreateTextNode($Priority)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Id"))).AppendChild($publishingTasksXml.CreateTextNode($Id)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Action"))).AppendChild($publishingTasksXml.CreateTextNode($Action)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Name"))).AppendChild($publishingTasksXml.CreateTextNode($Name)) if ($isConnectionGroup -eq $false) { $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Version"))).AppendChild($publishingTasksXml.CreateTextNode($Version)) } $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Path"))).AppendChild($publishingTasksXml.CreateTextNode($Path.FullName)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("AlwaysPublish"))).AppendChild($publishingTasksXml.CreateTextNode($AlwaysPublish.ToString())) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Whennotexist"))).AppendChild($publishingTasksXml.CreateTextNode($WhenNotExist)) if ($packageDetails.Type -like 'APPV') { Write-Verbose "Adding APPV specific elements" if ($isConnectionGroup -eq $false) { $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PackageId"))).AppendChild($publishingTasksXml.CreateTextNode($packageDetails.PackageId.ToString())) } else { $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("GroupId"))).AppendChild($publishingTasksXml.CreateTextNode($packageDetails.GroupId.ToString())) } $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("VersionId"))).AppendChild($publishingTasksXml.CreateTextNode($packageDetails.VersionId.ToString())) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("DynamicUserConfigurationPath"))).AppendChild($publishingTasksXml.CreateTextNode($DynamicUserConfigurationPath)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("GlobalPublishForUser"))).AppendChild($publishingTasksXml.CreateTextNode('False')) } elseif ($packageDetails.Type -like 'MSIX' -and $isAppAttach -eq $false) { Write-Verbose "Adding MSIX specific elements" #$null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("UseAppAttach"))).AppendChild($publishingTasksXml.CreateTextNode('False')) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PackageFullName"))).AppendChild($publishingTasksXml.CreateTextNode($PackageFullName)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("ForceApplicationShutdownWhenUpgrade"))).AppendChild($publishingTasksXml.CreateTextNode('False')) } elseif ($packageDetails.Type -like 'MSIX' -and $isAppAttach -eq $true) { Write-Verbose "Adding MSIX specific elements for AppAttach" $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("UseAppAttach"))).AppendChild($publishingTasksXml.CreateTextNode('True')) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PackageFullName"))).AppendChild($publishingTasksXml.CreateTextNode($PackageFullName)) $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("ForceApplicationShutdownWhenUpgrade"))).AppendChild($publishingTasksXml.CreateTextNode('False')) } if ($ReturnPublishCommand.ToBool() -eq $true) { Write-Verbose "Adding PublishSeamless element, set to True" $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PublishSeamless"))).AppendChild($publishingTasksXml.CreateTextNode('True')) Write-Verbose "Adding EnableAutoLaunch element, set to False" $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("EnableAutoLaunch"))).AppendChild($publishingTasksXml.CreateTextNode('False')) Write-Verbose "Adding Seamless elements" $ptSeamlessElement = $ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Seamless")) $seamlessAppCounter = 0 foreach ($app in $packageDetails.Applications) { Write-Verbose "Adding SeamlessApplication element for `"$($app.FriendlyName)`" / `"$($app.Description)`"" $output.AppsToPublish += $([PSCustomObject]@{ Order = $seamlessAppCounter Name = $app.FriendlyName Description = $app.Description Executable = "C:\Program Files\AppVentiX\AppVentiX Agent\AppVentiX Wrapper.exe" Argument = '{0}#{1}' -f $Id, $seamlessAppCounter IconPath = "$($app.IconWindowsPath)" FriendlyName = $app.FriendlyName } ) Write-Verbose "Adding SeamlessApplication element" $ptSeamlessApplicationElement = $ptSeamlessElement.AppendChild($publishingTasksXml.CreateElement("SeamlessApplication")) Write-Verbose "Settting ApplicationNumber to `"$($seamlessAppCounter)`"" $null = $($ptSeamlessApplicationElement.AppendChild($publishingTasksXml.CreateElement("SeamlessApplicationNumber"))).AppendChild($publishingTasksXml.CreateTextNode($seamlessAppCounter.ToString())) Write-Verbose "Settting ApplicationExecutable to `"$($app.Executable)`"" $null = $($ptSeamlessApplicationElement.AppendChild($publishingTasksXml.CreateElement("SeamlessApplicationExecutable"))).AppendChild($publishingTasksXml.CreateTextNode($app.AppVentiXExecutable)) $seamlessApplicationArgument = '' Write-Verbose "Settting ApplicationArgument to `"$($seamlessApplicationArgument)`"" $null = $($ptSeamlessApplicationElement.AppendChild($publishingTasksXml.CreateElement("SeamlessApplicationArgument"))).AppendChild($publishingTasksXml.CreateTextNode($seamlessApplicationArgument)) if ($Type -ieq 'APPV') { Write-Verbose "Package type is APPV, setting IconPath to empty string" $seamlessApplicationIconPath = '' } elseif ($Type -ieq 'MSIX') { Write-Verbose "Package type is MSIX, setting IconPath to the values from the manifest" $seamlessApplicationIconPath = $app.IconWindowsPath } else { Write-Warning "Package type is not APPV or MSIX, setting IconPath to empty string" $seamlessApplicationIconPath = '' } $seamlessApplicationFriendlyName = '' Write-Verbose "Settting ApplicationFriendlyName to `"$($seamlessApplicationFriendlyName)`"" $null = $($ptSeamlessApplicationElement.AppendChild($publishingTasksXml.CreateElement("SeamlessApplicationFriendlyName"))).AppendChild($publishingTasksXml.CreateTextNode($seamlessApplicationFriendlyName)) Write-Verbose "Settting ApplicationIconPath to `"$($seamlessApplicationIconPath)`"" $null = $($ptSeamlessApplicationElement.AppendChild($publishingTasksXml.CreateElement("SeamlessApplicationIconPath"))).AppendChild($publishingTasksXml.CreateTextNode($seamlessApplicationIconPath)) Write-Verbose "Settting ApplicationRunVirtual to `"$($app.RunVirtual)`"" $null = $($ptSeamlessApplicationElement.AppendChild($publishingTasksXml.CreateElement("SeamlessApplicationRunVirtual"))).AppendChild($publishingTasksXml.CreateTextNode($false)) $seamlessAppCounter++ } } elseif ($AutoLaunch.ToBool() -eq $true) { Write-Verbose "Adding PublishSeamless element, set to False" $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PublishSeamless"))).AppendChild($publishingTasksXml.CreateTextNode('False')) Write-Verbose "Adding EnableAutoLaunch element, set to True" $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("EnableAutoLaunch"))).AppendChild($publishingTasksXml.CreateTextNode('True')) Write-Verbose "Adding AutoLaunch elements" $ptAutoLaunchElement = $ptTaskElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunch")) $autoLaunchAppCounter = 0 #$publishedApps = @() foreach ($app in $packageDetails.Applications) { Write-Verbose "Adding AutoLaunchApplication element for `"$($app.FriendlyName)`" / `"$($app.Description)`"" $ptAutoLaunchApplicationElement = $ptAutoLaunchElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplication")) $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationNumber"))).AppendChild($publishingTasksXml.CreateTextNode($autoLaunchAppCounter.ToString())) $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationExecutable"))).AppendChild($publishingTasksXml.CreateTextNode($app.AppVentiXExecutable)) $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationArgument"))).AppendChild($publishingTasksXml.CreateTextNode("")) $null = $($ptAutoLaunchApplicationElement.AppendChild($publishingTasksXml.CreateElement("AutoLaunchApplicationRunVirtual"))).AppendChild($publishingTasksXml.CreateTextNode("False")) } } else { Write-Verbose "Adding PublishSeamless element, set to False" $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("PublishSeamless"))).AppendChild($publishingTasksXml.CreateTextNode('False')) Write-Verbose "Adding EnableAutoLaunch element, set to False" $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("EnableAutoLaunch"))).AppendChild($publishingTasksXml.CreateTextNode('False')) Write-Verbose "No Seamless elements added" } foreach ($mg in $machineGroup) { $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("MachineGroup"))).AppendChild($publishingTasksXml.CreateTextNode($mg)) } foreach ($mg in $MachineGroupFriendlyName) { $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("MachineGroupFriendlyname"))).AppendChild($publishingTasksXml.CreateTextNode($mg)) } foreach ($ADGroup in $NewADGroup) { $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("Group"))).AppendChild($publishingTasksXml.CreateTextNode($ADGroup)) try { $groupSID = '' Write-Verbose "Retrieving the SID for group `"$ADGroup`"" $groupSID = Get-GroupSID -GroupName $ADGroup -ErrorAction Stop if ([String]::IsNullOrEmpty($groupSID)) { Write-Warning "Could not retrieve the SID for group `"$ADGroup`"." $groupSID = "" } else { Write-Verbose "The SID for group `"$ADGroup`" is `"$groupSID`"" } } catch { Write-Verbose "Could not retrieve the SID for group `"$ADGroup`", $($_.Exception.Message)" $groupSID = "" } $null = $($ptTaskElement.AppendChild($publishingTasksXml.CreateElement("ADGroupSID"))).AppendChild($publishingTasksXml.CreateTextNode($groupSID)) } if ($PSCmdlet.ShouldProcess("$($Script:AppVentiX.PublishingTasksFilename)")) { try { $publishingTasksXml.Save($publishingTasksFullname) } catch { Write-Warning "Could not save the file `"$($publishingTasksFullname)`"! No changes made." } } Write-Verbose "Publishing task created with ID `"$Id`", returning the output" Write-AppVentiXLogEntry -Feature Application -Action $($MyInvocation.MyCommand.Name) -Details "Add Publishing Task, Package name: `"$Name`", Path: `"$($Path.FullName)`"" -ConfigShare $ConfigShare return $output } else { Write-Warning 'AppVentiX is not licensed!' } } # SIG # Begin signature block # MIImdwYJKoZIhvcNAQcCoIImaDCCJmQCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDsOZ/umvhphjNc # ZJHsGPN6ttkhH+fJjjYcqZkZkxd8uqCCIAowggYUMIID/KADAgECAhB6I67aU2mW # D5HIPlz0x+M/MA0GCSqGSIb3DQEBDAUAMFcxCzAJBgNVBAYTAkdCMRgwFgYDVQQK # Ew9TZWN0aWdvIExpbWl0ZWQxLjAsBgNVBAMTJVNlY3RpZ28gUHVibGljIFRpbWUg # U3RhbXBpbmcgUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5 # WjBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSwwKgYD # VQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNjCCAaIwDQYJ # KoZIhvcNAQEBBQADggGPADCCAYoCggGBAM2Y2ENBq26CK+z2M34mNOSJjNPvIhKA # VD7vJq+MDoGD46IiM+b83+3ecLvBhStSVjeYXIjfa3ajoW3cS3ElcJzkyZlBnwDE # JuHlzpbN4kMH2qRBVrjrGJgSlzzUqcGQBaCxpectRGhhnOSwcjPMI3G0hedv2eNm # GiUbD12OeORN0ADzdpsQ4dDi6M4YhoGE9cbY11XxM2AVZn0GiOUC9+XE0wI7CQKf # OUfigLDn7i/WeyxZ43XLj5GVo7LDBExSLnh+va8WxTlA+uBvq1KO8RSHUQLgzb1g # bL9Ihgzxmkdp2ZWNuLc+XyEmJNbD2OIIq/fWlwBp6KNL19zpHsODLIsgZ+WZ1AzC # s1HEK6VWrxmnKyJJg2Lv23DlEdZlQSGdF+z+Gyn9/CRezKe7WNyxRf4e4bwUtrYE # 2F5Q+05yDD68clwnweckKtxRaF0VzN/w76kOLIaFVhf5sMM/caEZLtOYqYadtn03 # 4ykSFaZuIBU9uCSrKRKTPJhWvXk4CllgrwIDAQABo4IBXDCCAVgwHwYDVR0jBBgw # FoAU9ndq3T/9ARP/FqFsggIv0Ao9FCUwHQYDVR0OBBYEFF9Y7UwxeqJhQo1SgLqz # YZcZojKbMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1Ud # JQQMMAoGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBMBgNVHR8ERTBDMEGg # P6A9hjtodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNUaW1lU3Rh # bXBpbmdSb290UjQ2LmNybDB8BggrBgEFBQcBAQRwMG4wRwYIKwYBBQUHMAKGO2h0 # dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY1RpbWVTdGFtcGluZ1Jv # b3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAN # BgkqhkiG9w0BAQwFAAOCAgEAEtd7IK0ONVgMnoEdJVj9TC1ndK/HYiYh9lVUacah # RoZ2W2hfiEOyQExnHk1jkvpIJzAMxmEc6ZvIyHI5UkPCbXKspioYMdbOnBWQUn73 # 3qMooBfIghpR/klUqNxx6/fDXqY0hSU1OSkkSivt51UlmJElUICZYBodzD3M/SFj # eCP59anwxs6hwj1mfvzG+b1coYGnqsSz2wSKr+nDO+Db8qNcTbJZRAiSazr7KyUJ # Go1c+MScGfG5QHV+bps8BX5Oyv9Ct36Y4Il6ajTqV2ifikkVtB3RNBUgwu/mSiSU # ice/Jp/q8BMk/gN8+0rNIE+QqU63JoVMCMPY2752LmESsRVVoypJVt8/N3qQ1c6F # ibbcRabo3azZkcIdWGVSAdoLgAIxEKBeNh9AQO1gQrnh1TA8ldXuJzPSuALOz1Uj # b0PCyNVkWk7hkhVHfcvBfI8NtgWQupiaAeNHe0pWSGH2opXZYKYG4Lbukg7HpNi/ # KqJhue2Keak6qH9A8CeEOB7Eob0Zf+fU+CCQaL0cJqlmnx9HCDxF+3BLbUufrV64 # EbTI40zqegPZdA+sXCmbcZy6okx/SjwsusWRItFA3DE8MORZeFb6BmzBtqKJ7l93 # 9bbKBy2jvxcJI98Va95Q5JnlKor3m0E7xpMeYRriWklUPsetMSf2NvUQa/E5vVye # fQIwggZFMIIELaADAgECAhAIMk+dt9qRb2Pk8qM8Xl1RMA0GCSqGSIb3DQEBCwUA # MFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMu # QS4xJDAiBgNVBAMTG0NlcnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBDQTAeFw0yNDA0 # MDQxNDA0MjRaFw0yNzA0MDQxNDA0MjNaMGsxCzAJBgNVBAYTAk5MMRIwEAYDVQQH # DAlTY2hpam5kZWwxIzAhBgNVBAoMGkpvaG4gQmlsbGVrZW5zIENvbnN1bHRhbmN5 # MSMwIQYDVQQDDBpKb2huIEJpbGxla2VucyBDb25zdWx0YW5jeTCCAaIwDQYJKoZI # hvcNAQEBBQADggGPADCCAYoCggGBAMslntDbSQwHZXwFhmibivbnd0Qfn6sqe/6f # os3pKzKxEsR907RkDMet2x6RRg3eJkiIr3TFPwqBooyXXgK3zxxpyhGOcuIqyM9J # 28DVf4kUyZHsjGO/8HFjrr3K1hABNUszP0o7H3o6J31eqV1UmCXYhQlNoW9FOmRC # 1amlquBmh7w4EKYEytqdmdOBavAD5Xq4vLPxNP6kyA+B2YTtk/xM27TghtbwFGKn # u9Vwnm7dFcpLxans4ONt2OxDQOMA5NwgcUv/YTpjhq9qoz6ivG55NRJGNvUXsM3w # 2o7dR6Xh4MuEGrTSrOWGg2A5EcLH1XqQtkF5cZnAPM8W/9HUp8ggornWnFVQ9/6M # ga+ermy5wy5XrmQpN+x3u6tit7xlHk1Hc+4XY4a4ie3BPXG2PhJhmZAn4ebNSBwN # Hh8z7WTT9X9OFERepGSytZVeEP7hgyptSLcuhpwWeR4QdBb7dV++4p3PsAUQVHFp # wkSbrRTv4EiJ0Lcz9P1HPGFoHiFAQQIDAQABo4IBeDCCAXQwDAYDVR0TAQH/BAIw # ADA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY2NzY2EyMDIxLmNybC5jZXJ0dW0u # cGwvY2NzY2EyMDIxLmNybDBzBggrBgEFBQcBAQRnMGUwLAYIKwYBBQUHMAGGIGh0 # dHA6Ly9jY3NjYTIwMjEub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRw # Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY2NzY2EyMDIxLmNlcjAfBgNVHSMEGDAW # gBTddF1MANt7n6B0yrFu9zzAMsBwzTAdBgNVHQ4EFgQUO6KtBpOBgmrlANVAnyiQ # C6W6lJwwSwYDVR0gBEQwQjAIBgZngQwBBAEwNgYLKoRoAYb2dwIFAQQwJzAlBggr # BgEFBQcCARYZaHR0cHM6Ly93d3cuY2VydHVtLnBsL0NQUzATBgNVHSUEDDAKBggr # BgEFBQcDAzAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAEQsN8wg # PMdWVkwHPPTN+jKpdns5AKVFjcn00psf2NGVVgWWNQBIQc9lEuTBWb54IK6Ga3hx # QRZfnPNo5HGl73YLmFgdFQrFzZ1lnaMdIcyh8LTWv6+XNWfoyCM9wCp4zMIDPOs8 # LKSMQqA/wRgqiACWnOS4a6fyd5GUIAm4CuaptpFYr90l4Dn/wAdXOdY32UhgzmSu # xpUbhD8gVJUaBNVmQaRqeU8y49MxiVrUKJXde1BCrtR9awXbqembc7Nqvmi60tYK # lD27hlpKtj6eGPjkht0hHEsgzU0Fxw7ZJghYG2wXfpF2ziN893ak9Mi/1dmCNmor # GOnybKYfT6ff6YTCDDNkod4egcMZdOSv+/Qv+HAeIgEvrxE9QsGlzTwbRtbm6gwY # YcVBs/SsVUdBn/TSB35MMxRhHE5iC3aUTkDbceo/XP3uFhVL4g2JZHpFfCSu2TQr # rzRn2sn07jfMvzeHArCOJgBW1gPqR3WrJ4hUxL06Rbg1gs9tU5HGGz9KNQMfQFQ7 # 0Wz7UIhezGcFcRfkIfSkMmQYYpsc7rfzj+z0ThfDVzzJr2dMOFsMlfj1T6l22GBq # 9XQx0A4lcc5Fl9pRxbOuHHWFqIBD/BCEhwniOCySzqENd2N+oz8znKooSISStnkN # aYXt6xblJF2dx9Dn89FK7d1IquNxOwt0tI5dMIIGYjCCBMqgAwIBAgIRAKQpO24e # 3denNAiHrXpOtyQwDQYJKoZIhvcNAQEMBQAwVTELMAkGA1UEBhMCR0IxGDAWBgNV # BAoTD1NlY3RpZ28gTGltaXRlZDEsMCoGA1UEAxMjU2VjdGlnbyBQdWJsaWMgVGlt # ZSBTdGFtcGluZyBDQSBSMzYwHhcNMjUwMzI3MDAwMDAwWhcNMzYwMzIxMjM1OTU5 # WjByMQswCQYDVQQGEwJHQjEXMBUGA1UECBMOV2VzdCBZb3Jrc2hpcmUxGDAWBgNV # BAoTD1NlY3RpZ28gTGltaXRlZDEwMC4GA1UEAxMnU2VjdGlnbyBQdWJsaWMgVGlt # ZSBTdGFtcGluZyBTaWduZXIgUjM2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEA04SV9G6kU3jyPRBLeBIHPNyUgVNnYayfsGOyYEXrn3+SkDYTLs1crcw/ # ol2swE1TzB2aR/5JIjKNf75QBha2Ddj+4NEPKDxHEd4dEn7RTWMcTIfm492TW22I # 8LfH+A7Ehz0/safc6BbsNBzjHTt7FngNfhfJoYOrkugSaT8F0IzUh6VUwoHdYDpi # ln9dh0n0m545d5A5tJD92iFAIbKHQWGbCQNYplqpAFasHBn77OqW37P9BhOASdmj # p3IijYiFdcA0WQIe60vzvrk0HG+iVcwVZjz+t5OcXGTcxqOAzk1frDNZ1aw8nFhG # EvG0ktJQknnJZE3D40GofV7O8WzgaAnZmoUn4PCpvH36vD4XaAF2CjiPsJWiY/j2 # xLsJuqx3JtuI4akH0MmGzlBUylhXvdNVXcjAuIEcEQKtOBR9lU4wXQpISrbOT8ux # +96GzBq8TdbhoFcmYaOBZKlwPP7pOp5Mzx/UMhyBA93PQhiCdPfIVOCINsUY4U23 # p4KJ3F1HqP3H6Slw3lHACnLilGETXRg5X/Fp8G8qlG5Y+M49ZEGUp2bneRLZoyHT # yynHvFISpefhBCV0KdRZHPcuSL5OAGWnBjAlRtHvsMBrI3AAA0Tu1oGvPa/4yeei # Ayu+9y3SLC98gDVbySnXnkujjhIh+oaatsk/oyf5R2vcxHahajMCAwEAAaOCAY4w # ggGKMB8GA1UdIwQYMBaAFF9Y7UwxeqJhQo1SgLqzYZcZojKbMB0GA1UdDgQWBBSI # YYyhKjdkgShgoZsx0Iz9LALOTzAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIw # ADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBKBgNVHSAEQzBBMDUGDCsGAQQBsjEB # AgEDCDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZn # gQwBBAIwSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2NybC5zZWN0aWdvLmNvbS9T # ZWN0aWdvUHVibGljVGltZVN0YW1waW5nQ0FSMzYuY3JsMHoGCCsGAQUFBwEBBG4w # bDBFBggrBgEFBQcwAoY5aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVi # bGljVGltZVN0YW1waW5nQ0FSMzYuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz # cC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAYEAAoE+pIZyUSH5ZakuPVKK # 4eWbzEsTRJOEjbIu6r7vmzXXLpJx4FyGmcqnFZoa1dzx3JrUCrdG5b//LfAxOGy9 # Ph9JtrYChJaVHrusDh9NgYwiGDOhyyJ2zRy3+kdqhwtUlLCdNjFjakTSE+hkC9F5 # ty1uxOoQ2ZkfI5WM4WXA3ZHcNHB4V42zi7Jk3ktEnkSdViVxM6rduXW0jmmiu71Z # pBFZDh7Kdens+PQXPgMqvzodgQJEkxaION5XRCoBxAwWwiMm2thPDuZTzWp/gUFz # i7izCmEt4pE3Kf0MOt3ccgwn4Kl2FIcQaV55nkjv1gODcHcD9+ZVjYZoyKTVWb4V # qMQy/j8Q3aaYd/jOQ66Fhk3NWbg2tYl5jhQCuIsE55Vg4N0DUbEWvXJxtxQQaVR5 # xzhEI+BjJKzh3TQ026JxHhr2fuJ0mV68AluFr9qshgwS5SpN5FFtaSEnAwqZv3IS # +mlG50rK7W3qXbWwi4hmpylUfygtYLEdLQukNEX1jiOKMIIGgjCCBGqgAwIBAgIQ # NsKwvXwbOuejs902y8l1aDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMCVVMx # EzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYD # VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBS # U0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjEwMzIyMDAwMDAwWhcNMzgw # MTE4MjM1OTU5WjBXMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p # dGVkMS4wLAYDVQQDEyVTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIFJvb3Qg # UjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAiJ3YuUVnnR3d6Lkm # gZpUVMB8SQWbzFoVD9mUEES0QUCBdxSZqdTkdizICFNeINCSJS+lV1ipnW5ihkQy # C0cRLWXUJzodqpnMRs46npiJPHrfLBOifjfhpdXJ2aHHsPHggGsCi7uE0awqKggE # /LkYw3sqaBia67h/3awoqNvGqiFRJ+OTWYmUCO2GAXsePHi+/JUNAax3kpqstbl3 # vcTdOGhtKShvZIvjwulRH87rbukNyHGWX5tNK/WABKf+Gnoi4cmisS7oSimgHUI0 # Wn/4elNd40BFdSZ1EwpuddZ+Wr7+Dfo0lcHflm/FDDrOJ3rWqauUP8hsokDoI7D/ # yUVI9DAE/WK3Jl3C4LKwIpn1mNzMyptRwsXKrop06m7NUNHdlTDEMovXAIDGAvYy # nPt5lutv8lZeI5w3MOlCybAZDpK3Dy1MKo+6aEtE9vtiTMzz/o2dYfdP0KWZwZIX # bYsTIlg1YIetCpi5s14qiXOpRsKqFKqav9R1R5vj3NgevsAsvxsAnI8Oa5s2oy25 # qhsoBIGo/zi6GpxFj+mOdh35Xn91y72J4RGOJEoqzEIbW3q0b2iPuWLA911cRxgY # 5SJYubvjay3nSMbBPPFsyl6mY4/WYucmyS9lo3l7jk27MAe145GWxK4O3m3gEFEI # kv7kRmefDR7Oe2T1HxAnICQvr9sCAwEAAaOCARYwggESMB8GA1UdIwQYMBaAFFN5 # v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBT2d2rdP/0BE/8WoWyCAi/QCj0U # JTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUEDDAKBggr # BgEFBQcDCDARBgNVHSAECjAIMAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/aHR0 # cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25B # dXRob3JpdHkuY3JsMDUGCCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDov # L29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEADr5lQe1oRLjl # ocXUEYfktzsljOt+2sgXke3Y8UPEooU5y39rAARaAdAxUeiX1ktLJ3+lgxtoLQhn # 5cFb3GF2SSZRX8ptQ6IvuD3wz/LNHKpQ5nX8hjsDLRhsyeIiJsms9yAWnvdYOdEM # q1W61KE9JlBkB20XBee6JaXx4UBErc+YuoSb1SxVf7nkNtUjPfcxuFtrQdRMRi/f # InV/AobE8Gw/8yBMQKKaHt5eia8ybT8Y/Ffa6HAJyz9gvEOcF1VWXG8OMeM7Vy7B # s6mSIkYeYtddU1ux1dQLbEGur18ut97wgGwDiGinCwKPyFO7ApcmVJOtlw9FVJxw # /mL1TbyBns4zOgkaXFnnfzg4qbSvnrwyj1NiurMp4pmAWjR+Pb/SIduPnmFzbSN/ # G8reZCL4fvGlvPFk4Uab/JVCSmj59+/mB2Gn6G/UYOy8k60mKcmaAZsEVkhOFuoj # 4we8CYyaR9vd9PGZKSinaZIkvVjbH/3nlLb0a7SBIkiRzfPfS9T+JesylbHa1LtR # V9U/7m0q7Ma2CQ/t392ioOssXW7oKLdOmMBl14suVFBmbzrt5V5cQPnwtd3UOTpS # 9oCG+ZZheiIvPgkDmA8FzPsnfXW5qHELB43ET7HHFHeRPRYrMBKjkb8/IN7Po0d0 # hQoF4TeMM+zYAJzoKQnVKOLg8pZVPT8wgga5MIIEoaADAgECAhEAmaOACiZVO2Wr # 3G6EprPqOTANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoT # GVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0 # aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0 # d29yayBDQSAyMB4XDTIxMDUxOTA1MzIxOFoXDTM2MDUxODA1MzIxOFowVjELMAkG # A1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIG # A1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAyMDIxIENBMIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEAnSPPBDAjO8FGLOczcz5jXXp1ur5cTbq96y34vuTm # flN4mSAfgLKTvggv24/rWiVGzGxT9YEASVMw1Aj8ewTS4IndU8s7VS5+djSoMcbv # IKck6+hI1shsylP4JyLvmxwLHtSworV9wmjhNd627h27a8RdrT1PH9ud0IF+njvM # k2xqbNTIPsnWtw3E7DmDoUmDQiYi/ucJ42fcHqBkbbxYDB7SYOouu9Tj1yHIohzu # C8KNqfcYf7Z4/iZgkBJ+UFNDcc6zokZ2uJIxWgPWXMEmhu1gMXgv8aGUsRdaCtVD # 2bSlbfsq7BiqljjaCun+RJgTgFRCtsuAEw0pG9+FA+yQN9n/kZtMLK+Wo837Q4QO # ZgYqVWQ4x6cM7/G0yswg1ElLlJj6NYKLw9EcBXE7TF3HybZtYvj9lDV2nT8mFSkc # SkAExzd4prHwYjUXTeZIlVXqj+eaYqoMTpMrfh5MCAOIG5knN4Q/JHuurfTI5XDY # O962WZayx7ACFf5ydJpoEowSP07YaBiQ8nXpDkNrUA9g7qf/rCkKbWpQ5boufUnq # 1UiYPIAHlezf4muJqxqIns/kqld6JVX8cixbd6PzkDpwZo4SlADaCi2JSplKShBS # ND36E/ENVv8urPS0yOnpG4tIoBGxVCARPCg1BnyMJ4rBJAcOSnAWd18Jx5n858JS # qPECAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFN10XUwA # 23ufoHTKsW73PMAywHDNMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79 # MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDAzAwBgNVHR8EKTAn # MCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUF # BwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv # bTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh # Mi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93 # d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAdYhYD+WPUCiaU58Q # 7EP89DttyZqGYn2XRDhJkL6P+/T0IPZyxfxiXumYlARMgwRzLRUStJl490L94C9L # GF3vjzzH8Jq3iR74BRlkO18J3zIdmCKQa5LyZ48IfICJTZVJeChDUyuQy6rGDxLU # UAsO0eqeLNhLVsgw6/zOfImNlARKn1FP7o0fTbj8ipNGxHBIutiRsWrhWM2f8pXd # d3x2mbJCKKtl2s42g9KUJHEIiLni9ByoqIUul4GblLQigO0ugh7bWRLDm0CdY9rN # LqyA3ahe8WlxVWkxyrQLjH8ItI17RdySaYayX3PhRSC4Am1/7mATwZWwSD+B7eMc # ZNhpn8zJ+6MTyE6YoEBSRVrs0zFFIHUR08Wk0ikSf+lIe5Iv6RY3/bFAEloMU+vU # BfSouCReZwSLo8WdrDlPXtR0gicDnytO7eZ5827NS2x7gCBibESYkOh1/w1tVxTp # V2Na3PR7nxYVlPu1JPoRZCbH86gc96UTvuWiOruWmyOEMLOGGniR+x+zPF/2DaGg # K2W1eEJfo2qyrBNPvF7wuAyQfiFXLwvWHamoYtPZo0LHuH8X3n9C+xN4YaNjt2yw # zOr+tKyEVAotnyU9vyEVOaIYMk3IeBrmFnn0gbKeTTyYeEEUz/Qwt4HOUBCrW602 # NCmvO1nm+/80nLy5r0AZvCQxaQ4xggXDMIIFvwIBATBqMFYxCzAJBgNVBAYTAlBM # MSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0Nl # cnR1bSBDb2RlIFNpZ25pbmcgMjAyMSBDQQIQCDJPnbfakW9j5PKjPF5dUTANBglg # hkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3 # DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV # MC8GCSqGSIb3DQEJBDEiBCCJtZO2dwJIqBQ4WvoGoQP7wHl/34QWFHPFWYYzTXtM # 0zANBgkqhkiG9w0BAQEFAASCAYBNHtH4tnbKYCUf0SaBrUQg2l0HZddJqveJDH2G # YS3Y+1AZpxKXNvhJxhSBYDQ/k019igZlouLFDqRdnEHF8cM6/6ySnuY4bAxNQ4Pt # WOhOQcP5zdRFEWygmU+ognuz+KDodv69hTwK/eqYf928WldNDDBIwdWewdjhxD1N # hw1+BfrUVZsCsx4gPqtqUVwJC8NzUMTaVkCp8otnHTtBkhWezgmEKK6/MYbLKwww # T2ampU4UmWE7QgAhTDeCL98aWlppCu3dH015hjJz73jzYv/LQzUeojGM4+RvANm6 # yX9ulC7SNvZAnQBPP6wo5CycqCeskgooy+G44yneKJ40pDAJhlEk5w4bkTEDvLnG # Zdv/MI8x7gor2myH3GdC3XcIhFa+KmKXZstS0BDjDswAkmpZppv6wKGCAVTDPAiN # jgTJAU+nk/fTGRtlGqg1BuroJo07MTuXVFS1Ldn8G1NeLwX/057ISopIU4ED4ySi # ZRjUZ1KfSWc9gFmGoctJlPY584ChggMjMIIDHwYJKoZIhvcNAQkGMYIDEDCCAwwC # AQEwajBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSww # KgYDVQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNgIRAKQp # O24e3denNAiHrXpOtyQwDQYJYIZIAWUDBAICBQCgeTAYBgkqhkiG9w0BCQMxCwYJ # KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNjAxMzAxOTIyMjRaMD8GCSqGSIb3 # DQEJBDEyBDCt2aipgMUGwqXnmE8mKKzlTs6UpG6fpCuZE6LgiEJGP4GqcO1Hex5N # /qsMYjCKriswDQYJKoZIhvcNAQEBBQAEggIAqlhqMz7xDvSVCp/o2/C3QXDTIEes # oiWfoMmgtalgfJGZ1wCAHBdZLu/Hyd70wrzX+gbqA2ljfySGD/lVQ6a/ckPu/7CJ # v60wG82UPZNyAVnP+R8bu4NYXSsC6kCRpLNxDijq6RS8F7VwrgZZNDRujroLShR9 # 04z9ddtjuG3pzdzxt7KIEB8tDfOCAMRVM/YPSs1lj+jfAhKfxTYMgLStcGX2JQUQ # ex5AuOKl13yAZJ0CLHTQ3bms4lSLOipUcw5nK3iZ/sVQXeAoZZLWd6WeAgAhj22F # h5qYtgDO/5qu+B5iWJ5wGsI1wA+ImPqFm1kN53oxeXRxsIRCET/lstnfEFI/YqRI # 7sBfyEYV+u5Brv3fs/D0kC5HwzqD4zcNp+HBPryJaNqflbvU75v9wJtcXxCwAytG # 8dtzmztfnRRXKTbKYGtsEEmXDKKHDb42irEIhfLWBl4rqOCMjnq05thvlU7rgMbA # lz7UJJWPJtVRF0W/06yc/4vb0w+NhFIOxxmFf+JY0Yo7637eM/iVYFwE6lf+WpIp # 4BA6zB9JUXL9EDoys9YZyTUSQYHo+E7h9I8BdsffgvI1g0IYz9GV619MvtcVwcNe # GphkP0oVrEV2YCz+qQh93H1zyv1kDGpvRx3GhezpmPFvCRwdivS24f7Z2zIAe+/0 # fnC9kqcVjnhOIM0= # SIG # End signature block |