ComplianceDiagnosticAutoLabeling.psm1
Import-Module "$PSScriptRoot\ComplianceDiagnosticUtils.psm1" function Confirm-AutoLabelingCommandsPresent { # Check if AutoLabeling Commands are present $command = Get-Command Get-AutoSensitivityLabelRule -ErrorAction SilentlyContinue if ($command -eq $null) { return $false } $command = Get-Command Get-AutoSensitivityLabelPolicy -ErrorAction SilentlyContinue if ($command -eq $null) { return $false } return $true } function Initialize-AutoSpo{ $global:alpControlVariables.AutoSpoHarFiles = $null $global:alpControlVariables.AutoSpoTdpFiles = $null $global:alpControlVariables.AutoSpoFiddlerFiles = $null } function Initialize-AutoExo{ $global:alpControlVariables.AutoExoEmailFiles = $null $global:alpControlVariables.AutoExoEmtdFiles = $null $global:alpControlVariables.AutoExoFiddlerFiles = $null } function Get-AutoLabelingTabContent ($TabObject){ [Parameter(Mandatory=$true)] [Windows.Controls.TabItem] $TabObject GetGlobalAlpRule $alpExchangeButton = Get-Button -ButtonName "Exchange AutoLabeling" $alpSPOButton = Get-Button -ButtonName "SPO/ODB AutoLabeling" -Margin "10,50,10,10" $alpPanelGrid = New-Object Windows.Controls.Grid $alpTopTabControl = Get-TopTabControl $alpPanelGrid.Children.Add($alpTopTabControl.TopTabControl) > $null $global:ContextScopeVariables.alpOutput = New-Object Windows.Controls.StackPanel $outputPanelTemplate = Get-TemplateGrid $outputPanelTemplate.Column1.Children.Add($alpExchangeButton) > $null $alpDiagnosticTabContent = New-Object Windows.Controls.StackPanel $alpDiagnosticTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center $alpDiagnosticTabContent.VerticalAlignment = [Windows.VerticalAlignment]::Top $alpDiagnosticTabContent.Margin = New-Object Windows.Thickness 0, 70, 0, 0 $alpDiagnosticTabContent.Children.Add($global:ContextScopeVariables.alpOutput) > $null $scrollViewer = New-Object Windows.Controls.ScrollViewer $scrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $scrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $outputPanelTemplate.Column2.Children.Add($alpDiagnosticTabContent) > $null $scrollViewer.Content = $outputPanelTemplate.Grid # $alpTopTabControl.DiagnosticsTabItem.Content = $scrollViewer // TODO : revive it after logic is built $alpExchangeButton.Add_Click({ }) $alpSPOButton.Add_Click({ }) # Collect diagnostic data from user $global:alpControlVariables.alpSupportDataTabContent = New-Object Windows.Controls.StackPanel $global:alpControlVariables.alpSupportDataTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center $global:alpControlVariables.SupportPanelTemplate = Get-TemplateGrid $alpEXOSupportButton = Get-Button -ButtonName "Exchange AutoLabeling" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $global:alpControlVariables.SupportPanelTemplate.Column1.Children.Add($alpEXOSupportButton) > $null $alpSPOSupportButton = Get-Button -ButtonName "SPO/ODB AutoLabeling" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $global:alpControlVariables.SupportPanelTemplate.Column1.Children.Add($alpSPOSupportButton) > $null $DiagscrollViewer = New-Object Windows.Controls.ScrollViewer $DiagscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $DiagscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $DiagscrollViewer.Content = $global:alpControlVariables.SupportPanelTemplate.Grid $alpTopTabControl.GatherSupportDataTabItem.Content = $DiagscrollViewer $global:alpControlVariables.SupportPanelTemplate.Column2.Children.Add($global:alpControlVariables.alpSupportDataTabContent ) > $null $alpEXOSupportButton.Add_Click({ Initialize-AutoExo Get-alpEXOSupportTemplate }) $alpSPOSupportButton.Add_Click({ Initialize-AutoSpo Get-alpSPOSupportTemplate }) #$alpSupportDataTabContent.Children.Add($GetAlpExoExport) $TabObject.Content = $alpPanelGrid } function Get-alpSPOSupportTemplate(){ $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206) $redColor = [System.Windows.Media.Color]::FromRgb(200, 10, 10) $supportDataHeader = Show-Text -Text "AutoLabeling Sharepoint/ODB Support Data Template" -Color $blueColor -fontSize 20 $tableGrid = Get-Table -columns 4 -rows 14 $AffectedDoc = Show-Text -Text "Affected File Path" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $AffectedDoc.ToolTip = Get-ToolTip -Text "Navigate to the document library on Browser `n Select the file `n Click on the ... dots `n Select 'Details' option `n A panel opens on the right `n Scroll to Bottom `n Click on copy icon beside path" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $AffectedDoc $global:alpControlVariables.AffectedDocPath = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:alpControlVariables.AffectedDocPath $global:alpControlVariables.AffectedDocError = Show-Text -Text "Could not find the document. Please make sure that a valid path is provided." -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -Color $redColor $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Hidden Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 3 -Control $global:alpControlVariables.AffectedDocError $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $scopedPolicyLabel $global:alpControlVariables.scopedPolicyComboboxSPO = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:alpControlVariables.scopedPolicyComboboxSPO.ItemsSource = $global:ContextScopeVariables.alpPolicyDropDown Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:alpControlVariables.scopedPolicyComboboxSPO $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton $global:ContextScopeVariables["AlpSPODateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["AlpSPODateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "AlpSPODateTime" $global:ContextScopeVariables["AlpSPODateTime"] = "" Get-DateTimePickerDialog }) $global:alpControlVariables.scopedPolicyComboboxSPO.add_SelectionChanged({ if ($global:alpControlVariables.scopedPolicyComboboxSPO.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.ParentPolicyName -eq $global:alpControlVariables.scopedPolicyComboboxSPO.SelectedItem} if ($selectedRule.GetType().Name -eq "PSObject") { $selectedRuleName = @( $selectedRule.Name ) } else { $selectedRuleName = $selectedRule.Name } $global:alpControlVariables.ImpactedRuleComboboxSPO.ItemsSource = $selectedRuleName } }) $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $ImpactedRule $global:alpControlVariables.ImpactedRuleComboboxSPO = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:alpControlVariables.ImpactedRuleComboboxSPO.ItemsSource = $global:ContextScopeVariables.alpRuleDropDown #$global:alpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:alpControlVariables.ImpactedRuleComboboxSPO $global:alpControlVariables.ImpactedRuleComboboxSPO.add_SelectionChanged({ if ($global:alpControlVariables.ImpactedRuleComboboxSPO.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.Name -eq $global:alpControlVariables.ImpactedRuleComboboxSPO.SelectedItem} $global:alpControlVariables.scopedPolicyComboboxSPO.Text = $selectedRule.ParentPolicyName } }) $BrowseSimHarLabel1 = Show-Text -Text "If Simulation Issue" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $BrowseSimHarLabel1 $BrowseSimHarLabel2 = Show-Text -Text "Please gather while loading Simulation page" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $BrowseSimHarLabel2 $BrowseSimHarLabel = Show-Text -Text "Network Trace (.har)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $BrowseSimHarLabel $BrowseSimHarButton = Get-FileButton ` -GlobalScopeName "alpControlVariables" ` -GlobalVariableName "AutoSpoHarLabel" ` -GlobalFileListName "AutoSpoHarFiles" ` -ButtonName "Browse Simulation .har file" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $BrowseSimHarButton $global:alpControlVariables.AutoSpoHarLabel = Show-Text -Text "Attached Simulation Har File" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $SimHarFilesScrollViewer = New-Object Windows.Controls.ScrollViewer $SimHarFilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $SimHarFilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $SimHarFilesScrollViewer.Content = $global:alpControlVariables.AutoSpoHarLabel Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $SimHarFilesScrollViewer $docSiteIdlabel = Show-Text -Text "Site ID (GUID) of document" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true $docSiteIdlabel.ToolTip = Get-ToolTip -Text "Populate the Document Path field`nThen a link would be shown beside this text box`nUse that link to get the siteId`ncopy the GUID between<d:Id ...></d:Id>" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 1 -Control $docSiteIdlabel $global:alpControlVariables.docSiteId = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $global:alpControlVariables.docSiteId $global:alpControlVariables.docSiteIdHelp = Show-Text -Text "Help" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 3 -Control $global:alpControlVariables.docSiteIdHelp $global:alpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Hidden $reportSMTP = Show-Text -Text "Test-DlpPolicies Report Email address" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 1 -Control $reportSMTP $global:alpControlVariables.reportSmtp = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $global:alpControlVariables.reportSmtp $TestDlpPoliciesButton = Get-Button -ButtonName "Run Test-DlpPolicies" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 3 -Control $TestDlpPoliciesButton $global:alpControlVariables.AffectedDocPath.Add_TextChanged({ $FileUrl = $global:alpControlVariables.AffectedDocPath.Text -replace ":w:/r/", "" $siteUrl = $FileUrl -replace "(https?://.+?\.sharepoint\.com|https?://.+?\.sharepoint-df\.com|https?://(1drv|onedrive)\.live\.com)/([^/]+)/([^/]+)/([^/]+/)*[^/]+(\.\w+)?(\?[^#]*)?(#.*)?$", '$1/$3/$4' $apiLink = "$siteUrl/_api/site/id" if($siteUrl){ $global:alpControlVariables.docSiteIdHelp.Text = "" $global:alpControlVariables.docSiteIdHelp.Inlines.Clear() # Add regular text to the tooltip $global:alpControlVariables.docSiteIdHelp.Inlines.Add("Click the following link to get the site id between <d:Id> tags `n") # Create a Hyperlink $hyperlink = New-Object Windows.Documents.Hyperlink $hyperlink.Inlines.Add("Click Here For SiteID") $hyperlink.NavigateUri = $apiLink $hyperlink.Add_RequestNavigate({ Start-Process $args.Uri.AbsoluteUri }) # Add the Hyperlink to the TextBlock $global:alpControlVariables.docSiteIdHelp.Inlines.Add($hyperlink) $global:alpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Visible }else{ $global:alpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Hidden } }) $TestDlpPoliciesButton.Add_Click({ if ($global:alpControlVariables.AffectedDocPath.Text -eq $null) { [System.Windows.MessageBox]::Show("Please enter the affected doc path in SPO/ODB.","Error",0,0) return } if ($global:alpControlVariables.reportSmtp.Text -eq $null) { [System.Windows.MessageBox]::Show("Please enter the email the report has to be sent to.","Error",0,0) return } if ($global:alpControlVariables.docSiteId.Text -eq $null) { [System.Windows.MessageBox]::Show("Please enter the Site ID (GUID) of the document.","Error",0,0) return } $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Hidden $v = $global:alpControlVariables.AffectedDocPath.Text $FileUrl = $v -replace ":w:/r/", "" $siteUrl = $FileUrl -replace "(https?://.+?\.sharepoint\.com|https?://.+?\.sharepoint-df\.com|https?://(1drv|onedrive)\.live\.com)/([^/]+)/([^/]+)/([^/]+/)*[^/]+(\.\w+)?(\?[^#]*)?(#.*)?$", '$1/$3/$4' $siteId = $global:alpControlVariables.docSiteId.Text $workload = "SPO" if($FileUrl -like "*-my.sharepoint*") { $workload = "ODB" } $pattern = "(?<=\%7B)(.*?)(?=\%7D)" $pattern1 = "(?<=\{)(.*?)(?=\})" if ($FileUrl -match $pattern) { $matchesR = [regex]::Matches($FileUrl, $pattern) $match = $matchesR[0].Value #Write-Host "Id" -NoNewLine -ForegroundColor Blue; Write-Host " $match" -ForegroundColor Cyan $id = $match }elseif($FileUrl -match $pattern1){ $matchesR = [regex]::Matches($FileUrl, $pattern1) $match = $matchesR[0].Value #Write-Host "Id" -NoNewLine -ForegroundColor Blue; Write-Host " $match" -ForegroundColor Cyan $id = $match } if(!$siteUrl){ $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Visible } else{ $scriptBlock = { param($siteId, $FileUrl, $workload, $reportAddr) $res = Test-DlpPolicies -SiteId $siteId -FileUrl $FileUrl -Workload $workload -SendReportTo $reportAddr return $res } $ps = [powershell]::Create().AddScript($scriptBlock) $ps.AddArgument($siteId) $ps.AddArgument($FileUrl) $ps.AddArgument($workload) $ps.AddArgument($global:alpControlVariables.reportSmtp.Text) $global:alpControlVariables.TDPResult = Get-ExoCmdletResult -ps $ps if($global:alpControlVariables.TDPResult.Message.Contains("Unable to find the file")){ $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Visible }elseif($global:alpControlVariables.TDPResult.Message.Contains("request is accepted")){ $global:alpControlVariables.AutoSpoTdpLabel.Text = "A Report has been sent to the above email address with subject 'Test-DlpPolicies on File'. `nPlease download it and attach here." } } }) $TDPLabel = Show-Text -Text "Attach Test-DlpPolicy Report" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 1 -Control $TDPLabel $TDPButton = Get-FileButton ` -GlobalScopeName "alpControlVariables" ` -GlobalVariableName "AutoSpoTdpLabel" ` -GlobalFileListName "AutoSpoTdpFiles" ` -ButtonName "Browse Test-DlpPolicy Report" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $TDPButton $global:alpControlVariables.AutoSpoTdpLabel = Show-Text -Text "Attached Test-DlpPolicies Report" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $TDPscrollViewer = New-Object Windows.Controls.ScrollViewer $TDPscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $TDPscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $TDPscrollViewer.Content = $global:alpControlVariables.AutoSpoTdpLabel Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 2 -Control $TDPscrollViewer $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Fiddler / Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 1 -Control $BrowseAttachLabel $BrowseAttachButton = Get-FileButton ` -GlobalScopeName "alpControlVariables" ` -GlobalVariableName "AutoSpoFiddlerLabel" ` -GlobalFileListName "AutoSpoFiddlerFiles" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 2 -Control $BrowseAttachButton $global:alpControlVariables.AutoSpoFiddlerLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.Content = $global:alpControlVariables.AutoSpoFiddlerLabel Add-ControlToTableAt -TableObj $tableGrid -row 12 -column 2 -Control $FilesScrollViewer $AdditionalDoc = Show-Text -Text "Additional file paths" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 13 -column 1 -Control $AdditionalDoc $global:alpControlVariables.AdditionalPaths = Get-TextBox -Width 400 -height 150 -Margin "0,0,10,0" -HorizontalAlignment "Left" $global:alpControlVariables.AdditionalPaths.AcceptsReturn = $true $global:alpControlVariables.AdditionalPaths.TextWrapping = "Wrap" Add-ControlToTableAt -TableObj $tableGrid -row 13 -column 2 -Control $global:alpControlVariables.AdditionalPaths $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $tableGrid.ColumnDefinitions[2].Width = 410 $global:alpControlVariables.alpSupportDataTabContent.Children.Clear() $global:alpControlVariables.alpSupportDataTabContent.Children.Add($supportDataHeader) > $null $global:alpControlVariables.alpSupportDataTabContent.Children.Add($tableGrid) > $null $GetAlpSPOExport = Get-Button -ButtonName "Export Support Data" $GetAlpSPOExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:alpControlVariables.alpSupportDataTabContent.Children.Add($GetAlpSPOExport) > $null $GetAlpSPOExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedAutoLabelingSPOData") if (!$Folder) { return } $filePath = $Folder + "\"+"AutoLabelingPolicyExport.Json" $supportData=@{} $supportData["AlpPolicy"] = $global:ContextScopeVariables.alpPolicy $supportData["AlpRule"] = $global:ContextScopeVariables.alpRules $supportData["FilePath"] = $global:alpControlVariables.AffectedDocPath.Text $supportData["ImpactedRule"] = $global:alpControlVariables.ImpactedRuleComboboxSPO.Text $supportData["ScopedPolicy"] = $global:alpControlVariables.scopedPolicyComboboxSPO.Text $supportData["AdditionalFilePaths"] = $global:alpControlVariables.AdditionalPaths.Text $supportData["ComplianceProperties"] = $global:alpControlVariables.TDPResult # $supportData["Forests"] = Get-ForestInfo $supportData["DateTime"] = $global:ContextScopeVariables["AlpSPODateTime"] try { # Copy the files to the destination folder $supportData["TestDlpPoliciesReportFiles"] = Get-FileName($global:alpControlVariables.AutoSpoTdpFiles) foreach ($file in $global:alpControlVariables.AutoSpoTdpFiles) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["SupportingFiles"] = Get-FileName($global:alpControlVariables.AutoSpoFiddlerFiles) foreach ($file in $global:alpControlVariables.AutoSpoFiddlerFiles) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["SimulationHarFiles"] = Get-FileName($global:alpControlVariables.AutoSpoHarFiles) foreach ($file in $global:alpControlVariables.AutoSpoHarFiles) { Copy-Item $file $Folder -Force } # Zip the destination folder CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath } catch { [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) } }) } function Get-alpEXOSupportTemplate(){ $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206) $supportDataHeader = Show-Text -Text "AutoLabeling Exchagne Support Data Template" -Color $blueColor -fontSize 20 $tableGrid = Get-Table -columns 4 -rows 11 $AffectedClient = Show-Text -Text "Affected Client" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $AffectedClient $AffectedClientCombo = @('Outlook For Web','Outlook Windows application', "Outlook Mobile") $global:alpControlVariables.AffectedClientComboboxExo = Get-ComboBox -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left" $global:alpControlVariables.AffectedClientComboboxExo.ItemsSource = $AffectedClientCombo Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:alpControlVariables.AffectedClientComboboxExo $ImpactedUserSMTP = Show-Text -Text "Impacted User/Group SMTP" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $ImpactedUserSMTP $global:alpControlVariables.ImpactedUserTextBoxExo = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:alpControlVariables.ImpactedUserTextBoxExo $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220 Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton $global:ContextScopeVariables["AlpEXODateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["AlpEXODateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "AlpEXODateTime" $global:ContextScopeVariables["AlpEXODateTime"] = "" Get-DateTimePickerDialog }) $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $scopedPolicyLabel $global:alpControlVariables.scopedPolicyComboboxExo = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:alpControlVariables.scopedPolicyComboboxExo.ItemsSource = $global:ContextScopeVariables.alpPolicyDropDown Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:alpControlVariables.scopedPolicyComboboxExo $global:alpControlVariables.scopedPolicyComboboxExo.add_SelectionChanged({ if ($global:alpControlVariables.scopedPolicyComboboxExo.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.ParentPolicyName -eq $global:alpControlVariables.scopedPolicyComboboxExo.SelectedItem} if ($selectedRule.GetType().Name -eq "PSObject") { $selectedRuleName = @( $selectedRule.Name ) } else { $selectedRuleName = $selectedRule.Name } $global:alpControlVariables.ImpactedRuleComboboxExo.ItemsSource = $selectedRuleName } }) $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $ImpactedRule $global:alpControlVariables.ImpactedRuleComboboxExo = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:alpControlVariables.ImpactedRuleComboboxExo.ItemsSource = $global:ContextScopeVariables.alpRuleDropDown #$global:alpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $global:alpControlVariables.ImpactedRuleComboboxExo $global:alpControlVariables.ImpactedRuleComboboxExo.add_SelectionChanged({ if ($global:alpControlVariables.ImpactedRuleComboboxExo.SelectedItem -ne $null){ $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.Name -eq $global:alpControlVariables.ImpactedRuleComboboxExo.SelectedItem} $global:alpControlVariables.scopedPolicyComboboxExo.Text = $selectedRule.ParentPolicyName } }) $SampleEmailLabel = Show-Text -Text "Sample Email file (.eml)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $SampleEmailLabel $SampleEmailButton = Get-FileButton ` -GlobalScopeName "alpControlVariables" ` -GlobalVariableName "AutoExoEmailLabel" ` -GlobalFileListName "AutoExoEmailFiles" ` -ButtonName "Browse Sample Email" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $SampleEmailButton $global:alpControlVariables.AutoExoEmailLabel = Show-Text -Text "Attached Sample Email" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $SampleEmailscrollViewer = New-Object Windows.Controls.ScrollViewer $SampleEmailscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $SampleEmailscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $SampleEmailscrollViewer.Content = $global:alpControlVariables.AutoExoEmailLabel Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $SampleEmailscrollViewer $global:alpControlVariables.EMTDLabel = Show-Text -Text "Extended Message Trace Detail" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" -ShowHelp $true $global:alpControlVariables.EMTDLabel.ToolTip = Get-ToolTip -Text "Follow instructions from below page`nhttps://learn.microsoft.com/en-us/exchange/monitoring/trace-an-email-message/message-trace-modern-eac#open-message-trace" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 1 -Control $global:alpControlVariables.EMTDLabel $EMTDButton = Get-FileButton ` -GlobalScopeName "alpControlVariables" ` -GlobalVariableName "AutoExoEmtdLabel" ` -GlobalFileListName "AutoExoEmtdFiles" ` -ButtonName "Browse EMTD" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $EMTDButton $global:alpControlVariables.AutoExoEmtdLabel = Show-Text -Text "Attached EMTD" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $EMTDscrollViewer = New-Object Windows.Controls.ScrollViewer $EMTDscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $EMTDscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $EMTDscrollViewer.Content = $global:alpControlVariables.AutoExoEmtdLabel Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $EMTDscrollViewer $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Fiddler / Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 1 -Control $BrowseAttachLabel $BrowseAttachButton = Get-FileButton ` -GlobalScopeName "alpControlVariables" ` -GlobalVariableName "AutoExoFiddlerLabel" ` -GlobalFileListName "AutoExoFiddlerFiles" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $BrowseAttachButton $global:alpControlVariables.AutoExoFiddlerLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $FilesScrollViewer.Content = $global:alpControlVariables.AutoExoFiddlerLabel Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 2 -Control $FilesScrollViewer #$alpSupportDataTabContent.Children.Add($global:alpControlVariables.AutoExoFiddlerLabel) $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $tableGrid.ColumnDefinitions[2].Width = 410 $global:alpControlVariables.alpSupportDataTabContent.Children.Clear() $global:alpControlVariables.alpSupportDataTabContent.Children.Add($supportDataHeader) > $null $global:alpControlVariables.alpSupportDataTabContent.Children.Add($tableGrid) > $null $GetAlpExoExport = Get-Button -ButtonName "Export Support Data" $GetAlpExoExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:alpControlVariables.alpSupportDataTabContent.Children.Add($GetAlpExoExport) > $null $GetAlpExoExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedAutoLabelingEXOData") if (!$Folder) { return } $filePath = $Folder + "\"+"AutoLabelingPolicyExport.Json" $supportData=@{} $supportData["AlpPolicy"] = $global:ContextScopeVariables.alpPolicy $supportData["AlpRule"] = $global:ContextScopeVariables.alpRules $supportData["ImpactedClient"] = $global:alpControlVariables.AffectedClientComboboxExo.SelectedItem $supportData["ImpactedUser"] = $global:alpControlVariables.ImpactedUserTextBoxExo.Text $supportData["ImpactedRule"] = $global:alpControlVariables.ImpactedRuleComboboxExo.SelectedItem $supportData["ScopedPolicy"] = $global:alpControlVariables.scopedPolicyComboboxExo.SelectedItem #$supportData["Forests"] = Get-ForestInfo $supportData["DateTime"] = $global:ContextScopeVariables["AlpExoDateTime"] try { # Copy the files to the destination folder $supportData["ExtendedMessageTraceFiles"] = Get-FileName($global:alpControlVariables.AutoExoEmtdFiles) foreach ($file in $global:alpControlVariables.AutoExoEmtdFiles) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["SupportingFiles"] = Get-FileName($global:alpControlVariables.AutoExoFiddlerFiles) foreach ($file in $global:alpControlVariables.AutoExoFiddlerFiles) { Copy-Item $file $Folder -Force } # Copy the files to the destination folder $supportData["ReproFiles"] = Get-FileName($global:alpControlVariables.AutoExoEmailFiles) foreach ($file in $global:alpControlVariables.AutoExoEmailFiles) { Copy-Item $file $Folder -Force } CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath } catch { [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) } }) } function GetGlobalAlpRule { [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Wait) if($global:ContextScopeVariables.alpRules -and $global:ContextScopeVariables.alpPolicy){ return } Write-Host "Getting Autolabeling policies in your organization." $global:ContextScopeVariables.alpPolicy = Get-AutoSensitivityLabelPolicy -IncludeTestModeResults $true -IncludeProgressFeedback if ($global:ContextScopeVariables.alpPolicy -ne $null) { if ($global:ContextScopeVariables.alpPolicy.GetType().Name -eq "PSObject") { $global:ContextScopeVariables.alpPolicyDropDown = @( $global:ContextScopeVariables.alpPolicy.Name ) } else { $global:ContextScopeVariables.alpPolicyDropDown = $global:ContextScopeVariables.alpPolicy.Name } } Write-Host "Getting Autolabeling rules in your organization." $global:ContextScopeVariables.alpRules = Get-AutoSensitivityLabelRule if ($global:ContextScopeVariables.alpRules -ne $null) { if ($global:ContextScopeVariables.alpRules.GetType().Name -eq "PSObject") { $global:ContextScopeVariables.alpRuleDropDown = @( $global:ContextScopeVariables.alpRules.Name ) } else { $global:ContextScopeVariables.alpRuleDropDown = $global:ContextScopeVariables.alpRules.Name } } [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Arrow) } Export-ModuleMember -Function * # SIG # Begin signature block # MIIoLgYJKoZIhvcNAQcCoIIoHzCCKBsCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDvu6eYxAw+Dqre # mKgmYt+81f5W20ATMvb2nc0ny3RWe6CCDXYwggX0MIID3KADAgECAhMzAAADrzBA # DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA # hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG # 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN # xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL # go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB # tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw # RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW # MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci # tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG # CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0 # MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd # mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ # 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY # 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp # XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn # TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT # e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG # OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O # PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk # ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx # HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt # CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq # hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 # IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg # Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03 # a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr # rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg # OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy # 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9 # sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh # dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k # A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB # w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn # Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90 # lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w # ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o # ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD # VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa # BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny # bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG # AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV # HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG # AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl # AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb # C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l # hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6 # I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0 # wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 # STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam # ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa # J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah # XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA # 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt # Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr # /Xmfwb1tbWrJUnMTDXpQzTGCGg4wghoKAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp # Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB # BQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO # MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIPC5hy3VIwmO8xDNcppdMNX5 # lgMtUKQPXdFWejZwjklTMEQGCisGAQQBgjcCAQwxNjA0oBSAEgBNAGkAYwByAG8A # cwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkqhkiG9w0B # AQEFAASCAQC9TeI6G+XmTkV2EEbSMQvWfny69GomrNFySa/4p/Xsxgb+Af8vpqnD # GXwnFUrKgpRBRhU50bL0pCibFN5zMbUonyXQybgpk+iXimLWQw9ZHIb4ZtGB6EyL # 1mIyyELNqU4oRqPa9OxWq0i2SI+6SLvmZul1jqbcTEIH6QkgD//Z+XFPoHYWc9bo # z2NyVa35SuukE3N5gxtJR98DCpTKNvJ8/0MrPLz/+iLnyTieAkqPit6sKVYKZ7ic # S001ilcHfWF+hJQsYZLRPPW3rEOv/+tg8V7cCgLiobwHap39x4UN8OA+S2kC5Euw # 9W237SqzPswMLX6pcWazaAqIt5amx8nMoYIXljCCF5IGCisGAQQBgjcDAwExgheC # MIIXfgYJKoZIhvcNAQcCoIIXbzCCF2sCAQMxDzANBglghkgBZQMEAgEFADCCAVEG # CyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZI # AWUDBAIBBQAEIEaDWO7rBoQNF7Lb2b20R0xSsYCxTkYq9big4UqujYTdAgZmMrlc # AXoYEjIwMjQwNTA5MTkwNTIwLjc2WjAEgAIB9KCB0aSBzjCByzELMAkGA1UEBhMC # VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV # BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFt # ZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE0MDAt # MDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl # oIIR7TCCByAwggUIoAMCAQICEzMAAAHs4CukgtCRUoAAAQAAAewwDQYJKoZIhvcN # AQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV # BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG # A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMjA2MTg0 # NTM4WhcNMjUwMzA1MTg0NTM4WjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh # c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD # b3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9u # czEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE0MDAtMDVFMC1EOTQ3MSUwIwYD # VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEAsEf0bgk24MVFlZv1XbpdtrsHRGZtCKABbOqCK9/V # SvyLT/NHJ/vE5rT+u4mmweA5gCifRh+nSRoRDyaWOL0ykUjsK0TcVSCqDz3lBd3+ # FchxHKP7tUFGnZcA9d9jbmQsW54ejItpSxu6Q77M2ajBu0tzAotm5Np77RinXgCC # /h++4C+K9NU0lm+67BNiW9T/zemP1tQqg4tfyG9/80all7eM8b3SBnD40uGSskBB # d0hGQKuFyI4sqMDx2qjW2cXX9pFjv2o3X01PObfd+AlwIp29KPrkPSrWijS1VXDX # +UKUuH+vzLFzryBbgmDEXSg46Zr6MAHi/tY9u2wsQgaQ0B61pHz82af1/m7fQuxO # YTz+h1UaKgWEe7tYFH+RhKvua9RwNI2o59EOjr32HJBNB3Tr+ilmvrAJiRuzw702 # Wnu+4aJs8eiD6oIFaTWbgpO/Un1ZpyrvRefFAJ1OfE6gxxMxrEJzFECrLUt845+k # lNDSxBTQnrZbmipKlg0VSxFm7t9vSBId7alz138ukYf8Am8HvUgiSKKrQXsQaz8k # GANl2s9XyvcrE7MdJAPVdScFVeOCGvXPjMLQEerKinQIEaP27P17vILmvCw3uils # rve+HvZhlu2TvJ2qwxawE9RFxhw7nsoEir79iu8AfJQIDBiY+9wkL6/o6qFsMel3 # cnkCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBT0WtBHZP4r9cIWELFfFIBH+EyFhjAf # BgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQ # hk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl # MjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBe # MFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl # cnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAM # BgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQE # AwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAkrzEpDEq745Qz2oPAEW9DhawELUizA6T # dFGNxY7z4cBig664sZp7jH465lY0atbvCIZA7xhf2332xU6/iAJw0noPEwfc3xv+ # Mm5J7qKZJW3ho27ezC8aX4aJQhEchHNtDzGSic/Ur837jtZ+ca6yzi/JtJ5r+ZAX # L/stQFyeUHC4nJoXtiKd/w+uxHeqD6kCNN5g42GktTUIQTbbue8Dyl2dRKDU6AZP # GwOvN/cNdfW/mvVk6KiLJHURqD+cYwyL/pnNLwR4WRpCVb3yIZuAKfM6bQu8VQJc # tI3jr+XVBjAmIGY76E5oHeOW6gMLp3Zj5Rrq+3pXlmHnS0H+7Ny+fqn2mP8RIf/b # qNe0pzP4B1UhgM7563hoTqwdi7XSqFUnuS22KYoV3LQ3u+omLS/pocVzxKc3Wt2y # ZYT0zkNyjhGQKVREQaOcpbVozwlpV8cgqZeY4/Z2NJ33dO9W3pp6LvAN61Ga3YCi # GrrbB+0hzojnm2RqjbvuttrybWt3gGLAgGsQHAfQYiT5Wu12nfaq02HU+OVZQmE7 # QUmOKFUbHnUgA7/fY7/4mCABstWwsrbmtKP0Kr/Xqyps0Ak1TF2g3NuQ0y3DBia0 # bmtytMYr3bZ6AXsc1Sa+sl6jPgWtsISFUbxnK4gZCl9BSRXlu69vV1/pNHuA5xuo # gRykI3nOlTcwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqG # SIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkg # MjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU # aW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC # AgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4X # YDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTz # xXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7 # uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlw # aQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedG # bsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXN # xF803RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03 # dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9 # ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5 # UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReT # wDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZ # MBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8 # RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAE # VTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1p # Y3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAww # CgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQD # AgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb # 186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29t # L3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoG # CCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZI # hvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9 # MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2Lpyp # glYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OO # PcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8 # DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA # 0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1Rt # nWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjc # ZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq7 # 7EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJ # C4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328 # y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYID # UDCCAjgCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo # aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y # cG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMx # JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBNDAwLTA1RTAtRDk0NzElMCMGA1UE # AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUA # jhz7YFXc/RFtIjzS/wV6iaKlTH+ggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt # cCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAOnnGhQwIhgPMjAyNDA1MDkwOTQ3 # MDBaGA8yMDI0MDUxMDA5NDcwMFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA6eca # FAIBADAKAgEAAgIamQIB/zAHAgEAAgIT2TAKAgUA6ehrlAIBADA2BgorBgEEAYRZ # CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0G # CSqGSIb3DQEBCwUAA4IBAQBxqnQCOf4IQW7ryRrXAGxcS/+tgR3BST06tO3ZLeRD # ym+FnSFB7H6rc6wc7pUva4Hf6q/GyAe27sAzJr6Mpj1+HKPXMIuu8E1mAL86j0sh # Hl+tl1pbN3L87TO3vc5WTU4brvDyyr4fwoB9j/OAvTWDAQlRriQIUdK8VSIuJ97K # SNtJi87XclIYyH/5SBXSRTrTIS6X+uNeJFGp2Hk5LO19CJabbqDCMayJg3Pl8xRp # HhZh/vJ4wGDuHIffNR7QiWeXoAhivCu6rEZUbkpCT+R9jlqF7ASxyCbj27ou4Fkg # g1/79CT+HPlOy+25AGwLC1U48Zvmxm78YpB7Ts17kLzAMYIEDTCCBAkCAQEwgZMw # fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd # TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHs4CukgtCRUoAAAQAA # AewwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB # BDAvBgkqhkiG9w0BCQQxIgQgn9G/oCDjw+pq7xdtlpi+VbTb+iVSixEHAgjgo35P # B0kwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCAnCeb1an03yIcdtUAQWysq # P8XIkCF2qDFlC3owBNUKgzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD # QSAyMDEwAhMzAAAB7OArpILQkVKAAAEAAAHsMCIEIGQh6IMcj+iVfERrRwKNOOJ/ # oFh4sQCnRdR7v1CA3b16MA0GCSqGSIb3DQEBCwUABIICAEJBxWBFFgRgdBZNFxRQ # z1IPeAX5pFrCXhN0nHi/ARtQ2zU0ibooKY8F4KCf/j7Qo7BCAk3ZZPBXCnrqVagM # hYgfdL/zVgJND0TGpUoJAy3dCTV8djtX2jI7a4eLcNCYLJBQwP1k0RVPrnRyB42Q # BFzWAYhQ0LrJ/qUO8eCe9P3N5jPsKUOWKEKa8rGx79jXGuQlQ5/3nvGMjn2trnu1 # UfRHHbZwMUaiim3w5HVwiF9MBA67B5arH3k5QwNALMhbJDGkQrXL+VXfdUDWGob8 # LhDXFmpp0e5/uc2sv/gOqVdwoptu3/jRf/OflHYwgDovLhGP9djZOSZSc6qGSNGp # urIyVUskZh4Tbo9ePVRexJGP2DjeQXfMKCLJXZQjNju0khfDMzXRy2KYt79910+B # csyYRMegSv0z+Vr8UAOEZaqt8vpSgAp/+l7fuSuzA7u2RL7RNnD2zsj74EkxalfW # QFd2qQdSAFwF7UatuT/Ay3Z8EoNwsa42f1DoYRfS16nVVA8ImajDFK4ydWVE1wPi # Hdqf52zjywC/Whz5ZTyqxmtqYlIg0xIFmvIHVMz6NFYf9zhMDb/RkEFTi/N3ZtRg # YYarsoYwsdk4FdU7MfEUQ355kZzWGwWSwOwe54mNjEJkuC8G8yR+ehwbwpNr8LQP # fIeUAFSeN/yX5w0Nf4Kq7xoa # SIG # End signature block |