Utilities/DLPValidationUtility.ps1


using module "..\CAMP.psm1"
$ExchangeString = "Exchange"
$SharePointString = "SharePoint"
$OneDriveString = "OneDrive"
$TeamsString = "Teams"
$DevicesString = "Devices"

Function Get-DLPPolicyValidation {
    Param
    (
        $SensitiveTypes,
        $Config,
        $LogFile,
        $Name
    )
    $ConfigObjectList = @()
    try {
        $SensitiveTypesWorkloadMapping = @()
        foreach ($SIT in $SensitiveTypes.keys) {
                
            $SensitiveTypesWorkloadMapping += New-Object -TypeName PSObject @{
                Name              = $SIT
                $ExchangeString   = $false
                $SharePointString = $false
                $OneDriveString   = $false
                $TeamsString      = $false
                $DevicesString    = $false
            
            }
        }
        #Getting Custom SIT
        if($($Config["GetDLPCustomSIT"]) -ne "Error")
        {
            $CustomSIT = $($Config["GetDLPCustomSIT"]).Name
            $CustomSITHashTable = @{}
            foreach($SIT in $CustomSIT)
            {
                $CustomSITHashTable[$SIT] = $null
            }

        }

        ForEach ($CompliancePolicy in $Config["GetDlpCompliancePolicy"]) {   
            $PolicySensitiveType = New-Object System.Collections.Generic.HashSet[String]          
            $PolicySensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $SensitiveTypes
            if($($Config["GetDLPCustomSIT"]) -ne "Error")
            {
                $CustomSensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $CustomSITHashTable
                $CustomSensitiveTypeText = $null
                foreach ($SIT in $CustomSensitiveType) {
                    if ($null -ne $CustomSensitiveTypeText) {
                        $CustomSensitiveTypeText += ", $SIT"
                    }
                    else {
                        $CustomSensitiveTypeText += "$SIT"
                    }
                }
            }
            if (($CompliancePolicy.Mode -ieq "enable") ) {
                $WorkloadsStatus = Get-AllLocationenabled -CompliancePolicy $CompliancePolicy 
                $EnabledWorkload = $null
                $DisabledWorkload = ""       
                $PolicySensitiveTypeText = $null
                foreach ($Workload in ($WorkloadsStatus.Keys | Sort-Object -CaseSensitive)) {
                    if ($WorkloadsStatus[$Workload] -eq $true) {
                        if ( $null -ne $EnabledWorkload) {
                            $EnabledWorkload += ", $($Workload)"
                        }
                        else {
                            $EnabledWorkload += "$($Workload)"
                        }
                        foreach ($SIT in $PolicySensitiveType) {
                            if ($SITToChange = $SensitiveTypesWorkloadMapping | Where-Object { $_.Name -eq $SIT }) {
                                $SITToChange.$($Workload) = $true
                            }                        
                        }
                                     
                    }
                    else {
                        $DisabledWorkload += "$($Workload) "                 
                    }           
                }
                
                foreach ($SIT in $PolicySensitiveType) {
                    if ($null -ne $PolicySensitiveTypeText) {
                        $PolicySensitiveTypeText += ", $SIT"
                    }
                    else {
                        $PolicySensitiveTypeText += "$SIT"
                    }
                }
            
               
                If ($PolicySensitiveType.Count -ne 0 ) {   
                    $ConfigObject = [CAMPCheckConfig]::new()
                    $Workload = $CompliancePolicy.Workload
                    $ConfigObject.Object = "$($CompliancePolicy.Name)"
                    if($null -eq $CustomSensitiveTypeText)
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText"
                    
                    }
                    else
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText"
                    }
                    $ConfigData = ""
                    $ConfigObjectResult = @{}
                    $ConfigObjectResult = Set-ExchangeNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-SharePointNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-OneDriveNotAllLocationEnabledConfigObject  -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-TeamsNotAllLocationEnabledConfigObject  -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-DevicesNotAllLocationEnabledConfigObject  -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigData = "<strong>Enabled Workloads </strong>: $($EnabledWorkload)<BR/>"
                    foreach ($ConfigResult in $ConfigObjectResult.keys) {
                        $ConfigData += "<strong>$ConfigResult </strong>: $($ConfigObjectResult[$ConfigResult])<BR/>"
                            
                    }
                    $NotInOrganizationAccessScope = $Config["GetDlpComplianceRule"] | Where-Object {$_.AccessScope -eq "NotInOrganization" -and $_.ParentPolicyName -eq "$($CompliancePolicy.Name)"} 
                    if($null -ne $NotInOrganizationAccessScope)
                    {
                        $ConfigData += "<strong>Access Scope</strong>: For users outside organization<BR/>"
                       
                    }else{
                        $ConfigData += "<strong>Access Scope</strong>: For users inside organization<BR/>"
                    }
                    $ConfigObject.ConfigData = "$ConfigData"
                    $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass")   
                    $ConfigObjectList += $ConfigObject
    
                }
                
            }   
            else {
                If ($PolicySensitiveType.Count -ne 0 ) {   
                    $ConfigObject = [CAMPCheckConfig]::new()
                    $Workload = $CompliancePolicy.Workload
                    $ConfigObject.Object = "$($CompliancePolicy.Name)"
                    $PolicySensitiveTypeText = $null
                    foreach ($SIT in $PolicySensitiveType) {
                        if ($null -ne $PolicySensitiveTypeText) {
                            $PolicySensitiveTypeText += ", $SIT"
                        }
                        else {
                            $PolicySensitiveTypeText += "$SIT"
                        }
                    }
                    if($null -eq $CustomSensitiveTypeText)
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText"
                    
                    }
                    else
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText"
                    }
                    $Mode = $($CompliancePolicy.Mode)
                    if ( $Mode -eq "TestWithoutNotifications") {
                        $Mode = "test without notifications"
                    }
                    elseif ($Mode -eq "Disable") {
                        $Mode = "disabled"
                    }
                    elseif ( $Mode -eq "TestWithNotifications") {
                        $Mode = "test with notifications"
                    }
                   
                    $ConfigObject.ConfigData = "<B>Policy is in $Mode state.<B>"
                    $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass")   
    
                    $ConfigObjectList += $ConfigObject
                }
            }
               
        }
        $ConfigObjectList = Get-SensitiveTypesNotEnabled -SensitiveTypesWorkloadMapping $SensitiveTypesWorkloadMapping -ConfigObjectList $ConfigObjectList -LogFile $LogFile
         
    }
    catch {
        Write-Host "Error:$(Get-Date) There was an issue while running CAMP. Please try running the tool again after some time." -ForegroundColor:Red
        $ErrorMessage = $_.ToString()
        $StackTraceInfo = $_.ScriptStackTrace
        Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue
        
    }
    Return $ConfigObjectList
}

