From 794a6ec35a2bbbd74ab62504c479eb8fae306bba Mon Sep 17 00:00:00 2001 From: wj32 Date: Mon, 21 Oct 2013 10:46:53 +0000 Subject: [PATCH 001/161] cleaned up project files (patch by xhmikosr) git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5468 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/KProcessHacker/KProcessHacker.vcxproj | 16 ---------------- 2.x/trunk/ProcessHacker/ProcessHacker.vcxproj | 8 ++++---- 2.x/trunk/phlib/phlib.vcxproj | 7 ------- 2.x/trunk/phlib/phlib.vcxproj.filters | 4 ---- 2.x/trunk/plugins/Plugins.props | 4 ++-- .../plugins/SamplePlugin/SamplePlugin.vcxproj | 8 ++++---- 2.x/trunk/plugins/UserNotes/UserNotes.vcxproj | 4 ++++ 2.x/trunk/tests/phlib-test/phlib-test.vcxproj | 4 ++-- .../tests/phlib-test/phlib-test.vcxproj.filters | 4 ---- 2.x/trunk/tools/fiin/fiin.vcxproj | 6 ++++-- 2.x/trunk/tools/fixlib/fixlib.vcxproj | 4 ++-- 2.x/trunk/tools/fixlib/fixlib.vcxproj.filters | 8 -------- 2.x/trunk/tools/peview/peview.vcxproj | 8 ++++---- 13 files changed, 26 insertions(+), 59 deletions(-) diff --git a/2.x/trunk/KProcessHacker/KProcessHacker.vcxproj b/2.x/trunk/KProcessHacker/KProcessHacker.vcxproj index 8f15bfb15..803c2784e 100644 --- a/2.x/trunk/KProcessHacker/KProcessHacker.vcxproj +++ b/2.x/trunk/KProcessHacker/KProcessHacker.vcxproj @@ -88,10 +88,6 @@ KPH_CONFIG_CLEAN;_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions) Level3 - - - - @@ -99,10 +95,6 @@ KPH_CONFIG_CLEAN;_X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions) Level3 - - - - @@ -110,10 +102,6 @@ KPH_CONFIG_CLEAN;_WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions) Level3 - - - - @@ -121,10 +109,6 @@ KPH_CONFIG_CLEAN;_WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions) Level3 - - - - diff --git a/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj b/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj index e85bf7e39..ebc9db7a9 100644 --- a/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj +++ b/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj @@ -101,7 +101,7 @@ true Windows MachineX86 - /SUBSYSTEM:WINDOWS,5.01 %(AdditionalOptions) + 5.01 update_rev.bat @@ -133,7 +133,7 @@ true Windows MachineX64 - /SUBSYSTEM:WINDOWS,5.02 %(AdditionalOptions) + 5.02 update_rev.bat @@ -168,7 +168,7 @@ true MachineX86 true - /SUBSYSTEM:WINDOWS,5.01 %(AdditionalOptions) + 5.01 update_rev.bat @@ -206,7 +206,7 @@ true MachineX64 true - /SUBSYSTEM:WINDOWS,5.02 %(AdditionalOptions) + 5.02 update_rev.bat diff --git a/2.x/trunk/phlib/phlib.vcxproj b/2.x/trunk/phlib/phlib.vcxproj index baac3308d..56183a592 100644 --- a/2.x/trunk/phlib/phlib.vcxproj +++ b/2.x/trunk/phlib/phlib.vcxproj @@ -75,7 +75,6 @@ - /MP %(AdditionalOptions) Disabled include;%(AdditionalIncludeDirectories) DEBUG;%(PreprocessorDefinitions) @@ -89,9 +88,6 @@ true StreamingSIMDExtensions - - %(AdditionalLibraryDirectories) - @@ -129,9 +125,6 @@ true StreamingSIMDExtensions - - %(AdditionalLibraryDirectories) - diff --git a/2.x/trunk/phlib/phlib.vcxproj.filters b/2.x/trunk/phlib/phlib.vcxproj.filters index 338abfb40..77b698166 100644 --- a/2.x/trunk/phlib/phlib.vcxproj.filters +++ b/2.x/trunk/phlib/phlib.vcxproj.filters @@ -9,10 +9,6 @@ {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - diff --git a/2.x/trunk/plugins/Plugins.props b/2.x/trunk/plugins/Plugins.props index 37d1aa4a2..c17da8075 100644 --- a/2.x/trunk/plugins/Plugins.props +++ b/2.x/trunk/plugins/Plugins.props @@ -15,13 +15,13 @@ ../../sdk/lib/i386;%(AdditionalLibraryDirectories) - /SUBSYSTEM:WINDOWS,5.01 %(AdditionalOptions) + 5.01 ../../sdk/lib/amd64;%(AdditionalLibraryDirectories) - /SUBSYSTEM:WINDOWS,5.02 %(AdditionalOptions) + 5.02 diff --git a/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj b/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj index 247038d71..fdc0cb92b 100644 --- a/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj +++ b/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj @@ -28,23 +28,23 @@ DynamicLibrary Unicode true - v110 + v120 DynamicLibrary Unicode - v110 + v120 DynamicLibrary Unicode true - v110 + v120 DynamicLibrary Unicode - v110 + v120 diff --git a/2.x/trunk/plugins/UserNotes/UserNotes.vcxproj b/2.x/trunk/plugins/UserNotes/UserNotes.vcxproj index 1cd64ae91..10b9b95ca 100644 --- a/2.x/trunk/plugins/UserNotes/UserNotes.vcxproj +++ b/2.x/trunk/plugins/UserNotes/UserNotes.vcxproj @@ -106,6 +106,7 @@ true ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + Windows @@ -120,6 +121,7 @@ true ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + Windows @@ -138,6 +140,7 @@ true true ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + Windows @@ -156,6 +159,7 @@ true true ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + Windows diff --git a/2.x/trunk/tests/phlib-test/phlib-test.vcxproj b/2.x/trunk/tests/phlib-test/phlib-test.vcxproj index 6735022be..5c99f67f4 100644 --- a/2.x/trunk/tests/phlib-test/phlib-test.vcxproj +++ b/2.x/trunk/tests/phlib-test/phlib-test.vcxproj @@ -65,7 +65,7 @@ true Console MachineX86 - /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + 5.01 @@ -91,7 +91,7 @@ true MachineX86 true - /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + 5.01 diff --git a/2.x/trunk/tests/phlib-test/phlib-test.vcxproj.filters b/2.x/trunk/tests/phlib-test/phlib-test.vcxproj.filters index 273a566f0..3d15d25f5 100644 --- a/2.x/trunk/tests/phlib-test/phlib-test.vcxproj.filters +++ b/2.x/trunk/tests/phlib-test/phlib-test.vcxproj.filters @@ -9,10 +9,6 @@ {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - diff --git a/2.x/trunk/tools/fiin/fiin.vcxproj b/2.x/trunk/tools/fiin/fiin.vcxproj index f092a6f7c..bb1f9f9f1 100644 --- a/2.x/trunk/tools/fiin/fiin.vcxproj +++ b/2.x/trunk/tools/fiin/fiin.vcxproj @@ -95,7 +95,7 @@ true Console MachineX86 - /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + 5.01 @@ -119,6 +119,7 @@ true Console MachineX64 + 5.02 @@ -143,7 +144,7 @@ true MachineX86 true - /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + 5.01 @@ -171,6 +172,7 @@ true MachineX64 true + 5.02 diff --git a/2.x/trunk/tools/fixlib/fixlib.vcxproj b/2.x/trunk/tools/fixlib/fixlib.vcxproj index 82e47b888..51fee5690 100644 --- a/2.x/trunk/tools/fixlib/fixlib.vcxproj +++ b/2.x/trunk/tools/fixlib/fixlib.vcxproj @@ -64,7 +64,7 @@ true Console MachineX86 - /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + 5.01 @@ -89,7 +89,7 @@ true MachineX86 true - /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + 5.01 diff --git a/2.x/trunk/tools/fixlib/fixlib.vcxproj.filters b/2.x/trunk/tools/fixlib/fixlib.vcxproj.filters index d34a8e5b8..397708432 100644 --- a/2.x/trunk/tools/fixlib/fixlib.vcxproj.filters +++ b/2.x/trunk/tools/fixlib/fixlib.vcxproj.filters @@ -5,14 +5,6 @@ {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - diff --git a/2.x/trunk/tools/peview/peview.vcxproj b/2.x/trunk/tools/peview/peview.vcxproj index 4ff3d2f96..aad7c6db3 100644 --- a/2.x/trunk/tools/peview/peview.vcxproj +++ b/2.x/trunk/tools/peview/peview.vcxproj @@ -96,7 +96,7 @@ true Windows MachineX86 - /SUBSYSTEM:WINDOWS,5.01 %(AdditionalOptions) + 5.01 @@ -121,7 +121,7 @@ true Windows MachineX64 - /SUBSYSTEM:WINDOWS,5.02 %(AdditionalOptions) + 5.02 @@ -148,7 +148,7 @@ true MachineX86 true - /SUBSYSTEM:WINDOWS,5.01 %(AdditionalOptions) + 5.01 @@ -178,7 +178,7 @@ true MachineX64 true - /SUBSYSTEM:WINDOWS,5.02 %(AdditionalOptions) + 5.02 From 020a636e42945389884bca5c4fd0a42baae30907 Mon Sep 17 00:00:00 2001 From: wj32 Date: Mon, 21 Oct 2013 11:27:13 +0000 Subject: [PATCH 002/161] * added Windows 8.1 version handling * fixed handling of long symbol names git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5469 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/README.txt | 4 --- 2.x/trunk/phlib/global.c | 7 +++- 2.x/trunk/phlib/include/phbase.h | 1 + 2.x/trunk/phlib/symprv.c | 60 +++++++++++++++++++++++++++----- 5 files changed, 60 insertions(+), 13 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index d12a77909..e77d1257b 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -3,6 +3,7 @@ Process Hacker 2.32 * NEW/IMPROVED: * FIXED: + * Fixed handling of long symbol names 2.31 * NEW/IMPROVED: diff --git a/2.x/trunk/README.txt b/2.x/trunk/README.txt index 385143700..f1e933ec8 100644 --- a/2.x/trunk/README.txt +++ b/2.x/trunk/README.txt @@ -57,10 +57,6 @@ assist with certain functionality. This includes: The feature(s) marked with an asterisk (*) are NOT available on 64-bit versions of Windows. -Certain features such as modifying process protection are disabled -in the released driver binary due to legal reasons. You can enable -them by building KProcessHacker with the "dirty" configuration. - Note that by default, KProcessHacker only allows connections from processes with SeDebugPrivilege. To allow Process Hacker to show details for all processes when it is not running as administrator: diff --git a/2.x/trunk/phlib/global.c b/2.x/trunk/phlib/global.c index 522e2948b..26e8db8f7 100644 --- a/2.x/trunk/phlib/global.c +++ b/2.x/trunk/phlib/global.c @@ -253,7 +253,12 @@ static VOID PhInitializeWindowsVersion( { WindowsVersion = WINDOWS_8; } - else if (majorVersion == 6 && minorVersion > 2 || majorVersion > 6) + /* Windows 8.1 */ + else if (majorVersion == 6 && minorVersion == 3) + { + WindowsVersion = WINDOWS_81; + } + else if (majorVersion == 6 && minorVersion > 3 || majorVersion > 6) { WindowsVersion = WINDOWS_NEW; } diff --git a/2.x/trunk/phlib/include/phbase.h b/2.x/trunk/phlib/include/phbase.h index 501f88219..67ef1a177 100644 --- a/2.x/trunk/phlib/include/phbase.h +++ b/2.x/trunk/phlib/include/phbase.h @@ -79,6 +79,7 @@ PHLIBAPI extern ACCESS_MASK ThreadAllAccess; #define WINDOWS_VISTA 60 #define WINDOWS_7 61 #define WINDOWS_8 62 +#define WINDOWS_81 63 #define WINDOWS_NEW MAXLONG #define WINDOWS_HAS_CONSOLE_HOST (WindowsVersion >= WINDOWS_7) diff --git a/2.x/trunk/phlib/symprv.c b/2.x/trunk/phlib/symprv.c index 05e2ac31d..d2cd532e4 100644 --- a/2.x/trunk/phlib/symprv.c +++ b/2.x/trunk/phlib/symprv.c @@ -508,7 +508,7 @@ PPH_STRING PhGetSymbolFromAddress( ) { PSYMBOL_INFOW symbolInfo; - UCHAR symbolInfoBuffer[FIELD_OFFSET(SYMBOL_INFOW, Name) + PH_MAX_SYMBOL_NAME_LEN * 2]; + ULONG nameLength; PPH_STRING symbol = NULL; PH_SYMBOL_RESOLVE_LEVEL resolveLevel; ULONG64 displacement; @@ -534,10 +534,10 @@ PPH_STRING PhGetSymbolFromAddress( PhpRegisterSymbolProvider(SymbolProvider); #endif - symbolInfo = (PSYMBOL_INFOW)symbolInfoBuffer; + symbolInfo = PhAllocate(FIELD_OFFSET(SYMBOL_INFOW, Name) + PH_MAX_SYMBOL_NAME_LEN * 2); memset(symbolInfo, 0, sizeof(SYMBOL_INFOW)); symbolInfo->SizeOfStruct = sizeof(SYMBOL_INFOW); - symbolInfo->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN - 1; + symbolInfo->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN; // Get the symbol name. @@ -557,16 +557,32 @@ PPH_STRING PhGetSymbolFromAddress( &displacement, symbolInfo ); + nameLength = symbolInfo->NameLen; + + if (nameLength + 1 > PH_MAX_SYMBOL_NAME_LEN) + { + PhFree(symbolInfo); + symbolInfo = PhAllocate(FIELD_OFFSET(SYMBOL_INFOW, Name) + nameLength * 2 + 2); + memset(symbolInfo, 0, sizeof(SYMBOL_INFOW)); + symbolInfo->SizeOfStruct = sizeof(SYMBOL_INFOW); + symbolInfo->MaxNameLen = nameLength + 1; + + SymFromAddrW_I( + SymbolProvider->ProcessHandle, + Address, + &displacement, + symbolInfo + ); + } } else if (SymFromAddr_I) { - UCHAR buffer[FIELD_OFFSET(SYMBOL_INFO, Name) + PH_MAX_SYMBOL_NAME_LEN]; PSYMBOL_INFO symbolInfoA; - symbolInfoA = (PSYMBOL_INFO)buffer; + symbolInfoA = PhAllocate(FIELD_OFFSET(SYMBOL_INFO, Name) + PH_MAX_SYMBOL_NAME_LEN); memset(symbolInfoA, 0, sizeof(SYMBOL_INFO)); symbolInfoA->SizeOfStruct = sizeof(SYMBOL_INFO); - symbolInfoA->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN - 1; + symbolInfoA->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN; SymFromAddr_I( SymbolProvider->ProcessHandle, @@ -574,7 +590,33 @@ PPH_STRING PhGetSymbolFromAddress( &displacement, symbolInfoA ); + nameLength = symbolInfoA->NameLen; + + if (nameLength + 1 > PH_MAX_SYMBOL_NAME_LEN) + { + PhFree(symbolInfoA); + symbolInfoA = PhAllocate(FIELD_OFFSET(SYMBOL_INFO, Name) + nameLength + 1); + memset(symbolInfoA, 0, sizeof(SYMBOL_INFO)); + symbolInfoA->SizeOfStruct = sizeof(SYMBOL_INFO); + symbolInfoA->MaxNameLen = nameLength + 1; + + SymFromAddr_I( + SymbolProvider->ProcessHandle, + Address, + &displacement, + symbolInfoA + ); + + // Also reallocate the Unicode-based buffer. + PhFree(symbolInfo); + symbolInfo = PhAllocate(FIELD_OFFSET(SYMBOL_INFOW, Name) + nameLength * 2 + 2); + memset(symbolInfo, 0, sizeof(SYMBOL_INFOW)); + symbolInfo->SizeOfStruct = sizeof(SYMBOL_INFOW); + symbolInfo->MaxNameLen = nameLength + 1; + } + PhpSymbolInfoAnsiToUnicode(symbolInfo, symbolInfoA); + PhFree(symbolInfoA); } PH_UNLOCK_SYMBOLS(); @@ -702,6 +744,8 @@ PPH_STRING PhGetSymbolFromAddress( if (symbolName) PhDereferenceObject(symbolName); + PhFree(symbolInfo); + return symbol; } @@ -725,7 +769,7 @@ BOOLEAN PhGetSymbolFromName( symbolInfo = (PSYMBOL_INFOW)symbolInfoBuffer; memset(symbolInfo, 0, sizeof(SYMBOL_INFOW)); symbolInfo->SizeOfStruct = sizeof(SYMBOL_INFOW); - symbolInfo->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN - 1; + symbolInfo->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN; // Get the symbol information. @@ -748,7 +792,7 @@ BOOLEAN PhGetSymbolFromName( symbolInfoA = (PSYMBOL_INFO)buffer; memset(symbolInfoA, 0, sizeof(SYMBOL_INFO)); symbolInfoA->SizeOfStruct = sizeof(SYMBOL_INFO); - symbolInfoA->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN - 1; + symbolInfoA->MaxNameLen = PH_MAX_SYMBOL_NAME_LEN; name = PhCreateAnsiStringFromUnicode(Name); From d5256fc9b9e8cc7af920cae2b442eb6c5368b602 Mon Sep 17 00:00:00 2001 From: wj32 Date: Mon, 21 Oct 2013 12:12:22 +0000 Subject: [PATCH 003/161] fixed OS Context for Windows 8.1 git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5470 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/ProcessHacker.manifest | 1 + 2.x/trunk/ProcessHacker/appsup.c | 14 +++++++++++++- 2.x/trunk/ProcessHacker/include/phapp.h | 1 + 2.x/trunk/ProcessHacker/proctree.c | 7 ++++++- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index e77d1257b..5f7cb7dee 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -2,6 +2,7 @@ Process Hacker 2.32 * NEW/IMPROVED: + * Updated for Windows 8.1 * FIXED: * Fixed handling of long symbol names diff --git a/2.x/trunk/ProcessHacker/ProcessHacker.manifest b/2.x/trunk/ProcessHacker/ProcessHacker.manifest index c0c3e2355..11dcfad31 100644 --- a/2.x/trunk/ProcessHacker/ProcessHacker.manifest +++ b/2.x/trunk/ProcessHacker/ProcessHacker.manifest @@ -31,6 +31,7 @@ + diff --git a/2.x/trunk/ProcessHacker/appsup.c b/2.x/trunk/ProcessHacker/appsup.c index 2a3db819c..2aedb6d39 100644 --- a/2.x/trunk/ProcessHacker/appsup.c +++ b/2.x/trunk/ProcessHacker/appsup.c @@ -39,6 +39,7 @@ GUID XP_CONTEXT_GUID = { 0xbeb1b341, 0x6837, 0x4c83, { 0x83, 0x66, 0x2b, 0x45, 0 GUID VISTA_CONTEXT_GUID = { 0xe2011457, 0x1546, 0x43c5, { 0xa5, 0xfe, 0x00, 0x8d, 0xee, 0xe3, 0xd3, 0xf0 } }; GUID WIN7_CONTEXT_GUID = { 0x35138b9a, 0x5d96, 0x4fbd, { 0x8e, 0x2d, 0xa2, 0x44, 0x02, 0x25, 0xf9, 0x3a } }; GUID WIN8_CONTEXT_GUID = { 0x4a2f28e3, 0x53b9, 0x4441, { 0xba, 0x9c, 0xd6, 0x9d, 0x4a, 0x4a, 0x6e, 0x38 } }; +GUID WINBLUE_CONTEXT_GUID = { 0x1f676c76, 0x80e1, 0x4239, { 0x95, 0xbb, 0x83, 0xd0, 0xf6, 0xd0, 0xda, 0x78 } }; /** * Determines whether a process is suspended. @@ -150,7 +151,18 @@ NTSTATUS PhGetProcessSwitchContext( if (!data) return STATUS_UNSUCCESSFUL; // no compatibility context data - if (WindowsVersion >= WINDOWS_8) + if (WindowsVersion >= WINDOWS_81) + { + if (!NT_SUCCESS(status = PhReadVirtualMemory( + ProcessHandle, + PTR_ADD_OFFSET(data, 2040 + 16), // Magic value from SbReadProcContextByHandle + Guid, + sizeof(GUID), + NULL + ))) + return status; + } + else if (WindowsVersion >= WINDOWS_8) { if (!NT_SUCCESS(status = PhReadVirtualMemory( ProcessHandle, diff --git a/2.x/trunk/ProcessHacker/include/phapp.h b/2.x/trunk/ProcessHacker/include/phapp.h index 6ec89d94e..6d7733824 100644 --- a/2.x/trunk/ProcessHacker/include/phapp.h +++ b/2.x/trunk/ProcessHacker/include/phapp.h @@ -132,6 +132,7 @@ extern GUID XP_CONTEXT_GUID; extern GUID VISTA_CONTEXT_GUID; extern GUID WIN7_CONTEXT_GUID; extern GUID WIN8_CONTEXT_GUID; +extern GUID WINBLUE_CONTEXT_GUID; PHAPPAPI BOOLEAN PhGetProcessIsSuspended( diff --git a/2.x/trunk/ProcessHacker/proctree.c b/2.x/trunk/ProcessHacker/proctree.c index 28e0a8250..9d8b6d06f 100644 --- a/2.x/trunk/ProcessHacker/proctree.c +++ b/2.x/trunk/ProcessHacker/proctree.c @@ -931,7 +931,9 @@ static VOID PhpUpdateProcessOsContext( { if (NT_SUCCESS(PhGetProcessSwitchContext(processHandle, &ProcessNode->OsContextGuid))) { - if (memcmp(&ProcessNode->OsContextGuid, &WIN8_CONTEXT_GUID, sizeof(GUID)) == 0) + if (memcmp(&ProcessNode->OsContextGuid, &WINBLUE_CONTEXT_GUID, sizeof(GUID)) == 0) + ProcessNode->OsContextVersion = WINDOWS_81; + else if (memcmp(&ProcessNode->OsContextGuid, &WIN8_CONTEXT_GUID, sizeof(GUID)) == 0) ProcessNode->OsContextVersion = WINDOWS_8; else if (memcmp(&ProcessNode->OsContextGuid, &WIN7_CONTEXT_GUID, sizeof(GUID)) == 0) ProcessNode->OsContextVersion = WINDOWS_7; @@ -2407,6 +2409,9 @@ BOOLEAN NTAPI PhpProcessTreeNewCallback( { switch (node->OsContextVersion) { + case WINDOWS_81: + PhInitializeStringRef(&getCellText->Text, L"Windows 8.1"); + break; case WINDOWS_8: PhInitializeStringRef(&getCellText->Text, L"Windows 8"); break; From 9d1a698a6fa09218a46078136faf7f3a304923cc Mon Sep 17 00:00:00 2001 From: wj32 Date: Mon, 21 Oct 2013 12:36:16 +0000 Subject: [PATCH 004/161] fixed Run As preventing Windows 8 apps from starting git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5471 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/runas.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 5f7cb7dee..5c6fa5482 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -5,6 +5,7 @@ Process Hacker * Updated for Windows 8.1 * FIXED: * Fixed handling of long symbol names + * Fixed Run As preventing Windows 8 apps from starting 2.31 * NEW/IMPROVED: diff --git a/2.x/trunk/ProcessHacker/runas.c b/2.x/trunk/ProcessHacker/runas.c index f2a5b4c40..faaaef44c 100644 --- a/2.x/trunk/ProcessHacker/runas.c +++ b/2.x/trunk/ProcessHacker/runas.c @@ -738,26 +738,44 @@ VOID PhSetDesktopWinStaAccess( VOID ) { + static SID_IDENTIFIER_AUTHORITY appPackageAuthority = SECURITY_APP_PACKAGE_AUTHORITY; + HWINSTA wsHandle; HDESK desktopHandle; ULONG allocationLength; PSECURITY_DESCRIPTOR securityDescriptor; PACL dacl; + CHAR allAppPackagesSidBuffer[FIELD_OFFSET(SID, SubAuthority) + sizeof(ULONG) * 2]; + PSID allAppPackagesSid; // TODO: Set security on the correct window station and desktop. + allAppPackagesSid = (PISID)allAppPackagesSidBuffer; + RtlInitializeSid(allAppPackagesSid, &appPackageAuthority, SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT); + *RtlSubAuthoritySid(allAppPackagesSid, 0) = SECURITY_APP_PACKAGE_BASE_RID; + *RtlSubAuthoritySid(allAppPackagesSid, 1) = SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE; + // We create a DACL that allows everyone to access everything. allocationLength = SECURITY_DESCRIPTOR_MIN_LENGTH + (ULONG)sizeof(ACL) + (ULONG)sizeof(ACCESS_ALLOWED_ACE) + - RtlLengthSid(&PhSeEveryoneSid); + RtlLengthSid(&PhSeEveryoneSid) + + (ULONG)sizeof(ACCESS_ALLOWED_ACE) + + RtlLengthSid(allAppPackagesSid); securityDescriptor = PhAllocate(allocationLength); dacl = (PACL)((PCHAR)securityDescriptor + SECURITY_DESCRIPTOR_MIN_LENGTH); RtlCreateSecurityDescriptor(securityDescriptor, SECURITY_DESCRIPTOR_REVISION); + RtlCreateAcl(dacl, allocationLength - SECURITY_DESCRIPTOR_MIN_LENGTH, ACL_REVISION); RtlAddAccessAllowedAce(dacl, ACL_REVISION, GENERIC_ALL, &PhSeEveryoneSid); + + if (WindowsVersion >= WINDOWS_8) + { + RtlAddAccessAllowedAce(dacl, ACL_REVISION, GENERIC_ALL, allAppPackagesSid); + } + RtlSetDaclSecurityDescriptor(securityDescriptor, TRUE, dacl, FALSE); if (wsHandle = OpenWindowStation( From 766b219b08053308d7ac79bf8e4fe6c108c534e6 Mon Sep 17 00:00:00 2001 From: dmex Date: Mon, 21 Oct 2013 13:59:36 +0000 Subject: [PATCH 005/161] Website: updated FAQ page with latest SDK info git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5472 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/faq.php | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/misc/website/websitev2/faq.php b/misc/website/websitev2/faq.php index c3ab008a6..bcbf70b93 100644 --- a/misc/website/websitev2/faq.php +++ b/misc/website/websitev2/faq.php @@ -111,16 +111,18 @@
1) Install the latest Windows SDK. (links are below)
2) Open Process Hacker options via the main menu: Hacker > Options
- 3) Click Symbols, and locatedbghelp.dll
+ 3) Click Symbols, and locate dbghelp.dll
- It is usually in C:\Program Files\Debugging Tools for Windows (x86)\ - or if you're using the Windows 8 SDK it'll be located at \Program Files (x86)\Windows Kits\8.0\Debuggers\x86\ for 32bit users - or at \Program Files (x86)\Windows Kits\8.0\Debuggers\x64\ for 64bit users.
+ Windows XP, Vista and Windows 7 SDK:
+ C:\Program Files\Debugging Tools for Windows (x86)\

+ Windows 8 or above SDK:
+ 32bit: \Program Files (x86)\Windows Kits\8.x\Debuggers\x86\
+ 64bit: \Program Files (x86)\Windows Kits\8.x\Debuggers\x64\
- Secondly, you need to configure the search path:
- If you don't know what to do, enter SRV*SOME_FOLDER*http://msdl.microsoft.com/download/symbols. + Secondly, you need to configure the search path. If you don't know what to do, enter:
+ SRV*SOME_FOLDER*http://msdl.microsoft.com/download/symbols

Replace SOME_FOLDER with any folder you can write to, like D:\Symbols. Now you can restart Process Hacker and view full symbols. @@ -134,10 +136,9 @@
Why can't I build Process Hacker?
The most likely problem is that you do not have the latest Windows SDK installed.
- For Windows XP, Vista and Windows 7 you'll need the - Windows SDK for Windows 7 and .NET Framework 4.
- For Windows Vista, Windows 7 and Windows 8 you'll need the - Windows 8 SDK. + Windows XP, Vista and Windows 7 SDK: Windows SDK
+ Windows 8 SDK: Windows 8 SDK
+ Windows 8.1 SDK: Windows 8.1 SDK
From 2746d6c4bad42a732dd678001f61077a13bb7acd Mon Sep 17 00:00:00 2001 From: dmex Date: Mon, 21 Oct 2013 14:26:26 +0000 Subject: [PATCH 006/161] *fixed last commit git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5473 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/faq.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/misc/website/websitev2/faq.php b/misc/website/websitev2/faq.php index bcbf70b93..5afb578e5 100644 --- a/misc/website/websitev2/faq.php +++ b/misc/website/websitev2/faq.php @@ -12,7 +12,6 @@ -

Process Hacker

    @@ -114,15 +113,15 @@ 3) Click Symbols, and locate dbghelp.dll
    - Windows XP, Vista and Windows 7 SDK:
    + Windows XP, Vista and Windows 7 SDK:
    C:\Program Files\Debugging Tools for Windows (x86)\

    - Windows 8 or above SDK:
    - 32bit: \Program Files (x86)\Windows Kits\8.x\Debuggers\x86\
    + Windows 8 or above SDK:
    + 32bit: \Program Files (x86)\Windows Kits\8.x\Debuggers\x86\
    64bit: \Program Files (x86)\Windows Kits\8.x\Debuggers\x64\
    Secondly, you need to configure the search path. If you don't know what to do, enter:
    - SRV*SOME_FOLDER*http://msdl.microsoft.com/download/symbols

    + SRV*SOME_FOLDER*http://msdl.microsoft.com/download/symbols

    Replace SOME_FOLDER with any folder you can write to, like D:\Symbols. Now you can restart Process Hacker and view full symbols. @@ -138,11 +137,10 @@ The most likely problem is that you do not have the latest Windows SDK installed.
    Windows XP, Vista and Windows 7 SDK: Windows SDK
    Windows 8 SDK: Windows 8 SDK
    - Windows 8.1 SDK: Windows 8.1 SDK + Windows 8.1 SDK: Windows 8.1 SDK
- From 2a589a7ebae122f8c87c253df3ff35d1af7b67fb Mon Sep 17 00:00:00 2001 From: wj32 Date: Mon, 21 Oct 2013 22:18:19 +0000 Subject: [PATCH 007/161] updated KProcessHacker for Windows 8.1 git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5474 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- .../bin/amd64/kprocesshacker.pdb | Bin 412672 -> 420864 bytes .../bin/amd64/kprocesshacker.sys | Bin 30208 -> 45568 bytes .../bin/i386/kprocesshacker.pdb | Bin 396288 -> 404480 bytes .../bin/i386/kprocesshacker.sys | Bin 26624 -> 44288 bytes 2.x/trunk/KProcessHacker/dyndata.c | 66 +++++++++++++++++- 2.x/trunk/KProcessHacker/include/dyndata.h | 4 ++ 2.x/trunk/KProcessHacker/include/ntfill.h | 54 +++++++++----- 2.x/trunk/KProcessHacker/object.c | 28 ++++---- 2.x/trunk/ProcessHacker/appsup.c | 2 +- 2.x/trunk/ProcessHacker/proctree.c | 2 +- 2.x/trunk/phlib/global.c | 2 +- 2.x/trunk/phlib/include/kphapi.h | 4 +- 2.x/trunk/phlib/include/ntldr.h | 1 + 2.x/trunk/phlib/include/ntpebteb.h | 2 +- 2.x/trunk/phlib/include/phnt.h | 1 + 2.x/trunk/phlib/kphdata.c | 24 ++++++- 2.x/trunk/phlib/symprv.c | 2 +- 17 files changed, 150 insertions(+), 42 deletions(-) diff --git a/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.pdb b/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.pdb index 4991d0f02eba9fbaa563e711c5752c9eafea79f4..d5c1623d51c3e7a412e8fc1acd60da0a433df7b6 100644 GIT binary patch delta 124694 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ఔ~{BP5~CIh$ix2X-+&~dv4*y#m!>WsWE__1CFUkOe%`py*_ZN~im9qhz3gWnVAp_Ul5 ziIHFBonIxhex^YA;55begOe23fVZgrt6-bXX>f+hi#7*3i@Q!2fdR zK}>PyhTy{EU@Kn>&QP82fsZNvF*sWjIs{Hqc|U4vGaCoCap!{TRi^^%$0dJfH35k% zrc1{XeQ1ngl}xZhX$AKPuq&S+tH(+r&kE$x0dY7x!0uphqv}Tkc{B$cvl-+D7u-B> z>f0uRe3gr9zWj3Fj@F9q`qhCvx+)eIs0pyU23(^N)~Z};`J>BN5t|6l0u1N)3*R%$UYhse(zbx19?=Qc3J%f!7&rrJwl*SBOFsD@$0tdg4(|wU}rDb*8Tw4*8W|vt$pPAp!VtD za;=yLF4c;~UM3(1exx1z6l{I-2e7UEc@)yt{xpTNwU@`2HDoBYPYAG^1h%zL3FOh# zINZu$fBbjT2-w=o?Quy|YCn+HE-$$g{42Pfb{*teOLt|Q{Oe#V|IO+^|8#(zFlk%M zo&Q`cFkMPuI#=F`X)|jcV5cqEMotG?vv&bov*(JwntFO1ehyrrmi{K#Z-C_Qu3Uw= zD52Cc4Q}!506Uw()&+yHkaa;0xZzpjg4_VRdEks67l%Qb|(>tYJ@^n zk^=pQ7g%CvfSn(MttEa6ww5>uwwCBq9W=T-!M1131)J{2A>s6uOmZv`$;{~w?x7|c z2QE}R6}-im)SV8_Fm1y5DcB}@TI8yqiA8MOE5X_7jvK+&iqolNpWfJCT5lPF8cHs> zJizWeu$^k%KptHfhbsc?E&#o-39bw~0uWUS^*1FJin z1z?-#i(u=5pT_C;!m`!{W5L!1>jyCY+m^g>05zb5;({#!cDI5{wPDr;@~AwcvHCj$ z?Cu6vs(yVSkM51b`Nf`R=&3k-I>7E3aHHxw z15KgD#m_CnTCr5q@4q1dgPl!a>*Mc$t&hJ879aatEpV>7tPyNo;5^;bwVZUY)wvuj zW|xeATiKMC8~bAra1u$#X50*HGrkCHGj0Pe(Tt;Dn{hr^`?NDXPUj)8&3M6=f{dRs zI3^`>stMSPSA%WFFM@5W{=P)WGL7^@u+2Dy3fPP<2bc6UI%B|5#WTUSVLlGF4KQUO z{ogjgR`{lngrxzd1=vjo+u1B5kViA)uskHxxNa}7oy@XSE@n@9DyV&Hi^<>VOu*JY z6KreW6KrcgMj~XHn#nu6Z0)PSw)U@pbG63rfb$if0NdK10lO+cpUTFpDF#zgYl$4G z!BS(1+yJ}s7}Q!KKafYq$KiqiyORX#;8v(|u|)4BO_qqcR|f$n2W%}d3T!Pg25c>H zpXjS4mVnC@H>1FIRg(dhib>n*2hLVJ32ZGl51i2#`-{?(8Uf$C@<7H~q8yw`CekM6 z1=w}L))ET?d9)%9FA1<)3AUD4u5z)&l-QysQ@Aq&?39D8CFX;zB_07=OB@2r<8!G% zyT{C9b-}~p@E5^7wDt?Z$5j7$@D{MY{{Jrmwh?`x7bKw;j|YkN0o#OTf^CC(6l_hs z5-f>I%_cn>RBT#+o%_H}ozW?Ol=0uzY(5uk&31vUU;hZUKD%&XP|%)WTl*M46wTeY?o7819`MA4sQ>zyHl`^ z`MXt~fK`4zC$LJRU>*ORj|f<^{26SmA}1CP2a}FJ{<}p4B%wsE-wkf11$qc<*M=2w^0i=_+1Fz6+sxhq+d}^U zZ1dVPgZ^)CH2xPCEN+a$AA$4LTuEeX@tcTi?etzyz?bgicZ%P6@D^3T{;WRw|c*P zYnFQm*aq^DU{eFs~U=7W2JM8ngYu#*C|iM9aSG~0l!snfw?T?*%P7ya+~IObkX zAW9~3p&wWqqcaGcWt7}&<8(%Vtqbx5tIpUsodUs{+3nyO)hUY8xd&V@OvnFw3Dm37 z193_ZgG)7`Mc|C>rd2-?r?U)fms!;!SDn>yI%~jo)$|Rpt>h~)0;L*ZGgwXMybiXt z+ySmpowwt3_JD0I_k-(I=TMx^5wKm_{|218!&IPAb^P)F4+Ly2{{)VzQUtfy0yP8M zTDAbYs?#P;rz6Q!&iap-ZZrz43_leg}+Wdfku3sL>k|U!zbf#e_FoPnI4CqiNoJl zoPcrU{Zh93JrrPP5!hDp3GibvN+A)xM8MWEv4qH4(q>@mf?L40_V>i$WpQ{*96ksx z)pQPnZ90u$sSNo#u|E??)xd?AREJ)tBREavy}VnWMXm$a-QX<6 zFMxGOc8&&ex5ZufzYx<)&HBO{OhWFJ;v3@{=X$Vx$}vB#piczYSq^sU{B+!vU|Z1V zz*5j8F0Te-f}=r6Iu1uSKcO)bf3>HR&m^E$GmxfsY>t z*Q)*!u+{&%=-^5zbRmUU+uKxT18#A2{C9syAPbVx{Suy=W$;OntEqnvmP8ZLIU{nl z$_(66qWX`3ZQLc`LXEo&Y~54`jv9S;PmF*qU1?A{_twA??p*FSR*T>=70J|H(sc)N%x2Rk!I`KaO zi{2Svrxa{0ItSb|{y#{-nslFFHP@*)eCgJ}yd_|3xpHuWT5&PhTJ9~dwcI|iwcK_J zYAqMrEu|(CF7oz)h9_TT7g}G8UNPjFg&8#1hU`P1sEUTT3Jb z@@PsNP7Satr_8J+(o`;%`29BmOGMTyCV!_n0oy1p23t$C1*;|88^QUPnO^W9cx_+P zk2ifSNc7DBJG;R)%{^e7=1;)Zx*gZj|Lr(GjDW?(ak%?B64I_%2F@~taK8d>=xGY^ zLvTH{lUn`^TxsOaY48>;Xy>mt={N(yHAWtD#t^7A0jCVSU-8S})Lo{=8^QUCzXLAN z*1myEWyZs0ZWgAttvVZANlnF-g9GeF!FD{z@#WZGlyU>5XkLKbe6Sr4#s~6fK^&eG zV7CyQ`nE~4NabRcPEQ1Gx;((nz!(ARr>nu%PeZ}hPel?zYdjxZuI}jcBxbzSSZJAG zmA?qKo6a%{VXZO`+_2ab&Q%-}(=8-mTX;pBlKfi1MyL$1yBus=c(ux2=@+mH#GA{--#3D{3WuS_*L|IBSuyN?jm# zexO(?yoN#>t1$krml`~7%u*X*cO%$ZWlJEBZjHlr0d}{8tyOlaTnewC)+}EK+kU?hT*LN>gq%8Xz54h=a2@xFM4kk1*kRIX4%T#>p5UEoxomL8 zTSjL{oK9>hfqcF2blipK!LG{J1akM=+%K}rwYmU1Z-cFme+0Ib*$cLnIRdWiZVEB3 zltOpc@qab}siiEf7J_BNAb2TQSHsRTDwi6sS1i74z|^*d9|KpCiFE1X0d^a~b|HF7 z<>H$6yV3t^E;eTDN69L(OzD2aqS4m!V1S)pfNd>*1Gcqn1lxxE2XJGZNi%#0a+9Vr z2<#|64lWfecjABx=4&c-`Od&GB)|c0U^NrjYB|2KrDd1YxatXw}3v3sq@@mCW z)t?Kt`cHwa{&H|kBe*XRXe>4feFvPa8Pqb_SW9dRu=9PewZv|)wZtB|S5c9yc5DUPzW@|;?G%ja%98Q=U%p+~Vb{^>mZuIrZe-;64 zfKDw~{vyz3aLS{m;p_(Y(3ac?UaOh?8N5aD-46yjE5SCiwP34r5}c|o81fKSi7}2# z!ynF+S~F?qF# zjqo+Fjgb6spp*r6G~=OQtMgKv&Tep;>ikS~q_tm#g;Qx0f^)!fzew;{F!zYe^WPEz zwnQG-n(nJ$&CGorY-hrsg6$2ali+;QxST(Ob)<9BTt+&z+;FhHQFRws3M3XyT0jJA z(km7Og}519uaS$vwm@ZITl=Mt1aV&pu=_DsxAakIKXtSb+EX+Yd<*^;+zOn4d;I(V zX#}QXdbyAe{#bDacqOJ3c_vsMRtxR{zJ!8+-Dq}j)K-2_nnmjuoxA|M`QZHBMm|1} zM+?9)8(~s#!7T)rYJ{Rd9xaK((*x|5f-62G}_Swu!z6wu$}{Y=_?SzZz^tQ^0nAmW-^7Vff6Wty5PPB z4+PtN=51iJ&m{kc3FsK$KKhlQq?G}7o(0>2J`c79T?4iS-43<|-78oN`fISY%AZAU ztm33m=%kn_o%?g9MZ3&u46ySN*k=6aVCr-es)CF!1y}1}brskSR%5~YRelG!R;S<+ zu&qGsegaVv7IQrdwh8?QI73ah4_vPJ2sm34{Sa&|mvV1Vfp!6QE&)wa|Kt`!6qaf+(??pqZt8qGr=|5 zrF&R8`A2)%05~hauDn^MP9tOo^620=91XCW18z|LT$M}3e&3S+uqfEQuoYHGH5J|s zj+LuP7qmu+KT7Q^2A5xAa3wegED0Tr(>VdI$uv5rz|+B!!L4m5M3KR}z^O|N&TflU zmKyvuu$-1cpAW7QXs9$7CZu8ZWd?5n*FSA=ZaYl#n!)=8|A)aP?ZMj&{sUOf14<$0 zbf9pa!AAr?XYjam++AbvtAf9R{Ut)Xj+kYQ!Se-w)!@V62E_|HQMmO+p4yp6FB|+6 zSbjwz=`_zUz8Ab6EVHZNtGiIpM-Bc3SnfB7{DxRpO7W}-`~)n=ak=26WAdnRjoTk= z7Zl=(mY6ldV+b30VWoC z3HX@e>ELoqEb>zD`IuF38TjWET(Go(Qz|b7-+_sJ9q?O<%fUUds>tVM(*Kugz~#b8 z#S6j9Ft;dGfHN?$;3eSa6jy>fVq%dm2X9qe4ZZ;ri+mMW3+KwKH0+O(3c(HZ3OWB1 zEourlZV5Q!3KLo0=OjuA_^ESYFuL^$uyZBYj&9e0?dTQ-+j$`moN=8=XDqn1*xR3AHE0%z43{4Ch6Xm^40wY&ZTtj~Dd{{h#ensmZbfxzjxkkBP$t;G|(DgIR(hvE0M()IyWa z?WCtV&YdPNv;KdOKz2V9;mf^EYnRBI!Gj^eKSsymL}Yr;$EhTP^aG|g3&FLJ)NDE2 z$ub#N5VsI4a^b)JPlHqU#DYK;V|n^d%!P(M0hayREBlPR4!OmWxV(5<5|vCXu0#IA zy+&S&zQwYQOH=(V==+%b{l{TX>^Bj%{Fpb%DlQ=7r?o&y$SsyOuv-&y$iU(>F(;o38t~U}&uIoF$Ssz2+Y>4;L~ij~aSRPaPe&iO*&oIkWUW?q~V-$3-x~!UlT3mzteyu=0a*JhY zcN~2g|DAd+NI>vTBD|*&%8^^#fILHWDv?`!8u^_nUyIygSs6X6@-4_ME=Ru&>Hq2d zKk*J~XY={>;SVqHOVI-@xgw>=KaaY;yUE7Xa!11$KnR$ ztzw!%B^O#LE+B(<)kH}oWN`)ZD>dV62Q8xy3z@->DhzCu57VkUygG2ILkO$|>|(twAa^u(+O# z-&0Gt$Sp2M{*mhUKrUG3=`5zjXg||~gkPp(ZzDR2qw;nE*#OYXq6rrJvk-wJCUP_d zEGr68N)52n3S4rfk*9&>M3U&F2iVB~pT5e-Gr{tBMRer-9EzP@;4Doi3mlVmmM9G% zpxDU<=M6IQ!C<+YEIQEuJ2_yRSuU6-O1@5BfSr8sL9N($us#}%76drvzu!vU>?au% za>1UvEefzx0zNX(=u8L8$z;(l4X{%tI+{*7SWYR6&b$Eo@6ob(Eks_~)67EA3P0dS zaF$4f0VZ-KSe~^@Ldyf}RLAM80?Siq7@`J3GNW)UUh2cD-F6U}rCQo)&07Sk`p@F65vFNYrVN z2&!}hEQhuvvtt2vj)S#kZX;NaO}nQ8?3@PgHjU9e1JEnCycM=m=LNoRb3odR%=m?}*oAP)gWsW8A! z5jaD2O2BetQgo&V*eM0KG6izWz;bdC9k)Ed&OC6MrsIMe+5Jd5v4ugvsQ}v+y96wU z!$qkwz|L~8?Pk?rc`zV4s{-uQfUT+5faPY8=&TK}vmQ)3<}DPp1mxz9C~XX||AI%G z&{pJf-&Az!0_`Z|9q6@u73Qhje1OoP9KvIDHcbyK< z0;M9iKaXh@U?&Y+qqR?$xQk3?83A@O!PTnM18k36^a95;;A9b4r6w96N{dZG*#UM2 zgG*E=3YI%eQnQ=@JGtN@%`6XWf6bO3U}rpdfYFIX3kcXB|4j<8QwUDbgo?m&r%Ey_ z39vIAtSvuU3YI%qqEi-Nr#wz)9$0RZ_s8x63N15Q_+T(I1C z6rH>PJNe)gE#7#r+>bE7h3}u6xDkmj>7=10U~a zx!haZC5nyKtc&knUl_K9}be0F$sRoxD9d{MDa+j~; z)&$sD1MX#N@2&;wu|9WwEC@KYV4bzyjbJ^>=WYqGvo%hq4xIY7$!vRoot<$yyTSUZ z7`Hya&R*4#w(RaFpznuq4+hw2P$khh0@ioJxW@wQ9FNm!1nX;H+*1K|PRHq-0qZ$6 zmoFCZ7D7`4Ct-Y0`y{X)PIFTN?4-u&v;ymo9Nn}4JLzC+>I|^{u+hy7u+yVSC&u^M z2$cT7m@zBB&H%7=M>e=pbp{8R#Yv!(1Flt_+yFayaXR_ndes>(IA#J)L7dVgaHA>} z2G}Wz(k!ia4bu;7Zl046w62 zPNy1Nt2(O!?9{~RtO3`n&RT=bUUq$)QZ2Yql{N<0*%GI-6`cBxsaaiso$YZtJHc71 zvpc{}eVoqT@$~Pvr3P@R>KqBMb1Y8hI9Q*Sxs3sKPQ~e*2I~Vd_l(8l z&)drae!>iybBTLsuj1M5=MDPr`S4%r5Lu5ln{2ZDdoIAGqW z<6w?|&p3enZCB_;AxgE|Wd+#bzMqo;HNEZ7mmttTxj*qVBrANm4e?(s%xwp`-B5k8 z+40M*gdet~K{8Ls9fR53%-sSv26&9y0CHPEZU^LDYPSEf?SBfAmAvfkYuLTZZeDir z?b%#QX0lr^f<#9SvHuW~O}K2nd$4g9ESv0WA!!$~nXbOv?44!L+_o3R`#?zAW2B}t|uTFXk?Gt{0f6*D>?*{MweR1V?DNuvc;6G zI^P?i{$kZrX!l}hTF38sJFeC+%9p1RRs0~qh%`HE$x_Ofcve%fGJo$rEV zF)oYn^Ol=Mw=A}+J+ru$MfGj0nPm|zYv&(BvR3xrsI;9$uq=vYG5jR#Ls%Tm8EBwuNn)az4Y0ZAim+=c&}zpX76-dnLOnIoLLHuk5P(Bz{?T<*TUaXTn|5? zxDnobwIULPx#N$L?u#*A}}1AG|)U&$?_f6q98|II+~ZyE<;_|P8+ zmi&9hftVc#WV8Hl7zg+=iWvz0P2&LmHv_@v9|uCrR~eAJT3TjL|8q3L^e@yh)`iPu+LZ+VxRF_IGh+cGlkk-hzPHyt?6eQHY&tuT z#|StLk`YXJXalEfphm*Ne+NYv8B-a6goiE)I~U!1LB2_+g`Z9WdF_6g%6^jp3B8zr z=b;UdjC8_pX2_ii$!I71yU>py8S#XN_y}~n&`8Ix=_3@hZOCc+o;lK z6@^zZXS@W-$S6EHJ;6z*Vy#PC#R}zQghcu+6VB-8O(fwRiFgGhk%WhmLQc|DcxuE+ zotjd5L7`^+W{`2;FFVe?kPN%R--6aKsmahQ+*qP*lSR|2@&ABoV^ZM_(C;8IsqiH$ zu?{3A6&{~JqQh*qoQJDWDH#ZVb_JhRhbjpR&w7RrSwppih5rsZ&m%v=!l%dhZywZ$ zK=|3FeC11w-H@14_;Zyc28mUKpRGUWDH=2+`ocRACkqmN;l}i>#q_@AV`BO*GWcwR zB$DtKmoi5~5=nTdLzpj>w|0_!ZW^S-`!=hbA3P38jQenX%=dlmrOfxNY-M37{C4PGNEVmELwrRr;SsoWsTVa&Vt%5?lbeT} z=7gm!NpDIo=HWRcJ7nSQy3!@zG>g~*uD9z*VcwH4{-<#Gm6E<^N@|bl{D}obyVofc zZ9({x&=E-5hVUPJmst-=#Y)1H(?U)fnb-z>@m6M3NUSP6LVB$sv8r%iKNcV1J19ba z1bE~>P=x#l@Q`Hi2oe46b4imABT|92yaF7O!U|sj?SiDR!r%Kk-;nr*DXehY4q~<; zgh}M4CwNggBn1%u%9D=seMkx*+%NHaK@D>%I1B@czVJnhi3f?kaDM>m#{kqi;RSon9Ly-+=2;WvEYVIo6~2!#I*N}+|w z+DP~=7ehj_J`z5L0^bG68cFy&&>^Vw9k0*-g!|oMThbl(GWN&}HzNSnP#iOmpzoH*zKrzF4_58@WDbw2_bPYj|r0 z3XyM^W%%UV4c`@|sv z<|B-}_qE0nhXK{NbNGn&%R=Z^XubQZ* zDo$2Q3>$7Dj#5)EQ@zDE8Tsh3hA&-YEHP0nH$gKVI8JM>78`^G#f2m8Hu5>wV1HjQ z%?K7LpQ1jM_cloZ6E(sxOf5B>p}wB27I;T9+|b+TcSKLp?Rk~qhp#bw2o{t!aA>O0 zOO8<@XxX@fbp#>PNjkRNekuOF+CM7v>wK3g_ zDdxghO=z;3ei_|NYW{&*V%L0Q!oymiH`Mg))Pgg#)z4w1leV%!eLwb#CY-D;Uipaj z|7j{{y}&3Oa1CFre46s!%H`LOlJGX=^OX-#{;`_=4dsiJzcbIoTdI7td?H;EYOaDk zT7$*PM=4KMzKi96=r2}2N_n#KU32xi@=?l@mG9AkOn$~I=?uzOkf{8f2h4>P%BLvr zsr;liu7S!EmG78i;w|!~d=zdQ+ox@Eh4RVD<(+hr?+4neUsJwF`B>#$lpnpv=&w^g zNBI!tiOTocPG)$_nWKV%%0HN9656DEj`D%ZKP)lVUsFC;`5@&l6`AYutA5{b%0JY; z@rLr3r^{p(we8&`%z#`?tlz&`kLDD1n! z6lA6Cw+qbmIaumEuD_waU8fd!?H+Ue5OT?&byO{&db@5l*B1;ma(PRL-~Sh=NrtEo z2T@WP6ZHPHN*CQmhGRBRZ+AydA!8PP}cJ(Xc|J_W?DN0)MEDZLFGp%1phk7MiP* z>|FHxS^bbM59X^Y#%f7-X~NAloUB9X2?{DTUrjd@J~`K9+)Z6H@kS$0rY(iIepnl4 zHyW|%H(zMvi?7xG-|>q^uv!bS>t++)Ln90mVJQU^erUXrAEh5lLUVA1$XBS|Htlwk z?Hs2TTB!xug^MKKYVF=HJcj)xfjyewu-PVqk9(WOH=EWUk?W5d-pwYg1x{8|4$^}4 z9B48a;+k~2Q9!Z4YIX4_&1a?R?~7@I?aGYe1|5hdYDp*RKrxrGS`vDP0t??k8<3i8 zBVlO^BN#`-_pR?S*AL9q^cV;HMyxKIqjSeV?KQDsC`dvtXyZ9d!cyb0+UPo};%FUe z=SGcwm+K85rF?~2q9>*mi_Xvr9eThN&NhdVX@IhL^kZZyd{9b}N4{0|$I^5LgWYq9| zn&8p9O@wXgv)qE4WcG1Q;K_{h-3|x}&iV?;&A8O<4O?pzHzG|^IBpvd1dQ$WA z;2npVgh#6n=WESZsxLRG?_SexwKqZ;p!oGh1`4Wv6rLYuVlyrUV+P}9Dou30(Qm~@d2B%>cQ7VD^uaiHI- z85bs*^j=a+9UW)Fi?u?lX^fI@Y?_v6%5*t8ps-bz#8m~%iILv!n6Rp>|p5lZ-)%9qiqn-iXkrKIE^ z(5QrWq+r4~jW8J>(t#+HZwfH?YIA)xy&xIA#kfQ)J%Mo{k@n{-QlIX6#9Vlp0Z9@( zq1|Ya_J%~Q@y9f>1g;O$g6~k1zC=MKg9&Qt8O0{O1;|Bzvi6p_3ygeOKk^}eXNO)m zp}s!wpivmB14nZmczUX7Pu^#)57HsFCl-;6M{7Z6>rlH#<)i49a(%^Y6L0cRQ^D76 z)cL<%Un3ain}h|)ETh;$8`nN+ED7|D8od>&zW@`9rCR40{oZQ&6>9Pm+8qyM8NKE- zI!Py_1?X0a{lynAYfa~@)W}z=58F`?NqFT$ zhL6?WuuOeF2+K%1L$r-Grvj4C>fT2G1-Yvy3N1>E;Hb9xj$@5{q88++X1H>=kq^=u zEY-HKlC~iQ*|Eq}s3)$G-m)4l@;%y^Kfcw3XACmw#3rg~daKW0qdSR@rm1NY)dGF# z6_U`Rdko*CBjv|BF!jFCB)CCcwTyJ6Vu_kgbG7Wm1t$JsV=?aPQ==3VUs4k<9cfCw zKui3AF121$K7kq}qTg2=0^3>)c7RbND?}sdfl`}WAUZ5odeWd3NW7x#N;2Vi)L#he1jod;_uP!-FLc4 zci+{>v8r=YyT?HFc{_ECsg9@M`sMK3zR$N}w`m2~-WO zfoh?h&|YtD>&Q)m>N|3F4>|^&f>JthC=kkoa-s21Ayf`6gesv`&{{9lCej&ucWe`B z>t(lz=Wpt(3P&SkU zA+vM$+kOy?oTSl;VRwlnQgmR(r zP$48QE0LFx$h$_;al-#|2FCvvIHUV#IitICA>XOzd2qVdEG=@NnIi(iPKozULuh8m z@g}v4JPAA2E|ML7EZytcKJsd)-aF7fGA`_N^7?d$-0C&-jWqXGbcl=$XBB$yc8GM3 zy_RZ*q^0;dL~4tA7=E~?;XE4m8^NG~zaTnS?*?>OGbo=@d(T!h{oP+9Ka^so~wa z8NRNy;Y&56fxS$)FTGIo54SRWG64yXW=s&?v!&sqG@Wh{6Mjj{QEbwUIY%|amFF3S z5n8~*j9!vZ7fo;?-jeXL%M5=<6WXO2eW2m7THy%{tA2shawpZo>(n!EFzWett&V0G z#VJ}tz7_9BOf)8S7O5pqTyEqYwSd1Ob;)4eBZklR6U0ReP55vZ!+WZQ<@2$Afi%2_ z87S171ZJz?q-JzjYp_XOvP)gM=`!#7PPlB5x@5&-li(cX#Y{Jn!Q4j;KX94hN43EF z)CKD#WAwIZg(s^^_a&%Y!+X?q^VI_f68-BjXNo2e(u`VYLdn!d5*~4(;ro;?(h6+Q z&d^+4uuThoQqvo);oh1~Uv>Ec4WICvh<9t}NVALAX`0cxysk4(ACL#Zi3^EdPlAH`@xU;~a?Qlp)wlu7G(Y(9!LvwXqt3;WIE?NTWNd+J-vs!MXryPVVWaom4_%m5(g}xEzlVn zb`RRz65OyBT1b0Jf;Q6Qw$Pm$psmC$LN)+d7CI@=BybY67I`7z0r34$1F{Mzk9N|) zc(s-0kn{u_l0rZfDkZadT+D#>5>ACqLrWl8C@d#4SsbL(P^+OM&{il1I)yxeu_h0i zPB=?2>B)**nph`%4)3fTa{$7#Sjp^eBYp|#+JP!W^^WkN~lB@yp*H)otvkMEC@ z@mjbGB|%4|Eg(CB;#Npb9MvI{*O3*HsQi?qg6nyN9jKa$Cm@rbnQZLowdui>m39FY zff7<^chDLr2V?Ao#xsa!&@Hw=3z;4hn64_I{ZJ1E-g0Osltz;&f$C`%8H|IaP#u&? zb0~z?<9P>9t;K6+#DkqFBh=X0Y3W4q5+7)EYM|2(JGnpH)=O^;CEZ$iJ`FdKB?%2KMEjdaPZGWWnefF7uEOWgF@(3H0Sg~ZI~2Zx zfmQev8ny6ZI-KytPTs@4B5lU5rU6ShS>=ayt#)*=k<-Wg>mSqML~lWY;d?Z_xhRNy zWrpF4yhFVrZDV8UCw?{>Z6Bkgga^`(g>TYmQ#71RpBMQGhYs`eVb;m@(E2?*QD*b znDA(|=tQmYQFYZYy}m%xTSUeD=Lj#U4+p9byCs^0RwNldLS3^?Bfh2}YpvmKnN=T-eEb zqHpAuwAwvs=ULPv{IQE4z2v)H!9v_o?3f&uCh;Q@k7g5PB-vmZZU( zaTUA9jH%w6S5ddpsourekujmV%~P@?&xgX!9o}UhhMo#%-Qj)b!_dRw{5!m>KMK7a zuDQc|_nOEv;rctg=l)1IqsY7a4A-MY-mlMu9`puZ8%YY67J1iSOQJPJ-ZOA^s7J4j z+!RhN_O2X?I9lvICfqIdegY5GZtfP1+!YBmcuTKCE#pq_-RroVf2Y?cN7U~09)^1* zBiYy<$YG(If7j+tBO*71!=-n5caMzR;1%8wNg7*wSDZUW+!Vd>x)C>AKW2FJ#{7F{ z-BEnseYsQaxTpBuq5X#ryl%?$>Cb+{pW(3;J6#vNdmWLuB0GlDNEcZi?oN8kT$0=)SO>w9gaWz3CFV#LVknCmFfu>8+TA*=t;zPC)fuWU+u`EAMSQ?L&wviqD zoAM&biLMO0-q=NvHW$onPaFm_r?j2-a9*T+IHR5S)cN6_7u?%VFVv=aKg^5tOO$nc z$eXe{(rMHk_7;e&-$Tw#Q%gq{m*q~GSv0*kXxgMXt&^rvY4uF+xM}L$#dpv>xVJev zvL;-2v-ibj;dU3y5uZv~mZy8a9UU2-=;Y%sZ_3qS$~`8M9PZQ6d-l9=*RVU?KwA~tyMjEP(l&br?FpD~fHiKR4@L~p~@;WpkCH${>|HQu0`A{`R5 z{AkM-N7{I^MBL!bMclE{pNwuS&YSf>@x7z&ojsj}sjXE5r$ zMw(HW55`71C)W68edGB^8YB4l%hUqV=H9h8M=lFBZk~2CcPqndJ9)1#38c$!2PV_pZgu5oz--x{GPeU*FN>jo~iIpQoZR|DSuHN%0;bgCF zd}Mm4((64T@?>IVo?M&qWTdP2-xFvQ4Z|e7;F@svW_L6-3a{fWk*|eoMtE=C66qe! z%JF^+=LY79TOw^Y_xeJlD9t;Q6Heb;IV)0lA+vt-7EBM$XO4E8Pt1?p7-A+jy5}4{ zy$u7x-w!|D+WS*1a({SH>&^GOk-IMlm3fDsPA4tydaL)zzT(*GWY9yBybVb->Yvp_ zk}sYo;W$e~6TH_~N4mF8W8xQiALmlvLK~T1le{itBWYgNtk8MhFBe6cw_bk!CzY~T zFU2ce`dFm-#i`8H@j0x&!29jUa3}9zO(f~!6xJK@7jv3>-+V68{bJb&o9vB)dR^%K z;<-ql_RHxD@$z~<9Q2JFp63=#Hk(ILvNox_$h-6TNT(LZRBmmW>1}&Hl1@%dwJdAl zz5aZpPk8sm-fx9xw(>gFM7myln&pcrrm;q58z?oDEOmE`rE5V_2|=*38ji?>Rc z>(*3Tx_R&B;v zkspi~1O!7sMFm8`QitA9gURQzJ~Dce&wNg5Sr<`}${aLP8c@kVKv6N#z;RxTPv7@` z>s~e)Gz1RM8_CB0Tv$n!_JE!)QsF>a>VWd}BM`2W73CpuO zi7!~f{9Ip&_PII<*K$Zy#PyXZNYF{lWC=@BUkTrZI*C_Uq8+n=zO=g+>mDdK+(;L>%b)+lZFWLgPsZSV{m;l=|JJm{AnP9THy{G<uCPLKonpQlzhkCxHf zF)>Lm50ad-&C*F}0{U0|1PZJ`&lnS<#8PpEYQVxU?iePTofWE=p*XQhqT))`LSFmS zM0q#m>{Exj6hhJC&{e$&TBHKc8mFn*mvzBwj{t|j9i)L2EDHKwrRw!luwEC#(v*{4>v>ZgLy;v!SR4cEm zUtNp7-NL-iSW&1_tJ04PHJ!Ftl}Uz}5-?h-)poUzs_650B}Xv_(9{Ga*x9nbO2Q0< ze~9!*RHo9Q1Z9<>pb~k6&sR#(EOc%@X7P%+D(N+fn6J#Fxrs^?T8VZXR)Y=hnejLo zPF6}3tc21(Q-d|%{c%bgMJFp3y7rm+DNdDa?;pXbQa&bayolOj#W*fyt>ODyryNuLScZZzV;9vmhUNgXwucGX~A zhBaeljp`SciBS@Bg&nLSJR?;cMZo&-^A&x0u8{{03tsU+ayzQ}p~)UOs``iV`V6x| zuNwLAj6@;IOTNe+`#6h){lDHUc#a0e5;lNtr7C_s)$F5j_Up;{nCj2sK8SGhQ>p1f-FEQs*UQU_UG#zA*}H^4pXTL4O&D)2W5Bdq%(+b+ z`$>cld{dt#esAJc)0%+w$41rX8c@T?nImGRQEacJrjF)NJuzW z_wj=4QU)SfYSi(#={u(Hsu#RA9gi~{d1P$4;C0Zub*ev3zgrQQW}^mqJmMUd$0ejj#su7h=g@)`BfHCwj zOD0ki2j%ov1{g37aTSWvwrugh&V-}1V`%0nJ0KN-X)`2+)m-*~vGsF=WEs89lC^XY z0o^>Mx>Nfp)kSWjX{Q18!xoK%8oxkkDXTiyz0RihD0`*W!A-XPo%apYMPchDY)Pu6Kvwd7K+g87C@AF(CCA5JhOKpGnO8uka#OB}p@TuQYajxP;#f_?g zvKv(wlNIU0SGZ1({Ktvc5ZKrEY4mm@>}-G>)ilCbr+|o==Lu{8ZD4E-V-GO4o3WjYZD4G;4$I9pV#kIOft^8eE3o5RfgRZjY)U?` z)>dF6acRo@9yVg_9D8TtVIYqdGj=;;3m`0)(7Q-5mFX~WC@G@$AUB!a1$I&^V|>r6 z?uPE%_1kIWdDZuk-yQkG6(LcpLnA76>>SW7c#RZ&9_T`#DepY2E$7%~#7x+=>#ZR6 zyMJ}*4iYdI`j}zejA&*y<6JDHGYr@X3qdIb8y;`y#XryM!-aT$&1Wqc*Dy|K{sULM2@F5@6Yo zb7FUjiavFbiY{R#$XcnL)itmt!)1JRv$__YIt<#9_t2My2zBt@%TO0{8L&u3Wbs!D zE^*kt?6P`c>*3z8{OglX3xItE%z!r?fPDzUcu$6R z^%=nJF)}RgQvt}Ff&(2~2%dVFe|ytWMcAlu>%cMx8#loS$=ZPdC$U5IHSvy6DDoDl z|D5w*i2_wiuXi9*-WcMkM2Ngu_uuxu$aP;Z6E7O+DFGYQ9{03;)?uDxq3g&Dn_kY> zpeFoz9MbmK&NE8W{4)E}ibZ+*O3!O4dd)t(*m-gEn`^LLvQjR>un=qCwbkXqU;GIw z?5Fft`o*fD^z6?zZwh*P0C@B_a^HoS$8&{Q`6ZZ2Co8aB7Y;F>~TDrsPu<`HL2{qwKc>F*onmFK2ueAl>>D2`1 z@BF1uvzr!m!q@HhT@O)Nr)mf@C*N&59uE(dv>p-S7VtzpGS5Az=xxEnVZu3>0$2Jg zR6b`xqng2E<5{%RP}=K}nc#)?@VFEH`pn5`2<*+vXAMz0-r+C{_ZT}5t2Nx0`p-$> zEfj}pcIeOcmYx+Nyw^Wf#~XU)9YyeX-+rQwx8n}o6g+oqzjwiNEva`)$htQya7CYR zWM2&4lZbPXoDhEa)^}C}cGGH8sS0={d?B4>J+%w_=5?wOt0-j zJFh)T1wIC6D&MLMvhA)_`YY5{t2{yT-o;ty!{v(EW-eDAk}1v8Fqt|B7~E*9w;{-O z-P7PM)2wYu5ncB(WHBd{3U(;i9`J>>&x+ZEqJ@HME2Cw`TD42^RV|Au_x_YZG|EwL4U(j^3HT8SGE1v-ZL*v>X7r)9j$!D0J$if}fLP~IIt3!ROAro}K-m8LC? z$jqFQk)9Qwnx3>o6mu^v4%Hqq&PZL5k|o*Ra5g3@w%Bo6gOM5njhXUFnl{MjPvvV3 z4+Y*+#No1|h@M_Gw(XHe5;{2rOgk>37@j9NPIvD6L zO-+kmuvFrvZjKGHRgWLGUP*?z$PxA^@e z#k~MJ*=zervM0P>DuvtPsR8#Pi1VKRi{SG$o5t6zsLwFigG(jai_;vRVbrxk8-X9} zA-`Smk8+2-7) z)M-CU-%!@cHlO+%=k-hzTK(-?E_VU z_Jhi8gTGZa%C^P^%~$q5iImSl$3b6!PJoWlz_Z#)*XxLW3+e=Q(VkAsej7Hnrg-nM YJRxfvVL%CA+05a_mi~_K4VK~m3lZ2FkN^Mx delta 102572 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 z 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 literal 30208 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 diff --git a/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.pdb b/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.pdb index edffcccfe081dcf0fb3d27b73cc84e68064f113b..aefb646deba294d90cbf77e4e261ff6a58b0303c 100644 GIT binary patch delta 113756 zcmd?S3s@G_+PFV2pyC+>5%Gj)^Avc*W2mU8q@-9{rl6pph=@>H);pS+nHf4JR_?;G zvbMP`t*of1tgNi;Ognc`T3K0H>CVdXe?M#1%)Gv-yY~LB{e8ddKbMd9tmj=bYt1^( zTF)%Z4Y6ibY-zhjKEp6>;J*zuIpJ90do(h<=F6ehs*1X6#E(#Xo|I^XZH}*jl@XWfk2C5;H^X`lB8#{-@>AK)AI^u84dU)1Kl7JV{Uf7@;S+Rpm{UjrPfQ$o3)s#{b$cRU&TaH zmCIE;rdhrgO`2xnqa7)~pg3#BoS`K%XXX^CUvsTDb~gzzPg)+d7Wc#nH-T%<;hPK-u`HNOWYY$EB%ru&4_i*iw)9wqk+X>(* z?REmFV;3aD@!wIqTj=Z0)9!fX_Vg*Wv8PjIJ4n~l@i)=)mvkDPTUW|2al%M+{oP^fhEO4UNbFU>T8S>PpQ9^vFYe)1 zTu+zScdgaQiils>c)wi?r5qQREU;@-wY8*ul>Z>VNL?%_nL9nFXxz-9i;8m=kT%)q zq)2_L6WA%DKLoj(*)cGjBDzGoof7epcDE<-<$fo%yQA$6jchu_YMBxfw@T8UBRIoK zr&v8&xA|QzO$x}R0aKk6^m3`cr*m^DKolD7W7W?*FS!<)hs>u=S?Kbh&<{KksN|HTqmn659cq_>Li*`F%kYxvF zI9c$tb~{<{xpwO;i2UhN>!~#{an6UZ#^UJ>5io*VDO)8ldYXH<4=dhU>4Fo6w%Fr(5NsTz@^>lHbVI`A_Myv{G~l zgrNcnwLPNq`Y}(}!;N72H0MFQDmTv6+5MPA+SB!*WOc9uN%lOtG4ymjdi`hhFvbXt zEG5m;$c=}1tQ+mnc)YriZ|nM7m^CYhpOmgDKsUU=9$QF3y4x=7Zb91Nxuvu07x{r! zI3+1j2jrBbz1rP{h=~6WwcF_~F3D7BXgDS9O6_(^+Rd3(K}mNjwL`3xaA9m&#ROl< zj)=?l`pWiQ=9?KYtkH-TtDCIaa_rd$zc}zv?G9GKq`0!o%lT#S>=Em%!RKD_>m|N`L?Un;I>;JL}2zk)vWe4BY#X)w1(gKXGKZW*9OQrExQ2k=lq1<>WY5 z$~vStn)M*XT)Z1JxTe$-GTa;tsUT(w90bR~AyDoy6n+n5L!A+vJ+hNk9^7p{f#;BBxFZi2<|0eBgF6fT6%!bR{EcqM!TE{6Yr zSHsT<-&o3t#PAyU3tSFsksK>v1Go}K!BsF0u7(|8DeME+z*K0#40toV5Z(%B!rS3I zSPrj;cfqxAGhFBAP&$lV@N@V${02S= zeKcQB!*Ey$o55#b8@L-L!WW_cX-@WV@)mpv{vEyre}wNqgY2n-Veoy}5blSO@I%-g zehde|gD?$#4yV8`;0*XBTmZj`OSOa4{!@S3ZI3?;A`+__yarv zjWEMF32Q@2t=R&G!cH&@_J(AiIUI(=i(p+i8`gs>U_*EtjP&^pb1Nt0uel92hL6Em z_zr9e_rqrJ3)li4g{@#X?DK4!*;MIY!AcwG#Txi1wBXaQ49d8519VcRbc)@=N~sS{8E&Rh zW(Sm%;hrjGs6i@as6i@ao`I4w&%u|Z{y)!&B+U!38omf6XHRFQBB%mrzpXYbYu6EtHh`4yyY911FL+N1-ImG04*xKS4>E zU!bJSuTWBkx~)ooX(WsUxDV23m!;uS(3&M1aFoN*Z>^2X&M)PG`aT!CT;TntA+Mt>%O8z$uD#uAtXm%`a_Ih+qy zzy)w6yb`X4GIG2L9;cmHOx50iY)AGW`;ntaI9+NdB*o8vg~&Rj5;=qzwa6o6Ad-tL zLpCFOk%Pzyq*pj~8Ci_1LpCFOkZR-v5?`B}BgM!nWIM7CVe-R>MG}y7#BcK7Mr0TA zHgXh+WdVENb?5V z8%am98yE%jvD^gNg;XJjk>(94R7fte0@;l0Myik_NCd;du1Fe^i>yG(k$uQvBs`Lb zKsq65NFlNe*;w}ACSMbOS|ct)mLVIE-N=5VUKF=QGLS-K1F{v_i^%)I38Y>$&yOS{ z8HfyqwjjHa!$`fxL?1~(GLS-K6|x<98#&&X9yL6stoxn582^?Sat%3%gf}71NHUU* ztU$IPdy)Of38WoWI~mDDijh@FIkFEqf`m0Ca3l#yLo$(N$QEQ5vL88$M8t8QIHQY^ z&dEZg6e&lxBbCTOB&-=vilib_npso(TB72cT$Z;gRB_$3Sh)hCq5fj;h zR3KHzVI-WctQ|51S%|DcHX>V*-N=6A2ofI8{g7lN6Iq6=i>I;P%1H%Mg&aqsTN6hl z9VtXsAsdlO%n3S>WW2sw^~wdH*K}Nk@v26-YU<8>vE$BM}|A7m|RaB9o9@q!ihL z>_MuKL&%B2{MWoA$%0Hl79;DB%}51Og&anVPTUwtLZ%=lvbmG7V_wpl(6veDsfppT z*Iy2)XH7{O7_$7oGh@89TX{H9<9O0%zhd79)2UL0LrHv@*v%VPm{X9ETO{)@)&oyB z@ki89Q@9~=mCV}i;?<6-qTXyz43n#5*0x82{4Q^&zj(S{r_m)ky2GBoKEKzw6HF5# z6I_ppuE%p-U5}p5#hxy)ucM3i{Pp&9)|V^etg!Qno675J@WhnNomN{{o!89TJto4h zURqV!cypvXg4|Ww?Yy%d({AUTHPnuTI~y`jyC;(Fa{r~;JxRNFYWF2kMlI!`a+vko zc`AdXtJjD&e_4k>r8*)nF&`NZPZsB;(z1W*P^K^+ltcW3n*1i#8=g6c2 zJ;W(fh?09fcv>dhXUJTJys}D!0q*k*mM}rbX9{#xX@z5p=?rN&Ye4!)b z%$@!iHv{T1<-Vs6W0_}F5ceQpq(?xqms;S^DjBn%! zA+IEAyz{E4RZG;G)SFnaAZuohTJTD@664xh<-=0_e-MQRcZn#pr^R;`UcF)u9 zhqZfwcE6RX(&V_bDI8ZK;YbM*&v@=gsx>yHjTOB%#%l0OO>29q>6hG*eO6o5ajNo-A=BhYxiZ`Kd?k4$j#}VW!gu@aUEQUr$Tjs z^ll@qaU&W_WbHN4@?p_d!jN!l`|yN6lz|f4g+Z}f9^~Gp-A-&@({3j}zSZt4b^88d zyRFdV$T-O(If5S`Vzf14M9cpy-m#-kP2~%?~k8BeX;afALaoNc^zWSCqa&gF!->lz8#`vZAYJ)|yL z5fxc!ZHHwQ7MB#|Oeij^`(j8VhLfruZ6(3Q+lfq9nzdYyoK)euCA9m67qCC`#FI` zdHznL^A_0uI))kFFg1Sb>2}BWk8uL-_=1xjj1+QOpP{t)YLv@;gP<2Wu<;! zom1L&X~zSSQYArw4!}vm#X;`P+U>M1hqT*i!<`DekvCmAwjhKyq>XX%06xpg zXzvUS+F2V%*0VN_UnQf%KRiTesBT0m=%j8D$Y5 zFx(3IsI8Or$zE>l)=G5Vdg2!M;$Ch|_H_*X-jO)sM|fFUp%&lvhlfB@vKC)V1TH{c^puD93_IWvC9Gj&fJK8PtaVmlrSXZYtY1&pY zotX_fN-21y@K$_ej<>d@wehE_AMO7lKvht$x`n59dex!~C*!?k{P~{FEtvs2w^UDe z{dpZII=|DoQ4H-;c;5sk5N{oSi>vc`#sFP{bL}mzKW`b|(|M(^w(D=aw~im~D!qE= z>0}+>j^Iyjh4&f@PuHUtC3uBZzB|k+92;xfX%x1Pw)Tu^&@wdgZOU6Ih3ggWRcwdn zmMyD%Y;3kuV2kI?$tg(9D#*^yQGKY?2r0-)&&5t5mK#=c!!mR!b`q;Xy!Q-+SPFMw zA->su7`LgtE6Dwdb~}amOYL?F@lgE`PNDrI$X!pz$tkmKZTBU{U!v?nnxH*6g|?q| z^KPyR@dH6O*rVO$`uBH&uKzs4dVFH@h}JVMDowrniLV}*zwM$qC%%udx_5|k%?YfC z%XY_{sLdRVZ`SC?9!cMN)fI^op4$BDnxU`lxVmGV|5Zx^tGqm{wmsFy6rlCpfhhkp z!(N!mfd%CAEO;4Ypsg0D=D-_p=fhjzTzD_Uuelx0gU`YFunHEzk6(tm5X47V&?-2~5vrSL+y7EXcdAPc0%dN>DefD0gzGZ#Z% zoy?mcBYN{@_!lTEdw0Ow;U*~SS$D(xSbJ7W|KAg{BS>^CqKe>VHh#1 zh8^K2FaZ()W#sS~l*P_Na5(%DN(y}iC4~+{S;VpSnx zCDyzdw=DVJ4zGlpASGNyK$5RoM?hw&eX=*{v-md;Hn5v15^a40V)D_z!HA< zZ{kD>AyvY>7Tyaj_z;x(&EmH*UU&+Ah`SP2!)M{=@Odbu`9&x-=w zI&vh{PO&RFm!p=94kdZyco&ZnV_DjdfPaT+a6g;~KY}yi$53Ma36vXWBKG`_J#B(h z&9l;UtK&QT$$gJO3F|jFOMVHFl;F{QoJd}T!WA$Ku7Ncnjg3(YIsrxK7ekq!kwa>Q z6HsIPNkFpHF9EUWtpaKXCC}SK38y2JaAd`QO*|)^Igx;5>0bicEqLRq7i3YiUWgfrn? za29+B=E9wjWp?v%$)q`)(7qXS;q$NnN>t4dXKKZsazSOBkFdzE4q20z2;BhBgNzSN z$^Dz*61W~pL^eQ4f?HuZ+z9W5x5Gyzlgc@H62&I?3cM52kQ#TvkKkr_2;L2)#kdzX zCjqxWS`}j}>;|{N-f%k{2p@t&;SM+k?t~Y>hvCKW5jcZNYCOsbmC<+%E`^W7>tO}F z0X_xSKy10pTVW+EhtEJ+WZMlNgnJ-$#&{XN0$+jez}Mgh@O4NLH}=8L;oHzp88+VK z~R~M zFBS4HoXCyufF|4oOW|FRk&&?(ZiaWm2OySxW+lY3PxY|(!Tq>*K&dYe!!QDS1Y)6Q z?1EBno`Nz4sf2wX7J=p<88z+ZWH^fF;aK=0_1Q3r0f!Y)+y%nGa*2*dN70 zu|H}KuZ9>!s=VDmWHZOxc}p{;js*T+gb;A!O53hj-;q~xKcmtHC z?MC<$Tn$4=p_?GRsj&u17OsVoh3lYX;d;5DEWXWHlWX0d$Rq#Q$ z3_c8RgpWeHB4ZbnnSRGS?02SNG#7!EVLKBkz=%Jr2kA=N5--B}Kx7KC7%4{_ld+wg zzm1$gn)hT>g#SNlI_8*-1(=MH{&k2wayE0ZBm%6gOBF-TW-|7#%*8UeM3)PHF~ z%aQ*Hld-d!i$xL!QjO#jk+4QYhE)@z7a|sUjv?6!eq4s`bjD=c`Rz;wWtIH)M~%wf z#;+Kb`NgX21P-w*i|$2Th5^=P7?<%5fpp@xfiMFpMphyJ0|saQ|HR@<8Jvl+*_jQ^ zc){V#cLlNq*^P+JV-;j^)rf6wUD2mOjSQY`nRR2ICjQJ8T!8#5)3j{4LQ=Igae%0=ss zH8I9aZ9_FiHX;?se&i4m)|UGqosd){TTIfHapKvi*(Pcy2=I@Xsdeg2=hB`hLQZF@ zmcs9+GgnJxo&}_>w6`^%k-_&f4 zB9R7LF-0ra5A%gxbn{@lLw4rV?+SA7(QcWVlc|3D=dEyfI&UgC+w-UHE-NdZ z&YQn}Mny+`PVM@uv~@#dJ%~Qc4p=KCGV(YoG7q{JduuwLj+NcC;!5kNIWS~!vejcr zhv@@t|L!#J=pgqz?RKVlS8KO3&3k8%`zP&orhTs)A}emzz9q4~?ba7dZab&KP6ao> zmxJ8jYxfOS>kb{QjU}-=4lj-NJ(?Nqi~e7oeyuP0U8+mgRBOq}D1Rq+aI22w5dG|4w!4YsBOocLeF$!*x z7m3lFJcxp~7jrk{?cIDIj)m255)2_QBBkbSFM$!bFNICuG{|(EkqrmKT$lp$Ak%Ed zY$$`qIZ)mU=0cgIoCgc#MWTq4%TO$UGOj1~<}!E%TnU%JTi|jiFVZXEU*Sr~B$cdK zo4epmkVz=@DVPjC*W;EK>kaS&csu+W-UX@BYW_Eb^)|6TGi$@Y!iMkx*c$!~wuPjQ zc@EqG&xMb{{_qJn5IzZq!Drwo_$*{1Mr>fr4EPef1nz~|@Kty@d>#5_bh?id8J)ff zWpw&Bly>DEC}qGzwhyt}D$!Fu!`U_zJ~Z6kkIr9N$2aNlhS=8uE>pSsCUHlTZ12f{+7;$VM$9+RqyScj7z^ z$wy?kcIpQdq!{M^~2uzRS)%sjD-*4;sO2F=TP%F`S2LFZb#hyt* zVS@Exs~9U|NVFAwL+-z6g?~&X7Gr4=PRvI_?SNc&C+&8|h{Ltp86!>zazCTp6ZQSx z(r#yE|A2PC5M?w`0Y=)%=i0ZlNR)3XMyJ)4bYuQhXYP&gQtnx*ygT2+=*-O!yNT0} z?IY~5y?mMtj#f$ryP4k6 zz1aKM!qX-8SZl>w88@ak7E_T%M8YwWQeVngzPF;RT{lLnZKT9VlQ~qryvUoIRkTQ_ zjh(yC>%?|)`>i1NFWT+ocB~yM_Y0Xq?RMS(ZqV*M!ZR9qsa4bKb(C!Z->lT@?TQ>S!7Pm*i;T+YRJdl@*5}?ecBNUM`XBwR3br$pXG$%XZr1GGAL? zTPuA{(i!dh13w> zhQym=6B76=+k0DaYvKZp{llyXE7mG6jsC+Au}eq7sevy9xxdkF=OJ2BhRAj|Kl*65 z^AJOAxAokb$T;UqkRNoszlP89Y?*zmZ`Ks~j>{fGwZumFxhSJ-NdsS$wR&xx>ACuj zPK+)Ka^J4qPK+AR%Snv5iAptRYdV?Vm7^AQSyIgh<+Gv8zShfYTl(th4{{{QQc{i+ z3-KS=j7iJ_^IXg|Ptb12%<>5Q*5oZ+0&YpMmroQd^R`&mE;Coh%6*C;_wCy4JjGMm z?G%o8w7VlQmcrIX2j&#>e%k%I{(Xe)uB*O-mJ22&Df8o_O^6}K>`=R9yAZy~HHAr5 zopl}j`S!2se;&=q$bT%=|qBcy~!$Dcc15v z2Xl3f;bm_sv8_yYJ@%&Uw{_>ax<04T^>zbJ@cg*}dpi3&3VD#b7%B3cJcz%S8=E^_ zWgoXK_H>@Xv*r17Q^C`D-&?eB{dtpP&0Sq@yI=4V8&Bz3U)Og%_Hk3j(|J>W7jPT< zNxZ4QbXV7#GGV8nr}Iowhv1JTNJ)l1Jsppt)Hh6$PGIY;`Bvfjq(5T|efy2E{?N#c zRFVWr&NbZmYh705(=Hh=@Oolo<>$>Rn9Fy7oI7Tua!o$hT#oJqJ0hxby~j22==gTC zIA=z2j@xDjU0cDmOVAB%XeXaCYTYF@Gwrrm>+t&Mc7Y*9P&4kt_a5z8sTHl z->IXS7hrxZ7fa2$TR)CdwRZ%$KhSQcYPZynQdd`1u_z{u-9gMs?RKjEd;NI#6AzE* z3r6c0hHLi}?S5Cg^PI=k?$5N_X)8kQdSN*JFV$|x+Vv{!cKV&chSfc#X55ix#DQZ= zh~0FogH;4kJph~S7%Tsldj3r1!TwL0kL^S|u=yw@8OapYeEcxTD_U}e)Wq*yomWXb zomZw0c>el0*P?Tp4{ts@!}aKWjxfR1c@@XgdDGb`o^d^Or`uF) zah2Yjxu^5KgSf@>=hkdb*Q1|Z=~g%<+wm+2hDIKzsIG`pbD_p$`v%IsTI{jURGH+O zDz3Se^y*+gnW_(!QpD44>+048@z|BD7LU(sk5U&@#gV#DahAH!SjWbx3vGkkW3=0; z3oEtTsSBTIw^R0S&=GKo`fY=-r;)nwfiBxyoJY~_L?*-Kcc-kUX}9BlvUWRVea>L( z!?KvTb7m^pLTLs@>ycSf3p{a9 zOFzPoy!P|GbJ@2mL)uvHZy3;Yy1s#P!>hIX)jol{f7MgO%mY+u>38Ap9qM0saVIg$&M= zRcI*WHzN%G25Z8)gc%MaVI$ZJVy2?ZjA9@k%=^{mUnBUT849sU!DLu%@YV{-vO;S( z1Ga(ruq~8Tg!b@S*a5DB*twXiVQ07=c8Bsdh;^`LmdO~ zD8tS3Uu?EQZ3-p;Z?vTPy%LcMFqSNO2CVt1iS~yq}7#x z$wn1$46H!pSdKrx1k56g3YcV60W(EnUW8sujI-ey$SRLAHI|61!+kaU3%mv10q=o# z!JY7K_z2trB@*|;ci?td1s{YTKo)l}Jmh2tijN@^Z))o+R(s4ZaX$mqy9bmfDn~N= z+D{~J2a=SL$T~!hH}EG9#Hx^bpbz0J+|_U{{1}$N1JHz@vOJ~CV?RUj7Zit}JjpTm z2E-iG`~)6{)D+_cq^2kn<6{u>G*#L|p^pfKL5Zj=?i4235tRYFM06ao480t2_@hV| zt$6KFCSfc`sl06uZ{UYca4lq6O0DW)3#IawnHr0xkH$K4A`Qul@u@jmb% zOoBf_>_kmz7+J$-pYv+zrLb_cbV1zG9=g0KN}PpcKkQ@KY#OzF)y5@OyX-{24BT zp``4!Fa}-+o5K}Q6;9Y5_o^wJbminG*aO}IGhsO_fnxP5W#n$S1l|iN>Be6nCD?cX z%J6<0l!hlAInqeRFjQqLXG=$aSI&0xt7Pc&upfL8rouh?s!5#NBOiN2Bn3j+(KJL3 zG3AxP)>}}f=iY(h=UvE1)p#Gag@1?b;eOZ){zEc2gDV~L%hRnZM-QO^ugOa%tc2-s zA;Mauy+L0O+w#(}xZKQdVjpq{sW+5Y;hqeGVJ5NysX+E4wk0MN{Lk#-cN$a7KV*q1 zCSIqt#+3DE*&rxz2fsgWj!E-Jx|bt=#v0QYMhQLBE`DcSi>6ckok=F8D$pV`mYbh# zdp~WFIqS50{Pp7EbmWhkWr|6rtXiMh8uP!m)t^bcmo;T{g9L5&cb@F`cgl8uXS2ZE z!i@s0Fb~$U3i`ykR+k~My)>`VFK&stR` z6Ol}08L}DKjT}TGhEscxOk@R8F+EM*Xe28mCIqy|5qulx5GNXKKa~o%!VlU0E z9Ltd!$Wr7BUUW+vS?@kEcGk^Q{V-I{T)|yI?mgP=%oP}1D*nHO^3v_>{IQM}U5-_V zgebvHizerke_z?y+e2EHg+=-zybVcCY>4(d8%r5@%~jvDXJk$1!*-d{>!yQpqBbDN zJwv-CYJpKnk?xISEFw=l8j<&ZSpie4Ot~pJMLGN_mYf1Br=oF~tQoEu(!^@`OAYJ9 zhS-aq*Y|b8eJjZQi*`HVI@YDBR5LjiAd&>~R+1%2fDmrk)whSlmH8rlQC<>sT^er1 zKbcU!4O2U^veAa5%`Mx$CZvh_%MBgWm0srb3UW`;ZYOiD)9ypWP*TL%C#IcVCzoLi zoteSAlQ9Fo<RPo<5KWowxkYfn@IcOTk~t`RyWs*4tlDscZY zj%>xThu>Cn_j%K2Gb^3SMwtA`9bRv*e5$D`Y_b#@$)nl7XDlkrv6pf_&`IZH`WHd& zNO~wK_fDoe)oYzjT3HR0!Y0m}2>%FSFxfP2dSMEGpeZ|N-1OPCiIBZQy=F*^FWzeP zYSST-OM~^iRV+gZIocy~D;i{D4Y!g%>SW)Fjr#0$-66%rMS0Up_){xoAJ6f%2#F6N z!P<3@yN%U%OQ_G~9QlZp#+gV*9;!TsJny0YvXt5uNQz*@)01XPVv{x}iC zu2Ku{AqMi`PQvUAa_`q}Ct;l0P%7nzV-tl(%AD9n<`8~-6KnO;9sDvZbq?_<1K+@s zwt=W{XH_tyN486vH)VT`r|Tp4k%{X7T@OcB?D^{#pmQgw6C7nL*Q2*}O-onjO-Oq> zZ_|*5p1&mLexA-V#tC6yZ9hn=XK&zhmEP>Qr}In!zHj1O?9Hry-^BX)xjxp>$|=6x z)&^ z5G!^EaTU}cIhbcu?>_Qv@oX;H*VOuQuimV(UPZK(^lI94NwMQWDdzN2r)xN>bow~; zz6lZ<&Y)o9Hw0a!!!Y=*Q%Wy7HGMZUGKhwq+YegVGHkM8J?7fJNpqD&aP%>SV&TdHVf_NKhTTxDa7Atlm^75r!Qq7Xe zUwQ7J{I$L+uI*P{6Zb4xkdy7)P@bh>GyB<`XKxYY9Z*dbk05^;C_Hr@8$?8c*kQBUQ3 zdPh5+(n!SE=hAH@^y5CFYwYQiXJE#CvAkz4W zzfGP_b&f&01Zl=Zca!H&HFvg-0khq5BqsFI9$U~+IJ!iwYwqdPCd_hifG$DWMbXvq z{Hf)#AYFnqi=sQ9(Ygx5Kek_AbV`}#D90wME?qo&Ix&K<{q^_!sSTUNpQr2Rw%a=? zbM}Mu>*-v(!__6K;RW@eMx>|gCyAgUv&r+Q8f5Y3>H4`H!4IvSK$0Ze)wSQdx5|-3IM4H^dJOUB z>HJCV6W5J*1D0%8fz)wziOO71F7|XuZYmsaCI*>Ug4KQe$nqIGjh&n?1)=>fxXga`}XmtBcm9~ zhDM6r)M0v?)%>oXQY}EQ;2uq**}f)gLEel}1vBUIyR^2>HR<$7EN~e*71X^Kb4@5o zZ1*PiADJ}K4d6ZnbR+sUs+Yk0XuRqsvhw*On{*_4^UqTPDJPJA1fr8wU0BQwNhr)r zPQ6aL*M-)61|)&ely&ko_|}=A?oh}b2gHR~jmbw;X-26EAF){rG$Y9Ga0H4mk;Rz;~EzII1ADJL%!c3&*3^%4A5$!|Hu zmygexmA9a{C`a$AnvWLsd4AGXHZm#wAb+kR=IbJL6EVAERMBfg5 zle0Y=o#^F6`eM7uSNA$h2Pp%AnE@jJxz`c&wYirahLg7Zi52PXTiP|w9o=;ea%X6_ z)7vl5Zf9_JU6A`r?RLxzI@z^SSz1bXdDkS-OgVN4YeCL!?9Cn zrQJ>dUA5csf3bEu`?_|FSM8BeLx(p|yZz2^^E$0?E_hPAodBz}+lk<(+U*25zxAmB z+^F5o^_#WZx&A@h?RWnkYFoRVai6fib~{EyBemNJ@L-VtU$lF@e!_6OjdJh5S-YJG zRVugNvn+iz=z^Gb_7h#Mv!ttbU!mRS=|bnE;B@VF0=QPYoh(|b-OdB-?!f)!P1d== z!47Ia^Kc$Sj$eKD+vOKb$=q>FK=PCx7nbTy3X z`2Fv8G*qJ}9oU)LVX2u9>-*~$1ApXmrz#@9(r%}%=&Wz*H z*T4=@QnU(PU@A+uz2AD~g=W4_tbe@FEbIWkTPI$K^&ONy@9aBib$hXy|6Uyv=N;+c zAooAC+ewLGo$VUs*cfL9xff`+Q-fA(_fq}jcWJk-LH@|yTHz$+`=@${{8GD}0DskP zCx8}R>K&d=Ex;kNaGna|BPJN}(OJXG+ zwNhT=+~Hpv_hN5e$I~%$S?{Go{iLLbmHL8tB}FrGoUa+|&VB!BN>MdBDQ(48;tNp} zpKdQV^FOZB)hRf8g4{>6+bK9vcEnr@);Zekj#Zms|SN>|fRYl8qaJn%d1gn$y%SJJ(5gZ+iF|Pv@q4fX;ox zDfaxiFA(UQrq=zFLy-mDoj|-#Yv#H-Z!GTVyizdL^XHbdsom9I9NPNIV%e$u3}g3a zUT9K7Mtpm$QF~i4M$g;Z%D-DDsFQ(j2DyLMZYKkq*@3$mcutUesGS1F^(4MjG-viC znt~vQG;KAIc;tp?HYG@oR1?Si*@O{AIXT1ZKb??0u^>+-q$e?!a@DG_#fWjB?EG-1qex^J;6Rq4o7 zfyt~*ML_8&qiy9*Qrp~;u-?WDJe|hijylZ!`&Qojd*uRkHDCOCB6tx@(PT6KP zgW;N#*NJd2oC4F~RCqDWhBM$ym=9+`xo0kv0ZAUb8qR?xoC}x2dGLFALny>yuRpRb zX=QyDm4kP)CR$3TSsyNequ??)9$pJCgexGys%+9X)cg@Qwaya7vSY^59ImPju$t; zmvP?*Ux5UocEG5Fuj1w!<2Cpud>y_I-+&*%x8PTj!tZeMGm7_MD1lc&OoRWx_mkHHtke(^_6UV=nI znH~NDWf1ZklqJxUP?9VGITB%4!iI8ABgH?}paNA2Br7-Izb?Er;5vJ8&R(<&ypB_y8BQhLVR8U@B5hrx*tFt@)Qm`LTFa1+xy6+^z?uAl8Rc2O7eeFapXQ_7MH} zCiWdr@)J0 zj_f3Zt)JR*5~W$f50}ElFbiG_bKzg$YDO^z0pEk%LuK~W z@H5;L4D(xP!Vpq!DU`q5U|hpVGe}@&3wRw=c6?B_E2QYDKY5Dv zUJphBb-EJ1`u+3!B0!*c`qOr7)6|Ot;w)=Vt2Y#{XoEI=+=?7T6lz54*u_ zP*O-Nt_Q&fA#I4-qItN~e=)5di{ddj35sd;RQNPp0-uLBL9w8w${4T0?eKN@2z&!p zK+Ltx=ioa~3Zqz1zYpJoQt#h~$Kl`MNw^>Sr2c=%NjUrjHiQRZH2exmyYLM>2mTY1 z&uR8$iDpnTzQ(u~S}Mrrqp^t4zDkgJRmvHnz&Ndm6k@Otnim5!>#o;beF%6btGyI2E#6 ztg`Jchcj^B4aKy32b>3Ag@y1vSOot8i{Sxy8T=A1gg?SX(4b?!0>;3_V(ZkRw$#ujc^zI3w#FN4&Q_2up0U| zaq>AQcfl{<-S7y!5B>!5lKZF(VAbc4fhF`$1;Scaz_$&MYHe?)o z48}s)(77`_4&~3W{|qO?6EG8=gwtzL|0zIb9*Quy0M>-p!Ejg#WryddVIBAkq@bA} z!20l0C_6oW1u1yu_b>{!rq_{;o;$A@Lgy@KdqMf z!vpU_29CxD@Gkfvybo4G8SQ=yrN93KGCVUrg$&D#&*4AdSMW3VHT(j810|^!a$ZW( z()g*lZ(wvq^3iknjfOSsF&cj`T#eBhK^c5TLEbZrSU3SThtpt7I1AEhs;p@Pm*H*) zB}-^M)kkfe;k~%Kz`w$7P{tFqs%psAA3i1dKai6b_+b!~5z7$x0UQRufGO~6mp=3ca=Y?JDEI7is9PN=_ zob&vYVmwM|FNXu+CO8b<2}i@b;c|E{lq9|n-VFZ=Z-ZOmeeePJ5Znfzhub0V+Qx(M zWB3FNBhV*d9r#oY>VG3n=$Xt|_%iGd_d<#FYj6~N9bN$ULn*}{LKD)1nJeHYP=;s+ zVHx}smc!4W6yifrhHP|jD&@X{kKz8hMlU<*zC-aMitnL}-T0(PjotnU_v5A~R7ol0 z!@_Q5ooo8y{6bFB(2mt7xDd7^Lwj`=RdSw<__6#Ez3zY8>4lvJ5e5QCDF+ls_Nfe8g6X?jRDLP8*9% zLY5)hk^M;c1?Z79q!9VTe^$U>n;0U+i1RUW>VkzD*~tc z3j%uyt1CTO22zN~o)cRU*>|iO`7?h(!1+||L{IM3n6YIqqpkbb17w%gg9KJ@yxMJ5 zZ??)fas0pc{aP~jX%|b?L^6?LWEE15>_evT`wul)yYJ+3|WV4Mb5UP>v6fJHTRpyePAVWMBHtN7?Omfw((PJIoXI* zAp4O+NLX8n2+|2jMY54)NIBAu8>S+=Ik!KFqvX)~wnJox*L;3kflT7O7%4?IBbCTe zWEa25*Kzw`JAVpKi{sz=0|XtoIkE-WgPgM6Ye!NLadvwR{<{O!1Rl;b^@UY4$BxdZtR3XiSgZ1 z&Yv)B+Sqa9(lg42yyT0v%z^!^CkJ+_ksaS{Twd9@$-bFZ`cK|hc3Wy1>KN#=*I;G% zv^tvXi6|S<#@A=6ET_Ih>lTJDXFd2pkUN}4O@5d4;K23Wa#}b!rXjpH@>k!k)jc#x-JQt3H36Qd>cJ9xCJ#ZJpp70vj3$BH|;U?Gz zZih*5H|z)Blkt0hPGs0J0G@;lMb(&k5R^Aa0##$`^WgXVo{ZQTXlJZMSRzP(>PW+% zWcD~X1k$mXoYRamO93FNS8b4Atr$K1Mj$Qo&I_C6n-+yP%_pC&Syq&=YGb76VDB(*wFd?Dbj(PnO+daT=JXC29jzOAZ0cX%v$RXSDNRC9nUEK6Y z&9W~W`Z};$={x{_XU1{p9`~Q%*mQ1n+@2Xe751zJVg9RK5fDe-<{9Q zn`OuExDMVKz}2L?49utQ+U*VC8Zx9~6ilZi$D_3{hn4v4z@rqC2)awj7=HvAlZ5SY zE5Gyk=G?r3c|{lI6fNL;5xG_@wPinJiR1K=y!`C3C3C0qX}jo;YyEo9+Ipt@9dv$k??+=7cte?un8gjdL+6HK zTYIJ(?stB3Z+PncBFG6D9&Urq{q{N6$OHTJ6DR7}iy3%uV2lw@iDWi6lbPpG#tqI* zWgCLv>zsS;Jl*2co$3_1tn6$){9mAozZA829%lL?_88!jz+%S!>_fCyx2njq z=I0d5D$cd5$`%zQQBdy@F*PV05x&&}K1+S-&F%i0oob9K%$+#X>V9EdS;Yij%Kzov zHT{J=n%$n;?YxZCrM<~UJj;dPqZJl)-#>8!Umh z!zn0hv4DOYjN!Cj2{m8&=EG#Jik)fr1wu^=?xIWs3ZL7!E&xGBdj$$`tuW zP}-G`q4YtYKzSlrTR5WIP-&{=f#Q*R=;b(sKY5_9p*+yHa5UkoKVg*)xrwq9`T8#?Qq)tIbekGgB-2#C`r@~N)qvEskZg(2q)t11gF7sU@q(iZ-fbO z6YK#cC3-^2hqC{B8YbbEW`lVPwZ|llq`cQ+?&r5{!je&Zg<=@|4vv6igOLh3g!-4QBI09Y`+3=E*OBsSJ$*8R#OQBfVSg=m0y^hfmZou6I z`fuT+2Pd+CF%VJ?)Rv60fPtlpQ4S|TS;&|QH$x0llzkrtD8{|GuYi;ra~YHcj@580 zEQQIPz-~h=cuFxfG43EMu(8)v=h`A zGlGv#4OX|z7+4F&!rHJ6tOvWo`mhhAe3;1)^DUFrFc}A$tacfZa4L*~*)R@ng{+d9 z4?$MR%wJ$f7|GbIGi(9Rh5nA5uv}(#gT3Inun+75`@v+`AC86tU&v*c4(vW_E(VLK%nr2K&R4P&%uSPz)Ae7+ef%LJNkAY1W;b)JCxx%Ko4C z!1_=k(-1xc8^On5V<-(u3=|70dH3j=Cv#NXj3hqYDq9A>JF9F9Ip2(=521e;M@stn z&slL>h;kp%--m}2NT=C&L>40D$lFNx94wd$(md1lk!M?mJKYl85wgTthCAbKk=>%1$3PAv^&0ci zf;ihn{{9bltEIMXf9j8PmrcIY*Ku;-s+nFfa~I6&F~&GbEsBUU+(ole&d;_1q`OeY zUoLD`yDNA2{a@TpN9(MZ<;yv;v&E^aX3lEa|J1}*W;{L0vUmbRwjvcs6>=Q;SCd*h ziJ-UYMSW^R%Y#%P`;mXO=w(lAQKF8vB{SRcq}=ddO>PDMh3)@%f@@?4N>N9$5^+|x z&Njhyh)71y#XpjdtV5<`XU}1-tEF}EfP36c9@E?X*JioS@ojCD+t5%)VV`ErPnT&pa-voG3j@UAEC70zx+DcqNlm+OuQ zayM^q>hFgLU;N7#vjKi`wr+q|sAVAk!`wP(d)!!5nk8cEcOwt|$biMkai^1Q$ zc7Vg?v1P`*{NV-J+V4kUDkAcIUe7*Shy9vFPU)oMlW?*;9pCU$97XxJ0Hx#cS5N2e z57d`VOy4lk@i*Vox!X8B9H4XjHK8ZBuk|)RTIBbX;!j0J3|noF-u^&?=!dk<^>@J4 z^>uZL^i#G!`7>bl{YpHY>+dnG^Yf>pT#vuH9=*TxG=y?x-_ZL*N)LEC_l6DYI{sAZ zs|T6o>0EzLyE^p+HM0>Uf0ugB#ol+{H;T^sxK&iy{?5L3e)%|c8D%w;Y@VS%W*t>f zSW=umFR!4OxiAiyagzOSsww8|t}|m!n(RTVV*9A!|aWE2T z(Z$z9?cEbk>BuGx&&8WAwj@K{NRvySqo*Uhl45>yCd0)4I{c49r;D`mzZm~7oWcKY z?Ozvn<$vMHlm3%0o#BF``T|`Q)CI)^u=fo9Wm{3H(7Ku^|AqK}{S5vylz-}*u0!gA zd@gw73>Pfpg7XMK*DvKi7yoac!T(PDUy6TS_mux^{J$6IUn~Y?!cvm-puRv?Om#sf z7rY;ML4f~gN~8p^$gZEt{}lYo?xCm4vJ~xK*JtJ5KZy%IJi`UWTrhzEbY)i;WZ?hf zGx*<(e<>3;+YN#8pN{{7XYl`aJ=#0DK(`#~f;2Ap{0tY!Dyw9HZdH{3RQ!K=2LHXZ zf8F9J|0(#F;hUX8{W#c65i5WxDxO{uA*3^BMg6GxPC_)s|z=KKR9fhiZ4Q3MR#sWnRuNgJ+LeXAM60ieE2zwm9$p z1^=|BPL7Yb`r!eajy(A5(v#~hSn*nA$qm-($vwLFqq;`;e%v;8c>8WMW8%jQJ9gbY zyT0QKNu|Gk|4oe+-JSJh`^ZtT9R}|G$ZFYnY-Aywj6IOzotAjVmVG?K*UI0M38Zv> z=>;dl-f%jk12yMB-l^5c)B~Z+xekKYz!Z2r905z=NO&_G1OEcghnwLzxDyhFvW~p~ zzJYr@{9GmjGdMYdVj^TZ)3^|Zk_nR_)0mRZ$_$h;{J`f>YF7GT_%Uuidom8dx8Y&fD9rwBoR5CgWN3LZ75B|B z9o`Pd!<}$4#Drdb`FsG%ROn%t14HPX_%=h$ZWX{p+$CZGEgyF=MQx@-nc6IbepmvR z!>i#6xDKv{JE2T*J_gI+vruLqO=-_x)O-)WkAIB5z$gl(a$j`5wg`gBSr?0Vsr`MS|i=H*sEnUA{> z^5SEzhoj+EDBt7$1}}o4jDDuVdN32Vfit0e!Nm8RW(xEdaU!2E6~jz;6}(-3faP!r zycaHq+u?Qaakv6L4_88YPrE^WrwnZ%zh#Q-Y|~>hi=}6-{KlV|y85#-R~w1g*=Mh) z|CJ1xs{cRs-aWpm>RQ-ddl?|y6S)Nh4OamHxeF?=LlSZ!fq)>WAPEp9$|XP|py1vp zD5z)YsY(s_V75o?s7M zg&(+DN&{(}w>Ly?YPI2TO7jgDhb@<9u2R3gdU)5!WuCtJ=(yi3m^Li(_n)KwS3MUU z6pe`N9+1VNC4b3WYp_szKJq&$T!z6s@{+Zv?7q@P`p(nZ=MjoVMp_5a>`2GNvq|T< zL=4}o%f0o-K}mL`UD9V93YKR_(qi%n2n%V=Q`J4{#ks;t9Jhy%Hfwwdb5^c5_h~$x zDJl0Q1NHY4E~)|3IL-ns7g)Tn%Jb4Oq{e{B^MkG9QTw0{QyRoO&zZ$E5@zKcp1 zR+cT2-+L~*kJraGxmz9(=|P4wLHALSuAB+o>taW0*&dV;NAJ>jFO46pcl>>gx8%6g zVGnoNQ*Glo&P7V%Rdw^{e!8n;LN%DG?{Lk6Iv43>v9E>HSN z{1uIB`B>`dx(TTbDJ>Pq*So|M_WLZ;xVM!*nNdRs?+^yjNO~eaU!Evq_>3tnsi@@H zCyvQll#aANS+9DcEZgP$%Oxoj@AzLzY{$Gos(fP3|7)Re9=AOg{JBSn?uE1H_6|6LShae zhst<}1Vb}Adm^ zabu#>)-&q(Kk;Ha>BRjSzfn8+jK=M8PWu7pN#b<=eoc@C@m+#E&M8mIFyr~c%dNbu zb~bMwPdtYf^nS%})4-iX7G_-)Ov{S&nNa`SA!f;BY(?Ai7R;`kOK(fs|B#kW{XE-R zHXA9cgxOP;h!0Pdm$O8I3s*+23r=#%+0g&iwEz1bTRVXA;zznMaT1pEBtGTPQqeiYKTmu?$E>2~Pwi`MjvFJ<%0p?T&m9*$)}# ze;kn5{g67>5}$y43@JNVk0a4Lu^BQSxsLc!Bo2u`gxrYSiF^hr4iAurk@C#n8_2E5 z|3GfTQHftkex8JLBvd2CDZ>cv1ji#(usNa+EPt)<;8q>k1}TcRMdl*gA*FnrP^HfM z0W3DlIiZ3ee_tcZmB<5hRN}RQ-ymTU2|NIp*w{LRq{kB5FUyg~h_6PXef$aJ_mNK{ z-$H&JNh9$C$P>udkUv8H4*5Qz+;_bwXCqOh1K|uo{?0I#5>KqWi_9W{0*S{ae}$Yy z{MX2Pksl)C$lo9zLH-t5g}i|L3X;a+-$Tmw&hL?bK{l2ympun0Lo0r@cmydAqBTGc zMaCKeBLJR4Onh&=IkK3z><2AC(hZ4+0k1?pLA*8cX=EGZR%AP*oL^}qVeuN;Oiywa zqg=w`7D(};{GmjA2=W@_LYXM?Oy4pRx+3Gq?#L&RJ&;?F@@(H1kv)<7kiC)LMP7%* z?TKgnjw7)u@y3jS$ajd#zLa!9HK7~@`9E<2kS<6iFi82s|4}j~gJY0#qR2tEMUF-G zMiwIbBgZ3eKo%i~Be|+gY=+*BWFOL-hGe#TcOs?hN|1|?va$65vJ}ZoOZ@n`cuAh| zdz|(Y@AMN*cM;qo?-qa2^hyHLCGjWE`Zb1@BU#52&-7h|j1gzTdn=LGA|FO(BG)3B zn%?8cuOjKb#9&>A6i+^dj4|>Pzk)9Fasvq`kQdx9ukT2SYpF^s@=Ode= zDLtr@FpVCNw`|n;;$4gby9mb!@{RinGQE%dj1Yb{X)Ec=S<;f2ezG4V-*2@&q55CM zJ51g)go}ipOYlv2QwlQV}m(I%_TfR*h@G`5S33c`{k?avPmkx zoBTfM$@ilIVMixM9kPHhm#~~550F(MlUT8LAmwcbdy&TppAkAffPV=K=9RO(u*myS zgAu9TtR?%OpB*W=;+fr|=dV7Od^Qx_C;rzE%r0w z6&%~hsZf6RLOy3WOZXeR=rQj&>u?nXWW?IqD~8F)v^7|sh?B=EWaRB3udK&1@N7+% z*E-0$e3D~_kr$C?kureNI9JyHd2tyBgJmghUcjIMWPO&k+3WfFYja0V?()#s%~Wh( za+cSw%vljUxjk}!2RS)k?h(t)D}pXxjP&#Ot_UWIJh>uxNaXny!PmYR=^bmvW%H?y z7)nT|$7S#MZ|xiZy){L?q-$T!l^1%{|6*=&I@6c1n{beDif}QVGw9{ki=HTTo^>Rd z9*`kdf2}Cs_*{Yv!^^#-;|Y%KA;_bO$B^>4q6}604(<+EUc`}hBWsDR3$`ZI|KhF8 zf7$=7B7~>C%paTXGR+O{8H2Y+m=SY ztTSV2q_~m)aqHl&SY+gt?KzJ{ycD)326128Ahms);FVaUhu^Br{-4Jp4_+Y|?|e8i zFlN<;r_}$4(az364lyqgX1`4wciYI~$`f58)xZvHcel)?Y9gNy%3q&0L5uB?nd#BCE?25#L=u;;J&X#ZuD2R z3%>R>>YnQA9&p6JDoFi$B*&lDHn{!kkuSZnCz2HLJGXP1d_y%^e;G}FsG98l98G?% znpCPL*SB+;oK#JA)z@Tq+x=*AW76O`s~9DO&4j~*HwmW*?-G($a{?d?CQKqMB~%lF zW513Jd*whRJ>s9I!B->CiTw7fk%39OIlTYk>p1$AqmkB)B1OTxpF{=**Q7=o@X1$$ z)Ex;!5-WFq=~YQv6CC9i?s9V)$CeXhK5t&b)y!TZ6(zE(bVF)xFyVBhYbQ1+7=8T~u|>=Q z+0?%w^-g4z{|^M~PxCQGdhoJ{p23OJk#>H(TkxyXk^By_doW`Gir|o+1R^3So_n+tVnL~(N7~+HU3h=L^Fp^2B|-jik}a9 z|12^wO*U}kL6RtQ5EmKxi!v^)|HUvF7x9D)o;(xj&_dq-oY>S&$lw*~Y7&2*G^y+P z;OFFtiQb~W+zur6@9Ne+`novxhUm;0C4L9I2Rl&Fn+wbP@`TsIRZJ@3?eG)I{|?Kq z;!67Dm9_aRV9g)%RuZuSKZ2!zH11x?m;A-V>g!q^6 z0c~vH!`vGvXTYbFOW-uhijfOqM9P=D1|EPZ1kHO}N zXG8q&uzBLj)wQ1J44WtNRucJaGqXp7;=}j#HUfe;z)od=cJ6K1u%!{(@ug z6w>SFJn;@}p7*>AYjikh26T_BPWsRa6egx54tmCzAeExV*dL zU&H3sPebgl;M}HOZ3I_q*;epz9baiNB4>4gT@9OCPr^2JT0Tg6C)e0wm=i@pi7&&4 zHGKw#Y}ND?@Mh&Nz#Cy1Z2RHes>FBUi0e;!Hz{y^+!YWW8{!9GPb+!? zmWsqHFThpW@DbRi^)F#FrjluG`8Tel|E<9G&^qwD&^pkLSun#jmRJYwq%s;ytOIe! z-Z1j)(QX<6TQ`k|t()$Kt(z)q7;7ISV*T_mZ2j~!Z2c6#)=k@B>!$BXezo|gA->|_ z+R;A|wsk<}{wej=N;oa1ee)C%xvdm8egU@8FY7=Gaj{s|fpq2L@Y~9=4*blqm&WX{ zb)XY$p12-1PvpSniP+>&05H&+bdfbmG!Jdp{TCnmz?i7BvoVmfS|cuexEC%z7w^^r$w)5pO(BoFO- z#YAk5E{1K6{s1<2y#w38xdfZHnzDA7x7xwxt=8Q!w*wlSiaI4 z+n|v?L?*a}DB2&M;@G=bMgv_E1>%?B8aLh(awBY>8xrD?aE%vX^Wu28Xj7t2zA8Y( z+;}@|Zd?MJ>sG_I(p`YNse6;|B7auzo0KZMQtH!)-iaWV2Zd^arXfAkcQw)5Np`GRy0 z$KJh2vus(2AA-%YM`5$<8Q3iQ0&IqDht04r!^zhs+VWnV$NaDE?oKwZaiE$r4GMX0 z!o{2-<-~JB()DEXE_{aklIKG>UGrQB2%7<4gUx^guo>{9a^`Z#hzXCSvpM_0{T_JuMHYHwxO^MfGQ{sEDDRCS& zCC_guxY&=Hm$!5o7TUC59kHOA4A-fodrw(4J=p8(yeI~wS#duyhhWfz-KGn z`tQvmB6r;~ZI-|`Vpk&Y#m9SFTplozXjWX{Qx!tegjwQb^gb&7|@z#`c~Fn zRj-d}L@NCjte45rk8y1pR*)XO2w$fxPmFC)PJ+Lr+zh^r@{&IVp6l2w z*bxp`W8a0Xzj^qiW|8@CSO%#m-EIk$(*NSQuCNW#TsRF6kRC6DZD7uTZD1~eouc&r z>Y4~o#=)lP2G}(HB5aC&88$^#|tpPW{Vt^=J2FK<4Un1WNWjYI| zX!<4iLoG0685fNiK>Q=p%%y*U&86+wFtxt#9^!tmd2|qL9vuziQMdl*5HXh)!sb%> zWW%oe_DKQt%2C+dIGGRC`)K-X*wUAV(w~IQqdVa>n*VDL(EsMrZ*sr}QG0I1tg-81 zE1WO)_gZ)gY-P(}>yEj2Y8eWOd&}Xq%1hz)v?1xs;aXYJ zmxuTjWy#-|D+$ngvbE2(yVT_2mdIoH+UILpEt3&)GY)Wi^O^N5>!yB9d zJ781dE3ozbci{uNe!MOD;l%z==G59-s>!g;f>QW^cEN+N-C%5hQ#Aeg+WgVwSS7!e zk#IFEPgx7Ef!|P;FT|a8?4{kt{I4Q`Oz}>))q3K3*gTN~nN)4f7q-a0r%8AV_+L}J22|Y)FsyM zg7+)$fy>D!>3iXL%tgFo$O9yZC*Fc>O#A{iPy87+Pc*xumU+6m#uFW2^F%M$Jkbv} zPYj056R`59fr-a@4y@NUhy1khMkAau;l6Vzh!DY zy~YCXM%Wa}4e``}fo(0Vwb5bb-_L`Z6-urwgb-3Ong8^l9T!Zx^ez$sex zo3MQ6Sn?c$cWC$h6t-@?7$b6)sX(UqCD`VD%i`L3e=Tg*4+-%|*al-JY}QYN&H5>@ zSw9^%>#N}dD3n_y$^5qhzu*xjBQXNy=J)r@(AAbj=ed^{=}tg=E2rAG1!*m0Jg5#8RC~<>zc2_)-~UT zt!usupN*|aG~m5O#QLV$Y%;0qCd1Ypvtb#eG5{~af{!Xsf=?<>gJ)4*@)yI4 z9eYbqCf;4wfBEg!&E1_f>)Zh;;5`S+v!}u@g?KNVrB?m~wzBVr_`^{CKZRHxM#$B& z?c}LQ>%Z4lhhpqdHU|Sh)3-R0#SHf$=VA}T{vIzWD z*c3Vx;_tww(Dz|e=%=tL^b6P&dJi^*ehsg}i!u)W2ext3^d{!N9k_;w4Uinzl$adi zJ7H5|7Hmo^f=!7fuqm+u7A2(NM_{Xe7p(QiyjN-?-nU?D;3#Yj{0D3eoPw=^pTlP5 z@8QilRvO>TxY6;{6Mp}iM3=?;!ZwXZ!R6iYzYMPFM9kuQLtFuyLd#%NXbo%%t%FUW z4X|1K9GrNa2G;)?u4>~vku-uCM>j~jtztx~RqKwh4V<2#^qXoq`WcpdlQ@N=UOHcJ zbL{mTS!=-15RZb*fGpSyxCIsi66^m|B4)vzuvxGGPDgX;zZhJNi$&{Qa59a<@fTrp z>9=588GizsN8bzaZ(vjC_amAArjb9Y)}@VLQ>Zy?ecTE*4|RmCkGsRx_Y+__vx%am zA$}3IRqr6|R#Nu=e@vuW`{RAs&dpaxYZ{C9fz#1kDjfa9}PR?m*ji+ZgJR z=@b>inr6jn@5|?8Nv9;NjL(B@RLjp++NiFEO`(@UydO4&4#H;f_hD1$IBW|27)~fe z``#x+Y{WLsuI1^ljo7)cj9BS{hv1~E9e)M30s9Voe4I=FHEfquA*ImleuSa2fBu56^IR+SBjGlxm#yFNY<$srcmh>}l1H3AH7XE_ryW<#t({P_0 zc%K8GD1Qk56b&VPQaT?_YXei^UdqMr@G&mWY`8#qF1%D5E{7jiUJ8GUF(P#?hkuk{ zuK!mNDOQcvz>Afu;LfVhMtHFDR`?sr)$m)&yWq!E>D}-)<-KrA43dTqz+IFN!&Nbj z93}FMV=s9;H;lw75N{6KLUavm3(*a*EkxNN9tYb(bPH??(M;GDqPt;Rh+^}I*wVNg zwi}O6U|W2WifYHlRj@5SBVijKUx#gQ{X5)D2kCLx#?yb+=8vAiz*oo9|KgUjMBbo5 z;rHSD$te6G{Fq~}*MwS&ZwPS|HjA@ivv?A07T*S&#WP?txOxKf->i9^19sp4pCSGP zHp@~bva+dV-C?tA419{|gwoy}q4c@1)ft1Wp6B5dsYllTe%7vb~iiAv*_ zU>gT5Z>b#zH^Vj#@G4Z&jaMeudSwi3UYQi)>9BcaCS2WK*Z+k?%q{o9=9T5Jd1V`HUimjzW=d<6c=%Sz zwsBS-g*(!(l71XM?9!usQ26JR5o7wpzfm3*Bl0mB<-pBw(iB(G84B9jOuqaO`fU~>)z53&xg&ui(wmdF?i2C{HigS;?lBq-!4eg#xQ5HiC#*nF*I`rrc1bBG|0F74ENj?g-_X4V#tsz@Fw= z5X!R@HX|Q|k3Wh36H_RZ=_|0!-2)*$0^8vFPALD6U>jUNfo*WTBk8(S{~ETdrcdBE zb#eP@ANt=KJJhF^zXMxi--pdzKZUCvbA$00ur>A`T+^7OCk7W&JH&s2k7~m$`nti+ z&sy*j6CzdpU8Og|rciE(C%~rAt*|Ln3Y$Xrz@|_+YznQ0QyzEqKLwj7z6{5zRimFs z0p%A8}py-U9xw#Djx*bG<`;`Oi@@C>YFW8O|8X2Dlr zvtSQw7F>Bfd9XklZUxZrl~(mtk|` zE3kRub=bW4J=nZ>95yfhSkiT1{#-e6{r`UGz=aV1CB&%%Xy8fL1#Mw#cpx0tboq4; zTdH$l^XOBsd2tJD-uhnynE&RM7p1UTe*`|PnjQ=B4@3MP@NUh2I+XrjA^uH>KMwJq zYnb_$JdlR9v6dlj8{!UdisnfVrS}c-&=B7o;xQq<1@5ojnkwlrokGiqr09VM*s^$e{yN)=h`um_@!DI`DnCzxLCKQ2M(e z{xHP93-MMm-SPbp|0u*ihR;Ebu^18g% zh_!M+yJItKZr>|;)Z*7*bNeya-1{Tg+3h!s~R|^`X}RDy`sy2?KbdfWl{V$@YX9`{!idJ%A*={-P+2fkAbUT zssB;9`nm+i;%^g)PH_jiHsM@$o8yJ>;oBYm8yuhJ_&vD)bjQ7#V%(jMABX!t4?f7Nk8IBt_r#ojci$$X;M9!Bv-U%PR*YOANp81aZwxGZQ#|z=}<&O8k zRSO+=Zb@bLIer+9E^+)b`0O&rgHo`5q~qsfM2fRqB$A3R$2(pEpP%UXn{diqj@#kd zI4o|@fH!K_OoMG>Rop)VuaYM^7v7*;4xdx5fUn1siM#lvL{<=y0?Xn3%5nID@+x=; zZk0T1;6V8a_*3O7_zqkwc{aj_lsCia1WA`MFbl6H^0eYA?q!Y0i;X`~-U<)Lt&*u4 zUZK1LKBBw}?u%O`&u;iB^*xeQxI2^?(GWk%W%y_HEgr%+wl1{F8_C7yQqE(uDPg&Ka=;Q$pHKrk?KB< zFTh1iRZ0I7e7={fD5WQbwbBl--HqJJQuDeh%vE; zCDR($*cv&Y>%*5}vv^;KUxUr!e-GvVA#4_(gw5ig!e;SVSe5hs8?Lf%aehdoc&%Cw zn-W{lzMLgjJn<52i_&3ut9HkC;5{8(p6|m}_9SeNsP$$s+pPIV!d5n`0rNkuh4VOI zh3|oFYAu0vYI$FWQ?#N3@L9@=8()LX%Jy`ZC@tyTVDsX@5Z?qRyeREQiCDwqVRPdo z*xYzKYz?fI{Hnx$xN5Dl{-C7Oed4W?uqpi~*px`_UCXI(%=)q|5mTZ&Y)bToO^N=n zDKP{tf6Q4q3bw&mCV5a!l-K~<`Qq!!;+5YCI|E`~(si|40IlHukGaBWuqo6JP9a?i z4}+yKX&^_^u};zpVC(M*@bR@S{fi`YJ zUxe*!`7PM`_$RQr_q`DR1~%{h9yViqrnz~yQH+SWw>fO??G4+O@gUf9bK0w{<>)~a z8%-SLqKDy$j=feS*oMq-_@EkdCoG#SV(@eDc?NCbDsB)9LsSn8gH6-PuUPriy5k#eoI{;e2G3TD(#k)9Li6DuMFe zCV00t)(7jYJNm=b1a$YNQBTk39T&k{36fqc^%JQh!ACxDN zZY=9U&n+&0wKSkCpIuCS)}@~%U04+TB8sL{mozN0iRSM^olRmI`B>cl1((U=fU)%B zmo(2oDm6Y%dX_eJhIC`;u17TgUeb*>((vZzRB7rrj>(DRBnhJ3F{H7$r>#~bZZj?* zf9q{7|5Q;_`CanwQH9Qv-&j7wI;DnnBfs%f(r?{{|E1yC93YZl>C-grvje0XPb2*v z%`=De8YX?WrdN<|JeTy>G<_-Q#HnGt2Y#dnmQ%o3K6#s_7BnN>SVnpi zRdg@u#uq#Bz5>mkM7nV?`QuvuT+$Ov`-wf}p6a?&xX!qm0zZFFy+Q%w9i;z3)Ax{W zyqWY}n!bZ{^(=%mL#n4m_mkTS+%=P5LplEL|#6?nwG?lzWnH zoI?5@%R{>HSv<7W865LI#A1ykJ_;;XPrOUIaWg8~tQDnEk+IyEe5`}?P4XMd%6UxF zkCJY@hI%GF=RCTRdL})G|78I7I`z%hnv0Ok*)CP9ZfblT$Kcn?z zk>5B@diry&ttUt~PLgl&Rj6et955bC`eRyAlyu_*q$g?mQPPdOk={kq`;%@wiS!%Q zfMU{(&tSk4cv^m(*?S)gBqH3O0_9rK%@i+`>_MGIQ|JQK9MHpB#Hd6a_2aOr`p};it$}sX9?;!tj&A*5I#&UJ@tfn6z z-S|A|7uA^0NWU18{|o*yyOx2 zq#DqgdW=_5cIflE{#Q|$NTR?R4op?vNV;*H^n6W!f^_3@_%2PK4a+fUxB@9PFia59XHGfGcWygIllA2EZikhSDA~w`sEP3mQx(ZAjRX4sM zS~q^OUi=SPJRn`$KyrJu4acYE)Qvx%8;-}kc(G~S~vdaZFS>C zx7WsL-%B2OM{R<{n@y`5-(FldKCh&1{P*?ZRWs`zZ_L+LWJc*<@~6brBhtQ?ykmAv zLL#17S~s40cis5WId$Xld+Npu?yVcYVQ$^{A8O)>_Pykbi|Y2_;>C62!z=5?-&#_) z!ud<<#*>%Tjjtpg_P}lT>v7kR@jEr-hcgGSQlDGba2h~32Y`B5r ztLh$?jjr&lkOz6ByteNp%M(1|3i~jxsWb5>>wqjO%&f$ptOK&@**xb&-C7o@@H!xi zlO30JKvv!>w7dwpnWa5z-%FP7D})u02jIi;r=oS^AJ>b^)1P4r<*CnbT%Ps}$K@$c z*^{)tWO=$XoI#%I49DeZ&Tw3w;ta>->CJGws@^)lbBuKilE)WQYTNgczj#aC4EkJK zje_!MSlA;U*INhVOV#1y@@499T)t`?j>}h!Wl!4vlJBgy4#>A~!^e*l*Nw{;>%zz7 z3w7bRe3333*YD5Ow8uBZ_-4OFSqJ2+Vd40!dh39ELqB}{-FoXlb-i^!Ue*=PKc!~g zCmKy|I}iVdGsw$S!hN`*UR++D5lx`lnqI=`rt(6|TUm?Db0pt8uYZ*!UV( zpc8#4@lT^pp5UrR^1Y3#rJ)t7NTn)psgW!92@8(o`xFJ5Asa7u`S)qQH#p1kBjg-l z-IR=*7(CL@GP*?MM<^iaCmK7sHc^0!NcW|;7(^T?p z!_y)wduV-VQSMiKA_)fZ$Yqi`9+TbT@UgTm_ywfY`(i8Uf8bSZ;Pt_- zqUjl~z;vdc6x_$y5cw$$h~?|jTm|bUy8P$pQ>o|W2HJosx)zTyuDwkSUH-K*Tz>i9 zlo&W7)=e$D*Co7-=Au~%4Ml<@j(6k*+Gy z!MKS*Ee32_?aJ{>k$>sX`1%X6IPpewjj6{yr{)P8}> z|CUa_7pJT9#c$@Q`h(7v}*GtQgm4t&Z%g)}E!R)Wz3o zSH7+5z{1Y1p5dy%Cx5jL;D2%1i_8L1#MXgxOdn}@S%$0NZ5{RU@=Y0RZ8$EL+d9zx z7MK5$t^+4@U9k1wbyaw0z4f3hR_qEMq9JL}=6Qy?@P_4vXzPN9{!O+45526wyx7ylAJ$G{Q! zP6Owub(;Sjj*EvEYW~SCJ?0(JigqTu45!gh249{oK+8}>Tz)|ns$At7d{GBwnV#jA zmAUjSHWo&^a;I5;WeNTO*Nb8=$h1Qia+T9m&j0Q8BvYmfLubtx>F6@9W0Z>mmEB$Z z5Q>QFP$Vo;M^;`(EFKCY)q+1v|oxf{cYq z=BH>nLRY#Yj0I_UJNZQpz!J%KX`qu67@QI>yVc28bvCT9<7g}Oy^bfv!*9?6@`ZA`q2PaQ+Iqy&{ERNv`^(>J1O@D zT_6TzH+07on=4o_K@#Dh=#Ym&%u+ zBwl%+lPh$#q^@@H(^xJQ?#y!W)mpw#6-q@>F`&CDvMtr+kF~$wY5EqLN&{>4(x`zB zn$tQ98dyW>fe)})^1p!VMK-2FaeW@16ggSfmEk(y-(i-Cg4@tS6nU90M8>>*<6H%0 zjCyg|%epeH&35VCwW3coy|H%1aE)iAyNdgccI7{y>!g88Oiz*W@&-|GvRZywZcQJjFNst^R3j`vE^1*;R{StY3LlDkowN)^c$`Q zOuxk)@10Zt)#^hz3>r%U&0 zER%RIU2xi)A*$%7D(BH|Of1?rR~uH%JF`NGLT%=`^p$#Y`GmfeijUBMjQaLWOX<_o z-Cg=l%E|GUNffzO`@H>)Ze5A!SQ(r(mhhhT(cicLYO3@zQZRIQrrWsd&pOSK(S+ zk}urr;&13Eep_cnnf9stl$2ETi7rqhI4<=J&{=dr4f{yzTbY3A8u95~APhO|?&gH9%TmzGryK<}3UHW@?Qan{izlp-j zbUMdg)&eWF;tA^Nx3EmQX5Ug*a6oGpzfJRRQ3a3aXl}2ADl$|XiaXi7jVrfJ<0~F< z=@+IXWX!vuuI#L?eNR15h()65+Llgk>+C8TFws@8lP(jBKGngu1%Fc1TdAI0M`1Cb zv&uu)y7+LNhMN-Y(*N6ZX)Q^28D7V=Nfg|t7B1`HM(-g#o{dG)RlU?x@&!6kWQFFB z=vX+d`Crwp*{)q6?=_VCr|(0`{O``FmV|X^CKc~n=H%PjzyNjGc8zb>g=hK_SMF7* zh;nPS;(hAL7ZVmTJG6^lrwhfSjTuwonGa|uG5;s)V0c?K-+qIu@B?+#8#)Wxban;H z7>rUub5*RldhilsMjCi|kn`A!gIzuEs0Rv%yLfv&sl7Fq`7fGhP@7a($b1$Lyrt7{ zlMcR5w9hwbALey+`R8dvk)Em;gIE@(+j_Y8X~vG!JEDG1zngN@cJ~#=aArV(WDtU((~-wQr}Zf+y$-QE+FOldo%6_Kmyvyk)K{+D~!u z3>_mMY1hTN<0@%z@(`Cn-sUM4E@Ku*`e_{lL#Rm7OX*{AX)o=9>B%nsI<960dd=1H z7qx*+>8_rPG?#C(4#IP;T+GYRJ{_*EnSg7gOIBM~P=Pe~7JVr4g02URRgnyBQ1%N& z!Sx#dR0m}zt>+C@v~iZpHzBc3(Ep#PCEIbmRIpD^LcO$tOAJa$->EKKt$p3;0jH>K z%T4C8M-)7wgEvo?=*BvBR_g3Jp`IuiO?le)c4DzKkf9Ca=@L3X(k^v8h1&tYO z($L#F%1`J5wFzw{-8K?GVC=}X-Zt&JdD`cPbXHs%?DDVH>x#bWiFK+-YPQb*_F6%S z_RR;(PiZKkeZH-WQ|yxV;X<9qrPg&!dQtq48nR41nSnvF9`vHT$Zd=fk+-RW%jC_D z;(-$F^Hik7JLwX8L=`L3S(2e$A-{1V3Z76oTwQuXJ+OkVk>kD81E(o33Vxzvr#%sg ze-O)bu3tOO7094r(eQ%0exFXik6OC|`vzz}_0;P+x`(J|w&@@o(AnkRsViW6xqPG?qI)Hq$Id7 z*zdtF6{ZdGdoUxYDavnZ2026gDUsyh`62#@Ae!eV1!sr&TO-xMvZ4MpjhkJ;BY}i& zLHm6Fsy0>NR>CgAVZxh)Q^DkXf7Jez8~m(DWO;CUEWf*1KFseJG%N6%r54kda|ufc zs|Z_z0R?`m&ga3;2+3I8nvhNyM#v%*5vB$24D+vVa}i9TmpT%95(X2ZLFeKAwUMJi z9-=`mE-l_)Ioxjgl)9SJ=N zg9*{#qnrH9A!%*!9iczrWaFTGA z@F5|o9W4<$5_%E}2vZ5O3Cju9gx!P#grkJx!G)XsYa%xX%}3BHeMa~<^V^`MBS<}Hl82;Lguw+lWT;dg95mxXgFVHKf@u$8cjus7&D($9%)W)AKk z$QJ<)5{?m066E>(i-aWRa0;O#p(kN5AxbD9%qEl*mJ{URqm2Z4j7py2O7cdHnvofu z(LZxcbj8#T7iWzfC=FjFA;|F_f_4pb3mE-(G?yT}8C81szkTW_bV_ZQ| zRB=brvlM<Z8M78FxVNm7zpjjck+#!ot%8Plj|N3$+@$vz$KIxI(crClWS)>`8rFqG$fy!i`;jYlPffz z3|2{>caxLbM>x4!8=lbL#pSyelJBE=PL_xQwD0Xy&4%Z?1Gi0c^1@0dw_NY!t9_ho z-q*QBHOI-@RytWW-^s@65y>OrgqF)w1E!bYe>rfj!by4HM&f-{ zk=Ji?@$6Mj9-8iCXB`8ntYVV?Q>}PyKNo+2G)Zr+UH6W*Q=*2o*DiTOUa>40U)2n~ zh)6txWkKWxb!A?ji?36QF5KYa?_J^Kyk1T=(7xZUF7Kp+?-L!A7c^h{-Y$P^+l>y^ z>EK$S1scR%dK>jfi7NEEDzr`W4O!^&y{OZ!P#Zd=W1_K6&kH?WzC-GfbIwySZ+N*X zP~zldt?-04@Rp8^5nACs&6lSN_qF-1mVK&YVfac{U*j20uD#RAh<53SM7_A3dK0cr z)dCT%u)B`#_lmV(#K|&MCCw#H``!oY>Q8lW zlxRj*9q;@m4}Xz#uUqm%DCx!1`6tR1YwI|WLg>b|sF#w&*(q^6as4mFDeChdxe1<^ zE;8CI-Sd+@KZz)B#rM`wVWJk%JL08B$e0^XCubrDv2^}V_oI?6*^j4CABDR-)XYnl zw)u;8i&I8O^5pvIZVNL?b8-HQCefb!C3(s5Brk>1p6?ZV>B;Fm6Gl>FqLD-~KQ384 zFP@%Ec^)Z?lGzVh=K5)|IO$$euPXjc_frzFYW5CAC9bsyDPD4VxqTtjG{_^1D zSkkxyNC}b({Ip1M(7u2R&NqXXhj9%$m79XbwO9G4hxvm#$yI(*Q`#fcxzZ794s^99s{T=Ov3!i3`l`8DTs zIwFfO7mhzfKH98UL|yYaJsh2new;Tpvu+ez!PPP{myA2eBtMLpOUC1bH8Z&)?oWd> zHW+2k(#P*p*)9~3p9Xt^_!A}EA7Di5V#=d@H@aszVHo-LAm3+^jj!Yin=|(r!q)yw z&yP7*%t7U} zDV*1GsdqVEJ1Zf|T?l1{aehmu+%)ptj7*F5rs6(yR9_MZa|l(0_X&e>v%GieEJ0p= z)Q5(q5hkJNa)O7VJqg8xH>vzM%1z>)eiyv=0hGhIn|H$sx2a4%KLhC3uDx?+D{|At7$~Y)N8A1i!Q%uDbux5`G~zdt zo`NwSbBZXxjvE*1Th3`kUQ&=tdK9^pFqp3OScKz?>HjqPe;So1%_P$-4zPT`KLeMu zQM85z!*Fjg?tT|}5jhDf`(Wj6!W>Q!X9-gosC&hm7%LB+E|trJV}!KXWFj0OWN{t6 zk&u2DnF&dEQyJk+LdQ9HfY1#uRS=F6T66Ii5N9ShyH&$G2l zK2=Y3*Wub;yKcBPJefMAp0{*Ny{`2f(RLD#m`jG~>f$!VuE2<>lfyORJhfn(#v5pS zgzxfon&aeyTq3gQ-X6R*+V9k4ux$ZN3f>#-Ul*MEDtl0!GPw$y8jQ&F zdpDUaTV51kpLL-mrw8jZ{jRNT@2YAVYppk9Y?^F)8$OU%lOjvbqu zlaWyr+LijpHl@rT(X8OHrTBG``Sn!r@>0J`)5K<-IR0#Q@bjg9-`E`6u1cW?Yc&`b z9hX}$CO0<+Rf^d6Vk0a!u@NRao0)86md(F=)R1ALhA*yICR?1LeK9IGtBS&PX6Ho5 zWwPIyQ532&CYx(@>g+#g)PP&d7FU#ns*GBN)!_=W#z(XAGIGZkjwuM$_*WH9EmAE* z71j=>Hp~3BGYZTJXY15o7|qVi96vT={P@e%KY6~}+^twJYRFw>^V!!e3N?Te#Pj0m z^ps%eGXJ*7+@NZipWaRO>?FCWmCT44MT>JvD>5q=Eh?Q~F=@`C(vsP-?OSxe-zM0y z#BbY_50PB{{yD)nmie7hqE_!&mScwehTo1)YY`nV&@1bwGvsV=X*s*9HC_L1(02t> zYV!k3snQkP(c~_N)~)c{wX?d;Gw&1AXHI$c(z1%6=mEcVlYuqci$U}I*@iA>(QtDt zCwS_9zfFe4``JM5vx53xz29%!WS}*$C)oZSe~P~+KX_?{->d2T zTUFQe1wp^>`p@~r|=;YEUHAMm?3J6{am=CR zev_vCMF*{OXm(5Kqy_hu&L2PX9_H<&W#y&8f(QN1`#Z+`v@1HLb6s+jPL1n zPc*tCnD7ug^-_TSn4?KQHx@gKZD_O?$+f$$`HfHKMT9alTpbn}_|j!QqGe zW`64y61lob4{cy~%isqOv4{UzO7Mq=SjPrm8FY9UIk#0XQu6iFe0y6`lGxa(oRUkl5~SB23ixc))^>O?+ksQRklxrb@!6Z0D}%!2UE>W~1-T;Ls}ns@rV|sH(S8j?T{?oj)!+t9JkXA6qGHFnFVa z7OVX(EiJw$L#Nfs_RXW5&ARX+Fxi)QbN}$we45c&IxopOFKbcReWi=oop+t*HR4#X z{b9d#n|eo%HI`Bve!H?mUt0hUbKT{pli06|Y~r&Gufm4lu;7zNI8DqljGZR3 zqhoUl3dUySX8g0p+l;Lm5cGbObK9<9!lTT#SvDc|1gjtQulJ*af>$187iDj7`cckZ z2ZB!?^{@54A;Hya{4xHXA;DcDi-!g;t?_%rY!QvuQF3fFCwFW?LH793msvz>&LoKy zf7E~*Mh&mCh(@i>!}aRSEy^EVke^)`s`IZ;C9M1de*c@fv@iUwlK*WGx;&7z|kJcdZ$<(Qs4QoKG^d^T&+)yDnk!PbytB zudI&h(m`_eC?6Kwxz_LAWRQ)N^5BC9{HvSWFp?=$60BP5U)!|EM)uj8WZ7%mCX}bt zI{a|3eL0hT%j162nl3nHXR48f{{OU0d9}7A? z&go^xC0-S9K!R|9Xu51($+l+&i0OIxoDe(;pvrG?F{i|rD5?%2}4r8iLXe0-Ip1;1U( zhm`46EOwha2K}o1-nA!LF6P`C!&$a=G3HF+EeVcS`Cac=VpFU9p77Mlislp)7L3j* z%>HMmmi172tKiR7etsKs*I`Z_PL-_EMH^-u?9f`Ym}Q-l-a2tOcxg zzolvPM)h`e>!9D$exKma>-`?L+7faezi|yQer9=A>8u5_OLhIEUN6_CcnYT#mj@T* zCO#m}sHj*}HnXy#bTKN_G|*NWxY18<7u@qS7tTe&mZ$x$oHkrEEQ{oa1ny+MafekG6QRBiH$Z>#CL zu)=xS(SqEZv4w?W!q?@t?s1Wla82I)yA~{(S5gu7OgCG5DuPcparPK1V?{i*Jm~uj zw`jeCb6iFSt2g-Vy4Z*1!`dW9BOfX+F0EjT!G?eQ+TiL9erMn77hKpxp~)Nk4!xr` z_^P-I)wxqyKDTUENreq{)<5>ddISRw%OeIG{3{1mSRvW*OcW~1x@;kH)>gSm>vGco zo48RoVd$zci%Lr~OUf%M7nRPQJikn4SYmkGEi<>~I=nnJc&y6r9Ek?ApYi)dR_$N^ z3{OKvX77I?@UOe#>POqMRE{5=pPe~rM&`uqj7ixu7=+^|7G_M!8_!kmvs^GIeZfx; zqF?Z!mbHBHj{!IzV%wKmNg6b;O3GREO?qb;Qr71NiFR1bR(-4nSc9co8XS; z{l@;`)L`WETqw?N67xLb#RxYH|r8S`8;>p?{d*kx$BR$3BFIchUc$!jef7q zO*M_mmT1D@zu9-S)}%2&Q1GcL-T{q~wx}LQJsoVz=9kPXo0T`Od;w3L^yiw?W>C@H zlE)tX$&VI|$<4~oFTC9OylC+)m5aH+n{B7v&{IF%tiD*hPK9~V%>06)f^j+ZR=>nz zRkV0w>EgnFe?rvV{i_I-9S!^|i>ho$UJRhzw zb6hmLu&6L6CnJ0TW@|>#;=IKuSHX37saSp4`qJ5ns_|e}tS~y7b4O88-nh%GnnjB< zW-Y8NTl9AoEDl$gna6TpSeTnvaJh@Q@iXgO4dB7j+D@slxT;Qt1d z{xg16SupT_5kFfN{P}-z+`A`uaEJfMOdBKp!zW0#h;j?^Gjj5>#{RPxD7NIL*IXL~ zv1-3VV_VG&f`!$7@9SpSqL9uFPou;d5}ppSzv0%N-3@~lJGlTW+Ua+VR0I_}xl1Yy zsu9ylWlk}*Jh@%x0VP?8mT^<;u2ycDQ+8K{H_Of%J?rMFy-0ESM%((F&aN)=Gr0OC zzheuTm4mH@tRVFT|C*X>?vz>KA(kB-mywa1nUOW_pLLiuyr)5M;|qTGTL(^5tBUG0 zz;01t-k7mP<34YMCFGukx#A1y8@=KiSe6KA*VdoDuxC zWu#+F?n&p{m^d8PfDN{+jM4dH3oHt)(q3Rrz9Y)IG4%IwT& zR!(kyUQt#??U;|%>;e{GMxvtGZd}ya1hfi^>r|K*&CVG&wkTURICc4|-Brw+Ush38 zGPmr0c}9}E>ct`bYOWIZOsG>~4lD2I?EHe!ms@%NZiSC&A9|%h!!P+O@5nHX`?Dop z>w=tUW?@!#UVg#l)}_DKKsRe3UK%`215GoY))x1a23LRCUmMG|7SD!T93z{WIoXBT zqjUdBAJr^e(YrzxjLC>*7G#adEULeW*(Y%_`MW0Ery5t?6@2Z>{`{JWwI|#_b}qL{ zW5yR|W?b%q_wUwkn}FWkLGNAuxTzLT37>1SGNXl=S^2p|V=i|xoWjoQf+dSb4H?xf zbIj~fgPrI=BV3Ol}!z#eHvr z*9xC?e5hrlDZgIdJhcn0yY=vL%b{GJxIAt>v^@2fLwQ4Aa_UB|3xm|NNv(pf@AhBx zpKcq>e9<53f7~eO@Dlgcdy?73^nz=yjPP0)Td$inNhGqEbPB%tqTjfIJjjw9JeU%> zitSdt`EDNk=0(3-bLT6TZn=dF#{YLxT0>cX7W58|Jm9wqcD=-<(*oPrOHYz?t$%NjR!Oq5cihL7r&HC}3ov2kw2Wf)`?62|cet!1Kt=$LWiv&N4eQyBGZ?XId* z`Iu-yUT#j&=z=lPS@Ib05{A|6dq)ktVQByUqXrKcI%wDs#HfK~^Jk43m^iY;>P)3l zyFQjvWn(Ylr=a0ixhEJC^!%!SQ*4a6h)YXxk=q>1o?o$OnYhy%V_M0R9W{&3=%Q#5 z_mUZfV=p)IT^*x_$k~Jyb7;Nion;(3H{Kj!B-QMd=Pk(OLxzgdtkV0+W|c+<4)Yd& zMKks<3G%=0f05sfbp^}A%4Cg>=8VfJ${dYWHBU_*8d^-JKWBla#qPX;Tk+pZ$ zwU?m})Q^txAotkOW5!?ZWMS4p5BxDkj5D1V-cw>a*f)D{=2Er?WFlbP`KFB}-!Du4kso+cm*`PtgLkl&o z6E-f|0{eOul}L#ke07Zk;U0f=BC!ahPaJzwR@8_&*d4suL<=NTAXIXCSNPNdhPD zRL;W85dy0IN>skAoFz^TINlV=@vss<5T$7@kV12Z2H zQA6!5yBZr#IX!iUUrpx}{&_ju!Ahp^7dNwqvGLJVpO)YR+&>K?DI?OxVfO8MIUsA1 zhwfF=>9?Vx>6yeM-p1I->{Wg0 zEv{l_!JyCinpJUQ3x59=7Smr;&9o({rE;T6^lA?`v?YIh3+on?jT*kCLK%TQWI}LK z7~j7IV+PrnAOaD~3Fk3erLoh?QHFsgPo6!E`oEKB6ij!`%tf7!_keTHR%TZlyp>zo zB^C34Teh(~)E+!!I~%0-@Q&Ed#%s6>G=|q~V|e0-$|#9f?qnHiJ`dZ4z{c<1g;9tG zUbxGc(l6V^#sj;sixsG8eA;dn-%|{Vt&=@Fu-8JFCv2mfq0dLuTj zR29}oiH<>M+?JU?#7=-I*wjM&ujl_2g&^7PBFg*rn=uP;N zogV}VCIqikAd-H(qYtwpMf_GD8?J`(#Xi=#Q-jGqIdkl&$uzrxs53q2xAi_+$>yop!XFla#cE1}_mTJ5 zB^Dj6{BF|^no;*vv4Q--)>;J5`-rvTH+{tV1}>vhe5eEm!|iR!&TM$2viQ?Gu?&Nb zNaaK7_mnKNRwCiJb4FDAj)b&`MJ(YtH8o zE3{DtcQpT{!t$h_b9a&QM@gQ&#-CFo^38=Hz4NAEC;|sbqE9+4Lr9v!9h4ap;*TJ} z5ur3Bng1psXGwDK#cKWU`6!LP{i8mbnp33wZ}@1D-$#GCqe}mu_~^E*D!r+Xnr>pP zWl^M9QQ|5F;E0YMs;R9ee$EYg(18+2tty%pumxGWx}8{fc>i>;knlUw@o+;dzHx zJMZ|z*j~$Q(frp>QAL-0%ygC(v(nL?mw(K1)x9enarCbRA9{psMs-*C2dym+KFXrB zZL5lS{86?Xb@t12(}$ZD=ecVAWu9=9jo_V*v5|dfXIYj%!FY%$URPLOBbACxS%h*; zM;*L(G{SAwMLhfj+kkJiZ_;S>XYC10Y~&_unLsvzo|2-)LGy7GIQdKj9cdX(n4f`4ZeqOaRl$HoD@18j3UTTe z`~(zLV_R7X0p0XnTJ31I)SZ zB-1fJG2s**S82TLD;C$$34N%wXtybLWLMxI8|3p7AaQR42~|RNTk`KnY@nl@ydHZG zV20>qyPeXrDXsBG1PX~BEn&pJx#o4O+%vHUBn(xFTj^Hy^=kqw0*EFgzHx82Q$4eL z-N;`A<^xtFVKH~@d|Y6oQGNE1u;(`aig`6N!u%%K`t*D21-6#nvLrM9++Y1dfW9V- zqjJY42<(i6Q3cs%(xg2CqwOg|CSfvPYE#TD3C#vL77UbnV$AQ}1q&<9RM18WVHv`{ zpEhs4z|P=?h!A>R6QLDm6c`MsJTz~gQ}Csd{bf+rlf}CyP$4170EIFH7CVoY2yD^~Fb^=HDDl<3 zwCqLVBTLZHfD_K`qqa*(RuAK$Mi|}K75?367K2u-D7n+nWo5A+$G1$OB$@SQ>!EnK(4ExrIp(ldh#jpr=xEh1Yq+DzUFCcKs zDiNU-=k*>sgi-8N>Zo$10{XS@&bbJT2ugtMm#~Cjda;LzQHSm|;DYbYZ{8Z?$J~ky zk}pV%g}VoO1)~i)U+Bl=h9W6b4s3v5C}F8bRtcdB4SeIh5k`cB@sFlZej18ep}7|~ zNg3laE#6lB@&wpiE5b-US}fG;B}T|s5-!F$1z&Tm8G{c`ief(>bXK-czPGF3^SJ?L zO5ljImo^HJmUa|KSpMN3W(aH@u#5iGlh9RPpIIHiFu0d1@tt}w<7t7}+G0V!-!jDK zex+;3AOX^MJrX6Mcbvb+Auw81P%B~ax4%~r7TT$7cug0^^-`DN1e zxF_B3KPVXOeX&D80)2Js1CFTN0!9#03W+hH|Gd+Jue=GiAmh!&0?Y1?X12ulTh`gj z0Sqd)p#2I$Xw;KSvIUr*icjpIiV&FIzxOJE)gi-P_otqe+0iNC8G$v|0U$bMC^|TP zKB|3|EIdC14=b}+(DKE1@Sh?ia8q%R(GwxY{9)Jcr4VLML-Fz_0z`Wyc4>+4O{aWm`^F^B|enT7DfcA#p+@#F;H2$7YCL85*jU=?OCaOSS^i|z* z3DeWRxLaU8V5=ZZDD&YbhmH#@8|A~u3b#KM-&dTXl4I6T6S0{FSHuV-D69KdTohP2 z9^Xg(mLY6gO*o8f^3h%f8QYL>kaE(HnU4mUP=@#%o}-O~xhW56^f(?NMTpu_IXih% zAP5TpB{@6&gm?`S~vOANhsAXb>2sEx;H3xy2{2a$sFe%xy&2`lrKB z3Xn!~6HL&+R@N@0#-wSPDYTsUs?eK9FA5YjComM6K!nr7-c|))2{6=A0j%`P)O{v~ z{HMV~6yX5aepzn7+zr6ck`7?Y-Z(ehWQ5hGnymz~ObgtcU3>VHz-Wedu%C~xo+lm% z)FmardI=2iD+7;a?m=LrkS1nF3XpCdFC9vOkxe=Hk_rBc2zzb)>4?B+z7z!`fc8%1Q2PVtB?aa!b1?EMcGtNi^O&&46{)qux;~8|4Z;$XY|Hr6eY$jjgCYC(psIKek=&#nr|>l=u6jPr}T2u zE^1RPS}-GWny7Nx{1T8rYhP%jg`y_xuGUNDA~5Vg>sVyIN0;Z+3oIKeKGM;_qm?9h z3I_NWG%lnn+H@3P6p@fUX5l?&1=hejW}u&lg(3qpASQd}Rfi)rQYO?sDM(9zjh4jx z+)x$pn>xM%VsvE|z7CqDMe$7;TCAH^lk}As?%J~$)u^dczJytDZ{yBxI|Wt_Ow? z=%oz;D+jhz!gg=%utH$8RKA}d(-97J<~=7c4{gOBD1of!Q-R8fmYU1hTV2XW3PxHn zF04jEM;$vbMqsqWn~Dc1O4#0k&Mg9?O$&lg!_D6A0gLtvkoJBFkm2S_Z@d(!4QW@_ zZMa85347xg9%y*b?kdtuV4aV>MkIz?(MG8u688SPrGa8io18`qpCyiVN8j5n7;R`n zi##N3<&3aE5u{fq_3;Z;5$;^Osx$XoU`P0^7x8kZwS2-!*4FE}$hrpeF;{Ts1Mawj zK241o)Y8a9TW-C`bj!!!kK~0+i&a(L`me0L~nZ7nSkvHvf%{v*x1J@7Zi z_^S@#uD`N4%k8)m%M0gfv3h_^UBnLpQo<8J4y@Xu2hCb%{0HTN|zI3|&^LtuNL0ZYWOF^z}KGE*pxwY5LY; zOJT6uia%ay+0An+benn;Us0iV@01ip{rE8jPOKili`K;IN+m2>Qx;*KWsjwOr%hHr zjkFk%b~28gIRh^M@E+P@>8HT$jMm83u|B-E2`~f zei}o2{J)m0lF01ngJj;2O#R3b@3x_eq^|jBkjiPl1y}Tt8VsD8=`t>7nD{oGjLSJi zFTlW~#xMXJ)i_97zik;_{a6M)u#>2gg4tZ%kKkFJK*41ra627lPakZ?hz|*o4d)qV z_V$s@*Tu8b%pSiT>F7YrIEa6UKaI}(uSDR8 zLCcq9Hs==Ez-izq6g0AmAutCS1WPWzfEaq85e+jraf?XlkliLf-yCWp5m5$uE#AOg z5Q7p~NYavLn`20&pp@&xRDYc~9{AH5UTh@cvO!|GS_f&XjUYjM{86Ts?NY}bpmurY znFCOyq8uq*Q%ddg&2b;p$JfpJdx6h`Ysk2))OlV>NnHkIg0adyB-hpfQ= zdmPLro|OLwJT4^Qas1oUmd;(*q9c)iSw+|5x8KNNG!J{gkh81d45ovYjR zHf{~+(Ur_;3+80y(FQ-ES_BG2utKldFj;J12~}vjG3{F&KYcoFHuWciurS5k2rZ#T zRD`uwCd|#7m-=Y>6irds?!k4I8}8?W5+-PZ;%@YwkO# z#qpt4dhm2(XJ}I#*1ynFVOIK_809y%m|97P7K*BzgyC8$*u#K?$K%mRSR(!tRs#Bg z&h$h-D+CX!*S||A*NDLFNSH$2*Cp;p;eON23&S85T}-xGN@k40 zt#x`7Z(XNHdTT574lTI#RV`m#$_rn`@|H~Uo{kn{2Q5$7rnmL~tyrK(hb@DgHN8{R zJ{ewT=sO{yKWbYWELN78*%eJgB=MDaG}9izq!u~?^iJescc5E~Bz=jV;AYg3$NHj6 z(;e@iLmB9b^f#io4MLIYM2p^!K^4x@D<-#?$MXx(%bl*B})6Jm{VQiRU0kg|D3#96QoaU zWFqZ&VK3T~blBnkHiUFeN=NZS8XNIHn|uOO0{LAqaf-nN5Avf1quutg7|w;0r^1hp z!(U>byE~|FdmUFf@R*N_Q2W55OCW_T`q*`?xjH4X5BISkef5IKWZuAnLL(>_*CN^% za6XTd^Dr$aBaw!wpTG$v%}fT_wK?oX&bDOSV+rb^7V^JbvBbA41Mvo&|AzBboUh?r xj}yI3OVAR2?qLix<^%=BGLO31F-r|v2BH6=dLx2^zSq3A;GjDH?@DLJ-vBUs-y;A3 delta 99728 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 Q=w}v7r9NNCssCrp0DMyKB>(^b diff --git a/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys b/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys index 94ca85330e9ca7bd506064da632cd50788c64e90..6726302db596c6d999b2f6905c530c77cedf4db5 100644 GIT binary patch literal 44288 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.HtHandleContentionEvent); KphDynOtName = C_2sTo4(package->StructData.OtName); KphDynOtIndex = C_2sTo4(package->StructData.OtIndex); + KphDynObDecodeShift = C_2sTo4(package->StructData.ObDecodeShift); + KphDynObAttributesShift = C_2sTo4(package->StructData.ObAttributesShift); return STATUS_SUCCESS; } @@ -548,7 +550,52 @@ static NTSTATUS KphpX86DataInitialization( dprintf("Initialized version-specific data for Windows 8 SP%d\n", servicePack); } - else if (majorVersion == 6 && minorVersion > 2 || majorVersion > 6) + // Windows 8.1, Windows Server 2012 R2 + else if (majorVersion == 6 && minorVersion == 3) + { + //ULONG_PTR searchOffset1 = (ULONG_PTR)KphGetSystemRoutineAddress(L"IoSetIoCompletion"); + //ULONG_PTR searchOffset2 = searchOffset1; + + KphDynNtVersion = PHNT_WINBLUE; + + if (servicePack == 0) + { + } + else + { + return STATUS_NOT_SUPPORTED; + } + + KphDynEgeGuid = 0xc; + KphDynEpObjectTable = 0x150; + KphDynEpRundownProtect = 0xb0; + KphDynEreGuidEntry = 0x8; + KphDynOtName = 0x8; + KphDynOtIndex = 0x14; + + //if (searchOffset1) + //{ + // INIT_SCAN( + // &KphDynPsTerminateProcessScan, + // PsTerminateProcess62Bytes, + // sizeof(PsTerminateProcess62Bytes), + // searchOffset1, 0x8000, 0 + // ); + //} + + //if (searchOffset2) + //{ + // INIT_SCAN( + // &KphDynPspTerminateThreadByPointerScan, + // PspTerminateThreadByPointer62Bytes, + // sizeof(PspTerminateThreadByPointer62Bytes), + // searchOffset2, 0x8000, 0 + // ); + //} + + dprintf("Initialized version-specific data for Windows 8.1 SP%d\n", servicePack); + } + else if (majorVersion == 6 && minorVersion > 3 || majorVersion > 6) { KphDynNtVersion = 0xffffffff; return STATUS_NOT_SUPPORTED; @@ -671,7 +718,20 @@ static NTSTATUS KphpAmd64DataInitialization( return STATUS_NOT_SUPPORTED; } } - else if (majorVersion == 6 && minorVersion > 2 || majorVersion > 6) + // Windows 8.1, Windows Server 2012 R2 + else if (majorVersion == 6 && minorVersion == 3) + { + KphDynNtVersion = PHNT_WINBLUE; + + if (servicePack == 0) + { + } + else + { + return STATUS_NOT_SUPPORTED; + } + } + else if (majorVersion == 6 && minorVersion > 3 || majorVersion > 6) { KphDynNtVersion = 0xffffffff; return STATUS_NOT_SUPPORTED; diff --git a/2.x/trunk/KProcessHacker/include/dyndata.h b/2.x/trunk/KProcessHacker/include/dyndata.h index 095f4903f..2aba88ae7 100644 --- a/2.x/trunk/KProcessHacker/include/dyndata.h +++ b/2.x/trunk/KProcessHacker/include/dyndata.h @@ -54,6 +54,8 @@ EXT RTL_OSVERSIONINFOEXW KphDynOsVersionInfo; // Oh: OBJECT_HEADER // Ot: OBJECT_TYPE // Oti: OBJECT_TYPE_INITIALIZER, offset measured from an OBJECT_TYPE +// ObDecodeShift: shift value in ObpDecodeObject +// ObAttributesShift: shift value in ObpGetHandleAttributes EXT ULONG KphDynEgeGuid OFFDEFAULT; EXT ULONG KphDynEpObjectTable OFFDEFAULT; EXT ULONG KphDynEpProtectedProcessOff OFFDEFAULT; @@ -63,6 +65,8 @@ EXT ULONG KphDynEreGuidEntry OFFDEFAULT; EXT ULONG KphDynHtHandleContentionEvent OFFDEFAULT; EXT ULONG KphDynOtName OFFDEFAULT; EXT ULONG KphDynOtIndex OFFDEFAULT; +EXT ULONG KphDynObDecodeShift OFFDEFAULT; +EXT ULONG KphDynObAttributesShift OFFDEFAULT; // Procedures EXT KPH_PROCEDURE_SCAN KphDynPsTerminateProcessScan; diff --git a/2.x/trunk/KProcessHacker/include/ntfill.h b/2.x/trunk/KProcessHacker/include/ntfill.h index 9c4d79120..a3f89e286 100644 --- a/2.x/trunk/KProcessHacker/include/ntfill.h +++ b/2.x/trunk/KProcessHacker/include/ntfill.h @@ -1,6 +1,10 @@ #ifndef NTFILL_H #define NTFILL_H +extern ULONG KphDynNtVersion; +extern ULONG KphDynObDecodeShift; +extern ULONG KphDynObAttributesShift; + // IO extern POBJECT_TYPE *IoDriverObjectType; @@ -130,31 +134,45 @@ ZwQuerySystemInformation( #define ObpDecodeGrantedAccess(Access) \ ((Access) & ~ObpAccessProtectCloseBit) +FORCEINLINE PVOID ObpDecodeObject(PVOID Object) +{ #ifdef _M_X64 -#define ObpDecodeObject(Object) \ - (KphDynNtVersion >= PHNT_WIN8 ? \ - (PVOID)(((LONG_PTR)(Object) >> 19) & ~(ULONG_PTR)0xf) : \ - (PVOID)((ULONG_PTR)(Object) & ~OBJ_HANDLE_ATTRIBUTES)) + if (KphDynNtVersion >= PHNT_WIN8) + { + if (KphDynObDecodeShift != -1) + return (PVOID)(((LONG_PTR)Object >> KphDynObDecodeShift) & ~(ULONG_PTR)0xf); + else + return NULL; + } + else + { + return (PVOID)((ULONG_PTR)Object & ~OBJ_HANDLE_ATTRIBUTES); + } #else -#define ObpDecodeObject(Object) \ - ((PVOID)((ULONG_PTR)(Object) & ~OBJ_HANDLE_ATTRIBUTES)) + return (PVOID)((ULONG_PTR)Object & ~OBJ_HANDLE_ATTRIBUTES); #endif +} +FORCEINLINE ULONG ObpGetHandleAttributes(PHANDLE_TABLE_ENTRY HandleTableEntry) +{ #ifdef _M_X64 -#define ObpGetHandleAttributes(HandleTableEntry) \ - (KphDynNtVersion >= PHNT_WIN8 ? \ - ((ULONG)((HandleTableEntry)->Value >> 20) & 0x3) : \ - (((HandleTableEntry)->ObAttributes & (OBJ_INHERIT | OBJ_AUDIT_OBJECT_CLOSE)) | \ - (((HandleTableEntry)->GrantedAccess & ObpAccessProtectCloseBit) ? \ - OBJ_PROTECT_CLOSE : 0) \ - )) + if (KphDynNtVersion >= PHNT_WIN8) + { + if (KphDynObAttributesShift != -1) + return (ULONG)(HandleTableEntry->Value >> KphDynObAttributesShift) & 0x3; + else + return 0; + } + else + { + return (HandleTableEntry->ObAttributes & (OBJ_INHERIT | OBJ_AUDIT_OBJECT_CLOSE)) | + ((HandleTableEntry->GrantedAccess & ObpAccessProtectCloseBit) ? OBJ_PROTECT_CLOSE : 0); + } #else -#define ObpGetHandleAttributes(HandleTableEntry) \ - (((HandleTableEntry)->ObAttributes & (OBJ_INHERIT | OBJ_AUDIT_OBJECT_CLOSE)) | \ - (((HandleTableEntry)->GrantedAccess & ObpAccessProtectCloseBit) ? \ - OBJ_PROTECT_CLOSE : 0) \ - ) + return (HandleTableEntry->ObAttributes & (OBJ_INHERIT | OBJ_AUDIT_OBJECT_CLOSE)) | + ((HandleTableEntry->GrantedAccess & ObpAccessProtectCloseBit) ? OBJ_PROTECT_CLOSE : 0); #endif +} typedef struct _OBJECT_CREATE_INFORMATION OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION; diff --git a/2.x/trunk/KProcessHacker/object.c b/2.x/trunk/KProcessHacker/object.c index 342115523..bc49ba538 100644 --- a/2.x/trunk/KProcessHacker/object.c +++ b/2.x/trunk/KProcessHacker/object.c @@ -1,7 +1,7 @@ /* * KProcessHacker * - * Copyright (C) 2010-2012 wj32 + * Copyright (C) 2010-2013 wj32 * * This file is part of Process Hacker. * @@ -191,30 +191,32 @@ BOOLEAN KphpEnumerateProcessHandlesEnumCallback61( { PKPHP_ENUMERATE_PROCESS_HANDLES_CONTEXT context = Context; KPH_PROCESS_HANDLE handleInfo; + POBJECT_HEADER objectHeader; POBJECT_TYPE objectType; PKPH_PROCESS_HANDLE entryInBuffer; PAGED_CODE(); + objectHeader = ObpDecodeObject(HandleTableEntry->Object); handleInfo.Handle = Handle; - handleInfo.Object = &((POBJECT_HEADER)ObpDecodeObject(HandleTableEntry->Object))->Body; + handleInfo.Object = objectHeader ? &objectHeader->Body : NULL; handleInfo.GrantedAccess = ObpDecodeGrantedAccess(HandleTableEntry->GrantedAccess); + handleInfo.ObjectTypeIndex = -1; handleInfo.Reserved1 = 0; handleInfo.HandleAttributes = ObpGetHandleAttributes(HandleTableEntry); handleInfo.Reserved2 = 0; - objectType = KphGetObjectType(handleInfo.Object); - - if (objectType && KphDynOtIndex != -1) - { - if (KphDynNtVersion >= PHNT_WIN7) - handleInfo.ObjectTypeIndex = (USHORT)*(PUCHAR)((ULONG_PTR)objectType + KphDynOtIndex); - else - handleInfo.ObjectTypeIndex = (USHORT)*(PULONG)((ULONG_PTR)objectType + KphDynOtIndex); - } - else + if (handleInfo.Object) { - handleInfo.ObjectTypeIndex = -1; + objectType = KphGetObjectType(handleInfo.Object); + + if (objectType && KphDynOtIndex != -1) + { + if (KphDynNtVersion >= PHNT_WIN7) + handleInfo.ObjectTypeIndex = (USHORT)*(PUCHAR)((ULONG_PTR)objectType + KphDynOtIndex); + else + handleInfo.ObjectTypeIndex = (USHORT)*(PULONG)((ULONG_PTR)objectType + KphDynOtIndex); + } } // Advance the current entry pointer regardless of whether the information will be written; diff --git a/2.x/trunk/ProcessHacker/appsup.c b/2.x/trunk/ProcessHacker/appsup.c index 2aedb6d39..74ca103fb 100644 --- a/2.x/trunk/ProcessHacker/appsup.c +++ b/2.x/trunk/ProcessHacker/appsup.c @@ -2,7 +2,7 @@ * Process Hacker - * application support functions * - * Copyright (C) 2010-2012 wj32 + * Copyright (C) 2010-2013 wj32 * * This file is part of Process Hacker. * diff --git a/2.x/trunk/ProcessHacker/proctree.c b/2.x/trunk/ProcessHacker/proctree.c index 9d8b6d06f..3b81822ff 100644 --- a/2.x/trunk/ProcessHacker/proctree.c +++ b/2.x/trunk/ProcessHacker/proctree.c @@ -2,7 +2,7 @@ * Process Hacker - * process tree list * - * Copyright (C) 2010-2012 wj32 + * Copyright (C) 2010-2013 wj32 * * This file is part of Process Hacker. * diff --git a/2.x/trunk/phlib/global.c b/2.x/trunk/phlib/global.c index 26e8db8f7..002e0407a 100644 --- a/2.x/trunk/phlib/global.c +++ b/2.x/trunk/phlib/global.c @@ -2,7 +2,7 @@ * Process Hacker - * global variables and initialization functions * - * Copyright (C) 2010 wj32 + * Copyright (C) 2010-2013 wj32 * * This file is part of Process Hacker. * diff --git a/2.x/trunk/phlib/include/kphapi.h b/2.x/trunk/phlib/include/kphapi.h index 3264fa94e..43d55f70e 100644 --- a/2.x/trunk/phlib/include/kphapi.h +++ b/2.x/trunk/phlib/include/kphapi.h @@ -138,6 +138,8 @@ typedef struct _KPH_DYN_STRUCT_DATA SHORT HtHandleContentionEvent; SHORT OtName; SHORT OtIndex; + SHORT ObDecodeShift; + SHORT ObAttributesShift; } KPH_DYN_STRUCT_DATA, *PKPH_DYN_STRUCT_DATA; typedef struct _KPH_DYN_PACKAGE @@ -150,7 +152,7 @@ typedef struct _KPH_DYN_PACKAGE KPH_DYN_STRUCT_DATA StructData; } KPH_DYN_PACKAGE, *PKPH_DYN_PACKAGE; -#define KPH_DYN_CONFIGURATION_VERSION 1 +#define KPH_DYN_CONFIGURATION_VERSION 2 #define KPH_DYN_MAXIMUM_PACKAGES 64 typedef struct _KPH_DYN_CONFIGURATION diff --git a/2.x/trunk/phlib/include/ntldr.h b/2.x/trunk/phlib/include/ntldr.h index cc1dc6416..b5d1a8ad6 100644 --- a/2.x/trunk/phlib/include/ntldr.h +++ b/2.x/trunk/phlib/include/ntldr.h @@ -172,6 +172,7 @@ typedef struct _LDR_DATA_TABLE_ENTRY LARGE_INTEGER LoadTime; ULONG BaseNameHashValue; LDR_DLL_LOAD_REASON LoadReason; + ULONG ImplicitPathOptions; } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; typedef BOOLEAN (NTAPI *PDLL_INIT_ROUTINE)( diff --git a/2.x/trunk/phlib/include/ntpebteb.h b/2.x/trunk/phlib/include/ntpebteb.h index 19f70b1e2..0d904a80c 100644 --- a/2.x/trunk/phlib/include/ntpebteb.h +++ b/2.x/trunk/phlib/include/ntpebteb.h @@ -21,11 +21,11 @@ typedef struct _PEB { BOOLEAN ImageUsesLargePages : 1; BOOLEAN IsProtectedProcess : 1; - BOOLEAN IsLegacyProcess : 1; BOOLEAN IsImageDynamicallyRelocated : 1; BOOLEAN SkipPatchingUser32Forwarders : 1; BOOLEAN IsPackagedProcess : 1; BOOLEAN IsAppContainer : 1; + BOOLEAN IsProtectedProcessLight : 1; BOOLEAN SpareBits : 1; }; }; diff --git a/2.x/trunk/phlib/include/phnt.h b/2.x/trunk/phlib/include/phnt.h index 52782f101..54b38a988 100644 --- a/2.x/trunk/phlib/include/phnt.h +++ b/2.x/trunk/phlib/include/phnt.h @@ -31,6 +31,7 @@ #define PHNT_VISTA 60 #define PHNT_WIN7 61 #define PHNT_WIN8 62 +#define PHNT_WINBLUE 63 #ifndef PHNT_MODE #define PHNT_MODE PHNT_MODE_USER diff --git a/2.x/trunk/phlib/kphdata.c b/2.x/trunk/phlib/kphdata.c index 66ac7e07c..d3b0a2fe8 100644 --- a/2.x/trunk/phlib/kphdata.c +++ b/2.x/trunk/phlib/kphdata.c @@ -2,7 +2,7 @@ * Process Hacker - * KProcessHacker dynamic data definitions * - * Copyright (C) 2011-2012 wj32 + * Copyright (C) 2011-2013 wj32 * * This file is part of Process Hacker. * @@ -100,7 +100,7 @@ NTSTATUS KphInitializeDynamicPackage( Package->StructData.OtName = 0x10; Package->StructData.OtIndex = 0x28; // now only a UCHAR, not a ULONG } - // Windows 8 + // Windows 8, Windows Server 2012 else if (majorVersion == 6 && minorVersion == 2 && buildNumber == 9200) { Package->BuildNumber = 9200; @@ -115,6 +115,26 @@ NTSTATUS KphInitializeDynamicPackage( Package->StructData.HtHandleContentionEvent = 0x30; Package->StructData.OtName = 0x10; Package->StructData.OtIndex = 0x28; + Package->StructData.ObDecodeShift = 19; + Package->StructData.ObAttributesShift = 20; + } + // Windows 8.1, Windows Server 2012 R2 + else if (majorVersion == 6 && minorVersion == 3 && buildNumber == 9600) + { + Package->BuildNumber = 9600; + Package->ResultingNtVersion = PHNT_WINBLUE; + + Package->StructData.EgeGuid = 0x18; + Package->StructData.EpObjectTable = 0x408; + Package->StructData.EpProtectedProcessOff = -1; // now SE_SIGNING_LEVEL, no longer relevant + Package->StructData.EpProtectedProcessBit = -1; + Package->StructData.EpRundownProtect = 0x2d8; + Package->StructData.EreGuidEntry = 0x10; + Package->StructData.HtHandleContentionEvent = 0x30; + Package->StructData.OtName = 0x10; + Package->StructData.OtIndex = 0x28; + Package->StructData.ObDecodeShift = 16; + Package->StructData.ObAttributesShift = 17; } else { diff --git a/2.x/trunk/phlib/symprv.c b/2.x/trunk/phlib/symprv.c index d2cd532e4..a28eda87f 100644 --- a/2.x/trunk/phlib/symprv.c +++ b/2.x/trunk/phlib/symprv.c @@ -2,7 +2,7 @@ * Process Hacker - * symbol provider * - * Copyright (C) 2010-2012 wj32 + * Copyright (C) 2010-2013 wj32 * * This file is part of Process Hacker. * From 0ff302d6ab10267d7db18cc963dbe5b1d7b7f3f5 Mon Sep 17 00:00:00 2001 From: wj32 Date: Mon, 21 Oct 2013 23:01:24 +0000 Subject: [PATCH 008/161] updated KPH scan data for Windows 8.1 git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5475 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- .../bin/i386/kprocesshacker.pdb | Bin 404480 -> 404480 bytes .../bin/i386/kprocesshacker.sys | Bin 44288 -> 26880 bytes 2.x/trunk/KProcessHacker/dyndata.c | 53 +++++++++++------- 2.x/trunk/KProcessHacker/include/dyndata.h | 11 ++++ 2.x/trunk/KProcessHacker/process.c | 7 +++ 2.x/trunk/KProcessHacker/thread.c | 9 +++ 6 files changed, 59 insertions(+), 21 deletions(-) diff --git a/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.pdb b/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.pdb index aefb646deba294d90cbf77e4e261ff6a58b0303c..5c98b1e8eee1197e37334590c490f7fa044eecfa 100644 GIT binary patch delta 97878 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 WBG~$+ooe4b_*tt|xO=d5)_(vMckhV+ diff --git a/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys b/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys index 6726302db596c6d999b2f6905c530c77cedf4db5..6c046d016286a54e44f6a980ef6f839ea3d3a507 100644 GIT binary patch literal 26880 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 literal 44288 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 Date: Mon, 21 Oct 2013 23:03:06 +0000 Subject: [PATCH 009/161] updated dates git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5476 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/KProcessHacker/process.c | 2 +- 2.x/trunk/KProcessHacker/thread.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/2.x/trunk/KProcessHacker/process.c b/2.x/trunk/KProcessHacker/process.c index cfcd3194d..38fe666c3 100644 --- a/2.x/trunk/KProcessHacker/process.c +++ b/2.x/trunk/KProcessHacker/process.c @@ -1,7 +1,7 @@ /* * KProcessHacker * - * Copyright (C) 2010-2011 wj32 + * Copyright (C) 2010-2013 wj32 * * This file is part of Process Hacker. * diff --git a/2.x/trunk/KProcessHacker/thread.c b/2.x/trunk/KProcessHacker/thread.c index e2d23b4f9..5618bdfa2 100644 --- a/2.x/trunk/KProcessHacker/thread.c +++ b/2.x/trunk/KProcessHacker/thread.c @@ -1,7 +1,7 @@ /* * KProcessHacker * - * Copyright (C) 2010-2011 wj32 + * Copyright (C) 2010-2013 wj32 * * This file is part of Process Hacker. * From 22a32dd758a23fb98c15cd62425717c7ecd6c195 Mon Sep 17 00:00:00 2001 From: wj32 Date: Mon, 21 Oct 2013 23:04:09 +0000 Subject: [PATCH 010/161] updated KPH binaries git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5477 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- .../bin/amd64/kprocesshacker.pdb | Bin 420864 -> 420864 bytes .../bin/amd64/kprocesshacker.sys | Bin 45568 -> 30208 bytes .../bin/i386/kprocesshacker.pdb | Bin 404480 -> 404480 bytes .../bin/i386/kprocesshacker.sys | Bin 26880 -> 26880 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.pdb b/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.pdb index d5c1623d51c3e7a412e8fc1acd60da0a433df7b6..5bcf58e09d835aa1c27b49d3954caf2ac1f5dbe9 100644 GIT binary patch delta 76569 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 delta 80019 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 literal 45568 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 z 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 diff --git a/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.pdb b/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.pdb index 5c98b1e8eee1197e37334590c490f7fa044eecfa..327b6a447a16386ae454eeb39cda6cfc48126a91 100644 GIT binary patch delta 1703 zcmbW%ZA?>V6bJD0Jm)^81uX4=4T=_25Ew-2UQ8s50iC)90?G$Kh+AD0=Yku!w{Dn# zf(#}ffGTHZS=J2Wg2^(L!tU0AbXk^&C`{&{ThP^!xewz5+uW-Rc1m^MZIfTm{okke zo~QTaX$mAY1(G_`tpWf}@K=F>H~4cyx27A$(A_Z<(^V9QNwG(~tBkYQt=VMMymzH> z4u!>Qip|!v?T>GDcsE-7+bqFF@8NTA9~?RV;;iKwN z`Hiak*#}!_&!{Y-ri-#uIY0A3NjN*lIDfKe6IJ0{aEY^L*aru~Iqfp%x(b_kaXI&l zbNp*xl4uMM2SeFWX%ijc?4RH~&-rvXd%lt#TIY}t$ZfGKJU(-{W7`Z$x9Bd~{DDfSZl6C6;|ZKpAUbz3dYEgROo5 zUW_>rqI3BbXQuK=jx`VrS=uHSL(^GK@0q>xpwwHCV zUVcFaxy~@dDuDH@k{x5`*n51ANv{8}bUQ#Xdzm(vG2dO6XbmkoE2!O!mGnbAzg006 zxR#vvq1F?JF_d;drBJW}mHt#5x{zK<#B9o|QBjnzPo+`Xeiakm_jHYlrdLD1u8T(l zjd!9cJP?zBcL(;XP1G3AC)ga?XQ)xxG?H+q8_m_I4Dxed>P+Ah47f2>znOs3W_rYl z+o^n7*~#g|XnlAs4jJ{#iz);4SO?xpJ!#NH!6{`R({)}PzGtZS)#7bI9%-ng{(98( zg)-EV#Z_I@;u3ybj7DvF@&6OgK8u=_S7lg`0K2&cZwWAxwH8k#f{X7Gf9CnlUge={ wY)1c}7Ey`o^m#ot&_F#}^nzpP7lu&dAkg|&e17>Yf5X*+Ow(O0s_p&%0HSBSW&i*H delta 2086 zcmbtVeQZ-z6ubQwAE9%TBG>mzr&n$?}cg2>uo_cKXwdY$dy}asr>+P}7lXcNc{Y#9- z_J|Q(v0+}R>%=~P>m6tt8Qt8L`}CPlhN9l}vyD9+5wjyAS4Jd;gD_X3SsaA;UT+q& z`-S*urf^oz65S%=7NWgSh&J{cg*3AhRy!9qBy^8d*#*lfl!+6mVja$IJpSAi+L?)& zG@}dV)wb^< z+Xw6G;a%GfUt+WRd_wHf;Q`C8xt$OPv>ofV;>W^pSlf{vIAA4a0RR z>E)&u^+8B2JRXK2ZLg}9nRFr!etNqPrkHCk!$m+xQ-Y@V!)Z0p+yF=EiGEl{-Yf8q zy3v#n1ymO2ZTx-(UPlinu8G4pM)hZ5FkQdEz9M(fD?}O3X$Q+?mM_S?2a70>hI0y+ zDI3K?DN87qNn2vKHt$|NZr`P;$KQ3{b zJyog@%=dj5K(ok?XB~8WBbHHV1(wj_3S4a7n1env%Zu^k^ze3c*jL2gcw!xTWPvH) z#4$9dW~5b13f1C5_pf{!n^@{u8dw_XbS>_rwtL_)14D31s^8dq)x3KjI*?u%g2!bi z1&1JCUeKzCTK|Ata@_+%{lpjAB&r3bl9V|Nd1{nB8RQ;@T$RpOUJ~XooTR-440CKK zmr&&}*L{g5vQlrPa%6~lt-xM8u8!Dsg8zWWPL$_#l)DJR*)%xH6!Z93n@7DP;4v8K zIPdvNzSFbvhPqU=F0)As=RN1XHczV3f}~4N=%V2^X$IWI`(*}YK-T`C^`S# zbl1vmPI=TxhCaR1PCF Date: Tue, 22 Oct 2013 03:36:03 +0000 Subject: [PATCH 011/161] * fixed console host information for Windows 8.1 * automatically detect dbghelp.dll from SDK 8.1 git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5478 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/itemtips.c | 10 +++++++--- 2.x/trunk/ProcessHacker/mainwnd.c | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 5c6fa5482..729dccf9d 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -6,6 +6,7 @@ Process Hacker * FIXED: * Fixed handling of long symbol names * Fixed Run As preventing Windows 8 apps from starting + * Fixed console host information for Windows 8.1 2.31 * NEW/IMPROVED: diff --git a/2.x/trunk/ProcessHacker/itemtips.c b/2.x/trunk/ProcessHacker/itemtips.c index efaddabc9..08e4690d2 100644 --- a/2.x/trunk/ProcessHacker/itemtips.c +++ b/2.x/trunk/ProcessHacker/itemtips.c @@ -348,16 +348,20 @@ PPH_STRING PhGetProcessTooltipText( ); } - if (Process->ConsoleHostProcessId) + if ((ULONG_PTR)Process->ConsoleHostProcessId & ~3) { CLIENT_ID clientId; + PWSTR description = L"Console host"; PPH_STRING clientIdString; - clientId.UniqueProcess = Process->ConsoleHostProcessId; + clientId.UniqueProcess = (HANDLE)((ULONG_PTR)Process->ConsoleHostProcessId & ~3); clientId.UniqueThread = NULL; + if ((ULONG_PTR)Process->ConsoleHostProcessId & 2) + description = L"Console application"; + clientIdString = PhGetClientIdName(&clientId); - PhAppendFormatStringBuilder(¬es, L" Console host: %s\n", clientIdString->Buffer); + PhAppendFormatStringBuilder(¬es, L" %s: %s\n", description, clientIdString->Buffer); PhDereferenceObject(clientIdString); } diff --git a/2.x/trunk/ProcessHacker/mainwnd.c b/2.x/trunk/ProcessHacker/mainwnd.c index 7b6c4f718..f0dfc7fde 100644 --- a/2.x/trunk/ProcessHacker/mainwnd.c +++ b/2.x/trunk/ProcessHacker/mainwnd.c @@ -602,6 +602,24 @@ PPH_STRING PhMwpFindDbghelpPath( if (path) PhDereferenceObject(path); + path = PhGetKnownLocation( +#ifdef _M_IX86 + CSIDL_PROGRAM_FILES, +#else + CSIDL_PROGRAM_FILESX86, +#endif +#ifdef _M_IX86 + L"\\Windows Kits\\8.1\\Debuggers\\x86\\dbghelp.dll" +#else + L"\\Windows Kits\\8.1\\Debuggers\\x64\\dbghelp.dll" +#endif + ); + + if (path && RtlDoesFileExists_U(path->Buffer)) + return path; + if (path) + PhDereferenceObject(path); + return NULL; } From 441f3f210b457418ec129c485ebe01f15e596e36 Mon Sep 17 00:00:00 2001 From: wj32 Date: Tue, 22 Oct 2013 08:11:15 +0000 Subject: [PATCH 012/161] thread stack progress (part 1) git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5479 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/ProcessHacker/thrdstk.c | 137 ++++++++++++++++++++++++------ 2.x/trunk/phlib/include/ph.h | 21 +++++ 2.x/trunk/phlib/include/symprv.h | 6 ++ 2.x/trunk/phlib/symprv.c | 63 ++++++++++++++ 4 files changed, 200 insertions(+), 27 deletions(-) diff --git a/2.x/trunk/ProcessHacker/thrdstk.c b/2.x/trunk/ProcessHacker/thrdstk.c index 84abfaa69..6cc97e4bc 100644 --- a/2.x/trunk/ProcessHacker/thrdstk.c +++ b/2.x/trunk/ProcessHacker/thrdstk.c @@ -25,7 +25,9 @@ #include #include -typedef struct THREAD_STACK_CONTEXT +#define WM_PH_COMPLETED (WM_APP + 301) + +typedef struct _THREAD_STACK_CONTEXT { HANDLE ProcessId; HANDLE ThreadId; @@ -34,10 +36,19 @@ typedef struct THREAD_STACK_CONTEXT PPH_SYMBOL_PROVIDER SymbolProvider; BOOLEAN CustomWalk; - ULONG Index; PPH_LIST List; + PPH_LIST NewList; + HWND ProgressWindowHandle; + NTSTATUS WalkStatus; } THREAD_STACK_CONTEXT, *PTHREAD_STACK_CONTEXT; +typedef struct _THREAD_STACK_ITEM +{ + PH_THREAD_STACK_FRAME StackFrame; + ULONG Index; + PPH_STRING Symbol; +} THREAD_STACK_ITEM, *PTHREAD_STACK_ITEM; + INT_PTR CALLBACK PhpThreadStackDlgProc( __in HWND hwndDlg, __in UINT uMsg, @@ -49,6 +60,17 @@ NTSTATUS PhpRefreshThreadStack( __in PTHREAD_STACK_CONTEXT ThreadStackContext ); +NTSTATUS PhpRefreshThreadStackThreadStart( + __in PVOID Parameter + ); + +INT_PTR CALLBACK PhpThreadStackProgressDlgProc( + __in HWND hwndDlg, + __in UINT uMsg, + __in WPARAM wParam, + __in LPARAM lParam + ); + static RECT MinimumSize = { -1, -1, -1, -1 }; VOID PhShowThreadStackDialog( @@ -99,6 +121,7 @@ VOID PhShowThreadStackDialog( threadStackContext.ThreadHandle = threadHandle; threadStackContext.List = PhCreateList(10); + threadStackContext.NewList = PhCreateList(10); DialogBoxParam( PhInstanceHandle, @@ -108,6 +131,7 @@ VOID PhShowThreadStackDialog( (LPARAM)&threadStackContext ); + PhDereferenceObject(threadStackContext.NewList); PhDereferenceObject(threadStackContext.List); if (threadStackContext.ThreadHandle) @@ -356,6 +380,42 @@ static INT_PTR CALLBACK PhpThreadStackDlgProc( return FALSE; } +static VOID PhpFreeThreadStackItem( + __in PTHREAD_STACK_ITEM StackItem + ) +{ + PhSwapReference(&StackItem->Symbol, NULL); + PhFree(StackItem); +} + +static NTSTATUS PhpRefreshThreadStack( + __in HWND hwnd, + __in PTHREAD_STACK_CONTEXT ThreadStackContext + ) +{ + HANDLE threadHandle; + + if (threadHandle = PhCreateThread(0, PhpRefreshThreadStackThreadStart, ThreadStackContext)) + { + DialogBoxParam( + PhInstanceHandle, + MAKEINTRESOURCE(IDD_PROGRESS), + hwnd, + PhpThreadStackProgressDlgProc, + (LPARAM)ThreadStackContext + ); + NtClose(threadHandle); + + if (NT_SUCCESS(ThreadStackContext->WalkStatus)) + { + } + + return ThreadStackContext->WalkStatus; + } + + return STATUS_UNSUCCESSFUL; +} + static BOOLEAN NTAPI PhpWalkThreadStackCallback( __in PPH_THREAD_STACK_FRAME StackFrame, __in_opt PVOID Context @@ -411,42 +471,33 @@ static BOOLEAN NTAPI PhpWalkThreadStackCallback( return TRUE; } -static NTSTATUS PhpRefreshThreadStack( - __in PTHREAD_STACK_CONTEXT ThreadStackContext +static NTSTATUS PhpRefreshThreadStackThreadStart( + __in PVOID Parameter ) { NTSTATUS status; + PTHREAD_STACK_CONTEXT threadStackContext = Parameter; ULONG i; CLIENT_ID clientId; BOOLEAN defaultWalk; - clientId.UniqueProcess = ThreadStackContext->ProcessId; - clientId.UniqueThread = ThreadStackContext->ThreadId; - - ListView_DeleteAllItems(ThreadStackContext->ListViewHandle); - - for (i = 0; i < ThreadStackContext->List->Count; i++) - PhFree(ThreadStackContext->List->Items[i]); - - PhClearList(ThreadStackContext->List); - - SendMessage(ThreadStackContext->ListViewHandle, WM_SETREDRAW, FALSE, 0); - ThreadStackContext->Index = 0; + clientId.UniqueProcess = threadStackContext->ProcessId; + clientId.UniqueThread = threadStackContext->ThreadId; defaultWalk = TRUE; - if (ThreadStackContext->CustomWalk) + if (threadStackContext->CustomWalk) { PH_PLUGIN_THREAD_STACK_CONTROL control; control.Type = PluginThreadStackWalkStack; - control.UniqueKey = ThreadStackContext; + control.UniqueKey = threadStackContext; control.u.WalkStack.Status = STATUS_UNSUCCESSFUL; - control.u.WalkStack.ThreadHandle = ThreadStackContext->ThreadHandle; - control.u.WalkStack.ProcessHandle = ThreadStackContext->SymbolProvider->ProcessHandle; + control.u.WalkStack.ThreadHandle = threadStackContext->ThreadHandle; + control.u.WalkStack.ProcessHandle = threadStackContext->SymbolProvider->ProcessHandle; control.u.WalkStack.ClientId = &clientId; control.u.WalkStack.Flags = PH_WALK_I386_STACK | PH_WALK_AMD64_STACK | PH_WALK_KERNEL_STACK; control.u.WalkStack.Callback = PhpWalkThreadStackCallback; - control.u.WalkStack.CallbackContext = ThreadStackContext; + control.u.WalkStack.CallbackContext = threadStackContext; PhInvokeCallback(PhGetGeneralCallback(GeneralCallbackThreadStackControl), &control); status = control.u.WalkStack.Status; @@ -457,17 +508,49 @@ static NTSTATUS PhpRefreshThreadStack( if (defaultWalk) { status = PhWalkThreadStack( - ThreadStackContext->ThreadHandle, - ThreadStackContext->SymbolProvider->ProcessHandle, + threadStackContext->ThreadHandle, + threadStackContext->SymbolProvider->ProcessHandle, &clientId, PH_WALK_I386_STACK | PH_WALK_AMD64_STACK | PH_WALK_KERNEL_STACK, PhpWalkThreadStackCallback, - ThreadStackContext + threadStackContext ); } - SendMessage(ThreadStackContext->ListViewHandle, WM_SETREDRAW, TRUE, 0); - InvalidateRect(ThreadStackContext->ListViewHandle, NULL, FALSE); + threadStackContext->WalkStatus = status; - return status; + return STATUS_SUCCESS; +} + +static INT_PTR CALLBACK PhpThreadStackProgressDlgProc( + __in HWND hwndDlg, + __in UINT uMsg, + __in WPARAM wParam, + __in LPARAM lParam + ) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + PTHREAD_STACK_CONTEXT threadStackContext; + + threadStackContext = (PTHREAD_STACK_CONTEXT)lParam; + SetProp(hwndDlg, PhMakeContextAtom(), (HANDLE)threadStackContext); + threadStackContext->ProgressWindowHandle = hwndDlg; + + SetWindowText(hwndDlg, L"Loading stack..."); + } + break; + case WM_DESTROY: + { + RemoveProp(hwndDlg, PhMakeContextAtom()); + } + break; + case WM_PH_COMPLETED: + { + EndDialog(hwndDlg, IDOK); + } + break; + } } diff --git a/2.x/trunk/phlib/include/ph.h b/2.x/trunk/phlib/include/ph.h index bad78ba5b..1663f98d6 100644 --- a/2.x/trunk/phlib/include/ph.h +++ b/2.x/trunk/phlib/include/ph.h @@ -1737,6 +1737,7 @@ typedef struct _PH_SYMBOL_PROVIDER PH_INITONCE InitOnce; #endif PH_AVL_TREE ModulesSet; + PH_CALLBACK EventCallback; } PH_SYMBOL_PROVIDER, *PPH_SYMBOL_PROVIDER; typedef enum _PH_SYMBOL_RESOLVE_LEVEL @@ -1761,6 +1762,26 @@ typedef struct _PH_SYMBOL_LINE_INFORMATION ULONG64 Address; } PH_SYMBOL_LINE_INFORMATION, *PPH_SYMBOL_LINE_INFORMATION; +typedef enum _PH_SYMBOL_EVENT_TYPE +{ + SymbolDeferredSymbolLoadStart = 1, + SymbolDeferredSymbolLoadComplete = 2, + SymbolDeferredSymbolLoadFailure = 3, + SymbolSymbolsUnloaded = 4, + SymbolDeferredSymbolLoadCancel = 7 +} PH_SYMBOL_EVENT_TYPE; + +typedef struct _PH_SYMBOL_EVENT_DATA +{ + PPH_SYMBOL_PROVIDER SymbolProvider; + PH_SYMBOL_EVENT_TYPE Type; + + ULONG64 BaseAddress; + ULONG CheckSum; + ULONG TimeStamp; + PPH_STRING FileName; +} PH_SYMBOL_EVENT_DATA, *PPH_SYMBOL_EVENT_DATA; + BOOLEAN PhSymbolProviderInitialization( VOID ); diff --git a/2.x/trunk/phlib/include/symprv.h b/2.x/trunk/phlib/include/symprv.h index 6b4902866..bc93f3ac3 100644 --- a/2.x/trunk/phlib/include/symprv.h +++ b/2.x/trunk/phlib/include/symprv.h @@ -121,6 +121,12 @@ typedef DWORD64 (WINAPI *_SymGetModuleBase64)( __in DWORD64 dwAddr ); +typedef BOOL (WINAPI *_SymRegisterCallbackW64)( + __in HANDLE hProcess, + __in PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, + __in ULONG64 UserContext + ); + typedef BOOL (WINAPI *_StackWalk64)( __in DWORD MachineType, __in HANDLE hProcess, diff --git a/2.x/trunk/phlib/symprv.c b/2.x/trunk/phlib/symprv.c index a28eda87f..5fa5582b1 100644 --- a/2.x/trunk/phlib/symprv.c +++ b/2.x/trunk/phlib/symprv.c @@ -82,6 +82,7 @@ _SymSetSearchPathW SymSetSearchPathW_I; _SymUnloadModule64 SymUnloadModule64_I; _SymFunctionTableAccess64 SymFunctionTableAccess64_I; _SymGetModuleBase64 SymGetModuleBase64_I; +_SymRegisterCallbackW64 SymRegisterCallbackW64_I; _StackWalk64 StackWalk64_I; _MiniDumpWriteDump MiniDumpWriteDump_I; _SymbolServerGetOptions SymbolServerGetOptions; @@ -138,6 +139,7 @@ VOID PhSymbolProviderDynamicImport( SymUnloadModule64_I = (PVOID)GetProcAddress(dbghelpHandle, "SymUnloadModule64"); SymFunctionTableAccess64_I = (PVOID)GetProcAddress(dbghelpHandle, "SymFunctionTableAccess64"); SymGetModuleBase64_I = (PVOID)GetProcAddress(dbghelpHandle, "SymGetModuleBase64"); + SymRegisterCallbackW64_I = (PVOID)GetProcAddress(dbghelpHandle, "SymRegisterCallbackW64"); StackWalk64_I = (PVOID)GetProcAddress(dbghelpHandle, "StackWalk64"); MiniDumpWriteDump_I = (PVOID)GetProcAddress(dbghelpHandle, "MiniDumpWriteDump"); SymbolServerGetOptions = (PVOID)GetProcAddress(symsrvHandle, "SymbolServerGetOptions"); @@ -164,6 +166,7 @@ PPH_SYMBOL_PROVIDER PhCreateSymbolProvider( InitializeListHead(&symbolProvider->ModulesListHead); PhInitializeQueuedLock(&symbolProvider->ModulesListLock); PhInitializeAvlTree(&symbolProvider->ModulesSet, PhpSymbolModuleCompareFunction); + PhInitializeCallback(&symbolProvider->EventCallback); if (ProcessId) { @@ -230,6 +233,8 @@ VOID NTAPI PhpSymbolProviderDeleteProcedure( PPH_SYMBOL_PROVIDER symbolProvider = (PPH_SYMBOL_PROVIDER)Object; PLIST_ENTRY listEntry; + PhDeleteCallback(&symbolProvider->EventCallback); + if (SymCleanup_I) { PH_LOCK_SYMBOLS(); @@ -255,6 +260,63 @@ VOID NTAPI PhpSymbolProviderDeleteProcedure( if (symbolProvider->IsRealHandle) NtClose(symbolProvider->ProcessHandle); } +NTSTATUS PhpSymbolCallbackWorker( + __in PVOID Parameter + ) +{ + PPH_SYMBOL_EVENT_DATA data = Parameter; + + dprintf("symbol event %d: %S\n", data->Type, data->FileName->Buffer); + PhInvokeCallback(&data->SymbolProvider->EventCallback, data); + PhSwapReference(&data->FileName, NULL); + PhDereferenceObject(data); + + return STATUS_SUCCESS; +} + +BOOL CALLBACK PhpSymbolCallbackFunction( + __in HANDLE hProcess, + __in ULONG ActionCode, + __in_opt ULONG64 CallbackData, + __in_opt ULONG64 UserContext + ) +{ + PPH_SYMBOL_PROVIDER symbolProvider = (PPH_SYMBOL_PROVIDER)UserContext; + PPH_SYMBOL_EVENT_DATA data; + PIMAGEHLP_DEFERRED_SYMBOL_LOADW64 callbackData; + + if (!IsListEmpty(&symbolProvider->EventCallback.ListHead)) + { + switch (ActionCode) + { + case SymbolDeferredSymbolLoadStart: + case SymbolDeferredSymbolLoadComplete: + case SymbolDeferredSymbolLoadFailure: + case SymbolSymbolsUnloaded: + case SymbolDeferredSymbolLoadCancel: + PhCreateAlloc((PVOID *)&data, sizeof(PH_SYMBOL_EVENT_DATA)); + memset(data, 0, sizeof(PH_SYMBOL_EVENT_DATA)); + data->SymbolProvider = symbolProvider; + data->Type = ActionCode; + + if (ActionCode != SymbolSymbolsUnloaded) + { + callbackData = (PIMAGEHLP_DEFERRED_SYMBOL_LOADW64)CallbackData; + data->BaseAddress = callbackData->BaseOfImage; + data->CheckSum = callbackData->CheckSum; + data->TimeStamp = callbackData->TimeDateStamp; + data->FileName = PhCreateString(callbackData->FileName); + } + + PhQueueItemGlobalWorkQueue(PhpSymbolCallbackWorker, data); + + break; + } + } + + return FALSE; +} + VOID PhpRegisterSymbolProvider( __in_opt PPH_SYMBOL_PROVIDER SymbolProvider ) @@ -276,6 +338,7 @@ VOID PhpRegisterSymbolProvider( { PH_LOCK_SYMBOLS(); SymInitialize_I(SymbolProvider->ProcessHandle, NULL, FALSE); + SymRegisterCallbackW64_I(SymbolProvider->ProcessHandle, PhpSymbolCallbackFunction, (ULONG64)SymbolProvider); PH_UNLOCK_SYMBOLS(); SymbolProvider->IsRegistered = TRUE; From 3d05a1fca8ae55b8a33acba061191d30b3e812b2 Mon Sep 17 00:00:00 2001 From: xhmikosr Date: Tue, 22 Oct 2013 09:35:41 +0000 Subject: [PATCH 013/161] Compress images a little more. git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5480 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/img/ad_728x90.png | Bin 706 -> 705 bytes misc/website/websitev2/img/logo_64x64.png | Bin 3099 -> 3098 bytes misc/website/websitev2/img/sflogo.png | Bin 1284 -> 1282 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/misc/website/websitev2/img/ad_728x90.png b/misc/website/websitev2/img/ad_728x90.png index b9ccbf66cdcac5992147c9bcefb915a36e6f7057..1ccf29cc4ce85d0c28d1081d9786ba03798fe620 100644 GIT binary patch delta 601 zcmX@adXRO3aeYMW|FWw8(`No(vFiVwyZ@Cm{tHX}fA{XczUhB2|Np1Y{BP~}zhl?` z^z8pOPHPnzY#A7s+&o{XGVA7o2 z&BRroJ!$8k#q&L-T68z;R;je**>*r~a!RdOPNS{*9y7r$UC|AANTHj@ofkGJ-POU0chKay?>u<}a z-+TUJM|^(0;_hQWi%ccoy?6Wdxjp>qJ)qb3s^5IC|99DEok{D?YL_T>`}WQP^6fph-M;rlR(iW~y_8q*2G(y=e4d8Qe^Tr> z>G7P&`h2fn?vgGB-;F5poj35pB^7d3{Y#p)Sl%CBvhc2j3N0}yz+`njxgN@xNA DS5Ym0 literal 706 zcmeAS@N?(olHy`uVBq!ia0y~yV7dWhM{zI%$*r$0o&{270X`wF{}~wm0|5iae_^Tr z5wZWvs{T)#`G3W#|99^GSJL?J<^TWPyZ@)p{MR@A-`eqi$FBeB+5c^vY!m!n0F89_ zba4!+hI_WM zIgPyA4zNWhG=nGvZ>`dXgCJ4e4F|<;Byi_|DFlzz3@!+i1M+|dfhdqlG~TyKDO&bl zrY>>1!L-|V(($ti+;0>;r&R-u4L0iYtkwn!d;fC(v_~|j(N^vAw3Jmc+YanIlzVDM ziFuRmhTka~Pbc;~-TdsU&$PPLLfa1HOSZ*2bLGkM+};hWWwV!PE?sl-!_O}( z)(dPq5I6bX{YPId?fkqapASB<&FBVG zwdb$bdne}Af3(FVdQ&MBb@03ZoibN~PV diff --git a/misc/website/websitev2/img/logo_64x64.png b/misc/website/websitev2/img/logo_64x64.png index bd50b649709a647c33eeb3e92f81b61df7dcb29f..03528b066301f094f3b9566bbb072a13160220d6 100644 GIT binary patch delta 2363 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 delta 2364 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 Eg2?ua#{d8T delta 827 zcmV-B1H}A-3WN%DUG&h_?D@h`Bofy3rh)>>KYvl=WjMzGaHF)xIjol*3cFTT%YnXPRXQpnqxm zBilE%58i!$jlOTeskIdpkt z(WW8tp@L#eiIZtrr))xm#;EQX!$W?3he`lN&EtGaCzkX7`m>}bd-wXd09lA=rCLe{ zj`LJe5}kp}I5Wplt#Wvrw_$c6sejdh-nEYBwM@$+!B&6u3=*0!9h3Ey8;;V>*zHjV zAOp^z-Bvx|@ce2CFWXn}(#NQ6pL8M;G#Zc8tMSTyQmDQZ`jt{_DsLW2wZK}c#ebt*RG3$4 z1SSCp>BVENY~IBv3w~bci(i>MeE)ZrN$ZZZp1*-LJ7#aSUVzqJu&(a%XkhNP=FfuG z55Ob^eCU_uN4~ Date: Tue, 22 Oct 2013 09:42:56 +0000 Subject: [PATCH 014/161] thread stack progress (part 2) git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5481 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/thrdstk.c | 181 ++++++++++++++++++++++-------- 2 files changed, 138 insertions(+), 44 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 729dccf9d..9bce20e70 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -3,6 +3,7 @@ Process Hacker 2.32 * NEW/IMPROVED: * Updated for Windows 8.1 + * Added progress display for thread stacks * FIXED: * Fixed handling of long symbol names * Fixed Run As preventing Windows 8 apps from starting diff --git a/2.x/trunk/ProcessHacker/thrdstk.c b/2.x/trunk/ProcessHacker/thrdstk.c index 6cc97e4bc..8e95ade2b 100644 --- a/2.x/trunk/ProcessHacker/thrdstk.c +++ b/2.x/trunk/ProcessHacker/thrdstk.c @@ -26,6 +26,7 @@ #include #define WM_PH_COMPLETED (WM_APP + 301) +#define WM_PH_STATUS_UPDATE (WM_APP + 302) typedef struct _THREAD_STACK_CONTEXT { @@ -36,10 +37,13 @@ typedef struct _THREAD_STACK_CONTEXT PPH_SYMBOL_PROVIDER SymbolProvider; BOOLEAN CustomWalk; + BOOLEAN StopWalk; PPH_LIST List; PPH_LIST NewList; HWND ProgressWindowHandle; NTSTATUS WalkStatus; + PPH_STRING StatusMessage; + PH_QUEUED_LOCK StatusLock; } THREAD_STACK_CONTEXT, *PTHREAD_STACK_CONTEXT; typedef struct _THREAD_STACK_ITEM @@ -56,12 +60,13 @@ INT_PTR CALLBACK PhpThreadStackDlgProc( __in LPARAM lParam ); -NTSTATUS PhpRefreshThreadStack( - __in PTHREAD_STACK_CONTEXT ThreadStackContext +VOID PhpFreeThreadStackItem( + __in PTHREAD_STACK_ITEM StackItem ); -NTSTATUS PhpRefreshThreadStackThreadStart( - __in PVOID Parameter +NTSTATUS PhpRefreshThreadStack( + __in HWND hwnd, + __in PTHREAD_STACK_CONTEXT ThreadStackContext ); INT_PTR CALLBACK PhpThreadStackProgressDlgProc( @@ -92,10 +97,10 @@ VOID PhShowThreadStackDialog( return; } + memset(&threadStackContext, 0, sizeof(THREAD_STACK_CONTEXT)); threadStackContext.ProcessId = ProcessId; threadStackContext.ThreadId = ThreadId; threadStackContext.SymbolProvider = SymbolProvider; - threadStackContext.CustomWalk = FALSE; if (!NT_SUCCESS(status = PhOpenThread( &threadHandle, @@ -122,6 +127,7 @@ VOID PhShowThreadStackDialog( threadStackContext.ThreadHandle = threadHandle; threadStackContext.List = PhCreateList(10); threadStackContext.NewList = PhCreateList(10); + PhInitializeQueuedLock(&threadStackContext.StatusLock); DialogBoxParam( PhInstanceHandle, @@ -131,6 +137,7 @@ VOID PhShowThreadStackDialog( (LPARAM)&threadStackContext ); + PhSwapReference(&threadStackContext.StatusMessage, NULL); PhDereferenceObject(threadStackContext.NewList); PhDereferenceObject(threadStackContext.List); @@ -149,6 +156,7 @@ static INT_PTR CALLBACK PhpThreadStackDlgProc( { case WM_INITDIALOG: { + NTSTATUS status; PTHREAD_STACK_CONTEXT threadStackContext; PPH_STRING title; HWND lvHandle; @@ -215,7 +223,12 @@ static INT_PTR CALLBACK PhpThreadStackDlgProc( threadStackContext->CustomWalk = control.u.Initializing.CustomWalk; } - PhpRefreshThreadStack(threadStackContext); + status = PhpRefreshThreadStack(hwndDlg, threadStackContext); + + if (status == STATUS_ABANDONED) + EndDialog(hwndDlg, IDCANCEL); + else if (!NT_SUCCESS(status)) + PhShowStatus(hwndDlg, L"Unable to load the stack", status, 0); } break; case WM_DESTROY: @@ -240,7 +253,7 @@ static INT_PTR CALLBACK PhpThreadStackDlgProc( } for (i = 0; i < threadStackContext->List->Count; i++) - PhFree(threadStackContext->List->Items[i]); + PhpFreeThreadStackItem(threadStackContext->List->Items[i]); PhSaveListViewColumnsToSetting(L"ThreadStackListViewColumns", GetDlgItem(hwndDlg, IDC_LIST)); PhSaveWindowPlacementToSetting(NULL, L"ThreadStackWindowSize", hwndDlg); @@ -261,9 +274,15 @@ static INT_PTR CALLBACK PhpThreadStackDlgProc( break; case IDC_REFRESH: { - PhpRefreshThreadStack( + NTSTATUS status; + + if (!NT_SUCCESS(status = PhpRefreshThreadStack( + hwndDlg, (PTHREAD_STACK_CONTEXT)GetProp(hwndDlg, PhMakeContextAtom()) - ); + ))) + { + PhShowStatus(hwndDlg, L"Unable to load the stack", status, 0); + } } break; case IDC_COPY: @@ -299,14 +318,16 @@ static INT_PTR CALLBACK PhpThreadStackDlgProc( if (header->hwndFrom == lvHandle) { + PTHREAD_STACK_ITEM stackItem; PPH_THREAD_STACK_FRAME stackFrame; - if (PhGetListViewItemParam(lvHandle, getInfoTip->iItem, &stackFrame)) + if (PhGetListViewItemParam(lvHandle, getInfoTip->iItem, &stackItem)) { PH_STRING_BUILDER stringBuilder; PPH_STRING fileName; PH_SYMBOL_LINE_INFORMATION lineInfo; + stackFrame = &stackItem->StackFrame; PhInitializeStringBuilder(&stringBuilder, 40); // There are no params for kernel-mode stack traces. @@ -393,27 +414,57 @@ static NTSTATUS PhpRefreshThreadStack( __in PTHREAD_STACK_CONTEXT ThreadStackContext ) { - HANDLE threadHandle; + ULONG i; + + ThreadStackContext->StopWalk = FALSE; + PhSwapReference2(&ThreadStackContext->StatusMessage, PhCreateString(L"Loading stack...")); + + DialogBoxParam( + PhInstanceHandle, + MAKEINTRESOURCE(IDD_PROGRESS), + hwnd, + PhpThreadStackProgressDlgProc, + (LPARAM)ThreadStackContext + ); - if (threadHandle = PhCreateThread(0, PhpRefreshThreadStackThreadStart, ThreadStackContext)) + if (!ThreadStackContext->StopWalk && NT_SUCCESS(ThreadStackContext->WalkStatus)) { - DialogBoxParam( - PhInstanceHandle, - MAKEINTRESOURCE(IDD_PROGRESS), - hwnd, - PhpThreadStackProgressDlgProc, - (LPARAM)ThreadStackContext - ); - NtClose(threadHandle); + for (i = 0; i < ThreadStackContext->List->Count; i++) + PhpFreeThreadStackItem(ThreadStackContext->List->Items[i]); + + PhDereferenceObject(ThreadStackContext->List); + ThreadStackContext->List = ThreadStackContext->NewList; + ThreadStackContext->NewList = PhCreateList(10); - if (NT_SUCCESS(ThreadStackContext->WalkStatus)) + ListView_DeleteAllItems(ThreadStackContext->ListViewHandle); + SendMessage(ThreadStackContext->ListViewHandle, WM_SETREDRAW, FALSE, 0); + + for (i = 0; i < ThreadStackContext->List->Count; i++) { + PTHREAD_STACK_ITEM item = ThreadStackContext->List->Items[i]; + INT lvItemIndex; + WCHAR integerString[PH_INT32_STR_LEN_1]; + + PhPrintUInt32(integerString, item->Index); + lvItemIndex = PhAddListViewItem(ThreadStackContext->ListViewHandle, MAXINT, integerString, item); + PhSetListViewSubItem(ThreadStackContext->ListViewHandle, lvItemIndex, 1, PhGetStringOrDefault(item->Symbol, L"???")); } - return ThreadStackContext->WalkStatus; + SendMessage(ThreadStackContext->ListViewHandle, WM_SETREDRAW, TRUE, 0); + InvalidateRect(ThreadStackContext->ListViewHandle, NULL, FALSE); } + else + { + for (i = 0; i < ThreadStackContext->NewList->Count; i++) + PhpFreeThreadStackItem(ThreadStackContext->NewList->Items[i]); - return STATUS_UNSUCCESSFUL; + PhClearList(ThreadStackContext->NewList); + } + + if (ThreadStackContext->StopWalk) + return STATUS_ABANDONED; + + return ThreadStackContext->WalkStatus; } static BOOLEAN NTAPI PhpWalkThreadStackCallback( @@ -423,9 +474,16 @@ static BOOLEAN NTAPI PhpWalkThreadStackCallback( { PTHREAD_STACK_CONTEXT threadStackContext = (PTHREAD_STACK_CONTEXT)Context; PPH_STRING symbol; - INT lvItemIndex; - WCHAR integerString[PH_INT32_STR_LEN_1]; - PPH_THREAD_STACK_FRAME stackFrame; + PTHREAD_STACK_ITEM item; + + if (threadStackContext->StopWalk) + return FALSE; + + PhAcquireQueuedLockExclusive(&threadStackContext->StatusLock); + PhSwapReference2(&threadStackContext->StatusMessage, + PhFormatString(L"Processing frame %u...", threadStackContext->NewList->Count)); + PhReleaseQueuedLockExclusive(&threadStackContext->StatusLock); + PostMessage(threadStackContext->ProgressWindowHandle, WM_PH_STATUS_UPDATE, 0, 0); symbol = PhGetSymbolFromAddress( threadStackContext->SymbolProvider, @@ -436,12 +494,9 @@ static BOOLEAN NTAPI PhpWalkThreadStackCallback( NULL ); - PhPrintUInt32(integerString, threadStackContext->Index++); - - stackFrame = PhAllocateCopy(StackFrame, sizeof(PH_THREAD_STACK_FRAME)); - PhAddItemList(threadStackContext->List, stackFrame); - lvItemIndex = PhAddListViewItem(threadStackContext->ListViewHandle, MAXINT, - integerString, stackFrame); + item = PhAllocate(sizeof(THREAD_STACK_ITEM)); + item->StackFrame = *StackFrame; + item->Index = threadStackContext->NewList->Count; if (PhPluginsEnabled) { @@ -456,17 +511,8 @@ static BOOLEAN NTAPI PhpWalkThreadStackCallback( symbol = control.u.ResolveSymbol.Symbol; } - if (symbol) - { - PhSetListViewSubItem(threadStackContext->ListViewHandle, lvItemIndex, 1, - symbol->Buffer); - PhDereferenceObject(symbol); - } - else - { - PhSetListViewSubItem(threadStackContext->ListViewHandle, lvItemIndex, 1, - L"???"); - } + item->Symbol = symbol; + PhAddItemList(threadStackContext->NewList, item); return TRUE; } @@ -477,7 +523,6 @@ static NTSTATUS PhpRefreshThreadStackThreadStart( { NTSTATUS status; PTHREAD_STACK_CONTEXT threadStackContext = Parameter; - ULONG i; CLIENT_ID clientId; BOOLEAN defaultWalk; @@ -517,7 +562,11 @@ static NTSTATUS PhpRefreshThreadStackThreadStart( ); } + if (threadStackContext->NewList->Count != 0) + status = STATUS_SUCCESS; + threadStackContext->WalkStatus = status; + PostMessage(threadStackContext->ProgressWindowHandle, WM_PH_COMPLETED, 0, 0); return STATUS_SUCCESS; } @@ -534,11 +583,24 @@ static INT_PTR CALLBACK PhpThreadStackProgressDlgProc( case WM_INITDIALOG: { PTHREAD_STACK_CONTEXT threadStackContext; + HANDLE threadHandle; threadStackContext = (PTHREAD_STACK_CONTEXT)lParam; SetProp(hwndDlg, PhMakeContextAtom(), (HANDLE)threadStackContext); threadStackContext->ProgressWindowHandle = hwndDlg; + if (threadHandle = PhCreateThread(0, PhpRefreshThreadStackThreadStart, threadStackContext)) + { + NtClose(threadHandle); + } + else + { + threadStackContext->WalkStatus = STATUS_UNSUCCESSFUL; + EndDialog(hwndDlg, IDOK); + break; + } + + PhCenterWindow(hwndDlg, GetParent(hwndDlg)); SetWindowText(hwndDlg, L"Loading stack..."); } break; @@ -547,10 +609,41 @@ static INT_PTR CALLBACK PhpThreadStackProgressDlgProc( RemoveProp(hwndDlg, PhMakeContextAtom()); } break; + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDCANCEL: + { + PTHREAD_STACK_CONTEXT threadStackContext = (PTHREAD_STACK_CONTEXT)GetProp(hwndDlg, PhMakeContextAtom()); + + EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), FALSE); + threadStackContext->StopWalk = TRUE; + } + break; + } + } + break; case WM_PH_COMPLETED: { EndDialog(hwndDlg, IDOK); } break; + case WM_PH_STATUS_UPDATE: + { + PTHREAD_STACK_CONTEXT threadStackContext = (PTHREAD_STACK_CONTEXT)GetProp(hwndDlg, PhMakeContextAtom()); + PPH_STRING message; + + PhAcquireQueuedLockExclusive(&threadStackContext->StatusLock); + message = threadStackContext->StatusMessage; + PhReferenceObject(message); + PhReleaseQueuedLockExclusive(&threadStackContext->StatusLock); + + SetDlgItemText(hwndDlg, IDC_PROGRESSTEXT, message->Buffer); + PhDereferenceObject(message); + } + break; } + + return 0; } From fc4b65af2532684b0a00d51c4f08beb68ff96aaa Mon Sep 17 00:00:00 2001 From: wj32 Date: Tue, 22 Oct 2013 09:49:04 +0000 Subject: [PATCH 015/161] updated x86 release driver git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5482 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- .../bin-signed/i386/kprocesshacker.sys | Bin 26624 -> 26880 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/2.x/trunk/KProcessHacker/bin-signed/i386/kprocesshacker.sys b/2.x/trunk/KProcessHacker/bin-signed/i386/kprocesshacker.sys index 94ca85330e9ca7bd506064da632cd50788c64e90..7d504d9d7e449dc6e0c6aed3b89cce8b2674aac6 100644 GIT binary patch delta 5678 zcmd^DdstM}+Fxrkz<>;cT!)*YfOtXNd-mRQ+cUFKMDeZ&ctj(l%tF)2KvVKxng)y_Plbw15KrC-EoQ2XBtn_S z*hP|~OsB?~Ae0lyN@Y6!oV=vWNPBfW47Hf?dr{XM?DhHnGMtyRD_1b1&16p45az%b z@^n}d^O!`og(aE7BzSTurcWx>H79-#Jn0W`jtp%x?zX-1m$p0;xgM6r$QBY4{t#0t zlBdFxa4UH+e7Ne=AcQ&>yKcuqBzMSt$~Y!wAo)H#oiSyQh<>R|S&DZ=zm2$GS`tPz z4faHr#Xy=PWNaXzs#~P|Srf00Lk#zy??e zSPys=a1782=mIF`A*2E10LIQkPBa_HGQfJkZa@>D70@*spt#H3g`laEP%d%Y(N2EKA-|n1=s?31MnW;8^9evY$-xROD7^^0x}g)3a|sJ0lNT) z0cQbM0XG3{5Kub=^Z`g+pkjS>Lx{d`q#&k=`+6x@(`I4m*8w2h0*r_|9WOIdImswDF+V%C?BWAXcmC-b0EJ9@Hsq26##1g z3gpiL&WISr0I2;ZDg%7B4x{-1YNusr@cEMcgc`0u!+!#eZaqeS*OT73_~;@7M)w0~ zm&ZUl4Wu_VKDrg?m4La-h|%Llnxn2>!e}pm_7*J|sWcuURqr6+pX}f?NWCi}+&WqEm7)8V;asb4O!j8%=uS0Oc=&d@aDa@feBYY4_qaKsNwrm-Pi0 zZ3R&N8`zY<=|y!amjoo$jT12%51@Pv$PEGBG6|!vNKZm?$OF@0gP2B=G)XZhr$eX! z+PMg}q}ekt8K{Yi{sj1!0BT=Uh|%Ig8dK`j>fn{hOete3ipctuz0A}iBBv&V?uP!h_#(0(H8JEZ z;2pn^%G7+klQgEXaKDi{c+gAKoCcqmnuf{;I!1;fU@x%81etXxuU z1_zEWo?vy23F_+V#_F0) zun26{V#st-Fhcyr=HN=`&4X3Cp{|zbH?$Y4tF?Z@*uz}CLF%BI3y?Rx87I4Wc#fMlILj|T7h}GJFm^*bP+#&bsN5I@S zG3|c|vN?FV{|T5T*!Sr)IUcj^qft(T5c(ps!uY|kC~C|E4~{1{1`pAxt2@EiHytbe z1JXI~2G(hJbqA?yTA;aaoEE=ly0&C;9ulD|X2TzkC_!rurX}mEWfdKjmX=n~U-PEm zds26+XoB}9=T^}K+^Mtu_aeC0Plnst)X{Kn3eJT)<{LU=Rs_Rpcp}urz?-x^JwCGv z8k&RYJp}^v#pOoBe00^^s*G}3Xt2l;+%b-Pkv^1}T1ZPSGE_~Y>I+mo46DCBo2qWAZl$V$s;j8FlByY0 zeHhew0ochux3oI&twFT~AG>6TAXN;@cvOJ=0C|Q`vGS6Qn8#7~>Q&-7r znOY|ejP4))5h^llRk1Mex$k{G&lIJnzo*gF-tBQjxE-f!muY^zklc{o-1X|Vet4*p`_gjkm+8&g>lowWfslKL!TTHj2B+7@TQstdN+hhQ|_7gqrD zNOx=76>=x5ntAd&vS#QpTuMd{8-^!)A09RsGmm`heQx-pm^pZPUv>zN|E1mMYfKAN zNw5u#1II75la!G=m`A@PM@LpBHhv8~Vgs@Hzb+*nhq9#OOH!EgAoG4ZIg-=DtkjX( zQ9t7xvYOT7AILUNLq2Bh%tMz*9ybRw-ff)B#1>wMN}aTG9u?hdY6WaNT;lEGzsLHY zzW^U8Xc(NU{t4I(XR38@ep2xmZ2}|+7)=rJ-TI{2F3>RF_}m+*gA~4Rg@*&htI*g` zJhVOAN`~vtGk4AtY=~iAK2PEeZMYw~ZivGInP<#_`#R&mkP`luQOxigGQg1Tq~Anj z4?TDU4qlz}Y>Vh>yx!vTx%0c>CqjouMeFYB;q9EON3dtRdaU*=SC82q>*}%C)vg}d z@t&tR0+yJsr86F8g0kXncmAEuexSj0`&vNp`_n_%@jI+u8=Jf-9hZq_)foaON?W8&G0$bH;4YC)I22+AJ-7*d{J3b~4TY2VR zACsNd6g-L?wWi|%!R(IrSy4H6N@)H;WOdbiSnb4G;A;;&iBEPJ@WYS*^V%`cZ0Zf`TZZC!3h zcg-#PxAgsm9hP^52MW>J`KYT~uot?z&Gsqq9@`6C-Bw4YFYW_a#QZ5^zEZvUgnP- zN}BRA@p1BF-U;TNX7cvf5zJd3crT5u!wFL%yt_3$4GU)jEy2wu@8)suV`lmLWL`lr zvtcaRS5V44@t!w&f(hmmnpmtmG1n0hH82oCYEy!%ck6%n>H4S4$MD0ySrEj)tMO^;#Dz6;7uQZl0? ze&D-*h6PbAqkWr>kj5DonNJUs9fhwje>?0QH}e<92}e9Qb5w0sWp0wc{w%Xu-9^P4w9G0{q|M?xk3WP((ERa=gcu12zP< zd#{b7l>gs<<{JL5KXbifW`~60cJG9R4=SANKZkF+!p+LKq_y2!%qa@SO0X@QU!M zkR+N#=Qy!MEER3yQgMY?DLx~5#OKAW;x6%Z(JLMl8^yEYk79&wh;Fv-LEQ>no9;W^ z^ZJ+dZ|c4J&-H1BY{LY@6NaY@HHP(uZHA>rpK+MUVwzx@XR0&(Zt5o`NNG}~^bhH< zbW!?A3Nt60r#fJEr>q&WAm_>p;Dg@2tt3o{=lRL%1=< zm|`4joNk0L{#ky3-^ITRS%&B}`hofk{Ybr_-}`hV{vTLYLxT{IrD+hf6%Zr}ckO*a0}Ael;EqdNI>r}?(;brxNkbYOvGql* zjH3n>AIXbvk`R5kU|fQ@;DQEUVl;|Ab)sp4Pl?V`h)U0?rd{%V^Vj@4_xpZ*PMuR# z=bT^Ft$S~m{tcJ5;2p)xz)?T^Z36ON*ARny;~-Q@Es;IOLxp4=lM-Y@s8ohfu8TA> zgMwNL5i(If`IU*0qqzvpAfdfJ#~+b>y;6e14d97~0S59*uYtj((799rC?rZ*zaTUV zyuIjHv#f9E9XV()9tBX#d|4Xfi6v`gNq9xw9@%UrM#Cf2_7X&PJ(4*VcpcSV$0wdM z92puIt7~MzcNL~`JqmGXe7-Ndj_tI^{tR#(@w@u|&Q+dH-Vc4L~L#WH4@kxUI5#Qb9z zDGQ2YJ~NQbL2(8v@X+=LOh+ohDh@yKkMt$@p#^+-Pko>M&i9U<{2HWY93~PO{2H@M zB<}~u;UQ#Wa9U`_0EF7-xgJG9CXdM+MKtqHKk{>MB2%46LV71Kr~B5u+ zXt2k+%qr3pV#O*F82W%x>kaLvxE+g;SAs_JOJk|c{!$SY-@nvK#b3knsE~(CRG7kN zf~fmAd_H!rD?+FmK(F#C2vq@U0rh}pz(qg@Krt1e2*5yq1uy|H8(;^N1F8YL0L=go zpc4=>4WU5*3!o5C3|Il!0H_5Vorav~A}Aezkm(4e0!9D|0mTsXeUMdvdO$Pa7T_L0 zHUptJfDTXyC8EFXl?M}x?wsJMR9 zQZTXs=uR7yijfGQ`aF@#O5MoR$H+$SBQ{$y-)jMJ2X(O3YrUIuyFuODS$Ab{Gx;4nG}pt^y_Xf%N8-+*lK z>sbOu1psQdi5R^DpnAT9(L4av4}om->y(NHueYz4D%3ejgV7WK)$f9Qq9NVU%80ME z7@Yu6^97JMwWK>r8DY|4Gzvh?r$PRxqcv)}3>XC(d(3VVMjHXN3lB2WuO9^eX@8%K zU~4r|E)zvFM#BNLyVU}u0I0qTY>fc8h&L)aVyP9QQULYs$i(PSCh1lxBhrUqWCBq0 zevl`J`SOe%j!_DLnm2>|d^oKtEj$~eegJBY8-Y3Z?TX*N5NxlHpxq1VK|Sv8 z(l`=G2hi>;NDF{ov`yt=zohLYxfs0%pn5&X<9zn-3t5l^ zB2pVWO)>6P=Kh_r-(=Mdh`Wi`uHpK7r8Rxw=!s?{fm#`ArkC4W;J)p;t=a~+Lvs9l zraGUjir>kU=M!r}OyCOWZyS?OW+uc2tODJ$kd!23<5JR?z{2nSgnm^dz%bEPpHDRXGVmI*pkG!W?6_0tE|$5vGna+B&mO)mC;R&)=g)(~ z(jkQH&FMCV+NhoqwpZc4w7_`U9<;z1YKH)hC~z~>(m!nPNn_|@=w^=^>1t3LyO-{( zPi9cVtm#EF8x_c%BdZLZL4^JV12R=LYB*|zhIZ0ZYAB7gjfTiC4BIQ&$>IJnynPbn ze;%H2!sRCU4DboCn8y2I<;Upbs~d-vAMh!RJ;>GFE3Bfn7YSCU=Pm~0qVQ==@+=sV z1Ys(pb3ogNP&jImCxN=cXG{gH?IC@9buwWUIWWpLg+??yjY!JW(O6CXL!B}2Ds)@D z0-;AX`>HxFSAz+P z8vvqah;M-C`_;iO?99kza#*vs0$t`%y7#>G`{8(=RW$vG|K=>T%?5Lmoc_i`%HHVA z2w=FQ;z3Ec%S?wLhum|3EKEve$|sSvNpCZKej~k;M?0y{vNX(gssO4z28TsWI9P1| zNt=71X`2gLjRI_*&uCLen}{|y&}IiLWK9TdR?=n*ZK`PVUD~XrO&M*z4$Yb<(4J-t z$H_K`twO7F&bYdQmMPrX3U_8ld!(z=yfkE+g8UFdnxLaEH=E!PVupD|-kuFAZD} zwnv8BdoOUquUuYF4|MWy&>Vb$Oik&lQ@}_#(^g*eIuxGMaImdBGJR%acu#)Ki&AaX zG{Ff_l5n|aO3Tu|`h;-uMamj{mY7rZ>Yl|2w4EA+QM=rBD;c8+-sl`yN_to_H_7_c zawhr~i649jcaqD42jg3H^0a}NQT$Xl_~j*-nRuga(~tnH{P4Qh+o<+aBid4wu>~+tc#>-*kE!_b46Kp0ml0oT%@ugCAd>B zkfYl3G3$SL?rL5XWlN<#(+^~a?o!OB=b!s}N)sOFr6{sZpN^wQi#`drh1%&U~2L5N0` zf0>5Zs%Z`5&eheL=VK=KEQz)XOwm~~${LS zQFH?Cs*XxWXT<~it*2x-g8ilb(4I$W5h)`Xz=%B!2yz@EEw3bzh^!>C&k#(a2+%F&!t#xdqJe zS4c^25tDhWt~J+&nRQuY#OV3VO6VC8QNXD4O%*dm4o5yrvW^n`A zFm4&XPr}C+%u4flUciFloMW-;89QCuV53&jE5a@ z+tlz*<*HS~k;h2zl!S$Jo*8JfJ_=4RDoc%b;Na`;pUi2%G{ ztEHbWV0-aeo1yss{xPWgzkUqXHBJc##Ix&8&RQsQx~-e6Tdmuz4c0T(2Ueh14Ii9v zU?4V_jbaD0Ls@~fu*2CLb~R zO=s7Y>DK7B=yvD=^zr&sy`<07PtzCcOZ1ickMv*a59rV6`x}NBw1#PhV#5c9)rQT6 zorYFJno(nX9XQxx^cWu+6{cv@9MeA26H}^rp7~AlO>>ty%F^HRu4ScVy=Ax4a?YZ) z7Fhpe{fbtfi4c98{*G;D6`YcLgImT`aR1I#!^R2Wv-v!}h<}Y=#(%(Hwctkue-WM~avC;?9dTAHbFW2Ni^`C2g(sXF% zY8_hV8tup0`&y(6*CpyCU8XKqH&OSlZaGx`8B~5q*Q~p$d#LNJAFh9_A7HQ;X2N>E zYgl2ZGSnKT8=b~g#y!Sn<3`gd(|yx4^AfY$yu;jTzH5%Q%&@#^dE3%t`7g^ui_%(V zt+6&+Z_^?t`07L)Yi9E~_I36vxQ#klGnWhNyo}q=wR6F6gN%jy;w*oOzsD Date: Tue, 22 Oct 2013 09:56:20 +0000 Subject: [PATCH 016/161] updated HACKING.txt git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5483 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/HACKING.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2.x/trunk/HACKING.txt b/2.x/trunk/HACKING.txt index 1130f5561..02ccd20e8 100644 --- a/2.x/trunk/HACKING.txt +++ b/2.x/trunk/HACKING.txt @@ -2,7 +2,7 @@ Process Hacker must be built using a Microsoft C compiler. Do not attempt to use any other compiler or be prepared to spend a long time trying to fix things. The only tested -IDE is Visual Studio 2012. Note that +IDE is Visual Studio 2013. Note that "Text Editor > C/C++ > Advanced > Disable Error Reporting" should be set to workaround the fact that IntelliSense thinks all C code is C++. From 62809f6435310fe15f1f9cdccb0fc53a0b0678e4 Mon Sep 17 00:00:00 2001 From: wj32 Date: Tue, 22 Oct 2013 10:42:07 +0000 Subject: [PATCH 017/161] fixing CPU frequency on Windows 8.1 git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5484 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/ProcessHacker/sysinfo.c | 29 +++++++++++++++++++++++------ 2.x/trunk/phlib/include/ntexapi.h | 2 ++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/2.x/trunk/ProcessHacker/sysinfo.c b/2.x/trunk/ProcessHacker/sysinfo.c index 288a6ccf1..f22c1cdc3 100644 --- a/2.x/trunk/ProcessHacker/sysinfo.c +++ b/2.x/trunk/ProcessHacker/sysinfo.c @@ -2735,8 +2735,12 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( __out DOUBLE *Fraction ) { - PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION differences; + ULONG stateSize; + ULONG hitcountSize; + PVOID differences; PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION stateDistribution; + PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION stateDifference; + PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT hitcount; ULONG i; ULONG j; DOUBLE count; @@ -2747,11 +2751,18 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( if (CurrentPerformanceDistribution->ProcessorCount != NumberOfProcessors || PreviousPerformanceDistribution->ProcessorCount != NumberOfProcessors) return FALSE; - differences = PhAllocate((FIELD_OFFSET(SYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION, States) + sizeof(SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT) * 2) * NumberOfProcessors); + stateSize = FIELD_OFFSET(SYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION, States) + sizeof(SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT) * 2; + hitcountSize = sizeof(SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT); + + if (WindowsVersion <= WINDOWS_8) + hitcountSize = 8; + + differences = PhAllocate(stateSize * NumberOfProcessors); for (i = 0; i < NumberOfProcessors; i++) { stateDistribution = (PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION)((PCHAR)CurrentPerformanceDistribution + CurrentPerformanceDistribution->Offsets[i]); + stateDifference = (PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION)((PCHAR)differences + stateSize * i); if (stateDistribution->StateCount != 2) { @@ -2761,13 +2772,16 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( for (j = 0; j < stateDistribution->StateCount; j++) { - differences[i].States[j] = stateDistribution->States[j]; + hitcount = (PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT)((PCHAR)stateDistribution->States + hitcountSize * j); + stateDifference->States[j].Hits = hitcount->Hits; + stateDifference->States[j].PercentFrequency = hitcount->PercentFrequency; } } for (i = 0; i < NumberOfProcessors; i++) { stateDistribution = (PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION)((PCHAR)PreviousPerformanceDistribution + PreviousPerformanceDistribution->Offsets[i]); + stateDifference = (PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION)((PCHAR)differences + stateSize * i); if (stateDistribution->StateCount != 2) { @@ -2777,7 +2791,8 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( for (j = 0; j < stateDistribution->StateCount; j++) { - differences[i].States[j].Hits -= stateDistribution->States[j].Hits; + hitcount = (PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT)((PCHAR)stateDistribution->States + hitcountSize * j); + stateDifference->States[j].Hits -= hitcount->Hits; } } @@ -2788,10 +2803,12 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( for (i = 0; i < NumberOfProcessors; i++) { + stateDifference = (PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION)((PCHAR)differences + stateSize * i); + for (j = 0; j < 2; j++) { - count += differences[i].States[j].Hits; - total += differences[i].States[j].Hits * differences[i].States[j].PercentFrequency; + count += stateDifference->States[j].Hits; + total += stateDifference->States[j].Hits * stateDifference->States[j].PercentFrequency; } } diff --git a/2.x/trunk/phlib/include/ntexapi.h b/2.x/trunk/phlib/include/ntexapi.h index 21c01d4a1..2a17251f4 100644 --- a/2.x/trunk/phlib/include/ntexapi.h +++ b/2.x/trunk/phlib/include/ntexapi.h @@ -1547,6 +1547,8 @@ typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT { ULONG Hits; UCHAR PercentFrequency; + ULONG Reserved1; // rev + ULONG Reserved2; // rev } SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT, *PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT; // private From 986cb05266852e6bad1b20ca07c3cdbad3464c87 Mon Sep 17 00:00:00 2001 From: xhmikosr Date: Tue, 22 Oct 2013 18:05:15 +0000 Subject: [PATCH 018/161] Clean up project files. * remove the obsolete _ProjectFileVersion property * remove EnableEnhancedInstructionSet for Debug and x64 configurations (x64 is always SSE2) * remove unused Midl properties git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5485 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/ProcessHacker/ProcessHacker.vcxproj | 10 ---------- 2.x/trunk/phlib/phlib.vcxproj | 10 ---------- .../AtomTablePlugin/AtomTablePlugin.vcxproj | 4 ---- .../plugins-extra/AvgCpuPlugin/AvgCpuPlugin.vcxproj | 2 -- .../DnsCachePlugin/DnsCachePlugin.vcxproj | 4 ---- .../plugins-extra/HexPidPlugin/HexPidPlugin.vcxproj | 2 -- .../ROTViewerPlugin/ROTViewerPlugin.vcxproj | 4 ---- .../SetCriticalPlugin/SetCriticalPlugin.vcxproj | 1 - 2.x/trunk/plugins/DotNetTools/DotNetTools.vcxproj | 1 - .../ExtendedNotifications.vcxproj | 1 - .../plugins/ExtendedServices/ExtendedServices.vcxproj | 1 - 2.x/trunk/plugins/ExtendedTools/ExtendedTools.vcxproj | 1 - 2.x/trunk/plugins/NetworkTools/NetworkTools.vcxproj | 1 - 2.x/trunk/plugins/OnlineChecks/OnlineChecks.vcxproj | 1 - 2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj | 1 - 2.x/trunk/plugins/SbieSupport/SbieSupport.vcxproj | 1 - 2.x/trunk/plugins/ToolStatus/ToolStatus.vcxproj | 1 - 2.x/trunk/plugins/Updater/Updater.vcxproj | 1 - .../plugins/WindowExplorer/WindowExplorer.vcxproj | 1 - 2.x/trunk/tests/phlib-test/phlib-test.vcxproj | 1 - 2.x/trunk/tools/fiin/fiin.vcxproj | 7 ------- 2.x/trunk/tools/fixlib/fixlib.vcxproj | 1 - 2.x/trunk/tools/peview/peview.vcxproj | 10 ---------- 23 files changed, 67 deletions(-) diff --git a/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj b/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj index ebc9db7a9..851b6c69c 100644 --- a/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj +++ b/2.x/trunk/ProcessHacker/ProcessHacker.vcxproj @@ -63,7 +63,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)bin\$(Configuration)$(PlatformArchitecture)\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ false @@ -93,7 +92,6 @@ StdCall true true - StreamingSIMDExtensions noarg.obj;noenv.obj;ntdll.lib;winsta.lib;comctl32.lib;version.lib;%(AdditionalDependencies) @@ -111,9 +109,6 @@ - - X64 - Disabled ../phlib/include;include;%(AdditionalIncludeDirectories) @@ -125,7 +120,6 @@ StdCall true true - NotSet noarg.obj;noenv.obj;ntdll.lib;winsta.lib;comctl32.lib;version.lib;%(AdditionalDependencies) @@ -178,9 +172,6 @@ - - X64 - MaxSpeed true @@ -195,7 +186,6 @@ StdCall true true - NotSet noarg.obj;noenv.obj;ntdll.lib;winsta.lib;comctl32.lib;version.lib;%(AdditionalDependencies) diff --git a/2.x/trunk/phlib/phlib.vcxproj b/2.x/trunk/phlib/phlib.vcxproj index 56183a592..ac4d4a08d 100644 --- a/2.x/trunk/phlib/phlib.vcxproj +++ b/2.x/trunk/phlib/phlib.vcxproj @@ -63,7 +63,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)bin\$(Configuration)$(PlatformArchitecture)\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ $(ProjectDir)bin\$(Configuration)$(PlatformArchitecture)\ @@ -86,13 +85,9 @@ StdCall true true - StreamingSIMDExtensions - - X64 - Disabled include;%(AdditionalIncludeDirectories) @@ -105,7 +100,6 @@ StdCall true true - NotSet @@ -127,9 +121,6 @@ - - X64 - MaxSpeed true @@ -144,7 +135,6 @@ StdCall true true - NotSet diff --git a/2.x/trunk/plugins-extra/AtomTablePlugin/AtomTablePlugin.vcxproj b/2.x/trunk/plugins-extra/AtomTablePlugin/AtomTablePlugin.vcxproj index 0d2f8c95f..fb80c57c0 100644 --- a/2.x/trunk/plugins-extra/AtomTablePlugin/AtomTablePlugin.vcxproj +++ b/2.x/trunk/plugins-extra/AtomTablePlugin/AtomTablePlugin.vcxproj @@ -64,7 +64,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true @@ -90,7 +89,6 @@ ProgramDatabase StdCall true - StreamingSIMDExtensions ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) @@ -111,7 +109,6 @@ ProgramDatabase StdCall true - NotSet ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) @@ -158,7 +155,6 @@ ProgramDatabase StdCall true - NotSet ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) diff --git a/2.x/trunk/plugins-extra/AvgCpuPlugin/AvgCpuPlugin.vcxproj b/2.x/trunk/plugins-extra/AvgCpuPlugin/AvgCpuPlugin.vcxproj index 773e7655f..970b4f2bc 100644 --- a/2.x/trunk/plugins-extra/AvgCpuPlugin/AvgCpuPlugin.vcxproj +++ b/2.x/trunk/plugins-extra/AvgCpuPlugin/AvgCpuPlugin.vcxproj @@ -95,7 +95,6 @@ Disabled MultiThreadedDebugDLL StdCall - StreamingSIMDExtensions ../../sdk/include;%(AdditionalIncludeDirectories) @@ -111,7 +110,6 @@ ../../sdk/include MultiThreadedDebug StdCall - NotSet true diff --git a/2.x/trunk/plugins-extra/DnsCachePlugin/DnsCachePlugin.vcxproj b/2.x/trunk/plugins-extra/DnsCachePlugin/DnsCachePlugin.vcxproj index 6b596bebe..5268c0dbe 100644 --- a/2.x/trunk/plugins-extra/DnsCachePlugin/DnsCachePlugin.vcxproj +++ b/2.x/trunk/plugins-extra/DnsCachePlugin/DnsCachePlugin.vcxproj @@ -64,7 +64,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true @@ -90,7 +89,6 @@ ProgramDatabase StdCall true - StreamingSIMDExtensions ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) @@ -111,7 +109,6 @@ ProgramDatabase StdCall true - NotSet ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) @@ -158,7 +155,6 @@ ProgramDatabase StdCall true - NotSet ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) diff --git a/2.x/trunk/plugins-extra/HexPidPlugin/HexPidPlugin.vcxproj b/2.x/trunk/plugins-extra/HexPidPlugin/HexPidPlugin.vcxproj index a6d7530b0..b802cf5c0 100644 --- a/2.x/trunk/plugins-extra/HexPidPlugin/HexPidPlugin.vcxproj +++ b/2.x/trunk/plugins-extra/HexPidPlugin/HexPidPlugin.vcxproj @@ -96,7 +96,6 @@ ../../sdk/include;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL StdCall - StreamingSIMDExtensions true @@ -147,7 +146,6 @@ ../../sdk/include MultiThreaded StdCall - NotSet true diff --git a/2.x/trunk/plugins-extra/ROTViewerPlugin/ROTViewerPlugin.vcxproj b/2.x/trunk/plugins-extra/ROTViewerPlugin/ROTViewerPlugin.vcxproj index c8eae28b0..38b12a107 100644 --- a/2.x/trunk/plugins-extra/ROTViewerPlugin/ROTViewerPlugin.vcxproj +++ b/2.x/trunk/plugins-extra/ROTViewerPlugin/ROTViewerPlugin.vcxproj @@ -64,7 +64,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true @@ -90,7 +89,6 @@ ProgramDatabase StdCall true - StreamingSIMDExtensions ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) @@ -111,7 +109,6 @@ ProgramDatabase StdCall true - NotSet ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) @@ -158,7 +155,6 @@ ProgramDatabase StdCall true - NotSet ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) diff --git a/2.x/trunk/plugins-extra/SetCriticalPlugin/SetCriticalPlugin.vcxproj b/2.x/trunk/plugins-extra/SetCriticalPlugin/SetCriticalPlugin.vcxproj index c90e6e38c..0b869d7b6 100644 --- a/2.x/trunk/plugins-extra/SetCriticalPlugin/SetCriticalPlugin.vcxproj +++ b/2.x/trunk/plugins-extra/SetCriticalPlugin/SetCriticalPlugin.vcxproj @@ -111,7 +111,6 @@ ../../sdk/include MultiThreadedDebug StdCall - NotSet true diff --git a/2.x/trunk/plugins/DotNetTools/DotNetTools.vcxproj b/2.x/trunk/plugins/DotNetTools/DotNetTools.vcxproj index 43289c465..afe3448e4 100644 --- a/2.x/trunk/plugins/DotNetTools/DotNetTools.vcxproj +++ b/2.x/trunk/plugins/DotNetTools/DotNetTools.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/ExtendedNotifications/ExtendedNotifications.vcxproj b/2.x/trunk/plugins/ExtendedNotifications/ExtendedNotifications.vcxproj index 2c037807d..be9dac4ff 100644 --- a/2.x/trunk/plugins/ExtendedNotifications/ExtendedNotifications.vcxproj +++ b/2.x/trunk/plugins/ExtendedNotifications/ExtendedNotifications.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/ExtendedServices/ExtendedServices.vcxproj b/2.x/trunk/plugins/ExtendedServices/ExtendedServices.vcxproj index 1c26ec1d9..ec1baf18c 100644 --- a/2.x/trunk/plugins/ExtendedServices/ExtendedServices.vcxproj +++ b/2.x/trunk/plugins/ExtendedServices/ExtendedServices.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/ExtendedTools/ExtendedTools.vcxproj b/2.x/trunk/plugins/ExtendedTools/ExtendedTools.vcxproj index e47299e84..18ff9929c 100644 --- a/2.x/trunk/plugins/ExtendedTools/ExtendedTools.vcxproj +++ b/2.x/trunk/plugins/ExtendedTools/ExtendedTools.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/NetworkTools/NetworkTools.vcxproj b/2.x/trunk/plugins/NetworkTools/NetworkTools.vcxproj index 108c6e244..b95537b23 100644 --- a/2.x/trunk/plugins/NetworkTools/NetworkTools.vcxproj +++ b/2.x/trunk/plugins/NetworkTools/NetworkTools.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/OnlineChecks/OnlineChecks.vcxproj b/2.x/trunk/plugins/OnlineChecks/OnlineChecks.vcxproj index b74f0ed85..394b6b50e 100644 --- a/2.x/trunk/plugins/OnlineChecks/OnlineChecks.vcxproj +++ b/2.x/trunk/plugins/OnlineChecks/OnlineChecks.vcxproj @@ -68,7 +68,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj b/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj index fdc0cb92b..84f383ea4 100644 --- a/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj +++ b/2.x/trunk/plugins/SamplePlugin/SamplePlugin.vcxproj @@ -63,7 +63,6 @@ - <_ProjectFileVersion>10.0.40219.1 $(ProjectDir)\bin\$(Configuration)32\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/SbieSupport/SbieSupport.vcxproj b/2.x/trunk/plugins/SbieSupport/SbieSupport.vcxproj index dc65e33c6..d5bbc1c91 100644 --- a/2.x/trunk/plugins/SbieSupport/SbieSupport.vcxproj +++ b/2.x/trunk/plugins/SbieSupport/SbieSupport.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/ToolStatus/ToolStatus.vcxproj b/2.x/trunk/plugins/ToolStatus/ToolStatus.vcxproj index 2689d4040..9dbeb6218 100644 --- a/2.x/trunk/plugins/ToolStatus/ToolStatus.vcxproj +++ b/2.x/trunk/plugins/ToolStatus/ToolStatus.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/Updater/Updater.vcxproj b/2.x/trunk/plugins/Updater/Updater.vcxproj index 2d6a28ba1..6ad9d7567 100644 --- a/2.x/trunk/plugins/Updater/Updater.vcxproj +++ b/2.x/trunk/plugins/Updater/Updater.vcxproj @@ -68,7 +68,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/plugins/WindowExplorer/WindowExplorer.vcxproj b/2.x/trunk/plugins/WindowExplorer/WindowExplorer.vcxproj index 05396c882..ee1ee972d 100644 --- a/2.x/trunk/plugins/WindowExplorer/WindowExplorer.vcxproj +++ b/2.x/trunk/plugins/WindowExplorer/WindowExplorer.vcxproj @@ -67,7 +67,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true diff --git a/2.x/trunk/tests/phlib-test/phlib-test.vcxproj b/2.x/trunk/tests/phlib-test/phlib-test.vcxproj index 5c99f67f4..2a73ce043 100644 --- a/2.x/trunk/tests/phlib-test/phlib-test.vcxproj +++ b/2.x/trunk/tests/phlib-test/phlib-test.vcxproj @@ -38,7 +38,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)bin\$(Configuration)\ $(ProjectDir)obj\$(Configuration)\ true diff --git a/2.x/trunk/tools/fiin/fiin.vcxproj b/2.x/trunk/tools/fiin/fiin.vcxproj index bb1f9f9f1..9ef97951b 100644 --- a/2.x/trunk/tools/fiin/fiin.vcxproj +++ b/2.x/trunk/tools/fiin/fiin.vcxproj @@ -63,7 +63,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)bin\$(Configuration)$(PlatformArchitecture)\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true @@ -99,9 +98,6 @@ - - X64 - Disabled ../../phlib/include;include;%(AdditionalIncludeDirectories) @@ -148,9 +144,6 @@ - - X64 - MaxSpeed true diff --git a/2.x/trunk/tools/fixlib/fixlib.vcxproj b/2.x/trunk/tools/fixlib/fixlib.vcxproj index 51fee5690..73fdc3a0a 100644 --- a/2.x/trunk/tools/fixlib/fixlib.vcxproj +++ b/2.x/trunk/tools/fixlib/fixlib.vcxproj @@ -38,7 +38,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)bin\$(Configuration)\ $(ProjectDir)obj\$(Configuration)\ true diff --git a/2.x/trunk/tools/peview/peview.vcxproj b/2.x/trunk/tools/peview/peview.vcxproj index aad7c6db3..b0d8992cb 100644 --- a/2.x/trunk/tools/peview/peview.vcxproj +++ b/2.x/trunk/tools/peview/peview.vcxproj @@ -63,7 +63,6 @@ - <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)bin\$(Configuration)$(PlatformArchitecture)\ $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ true @@ -87,7 +86,6 @@ Level3 ProgramDatabase StdCall - StreamingSIMDExtensions noarg.obj;noenv.obj;phlib.lib;ntdll.lib;%(AdditionalDependencies) @@ -100,9 +98,6 @@ - - X64 - Disabled ../../phlib/include;include;%(AdditionalIncludeDirectories) @@ -112,7 +107,6 @@ Level3 ProgramDatabase StdCall - NotSet noarg.obj;noenv.obj;phlib.lib;ntdll.lib;%(AdditionalDependencies) @@ -152,9 +146,6 @@ - - X64 - MaxSpeed true @@ -166,7 +157,6 @@ ProgramDatabase StdCall true - NotSet noarg.obj;noenv.obj;phlib.lib;ntdll.lib;%(AdditionalDependencies) From 5c49140a66a10fdccaf3d2d917417ace647a3670 Mon Sep 17 00:00:00 2001 From: wj32 Date: Wed, 23 Oct 2013 23:24:52 +0000 Subject: [PATCH 019/161] fixed IntelliSense warnings git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5486 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/HACKING.txt | 4 +--- 2.x/trunk/phlib/include/ntexapi.h | 14 -------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/2.x/trunk/HACKING.txt b/2.x/trunk/HACKING.txt index 02ccd20e8..deca7913f 100644 --- a/2.x/trunk/HACKING.txt +++ b/2.x/trunk/HACKING.txt @@ -2,9 +2,7 @@ Process Hacker must be built using a Microsoft C compiler. Do not attempt to use any other compiler or be prepared to spend a long time trying to fix things. The only tested -IDE is Visual Studio 2013. Note that -"Text Editor > C/C++ > Advanced > Disable Error Reporting" should be -set to workaround the fact that IntelliSense thinks all C code is C++. +IDE is Visual Studio 2013. The Windows SDK v8 must be installed. To create a XP-compatible driver, KProcessHacker must be built using WDK v7, not the latest WDK. diff --git a/2.x/trunk/phlib/include/ntexapi.h b/2.x/trunk/phlib/include/ntexapi.h index 2a17251f4..852fe7697 100644 --- a/2.x/trunk/phlib/include/ntexapi.h +++ b/2.x/trunk/phlib/include/ntexapi.h @@ -2115,20 +2115,6 @@ C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, TestRetInstruction) == 0x2f8); C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, SystemCallPad) == 0x308); C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, TickCount) == 0x320); C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, TickCountQuad) == 0x320); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, Cookie) == 0x330); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, ConsoleSessionForegroundProcessId) == 0x338); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, UserModeGlobalLogger) == 0x380); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, ImageFileExecutionOptions) == 0x3a0); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, LangGenerationCount) == 0x3a4); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, InterruptTimeBias) == 0x3b0); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, UserModeGlobalLogger) == 0x380); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, ImageFileExecutionOptions) == 0x3a0); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, LangGenerationCount) == 0x3a4); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, InterruptTimeBias) == 0x3b0); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, TscQpcBias) == 0x3b8); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, ActiveProcessorCount) == 0x3c0); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, ActiveGroupCount) == 0x3c4); -C_ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, XState) == 0x3d8); #ifdef _M_IX86 #define USER_SHARED_DATA ((KUSER_SHARED_DATA * const)0x7ffe0000) From 774d37c3ea38cded8b06f5c5a1ba6e3f599cdc52 Mon Sep 17 00:00:00 2001 From: wj32 Date: Thu, 24 Oct 2013 00:19:23 +0000 Subject: [PATCH 020/161] changed treenew selection behavior to match Windows 8 listview git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5487 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/phlib/treenew.c | 51 ++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/2.x/trunk/phlib/treenew.c b/2.x/trunk/phlib/treenew.c index 12059df82..aa5018367 100644 --- a/2.x/trunk/phlib/treenew.c +++ b/2.x/trunk/phlib/treenew.c @@ -920,49 +920,46 @@ VOID PhTnpOnXxxButtonXxx( if (!(hitTest.Flags & TN_HIT_ITEM_PLUSMINUS) && (Message == WM_LBUTTONDOWN || Message == WM_RBUTTONDOWN)) { - LOGICAL realHitItem; + LOGICAL allowDragSelect; PH_TREENEW_CELL_PARTS parts; PhTnpPopTooltip(Context); + allowDragSelect = TRUE; if (hitTest.Flags & TN_HIT_ITEM) { + allowDragSelect = FALSE; Context->FocusNode = hitTest.Node; - } - - realHitItem = hitTest.Flags & TN_HIT_ITEM; - - if (realHitItem && (Context->ExtendedFlags & TN_FLAG_ITEM_DRAG_SELECT)) - { - // To allow drag selection to begin even if the cursor is on an item, - // we check if the cursor is on the item icon or text. If it isn't, then - // don't count that as a hit. Exceptions are: - // * When the item is already selected - // * When user is beginning to drag the divider - if (!hitTest.Node->Selected && !startingTracking) + if (Context->ExtendedFlags & TN_FLAG_ITEM_DRAG_SELECT) { - if (PhTnpGetCellParts(Context, hitTest.Node->Index, hitTest.Column, TN_MEASURE_TEXT, &parts)) + // To allow drag selection to begin even if the cursor is on an item, + // we check if the cursor is on the item icon or text. Exceptions are: + // * When the item is already selected + // * When user is beginning to drag the divider + + if (!hitTest.Node->Selected && !startingTracking) { - realHitItem = FALSE; + if (PhTnpGetCellParts(Context, hitTest.Node->Index, hitTest.Column, TN_MEASURE_TEXT, &parts)) + { + allowDragSelect = TRUE; - if ((parts.Flags & TN_PART_ICON) && CursorX >= parts.IconRect.left && CursorX < parts.IconRect.right) - realHitItem = TRUE; + if ((parts.Flags & TN_PART_ICON) && CursorX >= parts.IconRect.left && CursorX < parts.IconRect.right) + allowDragSelect = FALSE; - if ((parts.Flags & TN_PART_CONTENT) && (parts.Flags & TN_PART_TEXT)) - { - if (CursorX >= parts.TextRect.left && CursorX < parts.TextRect.right) - realHitItem = TRUE; + if ((parts.Flags & TN_PART_CONTENT) && (parts.Flags & TN_PART_TEXT)) + { + if (CursorX >= parts.TextRect.left && CursorX < parts.TextRect.right) + allowDragSelect = FALSE; + } } } } - } - if (realHitItem) - { PhTnpProcessSelectNode(Context, hitTest.Node, controlKey, shiftKey, Message == WM_RBUTTONDOWN); } - else + + if (allowDragSelect) { BOOLEAN dragSelect; ULONG indexToSelect; @@ -1029,9 +1026,7 @@ VOID PhTnpOnXxxButtonXxx( if ((hitTest.Flags & TN_HIT_ITEM) && (Context->ExtendedFlags & TN_FLAG_ITEM_DRAG_SELECT)) { - // The user isn't performing a drag selection, but we didn't count this as a hit earlier. - // It's a hit now. - PhTnpProcessSelectNode(Context, hitTest.Node, controlKey, shiftKey, Message == WM_RBUTTONDOWN); + // The user isn't performing a drag selection, so prevent deselection. selectionProcessed = TRUE; } From 1b7cc008e0569fc0f4940b552257a209c58c7659 Mon Sep 17 00:00:00 2001 From: dmex Date: Thu, 24 Oct 2013 01:52:29 +0000 Subject: [PATCH 021/161] Plugins: Removed WindowsCodecs dependencies git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5488 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/plugins/ToolStatus/searchbox.c | 97 +++++++++++++----------- 2.x/trunk/plugins/Updater/updater.c | 50 +++++++----- 2.x/trunk/plugins/Updater/updater.h | 6 +- 3 files changed, 87 insertions(+), 66 deletions(-) diff --git a/2.x/trunk/plugins/ToolStatus/searchbox.c b/2.x/trunk/plugins/ToolStatus/searchbox.c index 0865d3e66..e29643119 100644 --- a/2.x/trunk/plugins/ToolStatus/searchbox.c +++ b/2.x/trunk/plugins/ToolStatus/searchbox.c @@ -18,10 +18,11 @@ * * You should have received a copy of the GNU General Public License * along with Process Hacker. If not, see . +* +* dmex: The non-client area subclassing code has been modified based on the following guide: +* http://www.catch22.net/tuts/insert-buttons-edit-control */ -// dmex: The non-client area subclassing code has been modified based on the following guide: -// http://www.catch22.net/tuts/insert-buttons-edit-control #include "toolstatus.h" #include @@ -29,9 +30,8 @@ #include #include -#pragma comment(lib, "windowscodecs.lib") - -#define HRGN_FULL ((HRGN)1) // passed by WM_NCPAINT even though it's completely undocumented +DEFINE_GUID(IID_IWICImagingFactory, 0xec5ec8a9, 0xc395, 0x4314, 0x9c, 0x77, 0x54, 0xd7, 0xa9, 0x35, 0xff, 0x70); +DEFINE_GUID(IID_IWICBitmapDecoder, 0x9edde9e7, 0x8dee, 0x47ea, 0x99, 0xdf, 0xe6, 0xfa, 0xf2, 0xed, 0x44, 0xbf); static _IsThemeActive IsThemeActive_I; static _OpenThemeData OpenThemeData_I; @@ -390,10 +390,33 @@ static LRESULT CALLBACK NcAreaWndSubclassProc( return DefSubclassProc(hwndDlg, uMsg, wParam, lParam); } +static HFONT InitializeFont( + __in HWND hwndDlg + ) +{ + LOGFONT logFont = { 0 }; + HFONT fontHandle = NULL; + + logFont.lfHeight = 14; + logFont.lfWeight = FW_NORMAL; + logFont.lfQuality = CLEARTYPE_QUALITY | ANTIALIASED_QUALITY; + + // GDI uses the first font that matches the above attributes. + fontHandle = CreateFontIndirect(&logFont); + + if (fontHandle) + { + SendMessage(hwndDlg, WM_SETFONT, (WPARAM)fontHandle, FALSE); + return fontHandle; + } + + return NULL; +} + HBITMAP LoadImageFromResources( __in UINT Width, __in UINT Height, - __in LPCTSTR Name + __in PCWSTR Name ) { UINT width = 0; @@ -418,10 +441,11 @@ HBITMAP LoadImageFromResources( HDC hdcScreen = GetDC(NULL); __try - { + { // Create the ImagingFactory. if (FAILED(CoCreateInstance(&CLSID_WICImagingFactory1, NULL, CLSCTX_INPROC_SERVER, &IID_IWICImagingFactory, (PVOID*)&wicFactory))) __leave; + // Create the PNG decoder. if (FAILED(CoCreateInstance(&CLSID_WICPngDecoder1, NULL, CLSCTX_INPROC_SERVER, &IID_IWICBitmapDecoder, (PVOID*)&wicDecoder))) __leave; @@ -429,47 +453,55 @@ HBITMAP LoadImageFromResources( // Find the resource. if ((resHandleSrc = FindResource((HINSTANCE)PluginInstance->DllBase, Name, L"PNG")) == NULL) __leave; + // Get the resource length. - resLength = SizeofResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc); + resLength = SizeofResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc); + // Load the resource. if ((resHandle = LoadResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc)) == NULL) __leave; + if ((resBuffer = (WICInProcPointer)LockResource(resHandle)) == NULL) __leave; // Create the Stream. if (FAILED(IWICImagingFactory_CreateStream(wicFactory, &wicStream))) __leave; + // Initialize the Stream from Memory. if (FAILED(IWICStream_InitializeFromMemory(wicStream, resBuffer, resLength))) __leave; + + // Initialize the HBITMAP decoder from memory. if (FAILED(IWICBitmapDecoder_Initialize(wicDecoder, (IStream*)wicStream, WICDecodeMetadataCacheOnLoad))) __leave; + // Get the Frame count. if (FAILED(IWICBitmapDecoder_GetFrameCount(wicDecoder, &frameCount)) || frameCount < 1) __leave; + // Get the Frame. if (FAILED(IWICBitmapDecoder_GetFrame(wicDecoder, 0, &wicFrame))) __leave; + // Get the WicFrame width and height. if (FAILED(IWICBitmapFrameDecode_GetSize(wicFrame, &width, &height)) || width == 0 || height == 0) __leave; + // Get the WicFrame image format. if (FAILED(IWICBitmapFrameDecode_GetPixelFormat(wicFrame, &pixelFormat))) __leave; - // Check if the image format is supported: - if (!IsEqualGUID(&pixelFormat, &GUID_WICPixelFormat32bppBGRA)) - { - // Convert the image to the correct format: - if (FAILED(WICConvertBitmapSource(&GUID_WICPixelFormat32bppBGRA, (IWICBitmapSource*)wicFrame, &wicBitmapSource))) - __leave; - IWICBitmapFrameDecode_Release(wicFrame); - } - else - { - wicBitmapSource = (IWICBitmapSource*)wicFrame; - } + // Check if the image format is supported: + //if (!IsEqualGUID(&pixelFormat, &GUID_WICPixelFormat32bppBGRA)) + //{ + // // Convert the image to the correct format: + // if (FAILED(WICConvertBitmapSource(&GUID_WICPixelFormat32bppBGRA, (IWICBitmapSource*)wicFrame, &wicBitmapSource))) + // __leave; + // IWICBitmapFrameDecode_Release(wicFrame); + //} + //else + wicBitmapSource = (IWICBitmapSource*)wicFrame; bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bitmapInfo.bmiHeader.biWidth = Width; @@ -518,7 +550,7 @@ HBITMAP LoadImageFromResources( { IWICImagingFactory_Release(wicFactory); } - + if (resHandle) { FreeResource(resHandle); @@ -528,29 +560,6 @@ HBITMAP LoadImageFromResources( return bitmapHandle; } -static HFONT InitializeFont( - __in HWND hwndDlg - ) -{ - LOGFONT logFont = { 0 }; - HFONT fontHandle = NULL; - - logFont.lfHeight = 14; - logFont.lfWeight = FW_NORMAL; - logFont.lfQuality = CLEARTYPE_QUALITY | ANTIALIASED_QUALITY; - - // GDI uses the first font that matches the above attributes. - fontHandle = CreateFontIndirect(&logFont); - - if (fontHandle) - { - SendMessage(hwndDlg, WM_SETFONT, (WPARAM)fontHandle, FALSE); - return fontHandle; - } - - return NULL; -} - BOOLEAN InsertButton( __in HWND hwndDlg, __in UINT CommandID diff --git a/2.x/trunk/plugins/Updater/updater.c b/2.x/trunk/plugins/Updater/updater.c index 1840256fa..b71fa6653 100644 --- a/2.x/trunk/plugins/Updater/updater.c +++ b/2.x/trunk/plugins/Updater/updater.c @@ -38,10 +38,13 @@ static HANDLE UpdateDialogThreadHandle = NULL; static HWND UpdateDialogHandle = NULL; static PH_EVENT InitializedEvent = PH_EVENT_INIT; +DEFINE_GUID(IID_IWICImagingFactory, 0xec5ec8a9, 0xc395, 0x4314, 0x9c, 0x77, 0x54, 0xd7, 0xa9, 0x35, 0xff, 0x70); +DEFINE_GUID(IID_IWICBitmapDecoder, 0x9edde9e7, 0x8dee, 0x47ea, 0x99, 0xdf, 0xe6, 0xfa, 0xf2, 0xed, 0x44, 0xbf); + static HBITMAP LoadImageFromResources( __in UINT Width, __in UINT Height, - __in LPCTSTR Name + __in PCWSTR Name ) { UINT width = 0; @@ -66,10 +69,11 @@ static HBITMAP LoadImageFromResources( HDC hdcScreen = GetDC(NULL); __try - { + { // Create the ImagingFactory. if (FAILED(CoCreateInstance(&CLSID_WICImagingFactory1, NULL, CLSCTX_INPROC_SERVER, &IID_IWICImagingFactory, (PVOID*)&wicFactory))) __leave; + // Create the PNG decoder. if (FAILED(CoCreateInstance(&CLSID_WICPngDecoder1, NULL, CLSCTX_INPROC_SERVER, &IID_IWICBitmapDecoder, (PVOID*)&wicDecoder))) __leave; @@ -77,47 +81,55 @@ static HBITMAP LoadImageFromResources( // Find the resource. if ((resHandleSrc = FindResource((HINSTANCE)PluginInstance->DllBase, Name, L"PNG")) == NULL) __leave; + // Get the resource length. - resLength = SizeofResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc); + resLength = SizeofResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc); + // Load the resource. if ((resHandle = LoadResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc)) == NULL) __leave; + if ((resBuffer = (WICInProcPointer)LockResource(resHandle)) == NULL) __leave; // Create the Stream. if (FAILED(IWICImagingFactory_CreateStream(wicFactory, &wicStream))) __leave; + // Initialize the Stream from Memory. if (FAILED(IWICStream_InitializeFromMemory(wicStream, resBuffer, resLength))) __leave; + + // Initialize the HBITMAP decoder from memory. if (FAILED(IWICBitmapDecoder_Initialize(wicDecoder, (IStream*)wicStream, WICDecodeMetadataCacheOnLoad))) __leave; + // Get the Frame count. if (FAILED(IWICBitmapDecoder_GetFrameCount(wicDecoder, &frameCount)) || frameCount < 1) - __leave; + __leave; + // Get the Frame. if (FAILED(IWICBitmapDecoder_GetFrame(wicDecoder, 0, &wicFrame))) __leave; + // Get the WicFrame width and height. - if (FAILED(IWICBitmapSource_GetSize((IWICBitmapSource*)wicFrame, &width, &height)) || width == 0 || height == 0) + if (FAILED(IWICBitmapFrameDecode_GetSize(wicFrame, &width, &height)) || width == 0 || height == 0) __leave; + // Get the WicFrame image format. - if (FAILED(IWICBitmapSource_GetPixelFormat((IWICBitmapSource*)wicFrame, &pixelFormat))) + if (FAILED(IWICBitmapFrameDecode_GetPixelFormat(wicFrame, &pixelFormat))) __leave; - // Check if the image format is supported: - if (!IsEqualGUID(&pixelFormat, &GUID_WICPixelFormat32bppBGRA)) - { - // Convert the image to the correct format: - if (FAILED(WICConvertBitmapSource(&GUID_WICPixelFormat32bppBGRA, (IWICBitmapSource*)wicFrame, &wicBitmapSource))) - __leave; - IWICBitmapFrameDecode_Release(wicFrame); - } - else - { - wicBitmapSource = (IWICBitmapSource*)wicFrame; - } + // Check if the image format is supported: + //if (!IsEqualGUID(&pixelFormat, &GUID_WICPixelFormat32bppBGRA)) + //{ + // // Convert the image to the correct format: + // if (FAILED(WICConvertBitmapSource(&GUID_WICPixelFormat32bppBGRA, (IWICBitmapSource*)wicFrame, &wicBitmapSource))) + // __leave; + // IWICBitmapFrameDecode_Release(wicFrame); + //} + //else + wicBitmapSource = (IWICBitmapSource*)wicFrame; bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bitmapInfo.bmiHeader.biWidth = Width; @@ -166,7 +178,7 @@ static HBITMAP LoadImageFromResources( { IWICImagingFactory_Release(wicFactory); } - + if (resHandle) { FreeResource(resHandle); diff --git a/2.x/trunk/plugins/Updater/updater.h b/2.x/trunk/plugins/Updater/updater.h index 203a80522..f6722d458 100644 --- a/2.x/trunk/plugins/Updater/updater.h +++ b/2.x/trunk/plugins/Updater/updater.h @@ -2,13 +2,13 @@ #define __UPDATER_H__ #pragma comment(lib, "Winhttp.lib") -#pragma comment(lib, "WindowsCodecs.lib") +#define CINTERFACE +#define COBJMACROS +#define INITGUID #include #include #include -#define CINTERFACE -#define COBJMACROS #include #include #include From 5f58948fd49bd7b48b32674e3783e6f14455c5b1 Mon Sep 17 00:00:00 2001 From: dmex Date: Thu, 24 Oct 2013 01:54:13 +0000 Subject: [PATCH 022/161] git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5489 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/plugins/Updater/updater.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2.x/trunk/plugins/Updater/updater.c b/2.x/trunk/plugins/Updater/updater.c index b71fa6653..67c71db8f 100644 --- a/2.x/trunk/plugins/Updater/updater.c +++ b/2.x/trunk/plugins/Updater/updater.c @@ -106,7 +106,7 @@ static HBITMAP LoadImageFromResources( // Get the Frame count. if (FAILED(IWICBitmapDecoder_GetFrameCount(wicDecoder, &frameCount)) || frameCount < 1) - __leave; + __leave; // Get the Frame. if (FAILED(IWICBitmapDecoder_GetFrame(wicDecoder, 0, &wicFrame))) From 775c39b49efbde1a0307aeb8ceda259e47171936 Mon Sep 17 00:00:00 2001 From: wj32 Date: Fri, 25 Oct 2013 12:59:09 +0000 Subject: [PATCH 023/161] * fixed reflected processes not terminating on Windows 8.1 * processes with no threads are shown as suspended * updated ntpsapi.h git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5490 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/procprv.c | 13 +++++++++---- 2.x/trunk/phlib/include/ntpsapi.h | 5 +++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 9bce20e70..06a2c302d 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -8,6 +8,7 @@ Process Hacker * Fixed handling of long symbol names * Fixed Run As preventing Windows 8 apps from starting * Fixed console host information for Windows 8.1 + * Fixed reflected processes not terminating on Windows 8.1 2.31 * NEW/IMPROVED: diff --git a/2.x/trunk/ProcessHacker/procprv.c b/2.x/trunk/ProcessHacker/procprv.c index 9c00cd5ed..eb181bd59 100644 --- a/2.x/trunk/ProcessHacker/procprv.c +++ b/2.x/trunk/ProcessHacker/procprv.c @@ -1674,7 +1674,7 @@ VOID PhpGetProcessThreadInformation( BOOLEAN isSuspended; ULONG contextSwitches; - isSuspended = Process->NumberOfThreads != 0; + isSuspended = PH_IS_REAL_PROCESS_ID(Process->UniqueProcessId); contextSwitches = 0; for (i = 0; i < Process->NumberOfThreads; i++) @@ -2004,10 +2004,15 @@ VOID PhProcessProviderUpdate( processItem->Record = processRecord; // Open a handle to the process for later usage. - PhOpenProcess(&processItem->QueryHandle, PROCESS_QUERY_INFORMATION, processItem->ProcessId); + // Don't try to do this if the process has no threads. On Windows 8.1, processes without threads are + // probably reflected processes which will not terminate if we have a handle open. + if (processItem->NumberOfThreads != 0) + { + PhOpenProcess(&processItem->QueryHandle, PROCESS_QUERY_INFORMATION, processItem->ProcessId); - if (WINDOWS_HAS_LIMITED_ACCESS && !processItem->QueryHandle) - PhOpenProcess(&processItem->QueryHandle, PROCESS_QUERY_LIMITED_INFORMATION, processItem->ProcessId); + if (WINDOWS_HAS_LIMITED_ACCESS && !processItem->QueryHandle) + PhOpenProcess(&processItem->QueryHandle, PROCESS_QUERY_LIMITED_INFORMATION, processItem->ProcessId); + } PhpGetProcessThreadInformation(process, &isSuspended, &contextSwitches); PhpUpdateDynamicInfoProcessItem(processItem, process); diff --git a/2.x/trunk/phlib/include/ntpsapi.h b/2.x/trunk/phlib/include/ntpsapi.h index dd4af7337..733570109 100644 --- a/2.x/trunk/phlib/include/ntpsapi.h +++ b/2.x/trunk/phlib/include/ntpsapi.h @@ -155,6 +155,10 @@ typedef enum _PROCESSINFOCLASS ProcessKeepAliveCount, // q: PROCESS_KEEPALIVE_COUNT_INFORMATION ProcessRevokeFileHandles, // s: PROCESS_REVOKE_FILE_HANDLES_INFORMATION ProcessWorkingSetControl, + ProcessHandleTable, // since WINBLUE + ProcessCheckStackExtentsMode, + ProcessCommandLineInformation, + ProcessProtectionInformation, MaxProcessInfoClass } PROCESSINFOCLASS; #endif @@ -197,6 +201,7 @@ typedef enum _THREADINFOCLASS ThreadCounterProfiling, ThreadIdealProcessorEx, // q: PROCESSOR_NUMBER ThreadCpuAccountingInformation, // since WIN8 + ThreadSuspendCount, // since WINBLUE MaxThreadInfoClass } THREADINFOCLASS; #endif From d50c815e2f99d392a5ddeb2f966c5d1d0b30eb5c Mon Sep 17 00:00:00 2001 From: wj32 Date: Fri, 25 Oct 2013 13:01:28 +0000 Subject: [PATCH 024/161] fixed previous commit git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5491 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/ProcessHacker/procprv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2.x/trunk/ProcessHacker/procprv.c b/2.x/trunk/ProcessHacker/procprv.c index eb181bd59..208903cf2 100644 --- a/2.x/trunk/ProcessHacker/procprv.c +++ b/2.x/trunk/ProcessHacker/procprv.c @@ -2006,7 +2006,7 @@ VOID PhProcessProviderUpdate( // Open a handle to the process for later usage. // Don't try to do this if the process has no threads. On Windows 8.1, processes without threads are // probably reflected processes which will not terminate if we have a handle open. - if (processItem->NumberOfThreads != 0) + if (process->NumberOfThreads != 0) { PhOpenProcess(&processItem->QueryHandle, PROCESS_QUERY_INFORMATION, processItem->ProcessId); From f297001d07b75d4c259cf8cfd4c001e54942ad04 Mon Sep 17 00:00:00 2001 From: wj32 Date: Fri, 25 Oct 2013 13:39:00 +0000 Subject: [PATCH 025/161] fixed CPU frequency on Windows 8.1 git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5492 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/include/sysinfop.h | 6 ++++ 2.x/trunk/ProcessHacker/sysinfo.c | 36 +++++++++++++--------- 2.x/trunk/phlib/include/ntexapi.h | 4 +-- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 06a2c302d..226bed477 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -9,6 +9,7 @@ Process Hacker * Fixed Run As preventing Windows 8 apps from starting * Fixed console host information for Windows 8.1 * Fixed reflected processes not terminating on Windows 8.1 + * Fixed CPU frequency on Windows 8.1 2.31 * NEW/IMPROVED: diff --git a/2.x/trunk/ProcessHacker/include/sysinfop.h b/2.x/trunk/ProcessHacker/include/sysinfop.h index 37d1130ce..12e508a76 100644 --- a/2.x/trunk/ProcessHacker/include/sysinfop.h +++ b/2.x/trunk/ProcessHacker/include/sysinfop.h @@ -224,6 +224,12 @@ PPH_STRING PhSipFormatSizeWithPrecision( // CPU section +typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8 +{ + ULONG Hits; + UCHAR PercentFrequency; +} SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8, *PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8; + BOOLEAN PhSipCpuSectionCallback( __in PPH_SYSINFO_SECTION Section, __in PH_SYSINFO_SECTION_MESSAGE Message, diff --git a/2.x/trunk/ProcessHacker/sysinfo.c b/2.x/trunk/ProcessHacker/sysinfo.c index f22c1cdc3..f4b24b1e6 100644 --- a/2.x/trunk/ProcessHacker/sysinfo.c +++ b/2.x/trunk/ProcessHacker/sysinfo.c @@ -2736,11 +2736,10 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( ) { ULONG stateSize; - ULONG hitcountSize; PVOID differences; PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION stateDistribution; PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION stateDifference; - PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT hitcount; + PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8 hitcountOld; ULONG i; ULONG j; DOUBLE count; @@ -2752,11 +2751,6 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( return FALSE; stateSize = FIELD_OFFSET(SYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION, States) + sizeof(SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT) * 2; - hitcountSize = sizeof(SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT); - - if (WindowsVersion <= WINDOWS_8) - hitcountSize = 8; - differences = PhAllocate(stateSize * NumberOfProcessors); for (i = 0; i < NumberOfProcessors; i++) @@ -2772,9 +2766,16 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( for (j = 0; j < stateDistribution->StateCount; j++) { - hitcount = (PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT)((PCHAR)stateDistribution->States + hitcountSize * j); - stateDifference->States[j].Hits = hitcount->Hits; - stateDifference->States[j].PercentFrequency = hitcount->PercentFrequency; + if (WindowsVersion >= WINDOWS_81) + { + stateDifference->States[j] = stateDistribution->States[j]; + } + else + { + hitcountOld = (PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8)((PCHAR)stateDistribution->States + sizeof(SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8) * j); + stateDifference->States[j].Hits.QuadPart = hitcountOld->Hits; + stateDifference->States[j].PercentFrequency = hitcountOld->PercentFrequency; + } } } @@ -2791,8 +2792,15 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( for (j = 0; j < stateDistribution->StateCount; j++) { - hitcount = (PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT)((PCHAR)stateDistribution->States + hitcountSize * j); - stateDifference->States[j].Hits -= hitcount->Hits; + if (WindowsVersion >= WINDOWS_81) + { + stateDifference->States[j].Hits.QuadPart -= stateDistribution->States[j].Hits.QuadPart; + } + else + { + hitcountOld = (PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8)((PCHAR)stateDistribution->States + sizeof(SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8) * j); + stateDifference->States[j].Hits.QuadPart -= hitcountOld->Hits; + } } } @@ -2807,8 +2815,8 @@ BOOLEAN PhSipGetCpuFrequencyFromDistribution( for (j = 0; j < 2; j++) { - count += stateDifference->States[j].Hits; - total += stateDifference->States[j].Hits * stateDifference->States[j].PercentFrequency; + count += (ULONGLONG)stateDifference->States[j].Hits.QuadPart; + total += (ULONGLONG)stateDifference->States[j].Hits.QuadPart * stateDifference->States[j].PercentFrequency; } } diff --git a/2.x/trunk/phlib/include/ntexapi.h b/2.x/trunk/phlib/include/ntexapi.h index 852fe7697..03787639c 100644 --- a/2.x/trunk/phlib/include/ntexapi.h +++ b/2.x/trunk/phlib/include/ntexapi.h @@ -1545,10 +1545,8 @@ typedef struct _SYSTEM_SYSTEM_DISK_INFORMATION // private typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT { - ULONG Hits; + LARGE_INTEGER Hits; // ULONG in WIN8 UCHAR PercentFrequency; - ULONG Reserved1; // rev - ULONG Reserved2; // rev } SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT, *PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT; // private From d4974ac455cd22e0d0bf2f61a29ef71c892e96da Mon Sep 17 00:00:00 2001 From: wj32 Date: Fri, 25 Oct 2013 13:42:26 +0000 Subject: [PATCH 026/161] KProcessHacker: bump to 2.7 git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5493 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/KProcessHacker/resource.rc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2.x/trunk/KProcessHacker/resource.rc b/2.x/trunk/KProcessHacker/resource.rc index 7d8e6c25f..a08183112 100644 --- a/2.x/trunk/KProcessHacker/resource.rc +++ b/2.x/trunk/KProcessHacker/resource.rc @@ -1,7 +1,7 @@ #include -#define VER_COMMA 2,6,0,0 -#define VER_STR "2.6\0" +#define VER_COMMA 2,7,0,0 +#define VER_STR "2.7\0" #define VER_FILEVERSION VER_COMMA #define VER_FILEVERSION_STR VER_STR From 2f908b2b73908f9e0c478e6e6df31125708fab7f Mon Sep 17 00:00:00 2001 From: dmex Date: Fri, 25 Oct 2013 13:51:25 +0000 Subject: [PATCH 027/161] Website: Added Windows 8.1 SDK information, updated FAQ anti-cheat contact info... git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5494 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/faq.php | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/misc/website/websitev2/faq.php b/misc/website/websitev2/faq.php index 5afb578e5..b71c3e423 100644 --- a/misc/website/websitev2/faq.php +++ b/misc/website/websitev2/faq.php @@ -101,9 +101,12 @@

No. Please read about the correct definition of "hacker".
Why is Process Hacker able to kill processes that no other tools can kill?
-
Process Hacker loads a driver that searches memory for an internal kernel function and calls it. This special function is not known to be hooked by +
Process Hacker loads a driver that searches memory for an internal Microsoft kernel function and calls it. This special function is not known to be hooked by any malware and security software.
+
Process Hacker can kill my anti-virus software! Is this a bug in the anti-virus software?
+
No. Please do not report these incidents as bugs because you will be wasting their time.
+
Symbols don't work properly!
Firstly, you need the latest dbghelp.dll version:
@@ -126,18 +129,19 @@ Now you can restart Process Hacker and view full symbols.
-
Process Hacker can kill my anti-virus software! Is this a bug in the anti-virus software?
-
No. Please do not report these incidents as bugs because you will be wasting their time.
- -
Anti-cheat software reports Process Hacker as a game cheating tool!
-
Unfortunately there is nothing much that can be done about this.
-
Why can't I build Process Hacker?
The most likely problem is that you do not have the latest Windows SDK installed.
Windows XP, Vista and Windows 7 SDK: Windows SDK
- Windows 8 SDK: Windows 8 SDK
- Windows 8.1 SDK: Windows 8.1 SDK + Windows 7, Windows 8 SDK: Windows 8 SDK
+ Windows 7, Windows 8 and 8.1 SDK: Windows 8.1 SDK +
+ +
Anti-cheat software reports Process Hacker as a game cheating tool!
+
Unfortunately there is nothing much that can be done about this. + +
How do I report issues with Anti-cheat software?
+ Contact dmex via email dmex at users.sourceforge.net or via the developer profile at Electronic Arts. From b46da718c2da05a9745d332554faa3ce8963249a Mon Sep 17 00:00:00 2001 From: dmex Date: Fri, 25 Oct 2013 15:08:50 +0000 Subject: [PATCH 028/161] *fixed last commit git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5495 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/faq.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/misc/website/websitev2/faq.php b/misc/website/websitev2/faq.php index b71c3e423..2e281130a 100644 --- a/misc/website/websitev2/faq.php +++ b/misc/website/websitev2/faq.php @@ -138,11 +138,10 @@
Anti-cheat software reports Process Hacker as a game cheating tool!
-
Unfortunately there is nothing much that can be done about this. +
Unfortunately there is nothing much that can be done about this.
How do I report issues with Anti-cheat software?
- Contact dmex via email dmex at users.sourceforge.net or via the developer profile at Electronic Arts. - +
Contact dmex via email dmex at users.sourceforge.net or via the developer profile at Electronic Arts.
From f740e58f22a61cd7bfccab8a9289296867480dac Mon Sep 17 00:00:00 2001 From: xhmikosr Date: Sat, 26 Oct 2013 10:07:04 +0000 Subject: [PATCH 029/161] Run minify.bat. git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5496 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/css/pack.css | 2 +- misc/website/websitev2/js/pack.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/website/websitev2/css/pack.css b/misc/website/websitev2/css/pack.css index f5831acfa..82164613f 100644 --- a/misc/website/websitev2/css/pack.css +++ b/misc/website/websitev2/css/pack.css @@ -1 +1 @@ -body{color:#000;font:400 14px 'Segoe UI',Segoe,'Helvetica Neue',Helvetica,Roboto,Arial,FreeSans,sans-serif;margin:0}a:link,a:visited{color:#03A;text-decoration:none}a:link:hover,a:visited:hover{text-decoration:underline}strong{font-weight:700}code{background-color:#F7F7F9;border:1px solid #E1E1E8;color:#D14;font-family:monospace,serif;font-size:1em;padding:.5px 4px}code,.side .portlet{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}dd{margin-left:10px}dt{font-weight:700;margin:15px auto 5px}footer{margin:10px auto;text-align:center}footer ul{list-style-type:none}footer ul,footer li{margin:0;padding:0}h1{font-size:20px;font-weight:700;text-align:center}h2{font-size:18px}h3{line-height:20px;margin:16px auto 8px}h3,.side h2{font-size:16px}img{border:0}li{margin-left:12px;padding-bottom:.5em}nav a{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;margin-right:.4em;padding:.3em .5em}nav .active a{background-color:Gainsboro;font-weight:700}nav a:link,nav a:visited{color:#000;text-decoration:none}nav a:hover{background-color:lightgray}nav h2{clear:none;color:#000;font-size:30px;font-weight:700;line-height:34px;margin:0 auto}nav li{display:inline-block;margin:0}nav li:first-child{margin-left:-.5em}nav li,.dev ul,.portlet li{list-style-type:none}ul{padding:0}.center{text-align:center}.changelog{border:2px solid #000;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;overflow:scroll;width:800px;height:600px}.ft{font-size:12px}.forumdate{color:silver}.forumdate>.author{color:#A00}.about-li{list-style-type:none;margin-left:0;padding-top:4px}.coder{color:#A00!important}.dev{position:relative}.ohloh-kudos{position:absolute;right:0;top:10px}.ohloh-commits{bottom:0;position:absolute;right:0}.user-avatar{background:#fff;border:1px solid #E5DFC7;display:block;float:left;margin:0 10px 0 0;padding:4px}.xhmikosr{color:#00f}.page{margin:0 auto;max-width:90em;padding:0 10px 5px;position:relative}.pre-section{width:700px;margin:-20px auto 0}.main-section{clear:both;margin:auto;padding-top:1px;text-align:center;width:700px}.main-section-2{margin:auto;width:700px}.section-header{border-top:dotted 1px;font-weight:700;margin-top:40px;text-transform:uppercase}.headline{font-size:18px;margin-top:20px;text-align:center}.main-headline{margin-bottom:40px}.main-section .headline{text-align:left}.bottom-download{font-size:20px;text-align:center!important}.tip{font-size:12px;font-style:italic;margin-top:5px;text-align:left}.normal{text-align:left}.yui-d0{margin:auto;width:auto}.yui-t4{margin:auto;width:700px}.yui-b{position:relative}.yui-t4 .yui-b{float:right;width:20em}.yui-g .yui-u,.yui-g .yui-g{float:right}.yui-g .first{float:left}.yui-g .yui-u,.yui-g .yui-g{width:49.1%}.yui-g:after,.yui-t4:after{clear:both;content:".";display:block;height:0;visibility:hidden}.portlet{clear:both;padding:0 0 1em}.portlet>h2:first-child{margin:0}.portlet p{margin:5px 0}.flowed-block{display:inline-block;padding:0 0 0 10px;vertical-align:top}.facetmenu{width:100%}.quick-links{width:250px}.downloads{width:250px}.downloads li{font-weight:700;margin:0;padding:2px 0 0}.downloads li>a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 0 #BBDAF7;-moz-box-shadow:inset 0 1px 0 0 #BBDAF7;box-shadow:inset 0 1px 0 0 #BBDAF7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#1C8D2E),color-stop(1,#629D4F));background-image:-webkit-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-moz-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-ms-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-o-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:linear-gradient(to bottom,#1C8D2E 5%,#629D4F 100%);background-color:#1C8D2E;border:1px solid #1C8D2E;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;display:inline-block;font-weight:700;padding:.7em 1em;text-align:center;text-decoration:none;text-shadow:1px 1px 0 #528ecc;width:87%}.downloads li>a:hover{background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#629D4F),color-stop(1,#1C8D2E));background-image:-webkit-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-moz-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-ms-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-o-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:linear-gradient(to bottom,#629D4F 5%,#1C8D2E 100%);background-color:#629D4F;text-decoration:none}.downloads ul{margin:0}.version{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;color:#000}.donate{margin-top:5px}.all-downloads{padding:.2em 1em;text-align:center}.side .portlet{background:none repeat scroll 0 0 #FBFBFB;border:1px solid #DEDEDE;margin:0 auto 1em;padding:.5em}.involvement a{background:url(../img/answers-arrow-right.png) no-repeat scroll right center transparent;display:block;padding:.1em}.involvement li{font-weight:700;list-style-type:none;margin-left:0;padding:0}.involvement a:hover,.involvement li:hover{background-color:lightgray;text-decoration:none;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.author{color:silver}.logo a{float:left}.logo a:hover{background-color:inherit;text-decoration:none}::-moz-selection{background-color:#B3D4FC;text-shadow:none}::selection{background-color:#B3D4FC;text-shadow:none}footer,header,nav,section{display:block}[hidden]{display:none}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0} \ No newline at end of file +body{color:#000;font:400 14px 'Segoe UI',Segoe,'Helvetica Neue',Helvetica,Roboto,Arial,FreeSans,sans-serif;margin:0}a:link,a:visited{color:#03A;text-decoration:none}a:link:hover,a:visited:hover{text-decoration:underline}strong{font-weight:700}code{background-color:#F7F7F9;border:1px solid #E1E1E8;color:#D14;font-family:monospace,serif;font-size:1em;padding:.5px 4px}code,.side .portlet{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}dd{margin-left:10px}dt{font-weight:700;margin:15px auto 5px}footer{margin:10px auto;text-align:center}footer ul{list-style-type:none}footer ul,footer li{margin:0;padding:0}h1{font-size:20px;font-weight:700;text-align:center}h2{font-size:18px}h3{line-height:20px;margin:16px auto 8px}h3,.side h2{font-size:16px}img{border:0}li{margin-left:12px;padding-bottom:.5em}nav a{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;margin-right:.4em;padding:.3em .5em}nav .active a{background-color:#dcdcdc;font-weight:700}nav a:link,nav a:visited{color:#000;text-decoration:none}nav a:hover{background-color:#d3d3d3}nav h2{clear:none;color:#000;font-size:30px;font-weight:700;line-height:34px;margin:0 auto}nav li{display:inline-block;margin:0}nav li:first-child{margin-left:-.5em}nav li,.dev ul,.portlet li{list-style-type:none}ul{padding:0}.center{text-align:center}.changelog{border:2px solid #000;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;overflow:scroll;width:800px;height:600px}.ft{font-size:12px}.forumdate{color:silver}.forumdate>.author{color:#A00}.about-li{list-style-type:none;margin-left:0;padding-top:4px}.coder{color:#A00!important}.dev{position:relative}.ohloh-kudos{position:absolute;right:0;top:10px}.ohloh-commits{bottom:0;position:absolute;right:0}.user-avatar{background:#fff;border:1px solid #E5DFC7;display:block;float:left;margin:0 10px 0 0;padding:4px}.xhmikosr{color:#00f}.page{margin:0 auto;max-width:90em;padding:0 10px 5px;position:relative}.pre-section{width:700px;margin:-20px auto 0}.main-section{clear:both;margin:auto;padding-top:1px;text-align:center;width:700px}.main-section-2{margin:auto;width:700px}.section-header{border-top:dotted 1px;font-weight:700;margin-top:40px;text-transform:uppercase}.headline{font-size:18px;margin-top:20px;text-align:center}.main-headline{margin-bottom:40px}.main-section .headline{text-align:left}.bottom-download{font-size:20px;text-align:center!important}.tip{font-size:12px;font-style:italic;margin-top:5px;text-align:left}.normal{text-align:left}.yui-d0{margin:auto;width:auto}.yui-t4{margin:auto;width:700px}.yui-b{position:relative}.yui-t4 .yui-b{float:right;width:20em}.yui-g .yui-u,.yui-g .yui-g{float:right}.yui-g .first{float:left}.yui-g .yui-u,.yui-g .yui-g{width:49.1%}.yui-g:after,.yui-t4:after{clear:both;content:".";display:block;height:0;visibility:hidden}.portlet{clear:both;padding:0 0 1em}.portlet>h2:first-child{margin:0}.portlet p{margin:5px 0}.flowed-block{display:inline-block;padding:0 0 0 10px;vertical-align:top}.facetmenu{width:100%}.quick-links{width:250px}.downloads{width:250px}.downloads li{font-weight:700;margin:0;padding:2px 0 0}.downloads li>a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 0 #BBDAF7;-moz-box-shadow:inset 0 1px 0 0 #BBDAF7;box-shadow:inset 0 1px 0 0 #BBDAF7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#1C8D2E),color-stop(1,#629D4F));background-image:-webkit-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-moz-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-ms-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-o-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:linear-gradient(to bottom,#1C8D2E 5%,#629D4F 100%);background-color:#1C8D2E;border:1px solid #1C8D2E;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;display:inline-block;font-weight:700;padding:.7em 1em;text-align:center;text-decoration:none;text-shadow:1px 1px 0 #528ecc;width:87%}.downloads li>a:hover{background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#629D4F),color-stop(1,#1C8D2E));background-image:-webkit-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-moz-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-ms-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-o-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:linear-gradient(to bottom,#629D4F 5%,#1C8D2E 100%);background-color:#629D4F;text-decoration:none}.downloads ul{margin:0}.version{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;color:#000}.donate{margin-top:5px}.all-downloads{padding:.2em 1em;text-align:center}.side .portlet{background:none repeat scroll 0 0 #FBFBFB;border:1px solid #DEDEDE;margin:0 auto 1em;padding:.5em}.involvement a{background:url(../img/answers-arrow-right.png) no-repeat scroll right center transparent;display:block;padding:.1em}.involvement li{font-weight:700;list-style-type:none;margin-left:0;padding:0}.involvement a:hover,.involvement li:hover{background-color:#d3d3d3;text-decoration:none;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.author{color:silver}.logo a{float:left}.logo a:hover{background-color:inherit;text-decoration:none}::-moz-selection{background-color:#B3D4FC;text-shadow:none}::selection{background-color:#B3D4FC;text-shadow:none}footer,header,nav,section{display:block}[hidden]{display:none}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0} \ No newline at end of file diff --git a/misc/website/websitev2/js/pack.js b/misc/website/websitev2/js/pack.js index b36b2f744..71466c8f0 100644 --- a/misc/website/websitev2/js/pack.js +++ b/misc/website/websitev2/js/pack.js @@ -1 +1 @@ -function rssfeedsetup(){var t=new google.feeds.Feed("http://sourceforge.net/p/processhacker/code/feed");t.setNumEntries(5),t.load(displayfeed)}function displayfeed(t){if(t.error)feedcontainer.innerHTML="Error fetching feeds!";else{for(var e="",n=t.feed.entries,s=0;s",e+=''+n[s].title.replace("/p/processhacker/code/","http://sourceforge.net/p/processhacker/code/")+"",e+=' by '+n[s].author+"",e+='
'+moment(n[s].publishedDate).fromNow()+" - "+new Date(n[s].publishedDate).toLocaleString()+"
",e+="";feedcontainer.innerHTML=e}}!function(t){function e(t,e){return function(n){return u(t.call(this,n),e)}}function n(t,e){return function(n){return this.lang().ordinal(t.call(this,n),e)}}function s(){}function i(t){a(this,t)}function r(t){var e=t.years||t.year||t.y||0,n=t.months||t.month||t.M||0,s=t.weeks||t.week||t.w||0,i=t.days||t.day||t.d||0,r=t.hours||t.hour||t.h||0,a=t.minutes||t.minute||t.m||0,o=t.seconds||t.second||t.s||0,u=t.milliseconds||t.millisecond||t.ms||0;this._input=t,this._milliseconds=u+1e3*o+6e4*a+36e5*r,this._days=i+7*s,this._months=n+12*e,this._data={},this._bubble()}function a(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function o(t){return 0>t?Math.ceil(t):Math.floor(t)}function u(t,e){for(var n=t+"";n.lengthn;n++)~~t[n]!==~~e[n]&&r++;return r+i}function f(t){return t?ie[t]||t.toLowerCase().replace(/(.)s$/,"$1"):t}function l(t,e){return e.abbr=t,x[t]||(x[t]=new s),x[t].set(e),x[t]}function _(t){if(!t)return H.fn._lang;if(!x[t]&&A)try{require("./lang/"+t)}catch(e){return H.fn._lang}return x[t]}function m(t){return t.match(/\[.*\]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function y(t){var e,n,s=t.match(E);for(e=0,n=s.length;n>e;e++)s[e]=ue[s[e]]?ue[s[e]]:m(s[e]);return function(i){var r="";for(e=0;n>e;e++)r+=s[e]instanceof Function?s[e].call(i,t):s[e];return r}}function g(t,e){function n(e){return t.lang().longDateFormat(e)||e}for(var s=5;s--&&N.test(e);)e=e.replace(N,n);return re[e]||(re[e]=y(e)),re[e](t)}function p(t,e){switch(t){case"DDDD":return V;case"YYYY":return X;case"YYYYY":return $;case"S":case"SS":case"SSS":case"DDD":return J;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return R;case"a":case"A":return _(e._l)._meridiemParse;case"X":return q;case"Z":case"ZZ":return j;case"T":return B;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return I;default:return new RegExp(t.replace("\\",""))}}function M(t){var e=(j.exec(t)||[])[0],n=(e+"").match(ee)||["-",0,0],s=+(60*n[1])+~~n[2];return"+"===n[0]?-s:s}function D(t,e,n){var s,i=n._a;switch(t){case"M":case"MM":i[1]=null==e?0:~~e-1;break;case"MMM":case"MMMM":s=_(n._l).monthsParse(e),null!=s?i[1]=s:n._isValid=!1;break;case"D":case"DD":case"DDD":case"DDDD":null!=e&&(i[2]=~~e);break;case"YY":i[0]=~~e+(~~e>68?1900:2e3);break;case"YYYY":case"YYYYY":i[0]=~~e;break;case"a":case"A":n._isPm=_(n._l).isPM(e);break;case"H":case"HH":case"h":case"hh":i[3]=~~e;break;case"m":case"mm":i[4]=~~e;break;case"s":case"ss":i[5]=~~e;break;case"S":case"SS":case"SSS":i[6]=~~(1e3*("0."+e));break;case"X":n._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=M(e)}null==e&&(n._isValid=!1)}function w(t){var e,n,s=[];if(!t._d){for(e=0;7>e;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];s[3]+=~~((t._tzm||0)/60),s[4]+=~~((t._tzm||0)%60),n=new Date(0),t._useUTC?(n.setUTCFullYear(s[0],s[1],s[2]),n.setUTCHours(s[3],s[4],s[5],s[6])):(n.setFullYear(s[0],s[1],s[2]),n.setHours(s[3],s[4],s[5],s[6])),t._d=n}}function Y(t){var e,n,s=t._f.match(E),i=t._i;for(t._a=[],e=0;eo&&(u=o,s=n);a(t,s)}function v(t){var e,n=t._i,s=K.exec(n);if(s){for(t._f="YYYY-MM-DD"+(s[2]||" "),e=0;4>e;e++)if(te[e][1].exec(n)){t._f+=te[e][0];break}j.exec(n)&&(t._f+=" Z"),Y(t)}else t._d=new Date(n)}function T(e){var n=e._i,s=G.exec(n);n===t?e._d=new Date:s?e._d=new Date(+s[1]):"string"==typeof n?v(e):h(n)?(e._a=n.slice(0),w(e)):e._d=n instanceof Date?new Date(+n):new Date(n)}function b(t,e,n,s,i){return i.relativeTime(e||1,!!n,t,s)}function S(t,e,n){var s=W(Math.abs(t)/1e3),i=W(s/60),r=W(i/60),a=W(r/24),o=W(a/365),u=45>s&&["s",s]||1===i&&["m"]||45>i&&["mm",i]||1===r&&["h"]||22>r&&["hh",r]||1===a&&["d"]||25>=a&&["dd",a]||45>=a&&["M"]||345>a&&["MM",W(a/30)]||1===o&&["y"]||["yy",o];return u[2]=e,u[3]=t>0,u[4]=n,b.apply({},u)}function F(t,e,n){var s,i=n-e,r=n-t.day();return r>i&&(r-=7),i-7>r&&(r+=7),s=H(t).add("d",r),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function L(t){var e=t._i,n=t._f;return null===e||""===e?null:("string"==typeof e&&(t._i=e=_().preparse(e)),H.isMoment(e)?(t=a({},e),t._d=new Date(+e._d)):n?h(n)?k(t):Y(t):T(t),new i(t))}function O(t,e){H.fn[t]=H.fn[t+"s"]=function(t){var n=this._isUTC?"UTC":"";return null!=t?(this._d["set"+n+e](t),H.updateOffset(this),this):this._d["get"+n+e]()}}function z(t){H.duration.fn[t]=function(){return this._data[t]}}function C(t,e){H.duration.fn["as"+t]=function(){return+this/e}}for(var H,P,U="2.1.0",W=Math.round,x={},A="undefined"!=typeof module&&module.exports,G=/^\/?Date\((\-?\d+)/i,Z=/(\-)?(\d*)?\.?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/,E=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,N=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,I=/\d\d?/,J=/\d{1,3}/,V=/\d{3}/,X=/\d{1,4}/,$=/[+\-]?\d{1,6}/,R=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,j=/Z|[\+\-]\d\d:?\d\d/i,B=/T/i,q=/[\+\-]?\d+(\.\d{1,3})?/,K=/^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,Q="YYYY-MM-DDTHH:mm:ssZ",te=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],ee=/([\+\-]|\d\d)/gi,ne="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),se={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},ie={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",w:"week",M:"month",y:"year"},re={},ae="DDD w W M D d".split(" "),oe="M D H h m s w W".split(" "),ue={M:function(){return this.month()+1},MMM:function(t){return this.lang().monthsShort(this,t)},MMMM:function(t){return this.lang().months(this,t)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(t){return this.lang().weekdaysMin(this,t)},ddd:function(t){return this.lang().weekdaysShort(this,t)},dddd:function(t){return this.lang().weekdays(this,t)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return u(this.year()%100,2)},YYYY:function(){return u(this.year(),4)},YYYYY:function(){return u(this.year(),5)},gg:function(){return u(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return u(this.weekYear(),5)},GG:function(){return u(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return u(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return u(~~(this.milliseconds()/10),2)},SSS:function(){return u(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(t/60),2)+":"+u(~~t%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(10*t/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}};ae.length;)P=ae.pop(),ue[P+"o"]=n(ue[P],P);for(;oe.length;)P=oe.pop(),ue[P+P]=e(ue[P],2);for(ue.DDDD=e(ue.DDD,3),s.prototype={set:function(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:this["_"+n]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,n,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(n=H([2e3,e]),s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,n,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(n=H([2e3,1]).day(e),s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase()[0]},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var n=this._calendar[t];return"function"==typeof n?n.apply(e):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,n,s){var i=this._relativeTime[n];return"function"==typeof i?i(t,e,n,s):i.replace(/%d/i,t)},pastFuture:function(t,e){var n=this._relativeTime[t>0?"future":"past"];return"function"==typeof n?n(e):n.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return F(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6}},H=function(t,e,n){return L({_i:t,_f:e,_l:n,_isUTC:!1})},H.utc=function(t,e,n){return L({_useUTC:!0,_isUTC:!0,_l:n,_i:t,_f:e})},H.unix=function(t){return H(1e3*t)},H.duration=function(t,e){var n,s,i=H.isDuration(t),a="number"==typeof t,o=i?t._input:a?{}:t,u=Z.exec(t);return a?e?o[e]=t:o.milliseconds=t:u&&(n="-"===u[1]?-1:1,o={y:0,d:~~u[2]*n,h:~~u[3]*n,m:~~u[4]*n,s:~~u[5]*n,ms:~~u[6]*n}),s=new r(o),i&&t.hasOwnProperty("_lang")&&(s._lang=t._lang),s},H.version=U,H.defaultFormat=Q,H.updateOffset=function(){},H.lang=function(t,e){return t?(e?l(t,e):x[t]||_(t),H.duration.fn._lang=H.fn._lang=_(t),void 0):H.fn._lang._abbr},H.langData=function(t){return t&&t._lang&&t._lang._abbr&&(t=t._lang._abbr),_(t)},H.isMoment=function(t){return t instanceof i},H.isDuration=function(t){return t instanceof r},H.fn=i.prototype={clone:function(){return H(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return g(H(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var t=this;return[t.year(),t.month(),t.date(),t.hours(),t.minutes(),t.seconds(),t.milliseconds()]},isValid:function(){return null==this._isValid&&(this._isValid=this._a?!c(this._a,(this._isUTC?H.utc(this._a):H(this._a)).toArray()):!isNaN(this._d.getTime())),!!this._isValid},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(t){var e=g(this,t||H.defaultFormat);return this.lang().postformat(e)},add:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),d(this,n,1),this},subtract:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),d(this,n,-1),this},diff:function(t,e,n){var s,i,r=this._isUTC?H(t).zone(this._offset||0):H(t).local(),a=6e4*(this.zone()-r.zone());return e=f(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),i=12*(this.year()-r.year())+(this.month()-r.month()),i+=(this-H(this).startOf("month")-(r-H(r).startOf("month")))/s,i-=6e4*(this.zone()-H(this).startOf("month").zone()-(r.zone()-H(r).startOf("month").zone()))/s,"year"===e&&(i/=12)):(s=this-r,i="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),n?i:o(i)},from:function(t,e){return H.duration(this.diff(t)).lang(this.lang()._abbr).humanize(!e)},fromNow:function(t){return this.from(H(),t)},calendar:function(){var t=this.diff(H().startOf("day"),"days",!0),e=-6>t?"sameElse":-1>t?"lastWeek":0>t?"lastDay":1>t?"sameDay":2>t?"nextDay":7>t?"nextWeek":"sameElse";return this.format(this.lang().calendar(e,this))},isLeapYear:function(){var t=this.year();return 0===t%4&&0!==t%100||0===t%400},isDST:function(){return this.zone()+H(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+H(t).startOf(e)},isSame:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)===+H(t).startOf(e)},min:function(t){return t=H.apply(null,arguments),this>t?this:t},max:function(t){return t=H.apply(null,arguments),t>this?this:t},zone:function(t){var e=this._offset||0;return null==t?this._isUTC?e:this._d.getTimezoneOffset():("string"==typeof t&&(t=M(t)),Math.abs(t)<16&&(t=60*t),this._offset=t,this._isUTC=!0,e!==t&&d(this,H.duration(e-t,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},daysInMonth:function(){return H.utc([this.year(),this.month()+1,0]).date()},dayOfYear:function(t){var e=W((H(this).startOf("day")-H(this).startOf("year"))/864e5)+1;return null==t?e:this.add("d",t-e)},weekYear:function(t){var e=F(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==t?e:this.add("y",t-e)},isoWeekYear:function(t){var e=F(this,1,4).year;return null==t?e:this.add("y",t-e)},week:function(t){var e=this.lang().week(this);return null==t?e:this.add("d",7*(t-e))},isoWeek:function(t){var e=F(this,1,4).week;return null==t?e:this.add("d",7*(t-e))},weekday:function(t){var e=(this._d.getDay()+7-this.lang()._week.dow)%7;return null==t?e:this.add("d",t-e)},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},lang:function(e){return e===t?this._lang:(this._lang=_(e),this)}},P=0;PLoading commit history...",window.onload=function(){rssfeedsetup()}; \ No newline at end of file +function rssfeedsetup(){var t=new google.feeds.Feed("http://sourceforge.net/p/processhacker/code/feed");t.setNumEntries(5),t.load(displayfeed)}function displayfeed(t){if(t.error)feedcontainer.innerHTML="Error fetching feeds!";else{for(var e="",n=t.feed.entries,s=0;s",e+=''+n[s].title.replace("/p/processhacker/code/","http://sourceforge.net/p/processhacker/code/")+"",e+=' by '+n[s].author+"",e+='
'+moment(n[s].publishedDate).fromNow()+" - "+new Date(n[s].publishedDate).toLocaleString()+"
",e+="";feedcontainer.innerHTML=e}}(function(t){function e(t,e){return function(n){return u(t.call(this,n),e)}}function n(t,e){return function(n){return this.lang().ordinal(t.call(this,n),e)}}function s(){}function i(t){a(this,t)}function r(t){var e=t.years||t.year||t.y||0,n=t.months||t.month||t.M||0,s=t.weeks||t.week||t.w||0,i=t.days||t.day||t.d||0,r=t.hours||t.hour||t.h||0,a=t.minutes||t.minute||t.m||0,o=t.seconds||t.second||t.s||0,u=t.milliseconds||t.millisecond||t.ms||0;this._input=t,this._milliseconds=u+1e3*o+6e4*a+36e5*r,this._days=i+7*s,this._months=n+12*e,this._data={},this._bubble()}function a(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function o(t){return 0>t?Math.ceil(t):Math.floor(t)}function u(t,e){for(var n=t+"";n.lengthn;n++)~~t[n]!==~~e[n]&&r++;return r+i}function f(t){return t?ie[t]||t.toLowerCase().replace(/(.)s$/,"$1"):t}function l(t,e){return e.abbr=t,x[t]||(x[t]=new s),x[t].set(e),x[t]}function _(t){if(!t)return H.fn._lang;if(!x[t]&&A)try{require("./lang/"+t)}catch(e){return H.fn._lang}return x[t]}function m(t){return t.match(/\[.*\]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function y(t){var e,n,s=t.match(E);for(e=0,n=s.length;n>e;e++)s[e]=ue[s[e]]?ue[s[e]]:m(s[e]);return function(i){var r="";for(e=0;n>e;e++)r+=s[e]instanceof Function?s[e].call(i,t):s[e];return r}}function g(t,e){function n(e){return t.lang().longDateFormat(e)||e}for(var s=5;s--&&N.test(e);)e=e.replace(N,n);return re[e]||(re[e]=y(e)),re[e](t)}function p(t,e){switch(t){case"DDDD":return V;case"YYYY":return X;case"YYYYY":return $;case"S":case"SS":case"SSS":case"DDD":return J;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return R;case"a":case"A":return _(e._l)._meridiemParse;case"X":return q;case"Z":case"ZZ":return j;case"T":return B;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return I;default:return new RegExp(t.replace("\\",""))}}function M(t){var e=(j.exec(t)||[])[0],n=(e+"").match(ee)||["-",0,0],s=+(60*n[1])+~~n[2];return"+"===n[0]?-s:s}function D(t,e,n){var s,i=n._a;switch(t){case"M":case"MM":i[1]=null==e?0:~~e-1;break;case"MMM":case"MMMM":s=_(n._l).monthsParse(e),null!=s?i[1]=s:n._isValid=!1;break;case"D":case"DD":case"DDD":case"DDDD":null!=e&&(i[2]=~~e);break;case"YY":i[0]=~~e+(~~e>68?1900:2e3);break;case"YYYY":case"YYYYY":i[0]=~~e;break;case"a":case"A":n._isPm=_(n._l).isPM(e);break;case"H":case"HH":case"h":case"hh":i[3]=~~e;break;case"m":case"mm":i[4]=~~e;break;case"s":case"ss":i[5]=~~e;break;case"S":case"SS":case"SSS":i[6]=~~(1e3*("0."+e));break;case"X":n._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=M(e)}null==e&&(n._isValid=!1)}function w(t){var e,n,s=[];if(!t._d){for(e=0;7>e;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];s[3]+=~~((t._tzm||0)/60),s[4]+=~~((t._tzm||0)%60),n=new Date(0),t._useUTC?(n.setUTCFullYear(s[0],s[1],s[2]),n.setUTCHours(s[3],s[4],s[5],s[6])):(n.setFullYear(s[0],s[1],s[2]),n.setHours(s[3],s[4],s[5],s[6])),t._d=n}}function Y(t){var e,n,s=t._f.match(E),i=t._i;for(t._a=[],e=0;eo&&(u=o,s=n);a(t,s)}function v(t){var e,n=t._i,s=K.exec(n);if(s){for(t._f="YYYY-MM-DD"+(s[2]||" "),e=0;4>e;e++)if(te[e][1].exec(n)){t._f+=te[e][0];break}j.exec(n)&&(t._f+=" Z"),Y(t)}else t._d=new Date(n)}function T(e){var n=e._i,s=G.exec(n);n===t?e._d=new Date:s?e._d=new Date(+s[1]):"string"==typeof n?v(e):h(n)?(e._a=n.slice(0),w(e)):e._d=n instanceof Date?new Date(+n):new Date(n)}function b(t,e,n,s,i){return i.relativeTime(e||1,!!n,t,s)}function S(t,e,n){var s=W(Math.abs(t)/1e3),i=W(s/60),r=W(i/60),a=W(r/24),o=W(a/365),u=45>s&&["s",s]||1===i&&["m"]||45>i&&["mm",i]||1===r&&["h"]||22>r&&["hh",r]||1===a&&["d"]||25>=a&&["dd",a]||45>=a&&["M"]||345>a&&["MM",W(a/30)]||1===o&&["y"]||["yy",o];return u[2]=e,u[3]=t>0,u[4]=n,b.apply({},u)}function F(t,e,n){var s,i=n-e,r=n-t.day();return r>i&&(r-=7),i-7>r&&(r+=7),s=H(t).add("d",r),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function L(t){var e=t._i,n=t._f;return null===e||""===e?null:("string"==typeof e&&(t._i=e=_().preparse(e)),H.isMoment(e)?(t=a({},e),t._d=new Date(+e._d)):n?h(n)?k(t):Y(t):T(t),new i(t))}function O(t,e){H.fn[t]=H.fn[t+"s"]=function(t){var n=this._isUTC?"UTC":"";return null!=t?(this._d["set"+n+e](t),H.updateOffset(this),this):this._d["get"+n+e]()}}function z(t){H.duration.fn[t]=function(){return this._data[t]}}function C(t,e){H.duration.fn["as"+t]=function(){return+this/e}}for(var H,P,U="2.1.0",W=Math.round,x={},A="undefined"!=typeof module&&module.exports,G=/^\/?Date\((\-?\d+)/i,Z=/(\-)?(\d*)?\.?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/,E=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,N=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,I=/\d\d?/,J=/\d{1,3}/,V=/\d{3}/,X=/\d{1,4}/,$=/[+\-]?\d{1,6}/,R=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,j=/Z|[\+\-]\d\d:?\d\d/i,B=/T/i,q=/[\+\-]?\d+(\.\d{1,3})?/,K=/^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,Q="YYYY-MM-DDTHH:mm:ssZ",te=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],ee=/([\+\-]|\d\d)/gi,ne="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),se={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},ie={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",w:"week",M:"month",y:"year"},re={},ae="DDD w W M D d".split(" "),oe="M D H h m s w W".split(" "),ue={M:function(){return this.month()+1},MMM:function(t){return this.lang().monthsShort(this,t)},MMMM:function(t){return this.lang().months(this,t)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(t){return this.lang().weekdaysMin(this,t)},ddd:function(t){return this.lang().weekdaysShort(this,t)},dddd:function(t){return this.lang().weekdays(this,t)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return u(this.year()%100,2)},YYYY:function(){return u(this.year(),4)},YYYYY:function(){return u(this.year(),5)},gg:function(){return u(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return u(this.weekYear(),5)},GG:function(){return u(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return u(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return u(~~(this.milliseconds()/10),2)},SSS:function(){return u(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(t/60),2)+":"+u(~~t%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(10*t/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}};ae.length;)P=ae.pop(),ue[P+"o"]=n(ue[P],P);for(;oe.length;)P=oe.pop(),ue[P+P]=e(ue[P],2);for(ue.DDDD=e(ue.DDD,3),s.prototype={set:function(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:this["_"+n]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,n,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(n=H([2e3,e]),s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,n,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(n=H([2e3,1]).day(e),s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase()[0]},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var n=this._calendar[t];return"function"==typeof n?n.apply(e):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,n,s){var i=this._relativeTime[n];return"function"==typeof i?i(t,e,n,s):i.replace(/%d/i,t)},pastFuture:function(t,e){var n=this._relativeTime[t>0?"future":"past"];return"function"==typeof n?n(e):n.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return F(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6}},H=function(t,e,n){return L({_i:t,_f:e,_l:n,_isUTC:!1})},H.utc=function(t,e,n){return L({_useUTC:!0,_isUTC:!0,_l:n,_i:t,_f:e})},H.unix=function(t){return H(1e3*t)},H.duration=function(t,e){var n,s,i=H.isDuration(t),a="number"==typeof t,o=i?t._input:a?{}:t,u=Z.exec(t);return a?e?o[e]=t:o.milliseconds=t:u&&(n="-"===u[1]?-1:1,o={y:0,d:~~u[2]*n,h:~~u[3]*n,m:~~u[4]*n,s:~~u[5]*n,ms:~~u[6]*n}),s=new r(o),i&&t.hasOwnProperty("_lang")&&(s._lang=t._lang),s},H.version=U,H.defaultFormat=Q,H.updateOffset=function(){},H.lang=function(t,e){return t?(e?l(t,e):x[t]||_(t),H.duration.fn._lang=H.fn._lang=_(t),void 0):H.fn._lang._abbr},H.langData=function(t){return t&&t._lang&&t._lang._abbr&&(t=t._lang._abbr),_(t)},H.isMoment=function(t){return t instanceof i},H.isDuration=function(t){return t instanceof r},H.fn=i.prototype={clone:function(){return H(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return g(H(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var t=this;return[t.year(),t.month(),t.date(),t.hours(),t.minutes(),t.seconds(),t.milliseconds()]},isValid:function(){return null==this._isValid&&(this._isValid=this._a?!c(this._a,(this._isUTC?H.utc(this._a):H(this._a)).toArray()):!isNaN(this._d.getTime())),!!this._isValid},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(t){var e=g(this,t||H.defaultFormat);return this.lang().postformat(e)},add:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),d(this,n,1),this},subtract:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),d(this,n,-1),this},diff:function(t,e,n){var s,i,r=this._isUTC?H(t).zone(this._offset||0):H(t).local(),a=6e4*(this.zone()-r.zone());return e=f(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),i=12*(this.year()-r.year())+(this.month()-r.month()),i+=(this-H(this).startOf("month")-(r-H(r).startOf("month")))/s,i-=6e4*(this.zone()-H(this).startOf("month").zone()-(r.zone()-H(r).startOf("month").zone()))/s,"year"===e&&(i/=12)):(s=this-r,i="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),n?i:o(i)},from:function(t,e){return H.duration(this.diff(t)).lang(this.lang()._abbr).humanize(!e)},fromNow:function(t){return this.from(H(),t)},calendar:function(){var t=this.diff(H().startOf("day"),"days",!0),e=-6>t?"sameElse":-1>t?"lastWeek":0>t?"lastDay":1>t?"sameDay":2>t?"nextDay":7>t?"nextWeek":"sameElse";return this.format(this.lang().calendar(e,this))},isLeapYear:function(){var t=this.year();return 0===t%4&&0!==t%100||0===t%400},isDST:function(){return this.zone()+H(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+H(t).startOf(e)},isSame:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)===+H(t).startOf(e)},min:function(t){return t=H.apply(null,arguments),this>t?this:t},max:function(t){return t=H.apply(null,arguments),t>this?this:t},zone:function(t){var e=this._offset||0;return null==t?this._isUTC?e:this._d.getTimezoneOffset():("string"==typeof t&&(t=M(t)),Math.abs(t)<16&&(t=60*t),this._offset=t,this._isUTC=!0,e!==t&&d(this,H.duration(e-t,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},daysInMonth:function(){return H.utc([this.year(),this.month()+1,0]).date()},dayOfYear:function(t){var e=W((H(this).startOf("day")-H(this).startOf("year"))/864e5)+1;return null==t?e:this.add("d",t-e)},weekYear:function(t){var e=F(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==t?e:this.add("y",t-e)},isoWeekYear:function(t){var e=F(this,1,4).year;return null==t?e:this.add("y",t-e)},week:function(t){var e=this.lang().week(this);return null==t?e:this.add("d",7*(t-e))},isoWeek:function(t){var e=F(this,1,4).week;return null==t?e:this.add("d",7*(t-e))},weekday:function(t){var e=(this._d.getDay()+7-this.lang()._week.dow)%7;return null==t?e:this.add("d",t-e)},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},lang:function(e){return e===t?this._lang:(this._lang=_(e),this)}},P=0;PLoading commit history...",window.onload=function(){rssfeedsetup()}; \ No newline at end of file From 2dcb4b6ec61f25fd19212d43fef24fdd8a21b94d Mon Sep 17 00:00:00 2001 From: xhmikosr Date: Sat, 26 Oct 2013 10:10:06 +0000 Subject: [PATCH 030/161] Switch to vanilla normalize.css. Also include it before our style. git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5497 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/css/normalize.css | 345 ++++++++++++++++++++++- misc/website/websitev2/css/pack.css | 2 +- misc/website/websitev2/minify.bat | 2 +- 3 files changed, 344 insertions(+), 5 deletions(-) diff --git a/misc/website/websitev2/css/normalize.css b/misc/website/websitev2/css/normalize.css index 44df23d67..f9180c151 100644 --- a/misc/website/websitev2/css/normalize.css +++ b/misc/website/websitev2/css/normalize.css @@ -1,4 +1,4 @@ -/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ /* ========================================================================== HTML5 display definitions @@ -8,18 +8,48 @@ * Correct `block` display not defined in IE 8/9. */ +article, +aside, +details, +figcaption, +figure, footer, header, +hgroup, +main, nav, -section { +section, +summary { display: block; } +/** + * Correct `inline-block` display not defined in IE 8/9. + */ + +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + /** * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. */ -[hidden] { +[hidden], +template { display: none; } @@ -28,15 +58,25 @@ section { ========================================================================== */ /** + * 1. Set default font family to sans-serif. * 2. Prevent iOS text size adjust after orientation change, without disabling * user zoom. */ html { + font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } +/** + * Remove default margin. + */ + +body { + margin: 0; +} + /* ========================================================================== Links ========================================================================== */ @@ -65,3 +105,302 @@ a:active, a:hover { outline: 0; } + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9. + */ + +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari 5. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ + +button, +input, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/misc/website/websitev2/css/pack.css b/misc/website/websitev2/css/pack.css index 82164613f..1f3c7ebcc 100644 --- a/misc/website/websitev2/css/pack.css +++ b/misc/website/websitev2/css/pack.css @@ -1 +1 @@ -body{color:#000;font:400 14px 'Segoe UI',Segoe,'Helvetica Neue',Helvetica,Roboto,Arial,FreeSans,sans-serif;margin:0}a:link,a:visited{color:#03A;text-decoration:none}a:link:hover,a:visited:hover{text-decoration:underline}strong{font-weight:700}code{background-color:#F7F7F9;border:1px solid #E1E1E8;color:#D14;font-family:monospace,serif;font-size:1em;padding:.5px 4px}code,.side .portlet{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}dd{margin-left:10px}dt{font-weight:700;margin:15px auto 5px}footer{margin:10px auto;text-align:center}footer ul{list-style-type:none}footer ul,footer li{margin:0;padding:0}h1{font-size:20px;font-weight:700;text-align:center}h2{font-size:18px}h3{line-height:20px;margin:16px auto 8px}h3,.side h2{font-size:16px}img{border:0}li{margin-left:12px;padding-bottom:.5em}nav a{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;margin-right:.4em;padding:.3em .5em}nav .active a{background-color:#dcdcdc;font-weight:700}nav a:link,nav a:visited{color:#000;text-decoration:none}nav a:hover{background-color:#d3d3d3}nav h2{clear:none;color:#000;font-size:30px;font-weight:700;line-height:34px;margin:0 auto}nav li{display:inline-block;margin:0}nav li:first-child{margin-left:-.5em}nav li,.dev ul,.portlet li{list-style-type:none}ul{padding:0}.center{text-align:center}.changelog{border:2px solid #000;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;overflow:scroll;width:800px;height:600px}.ft{font-size:12px}.forumdate{color:silver}.forumdate>.author{color:#A00}.about-li{list-style-type:none;margin-left:0;padding-top:4px}.coder{color:#A00!important}.dev{position:relative}.ohloh-kudos{position:absolute;right:0;top:10px}.ohloh-commits{bottom:0;position:absolute;right:0}.user-avatar{background:#fff;border:1px solid #E5DFC7;display:block;float:left;margin:0 10px 0 0;padding:4px}.xhmikosr{color:#00f}.page{margin:0 auto;max-width:90em;padding:0 10px 5px;position:relative}.pre-section{width:700px;margin:-20px auto 0}.main-section{clear:both;margin:auto;padding-top:1px;text-align:center;width:700px}.main-section-2{margin:auto;width:700px}.section-header{border-top:dotted 1px;font-weight:700;margin-top:40px;text-transform:uppercase}.headline{font-size:18px;margin-top:20px;text-align:center}.main-headline{margin-bottom:40px}.main-section .headline{text-align:left}.bottom-download{font-size:20px;text-align:center!important}.tip{font-size:12px;font-style:italic;margin-top:5px;text-align:left}.normal{text-align:left}.yui-d0{margin:auto;width:auto}.yui-t4{margin:auto;width:700px}.yui-b{position:relative}.yui-t4 .yui-b{float:right;width:20em}.yui-g .yui-u,.yui-g .yui-g{float:right}.yui-g .first{float:left}.yui-g .yui-u,.yui-g .yui-g{width:49.1%}.yui-g:after,.yui-t4:after{clear:both;content:".";display:block;height:0;visibility:hidden}.portlet{clear:both;padding:0 0 1em}.portlet>h2:first-child{margin:0}.portlet p{margin:5px 0}.flowed-block{display:inline-block;padding:0 0 0 10px;vertical-align:top}.facetmenu{width:100%}.quick-links{width:250px}.downloads{width:250px}.downloads li{font-weight:700;margin:0;padding:2px 0 0}.downloads li>a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 0 #BBDAF7;-moz-box-shadow:inset 0 1px 0 0 #BBDAF7;box-shadow:inset 0 1px 0 0 #BBDAF7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#1C8D2E),color-stop(1,#629D4F));background-image:-webkit-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-moz-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-ms-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-o-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:linear-gradient(to bottom,#1C8D2E 5%,#629D4F 100%);background-color:#1C8D2E;border:1px solid #1C8D2E;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;display:inline-block;font-weight:700;padding:.7em 1em;text-align:center;text-decoration:none;text-shadow:1px 1px 0 #528ecc;width:87%}.downloads li>a:hover{background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#629D4F),color-stop(1,#1C8D2E));background-image:-webkit-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-moz-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-ms-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-o-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:linear-gradient(to bottom,#629D4F 5%,#1C8D2E 100%);background-color:#629D4F;text-decoration:none}.downloads ul{margin:0}.version{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;color:#000}.donate{margin-top:5px}.all-downloads{padding:.2em 1em;text-align:center}.side .portlet{background:none repeat scroll 0 0 #FBFBFB;border:1px solid #DEDEDE;margin:0 auto 1em;padding:.5em}.involvement a{background:url(../img/answers-arrow-right.png) no-repeat scroll right center transparent;display:block;padding:.1em}.involvement li{font-weight:700;list-style-type:none;margin-left:0;padding:0}.involvement a:hover,.involvement li:hover{background-color:#d3d3d3;text-decoration:none;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.author{color:silver}.logo a{float:left}.logo a:hover{background-color:inherit;text-decoration:none}::-moz-selection{background-color:#B3D4FC;text-shadow:none}::selection{background-color:#B3D4FC;text-shadow:none}footer,header,nav,section{display:block}[hidden]{display:none}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0} \ No newline at end of file +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}body{color:#000;font:400 14px 'Segoe UI',Segoe,'Helvetica Neue',Helvetica,Roboto,Arial,FreeSans,sans-serif;margin:0}a:link,a:visited{color:#03A;text-decoration:none}a:link:hover,a:visited:hover{text-decoration:underline}strong{font-weight:700}code{background-color:#F7F7F9;border:1px solid #E1E1E8;color:#D14;font-family:monospace,serif;font-size:1em;padding:.5px 4px}code,.side .portlet{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}dd{margin-left:10px}dt{font-weight:700;margin:15px auto 5px}footer{margin:10px auto;text-align:center}footer ul{list-style-type:none}footer ul,footer li{margin:0;padding:0}h1{font-size:20px;font-weight:700;text-align:center}h2{font-size:18px}h3{line-height:20px;margin:16px auto 8px}h3,.side h2{font-size:16px}img{border:0}li{margin-left:12px;padding-bottom:.5em}nav a{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;margin-right:.4em;padding:.3em .5em}nav .active a{background-color:#dcdcdc;font-weight:700}nav a:link,nav a:visited{color:#000;text-decoration:none}nav a:hover{background-color:#d3d3d3}nav h2{clear:none;color:#000;font-size:30px;font-weight:700;line-height:34px;margin:0 auto}nav li{display:inline-block;margin:0}nav li:first-child{margin-left:-.5em}nav li,.dev ul,.portlet li{list-style-type:none}ul{padding:0}.center{text-align:center}.changelog{border:2px solid #000;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;overflow:scroll;width:800px;height:600px}.ft{font-size:12px}.forumdate{color:silver}.forumdate>.author{color:#A00}.about-li{list-style-type:none;margin-left:0;padding-top:4px}.coder{color:#A00!important}.dev{position:relative}.ohloh-kudos{position:absolute;right:0;top:10px}.ohloh-commits{bottom:0;position:absolute;right:0}.user-avatar{background:#fff;border:1px solid #E5DFC7;display:block;float:left;margin:0 10px 0 0;padding:4px}.xhmikosr{color:#00f}.page{margin:0 auto;max-width:90em;padding:0 10px 5px;position:relative}.pre-section{width:700px;margin:-20px auto 0}.main-section{clear:both;margin:auto;padding-top:1px;text-align:center;width:700px}.main-section-2{margin:auto;width:700px}.section-header{border-top:dotted 1px;font-weight:700;margin-top:40px;text-transform:uppercase}.headline{font-size:18px;margin-top:20px;text-align:center}.main-headline{margin-bottom:40px}.main-section .headline{text-align:left}.bottom-download{font-size:20px;text-align:center!important}.tip{font-size:12px;font-style:italic;margin-top:5px;text-align:left}.normal{text-align:left}.yui-d0{margin:auto;width:auto}.yui-t4{margin:auto;width:700px}.yui-b{position:relative}.yui-t4 .yui-b{float:right;width:20em}.yui-g .yui-u,.yui-g .yui-g{float:right}.yui-g .first{float:left}.yui-g .yui-u,.yui-g .yui-g{width:49.1%}.yui-g:after,.yui-t4:after{clear:both;content:".";display:block;height:0;visibility:hidden}.portlet{clear:both;padding:0 0 1em}.portlet>h2:first-child{margin:0}.portlet p{margin:5px 0}.flowed-block{display:inline-block;padding:0 0 0 10px;vertical-align:top}.facetmenu{width:100%}.quick-links{width:250px}.downloads{width:250px}.downloads li{font-weight:700;margin:0;padding:2px 0 0}.downloads li>a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 0 #BBDAF7;-moz-box-shadow:inset 0 1px 0 0 #BBDAF7;box-shadow:inset 0 1px 0 0 #BBDAF7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#1C8D2E),color-stop(1,#629D4F));background-image:-webkit-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-moz-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-ms-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:-o-linear-gradient(center top,#1C8D2E 5%,#629D4F 100%);background-image:linear-gradient(to bottom,#1C8D2E 5%,#629D4F 100%);background-color:#1C8D2E;border:1px solid #1C8D2E;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;display:inline-block;font-weight:700;padding:.7em 1em;text-align:center;text-decoration:none;text-shadow:1px 1px 0 #528ecc;width:87%}.downloads li>a:hover{background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#629D4F),color-stop(1,#1C8D2E));background-image:-webkit-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-moz-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-ms-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:-o-linear-gradient(center top,#629D4F 5%,#1C8D2E 100%);background-image:linear-gradient(to bottom,#629D4F 5%,#1C8D2E 100%);background-color:#629D4F;text-decoration:none}.downloads ul{margin:0}.version{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;color:#000}.donate{margin-top:5px}.all-downloads{padding:.2em 1em;text-align:center}.side .portlet{background:none repeat scroll 0 0 #FBFBFB;border:1px solid #DEDEDE;margin:0 auto 1em;padding:.5em}.involvement a{background:url(../img/answers-arrow-right.png) no-repeat scroll right center transparent;display:block;padding:.1em}.involvement li{font-weight:700;list-style-type:none;margin-left:0;padding:0}.involvement a:hover,.involvement li:hover{background-color:#d3d3d3;text-decoration:none;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.author{color:silver}.logo a{float:left}.logo a:hover{background-color:inherit;text-decoration:none}::-moz-selection{background-color:#B3D4FC;text-shadow:none}::selection{background-color:#B3D4FC;text-shadow:none} \ No newline at end of file diff --git a/misc/website/websitev2/minify.bat b/misc/website/websitev2/minify.bat index ca473f684..5973efcb1 100644 --- a/misc/website/websitev2/minify.bat +++ b/misc/website/websitev2/minify.bat @@ -6,7 +6,7 @@ rem npm install -g uglify-js pushd %~dp0 echo minifying and combining css files... -type css\stylesheet.css css\normalize.css | cleancss --s0 --remove-empty -o css\pack.css +type css\normalize.css css\stylesheet.css | cleancss --s0 --remove-empty -o css\pack.css cmd /c uglifyjs js\moment.js js\feed.js --compress --mangle -o js\pack.js popd From b7b4f273e2b82ed325caa5f225048bb7bc932ff3 Mon Sep 17 00:00:00 2001 From: xhmikosr Date: Sat, 26 Oct 2013 10:11:50 +0000 Subject: [PATCH 031/161] Update moment.js to v2.2.1. git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5498 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/js/moment.js | 977 +++++++++++++++++++++++----- misc/website/websitev2/js/pack.js | 2 +- 2 files changed, 803 insertions(+), 176 deletions(-) diff --git a/misc/website/websitev2/js/moment.js b/misc/website/websitev2/js/moment.js index c8a870e8c..e97318d66 100644 --- a/misc/website/websitev2/js/moment.js +++ b/misc/website/websitev2/js/moment.js @@ -1,8 +1,8 @@ -// moment.js -// version : 2.1.0 -// author : Tim Wood -// license : MIT -// momentjs.com +//! moment.js +//! version : 2.3.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com (function (undefined) { @@ -11,8 +11,18 @@ ************************************/ var moment, - VERSION = "2.1.0", - round = Math.round, i, + VERSION = "2.3.1", + round = Math.round, + i, + + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + // internal storage for language config files languages = {}, @@ -21,7 +31,11 @@ // ASP.NET json date format regex aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, - aspNetTimeSpanJsonRegex = /(\-)?(\d*)?\.?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/, + aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, + + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, // format tokens formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g, @@ -39,10 +53,18 @@ parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 // preliminary iso regex - // 0000-00-00 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 - isoRegex = /^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/, + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000) + isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?$/, + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + isoDates = [ + 'YYYY-MM-DD', + 'GGGG-[W]WW', + 'GGGG-[W]WW-E', + 'YYYY-DDD' + ], + // iso time formats and regexes isoTimes = [ ['HH:mm:ss.S', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/], @@ -72,9 +94,24 @@ m : 'minute', h : 'hour', d : 'day', + D : 'date', w : 'week', + W : 'isoWeek', M : 'month', - y : 'year' + y : 'year', + DDD : 'dayOfYear', + e : 'weekday', + E : 'isoWeekday', + gg: 'weekYear', + GG: 'isoWeekYear' + }, + + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' }, // format function strings @@ -170,10 +207,10 @@ return this.seconds(); }, S : function () { - return ~~(this.milliseconds() / 100); + return toInt(this.milliseconds() / 100); }, SS : function () { - return leftZeroFill(~~(this.milliseconds() / 10), 2); + return leftZeroFill(toInt(this.milliseconds() / 10), 2); }, SSS : function () { return leftZeroFill(this.milliseconds(), 3); @@ -185,7 +222,7 @@ a = -a; b = "-"; } - return b + leftZeroFill(~~(a / 60), 2) + ":" + leftZeroFill(~~a % 60, 2); + return b + leftZeroFill(toInt(a / 60), 2) + ":" + leftZeroFill(toInt(a) % 60, 2); }, ZZ : function () { var a = -this.zone(), @@ -194,7 +231,7 @@ a = -a; b = "-"; } - return b + leftZeroFill(~~(10 * a / 6), 4); + return b + leftZeroFill(toInt(10 * a / 6), 4); }, z : function () { return this.zoneAbbr(); @@ -205,7 +242,9 @@ X : function () { return this.unix(); } - }; + }, + + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; function padToken(func, count) { return function (a) { @@ -239,36 +278,38 @@ // Moment prototype object function Moment(config) { + checkOverflow(config); extend(this, config); } // Duration Constructor function Duration(duration) { - var years = duration.years || duration.year || duration.y || 0, - months = duration.months || duration.month || duration.M || 0, - weeks = duration.weeks || duration.week || duration.w || 0, - days = duration.days || duration.day || duration.d || 0, - hours = duration.hours || duration.hour || duration.h || 0, - minutes = duration.minutes || duration.minute || duration.m || 0, - seconds = duration.seconds || duration.second || duration.s || 0, - milliseconds = duration.milliseconds || duration.millisecond || duration.ms || 0; + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; // store reference to input for deterministic cloning this._input = duration; // representation for dateAddRemove - this._milliseconds = milliseconds + + this._milliseconds = +milliseconds + seconds * 1e3 + // 1000 minutes * 6e4 + // 1000 * 60 hours * 36e5; // 1000 * 60 * 60 // Because of dateAddRemove treats 24 hours as different from a // day when working around DST, we need to store them separately - this._days = days + + this._days = +days + weeks * 7; // It is impossible translate months into days without knowing // which months you are are talking about, so we have to store // it separately. - this._months = months + + this._months = +months + years * 12; this._data = {}; @@ -276,7 +317,6 @@ this._bubble(); } - /************************************ Helpers ************************************/ @@ -288,6 +328,15 @@ a[i] = b[i]; } } + + if (b.hasOwnProperty("toString")) { + a.toString = b.toString; + } + + if (b.hasOwnProperty("valueOf")) { + a.valueOf = b.valueOf; + } + return a; } @@ -315,8 +364,7 @@ days = duration._days, months = duration._months, minutes, - hours, - currentDate; + hours; if (milliseconds) { mom._d.setTime(+mom._d + milliseconds * isAdding); @@ -347,14 +395,19 @@ return Object.prototype.toString.call(input) === '[object Array]'; } + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]'; + } + // compare two arrays, return the number of differences - function compareArrays(array1, array2) { + function compareArrays(array1, array2, dontConvert) { var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i; for (i = 0; i < len; i++) { - if (~~array1[i] !== ~~array2[i]) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { diffs++; } } @@ -362,16 +415,164 @@ } function normalizeUnits(units) { - return units ? unitAliases[units] || units.toLowerCase().replace(/(.)s$/, '$1') : units; + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; + } + return units; } + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop, + index; + + for (prop in inputObject) { + if (inputObject.hasOwnProperty(prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + function makeList(field) { + var count, setter; + + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { + return; + } + + moment[field] = function (format, index) { + var i, getter, + method = moment.fn._lang[field], + results = []; + + if (typeof format === 'number') { + index = format; + format = undefined; + } + + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment.fn._lang, m, format || ''); + }; + + if (index != null) { + return getter(index); + } + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); + } + return results; + } + }; + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } + } + + return value; + } + + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function checkOverflow(m) { + var overflow; + if (m._a && m._pf.overflow === -2) { + overflow = + m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : + m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : + m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR : + m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : + m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : + m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + m._pf.overflow = overflow; + } + } + + function initializeParsingFlags(config) { + config._pf = { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false + }; + } + + function isValid(m) { + if (m._isValid == null) { + m._isValid = !isNaN(m._d.getTime()) && + m._pf.overflow < 0 && + !m._pf.empty && + !m._pf.invalidMonth && + !m._pf.nullInput && + !m._pf.invalidFormat && + !m._pf.userInvalidated; + + if (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0; + } + } + return m._isValid; + } + + function normalizeLanguage(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } /************************************ Languages ************************************/ - Language.prototype = { + extend(Language.prototype, { + set : function (config) { var prop, i; for (i in config) { @@ -404,7 +605,7 @@ for (i = 0; i < 12; i++) { // make the regex if we don't have it already if (!this._monthsParse[i]) { - mom = moment([2000, i]); + mom = moment.utc([2000, i]); regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); } @@ -470,7 +671,9 @@ }, isPM : function (input) { - return ((input + '').toLowerCase()[0] === 'p'); + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); }, _meridiemParse : /[ap]\.?m?\.?/i, @@ -537,11 +740,17 @@ week : function (mom) { return weekOfYear(mom, this._week.dow, this._week.doy).week; }, + _week : { dow : 0, // Sunday is the first day of the week. doy : 6 // The week that contains Jan 1st is the first week of the year. + }, + + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; } - }; + }); // Loads a language definition into the `languages` cache. The function // takes a key and optionally values. If not in the browser and no values @@ -556,6 +765,11 @@ return languages[key]; } + // Remove a language from the `languages` cache. Mostly useful in tests. + function unloadLang(key) { + delete languages[key]; + } + // Determines which language definition to use and returns it. // // With no parameters, it will return the global language. If you @@ -563,20 +777,52 @@ // definition for 'en', so long as 'en' has already been loaded using // moment.lang. function getLangDefinition(key) { + var i = 0, j, lang, next, split, + get = function (k) { + if (!languages[k] && hasModule) { + try { + require('./lang/' + k); + } catch (e) { } + } + return languages[k]; + }; + if (!key) { return moment.fn._lang; } - if (!languages[key] && hasModule) { - try { - require('./lang/' + key); - } catch (e) { - // call with no params to set to default - return moment.fn._lang; + + if (!isArray(key)) { + //short-circuit everything else + lang = get(key); + if (lang) { + return lang; } + key = [key]; } - return languages[key]; - } + //pick the language from the array + //try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + //substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + while (i < key.length) { + split = normalizeLanguage(key[i]).split('-'); + j = split.length; + next = normalizeLanguage(key[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + lang = get(split.slice(0, j).join('-')); + if (lang) { + return lang; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return moment.fn._lang; + } /************************************ Formatting @@ -584,7 +830,7 @@ function removeFormattingTokens(input) { - if (input.match(/\[.*\]/)) { + if (input.match(/\[[\s\S]/)) { return input.replace(/^\[|\]$/g, ""); } return input.replace(/\\/g, ""); @@ -612,15 +858,12 @@ // format date using native date object function formatMoment(m, format) { - var i = 5; - function replaceLongDateFormatTokens(input) { - return m.lang().longDateFormat(input) || input; + if (!m.isValid()) { + return m.lang().invalidDate(); } - while (i-- && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - } + format = expandFormat(format, m.lang()); if (!formatFunctions[format]) { formatFunctions[format] = makeFormatFunction(format); @@ -629,6 +872,23 @@ return formatFunctions[format](m); } + function expandFormat(format, lang) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return lang.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + /************************************ Parsing @@ -637,12 +897,17 @@ // get the regex to find the next token function getParseRegexForToken(token, config) { + var a; switch (token) { case 'DDDD': return parseTokenThreeDigits; case 'YYYY': + case 'GGGG': + case 'gggg': return parseTokenFourDigits; case 'YYYYY': + case 'GGGGG': + case 'ggggg': return parseTokenSixDigits; case 'S': case 'SS': @@ -668,6 +933,8 @@ case 'MM': case 'DD': case 'YY': + case 'GG': + case 'gg': case 'HH': case 'hh': case 'mm': @@ -679,16 +946,23 @@ case 'h': case 'm': case 's': + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'e': + case 'E': return parseTokenOneOrTwoDigits; default : - return new RegExp(token.replace('\\', '')); + a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), "i")); + return a; } } function timezoneMinutesFromString(string) { var tzchunk = (parseTokenTimezone.exec(string) || [])[0], parts = (tzchunk + '').match(parseTimezoneChunker) || ['-', 0, 0], - minutes = +(parts[1] * 60) + ~~parts[2]; + minutes = +(parts[1] * 60) + toInt(parts[2]); return parts[0] === '+' ? -minutes : minutes; } @@ -701,34 +975,42 @@ // MONTH case 'M' : // fall through to MM case 'MM' : - datePartArray[1] = (input == null) ? 0 : ~~input - 1; + if (input != null) { + datePartArray[MONTH] = toInt(input) - 1; + } break; case 'MMM' : // fall through to MMMM case 'MMMM' : a = getLangDefinition(config._l).monthsParse(input); // if we didn't find a month name, mark the date as invalid. if (a != null) { - datePartArray[1] = a; + datePartArray[MONTH] = a; } else { - config._isValid = false; + config._pf.invalidMonth = input; } break; // DAY OF MONTH - case 'D' : // fall through to DDDD - case 'DD' : // fall through to DDDD + case 'D' : // fall through to DD + case 'DD' : + if (input != null) { + datePartArray[DATE] = toInt(input); + } + break; + // DAY OF YEAR case 'DDD' : // fall through to DDDD case 'DDDD' : if (input != null) { - datePartArray[2] = ~~input; + config._dayOfYear = toInt(input); } + break; // YEAR case 'YY' : - datePartArray[0] = ~~input + (~~input > 68 ? 1900 : 2000); + datePartArray[YEAR] = toInt(input) + (toInt(input) > 68 ? 1900 : 2000); break; case 'YYYY' : case 'YYYYY' : - datePartArray[0] = ~~input; + datePartArray[YEAR] = toInt(input); break; // AM / PM case 'a' : // fall through to A @@ -740,23 +1022,23 @@ case 'HH' : // fall through to hh case 'h' : // fall through to hh case 'hh' : - datePartArray[3] = ~~input; + datePartArray[HOUR] = toInt(input); break; // MINUTE case 'm' : // fall through to mm case 'mm' : - datePartArray[4] = ~~input; + datePartArray[MINUTE] = toInt(input); break; // SECOND case 's' : // fall through to ss case 'ss' : - datePartArray[5] = ~~input; + datePartArray[SECOND] = toInt(input); break; // MILLISECOND case 'S' : case 'SS' : case 'SSS' : - datePartArray[6] = ~~ (('0.' + input) * 1000); + datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); break; // UNIX TIMESTAMP WITH MS case 'X': @@ -768,11 +1050,29 @@ config._useUTC = true; config._tzm = timezoneMinutesFromString(input); break; - } - - // if the input is null, the date is not valid - if (input == null) { - config._isValid = false; + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'd': + case 'dd': + case 'ddd': + case 'dddd': + case 'e': + case 'E': + token = token.substr(0, 1); + /* falls through */ + case 'gg': + case 'gggg': + case 'GG': + case 'GGGG': + case 'GGGGG': + token = token.substr(0, 2); + if (input) { + config._w = config._w || {}; + config._w[token] = input; + } + break; } } @@ -780,102 +1080,227 @@ // the array should mirror the parameters below // note: all values past the year are optional and will default to the lowest possible value. // [year, month, day , hour, minute, second, millisecond] - function dateFromArray(config) { - var i, date, input = []; + function dateFromConfig(config) { + var i, date, input = [], currentDate, + yearToUse, fixYear, w, temp, lang, weekday, week; if (config._d) { return; } - for (i = 0; i < 7; i++) { + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + fixYear = function (val) { + return val ? + (val.length < 3 ? (parseInt(val, 10) > 68 ? '19' + val : '20' + val) : val) : + (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]); + }; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + temp = dayOfYearFromWeeks(fixYear(w.GG), w.W || 1, w.E, 4, 1); + } + else { + lang = getLangDefinition(config._l); + weekday = w.d != null ? parseWeekday(w.d, lang) : + (w.e != null ? parseInt(w.e, 10) + lang._week.dow : 0); + + week = parseInt(w.w, 10) || 1; + + //if we're parsing 'd', then the low day numbers may be next week + if (w.d != null && weekday < lang._week.dow) { + week++; + } + + temp = dayOfYearFromWeeks(fixYear(w.gg), week, weekday, lang._week.doy, lang._week.dow); + } + + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = config._a[YEAR] == null ? currentDate[YEAR] : config._a[YEAR]; + + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } + + date = makeUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; } // add the offsets to the time to be parsed so that we can have a clean array for checking isValid - input[3] += ~~((config._tzm || 0) / 60); - input[4] += ~~((config._tzm || 0) % 60); + input[HOUR] += toInt((config._tzm || 0) / 60); + input[MINUTE] += toInt((config._tzm || 0) % 60); - date = new Date(0); + config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); + } + function dateFromObject(config) { + var normalizedInput; + + if (config._d) { + return; + } + + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; + + dateFromConfig(config); + } + + function currentDateArray(config) { + var now = new Date(); if (config._useUTC) { - date.setUTCFullYear(input[0], input[1], input[2]); - date.setUTCHours(input[3], input[4], input[5], input[6]); + return [ + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + ]; } else { - date.setFullYear(input[0], input[1], input[2]); - date.setHours(input[3], input[4], input[5], input[6]); + return [now.getFullYear(), now.getMonth(), now.getDate()]; } - - config._d = date; } // date from string and format string function makeDateFromStringAndFormat(config) { - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var tokens = config._f.match(formattingTokens), - string = config._i, - i, parsedInput; config._a = []; + config._pf.empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var lang = getLangDefinition(config._l), + string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, lang).match(formattingTokens) || []; for (i = 0; i < tokens.length; i++) { - parsedInput = (getParseRegexForToken(tokens[i], config).exec(string) || [])[0]; + token = tokens[i]; + parsedInput = (getParseRegexForToken(token, config).exec(string) || [])[0]; if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + config._pf.unusedInput.push(skipped); + } string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + config._pf.empty = false; + } + else { + config._pf.unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); } - // don't parse if its not a known token - if (formatTokenFunctions[tokens[i]]) { - addTimeToArrayFromToken(tokens[i], parsedInput, config); + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); } } - // add remaining unparsed input to the string - if (string) { - config._il = string; + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); } // handle am pm - if (config._isPm && config._a[3] < 12) { - config._a[3] += 12; + if (config._isPm && config._a[HOUR] < 12) { + config._a[HOUR] += 12; } // if is 12 am, change hours to 0 - if (config._isPm === false && config._a[3] === 12) { - config._a[3] = 0; + if (config._isPm === false && config._a[HOUR] === 12) { + config._a[HOUR] = 0; } - // return - dateFromArray(config); + + dateFromConfig(config); + checkOverflow(config); + } + + function unescapeFormat(s) { + return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function regexpEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } // date from string and array of format strings function makeDateFromStringAndArray(config) { var tempConfig, - tempMoment, bestMoment, - scoreToBeat = 99, + scoreToBeat, i, currentScore; + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } + for (i = 0; i < config._f.length; i++) { + currentScore = 0; tempConfig = extend({}, config); + initializeParsingFlags(tempConfig); tempConfig._f = config._f[i]; makeDateFromStringAndFormat(tempConfig); - tempMoment = new Moment(tempConfig); - - currentScore = compareArrays(tempConfig._a, tempMoment.toArray()); - // if there is any input that was not parsed - // add a penalty for that format - if (tempMoment._il) { - currentScore += tempMoment._il.length; + if (!isValid(tempConfig)) { + continue; } - if (currentScore < scoreToBeat) { + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; + + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; + + tempConfig._pf.score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { scoreToBeat = currentScore; - bestMoment = tempMoment; + bestMoment = tempConfig; } } - extend(config, bestMoment); + extend(config, bestMoment || tempConfig); } // date from iso format @@ -885,8 +1310,13 @@ match = isoRegex.exec(string); if (match) { - // match[2] should be "T" or undefined - config._f = 'YYYY-MM-DD' + (match[2] || " "); + for (i = 4; i > 0; i--) { + if (match[i]) { + // match[5] should be "T" or undefined + config._f = isoDates[i - 1] + (match[6] || " "); + break; + } + } for (i = 0; i < 4; i++) { if (isoTimes[i][1].exec(string)) { config._f += isoTimes[i][0]; @@ -897,7 +1327,8 @@ config._f += " Z"; } makeDateFromStringAndFormat(config); - } else { + } + else { config._d = new Date(string); } } @@ -914,12 +1345,50 @@ makeDateFromString(config); } else if (isArray(input)) { config._a = input.slice(0); - dateFromArray(config); + dateFromConfig(config); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if (typeof(input) === 'object') { + dateFromObject(config); } else { - config._d = input instanceof Date ? new Date(+input) : new Date(input); + config._d = new Date(input); } } + function makeDate(y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } + + function makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + function parseWeekday(input, language) { + if (typeof input === 'string') { + if (!isNaN(input)) { + input = parseInt(input, 10); + } + else { + input = language.weekdaysParse(input); + if (typeof input !== 'number') { + return null; + } + } + } + return input; + } /************************************ Relative Time @@ -987,6 +1456,20 @@ }; } + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var d = new Date(Date.UTC(year, 0)).getUTCDay(), + daysToAdd, dayOfYear; + + weekday = weekday != null ? weekday : firstDayOfWeek; + daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0); + dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; + + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } /************************************ Top Level Functions @@ -996,16 +1479,22 @@ var input = config._i, format = config._f; - if (input === null || input === '') { - return null; + if (typeof config._pf === 'undefined') { + initializeParsingFlags(config); + } + + if (input === null) { + return moment.invalid({nullInput: true}); } if (typeof input === 'string') { config._i = input = getLangDefinition().preparse(input); } + if (moment.isMoment(input)) { config = extend({}, input); + config._d = new Date(+input._d); } else if (format) { if (isArray(format)) { @@ -1020,24 +1509,38 @@ return new Moment(config); } - moment = function (input, format, lang) { + moment = function (input, format, lang, strict) { + if (typeof(lang) === "boolean") { + strict = lang; + lang = undefined; + } return makeMoment({ _i : input, _f : format, _l : lang, + _strict : strict, _isUTC : false }); }; // creating with utc - moment.utc = function (input, format, lang) { - return makeMoment({ + moment.utc = function (input, format, lang, strict) { + var m; + + if (typeof(lang) === "boolean") { + strict = lang; + lang = undefined; + } + m = makeMoment({ _useUTC : true, _isUTC : true, _l : lang, _i : input, - _f : format - }); + _f : format, + _strict : strict + }).utc(); + + return m; }; // creating with unix timestamp (in seconds) @@ -1050,9 +1553,13 @@ var isDuration = moment.isDuration(input), isNumber = (typeof input === 'number'), duration = (isDuration ? input._input : (isNumber ? {} : input)), - matched = aspNetTimeSpanJsonRegex.exec(input), + // matching against regexp is expensive, do it on demand + match = null, sign, - ret; + ret, + parseIso, + timeEmpty, + dateTimeEmpty; if (isNumber) { if (key) { @@ -1060,15 +1567,34 @@ } else { duration.milliseconds = input; } - } else if (matched) { - sign = (matched[1] === "-") ? -1 : 1; + } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { + sign = (match[1] === "-") ? -1 : 1; duration = { y: 0, - d: ~~matched[2] * sign, - h: ~~matched[3] * sign, - m: ~~matched[4] * sign, - s: ~~matched[5] * sign, - ms: ~~matched[6] * sign + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = isoDurationRegex.exec(input))) { + sign = (match[1] === "-") ? -1 : 1; + parseIso = function (inp) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + }; + duration = { + y: parseIso(match[2]), + M: parseIso(match[3]), + d: parseIso(match[4]), + h: parseIso(match[5]), + m: parseIso(match[6]), + s: parseIso(match[7]), + w: parseIso(match[8]) }; } @@ -1095,15 +1621,20 @@ // no arguments are passed in, it will simply return the current global // language key. moment.lang = function (key, values) { + var r; if (!key) { return moment.fn._lang._abbr; } if (values) { - loadLang(key, values); + loadLang(normalizeLanguage(key), values); + } else if (values === null) { + unloadLang(key); + key = 'en'; } else if (!languages[key]) { getLangDefinition(key); } - moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key); + r = moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key); + return r._abbr; }; // returns language data @@ -1124,13 +1655,36 @@ return obj instanceof Duration; }; + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); + } + + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; + + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } + + return m; + }; + + moment.parseZone = function (input) { + return moment(input).parseZone(); + }; /************************************ Moment Prototype ************************************/ - moment.fn = Moment.prototype = { + extend(moment.fn = Moment.prototype, { clone : function () { return moment(this); @@ -1145,7 +1699,7 @@ }, toString : function () { - return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); + return this.clone().lang('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); }, toDate : function () { @@ -1170,14 +1724,24 @@ }, isValid : function () { - if (this._isValid == null) { - if (this._a) { - this._isValid = !compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()); - } else { - this._isValid = !isNaN(this._d.getTime()); - } + return isValid(this); + }, + + isDSTShifted : function () { + + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; } - return !!this._isValid; + + return false; + }, + + parsingFlags : function () { + return extend({}, this._pf); + }, + + invalidAt: function () { + return this._pf.overflow; }, utc : function () { @@ -1262,7 +1826,7 @@ }, calendar : function () { - var diff = this.diff(moment().startOf('day'), 'days', true), + var diff = this.diff(moment().zone(this.zone()).startOf('day'), 'days', true), format = diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : @@ -1273,8 +1837,7 @@ }, isLeapYear : function () { - var year = this.year(); - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + return isLeapYear(this.year()); }, isDST : function () { @@ -1285,12 +1848,7 @@ day : function (input) { var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); if (input != null) { - if (typeof input === 'string') { - input = this.lang().weekdaysParse(input); - if (typeof input !== 'number') { - return this; - } - } + input = parseWeekday(input, this.lang()); return this.add({ d : input - day }); } else { return day; @@ -1299,8 +1857,7 @@ month : function (input) { var utc = this._isUTC ? 'UTC' : '', - dayOfMonth, - daysInMonth; + dayOfMonth; if (input != null) { if (typeof input === 'string') { @@ -1334,6 +1891,7 @@ this.date(1); /* falls through */ case 'week': + case 'isoWeek': case 'day': this.hours(0); /* falls through */ @@ -1351,13 +1909,16 @@ // weeks are a special case if (units === 'week') { this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); } return this; }, endOf: function (units) { - return this.startOf(units).add(units, 1).subtract('ms', 1); + units = normalizeUnits(units); + return this.startOf(units).add((units === 'isoWeek' ? 'week' : units), 1).subtract('ms', 1); }, isAfter: function (input, units) { @@ -1413,8 +1974,26 @@ return this._isUTC ? "Coordinated Universal Time" : ""; }, + parseZone : function () { + if (typeof this._i === 'string') { + this.zone(this._i); + } + return this; + }, + + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } + + return (this.zone() - input) % 60 === 0; + }, + daysInMonth : function () { - return moment.utc([this.year(), this.month() + 1, 0]).date(); + return daysInMonth(this.year(), this.month()); }, dayOfYear : function (input) { @@ -1443,7 +2022,7 @@ }, weekday : function (input) { - var weekday = (this._d.getDay() + 7 - this.lang()._week.dow) % 7; + var weekday = (this.day() + 7 - this.lang()._week.dow) % 7; return input == null ? weekday : this.add("d", input - weekday); }, @@ -1454,6 +2033,19 @@ return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); }, + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, + + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, + // If passed a language key, it will set the language for this // instance. Otherwise, it will return the language configuration // variables for this instance. @@ -1465,7 +2057,7 @@ return this; } } - }; + }); // helper for adding shortcuts function makeGetterAndSetter(name, key) { @@ -1503,7 +2095,8 @@ ************************************/ - moment.duration.fn = Duration.prototype = { + extend(moment.duration.fn = Duration.prototype, { + _bubble : function () { var milliseconds = this._milliseconds, days = this._days, @@ -1542,7 +2135,7 @@ return this._milliseconds + this._days * 864e5 + (this._months % 12) * 2592e6 + - ~~(this._months / 12) * 31536e6; + toInt(this._months / 12) * 31536e6; }, humanize : function (withSuffix) { @@ -1591,8 +2184,34 @@ return this['as' + units.charAt(0).toUpperCase() + units.slice(1) + 's'](); }, - lang : moment.fn.lang - }; + lang : moment.fn.lang, + + toIsoString : function () { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var years = Math.abs(this.years()), + months = Math.abs(this.months()), + days = Math.abs(this.days()), + hours = Math.abs(this.hours()), + minutes = Math.abs(this.minutes()), + seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); + + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (this.asSeconds() < 0 ? '-' : '') + + 'P' + + (years ? years + 'Y' : '') + + (months ? months + 'M' : '') + + (days ? days + 'D' : '') + + ((hours || minutes || seconds) ? 'T' : '') + + (hours ? hours + 'H' : '') + + (minutes ? minutes + 'M' : '') + + (seconds ? seconds + 'S' : ''); + } + }); function makeDurationGetter(name) { moment.duration.fn[name] = function () { @@ -1628,7 +2247,7 @@ moment.lang('en', { ordinal : function (number) { var b = number % 10, - output = (~~ (number % 100 / 10) === 1) ? 'th' : + output = (toInt(number % 100 / 10) === 1) ? 'th' : (b === 1) ? 'st' : (b === 2) ? 'nd' : (b === 3) ? 'rd' : 'th'; @@ -1636,27 +2255,35 @@ } }); + /* EMBED_LANGUAGES */ /************************************ Exposing Moment ************************************/ + function makeGlobal() { + /*global ender:false */ + if (typeof ender === 'undefined') { + // here, `this` means `window` in the browser, or `global` on the server + // add `moment` as a global object via a string identifier, + // for Closure Compiler "advanced" mode + this['moment'] = moment; + } + } // CommonJS module is defined if (hasModule) { module.exports = moment; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `moment` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['moment'] = moment; - } - /*global define:false */ - if (typeof define === "function" && define.amd) { - define("moment", [], function () { + makeGlobal(); + } else if (typeof define === "function" && define.amd) { + define("moment", function (require, exports, module) { + if (module.config().noGlobal !== true) { + makeGlobal(); + } + return moment; }); + } else { + makeGlobal(); } }).call(this); diff --git a/misc/website/websitev2/js/pack.js b/misc/website/websitev2/js/pack.js index 71466c8f0..17b6ac8f6 100644 --- a/misc/website/websitev2/js/pack.js +++ b/misc/website/websitev2/js/pack.js @@ -1 +1 @@ -function rssfeedsetup(){var t=new google.feeds.Feed("http://sourceforge.net/p/processhacker/code/feed");t.setNumEntries(5),t.load(displayfeed)}function displayfeed(t){if(t.error)feedcontainer.innerHTML="Error fetching feeds!";else{for(var e="",n=t.feed.entries,s=0;s",e+=''+n[s].title.replace("/p/processhacker/code/","http://sourceforge.net/p/processhacker/code/")+"",e+=' by '+n[s].author+"",e+='
'+moment(n[s].publishedDate).fromNow()+" - "+new Date(n[s].publishedDate).toLocaleString()+"
",e+="";feedcontainer.innerHTML=e}}(function(t){function e(t,e){return function(n){return u(t.call(this,n),e)}}function n(t,e){return function(n){return this.lang().ordinal(t.call(this,n),e)}}function s(){}function i(t){a(this,t)}function r(t){var e=t.years||t.year||t.y||0,n=t.months||t.month||t.M||0,s=t.weeks||t.week||t.w||0,i=t.days||t.day||t.d||0,r=t.hours||t.hour||t.h||0,a=t.minutes||t.minute||t.m||0,o=t.seconds||t.second||t.s||0,u=t.milliseconds||t.millisecond||t.ms||0;this._input=t,this._milliseconds=u+1e3*o+6e4*a+36e5*r,this._days=i+7*s,this._months=n+12*e,this._data={},this._bubble()}function a(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function o(t){return 0>t?Math.ceil(t):Math.floor(t)}function u(t,e){for(var n=t+"";n.lengthn;n++)~~t[n]!==~~e[n]&&r++;return r+i}function f(t){return t?ie[t]||t.toLowerCase().replace(/(.)s$/,"$1"):t}function l(t,e){return e.abbr=t,x[t]||(x[t]=new s),x[t].set(e),x[t]}function _(t){if(!t)return H.fn._lang;if(!x[t]&&A)try{require("./lang/"+t)}catch(e){return H.fn._lang}return x[t]}function m(t){return t.match(/\[.*\]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function y(t){var e,n,s=t.match(E);for(e=0,n=s.length;n>e;e++)s[e]=ue[s[e]]?ue[s[e]]:m(s[e]);return function(i){var r="";for(e=0;n>e;e++)r+=s[e]instanceof Function?s[e].call(i,t):s[e];return r}}function g(t,e){function n(e){return t.lang().longDateFormat(e)||e}for(var s=5;s--&&N.test(e);)e=e.replace(N,n);return re[e]||(re[e]=y(e)),re[e](t)}function p(t,e){switch(t){case"DDDD":return V;case"YYYY":return X;case"YYYYY":return $;case"S":case"SS":case"SSS":case"DDD":return J;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return R;case"a":case"A":return _(e._l)._meridiemParse;case"X":return q;case"Z":case"ZZ":return j;case"T":return B;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return I;default:return new RegExp(t.replace("\\",""))}}function M(t){var e=(j.exec(t)||[])[0],n=(e+"").match(ee)||["-",0,0],s=+(60*n[1])+~~n[2];return"+"===n[0]?-s:s}function D(t,e,n){var s,i=n._a;switch(t){case"M":case"MM":i[1]=null==e?0:~~e-1;break;case"MMM":case"MMMM":s=_(n._l).monthsParse(e),null!=s?i[1]=s:n._isValid=!1;break;case"D":case"DD":case"DDD":case"DDDD":null!=e&&(i[2]=~~e);break;case"YY":i[0]=~~e+(~~e>68?1900:2e3);break;case"YYYY":case"YYYYY":i[0]=~~e;break;case"a":case"A":n._isPm=_(n._l).isPM(e);break;case"H":case"HH":case"h":case"hh":i[3]=~~e;break;case"m":case"mm":i[4]=~~e;break;case"s":case"ss":i[5]=~~e;break;case"S":case"SS":case"SSS":i[6]=~~(1e3*("0."+e));break;case"X":n._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=M(e)}null==e&&(n._isValid=!1)}function w(t){var e,n,s=[];if(!t._d){for(e=0;7>e;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];s[3]+=~~((t._tzm||0)/60),s[4]+=~~((t._tzm||0)%60),n=new Date(0),t._useUTC?(n.setUTCFullYear(s[0],s[1],s[2]),n.setUTCHours(s[3],s[4],s[5],s[6])):(n.setFullYear(s[0],s[1],s[2]),n.setHours(s[3],s[4],s[5],s[6])),t._d=n}}function Y(t){var e,n,s=t._f.match(E),i=t._i;for(t._a=[],e=0;eo&&(u=o,s=n);a(t,s)}function v(t){var e,n=t._i,s=K.exec(n);if(s){for(t._f="YYYY-MM-DD"+(s[2]||" "),e=0;4>e;e++)if(te[e][1].exec(n)){t._f+=te[e][0];break}j.exec(n)&&(t._f+=" Z"),Y(t)}else t._d=new Date(n)}function T(e){var n=e._i,s=G.exec(n);n===t?e._d=new Date:s?e._d=new Date(+s[1]):"string"==typeof n?v(e):h(n)?(e._a=n.slice(0),w(e)):e._d=n instanceof Date?new Date(+n):new Date(n)}function b(t,e,n,s,i){return i.relativeTime(e||1,!!n,t,s)}function S(t,e,n){var s=W(Math.abs(t)/1e3),i=W(s/60),r=W(i/60),a=W(r/24),o=W(a/365),u=45>s&&["s",s]||1===i&&["m"]||45>i&&["mm",i]||1===r&&["h"]||22>r&&["hh",r]||1===a&&["d"]||25>=a&&["dd",a]||45>=a&&["M"]||345>a&&["MM",W(a/30)]||1===o&&["y"]||["yy",o];return u[2]=e,u[3]=t>0,u[4]=n,b.apply({},u)}function F(t,e,n){var s,i=n-e,r=n-t.day();return r>i&&(r-=7),i-7>r&&(r+=7),s=H(t).add("d",r),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function L(t){var e=t._i,n=t._f;return null===e||""===e?null:("string"==typeof e&&(t._i=e=_().preparse(e)),H.isMoment(e)?(t=a({},e),t._d=new Date(+e._d)):n?h(n)?k(t):Y(t):T(t),new i(t))}function O(t,e){H.fn[t]=H.fn[t+"s"]=function(t){var n=this._isUTC?"UTC":"";return null!=t?(this._d["set"+n+e](t),H.updateOffset(this),this):this._d["get"+n+e]()}}function z(t){H.duration.fn[t]=function(){return this._data[t]}}function C(t,e){H.duration.fn["as"+t]=function(){return+this/e}}for(var H,P,U="2.1.0",W=Math.round,x={},A="undefined"!=typeof module&&module.exports,G=/^\/?Date\((\-?\d+)/i,Z=/(\-)?(\d*)?\.?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/,E=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,N=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,I=/\d\d?/,J=/\d{1,3}/,V=/\d{3}/,X=/\d{1,4}/,$=/[+\-]?\d{1,6}/,R=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,j=/Z|[\+\-]\d\d:?\d\d/i,B=/T/i,q=/[\+\-]?\d+(\.\d{1,3})?/,K=/^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,Q="YYYY-MM-DDTHH:mm:ssZ",te=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],ee=/([\+\-]|\d\d)/gi,ne="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),se={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},ie={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",w:"week",M:"month",y:"year"},re={},ae="DDD w W M D d".split(" "),oe="M D H h m s w W".split(" "),ue={M:function(){return this.month()+1},MMM:function(t){return this.lang().monthsShort(this,t)},MMMM:function(t){return this.lang().months(this,t)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(t){return this.lang().weekdaysMin(this,t)},ddd:function(t){return this.lang().weekdaysShort(this,t)},dddd:function(t){return this.lang().weekdays(this,t)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return u(this.year()%100,2)},YYYY:function(){return u(this.year(),4)},YYYYY:function(){return u(this.year(),5)},gg:function(){return u(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return u(this.weekYear(),5)},GG:function(){return u(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return u(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return u(~~(this.milliseconds()/10),2)},SSS:function(){return u(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(t/60),2)+":"+u(~~t%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(10*t/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}};ae.length;)P=ae.pop(),ue[P+"o"]=n(ue[P],P);for(;oe.length;)P=oe.pop(),ue[P+P]=e(ue[P],2);for(ue.DDDD=e(ue.DDD,3),s.prototype={set:function(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:this["_"+n]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,n,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(n=H([2e3,e]),s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,n,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(n=H([2e3,1]).day(e),s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase()[0]},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var n=this._calendar[t];return"function"==typeof n?n.apply(e):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,n,s){var i=this._relativeTime[n];return"function"==typeof i?i(t,e,n,s):i.replace(/%d/i,t)},pastFuture:function(t,e){var n=this._relativeTime[t>0?"future":"past"];return"function"==typeof n?n(e):n.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return F(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6}},H=function(t,e,n){return L({_i:t,_f:e,_l:n,_isUTC:!1})},H.utc=function(t,e,n){return L({_useUTC:!0,_isUTC:!0,_l:n,_i:t,_f:e})},H.unix=function(t){return H(1e3*t)},H.duration=function(t,e){var n,s,i=H.isDuration(t),a="number"==typeof t,o=i?t._input:a?{}:t,u=Z.exec(t);return a?e?o[e]=t:o.milliseconds=t:u&&(n="-"===u[1]?-1:1,o={y:0,d:~~u[2]*n,h:~~u[3]*n,m:~~u[4]*n,s:~~u[5]*n,ms:~~u[6]*n}),s=new r(o),i&&t.hasOwnProperty("_lang")&&(s._lang=t._lang),s},H.version=U,H.defaultFormat=Q,H.updateOffset=function(){},H.lang=function(t,e){return t?(e?l(t,e):x[t]||_(t),H.duration.fn._lang=H.fn._lang=_(t),void 0):H.fn._lang._abbr},H.langData=function(t){return t&&t._lang&&t._lang._abbr&&(t=t._lang._abbr),_(t)},H.isMoment=function(t){return t instanceof i},H.isDuration=function(t){return t instanceof r},H.fn=i.prototype={clone:function(){return H(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return g(H(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var t=this;return[t.year(),t.month(),t.date(),t.hours(),t.minutes(),t.seconds(),t.milliseconds()]},isValid:function(){return null==this._isValid&&(this._isValid=this._a?!c(this._a,(this._isUTC?H.utc(this._a):H(this._a)).toArray()):!isNaN(this._d.getTime())),!!this._isValid},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(t){var e=g(this,t||H.defaultFormat);return this.lang().postformat(e)},add:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),d(this,n,1),this},subtract:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),d(this,n,-1),this},diff:function(t,e,n){var s,i,r=this._isUTC?H(t).zone(this._offset||0):H(t).local(),a=6e4*(this.zone()-r.zone());return e=f(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),i=12*(this.year()-r.year())+(this.month()-r.month()),i+=(this-H(this).startOf("month")-(r-H(r).startOf("month")))/s,i-=6e4*(this.zone()-H(this).startOf("month").zone()-(r.zone()-H(r).startOf("month").zone()))/s,"year"===e&&(i/=12)):(s=this-r,i="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),n?i:o(i)},from:function(t,e){return H.duration(this.diff(t)).lang(this.lang()._abbr).humanize(!e)},fromNow:function(t){return this.from(H(),t)},calendar:function(){var t=this.diff(H().startOf("day"),"days",!0),e=-6>t?"sameElse":-1>t?"lastWeek":0>t?"lastDay":1>t?"sameDay":2>t?"nextDay":7>t?"nextWeek":"sameElse";return this.format(this.lang().calendar(e,this))},isLeapYear:function(){var t=this.year();return 0===t%4&&0!==t%100||0===t%400},isDST:function(){return this.zone()+H(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+H(t).startOf(e)},isSame:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)===+H(t).startOf(e)},min:function(t){return t=H.apply(null,arguments),this>t?this:t},max:function(t){return t=H.apply(null,arguments),t>this?this:t},zone:function(t){var e=this._offset||0;return null==t?this._isUTC?e:this._d.getTimezoneOffset():("string"==typeof t&&(t=M(t)),Math.abs(t)<16&&(t=60*t),this._offset=t,this._isUTC=!0,e!==t&&d(this,H.duration(e-t,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},daysInMonth:function(){return H.utc([this.year(),this.month()+1,0]).date()},dayOfYear:function(t){var e=W((H(this).startOf("day")-H(this).startOf("year"))/864e5)+1;return null==t?e:this.add("d",t-e)},weekYear:function(t){var e=F(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==t?e:this.add("y",t-e)},isoWeekYear:function(t){var e=F(this,1,4).year;return null==t?e:this.add("y",t-e)},week:function(t){var e=this.lang().week(this);return null==t?e:this.add("d",7*(t-e))},isoWeek:function(t){var e=F(this,1,4).week;return null==t?e:this.add("d",7*(t-e))},weekday:function(t){var e=(this._d.getDay()+7-this.lang()._week.dow)%7;return null==t?e:this.add("d",t-e)},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},lang:function(e){return e===t?this._lang:(this._lang=_(e),this)}},P=0;PLoading commit history...",window.onload=function(){rssfeedsetup()}; \ No newline at end of file +function rssfeedsetup(){var e=new google.feeds.Feed("http://sourceforge.net/p/processhacker/code/feed");e.setNumEntries(5),e.load(displayfeed)}function displayfeed(e){if(e.error)feedcontainer.innerHTML="Error fetching feeds!";else{for(var t="",n=e.feed.entries,r=0;r",t+=''+n[r].title.replace("/p/processhacker/code/","http://sourceforge.net/p/processhacker/code/")+"",t+=' by '+n[r].author+"",t+='
'+moment(n[r].publishedDate).fromNow()+" - "+new Date(n[r].publishedDate).toLocaleString()+"
",t+="";feedcontainer.innerHTML=t}}(function(e){function t(e,t){return function(n){return u(e.call(this,n),t)}}function n(e,t){return function(n){return this.lang().ordinal(e.call(this,n),t)}}function r(){}function s(e){M(e),i(this,e)}function a(e){var t=_(e),n=t.year||0,r=t.month||0,s=t.week||0,a=t.day||0,i=t.hour||0,o=t.minute||0,u=t.second||0,d=t.millisecond||0;this._input=e,this._milliseconds=+d+1e3*u+6e4*o+36e5*i,this._days=+a+7*s,this._months=+r+12*n,this._data={},this._bubble()}function i(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return t.hasOwnProperty("toString")&&(e.toString=t.toString),t.hasOwnProperty("valueOf")&&(e.valueOf=t.valueOf),e}function o(e){return 0>e?Math.ceil(e):Math.floor(e)}function u(e,t){for(var n=e+"";n.lengthr;r++)(n&&e[r]!==t[r]||!n&&y(e[r])!==y(t[r]))&&i++;return i+a}function l(e){if(e){var t=e.toLowerCase().replace(/(.)s$/,"$1");e=Ut[e]||Ht[t]||t}return e}function _(e){var t,n,r={};for(n in e)e.hasOwnProperty(n)&&(t=l(n),t&&(r[t]=e[n]));return r}function m(t){var n,r;if(0===t.indexOf("week"))n=7,r="day";else{if(0!==t.indexOf("month"))return;n=12,r="month"}tt[t]=function(s,a){var i,o,u=tt.fn._lang[t],d=[];if("number"==typeof s&&(a=s,s=e),o=function(e){var t=tt().utc().set(r,e);return u.call(tt.fn._lang,t,s||"")},null!=a)return o(a);for(i=0;n>i;i++)d.push(o(i));return d}}function y(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=t>=0?Math.floor(t):Math.ceil(t)),n}function p(e,t){return new Date(Date.UTC(e,t+1,0)).getUTCDate()}function g(e){return w(e)?366:365}function w(e){return 0===e%4&&0!==e%100||0===e%400}function M(e){var t;e._a&&-2===e._pf.overflow&&(t=e._a[it]<0||e._a[it]>11?it:e._a[ot]<1||e._a[ot]>p(e._a[at],e._a[it])?ot:e._a[ut]<0||e._a[ut]>23?ut:e._a[dt]<0||e._a[dt]>59?dt:e._a[ft]<0||e._a[ft]>59?ft:e._a[ht]<0||e._a[ht]>999?ht:-1,e._pf._overflowDayOfYear&&(at>t||t>ot)&&(t=ot),e._pf.overflow=t)}function D(e){e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1}}function v(e){return null==e._isValid&&(e._isValid=!isNaN(e._d.getTime())&&e._pf.overflow<0&&!e._pf.empty&&!e._pf.invalidMonth&&!e._pf.nullInput&&!e._pf.invalidFormat&&!e._pf.userInvalidated,e._strict&&(e._isValid=e._isValid&&0===e._pf.charsLeftOver&&0===e._pf.unusedTokens.length)),e._isValid}function k(e){return e?e.toLowerCase().replace("_","-"):e}function Y(e,t){return t.abbr=e,ct[e]||(ct[e]=new r),ct[e].set(t),ct[e]}function b(e){delete ct[e]}function T(e){var t,n,r,s,a=0,i=function(e){if(!ct[e]&<)try{require("./lang/"+e)}catch(t){}return ct[e]};if(!e)return tt.fn._lang;if(!f(e)){if(n=i(e))return n;e=[e]}for(;a0;){if(n=i(s.slice(0,t).join("-")))return n;if(r&&r.length>=t&&c(s,r,!0)>=t-1)break;t--}a++}return tt.fn._lang}function S(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function O(e){var t,n,r=e.match(pt);for(t=0,n=r.length;n>t;t++)r[t]=At[r[t]]?At[r[t]]:S(r[t]);return function(s){var a="";for(t=0;n>t;t++)a+=r[t]instanceof Function?r[t].call(s,e):r[t];return a}}function G(e,t){return e.isValid()?(t=W(t,e.lang()),Pt[t]||(Pt[t]=O(t)),Pt[t](e)):e.lang().invalidDate()}function W(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(gt.lastIndex=0;r>=0&>.test(e);)e=e.replace(gt,n),gt.lastIndex=0,r-=1;return e}function F(e,t){var n;switch(e){case"DDDD":return Dt;case"YYYY":case"GGGG":case"gggg":return vt;case"YYYYY":case"GGGGG":case"ggggg":return kt;case"S":case"SS":case"SSS":case"DDD":return Mt;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Yt;case"a":case"A":return T(t._l)._meridiemParse;case"X":return St;case"Z":case"ZZ":return bt;case"T":return Tt;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"ww":case"W":case"WW":case"e":case"E":return wt;default:return n=new RegExp(I(x(e.replace("\\","")),"i"))}}function C(e){var t=(bt.exec(e)||[])[0],n=(t+"").match(Ct)||["-",0,0],r=+(60*n[1])+y(n[2]);return"+"===n[0]?-r:r}function L(e,t,n){var r,s=n._a;switch(e){case"M":case"MM":null!=t&&(s[it]=y(t)-1);break;case"MMM":case"MMMM":r=T(n._l).monthsParse(t),null!=r?s[it]=r:n._pf.invalidMonth=t;break;case"D":case"DD":null!=t&&(s[ot]=y(t));break;case"DDD":case"DDDD":null!=t&&(n._dayOfYear=y(t));break;case"YY":s[at]=y(t)+(y(t)>68?1900:2e3);break;case"YYYY":case"YYYYY":s[at]=y(t);break;case"a":case"A":n._isPm=T(n._l).isPM(t);break;case"H":case"HH":case"h":case"hh":s[ut]=y(t);break;case"m":case"mm":s[dt]=y(t);break;case"s":case"ss":s[ft]=y(t);break;case"S":case"SS":case"SSS":s[ht]=y(1e3*("0."+t));break;case"X":n._d=new Date(1e3*parseFloat(t));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=C(t);break;case"w":case"ww":case"W":case"WW":case"d":case"dd":case"ddd":case"dddd":case"e":case"E":e=e.substr(0,1);case"gg":case"gggg":case"GG":case"GGGG":case"GGGGG":e=e.substr(0,2),t&&(n._w=n._w||{},n._w[e]=t)}}function z(e){var t,n,r,s,a,i,o,u,d,f,h=[];if(!e._d){for(r=H(e),e._w&&null==e._a[ot]&&null==e._a[it]&&(a=function(t){return t?t.length<3?parseInt(t,10)>68?"19"+t:"20"+t:t:null==e._a[at]?tt().weekYear():e._a[at]},i=e._w,null!=i.GG||null!=i.W||null!=i.E?o=R(a(i.GG),i.W||1,i.E,4,1):(u=T(e._l),d=null!=i.d?V(i.d,u):null!=i.e?parseInt(i.e,10)+u._week.dow:0,f=parseInt(i.w,10)||1,null!=i.d&&dg(s)&&(e._pf._overflowDayOfYear=!0),n=$(s,0,e._dayOfYear),e._a[it]=n.getUTCMonth(),e._a[ot]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=h[t]=r[t];for(;7>t;t++)e._a[t]=h[t]=null==e._a[t]?2===t?1:0:e._a[t];h[ut]+=y((e._tzm||0)/60),h[dt]+=y((e._tzm||0)%60),e._d=(e._useUTC?$:N).apply(null,h)}}function U(e){var t;e._d||(t=_(e._i),e._a=[t.year,t.month,t.day,t.hour,t.minute,t.second,t.millisecond],z(e))}function H(e){var t=new Date;return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function P(e){e._a=[],e._pf.empty=!0;var t,n,r,s,a,i=T(e._l),o=""+e._i,u=o.length,d=0;for(r=W(e._f,i).match(pt)||[],t=0;t0&&e._pf.unusedInput.push(a),o=o.slice(o.indexOf(n)+n.length),d+=n.length),At[s]?(n?e._pf.empty=!1:e._pf.unusedTokens.push(s),L(s,n,e)):e._strict&&!n&&e._pf.unusedTokens.push(s);e._pf.charsLeftOver=u-d,o.length>0&&e._pf.unusedInput.push(o),e._isPm&&e._a[ut]<12&&(e._a[ut]+=12),e._isPm===!1&&12===e._a[ut]&&(e._a[ut]=0),z(e),M(e)}function x(e){return e.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,s){return t||n||r||s})}function I(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function A(e){var t,n,r,s,a;if(0===e._f.length)return e._pf.invalidFormat=!0,e._d=new Date(0/0),void 0;for(s=0;sa)&&(r=a,n=t));i(e,n||t)}function Z(e){var t,n=e._i,r=Ot.exec(n);if(r){for(t=4;t>0;t--)if(r[t]){e._f=Wt[t-1]+(r[6]||" ");break}for(t=0;4>t;t++)if(Ft[t][1].exec(n)){e._f+=Ft[t][0];break}bt.exec(n)&&(e._f+=" Z"),P(e)}else e._d=new Date(n)}function E(t){var n=t._i,r=_t.exec(n);n===e?t._d=new Date:r?t._d=new Date(+r[1]):"string"==typeof n?Z(t):f(n)?(t._a=n.slice(0),z(t)):h(n)?t._d=new Date(+n):"object"==typeof n?U(t):t._d=new Date(n)}function N(e,t,n,r,s,a,i){var o=new Date(e,t,n,r,s,a,i);return 1970>e&&o.setFullYear(e),o}function $(e){var t=new Date(Date.UTC.apply(null,arguments));return 1970>e&&t.setUTCFullYear(e),t}function V(e,t){if("string"==typeof e)if(isNaN(e)){if(e=t.weekdaysParse(e),"number"!=typeof e)return null}else e=parseInt(e,10);return e}function J(e,t,n,r,s){return s.relativeTime(t||1,!!n,e,r)}function j(e,t,n){var r=st(Math.abs(e)/1e3),s=st(r/60),a=st(s/60),i=st(a/24),o=st(i/365),u=45>r&&["s",r]||1===s&&["m"]||45>s&&["mm",s]||1===a&&["h"]||22>a&&["hh",a]||1===i&&["d"]||25>=i&&["dd",i]||45>=i&&["M"]||345>i&&["MM",st(i/30)]||1===o&&["y"]||["yy",o];return u[2]=t,u[3]=e>0,u[4]=n,J.apply({},u)}function X(e,t,n){var r,s=n-t,a=n-e.day();return a>s&&(a-=7),s-7>a&&(a+=7),r=tt(e).add("d",a),{week:Math.ceil(r.dayOfYear()/7),year:r.year()}}function R(e,t,n,r,s){var a,i,o=new Date(Date.UTC(e,0)).getUTCDay();return n=null!=n?n:s,a=s-o+(o>r?7:0),i=7*(t-1)+(n-s)+a+1,{year:i>0?e:e-1,dayOfYear:i>0?i:g(e-1)+i}}function B(e){var t=e._i,n=e._f;return"undefined"==typeof e._pf&&D(e),null===t?tt.invalid({nullInput:!0}):("string"==typeof t&&(e._i=t=T().preparse(t)),tt.isMoment(t)?(e=i({},t),e._d=new Date(+t._d)):n?f(n)?A(e):P(e):E(e),new s(e))}function q(e,t){tt.fn[e]=tt.fn[e+"s"]=function(e){var n=this._isUTC?"UTC":"";return null!=e?(this._d["set"+n+t](e),tt.updateOffset(this),this):this._d["get"+n+t]()}}function K(e){tt.duration.fn[e]=function(){return this._data[e]}}function Q(e,t){tt.duration.fn["as"+e]=function(){return+this/t}}function et(){"undefined"==typeof ender&&(this.moment=tt)}for(var tt,nt,rt="2.3.1",st=Math.round,at=0,it=1,ot=2,ut=3,dt=4,ft=5,ht=6,ct={},lt="undefined"!=typeof module&&module.exports,_t=/^\/?Date\((\-?\d+)/i,mt=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,yt=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,pt=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,gt=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,wt=/\d\d?/,Mt=/\d{1,3}/,Dt=/\d{3}/,vt=/\d{1,4}/,kt=/[+\-]?\d{1,6}/,Yt=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,bt=/Z|[\+\-]\d\d:?\d\d/i,Tt=/T/i,St=/[\+\-]?\d+(\.\d{1,3})?/,Ot=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?$/,Gt="YYYY-MM-DDTHH:mm:ssZ",Wt=["YYYY-MM-DD","GGGG-[W]WW","GGGG-[W]WW-E","YYYY-DDD"],Ft=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],Ct=/([\+\-]|\d\d)/gi,Lt="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),zt={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},Ut={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},Ht={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},Pt={},xt="DDD w W M D d".split(" "),It="M D H h m s w W".split(" "),At={M:function(){return this.month()+1},MMM:function(e){return this.lang().monthsShort(this,e)},MMMM:function(e){return this.lang().months(this,e)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(e){return this.lang().weekdaysMin(this,e)},ddd:function(e){return this.lang().weekdaysShort(this,e)},dddd:function(e){return this.lang().weekdays(this,e)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return u(this.year()%100,2)},YYYY:function(){return u(this.year(),4)},YYYYY:function(){return u(this.year(),5)},gg:function(){return u(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return u(this.weekYear(),5)},GG:function(){return u(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return u(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return y(this.milliseconds()/100)},SS:function(){return u(y(this.milliseconds()/10),2)},SSS:function(){return u(this.milliseconds(),3)},Z:function(){var e=-this.zone(),t="+";return 0>e&&(e=-e,t="-"),t+u(y(e/60),2)+":"+u(y(e)%60,2)},ZZ:function(){var e=-this.zone(),t="+";return 0>e&&(e=-e,t="-"),t+u(y(10*e/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}},Zt=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];xt.length;)nt=xt.pop(),At[nt+"o"]=n(At[nt],nt);for(;It.length;)nt=It.pop(),At[nt+nt]=t(At[nt],2);for(At.DDDD=t(At.DDD,3),i(r.prototype,{set:function(e){var t,n;for(n in e)t=e[n],"function"==typeof t?this[n]=t:this["_"+n]=t},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(e){return this._months[e.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(e){return this._monthsShort[e.month()]},monthsParse:function(e){var t,n,r;for(this._monthsParse||(this._monthsParse=[]),t=0;12>t;t++)if(this._monthsParse[t]||(n=tt.utc([2e3,t]),r="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[t]=new RegExp(r.replace(".",""),"i")),this._monthsParse[t].test(e))return t},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(e){return this._weekdays[e.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(e){return this._weekdaysShort[e.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(e){return this._weekdaysMin[e.day()]},weekdaysParse:function(e){var t,n,r;for(this._weekdaysParse||(this._weekdaysParse=[]),t=0;7>t;t++)if(this._weekdaysParse[t]||(n=tt([2e3,1]).day(t),r="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[t]=new RegExp(r.replace(".",""),"i")),this._weekdaysParse[t].test(e))return t},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(e){var t=this._longDateFormat[e];return!t&&this._longDateFormat[e.toUpperCase()]&&(t=this._longDateFormat[e.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e]=t),t},isPM:function(e){return"p"===(e+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(e,t){var n=this._calendar[e];return"function"==typeof n?n.apply(t):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(e,t,n,r){var s=this._relativeTime[n];return"function"==typeof s?s(e,t,n,r):s.replace(/%d/i,e)},pastFuture:function(e,t){var n=this._relativeTime[e>0?"future":"past"];return"function"==typeof n?n(t):n.replace(/%s/i,t)},ordinal:function(e){return this._ordinal.replace("%d",e)},_ordinal:"%d",preparse:function(e){return e},postformat:function(e){return e},week:function(e){return X(e,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),tt=function(t,n,r,s){return"boolean"==typeof r&&(s=r,r=e),B({_i:t,_f:n,_l:r,_strict:s,_isUTC:!1})},tt.utc=function(t,n,r,s){var a;return"boolean"==typeof r&&(s=r,r=e),a=B({_useUTC:!0,_isUTC:!0,_l:r,_i:t,_f:n,_strict:s}).utc()},tt.unix=function(e){return tt(1e3*e)},tt.duration=function(e,t){var n,r,s,i=tt.isDuration(e),o="number"==typeof e,u=i?e._input:o?{}:e,d=null;return o?t?u[t]=e:u.milliseconds=e:(d=mt.exec(e))?(n="-"===d[1]?-1:1,u={y:0,d:y(d[ot])*n,h:y(d[ut])*n,m:y(d[dt])*n,s:y(d[ft])*n,ms:y(d[ht])*n}):(d=yt.exec(e))&&(n="-"===d[1]?-1:1,s=function(e){var t=e&&parseFloat(e.replace(",","."));return(isNaN(t)?0:t)*n},u={y:s(d[2]),M:s(d[3]),d:s(d[4]),h:s(d[5]),m:s(d[6]),s:s(d[7]),w:s(d[8])}),r=new a(u),i&&e.hasOwnProperty("_lang")&&(r._lang=e._lang),r},tt.version=rt,tt.defaultFormat=Gt,tt.updateOffset=function(){},tt.lang=function(e,t){var n;return e?(t?Y(k(e),t):null===t?(b(e),e="en"):ct[e]||T(e),n=tt.duration.fn._lang=tt.fn._lang=T(e),n._abbr):tt.fn._lang._abbr},tt.langData=function(e){return e&&e._lang&&e._lang._abbr&&(e=e._lang._abbr),T(e)},tt.isMoment=function(e){return e instanceof s},tt.isDuration=function(e){return e instanceof a},nt=Zt.length-1;nt>=0;--nt)m(Zt[nt]);for(tt.normalizeUnits=function(e){return l(e)},tt.invalid=function(e){var t=tt.utc(0/0);return null!=e?i(t._pf,e):t._pf.userInvalidated=!0,t},tt.parseZone=function(e){return tt(e).parseZone()},i(tt.fn=s.prototype,{clone:function(){return tt(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return G(tt(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var e=this;return[e.year(),e.month(),e.date(),e.hours(),e.minutes(),e.seconds(),e.milliseconds()]},isValid:function(){return v(this)},isDSTShifted:function(){return this._a?this.isValid()&&c(this._a,(this._isUTC?tt.utc(this._a):tt(this._a)).toArray())>0:!1},parsingFlags:function(){return i({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(e){var t=G(this,e||tt.defaultFormat);return this.lang().postformat(t)},add:function(e,t){var n;return n="string"==typeof e?tt.duration(+t,e):tt.duration(e,t),d(this,n,1),this},subtract:function(e,t){var n;return n="string"==typeof e?tt.duration(+t,e):tt.duration(e,t),d(this,n,-1),this},diff:function(e,t,n){var r,s,a=this._isUTC?tt(e).zone(this._offset||0):tt(e).local(),i=6e4*(this.zone()-a.zone());return t=l(t),"year"===t||"month"===t?(r=432e5*(this.daysInMonth()+a.daysInMonth()),s=12*(this.year()-a.year())+(this.month()-a.month()),s+=(this-tt(this).startOf("month")-(a-tt(a).startOf("month")))/r,s-=6e4*(this.zone()-tt(this).startOf("month").zone()-(a.zone()-tt(a).startOf("month").zone()))/r,"year"===t&&(s/=12)):(r=this-a,s="second"===t?r/1e3:"minute"===t?r/6e4:"hour"===t?r/36e5:"day"===t?(r-i)/864e5:"week"===t?(r-i)/6048e5:r),n?s:o(s)},from:function(e,t){return tt.duration(this.diff(e)).lang(this.lang()._abbr).humanize(!t)},fromNow:function(e){return this.from(tt(),e)},calendar:function(){var e=this.diff(tt().zone(this.zone()).startOf("day"),"days",!0),t=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse";return this.format(this.lang().calendar(t,this))},isLeapYear:function(){return w(this.year())},isDST:function(){return this.zone()+tt(e).startOf(t)},isBefore:function(e,t){return t="undefined"!=typeof t?t:"millisecond",+this.clone().startOf(t)<+tt(e).startOf(t)},isSame:function(e,t){return t="undefined"!=typeof t?t:"millisecond",+this.clone().startOf(t)===+tt(e).startOf(t)},min:function(e){return e=tt.apply(null,arguments),this>e?this:e},max:function(e){return e=tt.apply(null,arguments),e>this?this:e},zone:function(e){var t=this._offset||0;return null==e?this._isUTC?t:this._d.getTimezoneOffset():("string"==typeof e&&(e=C(e)),Math.abs(e)<16&&(e=60*e),this._offset=e,this._isUTC=!0,t!==e&&d(this,tt.duration(t-e,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(e){return e=e?tt(e).zone():0,0===(this.zone()-e)%60},daysInMonth:function(){return p(this.year(),this.month())},dayOfYear:function(e){var t=st((tt(this).startOf("day")-tt(this).startOf("year"))/864e5)+1;return null==e?t:this.add("d",e-t)},weekYear:function(e){var t=X(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==e?t:this.add("y",e-t)},isoWeekYear:function(e){var t=X(this,1,4).year;return null==e?t:this.add("y",e-t)},week:function(e){var t=this.lang().week(this);return null==e?t:this.add("d",7*(e-t))},isoWeek:function(e){var t=X(this,1,4).week;return null==e?t:this.add("d",7*(e-t))},weekday:function(e){var t=(this.day()+7-this.lang()._week.dow)%7;return null==e?t:this.add("d",e-t)},isoWeekday:function(e){return null==e?this.day()||7:this.day(this.day()%7?e:e-7)},get:function(e){return e=l(e),this[e]()},set:function(e,t){return e=l(e),"function"==typeof this[e]&&this[e](t),this},lang:function(t){return t===e?this._lang:(this._lang=T(t),this)}}),nt=0;ntLoading commit history...",window.onload=function(){rssfeedsetup()}; \ No newline at end of file From 16c8c2d92c9329366d9ffdbcb8c7c949aa147885 Mon Sep 17 00:00:00 2001 From: xhmikosr Date: Sat, 26 Oct 2013 10:14:35 +0000 Subject: [PATCH 032/161] Update .htaccess from html5 boilerplate 4.3.0. git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5499 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/.htaccess | 34 ++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/misc/website/websitev2/.htaccess b/misc/website/websitev2/.htaccess index ae3131618..00ca592d2 100644 --- a/misc/website/websitev2/.htaccess +++ b/misc/website/websitev2/.htaccess @@ -1,4 +1,5 @@ -# Apache Configuration File +# Apache Server Configs v1.1.0 | MIT License +# https://github.com/h5bp/server-configs-apache # (!) Using `.htaccess` files slows down Apache, therefore, if you have access # to the main server config file (usually called `httpd.conf`), you should add @@ -31,7 +32,7 @@ - + SetEnvIf Origin ":" IS_CORS Header set Access-Control-Allow-Origin "*" env=IS_CORS @@ -97,7 +98,7 @@ ErrorDocument 500 /error.php Header set X-UA-Compatible "IE=edge" # `mod_headers` can't match based on the content-type, however, we only # want to send this header for HTML pages and not for the other resources - + Header unset X-UA-Compatible @@ -142,7 +143,7 @@ ErrorDocument 500 /error.php # JavaScript # Normalize to standard type (it's sniffed in IE anyways): # http://tools.ietf.org/html/rfc4329#section-7.2 - AddType application/javascript js jsonp + AddType application/javascript js AddType application/json json # Video @@ -258,6 +259,8 @@ AddDefaultCharset utf-8 # # RewriteCond %{HTTPS} !=on # RewriteCond %{HTTP_HOST} !^www\..+$ [NC] +# RewriteCond %{HTTP_HOST} !=localhost [NC] +# RewriteCond %{HTTP_HOST} !=127.0.0.1 # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # @@ -284,7 +287,7 @@ AddDefaultCharset utf-8 # # Header set Content-Security-Policy "script-src 'self'; object-src 'self'" -# +# # Header unset Content-Security-Policy # # @@ -338,19 +341,25 @@ AddDefaultCharset utf-8 # RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L] # -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ------------------------------------------------------------------------------ +# | HTTP Strict Transport Security (HSTS) | +# ------------------------------------------------------------------------------ # Force client-side SSL redirection. -# If a user types "example.com" in his browser, the above rule will redirect him -# to the secure version of the site. That still leaves a window of opportunity -# (the initial HTTP connection) for an attacker to downgrade or redirect the -# request. The following header ensures that browser will ONLY connect to your -# server via HTTPS, regardless of what the users type in the address bar. +# If a user types "example.com" in his browser, the above rule will redirect +# him to the secure version of the site. That still leaves a window of oppor- +# tunity (the initial HTTP connection) for an attacker to downgrade or redirect +# the request. The following header ensures that browser will ONLY connect to +# your server via HTTPS, regardless of what the users type in the address bar. +# http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1 # http://www.html5rocks.com/en/tutorials/security/transport-layer-security/ +# (!) Remove the `includeSubDomains` optional directive if the subdomains are +# not using HTTPS. + # -# Header set Strict-Transport-Security max-age=16070400; +# Header set Strict-Transport-Security "max-age=16070400; includeSubDomains" # # ------------------------------------------------------------------------------ @@ -507,7 +516,6 @@ FileETag None # # RewriteCond %{REQUEST_FILENAME} !-f -# RewriteCond %{REQUEST_FILENAME} !-d # RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L] # From 03186ccffcefa5698e2997befac3bf0a54021515 Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 27 Oct 2013 12:19:52 +0000 Subject: [PATCH 033/161] ExtendedServices: added new trigger data types git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5500 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 2 ++ .../plugins/ExtendedServices/CHANGELOG.txt | 3 ++ .../ExtendedServices/ExtendedServices.rc | 8 ++--- 2.x/trunk/plugins/ExtendedServices/trigger.c | 34 +++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 226bed477..6fbca8ec5 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -4,6 +4,8 @@ Process Hacker * NEW/IMPROVED: * Updated for Windows 8.1 * Added progress display for thread stacks + * Updated ExtendedServices plugin: + * Added new trigger data types * FIXED: * Fixed handling of long symbol names * Fixed Run As preventing Windows 8 apps from starting diff --git a/2.x/trunk/plugins/ExtendedServices/CHANGELOG.txt b/2.x/trunk/plugins/ExtendedServices/CHANGELOG.txt index 85a8703b3..018c3a805 100644 --- a/2.x/trunk/plugins/ExtendedServices/CHANGELOG.txt +++ b/2.x/trunk/plugins/ExtendedServices/CHANGELOG.txt @@ -1,3 +1,6 @@ +1.9 + * Added new trigger data types + 1.8 * Fixed some bugs relating to Windows 8 diff --git a/2.x/trunk/plugins/ExtendedServices/ExtendedServices.rc b/2.x/trunk/plugins/ExtendedServices/ExtendedServices.rc index 8a634ec7c..0580d3c88 100644 --- a/2.x/trunk/plugins/ExtendedServices/ExtendedServices.rc +++ b/2.x/trunk/plugins/ExtendedServices/ExtendedServices.rc @@ -49,8 +49,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,8,0,0 - PRODUCTVERSION 1,8,0,0 + FILEVERSION 1,9,0,0 + PRODUCTVERSION 1,9,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -67,12 +67,12 @@ BEGIN BEGIN VALUE "CompanyName", "wj32" VALUE "FileDescription", "Extended Services for Process Hacker" - VALUE "FileVersion", "1.8" + VALUE "FileVersion", "1.9" VALUE "InternalName", "ExtendedServices" VALUE "LegalCopyright", "Licensed under the GNU GPL, v3." VALUE "OriginalFilename", "ExtendedServices.dll" VALUE "ProductName", "Extended Services for Process Hacker" - VALUE "ProductVersion", "1.8" + VALUE "ProductVersion", "1.9" END END BLOCK "VarFileInfo" diff --git a/2.x/trunk/plugins/ExtendedServices/trigger.c b/2.x/trunk/plugins/ExtendedServices/trigger.c index 95e43d803..1541fb05c 100644 --- a/2.x/trunk/plugins/ExtendedServices/trigger.c +++ b/2.x/trunk/plugins/ExtendedServices/trigger.c @@ -36,6 +36,8 @@ typedef struct _ES_TRIGGER_DATA PVOID Binary; ULONG BinaryLength; }; + UCHAR Byte; + ULONG64 UInt64; }; } ES_TRIGGER_DATA, *PES_TRIGGER_DATA; @@ -174,6 +176,16 @@ PES_TRIGGER_DATA EspCreateTriggerData( data->BinaryLength = DataItem->cbData; data->Binary = PhAllocateCopy(DataItem->pData, DataItem->cbData); } + else if (data->Type == SERVICE_TRIGGER_DATA_TYPE_LEVEL) + { + if (DataItem->cbData == sizeof(UCHAR)) + data->Byte = *(PUCHAR)DataItem->pData; + } + else if (data->Type == SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY || data->Type == SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL) + { + if (DataItem->cbData == sizeof(ULONG64)) + data->UInt64 = *(PULONG64)DataItem->pData; + } } return data; @@ -795,6 +807,16 @@ BOOLEAN EsSaveServiceTriggerInfo( dataItem->cbData = data->BinaryLength; dataItem->pData = data->Binary; } + else if (data->Type == SERVICE_TRIGGER_DATA_TYPE_LEVEL) + { + dataItem->cbData = sizeof(UCHAR); + dataItem->pData = (PBYTE)&data->Byte; + } + else if (data->Type == SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY || data->Type == SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL) + { + dataItem->cbData = sizeof(ULONG64); + dataItem->pData = (PBYTE)&data->UInt64; + } } } } @@ -1190,6 +1212,18 @@ VOID EspFormatTriggerData( { *Text = PhCreateString(L"(binary data)"); } + else if (Data->Type == SERVICE_TRIGGER_DATA_TYPE_LEVEL) + { + *Text = PhFormatString(L"(level) %u", Data->Byte); + } + else if (Data->Type == SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY) + { + *Text = PhFormatString(L"(keyword any) 0x%I64x", Data->UInt64); + } + else if (Data->Type == SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL) + { + *Text = PhFormatString(L"(keyword all) 0x%I64x", Data->UInt64); + } else { *Text = PhCreateString(L"(unknown type)"); From 3a6150bba9eeed6c09225b621f91e65c01e6e634 Mon Sep 17 00:00:00 2001 From: dmex Date: Sun, 27 Oct 2013 23:57:12 +0000 Subject: [PATCH 034/161] Website: Removed unused changelog.php git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5501 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/changelog.php | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 misc/website/websitev2/changelog.php diff --git a/misc/website/websitev2/changelog.php b/misc/website/websitev2/changelog.php deleted file mode 100644 index 97e41232b..000000000 --- a/misc/website/websitev2/changelog.php +++ /dev/null @@ -1,28 +0,0 @@ - - -
-
- - -

This is the changelog from Process Hacker's SVN repository. As such it may contain information about unreleased versions of Process Hacker.

- - -
-
- - From 71b6ed22f7ac54a41e7f9397e9ca71e91652384a Mon Sep 17 00:00:00 2001 From: xhmikosr Date: Mon, 28 Oct 2013 05:27:21 +0000 Subject: [PATCH 035/161] Update moment.js to v2.4.0. git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5502 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/js/moment.js | 57 +++++++++++++++++++++-------- misc/website/websitev2/js/pack.js | 2 +- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/misc/website/websitev2/js/moment.js b/misc/website/websitev2/js/moment.js index e97318d66..9e7126e09 100644 --- a/misc/website/websitev2/js/moment.js +++ b/misc/website/websitev2/js/moment.js @@ -1,5 +1,5 @@ //! moment.js -//! version : 2.3.1 +//! version : 2.4.0 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com @@ -11,7 +11,7 @@ ************************************/ var moment, - VERSION = "2.3.1", + VERSION = "2.4.0", round = Math.round, i, @@ -38,7 +38,7 @@ isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, // format tokens - formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g, + formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, // parsing token regexes @@ -47,6 +47,7 @@ parseTokenThreeDigits = /\d{3}/, // 000 - 999 parseTokenFourDigits = /\d{1,4}/, // 0 - 9999 parseTokenSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 + parseTokenDigits = /\d+/, // nonzero number of digits parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/i, // +00:00 -00:00 +0000 -0000 or Z parseTokenT = /T/i, // T (ISO seperator) @@ -54,7 +55,7 @@ // preliminary iso regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000) - isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?$/, + isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d:?\d\d|Z)?)?$/, isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', @@ -67,7 +68,7 @@ // iso time formats and regexes isoTimes = [ - ['HH:mm:ss.S', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/], + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/], ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], ['HH:mm', /(T| )\d\d:\d\d/], ['HH', /(T| )\d\d/] @@ -215,6 +216,9 @@ SSS : function () { return leftZeroFill(this.milliseconds(), 3); }, + SSSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, Z : function () { var a = -this.zone(), b = "+"; @@ -396,7 +400,8 @@ } function isDate(input) { - return Object.prototype.toString.call(input) === '[object Date]'; + return Object.prototype.toString.call(input) === '[object Date]' || + input instanceof Date; } // compare two arrays, return the number of differences @@ -539,7 +544,8 @@ nullInput : false, invalidMonth : null, invalidFormat : false, - userInvalidated : false + userInvalidated : false, + iso: false }; } @@ -930,6 +936,8 @@ return parseTokenTimezone; case 'T': return parseTokenT; + case 'SSSS': + return parseTokenDigits; case 'MM': case 'DD': case 'YY': @@ -1038,6 +1046,7 @@ case 'S' : case 'SS' : case 'SSS' : + case 'SSSS' : datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); break; // UNIX TIMESTAMP WITH MS @@ -1310,6 +1319,7 @@ match = isoRegex.exec(string); if (match) { + config._pf.iso = true; for (i = 4; i > 0; i--) { if (match[i]) { // match[5] should be "T" or undefined @@ -1324,7 +1334,7 @@ } } if (parseTokenTimezone.exec(string)) { - config._f += " Z"; + config._f += "Z"; } makeDateFromStringAndFormat(config); } @@ -1491,7 +1501,6 @@ config._i = input = getLangDefinition().preparse(input); } - if (moment.isMoment(input)) { config = extend({}, input); @@ -2261,12 +2270,27 @@ Exposing Moment ************************************/ - function makeGlobal() { + function makeGlobal(deprecate) { + var warned = false, local_moment = moment; /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `moment` as a global object via a string identifier, - // for Closure Compiler "advanced" mode + if (typeof ender !== 'undefined') { + return; + } + // here, `this` means `window` in the browser, or `global` on the server + // add `moment` as a global object via a string identifier, + // for Closure Compiler "advanced" mode + if (deprecate) { + this.moment = function () { + if (!warned && console && console.warn) { + warned = true; + console.warn( + "Accessing Moment through the global scope is " + + "deprecated, and will be removed in an upcoming " + + "release."); + } + return local_moment.apply(null, arguments); + }; + } else { this['moment'] = moment; } } @@ -2274,11 +2298,12 @@ // CommonJS module is defined if (hasModule) { module.exports = moment; - makeGlobal(); + makeGlobal(true); } else if (typeof define === "function" && define.amd) { define("moment", function (require, exports, module) { if (module.config().noGlobal !== true) { - makeGlobal(); + // If user provided noGlobal, he is aware of global + makeGlobal(module.config().noGlobal === undefined); } return moment; diff --git a/misc/website/websitev2/js/pack.js b/misc/website/websitev2/js/pack.js index 17b6ac8f6..f0f3e4f33 100644 --- a/misc/website/websitev2/js/pack.js +++ b/misc/website/websitev2/js/pack.js @@ -1 +1 @@ -function rssfeedsetup(){var e=new google.feeds.Feed("http://sourceforge.net/p/processhacker/code/feed");e.setNumEntries(5),e.load(displayfeed)}function displayfeed(e){if(e.error)feedcontainer.innerHTML="Error fetching feeds!";else{for(var t="",n=e.feed.entries,r=0;r",t+=''+n[r].title.replace("/p/processhacker/code/","http://sourceforge.net/p/processhacker/code/")+"",t+=' by '+n[r].author+"",t+='
'+moment(n[r].publishedDate).fromNow()+" - "+new Date(n[r].publishedDate).toLocaleString()+"
",t+="";feedcontainer.innerHTML=t}}(function(e){function t(e,t){return function(n){return u(e.call(this,n),t)}}function n(e,t){return function(n){return this.lang().ordinal(e.call(this,n),t)}}function r(){}function s(e){M(e),i(this,e)}function a(e){var t=_(e),n=t.year||0,r=t.month||0,s=t.week||0,a=t.day||0,i=t.hour||0,o=t.minute||0,u=t.second||0,d=t.millisecond||0;this._input=e,this._milliseconds=+d+1e3*u+6e4*o+36e5*i,this._days=+a+7*s,this._months=+r+12*n,this._data={},this._bubble()}function i(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return t.hasOwnProperty("toString")&&(e.toString=t.toString),t.hasOwnProperty("valueOf")&&(e.valueOf=t.valueOf),e}function o(e){return 0>e?Math.ceil(e):Math.floor(e)}function u(e,t){for(var n=e+"";n.lengthr;r++)(n&&e[r]!==t[r]||!n&&y(e[r])!==y(t[r]))&&i++;return i+a}function l(e){if(e){var t=e.toLowerCase().replace(/(.)s$/,"$1");e=Ut[e]||Ht[t]||t}return e}function _(e){var t,n,r={};for(n in e)e.hasOwnProperty(n)&&(t=l(n),t&&(r[t]=e[n]));return r}function m(t){var n,r;if(0===t.indexOf("week"))n=7,r="day";else{if(0!==t.indexOf("month"))return;n=12,r="month"}tt[t]=function(s,a){var i,o,u=tt.fn._lang[t],d=[];if("number"==typeof s&&(a=s,s=e),o=function(e){var t=tt().utc().set(r,e);return u.call(tt.fn._lang,t,s||"")},null!=a)return o(a);for(i=0;n>i;i++)d.push(o(i));return d}}function y(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=t>=0?Math.floor(t):Math.ceil(t)),n}function p(e,t){return new Date(Date.UTC(e,t+1,0)).getUTCDate()}function g(e){return w(e)?366:365}function w(e){return 0===e%4&&0!==e%100||0===e%400}function M(e){var t;e._a&&-2===e._pf.overflow&&(t=e._a[it]<0||e._a[it]>11?it:e._a[ot]<1||e._a[ot]>p(e._a[at],e._a[it])?ot:e._a[ut]<0||e._a[ut]>23?ut:e._a[dt]<0||e._a[dt]>59?dt:e._a[ft]<0||e._a[ft]>59?ft:e._a[ht]<0||e._a[ht]>999?ht:-1,e._pf._overflowDayOfYear&&(at>t||t>ot)&&(t=ot),e._pf.overflow=t)}function D(e){e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1}}function v(e){return null==e._isValid&&(e._isValid=!isNaN(e._d.getTime())&&e._pf.overflow<0&&!e._pf.empty&&!e._pf.invalidMonth&&!e._pf.nullInput&&!e._pf.invalidFormat&&!e._pf.userInvalidated,e._strict&&(e._isValid=e._isValid&&0===e._pf.charsLeftOver&&0===e._pf.unusedTokens.length)),e._isValid}function k(e){return e?e.toLowerCase().replace("_","-"):e}function Y(e,t){return t.abbr=e,ct[e]||(ct[e]=new r),ct[e].set(t),ct[e]}function b(e){delete ct[e]}function T(e){var t,n,r,s,a=0,i=function(e){if(!ct[e]&<)try{require("./lang/"+e)}catch(t){}return ct[e]};if(!e)return tt.fn._lang;if(!f(e)){if(n=i(e))return n;e=[e]}for(;a0;){if(n=i(s.slice(0,t).join("-")))return n;if(r&&r.length>=t&&c(s,r,!0)>=t-1)break;t--}a++}return tt.fn._lang}function S(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function O(e){var t,n,r=e.match(pt);for(t=0,n=r.length;n>t;t++)r[t]=At[r[t]]?At[r[t]]:S(r[t]);return function(s){var a="";for(t=0;n>t;t++)a+=r[t]instanceof Function?r[t].call(s,e):r[t];return a}}function G(e,t){return e.isValid()?(t=W(t,e.lang()),Pt[t]||(Pt[t]=O(t)),Pt[t](e)):e.lang().invalidDate()}function W(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(gt.lastIndex=0;r>=0&>.test(e);)e=e.replace(gt,n),gt.lastIndex=0,r-=1;return e}function F(e,t){var n;switch(e){case"DDDD":return Dt;case"YYYY":case"GGGG":case"gggg":return vt;case"YYYYY":case"GGGGG":case"ggggg":return kt;case"S":case"SS":case"SSS":case"DDD":return Mt;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Yt;case"a":case"A":return T(t._l)._meridiemParse;case"X":return St;case"Z":case"ZZ":return bt;case"T":return Tt;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"ww":case"W":case"WW":case"e":case"E":return wt;default:return n=new RegExp(I(x(e.replace("\\","")),"i"))}}function C(e){var t=(bt.exec(e)||[])[0],n=(t+"").match(Ct)||["-",0,0],r=+(60*n[1])+y(n[2]);return"+"===n[0]?-r:r}function L(e,t,n){var r,s=n._a;switch(e){case"M":case"MM":null!=t&&(s[it]=y(t)-1);break;case"MMM":case"MMMM":r=T(n._l).monthsParse(t),null!=r?s[it]=r:n._pf.invalidMonth=t;break;case"D":case"DD":null!=t&&(s[ot]=y(t));break;case"DDD":case"DDDD":null!=t&&(n._dayOfYear=y(t));break;case"YY":s[at]=y(t)+(y(t)>68?1900:2e3);break;case"YYYY":case"YYYYY":s[at]=y(t);break;case"a":case"A":n._isPm=T(n._l).isPM(t);break;case"H":case"HH":case"h":case"hh":s[ut]=y(t);break;case"m":case"mm":s[dt]=y(t);break;case"s":case"ss":s[ft]=y(t);break;case"S":case"SS":case"SSS":s[ht]=y(1e3*("0."+t));break;case"X":n._d=new Date(1e3*parseFloat(t));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=C(t);break;case"w":case"ww":case"W":case"WW":case"d":case"dd":case"ddd":case"dddd":case"e":case"E":e=e.substr(0,1);case"gg":case"gggg":case"GG":case"GGGG":case"GGGGG":e=e.substr(0,2),t&&(n._w=n._w||{},n._w[e]=t)}}function z(e){var t,n,r,s,a,i,o,u,d,f,h=[];if(!e._d){for(r=H(e),e._w&&null==e._a[ot]&&null==e._a[it]&&(a=function(t){return t?t.length<3?parseInt(t,10)>68?"19"+t:"20"+t:t:null==e._a[at]?tt().weekYear():e._a[at]},i=e._w,null!=i.GG||null!=i.W||null!=i.E?o=R(a(i.GG),i.W||1,i.E,4,1):(u=T(e._l),d=null!=i.d?V(i.d,u):null!=i.e?parseInt(i.e,10)+u._week.dow:0,f=parseInt(i.w,10)||1,null!=i.d&&dg(s)&&(e._pf._overflowDayOfYear=!0),n=$(s,0,e._dayOfYear),e._a[it]=n.getUTCMonth(),e._a[ot]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=h[t]=r[t];for(;7>t;t++)e._a[t]=h[t]=null==e._a[t]?2===t?1:0:e._a[t];h[ut]+=y((e._tzm||0)/60),h[dt]+=y((e._tzm||0)%60),e._d=(e._useUTC?$:N).apply(null,h)}}function U(e){var t;e._d||(t=_(e._i),e._a=[t.year,t.month,t.day,t.hour,t.minute,t.second,t.millisecond],z(e))}function H(e){var t=new Date;return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function P(e){e._a=[],e._pf.empty=!0;var t,n,r,s,a,i=T(e._l),o=""+e._i,u=o.length,d=0;for(r=W(e._f,i).match(pt)||[],t=0;t0&&e._pf.unusedInput.push(a),o=o.slice(o.indexOf(n)+n.length),d+=n.length),At[s]?(n?e._pf.empty=!1:e._pf.unusedTokens.push(s),L(s,n,e)):e._strict&&!n&&e._pf.unusedTokens.push(s);e._pf.charsLeftOver=u-d,o.length>0&&e._pf.unusedInput.push(o),e._isPm&&e._a[ut]<12&&(e._a[ut]+=12),e._isPm===!1&&12===e._a[ut]&&(e._a[ut]=0),z(e),M(e)}function x(e){return e.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,s){return t||n||r||s})}function I(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function A(e){var t,n,r,s,a;if(0===e._f.length)return e._pf.invalidFormat=!0,e._d=new Date(0/0),void 0;for(s=0;sa)&&(r=a,n=t));i(e,n||t)}function Z(e){var t,n=e._i,r=Ot.exec(n);if(r){for(t=4;t>0;t--)if(r[t]){e._f=Wt[t-1]+(r[6]||" ");break}for(t=0;4>t;t++)if(Ft[t][1].exec(n)){e._f+=Ft[t][0];break}bt.exec(n)&&(e._f+=" Z"),P(e)}else e._d=new Date(n)}function E(t){var n=t._i,r=_t.exec(n);n===e?t._d=new Date:r?t._d=new Date(+r[1]):"string"==typeof n?Z(t):f(n)?(t._a=n.slice(0),z(t)):h(n)?t._d=new Date(+n):"object"==typeof n?U(t):t._d=new Date(n)}function N(e,t,n,r,s,a,i){var o=new Date(e,t,n,r,s,a,i);return 1970>e&&o.setFullYear(e),o}function $(e){var t=new Date(Date.UTC.apply(null,arguments));return 1970>e&&t.setUTCFullYear(e),t}function V(e,t){if("string"==typeof e)if(isNaN(e)){if(e=t.weekdaysParse(e),"number"!=typeof e)return null}else e=parseInt(e,10);return e}function J(e,t,n,r,s){return s.relativeTime(t||1,!!n,e,r)}function j(e,t,n){var r=st(Math.abs(e)/1e3),s=st(r/60),a=st(s/60),i=st(a/24),o=st(i/365),u=45>r&&["s",r]||1===s&&["m"]||45>s&&["mm",s]||1===a&&["h"]||22>a&&["hh",a]||1===i&&["d"]||25>=i&&["dd",i]||45>=i&&["M"]||345>i&&["MM",st(i/30)]||1===o&&["y"]||["yy",o];return u[2]=t,u[3]=e>0,u[4]=n,J.apply({},u)}function X(e,t,n){var r,s=n-t,a=n-e.day();return a>s&&(a-=7),s-7>a&&(a+=7),r=tt(e).add("d",a),{week:Math.ceil(r.dayOfYear()/7),year:r.year()}}function R(e,t,n,r,s){var a,i,o=new Date(Date.UTC(e,0)).getUTCDay();return n=null!=n?n:s,a=s-o+(o>r?7:0),i=7*(t-1)+(n-s)+a+1,{year:i>0?e:e-1,dayOfYear:i>0?i:g(e-1)+i}}function B(e){var t=e._i,n=e._f;return"undefined"==typeof e._pf&&D(e),null===t?tt.invalid({nullInput:!0}):("string"==typeof t&&(e._i=t=T().preparse(t)),tt.isMoment(t)?(e=i({},t),e._d=new Date(+t._d)):n?f(n)?A(e):P(e):E(e),new s(e))}function q(e,t){tt.fn[e]=tt.fn[e+"s"]=function(e){var n=this._isUTC?"UTC":"";return null!=e?(this._d["set"+n+t](e),tt.updateOffset(this),this):this._d["get"+n+t]()}}function K(e){tt.duration.fn[e]=function(){return this._data[e]}}function Q(e,t){tt.duration.fn["as"+e]=function(){return+this/t}}function et(){"undefined"==typeof ender&&(this.moment=tt)}for(var tt,nt,rt="2.3.1",st=Math.round,at=0,it=1,ot=2,ut=3,dt=4,ft=5,ht=6,ct={},lt="undefined"!=typeof module&&module.exports,_t=/^\/?Date\((\-?\d+)/i,mt=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,yt=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,pt=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,gt=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,wt=/\d\d?/,Mt=/\d{1,3}/,Dt=/\d{3}/,vt=/\d{1,4}/,kt=/[+\-]?\d{1,6}/,Yt=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,bt=/Z|[\+\-]\d\d:?\d\d/i,Tt=/T/i,St=/[\+\-]?\d+(\.\d{1,3})?/,Ot=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?$/,Gt="YYYY-MM-DDTHH:mm:ssZ",Wt=["YYYY-MM-DD","GGGG-[W]WW","GGGG-[W]WW-E","YYYY-DDD"],Ft=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],Ct=/([\+\-]|\d\d)/gi,Lt="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),zt={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},Ut={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},Ht={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},Pt={},xt="DDD w W M D d".split(" "),It="M D H h m s w W".split(" "),At={M:function(){return this.month()+1},MMM:function(e){return this.lang().monthsShort(this,e)},MMMM:function(e){return this.lang().months(this,e)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(e){return this.lang().weekdaysMin(this,e)},ddd:function(e){return this.lang().weekdaysShort(this,e)},dddd:function(e){return this.lang().weekdays(this,e)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return u(this.year()%100,2)},YYYY:function(){return u(this.year(),4)},YYYYY:function(){return u(this.year(),5)},gg:function(){return u(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return u(this.weekYear(),5)},GG:function(){return u(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return u(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return y(this.milliseconds()/100)},SS:function(){return u(y(this.milliseconds()/10),2)},SSS:function(){return u(this.milliseconds(),3)},Z:function(){var e=-this.zone(),t="+";return 0>e&&(e=-e,t="-"),t+u(y(e/60),2)+":"+u(y(e)%60,2)},ZZ:function(){var e=-this.zone(),t="+";return 0>e&&(e=-e,t="-"),t+u(y(10*e/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}},Zt=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];xt.length;)nt=xt.pop(),At[nt+"o"]=n(At[nt],nt);for(;It.length;)nt=It.pop(),At[nt+nt]=t(At[nt],2);for(At.DDDD=t(At.DDD,3),i(r.prototype,{set:function(e){var t,n;for(n in e)t=e[n],"function"==typeof t?this[n]=t:this["_"+n]=t},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(e){return this._months[e.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(e){return this._monthsShort[e.month()]},monthsParse:function(e){var t,n,r;for(this._monthsParse||(this._monthsParse=[]),t=0;12>t;t++)if(this._monthsParse[t]||(n=tt.utc([2e3,t]),r="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[t]=new RegExp(r.replace(".",""),"i")),this._monthsParse[t].test(e))return t},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(e){return this._weekdays[e.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(e){return this._weekdaysShort[e.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(e){return this._weekdaysMin[e.day()]},weekdaysParse:function(e){var t,n,r;for(this._weekdaysParse||(this._weekdaysParse=[]),t=0;7>t;t++)if(this._weekdaysParse[t]||(n=tt([2e3,1]).day(t),r="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[t]=new RegExp(r.replace(".",""),"i")),this._weekdaysParse[t].test(e))return t},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(e){var t=this._longDateFormat[e];return!t&&this._longDateFormat[e.toUpperCase()]&&(t=this._longDateFormat[e.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e]=t),t},isPM:function(e){return"p"===(e+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(e,t){var n=this._calendar[e];return"function"==typeof n?n.apply(t):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(e,t,n,r){var s=this._relativeTime[n];return"function"==typeof s?s(e,t,n,r):s.replace(/%d/i,e)},pastFuture:function(e,t){var n=this._relativeTime[e>0?"future":"past"];return"function"==typeof n?n(t):n.replace(/%s/i,t)},ordinal:function(e){return this._ordinal.replace("%d",e)},_ordinal:"%d",preparse:function(e){return e},postformat:function(e){return e},week:function(e){return X(e,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),tt=function(t,n,r,s){return"boolean"==typeof r&&(s=r,r=e),B({_i:t,_f:n,_l:r,_strict:s,_isUTC:!1})},tt.utc=function(t,n,r,s){var a;return"boolean"==typeof r&&(s=r,r=e),a=B({_useUTC:!0,_isUTC:!0,_l:r,_i:t,_f:n,_strict:s}).utc()},tt.unix=function(e){return tt(1e3*e)},tt.duration=function(e,t){var n,r,s,i=tt.isDuration(e),o="number"==typeof e,u=i?e._input:o?{}:e,d=null;return o?t?u[t]=e:u.milliseconds=e:(d=mt.exec(e))?(n="-"===d[1]?-1:1,u={y:0,d:y(d[ot])*n,h:y(d[ut])*n,m:y(d[dt])*n,s:y(d[ft])*n,ms:y(d[ht])*n}):(d=yt.exec(e))&&(n="-"===d[1]?-1:1,s=function(e){var t=e&&parseFloat(e.replace(",","."));return(isNaN(t)?0:t)*n},u={y:s(d[2]),M:s(d[3]),d:s(d[4]),h:s(d[5]),m:s(d[6]),s:s(d[7]),w:s(d[8])}),r=new a(u),i&&e.hasOwnProperty("_lang")&&(r._lang=e._lang),r},tt.version=rt,tt.defaultFormat=Gt,tt.updateOffset=function(){},tt.lang=function(e,t){var n;return e?(t?Y(k(e),t):null===t?(b(e),e="en"):ct[e]||T(e),n=tt.duration.fn._lang=tt.fn._lang=T(e),n._abbr):tt.fn._lang._abbr},tt.langData=function(e){return e&&e._lang&&e._lang._abbr&&(e=e._lang._abbr),T(e)},tt.isMoment=function(e){return e instanceof s},tt.isDuration=function(e){return e instanceof a},nt=Zt.length-1;nt>=0;--nt)m(Zt[nt]);for(tt.normalizeUnits=function(e){return l(e)},tt.invalid=function(e){var t=tt.utc(0/0);return null!=e?i(t._pf,e):t._pf.userInvalidated=!0,t},tt.parseZone=function(e){return tt(e).parseZone()},i(tt.fn=s.prototype,{clone:function(){return tt(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return G(tt(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var e=this;return[e.year(),e.month(),e.date(),e.hours(),e.minutes(),e.seconds(),e.milliseconds()]},isValid:function(){return v(this)},isDSTShifted:function(){return this._a?this.isValid()&&c(this._a,(this._isUTC?tt.utc(this._a):tt(this._a)).toArray())>0:!1},parsingFlags:function(){return i({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(e){var t=G(this,e||tt.defaultFormat);return this.lang().postformat(t)},add:function(e,t){var n;return n="string"==typeof e?tt.duration(+t,e):tt.duration(e,t),d(this,n,1),this},subtract:function(e,t){var n;return n="string"==typeof e?tt.duration(+t,e):tt.duration(e,t),d(this,n,-1),this},diff:function(e,t,n){var r,s,a=this._isUTC?tt(e).zone(this._offset||0):tt(e).local(),i=6e4*(this.zone()-a.zone());return t=l(t),"year"===t||"month"===t?(r=432e5*(this.daysInMonth()+a.daysInMonth()),s=12*(this.year()-a.year())+(this.month()-a.month()),s+=(this-tt(this).startOf("month")-(a-tt(a).startOf("month")))/r,s-=6e4*(this.zone()-tt(this).startOf("month").zone()-(a.zone()-tt(a).startOf("month").zone()))/r,"year"===t&&(s/=12)):(r=this-a,s="second"===t?r/1e3:"minute"===t?r/6e4:"hour"===t?r/36e5:"day"===t?(r-i)/864e5:"week"===t?(r-i)/6048e5:r),n?s:o(s)},from:function(e,t){return tt.duration(this.diff(e)).lang(this.lang()._abbr).humanize(!t)},fromNow:function(e){return this.from(tt(),e)},calendar:function(){var e=this.diff(tt().zone(this.zone()).startOf("day"),"days",!0),t=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse";return this.format(this.lang().calendar(t,this))},isLeapYear:function(){return w(this.year())},isDST:function(){return this.zone()+tt(e).startOf(t)},isBefore:function(e,t){return t="undefined"!=typeof t?t:"millisecond",+this.clone().startOf(t)<+tt(e).startOf(t)},isSame:function(e,t){return t="undefined"!=typeof t?t:"millisecond",+this.clone().startOf(t)===+tt(e).startOf(t)},min:function(e){return e=tt.apply(null,arguments),this>e?this:e},max:function(e){return e=tt.apply(null,arguments),e>this?this:e},zone:function(e){var t=this._offset||0;return null==e?this._isUTC?t:this._d.getTimezoneOffset():("string"==typeof e&&(e=C(e)),Math.abs(e)<16&&(e=60*e),this._offset=e,this._isUTC=!0,t!==e&&d(this,tt.duration(t-e,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(e){return e=e?tt(e).zone():0,0===(this.zone()-e)%60},daysInMonth:function(){return p(this.year(),this.month())},dayOfYear:function(e){var t=st((tt(this).startOf("day")-tt(this).startOf("year"))/864e5)+1;return null==e?t:this.add("d",e-t)},weekYear:function(e){var t=X(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==e?t:this.add("y",e-t)},isoWeekYear:function(e){var t=X(this,1,4).year;return null==e?t:this.add("y",e-t)},week:function(e){var t=this.lang().week(this);return null==e?t:this.add("d",7*(e-t))},isoWeek:function(e){var t=X(this,1,4).week;return null==e?t:this.add("d",7*(e-t))},weekday:function(e){var t=(this.day()+7-this.lang()._week.dow)%7;return null==e?t:this.add("d",e-t)},isoWeekday:function(e){return null==e?this.day()||7:this.day(this.day()%7?e:e-7)},get:function(e){return e=l(e),this[e]()},set:function(e,t){return e=l(e),"function"==typeof this[e]&&this[e](t),this},lang:function(t){return t===e?this._lang:(this._lang=T(t),this)}}),nt=0;ntLoading commit history...",window.onload=function(){rssfeedsetup()}; \ No newline at end of file +function rssfeedsetup(){var e=new google.feeds.Feed("http://sourceforge.net/p/processhacker/code/feed");e.setNumEntries(5),e.load(displayfeed)}function displayfeed(e){if(e.error)feedcontainer.innerHTML="Error fetching feeds!";else{for(var t="",n=e.feed.entries,s=0;s",t+=''+n[s].title.replace("/p/processhacker/code/","http://sourceforge.net/p/processhacker/code/")+"",t+=' by '+n[s].author+"",t+='
'+moment(n[s].publishedDate).fromNow()+" - "+new Date(n[s].publishedDate).toLocaleString()+"
",t+="";feedcontainer.innerHTML=t}}(function(e){function t(e,t){return function(n){return u(e.call(this,n),t)}}function n(e,t){return function(n){return this.lang().ordinal(e.call(this,n),t)}}function s(){}function r(e){M(e),i(this,e)}function a(e){var t=_(e),n=t.year||0,s=t.month||0,r=t.week||0,a=t.day||0,i=t.hour||0,o=t.minute||0,u=t.second||0,d=t.millisecond||0;this._input=e,this._milliseconds=+d+1e3*u+6e4*o+36e5*i,this._days=+a+7*r,this._months=+s+12*n,this._data={},this._bubble()}function i(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return t.hasOwnProperty("toString")&&(e.toString=t.toString),t.hasOwnProperty("valueOf")&&(e.valueOf=t.valueOf),e}function o(e){return 0>e?Math.ceil(e):Math.floor(e)}function u(e,t){for(var n=e+"";n.lengths;s++)(n&&e[s]!==t[s]||!n&&y(e[s])!==y(t[s]))&&i++;return i+a}function l(e){if(e){var t=e.toLowerCase().replace(/(.)s$/,"$1");e=Ht[e]||Pt[t]||t}return e}function _(e){var t,n,s={};for(n in e)e.hasOwnProperty(n)&&(t=l(n),t&&(s[t]=e[n]));return s}function m(t){var n,s;if(0===t.indexOf("week"))n=7,s="day";else{if(0!==t.indexOf("month"))return;n=12,s="month"}tt[t]=function(r,a){var i,o,u=tt.fn._lang[t],d=[];if("number"==typeof r&&(a=r,r=e),o=function(e){var t=tt().utc().set(s,e);return u.call(tt.fn._lang,t,r||"")},null!=a)return o(a);for(i=0;n>i;i++)d.push(o(i));return d}}function y(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=t>=0?Math.floor(t):Math.ceil(t)),n}function p(e,t){return new Date(Date.UTC(e,t+1,0)).getUTCDate()}function g(e){return w(e)?366:365}function w(e){return 0===e%4&&0!==e%100||0===e%400}function M(e){var t;e._a&&-2===e._pf.overflow&&(t=e._a[it]<0||e._a[it]>11?it:e._a[ot]<1||e._a[ot]>p(e._a[at],e._a[it])?ot:e._a[ut]<0||e._a[ut]>23?ut:e._a[dt]<0||e._a[dt]>59?dt:e._a[ft]<0||e._a[ft]>59?ft:e._a[ht]<0||e._a[ht]>999?ht:-1,e._pf._overflowDayOfYear&&(at>t||t>ot)&&(t=ot),e._pf.overflow=t)}function D(e){e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function v(e){return null==e._isValid&&(e._isValid=!isNaN(e._d.getTime())&&e._pf.overflow<0&&!e._pf.empty&&!e._pf.invalidMonth&&!e._pf.nullInput&&!e._pf.invalidFormat&&!e._pf.userInvalidated,e._strict&&(e._isValid=e._isValid&&0===e._pf.charsLeftOver&&0===e._pf.unusedTokens.length)),e._isValid}function k(e){return e?e.toLowerCase().replace("_","-"):e}function Y(e,t){return t.abbr=e,ct[e]||(ct[e]=new s),ct[e].set(t),ct[e]}function b(e){delete ct[e]}function S(e){var t,n,s,r,a=0,i=function(e){if(!ct[e]&<)try{require("./lang/"+e)}catch(t){}return ct[e]};if(!e)return tt.fn._lang;if(!f(e)){if(n=i(e))return n;e=[e]}for(;a0;){if(n=i(r.slice(0,t).join("-")))return n;if(s&&s.length>=t&&c(r,s,!0)>=t-1)break;t--}a++}return tt.fn._lang}function T(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function O(e){var t,n,s=e.match(pt);for(t=0,n=s.length;n>t;t++)s[t]=Zt[s[t]]?Zt[s[t]]:T(s[t]);return function(r){var a="";for(t=0;n>t;t++)a+=s[t]instanceof Function?s[t].call(r,e):s[t];return a}}function G(e,t){return e.isValid()?(t=W(t,e.lang()),xt[t]||(xt[t]=O(t)),xt[t](e)):e.lang().invalidDate()}function W(e,t){function n(e){return t.longDateFormat(e)||e}var s=5;for(gt.lastIndex=0;s>=0&>.test(e);)e=e.replace(gt,n),gt.lastIndex=0,s-=1;return e}function F(e,t){var n;switch(e){case"DDDD":return Dt;case"YYYY":case"GGGG":case"gggg":return vt;case"YYYYY":case"GGGGG":case"ggggg":return kt;case"S":case"SS":case"SSS":case"DDD":return Mt;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return bt;case"a":case"A":return S(t._l)._meridiemParse;case"X":return Ot;case"Z":case"ZZ":return St;case"T":return Tt;case"SSSS":return Yt;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"ww":case"W":case"WW":case"e":case"E":return wt;default:return n=new RegExp(I(x(e.replace("\\","")),"i"))}}function C(e){var t=(St.exec(e)||[])[0],n=(t+"").match(Lt)||["-",0,0],s=+(60*n[1])+y(n[2]);return"+"===n[0]?-s:s}function L(e,t,n){var s,r=n._a;switch(e){case"M":case"MM":null!=t&&(r[it]=y(t)-1);break;case"MMM":case"MMMM":s=S(n._l).monthsParse(t),null!=s?r[it]=s:n._pf.invalidMonth=t;break;case"D":case"DD":null!=t&&(r[ot]=y(t));break;case"DDD":case"DDDD":null!=t&&(n._dayOfYear=y(t));break;case"YY":r[at]=y(t)+(y(t)>68?1900:2e3);break;case"YYYY":case"YYYYY":r[at]=y(t);break;case"a":case"A":n._isPm=S(n._l).isPM(t);break;case"H":case"HH":case"h":case"hh":r[ut]=y(t);break;case"m":case"mm":r[dt]=y(t);break;case"s":case"ss":r[ft]=y(t);break;case"S":case"SS":case"SSS":case"SSSS":r[ht]=y(1e3*("0."+t));break;case"X":n._d=new Date(1e3*parseFloat(t));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=C(t);break;case"w":case"ww":case"W":case"WW":case"d":case"dd":case"ddd":case"dddd":case"e":case"E":e=e.substr(0,1);case"gg":case"gggg":case"GG":case"GGGG":case"GGGGG":e=e.substr(0,2),t&&(n._w=n._w||{},n._w[e]=t)}}function z(e){var t,n,s,r,a,i,o,u,d,f,h=[];if(!e._d){for(s=H(e),e._w&&null==e._a[ot]&&null==e._a[it]&&(a=function(t){return t?t.length<3?parseInt(t,10)>68?"19"+t:"20"+t:t:null==e._a[at]?tt().weekYear():e._a[at]},i=e._w,null!=i.GG||null!=i.W||null!=i.E?o=R(a(i.GG),i.W||1,i.E,4,1):(u=S(e._l),d=null!=i.d?V(i.d,u):null!=i.e?parseInt(i.e,10)+u._week.dow:0,f=parseInt(i.w,10)||1,null!=i.d&&dg(r)&&(e._pf._overflowDayOfYear=!0),n=$(r,0,e._dayOfYear),e._a[it]=n.getUTCMonth(),e._a[ot]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=h[t]=s[t];for(;7>t;t++)e._a[t]=h[t]=null==e._a[t]?2===t?1:0:e._a[t];h[ut]+=y((e._tzm||0)/60),h[dt]+=y((e._tzm||0)%60),e._d=(e._useUTC?$:N).apply(null,h)}}function U(e){var t;e._d||(t=_(e._i),e._a=[t.year,t.month,t.day,t.hour,t.minute,t.second,t.millisecond],z(e))}function H(e){var t=new Date;return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function P(e){e._a=[],e._pf.empty=!0;var t,n,s,r,a,i=S(e._l),o=""+e._i,u=o.length,d=0;for(s=W(e._f,i).match(pt)||[],t=0;t0&&e._pf.unusedInput.push(a),o=o.slice(o.indexOf(n)+n.length),d+=n.length),Zt[r]?(n?e._pf.empty=!1:e._pf.unusedTokens.push(r),L(r,n,e)):e._strict&&!n&&e._pf.unusedTokens.push(r);e._pf.charsLeftOver=u-d,o.length>0&&e._pf.unusedInput.push(o),e._isPm&&e._a[ut]<12&&(e._a[ut]+=12),e._isPm===!1&&12===e._a[ut]&&(e._a[ut]=0),z(e),M(e)}function x(e){return e.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,r){return t||n||s||r})}function I(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function A(e){var t,n,s,r,a;if(0===e._f.length)return e._pf.invalidFormat=!0,e._d=new Date(0/0),void 0;for(r=0;ra)&&(s=a,n=t));i(e,n||t)}function Z(e){var t,n=e._i,s=Gt.exec(n);if(s){for(e._pf.iso=!0,t=4;t>0;t--)if(s[t]){e._f=Ft[t-1]+(s[6]||" ");break}for(t=0;4>t;t++)if(Ct[t][1].exec(n)){e._f+=Ct[t][0];break}St.exec(n)&&(e._f+="Z"),P(e)}else e._d=new Date(n)}function E(t){var n=t._i,s=_t.exec(n);n===e?t._d=new Date:s?t._d=new Date(+s[1]):"string"==typeof n?Z(t):f(n)?(t._a=n.slice(0),z(t)):h(n)?t._d=new Date(+n):"object"==typeof n?U(t):t._d=new Date(n)}function N(e,t,n,s,r,a,i){var o=new Date(e,t,n,s,r,a,i);return 1970>e&&o.setFullYear(e),o}function $(e){var t=new Date(Date.UTC.apply(null,arguments));return 1970>e&&t.setUTCFullYear(e),t}function V(e,t){if("string"==typeof e)if(isNaN(e)){if(e=t.weekdaysParse(e),"number"!=typeof e)return null}else e=parseInt(e,10);return e}function J(e,t,n,s,r){return r.relativeTime(t||1,!!n,e,s)}function j(e,t,n){var s=rt(Math.abs(e)/1e3),r=rt(s/60),a=rt(r/60),i=rt(a/24),o=rt(i/365),u=45>s&&["s",s]||1===r&&["m"]||45>r&&["mm",r]||1===a&&["h"]||22>a&&["hh",a]||1===i&&["d"]||25>=i&&["dd",i]||45>=i&&["M"]||345>i&&["MM",rt(i/30)]||1===o&&["y"]||["yy",o];return u[2]=t,u[3]=e>0,u[4]=n,J.apply({},u)}function X(e,t,n){var s,r=n-t,a=n-e.day();return a>r&&(a-=7),r-7>a&&(a+=7),s=tt(e).add("d",a),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function R(e,t,n,s,r){var a,i,o=new Date(Date.UTC(e,0)).getUTCDay();return n=null!=n?n:r,a=r-o+(o>s?7:0),i=7*(t-1)+(n-r)+a+1,{year:i>0?e:e-1,dayOfYear:i>0?i:g(e-1)+i}}function B(e){var t=e._i,n=e._f;return"undefined"==typeof e._pf&&D(e),null===t?tt.invalid({nullInput:!0}):("string"==typeof t&&(e._i=t=S().preparse(t)),tt.isMoment(t)?(e=i({},t),e._d=new Date(+t._d)):n?f(n)?A(e):P(e):E(e),new r(e))}function q(e,t){tt.fn[e]=tt.fn[e+"s"]=function(e){var n=this._isUTC?"UTC":"";return null!=e?(this._d["set"+n+t](e),tt.updateOffset(this),this):this._d["get"+n+t]()}}function K(e){tt.duration.fn[e]=function(){return this._data[e]}}function Q(e,t){tt.duration.fn["as"+e]=function(){return+this/t}}function et(e){var t=!1,n=tt;"undefined"==typeof ender&&(this.moment=e?function(){return!t&&console&&console.warn&&(t=!0,console.warn("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.")),n.apply(null,arguments)}:tt)}for(var tt,nt,st="2.4.0",rt=Math.round,at=0,it=1,ot=2,ut=3,dt=4,ft=5,ht=6,ct={},lt="undefined"!=typeof module&&module.exports,_t=/^\/?Date\((\-?\d+)/i,mt=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,yt=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,pt=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,gt=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,wt=/\d\d?/,Mt=/\d{1,3}/,Dt=/\d{3}/,vt=/\d{1,4}/,kt=/[+\-]?\d{1,6}/,Yt=/\d+/,bt=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,St=/Z|[\+\-]\d\d:?\d\d/i,Tt=/T/i,Ot=/[\+\-]?\d+(\.\d{1,3})?/,Gt=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d:?\d\d|Z)?)?$/,Wt="YYYY-MM-DDTHH:mm:ssZ",Ft=["YYYY-MM-DD","GGGG-[W]WW","GGGG-[W]WW-E","YYYY-DDD"],Ct=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],Lt=/([\+\-]|\d\d)/gi,zt="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),Ut={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},Ht={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},Pt={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},xt={},It="DDD w W M D d".split(" "),At="M D H h m s w W".split(" "),Zt={M:function(){return this.month()+1},MMM:function(e){return this.lang().monthsShort(this,e)},MMMM:function(e){return this.lang().months(this,e)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(e){return this.lang().weekdaysMin(this,e)},ddd:function(e){return this.lang().weekdaysShort(this,e)},dddd:function(e){return this.lang().weekdays(this,e)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return u(this.year()%100,2)},YYYY:function(){return u(this.year(),4)},YYYYY:function(){return u(this.year(),5)},gg:function(){return u(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return u(this.weekYear(),5)},GG:function(){return u(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return u(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return y(this.milliseconds()/100)},SS:function(){return u(y(this.milliseconds()/10),2)},SSS:function(){return u(this.milliseconds(),3)},SSSS:function(){return u(this.milliseconds(),3)},Z:function(){var e=-this.zone(),t="+";return 0>e&&(e=-e,t="-"),t+u(y(e/60),2)+":"+u(y(e)%60,2)},ZZ:function(){var e=-this.zone(),t="+";return 0>e&&(e=-e,t="-"),t+u(y(10*e/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}},Et=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];It.length;)nt=It.pop(),Zt[nt+"o"]=n(Zt[nt],nt);for(;At.length;)nt=At.pop(),Zt[nt+nt]=t(Zt[nt],2);for(Zt.DDDD=t(Zt.DDD,3),i(s.prototype,{set:function(e){var t,n;for(n in e)t=e[n],"function"==typeof t?this[n]=t:this["_"+n]=t},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(e){return this._months[e.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(e){return this._monthsShort[e.month()]},monthsParse:function(e){var t,n,s;for(this._monthsParse||(this._monthsParse=[]),t=0;12>t;t++)if(this._monthsParse[t]||(n=tt.utc([2e3,t]),s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[t]=new RegExp(s.replace(".",""),"i")),this._monthsParse[t].test(e))return t},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(e){return this._weekdays[e.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(e){return this._weekdaysShort[e.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(e){return this._weekdaysMin[e.day()]},weekdaysParse:function(e){var t,n,s;for(this._weekdaysParse||(this._weekdaysParse=[]),t=0;7>t;t++)if(this._weekdaysParse[t]||(n=tt([2e3,1]).day(t),s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[t]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[t].test(e))return t},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(e){var t=this._longDateFormat[e];return!t&&this._longDateFormat[e.toUpperCase()]&&(t=this._longDateFormat[e.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e]=t),t},isPM:function(e){return"p"===(e+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(e,t){var n=this._calendar[e];return"function"==typeof n?n.apply(t):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(e,t,n,s){var r=this._relativeTime[n];return"function"==typeof r?r(e,t,n,s):r.replace(/%d/i,e)},pastFuture:function(e,t){var n=this._relativeTime[e>0?"future":"past"];return"function"==typeof n?n(t):n.replace(/%s/i,t)},ordinal:function(e){return this._ordinal.replace("%d",e)},_ordinal:"%d",preparse:function(e){return e},postformat:function(e){return e},week:function(e){return X(e,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),tt=function(t,n,s,r){return"boolean"==typeof s&&(r=s,s=e),B({_i:t,_f:n,_l:s,_strict:r,_isUTC:!1})},tt.utc=function(t,n,s,r){var a;return"boolean"==typeof s&&(r=s,s=e),a=B({_useUTC:!0,_isUTC:!0,_l:s,_i:t,_f:n,_strict:r}).utc()},tt.unix=function(e){return tt(1e3*e)},tt.duration=function(e,t){var n,s,r,i=tt.isDuration(e),o="number"==typeof e,u=i?e._input:o?{}:e,d=null;return o?t?u[t]=e:u.milliseconds=e:(d=mt.exec(e))?(n="-"===d[1]?-1:1,u={y:0,d:y(d[ot])*n,h:y(d[ut])*n,m:y(d[dt])*n,s:y(d[ft])*n,ms:y(d[ht])*n}):(d=yt.exec(e))&&(n="-"===d[1]?-1:1,r=function(e){var t=e&&parseFloat(e.replace(",","."));return(isNaN(t)?0:t)*n},u={y:r(d[2]),M:r(d[3]),d:r(d[4]),h:r(d[5]),m:r(d[6]),s:r(d[7]),w:r(d[8])}),s=new a(u),i&&e.hasOwnProperty("_lang")&&(s._lang=e._lang),s},tt.version=st,tt.defaultFormat=Wt,tt.updateOffset=function(){},tt.lang=function(e,t){var n;return e?(t?Y(k(e),t):null===t?(b(e),e="en"):ct[e]||S(e),n=tt.duration.fn._lang=tt.fn._lang=S(e),n._abbr):tt.fn._lang._abbr},tt.langData=function(e){return e&&e._lang&&e._lang._abbr&&(e=e._lang._abbr),S(e)},tt.isMoment=function(e){return e instanceof r},tt.isDuration=function(e){return e instanceof a},nt=Et.length-1;nt>=0;--nt)m(Et[nt]);for(tt.normalizeUnits=function(e){return l(e)},tt.invalid=function(e){var t=tt.utc(0/0);return null!=e?i(t._pf,e):t._pf.userInvalidated=!0,t},tt.parseZone=function(e){return tt(e).parseZone()},i(tt.fn=r.prototype,{clone:function(){return tt(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return G(tt(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var e=this;return[e.year(),e.month(),e.date(),e.hours(),e.minutes(),e.seconds(),e.milliseconds()]},isValid:function(){return v(this)},isDSTShifted:function(){return this._a?this.isValid()&&c(this._a,(this._isUTC?tt.utc(this._a):tt(this._a)).toArray())>0:!1},parsingFlags:function(){return i({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(e){var t=G(this,e||tt.defaultFormat);return this.lang().postformat(t)},add:function(e,t){var n;return n="string"==typeof e?tt.duration(+t,e):tt.duration(e,t),d(this,n,1),this},subtract:function(e,t){var n;return n="string"==typeof e?tt.duration(+t,e):tt.duration(e,t),d(this,n,-1),this},diff:function(e,t,n){var s,r,a=this._isUTC?tt(e).zone(this._offset||0):tt(e).local(),i=6e4*(this.zone()-a.zone());return t=l(t),"year"===t||"month"===t?(s=432e5*(this.daysInMonth()+a.daysInMonth()),r=12*(this.year()-a.year())+(this.month()-a.month()),r+=(this-tt(this).startOf("month")-(a-tt(a).startOf("month")))/s,r-=6e4*(this.zone()-tt(this).startOf("month").zone()-(a.zone()-tt(a).startOf("month").zone()))/s,"year"===t&&(r/=12)):(s=this-a,r="second"===t?s/1e3:"minute"===t?s/6e4:"hour"===t?s/36e5:"day"===t?(s-i)/864e5:"week"===t?(s-i)/6048e5:s),n?r:o(r)},from:function(e,t){return tt.duration(this.diff(e)).lang(this.lang()._abbr).humanize(!t)},fromNow:function(e){return this.from(tt(),e)},calendar:function(){var e=this.diff(tt().zone(this.zone()).startOf("day"),"days",!0),t=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse";return this.format(this.lang().calendar(t,this))},isLeapYear:function(){return w(this.year())},isDST:function(){return this.zone()+tt(e).startOf(t)},isBefore:function(e,t){return t="undefined"!=typeof t?t:"millisecond",+this.clone().startOf(t)<+tt(e).startOf(t)},isSame:function(e,t){return t="undefined"!=typeof t?t:"millisecond",+this.clone().startOf(t)===+tt(e).startOf(t)},min:function(e){return e=tt.apply(null,arguments),this>e?this:e},max:function(e){return e=tt.apply(null,arguments),e>this?this:e},zone:function(e){var t=this._offset||0;return null==e?this._isUTC?t:this._d.getTimezoneOffset():("string"==typeof e&&(e=C(e)),Math.abs(e)<16&&(e=60*e),this._offset=e,this._isUTC=!0,t!==e&&d(this,tt.duration(t-e,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(e){return e=e?tt(e).zone():0,0===(this.zone()-e)%60},daysInMonth:function(){return p(this.year(),this.month())},dayOfYear:function(e){var t=rt((tt(this).startOf("day")-tt(this).startOf("year"))/864e5)+1;return null==e?t:this.add("d",e-t)},weekYear:function(e){var t=X(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==e?t:this.add("y",e-t)},isoWeekYear:function(e){var t=X(this,1,4).year;return null==e?t:this.add("y",e-t)},week:function(e){var t=this.lang().week(this);return null==e?t:this.add("d",7*(e-t))},isoWeek:function(e){var t=X(this,1,4).week;return null==e?t:this.add("d",7*(e-t))},weekday:function(e){var t=(this.day()+7-this.lang()._week.dow)%7;return null==e?t:this.add("d",e-t)},isoWeekday:function(e){return null==e?this.day()||7:this.day(this.day()%7?e:e-7)},get:function(e){return e=l(e),this[e]()},set:function(e,t){return e=l(e),"function"==typeof this[e]&&this[e](t),this},lang:function(t){return t===e?this._lang:(this._lang=S(t),this)}}),nt=0;ntLoading commit history...",window.onload=function(){rssfeedsetup()}; \ No newline at end of file From 83b01343009546ebe127a24d5c22a465b0aac572 Mon Sep 17 00:00:00 2001 From: dmex Date: Mon, 28 Oct 2013 10:48:48 +0000 Subject: [PATCH 036/161] Website: Re-added changelog.php with new Sourceforge URLs git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5503 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/changelog.php | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 misc/website/websitev2/changelog.php diff --git a/misc/website/websitev2/changelog.php b/misc/website/websitev2/changelog.php new file mode 100644 index 000000000..c17a93153 --- /dev/null +++ b/misc/website/websitev2/changelog.php @@ -0,0 +1,31 @@ + + +
+
+
+ + +
+

This is the changelog from Process Hacker's SVN repository. As such it may contain information about unreleased versions of Process Hacker.

+ +
+
+
+
+ + From c47e1352408540c8260b07c4157c72d77572bab9 Mon Sep 17 00:00:00 2001 From: dmex Date: Mon, 28 Oct 2013 14:08:40 +0000 Subject: [PATCH 037/161] Website: fixed invalid link git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5504 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev2/about.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/website/websitev2/about.php b/misc/website/websitev2/about.php index 6a9820165..eb9e6577c 100644 --- a/misc/website/websitev2/about.php +++ b/misc/website/websitev2/about.php @@ -28,7 +28,7 @@
  • Registered: 16-10-2008
  • Licence: GNU General Public License version 3.0 - GPLv3
  • + GPLv3
  • Language: English
  • Intended Audience: Advanced End Users, Developers
  • Programming Language: C, C#
  • From 92a3edc23c8af064f804c4c54f6419404e381df0 Mon Sep 17 00:00:00 2001 From: dmex Date: Mon, 28 Oct 2013 22:17:31 +0000 Subject: [PATCH 038/161] Website: Initial v3 branch git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5505 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev3/.htaccess | 569 ++ misc/website/websitev3/about.php | 133 + misc/website/websitev3/changelog.php | 10 + misc/website/websitev3/css/bootstrap.css | 6805 +++++++++++++++++ misc/website/websitev3/css/bootstrap.min.css | 9 + misc/website/websitev3/css/custom.css | 140 + misc/website/websitev3/downloads.php | 104 + misc/website/websitev3/faq.php | 220 + misc/website/websitev3/favicon.ico | Bin 0 -> 1150 bytes misc/website/websitev3/features.php | 93 + misc/website/websitev3/img/ad_300x250.png | Bin 0 -> 527 bytes misc/website/websitev3/img/ad_336x280.png | Bin 0 -> 798 bytes misc/website/websitev3/img/ad_728x90.png | Bin 0 -> 705 bytes .../websitev3/img/answers-arrow-right.png | Bin 0 -> 116 bytes misc/website/websitev3/img/donate.png | Bin 0 -> 1241 bytes misc/website/websitev3/img/logo_64x64.png | Bin 0 -> 3098 bytes .../websitev3/img/screenshots/disk_tab.png | Bin 0 -> 11853 bytes .../img/screenshots/find_handles.png | Bin 0 -> 4666 bytes .../websitev3/img/screenshots/main_window.png | Bin 0 -> 20458 bytes .../websitev3/img/screenshots/menu.png | Bin 0 -> 13852 bytes .../websitev3/img/screenshots/network.png | Bin 0 -> 8271 bytes .../websitev3/img/screenshots/services.png | Bin 0 -> 14840 bytes .../websitev3/img/screenshots/stats.png | Bin 0 -> 8363 bytes .../websitev3/img/screenshots/sysinfo.png | Bin 0 -> 14489 bytes .../websitev3/img/screenshots/sysinfo_cpu.png | Bin 0 -> 14758 bytes .../img/screenshots/sysinfo_memory.png | Bin 0 -> 18871 bytes .../img/screenshots/sysinfo_trimmed.png | Bin 0 -> 14489 bytes .../img/screenshots/sysinfo_trimmed_1.png | Bin 0 -> 13845 bytes .../img/screenshots/thread_stack.png | Bin 0 -> 11256 bytes misc/website/websitev3/img/sflogo.png | Bin 0 -> 1282 bytes misc/website/websitev3/include/.htaccess | 1 + misc/website/websitev3/include/config.php | 95 + misc/website/websitev3/include/footer.php | 31 + misc/website/websitev3/include/header.php | 56 + misc/website/websitev3/include/phpbb.php | 42 + misc/website/websitev3/index.php | 178 + misc/website/websitev3/js/bootstrap.js | 1999 +++++ misc/website/websitev3/js/bootstrap.min.js | 6 + misc/website/websitev3/js/feed.js | 39 + misc/website/websitev3/js/html5shiv.js | 8 + misc/website/websitev3/js/jquery.js | 6 + misc/website/websitev3/js/moment.js | 2314 ++++++ misc/website/websitev3/js/respond.min.js | 6 + misc/website/websitev3/news.php | 129 + 44 files changed, 12993 insertions(+) create mode 100644 misc/website/websitev3/.htaccess create mode 100644 misc/website/websitev3/about.php create mode 100644 misc/website/websitev3/changelog.php create mode 100644 misc/website/websitev3/css/bootstrap.css create mode 100644 misc/website/websitev3/css/bootstrap.min.css create mode 100644 misc/website/websitev3/css/custom.css create mode 100644 misc/website/websitev3/downloads.php create mode 100644 misc/website/websitev3/faq.php create mode 100644 misc/website/websitev3/favicon.ico create mode 100644 misc/website/websitev3/features.php create mode 100644 misc/website/websitev3/img/ad_300x250.png create mode 100644 misc/website/websitev3/img/ad_336x280.png create mode 100644 misc/website/websitev3/img/ad_728x90.png create mode 100644 misc/website/websitev3/img/answers-arrow-right.png create mode 100644 misc/website/websitev3/img/donate.png create mode 100644 misc/website/websitev3/img/logo_64x64.png create mode 100644 misc/website/websitev3/img/screenshots/disk_tab.png create mode 100644 misc/website/websitev3/img/screenshots/find_handles.png create mode 100644 misc/website/websitev3/img/screenshots/main_window.png create mode 100644 misc/website/websitev3/img/screenshots/menu.png create mode 100644 misc/website/websitev3/img/screenshots/network.png create mode 100644 misc/website/websitev3/img/screenshots/services.png create mode 100644 misc/website/websitev3/img/screenshots/stats.png create mode 100644 misc/website/websitev3/img/screenshots/sysinfo.png create mode 100644 misc/website/websitev3/img/screenshots/sysinfo_cpu.png create mode 100644 misc/website/websitev3/img/screenshots/sysinfo_memory.png create mode 100644 misc/website/websitev3/img/screenshots/sysinfo_trimmed.png create mode 100644 misc/website/websitev3/img/screenshots/sysinfo_trimmed_1.png create mode 100644 misc/website/websitev3/img/screenshots/thread_stack.png create mode 100644 misc/website/websitev3/img/sflogo.png create mode 100644 misc/website/websitev3/include/.htaccess create mode 100644 misc/website/websitev3/include/config.php create mode 100644 misc/website/websitev3/include/footer.php create mode 100644 misc/website/websitev3/include/header.php create mode 100644 misc/website/websitev3/include/phpbb.php create mode 100644 misc/website/websitev3/index.php create mode 100644 misc/website/websitev3/js/bootstrap.js create mode 100644 misc/website/websitev3/js/bootstrap.min.js create mode 100644 misc/website/websitev3/js/feed.js create mode 100644 misc/website/websitev3/js/html5shiv.js create mode 100644 misc/website/websitev3/js/jquery.js create mode 100644 misc/website/websitev3/js/moment.js create mode 100644 misc/website/websitev3/js/respond.min.js create mode 100644 misc/website/websitev3/news.php diff --git a/misc/website/websitev3/.htaccess b/misc/website/websitev3/.htaccess new file mode 100644 index 000000000..00ca592d2 --- /dev/null +++ b/misc/website/websitev3/.htaccess @@ -0,0 +1,569 @@ +# Apache Server Configs v1.1.0 | MIT License +# https://github.com/h5bp/server-configs-apache + +# (!) Using `.htaccess` files slows down Apache, therefore, if you have access +# to the main server config file (usually called `httpd.conf`), you should add +# this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html. + +# ############################################################################## +# # CROSS-ORIGIN RESOURCE SHARING (CORS) # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Cross-domain AJAX requests | +# ------------------------------------------------------------------------------ + +# Enable cross-origin AJAX requests. +# http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity +# http://enable-cors.org/ + +# +# Header set Access-Control-Allow-Origin "*" +# + +# ------------------------------------------------------------------------------ +# | CORS-enabled images | +# ------------------------------------------------------------------------------ + +# Send the CORS header for images when browsers request it. +# https://developer.mozilla.org/en/CORS_Enabled_Image +# http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html +# http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/ + + + + + SetEnvIf Origin ":" IS_CORS + Header set Access-Control-Allow-Origin "*" env=IS_CORS + + + + +# ------------------------------------------------------------------------------ +# | Web fonts access | +# ------------------------------------------------------------------------------ + +# Allow access from all domains for web fonts + + + + Header set Access-Control-Allow-Origin "*" + + + + +# ############################################################################## +# # ERRORS # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | 404 error prevention for non-existing redirected folders | +# ------------------------------------------------------------------------------ + +# Prevent Apache from returning a 404 error for a rewrite if a directory +# with the same name does not exist. +# http://httpd.apache.org/docs/current/content-negotiation.html#multiviews +# http://www.webmasterworld.com/apache/3808792.htm + +Options -MultiViews + +# ------------------------------------------------------------------------------ +# | Custom error messages / pages | +# ------------------------------------------------------------------------------ + +# You can customize what Apache returns to the client in case of an error (see +# http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.: + +#ErrorDocument 404 /404.html + +ErrorDocument 400 /error.php +ErrorDocument 401 /error.php +ErrorDocument 403 /error.php +ErrorDocument 404 /error.php +ErrorDocument 405 /error.php +ErrorDocument 500 /error.php + +# ############################################################################## +# # INTERNET EXPLORER # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Better website experience | +# ------------------------------------------------------------------------------ + +# Force IE to render pages in the highest available mode in the various +# cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf. + + + Header set X-UA-Compatible "IE=edge" + # `mod_headers` can't match based on the content-type, however, we only + # want to send this header for HTML pages and not for the other resources + + Header unset X-UA-Compatible + + + +# ------------------------------------------------------------------------------ +# | Cookie setting from iframes | +# ------------------------------------------------------------------------------ + +# Allow cookies to be set from iframes in IE. + +# +# Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"" +# + +# ------------------------------------------------------------------------------ +# | Screen flicker | +# ------------------------------------------------------------------------------ + +# Stop screen flicker in IE on CSS rollovers (this only works in +# combination with the `ExpiresByType` directives for images from below). + +# BrowserMatch "MSIE" brokenvary=1 +# BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1 +# BrowserMatch "Opera" !brokenvary +# SetEnvIf brokenvary 1 force-no-vary + + +# ############################################################################## +# # MIME TYPES AND ENCODING # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Proper MIME types for all files | +# ------------------------------------------------------------------------------ + + + + # Audio + AddType audio/mp4 m4a f4a f4b + AddType audio/ogg oga ogg + + # JavaScript + # Normalize to standard type (it's sniffed in IE anyways): + # http://tools.ietf.org/html/rfc4329#section-7.2 + AddType application/javascript js + AddType application/json json + + # Video + AddType video/mp4 mp4 m4v f4v f4p + AddType video/ogg ogv + AddType video/webm webm + AddType video/x-flv flv + + # Web fonts + AddType application/font-woff woff + AddType application/vnd.ms-fontobject eot + + # Browsers usually ignore the font MIME types and sniff the content, + # however, Chrome shows a warning if other MIME types are used for the + # following fonts. + AddType application/x-font-ttf ttc ttf + AddType font/opentype otf + + # Make SVGZ fonts work on iPad: + # https://twitter.com/FontSquirrel/status/14855840545 + AddType image/svg+xml svg svgz + AddEncoding gzip svgz + + # Other + AddType application/octet-stream safariextz + AddType application/x-chrome-extension crx + AddType application/x-opera-extension oex + AddType application/x-shockwave-flash swf + AddType application/x-web-app-manifest+json webapp + AddType application/x-xpinstall xpi + AddType application/xml atom rdf rss xml + AddType image/webp webp + AddType image/x-icon ico + AddType text/cache-manifest appcache manifest + AddType text/vtt vtt + AddType text/x-component htc + AddType text/x-vcard vcf + + + +# ------------------------------------------------------------------------------ +# | UTF-8 encoding | +# ------------------------------------------------------------------------------ + +# Use UTF-8 encoding for anything served as `text/html` or `text/plain`. +AddDefaultCharset utf-8 + +# Force UTF-8 for certain file formats. + + AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml + + + +# ############################################################################## +# # URL REWRITES # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Rewrite engine | +# ------------------------------------------------------------------------------ + +# Turning on the rewrite engine and enabling the `FollowSymLinks` option is +# necessary for the following directives to work. + +# If your web host doesn't allow the `FollowSymlinks` option, you may need to +# comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the +# performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks + +# Also, some cloud hosting services require `RewriteBase` to be set: +# http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site + + + Options +FollowSymlinks + # Options +SymLinksIfOwnerMatch + RewriteEngine On + # RewriteBase / + + +# ------------------------------------------------------------------------------ +# | Suppressing / Forcing the "www." at the beginning of URLs | +# ------------------------------------------------------------------------------ + +# The same content should never be available under two different URLs especially +# not with and without "www." at the beginning. This can cause SEO problems +# (duplicate content), therefore, you should choose one of the alternatives and +# redirect the other one. + +# By default option 1 (no "www.") is activated: +# http://no-www.org/faq.php?q=class_b + +# If you'd prefer to use option 2, just comment out all the lines from option 1 +# and uncomment the ones from option 2. + +# IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME! + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Option 1: rewrite www.example.com → example.com + + + RewriteCond %{HTTPS} !=on + RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] + RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Option 2: rewrite example.com → www.example.com + +# Be aware that the following might not be a good idea if you use "real" +# subdomains for certain parts of your website. + +# +# RewriteCond %{HTTPS} !=on +# RewriteCond %{HTTP_HOST} !^www\..+$ [NC] +# RewriteCond %{HTTP_HOST} !=localhost [NC] +# RewriteCond %{HTTP_HOST} !=127.0.0.1 +# RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] +# + + +# ############################################################################## +# # SECURITY # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Content Security Policy (CSP) | +# ------------------------------------------------------------------------------ + +# You can mitigate the risk of cross-site scripting and other content-injection +# attacks by setting a Content Security Policy which whitelists trusted sources +# of content for your site. + +# The example header below allows ONLY scripts that are loaded from the current +# site's origin (no inline scripts, no CDN, etc). This almost certainly won't +# work as-is for your site! + +# To get all the details you'll need to craft a reasonable policy for your site, +# read: http://html5rocks.com/en/tutorials/security/content-security-policy (or +# see the specification: http://w3.org/TR/CSP). + +# +# Header set Content-Security-Policy "script-src 'self'; object-src 'self'" +# +# Header unset Content-Security-Policy +# +# + +# ------------------------------------------------------------------------------ +# | File access | +# ------------------------------------------------------------------------------ + +# Block access to directories without a default document. +# Usually you should leave this uncommented because you shouldn't allow anyone +# to surf through every directory on your server (which may includes rather +# private places like the CMS's directories). + + + Options -Indexes + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Block access to hidden files and directories. +# This includes directories used by version control systems such as Git and SVN. + + + RewriteCond %{SCRIPT_FILENAME} -d [OR] + RewriteCond %{SCRIPT_FILENAME} -f + RewriteRule "(^|/)\." - [F] + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Block access to backup and source files. +# These files may be left by some text editors and can pose a great security +# danger when anyone has access to them. + + + Order allow,deny + Deny from all + Satisfy All + + +# ------------------------------------------------------------------------------ +# | Secure Sockets Layer (SSL) | +# ------------------------------------------------------------------------------ + +# Rewrite secure requests properly to prevent SSL certificate warnings, e.g.: +# prevent `https://www.example.com` when your certificate only allows +# `https://secure.example.com`. + +# +# RewriteCond %{SERVER_PORT} !^443 +# RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L] +# + +# ------------------------------------------------------------------------------ +# | HTTP Strict Transport Security (HSTS) | +# ------------------------------------------------------------------------------ + +# Force client-side SSL redirection. + +# If a user types "example.com" in his browser, the above rule will redirect +# him to the secure version of the site. That still leaves a window of oppor- +# tunity (the initial HTTP connection) for an attacker to downgrade or redirect +# the request. The following header ensures that browser will ONLY connect to +# your server via HTTPS, regardless of what the users type in the address bar. +# http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1 +# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/ + +# (!) Remove the `includeSubDomains` optional directive if the subdomains are +# not using HTTPS. + +# +# Header set Strict-Transport-Security "max-age=16070400; includeSubDomains" +# + +# ------------------------------------------------------------------------------ +# | Server software information | +# ------------------------------------------------------------------------------ + +# Avoid displaying the exact Apache version number, the description of the +# generic OS-type and the information about Apache's compiled-in modules. + +# ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`! + +# ServerTokens Prod + + +# ############################################################################## +# # WEB PERFORMANCE # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Compression | +# ------------------------------------------------------------------------------ + + + + # Force compression for mangled headers. + # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping + + + SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding + RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding + + + + # Compress all output labeled with one of the following MIME-types + # (for Apache versions below 2.3.7, you don't need to enable `mod_filter` + # and can remove the `` and `` lines + # as `AddOutputFilterByType` is still in the core directives). +# + AddOutputFilterByType DEFLATE application/atom+xml \ + application/javascript \ + application/json \ + application/rss+xml \ + application/vnd.ms-fontobject \ + application/x-font-ttf \ + application/x-web-app-manifest+json \ + application/xhtml+xml \ + application/xml \ + font/opentype \ + image/svg+xml \ + image/x-icon \ + text/css \ + text/html \ + text/plain \ + text/x-component \ + text/xml +# + + + +# ------------------------------------------------------------------------------ +# | Content transformations | +# ------------------------------------------------------------------------------ + +# Prevent some of the mobile network providers from modifying the content of +# your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5. + +# +# Header set Cache-Control "no-transform" +# + +# ------------------------------------------------------------------------------ +# | ETag removal | +# ------------------------------------------------------------------------------ + +# Since we're sending far-future expires headers (see below), ETags can +# be removed: http://developer.yahoo.com/performance/rules.html#etags. + +# `FileETag None` is not enough for every server. + + Header unset ETag + + +FileETag None + +# ------------------------------------------------------------------------------ +# | Expires headers (for better cache control) | +# ------------------------------------------------------------------------------ + +# The following expires headers are set pretty far in the future. If you don't +# control versioning with filename-based cache busting, consider lowering the +# cache time for resources like CSS and JS to something like 1 week. + + + + ExpiresActive on + ExpiresDefault "access plus 1 month" + + # CSS + ExpiresByType text/css "access plus 1 week" + + # Data interchange + ExpiresByType application/json "access plus 0 seconds" + ExpiresByType application/xml "access plus 0 seconds" + ExpiresByType text/xml "access plus 0 seconds" + + # Favicon (cannot be renamed!) + ExpiresByType image/x-icon "access plus 1 week" + + # HTML components (HTCs) + ExpiresByType text/x-component "access plus 1 month" + + # HTML + ExpiresByType text/html "access plus 0 seconds" + + # JavaScript + ExpiresByType application/javascript "access plus 1 week" + + # Manifest files + ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" + ExpiresByType text/cache-manifest "access plus 0 seconds" + + # Media + ExpiresByType audio/ogg "access plus 1 month" + ExpiresByType image/gif "access plus 1 month" + ExpiresByType image/jpeg "access plus 1 month" + ExpiresByType image/png "access plus 1 month" + ExpiresByType video/mp4 "access plus 1 month" + ExpiresByType video/ogg "access plus 1 month" + ExpiresByType video/webm "access plus 1 month" + + # Web feeds + ExpiresByType application/atom+xml "access plus 1 hour" + ExpiresByType application/rss+xml "access plus 1 hour" + + # Web fonts + ExpiresByType application/font-woff "access plus 1 month" + ExpiresByType application/vnd.ms-fontobject "access plus 1 month" + ExpiresByType application/x-font-ttf "access plus 1 month" + ExpiresByType font/opentype "access plus 1 month" + ExpiresByType image/svg+xml "access plus 1 month" + + + +# ------------------------------------------------------------------------------ +# | Filename-based cache busting | +# ------------------------------------------------------------------------------ + +# If you're not using a build process to manage your filename version revving, +# you might want to consider enabling the following directives to route all +# requests such as `/css/style.12345.css` to `/css/style.css`. + +# To understand why this is important and a better idea than `*.css?v231`, read: +# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring + +# +# RewriteCond %{REQUEST_FILENAME} !-f +# RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L] +# + +# ------------------------------------------------------------------------------ +# | File concatenation | +# ------------------------------------------------------------------------------ + +# Allow concatenation from within specific CSS and JS files, e.g.: +# Inside of `script.combined.js` you could have +# +# +# and they would be included into this single file. + +# +# +# Options +Includes +# AddOutputFilterByType INCLUDES application/javascript application/json +# SetOutputFilter INCLUDES +# +# +# Options +Includes +# AddOutputFilterByType INCLUDES text/css +# SetOutputFilter INCLUDES +# +# + +# ------------------------------------------------------------------------------ +# | Persistent connections | +# ------------------------------------------------------------------------------ + +# Allow multiple requests to be sent over the same TCP connection: +# http://httpd.apache.org/docs/current/en/mod/core.html#keepalive. + +# Enable if you serve a lot of static content but, be aware of the +# possible disadvantages! + +# +# Header set Connection Keep-Alive +# + +# custom PH code + +Order Allow,Deny +Deny from All + + + +allow from all + + +php_value memory_limit 32M diff --git a/misc/website/websitev3/about.php b/misc/website/websitev3/about.php new file mode 100644 index 000000000..9f11e8333 --- /dev/null +++ b/misc/website/websitev3/about.php @@ -0,0 +1,133 @@ + + +
    +

    About

    +
    + +
    +
    +
    +
    +

    Process Hacker was started in 2008 as an open source alternative to programs such as Task Manager and Process Explorer.

    +
      +
    • Registered: 16-10-2008
    • +
    • Licence: GNU General Public License version 3.0 GPLv3
    • +
    • Language: English
    • +
    • Intended Audience: Advanced End Users, Developers
    • +
    • Programming Language: C, C#
    • +
    +
    +
    + +
    +
    + +
    +

    Project Members

    +
    + +
    + + + + +
    + + +
    +

    wj32

    + Project Founder +

    Founded: 16-10-2008

    + + Ohloh kudos + wj32 commit history + +
    +
    +
    + +
    + +
    +
    + + + + +
    + + +
    +

    dmex

    + Project Maintainer, Website Maintainer +

    Joined: 28-08-2009

    + + Ohloh kudos + dmex commit history + +
    +
    +
    + +
    + +
    +
    + + + + +
    + + +
    +

    XhmikosR

    + Installer Maintainer, Website improvements +

    Joined: 20-02-2009

    + + Ohloh kudos + XhmikosR commit history + +
    +
    +
    +
    + + +
    + + \ No newline at end of file diff --git a/misc/website/websitev3/changelog.php b/misc/website/websitev3/changelog.php new file mode 100644 index 000000000..da7f137e4 --- /dev/null +++ b/misc/website/websitev3/changelog.php @@ -0,0 +1,10 @@ + + +
    +
    +

    This is the changelog from Process Hacker's SVN repository. As such it may contain information about unreleased versions of Process Hacker.

    + +
    +
    + + diff --git a/misc/website/websitev3/css/bootstrap.css b/misc/website/websitev3/css/bootstrap.css new file mode 100644 index 000000000..bbda4eed4 --- /dev/null +++ b/misc/website/websitev3/css/bootstrap.css @@ -0,0 +1,6805 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +mark { + color: #000; + background: #ff0; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre-wrap; +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 2cm .5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input, +select[multiple], +textarea { + background-image: none; +} + +a { + color: #428bca; + text-decoration: none; +} + +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16.099999999999998px; + font-weight: 200; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +.text-muted { + color: #999999; +} + +.text-primary { + color: #428bca; +} + +.text-warning { + color: #c09853; +} + +.text-danger { + color: #b94a48; +} + +.text-success { + color: #468847; +} + +.text-info { + color: #3a87ad; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h1, +.h1 { + font-size: 36px; +} + +h2, +.h2 { + font-size: 30px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +h1 small, +.h1 small { + font-size: 24px; +} + +h2 small, +.h2 small { + font-size: 18px; +} + +h3 small, +.h3 small, +h4 small, +.h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +blockquote small { + display: block; + line-height: 1.428571429; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; +} + +code, +pre { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12, +.col-sm-1, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-md-1, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-md-10, +.col-md-11, +.col-md-12, +.col-lg-1, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-10, +.col-lg-11, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11 { + float: left; +} + +.col-xs-1 { + width: 8.333333333333332%; +} + +.col-xs-2 { + width: 16.666666666666664%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.33333333333333%; +} + +.col-xs-5 { + width: 41.66666666666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.333333333333336%; +} + +.col-xs-8 { + width: 66.66666666666666%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.33333333333334%; +} + +.col-xs-11 { + width: 91.66666666666666%; +} + +.col-xs-12 { + width: 100%; +} + +@media (min-width: 768px) { + .container { + max-width: 750px; + } + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11 { + float: left; + } + .col-sm-1 { + width: 8.333333333333332%; + } + .col-sm-2 { + width: 16.666666666666664%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.33333333333333%; + } + .col-sm-5 { + width: 41.66666666666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333333333336%; + } + .col-sm-8 { + width: 66.66666666666666%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.33333333333334%; + } + .col-sm-11 { + width: 91.66666666666666%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-push-1 { + left: 8.333333333333332%; + } + .col-sm-push-2 { + left: 16.666666666666664%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.33333333333333%; + } + .col-sm-push-5 { + left: 41.66666666666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.333333333333336%; + } + .col-sm-push-8 { + left: 66.66666666666666%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.33333333333334%; + } + .col-sm-push-11 { + left: 91.66666666666666%; + } + .col-sm-pull-1 { + right: 8.333333333333332%; + } + .col-sm-pull-2 { + right: 16.666666666666664%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.33333333333333%; + } + .col-sm-pull-5 { + right: 41.66666666666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.333333333333336%; + } + .col-sm-pull-8 { + right: 66.66666666666666%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.33333333333334%; + } + .col-sm-pull-11 { + right: 91.66666666666666%; + } + .col-sm-offset-1 { + margin-left: 8.333333333333332%; + } + .col-sm-offset-2 { + margin-left: 16.666666666666664%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.33333333333333%; + } + .col-sm-offset-5 { + margin-left: 41.66666666666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.333333333333336%; + } + .col-sm-offset-8 { + margin-left: 66.66666666666666%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.33333333333334%; + } + .col-sm-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 992px) { + .container { + max-width: 970px; + } + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11 { + float: left; + } + .col-md-1 { + width: 8.333333333333332%; + } + .col-md-2 { + width: 16.666666666666664%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.33333333333333%; + } + .col-md-5 { + width: 41.66666666666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.333333333333336%; + } + .col-md-8 { + width: 66.66666666666666%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.33333333333334%; + } + .col-md-11 { + width: 91.66666666666666%; + } + .col-md-12 { + width: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.333333333333332%; + } + .col-md-push-2 { + left: 16.666666666666664%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.33333333333333%; + } + .col-md-push-5 { + left: 41.66666666666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.333333333333336%; + } + .col-md-push-8 { + left: 66.66666666666666%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.33333333333334%; + } + .col-md-push-11 { + left: 91.66666666666666%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.333333333333332%; + } + .col-md-pull-2 { + right: 16.666666666666664%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.33333333333333%; + } + .col-md-pull-5 { + right: 41.66666666666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.333333333333336%; + } + .col-md-pull-8 { + right: 66.66666666666666%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.33333333333334%; + } + .col-md-pull-11 { + right: 91.66666666666666%; + } + .col-md-offset-0 { + margin-left: 0; + } + .col-md-offset-1 { + margin-left: 8.333333333333332%; + } + .col-md-offset-2 { + margin-left: 16.666666666666664%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.33333333333333%; + } + .col-md-offset-5 { + margin-left: 41.66666666666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.333333333333336%; + } + .col-md-offset-8 { + margin-left: 66.66666666666666%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.33333333333334%; + } + .col-md-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px; + } + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11 { + float: left; + } + .col-lg-1 { + width: 8.333333333333332%; + } + .col-lg-2 { + width: 16.666666666666664%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.33333333333333%; + } + .col-lg-5 { + width: 41.66666666666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333333333336%; + } + .col-lg-8 { + width: 66.66666666666666%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.33333333333334%; + } + .col-lg-11 { + width: 91.66666666666666%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.333333333333332%; + } + .col-lg-push-2 { + left: 16.666666666666664%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.33333333333333%; + } + .col-lg-push-5 { + left: 41.66666666666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.333333333333336%; + } + .col-lg-push-8 { + left: 66.66666666666666%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.33333333333334%; + } + .col-lg-push-11 { + left: 91.66666666666666%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.333333333333332%; + } + .col-lg-pull-2 { + right: 16.666666666666664%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.33333333333333%; + } + .col-lg-pull-5 { + right: 41.66666666666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.333333333333336%; + } + .col-lg-pull-8 { + right: 66.66666666666666%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.33333333333334%; + } + .col-lg-pull-11 { + right: 91.66666666666666%; + } + .col-lg-offset-0 { + margin-left: 0; + } + .col-lg-offset-1 { + margin-left: 8.333333333333332%; + } + .col-lg-offset-2 { + margin-left: 16.666666666666664%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.33333333333333%; + } + .col-lg-offset-5 { + margin-left: 41.66666666666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.333333333333336%; + } + .col-lg-offset-8 { + margin-left: 66.66666666666666%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.33333333333334%; + } + .col-lg-offset-11 { + margin-left: 91.66666666666666%; + } +} + +table { + max-width: 100%; + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table thead > tr > th, +.table tbody > tr > th, +.table tfoot > tr > th, +.table thead > tr > td, +.table tbody > tr > td, +.table tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} + +.table caption + thead tr:first-child th, +.table colgroup + thead tr:first-child th, +.table thead:first-child tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed thead > tr > th, +.table-condensed tbody > tr > th, +.table-condensed tfoot > tr > th, +.table-condensed thead > tr > td, +.table-condensed tbody > tr > td, +.table-condensed tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class*="col-"] { + display: table-column; + float: none; +} + +table td[class*="col-"], +table th[class*="col-"] { + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; + border-color: #c9e2b3; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; + border-color: #eed3d7; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td { + background-color: #ebcccc; + border-color: #e6c1c7; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; + border-color: #f8e5be; +} + +@media (max-width: 768px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + background-color: #fff; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > thead > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > thead > tr:last-child > td, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +input[type="file"] { + display: block; +} + +select[multiple], +select[size] { + height: auto; +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + +.form-control:-moz-placeholder { + color: #999999; +} + +.form-control::-moz-placeholder { + color: #999999; +} + +.form-control:-ms-input-placeholder { + color: #999999; +} + +.form-control::-webkit-input-placeholder { + color: #999999; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +.radio[disabled], +.radio-inline[disabled], +.checkbox[disabled], +.checkbox-inline[disabled], +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"], +fieldset[disabled] .radio, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm { + height: 30px; + line-height: 30px; +} + +textarea.input-sm { + height: auto; +} + +.input-lg { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-lg { + height: 45px; + line-height: 45px; +} + +textarea.input-lg { + height: auto; +} + +.has-warning .help-block, +.has-warning .control-label { + color: #c09853; +} + +.has-warning .form-control { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.has-error .help-block, +.has-error .control-label { + color: #b94a48; +} + +.has-error .form-control { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.has-success .help-block, +.has-success .control-label { + color: #468847; +} + +.has-success .form-control { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.form-control-static { + padding-top: 7px; + margin-bottom: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +.form-horizontal .control-label, +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + color: #333333; + background-color: #ebebeb; + border-color: #adadad; +} + +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #357ebd; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3276b1; + border-color: #285e8e; +} + +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} + +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ed9c28; + border-color: #d58512; +} + +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #d2322d; + border-color: #ac2925; +} + +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #47a447; + border-color: #398439; +} + +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #39b3d7; + border-color: #269abc; +} + +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #999999; + text-decoration: none; +} + +.btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-sm, +.btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs { + padding: 1px 5px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1; +} + +.glyphicon-asterisk:before { + content: "\2a"; +} + +.glyphicon-plus:before { + content: "\2b"; +} + +.glyphicon-euro:before { + content: "\20ac"; +} + +.glyphicon-minus:before { + content: "\2212"; +} + +.glyphicon-cloud:before { + content: "\2601"; +} + +.glyphicon-envelope:before { + content: "\2709"; +} + +.glyphicon-pencil:before { + content: "\270f"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +.glyphicon-briefcase:before { + content: "\1f4bc"; +} + +.glyphicon-calendar:before { + content: "\1f4c5"; +} + +.glyphicon-pushpin:before { + content: "\1f4cc"; +} + +.glyphicon-paperclip:before { + content: "\1f4ce"; +} + +.glyphicon-camera:before { + content: "\1f4f7"; +} + +.glyphicon-lock:before { + content: "\1f512"; +} + +.glyphicon-bell:before { + content: "\1f514"; +} + +.glyphicon-bookmark:before { + content: "\1f516"; +} + +.glyphicon-fire:before { + content: "\1f525"; +} + +.glyphicon-wrench:before { + content: "\1f527"; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-bottom: 0 dotted; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + list-style: none; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } +} + +.btn-default .caret { + border-top-color: #333333; +} + +.btn-primary .caret, +.btn-success .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret { + border-top-color: #fff; +} + +.dropup .btn-default .caret { + border-bottom-color: #333333; +} + +.dropup .btn-primary .caret, +.dropup .btn-success .caret, +.dropup .btn-warning .caret, +.dropup .btn-danger .caret, +.dropup .btn-info .caret { + border-bottom-color: #fff; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: none; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group-xs > .btn { + padding: 5px 10px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, +.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + border-collapse: separate; + table-layout: fixed; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 45px; + line-height: 45px; +} + +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn { + height: auto; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} + +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn { + height: auto; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -4px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + position: relative; + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li.disabled > a { + color: #999999; +} + +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} + +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} + +.nav-tabs.nav-justified > li { + float: none; +} + +.nav-tabs.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #ffffff; +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 5px; +} + +.nav-pills > li + li { + margin-left: 2px; +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + width: 100%; +} + +.nav-justified > li { + float: none; +} + +.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs-justified > .active > a { + border-bottom-color: #ffffff; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; +} + +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + z-index: 1000; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse.in { + overflow-y: auto; +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px; + } + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } + .navbar-collapse .navbar-text:last-child { + margin-right: 0; + } +} + +.container > .navbar-header, +.container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .container > .navbar-header, + .container > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + z-index: 1030; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} + +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7.5px -15px; +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} + +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px; +} + +@media (min-width: 768px) { + .navbar-text { + margin-right: 15px; + margin-left: 15px; + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} + +.navbar-default .navbar-brand { + color: #777777; +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} + +.navbar-default .navbar-text { + color: #777777; +} + +.navbar-default .navbar-nav > li > a { + color: #777777; +} + +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} + +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-default .navbar-toggle { + border-color: #dddddd; +} + +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #cccccc; +} + +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e6e6e6; +} + +.navbar-default .navbar-nav > .dropdown > a:hover .caret, +.navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .open > a .caret, +.navbar-default .navbar-nav > .open > a:hover .caret, +.navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #777777; +} + +.navbar-default .navbar-link:hover { + color: #333333; +} + +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} + +.navbar-inverse .navbar-brand { + color: #999999; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #333333; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .navbar-nav > .open > a .caret, +.navbar-inverse .navbar-nav > .open > a:hover .caret, +.navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #999999; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #cccccc; + content: "/\00a0"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + background-color: #eeeeee; +} + +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} + +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; + border-color: #dddddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.label-default { + background-color: #999999; +} + +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #808080; +} + +.label-primary { + background-color: #428bca; +} + +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +.container .jumbotron { + border-radius: 6px; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1 { + font-size: 63px; + } +} + +.thumbnail { + display: inline-block; + display: block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.thumbnail > img { + display: block; + height: auto; + max-width: 100%; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #428bca; +} + +.thumbnail > img { + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert h4 { + margin-top: 0; + color: inherit; +} + +.alert .alert-link { + font-weight: bold; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable { + padding-right: 35px; +} + +.alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success .alert-link { + color: #356635; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info .alert-link { + color: #2d6987; +} + +.alert-warning { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.alert-warning hr { + border-top-color: #f8e5be; +} + +.alert-warning .alert-link { + color: #a47e3c; +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger hr { + border-top-color: #e6c1c7; +} + +.alert-danger .alert-link { + color: #953b39; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.list-group-item > .badge { + float: right; +} + +.list-group-item > .badge + .badge { + margin-right: 5px; +} + +a.list-group-item { + color: #555555; +} + +a.list-group-item .list-group-item-heading { + color: #333333; +} + +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading { + color: inherit; +} + +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel > .list-group { + margin-bottom: 0; +} + +.panel > .list-group .list-group-item { + border-width: 1px 0; +} + +.panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.panel > .list-group .list-group-item:last-child { + border-bottom: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.panel > .table { + margin-bottom: 0; +} + +.panel > .panel-body + .table { + border-top: 1px solid #dddddd; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; +} + +.panel-title > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel-group .panel { + margin-bottom: 0; + overflow: hidden; + border-radius: 4px; +} + +.panel-group .panel + .panel { + margin-top: 5px; +} + +.panel-group .panel-heading { + border-bottom: 0; +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #dddddd; +} + +.panel-group .panel-footer { + border-top: 0; +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} + +.panel-default { + border-color: #dddddd; +} + +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} + +.panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #dddddd; +} + +.panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #dddddd; +} + +.panel-primary { + border-color: #428bca; +} + +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #428bca; +} + +.panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #428bca; +} + +.panel-success { + border-color: #d6e9c6; +} + +.panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d6e9c6; +} + +.panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-warning { + border-color: #fbeed5; +} + +.panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #fbeed5; +} + +.panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #fbeed5; +} + +.panel-danger { + border-color: #eed3d7; +} + +.panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #eed3d7; +} + +.panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #eed3d7; +} + +.panel-info { + border-color: #bce8f1; +} + +.panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce8f1; +} + +.panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce8f1; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +body.modal-open, +.modal-open .navbar-fixed-top, +.modal-open .navbar-fixed-bottom { + margin-right: 15px; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog { + z-index: 1050; + width: auto; + padding: 10px; + margin-right: auto; + margin-left: auto; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 600px; + padding-top: 30px; + padding-bottom: 30px; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; + content: " "; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; + content: " "; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; + content: " "; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; + content: " "; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + height: auto; + max-width: 100%; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; +} + +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + border: 1px solid #ffffff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #ffffff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px; + } +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.visible-xs { + display: none !important; +} + +tr.visible-xs { + display: none !important; +} + +th.visible-xs, +td.visible-xs { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important; + } + tr.visible-xs.visible-sm { + display: table-row !important; + } + th.visible-xs.visible-sm, + td.visible-xs.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important; + } + tr.visible-xs.visible-md { + display: table-row !important; + } + th.visible-xs.visible-md, + td.visible-xs.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important; + } + tr.visible-xs.visible-lg { + display: table-row !important; + } + th.visible-xs.visible-lg, + td.visible-xs.visible-lg { + display: table-cell !important; + } +} + +.visible-sm { + display: none !important; +} + +tr.visible-sm { + display: none !important; +} + +th.visible-sm, +td.visible-sm { + display: none !important; +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important; + } + tr.visible-sm.visible-xs { + display: table-row !important; + } + th.visible-sm.visible-xs, + td.visible-sm.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important; + } + tr.visible-sm.visible-md { + display: table-row !important; + } + th.visible-sm.visible-md, + td.visible-sm.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important; + } + tr.visible-sm.visible-lg { + display: table-row !important; + } + th.visible-sm.visible-lg, + td.visible-sm.visible-lg { + display: table-cell !important; + } +} + +.visible-md { + display: none !important; +} + +tr.visible-md { + display: none !important; +} + +th.visible-md, +td.visible-md { + display: none !important; +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important; + } + tr.visible-md.visible-xs { + display: table-row !important; + } + th.visible-md.visible-xs, + td.visible-md.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important; + } + tr.visible-md.visible-sm { + display: table-row !important; + } + th.visible-md.visible-sm, + td.visible-md.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important; + } + tr.visible-md.visible-lg { + display: table-row !important; + } + th.visible-md.visible-lg, + td.visible-md.visible-lg { + display: table-cell !important; + } +} + +.visible-lg { + display: none !important; +} + +tr.visible-lg { + display: none !important; +} + +th.visible-lg, +td.visible-lg { + display: none !important; +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important; + } + tr.visible-lg.visible-xs { + display: table-row !important; + } + th.visible-lg.visible-xs, + td.visible-lg.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important; + } + tr.visible-lg.visible-sm { + display: table-row !important; + } + th.visible-lg.visible-sm, + td.visible-lg.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important; + } + tr.visible-lg.visible-md { + display: table-row !important; + } + th.visible-lg.visible-md, + td.visible-lg.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} + +.hidden-xs { + display: block !important; +} + +tr.hidden-xs { + display: table-row !important; +} + +th.hidden-xs, +td.hidden-xs { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } + tr.hidden-xs { + display: none !important; + } + th.hidden-xs, + td.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm { + display: none !important; + } + tr.hidden-xs.hidden-sm { + display: none !important; + } + th.hidden-xs.hidden-sm, + td.hidden-xs.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md { + display: none !important; + } + tr.hidden-xs.hidden-md { + display: none !important; + } + th.hidden-xs.hidden-md, + td.hidden-xs.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg { + display: none !important; + } + tr.hidden-xs.hidden-lg { + display: none !important; + } + th.hidden-xs.hidden-lg, + td.hidden-xs.hidden-lg { + display: none !important; + } +} + +.hidden-sm { + display: block !important; +} + +tr.hidden-sm { + display: table-row !important; +} + +th.hidden-sm, +td.hidden-sm { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs { + display: none !important; + } + tr.hidden-sm.hidden-xs { + display: none !important; + } + th.hidden-sm.hidden-xs, + td.hidden-sm.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } + tr.hidden-sm { + display: none !important; + } + th.hidden-sm, + td.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md { + display: none !important; + } + tr.hidden-sm.hidden-md { + display: none !important; + } + th.hidden-sm.hidden-md, + td.hidden-sm.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg { + display: none !important; + } + tr.hidden-sm.hidden-lg { + display: none !important; + } + th.hidden-sm.hidden-lg, + td.hidden-sm.hidden-lg { + display: none !important; + } +} + +.hidden-md { + display: block !important; +} + +tr.hidden-md { + display: table-row !important; +} + +th.hidden-md, +td.hidden-md { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs { + display: none !important; + } + tr.hidden-md.hidden-xs { + display: none !important; + } + th.hidden-md.hidden-xs, + td.hidden-md.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm { + display: none !important; + } + tr.hidden-md.hidden-sm { + display: none !important; + } + th.hidden-md.hidden-sm, + td.hidden-md.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } + tr.hidden-md { + display: none !important; + } + th.hidden-md, + td.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg { + display: none !important; + } + tr.hidden-md.hidden-lg { + display: none !important; + } + th.hidden-md.hidden-lg, + td.hidden-md.hidden-lg { + display: none !important; + } +} + +.hidden-lg { + display: block !important; +} + +tr.hidden-lg { + display: table-row !important; +} + +th.hidden-lg, +td.hidden-lg { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs { + display: none !important; + } + tr.hidden-lg.hidden-xs { + display: none !important; + } + th.hidden-lg.hidden-xs, + td.hidden-lg.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm { + display: none !important; + } + tr.hidden-lg.hidden-sm { + display: none !important; + } + th.hidden-lg.hidden-sm, + td.hidden-lg.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md { + display: none !important; + } + tr.hidden-lg.hidden-md { + display: none !important; + } + th.hidden-lg.hidden-md, + td.hidden-lg.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } + tr.hidden-lg { + display: none !important; + } + th.hidden-lg, + td.hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +tr.visible-print { + display: none !important; +} + +th.visible-print, +td.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } + .hidden-print { + display: none !important; + } + tr.hidden-print { + display: none !important; + } + th.hidden-print, + td.hidden-print { + display: none !important; + } +} \ No newline at end of file diff --git a/misc/website/websitev3/css/bootstrap.min.css b/misc/website/websitev3/css/bootstrap.min.css new file mode 100644 index 000000000..a553c4f5e --- /dev/null +++ b/misc/website/websitev3/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/misc/website/websitev3/css/custom.css b/misc/website/websitev3/css/custom.css new file mode 100644 index 000000000..11d13be8a --- /dev/null +++ b/misc/website/websitev3/css/custom.css @@ -0,0 +1,140 @@ +html { + overflow-y: scroll; +} + +body { + background: #f8f8f8 repeat; + padding-top:65px; +} + + + +#forumdate { + color: silver; +} + +#forumitem { + font-size: 12px; +} + +#footer { + text-align: center; +} + +#author { + color:#A00 +} + +.well-sm { + padding: 9px 0; +} + +.container hr { + margin: 20px 0 5px 0; +} + +.page-header { + margin: 0 0 20px; + padding-bottom: 2px; +} + +.splash-cover { + background: #363b48; + width: 100%; + height: 100%; + top: 0; + position: absolute; + z-index: 2; + opacity: 0.85; + filter: alpha(opacity=85); +} +.splash-block { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 100; +} +.splash-block:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; + margin-right: -0.25em; + /* Adjusts for spacing */ + +} +.centered { + display: inline-block; + vertical-align: middle; + width: 100%; + padding: 100px 0; +} + +.changelog { + border: 2px solid #000; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + overflow: scroll; + width: 800px; + height: 600px; +} + + +/* Off Canvas */ +@media screen and (max-width: 768px) { + .row-offcanvas { + position: relative; + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + } + + .row-offcanvas-right + .sidebar-offcanvas { + right: -50%; /* 6 columns */ + } + + .row-offcanvas-left + .sidebar-offcanvas { + left: -50%; /* 6 columns */ + } + + .row-offcanvas-right.active { + right: 50%; /* 6 columns */ + } + + .row-offcanvas-left.active { + left: 50%; /* 6 columns */ + } + + .sidebar-offcanvas { + position: absolute; + top: 0; + width: 50%; /* 6 columns */ + } +} + +@media (min-width: 979px) +{ + #midCol.affix-top { + position:fixed; + width:265px; + margin-right:10px; + + } + + #midCol.affix { + position:static; + width:100%; + } +} + +@media (min-width: 767px) { + .affix,.affix-top { + position:static; + } +} + diff --git a/misc/website/websitev3/downloads.php b/misc/website/websitev3/downloads.php new file mode 100644 index 000000000..d78a9db9b --- /dev/null +++ b/misc/website/websitev3/downloads.php @@ -0,0 +1,104 @@ + + +
    +
    +
    +

    Process Hacker

    +

    + Released +

    +
    + +
    + The ReactOS Foundation has very kindly signed the driver for 64-bit systems. +
    + +
    +
    +
    +
    +
    + +
    +

    Installer (recommended)

    + processhacker--setup.exe +

    +
    +
    +
    + +
    + +
    +
    +
    + +
    +

    Binaries (portable)

    + processhacker--bin.zip +

    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Source code

    + processhacker--src.zip +

    +
    +
    +
    + +
    + +
    +
    +
    + +
    +

    Plugin SDK

    + processhacker--sdk.zip +

    +
    +
    +
    +
    +
    +
    + + +
    + + \ No newline at end of file diff --git a/misc/website/websitev3/faq.php b/misc/website/websitev3/faq.php new file mode 100644 index 000000000..e6dc1a2fb --- /dev/null +++ b/misc/website/websitev3/faq.php @@ -0,0 +1,220 @@ + + +
    +

    Frequently Asked Questions

    +
    + +
    +
    +
    +
    + + +
    + +
    +
    + Yes. In the same directory as ProcessHacker.exe, create a file named ProcessHacker.exe.settings.xml, settings will then be automatically saved here. +
    +
    +
    + +
    + +
    +
    + No. Please do not report these incidents as bugs because you will be wasting their time. +
    +
    +
    + +
    + +
    +
    + Process Hacker loads a driver that searches for an internal Microsoft kernel function and uses it for process termination. + This special function is not known to be hooked by any malware and security software. +
    +
    +
    + +
    + +
    +
    + Please report any bugs or feature requests in the forums. +
    +
    +
    + +
    + +
    +
    + The most likely problem is that you do not have the latest Windows SDK installed.
    + Windows XP, Vista and Windows 7 SDK: Windows SDK
    + Windows 7, Windows 8 SDK: Windows 8 SDK
    + Windows 7, Windows 8 and 8.1 SDK: Windows 8.1 SDK +
    +
    +
    + +
    + +
    +
    + The most likely problem is that you have not configured the plugin Solution properties > Debugger options.
    +
    + For example; Debugging current plugins can be configured using the following settings:
    + Debugger Command: $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\ProcessHacker.exe
    + Working Directory: $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\ +
    +
    +
    + +
    + +
    +
    + Firstly, you need the latest dbghelp.dll version:
    +
    + 1) Install the latest Windows SDK. (links are below)
    + 2) Open Process Hacker options via the main menu: Hacker > Options
    + 3) Click Symbols, and locate dbghelp.dll
    +
    +
    + Windows XP, Vista and Windows 7 SDK:
    + C:\Program Files\Debugging Tools for Windows (x86)\

    + Windows 8 or above SDK:
    + 32bit: \Program Files (x86)\Windows Kits\8.x\Debuggers\x86\
    + 64bit: \Program Files (x86)\Windows Kits\8.x\Debuggers\x64\
    +
    +
    + Secondly, you need to configure the search path. If you don't know what to do, enter:
    + SRV*SOME_FOLDER*http://msdl.microsoft.com/download/symbols

    + Replace SOME_FOLDER with any folder you can write to, like D:\Symbols. + Now you can restart Process Hacker and view full symbols. +
    +
    +
    + +
    + +
    +
    + Unfortunately there is nothing much that can be done about this. Report issues with Anti-cheat software to dmex . +
    +
    +
    +
    +
    +
    + + +
    + + \ No newline at end of file diff --git a/misc/website/websitev3/favicon.ico b/misc/website/websitev3/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..295d4206dbe0f6d2c6681b7b07938233e8b37fc9 GIT binary patch literal 1150 zcmcJN&uUsh6vjsgWFaKlOQK+i(L#{4S+octOEHT)gV{({v0E`zl2w*2N(z!qg9^rQ z$v=b;iGloug3?l=eSthe=?i?F@5o$6p;-iS<-2p8IluFrIWtQ6^e+%l`aP#M#*~^? zN+q=Pl%5&P>)}b%h<}Ie&M5FY9(*e)s!*Su2%F;y=nVhCIDY9_G5ay%kUTvVN{n zjYb3Ydflso`B=ZAK`G=ljAs&$L39* zqvK;Qj$AMpL?V&E`<(^E52Hw@)AFBnkl(wmL;YRF`ooU55607vEWJLieZYJ>j>YOb zEPq*&9OT&#`mU~|70=K-hG*TZKjb=i`zeM(p@4ioFXCNgE}jX`&afP9 zo^`Vi$z)RE=}DP=Jjb&Kwpb^JH>c2@|$8Fn}5kSaFUuCA82;+ OB&F2<^`zHqk^Kj?$P+RE literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/features.php b/misc/website/websitev3/features.php new file mode 100644 index 000000000..41574beb3 --- /dev/null +++ b/misc/website/websitev3/features.php @@ -0,0 +1,93 @@ + + +
    +

    Features

    +
    + +
    +
    +
    +
    +
    +

    A detailed overview of system activity with highlighting.

    A detailed overview of system activity with highlighting.

    +
    + +
    + +
    +

    Graphs and statistics allow you quickly to track down resource hogs and runaway processes.

    +

    Tip: Use Ctrl+I to view system performance information. + Move your cursor over a graph to get a tooltip with information about the data point under your cursor. + You can double-click the graph to see information about the process at that data point, even if the process is no longer running.

    +
    +
    + +
    + +
    +
    +

    Can't edit or delete a file? Discover which processes are using that file.

    +

    Tip: Use Ctrl+F to search for a handle or DLL. + If all else fails, you can right-click an entry and close the handle associated with the file. However, this + should only be used as a last resort and can lead to data loss and corruption.

    +
    + +
    + +
    +
    +

    See what programs have active network connections, and close them if necessary.

    +
    +
    + +
    +
    + +
    + +
    +
    + +
    +

    Get real-time information on disk access.

    +

    Tip: This may look very similar to the Disk Activity feature in Resource Monitor, but Process Hacker has a few more features!

    +
    +
    + +
    + +
    +
    +

    View detailed stack traces with kernel-mode, WOW64 and .NET support.

    +

    Tip: Hover your cursor over the first column (with the numbers) to view parameter and line number information when available.

    +
    +
    +
    + +
    + +
    +
    + +
    +
    +

    Go beyond services.msc: create, edit and control services.

    +

    Tip: By default, Process Hacker shows entries for drivers in addition to normal user-mode services. You can turn this off by checking View > Hide Driver Services.

    +
    +
    + +
    + +
    +
    +

    And much more!

    +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/misc/website/websitev3/img/ad_300x250.png b/misc/website/websitev3/img/ad_300x250.png new file mode 100644 index 0000000000000000000000000000000000000000..e24428744b0c4927e84931acbbf2da70cadbd169 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!e{nDaNuAAI2Z5AvfKQ0)e+G{KK;Y&7U*Gh9 zMC|{vs{gGW|EJCTzhc$@J9q!Td-q>h>c5i4|McwtJ9hm)edfQ7Q~uP2GC=dDd%8G= zR4~51e)8091BTYX*z?Xp|KI=LqPwz{o#X7L*5WX=o3#tNLx48n2S3_%JmsD?&sSNx z$a|9Gn)N=On>xPsx*MJMRKF(vD@A6~^oaNwlb8Lq_?UDzc}=Qc)y98WKFfmIQuNYa zf1aw7tbOg|E|t60PcKh#-u$HBZ_R7fY~7_fCrf^Al?qPYsG9uqZRNZl$0seRpK>YZ zq+IvoA8S2-UG7`DcD||D@eTf8UrXi9&DME#B|Nd*r{?p$jdzRtU5n>z-?YT9rheaf z`y*DzGOhQ$KC=Jb;`q+c<1d%3-&nQr-MpPM?T;m$j@^8G){$MAlS{5!U*E$2r_6HI zQUeul%gVRH_vhq)o*VIXlfk|FoqzuwFVKs~c;y!QdXs-m{Q30ScLuS3iMp4sn4h~b z?b05lu)CiZ#{9X`nLj=Y+_ei@Kv|5vQ~f9LLhebfK%-u-9b_}|*`|MZ#vJ9hn7()gdA{olqZWe@K%1_q|Z zo-U3d6>)EGoaVb_AmMhfZfAVszW=AqvY1^aY9-DJHBEndAW!A>_P>u8sd!ETqgnQT z4vkE#Tp}6)3z(`Rfo#!$1rDqrE=XJpNOD2hU^QSVMu>Wd#uW_^Wl%$?Xu^vrPyU%V z%=c^%yPA^CSQS~jO>IGVsehYdW=N%H=BhyFpkB{+4*TEngypZwY>W$<{^j!? zmBTe_>h4ThDcvX*=I{Br+Gwd2LrCzyD-62!E!S=*`Tlyme!bNK*R`JJ`L=z@FYQz_ zx1Z1QZ4mo%?^P*Z@=9-`ciszFW!nSyulL*Wm0`=0ho#;5_mWq71)ZU@bja74bg#<+PG~h6VG(pNITr$!)B=th}6U!T&3>im&qBV*b0x(6iWP z^1BJSoAxneEs)+n2GuIPU9NzVG_>-}0xuB{NPcZn4^L!~1)l|KnGY zQS~=I=I?z~dH>C^vwy@EsJ>S^{j;=A-uv;CbnXjH&MzvMB<4NNh$%mx$M!4H*=P>q zEtURSr?0`6!avtDXf0?3#!(0~E@1HsiAp9&JfcN3Bmr=VfMOG-fT|{Vfz#Vd@t)hA Vmfty~uL2W1gQu&X%Q~loCIFY2G|vD4 literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/ad_728x90.png b/misc/website/websitev3/img/ad_728x90.png new file mode 100644 index 0000000000000000000000000000000000000000..1ccf29cc4ce85d0c28d1081d9786ba03798fe620 GIT binary patch literal 705 zcmeAS@N?(olHy`uVBq!ia0y~yV7dWhM{zI%$*r$0o&{270X`wF{}~wm0|5ia|A^TC zWmW&D&HTS&)&Dzp|0`+y7nb_}?%jWV)Bj%n|4*O!-`eqi$FBeB+5c^v)+#dC0*!R@ zba4!+hVST%V$KecE~J$o93KH<+p;C$F1gd9v>2z3YEgW(#gR@NSaM(kaT4>vwNm z=y-$aw@2Hj-RDbd=3H0#8*{2o`k`#ybt}7X*Q-zLv;%u`?tl`j5|6Z-*Z>c?Bb?(lNZ0!>jj##{w_l&z!>`^0dVH_?&G-6$mwncmwC=2SX`^kNzf$POe|z2Kw*`GGzXc4C=lkt< zefVr`mzTY7?<^qS-gDdSdtYRww=366c?EA^{WittY1sTH#eS0>&+4hpWY~7#+gm$W lWPxG{5p}3Mq9U@MQKtObhG{o-wgb~7gQu&X%Q~loCIBqDS5N=| literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/answers-arrow-right.png b/misc/website/websitev3/img/answers-arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9997046b6b53adb75e3eeae0eaf353655705c2 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp@K+MU=3?wgaG0_B4YymzYuG`v_T+8YVV^gAVOdN)RX_cTK}ytKv7n|jyr#Y zbs$4vFiKnh$7=t+TK}mg|JsUPmg&?U|~@}Qdtl?V^C#p|Eej^l{j#DbAWJ3{?C1{ zh(n)%MxT8@uZBOLenP*DIRE9n|Jk1Z&4B;GVgI#4&y+OZpENWQtC5I$=D=CuCbq5k2jFjR9uUUjajmCnDGAWCtbpO7F)ZGVc0 z5I$>gfrjqeua1<7{<=+Ib%4&mot~kT-q5P<-nyQooOL%y|@|Ew+U)uCW?e4d|;aDt2fwnNUvs{i1w|HNu=e}ewadj7*?|IdS9bbfGu zfd0W>?%AsU`R@MQn*aUy|Munn*_8kC+yC#cjuyv;X0; zKwx_Rt}#GfcK^+P|MTCjuAJV=o&LO1|Hg0s_UMk2ht9;M{<=>8{er*qB={ucz(r0~%UhDygS!!y0=l zw$s^B&7Bq6Y4=zi?Bv@QW)A9MI(PV0LM;r&`Vvai77AD2o$}MOT~W1WSR)Z9{zq$S zwSK9-oXWDp@7Hz}m3c^t5_DpV2a@D2#BM35lqAns$%X8%THimaqiOGipaS%>;lhm| z1e^d|x$KTTe-@H}An8Z_VX#5AnT@cq3`VmLuZF*n z&2h+vqYuF0kHdKF!=K8A@7tot$|sr22U5m^9zHtYAu(hKxy29CgjfS}4_m`VxbC zzfZW&TI*{!LLi0$XgtFJ+k0QOrT5-@yW(T!lk%~#1td}C6^?{uZ0SB?IQ%2E*}G7g z6#}kHlvRMKbQmQwDN`H=ZJa4J!Vd4tZJ~bjwzEVIZ;%Th^7nx^dPT=4|A;#vUC48Y zE20iU*%O7Ank`;WQn z$G_M4A!lEIkLY4}pQGX8-~F%GX6w0_)#_Pvp+806?47?y$>Wh800000NkvXXu0mjf DS$dz4 literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/logo_64x64.png b/misc/website/websitev3/img/logo_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..03528b066301f094f3b9566bbb072a13160220d6 GIT binary patch literal 3098 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 literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/find_handles.png b/misc/website/websitev3/img/screenshots/find_handles.png new file mode 100644 index 0000000000000000000000000000000000000000..5b69474c044d955e02d378c9d7bd0e234d7eec92 GIT binary patch literal 4666 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 (9&!-nF|>7KcDX(EinJnR5@#K;?b;6UKGSec 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 F{|h-gkvsqZ literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/network.png b/misc/website/websitev3/img/screenshots/network.png new file mode 100644 index 0000000000000000000000000000000000000000..8c777a4c4eece4b65edb1d16c99f189b7addbe63 GIT binary patch literal 8271 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 Gqy7io1w=pq literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/services.png b/misc/website/websitev3/img/screenshots/services.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f95fbe6ba97599c77ef01ced5f1db7e9314441 GIT binary patch literal 14840 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 ND9V43gUJ~B{~wn@55WKc literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/stats.png b/misc/website/websitev3/img/screenshots/stats.png new file mode 100644 index 0000000000000000000000000000000000000000..34f477cb337995e705c1816e410d20b72134c2bc GIT binary patch literal 8363 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 literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/sysinfo.png b/misc/website/websitev3/img/screenshots/sysinfo.png new file mode 100644 index 0000000000000000000000000000000000000000..6db5e5b29b2b445f0951152c5955a924abb9170a GIT binary patch literal 14489 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 literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/sysinfo_memory.png b/misc/website/websitev3/img/screenshots/sysinfo_memory.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8c31e037b8290365418b7f3404cb490177cb71 GIT binary patch literal 18871 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 bI6wRga$|oNiTdZo00000NkvXXu0mjfH*UWo literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/sysinfo_trimmed.png b/misc/website/websitev3/img/screenshots/sysinfo_trimmed.png new file mode 100644 index 0000000000000000000000000000000000000000..6db5e5b29b2b445f0951152c5955a924abb9170a GIT binary patch literal 14489 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�=DVFM+S~kU=bA0pRFHOQ?wmZ^Lgq#|9!)zE1`lW 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 Js%{hhe*gwy_>KSo literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/img/screenshots/thread_stack.png b/misc/website/websitev3/img/screenshots/thread_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..484fc5d6b88a3b8394a218f8d3d237ed80509ee9 GIT binary patch literal 11256 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 literal 0 HcmV?d00001 diff --git a/misc/website/websitev3/include/.htaccess b/misc/website/websitev3/include/.htaccess new file mode 100644 index 000000000..3418e55a6 --- /dev/null +++ b/misc/website/websitev3/include/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/misc/website/websitev3/include/config.php b/misc/website/websitev3/include/config.php new file mode 100644 index 000000000..29eaf25a9 --- /dev/null +++ b/misc/website/websitev3/include/config.php @@ -0,0 +1,95 @@ += 60 * 60 * 24 * 365.242199) { + /* + * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 365.242199 days/year + * This means that the time difference is 1 year or more + */ + return get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'year'); + } elseif ($time_difference >= 60 * 60 * 24 * 30.4368499) { + /* + * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 30.4368499 days/month + * This means that the time difference is 1 month or more + */ + return get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'month'); + } elseif ($time_difference >= 60 * 60 * 24 * 7) { + /* + * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 7 days/week + * This means that the time difference is 1 week or more + */ + return get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'week'); + } elseif ($time_difference >= 60 * 60 * 24) { + /* + * 60 seconds/minute * 60 minutes/hour * 24 hours/day + * This means that the time difference is 1 day or more + */ + return get_time_ago_string($time_stamp, 60 * 60 * 24, 'day'); + } elseif ($time_difference >= 60 * 60) { + /* + * 60 seconds/minute * 60 minutes/hour + * This means that the time difference is 1 hour or more + */ + return get_time_ago_string($time_stamp, 60 * 60, 'hour'); + } else { + /* + * 60 seconds/minute + * This means that the time difference is a matter of minutes + */ + return get_time_ago_string($time_stamp, 60, 'minute'); + } +} + +function get_time_ago_string($time_stamp, $divisor, $time_unit) +{ + $time_difference = strtotime("now") - $time_stamp; + $time_units = floor($time_difference / $divisor); + + settype($time_units, 'string'); + + if ($time_units === '0') { + return 'less than 1 ' . $time_unit . ' ago'; + } elseif ($time_units === '1') { + return '1 ' . $time_unit . ' ago'; + } else { + /* + * More than "1" $time_unit. This is the "plural" message. + */ + // TODO: This pluralizes the time unit, which is done by adding "s" at the end; this will not work for i18n! + return $time_units . ' ' . $time_unit . 's ago'; + } +} +?> \ No newline at end of file diff --git a/misc/website/websitev3/include/footer.php b/misc/website/websitev3/include/footer.php new file mode 100644 index 000000000..d98362044 --- /dev/null +++ b/misc/website/websitev3/include/footer.php @@ -0,0 +1,31 @@ +


    +
    + + SourceForge logo + +
    + + + + + + + + + + "; + } ?> + + + + + \ No newline at end of file diff --git a/misc/website/websitev3/include/header.php b/misc/website/websitev3/include/header.php new file mode 100644 index 000000000..4143abf3c --- /dev/null +++ b/misc/website/websitev3/include/header.php @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + <?php echo $pagetitle ?> - Process Hacker + + + + + +
    diff --git a/misc/website/websitev3/include/phpbb.php b/misc/website/websitev3/include/phpbb.php new file mode 100644 index 000000000..509b4c3e4 --- /dev/null +++ b/misc/website/websitev3/include/phpbb.php @@ -0,0 +1,42 @@ +session_begin(); + $auth->acl($user->data); + $user->setup(); +} + +// select database tables +$table_topics = @"phpbb_topics"; +$table_forums = @"phpbb_forums"; +$table_posts = @"phpbb_posts"; +$table_users = @"phpbb_users"; +$table_sessions = @"phpbb_sessions"; + +// This function summarizes posts to max. 1200 characters +function summary($str, $limit = 1200, $strip = false) { + $str = ($strip == true)?strip_tags($str):$str; + if (strlen ($str) > $limit) { + $str = substr ($str, 0, $limit - 3); + return trim(substr ($str, 0, strrpos ($str, ' ')).'...'); + } + return trim($str); +} +?> \ No newline at end of file diff --git a/misc/website/websitev3/index.php b/misc/website/websitev3/index.php new file mode 100644 index 000000000..3265d3be8 --- /dev/null +++ b/misc/website/websitev3/index.php @@ -0,0 +1,178 @@ + + +
    +
    +
    +
    +
    +

    Process Hacker

    +

    + A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. +

    +

    Learn more »

    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    +

    Latest Posts

    + Failed to connect to MySQL: ".mysqli_connect_error()."

    "; + } + else + { + $sql = + "SELECT + t.topic_id, + t.topic_title, + t.topic_last_post_id, + t.forum_id, + p.post_id, + p.poster_id, + p.post_time, + u.user_id, + u.username, + u.user_colour + FROM $table_topics t, $table_forums f, $table_posts p, $table_users u + WHERE t.topic_id = p.topic_id AND + t.topic_approved = 1 AND + f.forum_id = t.forum_id AND + t.forum_id != 1 AND + t.forum_id != 7 AND + t.topic_status <> 2 AND + p.post_approved = 1 AND + p.post_id = t.topic_last_post_id AND + p.poster_id = u.user_id + ORDER BY p.post_id DESC LIMIT $topicnumber"; + + if ($result = mysqli_query($conn, $sql)) + { + while ($row = mysqli_fetch_array($result)) + { + // Query fields + $topic_title = $row["topic_title"]; + $author_name = $row["username"]; + $author_colour = $row["user_colour"]; + $post_time = $row["post_time"]; + $post_id = $row["post_id"]; + $author_link = $row["user_id"]; + + // Convert values + $post_local_time = date("F jS, Y, g:i a", $post_time); + $post_date = get_time_ago($post_time); + $post_link = "http://processhacker.sourceforge.net/forums/viewtopic.php?p=".$post_id."#p".$post_id; + $author_link = "http://processhacker.sourceforge.net/forums/memberlist.php?mode=viewprofile&u=".$author_link; + + // Limit title length + if (strlen($topic_title) > 25) + { + $topic_title = substr($topic_title, 0, 25)."..."; + } + + echo + "
    + ".htmlspecialchars($topic_title)." + by ".htmlspecialchars($author_name)." +
    ".htmlspecialchars($post_date).", ".htmlspecialchars($post_local_time)."
    +
    "; + } + + mysqli_free_result($result); + } + } + ?> +
    + +
    +

    Latest Releases

    + Failed to connect to MySQL: " . mysqli_connect_error()."

    "; + } + else + { + $sql = + "SELECT + t.topic_id, + t.topic_title, + t.topic_last_post_id, + t.forum_id, + p.post_id, + p.poster_id, + p.post_time, + u.user_id, + u.username, + u.user_colour + FROM $table_topics t, $table_forums f, $table_posts p, $table_users u + WHERE t.topic_id = p.topic_id AND + f.forum_id = t.forum_id AND + t.forum_id = 1 AND + t.topic_status <> 2 AND + p.post_id = t.topic_last_post_id AND + p.poster_id = u.user_id + ORDER BY p.post_id DESC LIMIT $topicnumber"; + + if ($result = mysqli_query($conn, $sql)) + { + while ($row = mysqli_fetch_array($result)) + { + // Query fields + $topic_title = $row["topic_title"]; + $author_name = $row["username"]; + $author_colour = $row["user_colour"]; + $post_time = $row["post_time"]; + $post_id = $row["post_id"]; + $author_link = $row["user_id"]; + + // Convert values + $post_local_time = date("F jS, Y", $post_time); + $post_link = "http://processhacker.sourceforge.net/forums/viewtopic.php?p=".$post_id."#p".$post_id; + $author_link = "http://processhacker.sourceforge.net/forums/memberlist.php?mode=viewprofile&u=".$author_link; + + // Limit title length + if (strlen($topic_title) > 30) + { + $topic_title = substr($topic_title, 0, 30)."..."; + } + + echo + "
    + ".htmlspecialchars($topic_title)." + by ".htmlspecialchars($author_name)." +
    ".htmlspecialchars($post_local_time)."
    +
    "; + } + mysqli_free_result($result); + } + } + ?> +
    + +
    +

    Latest Source

    +
    +
    +
    +
    +
    + diff --git a/misc/website/websitev3/js/bootstrap.js b/misc/website/websitev3/js/bootstrap.js new file mode 100644 index 000000000..2c6425714 --- /dev/null +++ b/misc/website/websitev3/js/bootstrap.js @@ -0,0 +1,1999 @@ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +if (!jQuery) { throw new Error("Bootstrap requires jQuery") } + +/* ======================================================================== + * Bootstrap: transition.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#transitions + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#alerts + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#buttons + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d); + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + .prop('checked', !this.$element.hasClass('active')) + .trigger('change') + if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') + } + + this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#carousel + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000 + , pause: 'hover' + , wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + this.sliding = true + + isCycling && this.pause() + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + .emulateTransitionEnd(600) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#collapse + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#dropdowns + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + var $el = $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we we use a backdrop because click events don't delegate + $(' - \ No newline at end of file + + \ No newline at end of file From 104ddc5992fab08bd2e0bcb51be3726ffe44385b Mon Sep 17 00:00:00 2001 From: wj32 Date: Fri, 1 Nov 2013 23:49:55 +0000 Subject: [PATCH 061/161] * bump to 2.33 * DotNetTools: improved .NET assembly enumeration timeout handling git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5528 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 6 + 2.x/trunk/ProcessHacker/include/phappres.h | 2 +- 2.x/trunk/plugins/DotNetTools/CHANGELOG.txt | 3 + 2.x/trunk/plugins/DotNetTools/DotNetTools.rc | Bin 7962 -> 7962 bytes 2.x/trunk/plugins/DotNetTools/asmpage.c | 109 ++++++++++++++++--- 5 files changed, 102 insertions(+), 18 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index ac4a80862..ef3233b6c 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -1,5 +1,11 @@ Process Hacker +2.33 + * NEW/IMPROVED: + * Updated DotNetTools plugin: + * Improved .NET assembly enumeration timeout handling + * FIXED: + 2.32 * NOTE: * All executable files are now signed. diff --git a/2.x/trunk/ProcessHacker/include/phappres.h b/2.x/trunk/ProcessHacker/include/phappres.h index a42d267e8..70896f14b 100644 --- a/2.x/trunk/ProcessHacker/include/phappres.h +++ b/2.x/trunk/ProcessHacker/include/phappres.h @@ -7,7 +7,7 @@ #include "phapprev.h" #define PHAPP_VERSION_MAJOR 2 -#define PHAPP_VERSION_MINOR 32 +#define PHAPP_VERSION_MINOR 33 #define PHAPP_VERSION_BUILD 0 #if (PHAPP_VERSION_BUILD == 0) diff --git a/2.x/trunk/plugins/DotNetTools/CHANGELOG.txt b/2.x/trunk/plugins/DotNetTools/CHANGELOG.txt index 3ad266b8a..286e06181 100644 --- a/2.x/trunk/plugins/DotNetTools/CHANGELOG.txt +++ b/2.x/trunk/plugins/DotNetTools/CHANGELOG.txt @@ -1,3 +1,6 @@ +1.3 + * Improved .NET assembly enumeration timeout handling + 1.2 * Fixed inaccurate stack traces for certain .NET programs diff --git a/2.x/trunk/plugins/DotNetTools/DotNetTools.rc b/2.x/trunk/plugins/DotNetTools/DotNetTools.rc index db1b5a118c74205cd05a1de4c7b326fb95e47d50..62310515f8856bee751702144fc46df07f68ea3b 100644 GIT binary patch delta 42 wcmbPbH_L8A4hN(0TraceHandleActive, 0) == 1) { CloseTrace(Context->TraceHandle); + timeout = TRUE; } NtWaitForSingleObject(threadHandle, FALSE, NULL); @@ -915,9 +917,30 @@ ULONG UpdateDotNetTraceInfoWithTimeout( NtClose(threadHandle); + if (timeout) + return ERROR_TIMEOUT; + return Context->TraceResult; } +BOOLEAN IsProcessSuspended( + __in HANDLE ProcessId + ) +{ + PVOID processes; + PSYSTEM_PROCESS_INFORMATION process; + + if (NT_SUCCESS(PhEnumProcesses(&processes))) + { + if (process = PhFindProcessInformation(processes, ProcessId)) + return PhGetProcessIsSuspended(process); + + PhFree(processes); + } + + return FALSE; +} + INT_PTR CALLBACK DotNetAsmPageDlgProc( __in HWND hwndDlg, __in UINT uMsg, @@ -981,31 +1004,75 @@ INT_PTR CALLBACK DotNetAsmPageDlgProc( SetCursor(LoadCursor(NULL, IDC_WAIT)); - if (context->ClrVersions & PH_CLR_VERSION_1_0) + if ( + !IsProcessSuspended(processItem->ProcessId) || + PhShowMessage(hwndDlg, MB_ICONWARNING | MB_YESNO, L".NET assembly enumeration may not work properly because the process is currently suspended. Do you want to continue?") == IDYES + ) { - AddFakeClrNode(context, L"CLR v1.0.3705"); // what PE displays - } + BOOLEAN timeoutReached = FALSE; + BOOLEAN nonClrNode = FALSE; + ULONG i; - if (context->ClrVersions & PH_CLR_VERSION_1_1) - { - AddFakeClrNode(context, L"CLR v1.1.4322"); - } + if (context->ClrVersions & PH_CLR_VERSION_1_0) + { + AddFakeClrNode(context, L"CLR v1.0.3705"); // what PE displays + } + + if (context->ClrVersions & PH_CLR_VERSION_1_1) + { + AddFakeClrNode(context, L"CLR v1.1.4322"); + } - timeout.QuadPart = -10 * PH_TIMEOUT_SEC; + timeout.QuadPart = -10 * PH_TIMEOUT_SEC; - if (context->ClrVersions & PH_CLR_VERSION_2_0) - { - context->ClrV2Node = AddFakeClrNode(context, L"CLR v2.0.50727"); - result = UpdateDotNetTraceInfoWithTimeout(context, TRUE, &timeout); - } + if (context->ClrVersions & PH_CLR_VERSION_2_0) + { + context->ClrV2Node = AddFakeClrNode(context, L"CLR v2.0.50727"); + result = UpdateDotNetTraceInfoWithTimeout(context, TRUE, &timeout); + + if (result == ERROR_TIMEOUT) + { + timeoutReached = TRUE; + result = ERROR_SUCCESS; + } + } + + if (context->ClrVersions & PH_CLR_VERSION_4_ABOVE) + { + result = UpdateDotNetTraceInfoWithTimeout(context, FALSE, &timeout); + + if (result == ERROR_TIMEOUT) + { + timeoutReached = TRUE; + result = ERROR_SUCCESS; + } + } + + TreeNew_NodesStructured(tnHandle); + + // If we reached the timeout, check whether we got any data back. + if (timeoutReached) + { + for (i = 0; i < context->NodeList->Count; i++) + { + PDNA_NODE node = context->NodeList->Items[i]; - if (context->ClrVersions & PH_CLR_VERSION_4_ABOVE) + if (node->Type != DNA_TYPE_CLR) + { + nonClrNode = TRUE; + break; + } + } + + if (!nonClrNode) + result = ERROR_TIMEOUT; + } + } + else { - result = UpdateDotNetTraceInfoWithTimeout(context, FALSE, &timeout); + result = ERROR_INSTALL_SUSPEND; } - TreeNew_NodesStructured(tnHandle); - TreeNew_SetRedraw(tnHandle, TRUE); SetCursor(LoadCursor(NULL, IDC_ARROW)); @@ -1018,6 +1085,14 @@ INT_PTR CALLBACK DotNetAsmPageDlgProc( { SetDlgItemText(hwndDlg, IDC_ERROR, L"Unable to start the event tracing session. Make sure Process Hacker is running with administrative privileges."); } + else if (result == ERROR_INSTALL_SUSPEND) + { + SetDlgItemText(hwndDlg, IDC_ERROR, L"Unable to start the event tracing session because the process is suspended."); + } + else if (result == ERROR_TIMEOUT) + { + SetDlgItemText(hwndDlg, IDC_ERROR, L"The event tracing session timed out."); + } else { SetDlgItemText(hwndDlg, IDC_ERROR, From 138149bfdb4ee765b837bc3e03bc2a91631a4a53 Mon Sep 17 00:00:00 2001 From: dmex Date: Sat, 2 Nov 2013 02:24:51 +0000 Subject: [PATCH 062/161] PluginsExtra: Added Wait Chain Traversal (WCT) plugin git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5529 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/plugins-extra/ExtraPlugins.sln | 14 +- .../WaitChainPlugin/CHANGELOG.txt | 4 + .../WaitChainPlugin/WaitChainPlugin.rc | 146 +++++ .../WaitChainPlugin/WaitChainPlugin.vcxproj | 188 ++++++ .../WaitChainPlugin.vcxproj.filters | 43 ++ .../plugins-extra/WaitChainPlugin/main.c | 525 ++++++++++++++++ .../plugins-extra/WaitChainPlugin/main.h | 66 ++ .../plugins-extra/WaitChainPlugin/resource.h | 23 + .../plugins-extra/WaitChainPlugin/wndtree.c | 584 ++++++++++++++++++ .../plugins-extra/WaitChainPlugin/wndtree.h | 105 ++++ 10 files changed, 1697 insertions(+), 1 deletion(-) create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/CHANGELOG.txt create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj.filters create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/main.c create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/main.h create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/resource.h create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.c create mode 100644 2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.h diff --git a/2.x/trunk/plugins-extra/ExtraPlugins.sln b/2.x/trunk/plugins-extra/ExtraPlugins.sln index 24995d377..919fe5ef2 100644 --- a/2.x/trunk/plugins-extra/ExtraPlugins.sln +++ b/2.x/trunk/plugins-extra/ExtraPlugins.sln @@ -1,6 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HexPidPlugin", "HexPidPlugin\HexPidPlugin.vcxproj", "{50691784-4EB0-4B5E-B428-BD37E52F8D2E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AvgCpuPlugin", "AvgCpuPlugin\AvgCpuPlugin.vcxproj", "{A68DC3E8-5E2E-4883-A2A4-81F921458A9C}" @@ -13,6 +15,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DnsCachePlugin", "DnsCacheP EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AtomTablePlugin", "AtomTablePlugin\AtomTablePlugin.vcxproj", "{12390643-F40D-411F-A2E8-BF85F90223DF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WaitChainPlugin", "WaitChainPlugin\WaitChainPlugin.vcxproj", "{D6EA1C23-4CBC-4CD5-931C-38C984722510}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -73,6 +77,14 @@ Global {12390643-F40D-411F-A2E8-BF85F90223DF}.Release|x64.ActiveCfg = Release|x64 {12390643-F40D-411F-A2E8-BF85F90223DF}.Release|x64.Build.0 = Release|x64 {12390643-F40D-411F-A2E8-BF85F90223DF}.Release|x64.Deploy.0 = Release|x64 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Debug|Win32.ActiveCfg = Debug|Win32 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Debug|Win32.Build.0 = Debug|Win32 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Debug|x64.ActiveCfg = Debug|x64 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Debug|x64.Build.0 = Debug|x64 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Release|Win32.ActiveCfg = Release|Win32 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Release|Win32.Build.0 = Release|Win32 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Release|x64.ActiveCfg = Release|x64 + {D6EA1C23-4CBC-4CD5-931C-38C984722510}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/CHANGELOG.txt b/2.x/trunk/plugins-extra/WaitChainPlugin/CHANGELOG.txt new file mode 100644 index 000000000..46727fa1a --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/CHANGELOG.txt @@ -0,0 +1,4 @@ +1.0 + * Initial release + + diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc new file mode 100644 index 000000000..676506546 --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc @@ -0,0 +1,146 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000904b0" + BEGIN + VALUE "CompanyName", "dmex" + VALUE "FileDescription", "Dns Cache plugin for Process Hacker" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "WaitChainPlugin" + VALUE "LegalCopyright", "Licensed under the GNU GPL, v3." + VALUE "OriginalFilename", "WaitChainPlugin.dll" + VALUE "ProductName", "WaitChainPlugin plugin for Process Hacker" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x9, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_WCT_DIALOG DIALOGEX 0, 0, 333, 180 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_APPWINDOW +CAPTION "Wait Chain Traversal" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "Windows",IDC_CUSTOM1,"PhTreeNew",WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0x2,7,5,319,150,WS_EX_CLIENTEDGE + DEFPUSHBUTTON "Close",IDOK,277,160,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_WCT_DIALOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 326 + TOPMARGIN, 5 + BOTTOMMARGIN, 173 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MAIN_MENU MENU +BEGIN + POPUP "Menu" + BEGIN + MENUITEM "Go to Process...", ID_MENU_GOTOPROCESS + MENUITEM "Go to Thread...", ID_MENU_GOTOTHREAD + END +END + +#endif // English resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (Australia) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENA) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (Australia) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj new file mode 100644 index 000000000..040a29b6b --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj @@ -0,0 +1,188 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + {D6EA1C23-4CBC-4CD5-931C-38C984722510} + WaitChainPlugin + Win32Proj + WaitChainPlugin + + + + DynamicLibrary + Unicode + true + v120 + + + DynamicLibrary + Unicode + v120 + + + DynamicLibrary + Unicode + true + v120 + + + DynamicLibrary + Unicode + v120 + + + + + + + + + + + + + + + + + + + $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ + $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ + true + true + $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ + $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ + false + $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ + $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ + false + $(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)\plugins\ + $(ProjectDir)obj\$(Configuration)$(PlatformArchitecture)\ + AllRules.ruleset + AllRules.ruleset + + + + Disabled + ../../sdk/include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + ProgramDatabase + StdCall + true + + + ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + ../../sdk/lib/i386;%(AdditionalLibraryDirectories) + true + Windows + MachineX86 + + + + + Disabled + ../../sdk/include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + ProgramDatabase + StdCall + true + + + ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + ../../sdk/lib/amd64;%(AdditionalLibraryDirectories) + true + Windows + MachineX64 + + + + + MaxSpeed + true + ../../sdk/include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + MultiThreaded + true + Level3 + ProgramDatabase + StdCall + true + StreamingSIMDExtensions + + + ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + ../../sdk/lib/i386;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + true + + + + + MaxSpeed + true + ../../sdk/include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + MultiThreaded + true + Level3 + ProgramDatabase + StdCall + true + + + ProcessHacker.lib;ntdll.lib;%(AdditionalDependencies) + ../../sdk/lib/amd64;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + true + + + + + + \ No newline at end of file diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj.filters b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj.filters new file mode 100644 index 000000000..455308113 --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.vcxproj.filters @@ -0,0 +1,43 @@ + + + + + {802108be-ae96-47c3-8d93-884ed6dd096a} + + + {3e65ffb8-3f3e-40d7-b3ca-d55cae8edb16} + + + {b98dd849-bbfe-4b41-8c48-f65680da5c00} + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/main.c b/2.x/trunk/plugins-extra/WaitChainPlugin/main.c new file mode 100644 index 000000000..cda037d23 --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/main.c @@ -0,0 +1,525 @@ +/* + * Process Hacker Extra Plugins - + * Wait Chain Traversal (WCT) Plugin + * + * Copyright (C) 2013 dmex + * + * This file is part of Process Hacker. + * + * Process Hacker is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Process Hacker is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Process Hacker. If not, see . + */ + +#include "main.h" + +static PPH_PLUGIN PluginInstance; +static PH_CALLBACK_REGISTRATION PluginMenuItemCallbackRegistration; +static PH_CALLBACK_REGISTRATION ProcessMenuInitializingCallbackRegistration; +static PH_CALLBACK_REGISTRATION ThreadMenuInitializingCallbackRegistration; + +static BOOLEAN WaitChainRegisterCallbacks( + __inout PWCT_CONTEXT Context + ) +{ + PCOGETCALLSTATE coGetCallStateCallback = NULL; + PCOGETACTIVATIONSTATE coGetActivationStateCallback = NULL; + + Context->Ole32ModuleHandle = LoadLibrary(L"ole32.dll"); + if (!Context->Ole32ModuleHandle) + return FALSE; + + coGetCallStateCallback = (PCOGETCALLSTATE)GetProcAddress(Context->Ole32ModuleHandle, "CoGetCallState"); + if (!coGetCallStateCallback) + return FALSE; + + coGetActivationStateCallback = (PCOGETACTIVATIONSTATE)GetProcAddress(Context->Ole32ModuleHandle, "CoGetActivationState"); + if (!coGetActivationStateCallback) + return FALSE; + + RegisterWaitChainCOMCallback(coGetCallStateCallback, coGetActivationStateCallback); + return TRUE; +} + +static VOID WaitChainCheckThread( + __inout PWCT_CONTEXT Context, + __in HANDLE ThreadId + ) +{ + ULONG i = 0; + BOOL isCycle = FALSE; + ULONG nodeLength = WCT_MAX_NODE_COUNT; + WAITCHAIN_NODE_INFO NodeInfoArray[WCT_MAX_NODE_COUNT]; + PWCT_ROOT_NODE rootNode = NULL; + + memset(NodeInfoArray, 0, sizeof(WAITCHAIN_NODE_INFO)* WCT_MAX_NODE_COUNT); + + // Retrieve the thread wait chain. + if (!GetThreadWaitChain( + Context->WctSessionHandle, + 0, + WCT_GETINFO_ALL_FLAGS, + HandleToUlong(ThreadId), + &nodeLength, + NodeInfoArray, + &isCycle + )) + { + return; + } + + // Check if the wait chain is too big for the array we passed in. + if (nodeLength > WCT_MAX_NODE_COUNT) + nodeLength = WCT_MAX_NODE_COUNT; + + TreeNew_SetRedraw(Context->TreeNewHandle, FALSE); + TreeNew_NodesStructured(Context->TreeNewHandle); + + for (i = 0; i < nodeLength; i++) + { + WAITCHAIN_NODE_INFO wctNode = NodeInfoArray[i]; + + if (wctNode.ObjectType == WctThreadType) + { + rootNode = WeAddWindowNode(&Context->TreeContext); + + rootNode->WctInfo = wctNode; + rootNode->ThreadId = UlongToHandle(wctNode.ThreadObject.ThreadId); + rootNode->ThreadIdString = PhFormatString(L"%u", wctNode.ThreadObject.ThreadId); + rootNode->ProcessIdString = PhFormatString(L"%u", wctNode.ThreadObject.ProcessId); + rootNode->WaitTimeString = PhFormatString(L"%u", wctNode.ThreadObject.WaitTime); + rootNode->ContextSwitchesString = PhFormatString(L"%u", wctNode.ThreadObject.ContextSwitches); + + if (wctNode.LockObject.ObjectName[0] != L'\0') + { + rootNode->ObjectNameString = PhFormatString(L"%s", wctNode.LockObject.ObjectName); + } + + // Not implemented in v1. + if (wctNode.LockObject.Timeout.QuadPart > 0) + { + rootNode->TimeoutString = PhFormatString(L"%u", wctNode.LockObject.Timeout.QuadPart); + } + + rootNode->Node.Expanded = TRUE; + rootNode->HasChildren = TRUE; + + // This is a root node. + PhAddItemList(Context->TreeContext.NodeRootList, rootNode); + } + else + { + WctAddChildWindowNode(&Context->TreeContext, rootNode, wctNode, isCycle); + } + } + + TreeNew_SetRedraw(Context->TreeNewHandle, TRUE); + TreeNew_NodesStructured(Context->TreeNewHandle); +} + +static NTSTATUS WaitChainCallbackThread( + __in PVOID Parameter + ) +{ + NTSTATUS status = STATUS_SUCCESS; + PWCT_CONTEXT context = (PWCT_CONTEXT)Parameter; + + if (!WaitChainRegisterCallbacks(context)) + return NTSTATUS_FROM_WIN32(GetLastError()); + + // Synchronous WCT session + context->WctSessionHandle = OpenThreadWaitChainSession(0, NULL); + + if (context->WctSessionHandle == NULL) + return NTSTATUS_FROM_WIN32(GetLastError()); + + if (context->IsProcessItem) + { + PVOID processes = NULL; + PSYSTEM_PROCESS_INFORMATION process = NULL; + + if (!NT_SUCCESS(status = PhEnumProcesses(&processes))) + return status; + + process = PH_FIRST_PROCESS(processes); + + do + { + if (process->UniqueProcessId == context->ProcessItem->ProcessId) + { + ULONG i; + + for (i = 0; i < process->NumberOfThreads; i++) + { + WaitChainCheckThread(context, process->Threads[i].ClientId.UniqueThread); + } + } + } while (process = PH_NEXT_PROCESS(process)); + } + else + { + WaitChainCheckThread(context, context->ThreadItem->ThreadId); + } + + if (context->WctSessionHandle) + { + CloseThreadWaitChainSession(context->WctSessionHandle); + } + + if (context->Ole32ModuleHandle) + { + FreeLibrary(context->Ole32ModuleHandle); + } + + return status; +} + +static INT_PTR CALLBACK EtpUnloadedDllsDlgProc( + __in HWND hwndDlg, + __in UINT uMsg, + __in WPARAM wParam, + __in LPARAM lParam + ) +{ + PWCT_CONTEXT context = NULL; + + if (uMsg == WM_INITDIALOG) + { + context = (PWCT_CONTEXT)lParam; + SetProp(hwndDlg, L"Context", (HANDLE)context); + } + else + { + context = (PWCT_CONTEXT)GetProp(hwndDlg, L"Context"); + + if (uMsg == WM_DESTROY) + { + WtcDeleteWindowTree(&context->TreeContext); + + RemoveProp(hwndDlg, L"Context"); + PhFree(context); + context = NULL; + } + } + + if (context == NULL) + return FALSE; + + switch (uMsg) + { + case WM_INITDIALOG: + { + HANDLE threadHandle = INVALID_HANDLE_VALUE; + + context->TreeNewHandle = GetDlgItem(hwndDlg, IDC_CUSTOM1); + + WtcInitializeWindowTree(hwndDlg, context->TreeNewHandle, &context->TreeContext); + PhRegisterDialog(hwndDlg); + PhInitializeLayoutManager(&context->LayoutManager, hwndDlg); + PhAddLayoutItem(&context->LayoutManager, context->TreeNewHandle, NULL, PH_ANCHOR_ALL); + PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDOK), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_RIGHT); + PhLoadWindowPlacementFromSetting(SETTING_NAME_WINDOWS_WINDOW_POSITION, SETTING_NAME_WINDOWS_WINDOW_SIZE, hwndDlg); + + if (threadHandle = PhCreateThread(0, (PUSER_THREAD_START_ROUTINE)WaitChainCallbackThread, (PVOID)context)) + NtClose(threadHandle); + } + break; + case WM_DESTROY: + { + PhSaveWindowPlacementToSetting(SETTING_NAME_WINDOWS_WINDOW_POSITION, SETTING_NAME_WINDOWS_WINDOW_SIZE, hwndDlg); + PhDeleteLayoutManager(&context->LayoutManager); + PhUnregisterDialog(hwndDlg); + } + break; + case WM_SIZE: + PhLayoutManagerLayout(&context->LayoutManager); + break; + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDCANCEL: + case IDOK: + { + PhSaveWindowPlacementToSetting(SETTING_NAME_WINDOWS_WINDOW_POSITION, SETTING_NAME_WINDOWS_WINDOW_SIZE, hwndDlg); + PhDeleteLayoutManager(&context->LayoutManager); + PhUnregisterDialog(hwndDlg); + EndDialog(hwndDlg, IDOK); + } + break; + case ID_WCTSHOWCONTEXTMENU: + { + POINT point; + HMENU menu; + HMENU subMenu; + PWCT_ROOT_NODE selectedNode = NULL; + PPH_PROCESS_NODE processNode = NULL; + + point.x = (SHORT)LOWORD(lParam); + point.y = (SHORT)HIWORD(lParam); + + if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) + { + menu = LoadMenu((HINSTANCE)PluginInstance->DllBase, MAKEINTRESOURCE(IDR_MAIN_MENU)); + subMenu = GetSubMenu(menu, 0); + SetMenuDefaultItem(subMenu, ID_MENU_PROPERTIES, FALSE); + + if (selectedNode->ThreadId > 0) + { + PhEnableMenuItem(subMenu, ID_MENU_GOTOTHREAD, TRUE); + PhEnableMenuItem(subMenu, ID_MENU_GOTOPROCESS, TRUE); + } + else + { + PhEnableMenuItem(subMenu, ID_MENU_GOTOTHREAD, FALSE); + PhEnableMenuItem(subMenu, ID_MENU_GOTOPROCESS, FALSE); + } + + TrackPopupMenu( + subMenu, + TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, + point.x, + point.y, + 0, + hwndDlg, + NULL + ); + + DestroyMenu(menu); + } + } + break; + case ID_MENU_GOTOPROCESS: + { + ULONG processID = 0; + PWCT_ROOT_NODE selectedNode = NULL; + PPH_PROCESS_NODE processNode = NULL; + + if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) + { + processID = _wtol(selectedNode->ProcessIdString->Buffer); + + if (processNode = PhFindProcessNode(UlongToHandle(processID))) + { + ProcessHacker_SelectTabPage(PhMainWndHandle, 0); + PhSelectAndEnsureVisibleProcessNode(processNode); + } + } + } + break; + case ID_MENU_GOTOTHREAD: + { + ULONG processID = 0; + PWCT_ROOT_NODE selectedNode = NULL; + PPH_PROCESS_ITEM processItem = NULL; + PPH_PROCESS_PROPCONTEXT propContext = NULL; + + if (selectedNode = WeGetSelectedWindowNode(&context->TreeContext)) + { + processID = _wtol(selectedNode->ProcessIdString->Buffer); + + if (processItem = PhReferenceProcessItem(UlongToHandle(processID))) + { + if (propContext = PhCreateProcessPropContext(NULL, processItem)) + { + if (selectedNode->ThreadId) + { + PhSetSelectThreadIdProcessPropContext(propContext, selectedNode->ThreadId); + } + + PhShowProcessProperties(propContext); + PhDereferenceObject(propContext); + } + + PhDereferenceObject(processItem); + } + else + { + PhShowError(hwndDlg, L"The process does not exist."); + } + } + } + break; + case ID_MENU_COPY: + { + PPH_STRING text; + + text = PhGetTreeNewText(context->TreeNewHandle, 0); + PhSetClipboardStringEx(hwndDlg, text->Buffer, text->Length); + PhDereferenceObject(text); + } + break; + } + } + break; + } + + return FALSE; +} + +static VOID NTAPI MenuItemCallback( + __in_opt PVOID Parameter, + __in_opt PVOID Context + ) +{ + PPH_PLUGIN_MENU_ITEM menuItem = (PPH_PLUGIN_MENU_ITEM)Parameter; + + switch (menuItem->Id) + { + case IDD_WCT_MENUITEM: + { + DialogBoxParam( + (HINSTANCE)PluginInstance->DllBase, + MAKEINTRESOURCE(IDD_WCT_DIALOG), + NULL, + EtpUnloadedDllsDlgProc, + (LPARAM)menuItem->Context + ); + } + break; + } +} + +static VOID NTAPI ProcessMenuInitializingCallback( + __in_opt PVOID Parameter, + __in_opt PVOID Context + ) +{ + ULONG insertIndex = 0; + PWCT_CONTEXT context = NULL; + PPH_PLUGIN_MENU_INFORMATION menuInfo = NULL; + PPH_PROCESS_ITEM processItem = NULL; + PPH_EMENU_ITEM menuItem = NULL; + PPH_EMENU_ITEM miscMenuItem = NULL; + PPH_EMENU_ITEM wsMenuItem = NULL; + + menuInfo = (PPH_PLUGIN_MENU_INFORMATION)Parameter; + + if (menuInfo->u.Process.NumberOfProcesses == 1) + processItem = menuInfo->u.Process.Processes[0]; + else + { + processItem = NULL; + } + + if (processItem == NULL) + return; + + context = (PWCT_CONTEXT)PhAllocate(sizeof(WCT_CONTEXT)); + memset(context, 0, sizeof(WCT_CONTEXT)); + + context->IsProcessItem = TRUE; + context->ProcessItem = processItem; + + miscMenuItem = PhFindEMenuItem(menuInfo->Menu, 0, L"Miscellaneous", 0); + if (miscMenuItem) + { + menuItem = PhPluginCreateEMenuItem(PluginInstance, 0, IDD_WCT_MENUITEM, L"Wait Chain Traversal", context); + PhInsertEMenuItem(miscMenuItem, menuItem, -1); + + // Disable menu if current process selected. + if (processItem == NULL || processItem->ProcessId == NtCurrentProcessId()) + menuItem->Flags |= PH_EMENU_DISABLED; + } +} + +static VOID NTAPI ThreadMenuInitializingCallback( + __in_opt PVOID Parameter, + __in_opt PVOID Context + ) +{ + PWCT_CONTEXT context = NULL; + PPH_PLUGIN_MENU_INFORMATION menuInfo = NULL; + PPH_THREAD_ITEM threadItem = NULL; + PPH_EMENU_ITEM menuItem = NULL; + PPH_EMENU_ITEM miscMenuItem = NULL; + + menuInfo = (PPH_PLUGIN_MENU_INFORMATION)Parameter; + + if (menuInfo->u.Thread.NumberOfThreads == 1) + threadItem = menuInfo->u.Thread.Threads[0]; + else + threadItem = NULL; + + context = (PWCT_CONTEXT)PhAllocate(sizeof(WCT_CONTEXT)); + memset(context, 0, sizeof(WCT_CONTEXT)); + + context->IsProcessItem = FALSE; + context->ThreadItem = threadItem; + + miscMenuItem = PhFindEMenuItem(menuInfo->Menu, 0, L"Analyze", 0); + menuItem = PhPluginCreateEMenuItem(PluginInstance, 0, IDD_WCT_MENUITEM, L"Wait Chain Traversal", context); + PhInsertEMenuItem(miscMenuItem, menuItem, -1); + + // Disable menu if current process selected. + if (threadItem == NULL || menuInfo->u.Thread.ProcessId == NtCurrentProcessId()) + menuItem->Flags |= PH_EMENU_DISABLED; +} + +LOGICAL DllMain( + __in HINSTANCE Instance, + __in ULONG Reason, + __reserved PVOID Reserved + ) +{ + switch (Reason) + { + case DLL_PROCESS_ATTACH: + { + PPH_PLUGIN_INFORMATION info; + + PluginInstance = PhRegisterPlugin(L"dmex.WaitChainPlugin", Instance, &info); + + if (!PluginInstance) + return FALSE; + + info->DisplayName = L"Wait Chain Traversal"; + info->Author = L"dmex"; + info->Description = L"Plugin for viewing the thread Wait Chain Traversal"; + info->HasOptions = FALSE; + + PhRegisterCallback( + PhGetPluginCallback(PluginInstance, PluginCallbackMenuItem), + MenuItemCallback, + NULL, + &PluginMenuItemCallbackRegistration + ); + PhRegisterCallback( + PhGetGeneralCallback(GeneralCallbackProcessMenuInitializing), + ProcessMenuInitializingCallback, + NULL, + &ProcessMenuInitializingCallbackRegistration + ); + PhRegisterCallback( + PhGetGeneralCallback(GeneralCallbackThreadMenuInitializing), + ThreadMenuInitializingCallback, + NULL, + &ThreadMenuInitializingCallbackRegistration + ); + + { + PH_SETTING_CREATE settings[] = + { + { IntegerSettingType, SETTING_NAME_SHOW_DESKTOP_WINDOWS, L"0" }, + { StringSettingType, SETTING_NAME_WINDOW_TREE_LIST_COLUMNS, L"" }, + { IntegerPairSettingType, SETTING_NAME_WINDOWS_WINDOW_POSITION, L"100,100" }, + { IntegerPairSettingType, SETTING_NAME_WINDOWS_WINDOW_SIZE, L"690,540" } + }; + + PhAddSettings(settings, _countof(settings)); + } + } + break; + } + + return TRUE; +} \ No newline at end of file diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/main.h b/2.x/trunk/plugins-extra/WaitChainPlugin/main.h new file mode 100644 index 000000000..f0e9ab2e6 --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/main.h @@ -0,0 +1,66 @@ +/* + * Process Hacker Extra Plugins - + * Wait Chain Traversal (WCT) Plugin + * + * Copyright (C) 2013 dmex + * + * This file is part of Process Hacker. + * + * Process Hacker is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Process Hacker is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Process Hacker. If not, see . + */ + +#ifndef _WCT_H_ +#define _WCT_H_ + +#define CINTERFACE +#define COBJMACROS +#include +#include +#include +#include +#include +#include "resource.h" +#include "wndtree.h" + +#define IDD_WCT_MENUITEM 1000 +#define WCT_GETINFO_ALL_FLAGS (WCT_OUT_OF_PROC_FLAG|WCT_OUT_OF_PROC_COM_FLAG|WCT_OUT_OF_PROC_CS_FLAG|WCT_NETWORK_IO_FLAG) + +typedef struct _WCT_CONTEXT +{ + HWND DialogHandle; + HWND TreeNewHandle; + + HWND HighlightingWindow; + ULONG HighlightingWindowCount; + WCT_TREE_CONTEXT TreeContext; + PH_LAYOUT_MANAGER LayoutManager; + + BOOLEAN IsProcessItem; + PPH_THREAD_ITEM ThreadItem; + PPH_PROCESS_ITEM ProcessItem; + + HWCT WctSessionHandle; + HMODULE Ole32ModuleHandle; +} WCT_CONTEXT, *PWCT_CONTEXT; + +BOOLEAN WaitChainRegisterCallbacks( + __inout PWCT_CONTEXT Context + ); + +VOID WaitChainCheckThread( + __inout PWCT_CONTEXT Context, + __in HANDLE ThreadId + ); + +#endif \ No newline at end of file diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/resource.h b/2.x/trunk/plugins-extra/WaitChainPlugin/resource.h new file mode 100644 index 000000000..2e9de5d16 --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/resource.h @@ -0,0 +1,23 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by WaitChainPlugin.rc +// +#define IDD_WCT_DIALOG 101 +#define IDR_MAIN_MENU 111 +#define IDC_CUSTOM1 1023 +#define ID_DNSENTRY_FLUSH 40004 +#define ID_MENU_GOTOTHREAD 40006 +#define ID_MENU_PROPERTIES 40007 +#define ID_MENU_COPY 40008 +#define ID_MENU_GOTOPROCESS 40009 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 112 +#define _APS_NEXT_COMMAND_VALUE 40010 +#define _APS_NEXT_CONTROL_VALUE 1024 +#define _APS_NEXT_SYMED_VALUE 108 +#endif +#endif diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.c b/2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.c new file mode 100644 index 000000000..a7b20b980 --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.c @@ -0,0 +1,584 @@ +/* + * Process Hacker Window Explorer - + * window treelist + * + * Copyright (C) 2011 wj32 + * Copyright (C) 2013 dmex + * + * This file is part of Process Hacker. + * + * Process Hacker is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Process Hacker is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Process Hacker. If not, see . + */ + +#include "main.h" + +BOOLEAN WepWindowNodeHashtableCompareFunction( + __in PVOID Entry1, + __in PVOID Entry2 + ); + +ULONG WepWindowNodeHashtableHashFunction( + __in PVOID Entry + ); + +VOID WepDestroyWindowNode( + __in PWCT_ROOT_NODE WindowNode + ); + +BOOLEAN NTAPI WepWindowTreeNewCallback( + __in HWND hwnd, + __in PH_TREENEW_MESSAGE Message, + __in_opt PVOID Parameter1, + __in_opt PVOID Parameter2, + __in_opt PVOID Context + ); + +VOID WtcInitializeWindowTree( + __in HWND ParentWindowHandle, + __in HWND TreeNewHandle, + __out PWCT_TREE_CONTEXT Context + ) +{ + HWND hwnd; + PPH_STRING settings; + + memset(Context, 0, sizeof(WCT_TREE_CONTEXT)); + + Context->NodeHashtable = PhCreateHashtable( + sizeof(PWCT_ROOT_NODE), + (PPH_HASHTABLE_COMPARE_FUNCTION)WepWindowNodeHashtableCompareFunction, + (PPH_HASHTABLE_HASH_FUNCTION)WepWindowNodeHashtableHashFunction, + 100 + ); + Context->NodeList = PhCreateList(100); + Context->NodeRootList = PhCreateList(30); + + Context->ParentWindowHandle = ParentWindowHandle; + Context->TreeNewHandle = TreeNewHandle; + hwnd = TreeNewHandle; + PhSetControlTheme(hwnd, L"explorer"); + + TreeNew_SetCallback(hwnd, WepWindowTreeNewCallback, Context); + + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_TYPE, TRUE, L"Type", 80, PH_ALIGN_LEFT, 0, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_THREADID, TRUE, L"ThreadId", 50, PH_ALIGN_LEFT, 1, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_PROCESSID, TRUE, L"ProcessId", 50, PH_ALIGN_LEFT, 2, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_STATUS, TRUE, L"Status", 80, PH_ALIGN_LEFT, 3, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_CONTEXTSWITCH, TRUE, L"Context Switches", 70, PH_ALIGN_LEFT, 4, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_WAITTIME, TRUE, L"WaitTime", 60, PH_ALIGN_LEFT, 5, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_TIMEOUT, TRUE, L"Timeout", 60, PH_ALIGN_LEFT, 6, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_ALERTABLE, TRUE, L"Alertable", 50, PH_ALIGN_LEFT, 7, 0); + PhAddTreeNewColumn(hwnd, TREE_COLUMN_ITEM_NAME, TRUE, L"Name", 100, PH_ALIGN_LEFT, 8, 0); + + TreeNew_SetTriState(hwnd, TRUE); + TreeNew_SetSort(hwnd, 0, NoSortOrder); + + settings = PhGetStringSetting(SETTING_NAME_WINDOW_TREE_LIST_COLUMNS); + PhCmLoadSettings(hwnd, &settings->sr); + PhDereferenceObject(settings); +} + +VOID WtcDeleteWindowTree( + __in PWCT_TREE_CONTEXT Context + ) +{ + PPH_STRING settings; + ULONG i; + + settings = PhCmSaveSettings(Context->TreeNewHandle); + PhSetStringSetting2(SETTING_NAME_WINDOW_TREE_LIST_COLUMNS, &settings->sr); + PhDereferenceObject(settings); + + for (i = 0; i < Context->NodeList->Count; i++) + { + WepDestroyWindowNode(Context->NodeList->Items[i]); + } + + PhDereferenceObject(Context->NodeHashtable); + PhDereferenceObject(Context->NodeList); + PhDereferenceObject(Context->NodeRootList); +} + +BOOLEAN WepWindowNodeHashtableCompareFunction( + __in PVOID Entry1, + __in PVOID Entry2 + ) +{ + PWCT_ROOT_NODE windowNode1 = *(PWCT_ROOT_NODE *)Entry1; + PWCT_ROOT_NODE windowNode2 = *(PWCT_ROOT_NODE *)Entry2; + + return windowNode1->Node.Index == windowNode2->Node.Index; +} + +ULONG WepWindowNodeHashtableHashFunction( + __in PVOID Entry + ) +{ + return (*(PWCT_ROOT_NODE*)Entry)->Node.Index; +} + +PWCT_ROOT_NODE WeAddWindowNode( + __inout PWCT_TREE_CONTEXT Context + ) +{ + PWCT_ROOT_NODE windowNode; + + windowNode = PhAllocate(sizeof(WCT_ROOT_NODE)); + memset(windowNode, 0, sizeof(WCT_ROOT_NODE)); + PhInitializeTreeNewNode(&windowNode->Node); + + memset(windowNode->TextCache, 0, sizeof(PH_STRINGREF) * TREE_COLUMN_ITEM_MAXIMUM); + windowNode->Node.TextCache = windowNode->TextCache; + windowNode->Node.TextCacheSize = TREE_COLUMN_ITEM_MAXIMUM; + + windowNode->Children = PhCreateList(1); + + PhAddEntryHashtable(Context->NodeHashtable, &windowNode); + PhAddItemList(Context->NodeList, windowNode); + + TreeNew_NodesStructured(Context->TreeNewHandle); + + return windowNode; +} + +VOID WctAddChildWindowNode( + __in PWCT_TREE_CONTEXT Context, + __in_opt PWCT_ROOT_NODE ParentNode, + __in WAITCHAIN_NODE_INFO WctNode, + __in BOOLEAN IsDeadLocked + ) +{ + PWCT_ROOT_NODE childNode = NULL; + + childNode = WeAddWindowNode(Context); + + childNode->WctInfo = WctNode; + childNode->IsDeadLocked = TRUE; + + childNode->ThreadId = UlongToHandle(WctNode.ThreadObject.ThreadId); + childNode->ProcessIdString = PhFormatString(L"%u", WctNode.ThreadObject.ProcessId); + childNode->ThreadIdString = PhFormatString(L"%u", WctNode.ThreadObject.ThreadId); + childNode->WaitTimeString = PhFormatString(L"%u", WctNode.ThreadObject.WaitTime); + childNode->ContextSwitchesString = PhFormatString(L"%u", WctNode.ThreadObject.ContextSwitches); + + if (WctNode.LockObject.ObjectName[0] != L'\0') + childNode->ObjectNameString = PhFormatString(L"%s", WctNode.LockObject.ObjectName); + + if (WctNode.LockObject.Timeout.QuadPart > 0) + { + SYSTEMTIME systemTime; + PPH_STRING dateString = NULL; + PPH_STRING timeString = NULL; + + PhLargeIntegerToLocalSystemTime(&systemTime, &WctNode.LockObject.Timeout); + + dateString = PhFormatDate(&systemTime, NULL); + timeString = PhFormatTime(&systemTime, NULL); + + childNode->TimeoutString = PhFormatString(L"%s %s", dateString->Buffer, timeString->Buffer); + + PhDereferenceObject(dateString); + PhDereferenceObject(timeString); + } + + if (ParentNode) + { + childNode->HasChildren = FALSE; + + // This is a child node. + childNode->Parent = ParentNode; + PhAddItemList(ParentNode->Children, childNode); + } + else + { + childNode->HasChildren = TRUE; + childNode->Node.Expanded = TRUE; + + // This is a root node. + PhAddItemList(Context->NodeRootList, childNode); + } +} + +PWCT_ROOT_NODE WeFindWindowNode( + __in PWCT_TREE_CONTEXT Context, + __in HWND WindowHandle + ) +{ + WCT_ROOT_NODE lookupWindowNode; + PWCT_ROOT_NODE lookupWindowNodePtr = &lookupWindowNode; + PWCT_ROOT_NODE *windowNode; + + lookupWindowNode.Node.Index = HandleToUlong(WindowHandle); + + windowNode = (PWCT_ROOT_NODE*)PhFindEntryHashtable( + Context->NodeHashtable, + &lookupWindowNodePtr + ); + + if (windowNode) + return *windowNode; + else + return NULL; +} + +VOID WeRemoveWindowNode( + __in PWCT_TREE_CONTEXT Context, + __in PWCT_ROOT_NODE WindowNode + ) +{ + ULONG index = 0; + + // Remove from hashtable/list and cleanup. + PhRemoveEntryHashtable(Context->NodeHashtable, &WindowNode); + + if ((index = PhFindItemList(Context->NodeList, WindowNode)) != -1) + { + PhRemoveItemList(Context->NodeList, index); + } + + WepDestroyWindowNode(WindowNode); + + TreeNew_NodesStructured(Context->TreeNewHandle); +} + +VOID WepDestroyWindowNode( + __in PWCT_ROOT_NODE WindowNode + ) +{ + PhDereferenceObject(WindowNode->Children); + + //if (WindowNode->TypeString) + // PhDereferenceObject(WindowNode->TypeString); + + //if (WindowNode->ThreadString) + // PhDereferenceObject(WindowNode->ThreadString); + + PhFree(WindowNode); +} + +BOOLEAN NTAPI WepWindowTreeNewCallback( + __in HWND hwnd, + __in PH_TREENEW_MESSAGE Message, + __in_opt PVOID Parameter1, + __in_opt PVOID Parameter2, + __in_opt PVOID Context + ) +{ + PWCT_TREE_CONTEXT context; + PWCT_ROOT_NODE node; + + context = Context; + + switch (Message) + { + case TreeNewGetChildren: + { + PPH_TREENEW_GET_CHILDREN getChildren = Parameter1; + + node = (PWCT_ROOT_NODE)getChildren->Node; + + if (context->TreeNewSortOrder == NoSortOrder) + { + if (!node) + { + getChildren->Children = (PPH_TREENEW_NODE *)context->NodeRootList->Items; + getChildren->NumberOfChildren = context->NodeRootList->Count; + } + else + { + getChildren->Children = (PPH_TREENEW_NODE *)node->Children->Items; + getChildren->NumberOfChildren = node->Children->Count; + } + } + else + { + if (!node) + { + getChildren->Children = (PPH_TREENEW_NODE *)context->NodeList->Items; + getChildren->NumberOfChildren = context->NodeList->Count; + } + } + } + return TRUE; + case TreeNewIsLeaf: + { + PPH_TREENEW_IS_LEAF isLeaf = (PPH_TREENEW_IS_LEAF)Parameter1; + + node = (PWCT_ROOT_NODE)isLeaf->Node; + + if (context->TreeNewSortOrder == NoSortOrder) + isLeaf->IsLeaf = !node->HasChildren; + else + isLeaf->IsLeaf = TRUE; + } + return TRUE; + case TreeNewGetCellText: + { + PPH_TREENEW_GET_CELL_TEXT getCellText = (PPH_TREENEW_GET_CELL_TEXT)Parameter1; + + node = (PWCT_ROOT_NODE)getCellText->Node; + + switch (getCellText->Id) + { + case TREE_COLUMN_ITEM_TYPE: + { + switch (node->WctInfo.ObjectType) + { + case WctCriticalSectionType: + PhInitializeStringRef(&getCellText->Text, L"CriticalSection"); + break; + case WctSendMessageType: + PhInitializeStringRef(&getCellText->Text, L"SendMessage"); + break; + case WctMutexType: + PhInitializeStringRef(&getCellText->Text, L"Mutex"); + break; + case WctAlpcType: + PhInitializeStringRef(&getCellText->Text, L"Alpc"); + break; + case WctComType: + PhInitializeStringRef(&getCellText->Text, L"Com"); + break; + case WctComActivationType: + PhInitializeStringRef(&getCellText->Text, L"ComActivation"); + break; + case WctProcessWaitType: + PhInitializeStringRef(&getCellText->Text, L"ProcWait"); + break; + case WctThreadType: + PhInitializeStringRef(&getCellText->Text, L"Thread"); + break; + case WctThreadWaitType: + PhInitializeStringRef(&getCellText->Text, L"ThreadWait"); + break; + case WctSocketIoType: + PhInitializeStringRef(&getCellText->Text, L"Socket I/O"); + break; + case WctSmbIoType: + PhInitializeStringRef(&getCellText->Text, L"SMB I/O"); + break; + case WctUnknownType: + case WctMaxType: + default: + PhInitializeStringRef(&getCellText->Text, L"Unknown"); + break; + } + } + break; + case TREE_COLUMN_ITEM_STATUS: + { + switch (node->WctInfo.ObjectStatus) + { + case WctStatusNoAccess: + PhInitializeStringRef(&getCellText->Text, L"No Access"); + break; + case WctStatusRunning: + PhInitializeStringRef(&getCellText->Text, L"Running"); + break; + case WctStatusBlocked: + PhInitializeStringRef(&getCellText->Text, L"Blocked"); + break; + case WctStatusPidOnly: + PhInitializeStringRef(&getCellText->Text, L"Pid Only"); + break; + case WctStatusPidOnlyRpcss: + PhInitializeStringRef(&getCellText->Text, L"Pid Only (Rpcss)"); + break; + case WctStatusOwned: + PhInitializeStringRef(&getCellText->Text, L"Owned"); + break; + case WctStatusNotOwned: + PhInitializeStringRef(&getCellText->Text, L"Not Owned"); + break; + case WctStatusAbandoned: + PhInitializeStringRef(&getCellText->Text, L"Abandoned"); + break; + case WctStatusError: + PhInitializeStringRef(&getCellText->Text, L"Error"); + break; + case WctStatusUnknown: + case WctStatusMax: + default: + PhInitializeStringRef(&getCellText->Text, L"Unknown"); + break; + } + } + break; + case TREE_COLUMN_ITEM_NAME: + getCellText->Text = PhGetStringRef(node->ObjectNameString); + break; + case TREE_COLUMN_ITEM_TIMEOUT: + getCellText->Text = PhGetStringRef(node->TimeoutString); + break; + case TREE_COLUMN_ITEM_ALERTABLE: + { + if (node->WctInfo.LockObject.Alertable) + { + PhInitializeStringRef(&getCellText->Text, L"true"); + } + else + { + PhInitializeStringRef(&getCellText->Text, L"false"); + } + } + break; + case TREE_COLUMN_ITEM_PROCESSID: + { + if (node->WctInfo.ObjectType == WctThreadType) + { + getCellText->Text = PhGetStringRef(node->ProcessIdString); + } + } + break; + case TREE_COLUMN_ITEM_THREADID: + { + if (node->WctInfo.ObjectType == WctThreadType) + { + getCellText->Text = PhGetStringRef(node->ThreadIdString); + } + } + break; + case TREE_COLUMN_ITEM_WAITTIME: + { + if (node->WctInfo.ObjectType == WctThreadType) + { + getCellText->Text = PhGetStringRef(node->WaitTimeString); + } + } + break; + case TREE_COLUMN_ITEM_CONTEXTSWITCH: + { + if (node->WctInfo.ObjectType == WctThreadType) + { + getCellText->Text = PhGetStringRef(node->ContextSwitchesString); + } + } + break; + default: + return FALSE; + } + + getCellText->Flags = TN_CACHE; + } + return TRUE; + case TreeNewGetNodeColor: + { + PPH_TREENEW_GET_NODE_COLOR getNodeColor = (PPH_TREENEW_GET_NODE_COLOR)Parameter1; + node = (PWCT_ROOT_NODE)getNodeColor->Node; + + if (node->IsDeadLocked) + { + getNodeColor->ForeColor = RGB(255, 0, 0); + } + + getNodeColor->Flags = TN_CACHE; + } + return TRUE; + case TreeNewSortChanged: + { + TreeNew_GetSort(hwnd, &context->TreeNewSortColumn, &context->TreeNewSortOrder); + // Force a rebuild to sort the items. + TreeNew_NodesStructured(hwnd); + } + return TRUE; + case TreeNewKeyDown: + case TreeNewLeftDoubleClick: + case TreeNewNodeExpanding: + return TRUE; + case TreeNewContextMenu: + { + PPH_TREENEW_MOUSE_EVENT mouseEvent = (PPH_TREENEW_MOUSE_EVENT)Parameter1; + + SendMessage(context->ParentWindowHandle, WM_COMMAND, ID_WCTSHOWCONTEXTMENU, MAKELONG(mouseEvent->Location.x, mouseEvent->Location.y)); + } + return TRUE; + case TreeNewHeaderRightClick: + { + PH_TN_COLUMN_MENU_DATA data; + + data.TreeNewHandle = hwnd; + data.MouseEvent = Parameter1; + data.DefaultSortColumn = 0; + data.DefaultSortOrder = AscendingSortOrder; + PhInitializeTreeNewColumnMenu(&data); + + data.Selection = PhShowEMenu(data.Menu, hwnd, PH_EMENU_SHOW_LEFTRIGHT | PH_EMENU_SHOW_NONOTIFY, + PH_ALIGN_LEFT | PH_ALIGN_TOP, data.MouseEvent->ScreenLocation.x, data.MouseEvent->ScreenLocation.y); + PhHandleTreeNewColumnMenu(&data); + PhDeleteTreeNewColumnMenu(&data); + } + return TRUE; + } + + return FALSE; +} + +VOID WeClearWindowTree( + __in PWCT_TREE_CONTEXT Context + ) +{ + ULONG i; + + for (i = 0; i < Context->NodeList->Count; i++) + WepDestroyWindowNode(Context->NodeList->Items[i]); + + PhClearHashtable(Context->NodeHashtable); + PhClearList(Context->NodeList); + PhClearList(Context->NodeRootList); +} + +PWCT_ROOT_NODE WeGetSelectedWindowNode( + __in PWCT_TREE_CONTEXT Context + ) +{ + PWCT_ROOT_NODE windowNode = NULL; + ULONG i; + + for (i = 0; i < Context->NodeList->Count; i++) + { + windowNode = Context->NodeList->Items[i]; + + if (windowNode->Node.Selected) + return windowNode; + } + + return NULL; +} + +VOID WeGetSelectedWindowNodes( + __in PWCT_TREE_CONTEXT Context, + __out PWCT_ROOT_NODE **Windows, + __out PULONG NumberOfWindows + ) +{ + PPH_LIST list; + ULONG i; + + list = PhCreateList(2); + + for (i = 0; i < Context->NodeList->Count; i++) + { + PWCT_ROOT_NODE node = (PWCT_ROOT_NODE)Context->NodeList->Items[i]; + + if (node->Node.Selected) + { + PhAddItemList(list, node); + } + } + + *Windows = PhAllocateCopy(list->Items, sizeof(PVOID) * list->Count); + *NumberOfWindows = list->Count; + + PhDereferenceObject(list); +} \ No newline at end of file diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.h b/2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.h new file mode 100644 index 000000000..cb55a7c9a --- /dev/null +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/wndtree.h @@ -0,0 +1,105 @@ +#ifndef WNDTREE_H +#define WNDTREE_H + +#define ID_WCTSHOWCONTEXTMENU 19584 +#define SETTING_PREFIX L"dmex.WaitChainPlugin." +#define SETTING_NAME_SHOW_DESKTOP_WINDOWS (SETTING_PREFIX L"ShowDesktopWindows") +#define SETTING_NAME_WINDOW_TREE_LIST_COLUMNS (SETTING_PREFIX L"WindowTreeListColumns") +#define SETTING_NAME_WINDOWS_WINDOW_POSITION (SETTING_PREFIX L"WindowsWindowPosition") +#define SETTING_NAME_WINDOWS_WINDOW_SIZE (SETTING_PREFIX L"WindowsWindowSize") + +typedef enum _WCT_TREE_COLUMN_ITEM_NAME +{ + TREE_COLUMN_ITEM_TYPE = 0, + TREE_COLUMN_ITEM_STATUS = 1, + TREE_COLUMN_ITEM_NAME = 2, + TREE_COLUMN_ITEM_TIMEOUT = 3, + TREE_COLUMN_ITEM_ALERTABLE = 4, + TREE_COLUMN_ITEM_PROCESSID = 5, + TREE_COLUMN_ITEM_THREADID = 6, + TREE_COLUMN_ITEM_WAITTIME = 7, + TREE_COLUMN_ITEM_CONTEXTSWITCH = 8, + TREE_COLUMN_ITEM_MAXIMUM +} WCT_TREE_COLUMN_ITEM_NAME; + +typedef struct _WCT_ROOT_NODE +{ + PH_TREENEW_NODE Node; + struct _WCT_ROOT_NODE* Parent; + PPH_LIST Children; + BOOLEAN HasChildren; + + WAITCHAIN_NODE_INFO WctInfo; + PPH_STRING TimeoutString; + PPH_STRING ProcessIdString; + PPH_STRING ThreadIdString; + PPH_STRING WaitTimeString; + PPH_STRING ContextSwitchesString; + PPH_STRING ObjectNameString; + + BOOLEAN IsDeadLocked; + + HANDLE ThreadId; + + PH_STRINGREF TextCache[TREE_COLUMN_ITEM_MAXIMUM]; + WCHAR WindowHandleString[PH_PTR_STR_LEN_1]; +} WCT_ROOT_NODE, *PWCT_ROOT_NODE; + +typedef struct _WCT_TREE_CONTEXT +{ + HWND ParentWindowHandle; + HWND TreeNewHandle; + ULONG TreeNewSortColumn; + PH_SORT_ORDER TreeNewSortOrder; + + PPH_HASHTABLE NodeHashtable; + PPH_LIST NodeList; + PPH_LIST NodeRootList; +} WCT_TREE_CONTEXT, *PWCT_TREE_CONTEXT; + +VOID WtcInitializeWindowTree( + __in HWND ParentWindowHandle, + __in HWND TreeNewHandle, + __out PWCT_TREE_CONTEXT Context + ); + +VOID WtcDeleteWindowTree( + __in PWCT_TREE_CONTEXT Context + ); + +VOID WctAddChildWindowNode( + __in PWCT_TREE_CONTEXT Context, + __in_opt PWCT_ROOT_NODE ParentNode, + __in WAITCHAIN_NODE_INFO WctNode, + __in BOOLEAN IsDeadLocked + ); + +PWCT_ROOT_NODE WeAddWindowNode( + __inout PWCT_TREE_CONTEXT Context + ); + +PWCT_ROOT_NODE WeFindWindowNode( + __in PWCT_TREE_CONTEXT Context, + __in HWND WindowHandle + ); + +VOID WeRemoveWindowNode( + __in PWCT_TREE_CONTEXT Context, + __in PWCT_ROOT_NODE WindowNode + ); + +VOID WeClearWindowTree( + __in PWCT_TREE_CONTEXT Context + ); + +PWCT_ROOT_NODE WeGetSelectedWindowNode( + __in PWCT_TREE_CONTEXT Context + ); + +VOID WeGetSelectedWindowNodes( + __in PWCT_TREE_CONTEXT Context, + __out PWCT_ROOT_NODE **Windows, + __out PULONG NumberOfWindows + ); + +#endif From 37ab5a7922d1186a39b1b455897bd13e3f90d5cf Mon Sep 17 00:00:00 2001 From: dmex Date: Sat, 2 Nov 2013 06:46:10 +0000 Subject: [PATCH 063/161] Plugins: removed unused code git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5530 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc | 4 ++-- 2.x/trunk/plugins-extra/WaitChainPlugin/main.c | 3 +++ 2.x/trunk/plugins/NetworkTools/NetworkTools.rc | 1 - 2.x/trunk/plugins/NetworkTools/output.c | 4 ---- 2.x/trunk/plugins/NetworkTools/resource.h | 2 -- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc index 676506546..ba5c00d76 100644 --- a/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/WaitChainPlugin.rc @@ -41,12 +41,12 @@ BEGIN BLOCK "000904b0" BEGIN VALUE "CompanyName", "dmex" - VALUE "FileDescription", "Dns Cache plugin for Process Hacker" + VALUE "FileDescription", "Wait Chain Traversal plugin for Process Hacker" VALUE "FileVersion", "1.0.0.0" VALUE "InternalName", "WaitChainPlugin" VALUE "LegalCopyright", "Licensed under the GNU GPL, v3." VALUE "OriginalFilename", "WaitChainPlugin.dll" - VALUE "ProductName", "WaitChainPlugin plugin for Process Hacker" + VALUE "ProductName", "Wait Chain Traversal plugin for Process Hacker" VALUE "ProductVersion", "1.0.0.0" END END diff --git a/2.x/trunk/plugins-extra/WaitChainPlugin/main.c b/2.x/trunk/plugins-extra/WaitChainPlugin/main.c index cda037d23..3343e1bf3 100644 --- a/2.x/trunk/plugins-extra/WaitChainPlugin/main.c +++ b/2.x/trunk/plugins-extra/WaitChainPlugin/main.c @@ -22,6 +22,9 @@ #include "main.h" +// Wait Chain Traversal Documentation: +// http://msdn.microsoft.com/en-us/library/windows/desktop/ms681622.aspx + static PPH_PLUGIN PluginInstance; static PH_CALLBACK_REGISTRATION PluginMenuItemCallbackRegistration; static PH_CALLBACK_REGISTRATION ProcessMenuInitializingCallbackRegistration; diff --git a/2.x/trunk/plugins/NetworkTools/NetworkTools.rc b/2.x/trunk/plugins/NetworkTools/NetworkTools.rc index 9c5b85a28..24f5daa1c 100644 --- a/2.x/trunk/plugins/NetworkTools/NetworkTools.rc +++ b/2.x/trunk/plugins/NetworkTools/NetworkTools.rc @@ -94,7 +94,6 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN PUSHBUTTON "Close",IDOK,263,162,50,14 EDITTEXT IDC_NETOUTPUTEDIT,7,7,305,152,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_CLIENTEDGE - PUSHBUTTON "Retry",IDC_NETRETRY,210,162,50,14,WS_DISABLED END IDD_OPTIONS DIALOGEX 0, 0, 215, 55 diff --git a/2.x/trunk/plugins/NetworkTools/output.c b/2.x/trunk/plugins/NetworkTools/output.c index 63ef21b55..cfebf2124 100644 --- a/2.x/trunk/plugins/NetworkTools/output.c +++ b/2.x/trunk/plugins/NetworkTools/output.c @@ -64,7 +64,6 @@ static INT_PTR CALLBACK NetworkOutputDlgProc( PhInitializeStringBuilder(&context->ReceivedString, PAGE_SIZE); PhInitializeLayoutManager(&context->LayoutManager, hwndDlg); PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_NETOUTPUTEDIT), NULL, PH_ANCHOR_ALL); - PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDC_NETRETRY), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_RIGHT); PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDOK), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_RIGHT); windowRectangle.Position = PhGetIntegerPairSetting(SETTING_NAME_TRACERT_WINDOW_POSITION); @@ -123,9 +122,6 @@ static INT_PTR CALLBACK NetworkOutputDlgProc( { switch (LOWORD(wParam)) { - case IDC_NETRETRY: - Button_Enable(GetDlgItem(hwndDlg, IDC_NETRETRY), FALSE); - break; case IDCANCEL: case IDOK: PostQuitMessage(0); diff --git a/2.x/trunk/plugins/NetworkTools/resource.h b/2.x/trunk/plugins/NetworkTools/resource.h index bd8d555eb..147939336 100644 --- a/2.x/trunk/plugins/NetworkTools/resource.h +++ b/2.x/trunk/plugins/NetworkTools/resource.h @@ -5,8 +5,6 @@ #define IDD_OUTPUT 101 #define IDD_PINGDIALOG 102 #define IDD_OPTIONS 109 -#define IDC_NETRESOLVECHECK 1001 -#define IDC_NETRETRY 1004 #define IDC_MAXTIMEOUTTEXT 1008 #define IDC_NETOUTPUTEDIT 1008 #define IDC_ICMP_PANEL 1012 From c54188582407ab54b6285799eee315f26fe6b476 Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 3 Nov 2013 02:23:39 +0000 Subject: [PATCH 064/161] updated ignore list git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5531 21ef857c-d57f-4fe0-8362-d861dc6d29cd From 3443276190c0ef8065810ed61b191c10b1e3e7ff Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 3 Nov 2013 08:36:44 +0000 Subject: [PATCH 065/161] signatures for Windows 8 apps are now detected git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5532 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/appsup.c | 95 ++- 2.x/trunk/ProcessHacker/include/phapp.h | 10 + 2.x/trunk/ProcessHacker/include/providers.h | 2 + 2.x/trunk/ProcessHacker/modprv.c | 10 +- 2.x/trunk/ProcessHacker/procprv.c | 83 ++- 2.x/trunk/phlib/include/verify.h | 37 ++ 2.x/trunk/phlib/include/verifyp.h | 11 +- 2.x/trunk/phlib/phlib.vcxproj | 1 + 2.x/trunk/phlib/phlib.vcxproj.filters | 3 + 2.x/trunk/phlib/verify.c | 677 ++++++++++++-------- 11 files changed, 647 insertions(+), 283 deletions(-) create mode 100644 2.x/trunk/phlib/include/verify.h diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index ef3233b6c..7cf00ec9b 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -2,6 +2,7 @@ Process Hacker 2.33 * NEW/IMPROVED: + * Signatures for Windows 8 apps are now detected * Updated DotNetTools plugin: * Improved .NET assembly enumeration timeout handling * FIXED: diff --git a/2.x/trunk/ProcessHacker/appsup.c b/2.x/trunk/ProcessHacker/appsup.c index 74ca103fb..18e4206a7 100644 --- a/2.x/trunk/ProcessHacker/appsup.c +++ b/2.x/trunk/ProcessHacker/appsup.c @@ -28,6 +28,7 @@ #include "mxml/mxml.h" #include #include +#include typedef LONG (WINAPI *_GetPackageFullName)( __in HANDLE hProcess, @@ -35,6 +36,20 @@ typedef LONG (WINAPI *_GetPackageFullName)( __out_opt PWSTR packageFullName ); +typedef LONG (WINAPI *_GetPackagePath)( + __in PACKAGE_ID *packageId, + __reserved UINT32 reserved, + __inout UINT32 *pathLength, + __out_opt PWSTR path + ); + +typedef LONG (WINAPI *_PackageIdFromFullName)( + __in PCWSTR packageFullName, + __in UINT32 flags, + __inout UINT32 *bufferLength, + __out_opt BYTE *buffer + ); + GUID XP_CONTEXT_GUID = { 0xbeb1b341, 0x6837, 0x4c83, { 0x83, 0x66, 0x2b, 0x45, 0x1e, 0x7c, 0xe6, 0x9b } }; GUID VISTA_CONTEXT_GUID = { 0xe2011457, 0x1546, 0x43c5, { 0xa5, 0xfe, 0x00, 0x8d, 0xee, 0xe3, 0xd3, 0xf0 } }; GUID WIN7_CONTEXT_GUID = { 0x35138b9a, 0x5d96, 0x4fbd, { 0x8e, 0x2d, 0xa2, 0x44, 0x02, 0x25, 0xf9, 0x3a } }; @@ -200,7 +215,6 @@ PPH_STRING PhGetProcessPackageFullName( if (!getPackageFullName) getPackageFullName = PhGetProcAddress(L"kernel32.dll", "GetPackageFullName"); - if (!getPackageFullName) return NULL; @@ -229,6 +243,85 @@ PPH_STRING PhGetProcessPackageFullName( } } +PACKAGE_ID *PhPackageIdFromFullName( + __in PWSTR PackageFullName + ) +{ + static _PackageIdFromFullName packageIdFromFullName = NULL; + + LONG result; + PVOID packageIdBuffer; + ULONG packageIdBufferSize; + + if (!packageIdFromFullName) + packageIdFromFullName = PhGetProcAddress(L"kernel32.dll", "PackageIdFromFullName"); + if (!packageIdFromFullName) + return NULL; + + packageIdBufferSize = 100; + packageIdBuffer = PhAllocate(packageIdBufferSize); + + result = packageIdFromFullName(PackageFullName, PACKAGE_INFORMATION_BASIC, &packageIdBufferSize, (PBYTE)packageIdBuffer); + + if (result == ERROR_INSUFFICIENT_BUFFER) + { + PhFree(packageIdBuffer); + packageIdBuffer = PhAllocate(packageIdBufferSize); + + result = packageIdFromFullName(PackageFullName, PACKAGE_INFORMATION_BASIC, &packageIdBufferSize, (PBYTE)packageIdBuffer); + } + + if (result == ERROR_SUCCESS) + { + return packageIdBuffer; + } + else + { + PhFree(packageIdBuffer); + return NULL; + } +} + +PPH_STRING PhGetPackagePath( + __in PACKAGE_ID *PackageId + ) +{ + static _GetPackagePath getPackagePath = NULL; + + LONG result; + PPH_STRING path; + ULONG pathLength; + + if (!getPackagePath) + getPackagePath = PhGetProcAddress(L"kernel32.dll", "GetPackagePath"); + if (!getPackagePath) + return NULL; + + pathLength = 101; + path = PhCreateStringEx(NULL, (pathLength - 1) * 2); + + result = getPackagePath(PackageId, 0, &pathLength, path->Buffer); + + if (result == ERROR_INSUFFICIENT_BUFFER) + { + PhDereferenceObject(path); + path = PhCreateStringEx(NULL, (pathLength - 1) * 2); + + result = getPackagePath(PackageId, 0, &pathLength, path->Buffer); + } + + if (result == ERROR_SUCCESS) + { + PhTrimToNullTerminatorString(path); + return path; + } + else + { + PhDereferenceObject(path); + return NULL; + } +} + VOID PhEnumChildWindows( __in_opt HWND hWnd, __in ULONG Limit, diff --git a/2.x/trunk/ProcessHacker/include/phapp.h b/2.x/trunk/ProcessHacker/include/phapp.h index 6d7733824..b5066959f 100644 --- a/2.x/trunk/ProcessHacker/include/phapp.h +++ b/2.x/trunk/ProcessHacker/include/phapp.h @@ -134,6 +134,8 @@ extern GUID WIN7_CONTEXT_GUID; extern GUID WIN8_CONTEXT_GUID; extern GUID WINBLUE_CONTEXT_GUID; +typedef struct PACKAGE_ID PACKAGE_ID; + PHAPPAPI BOOLEAN PhGetProcessIsSuspended( __in PSYSTEM_PROCESS_INFORMATION Process @@ -148,6 +150,14 @@ PPH_STRING PhGetProcessPackageFullName( __in HANDLE ProcessHandle ); +PACKAGE_ID *PhPackageIdFromFullName( + __in PWSTR PackageFullName + ); + +PPH_STRING PhGetPackagePath( + __in PACKAGE_ID *PackageId + ); + VOID PhEnumChildWindows( __in_opt HWND hWnd, __in ULONG Limit, diff --git a/2.x/trunk/ProcessHacker/include/providers.h b/2.x/trunk/ProcessHacker/include/providers.h index ad262484b..16dd2b68c 100644 --- a/2.x/trunk/ProcessHacker/include/providers.h +++ b/2.x/trunk/ProcessHacker/include/providers.h @@ -285,6 +285,7 @@ VOID PhEnumProcessItems( VERIFY_RESULT PhVerifyFileCached( __in PPH_STRING FileName, + __in_opt PWSTR PackageFullName, __out_opt PPH_STRING *SignerName, __in BOOLEAN CachedOnly ); @@ -545,6 +546,7 @@ typedef struct _PH_MODULE_PROVIDER HANDLE ProcessId; HANDLE ProcessHandle; + PPH_STRING PackageFullName; SLIST_HEADER QueryListHead; } PH_MODULE_PROVIDER, *PPH_MODULE_PROVIDER; diff --git a/2.x/trunk/ProcessHacker/modprv.c b/2.x/trunk/ProcessHacker/modprv.c index f431cee72..ca3232296 100644 --- a/2.x/trunk/ProcessHacker/modprv.c +++ b/2.x/trunk/ProcessHacker/modprv.c @@ -2,7 +2,7 @@ * Process Hacker - * module provider * - * Copyright (C) 2009-2011 wj32 + * Copyright (C) 2009-2013 wj32 * * This file is part of Process Hacker. * @@ -108,6 +108,7 @@ PPH_MODULE_PROVIDER PhCreateModuleProvider( moduleProvider->ProcessId = ProcessId; moduleProvider->ProcessHandle = NULL; + moduleProvider->PackageFullName = NULL; // It doesn't matter if we can't get a process handle. @@ -129,6 +130,9 @@ PPH_MODULE_PROVIDER PhCreateModuleProvider( } } + if (moduleProvider->ProcessHandle) + moduleProvider->PackageFullName = PhGetProcessPackageFullName(moduleProvider->ProcessHandle); + RtlInitializeSListHead(&moduleProvider->QueryListHead); return moduleProvider; @@ -170,6 +174,7 @@ VOID PhpModuleProviderDeleteProcedure( } } + if (moduleProvider->PackageFullName) PhDereferenceObject(moduleProvider->PackageFullName); if (moduleProvider->ProcessHandle) NtClose(moduleProvider->ProcessHandle); } @@ -299,6 +304,7 @@ NTSTATUS PhpModuleQueryWorker( data->VerifyResult = PhVerifyFileCached( data->ModuleItem->FileName, + PhGetString(data->ModuleProvider->PackageFullName), &data->VerifySignerName, FALSE ); @@ -525,7 +531,7 @@ VOID PhModuleProviderUpdate( { // See if the file has already been verified; if not, queue for verification. - moduleItem->VerifyResult = PhVerifyFileCached(moduleItem->FileName, &moduleItem->VerifySignerName, TRUE); + moduleItem->VerifyResult = PhVerifyFileCached(moduleItem->FileName, NULL, &moduleItem->VerifySignerName, TRUE); if (moduleItem->VerifyResult == VrUnknown) PhpQueueModuleQuery(moduleProvider, moduleItem); diff --git a/2.x/trunk/ProcessHacker/procprv.c b/2.x/trunk/ProcessHacker/procprv.c index 208903cf2..cfe87a538 100644 --- a/2.x/trunk/ProcessHacker/procprv.c +++ b/2.x/trunk/ProcessHacker/procprv.c @@ -2,7 +2,7 @@ * Process Hacker - * process provider * - * Copyright (C) 2009-2011 wj32 + * Copyright (C) 2009-2013 wj32 * * This file is part of Process Hacker. * @@ -60,6 +60,7 @@ #include #include #include +#include #include #define PROCESS_ID_BUCKETS 64 @@ -663,11 +664,74 @@ INT NTAPI PhpVerifyCacheCompareFunction( return PhCompareString(entry1->FileName, entry2->FileName, TRUE); } +VERIFY_RESULT PhpVerifyFileWithAdditionalCatalog( + __in PWSTR FileName, + __in_opt PWSTR PackageFullName, + __out_opt PPH_STRING *SignerName + ) +{ + static PH_STRINGREF codeIntegrityFileName = PH_STRINGREF_INIT(L"\\AppxMetadata\\CodeIntegrity.cat"); + + VERIFY_RESULT result; + PH_VERIFY_FILE_INFO info; + PPH_STRING additionalCatalogFileName = NULL; + PCERT_CONTEXT *signatures; + ULONG numberOfSignatures; + + memset(&info, 0, sizeof(PH_VERIFY_FILE_INFO)); + info.FileName = FileName; + info.Flags = PH_VERIFY_PREVENT_NETWORK_ACCESS; + + if (PackageFullName) + { + PACKAGE_ID *packageId; + PPH_STRING packagePath; + + if (packageId = PhPackageIdFromFullName(PackageFullName)) + { + if (packagePath = PhGetPackagePath(packageId)) + { + additionalCatalogFileName = PhConcatStringRef2(&packagePath->sr, &codeIntegrityFileName); + PhDereferenceObject(packagePath); + } + + PhFree(packageId); + } + } + + if (additionalCatalogFileName) + { + info.NumberOfCatalogFileNames = 1; + info.CatalogFileNames = &additionalCatalogFileName->Buffer; + } + + if (!NT_SUCCESS(PhVerifyFileEx(&info, &result, &signatures, &numberOfSignatures))) + { + result = VrNoSignature; + signatures = NULL; + numberOfSignatures = 0; + } + + if (additionalCatalogFileName) + PhDereferenceObject(additionalCatalogFileName); + + if (SignerName) + { + if (numberOfSignatures != 0) + *SignerName = PhGetSignerNameFromCertificate(signatures[0]); + else + *SignerName = NULL; + } + + return result; +} + /** * Verifies a file's digital signature, using a cached * result if possible. * * \param FileName A file name. + * \param ProcessItem An associated process item. * \param SignerName A variable which receives a pointer * to a string containing the signer name. You must free * the string using PhDereferenceObject() when you no @@ -680,6 +744,7 @@ INT NTAPI PhpVerifyCacheCompareFunction( */ VERIFY_RESULT PhVerifyFileCached( __in PPH_STRING FileName, + __in_opt PWSTR PackageFullName, __out_opt PPH_STRING *SignerName, __in BOOLEAN CachedOnly ) @@ -716,7 +781,7 @@ VERIFY_RESULT PhVerifyFileCached( if (!CachedOnly) { - result = PhVerifyFile(FileName->Buffer, &signerName); + result = PhpVerifyFileWithAdditionalCatalog(FileName->Buffer, PackageFullName, &signerName); } else { @@ -764,10 +829,7 @@ VERIFY_RESULT PhVerifyFileCached( return result; } #else - return PhVerifyFile( - FileName->Buffer, - SignerName - ); + return PhpVerifyFileWithAdditionalCatalog(FileName->Buffer, PackageFullName, SignerName); #endif } @@ -1010,12 +1072,21 @@ VOID PhpProcessQueryStage2( if (PhEnableProcessQueryStage2 && processItem->FileName) { + PPH_STRING packageFullName = NULL; + + if (processItem->QueryHandle) + packageFullName = PhGetProcessPackageFullName(processItem->QueryHandle); + Data->VerifyResult = PhVerifyFileCached( processItem->FileName, + PhGetString(packageFullName), &Data->VerifySignerName, FALSE ); + if (packageFullName) + PhDereferenceObject(packageFullName); + status = PhIsExecutablePacked( processItem->FileName->Buffer, &Data->IsPacked, diff --git a/2.x/trunk/phlib/include/verify.h b/2.x/trunk/phlib/include/verify.h new file mode 100644 index 000000000..bb12c2551 --- /dev/null +++ b/2.x/trunk/phlib/include/verify.h @@ -0,0 +1,37 @@ +#ifndef _PH_VERIFY_H +#define _PH_VERIFY_H + +#include +#include + +#define PH_VERIFY_DEFAULT_SIZE_LIMIT (32 * 1024 * 1024) + +#define PH_VERIFY_PREVENT_NETWORK_ACCESS 0x1 + +typedef struct _PH_VERIFY_FILE_INFO +{ + PWSTR FileName; + ULONG Flags; + + ULONG FileSizeLimitForHash; // 0 for PH_VERIFY_DEFAULT_SIZE_LIMIT, -1 for unlimited + ULONG NumberOfCatalogFileNames; + PWSTR *CatalogFileNames; +} PH_VERIFY_FILE_INFO, *PPH_VERIFY_FILE_INFO; + +NTSTATUS PhVerifyFileEx( + __in PPH_VERIFY_FILE_INFO Information, + __out VERIFY_RESULT *VerifyResult, + __out_opt PCERT_CONTEXT **Signatures, + __out_opt PULONG NumberOfSignatures + ); + +VOID PhFreeVerifySignatures( + __in PCERT_CONTEXT *Signatures, + __in ULONG NumberOfSignatures + ); + +PPH_STRING PhGetSignerNameFromCertificate( + __in PCERT_CONTEXT Certificate + ); + +#endif diff --git a/2.x/trunk/phlib/include/verifyp.h b/2.x/trunk/phlib/include/verifyp.h index f5d725b64..6021016ac 100644 --- a/2.x/trunk/phlib/include/verifyp.h +++ b/2.x/trunk/phlib/include/verifyp.h @@ -1,9 +1,6 @@ #ifndef _PH_VERIFYP_H #define _PH_VERIFYP_H -#include -#include - typedef struct _CATALOG_INFO { DWORD cbStruct; @@ -89,4 +86,12 @@ typedef DWORD (WINAPI *_CertNameToStr)( DWORD csz ); +typedef PCCERT_CONTEXT (WINAPI *_CertDuplicateCertificateContext)( + __in PCCERT_CONTEXT pCertContext + ); + +typedef BOOL (WINAPI *_CertFreeCertificateContext)( + __in PCCERT_CONTEXT pCertContext + ); + #endif diff --git a/2.x/trunk/phlib/phlib.vcxproj b/2.x/trunk/phlib/phlib.vcxproj index ac4d4a08d..298228eaa 100644 --- a/2.x/trunk/phlib/phlib.vcxproj +++ b/2.x/trunk/phlib/phlib.vcxproj @@ -199,6 +199,7 @@ + diff --git a/2.x/trunk/phlib/phlib.vcxproj.filters b/2.x/trunk/phlib/phlib.vcxproj.filters index 77b698166..56217a98c 100644 --- a/2.x/trunk/phlib/phlib.vcxproj.filters +++ b/2.x/trunk/phlib/phlib.vcxproj.filters @@ -367,5 +367,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/2.x/trunk/phlib/verify.c b/2.x/trunk/phlib/verify.c index d15816561..cae8f24e4 100644 --- a/2.x/trunk/phlib/verify.c +++ b/2.x/trunk/phlib/verify.c @@ -2,7 +2,7 @@ * Process Hacker - * image verification * - * Copyright (C) 2009-2010 wj32 + * Copyright (C) 2009-2013 wj32 * * This file is part of Process Hacker. * @@ -21,6 +21,7 @@ */ #include +#include #include _CryptCATAdminCalcHashFromFileHandle CryptCATAdminCalcHashFromFileHandle; @@ -35,8 +36,13 @@ _WTHelperProvDataFromStateData WTHelperProvDataFromStateData_I; _WTHelperGetProvSignerFromChain WTHelperGetProvSignerFromChain_I; _WinVerifyTrust WinVerifyTrust_I; _CertNameToStr CertNameToStr_I; +_CertDuplicateCertificateContext CertDuplicateCertificateContext_I; +_CertFreeCertificateContext CertFreeCertificateContext_I; static PH_INITONCE PhpVerifyInitOnce = PH_INITONCE_INIT; +static GUID WinTrustActionGenericVerifyV2 = WINTRUST_ACTION_GENERIC_VERIFY_V2; +static GUID DriverActionVerify = DRIVER_ACTION_VERIFY; + static VOID PhpVerifyInitialization( VOID ) @@ -59,6 +65,8 @@ static VOID PhpVerifyInitialization( WTHelperGetProvSignerFromChain_I = (PVOID)GetProcAddress(wintrust, "WTHelperGetProvSignerFromChain"); WinVerifyTrust_I = (PVOID)GetProcAddress(wintrust, "WinVerifyTrust"); CertNameToStr_I = (PVOID)GetProcAddress(crypt32, "CertNameToStrW"); + CertDuplicateCertificateContext_I = (PVOID)GetProcAddress(crypt32, "CertDuplicateCertificateContext"); + CertFreeCertificateContext_I = (PVOID)GetProcAddress(crypt32, "CertFreeCertificateContext"); } VERIFY_RESULT PhpStatusToVerifyResult( @@ -86,6 +94,376 @@ VERIFY_RESULT PhpStatusToVerifyResult( } } +BOOLEAN PhpGetSignaturesFromStateData( + __in HANDLE StateData, + __out PCERT_CONTEXT **Signatures, + __out PULONG NumberOfSignatures + ) +{ + PCRYPT_PROVIDER_DATA provData; + PCRYPT_PROVIDER_SGNR sgnr; + PCERT_CONTEXT *signatures; + ULONG i; + ULONG numberOfSignatures; + ULONG index; + + provData = WTHelperProvDataFromStateData_I(StateData); + + if (!provData) + { + *Signatures = NULL; + *NumberOfSignatures = 0; + return FALSE; + } + + i = 0; + numberOfSignatures = 0; + + while (sgnr = WTHelperGetProvSignerFromChain_I(provData, i, FALSE, 0)) + { + if (sgnr->csCertChain != 0) + numberOfSignatures++; + + i++; + } + + if (numberOfSignatures != 0) + { + signatures = PhAllocate(numberOfSignatures * sizeof(PCERT_CONTEXT)); + i = 0; + index = 0; + + while (sgnr = WTHelperGetProvSignerFromChain_I(provData, i, FALSE, 0)) + { + if (sgnr->csCertChain != 0) + signatures[index++] = (PCERT_CONTEXT)CertDuplicateCertificateContext_I(sgnr->pasCertChain[0].pCert); + + i++; + } + } + else + { + signatures = NULL; + } + + *Signatures = signatures; + *NumberOfSignatures = numberOfSignatures; + + return TRUE; +} + +VERIFY_RESULT PhpVerifyFile( + __in PPH_VERIFY_FILE_INFO Information, + __in HANDLE FileHandle, + __in ULONG UnionChoice, + __in PVOID UnionData, + __in PGUID ActionId, + __out PCERT_CONTEXT **Signatures, + __out PULONG NumberOfSignatures + ) +{ + LONG status; + WINTRUST_DATA trustData = { 0 }; + + trustData.cbStruct = sizeof(WINTRUST_DATA); + trustData.dwUIChoice = WTD_UI_NONE; + trustData.fdwRevocationChecks = WTD_REVOKE_WHOLECHAIN; + trustData.dwUnionChoice = UnionChoice; + trustData.dwStateAction = WTD_STATEACTION_VERIFY; + trustData.dwProvFlags = WTD_SAFER_FLAG; + + trustData.pFile = UnionData; + + if (UnionChoice == WTD_CHOICE_CATALOG) + trustData.pCatalog = UnionData; + + if (Information->Flags & PH_VERIFY_PREVENT_NETWORK_ACCESS) + { + trustData.fdwRevocationChecks = WTD_REVOKE_NONE; + + if (WindowsVersion >= WINDOWS_VISTA) + trustData.dwProvFlags |= WTD_CACHE_ONLY_URL_RETRIEVAL; + else + trustData.dwProvFlags |= WTD_REVOCATION_CHECK_NONE; + } + + status = WinVerifyTrust_I(NULL, ActionId, &trustData); + PhpGetSignaturesFromStateData(trustData.hWVTStateData, Signatures, NumberOfSignatures); + + // Close the state data. + trustData.dwStateAction = WTD_STATEACTION_CLOSE; + WinVerifyTrust_I(NULL, ActionId, &trustData); + + return PhpStatusToVerifyResult(status); +} + +BOOLEAN PhpCalculateFileHash( + __in HANDLE FileHandle, + __in PWSTR HashAlgorithm, + __out PUCHAR *FileHash, + __out PULONG FileHashLength, + __out HANDLE *CatAdminHandle + ) +{ + HANDLE catAdminHandle; + PUCHAR fileHash; + ULONG fileHashLength; + + if (CryptCATAdminAcquireContext2) + { + if (!CryptCATAdminAcquireContext2(&catAdminHandle, &DriverActionVerify, HashAlgorithm, NULL, 0)) + return FALSE; + } + else + { + if (!CryptCATAdminAcquireContext(&catAdminHandle, &DriverActionVerify, 0)) + return FALSE; + } + + fileHashLength = 32; + fileHash = PhAllocate(fileHashLength); + + if (CryptCATAdminCalcHashFromFileHandle2) + { + if (!CryptCATAdminCalcHashFromFileHandle2(catAdminHandle, FileHandle, &fileHashLength, fileHash, 0)) + { + PhFree(fileHash); + fileHash = PhAllocate(fileHashLength); + + if (!CryptCATAdminCalcHashFromFileHandle2(catAdminHandle, FileHandle, &fileHashLength, fileHash, 0)) + { + CryptCATAdminReleaseContext(catAdminHandle, 0); + PhFree(fileHash); + return FALSE; + } + } + } + else + { + if (!CryptCATAdminCalcHashFromFileHandle(FileHandle, &fileHashLength, fileHash, 0)) + { + PhFree(fileHash); + fileHash = PhAllocate(fileHashLength); + + if (!CryptCATAdminCalcHashFromFileHandle(FileHandle, &fileHashLength, fileHash, 0)) + { + CryptCATAdminReleaseContext(catAdminHandle, 0); + PhFree(fileHash); + return FALSE; + } + } + } + + *FileHash = fileHash; + *FileHashLength = fileHashLength; + *CatAdminHandle = catAdminHandle; + + return TRUE; +} + +VERIFY_RESULT PhpVerifyFileFromCatalog( + __in PPH_VERIFY_FILE_INFO Information, + __in HANDLE FileHandle, + __in_opt PWSTR HashAlgorithm, + __out PCERT_CONTEXT **Signatures, + __out PULONG NumberOfSignatures + ) +{ + VERIFY_RESULT verifyResult = VrNoSignature; + WINTRUST_DATA trustData = { 0 }; + WINTRUST_CATALOG_INFO catalogInfo = { 0 }; + LARGE_INTEGER fileSize; + ULONG fileSizeLimit; + PUCHAR fileHash; + ULONG fileHashLength; + PWSTR fileHashTag; + HANDLE catAdminHandle; + HANDLE catInfoHandle; + ULONG i; + + *Signatures = NULL; + *NumberOfSignatures = 0; + + if (!NT_SUCCESS(PhGetFileSize(FileHandle, &fileSize))) + return VrNoSignature; + + if (Information->FileSizeLimitForHash != -1) + { + fileSizeLimit = PH_VERIFY_DEFAULT_SIZE_LIMIT; + + if (Information->FileSizeLimitForHash != 0) + fileSizeLimit = Information->FileSizeLimitForHash; + + if (fileSize.QuadPart > fileSizeLimit) + return VrNoSignature; + } + + if (PhpCalculateFileHash(FileHandle, HashAlgorithm, &fileHash, &fileHashLength, &catAdminHandle)) + { + fileHashTag = PhAllocate((fileHashLength * 2 + 1) * sizeof(WCHAR)); + + for (i = 0; i < fileHashLength; i++) + { + fileHashTag[i * 2] = PhIntegerToCharUpper[fileHash[i] >> 4]; + fileHashTag[i * 2 + 1] = PhIntegerToCharUpper[fileHash[i] & 0xf]; + } + + fileHashTag[fileHashLength * 2] = 0; + + // Search the system catalogs. + + catInfoHandle = CryptCATAdminEnumCatalogFromHash( + catAdminHandle, + fileHash, + fileHashLength, + 0, + NULL + ); + + if (catInfoHandle) + { + CATALOG_INFO ci = { 0 }; + + if (CryptCATCatalogInfoFromContext(catInfoHandle, &ci, 0)) + { + catalogInfo.cbStruct = sizeof(catalogInfo); + catalogInfo.pcwszCatalogFilePath = ci.wszCatalogFile; + catalogInfo.pcwszMemberFilePath = Information->FileName; + catalogInfo.pcwszMemberTag = fileHashTag; + catalogInfo.hCatAdmin = catAdminHandle; + verifyResult = PhpVerifyFile(Information, FileHandle, WTD_CHOICE_CATALOG, &catalogInfo, &DriverActionVerify, Signatures, NumberOfSignatures); + } + + CryptCATAdminReleaseCatalogContext(catAdminHandle, catInfoHandle, 0); + } + else + { + // Search any user-supplied catalogs. + + for (i = 0; i < Information->NumberOfCatalogFileNames; i++) + { + catalogInfo.cbStruct = sizeof(catalogInfo); + catalogInfo.pcwszCatalogFilePath = Information->CatalogFileNames[i]; + catalogInfo.pcwszMemberFilePath = Information->FileName; + catalogInfo.pcwszMemberTag = fileHashTag; + catalogInfo.hCatAdmin = catAdminHandle; + verifyResult = PhpVerifyFile(Information, FileHandle, WTD_CHOICE_CATALOG, &catalogInfo, &WinTrustActionGenericVerifyV2, Signatures, NumberOfSignatures); + + if (verifyResult == VrTrusted) + break; + } + } + + PhFree(fileHashTag); + } + + PhFree(fileHash); + CryptCATAdminReleaseContext(catAdminHandle, 0); + + return verifyResult; +} + +NTSTATUS PhVerifyFileEx( + __in PPH_VERIFY_FILE_INFO Information, + __out VERIFY_RESULT *VerifyResult, + __out_opt PCERT_CONTEXT **Signatures, + __out_opt PULONG NumberOfSignatures + ) +{ + NTSTATUS status; + HANDLE fileHandle; + VERIFY_RESULT verifyResult; + PCERT_CONTEXT *signatures; + ULONG numberOfSignatures; + WINTRUST_FILE_INFO fileInfo = { 0 }; + + if (PhBeginInitOnce(&PhpVerifyInitOnce)) + { + PhpVerifyInitialization(); + PhEndInitOnce(&PhpVerifyInitOnce); + } + + // Make sure we have successfully imported + // the required functions. + if ( + !CryptCATAdminCalcHashFromFileHandle || + !CryptCATAdminAcquireContext || + !CryptCATAdminEnumCatalogFromHash || + !CryptCATCatalogInfoFromContext || + !CryptCATAdminReleaseCatalogContext || + !CryptCATAdminReleaseContext || + !WinVerifyTrust_I || + !WTHelperProvDataFromStateData_I || + !WTHelperGetProvSignerFromChain_I || + !CertNameToStr_I || + !CertDuplicateCertificateContext_I || + !CertFreeCertificateContext_I + ) + return STATUS_NOT_SUPPORTED; + + if (!NT_SUCCESS(status = PhCreateFileWin32( + &fileHandle, + Information->FileName, + FILE_GENERIC_READ, + 0, + FILE_SHARE_READ | FILE_SHARE_DELETE, + FILE_OPEN, + FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT + ))) + return status; + + fileInfo.cbStruct = sizeof(WINTRUST_FILE_INFO); + fileInfo.pcwszFilePath = Information->FileName; + fileInfo.hFile = fileHandle; + + verifyResult = PhpVerifyFile(Information, fileHandle, WTD_CHOICE_FILE, &fileInfo, &WinTrustActionGenericVerifyV2, &signatures, &numberOfSignatures); + + if (verifyResult == VrNoSignature) + { + if (CryptCATAdminAcquireContext2 && CryptCATAdminCalcHashFromFileHandle2) + { + PhFreeVerifySignatures(signatures, numberOfSignatures); + verifyResult = PhpVerifyFileFromCatalog(Information, fileHandle, BCRYPT_SHA256_ALGORITHM, &signatures, &numberOfSignatures); + } + + if (verifyResult != VrTrusted) + { + PhFreeVerifySignatures(signatures, numberOfSignatures); + verifyResult = PhpVerifyFileFromCatalog(Information, fileHandle, NULL, &signatures, &numberOfSignatures); + } + } + + *VerifyResult = verifyResult; + + if (Signatures) + *Signatures = signatures; + else + PhFreeVerifySignatures(signatures, numberOfSignatures); + + if (NumberOfSignatures) + *NumberOfSignatures = numberOfSignatures; + + NtClose(fileHandle); + + return STATUS_SUCCESS; +} + +VOID PhFreeVerifySignatures( + __in PCERT_CONTEXT *Signatures, + __in ULONG NumberOfSignatures + ) +{ + ULONG i; + + if (Signatures) + { + for (i = 0; i < NumberOfSignatures; i++) + CertFreeCertificateContext_I(Signatures[i]); + + PhFree(Signatures); + } +} + PPH_STRING PhpGetCertNameString( __in PCERT_NAME_BLOB Blob ) @@ -172,60 +550,27 @@ PPH_STRING PhpGetX500Value( return PhSubstring(String, startIndex, endIndex - startIndex); } -PPH_STRING PhpGetSignerNameFromStateData( - __in HANDLE StateData +PPH_STRING PhGetSignerNameFromCertificate( + __in PCERT_CONTEXT Certificate ) { - PCRYPT_PROVIDER_DATA provData; - PCRYPT_PROVIDER_SGNR sgnr; - PCRYPT_PROVIDER_CERT cert; - PCCERT_CONTEXT certContext; PCERT_INFO certInfo; PH_STRINGREF keyName; PPH_STRING name; PPH_STRING value; - // 1. State data -> provider data. - - provData = WTHelperProvDataFromStateData_I(StateData); - - if (!provData) - return NULL; + // Cert context -> Cert info - // 2. Provider data -> Provider signer - - sgnr = WTHelperGetProvSignerFromChain_I(provData, 0, FALSE, 0); - - if (!sgnr) - return NULL; - if (!sgnr->pasCertChain) - return NULL; - if (sgnr->csCertChain == 0) - return NULL; - - // 3. Provider signer -> Provider cert - - cert = &sgnr->pasCertChain[0]; - - // 4. Provider cert -> Cert context - - certContext = cert->pCert; - - if (!certContext) - return NULL; - - // 5. Cert context -> Cert info - - certInfo = certContext->pCertInfo; + certInfo = Certificate->pCertInfo; if (!certInfo) return NULL; - // 6. Cert info subject -> Subject X.500 string + // Cert info subject -> Subject X.500 string name = PhpGetCertNameString(&certInfo->Subject); - // 7. Subject X.500 string -> CN or OU value + // Subject X.500 string -> CN or OU value PhInitializeStringRef(&keyName, L"CN"); value = PhpGetX500Value(name, &keyName); @@ -241,209 +586,6 @@ PPH_STRING PhpGetSignerNameFromStateData( return value; } -VERIFY_RESULT PhpVerifyFileBasic( - __in PWSTR FileName, - __out_opt PPH_STRING *SignerName - ) -{ - LONG status; - WINTRUST_DATA trustData = { 0 }; - WINTRUST_FILE_INFO fileInfo = { 0 }; - GUID actionGenericVerifyV2 = WINTRUST_ACTION_GENERIC_VERIFY_V2; - - fileInfo.cbStruct = sizeof(WINTRUST_FILE_INFO); - fileInfo.pcwszFilePath = FileName; - - trustData.cbStruct = sizeof(WINTRUST_DATA); - trustData.dwUIChoice = WTD_UI_NONE; - trustData.dwProvFlags = WTD_SAFER_FLAG; - trustData.dwUnionChoice = WTD_CHOICE_FILE; - trustData.dwStateAction = WTD_STATEACTION_VERIFY; - trustData.pFile = &fileInfo; - - if (WindowsVersion >= WINDOWS_VISTA) - trustData.dwProvFlags |= WTD_CACHE_ONLY_URL_RETRIEVAL; - else - trustData.dwProvFlags |= WTD_REVOCATION_CHECK_NONE; - - status = WinVerifyTrust_I(NULL, &actionGenericVerifyV2, &trustData); - - if (SignerName) - { - if (status != TRUST_E_NOSIGNATURE) - *SignerName = PhpGetSignerNameFromStateData(trustData.hWVTStateData); - else - *SignerName = NULL; - } - - // Close the state data. - trustData.dwStateAction = WTD_STATEACTION_CLOSE; - WinVerifyTrust_I(NULL, &actionGenericVerifyV2, &trustData); - - return PhpStatusToVerifyResult(status); -} - -VERIFY_RESULT PhpVerifyFileFromCatalog( - __in PWSTR FileName, - __in_opt PWSTR HashAlgorithm, - __out_opt PPH_STRING *SignerName - ) -{ - LONG status = TRUST_E_NOSIGNATURE; - WINTRUST_DATA trustData = { 0 }; - WINTRUST_CATALOG_INFO catalogInfo = { 0 }; - GUID driverActionVerify = DRIVER_ACTION_VERIFY; - HANDLE fileHandle; - LARGE_INTEGER fileSize; - PUCHAR fileHash = NULL; - ULONG fileHashLength; - PWSTR fileHashTag = NULL; - HANDLE catAdminHandle = NULL; - HANDLE catInfoHandle = NULL; - ULONG i; - - if (!NT_SUCCESS(PhCreateFileWin32( - &fileHandle, - FileName, - FILE_GENERIC_READ, - 0, - FILE_SHARE_READ | FILE_SHARE_DELETE, - FILE_OPEN, - FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT - ))) - return VrNoSignature; - - // Don't try to hash files over 32 MB in size. - if (!NT_SUCCESS(PhGetFileSize(fileHandle, &fileSize)) || - (fileSize.QuadPart > 32 * 1024 * 1024)) - { - NtClose(fileHandle); - return VrNoSignature; - } - - if (CryptCATAdminAcquireContext2) - { - if (!CryptCATAdminAcquireContext2(&catAdminHandle, &driverActionVerify, HashAlgorithm, NULL, 0)) - { - NtClose(fileHandle); - return VrNoSignature; - } - } - else - { - if (!CryptCATAdminAcquireContext(&catAdminHandle, &driverActionVerify, 0)) - { - NtClose(fileHandle); - return VrNoSignature; - } - } - - fileHashLength = 16; - fileHash = PhAllocate(fileHashLength); - - if (CryptCATAdminCalcHashFromFileHandle2) - { - if (!CryptCATAdminCalcHashFromFileHandle2(catAdminHandle, fileHandle, &fileHashLength, fileHash, 0)) - { - PhFree(fileHash); - fileHash = PhAllocate(fileHashLength); - - if (!CryptCATAdminCalcHashFromFileHandle2(catAdminHandle, fileHandle, &fileHashLength, fileHash, 0)) - { - CryptCATAdminReleaseContext(catAdminHandle, 0); - NtClose(fileHandle); - PhFree(fileHash); - return VrNoSignature; - } - } - } - else - { - if (!CryptCATAdminCalcHashFromFileHandle(fileHandle, &fileHashLength, fileHash, 0)) - { - PhFree(fileHash); - fileHash = PhAllocate(fileHashLength); - - if (!CryptCATAdminCalcHashFromFileHandle(fileHandle, &fileHashLength, fileHash, 0)) - { - CryptCATAdminReleaseContext(catAdminHandle, 0); - NtClose(fileHandle); - PhFree(fileHash); - return VrNoSignature; - } - } - } - - NtClose(fileHandle); - - fileHashTag = PhAllocate((fileHashLength * 2 + 1) * sizeof(WCHAR)); - - for (i = 0; i < fileHashLength; i++) - { - fileHashTag[i * 2] = PhIntegerToCharUpper[fileHash[i] >> 4]; - fileHashTag[i * 2 + 1] = PhIntegerToCharUpper[fileHash[i] & 0xf]; - } - - fileHashTag[fileHashLength * 2] = 0; - - catInfoHandle = CryptCATAdminEnumCatalogFromHash( - catAdminHandle, - fileHash, - fileHashLength, - 0, - NULL - ); - - PhFree(fileHash); - - if (catInfoHandle) - { - CATALOG_INFO ci = { 0 }; - - if (CryptCATCatalogInfoFromContext(catInfoHandle, &ci, 0)) - { - catalogInfo.cbStruct = sizeof(catalogInfo); - catalogInfo.pcwszCatalogFilePath = ci.wszCatalogFile; - catalogInfo.pcwszMemberFilePath = FileName; - catalogInfo.pcwszMemberTag = fileHashTag; - catalogInfo.hCatAdmin = catAdminHandle; - - trustData.cbStruct = sizeof(trustData); - trustData.dwUIChoice = WTD_UI_NONE; - trustData.fdwRevocationChecks = WTD_STATEACTION_VERIFY; - trustData.dwUnionChoice = WTD_CHOICE_CATALOG; - trustData.dwStateAction = WTD_STATEACTION_VERIFY; - trustData.pCatalog = &catalogInfo; - - if (WindowsVersion >= WINDOWS_VISTA) - trustData.dwProvFlags |= WTD_CACHE_ONLY_URL_RETRIEVAL; - else - trustData.dwProvFlags |= WTD_REVOCATION_CHECK_NONE; - - status = WinVerifyTrust_I(NULL, &driverActionVerify, &trustData); - - if (SignerName) - { - if (status != TRUST_E_NOSIGNATURE) - *SignerName = PhpGetSignerNameFromStateData(trustData.hWVTStateData); - else - *SignerName = NULL; - } - - // Close the state data. - trustData.dwStateAction = WTD_STATEACTION_CLOSE; - WinVerifyTrust_I(NULL, &driverActionVerify, &trustData); - } - - CryptCATAdminReleaseCatalogContext(catAdminHandle, catInfoHandle, 0); - } - - PhFree(fileHashTag); - CryptCATAdminReleaseContext(catAdminHandle, 0); - - return PhpStatusToVerifyResult(status); -} - /** * Verifies a file's digital signature. * @@ -461,39 +603,32 @@ VERIFY_RESULT PhVerifyFile( __out_opt PPH_STRING *SignerName ) { - VERIFY_RESULT result; + PH_VERIFY_FILE_INFO info = { 0 }; + VERIFY_RESULT verifyResult; + PCERT_CONTEXT *signatures; + ULONG numberOfSignatures; - if (PhBeginInitOnce(&PhpVerifyInitOnce)) - { - PhpVerifyInitialization(); - PhEndInitOnce(&PhpVerifyInitOnce); - } + info.FileName = FileName; + info.Flags = PH_VERIFY_PREVENT_NETWORK_ACCESS; - // Make sure we have successfully imported - // the required functions. - if ( - !CryptCATAdminCalcHashFromFileHandle || - !CryptCATAdminAcquireContext || - !CryptCATAdminEnumCatalogFromHash || - !CryptCATCatalogInfoFromContext || - !CryptCATAdminReleaseCatalogContext || - !CryptCATAdminReleaseContext || - !WinVerifyTrust_I || - !WTHelperProvDataFromStateData_I || - !WTHelperGetProvSignerFromChain_I || - !CertNameToStr_I - ) - return VrUnknown; + if (NT_SUCCESS(PhVerifyFileEx(&info, &verifyResult, &signatures, &numberOfSignatures))) + { + if (SignerName) + { + *SignerName = NULL; - result = PhpVerifyFileBasic(FileName, SignerName); + if (numberOfSignatures != 0) + *SignerName = PhGetSignerNameFromCertificate(signatures[0]); + } - if (result == VrNoSignature) + PhFreeVerifySignatures(signatures, numberOfSignatures); + return verifyResult; + } + else { - result = PhpVerifyFileFromCatalog(FileName, L"SHA256", SignerName); // for Windows 8 + if (SignerName) + *SignerName = NULL; - if (result != VrTrusted) - result = PhpVerifyFileFromCatalog(FileName, NULL, SignerName); + return VrNoSignature; } - - return result; } From 3ea2c69022d5c6d069a3fa6db57aec0082c999f6 Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 3 Nov 2013 09:42:09 +0000 Subject: [PATCH 066/161] view digital signature information from process properties git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5533 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/ProcessHacker.rc | 1 + 2.x/trunk/ProcessHacker/include/providers.h | 8 ++++ 2.x/trunk/ProcessHacker/procprp.c | 49 ++++++++++++++++++++- 2.x/trunk/ProcessHacker/procprv.c | 29 +++++++----- 2.x/trunk/ProcessHacker/resource.h | 1 + 2.x/trunk/phlib/include/verify.h | 3 ++ 2.x/trunk/phlib/include/verifyp.h | 19 ++++++++ 2.x/trunk/phlib/verify.c | 38 ++++++++++++++++ 9 files changed, 135 insertions(+), 14 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 7cf00ec9b..971f0213d 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -2,6 +2,7 @@ Process Hacker 2.33 * NEW/IMPROVED: + * View digital signature information from process properties * Signatures for Windows 8 apps are now detected * Updated DotNetTools plugin: * Improved .NET assembly enumeration timeout handling diff --git a/2.x/trunk/ProcessHacker/ProcessHacker.rc b/2.x/trunk/ProcessHacker/ProcessHacker.rc index 42b2b72f0..07b8bf0a9 100644 --- a/2.x/trunk/ProcessHacker/ProcessHacker.rc +++ b/2.x/trunk/ProcessHacker/ProcessHacker.rc @@ -498,6 +498,7 @@ BEGIN LTEXT "Yes?",IDC_PROTECTION,55,200,24,8 LTEXT "ASLR:",IDC_ASLRLABEL,91,200,20,8 EDITTEXT IDC_ASLR,116,199,131,12,ES_AUTOHSCROLL | ES_READONLY + CONTROL "Company Name Link",IDC_COMPANYNAME_LINK,"SysLink",NOT WS_VISIBLE | WS_TABSTOP,17,234,72,11 END IDD_PROCMODULES DIALOGEX 0, 0, 260, 260 diff --git a/2.x/trunk/ProcessHacker/include/providers.h b/2.x/trunk/ProcessHacker/include/providers.h index 16dd2b68c..8774bfb91 100644 --- a/2.x/trunk/ProcessHacker/include/providers.h +++ b/2.x/trunk/ProcessHacker/include/providers.h @@ -283,6 +283,14 @@ VOID PhEnumProcessItems( __out PULONG NumberOfProcessItems ); +typedef struct _PH_VERIFY_FILE_INFO *PPH_VERIFY_FILE_INFO; + +VERIFY_RESULT PhVerifyFileWithAdditionalCatalog( + __in PPH_VERIFY_FILE_INFO Information, + __in_opt PWSTR PackageFullName, + __out_opt PPH_STRING *SignerName + ); + VERIFY_RESULT PhVerifyFileCached( __in PPH_STRING FileName, __in_opt PWSTR PackageFullName, diff --git a/2.x/trunk/ProcessHacker/procprp.c b/2.x/trunk/ProcessHacker/procprp.c index 929168a2d..76a2d96c9 100644 --- a/2.x/trunk/ProcessHacker/procprp.c +++ b/2.x/trunk/ProcessHacker/procprp.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #define SET_BUTTON_BITMAP(Id, Bitmap) \ @@ -744,8 +745,18 @@ INT_PTR CALLBACK PhpProcessGeneralDlgProc( { if (processItem->VerifySignerName) { - SetDlgItemText(hwndDlg, IDC_COMPANYNAME, - PhaConcatStrings2(L"(Verified) ", processItem->VerifySignerName->Buffer)->Buffer); + RECT windowRect; + + SetDlgItemText(hwndDlg, IDC_COMPANYNAME_LINK, + PhaFormatString(L"(Verified) %s", processItem->VerifySignerName->Buffer)->Buffer); + + GetWindowRect(GetDlgItem(hwndDlg, IDC_COMPANYNAME), &windowRect); + MapWindowPoints(NULL, hwndDlg, (POINT *)&windowRect, 2); + MoveWindow(GetDlgItem(hwndDlg, IDC_COMPANYNAME_LINK), windowRect.left + 2, windowRect.top, + windowRect.right - windowRect.left - 2, windowRect.bottom - windowRect.top, FALSE); + + ShowWindow(GetDlgItem(hwndDlg, IDC_COMPANYNAME), SW_HIDE); + ShowWindow(GetDlgItem(hwndDlg, IDC_COMPANYNAME_LINK), SW_SHOW); } else { @@ -1122,6 +1133,40 @@ INT_PTR CALLBACK PhpProcessGeneralDlgProc( } } break; + case WM_NOTIFY: + { + LPNMHDR header = (LPNMHDR)lParam; + + switch (header->code) + { + case NM_CLICK: + { + switch (header->idFrom) + { + case IDC_COMPANYNAME_LINK: + { + if (processItem->FileName) + { + PH_VERIFY_FILE_INFO info; + + memset(&info, 0, sizeof(PH_VERIFY_FILE_INFO)); + info.FileName = processItem->FileName->Buffer; + info.Flags = PH_VERIFY_VIEW_PROPERTIES; + info.hWnd = hwndDlg; + PhVerifyFileWithAdditionalCatalog( + &info, + PhGetString(processItem->PackageFullName), + NULL + ); + } + } + break; + } + } + break; + } + } + break; } return FALSE; diff --git a/2.x/trunk/ProcessHacker/procprv.c b/2.x/trunk/ProcessHacker/procprv.c index cfe87a538..0b6237716 100644 --- a/2.x/trunk/ProcessHacker/procprv.c +++ b/2.x/trunk/ProcessHacker/procprv.c @@ -664,8 +664,8 @@ INT NTAPI PhpVerifyCacheCompareFunction( return PhCompareString(entry1->FileName, entry2->FileName, TRUE); } -VERIFY_RESULT PhpVerifyFileWithAdditionalCatalog( - __in PWSTR FileName, +VERIFY_RESULT PhVerifyFileWithAdditionalCatalog( + __in PPH_VERIFY_FILE_INFO Information, __in_opt PWSTR PackageFullName, __out_opt PPH_STRING *SignerName ) @@ -673,15 +673,10 @@ VERIFY_RESULT PhpVerifyFileWithAdditionalCatalog( static PH_STRINGREF codeIntegrityFileName = PH_STRINGREF_INIT(L"\\AppxMetadata\\CodeIntegrity.cat"); VERIFY_RESULT result; - PH_VERIFY_FILE_INFO info; PPH_STRING additionalCatalogFileName = NULL; PCERT_CONTEXT *signatures; ULONG numberOfSignatures; - memset(&info, 0, sizeof(PH_VERIFY_FILE_INFO)); - info.FileName = FileName; - info.Flags = PH_VERIFY_PREVENT_NETWORK_ACCESS; - if (PackageFullName) { PACKAGE_ID *packageId; @@ -701,11 +696,11 @@ VERIFY_RESULT PhpVerifyFileWithAdditionalCatalog( if (additionalCatalogFileName) { - info.NumberOfCatalogFileNames = 1; - info.CatalogFileNames = &additionalCatalogFileName->Buffer; + Information->NumberOfCatalogFileNames = 1; + Information->CatalogFileNames = &additionalCatalogFileName->Buffer; } - if (!NT_SUCCESS(PhVerifyFileEx(&info, &result, &signatures, &numberOfSignatures))) + if (!NT_SUCCESS(PhVerifyFileEx(Information, &result, &signatures, &numberOfSignatures))) { result = VrNoSignature; signatures = NULL; @@ -781,7 +776,12 @@ VERIFY_RESULT PhVerifyFileCached( if (!CachedOnly) { - result = PhpVerifyFileWithAdditionalCatalog(FileName->Buffer, PackageFullName, &signerName); + PH_VERIFY_FILE_INFO info; + + memset(&info, 0, sizeof(PH_VERIFY_FILE_INFO)); + info.FileName = FileName->Buffer; + info.Flags = PH_VERIFY_PREVENT_NETWORK_ACCESS; + result = PhVerifyFileWithAdditionalCatalog(&info, PackageFullName, &signerName); } else { @@ -829,7 +829,12 @@ VERIFY_RESULT PhVerifyFileCached( return result; } #else - return PhpVerifyFileWithAdditionalCatalog(FileName->Buffer, PackageFullName, SignerName); + PH_VERIFY_FILE_INFO info; + + memset(&info, 0, sizeof(PH_VERIFY_FILE_INFO)); + info.FileName = FileName->Buffer; + info.Flags = PH_VERIFY_PREVENT_NETWORK_ACCESS; + return PhVerifyFileWithAdditionalCatalog(&info, PackageFullName, SignerName); #endif } diff --git a/2.x/trunk/ProcessHacker/resource.h b/2.x/trunk/ProcessHacker/resource.h index f3f902af3..ee22ee645 100644 --- a/2.x/trunk/ProcessHacker/resource.h +++ b/2.x/trunk/ProcessHacker/resource.h @@ -423,6 +423,7 @@ #define IDC_CUSTOM1 1276 #define IDC_SYSLINK1 1279 #define IDC_OPENURL 1279 +#define IDC_COMPANYNAME_LINK 1279 #define IDC_SAMPLECOUNT 1280 #define IDC_SAMPLECOUNT_L 1281 #define IDC_SAMPLECOUNTLABEL 1281 diff --git a/2.x/trunk/phlib/include/verify.h b/2.x/trunk/phlib/include/verify.h index bb12c2551..99961d1bc 100644 --- a/2.x/trunk/phlib/include/verify.h +++ b/2.x/trunk/phlib/include/verify.h @@ -7,6 +7,7 @@ #define PH_VERIFY_DEFAULT_SIZE_LIMIT (32 * 1024 * 1024) #define PH_VERIFY_PREVENT_NETWORK_ACCESS 0x1 +#define PH_VERIFY_VIEW_PROPERTIES 0x2 typedef struct _PH_VERIFY_FILE_INFO { @@ -16,6 +17,8 @@ typedef struct _PH_VERIFY_FILE_INFO ULONG FileSizeLimitForHash; // 0 for PH_VERIFY_DEFAULT_SIZE_LIMIT, -1 for unlimited ULONG NumberOfCatalogFileNames; PWSTR *CatalogFileNames; + + HWND hWnd; // for PH_VERIFY_VIEW_PROPERTIES } PH_VERIFY_FILE_INFO, *PPH_VERIFY_FILE_INFO; NTSTATUS PhVerifyFileEx( diff --git a/2.x/trunk/phlib/include/verifyp.h b/2.x/trunk/phlib/include/verifyp.h index 6021016ac..d8607f0c2 100644 --- a/2.x/trunk/phlib/include/verifyp.h +++ b/2.x/trunk/phlib/include/verifyp.h @@ -7,6 +7,21 @@ typedef struct _CATALOG_INFO WCHAR wszCatalogFile[MAX_PATH]; } CATALOG_INFO, *PCATALOG_INFO; +typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCT { + DWORD dwSize; + HWND hwndParent; + DWORD dwFlags; + LPCTSTR szTitle; + CMSG_SIGNER_INFO *pSignerInfo; + HCRYPTMSG hMsg; + LPCSTR pszOID; + DWORD_PTR dwReserved; + DWORD cStores; + HCERTSTORE *rghStores; + DWORD cPropSheetPages; + LPCPROPSHEETPAGE rgPropSheetPages; +} CRYPTUI_VIEWSIGNERINFO_STRUCT, *PCRYPTUI_VIEWSIGNERINFO_STRUCT; + typedef BOOL (WINAPI *_CryptCATAdminCalcHashFromFileHandle)( HANDLE hFile, DWORD *pcbHash, @@ -94,4 +109,8 @@ typedef BOOL (WINAPI *_CertFreeCertificateContext)( __in PCCERT_CONTEXT pCertContext ); +typedef BOOL (WINAPI *_CryptUIDlgViewSignerInfo)( + __in CRYPTUI_VIEWSIGNERINFO_STRUCT *pcvsi + ); + #endif diff --git a/2.x/trunk/phlib/verify.c b/2.x/trunk/phlib/verify.c index cae8f24e4..f284e96d0 100644 --- a/2.x/trunk/phlib/verify.c +++ b/2.x/trunk/phlib/verify.c @@ -152,6 +152,41 @@ BOOLEAN PhpGetSignaturesFromStateData( return TRUE; } +VOID PhpViewSignerInfo( + __in PPH_VERIFY_FILE_INFO Information, + __in HANDLE StateData + ) +{ + static PH_INITONCE initOnce = PH_INITONCE_INIT; + static _CryptUIDlgViewSignerInfo cryptUIDlgViewSignerInfo; + + if (PhBeginInitOnce(&initOnce)) + { + HMODULE cryptui = LoadLibrary(L"cryptui.dll"); + + cryptUIDlgViewSignerInfo = (PVOID)GetProcAddress(cryptui, "CryptUIDlgViewSignerInfoW"); + PhEndInitOnce(&initOnce); + } + + if (cryptUIDlgViewSignerInfo) + { + CRYPTUI_VIEWSIGNERINFO_STRUCT viewSignerInfo = { sizeof(CRYPTUI_VIEWSIGNERINFO_STRUCT) }; + PCRYPT_PROVIDER_DATA provData; + PCRYPT_PROVIDER_SGNR sgnr; + + if (!(provData = WTHelperProvDataFromStateData_I(StateData))) + return; + if (!(sgnr = WTHelperGetProvSignerFromChain_I(provData, 0, FALSE, 0))) + return; + + viewSignerInfo.hwndParent = Information->hWnd; + viewSignerInfo.pSignerInfo = sgnr->psSigner; + viewSignerInfo.hMsg = provData->hMsg; + viewSignerInfo.pszOID = szOID_PKIX_KP_CODE_SIGNING; + cryptUIDlgViewSignerInfo(&viewSignerInfo); + } +} + VERIFY_RESULT PhpVerifyFile( __in PPH_VERIFY_FILE_INFO Information, __in HANDLE FileHandle, @@ -190,6 +225,9 @@ VERIFY_RESULT PhpVerifyFile( status = WinVerifyTrust_I(NULL, ActionId, &trustData); PhpGetSignaturesFromStateData(trustData.hWVTStateData, Signatures, NumberOfSignatures); + if (status == 0 && (Information->Flags & PH_VERIFY_VIEW_PROPERTIES)) + PhpViewSignerInfo(Information, trustData.hWVTStateData); + // Close the state data. trustData.dwStateAction = WTD_STATEACTION_CLOSE; WinVerifyTrust_I(NULL, ActionId, &trustData); From 9344c4e5d33ed0da9eea279f72968aa6086ebb2a Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 3 Nov 2013 09:56:08 +0000 Subject: [PATCH 067/161] fixed wrong dbghelp instance being used git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5534 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/ProcessHacker/mainwnd.c | 1 + 2.x/trunk/phlib/include/symprv.h | 1 + 2.x/trunk/phlib/symprv.c | 7 ++++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/2.x/trunk/ProcessHacker/mainwnd.c b/2.x/trunk/ProcessHacker/mainwnd.c index f0dfc7fde..f0486ad3b 100644 --- a/2.x/trunk/ProcessHacker/mainwnd.c +++ b/2.x/trunk/ProcessHacker/mainwnd.c @@ -2571,6 +2571,7 @@ VOID PhMwpSymInitHandler( PH_STRINGREF dbghelpFolder; PPH_STRING symsrvPath; + PhSymPreferredDbgHelpBase = dbghelpModule; fullDbghelpPath = PhGetDllFileName(dbghelpModule, &indexOfFileName); if (fullDbghelpPath) diff --git a/2.x/trunk/phlib/include/symprv.h b/2.x/trunk/phlib/include/symprv.h index bc93f3ac3..8d2c72508 100644 --- a/2.x/trunk/phlib/include/symprv.h +++ b/2.x/trunk/phlib/include/symprv.h @@ -204,6 +204,7 @@ PhWriteMiniDumpProcess( #ifndef _PH_SYMPRV_PRIVATE extern PH_CALLBACK PhSymInitCallback; +extern PVOID PhSymPreferredDbgHelpBase; #endif #endif diff --git a/2.x/trunk/phlib/symprv.c b/2.x/trunk/phlib/symprv.c index cef7cccef..ec945194d 100644 --- a/2.x/trunk/phlib/symprv.c +++ b/2.x/trunk/phlib/symprv.c @@ -55,6 +55,7 @@ PPH_OBJECT_TYPE PhSymbolProviderType; static PH_INITONCE PhSymInitOnce = PH_INITONCE_INIT; DECLSPEC_SELECTANY PH_CALLBACK_DECLARE(PhSymInitCallback); +PVOID PhSymPreferredDbgHelpBase; static HANDLE PhNextFakeHandle = (HANDLE)0; static PH_FAST_LOCK PhSymMutex = PH_FAST_LOCK_INIT; @@ -116,7 +117,11 @@ VOID PhSymbolProviderDynamicImport( HMODULE dbghelpHandle; HMODULE symsrvHandle; - dbghelpHandle = GetModuleHandle(L"dbghelp.dll"); + if (PhSymPreferredDbgHelpBase) + dbghelpHandle = PhSymPreferredDbgHelpBase; + else + dbghelpHandle = GetModuleHandle(L"dbghelp.dll"); + symsrvHandle = GetModuleHandle(L"symsrv.dll"); SymInitialize_I = (PVOID)GetProcAddress(dbghelpHandle, "SymInitialize"); From cabef2d619247288cec814aac95c32780511067f Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 3 Nov 2013 10:44:25 +0000 Subject: [PATCH 068/161] added DPI Awareness column git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5535 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/include/uimodels.h | 6 +- 2.x/trunk/ProcessHacker/proctree.c | 65 +++++++++++++++++++++- 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 971f0213d..31513c95f 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -4,6 +4,7 @@ Process Hacker * NEW/IMPROVED: * View digital signature information from process properties * Signatures for Windows 8 apps are now detected + * Added DPI Awareness column * Updated DotNetTools plugin: * Improved .NET assembly enumeration timeout handling * FIXED: diff --git a/2.x/trunk/ProcessHacker/include/uimodels.h b/2.x/trunk/ProcessHacker/include/uimodels.h index bc88cc8b4..a314c598b 100644 --- a/2.x/trunk/ProcessHacker/include/uimodels.h +++ b/2.x/trunk/ProcessHacker/include/uimodels.h @@ -188,8 +188,9 @@ FORCEINLINE VOID PhChangeShStateTn( #define PHPRTLC_SUBSYSTEM 71 #define PHPRTLC_PACKAGENAME 72 #define PHPRTLC_APPID 73 +#define PHPRTLC_DPIAWARENESS 74 -#define PHPRTLC_MAXIMUM 74 +#define PHPRTLC_MAXIMUM 75 #define PHPRTLC_IOGROUP_COUNT 9 #define PHPN_WSCOUNTERS 0x1 @@ -202,6 +203,7 @@ FORCEINLINE VOID PhChangeShStateTn( #define PHPN_QUOTALIMITS 0x80 #define PHPN_IMAGE 0x100 #define PHPN_APPID 0x200 +#define PHPN_DPIAWARENESS 0x400 typedef struct _PH_PROCESS_NODE { @@ -257,6 +259,8 @@ typedef struct _PH_PROCESS_NODE PPH_STRING AppIdText; // Cycles (Vista only) PH_UINT64_DELTA CyclesDelta; + // DPI Awareness + ULONG DpiAwareness; PPH_STRING TooltipText; diff --git a/2.x/trunk/ProcessHacker/proctree.c b/2.x/trunk/ProcessHacker/proctree.c index 3b81822ff..81f210675 100644 --- a/2.x/trunk/ProcessHacker/proctree.c +++ b/2.x/trunk/ProcessHacker/proctree.c @@ -195,6 +195,7 @@ VOID PhInitializeProcessTreeList( PhAddTreeNewColumn(hwnd, PHPRTLC_SUBSYSTEM, FALSE, L"Subsystem", 110, PH_ALIGN_LEFT, -1, 0); PhAddTreeNewColumn(hwnd, PHPRTLC_PACKAGENAME, FALSE, L"Package Name", 160, PH_ALIGN_LEFT, -1, 0); PhAddTreeNewColumn(hwnd, PHPRTLC_APPID, FALSE, L"App ID", 160, PH_ALIGN_LEFT, -1, 0); + PhAddTreeNewColumn(hwnd, PHPRTLC_DPIAWARENESS, FALSE, L"DPI Awareness", 110, PH_ALIGN_LEFT, -1, 0); TreeNew_SetRedraw(hwnd, TRUE); @@ -596,7 +597,7 @@ VOID PhTickProcessNodes( // The name and PID never change, so we don't invalidate that. memset(&node->TextCache[2], 0, sizeof(PH_STRINGREF) * (PHPRTLC_MAXIMUM - 2)); - node->ValidMask &= PHPN_OSCONTEXT | PHPN_IMAGE; // OS Context always remains valid + node->ValidMask &= PHPN_OSCONTEXT | PHPN_IMAGE | PHPN_DPIAWARENESS; // Items that always remain valid // Invalidate graph buffers. node->CpuGraphBuffers.Valid = FALSE; @@ -1074,6 +1075,39 @@ static VOID PhpUpdateProcessNodeAppId( } } +static VOID PhpUpdateProcessNodeDpiAwareness( + __inout PPH_PROCESS_NODE ProcessNode + ) +{ + static PH_INITONCE initOnce = PH_INITONCE_INIT; + static BOOL (WINAPI *getProcessDpiAwarenessInternal)( + __in HANDLE hprocess, + __out ULONG *value + ); + + if (PhBeginInitOnce(&initOnce)) + { + getProcessDpiAwarenessInternal = PhGetProcAddress(L"user32.dll", "GetProcessDpiAwarenessInternal"); + PhEndInitOnce(&initOnce); + } + + if (!getProcessDpiAwarenessInternal) + return; + + if (!(ProcessNode->ValidMask & PHPN_DPIAWARENESS)) + { + if (ProcessNode->ProcessItem->QueryHandle) + { + ULONG dpiAwareness; + + if (getProcessDpiAwarenessInternal(ProcessNode->ProcessItem->QueryHandle, &dpiAwareness)) + ProcessNode->DpiAwareness = dpiAwareness + 1; + } + + ProcessNode->ValidMask |= PHPN_DPIAWARENESS; + } +} + static VOID PhpUpdateNeedCyclesInformation( VOID ) @@ -1740,6 +1774,14 @@ BEGIN_SORT_FUNCTION(AppId) } END_SORT_FUNCTION +BEGIN_SORT_FUNCTION(DpiAwareness) +{ + PhpUpdateProcessNodeDpiAwareness(node1); + PhpUpdateProcessNodeDpiAwareness(node2); + sortResult = uintcmp(node1->DpiAwareness, node2->DpiAwareness); +} +END_SORT_FUNCTION + BOOLEAN NTAPI PhpProcessTreeNewCallback( __in HWND hwnd, __in PH_TREENEW_MESSAGE Message, @@ -1853,7 +1895,8 @@ BOOLEAN NTAPI PhpProcessTreeNewCallback( SORT_FUNCTION(PrivateBytesDelta), SORT_FUNCTION(Subsystem), SORT_FUNCTION(PackageName), - SORT_FUNCTION(AppId) + SORT_FUNCTION(AppId), + SORT_FUNCTION(DpiAwareness) }; static PH_INITONCE initOnce = PH_INITONCE_INIT; int (__cdecl *sortFunction)(const void *, const void *); @@ -2520,6 +2563,24 @@ BOOLEAN NTAPI PhpProcessTreeNewCallback( PhpUpdateProcessNodeAppId(node); getCellText->Text = PhGetStringRef(node->AppIdText); break; + case PHPRTLC_DPIAWARENESS: + PhpUpdateProcessNodeDpiAwareness(node); + + switch (node->DpiAwareness) + { + case 0: + break; + case 1: + PhInitializeStringRef(&getCellText->Text, L"Unaware"); + break; + case 2: + PhInitializeStringRef(&getCellText->Text, L"System Aware"); + break; + case 3: + PhInitializeStringRef(&getCellText->Text, L"Per-Monitor Aware"); + break; + } + break; default: return FALSE; } From 35640b76862a13187a7b702f04397605d8e249ae Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 3 Nov 2013 11:02:31 +0000 Subject: [PATCH 069/161] fixed memory bug git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5536 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/phlib/verify.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/2.x/trunk/phlib/verify.c b/2.x/trunk/phlib/verify.c index f284e96d0..a8b0c23dd 100644 --- a/2.x/trunk/phlib/verify.c +++ b/2.x/trunk/phlib/verify.c @@ -393,11 +393,10 @@ VERIFY_RESULT PhpVerifyFileFromCatalog( } PhFree(fileHashTag); + PhFree(fileHash); + CryptCATAdminReleaseContext(catAdminHandle, 0); } - PhFree(fileHash); - CryptCATAdminReleaseContext(catAdminHandle, 0); - return verifyResult; } From 13ec21e7d9689014ab5ebca8a1959b59c78f0f93 Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 3 Nov 2013 11:44:33 +0000 Subject: [PATCH 070/161] fixed memory leak git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5537 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/ProcessHacker/procprv.c | 2 ++ 2.x/trunk/phlib/verify.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/2.x/trunk/ProcessHacker/procprv.c b/2.x/trunk/ProcessHacker/procprv.c index 0b6237716..5ee96bd4e 100644 --- a/2.x/trunk/ProcessHacker/procprv.c +++ b/2.x/trunk/ProcessHacker/procprv.c @@ -718,6 +718,8 @@ VERIFY_RESULT PhVerifyFileWithAdditionalCatalog( *SignerName = NULL; } + PhFreeVerifySignatures(signatures, numberOfSignatures); + return result; } diff --git a/2.x/trunk/phlib/verify.c b/2.x/trunk/phlib/verify.c index a8b0c23dd..522fd0785 100644 --- a/2.x/trunk/phlib/verify.c +++ b/2.x/trunk/phlib/verify.c @@ -308,6 +308,8 @@ VERIFY_RESULT PhpVerifyFileFromCatalog( ) { VERIFY_RESULT verifyResult = VrNoSignature; + PCERT_CONTEXT *signatures; + ULONG numberOfSignatures; WINTRUST_DATA trustData = { 0 }; WINTRUST_CATALOG_INFO catalogInfo = { 0 }; LARGE_INTEGER fileSize; @@ -325,6 +327,9 @@ VERIFY_RESULT PhpVerifyFileFromCatalog( if (!NT_SUCCESS(PhGetFileSize(FileHandle, &fileSize))) return VrNoSignature; + signatures = NULL; + numberOfSignatures = 0; + if (Information->FileSizeLimitForHash != -1) { fileSizeLimit = PH_VERIFY_DEFAULT_SIZE_LIMIT; @@ -369,7 +374,7 @@ VERIFY_RESULT PhpVerifyFileFromCatalog( catalogInfo.pcwszMemberFilePath = Information->FileName; catalogInfo.pcwszMemberTag = fileHashTag; catalogInfo.hCatAdmin = catAdminHandle; - verifyResult = PhpVerifyFile(Information, FileHandle, WTD_CHOICE_CATALOG, &catalogInfo, &DriverActionVerify, Signatures, NumberOfSignatures); + verifyResult = PhpVerifyFile(Information, FileHandle, WTD_CHOICE_CATALOG, &catalogInfo, &DriverActionVerify, &signatures, &numberOfSignatures); } CryptCATAdminReleaseCatalogContext(catAdminHandle, catInfoHandle, 0); @@ -380,12 +385,14 @@ VERIFY_RESULT PhpVerifyFileFromCatalog( for (i = 0; i < Information->NumberOfCatalogFileNames; i++) { + PhFreeVerifySignatures(signatures, numberOfSignatures); + catalogInfo.cbStruct = sizeof(catalogInfo); catalogInfo.pcwszCatalogFilePath = Information->CatalogFileNames[i]; catalogInfo.pcwszMemberFilePath = Information->FileName; catalogInfo.pcwszMemberTag = fileHashTag; catalogInfo.hCatAdmin = catAdminHandle; - verifyResult = PhpVerifyFile(Information, FileHandle, WTD_CHOICE_CATALOG, &catalogInfo, &WinTrustActionGenericVerifyV2, Signatures, NumberOfSignatures); + verifyResult = PhpVerifyFile(Information, FileHandle, WTD_CHOICE_CATALOG, &catalogInfo, &WinTrustActionGenericVerifyV2, &signatures, &numberOfSignatures); if (verifyResult == VrTrusted) break; @@ -397,6 +404,9 @@ VERIFY_RESULT PhpVerifyFileFromCatalog( CryptCATAdminReleaseContext(catAdminHandle, 0); } + *Signatures = signatures; + *NumberOfSignatures = numberOfSignatures; + return verifyResult; } From 1606149b9a17478968bcd3a0bf7d16f05a743077 Mon Sep 17 00:00:00 2001 From: dmex Date: Sun, 3 Nov 2013 12:01:23 +0000 Subject: [PATCH 071/161] WebsiteV3: added privacy.php; added bootstrap icons; updated several page layouts; git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5538 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- misc/website/websitev3/about.php | 42 +-- misc/website/websitev3/changelog.php | 58 +--- misc/website/websitev3/css/custom.css | 125 +++---- misc/website/websitev3/downloads.php | 57 ++-- misc/website/websitev3/faq.php | 307 ++++++------------ misc/website/websitev3/features.php | 9 +- .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 14079 bytes .../fonts/glyphicons-halflings-regular.svg | 228 +++++++++++++ .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 29512 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 16448 bytes misc/website/websitev3/img/ad_300x250.png | Bin 527 -> 0 bytes misc/website/websitev3/img/ad_336x280.png | Bin 798 -> 0 bytes misc/website/websitev3/img/ad_728x90.png | Bin 705 -> 0 bytes .../websitev3/img/answers-arrow-right.png | Bin 116 -> 0 bytes misc/website/websitev3/include/config.php | 1 + misc/website/websitev3/include/footer.php | 25 +- misc/website/websitev3/include/header.php | 81 +++-- misc/website/websitev3/include/phpbb.php | 22 +- misc/website/websitev3/index.php | 94 +++--- misc/website/websitev3/js/jquery-2.0.3.min.js | 6 - misc/website/websitev3/members.php | 26 +- misc/website/websitev3/plugins.php | 113 +++---- misc/website/websitev3/privacy.php | 78 +++++ 23 files changed, 658 insertions(+), 614 deletions(-) create mode 100644 misc/website/websitev3/fonts/glyphicons-halflings-regular.eot create mode 100644 misc/website/websitev3/fonts/glyphicons-halflings-regular.svg create mode 100644 misc/website/websitev3/fonts/glyphicons-halflings-regular.ttf create mode 100644 misc/website/websitev3/fonts/glyphicons-halflings-regular.woff delete mode 100644 misc/website/websitev3/img/ad_300x250.png delete mode 100644 misc/website/websitev3/img/ad_336x280.png delete mode 100644 misc/website/websitev3/img/ad_728x90.png delete mode 100644 misc/website/websitev3/img/answers-arrow-right.png delete mode 100644 misc/website/websitev3/js/jquery-2.0.3.min.js create mode 100644 misc/website/websitev3/privacy.php diff --git a/misc/website/websitev3/about.php b/misc/website/websitev3/about.php index 143c39f85..58528e90e 100644 --- a/misc/website/websitev3/about.php +++ b/misc/website/websitev3/about.php @@ -1,14 +1,10 @@ -
    +

    About

    -
    - -
    -
    -
    -
    -

    Process Hacker was started in 2008 as an open source alternative to programs such as Task Manager and Process Explorer.

    +
    +
    +

    Process Hacker was started in 2008 as an open source alternative to programs such as Task Manager and Process Explorer.

    • Registered: 16-10-2008
    • Licence: GNU General Public License version 3.0 GPLv3
    • @@ -16,26 +12,24 @@
    • Intended Audience: Advanced End Users, Developers
    • Programming Language: C, C#
    -
    -
    -

    Ohloh Stats

    -
    - -
    +
    +
    +

    Ohloh Stats

    +
    +
    +
    -
+ + -
-

Latest Source

-
-
- +
+
+
diff --git a/misc/website/websitev3/js/jquery-2.0.3.min.js b/misc/website/websitev3/js/jquery-2.0.3.min.js deleted file mode 100644 index 2be209dd2..000000000 --- a/misc/website/websitev3/js/jquery-2.0.3.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery-2.0.3.min.map -*/ -(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t) -};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("