DSCResources/Cisco_UcsManagedObject/Cisco_UcsManagedObject.psm1

# DSC uses the Get-TargetResource function to fetch the status of the resource instance specified in the parameters for the target machine
function Get-TargetResource 
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param 
    (       
        [ValidateSet("Present", "Absent")]
        [string]$Ensure = "Present",
        
        [parameter(Mandatory = $true)]
        [System.String]
        $Identifier,

        [parameter(Mandatory = $true)]
        [System.String]
        $UcsConnectionString,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $UcsCredentials,

        [System.Management.Automation.PSCredential]
        $WebProxyCredentials,
        
        [string]$ClassId,

        [string]$PropertyMap,

        [parameter(Mandatory = $true)]
        [System.String] $Dn,
        
        [bool] $ModifyPresent,

        [ValidateSet("Add", "Set")]
        [string]$Action = "Add"
                
    )
       try
       {
            Write-Verbose("Started execution of Get-TargetResource method")
            Write-Verbose("Connecting to UCS...")
            $handle=  Get-UcsConnection -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -WebProxyCredentials $WebProxyCredentials
            # $propMap= ConvertFrom-StringData -StringData $PropertyMap
            if(![string]::IsNullOrEmpty($Dn))
            {
                Write-Verbose("Fetching Mo for Dn:$Dn")
                $mo= Get-UcsMo -Dn $Dn -Ucs $handle
            }
            else
            {
                Write-Verbose("Dn both are not null or empty. ")
            }
            Write-Verbose("Disconnecting UCS...")
            Disconnect-Ucs -Ucs $handle
            Write-Verbose("UCS Disconnected")
             <# #>
            if($mo -ne $null)
            {
                Write-Verbose("Ensure = Present")
                $Ensure = "Present"
            }
            else
            {   Write-Verbose("Ensure =Absent")
                $Ensure = "Absent"
            }  
            $result = @{
                          Identifier = $Identifier;
                          Ensure =$Ensure;
                          ClassId= $ClassId;
                          PropertyMap =$PropertyMap;
                          Dn= $Dn;
                          ModifyPresent= $ModifyPresent;
                          UcsConnectionString= $UcsConnectionString;
                          UcsCredentials=$null;
                          WebProxyCredentials=$null;
                          Action=$Action;
                        }
        }
        catch
        {
            Write-Verbose("Error occurred in Get-TargetResoucrce. Disconnecting UCS(s)...")
            if($handle -ne $null)
             {$temp = Disconnect-Ucs -Ucs $handle}

            throw
        }
        Write-Verbose("Completed execution of Get() method")
        $result;
} 

function Set-TargetResource 
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    param 
    (       
        [ValidateSet("Present", "Absent")]
        [string]$Ensure = "Present",
        
        [parameter(Mandatory = $true)]
        [System.String]
        $Identifier,

        [parameter(Mandatory = $true)]
        [System.String]
        $UcsConnectionString,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $UcsCredentials,

        [System.Management.Automation.PSCredential]
        $WebProxyCredentials,

        [string]$ClassId,

        [string]$PropertyMap,

        [parameter(Mandatory = $true)]
        [System.String] $Dn,
        
        [bool] $ModifyPresent,

        [ValidateSet("Add", "Set")]
        [string]$Action = "Add"
       
    )
    
    Write-Verbose("Started execution of Set() method")
    try
    {
        Write-Verbose("Connecting to UCS...")
        $handle=  Get-UcsConnection -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -WebProxyCredentials $WebProxyCredentials
        <# #>
        if($Ensure -eq "Present" )
        {
            #$string = "name = name1 `nid = id1"
            $propMap=  ConvertFrom-StringData -StringData $PropertyMap
         
            if(![string]::IsNullOrEmpty($Dn))
            {
                if($Action -eq "Add")
                {
                    if($Dn.Contains('/'))
                    {
                        $parentDn =  $Dn.Substring(0, $Dn.LastIndexOf('/'))
                        if($ModifyPresent)
                        {
                            Get-UcsMo -Dn $parentDn -Ucs $handle | Add-UcsMo -ClassId $ClassId -PropertyMap $propMap -ModifyPresent
                        }
                        else
                        {
                            Get-UcsMo -Dn $parentDn -Ucs $handle | Add-UcsMo -ClassId $ClassId -PropertyMap $propMap
                        }
                    }
                    else
                    {
                        $propMap.Add("Dn",$Dn)
                        Add-UcsMo -ClassId $ClassId -PropertyMap $propMap -Ucs $handle -ModifyPresent
                    }
                }
                elseif($Action -eq "Set")
                {
                    Get-UcsMo -Dn $Dn -Ucs $handle | Set-UcsMo -PropertyMap $propMap -Force
                }
            }
     
         }
        elseif($Ensure -eq "Absent" )
        {
             if(![string]::IsNullOrEmpty($Dn))
             {
                $temp= Get-UcsMo -Dn $Dn -Ucs $handle | Remove-UcsMo -Force
             }
       
        }
        Write-Verbose("Disconnecting UCS...")
        Disconnect-Ucs -Ucs $handle
        Write-Verbose("UCS Disconnected")
    }
    catch
    {
        Write-Verbose("Error occurred in Set-TargetResoucrce. Disconnecting UCS(s)...")
        if($handle -ne $null)
            {$temp = Disconnect-Ucs -Ucs $handle}

        throw
    }       

    Write-Verbose("Completed execution of Set() method")
    }
   