Function Get-NoPolicyRemediationAction {
    [CmdletBinding()]
    Param
    (
        $Name,
        $PendingSensitiveTypes
      
    )
    $RemediationActionScript = ""

    $PendingSensitiveTypesList = $PendingSensitiveTypes.split(",") 
    $LowCountSenstiveinfodetails = ""
    $HighCountSenstiveinfodetails = ""

    foreach ($PendingSensitiveType in $PendingSensitiveTypesList) {
        $PendingSensitiveTypetrim = $PendingSensitiveType.trim() 
        if ( $LowCountSenstiveinfodetails -eq "") {
            $LowCountSenstiveinfodetails += "@{Name =" + [char]34
            $HighCountSenstiveinfodetails += "@{Name =" + [char]34

        }
        else {
            $LowCountSenstiveinfodetails += ",@{Name =" + [char]34
            $HighCountSenstiveinfodetails += ",@{Name =" + [char]34

        }
        $LowCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34
        $LowCountSenstiveinfodetails += ";minCount = ""1"""
        $LowCountSenstiveinfodetails += ";maxCount = ""5""}"
        $HighCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34
        $HighCountSenstiveinfodetails += ";minCount = ""6""}"
    }
                

    $NewPolicyTemplateData = Get-Content "$PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt"
    if ($null -eq $NewPolicyTemplateData -or $NewPolicyTemplateData -eq "") {
        Write-Host "$(Get-Date) Template file does not exist/is corrupt in $PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt. Remediation wont be generated" -ForegroundColor Orange           
    }
    else {
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<NewPolicyName>", "$Name")
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighSensitiveInfoDetails>", "$HighCountSenstiveinfodetails")
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowSensitiveInfoDetails>", "$LowCountSenstiveinfodetails")
        $LowRuleName = "Low Volume $Name"
        if ($LowRuleName.length -gt 60) { $LowRuleName = $LowRuleName.substring(0, 60) }
        $HighRuleName = "High Volume $Name"
        if ($HighRuleName.length -gt 60) { $HighRuleName = $HighRuleName.substring(0, 60) }
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighVolumeRuleName>", "$HighRuleName")
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowVolumeRuleName>", "$LowRuleName")
  
        $RemediationActionScript += $NewPolicyTemplateData
        Write-Host "$(Get-Date) Generating Remediation Action for $Name" -ForegroundColor Yellow 
    }
              
    Return $RemediationActionScript
}
Function Get-PolicySensitiveType {
    Param
    (
        $Config,
        $CompliancePolicy,
        $SensitiveTypes
    )
    $PolicySensitiveTypes = New-Object System.Collections.Generic.HashSet[String]          
    foreach ($ComplianceRule in $Config["GetDlpComplianceRule"]) {

        if ($ComplianceRule.Mode -ieq "enforce" -and $CompliancePolicy.name -eq $($ComplianceRule.ParentPolicyName) ) {
            $SensitiveInformationContent = $ComplianceRule.ContentContainsSensitiveInformation

            foreach ($SensitiveType in $($SensitiveTypes.keys)) {
                if ($SensitiveInformationContent.Values -contains $SensitiveType) {
                    if (!$PolicySensitiveTypes.Contains($SensitiveType)) {
                        $PolicySensitiveTypes.Add("$SensitiveType") |  Out-Null 

                    }

                }
                if ($($SensitiveInformationContent.keys) -contains "groups") {
                    foreach ($SensitiveInformationGroupList in $SensitiveInformationContent) {
                        $SensitiveInformationGroups = $SensitiveInformationGroupList["groups"]
                        foreach ($SensitiveInformationGroupDefined in $SensitiveInformationGroups) {
                            $SensitiveInformationGroupDefinedValues = $SensitiveInformationGroupDefined.Values 
                            foreach ($SensitiveInformationGroupValue in $SensitiveInformationGroupDefinedValues) {
                                foreach ($SensitiveInformationGroupVal in $SensitiveInformationGroupValue) {
                                    if ($SensitiveInformationGroupVal.Values -contains $SensitiveType ) {
                                        if (!$PolicySensitiveTypes.Contains($SensitiveType)) {
                                            $PolicySensitiveTypes.Add("$SensitiveType") |  Out-Null 

                                        }
                                    }
      
                                }
     
                            }
                        }
                    }
    
                }
            }
                            

                           
        }
    }

    Return $PolicySensitiveTypes
}

