DSCResources/DCPP_PowerManagement/DCPP_PowerManagement.psm1
# Import the helper functions Import-Module $PSScriptRoot\..\..\Misc\helper.psm1 -Verbose:$false function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $BlockDefinition ) #Write-Verbose "Use this cmdlet to deliver information about command processing." #Write-Debug "Use this cmdlet to write debug information while troubleshooting." <# $returnValue = @{ BlockDefinition = [System.String] Category = [System.String] AutoOn = [System.String] AutoOnHr = [System.UInt16] AutoOnMn = [System.UInt16] AutoOnSun = [System.String] AutoOnMon = [System.String] AutoOnTue = [System.String] AutoOnWed = [System.String] AutoOnThur = [System.String] AutoOnFri = [System.String] AutoOnSat = [System.String] DeepSleepCtrl = [System.String] FanSpeed = [System.String] FanSpeedLvl = [System.UInt16] UsbWake = [System.String] FanCtrlOvrd = [System.String] AcPwrRcvry = [System.String] WakeOnLan = [System.String] SfpwakeOnLan = [System.String] WakeOnAc = [System.String] WakeOnDock = [System.String] LidSwitch = [System.String] BlinkPowerSupply1LED = [System.String] BlinkPowerSupply2LED = [System.String] WlanAutoSense = [System.String] WwanAutoSense = [System.String] BlockSleep = [System.String] SleepMode = [System.String] PrimaryBattChargeCfg = [System.String] CustomChargeStart = [System.UInt16] CustomChargeStop = [System.UInt16] SliceBattChargeCfg = [System.String] ModBattChargeCfg = [System.String] DockBatteryChargeConfiguration = [System.String] IntlSmartConnect = [System.String] IntelReadyModeEn = [System.String] PeakShiftCfg = [System.String] PeakShiftBatteryThreshold = [System.UInt16] PeakShiftDayConfiguration = [System.String] StartTime = [System.String] EndTime = [System.String] ChargeStartTime = [System.String] AdvBatteryChargeCfg = [System.String] AdvancedBatteryChargeConfiguration = [System.String] Type_CBatteryOverloadProtection = [System.String] BeginningOfDay = [System.String] WorkPeriod = [System.String] Password = [System.String] SecurePassword = [System.String] PathToKey = [System.String] } $returnValue #> # Check if module DellBIOSprovider is already loaded. If not, load it. try{ $bool = Confirm-DellPSDrive -verbose } catch { write-Verbose $_ $msg = "Get-TargetResource: $($_.Exception.Message)" Write-DellEventLog -Message $msg -EventID 1 -EntryType 'Error' write-Verbose "Exiting Get-TargetResource" return } if ($bool) { Write-Verbose "Dell PS-Drive DellSmbios is found." } else{ $Message = “Get-TargetResource: Module DellBiosProvider was imported correctly." Write-DellEventLog -Message $Message -EventID 2 } $Get = get-childitem -path @("DellSmbios:\" + $Category) # Removing Verbose and Debug from output $PSBoundParameters.Remove("Verbose") | out-null $PSBoundParameters.Remove("Debug") | out-null $out = @{} $Get | foreach-Object {$out.Add($_.Attribute, $_.CurrentValue)} $out.add('Category', $Category ) $out } function Set-TargetResource { [CmdletBinding()] param ( [parameter(Mandatory = $true)] [System.String] $BlockDefinition, [System.String] $Category, [ValidateSet("EveryDay","Disabled","WeekDays","SelectDays")] [System.String] $AutoOn, [System.UInt16] $AutoOnHr, [System.UInt16] $AutoOnMn, [System.UInt16] $AutoWakePeriod, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnSun, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnMon, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnTue, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnWed, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnThur, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnFri, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnSat, [ValidateSet("Disabled","S5Only","S4AndS5")] [System.String] $DeepSleepCtrl, [ValidateSet("Auto","High","Med","Low","MedHigh","MedLow")] [System.String] $FanSpeed, [System.UInt16] $FanSpeedLvl, [ValidateSet("Disabled","Enabled")] [System.String] $UsbWake, [ValidateSet("Enabled","Disabled")] [System.String] $FanCtrlOvrd, [ValidateSet("Off","On","Last")] [System.String] $AcPwrRcvry, [ValidateSet("AddInCard","Onboard","Disabled","LanOnly","LanWithPxeBoot","WlanOnly","LanWlan")] [System.String] $WakeOnLan, [ValidateSet("SFP","LANSFP","SFPPXE")] [System.String] $SfpwakeOnLan, [ValidateSet("Disabled","Enabled")] [System.String] $WakeOnAc, [ValidateSet("Enabled","Disabled")] [System.String] $WakeOnDock, [ValidateSet("Enabled","Disabled")] [System.String] $LidSwitch, [ValidateSet("Enabled")] [System.String] $BlinkPowerSupply1LED, [ValidateSet("Enabled")] [System.String] $BlinkPowerSupply2LED, [ValidateSet("Disabled","Enabled")] [System.String] $WlanAutoSense, [ValidateSet("Disabled","Enabled")] [System.String] $WwanAutoSense, [ValidateSet("Enabled","Disabled")] [System.String] $BlockSleep, [ValidateSet("OSAutomaticSelection","ForceS3")] [System.String] $SleepMode, [ValidateSet("Auto","Standard","Express","PrimAcUse","Custom")] [System.String] $PrimaryBattChargeCfg, [System.UInt16] $CustomChargeStart, [System.UInt16] $CustomChargeStop, [ValidateSet("Standard","Express")] [System.String] $SliceBattChargeCfg, [ValidateSet("Standard","Express")] [System.String] $ModBattChargeCfg, [ValidateSet("Standard","Express")] [System.String] $DockBatteryChargeConfiguration, [ValidateSet("Enabled","Disabled")] [System.String] $IntlSmartConnect, [ValidateSet("Enabled","Disabled")] [System.String] $IntelReadyModeEn, [ValidateSet("Enabled","Disabled")] [System.String] $PeakShiftCfg, [ValidateSet("LanOnly","Disabled","LanWithPxeBoot")] [System.String] $WakeOnLan2, [System.UInt16] $PeakShiftBatteryThreshold, [System.String] $PeakShiftDayConfiguration, [System.String] $StartTime, [System.String] $EndTime, [System.String] $ChargeStartTime, [ValidateSet("Enabled","Disabled")] [System.String] $AdvBatteryChargeCfg, [System.String] $AdvancedBatteryChargeConfiguration, [ValidateSet("7.5Watts","15Watts")] [System.String] $Type_CBatteryOverloadProtection, [System.String] $BeginningOfDay, [System.String] $WorkPeriod, [ValidateSet("Enabled","Disabled")] [System.String] $SpeedShift, [System.String] $Password, [System.String] $SecurePassword, [System.String] $PathToKey ) if (-not(CheckModuleLoaded)) { Write-Verbose -Message 'Required module DellBiosProvider does not exist. Exiting.' return $true } $DellPSDrive = get-psdrive -name Dellsmbios if ( !$DellPSDrive) { $Message = "Drive DellSmbios is not found. Exiting." Write-Verbose $Message Write-DellEventLog -Message $Message -EventID 3 -EntryType "Error" return $true } $atts = $PSBoundParameters $pathToCategory = $DellPSDrive.Name + ':\' + $atts["Category"] Dir $pathToCategory -verbose $atts.Remove("Verbose") | out-null $atts.Remove("Category") | out-null $atts.Remove("Debug") | out-null $atts.Remove("BlockDefinition") | out-null $startTime=$atts['StartTime'] $endTime=$atts['EndTime'] $chargeStartTime=$atts['ChargeStartTime'] $atts.Remove("StartTime") | out-null $atts.Remove("EndTime") | out-null $atts.Remove("ChargeStartTime") | out-null $beginningOfDay=$atts['BeginningOfDay'] $workPeriod=$atts['WorkPeriod'] $atts.Remove("BeginningOfDay") | out-null $atts.Remove("WorkPeriod") | out-null $securePwd=$atts["SecurePassword"] $passwordSet=$atts["Password"] $atts.Remove("Password") | Out-Null $atts.Remove("SecurePassword") | Out-Null $pathToKey=$atts["PathToKey"] if(-Not [string]::IsNullOrEmpty($pathToKey)) { if(Test-Path $pathToKey) { $key=Get-Content $pathToKey } else { $key="" } } $atts.Remove("PathToKey") | Out-Null $atts.Keys | foreach-object { if($($_) -eq "PeakShiftDayConfiguration") { $path = $pathToCategory + '\' + $($_) $value = $atts[$_] if(-Not [string]::IsNullOrEmpty($securePwd)) { $pasvar=ConvertTo-SecureString $securePwd.ToString() -Key $key Set-Item -path $path -value $value -StartTime $startTime -EndTime $endTime -ChargeStartTime $chargeStartTime -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -PasswordSecure $pasvar } elseif(-Not [string]::IsNullOrEmpty($passwordSet)) { Set-Item -path $path -value $value -StartTime $startTime -EndTime $endTime -ChargeStartTime $chargeStartTime -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -Password $passwordSet } else { Set-Item -path $path -value $value -StartTime $startTime -EndTime $endTime -ChargeStartTime $chargeStartTime -verbose -ErrorVariable ev -ErrorAction SilentlyContinue } if ( $ev) { $cmdline = $ExecutionContext.InvokeCommand.ExpandString($ev.InvocationInfo.Line) $Message = "An error occured in executing " + $cmdline + "`nError message: $($ev.ErrorDetails)" Write-Verbose $Message Write-DellEventLog -Message $Message -EventID 5 -EntryType "Error" } } elseif($($_) -eq "AdvancedBatteryChargeConfiguration") { $path = $pathToCategory + '\' + $($_) $value = $atts[$_] if(-Not [string]::IsNullOrEmpty($securePwd)) { $pasvar=ConvertTo-SecureString $securePwd.ToString() -Key $key Set-Item -path $path -value $value -BeginningOfDay $beginningOfDay -WorkPeriod $workPeriod -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -PasswordSecure $pasvar } elseif(-Not [string]::IsNullOrEmpty($passwordSet)) { Set-Item -path $path -value $value -BeginningOfDay $beginningOfDay -WorkPeriod $workPeriod -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -Password $passwordSet } else { Set-Item -path $path -value $value -BeginningOfDay $beginningOfDay -WorkPeriod $workPeriod -verbose -ErrorVariable ev -ErrorAction SilentlyContinue } if ( $ev) { $cmdline = $ExecutionContext.InvokeCommand.ExpandString($ev.InvocationInfo.Line) $Message = "An error occured in executing " + $cmdline + "`nError message: $($ev.ErrorDetails)" Write-Verbose $Message Write-DellEventLog -Message $Message -EventID 5 -EntryType "Error" } } else { $path="" if($($_) -eq "Type_CBatteryOverloadProtection") { $path = $pathToCategory + '\' + "Type-CBatteryOverloadProtection" } else { $path = $pathToCategory + '\' + $($_) } $value = $atts[$_] if(-Not [string]::IsNullOrEmpty($securePwd)) { $pasvar=ConvertTo-SecureString $securePwd.ToString() -Key $key Set-Item -path $path -value $value -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -PasswordSecure $pasvar } elseif(-Not [string]::IsNullOrEmpty($passwordSet)) { Set-Item -path $path -value $value -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -Password $passwordSet } else { Set-Item -path $path -value $value -verbose -ErrorVariable ev -ErrorAction SilentlyContinue } if ( $ev) { $cmdline = $ExecutionContext.InvokeCommand.ExpandString($ev.InvocationInfo.Line) $Message = "An error occured in executing " + $cmdline + "`nError message: $($ev.ErrorDetails)" Write-Verbose $Message Write-DellEventLog -Message $Message -EventID 5 -EntryType "Error" } } } } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.String] $BlockDefinition, [System.String] $Category, [ValidateSet("EveryDay","Disabled","WeekDays","SelectDays")] [System.String] $AutoOn, [System.UInt16] $AutoOnHr, [System.UInt16] $AutoOnMn, [System.UInt16] $AutoWakePeriod, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnSun, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnMon, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnTue, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnWed, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnThur, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnFri, [ValidateSet("Enabled","Disabled")] [System.String] $AutoOnSat, [ValidateSet("Disabled","S5Only","S4AndS5")] [System.String] $DeepSleepCtrl, [ValidateSet("Auto","High","Med","Low","MedHigh","MedLow")] [System.String] $FanSpeed, [System.UInt16] $FanSpeedLvl, [ValidateSet("Disabled","Enabled")] [System.String] $UsbWake, [ValidateSet("Enabled","Disabled")] [System.String] $FanCtrlOvrd, [ValidateSet("Off","On","Last")] [System.String] $AcPwrRcvry, [ValidateSet("AddInCard","Onboard","Disabled","LanOnly","LanWithPxeBoot","WlanOnly","LanWlan")] [System.String] $WakeOnLan, [ValidateSet("SFP","LANSFP","SFPPXE")] [System.String] $SfpwakeOnLan, [ValidateSet("Disabled","Enabled")] [System.String] $WakeOnAc, [ValidateSet("Enabled","Disabled")] [System.String] $WakeOnDock, [ValidateSet("Enabled","Disabled")] [System.String] $LidSwitch, [ValidateSet("Enabled")] [System.String] $BlinkPowerSupply1LED, [ValidateSet("Enabled")] [System.String] $BlinkPowerSupply2LED, [ValidateSet("Disabled","Enabled")] [System.String] $WlanAutoSense, [ValidateSet("Disabled","Enabled")] [System.String] $WwanAutoSense, [ValidateSet("Enabled","Disabled")] [System.String] $BlockSleep, [ValidateSet("OSAutomaticSelection","ForceS3")] [System.String] $SleepMode, [ValidateSet("Auto","Standard","Express","PrimAcUse","Custom")] [System.String] $PrimaryBattChargeCfg, [System.UInt16] $CustomChargeStart, [System.UInt16] $CustomChargeStop, [ValidateSet("Standard","Express")] [System.String] $SliceBattChargeCfg, [ValidateSet("Standard","Express")] [System.String] $ModBattChargeCfg, [ValidateSet("Standard","Express")] [System.String] $DockBatteryChargeConfiguration, [ValidateSet("Enabled","Disabled")] [System.String] $IntlSmartConnect, [ValidateSet("Enabled","Disabled")] [System.String] $IntelReadyModeEn, [ValidateSet("Enabled","Disabled")] [System.String] $PeakShiftCfg, [System.UInt16] $PeakShiftBatteryThreshold, [System.String] $PeakShiftDayConfiguration, [System.String] $StartTime, [System.String] $EndTime, [System.String] $ChargeStartTime, [ValidateSet("Enabled","Disabled")] [System.String] $AdvBatteryChargeCfg, [System.String] $AdvancedBatteryChargeConfiguration, [ValidateSet("7.5Watts","15Watts")] [System.String] $Type_CBatteryOverloadProtection, [System.String] $BeginningOfDay, [System.String] $WorkPeriod, [ValidateSet("Enabled","Disabled")] [System.String] $SpeedShift, [ValidateSet("LanOnly","Disabled","LanWithPxeBoot")] [System.String] $WakeOnLan2, [System.String] $Password, [System.String] $SecurePassword, [System.String] $PathToKey ) $Get = Get-TargetResource $PSBoundParameters['Category'] -verbose New-DellEventLog $PSBoundParameters.Remove("Verbose") | out-null $PSBoundParameters.Remove("Debug") | out-null $PSBoundParameters.Remove("Category") | out-null $startTime=$PSBoundParameters['StartTime'] $endTime=$PSBoundParameters['EndTime'] $chargestartTime=$PSBoundParameters['ChargeStartTime'] $beginningOfDay=$PSBoundParameters['BeginningOfDay'] $workPeriod=$PSBoundParameters['WorkPeriod'] $PSBoundParameters.Remove("StartTime") | out-null $PSBoundParameters.Remove("EndTime") | out-null $PSBoundParameters.Remove("ChargeStartTime") | out-null $PSBoundParameters.Remove("BeginningOfDay") | out-null $PSBoundParameters.Remove("WorkPeriod") | out-null $PSBoundParameters.Remove("BlockDefinition") | out-null $bool = $true foreach ($config_att in $PSBoundParameters.GetEnumerator()) { if ($Get.ContainsKey($config_att.Key)) { if($config_att.Key -match "PeakShiftDayConfiguration") { $currentvalue = $Get[$config_att.Key] $whichDay=$config_att.Value if($whichDay -eq "Monday") { $iIndex=0 } elseif($whichDay -eq "Tuesday") { $iIndex=1 } elseif($whichDay -eq "Wednesday") { $iIndex=2 } elseif($whichDay -eq "Thursday") { $iIndex=3 } elseif($whichDay -eq "Friday") { $iIndex=4 } elseif($whichDay -eq "Saturday") { $iIndex=5 } elseif($whichDay -eq "Sunday") { $iIndex=6 } if (($currentvalue[$iIndex].StartTime -ne $startTime) -or ($currentvalue[$iIndex].EndTime -ne $endTime) -or ($currentvalue[$iIndex].ChargeStartTime -ne $chargestartTime)){ $bool = $false #$drift = "`nCurrentValue: $currentvalue_nospace`nDesiredValue: $($config_att.value)" $drift = "`nCurrentValue: StartTime "+$currentvalue[$iIndex].StartTime+" EndTime "+$currentvalue[$iIndex].EndTime+" ChargeStartTime "+$currentvalue[$iIndex].ChargeStartTime+"`nDesiredValue: StartTime "+$startTime+" EndTime "+$endTime+" ChargeStartTime "+$chargestartTime $message = "Configuration is drifted in category $Category for $($config_att.Key). $drift" write-verbose $message Write-DellEventLog -Message $message -EventID 4 -EntryType Warning } else { write-Debug "Configuration is same for $config_att." } } elseif($config_att.Key -match "AdvancedBatteryChargeConfiguration") { $currentvalue = $Get[$config_att.Key] $whichDay=$config_att.Value if($whichDay -eq "Monday") { $iIndex=0 } elseif($whichDay -eq "Tuesday") { $iIndex=1 } elseif($whichDay -eq "Wednesday") { $iIndex=2 } elseif($whichDay -eq "Thursday") { $iIndex=3 } elseif($whichDay -eq "Friday") { $iIndex=4 } elseif($whichDay -eq "Saturday") { $iIndex=5 } elseif($whichDay -eq "Sunday") { $iIndex=6 } if (($currentvalue[$iIndex].BeginningOfDay -ne $beginningOfDay) -or ($currentvalue[$iIndex].WorkPeriod -ne $workPeriod)){ $bool = $false #$drift = "`nCurrentValue: $currentvalue_nospace`nDesiredValue: $($config_att.value)" $drift = "`nCurrentValue: BeginningOfDay "+$currentvalue[$iIndex].BeginningOfDay+" WorkPeriod "+$currentvalue[$iIndex].WorkPeriod+"`nDesiredValue: BeginningOfDay "+$beginningOfDay+" WorkPeriod "+$workPeriod $message = "Configuration is drifted in category $Category for $($config_att.Key). $drift" write-verbose $message Write-DellEventLog -Message $message -EventID 4 -EntryType Warning } else { write-Debug "Configuration is same for $config_att." } } else { $currentvalue="" if($config_att.Key -match "Type_CBatteryOverloadProtection") { $currentvalue = $Get["Type-CBatteryOverloadProtection"] } else { $currentvalue = $Get[$config_att.Key] } $currentvalue_nospace = $currentvalue -replace " ", "" if ($config_att.Value -ne $currentvalue_nospace){ $bool = $false $drift = "`nCurrentValue: $currentvalue_nospace`nDesiredValue: $($config_att.value)" $message = "Configuration is drifted in category $Category for $($config_att.Key). $drift" write-verbose $message Write-DellEventLog -Message $message -EventID 4 -EntryType Warning } else { write-Debug "Configuration is same for $config_att." } } } else { $message = "Unsupported attribute $($config_att)." Write-Verbose $message } } return $bool } Export-ModuleMember -Function *-TargetResource # SIG # Begin signature block # MIIVqQYJKoZIhvcNAQcCoIIVmjCCFZYCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAobZh4LxqOtTwx # LOGi1r5SQObPHnLtmViLjo6aWmuPB6CCCiMwggTCMIIDqqADAgECAhAiNl3Koo7M # bamHXZYvcHGpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMR0wGwYDVQQK # ExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3Qg # TmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYgQ29kZSBT # aWduaW5nIENBMB4XDTE4MDkyNzAwMDAwMFoXDTIxMDkyNjIzNTk1OVowWjELMAkG # A1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRMwEQYDVQQHDApSb3VuZCBSb2NrMRIw # EAYDVQQKDAlEZWxsIEluYy4xEjAQBgNVBAMMCURlbGwgSW5jLjCCASIwDQYJKoZI # hvcNAQEBBQADggEPADCCAQoCggEBAK2E5sUV7O7RXKt547mMdmq27CulgmONL6w3 # 2c5gs7vQsH3KWy9Q5rQ83MEPnRncZy71Alrky1G3dV3d1CxH7kH8xfu+YOUR+OVo # VOFgkoT4tY2xST2B+WfS1jXJKzj5VQuOTn/f2Qie3mA02e3/YlTAMUmOqi4a2gNH # 3r/de81Yj3e/DqzFV5rWrTfdZ7SQNoWVKA/cVu5KrPdXPjqMpRMxnjP4WPzs6eR0 # 4ONH6tvUNWP6PCrRxg5EIpKhbW0DZxvp1VqXDCyQLe98cjgbgD+0pUDrBGa3pxB3 # iJVBvZ5WI/OL0KxlvFtWrdEjIxTnwmq8pqp8i99v3u4LxrQEtZ0CAwEAAaOCAV0w # ggFZMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeAMCsGA1UdHwQkMCIwIKAeoByG # Gmh0dHA6Ly9zdi5zeW1jYi5jb20vc3YuY3JsMGEGA1UdIARaMFgwVgYGZ4EMAQQB # MEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUF # BwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMBMGA1UdJQQMMAoGCCsGAQUF # BwMDMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3N2LnN5bWNk # LmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL3N2LnN5bWNiLmNvbS9zdi5jcnQwHwYD # VR0jBBgwFoAUljtT8Hkzl699g+8uK8zKt4YecmYwHQYDVR0OBBYEFNKZNdkAeaso # MvcuUOlErixyOmzRMA0GCSqGSIb3DQEBCwUAA4IBAQBujEZqs+dJwHwXRBl4HNxI # uOlp7kvlwIMdR+prfX31DALJEEn6qGHHpTMJaIVULHjqindsIDBuANm6fLTWuEPN # bE1W5hd/XdOTKuWJaluAStl32Q0gdsc2nQLVo9KS6b3yJeTFWquDMg0oJrUcQS5n # vxpKfKsukni83wb8dZxXTehzj6TcHdSqMPiU6KxfYB3+PcOfp00obHqOeRDuE8mB # LupPJdUCbK+cq15n+o//wOi6dvoEu3xqJ3lGVDBN1MwbulMbYMt0UDonmn16Tkhj # 80WP5zL65G9kbLD0Vifp4uddXjcHrwu4WEggab49TtcPNayPEofQXRdoHcmx5Tyh # MIIFWTCCBEGgAwIBAgIQPXjX+XZJYLJhffTwHsqGKjANBgkqhkiG9w0BAQsFADCB # yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL # ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp # U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW # ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 # aG9yaXR5IC0gRzUwHhcNMTMxMjEwMDAwMDAwWhcNMjMxMjA5MjM1OTU5WjB/MQsw # CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV # BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVjIENs # YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD # ggEPADCCAQoCggEBAJeDHgAWryyx0gjE12iTUWAecfbiR7TbWE0jYmq0v1obUfej # DRh3aLvYNqsvIVDanvPnXydOC8KXyAlwk6naXA1OpA2RoLTsFM6RclQuzqPbROlS # Gz9BPMpK5KrA6DmrU8wh0MzPf5vmwsxYaoIV7j02zxzFlwckjvF7vjEtPW7ctZlC # n0thlV8ccO4XfduL5WGJeMdoG68ReBqYrsRVR1PZszLWoQ5GQMWXkorRU6eZW4U1 # V9Pqk2JhIArHMHckEU1ig7a6e2iCMe5lyt/51Y2yNdyMK29qclxghJzyDJRewFZS # AEjM0/ilfd4v1xPkOKiE1Ua4E4bCG53qWjjdm9sCAwEAAaOCAYMwggF/MC8GCCsG # AQUFBwEBBCMwITAfBggrBgEFBQcwAYYTaHR0cDovL3MyLnN5bWNiLmNvbTASBgNV # HRMBAf8ECDAGAQH/AgEAMGwGA1UdIARlMGMwYQYLYIZIAYb4RQEHFwMwUjAmBggr # BgEFBQcCARYaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIw # HBoaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYf # aHR0cDovL3MxLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAdBgNVHSUEFjAUBggrBgEF # BQcDAgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRow # GAYDVQQDExFTeW1hbnRlY1BLSS0xLTU2NzAdBgNVHQ4EFgQUljtT8Hkzl699g+8u # K8zKt4YecmYwHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJKoZI # hvcNAQELBQADggEBABOFGh5pqTf3oL2kr34dYVP+nYxeDKZ1HngXI9397BoDVTn7 # cZXHZVqnjjDSRFph23Bv2iEFwi5zuknx0ZP+XcnNXgPgiZ4/dB7X9ziLqdbPuzUv # M1ioklbRyE07guZ5hBb8KLCxR/Mdoj7uh9mmf6RWpT+thC4p3ny8qKqjPQQB6rqT # og5QIikXTIfkOhFf1qQliZsFay+0yQFMJ3sLrBkFIqBgFT/ayftNTI/7cmd3/SeU # x7o1DohJ/o39KK9KEr0Ns5cF3kQMFfo2KwPcwVAB8aERXRTl4r0nS1S+K4ReD6bD # dAUK75fDiSKxH3fzvc1D1PFMqT+1i4SvZPLQFCExggrcMIIK2AIBATCBkzB/MQsw # CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV # BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVjIENs # YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQQIQIjZdyqKOzG2ph12WL3BxqTAN # BglghkgBZQMEAgEFAKCBrDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgWnh2bRld # 4dZktN+5yOehYZpjE5BkmjizjSSzhTAIfdswQAYKKwYBBAGCNwIBDDEyMDCgFoAU # AEQAZQBsAGwALAAgAEkAbgBjAC6hFoAUaHR0cDovL3d3dy5kZWxsLmNvbSAwDQYJ # KoZIhvcNAQEBBQAEggEAIg3cLfJeXaGz0IueWGSEuGq6DtJUV+9LysVEt43FGcxo # xwMM2AnvVT3PdvQsjfIVGK+FOVj9TrjdlWuwALGYDRWsXTFqjQ9fb+EqBb/212Wq # VJpfGi8ab65GC+pcJdF3fJi7UDoFwdGfYxvcrtaCXEFB1nZqt5KEDvtVw/udJukT # M+IOWFP2tUEopuJXEk7YMx9ePt7LcnksZWSHUTYfZ9wqUNIye2R+q3Bhi66N/CWP # KDHjWf7BeuNmG8rsfY04uSDcX8NEU/jWyJHU+RgY1zzTxsrFQcxt3lkkBMQr2lT7 # 1dUYPraGrI+hngkCUR077+FAchq844UlR4/OLcm5UKGCCGowgghmBgorBgEEAYI3 # AwMBMYIIVjCCCFIGCSqGSIb3DQEHAqCCCEMwggg/AgEDMQ8wDQYJYIZIAWUDBAIB # BQAwggEOBgsqhkiG9w0BCRABBKCB/gSB+zCB+AIBAQYKKwYBBAGyMQIBATAxMA0G # CWCGSAFlAwQCAQUABCDM6mawwgrn3GCzyTC9kOM5i8rEOEy8dOfI9Enzj2/4ZQIU # Q2rvYgQjvbwlPW8SNNUFkNEhkVUYDzIwMTkwNDIyMDYwMDI3WqCBjKSBiTCBhjEL # MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE # BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxLDAqBgNVBAMT # I0NPTU9ETyBTSEEtMjU2IFRpbWUgU3RhbXBpbmcgU2lnbmVyoIIEoDCCBJwwggOE # oAMCAQICEE6wh4/MJDU2stjJ9785VXcwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNV # BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc # BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 # dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDAe # Fw0xNTEyMzEwMDAwMDBaFw0xOTA3MDkxODQwMzZaMIGGMQswCQYDVQQGEwJHQjEb # MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRow # GAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEsMCoGA1UEAxMjQ09NT0RPIFNIQS0y # NTYgVGltZSBTdGFtcGluZyBTaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw # ggEKAoIBAQDOvHS3cIBPXvM/mKouy9QSASM1aQsivOb9CWwo5BMSrLu6LeXV3SLu # c7Ys+NKkcedJJXirJbeQEKCbi3cm3UDqQaP9iM1ypok7UFcceiUkIgJRQDVnijFp # DeU5c0k5m5UBhVLyKxSJmk4EpLxArjmm3UAC4Dp1/j19VZRb8U4kfMi4WBnKwNq+ # WBOa5hzn0cE78F2PSQghntDzvtbUZk9ccjZ7w4LTmAiUr6tETxjHFNoWsR4yDhI4 # wLU8dux1UAAgBBEZ7cb/307+CIEnMU9xdG4DDHAngVVqmkOSpH/b/T/FFx5Bu87o # p3+Mlfn9f/hhiIkAPv8LAdv91bWk5JERAgMBAAGjgfQwgfEwHwYDVR0jBBgwFoAU # 2u1kdBScFDyr3ZmpvVsoTYs8ydgwHQYDVR0OBBYEFH2/kdenbFpHZkR7kNSOkHJB # jxfCMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoG # CCsGAQUFBwMIMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwudXNlcnRydXN0 # LmNvbS9VVE4tVVNFUkZpcnN0LU9iamVjdC5jcmwwNQYIKwYBBQUHAQEEKTAnMCUG # CCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEB # CwUAA4IBAQBQsPXfX60z3MNTWFi8whN1eyAdVMq6P1A/uor0awljwFtdi9Z1GnO9 # i/9H8RXcURYjGTLmbpJN0cYuWh6IQhTJcuXXCFCKavVkQFauJONhlxVC8CxIroPm # NTyLW8KPro7MNFI04Pv+yv2xJGjRpBEjEAb9ssIkJ8fX6Uocjz8+z+3rdXlsjl/3 # IbZQ5iWhzWaUEmy/27Ouh9hoA3IgAsJ+2pTzcgc8V+hVJOcFoB3EgQGCSx8/D50z # m/BPzJ3WhYHPy+f9SumSuPcNcnMt6Xf5b48oej4evQiG3I0eEV/3W7uHdsaeTFRh # 0Gfbk4TaMYcDkuef4+nPWlbIaOBSSZRcMYICcTCCAm0CAQEwgaowgZUxCzAJBgNV # BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc # BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 # dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdAIQ # TrCHj8wkNTay2Mn3vzlVdzANBglghkgBZQMEAgEFAKCBmDAaBgkqhkiG9w0BCQMx # DQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTE5MDQyMjA2MDAyN1owKwYL # KoZIhvcNAQkQAgwxHDAaMBgwFgQUNlJ9T6JqaPnrRZbx2Zq7LA6nbfowLwYJKoZI # hvcNAQkEMSIEIKtnvDZVn9q68OX21cTI1PspWf30gEhDplVbO91w0yAGMA0GCSqG # SIb3DQEBAQUABIIBAMI+nb0I1iHDQIfizRlYDEy/n0ZkujuRErZHPUBHhUyy3R1M # otBYybO7yCtWqHj6zVrJDKwOEbhavpVCoq2mZ00HwqqVMCtIBReIGnvZejtBFSu9 # m5anLMVJOQdFsPF/wZpl3X1F6ZD2MkyipnfoIYBe07ibCpY6eLMgKWjVKBKpQPU3 # GMUmwn5kh0lcp98ugrF9dXM3WIkocKB3vPy1rtg7cdyRDSBT4RSAqKpnev21bQ8M # lJeY1ZISYsLVnMhBwCf2Q0tERFcTl39Lvxjm1PkFa8DuXrCojJMbP6qBxhqLE/wH # XaTw4UOskWrVMGPT4xpRD4BWusoYi33tUkHY0Jg= # SIG # End signature block |