function Test-TargetResource
{
[CmdletBinding()]
[OutputType([System.Boolean])]
param
(
        [ValidateSet("Present", "Absent")]
        [string]$Ensure = "Present",
        
        [parameter(Mandatory = $true)]
        [System.String]
        $Identifier,

        [parameter(Mandatory = $true)]
        [System.String]
        $UcsConnectionString,

        [parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $UcsCredentials,

        [System.Management.Automation.PSCredential]
        $WebProxyCredentials,

        [string]$ClassId,

        [string]$PropertyMap,

        [parameter(Mandatory = $true)]
        [System.String] $Dn,
        
        [bool] $ModifyPresent,

        [ValidateSet("Add", "Set")]
        [string]$Action = "Add"
)

        
        Write-Verbose("Started execution of Test-TargetResource method")

        $result = [System.Boolean]
      
        $getTargetResult= Get-TargetResource  -Identifier $Identifier -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -WebProxyCredentials $WebProxyCredentials -ClassId $ClassId -PropertyMap $PropertyMap -Dn $Dn -Action $Action
      
    <# #>
        if($Ensure -eq "Present" )
        {
            if(($Action -eq "Add" -and $getTargetResult.Ensure -eq "Absent" ) -or ((($Action -eq "Add" -and $ModifyPresent) -or ($Action -eq "Set")) -and $getTargetResult.Ensure -eq "Present" ))
            {
                $result =$false
            }
            else
            {
                $result= $true
            }
        }
        elseif($Ensure -eq "Absent" )
        {
            if( $getTargetResult.Ensure -eq "Present")
            {
                $result =$false
            }
            else
            {
                $result= $true
            }        
        }
        Write-Verbose("Completed execution of Test-TargetResource method")

        Write-Verbose("Output: "+$result)
        return $result 

}


# SIG # Begin signature block
# MIIYyQYJKoZIhvcNAQcCoIIYujCCGLYCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAzLT3Ak5P+J2PP
# 6H5dZYodwpko1sK4q1EhFtLWLSy8vaCCExAwggQVMIIC/aADAgECAgsEAAAAAAEx
# icZQBDANBgkqhkiG9w0BAQsFADBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3Qg
# Q0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
# bjAeFw0xMTA4MDIxMDAwMDBaFw0yOTAzMjkxMDAwMDBaMFsxCzAJBgNVBAYTAkJF
# MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWdu
# IFRpbWVzdGFtcGluZyBDQSAtIFNIQTI1NiAtIEcyMIIBIjANBgkqhkiG9w0BAQEF
# AAOCAQ8AMIIBCgKCAQEAqpuOw6sRUSUBtpaU4k/YwQj2RiPZRcWVl1urGr/SbFfJ
# MwYfoA/GPH5TSHq/nYeer+7DjEfhQuzj46FKbAwXxKbBuc1b8R5EiY7+C94hWBPu
# TcjFZwscsrPxNHaRossHbTfFoEcmAhWkkJGpeZ7X61edK3wi2BTX8QceeCI2a3d5
# r6/5f45O4bUIMf3q7UtxYowj8QM5j0R5tnYDV56tLwhG3NKMvPSOdM7IaGlRdhGL
# D10kWxlUPSbMQI2CJxtZIH1Z9pOAjvgqOP1roEBlH1d2zFuOBE8sqNuEUBNPxtyL
# ufjdaUyI65x7MCb8eli7WbwUcpKBV7d2ydiACoBuCQIDAQABo4HoMIHlMA4GA1Ud
# DwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSSIadKlV1k
# sJu0HuYAN0fmnUErTDBHBgNVHSAEQDA+MDwGBFUdIAAwNDAyBggrBgEFBQcCARYm
# aHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wNgYDVR0fBC8w
# LTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9yb290LXIzLmNybDAf
# BgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOC
# AQEABFaCSnzQzsm/NmbRvjWek2yX6AbOMRhZ+WxBX4AuwEIluBjH/NSxN8RooM8o
# agN0S2OXhXdhO9cv4/W9M6KSfREfnops7yyw9GKNNnPRFjbxvF7stICYePzSdnno
# 4SGU4B/EouGqZ9uznHPlQCLPOc7b5neVp7uyy/YZhp2fyNSYBbJxb051rvE9ZGo7
# Xk5GpipdCJLxo/MddL9iDSOMXCo4ldLA1c3PiNofKLW6gWlkKrWmotVzr9xG2wSu
# kdduxZi61EfEVnSAR3hYjL7vK/3sbL/RlPe/UOB74JD9IBh4GCJdCC6MHKCX8x2Z
# faOdkdMGRE4EbnocIOM28LZQuTCCBLkwggOhoAMCAQICEhEh7ZAYyqknt2JsUmuQ
# bZP1ZzANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xv
# YmFsU2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcg
# Q0EgLSBTSEEyNTYgLSBHMjAeFw0xNjA1MjQwMDAwMDBaFw0yNzA2MjQwMDAwMDBa
# MGkxCzAJBgNVBAYTAlNHMR8wHQYDVQQKExZHTU8gR2xvYmFsU2lnbiBQdGUgTHRk
# MTkwNwYDVQQDEzBHbG9iYWxTaWduIFRTQSBmb3IgTVMgQXV0aGVudGljb2RlIGFk
# dmFuY2VkIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZeGGh
# lq4S/6P/J/ZEYHtqVi1n41+fMZIqSO35BYQObU4iVsrYmZeOacqfew8IyCoraNEo
# YSuf5Cbuurj3sOxeahviWLW0vR0J7c3oPdRm/74iIm02Js8ReJfpVQAow+k3Tr0Z
# 5ReESLIcIa3sc9LzqKfpX+g1zoUTpyKbrILp/vFfxBJasfcMQObSoOBNaNDtDAwQ
# HY8FX2RV+bsoRwYM2AY/N8MmNiWMew8niFw4MaUB9l5k3oPAFFzg59JezI3qI4AZ
# KrNiLmDHqmfWs0DuUn9WDO/ZBdeVIF2FFUDPXpGVUZ5GGheRvsHAB3WyS/c2usVU
# bF+KG/sNKGHIifAVAgMBAAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCB4AwTAYDVR0g
# BEUwQzBBBgkrBgEEAaAyAR4wNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xv
# YmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCQYDVR0TBAIwADAWBgNVHSUBAf8EDDAK
# BggrBgEFBQcDCDBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8vY3JsLmdsb2JhbHNp
# Z24uY29tL2dzL2dzdGltZXN0YW1waW5nc2hhMmcyLmNybDBYBggrBgEFBQcBAQRM
# MEowSAYIKwYBBQUHMAKGPGh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2Fj
# ZXJ0L2dzdGltZXN0YW1waW5nc2hhMmcyLmNydDAdBgNVHQ4EFgQU1Ie4jeblQDyd
# WgZjxkWE2d27HMMwHwYDVR0jBBgwFoAUkiGnSpVdZLCbtB7mADdH5p1BK0wwDQYJ
# KoZIhvcNAQELBQADggEBABoNyP1vM0bImb43n4V/cnSxcc06JzuIVi37tGenLYff
# KO1667xpZdausb09yZuHFFrHHYfznXWCVD+Vd3XztEpqa5bvGaLH9y7tkBvUEY3K
# So2uf3J3uV/eUfQhPuWkZzteLiDC8ZeeeurddHqy+0MEr/rotNESYXqW6WWOT20i
# pdcM56kNGJ+29yN/LRgAntrES7Pn4QJwQPw9RSrLhph3XeDyLHewBRqkAkZruhsR
# C+rn5sHU7jMjMgCappWM+ioqyY2tZC+Lvtf/OvNDj84v1ky7ta8SgXko9x+7hRCK
# P8nTyPi0c2TE5yBMWRvKiTTR7MKKCtZ51dovtPZ1554wggTZMIIDwaADAgECAhAg
# dYM+s4RF6K1Qb3IlJSFAMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMR0w
# GwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMg
# VHJ1c3QgTmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYg
# Q29kZSBTaWduaW5nIENBMB4XDTE2MTEwOTAwMDAwMFoXDTE5MTEyNjIzNTk1OVow
# cTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNh
# biBKb3NlMRwwGgYDVQQKDBNDaXNjbyBTeXN0ZW1zLCBJbmMuMRwwGgYDVQQDDBND
# aXNjbyBTeXN0ZW1zLCBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
# AQEAsuVUjhvmUZmLRkdteMgyU8Mu8XoLvGMcle2lHnNO9rGdA2+Oz7nviMATnvJG
# MXHCYqpaqjIcqhI07dieXGNST9u4OTjeb9AjWq2uz7XiLgqKneWYzYg4l4Wx0vGm
# w9ZIN1qS8WrLP4fVbXbrpfjYTku1ST0ouq38I/X21sDiRvISxJGMl9D5m+6BTKTY
# 1hNnwZqKsk+veV33GWzsY4jgm0Ix+q/Z6WFRHnS8z1h5zrqKXgY2BLgB/fdLPY7Z
# cDc5zPTaSbtd1LmxMisdlKOkClASa66AkGbbBhDSXA6V01sxbrVUD+8yw5HxjSkB
# dvaGiv163Z50O9jbUZhAKjeTBQIDAQABo4IBXTCCAVkwCQYDVR0TBAIwADAOBgNV
# HQ8BAf8EBAMCB4AwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3N2LnN5bWNiLmNv
# bS9zdi5jcmwwYQYDVR0gBFowWDBWBgZngQwBBAEwTDAjBggrBgEFBQcCARYXaHR0
# cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5
# bWNiLmNvbS9ycGEwEwYDVR0lBAwwCgYIKwYBBQUHAwMwVwYIKwYBBQUHAQEESzBJ
# MB8GCCsGAQUFBzABhhNodHRwOi8vc3Yuc3ltY2QuY29tMCYGCCsGAQUFBzAChhpo
# dHRwOi8vc3Yuc3ltY2IuY29tL3N2LmNydDAfBgNVHSMEGDAWgBSWO1PweTOXr32D
# 7y4rzMq3hh5yZjAdBgNVHQ4EFgQUwmh+ziCvAomdQWbz+MKGFJTJWoAwDQYJKoZI
# hvcNAQELBQADggEBACgChN6Dp2LOyxEkn3a3TpgUR0j47OO/XZHDxjVD9Int6bCI
# WoXKlD1j+U9L0uSBfHMgVYFeYLEWw8+kZCHRIb7nqib7ahmSPboTami7bfzaYFJF
# b8ZttE+gYYM9Dgfa5/keTiu7gCr9EZqQliTcHXS7S8xkBgqijmoc8MgN1M9Npg6U
# /PKH7tMdIlYI6qUK9JCx3hsADBqsk791vtC8gNUS3e0CyWX/M4BZNBUW7ys2Ohpd
# YcWjwnYm4Wu9wCDOgDP02yXx/9f9midjg7UVV4D5Ngh1+kg8mWRHW2wmLW0knvi6
# wpPlXhnR1fwlWAniCdO2MKfxgL3FaKFQ8NqlyNAwggVZMIIEQaADAgECAhA9eNf5
# dklgsmF99PAeyoYqMA0GCSqGSIb3DQEBCwUAMIHKMQswCQYDVQQGEwJVUzEXMBUG
# A1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l
# dHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1
# dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVi
# bGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNTAeFw0xMzEy
# MTAwMDAwMDBaFw0yMzEyMDkyMzU5NTlaMH8xCzAJBgNVBAYTAlVTMR0wGwYDVQQK
# ExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3Qg
# TmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYgQ29kZSBT
# aWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl4MeABav
# LLHSCMTXaJNRYB5x9uJHtNtYTSNiarS/WhtR96MNGHdou9g2qy8hUNqe8+dfJ04L
# wpfICXCTqdpcDU6kDZGgtOwUzpFyVC7Oo9tE6VIbP0E8ykrkqsDoOatTzCHQzM9/
# m+bCzFhqghXuPTbPHMWXBySO8Xu+MS09bty1mUKfS2GVXxxw7hd924vlYYl4x2gb
# rxF4GpiuxFVHU9mzMtahDkZAxZeSitFTp5lbhTVX0+qTYmEgCscwdyQRTWKDtrp7
# aIIx7mXK3/nVjbI13Iwrb2pyXGCEnPIMlF7AVlIASMzT+KV93i/XE+Q4qITVRrgT
# hsIbnepaON2b2wIDAQABo4IBgzCCAX8wLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
# BzABhhNodHRwOi8vczIuc3ltY2IuY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAwbAYD
# VR0gBGUwYzBhBgtghkgBhvhFAQcXAzBSMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3
# LnN5bWF1dGguY29tL2NwczAoBggrBgEFBQcCAjAcGhpodHRwOi8vd3d3LnN5bWF1
# dGguY29tL3JwYTAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2IuY29t
# L3BjYTMtZzUuY3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDAzAOBgNV
# HQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJ
# LTEtNTY3MB0GA1UdDgQWBBSWO1PweTOXr32D7y4rzMq3hh5yZjAfBgNVHSMEGDAW
# gBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkqhkiG9w0BAQsFAAOCAQEAE4UaHmmp
# N/egvaSvfh1hU/6djF4MpnUeeBcj3f3sGgNVOftxlcdlWqeOMNJEWmHbcG/aIQXC
# LnO6SfHRk/5dyc1eA+CJnj90Htf3OIup1s+7NS8zWKiSVtHITTuC5nmEFvwosLFH
# 8x2iPu6H2aZ/pFalP62ELinefLyoqqM9BAHqupOiDlAiKRdMh+Q6EV/WpCWJmwVr
# L7TJAUwnewusGQUioGAVP9rJ+01Mj/tyZ3f9J5THujUOiEn+jf0or0oSvQ2zlwXe
# RAwV+jYrA9zBUAHxoRFdFOXivSdLVL4rhF4PpsN0BQrvl8OJIrEfd/O9zUPU8Uyp
# P7WLhK9k8tAUITGCBQ8wggULAgEBMIGTMH8xCzAJBgNVBAYTAlVTMR0wGwYDVQQK
# ExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3Qg
# TmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYgQ29kZSBT
# aWduaW5nIENBAhAgdYM+s4RF6K1Qb3IlJSFAMA0GCWCGSAFlAwQCAQUAoIGEMBgG
# CisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcC
# AQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIE
# IINXwZmU6fvalo4lDK7YihDLpd+UdiMseStUs2nL1X5wMA0GCSqGSIb3DQEBAQUA
# BIIBAB5CaG+lqyHWZTIW70s/+hnArLNAktaovg6XyN67eDyPhgWtMWhjz1O4PIRL
# GnhLMt2+Z/tsX2QtGJRRpcLRALyqCIh+NuKHy1Wl+VPzS1i0waVNH4D4DqeSvDb5
# Rc9VMCfrkON6nfqkrX29S17fUz6QVdYUTB014ACNVezU1u3ifQuqNHnRIZ53bwWS
# bHMOtULPjes1lGw5NHa00mPKo8jUa4JGq2EpUzJEBiyPPzGFGITFQ8X/g+HTHPMH
# C8QQQDy5UXn7GY6BTzS2pldh/jy6egKSboAw0VY8yvNyYaDJzECUXaKfWPLImurb
# fB/wdhtiVzHz6CuND+v+AikU6vShggLFMIICwQYJKoZIhvcNAQkGMYICsjCCAq4C
# AQEwcTBbMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEx
# MC8GA1UEAxMoR2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0EgLSBTSEEyNTYgLSBH
# MgISESHtkBjKqSe3YmxSa5Btk/VnMA0GCWCGSAFlAwQCAQUAoIIBEjAYBgkqhkiG
# 9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNzExMTQxNzE4MDFa
# MC8GCSqGSIb3DQEJBDEiBCBwHpUcDDC74g3QAKCP8OWMuhx2EylMj3QeYhF9m2sA
# qTCBpgYLKoZIhvcNAQkQAgwxgZYwgZMwgZAwgY0EFDfAQYyoSAu6zgLgAOyIRq09
# tpHsMHUwX6RdMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52
# LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIFRpbWVzdGFtcGluZyBDQSAtIFNIQTI1
# NiAtIEcyAhIRIe2QGMqpJ7dibFJrkG2T9WcwDQYJKoZIhvcNAQEBBQAEggEASqbU
# 60tczYpxbCYvDxuqbxpE28FSRHnqcg3ImOqkFlDP/Ei4Y0eciarlG2q05gRcTk7c
# 2zeb9ICsW8QfcXNFDmfq3rIewctpdWf7L8wjFUl4oskrjZWhTQHJoCmiKFHufQLn
# fpi+JrwN2OqApDrtO0JXxTGClB65jljHfY4iXbkK9mQHCIn9Yde85yfmzuxTneD0
# jl5aIOoAiXk13qZTQd+G19GtBZ+GmpppFXIU4YVUvCnj0wtv4kX4cKfiuzBgRHsN
# wiO+hxrFn8CDDp5jcNZMOC7ToWv6xESEns+u71ZLqp45fn7tuwar3sXTMoiMaRbL
# OUV12P8z3G3cJy16bg==
# SIG # End signature block