Function Get-SensitiveTypesNotEnabled {
    Param
    (
        $SensitiveTypesWorkloadMapping,
        $LogFile,
        $ConfigObjectList
    )   

     
    $PendingSensitiveType = $null
    $PartialCoveredSIT = $null
    $PartialCoveredWorkload = $null
    foreach ($SensitiveTypes in $SensitiveTypesWorkloadMapping) {
        if (($SensitiveTypes.$ExchangeString -eq $false ) -and ($SensitiveTypes.$SharePointString -eq $false ) -and 
            ($SensitiveTypes.$TeamsString -eq $false ) -and ($SensitiveTypes.$OneDriveString -eq $false ) -and ($SensitiveTypes.$DevicesString -eq $false ) ) {
            $PendingSensitiveType = Get-PartialSIT -PartialCoveredSIT $PendingSensitiveType -SensitiveTypesName $($SensitiveTypes.Name)

        }
        else {

            if ($SensitiveTypes.$ExchangeString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $ExchangeString
            }
    
            if ($SensitiveTypes.$SharePointString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $SharePointString
    
            } 
            if ($SensitiveTypes.$OneDriveString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $OneDriveString
            }
            if ($SensitiveTypes.$TeamsString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $TeamsString
            }
            if ($SensitiveTypes.$DevicesString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $DevicesString
            }
    
        }

        
     
        
    }
   

   
    if ($null -ne $PartialCoveredSIT) {
        $ConfigObject = [CAMPCheckConfig]::new()
        $ConfigObject.Object = "<B>Policy defined but not protected on 1 or more workloads<B>"
        $ConfigObject.ConfigItem = "$PartialCoveredSIT"
        $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $PartialCoveredWorkload"
        $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail")            
        $ConfigObjectList += $ConfigObject
    }
    if ($null -ne $PendingSensitiveType) { 
                   
        $ConfigObject = [CAMPCheckConfig]::new()
        $ConfigObject.Object = "<B>No active policy defined<B>"
        $ConfigObject.ConfigItem = "$PendingSensitiveType"
        $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $ExchangeString, $SharePointString, $TeamsString, $OneDriveString, $DevicesString"
        $ConfigObject.InfoText ="It is recommended that you set up DLP policies that block access for users external to your organization for all Sensitive Information Types on all workloads."
        try {
            $ConfigObject.RemediationAction = Get-NoPolicyRemediationAction -Name $Name -PendingSensitiveTypes $PendingSensitiveType -ErrorAction:SilentlyContinue        
        }
        catch {
            Write-Host "Warning:$(Get-Date) There was an issue in generating remediation script. Please review the script closely before running the same." -ForegroundColor:Yellow
            $ErrorMessage = $_.ToString()
            $StackTraceInfo = $_.ScriptStackTrace
            Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue
        }
        $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail")            
        $ConfigObjectList += $ConfigObject
    }
    
    Return $ConfigObjectList
}
function Get-PartialSIT {
    Param
    (
        $PartialCoveredSIT,
        $SensitiveTypesName

    )
    if ((@($PartialCoveredSIT) -like "*$SensitiveTypesName*").Count -le 0) { 
        if ($null -eq $PartialCoveredSIT) {
            $PartialCoveredSIT += "$SensitiveTypesName"
        
        }
        else {            
            $PartialCoveredSIT += ", $SensitiveTypesName" 
        } 
    }
    return $PartialCoveredSIT
}
function Get-PartialSITWorkLoad {
    Param
    (
        $PartialCoveredWorkload,
        $WorkloadName

    )
    if ((@($PartialCoveredWorkload) -like "*$WorkloadName*").Count -le 0) {
        if ($null -eq $PartialCoveredWorkload) {
            $PartialCoveredWorkload += $WorkloadName
            
        }
        else {            
            $PartialCoveredWorkload += ", $WorkloadName" 
        } 
    }
    return $PartialCoveredWorkload
}


