ComplianceDiagnosticMIP.psm1
Import-Module "$PSScriptRoot\ComplianceDiagnosticUtils.psm1" function Confirm-MipLabelCommandsPresent { # Check if MIP Label Commands are present $command = Get-Command Get-Label -ErrorAction SilentlyContinue if ($command -eq $null) { return $false } $command = Get-Command Get-LabelPolicy -ErrorAction SilentlyContinue if ($command -eq $null) { return $false } return $true } function Initialize-MipTab{ $global:MipControlVariables.fileData = $null } function Get-MIPLabelTabContent ($TabObject){ [Parameter(Mandatory=$true)] [Windows.Controls.TabItem] $TabObject $GetLabelPolicyButton = Get-Button -ButtonName "Analyze User Policy Configs" $GetUserLabelButton = Get-Button -ButtonName "Analyze User Label" -Margin "10,50,10,10" $GetUserPolicyButton = Get-Button -ButtonName "Analyze User Policies" -Margin "10,50,10,10" $mipPanelGrid = New-Object Windows.Controls.Grid $mipLabelTopTabControl = Get-TopTabControl $mipPanelGrid.Children.Add($mipLabelTopTabControl.TopTabControl) > $null $global:ContextScopeVariables.mipLabelsOutput = New-Object Windows.Controls.StackPanel $outputPanelTemplate = Get-TemplateGrid $outputPanelTemplate.Column1.Children.Add($GetLabelPolicyButton) > $null $outputPanelTemplate.Column1.Children.Add($GetUserLabelButton) > $null $outputPanelTemplate.Column1.Children.Add($GetUserPolicyButton) > $null $MipLabelsDiagnosticTabContent = New-Object Windows.Controls.StackPanel $MipLabelsDiagnosticTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center $MipLabelsDiagnosticTabContent.VerticalAlignment = [Windows.VerticalAlignment]::Top $MipLabelsDiagnosticTabContent.Margin = New-Object Windows.Thickness 0, 70, 0, 0 $MipLabelsDiagnosticTabContent.Children.Add($global:ContextScopeVariables.mipLabelsOutput) > $null $scrollViewer = New-Object Windows.Controls.ScrollViewer $scrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $scrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $outputPanelTemplate.Column2.Children.Add($MipLabelsDiagnosticTabContent) > $null $scrollViewer.Content = $outputPanelTemplate.Grid # $mipLabelTopTabControl.DiagnosticsTabItem.Content = $scrollViewer # NOTE: The variables that we use in event functions will be null if they are passed as local scope $GetLabelPolicyButton.Add_Click({ Show-AnalyzeMIPPanel -mipLabelsOutput $global:ContextScopeVariables.mipLabelsOutput -inputParam "PolicyConfig" }) $GetUserLabelButton.Add_Click({ Show-AnalyzeMIPPanel -mipLabelsOutput $global:ContextScopeVariables.mipLabelsOutput -inputParam "User Label" }) $GetUserPolicyButton.Add_Click({ Show-AnalyzeMIPPanel -mipLabelsOutput $global:ContextScopeVariables.mipLabelsOutput -inputParam "User Policy" }) # Collect diagnostic data from user $global:MipControlVariables.MipLabelsSupportDataTabContent = New-Object Windows.Controls.StackPanel $global:MipControlVariables.MipLabelsSupportDataTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center $SupportPanelTemplate = Get-TemplateGrid $MipLabelDiagButton = Get-Button -ButtonName "MIP Labels" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left" $SupportPanelTemplate.Column1.Children.Add($MipLabelDiagButton) > $null # Define Gather Support data in a table format and pinning all the Controlds to Table Grid$tableGrid = New-Object System.Windows.Controls.Grid $tableGrid = Get-Table -columns 4 -rows 7 $AffectedClientLabel = 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 $AffectedClientLabel $AffectedClientCombo = @('Outlook For Web','Outlook Windows application', 'Word Online', 'Excel Online', 'Power Point Online', 'Word Application', 'Excel Application','Power Point Application', 'MIP SDK') $global:MipControlVariables.AffectedClientCombobox = Get-ComboBox -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left" $global:MipControlVariables.AffectedClientCombobox.ItemsSource = $AffectedClientCombo Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:MipControlVariables.AffectedClientCombobox $ImpactedUserLabel = Show-Text -Text "Impacted User" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $ImpactedUserLabel $global:MipControlVariables.ImpactedUserTextBox = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:MipControlVariables.ImpactedUserTextBox $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["MipLabelsDateTimeLabel"] = 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["MipLabelsDateTimeLabel"] $dateTimeButton.Add_Click({ $global:ContextScopeVariables.DateTimeProp = "MipLabelsDateTime" $global:ContextScopeVariables["MipLabelsDateTime"] = "" Get-DateTimePickerDialog }) $ImpactedLabel = Show-Text -Text "Impacted Label" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $ImpactedLabel GetGlobalLabelPol $global:MipControlVariables.ImpactedLabelCombobox = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:MipControlVariables.ImpactedLabelCombobox.ItemsSource = $global:ContextScopeVariables.labelDropDown #$global:MipControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple" Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:MipControlVariables.ImpactedLabelCombobox $scopedLabelPolicyLabel = Show-Text -Text "Scoped Label Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $scopedLabelPolicyLabel $global:MipControlVariables.scopedLabelPolicyCombobox = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left" $global:MipControlVariables.scopedLabelPolicyCombobox.ItemsSource = $global:ContextScopeVariables.labelpolicyDropDown Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $global:MipControlVariables.scopedLabelPolicyCombobox $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ PSR/ Fiddler Trace" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $BrowseAttachLabel $BrowseAttachButton = Get-FileButton ` -GlobalScopeName "MipControlVariables" ` -GlobalVariableName "BrowsedFileLabel" ` -GlobalFileListName "fileData" ` -ButtonName "Browse Supporting Files" ` -Margin "0,0,10,0" ` -HorizontalAlignment "Left" ` -height 30 ` -width 220 ` -VerticalAlignment "Center" Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $BrowseAttachButton $global:MipControlVariables.BrowsedFileLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" $mipFilesScrollViewer = New-Object Windows.Controls.ScrollViewer $mipFilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $mipFilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $mipFilesScrollViewer.Content = $global:MipControlVariables.BrowsedFileLabel Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $mipFilesScrollViewer $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10) $tableGrid.HorizontalAlignment = "Center" $global:MipControlVariables.MipLabelsSupportDataTabContent.Children.Add($tableGrid) > $null $SupportPanelTemplate.Column2.Children.Add($global:MipControlVariables.MipLabelsSupportDataTabContent ) > $null $DiagscrollViewer = New-Object Windows.Controls.ScrollViewer $DiagscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $DiagscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto $DiagscrollViewer.Content = $SupportPanelTemplate.Grid $mipLabelTopTabControl.GatherSupportDataTabItem.Content = $DiagscrollViewer $global:MipControlVariables.MipLabelsSupportDataTabContent.Visibility = "hidden" $MipLabelDiagButton.Add_Click({ Initialize-MipTab $global:MipControlVariables.MipLabelsSupportDataTabContent.Visibility = "visible" }) $GetLabelPolicyExport = Get-Button -ButtonName "Export Support Data" $GetLabelPolicyExport.Margin = New-Object System.Windows.Thickness(10,50,10,10) $global:MipControlVariables.MipLabelsSupportDataTabContent.Children.Add($GetLabelPolicyExport) > $null $GetLabelPolicyExport.Add_Click({ # Create a new SaveFileDialog object $Folder = Get-ExportFolder("ExportedMIPData") if (!$Folder) { return } $filePath = $Folder + "\"+"MIPLabelPolicyExport.xmla" $supportData=@{} $supportData["Policies"] = $global:ContextScopeVariables.labelpolicy $supportData["Labels"] = $global:ContextScopeVariables.Labels $supportData["ImpactedClient"] = $global:MipControlVariables.AffectedClientCombobox.Text $supportData["ImpactedUser"] = $global:MipControlVariables.ImpactedUserTextBox.Text $supportData["ImpactedLabel"] = $global:MipControlVariables.ImpactedLabelCombobox.Text $supportData["ScopedLabelPolicy"] = $global:MipControlVariables.scopedLabelPolicyCombobox.Text $supportData["DateTime"] = $global:ContextScopeVariables["MipLabelsDateTime"] try { # Copy the files to the destination folder $supportData["SupportingFiles"] = Get-FileName($global:MipControlVariables.fileData) foreach ($file in $global:MipControlVariables.fileData) { # $destinationFile = Join-Path $zipFilePath (Split-Path $file -Leaf) Copy-Item $file $Folder -Force } # Save the object as an XMLA file # $supportData | Export-Clixml -Path $filePath 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) } }) $TabObject.Content = $mipPanelGrid } function GetGlobalLabelPol { [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Wait) Write-Host "Getting sensitivity labels in your organization." $labels = Get-Label if ($labels -ne $null) { $labels | ForEach-Object { $_.ObjectCategory = $_.DisplayName } $labels | Where-Object {$_.ParentLabelDisplayName} | ForEach-Object { $_.ObjectCategory = $_.ParentLabelDisplayName+" - "+$_.DisplayName } $labels | Foreach-Object { Add-Member -InputObject $_ -MemberType NoteProperty -Name "EffectiveDisplayName" -Value $_.ObjectCategory -Force} $global:ContextScopeVariables.Labels = $labels if ($global:ContextScopeVariables.Labels.GetType().Name -eq "PSObject") { $global:ContextScopeVariables.labelDropDown = @( $global:ContextScopeVariables.Labels.EffectiveDisplayName ) } else { $global:ContextScopeVariables.labelDropDown = $global:ContextScopeVariables.Labels.EffectiveDisplayName } } Write-Host "Getting sensitivity label policies in your organization." $global:ContextScopeVariables.labelpolicy = Get-LabelPolicy -WarningAction SilentlyContinue if ($global:ContextScopeVariables.labelpolicy -ne $null) { if ($global:ContextScopeVariables.labelpolicy.GetType().Name -eq "PSObject") { $global:ContextScopeVariables.labelpolicyDropDown = @( $global:ContextScopeVariables.labelpolicy.Name ) } else { $global:ContextScopeVariables.labelpolicyDropDown = $global:ContextScopeVariables.labelpolicy.Name } } [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Arrow) return $global:ContextScopeVariables.Labels,$global:ContextScopeVariables.labelpolicy } function Show-AnalyzeMIPPanel($mipLabelsOutput,$inputParam){ [Parameter(Mandatory=$true)] [Windows.Controls.StackPanel] $mipLabelsOutput [Parameter(Mandatory=$true)] [string] $inputParam $textBoxControl = Get-TextCollectionControl -butttonName "Fetch User Configs" -labelText "Enter User Email ID" $mipLabelsOutput.Children.Clear() $mipLabelsOutput.Children.Add($textBoxControl.control) > $null $global:ContextScopeVariables.mipLabelTextBox = $textBoxControl.textBox $global:ContextScopeVariables.inputparam = $inputParam $textBoxControl.button.height = 25 $textBoxControl.button.Add_Click({ GetLabelPolicy -mipLabelsOutput $global:ContextScopeVariables.mipLabelsOutput -UserEmailID $global:ContextScopeVariables.mipLabelTextBox.Text -inputparam $global:ContextScopeVariables.inputparam }) } Export-ModuleMember -Function * # SIG # Begin signature block # MIIoPgYJKoZIhvcNAQcCoIIoLzCCKCsCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDB+GxPicqG/MoI # QF3AuRBDThG7XNCcF1no1oH+P89ikKCCDYUwggYDMIID66ADAgECAhMzAAADri01 # UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG # yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899 # QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82 # 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV # M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd # WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w # VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh # dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW # gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw # MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx # XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB # AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W # 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY # 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV # APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37 # ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57 # xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t # Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i # 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk # 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK # 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO # zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK # YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv # c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm # aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw # OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD # VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG # 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la # UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc # 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D # dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+ # lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk # kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6 # A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd # X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL # 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd # sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3 # T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS # 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI # bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL # BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD # uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv # c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf # MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf # MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF # BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h # cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA # YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn # 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7 # v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b # pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/ # KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy # CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp # mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi # hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb # BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS # oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL # gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX # cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGg8wghoLAgEBMIGVMH4x # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p # Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA # A64wDQYJYIZIAWUDBAIBBQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw # HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIGLC # KSyaO/GdCjCr4KEFAx7mZ275wpIJGLzGtTXgKvN0MEQGCisGAQQBgjcCAQwxNjA0 # oBSAEgBNAGkAYwByAG8AcwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQu # Y29tIDANBgkqhkiG9w0BAQEFAASCAQA1Ca0j6ydlAlBF/eQo22VC6jFhxBlBq9mf # 7cJQ9sdfA4THC+f6gIJ9dFOX8GS2riN5ENuDZIb/tf36W4d7S/uJ6QHW3fI/r1az # 07Njygi1dMZfrEBrKO1osksQIT++V/PVOkIq2/+oOjqwXkNhBSzeFO62nkgZjVoW # Y/0NRRu2I8NndlTc7Vw1v8d65/88yZIjsg8n8bVviKmWHtV8WAb9BEajDBessdz/ # FBTwtqo7Gop+aKnFsHPRtso6LGE7JPNKdVkX9De97J3XP78talR/gh8VVZGQ/PN0 # DGbM2J8n+AaEfOCgdx2KrBVKp4NhIdTHPj9j8fVPFbttDH+01m4XoYIXlzCCF5MG # CisGAQQBgjcDAwExgheDMIIXfwYJKoZIhvcNAQcCoIIXcDCCF2wCAQMxDzANBglg # hkgBZQMEAgEFADCCAVIGCyqGSIb3DQEJEAEEoIIBQQSCAT0wggE5AgEBBgorBgEE # AYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEINBP29p2dHAwb5dj9ar7FyJ+cxD1vN5p # 2X+79Wjb4knMAgZlzg3mt3MYEzIwMjQwMjIwMjEyNTIyLjE5NlowBIACAfSggdGk # gc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNV # BAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGll # bGQgVFNTIEVTTjo4RDAwLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRp # bWUtU3RhbXAgU2VydmljZaCCEe0wggcgMIIFCKADAgECAhMzAAAB88UKQ64DzB0x # AAEAAAHzMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy # MDEwMB4XDTIzMTIwNjE4NDYwMloXDTI1MDMwNTE4NDYwMlowgcsxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBB # bWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo4RDAw # LTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj # ZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAP6fptrhK4H2JI7lYyFu # eCpgBv7Pch/M2lkhZL+yB9eGUtiYaexS2sZfc5VyD7ySsl2LG41Qw7tkA6oJmxdS # M7PzNyfVpQPkPavY+HNUqMe2K9YaAaPjHnCpZ7VCi/e8zPxYewqx9p0iVaN8EydU # pWiY7JtDv7aNzhp/OPZclBBKYT2NBGgGiAPCaplqR5icjHQSY665w+vrvhPr9hpM # +IhiUZ/5dXa7qhAcCQwbnrFg9CKSK1COM1YcAN8GpsERqqmlqy3GlE1ziJ3ZLXFV # DFxAZeOcCB55Vts9sCgQuFvD7PdV61HC4QUlHNPqFtYSC/P0sxg9JuKgcvzD5mJa # jfG7DdHt8myp7umqyePC+eI/ux8TW61+LuTQ1Bkym+I6z//bf0fp4Dog5W0XzDrq # KkTvURitxI2s4aVObm6qr6zI7W51k54ozTFjvbw1wYMWqeO4U9sQSbr561kp+1T2 # PEsJLOpc5U7N2oDw7ldrcTjWPezsyVMXhDsFitCZunGqFO9+4iVjAjYDN47c6K9x # 7MnAGPYVCBOJUdpy8xAOBIDsTm/K1qTT4wsGbQBxbgg96vwDiA4YP2hKmubIC7Un # rAWQGt/ZKOf6J42roXHS1aPwimDe5C9y6DfuNJp0XqrWtQRqg8hqNkIZWT6jnCfq # u35zB0nf1ERTjdpYLCfQL5fHAgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUw2QV9qUR # UQyMDcCmhTH2oOsNCiQwHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIw # XwYDVR0fBFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w # cy9jcmwvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3Js # MGwGCCsGAQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3Nv # ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENB # JTIwMjAxMCgxKS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEF # BQcDCDAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAN/EHI/80f7v # 29zeWI7hzudcz9QoVwCbnDrUXFHE/EJdFeWI2NnuwOo0/QPNRMFT21LkOqSpFKIh # XXmPurx7p6WDz9wPdu/Sxbgaj0AwviWEDkwGDfDMp2KF8nQT8cipwdfXWbC1ulOI # LayABSHv45mdv1PAkTulsQE8lBTHG4KJLn+vSzZBWKkGaL/wwRbZ4iLiYn68cjkM # JoAaihPgDXn/ug2P3PLNEAFNQgI02tLX0p+vIQ3l2HmSo4bhCBxr3DovsIv5K65N # mLRJnxmrrmIraFDwgwA5XF7AKkPiVkvo0OxU1LAE1c5SWzE4A7cbTA1P5wG6D8cP # jcHsTah1V+zofYRgJnFRLWuBF4Z3a6pDGBDbCsy5NvnKQ76p37ieFp//1I3eB62i # a1CfkjOF8KStpPUqdkXxMjfJ7Vnemd6vQKf+nXkfvA3AOQECJn7aLP01QR5gt8wa # b28SsNUENEyMawT8eqpjtBNJO0O9Tv7NnBE8aOJhhQVdP5WCR90eIWkrDjZeybQx # 8vlo5rfUXIIzXv+k9MgpNGIqwMXfvRLAjBkCNXOIP/1CEQUG72miMVQs5m/O4vmJ # IQkhyqilUDB1s12uhmLYc3yd8OPMlrwIxORB5J9CxCkqvzc6EGYTcwXazPyCp7eW # hzTkNbwk29nfbwmmzcskIAu3StA8lic7MIIHcTCCBVmgAwIBAgITMwAAABXF52ue # AptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv # c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm # aWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgz # MjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD # VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcN # AQEBBQADggIPADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxO # dcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQ # GOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq # /XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVW # Te/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7 # mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De # +JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM # 9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEz # OUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2 # ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqv # UAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q # 4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcV # AgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXS # ZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcC # ARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRv # cnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1 # AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaA # FNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j # cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8y # MDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6 # Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAt # MDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8 # qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7p # Zmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2C # DPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BA # ljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJ # eBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1 # MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz # 138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1 # V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLB # gqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0l # lOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFx # BmoQtB1VM1izoXBm8qGCA1AwggI4AgEBMIH5oYHRpIHOMIHLMQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1l # cmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046OEQwMC0w # NUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wi # IwoBATAHBgUrDgMCGgMVAG76BizYtGFrmkU7v2DcuR/ApGcooIGDMIGApH4wfDEL # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWlj # cm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQELBQACBQDpfyOH # MCIYDzIwMjQwMjIwMTMxMTM1WhgPMjAyNDAyMjExMzExMzVaMHcwPQYKKwYBBAGE # WQoEATEvMC0wCgIFAOl/I4cCAQAwCgIBAAICCsUCAf8wBwIBAAICFbMwCgIFAOmA # dQcCAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAweh # IKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQsFAAOCAQEAmXBA8dOWHOA7B5OFPZEO # TDJKjslTOgQSixrA/3B7ZtNA2W+FfgjjcTu5LvN19Op6S9CPDj3RNAnIHKWNeAoS # s/Pje1bt3/PJr0rSioslen8fIrOyexlOPN5e9AfM7x2kQBPqupkhkRpQLmK59k/Z # DabdJ8RZxCRDvIZfEjUqokYdi9/VFM0i6Uy/MMOqLiopBM8+EYF3vEgrvT+RCkux # vsgII42P2RbvgXLEOtRZUd3Iuzq4DP0UNT8Nt/DVnHyrPTtWgLjYiUDy3apSRASk # vBZ21kRMQsUU9xnl7kuFTvOiBy/vwhNJuuRT7L+M0FVGuhOAATG2GYeui1hqrHb1 # sjGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n # dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMz # AAAB88UKQ64DzB0xAAEAAAHzMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0B # CQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIFXvg4IPkwhHjIH4ioH2 # JxuF5GotNDTnFHIVzFkJVckFMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQg # GLzZNIu24bhWSnzAGYmT9P5ECHzjWwb9oM7DGDo7YugwgZgwgYCkfjB8MQswCQYD # VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe # MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3Nv # ZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAfPFCkOuA8wdMQABAAAB8zAiBCDj # lA76HdDfH992J8+2iCY1N8Oj6sDRgXB3FBcmpPVMzjANBgkqhkiG9w0BAQsFAASC # AgDIFmxUYAoaS3B51M4lO1OLSnwOTh5geIQ4jZCUpJzYkwcrU/wNpGvTtTg1lR1K # ErBTSlK65VeLz/Rt3lTrebJJQWt5zGIpWbesWGNksqHMF386ApmjivNDeiusAuyw # Dx7IB7LpCHWzevD752xWtju34UR+WbEuXjN/StwYhWK0CVxDOMv69vHN/9TaV4Wu # Jzd4mYEfaB8THoFVIjWUO2fzdQ2KaBwzMVEyWrnfYO3gA9Sp1My05ABxB3ziwIa8 # WF7gS1pQALINqS9fzMNTsEy0DdzYxwjUX3wlN7Lk3dY4jbOgCM9YyEM7ppFu8Asn # HsZyRBbD/3zK3BT3/n+h6Q/yO5OxWpxRFGhu25d9E5RFT2cQNK4qZoUtFXx+28r9 # ARObXoAahcIUGRJr7l5ZI+wG3focf3qxVMiImQRgbEQwKgsiuINYOnYZsmSG2p2X # 954KMdxt0OO5cJtV95J5VpvfIsT6hxzyRGD7r7vaIY/Cm7vFgA8+wdmxRBwjTaFV # c8H+j29aiLrMheaBmkQL776WtLZywUo6qIjEHJGOt7W/Xj97HLK6oR0xv2kDdJwK # cYkK7lpwXTn5BzXBIK19AE2z+W+Cty0xSo+AisbCQGlN36lrYk0/AAegYropkdYM # EECm3IWUeChGqIF2/MmATkKvFVJ2r4rL7onNTZ5WmSw8cg== # SIG # End signature block |