Set-StrictMode -Version Latest InModuleScope Pester { Describe "New-PesterState" { Context "TestNameFilter parameter is set" { $p = new-pesterstate -TestNameFilter "filter" it "sets the TestNameFilter property" { $p.TestNameFilter | should be "filter" } } Context "TagFilter parameter is set" { $p = new-pesterstate -TagFilter "tag","tag2" it "sets the TestNameFilter property" { $p.TagFilter | should be ("tag","tag2") } } Context "ExcludeTagFilter parameter is set" { $p = new-pesterstate -ExcludeTagFilter "tag3", "tag" it "sets the ExcludeTagFilter property" { $p.ExcludeTagFilter | should be ("tag3", "tag") } } Context "TagFilter and ExcludeTagFilter parameter are set" { $p = new-pesterstate -TagFilter "tag","tag2" -ExcludeTagFilter "tag3" it "sets the TestNameFilter property" { $p.TagFilter | should be ("tag","tag2") } it "sets the ExcludeTagFilter property" { $p.ExcludeTagFilter | should be ("tag3") } } Context "TestNameFilter and TagFilter parameter is set" { $p = new-pesterstate -TagFilter "tag","tag2" -testnamefilter "filter" it "sets the TestNameFilter property" { $p.TagFilter | should be ("tag","tag2") } it "sets the TestNameFilter property" { $p.TagFilter | should be ("tag","tag2") } } } Describe "Pester state object" { $p = New-PesterState Context "entering describe" { It "enters describe" { $p.EnterDescribe("describe") $p.CurrentDescribe | should be "Describe" } It "can enter describe only once" { { $p.EnterDescribe("describe") } | Should Throw } It "Reports scope correctly" { $p.Scope | should be "describe" } } Context "leaving describe" { It "leaves describe" { $p.LeaveDescribe() $p.CurrentDescribe | should benullOrEmpty } It "Reports scope correctly" { $p.Scope | should benullOrEmpty } } context "Entering It from Describe" { $p.EnterDescribe('Describe') It "Enters It successfully" { { $p.EnterTest("It") } | Should Not Throw } It "Reports scope correctly" { $p.Scope | Should Be 'It' } It "Cannot enter It after already entered" { { $p.EnterTest("It") } | Should Throw } It "Cannot enter Context from inside It" { { $p.EnterContext("Context") } | Should Throw } } context "Leaving It from Describe" { It "Leaves It to Describe" { { $p.LeaveTest() } | Should Not Throw } It "Reports scope correctly" { $p.Scope | Should Be 'Describe' } $p.LeaveDescribe() } Context "entering Context" { it "Cannot enter Context before Describe" { { $p.EnterContext("context") } | should throw } it "enters context from describe" { $p.EnterDescribe("Describe") $p.EnterContext("Context") $p.CurrentContext | should be "Context" } It "can enter context only once" { { $p.EnterContext("Context") } | Should Throw } It "Reports scope correctly" { $p.Scope | should be "Context" } } Context "leaving context" { it "cannot leave describe before leaving context" { { $p.LeaveDescribe() } | should throw } it "leaves context" { $p.LeaveContext() $p.CurrentContext | should BeNullOrEmpty } It "Returns from context to describe" { $p.Scope | should be "Describe" } $p.LeaveDescribe() } context "Entering It from Context" { $p.EnterDescribe('Describe') $p.EnterContext('Context') It "Enters It successfully" { { $p.EnterTest("It") } | Should Not Throw } It "Reports scope correctly" { $p.Scope | Should Be 'It' } It "Cannot enter It after already entered" { { $p.EnterTest("It") } | Should Throw } } context "Leaving It from Context" { It "Leaves It to Context" { { $p.LeaveTest() } | Should Not Throw } It "Reports scope correctly" { $p.Scope | Should Be 'Context' } $p.LeaveContext() $p.LeaveDescribe() } context "adding test result" { $p.EnterDescribe('Describe') it "adds passed test" { $p.AddTestResult("result","Passed", 100) $result = $p.TestResult[-1] $result.Name | should be "result" $result.passed | should be $true $result.Result | Should be "Passed" $result.time.ticks | should be 100 } it "adds failed test" { try { throw 'message' } catch { $e = $_ } $p.AddTestResult("result","Failed", 100, "fail", "stack","suite name",@{param='eters'},$e) $result = $p.TestResult[-1] $result.Name | should be "result" $result.passed | should be $false $result.Result | Should be "Failed" $result.time.ticks | should be 100 $result.FailureMessage | should be "fail" $result.StackTrace | should be "stack" $result.ParameterizedSuiteName | should be "suite name" $result.Parameters['param'] | should be 'eters' $result.ErrorRecord.Exception.Message | should be 'message' } it "adds skipped test" { $p.AddTestResult("result","Skipped", 100) $result = $p.TestResult[-1] $result.Name | should be "result" $result.passed | should be $true $result.Result | Should be "Skipped" $result.time.ticks | should be 100 } it "adds Pending test" { $p.AddTestResult("result","Pending", 100) $result = $p.TestResult[-1] $result.Name | should be "result" $result.passed | should be $true $result.Result | Should be "Pending" $result.time.ticks | should be 100 } it "can add test result before entering describe" { if ($p.CurrentContext) { $p.LeaveContext()} if ($p.CurrentDescribe) { $p.LeaveDescribe() } { $p.addTestResult(1,"Passed",1) } | should not throw } $p.LeaveContext() $p.LeaveDescribe() } Context "Path and TestNameFilter parameter is set" { $strict = New-PesterState -Strict It "Keeps Passed state" { $strict.AddTestResult("test","Passed") $result = $strict.TestResult[-1] $result.passed | should be $true $result.Result | Should be "Passed" } It "Keeps Failed state" { $strict.AddTestResult("test","Failed") $result = $strict.TestResult[-1] $result.passed | should be $false $result.Result | Should be "Failed" } It "Changes Pending state to Failed" { $strict.AddTestResult("test","Pending") $result = $strict.TestResult[-1] $result.passed | should be $false $result.Result | Should be "Failed" } It "Changes Skipped state to Failed" { $strict.AddTestResult("test","Skipped") $result = $strict.TestResult[-1] $result.passed | should be $false $result.Result | Should be "Failed" } } } Describe ConvertTo-FailureLines { $testPath = Join-Path $TestDrive test.ps1 $escapedTestPath = [regex]::Escape($testPath) It 'produces correct message lines.' { try { throw 'message' } catch { $e = $_ } $r = $e | ConvertTo-FailureLines $r.Message[0] | Should be 'RuntimeException: message' $r.Message.Count | Should be 1 } It 'failed should produces correct message lines.' { try { 'One' | Should be 'Two' } catch { $e = $_ } $r = $e | ConvertTo-FailureLines $r.Message[0] | Should be 'String lengths are both 3. Strings differ at index 0.' $r.Message[1] | Should be 'Expected: {Two}' $r.Message[2] | Should be 'But was: {One}' $r.Message[3] | Should be '-----------^' $r.Message[4] | Should match "'One' | Should be 'Two'" $r.Message.Count | Should be 5 } Context 'should fails in file' { Set-Content -Path $testPath -Value @' $script:IgnoreErrorPreference = 'SilentlyContinue' 'One' | Should be 'Two' '@ try { & $testPath } catch { $e = $_ } $r = $e | ConvertTo-FailureLines It 'produces correct message lines.' { $r.Message[0] | Should be 'String lengths are both 3. Strings differ at index 0.' $r.Message[1] | Should be 'Expected: {Two}' $r.Message[2] | Should be 'But was: {One}' $r.Message[3] | Should be '-----------^' $r.Message[4] | Should be "2: 'One' | Should be 'Two'" $r.Message.Count | Should be 5 } if ( $e | Get-Member -Name ScriptStackTrace ) { It 'produces correct trace lines.' { $r.Trace[0] | Should be "at , $testPath`: line 2" $r.Trace[1] -match 'at , .*\\Functions\\PesterState.Tests.ps1: line [0-9]*$' | Should be $true $r.Trace.Count | Should be 2 } } else { It 'produces correct trace lines.' { $r.Trace[0] | Should be "at line: 2 in $testPath" $r.Trace.Count | Should be 1 } } } Context 'exception thrown in nested functions in file' { Set-Content -Path $testPath -Value @' function f1 { throw 'f1 message' } function f2 { f1 } f2 '@ try { & $testPath } catch { $e = $_ } $r = $e | ConvertTo-FailureLines It 'produces correct message lines.' { $r.Message[0] | Should be 'RuntimeException: f1 message' } if ( $e | Get-Member -Name ScriptStackTrace ) { It 'produces correct trace lines.' { $r.Trace[0] | Should be "at f1, $testPath`: line 2" $r.Trace[1] | Should be "at f2, $testPath`: line 5" $r.Trace[2] | Should be "at , $testPath`: line 7" $r.Trace[3] -match 'at , .*\\Functions\\PesterState.Tests.ps1: line [0-9]*$' | Should be $true $r.Trace.Count | Should be 4 } } else { It 'produces correct trace lines.' { $r.Trace[0] | Should be "at line: 2 in $testPath" $r.Trace.Count | Should be 1 } } } Context 'nested exceptions thrown in file' { Set-Content -Path $testPath -Value @' try { throw New-Object System.ArgumentException( 'inner message', 'param_name' ) } catch { throw New-Object System.FormatException( 'outer message', $_.Exception ) } '@ try { & $testPath } catch { $e = $_ } $r = $e | ConvertTo-FailureLines It 'produces correct message lines.' { $r.Message[0] | Should be 'ArgumentException: inner message' $r.Message[1] | Should be 'Parameter name: param_name' $r.Message[2] | Should be 'FormatException: outer message' } if ( $e | Get-Member -Name ScriptStackTrace ) { It 'produces correct trace line.' { $r.Trace[0] | Should be "at , $testPath`: line 10" $r.Trace[1] -match 'at , .*\\Functions\\PesterState.Tests.ps1: line [0-9]*$' $r.Trace.Count | Should be 2 } } else { It 'produces correct trace line.' { $r.Trace[0] | Should be "at line: 10 in $testPath" $r.Trace.Count | Should be 1 } } } } } # SIG # Begin signature block # MIInRwYJKoZIhvcNAQcCoIInODCCJzQCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCzVis637nmKLfu # tBlmMuPbVllEbkewuwHWaKM6oNYSS6CCC7QwggXLMIIEs6ADAgECAhMzAAABQGf2 # mGsxCLhyAAAAAAFAMA0GCSqGSIb3DQEBCwUAMIGOMQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMTgwNgYDVQQDEy9NaWNyb3NvZnQgV2luZG93cyBU # aGlyZCBQYXJ0eSBDb21wb25lbnQgQ0EgMjAxMjAeFw0yNTExMTMxOTU5NDNaFw0y # NjExMTAxOTU5NDNaMIGEMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMS4wLAYDVQQDEyVNaWNyb3NvZnQgV2luZG93cyAzcmQgcGFydHkgQ29tcG9u # ZW50MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEArGt4Hrjs3D7+IIab # GkPGtg4XeWQFi8nKsdeF+N6nkYF9wsmw0qPk4OovEiJnCSRiEtLfYy3Icn4iOp7L # 24oCa0zlgYCND3OnNfYOuVpMsq3CSkXYg3H+VMiB11hOLcctTu4RWy4ZRKsL5NVI # AduJFgd/1Qs2mQpUuOyFfLKhu/+Z+T2c9YALxsfnPvqn8Tn8Tt8wdZuFwz7kK3jl # e2T3YBofybAR2aH678TnOxhLe2/hEpTdKaVfcqyrIX0Mw/LwqEJnj4G8amBbQ7OG # RnKm1VNd4nMpRt1SflNlVo1Q3Qqnj9K6mSPw99YGMCTaVr6jKPylsWyW4nsvu8m0 # MbBJJiLOi0sOTHtwQEVcBH6WM7xbODqwPaklS1wDbED1wfzImIUR8WsXJVjDm7Fg # x4JDo8oLIjKFrEvzBfrYWsvlDg8p9XgR7EB/IJwXGuJbFzo/S+r3D5DkUZXX/72k # XA4FeRJAgLePAuGChPvyQiLtKJeJm9ftJeukrIcs7JpJVHObAgMBAAGjggGoMIIB # pDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUB9FDBUZ0W11vsv6qqb9t # vKspCIowRQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEWMBQGA1UEBRMNMjMwODA5KzUwNjIyOTAfBgNVHSMEGDAWgBRhcaeHr/9p # 1SF2T1KTKAC+eRKrhDB0BgNVHR8EbTBrMGmgZ6BlhmNodHRwOi8vd3d3Lm1pY3Jv # c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwVGhpcmQl # MjBQYXJ0eSUyMENvbXBvbmVudCUyMENBJTIwMjAxMi5jcmwwgYEGCCsGAQUFBwEB # BHUwczBxBggrBgEFBQcwAoZlaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w # cy9jZXJ0cy9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwVGhpcmQlMjBQYXJ0eSUyMENv # bXBvbmVudCUyMENBJTIwMjAxMi5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0B # AQsFAAOCAQEAmFzJPKhkAXPOcfy9S4q1nP3XCvmABVGv/VRzFZ1e+oVtVzOFkbZ6 # osY1OpZqa9CEvtgcrtciv1y9mV1SpxAMwfEqq+Nhw2GdZ3IWqFzWFsEe2S9U196s # XRIRIxglZMBWyzdy8rQ+P7L2+LciW4qcaw2wtv6YoI0q1isgk0t1OF5kEL0t9hhx # UrBavTdoqZ3b5JtwDqzmIsxuLtGbE9Pqbz2gx/me+7yduYpIcYlmEmPQkg3gmWkZ # lnSRePu7/5RXS2TGW1O5JP8aqVcMn0ZkHEhtT368pE/CxQVAkAYHNz6+enP9n+HC # 2udu395c0fVlRHy/d53f32RukfbjakH8uzCCBeEwggPJoAMCAQICCmELqsEAAAAA # AAkwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo # aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y # cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1 # dGhvcml0eSAyMDEwMB4XDTEyMDQxODIzNDgzOFoXDTI3MDQxODIzNTgzOFowgY4x # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xODA2BgNVBAMTL01p # Y3Jvc29mdCBXaW5kb3dzIFRoaXJkIFBhcnR5IENvbXBvbmVudCBDQSAyMDEyMIIB # IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo5wwhAmnYy7PCkfw6iT5ozAg # D15XMSaBmjEHslDUzmcJCGUKWqVLrtXtEC7npZm1n2gvmItYAqwgtCnEcb0oHKX9 # PJtk5MXr32ElvPDuaL/Rp8t+KgKBTmRcDFOGeVcZN2G3mPkMoE4iWZv5Gy1nPCc8 # VpBm4/1/ZX0Phr01R+iKzPTajulqTqunVeyiiR7VM0VTy/med73NLPkFuH90AR3o # +xjhQ9EN6arcN2+9/rgP7R1NAUZOCqz8gujsVoMTjjoB7RRkdOpksmYQtmhtyHAA # fVBILj1D7uAklcbNjsf9uOSVz91++5VeoQHNQ7EH16Qw7puGGipuwQtZonRviwID # AQABo4IBQzCCAT8wEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGFxp4ev/2nV # IXZPUpMoAL55EquEMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQE # AwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ # W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv # bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBa # BggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqG # SIb3DQEBCwUAA4ICAQBaimfazNX9DSZBd78KRni0s94SaSt3I8JlLwFf0gP0YbpQ # nS6MOXLzbD5qsR52bey384LczLvFaXAoc2YXP1Tr7gEWSMRG2RuAroE6jQ95bWiw # nuotPznTyjh+vV58CG4Z3MbC9DgzaGHiUkeD4QABVtK6y4eCBTEKQYtO539fX+1f # 0zktReuiE7/9HsKYQXFhFl/ICnAlfFlpMSTkcecKuwQX959yHsnSuxq+PQL+CQyy # Q7RZGplTk5YhX+DWtyYBQpU2rCf9vvSFd2g9GL30vpiIIhGGUhbzRewDlxBwh6Nw # Q3E828mGAxcM9XNbxn3hXGTt18VI1+0y4tGq08+n9ldOYfl362fyiLPeANoDj9CK # NDc+HdhiuNKx8+Evi3I7gZZ8b/zsZnZyYBsk8qCJbVttAC7vKN2GhwXCtLnlvmTC # KvJKFVyY4sQnhf9S42J+D7ICC9dmxwqy0z0gBBRQMlmDCn2b7Vo4EgFSui9eIHKO # SvH953ECjDvhB77Jc/TdR9i077SkszC5iT52yrkAmFZ+q+qKuKXQOKtpdxMLFC/p # qkEf97q9Ois0iu4Kq2PmY/eIJI4gDSs7nePCSVKsnx8OOTtd1G5QauZ9UjqqfDMV # KQ0mXgFYp06pPXqEb3Q/YJ/kMk82AK9tcdM+pkZlX4F08f7BcdpMoEFagt3xHzGC # GukwghrlAgEBMIGmMIGOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMTgwNgYDVQQDEy9NaWNyb3NvZnQgV2luZG93cyBUaGlyZCBQYXJ0eSBDb21w # b25lbnQgQ0EgMjAxMgITMwAAAUBn9phrMQi4cgAAAAABQDANBglghkgBZQMEAgEF # AKCB+jAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQg # InRqHKo44foeQeopz1shBwFDUlKjffYxokul9o552kIwUAYKKwYBBAGCNwoDHDFC # DEA5MUMzOEYzQjRCNUIyNDM1RDE5RjY0RUY3MjhDN0IwNUYzRjBFMzA4RTBERUE3 # ODY4MDI4NDgzODQ3OUNENEM0MFoGCisGAQQBgjcCAQwxTDBKoCSAIgBNAGkAYwBy # AG8AcwBvAGYAdAAgAFcAaQBuAGQAbwB3AHOhIoAgaHR0cDovL3d3dy5taWNyb3Nv # ZnQuY29tL3dpbmRvd3MwDQYJKoZIhvcNAQEBBQAEggGAhQ0RHHjwlzZJqZRcR4V5 # KS5+Y+nhK9tpzr8A8UxNsZOeTQeIiwFNIJMrXTlNJ9wtkM4W5K0tM2FwUQh6Kvc+ # 3g0aTOYo5smFXqO1o4H15O3YC2IgwlyBnUd3tToe3/cm8z4cqr15K5uPgaRUfFgk # FppUiBUH543XAooa1MtwJ9NzZXobYkK4/LqgutUY+//Uc9gpYEqGDOWM2qQV3v/6 # RtfO/SNl96jifeOOb7ATw2rh0+V10Grc+3yjZ2FR+LdsyKKBfiMsaXTa3d77fiRa # 1P4DhNdPCqVC013Zd8pfSg7R0J5SACgEmdbh6qvZWUKD0fqSOaq5+WSnKFsfqDgM # whHQG9pGhq65C9IEqbXFYtrfr4jW7EDL/WrhnZD5TxPsAJI7k67F/ZLjMaqFFqRM # 4b3EjCz80xcmKdsL0Okf0TaI9qhMAUvRQU8TzkiltIbMk2qhIbiBTDC+JQqZEeuE # NMELbc36nG6sRn8oFbM5SXNHiBsTUmhkUVN3L3LkQrM9oYIXljCCF5IGCisGAQQB # gjcDAwExgheCMIIXfgYJKoZIhvcNAQcCoIIXbzCCF2sCAQMxDzANBglghkgBZQME # AgEFADCCAVIGCyqGSIb3DQEJEAEEoIIBQQSCAT0wggE5AgEBBgorBgEEAYRZCgMB # MDEwDQYJYIZIAWUDBAIBBQAEIMCTbI4L3O65TtLT09XbE6cpSd+3eI0hZz/BRpfb # ez+xAgZp+0R+0toYEzIwMjYwNTA2MTU0MDU0LjA2OVowBIACAfSggdGkgc4wgcsx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1p # Y3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNT # IEVTTjpBNDAwLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3Rh # bXAgU2VydmljZaCCEewwggcgMIIFCKADAgECAhMzAAACKPClh9fzyB5AAAEAAAIo # MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n # dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4X # DTI2MDIxOTE5NDAwNloXDTI3MDUxNzE5NDAwNlowgcsxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh # IE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBNDAwLTA1RTAt # RDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIw # DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK6O9uT+ypwJJF5lol8K5/U3BFxz # teSeETrCQuh+Q2PWbEQCDfmrLbFwWOCNqu1W8DT1bxAdynIypVJc5PE0cmyaTSo/ # YIMu9QC6VaDtpLmgE5GkRfWjPefRHac+p4fQgcrXMnGPFodbbUBu5nRn7AzdZg3O # QGVweZV7TdkbuuWTbyHvavk/kwTwUakWZhbkeXumwpuAsR+tgCK2m22xv6xmwFQj # 6EwqXi4slii0rJm/V7A4iKcF9FTxCiyK+Oh9oF7NR/011X6IataHfbVadKwrcD8m # XoYu1tJZdwlZQuBvG6qehs8r5iUHfXvhMxZOBfhhaMbujQ63P+mMc0IoFsHvzx3K # eEt0ZjoHTwT37hIatGmy3LiIkc7J0cIDkziLnJhHCx2636Ca/EilPzI1clyMkKDS # 87ya/+cVj1bK2/aqYK0IUWK8ZRapTbT+xR5GihBkaJA4lCfT3kKPeKwiy9E/wpTu # E38QMjwdWxv80/MwUu9HOetGePRM6cOI5NRydjCaT5d+hLWjCyRwIILAedsLTQPn # zPzfLsrlkkHvjmFyfgITadHd7pEayvjbLmq23ox3P+zsxOcNLZSZUdZfVf8dl7dS # VfyCP+3rcvnTEg+qREIER0zUAM1RpJ+j05CIpv9uPV2JkIZN8QNQEEuinWaGTAgX # zZ9qmVXZu6xn5TiRAgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUqsmljPjy3Oi69WQF # W2EBIWlD3cMwHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0f # BFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv # TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsG # AQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAx # MCgxKS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO # BgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAJDo18uatFqGBW2BaDfz # cZpLTt8fKh3puFxQ423a1637oFo24fSvsAGRUeF46nEF2tSs4RhURoiKL10rdy5k # s2anWJQDH9VuY5liXvHP602uMJaquDWNCarShEHyIThAmnA2EY/ruhjmG5ghTQPi # WEOhqGp+Aomf/QGT71QoM/DleVRiat4WYmWP1hDNw896nwzEFfGH9jkju9B5Fpbl # KO2ItA4tGTeCC+toOzlJ/j0wlXr8HDFcLau9R8QVfpJQOiioogT02BUhGrRFm7s6 # 3SLQiz4e88/SEHorA7EyDVJYo59O0Wlal2jwwm+AoIeQ+lcTOCms/6nIge47uBVG # VJOxtgEUuHbIh3+K0zi5gvRH7ZJIEFOlJJG2Gsa4SYSUjkEIczHMyD+iodI/BkAg # CQzYLjHGLRK3uoy4D6b5nMViR+gXjVChImf4eOqGpZhDSb9I738qclEklTAx3lOI # yeNn4T8MmJSvLm52JbJCm9+PaFAUjR2OFqGgBcNrN4RyIsXa4SdO6v1R+NzA66f+ # gxj5Qt+2c6LaMosyut5XT3tqTPP8nGmcOBglT+2BTt9B+WDsiqIv37Tbvr6OhAej # bWZV5jlgPwqH+RRpjomb85Mzzwbt69PP+qdG6bGi9OMxK2+lsAc1GGZJN0g9NXfY # LK7EMpL9XlrmLAD5/1WIGj7CMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAA # AAAAFTANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh # c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD # b3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUg # QXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8 # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N # aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQAD # ggIPADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2 # AX9sSuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpS # g0S3po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2r # rPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k # 45GPsjksUZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSu # eik3rMvrg0XnRm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09 # /SDPc31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR # 6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxC # aC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaD # IV1fMHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMUR # HXLvjflSxIUXk8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMB # AAGjggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQq # p1L+ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ # 6XIwXAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0 # cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt # MBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB # MAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP # 6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWlj # cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2 # LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu # Y3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2 # Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03d # mLq2HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1Tk # eFN1JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kp # icO8F7BUhUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKp # W99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrY # UP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QB # jloZkWsNn6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkB # RH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0V # iY1w/ue10CgaiQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq # 0Z4+7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1V # M1izoXBm8qGCA08wggI3AgEBMIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBP # cGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTQwMC0wNUUwLUQ5 # NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH # BgUrDgMCGgMVAHWtuYWTNLuoArU5q/TwBSeFs0hSoIGDMIGApH4wfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0 # IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQELBQACBQDtpcL+MCIYDzIw # MjYwNTA2MTMzOTEwWhgPMjAyNjA1MDcxMzM5MTBaMHYwPAYKKwYBBAGEWQoEATEu # MCwwCgIFAO2lwv4CAQAwCQIBAAIBGAIB/zAHAgEAAgIarDAKAgUA7acUfgIBADA2 # BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIB # AAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQBPoSR1hiNOaX7ExCxHUOtGT5bbFGau # xGb2f5LBkNyFof13miejMhQE18gcQQF8ituc73mqjCbfFBp7P9boZjFtbpOXATEP # hT5XbOX3qN/8PQhKjVhsLrtlHfI8wK6K4TEqoBCuJTESVy+rrj4LkqRckMZF0qvH # IYZP+ppRLcnCtQTDSPwa9zkYIkB4OkqZJygoIrzCywpq0KKQHJtN6xq4ki6FSJoo # j4ngI3DwX6fFmtnC9f/iH//OcRbMy2EfctsykOHGizUn1ygbFtOIo2Coe0uWhK2C # sQeqXPifIleTpWKsLLZ2UI0s/ylsHahwXQhimK+tfNRQbu0S9NIWw2tiMYIEDTCC # BAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm # MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIo8KWH # 1/PIHkAAAQAAAigwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsq # hkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgFfmdRPMR9vUT+fPHSOji5BPRJgHV # 2b8VucZUkyvNBjAwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCBVsYpGUWBj # X+KBFWStXk+OR/txkN/6sVe+VcLgbfoi1zCBmDCBgKR+MHwxCzAJBgNVBAYTAlVT # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l # LVN0YW1wIFBDQSAyMDEwAhMzAAACKPClh9fzyB5AAAEAAAIoMCIEIPIvFD/QthfS # idYKtr/mTyolf7jDVyKUzI0V/x/uPQjKMA0GCSqGSIb3DQEBCwUABIICAIO0iRyM # +fFMZS/BO07SOUowACsUsWq7CRkYU2P9h5OO1diQUnfaxp4VfuJsXnNxvne7f8Qp # MzGVOelotnaEnzK9hgYCrEXx5psysJgm/Yeq4L4LuRlrm61POZ6d1ftpG4yJY8FG # MLxo8sIUmYyLCfYsCBZiod0DZD3P/qhrL9ytXHrvOub8wYCGQV0JVAc4hy1r4dls # wlD6mA7w5WZs4PugO2aHdyBDm5KVQjnBDhjohyfjDJEVwIi89uIdDgd/RRKrd/vO # ACIHt1C6eJUlhyQa1VdX19EBURwvg3YxJSvwWsKc96xu715N8TunjMAA78567Qh+ # lOZITkzD6Ko/nWc1YNo9XRNqhwYY8R7FiTswmiqDq1Mi7pNeudEndQBGL5CcqZbh # KmlDXvOyuceIa23sKcY7mlE+XE/zFgSXi8o17jDksKuQ0kHSbqzr/YIvI2H3xLEZ # cyvj+JcSxJjPuwUbwGwtcevrVtum6YMby2XkEDDlr+bP72id60/wljqyMQW/C2yl # 7Q02VrxOsoUGIaWrUd5jojI1eiyrahXWnQXilyfIzZIWXk9PaDwbR9bBII51ExtG # DevoliKGmQxzj8YqF156TA2Xf6fRe4izoBOdPj47tR0JOvgRfjBOZEtPjL7ROKs3 # JAQkLllnqLmBBx7rbpcQcf5OGh5bDaV5iiY8 # SIG # End signature block x

Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586