Function Get-AllLocationenabled {
    Param
    (
        $CompliancePolicy
    )
    $ExchangeLocation = $CompliancePolicy.ExchangeLocation
    $SharePointLocation = $CompliancePolicy.SharePointLocation
    $OneDriveLocation = $CompliancePolicy.OneDriveLocation
    $TeamsLocation = $CompliancePolicy.TeamsLocation
    $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation   
    $WorkloadsStatus = @{}
    $WorkloadsStatus[$ExchangeString] = $false
    $WorkloadsStatus[$SharePointString] = $false
    $WorkloadsStatus[$OneDriveString] = $false
    $WorkloadsStatus[$TeamsString] = $false
    $WorkloadsStatus[$DevicesString] = $false
    if ((@($ExchangeLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$ExchangeString] = $true
    }
    if ((@($SharePointLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$SharePointString] = $true
    }
    if ((@($OneDriveLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$OneDriveString] = $true
    }
    if ((@($TeamsLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$TeamsString] = $true
    }
    if ((@($EndpointDlpLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$DevicesString] = $true
    }

    Return $WorkloadsStatus

    
}


Function Set-ExchangeNotAllLocationEnabledConfigObject {
    Param
    (
        
        $ConfigObjectResult,
        $CompliancePolicy
    )

    $ExchangeLocation = $CompliancePolicy.ExchangeLocation
    $ExchangeSenderException = $CompliancePolicy.ExchangeSenderException
    $ExchangeSenderMemberOf = $CompliancePolicy.ExchangeSenderMemberOf
    $ExchangeSenderMemberOfException = $CompliancePolicy.ExchangeSenderMemberOfException

    if (((@($ExchangeLocation) -like 'All').Count -lt 1)) {          
        if (@($ExchangeLocation).count -ne 0) {
            
            $ConfigObjectResult["Included Exchange Groups"] += "$ExchangeLocation " 
                    
        }
    }

    if ($ExchangeSenderMemberOf.count -ne 0) {
    
        if ($ConfigObjectResult.contains("Included Exchange Groups")) {
            $ConfigObjectResult["Included Exchange Groups"] += ", $ExchangeSenderMemberOf " 
        }
        else {
            $ConfigObjectResult["Included Exchange Groups"] = "$ExchangeSenderMemberOf " 

        }

    }
    if (($ExchangeSenderMemberOfException.count -ne 0) -or ($ExchangeSenderException.count -ne 0) ) {
        
        $ConfigObjectResult["Excluded Exchange Groups"] += "$ExchangeSenderMemberOfException $ExchangeSenderException " 

    }
    Return $ConfigObjectResult
                               
}

function Set-SharePointNotAllLocationEnabledConfigObject {
    Param
    (
        $ConfigObjectResult,
        $CompliancePolicy
     
    )
    $SharePointLocation = $CompliancePolicy.SharePointLocation
    $SharePointLocationException = $CompliancePolicy.SharePointLocationException
    $SharePointOnPremisesLocationException = $CompliancePolicy.SharePointOnPremisesLocationException

    if (((@($SharePointLocation) -like 'All').Count -lt 1)) {  
        if (@($SharePointLocation).count -ne 0) {
            
            $ConfigObjectResult["Included SP Sites"] += "$SharePointLocation " 
        }
    }
    
    if (($SharePointLocationException.count -ne 0) -or ($SharePointOnPremisesLocationException.count -ne 0)) { 
        
        $ConfigObjectResult["Excluded SP Sites"] += "$SharePointLocationException $SharePointOnPremisesLocationException " 
    }
    
    Return $ConfigObjectResult
                               
}

function Set-TeamsNotAllLocationEnabledConfigObject { 
    Param
    (
        $ConfigObjectResult,
        $CompliancePolicy
    )

    $TeamsLocation = $CompliancePolicy.TeamsLocation
    $TeamsLocationException = $CompliancePolicy.TeamsLocationException
   
    if (((@($TeamsLocation) -like 'All').Count -lt 1)) {  
        if (@($TeamsLocation).count -ne 0) {
            
            $ConfigObjectResult["Included Teams Account"] += "$TeamsLocation" 
        }
    }
   
    if (($TeamsLocationException.count -ne 0)) {
        
        $ConfigObjectResult["Excluded Teams Account"] += "$TeamsLocationException" 
    }
    Return $ConfigObjectResult
                               
}
function Set-OneDriveNotAllLocationEnabledConfigObject {
    Param
    (
        $ConfigObject,
        $PolicySensitiveType,
        $CompliancePolicy
        
    )
    $OneDriveLocation = $CompliancePolicy.OneDriveLocation
    $OneDriveLocationException = $CompliancePolicy.OneDriveLocationException
    $ExceptIfOneDriveSharedByMemberOf = $CompliancePolicy.ExceptIfOneDriveSharedByMemberOf

    if (((@($OneDriveLocation) -like 'All').Count -lt 1)) {  
        if (@($OneDriveLocation).count -ne 0) {
            
            $ConfigObjectResult["Included OneDrive Account"] += "$OneDriveLocation" 
        }

    }
 
    if (($OneDriveLocationException.count -ne 0) -or ($ExceptIfOneDriveSharedByMemberOf.count -ne 0)) {
        
        $ConfigObjectResult["Excluded OneDrive Account"] += "$OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf" 
        
    }
    Return $ConfigObjectResult
                               
}
function Set-DevicesNotAllLocationEnabledConfigObject {
    Param
    (
        $ConfigObject,
        $PolicySensitiveType,
        $CompliancePolicy
        
    )
    $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation
    $EndpointDlpLocationException = $CompliancePolicy.EndpointDlpLocationException

    if (((@($EndpointDlpLocation) -like 'All').Count -lt 1)) {  
        if (@($EndpointDlpLocation).count -ne 0) {
            
            $ConfigObjectResult["Included Devices User/Groups"] += "$EndpointDlpLocation" 
        }

    }
 
    if (($EndpointDlpLocationException.count -ne 0)) {
        
        $ConfigObjectResult["Excluded Devices User/Groups"] += "$EndpointDlpLocationException" 
        
    }
    Return $ConfigObjectResult
                               
}
# SIG # Begin signature block
# MIIlxwYJKoZIhvcNAQcCoIIluDCCJbQCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC1UJ0X7GbeTG63
# 8z5lcowa1rZlYPf8mlQaEpvPdKW5RKCCC6EwggUGMIID7qADAgECAhMzAAAE4xrK
# 0/aegtm7AAEAAATjMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD
# QSAyMDEwMB4XDTIxMDkwMjE5MjYyOFoXDTIyMDkwMTE5MjYyOFowfDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdQ29kZSBTaWdu
# IFRlc3QgKERPIE5PVCBUUlVTVCkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
# AoIBAQDokaNBqvPFgH8yAnEicnWyLoQ58nf7j+B20b5uqsDq9EXWyt87+Wc9CCFh
# +9gxWx6wx+iRsO/yT8SZhxi/w00uxM5jDWnbAbSIMB2VrNnLGNOxAQj674zPskBs
# ecseXAMHA/+o5ujZOse4EorLmTfJ5f/Zzun8KVVwlSd1CVlj0hgk28xmTdLV7ZWw
# 0wV9e/0p/XOHSRUNWw8gFfIfzli3oVV4H/DzT2o1jD4HIt3QIX1kRRXVqleASUgD
# Z6/6JthrKti4xfyMdSUGyXuxEoe6zZ4EOXltaHw7hqZzH2Ufl3UxB6HmdxvG9BI4
# 3LVKq3pFO+Nj3NdMVkyptnjDJnGpAgMBAAGjggGCMIIBfjATBgNVHSUEDDAKBggr
# BgEFBQcDAzAdBgNVHQ4EFgQUPMsdBtvwLsgDf0B50WrJSL+NYrEwUAYDVR0RBEkw
# R6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNv
# MRYwFAYDVQQFEw0yMzAwNzIrNDY3NjA2MB8GA1UdIwQYMBaAFL9loqtvdaNORZZX
# Bc85h/TAFRwcMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly93d3cubWljcm9zb2Z0
# LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0ElMjAyMDEw
# KDEpLmNybDBpBggrBgEFBQcBAQRdMFswWQYIKwYBBQUHMAKGTWh0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGVzdGluZyUy
# MFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQAD
# ggEBAAylFduuUCCNS+ejRtNeqm7geSoNzl+E0wbGZi4W9+rqo972KaS338FB5Y5G
# 8PNqaN3RNqNaHra/zI97JaLYjrZ+iCmKMzROdVS5cR/WpAla36J/tpuVSvNwwvW1
# 5KHRv6PEzGQ7BQYU55cMTkUwNtRVbARMdjcFa3pbuIkioVsoFNVOZ4e8aOSPV+Vz
# PVmOU2xltmM/8IOgTSfFTCJhqY7d/vjqajXAXg2olbbJ2vX051uUuFfIyfo/5xJS
# uyWOUCZ1opzXHy5EwrkmdZs6orQtMy1akT6UYjl4x5VZsqiszDshDNjVgRUdR97M
# d7NxQZEScdZfoTf0byI8Cwtp8JIwggaTMIIEe6ADAgECAhMzAAAALTV6RojJB3HY
# AAAAAAAtMA0GCSqGSIb3DQEBCwUAMIGQMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMTowOAYDVQQDEzFNaWNyb3NvZnQgVGVzdGluZyBSb290IENl
# cnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIwMTIxMDIwNDMyMFoXDTM1MDYx
# NzIxMDQxMVoweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEj
# MCEGA1UEAxMaTWljcm9zb2Z0IFRlc3RpbmcgUENBIDIwMTAwggEiMA0GCSqGSIb3
# DQEBAQUAA4IBDwAwggEKAoIBAQC/PGCBq77s/9cXY/KmQtETYpywF866Rhp7Ii5V
# c5pUucbU0cqY/ndHDY6d8F7M+FTv8s8q1GLxqTQKBNfFBYbyEPVN05YIZoXbAn0Y
# 3OJ6I6eaKV2ueRjPDGPwGv+BqalDP6kLuVHxs0g6/EQuXxHFVjr/yg7NiAjB/cfV
# 9T7v6k4bcosjvUU3nh9wwafJuCBz7fNsPYshBc93Ev6h3AfpDVt4CWwyVRBH0DfI
# x/f6c/5GNORWFqg3ZFPWNfvDgLaOtoaRoRDWwUr243rUEQqy3i6eEJfgga4SXYgB
# XcykxChSnGDwCuaIr0vpV4rsow83Hin2XSHT19pdDslO241tAgMBAAGjggH6MIIB
# 9jAOBgNVHQ8BAf8EBAMCAYYwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3
# FQIEFgQU6p9fM7bQX56t6y2mwQK7QDjL57UwHQYDVR0OBBYEFL9loqtvdaNORZZX
# Bc85h/TAFRwcMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w
# GQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV
# HSMEGDAWgBSjAQR+MIgz67kxnMrrhXZn/GW00TBZBgNVHR8EUjBQME6gTKBKhkho
# dHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNUZXNS
# b29DZXJBdXRfMjAxMC0wNi0xNy5jcmwwgY0GCCsGAQUFBwEBBIGAMH4wTQYIKwYB
# BQUHMAKGQWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGVz
# Um9vQ2VyQXV0XzIwMTAtMDYtMTcuY3J0MC0GCCsGAQUFBzABhiFodHRwOi8vb25l
# b2NzcC5taWNyb3NvZnQuY29tL29jc3AwDQYJKoZIhvcNAQELBQADggIBACe00IWy
# nswPpCpTc9Vt2tcxAMj2/2PI9gERtRiS2ty0+a8m6PxKeb3BZ7CIA3llzzU1BViO
# 4oMGlvW6fhJZUJvg8NU9nQnzu0bNh7104nfQRgZ6IhppK2QsuYs5gAzqgiciojBX
# IiTZIT+raUa3w6/Bxl682Y+RViOTqfImLkR29LpyI9GZb1tFZFPilZTxtkhAv3fw
# sTiUc5ACLGsBCJZ6zlLOnZTzkTSct1oOvnD8jbwn9nX7jNbU1qjWmtUI6quiyeg1
# R9V/WS+zB9bcVjaXU+IBinywbI7nsZrO1d0GgQ4FwMt519w+tr340t0QXfo2QTSD
# 711uiQVjsrGFQnxakyIKY3jKP0soUu9Bty0Ywklj0TAcWJ+bamBqJpp8oXUbLP42
# u4nMQSCnKwyj9/0BUFD+oJ09BAYRandAMhp5/i2z1BPH5GYMoIEMxMUuAWaaFu1R
# jQlaMuQqfuyjP8shwNSV7+nlOIUPhWF9mcBy9hAdd+6yWfKn7K6FbMBKcBA2c4g7
# p9zUkUjCQORwz6T9Oyl8BqPMeihIDBeSs5auNENXrAjRjMxUesTJDSFnk2chdsve
# WtOQ4+N/c0G7WdpI0RrJJ25K0NsVWNXdNegQ0SdmK6AkphLCaHOhgczWeCKk3ms1
# 2omIrm6SnoTwsPOLeXn/tdy0lBjf5mAcMmiyMYIZfDCCGXgCAQEwgZAweTELMAkG
# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9z
# b2Z0IFRlc3RpbmcgUENBIDIwMTACEzMAAATjGsrT9p6C2bsAAQAABOMwDQYJYIZI
# AWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGC
# NwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIDXZJnOyJensgmSq
# MrRyPhgUOo/BmCVdkmhprmpLYmAKMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkA
# YwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZI
# hvcNAQEBBQAEggEAcEOpporDHqOz9/ER94LBzYbR99pCmHxnZDBqK1UElA3cTmJ0
# e56qM06BxXkHojoxE6GNZxbY94b9agjTBABU2H6vCRHpw171RmlCTqAMVY0ys91/
# 95mTXdD1CRM1K/M1411hsD3abe9QL+PtFIxhqnV9Wsu6RxrgBwjpDmuZszIto5nQ
# YDD0vgTShWuzf/WzSS2vMnKnbx1rXqR4M5SLpaAHQzxHVs4DTq47LLZ16btBs1xk
# SJiZijrlFUxF/rJRkFuso3w+EYkw3fAg/Tv/byUJ2vrq0y0/J4Kmc15xDm17W8wn
# ZRSnxrJ4iPEtCoZ/7fF42oaDorC++6eEdZx4qKGCFwswghcHBgorBgEEAYI3AwMB
# MYIW9zCCFvMGCSqGSIb3DQEHAqCCFuQwghbgAgEDMQ8wDQYJYIZIAWUDBAIBBQAw
# ggFUBgsqhkiG9w0BCRABBKCCAUMEggE/MIIBOwIBAQYKKwYBBAGEWQoDATAxMA0G
# CWCGSAFlAwQCAQUABCCbvOd3cjE5djzw+WI6Stb6mTGAf7Vp/0jh7qgHYmxj1wIG
# YoS4nYwoGBIyMDIyMDYxMDEwMDUwMS4xM1owBIACAfSggdSkgdEwgc4xCzAJBgNV
# BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
# HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29m
# dCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVT
# TjpEOURFLUUzOUEtNDNGRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
# U2VydmljZaCCEV8wggcQMIIE+KADAgECAhMzAAABrGa8hyJd3j17AAEAAAGsMA0G
# CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
# MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
# b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIy
# MDMwMjE4NTEyOVoXDTIzMDUxMTE4NTEyOVowgc4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25z
# IFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpEOURFLUUzOUEt
# NDNGRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIw
# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMd4C1DFF2Lux3HMK8AElMdTF4iG
# 9ROyKQWFehTXe+EX1QOrTBFnhMAKNHIQWoxkK1W62/oQQQmtIHo8sphMt1WpkLNv
# Cm3La8sdVL3t/BAx7UWkmfvujJ3KDaSgt3clc5uNPUj7e32U4n/Ep9oOc+Pv/EHc
# 7XGH1fGRvLRYzwoxP1xkKleusbIzT/aKn6WC2BggPzjHXin9KE7kriCuqA+JNhsk
# kedTHJQIotblR+rZcsexTSmjO+Z7R0mfeHiU8DntvZvZ/9ad9XUhDwUJFKZ8ZZvx
# nqnZXwFYkDKNagY8g06BF1vDulblAs6A4huP1e7ptKFppB1VZkLUAmIW1xxJGs3k
# eidATWIVx22sGVyemaT29NftDp/jRsDw/ahwv1Nkv6WvykovK0kDPIY9TCW9cRbv
# UeElk++CVM7cIqrl8QY3mgEQ8oi45VzEBXuY04Y1KijbGLYRFNUypXMRDApV+kcj
# G8uST13mSCf2iMhWRRLz9/jyIwe7lmXz4zUyYckr+2Nm8GrSq5fVAPshIO8Ab/aO
# o6/oe3G3Y+cil8iyRJLJNxbMYxiQJKZvbxlCIp+pGInaD1373M7KPPF/yXeT4hG0
# LqXKvelkgtlpzefPrmUVupjYTgeGfupUwFzymSk4JRNO1thRB0bDKDIyNMVqEuvV
# 1UxdcricV0ojgeJHAgMBAAGjggE2MIIBMjAdBgNVHQ4EFgQUWBGfdwTLH0BnSjx8
# SVqYWsBAjk0wHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0f
# BFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv
# TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsG
# AQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAx
# MCgxKS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkq
# hkiG9w0BAQsFAAOCAgEAedC1AlhVXHCldk8toIzAW9QyITcReyhUps1uD67zCC30
# 8fRzYFES/2vMX7o0ObJgzCxT1ni0vkcs8WG2MUIsk91RCPIeDzTQItIpj9ZTz9h0
# tufcKGm3ahknRs1hoV12jRFkcaqXJo1fsyuoKgD+FTT2lOvrEsNjJh5wEsi+PB/m
# Vmh/Ja0Vu8jhUJc1hrBUQ5YisQ4N00snZwhOoCePXbdD6HGs1cmsXZbrkT8vNPYV
# 8LnI4lxuJ/YaYS20qQr6Y9DIHFDNYxZbTlsQeXs/KjnhRNdFiCGoAcLHWweWeRsz
# h2iUhMfY1/79d7somfjx6ZyJPZOr4fE0UT2l/rBaBTroPpDOvpaOsY6E/teLLMfy
# nr6UOQeE4lRiw59siVGyAGqpTBTbdzAFLBFH40ubr7VEldmjiHa14EkZxYvcgzKx
# Kqub4yrKafo/j9aUbwLrL2VMHWcpa18Jhv6zIjd01IGkUdj3UJ+JKQNAz5eyPyQS
# ZPt9ws8bynodGlM5nYkHBy7rPvj45y+Zz7jrLgjgvZIixGszwqKyKJ47APHxrH8G
# jCQusbvW9NF4LAYKoZZGj7PwmQA+XmwD5tfUQ0KuzMRFmMpOUztiTAgJjQf9TMuc
# 3pYmpFWEr8ksYdwrjrdWYALCXA/IQXEdAisQwj5YzTsh4QxTUq+vRSxs93yB3nIw
# ggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUA
# MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQD
# EylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0y
# MTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
# IFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0
# ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveV
# U3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTI
# cVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36M
# EBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHI
# NSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxP
# LOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2l
# IH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDy
# t0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymei
# XtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1
# GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgV
# GD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQB
# gjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTu
# MB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsG
# AQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUH
# AwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD
# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB
# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j
# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQAD
# ggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/
# 2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvono
# aeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRW
# qveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8Atq
# gcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7
# hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkct
# wRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu
# +yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FB
# SX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/
# Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ
# 8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIC0jCCAjsCAQEw
# gfyhgdSkgdEwgc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# KTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYD
# VQQLEx1UaGFsZXMgVFNTIEVTTjpEOURFLUUzOUEtNDNGRTElMCMGA1UEAxMcTWlj
# cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAsRrSE7C4
# sEn96AMhjNkXZ0Y1iqCggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
# MjAxMDANBgkqhkiG9w0BAQUFAAIFAOZNiHswIhgPMjAyMjA2MTAxMzA4MTFaGA8y
# MDIyMDYxMTEzMDgxMVowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA5k2IewIBADAK
# AgEAAgIcAwIB/zAHAgEAAgIRCTAKAgUA5k7Z+wIBADA2BgorBgEEAYRZCgQCMSgw
# JjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3
# DQEBBQUAA4GBAC9z3Af0W+B5k4CGUuPjVoS4k1Tdi/kcBi9pdJoGPr02nLj5lWGt
# JQaZsVKIZsZnrP+4MX+oE/Au113trx3GJWz4LKogMRrd+jUq8f2HHvuPs4+AGIi2
# 0+udv2erMLE3hoemf5USc/kHh+SnCpm9aXxSeFV9IaEb+evUSwJHAzGSMYIEDTCC
# BAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
# MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGsZryH
# Il3ePXsAAQAAAawwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsq
# hkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgdU6m3ESHsarqzRzLa51CTWKm+JAo
# bqGx3AY31m/BZ78wgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCD5twGSgzgv
# CXEAcrVz56m79Pp+bQJf+0+Lg2faBCzC9TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVT
# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
# LVN0YW1wIFBDQSAyMDEwAhMzAAABrGa8hyJd3j17AAEAAAGsMCIEIFKhW6fJTJAu
# loO1NYSSOs0Y0kAojjIXDWi0WFagsP1PMA0GCSqGSIb3DQEBCwUABIICAIX20Re8
# GemfbcZdAFASFFqtqOngbsrAb0V/9coHreVVLHDNGYEk+zbtCHNJgHlwOI6SIc2+
# nSxRASAj7LnvvUml3NRupIA7mbuf4Y1R1HOg8V/73uLRJ3xvSNqS82OFUB97fwUE
# Fv3ZGd7NYVzCZVQMOnpVkd9VNcwvdqa+gG049N8VIXaDMQC9p+vM05oOZpXjPitZ
# p/pkn5LVDSOZ8FSKvuBQkfbvj3keQujie3m2MNzitDnAZhvxbMwq7BbFabKyXdnC
# mGpaucy0/6IZFMgA3GPBw6/7MQV7G3iDGffsYq9tWhDoGh5JRoG20KSL3bE7fhOF
# B6xN6/BaMXrqfJ9o2Y1xPZyH5ZSWf+f9aRN/yV+ewq59OO4uK3jys/PNnnCFBtUO
# A2Tn9+WyrTuBaG0heyiGFb7vY5r7ZowyafcHY0TRyC3GAVBApxxXA2YEESDvsUxL
# SOZZiE1JpgZCQwpzPBjlgVWB71nraAx6P9OG1LdBDAq++lo/XuAqAtSM/wIOhl0Q
# WUJb8CXvRH+ya11Zcm9AWHx4GHyJbzsks5omyfxISKHtHVb84g6UzduWEqpJ7B6M
# PtYHk1xjiQWPHyQRL7v2obZhkN3vB/pWuOa4yybFOskWd2MJIO6vQFKiJZjmenlw
# rF7Pa8+rywSomYCzt/Tum0zvVA1oFCNCXLM+
# SIG # End signature block