'---------------------------------------------------------------------- ' ' Copyright (c) Microsoft Corporation. All rights reserved. ' ' Abstract: ' prnport.vbs - Port script for WMI on Windows ' used to add, delete and list ports ' also for getting and setting the port configuration ' ' Usage: ' prnport [-adlgt?] [-r port] [-s server] [-u user name] [-w password] ' [-o raw|lpr] [-h host address] [-q queue] [-n number] ' [-me | -md ] [-i SNMP index] [-y community] [-2e | -2d]" ' ' Examples ' prnport -a -s server -r IP_1.2.3.4 -e 1.2.3.4 -o raw -n 9100 ' prnport -d -s server -r c:\temp\foo.prn ' prnport -l -s server ' prnport -g -s server -r IP_1.2.3.4 ' prnport -t -s server -r IP_1.2.3.4 -me -y public -i 1 -n 9100 ' '---------------------------------------------------------------------- option explicit ' ' Debugging trace flags, to enable debug output trace message ' change gDebugFlag to true. ' dim gDebugFlag const kDebugTrace = 1 const kDebugError = 2 gDebugFlag = false ' ' Operation action values. ' const kActionAdd = 0 const kActionDelete = 1 const kActionList = 2 const kActionUnknown = 3 const kActionGet = 4 const kActionSet = 5 const kErrorSuccess = 0 const KErrorFailure = 1 const kFlagCreateOrUpdate = 0 const kNameSpace = "root\cimv2" ' ' Constants for the parameter dictionary ' const kServerName = 1 const kPortName = 2 const kDoubleSpool = 3 const kPortNumber = 4 const kPortType = 5 const kHostAddress = 6 const kSNMPDeviceIndex = 7 const kCommunityName = 8 const kSNMP = 9 const kQueueName = 10 const kUserName = 11 const kPassword = 12 ' ' Generic strings ' const L_Empty_Text = "" const L_Space_Text = " " const L_Colon_Text = ":" const L_LPR_Queue = "LPR" const L_Error_Text = "Error" const L_Success_Text = "Success" const L_Failed_Text = "Failed" const L_Hex_Text = "0x" const L_Printer_Text = "Printer" const L_Operation_Text = "Operation" const L_Provider_Text = "Provider" const L_Description_Text = "Description" const L_Debug_Text = "Debug:" ' ' General usage messages ' const L_Help_Help_General01_Text = "Usage: prnport [-adlgt?] [-r port][-s server][-u user name][-w password]" const L_Help_Help_General02_Text = " [-o raw|lpr][-h host address][-q queue][-n number]" const L_Help_Help_General03_Text = " [-me | -md ][-i SNMP index][-y community][-2e | -2d]" const L_Help_Help_General04_Text = "Arguments:" const L_Help_Help_General05_Text = "-a - add a port" const L_Help_Help_General06_Text = "-d - delete the specified port" const L_Help_Help_General07_Text = "-g - get configuration for a TCP port" const L_Help_Help_General08_Text = "-h - IP address of the device" const L_Help_Help_General09_Text = "-i - SNMP index, if SNMP is enabled" const L_Help_Help_General10_Text = "-l - list all TCP ports" const L_Help_Help_General11_Text = "-m - SNMP type. [e] enable, [d] disable" const L_Help_Help_General12_Text = "-n - port number, applies to TCP RAW ports" const L_Help_Help_General13_Text = "-o - port type, raw or lpr" const L_Help_Help_General14_Text = "-q - queue name, applies to TCP LPR ports only" const L_Help_Help_General15_Text = "-r - port name" const L_Help_Help_General16_Text = "-s - server name" const L_Help_Help_General17_Text = "-t - set configuration for a TCP port" const L_Help_Help_General18_Text = "-u - user name" const L_Help_Help_General19_Text = "-w - password" const L_Help_Help_General20_Text = "-y - community name, if SNMP is enabled" const L_Help_Help_General21_Text = "-2 - double spool, applies to TCP LPR ports. [e] enable, [d] disable" const L_Help_Help_General22_Text = "-? - display command usage" const L_Help_Help_General23_Text = "Examples:" const L_Help_Help_General24_Text = "prnport -l -s server" const L_Help_Help_General25_Text = "prnport -d -s server -r IP_1.2.3.4" const L_Help_Help_General26_Text = "prnport -a -s server -r IP_1.2.3.4 -h 1.2.3.4 -o raw -n 9100" const L_Help_Help_General27_Text = "prnport -t -s server -r IP_1.2.3.4 -me -y public -i 1 -n 9100" const L_Help_Help_General28_Text = "prnport -g -s server -r IP_1.2.3.4" const L_Help_Help_General29_Text = "prnport -a -r IP_1.2.3.4 -h 1.2.3.4" const L_Help_Help_General30_Text = "Remark:" const L_Help_Help_General31_Text = "The last example will try to get the device settings at the specified IP address." const L_Help_Help_General32_Text = "If a device is detected, then a TCP port is added with the preferred settings for that device." ' ' Messages to be displayed if the scripting host is not cscript ' const L_Help_Help_Host01_Text = "This script should be executed from the Command Prompt using CScript.exe." const L_Help_Help_Host02_Text = "For example: CScript script.vbs arguments" const L_Help_Help_Host03_Text = "" const L_Help_Help_Host04_Text = "To set CScript as the default application to run .VBS files run the following:" const L_Help_Help_Host05_Text = " CScript //H:CScript //S" const L_Help_Help_Host06_Text = "You can then run ""script.vbs arguments"" without preceding the script with CScript." ' ' General error messages ' const L_Text_Error_General01_Text = "The scripting host could not be determined." const L_Text_Error_General02_Text = "Unable to parse command line." const L_Text_Error_General03_Text = "Win32 error code" ' ' Miscellaneous messages ' const L_Text_Msg_General01_Text = "Added port" const L_Text_Msg_General02_Text = "Unable to delete port" const L_Text_Msg_General03_Text = "Unable to get port" const L_Text_Msg_General04_Text = "Created/updated port" const L_Text_Msg_General05_Text = "Unable to create/update port" const L_Text_Msg_General06_Text = "Unable to enumerate ports" const L_Text_Msg_General07_Text = "Number of ports enumerated" const L_Text_Msg_General08_Text = "Deleted port" const L_Text_Msg_General09_Text = "Unable to get SWbemLocator object" const L_Text_Msg_General10_Text = "Unable to connect to WMI service" ' ' Port properties ' const L_Text_Msg_Port01_Text = "Server name" const L_Text_Msg_Port02_Text = "Port name" const L_Text_Msg_Port03_Text = "Host address" const L_Text_Msg_Port04_Text = "Protocol RAW" const L_Text_Msg_Port05_Text = "Protocol LPR" const L_Text_Msg_Port06_Text = "Port number" const L_Text_Msg_Port07_Text = "Queue" const L_Text_Msg_Port08_Text = "Byte Count Enabled" const L_Text_Msg_Port09_Text = "Byte Count Disabled" const L_Text_Msg_Port10_Text = "SNMP Enabled" const L_Text_Msg_Port11_Text = "SNMP Disabled" const L_Text_Msg_Port12_Text = "Community" const L_Text_Msg_Port13_Text = "Device index" ' ' Debug messages ' const L_Text_Dbg_Msg01_Text = "In function DelPort" const L_Text_Dbg_Msg02_Text = "In function CreateOrSetPort" const L_Text_Dbg_Msg03_Text = "In function ListPorts" const L_Text_Dbg_Msg04_Text = "In function GetPort" const L_Text_Dbg_Msg05_Text = "In function ParseCommandLine" main ' ' Main execution starts here ' sub main on error resume next dim iAction dim iRetval dim oParamDict ' ' Abort if the host is not cscript ' if not IsHostCscript() then call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _ L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _ L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF) wscript.quit end if set oParamDict = CreateObject("Scripting.Dictionary") iRetval = ParseCommandLine(iAction, oParamDict) if iRetval = 0 then select case iAction case kActionAdd iRetval = CreateOrSetPort(oParamDict) case kActionDelete iRetval = DelPort(oParamDict) case kActionList iRetval = ListPorts(oParamDict) case kActionGet iRetVal = GetPort(oParamDict) case kActionSet iRetVal = CreateOrSetPort(oParamDict) case else Usage(true) exit sub end select end if end sub ' ' Delete a port ' function DelPort(oParamDict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text DebugPrint kDebugTrace, L_Text_Msg_Port01_Text & L_Space_Text & oParamDict(kServerName) DebugPrint kDebugTrace, L_Text_Msg_Port02_Text & L_Space_Text & oParamDict(kPortName) dim oService dim oPort dim iResult dim strServer dim strPort dim strUser dim strPassword iResult = kErrorFailure strServer = oParamDict(kServerName) strPort = oParamDict(kPortName) strUser = oParamDict(kUserName) strPassword = oParamDict(kPassword) if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then set oPort = oService.Get("Win32_TCPIPPrinterPort='" & strPort & "'") else DelPort = kErrorFailure exit function end if ' ' Check if Get succeeded ' if Err.Number = kErrorSuccess then ' ' Try deleting the instance ' oPort.Delete_ if Err.Number = kErrorSuccess then wscript.echo L_Text_Msg_General08_Text & L_Space_Text & strPort else wscript.echo L_Text_Msg_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _ & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description ' ' Try getting extended error information ' call LastError() end if else wscript.echo L_Text_Msg_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _ & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description ' ' Try getting extended error information ' call LastError() end if DelPort = iResult end function ' ' Add or update a port ' function CreateOrSetPort(oParamDict) on error resume next dim oPort dim oService dim iResult dim PortType dim strServer dim strPort dim strUser dim strPassword DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text DebugPrint kDebugTrace, L_Text_Msg_Port01_Text & L_Space_Text & oParamDict.Item(kServerName) DebugPrint kDebugTrace, L_Text_Msg_Port02_Text & L_Space_Text & oParamDict.Item(kPortName) DebugPrint kDebugTrace, L_Text_Msg_Port06_Text & L_Space_Text & oParamDict.Item(kPortNumber) DebugPrint kDebugTrace, L_Text_Msg_Port07_Text & L_Space_Text & oParamDict.Item(kQueueName) DebugPrint kDebugTrace, L_Text_Msg_Port13_Text & L_Space_Text & oParamDict.Item(kSNMPDeviceIndex) DebugPrint kDebugTrace, L_Text_Msg_Port12_Text & L_Space_Text & oParamDict.Item(kCommunityName) DebugPrint kDebugTrace, L_Text_Msg_Port03_Text & L_Space_Text & oParamDict.Item(kHostAddress) strServer = oParamDict(kServerName) strPort = oParamDict(kPortName) strUser = oParamDict(kUserName) strPassword = oParamDict(kPassword) ' ' If the port exists, then get the settings. Later PutInstance will do an update ' if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then set oPort = oService.Get("Win32_TCPIPPrinterPort.Name='" & strPort & "'") ' ' If get was unsuccessful then spawn a new port instance. Later PutInstance will do a create ' if Err.Number <> kErrorSuccess then ' ' Clear the previous error ' Err.Clear set oPort = oService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ end if else CreateOrSetPort = kErrorFailure exit function end if if Err.Number <> kErrorSuccess then wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _ & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description CreateOrSetPort = kErrorFailure exit function end if oPort.Name = oParamDict.Item(kPortName) oPort.HostAddress = oParamDict.Item(kHostAddress) oPort.PortNumber = oParamDict.Item(kPortNumber) oPort.SNMPEnabled = oParamDict.Item(kSNMP) oPort.SNMPDevIndex = oParamDict.Item(kSNMPDeviceIndex) oPort.SNMPCommunity = oParamDict.Item(kCommunityName) oPort.Queue = oParamDict.Item(kQueueName) oPort.ByteCount = oParamDict.Item(kDoubleSpool) PortType = oParamDict.Item(kPortType) ' ' Update the port object with the settings corresponding ' to the port type of the port to be added ' select case lcase(PortType) case "raw" oPort.Protocol = 1 if Not IsNull(oPort.Queue) then wscript.echo L_Error_Text & L_Colon_Text & L_Space_Text _ & L_Help_Help_General14_Text CreateOrSetPort = kErrorFailure exit function end if case "lpr" oPort.Protocol = 2 if IsNull(oPort.Queue) then oPort.Queue = L_LPR_Queue end if case else ' ' PutInstance will attempt to get the configuration of ' the device based on its IP address. Those settings ' will be used to add a new port ' end select ' ' Try creating or updating the port ' oPort.Put_(kFlagCreateOrUpdate) if Err.Number = kErrorSuccess then wscript.echo L_Text_Msg_General04_Text & L_Space_Text & oPort.Name iResult = kErrorSuccess else wscript.echo L_Text_Msg_General05_Text & L_Space_Text & oPort.Name & L_Space_Text _ & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _ & L_Space_Text & Err.Description ' ' Try getting extended error information ' call LastError() iResult = kErrorFailure end if CreateOrSetPort = iResult end function ' ' List ports on a machine. ' function ListPorts(oParamDict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text dim Ports dim oPort dim oService dim iRetval dim iTotal dim strServer dim strUser dim strPassword iResult = kErrorFailure strServer = oParamDict(kServerName) strUser = oParamDict(kUserName) strPassword = oParamDict(kPassword) if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then set Ports = oService.InstancesOf("Win32_TCPIPPrinterPort") else ListPorts = kErrorFailure exit function end if if Err.Number <> kErrorSuccess then wscript.echo L_Text_Msg_General06_Text & L_Space_Text & L_Error_Text & L_Space_Text _ & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description ListPrinters = kErrorFailure exit function end if iTotal = 0 for each oPort in Ports iTotal = iTotal + 1 wscript.echo L_Empty_Text wscript.echo L_Text_Msg_Port01_Text & L_Space_Text & strServer wscript.echo L_Text_Msg_Port02_Text & L_Space_Text & oPort.Name wscript.echo L_Text_Msg_Port03_Text & L_Space_Text & oPort.HostAddress if oPort.Protocol = 1 then wscript.echo L_Text_Msg_Port04_Text wscript.echo L_Text_Msg_Port06_Text & L_Space_Text & oPort.PortNumber else wscript.echo L_Text_Msg_Port05_Text wscript.echo L_Text_Msg_Port07_Text & L_Space_Text & oPort.Queue if oPort.ByteCount then wscript.echo L_Text_Msg_Port08_Text else wscript.echo L_Text_Msg_Port09_Text end if end if if oPort.SNMPEnabled then wscript.echo L_Text_Msg_Port10_Text wscript.echo L_Text_Msg_Port12_Text & L_Space_Text & oPort.SNMPCommunity wscript.echo L_Text_Msg_Port13_Text & L_Space_Text & oPort.SNMPDevIndex else wscript.echo L_Text_Msg_Port11_Text end if Err.Clear next wscript.echo L_Empty_Text wscript.echo L_Text_Msg_General07_Text & L_Space_Text & iTotal ListPorts = kErrorSuccess end function ' ' Gets the configuration of a port ' function GetPort(oParamDict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text DebugPrint kDebugTrace, L_Text_Msg_Port01_Text & L_Space_Text & oParamDict(kServerName) DebugPrint kDebugTrace, L_Text_Msg_Port02_Text & L_Space_Text & oParamDict(kPortName) dim oService dim oPort dim iResult dim strServer dim strPort dim strUser dim strPassword iResult = kErrorFailure strServer = oParamDict(kServerName) strPort = oParamDict(kPortName) strUser = oParamDict(kUserName) strPassword = oParamDict(kPassword) if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then set oPort = oService.Get("Win32_TCPIPPrinterPort.Name='" & strPort & "'") else GetPort = kErrorFailure exit function end if if Err.Number = kErrorSuccess then wscript.echo L_Empty_Text wscript.echo L_Text_Msg_Port01_Text & L_Space_Text & strServer wscript.echo L_Text_Msg_Port02_Text & L_Space_Text & oPort.Name wscript.echo L_Text_Msg_Port03_Text & L_Space_Text & oPort.HostAddress if oPort.Protocol = 1 then wscript.echo L_Text_Msg_Port04_Text wscript.echo L_Text_Msg_Port06_Text & L_Space_Text & oPort.PortNumber else wscript.echo L_Text_Msg_Port05_Text wscript.echo L_Text_Msg_Port07_Text & L_Space_Text & oPort.Queue if oPort.ByteCount then wscript.echo L_Text_Msg_Port08_Text else wscript.echo L_Text_Msg_Port09_Text end if end if if oPort.SNMPEnabled then wscript.echo L_Text_Msg_Port10_Text wscript.echo L_Text_Msg_Port12_Text & L_Space_Text & oPort.SNMPCommunity wscript.echo L_Text_Msg_Port13_Text & L_Space_Text & oPort.SNMPDevIndex else wscript.echo L_Text_Msg_Port11_Text end if iResult = kErrorSuccess else wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _ & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description ' ' Try getting extended error information ' call LastError() end if GetPort = iResult end function ' ' Debug display helper function ' sub DebugPrint(uFlags, strString) if gDebugFlag = true then if uFlags = kDebugTrace then wscript.echo L_Debug_Text & L_Space_Text & strString end if if uFlags = kDebugError then if Err <> 0 then wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _ & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _ & L_Space_Text & Err.Description end if end if end if end sub ' ' Parse the command line into its components ' function ParseCommandLine(iAction, oParamDict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg05_Text dim oArgs dim iIndex iAction = kActionUnknown set oArgs = Wscript.Arguments while iIndex < oArgs.Count select case oArgs(iIndex) case "-g" iAction = kActionGet case "-t" iAction = kActionSet case "-a" iAction = kActionAdd case "-d" iAction = kActionDelete case "-l" iAction = kActionList case "-2e" oParamDict.Add kDoubleSpool, true case "-2d" oParamDict.Add kDoubleSpool, false case "-s" iIndex = iIndex + 1 oParamDict.Add kServerName, RemoveBackslashes(oArgs(iIndex)) case "-u" iIndex = iIndex + 1 oParamDict.Add kUserName, oArgs(iIndex) case "-w" iIndex = iIndex + 1 oParamDict.Add kPassword, oArgs(iIndex) case "-n" iIndex = iIndex + 1 oParamDict.Add kPortNumber, oArgs(iIndex) case "-r" iIndex = iIndex + 1 oParamDict.Add kPortName, oArgs(iIndex) case "-o" iIndex = iIndex + 1 oParamDict.Add kPortType, oArgs(iIndex) case "-h" iIndex = iIndex + 1 oParamDict.Add kHostAddress, oArgs(iIndex) case "-q" iIndex = iIndex + 1 oParamDict.Add kQueueName, oArgs(iIndex) case "-i" iIndex = iIndex + 1 oParamDict.Add kSNMPDeviceIndex, oArgs(iIndex) case "-y" iIndex = iIndex + 1 oParamDict.Add kCommunityName, oArgs(iIndex) case "-me" oParamDict.Add kSNMP, true case "-md" oParamDict.Add kSNMP, false case "-?" Usage(True) exit function case else Usage(True) exit function end select iIndex = iIndex + 1 wend if Err = kErrorSuccess then ParseCommandLine = kErrorSuccess else wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _ & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description ParseCommandLine = kErrorFailure end if end function ' ' Display command usage. ' sub Usage(bExit) wscript.echo L_Help_Help_General01_Text wscript.echo L_Help_Help_General02_Text wscript.echo L_Help_Help_General03_Text wscript.echo L_Help_Help_General04_Text wscript.echo L_Help_Help_General05_Text wscript.echo L_Help_Help_General06_Text wscript.echo L_Help_Help_General07_Text wscript.echo L_Help_Help_General08_Text wscript.echo L_Help_Help_General09_Text wscript.echo L_Help_Help_General10_Text wscript.echo L_Help_Help_General11_Text wscript.echo L_Help_Help_General12_Text wscript.echo L_Help_Help_General13_Text wscript.echo L_Help_Help_General14_Text wscript.echo L_Help_Help_General15_Text wscript.echo L_Help_Help_General16_Text wscript.echo L_Help_Help_General17_Text wscript.echo L_Help_Help_General18_Text wscript.echo L_Help_Help_General19_Text wscript.echo L_Help_Help_General20_Text wscript.echo L_Help_Help_General21_Text wscript.echo L_Help_Help_General22_Text wscript.echo L_Empty_Text wscript.echo L_Help_Help_General23_Text wscript.echo L_Help_Help_General24_Text wscript.echo L_Help_Help_General25_Text wscript.echo L_Help_Help_General26_Text wscript.echo L_Help_Help_General27_Text wscript.echo L_Help_Help_General28_Text wscript.echo L_Help_Help_General29_Text wscript.echo L_Empty_Text wscript.echo L_Help_Help_General30_Text wscript.echo L_Help_Help_General31_Text wscript.echo L_Help_Help_General32_Text if bExit then wscript.quit(1) end if end sub ' ' Determines which program is being used to run this script. ' Returns true if the script host is cscript.exe ' function IsHostCscript() on error resume next dim strFullName dim strCommand dim i, j dim bReturn bReturn = false strFullName = WScript.FullName i = InStr(1, strFullName, ".exe", 1) if i <> 0 then j = InStrRev(strFullName, "\", i, 1) if j <> 0 then strCommand = Mid(strFullName, j+1, i-j-1) if LCase(strCommand) = "cscript" then bReturn = true end if end if end if if Err <> 0 then wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _ & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description end if IsHostCscript = bReturn end function ' ' Retrieves extended information about the last error that occurred ' during a WBEM operation. The methods that set an SWbemLastError ' object are GetObject, PutInstance, DeleteInstance ' sub LastError() on error resume next dim oError set oError = CreateObject("WbemScripting.SWbemLastError") if Err = kErrorSuccess then wscript.echo L_Operation_Text & L_Space_Text & oError.Operation wscript.echo L_Provider_Text & L_Space_Text & oError.ProviderName wscript.echo L_Description_Text & L_Space_Text & oError.Description wscript.echo L_Text_Error_General04_Text & L_Space_Text & oError.StatusCode end if end sub ' ' Connects to the WMI service on a server. oService is returned as a service ' object (SWbemServices) ' function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService) on error resume next dim oLocator dim bResult oService = null bResult = false set oLocator = CreateObject("WbemScripting.SWbemLocator") if Err = kErrorSuccess then set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword) if Err = kErrorSuccess then bResult = true oService.Security_.impersonationlevel = 3 ' ' Required to perform administrative tasks on the spooler service ' oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege" Err.Clear else wscript.echo L_Text_Msg_General10_Text & L_Space_Text & L_Error_Text _ & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _ & Err.Description end if else wscript.echo L_Text_Msg_General09_Text & L_Space_Text & L_Error_Text _ & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _ & Err.Description end if WmiConnect = bResult end function ' ' Remove leading "\\" from server name ' function RemoveBackslashes(strServer) dim strRet strRet = strServer if Left(strServer, 2) = "\\" and Len(strServer) > 2 then strRet = Mid(strServer, 3) end if RemoveBackslashes = strRet end function '' SIG '' Begin signature block '' SIG '' MIIl9wYJKoZIhvcNAQcCoIIl6DCCJeQCAQExDzANBglg '' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor '' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC '' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg '' SIG '' JP2OI/dGh8Dr4i1IHJc1kEljUqgI55azox+O936+ZZqg '' SIG '' ggrZMIIE+jCCA+KgAwIBAgITMwAABRna3aqL3ESykgAA '' SIG '' AAAFGTANBgkqhkiG9w0BAQsFADCBhDELMAkGA1UEBhMC '' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT '' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw '' SIG '' b3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRv '' SIG '' d3MgUHJvZHVjdGlvbiBQQ0EgMjAxMTAeFw0yNTA2MTkx '' SIG '' ODExNDRaFw0yNjA2MTcxODExNDRaMHAxCzAJBgNVBAYT '' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH '' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y '' SIG '' cG9yYXRpb24xGjAYBgNVBAMTEU1pY3Jvc29mdCBXaW5k '' SIG '' b3dzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC '' SIG '' AQEAmQzKu3Q5hilDQNu4AEil9OMAlaGFhl4n/mJEo12w '' SIG '' whow2MIDDc/LZHu0mhBRwMPkbBxS7tJLlyT5QlIvja1O '' SIG '' hQtZsxq9AsLQwmp24rktGEUodI5OOhNMony4JVDjPMJT '' SIG '' u7uOmgR2rXnpVtyHhlaLbxmHdJAutU4a1JpDaObKW23X '' SIG '' 9oBTx6HFYS5sj025J2hHFnZQ4Ohok0y4fWrQTuAIADMG '' SIG '' J9gu4J0r46mxQ96OY8TKrdhc6E/fHxFu+h+29q9o9ad8 '' SIG '' Z29WHxdjHU+GOiSdlrMqbssxSDoySm9Ustv6E2CIWTgh '' SIG '' y/ekp9o9a8LIyTk4iGI1C1TU9+PLSLS+SNiEBQIDAQAB '' SIG '' o4IBdjCCAXIwHwYDVR0lBBgwFgYKKwYBBAGCNwoDBgYI '' SIG '' KwYBBQUHAwMwHQYDVR0OBBYEFBXgOQRa/Bun0KuS0QTm '' SIG '' h145IbvNMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQLExVN '' SIG '' aWNyb3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIy '' SIG '' OTg3OSs1MDUzMjYwHwYDVR0jBBgwFoAUqSkCOY4WxJd4 '' SIG '' zZD5nk+a4XxVr1MwVwYDVR0fBFAwTjBMoEqgSIZGaHR0 '' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv '' SIG '' TWljV2luUHJvUENBMjAxMV8yMDExLTEwLTE5LmNybCUy '' SIG '' MDBhBggrBgEFBQcBAQRVMFMwUQYIKwYBBQUHMAKGRWh0 '' SIG '' dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2Vy '' SIG '' dHMvTWljV2luUHJvUENBMjAxMV8yMDExLTEwLTE5LmNy '' SIG '' dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IB '' SIG '' AQCXaHrueLhpWMezcagTCQAYTF2lSVni6Byzs1hxptJQ '' SIG '' /ucPkkkBpQpnVn5xFF/iUjUH6dmzf84pO7IJoeMjgiBv '' SIG '' LkqdQNMkodcaGzNviTgDD05uTWWWYsqNCd3EIEDAzAT2 '' SIG '' y0JWAEZMdJuAMfYG3dhNM8k0Ra9wpGIqqqZxCbK3XRDh '' SIG '' kBNGZccOnV3xfcbjbrMBc2K76pkXSAQsC3rIrSvkafiU '' SIG '' A54rUSKRVpR0faC12z8QE8Klh/6CyXJsFeie4BNe1fK+ '' SIG '' TqgMTRCcBCZzY+vJHRxuqWCi1JPNbIit9TlC81X8S8bB '' SIG '' 6R/e8RfEF+4CjXM/j36og+by9RQBc856dythMIIF1zCC '' SIG '' A7+gAwIBAgIKYQd2VgAAAAAACDANBgkqhkiG9w0BAQsF '' SIG '' ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp '' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT '' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp '' SIG '' TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y '' SIG '' aXR5IDIwMTAwHhcNMTExMDE5MTg0MTQyWhcNMjYxMDE5 '' SIG '' MTg1MTQyWjCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgT '' SIG '' Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc '' SIG '' BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEuMCwG '' SIG '' A1UEAxMlTWljcm9zb2Z0IFdpbmRvd3MgUHJvZHVjdGlv '' SIG '' biBQQ0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEP '' SIG '' ADCCAQoCggEBAN0Mu6LkLgnj58X3lmm8ACG9aTMz760E '' SIG '' y1SA7gaDu8UghNn30ovzOLCrpK0tfGJ5Bf/jSj8ENSBw '' SIG '' 48Tna+CcwDZ16Yox3Y1w5dw3tXRGlihbh2AjLL/cR6Vn '' SIG '' 91EnnnLrB6bJuR47UzV85dPsJ7mHHP65ySMJb6hGkcFu '' SIG '' ljxB08ujP10Cak3saR8lKFw2//1DFQqU4Bm0z9/CEuLC '' SIG '' WyfuJ3gwi1sqCWsiiVNgFizAaB1TuuxJ851hjIVoCXNE '' SIG '' XX2iVCvdefcVzzVdbBwrXM68nCOLb261Jtk2E8NP1ieu '' SIG '' uTI7QZIs4cfNd+iqVE73XAsEh2W0QxiosuBtGXfsWiT6 '' SIG '' SAMCAwEAAaOCAUMwggE/MBAGCSsGAQQBgjcVAQQDAgEA '' SIG '' MB0GA1UdDgQWBBSpKQI5jhbEl3jNkPmeT5rhfFWvUzAZ '' SIG '' BgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8E '' SIG '' BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAW '' SIG '' gBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBN '' SIG '' MEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20v '' SIG '' cGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx '' SIG '' MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsG '' SIG '' AQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v '' SIG '' cGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIz '' SIG '' LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAFPx8cVGlecJu '' SIG '' su85Prw8Ug9uKz8QE3P+qGjQSKY0TYqWBSbuMUaQYXnW '' SIG '' /zguRWv0wOUouNodj4rbCdcax0wKNmZqjOwb1wSQqBgX '' SIG '' pJu54kAyNnbEwVrGv+QEwOoW06zDaO9irN1UbFAwWKbr '' SIG '' fP6Up06O9Ox8hnNXwlIhczRa86OKVsgE2gcJ7fiL4870 '' SIG '' fo6u8PYLigj7P8kdcn9TuOu+Y+DjPTFlsIHl8qzNFqSf '' SIG '' Paixm8JC0JCEX1Qd/4nquh1HkG+wc05Bn0CfX+WhKrIR '' SIG '' kXOKISjwzt5zOV8+q1xg7N8DEKjTCen09paFtn9RiGZH '' SIG '' GY2isBI9gSpoBXe7kUxie7bBB8e6eoc0Aw5LYnqZ6cr8 '' SIG '' zko3yS2kV3wc/j3cuA9a+tbEswKFAjrqs9lu5GkhN96B '' SIG '' 0fZ1GQVn05NXXikbOcjuLeHN5EVzW9DSznqrFhmCRljQ '' SIG '' Xp2Bs2evbDXyvOU/JOI1ogp1BvYYVpnUeCzRBRvr0IgB '' SIG '' naoQ8QXfun4sY7cGmyMhxPl4bOJYFwY2K5ESA8yk2fIt '' SIG '' uvmUnUDtGEXxzopcaz6rA9NwGCoKauBfR9HVYwoy8q/X '' SIG '' Nh8qcFrlQlkIcUtXun6DgfAhPPQcwcW5kJMOiEWThumx '' SIG '' IJm+mMvFlaRdYtagYwggvXUQd30980W5n5efy1eAbzOp '' SIG '' BM93pGIcWX4xghp2MIIacgIBATCBnDCBhDELMAkGA1UE '' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV '' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD '' SIG '' b3Jwb3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdp '' SIG '' bmRvd3MgUHJvZHVjdGlvbiBQQ0EgMjAxMQITMwAABRna '' SIG '' 3aqL3ESykgAAAAAFGTANBglghkgBZQMEAgEFAKCB+jAZ '' SIG '' BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG '' SIG '' 9w0BCQQxIgQgoHcpO+Mc7CMnH+Gft3DbkYb1lVjfqUe4 '' SIG '' eHB2V3ES4jEwUAYKKwYBBAGCNwoDHDFCDEAwOUJENUEy '' SIG '' NzU5QzQzQTlEQjA4QTA0QkVGRjU0NjI0QkQ0QkY0MjUz '' SIG '' Q0Y3QTk2NDI5RjQ1MjJBNDY5RDZGOEY4MFoGCisGAQQB '' SIG '' gjcCAQwxTDBKoCSAIgBNAGkAYwByAG8AcwBvAGYAdAAg '' SIG '' AFcAaQBuAGQAbwB3AHOhIoAgaHR0cDovL3d3dy5taWNy '' SIG '' b3NvZnQuY29tL3dpbmRvd3MwDQYJKoZIhvcNAQEBBQAE '' SIG '' ggEAQvBZehEiQe4Xt6dKS5td9Sul6xzmjYjlxPoCMpVK '' SIG '' aT/xOYBoQA/Y5J7vOn3kqpIZ20QAvGjbMv6/DwSHGr4z '' SIG '' tnWtxRJzUYUVxRPsrLpzJuTGRlFIHLnCrZxY5T1NkyvT '' SIG '' zslKEUeCmDWeUChZNwqNm4usEUJZyc+Trbveq4hFlvrZ '' SIG '' y07NPR0tds7sIa9WE7tyU2lwyWiGLAAoyLmMnF9gdmhv '' SIG '' xdwklqiQdOmg0/v2nUI0uooID+649n/hACoz3J7wCY3I '' SIG '' 8mi/kv0EPThUSFd02h9OqAlL6w0a7HNhl17jo+QCw15N '' SIG '' ic1YxbG8jiUnXbk938gfjsw2617q0MlpxtWtM6GCF60w '' SIG '' ghepBgorBgEEAYI3AwMBMYIXmTCCF5UGCSqGSIb3DQEH '' SIG '' AqCCF4YwgheCAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFa '' SIG '' BgsqhkiG9w0BCRABBKCCAUkEggFFMIIBQQIBAQYKKwYB '' SIG '' BAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCCA4kbt17Qy '' SIG '' O8u41qwxGqqIBob1E022hXom5Km8DyHipgIGaevWwqc3 '' SIG '' GBMyMDI2MDUwNjEwNDEyNi4zNzJaMASAAgH0oIHZpIHW '' SIG '' MIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu '' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV '' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRN '' SIG '' aWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0 '' SIG '' ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo0QzFB '' SIG '' LTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRp '' SIG '' bWUtU3RhbXAgU2VydmljZaCCEfswggcoMIIFEKADAgEC '' SIG '' AhMzAAACGCXZkgXi5+XkAAEAAAIYMA0GCSqGSIb3DQEB '' SIG '' CwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo '' SIG '' aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK '' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT '' SIG '' HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4X '' SIG '' DTI1MDgxNDE4NDgyNVoXDTI2MTExMzE4NDgyNVowgdMx '' SIG '' CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u '' SIG '' MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy '' SIG '' b3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv '' SIG '' c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEn '' SIG '' MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjRDMUEtMDVF '' SIG '' MC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1T '' SIG '' dGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOC '' SIG '' Ag8AMIICCgKCAgEAsdzo6uuQJqAfxLnvEBfIvj6knK+p '' SIG '' 6bnMXEFZ/QjPOFywlcjDfzI8Dg1nzDlxm7/pqbvjWhyv '' SIG '' azKmFyO6qbPwClfRnI57h5OCixgpOOCGJJQIZSTiMgui '' SIG '' 3B8DPiFtJPcfzRt3FsnxjLXwBIjGgnjGfmQl7zejA1Wo '' SIG '' YL/qBmQhw/FDFTWebxfo4m0RCCOxf2qwj31aOjc2aYUe '' SIG '' PtLMXHsXKPFH0tp5SKIF/9tJxRSg0NYEvQqVilje8aQk '' SIG '' Pd3qzAux2Mc5HMSK4NMTtVVCYAWDUZ4p+6iDI9t5BNCB '' SIG '' Isf5ooFNUWtxCqnpFYiLYkHfFfxhVUBZ8LGGxYsA36sn '' SIG '' D65s2Hf4t86k0e8WelH/usfhYqOM3z2yaI8rg08631Ik '' SIG '' wqUzyQoEPqMsHgBem1xpmOGSIUnVvTsAv+lmECL2Rqrc '' SIG '' OZlZax8K0aiij8h6UkWBN2IA/ikackTSGVRBQmWWZuLF '' SIG '' WV/T4xuNzscC0X7xo4fetgpsqaEA0jY/QevkTvLv4OlN '' SIG '' N9eOL8LNh7Vm0R65P7oabOQDqtUFAwCgjgPJ0iV/jQCa '' SIG '' MAcO3SYpG5wSAYiJkk4XLjNSlNxU2Idjs1sORhl7s7LC '' SIG '' 6hOb7bVAHVwON74GxfFNiEIA6BfudANjpQJ0nUc/ppEX '' SIG '' pT4pgDBHsYtV8OyKSjKsIxOdFR7fIJIjDc8DvUkCAwEA '' SIG '' AaOCAUkwggFFMB0GA1UdDgQWBBQkLqHEXDobY7dHuoQC '' SIG '' Ba4sX7aL0TAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJl '' SIG '' pxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8v '' SIG '' d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNy '' SIG '' b3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgx '' SIG '' KS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAC '' SIG '' hlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz '' SIG '' L2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQ '' SIG '' Q0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYG '' SIG '' A1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQE '' SIG '' AwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAnkjRhjwPgdoI '' SIG '' pvt4YioT/j0LWuBxF3ARBKXDENggraKvC0oRPwbjAmsX '' SIG '' nPEmtuo5MD8uJ9Xw9eYrxqqkK4DF9snZMrHMfooxCa++ '' SIG '' 1irLz8YoozC4tci+a4N37Sbke1pt1xs9qZtvkPgZGWn5 '' SIG '' BcwVfmAwSZLHi2CuZ06Y0/X+t6fNBnrbMVovNaDX4WPd '' SIG '' yI9GEzxfIggDsck2Ipo4VXL/Arcz7p2F7bEZGRuyxjgM '' SIG '' C+woCkDJaH/yk/wcZpAsixe4POdN0DW6Zb35O3Dg3+a6 '' SIG '' prANMc3WIdvfKDl75P0aqcQbQAR7b0f4gH4NMkUct0Wm '' SIG '' 4GN5KhsE1YK7V/wAqDKmK4jx3zLz3a8Hsxa9HB3Gyitl '' SIG '' mC5sDhOl4QTGN5kRi6oCoV4hK+kIFgnkWjHhSRNomz36 '' SIG '' QnbCSG/BHLEm2GRU9u3/I4zUd9E1AC97IJEGfwb+0NWb '' SIG '' 3QEcrkypdGdWwl0LEObhrQR9B1V7+edcyNmsX0p2BX0r '' SIG '' Fpd1PkXJSbxf8IcEiw/bkNgagZE+VlDtxXeruLdo5k3l '' SIG '' GOv7rPYuOEaoZYxDvZtpHP9P36wmW4INjR6NInn2UM+k '' SIG '' rP/xeLnRbDBkm9RslnoDhVraliKDH62BxhcgL9tiRgOH '' SIG '' lcI0wqvVWLdv8yW8rxkawOlhCRqT3EKECW8ktUAPwNbB '' SIG '' ULkT+oWcvBcwggdxMIIFWaADAgECAhMzAAAAFcXna54C '' SIG '' m0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD '' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G '' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 '' SIG '' IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQg '' SIG '' Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAe '' SIG '' Fw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwx '' SIG '' CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u '' SIG '' MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy '' SIG '' b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv '' SIG '' c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkq '' SIG '' hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciEL '' SIG '' eaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9 '' SIG '' uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cy '' SIG '' wBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTeg '' SIG '' Cjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7 '' SIG '' uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN '' SIG '' 7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPg '' SIG '' yY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy '' SIG '' 1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEe '' SIG '' HT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/b '' SIG '' fV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP '' SIG '' 8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJo '' SIG '' LhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6 '' SIG '' EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1 '' SIG '' GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N '' SIG '' +VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacau '' SIG '' e7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcV '' SIG '' AQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+ '' SIG '' gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP0 '' SIG '' 5dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdM '' SIG '' g30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1p '' SIG '' Y3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y '' SIG '' eS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYB '' SIG '' BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGG '' SIG '' MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZW '' SIG '' y4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmg '' SIG '' R4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j '' SIG '' cmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYt '' SIG '' MjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcw '' SIG '' AoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j '' SIG '' ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQw '' SIG '' DQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb '' SIG '' 4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRs '' SIG '' fNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2 '' SIG '' LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2Rje '' SIG '' bYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihV '' SIG '' J9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8 '' SIG '' DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4 '' SIG '' FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2 '' SIG '' kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0 '' SIG '' SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5b '' SIG '' RAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beu '' SIG '' yOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9 '' SIG '' y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJ '' SIG '' jXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW '' SIG '' 4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ '' SIG '' 8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOh '' SIG '' cGbyoYIDVjCCAj4CAQEwggEBoYHZpIHWMIHTMQswCQYD '' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G '' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 '' SIG '' IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg '' SIG '' SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNV '' SIG '' BAsTHm5TaGllbGQgVFNTIEVTTjo0QzFBLTA1RTAtRDk0 '' SIG '' NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg '' SIG '' U2VydmljZaIjCgEBMAcGBSsOAwIaAxUAnWtGrXWiuNE8 '' SIG '' QrKfm4CtGr57z+mggYMwgYCkfjB8MQswCQYDVQQGEwJV '' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH '' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv '' SIG '' cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T '' SIG '' dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO2l '' SIG '' fbkwIhgPMjAyNjA1MDYwODQzMzdaGA8yMDI2MDUwNzA4 '' SIG '' NDMzN1owdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA7aV9 '' SIG '' uQIBADAHAgEAAgIF5DAHAgEAAgITyDAKAgUA7abPOQIB '' SIG '' ADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMC '' SIG '' oAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3 '' SIG '' DQEBCwUAA4IBAQAzHXGVul7ImJBkzMJ2AfukolA3CPYx '' SIG '' +X0/aqht3vlZ7TGR7dFT72vhVuqIc8Jm2SA8nlRMoY+J '' SIG '' EjkV5EY4iSZVCfvdEzke1duqWTJovu5RL4NfAhGUb6Sq '' SIG '' ZXvw7DNVTtaqPwF0OEurwZPL5yGN/nji3nZ/soAIRskx '' SIG '' EQdtUVH/PpiYNvb+/Jsi0DA7ePgJoErRc0e1lp9GPFgL '' SIG '' OWy0Y5s6k7PYb9Gbo/d15NyESZWRaISnS+Z1l4qy7u4h '' SIG '' LMOyaoD7XZljqpFpR8zgXoJR2P/CpX3JciTtYxMwRe5o '' SIG '' 8HfrZrtb49pPlEi/xV0WBpf4EtDO5aUCDY+sFSc5FQkU '' SIG '' nvtAMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMx '' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl '' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh '' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh '' SIG '' bXAgUENBIDIwMTACEzMAAAIYJdmSBeLn5eQAAQAAAhgw '' SIG '' DQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzEN '' SIG '' BgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgM0qA '' SIG '' v4TKhaBWhAz7sXHpionSXqtKpfLvqka9fPei8wYwgfoG '' SIG '' CyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCCZE9yJuOTI '' SIG '' tIwWaES6lzGKK1XcSoz1ynRzaOVzx9eFajCBmDCBgKR+ '' SIG '' MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n '' SIG '' dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN '' SIG '' aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p '' SIG '' Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAC '' SIG '' GCXZkgXi5+XkAAEAAAIYMCIEIH5Z4i7TUiOK2yndp7hs '' SIG '' K1rYmUHnQvTjBdQX5kOXMFKFMA0GCSqGSIb3DQEBCwUA '' SIG '' BIICAFuuzAmZaRIzDfKDIODacCTSNT0pFaZ8SX5HH4/5 '' SIG '' L/AvaqHxYvXqAELkdNNpMgU+TqhoU/WYM/mtXRxKEzv5 '' SIG '' o7tBEtZNlp2YkE+GSbou6uIzt02qzuo7oDDXbR3jbg7k '' SIG '' A4Z+d23uFWUhMECoD6/P+Bvlrc+shDOLP/BS87HcmHBu '' SIG '' cpfl4aEfzDQzO4aO6C1Xr36P23uUSPa59aGjOZXRL3PO '' SIG '' 4LLOoXmpJio0kGR/CT8q65xUj4138H4ewwt+qzPLelaN '' SIG '' Rc3YXSNtVWuzCrxXUhjVlI40XG+P0ThIhd9sPA6loP0/ '' SIG '' j13qJL9mYDDmcWnNHv+yAo2nnrrlfcev7dk6ErZqN3pW '' SIG '' 1oqyKvjyxE0Idc4FT1VhCXkc7Qti2Vi2eVOhokiJFILO '' SIG '' +NxO5SbwroHErRhoxAoLJGeOCd4xul9FOgS6cmeVE+ag '' SIG '' KY1fCtRjezaFxUtZqu0MM746U4DrwgxjPH7FqnPloVTy '' SIG '' 5mPK04JqThhwLIjWkGhp/MVeu0jmaOGKdoA2LeX9DjU3 '' SIG '' ukia5XaktGiuKnULzxXMDTCIktlT+W4xiY0jBiFuwgn/ '' SIG '' 8Q3L9uiFH17DmDnhIKpSizs3f98TurgCyXwrx7wi56Th '' SIG '' 3xP91EwKwt7Nc/iG3FClPgBZ7oJ6uRY5VVT6J791Ohhh '' SIG '' BEp/KVC3WnubbG8qzSrUIRnh2RDG '' SIG '' End signature block