From 3e55136c6ad9b5abc6b1792a2d387bd6780b8eb7 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sat, 8 Jun 2013 09:05:03 -0400 Subject: [PATCH 01/21] add license info files --- .gitignore | 1 + LICENSE.ASL | 12 ++++++++++++ LICENSE.LGPL | 13 +++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 LICENSE.ASL create mode 100644 LICENSE.LGPL diff --git a/.gitignore b/.gitignore index 5644e37191..4521d6da14 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ dist/src-mvn.zip dist/out-of-date.jar perf*.txt native/libffi/doc/libffi.info +junit-* \ No newline at end of file diff --git a/LICENSE.ASL b/LICENSE.ASL new file mode 100644 index 0000000000..3f12dee191 --- /dev/null +++ b/LICENSE.ASL @@ -0,0 +1,12 @@ +This copy of JNA is licensed under the +Apache (Software) License, version 2.0 ("the License"). +See the License for details about distribution rights, and the +specific rights regarding derivate works. + +You may obtain a copy of the License at: + +http://www.apache.org/licenses/ + +A copy is also included in the downloadable source code package +containing JNA, in file "ASL2.0", under the same directory +as this file. diff --git a/LICENSE.LGPL b/LICENSE.LGPL new file mode 100644 index 0000000000..b4b063ead1 --- /dev/null +++ b/LICENSE.LGPL @@ -0,0 +1,13 @@ +This copy of JNA is licensed under the +Lesser General Public License (LGPL), version 2.1 ("the License"). +See the License for details about distribution rights, and the +specific rights regarding derivate works. + +You may obtain a copy of the License at: + +http://www.gnu.org/licenses/licenses.html + +A copy is also included in the downloadable source code package +containing JNA, in file "LGPL2.1", under the same directory +as this file. + From fed3b9f432b406dcd7c49554fb2b926a339bab2e Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 11 Jun 2013 04:04:47 -0400 Subject: [PATCH 02/21] check for invalid Structure.ByReference usage --- CHANGES.md | 1347 +++++++++-------- src/com/sun/jna/Function.java | 25 +- src/com/sun/jna/Structure.java | 6 +- test/com/sun/jna/ArgumentsMarshalTest.java | 23 + .../sun/jna/DirectArgumentsMarshalTest.java | 1 + 5 files changed, 726 insertions(+), 676 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2ee88bd265..774ae64067 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,673 +1,674 @@ -Next Release (4.0) -================== - -NOTE: as of JNA 4.0, JNA is now dual-licensed under LGPL and ASL (see LICENSE). - -NOTE: JNI native support is typically incompatible between minor versions, and almost always incompatible between major versions. - -Features --------- -* Added ASL licensing to facilitate distribution - [@twall](https://github.com/twall). -* [#109](https://github.com/twall/jna/issues/109): Set default Java compatibility level to 1.6 - [@twall](https://github.com/twall). -* [#209](https://github.com/twall/jna/issues/209): Improved default performance saving last error results - [@twall](https://github.com/twall). -* Use predictable names for CPU architecture prefix (namely x86, x86-64); names correspond to OSGI processor values - [@twall](https://github.com/twall). -* Avoid superfluous Structure memory allocation from native - [@twall](https://github.com/twall). -* Added `Library.OPTION_CLASSLOADER`, which enables loading native libraries from any class loader (including JNA's native library). This enables parallel dependencies on JNA (e.g. within a tomcat deployment without having to include JNA in the app server environment) - [@twall](https://github.com/twall). -* Use per-library String encoding settings (see `Native.getDefaultStringEncoding()` and `Structure.getStringEncoding()`) - [@twall](https://github.com/twall). -* Added memory dump for debugging (see `com.sun.jna.Memory`) - [@twall](https://github.com/twall). -* Improved caching of Structure alignment, type mapping, and encoding information - [@twall](https://github.com/twall). -* [#225](https://github.com/twall/jna/pull/225): Added `platform.win32.Kernel32.GetLogicalProcessorInformation` and `platform.win32.Kernel32Util.getLogicalProcessorInformation` - [@trejkaz](https://github.com/trejkaz). -* [#236](https://github.com/twall/jna/issues/236): Auto-strip profiler native method prefix specified by `jna.profiler.prefix`, which defaults to $$YJP$$ - [@twall](https://github.com/twall). -* Added `jna.debug_load` property to diagnose library loading issues - [@twall](https://github.com/twall). - -Bug Fixes ---------- -* [#213](https://github.com/twall/jna/pull/213): Fixed `Structure.toString()` not to dump memory when `jna.dump_memory` is false - [@tomohiron](https://github.com/tomohiron). -* Use dedicated TLS to indicate callback detach state, to avoid any potential conflicts with last error storage - [@twall](https://github.com/twall). -* [#173](https://github.com/twall/jna/issues/173): Fixed OSX 10.8/Xcode 4+ builds, web start path with Oracle 1.7 JDK - [@mkjellman](https://github.com/mkjellman). -* [#215](https://github.com/twall/jna/issues/215): Forced use of XSI `strerror_r` on linux - [LionelCons](https://github.com/LionelCons). -* [#214](https://github.com/twall/jna/issues/214): Don't map library names when an absolute path is provided - [@twall](https://github.com/twall). -* [#218](https://github.com/twall/jna/issues/218): Explicitly handled broken Android `SecurityManager` implementation - [@twall](https://github.com/twall). -* [#223](https://github.com/twall/jna/issues/223): Fixed layout/size derivation for unions - [@twall](https://github.com/twall). -* [#229](https://github.com/twall/jna/issues/229): Added `CreateProcessW` (Unicode version) - [@twall](https://github.com/twall). -* Avoid solaris/x86 JVM bug w/library open flags - [@twall](https://github.com/twall). -* Fixed NPE returning wide string from a direct-mapped function - [@twall](https://github.com/twall). -* [#237](https://github.com/twall/jna/issues/237): Fix LastErrorException/getLastError on AIX - [@skissane](https://github.com/skissane). -* [#228](https://github.com/twall/jna/issues/228): Fix win32/win64 crashes due to LastErrorException buffer overruns (`snprintf` on windows is broken) - [@davidhoyt](https://github.com/davidhoyt). - -Release 3.5.2 -============= - -Features --------- -* Basic [COM support](https://github.com/twall/jna/blob/master/www/PlatformLibrary.md) for w32 - [@wolftobias](https://github.com/wolftobias). -* Avoid superfluous Structure memory allocation by using Structure(Pointer) ctors if available - [@twall](https://github.com/twall). -* [PR#120](https://github.com/twall/jna/pull/120): Provide methods for extracting native libraries from the class path for use by JNA - [@Zlika](https://github.com/Zlika). -* [PR#163](https://github.com/twall/jna/pull/163): The Java `GUID` structure can be used directly as alternative to `Ole32Util.getGUIDFromString()` - [@wolftobias](https://github.com/wolftobias). -* [PR#163](https://github.com/twall/jna/pull/163): Ported Win32 `dbt.h` - [@wolftobias](https://github.com/wolftobias). -* [PR#163](https://github.com/twall/jna/pull/163): Added Win32 `WTSRegisterSessionNotification()` and `WTSUnRegisterSessionNotification()` from `Wtsapi32.dll` - [@wolftobias](https://github.com/wolftobias). -* [PR#163](https://github.com/twall/jna/pull/163): Added Win32 `native_window_msg` that creates windows, registers for USB device and logon/logoff notifications - [@wolftobias](https://github.com/wolftobias). -* [PR#178](https://github.com/twall/jna/pull/178): Added Win32 `USER_INFO_10` structure from `LMAccess.h` - [@davidmc24](https://github.com/davidmc24). -* [PR#192](https://github.com/twall/jna/pull/192): Added Win32 `SHGetSpecialFolderPath()` and initialization file (.ini) API functions from `kernel32.dll` - [@headcrashing](https://github.com/headcrashing). -* [PR#194](https://github.com/twall/jna/pull/194): Added Unit Test for `CLSIDFromProgID()` - [@headcrashing](https://github.com/headcrashing). -* [PR#196](https://github.com/twall/jna/pull/196): Added Win32 `RegisterWindowMessage()` and new wrapper `User32Util` for convenient use of `RegisterWindowMessage`, `CreateWindow` and `CreateWindowEx` - [@headcrashing](https://github.com/headcrashing). -* [PR#187](https://github.com/twall/jna/pull/187): Allow StructureFieldOrderTest unit test in platform project to run on Linux. - [@bhamail](https://github.com/bhamail). - -Bug Fixes ---------- -* [PR#180](https://github.com/twall/jna/pull/180): Fix: added missing fields in `XEvents.getFieldOrder()` - [@xwizard](https://github.com/xwizard). -* [PR#183](https://github.com/twall/jna/pull/183): Fix `LMAccess.GROUP_INFO_3.getFieldOrder()` to return correct fields names - [@bhamail](https://github.com/bhamail). -* [PR#187](https://github.com/twall/jna/pull/187): Fix `getFieldOrder()` to return correct field names for some X11 structures - [@bhamail](https://github.com/bhamail). -* Remove deprecated methods on Memory (getSize,isValid) and Structure (getSize) - [@twall](https://github.com/twall). -* Remove problematic AWT check via `Class.forName("java.awt.Component")` (see [here](https://bugs.eclipse.org/bugs/show_bug.cgi?id=388170)) - [@twall](https://github.com/twall). -* [PR#210](https://github.com/twall/jna/pull/210) Add OSGI processor specs for Mac OS X - [@bertfrees](https://github.com/bertfrees). -* [PR#174](https://github.com/twall/jna/pull/174): Recompile linux-amd64 natives to remove glibc-2.11 dependencies, now requires only 2.2.5 or better - [@twall](https://github.com/twall). -* [PR#183](https://github.com/twall/jna/pull/183): Added `StructureFieldOrderInspector` unit test utility to scan for `Structure` field issues; see: `com.sun.jna.platform.StructureFieldOrderTest.testMethodGetFieldOrder` - [@bhamail](https://github.com/bhamail). -* [PR#187](https://github.com/twall/jna/pull/187): Allow `StructureFieldOrderTest` unit test in platform project to run on Linux - [@bhamail](https://github.com/bhamail). -* [#206](https://github.com/twall/jna/issues/206): Fix `moveToTrash()` on OSX to work with symlinks - [@twall](https://github.com/twall). -* Fix NPE if `Thread.getContextClassLoader()` returns `null` - [@twall](https://github.com/twall). - -Release 3.5.1 -============= - -Bug Fixes ---------- -* Fix bug where string fields sometimes failed to be writtern - [@twall](https://github.com/twall) (roman kisluhin). -* [PR#145](https://github.com/twall/jna/pull/145): Fix `Netapi32Util.getDomainTrusts()` returns "empty" domain object - [@aikidojohn](https://github.com/aikidojohn). -* [PR#145](https://github.com/twall/jna/pull/145): Fix `Netapi32.getDC()` - added missing fields in `DOMAIN_CONTROLLER_INFO` - [@aikidojohn](https://github.com/aikidojohn). -* [PR#151](https://github.com/twall/jna/pull/151): 'platform.jar' in the dist directory was not updated for release 3.5.0. (The 'platform.jar' published to maven central was correct.) - -Release 3.5.0 -============= - -Features --------- -* [#62](https://github.com/twall/jna/issues/62) If a callback is required to reside in a DLL, use [`DLLCallback`](http://twall.github.com/jna/3.5.1/javadoc/com/sun/jna/win32/DLLCallback.html) to tag your Callback object - [@twall](https://github.com/twall). -* `Structure.getFieldOrder()` supersedes `Structure.setFieldOrder()` and is now required - [@twall](https://github.com/twall). -* Search `~/Library/Frameworks` and `/Library/Frameworks` on OSX - [@shaneholloway](https://github.com/shaneholloway). -* Automatic cleanup of native threads (based on suggestions from neil smith) - [@twall](https://github.com/twall). -* Add `android-arm` target - [@ochafik](https://github.com/ochafik), [@twall](https://github.com/twall). -* Add `jna.tmpdir` to override temporary JNA storage location - [@twall](https://github.com/twall). -* Add `EXTRA_MAKE_OPTS` ant property to override make variables - [@twall](https://github.com/twall). -* Add `Library.OPTION_OPEN_FLAGS` to customize dlopen behavior - [@twall](https://github.com/twall). -* [#113](https://github.com/twall/jna/issues/113), [#114](https://github.com/twall/jna/issues/114): Add support for GNU/kFreeBSD and debian multi-arch distros - [@twall](https://github.com/twall). - -Bug Fixes ---------- -* Fix `Advapi32Util.registryGetValues()` tried to allocate memory for a zero-length `REG_BINARY` value - [@phailwhale22](https://github.com/phailwhale22). -* Fix crash in direct mode callbacks with certain type conversions - [@twall](https://github.com/twall). -* More thoroughly propagate unexpected exceptions generated in jnidispatch - [@twall](https://github.com/twall). -* Cleanup maven poms and publishing to central repo - [@bhamail](https://github.com/bhamail). -* [#129](https://github.com/twall/jna/issues/129): Allow `Memory` field in structure - [@twall](https://github.com/twall). -* Preserve `PointerType` fields on `Structure.read()` if unchanged - [@twall](https://github.com/twall). -* [#128](https://github.com/twall/jna/issues/128): Fix masking extracting DWORD upper and lower WORD values - [@twall](https://github.com/twall). -* [#135](https://github.com/twall/jna/issues/135): Fix for `Advapi32Util.registryGetValues()` when reading zero length values - [@danwi](https://github.com/danwi). - -Release 3.4.2 -============= - -Features --------- -* Add `platform.win32.Kernel32.GetEnvironmentVariable` and `platform.win32.Kernel32Util.getEnvironmentVariable` - [@dblock](https://github.com/dblock). -* Moved `Kernel32.dll` function definitions from `WinNT.java` into `Kernel32.java` - [@dblock](https://github.com/dblock). -* Provide `toPointer()` methods on all `_PTR` types (platform win32) - [@twall](https://github.com/twall). -* Provide `ant -Dskip-native` to skip platform native build - [@twall](https://github.com/twall). -* Provide `ant -Dheadless=true` to run unit tests headless - [@twall](https://github.com/twall). -* Added Windows dev environment instructions - [@twall](https://github.com/twall). - -Bug Fixes ---------- -* Ensure platform win32 classes use unsigned where appropriate (`ULONG_PTR`, `UINT_PTR`, `ULONGLONG`, `WORD`, `DWORDLONG`) - [@twall](https://github.com/twall). -* [#71](https://github.com/twall/jna/issues/71), [#73](https://github.com/twall/jna/issues/73): Fix OSGI entries in manifest - [@twall](https://github.com/twall). -* [#78](https://github.com/twall/jna/issues/78): Fix NPE in `platform.win32.Netapi32Util.getDomainTrusts` - [@dblock](https://github.com/dblock). -* Fix: auto-sync memory for `struct**` arguments (array of struct pointers) - [@twall](https://github.com/twall). -* Fix: `platform.win32.Secur32.AcquireCredentialsHandle`, `InitializeSecurityContext` and `AcceptSecurityContext` on Win32 64-bit - [@dblock](https://github.com/dblock). -* Fix: avoid overwriting native `char *` or `wchar_t *` fields within structures when unmodified (similar to current operation with pointers) - [@twall](https://github.com/twall). -* Fix: `platform.win32.DsGetDC.DS_DOMAIN_TRUSTS` and `DsEnumerateDomainTrusts` on Win32 64-bit - [@trejkaz](https://github.com/trejkaz). -* Fix: Crash freeing the wrong pointer in `Netapi32Util.getDomainTrusts` - [@trejkaz](https://github.com/trejkaz). -* [#100](https://github.com/twall/jna/issues/100): Fix `platform.win32.W32FileMonitor` - [@dblock](https://github.com/dblock). -* Return INT_PTR from `platform.win32.Shell32.ShellExecute`, since returning -`HINSTANCE` is useless. -* Fix runtime error in some instances where Structure.setFieldOrder is used (never return self when sharing AutoAllocated memory). -* [#107](https://github.com/twall/jna/issues/107): `Structure.clear()` always calls `ensureAllocated()` to avoid NPE. -* Ensure internal memory pointer is *always* allocated when calling `Structure.useMemory()`, even if layout is not yet determined. - -Release 3.4.1 -============= - -Features --------- -* Add 'unsigned' modifier to IntegerType. -* Add to `platform.win32.User32`: `GetLastInputInfo`. -* Add `platform.win32.WinNT.GetFileType` and `platform.win32.Kernel32Util.getFileType`. -* Add to `platform.win32.Kernel32Util`: `getFileType`. - -Bug Fixes ---------- -* Re-build linux-amd and linux-i386 against older versions of glibc (2.2.5 and -2.1.3 respectively). -* Properly initialize first printer info struct in winspool library. -* Properly support getting and setting zero-array-length `REG_MULTI_SZ` values on Win32. -* Fixed SID in Win32 `USER_INFO_23` and `GROUP_INFO_3`. -* Fixed passing domain name into Win32 `Netapi32Util.getUserInfo`. - -Release 3.4.0 -============= - -Features --------- -* Provide `jna.nosys=true` to avoid loading any system-provided JNA (useful for local build/development). -* Allow override of default jnidispatch library name with `jna.boot.library.name` system property. -* Throw an Error if a system install of JNA is incompatible or if JNA's JNI library does not match. -* Disable automatic jnidispatch unpacking with `jna.nounpack=true`. -* Automatically look up system error messages for LastErrorException. -* Improved callback thread-mapping support; re-use, rename, and group callback -threads. -* Cache structure layout results, improving performance of structure creation. -* linux/arm 32-bit support (hardware provided by Alex Lam). -* linux/ppc 32-bit support (hardware provided by Fritiof Hedman). -* Preliminary linux/ia64, linux/ppc64 support (thanks to Laurent Guerby and the GCC compile farm). -* Windows CE/Mobile support (w32ce-arm) (resources provided by andrea antonello and Hydrologis SRL). -* linux multi-arch support (kohsuke). -* Added REG_QWORD registry type support -* Add to `platform.unix.x11`: `XGrabKey`, `XUngrabKey`, `XSetErrorHandler`. -* Add to `platform.mac.Carbon`: `GetEventDispatcherTarget`, `InstallEventHandler`, `RegisterEventHotKey`, `GetEventParameter`, `RemoveEventHandler`, `UnregisterEventHotKey`. -* Add to `platform.win32.Kernel32`: `CopyFile`, `MoveFile`, `MoveFileEx`, `CreateProcess`, `SetEnvironmentVariables`, `GetFileTime`, `SetFileTime`, `SetFileAttributes`, `DeviceIoControl`, `GetDiskFreeSpaceEx`, `CreateToolhelp32Snapshot`, `Process32First`, `Process32Next`. -* Add to `platform.win32.Msi`: `MsiGetComponentPath`, `MsiLocateComponent`, `MsiGetProductCode`, `MsiEnumComponents`. -* Add to `platform.win32.User32`: `RegisterHotKey`, `UnregisterHotKey` -* Add to `platform.win32.SetupApi`: `SetupDiGetClassDevs`, `SetupDiDestroyDeviceInfoList`, `SetupDiEnumDeviceInterfaces`, `SetupDiGetDeviceInterfaceDetail`, `SetupDiGetDeviceRegistryProperty`. -* Add `platform.win32.Shell32.ShellExecute`. -* Add to `platform.win32.User32`: `SetParent`, `IsWindowVisible`, `MoveWindow`, `SetWindowPos`, `AttachInputThread`, `SetForegroundWindow`, `GetForegroundWindow`, `SetFocus`, `SendInput`, `WaitForInputIdle`, `InvalidateRect`, `RedrawWindow`, `GetWindow`, `UpdateWindow`, `ShowWindow`, `CloseWindow`. -* Add to `platform.win32.Version`: `GetFileVersionInfoSize`, `GetFileVersionInfo`, `VerQueryValue`. -* Add to `platform.win32.Advapi32`: `GetFileSecurity`, `RegQueryValueEx(...Long...)`. -* Add to `platform.win32.Netapi32`: `NetUserGetInfo`. - -Bug Fixes --------- -* Revise cleanup of in-use temporary files on win32 (issue 6). -* Fix structure alignment issues on linux/ppc. -* Fix structure alignment issues on linux/arm. -* Account for NIO Buffer position (JIRA issue 185). -* Avoid crash with very long Strings (> 150k in length). -* Fix bug tracking Memory with an associated direct ByteBuffer. -* Fix bug handling structs by value when type mappers are in effect (JIRA issue 188). - -Release 3.3.0 -============= - -Features --------- - -* Facilitate `Memory` subclasses (jbellis). -* Allow multiple fields of the same type in Unions (Francis Barber). -* Add `platform.win32.Advapi32.AdjustTokenPrivileges`, `platform.win32.Advapi32.LookupPrivilegeName`, `platform.win32.Advapi32.LookupPrivilegeValue`, `platform.win32.Advapi32.ImpersonateSelf`. -* Add `platform.win32.Advapi32.DuplicateTokenEx`, `platform.win32.Advapi32.CreateProcessAsUser`, `platform.win32.Kernel32.GetExitCodeProcess`, `platform.win32.Kernel32.TerminateProcess`, `platform.win32.Kernel32.ReadFile`, `platform.win32.Kernel32.CreatePipe`, `platform.win32.Kernel32.SetHandleInformation` and related constants / structures in `platform.win32.WinBase` and `platform.win32.WinNT`. Please note that the `SECURITY_ATTRIBUTES` structure has been moved from `platform.win32.WinNT` to `platform.win32.WinBase`. -* Add `platform.win32.Kernel32.DeleteFile` and `platform.win32.Kernel32Util.deleteFile`. -* Add `platform.win32.Kernel32.GetFileAttributes` and `platform.win32.Kernel32Util.getFileAttributes`. -* Add `platform.win32.Kernel32.GetTickCount`. -* Add Win32 Service functions to `platform.win32.Advapi32`. -* Add `platform.win32.W32ServiceManager` and `W32Service`. -* Add Win32 Event Logging functions to `platform.win32.Advapi32` and `platform.win32.Advapi32Util.EventLogIterator`. -* `platform.win32.Advapi32Util.registryCreateKey` returns `true` if key was created, `false` if it already exists. -* Add `REG_BINARY`, `REG_EXPAND_SZ` and `REG_MULTI_SZ` support to `platform.win32.Advapi32Util` registry functions. -* Reduce JNI crossings in a number of native methods, moving object creation out into pure Java code. - -Bug Fixes ---------- - -* Move all native functions into `com.sun.jna.Native`, to ensure that all dependent classes must be disposed before the `Native` class is unloaded. Note that this change is incompatible with all previous JNA native libraries. -* Fix `platform.win32.Kernel32.GetNativeSystemInfo` and `GetSystemInfo` AV on Win64. -* Fix several potential minor bugs as reported by TvT. -* Fix bug in Structure.StructureSet.toString (Blair Zajac), exposed by Tomcat ThreadLocal cleanup. -* Fix several bugs when using Structure(Pointer) ctor and array fields (Samuel Audet). - -Release 3.2.7 -============= - -Features --------- - -* Add native peer value accessors for Pointer -* The `jna.library.path` property is now re-evaluated whenever a native library is loaded. Previously this value was cached when the JNA classes loaded. -* `Native.loadLibrary` can now load `.drv` files. -* Refactor `com.sun.jna.platform.win32.WINBASE` into `WinDef`, `WinNT` and `BaseTSD`, matching Windows SDK headers. -* Refactor constants from `com.sun.jna.platform.win32.GDI32` into `WinGDI`, matching Windows SDK headers. -* Refactor constants from `com.sun.jna.platform.win32.User32` into `WinUser`, matching Windows SDK headers. -* Refactor `platform.win32.WinNT.LARGE_INTEGER` into a union. -* Add `platform.win32.ObjBase`, `com.sun.jna.platform.win32.Ole32.CoInitializeEx`, `CoUninitialize`, and `CoCreateInstance`. -* Add `platform.win32.Oleaut32.SysAllocString` and `SysFreeString`. -* Add `platform.win32.Secur32.ImpersonateSecurityContext` and `RevertSecurityContext`. -* Add `platform.win32.WinNT.WELL_KNOWN_SID_TYPE`, `SECURITY_MAX_SID_SIZE` and other related SID-related constants. -* Add `platform.win32.Advapi32.CreateWellKnownSid` and `IsWellKnownSid` and `com.sun.jna.platform.win32.Advapi32Util.isWellKnownSid`. -* Add `platform.win32.Kernel32.GetVersion`, `GetVersionEx`, `GetSystemInfo`, `GetNativeSystemInfo`, `GlobalMemoryStatusEx`, `GetLogicalDriveStrings` and `IsWow64Process`. -* Add `platform.win32.Kernel32Util.getLogicalDriveStrings`. -* Add `platform.win32.User32.GetSystemMetrics`. -* Add `platform.win32.BaseTSD.DWORD_PTR`. -* Add `platform.win32.WinBase.SYSTEM_INFO` and `MEMORYSTATUSEX`. -* Add `platform.win32.WinNT.OSVERSIONINFOEX`, `VER` constants. -* Add `platform.win32.WinDef.ULONGLONG` and `DWORDLONG`. -* Add `platform.win32.Shell32.SHGetDesktopFolder` (prep work for Com4JNA). -* Add `platform.win32.Winspool.GetPrinterInfo`. -* Add `platform.win32.WinspoolUtil.getPrinterInfo1`. -* Add `platform.win32.GDI32.GetDeviceCaps`. -* Add `platform.win32.GDI32.GetDIBits`. - -Bug Fixes ---------- - -* Fix `ClassCastException` in `Structure.equals` (issue 152). -* Fix bug initializing a structure object from existing memory when the structure has initialized fields (issue 133). -* Fix NPE reading an array of string from a pointer when an element of the array is `NULL` (issue 151). -* Avoid calling `UnregisterNatives` in native code (issue 154). -* Compare unpacked library path against canonical (long) filename (issue 156). -* Fix `read()` of uninitialized memory in `platform.win32.Advapi32Util.getTokenGroups` and `getTokenAccount`. -* Fix `com.sun.jna.platform.win32.Secur32.QuerySecurityContextToken` to take a `CtxtHandle` instead of `PSecHandle`. -* Fix definition of BITMAPINFO (platform/win32). - -Release 3.2.5 -============= - -Features --------- - -* Split code in examples.jar into a contrib platform.jar package and individual packages for demos. -* Fix Eclipse build and added Eclipse projects for all contrib samples, import projects from jnalib and contrib. -* Ensure Structure fields correctly ordered when inherited. -* Use explicit Structure field whenever provided, regardless of whether the VM requires it. -* Add Win32 mappings for two dozen functions from Kernel32.dll, Advapi32.dll, Netapi32.dll, Secur32.dll, NtDll.dll, Ole32.dll, Shell32.dll and Crypt32.dll to com.sun.jna.platform.win32. -* Port parts of WinError.h, WinNT.h, LMAccess.h, LMCons.h, LMErr.h, LMJoin.h, NTStatus.h, ShlObj.h, WinDef.h, ShellApi.h, Wdm.h, WinReg.h, WinCrypt.h, Sspi.h, Guid.h, NtSecApi.h and DsGetDc.h. -* Add Win32 simplified utility interfaces Kernel32Util, Advapi32Util, Netapi32Util, Crypt32Util, NtDllUtil, Shell32Util, Ole32Util and Secur32Util to com.sun.jna.platform.win32. -* Support unicode paths in W32FileUtils. -* Fix exception during dispose in W32FileMonitor. - -Bug Fixes ---------- - -* Provide String.replace for 1.4 compatibility. -* Avoid allocating memory when Structure is provided a pointer in the ctor. -* Ensure proper value returned in Pointer.getValue() for non-null, unchanged NIO Buffer values. -* Use 1.4-compatible URI generation (issue 149). - -Release 3.2.4 -============= - -Features --------- - -* Make Pointer ctor public. -* Provide access to Function objects for arbitrary Pointer values. -* Add linux/ia64 binaries (bpiwowar). See issue 134 patch. - -Bug Fixes ---------- - -* Use a more robust method to decode a file-based URL (issue 135). - -Release 3.2.3 -============= - -Features --------- - -* Include version information in code in case package information lost. - -Bug Fixes ---------- - -* Fix WindowUtils exception on mouse over TrayIcon. -* Fix bug toggling windows transparent/opaque (win32/OSX). -* Avoid overwriting unchanged Pointer values in arrays (function calls with Pointer[] and Structure.read). -* Ensure Structure fields marked `final` are never written. -* Fix bug preventing proper population Structure.ByReference fields on Structure read. -* Ensure double buffering is disabled in components added to a transparent window. -* Fix UnsatisfiedLinkError attempting to load system libraries under Web Start. -* Fix loading Web Start-provided libraries on OSX (libraries must have a .jnilib suffix under Web Start). -* Properly include sources in Maven zip file (Issue 129). - -Release 3.2.2 -============= - -Features --------- - -* Provide length-specified Pointer.getStringArray() - -Bug Fixes ---------- - -* Fix crash with direct mapping if NULL struct* used (Issue 125). -* Fix case where null-valued Structure fields would get non-null values on write. -* Synch callback Structure/Structure[] arguments on callback return. -* Fix NPE when mapping an interface to the current process. -* Automatically load proper C library version from current process on Linux (avoids crashing bug on Ubuntu with libc-i686 packages active). -* Avoid scanning structure contents in Structure.toString if contents aren't actually used. - -Release 3.2.1 -========== - -Features --------- - -* Add HRESULT, LONG mapping to W32API (marc strapetz). - - -Bug Fixes ---------- - -* Fix definition of HWND_BROADCAST in W32API. -* Fix memory alignment checking (Issue 121). -* Fix Structure equals/hashCode implementation, based on current Java fields rather than strictly native memory contents. Avoid using equals/hashCode when avoiding recursive reads/writes. - -Release 3.2.0 -============= - -Features --------- - -* Handle String, Structure, Callback, Buffer, and primitive arrays in direct mappings. Handle NativeMapped and TypeMapper, with optimized paths for IntegerType and PointerType. -* Optionally throw errno/GetLastError as an exception. This is preferred to (and more efficient than) calling Native.getLastError(). -* Unload/delete native library unpacked from jna.jar if Native class is garbage collected. Only install shutdown hook if using the system class loader. -* Auto-write contiguous Structure arrays when first element is written. -* Support NativeMapped[] as function arguments for interface-mapped libraries (Issue 90). -* Enable function lookup within current process on Windows. - -Bug Fixes ---------- - -* Restrict recursive structure reads/writes by thread instead of globally. This avoids potentially missed reads/writes with concurrent access (Issue 120). -* Ensure Memory is not GC'd and freed if direct NIO buffers mapped to it are extant. -* Allow types derived from java.nio.Buffer as Structure fields. - -Release 3.1.0 -============= - -Features --------- - -* Add raw JNI mapping of static Java methods. Performance is about 10X that of traditional JNA interface mapping, although with less type conversion functionality. -* Add library option to allow passing/return of Java Objects. -* Allow handling of uncaught callback exceptions (Issue 63). -* Object oriented interface to X server (see contrib/x11) -* Make Memory class more accessible. -* Provide Structure ctor with Pointer argument (issue 102). -* Allow implicit library access to current process on linux (issue 98). -* Open all shared libraries with RTLD_GLOBAL, if applicable. This was the default behavior on OSX and changes the default behavior on linux. -* Allow NIO Buffer as Structure field (with limitations) (Issue 57) -* Add `size_t` size. - -Bug Fixes ---------- - -* Run tests with libjsig.so, if available, which fixes some crashes when running tests on 64-bit platforms. -* Fix Issue 104. -* Fix Issue 94 (Java 1.6 update 10 regression). -* Fix Issue 51 (Java 1.6 update 10 regression). -* Fix Issue 95. -* Fix Issue 101. -* Fix Issue 111, memory leak with String-returning Callback. -* Fix missing storage of union type information (affects usage of struct/union by value as argument and return type). -* Remove non-functional Structure ctors requiring explicit size. - -Release 3.0.9 -============= - -Bug Fixes ---------- - -* Fix issue 93 by only manually searching jna.library.path, then falling back to passing the mapped library name to dlopen/LoadLibrary. This fixes an issue in JRUBY where the incorrect libc.so.6 was being loaded. - -Release 3.0.8 -========== - -Features --------- - -* Auto-map Pointer[]/String[]/WString[] return values. -* Provide utility functions to convert String to primitive array. -* Add jna.library.boot.path property to define the directory that the native stub library is loaded from - -Release 3.0.7 -========== - -Features --------- - -* Improve Win32 loading of libraries with dependencies. - -Bug Fixes ---------- - -* Fix bug reading structures with PointerType fields, introduced with Pointer field preservation fix. - -Release 3.0.6 -============= - -Features --------- - -* Allow arbitrary callback method names if only one method is defined in the class which implements Callback (colinwalters). -* Allow specification of callback type mappers by using a TYPE_MAPPER field (colinwalters). -* Allow uninitialized (null-valued) boxed primitives in Structures (colinwalters). -* Add convenience methods to set active Union field and value simultaneously (xylo). -* Augment Union read/writeField to set the active field. -* Allow Structure auto-synch across native calls to be disabled. -* Win64 support. - -Bug Fixes ---------- - -* Avoid overwriting unchanged Structure fields of type Pointer. -* Avoid more content dragging on OSX or warn if it's too late. -* Fix UnsatisfiedLinkError using transparent window on Win2K. -* Fix memory leak with callbacks called from native threads with no Java context (johnwallace). -* Defer structure size calculation if type mapper not yet set, allowing type mapper to be set in derived constructors (colinwalters). -* Ensure structure memory is allocated in Structure.read/writeField. - -Release 3.0.5 -============= - -Features --------- - -* Allow explicit declaration of field order for VMs which have an unpredictable field order. -* Check for w32 libraries with a "lib" prefix in addition to normal lookup. -* Allow String[]/WString[] as callback argument/return value (assume NULL-terminated array). -* Add Solaris8 compatibility to sunos-sparc build (Corey Puffalt). -* Look up libraries using web start library path, if appropriate (Corey Puffalt). -* Use constants to return integer boolean values. - -Bug Fixes ---------- - -* Properly track cursor on alpha-masked windows. -* Avoid searching /lib or /usr/lib on 64-bit Linux. -* Avoid using incorrect version of a library when both 32- and 64-bit versions are found. -* Avoid transparent window events always dragging window bug on OSX. -* Fix division by zero error calculating structure size on OSX/ppc. -* Avoid overwriting initialized NativeMapped Structure fields when calculating structure size. -* Fix NPE reading back into StringArray. - -Release 3.0.4 -============= - -Features --------- - -* Automatically write contents of Structure.ByReference fields on Structure.write(). -* Use the actual parameter type in Function invocations if no parameter type information is available (whether method is missing or untyped varargs). -* Augmented X11 library mappings (xylo). -* Support read/write of NativeMapped arrays within Structure (notably NativeLong). - -Bug Fixes ---------- - -* Fix library load error when /usr/lib32 and /usr/lib both exist (linux) (Marek Slama). -* Avoid incorrect matches against libraries named with the same prefix (e.g. libc-client.so vs libc.so) (xylo). -* Properly handle arrays of NativeMapped (e.g. NativeLong) as a Structure field (stefan endrullis). -* Ensure structure size calculated prior to setting union active type. -* XID is 64-bits on 64-bit X clients (xylo). -* Ensure proper arch name is used on Debian (amd64 instead of x86_64). - -Release 3.0.3 -============= - -Features --------- - -* Enable build/run using IBM's J9 VM (leonardo). -* Make StdCallFunctionMapper attempt a leading underscore if the simpler mapping doesn't work. -* Allow Structure.read to overwrite final fields (may not work on some 1.4 VMs). - -Bug Fixes ---------- - -* Fix NPE when passing an array of Structure.ByReference. -* Compare entire linux library version when finding a match. -* Don't pass struct by value unless the method signature declares it. -* Restrict custom first element structure alignment to OSX/ppc. -* Improve performance and reduce memory footprint for window masks. Optimize polygon-based masks on w32. Use XFillRectangles on X11. -* Fix linkage settings on sunos-amd64 to avoid relocation errors. -* Fix callback allocation code on w32, solaris, freebsd, darwin (libffi was misconfigured). -* Fix bug when NativeMapped fields are used in a Structure.ByValue instance. -* Fix NPE calling Structure.read() before memory is initialized. -* Fix NPE calling Structure.read/write with uninitialized NativeMapped fields. - -Release 3.0.2 -============= - -Features --------- - -* Attempt to force unload of jnidispatch library prior to deleting it (w32). -* Added amd64 targets for OSX, FreeBSD, and Solaris. - -Bug Fixes ---------- - -* Reduce space allocated for invocation arguments. -* Fix NPE when NativeMapped type is used in a Structure. -* Fix some X11 type mappings for 64-bit. -* Fix OSX Leopard/JRE1.5+ window transparency. -* Fix window alpha compositing on X11. -* Fix loading of libraries with unicode names on OSX. - -Release 3.0.1 -============= - -Features --------- - -* Improve transparent window drawing performance on w32 -* Use closure allocation from libffi - -Bug Fixes ---------- - -* Ensure nested structure arrays initialized with Structure.toArray use the appropriate native memory. -* Ensure structure size is calculated prior to converting to array -* Avoid creating new windows when setting a window mask -* Fix bug in Pointer.setChar. - -Release 3.0 -=========== - -Features --------- - -* More supported platforms, via GCC's libffi (wmeissner) -* Support struct by value as parameter and return value (duncan) -* Support struct by reference within structures -* Provide access to native peer for java.awt.Component -* Provide access to native peer on OS X. -* Support MINGW32 builds (fullung) -* Allow per-field Structure read/write by field name -* Avoid writing Structure fields marked 'volatile' -* Read and wrap function pointers in Structure fields when read with a Java proxy to allow easy Java-side invocation (Ken Larson) -* Support array-backed Buffers as arguments (wmeissner) -* Auto-conversion of custom types (wmeissner) -* Allow pointer type-safety -* Optional VM crash protection, via Native.setProtected(boolean) -* Auto-convert WString[] -* Provide library synchronization wrapper similar to Collections.synchronizedX -* Support lookup of OSX framework libraries by name -* Explicit access to shared library global data -* Invocation interception to facilitate translation of C preprocessor macros and inline functions -* Provide utility to determine Web Start native library cache location; auto-include this path if jnidispatch is included as a <nativelib> (robertengels) -* Provide access to aligned memory -* Versioning information embedded in jna.jar and native library - -Bug Fixes ---------- - -* Avoid attempts to free native library if it failed to load (wmeissner) -* Explicitly check method signatures for varargs instead of heuristically guessing (wmeissner) -* Disallow declaring Pointer-derived fields in Structures (Function, Memory) -* Ensure Object.toString/hashCode/equals methods are intercepted on proxyied interfaces -* Update X11 library for 64-bit use (wmeissner) -* Properly map arrays of char*/wchar_t* under w32 -* Allow Pointer[] as a Structure field and Function argument -* Fix some misleading Structure error messages -* Properly preserve/return GetLastError/errno after native calls -* Allocate executable memory on w32 to avoid errors with hardware-enforced data execution protection (DEP) -* Fix VM crash on w32 stdcall callbacks -* Use long offsets and sizes rather than ints (64-bit safe) -* Properly clean up references and release closure memory on JNI_Unload -* Use simpler AWT/JAWT library loading workaround -* Avoid changing array references within a Structure on read - -Release 2.5 -=========== - -Features --------- - -* Unions -* Optimized shaped windows (chris deckers & olivier chafik); instantiation time improved by about 2-3 orders of magnitude for large, mostly contiguous shapes -* Provide type mapping in callback arguments/results -* Provide access to ByteBuffer direct address as a Pointer -* Provide customization of native string encoding with jna.encoding system property - -Bug Fixes ---------- - -* Properly handle VMs with reversed Structure member storage -* Avoid making window undecorated when clearing window mask on X11 -* Fix structure alignment bug on OSX/PPC when first element is > 4 bytes in size -* Clearing OSX window mask by setting to MASK_NONE now works properly -* Avoid index exceptions if native buffers are not NUL-terminated on string conversions -* Write initialized Structure[] argument memory prior to function calls -* Fix IllegalArgumentException reading WString into a Structure -* Clear memory when allocating a structure block (fixes VM crash) -* Remove versioned JAWT dependency on OSX, allowing use on 10.3/JRE1.4. - -Release 2.4 -=========== - -Features --------- - -* Explicitly support unaligned structures -* Auto-reallocate structure arrays -* Automatic handling of w32 UNICODE/ASCII variants -* Automatic mapping of decorated w32 stdcall function names -* Customizable, automatic type conversion of arguments and results (wmeissner) -* Support char*[] arguments as Java String[] -* Structure supports Callback members (wmeissner) -* getByteBuffer from Pointer/Memory (wmeissner) -* Allow GC of native libraries -* Facilitate use from non-Java contexts (JRuby et al.) (wmeissner) -* Improve library path searching (wmeissner) -* Handle Structure[] arguments -* Handle native long arguments and return values -* Handle direct and array-based ByteBuffer arguments (wmeissner) -* Change default w32 build to use GCC (it's free, yo) - -Bug Fixes ---------- - -* Structure.toArray failed to initialize members -* Disallow explicit free of Structure/Memory -* Ensure native libraries are only loaded once until released -* Properly handle NULL when the return value is a Structure -* Proper conversion to wchar_t on linux -* Copy full length of Java strings to C strings instead of stopping when a NUL character is encountered +Next Release (4.0) +================== + +NOTE: as of JNA 4.0, JNA is now dual-licensed under LGPL and ASL (see LICENSE). + +NOTE: JNI native support is typically incompatible between minor versions, and almost always incompatible between major versions. + +Features +-------- +* Added ASL licensing to facilitate distribution - [@twall](https://github.com/twall). +* [#109](https://github.com/twall/jna/issues/109): Set default Java compatibility level to 1.6 - [@twall](https://github.com/twall). +* [#209](https://github.com/twall/jna/issues/209): Improved default performance saving last error results - [@twall](https://github.com/twall). +* Use predictable names for CPU architecture prefix (namely x86, x86-64); names correspond to OSGI processor values - [@twall](https://github.com/twall). +* Avoid superfluous Structure memory allocation from native - [@twall](https://github.com/twall). +* Added `Library.OPTION_CLASSLOADER`, which enables loading native libraries from any class loader (including JNA's native library). This enables parallel dependencies on JNA (e.g. within a tomcat deployment without having to include JNA in the app server environment) - [@twall](https://github.com/twall). +* Use per-library String encoding settings (see `Native.getDefaultStringEncoding()` and `Structure.getStringEncoding()`) - [@twall](https://github.com/twall). +* Added memory dump for debugging (see `com.sun.jna.Memory`) - [@twall](https://github.com/twall). +* Improved caching of Structure alignment, type mapping, and encoding information - [@twall](https://github.com/twall). +* [#225](https://github.com/twall/jna/pull/225): Added `platform.win32.Kernel32.GetLogicalProcessorInformation` and `platform.win32.Kernel32Util.getLogicalProcessorInformation` - [@trejkaz](https://github.com/trejkaz). +* [#236](https://github.com/twall/jna/issues/236): Auto-strip profiler native method prefix specified by `jna.profiler.prefix`, which defaults to $$YJP$$ - [@twall](https://github.com/twall). +* Added `jna.debug_load` property to diagnose library loading issues - [@twall](https://github.com/twall). +* Throw explicit `IllegalArgumentException` when `Structure.ByReference` is used where it shouldn't be (can result in multiply freed memory or other unexpected behavior) - [@twall](https://github.com/twall). + +Bug Fixes +--------- +* [#213](https://github.com/twall/jna/pull/213): Fixed `Structure.toString()` not to dump memory when `jna.dump_memory` is false - [@tomohiron](https://github.com/tomohiron). +* Use dedicated TLS to indicate callback detach state, to avoid any potential conflicts with last error storage - [@twall](https://github.com/twall). +* [#173](https://github.com/twall/jna/issues/173): Fixed OSX 10.8/Xcode 4+ builds, web start path with Oracle 1.7 JDK - [@mkjellman](https://github.com/mkjellman). +* [#215](https://github.com/twall/jna/issues/215): Forced use of XSI `strerror_r` on linux - [LionelCons](https://github.com/LionelCons). +* [#214](https://github.com/twall/jna/issues/214): Don't map library names when an absolute path is provided - [@twall](https://github.com/twall). +* [#218](https://github.com/twall/jna/issues/218): Explicitly handled broken Android `SecurityManager` implementation - [@twall](https://github.com/twall). +* [#223](https://github.com/twall/jna/issues/223): Fixed layout/size derivation for unions - [@twall](https://github.com/twall). +* [#229](https://github.com/twall/jna/issues/229): Added `CreateProcessW` (Unicode version) - [@twall](https://github.com/twall). +* Avoid solaris/x86 JVM bug w/library open flags - [@twall](https://github.com/twall). +* Fixed NPE returning wide string from a direct-mapped function - [@twall](https://github.com/twall). +* [#237](https://github.com/twall/jna/issues/237): Fix LastErrorException/getLastError on AIX - [@skissane](https://github.com/skissane). +* [#228](https://github.com/twall/jna/issues/228): Fix win32/win64 crashes due to LastErrorException buffer overruns (`snprintf` on windows is broken) - [@davidhoyt](https://github.com/davidhoyt). + +Release 3.5.2 +============= + +Features +-------- +* Basic [COM support](https://github.com/twall/jna/blob/master/www/PlatformLibrary.md) for w32 - [@wolftobias](https://github.com/wolftobias). +* Avoid superfluous Structure memory allocation by using Structure(Pointer) ctors if available - [@twall](https://github.com/twall). +* [PR#120](https://github.com/twall/jna/pull/120): Provide methods for extracting native libraries from the class path for use by JNA - [@Zlika](https://github.com/Zlika). +* [PR#163](https://github.com/twall/jna/pull/163): The Java `GUID` structure can be used directly as alternative to `Ole32Util.getGUIDFromString()` - [@wolftobias](https://github.com/wolftobias). +* [PR#163](https://github.com/twall/jna/pull/163): Ported Win32 `dbt.h` - [@wolftobias](https://github.com/wolftobias). +* [PR#163](https://github.com/twall/jna/pull/163): Added Win32 `WTSRegisterSessionNotification()` and `WTSUnRegisterSessionNotification()` from `Wtsapi32.dll` - [@wolftobias](https://github.com/wolftobias). +* [PR#163](https://github.com/twall/jna/pull/163): Added Win32 `native_window_msg` that creates windows, registers for USB device and logon/logoff notifications - [@wolftobias](https://github.com/wolftobias). +* [PR#178](https://github.com/twall/jna/pull/178): Added Win32 `USER_INFO_10` structure from `LMAccess.h` - [@davidmc24](https://github.com/davidmc24). +* [PR#192](https://github.com/twall/jna/pull/192): Added Win32 `SHGetSpecialFolderPath()` and initialization file (.ini) API functions from `kernel32.dll` - [@headcrashing](https://github.com/headcrashing). +* [PR#194](https://github.com/twall/jna/pull/194): Added Unit Test for `CLSIDFromProgID()` - [@headcrashing](https://github.com/headcrashing). +* [PR#196](https://github.com/twall/jna/pull/196): Added Win32 `RegisterWindowMessage()` and new wrapper `User32Util` for convenient use of `RegisterWindowMessage`, `CreateWindow` and `CreateWindowEx` - [@headcrashing](https://github.com/headcrashing). +* [PR#187](https://github.com/twall/jna/pull/187): Allow StructureFieldOrderTest unit test in platform project to run on Linux. - [@bhamail](https://github.com/bhamail). + +Bug Fixes +--------- +* [PR#180](https://github.com/twall/jna/pull/180): Fix: added missing fields in `XEvents.getFieldOrder()` - [@xwizard](https://github.com/xwizard). +* [PR#183](https://github.com/twall/jna/pull/183): Fix `LMAccess.GROUP_INFO_3.getFieldOrder()` to return correct fields names - [@bhamail](https://github.com/bhamail). +* [PR#187](https://github.com/twall/jna/pull/187): Fix `getFieldOrder()` to return correct field names for some X11 structures - [@bhamail](https://github.com/bhamail). +* Remove deprecated methods on Memory (getSize,isValid) and Structure (getSize) - [@twall](https://github.com/twall). +* Remove problematic AWT check via `Class.forName("java.awt.Component")` (see [here](https://bugs.eclipse.org/bugs/show_bug.cgi?id=388170)) - [@twall](https://github.com/twall). +* [PR#210](https://github.com/twall/jna/pull/210) Add OSGI processor specs for Mac OS X - [@bertfrees](https://github.com/bertfrees). +* [PR#174](https://github.com/twall/jna/pull/174): Recompile linux-amd64 natives to remove glibc-2.11 dependencies, now requires only 2.2.5 or better - [@twall](https://github.com/twall). +* [PR#183](https://github.com/twall/jna/pull/183): Added `StructureFieldOrderInspector` unit test utility to scan for `Structure` field issues; see: `com.sun.jna.platform.StructureFieldOrderTest.testMethodGetFieldOrder` - [@bhamail](https://github.com/bhamail). +* [PR#187](https://github.com/twall/jna/pull/187): Allow `StructureFieldOrderTest` unit test in platform project to run on Linux - [@bhamail](https://github.com/bhamail). +* [#206](https://github.com/twall/jna/issues/206): Fix `moveToTrash()` on OSX to work with symlinks - [@twall](https://github.com/twall). +* Fix NPE if `Thread.getContextClassLoader()` returns `null` - [@twall](https://github.com/twall). + +Release 3.5.1 +============= + +Bug Fixes +--------- +* Fix bug where string fields sometimes failed to be writtern - [@twall](https://github.com/twall) (roman kisluhin). +* [PR#145](https://github.com/twall/jna/pull/145): Fix `Netapi32Util.getDomainTrusts()` returns "empty" domain object - [@aikidojohn](https://github.com/aikidojohn). +* [PR#145](https://github.com/twall/jna/pull/145): Fix `Netapi32.getDC()` - added missing fields in `DOMAIN_CONTROLLER_INFO` - [@aikidojohn](https://github.com/aikidojohn). +* [PR#151](https://github.com/twall/jna/pull/151): 'platform.jar' in the dist directory was not updated for release 3.5.0. (The 'platform.jar' published to maven central was correct.) + +Release 3.5.0 +============= + +Features +-------- +* [#62](https://github.com/twall/jna/issues/62) If a callback is required to reside in a DLL, use [`DLLCallback`](http://twall.github.com/jna/3.5.1/javadoc/com/sun/jna/win32/DLLCallback.html) to tag your Callback object - [@twall](https://github.com/twall). +* `Structure.getFieldOrder()` supersedes `Structure.setFieldOrder()` and is now required - [@twall](https://github.com/twall). +* Search `~/Library/Frameworks` and `/Library/Frameworks` on OSX - [@shaneholloway](https://github.com/shaneholloway). +* Automatic cleanup of native threads (based on suggestions from neil smith) - [@twall](https://github.com/twall). +* Add `android-arm` target - [@ochafik](https://github.com/ochafik), [@twall](https://github.com/twall). +* Add `jna.tmpdir` to override temporary JNA storage location - [@twall](https://github.com/twall). +* Add `EXTRA_MAKE_OPTS` ant property to override make variables - [@twall](https://github.com/twall). +* Add `Library.OPTION_OPEN_FLAGS` to customize dlopen behavior - [@twall](https://github.com/twall). +* [#113](https://github.com/twall/jna/issues/113), [#114](https://github.com/twall/jna/issues/114): Add support for GNU/kFreeBSD and debian multi-arch distros - [@twall](https://github.com/twall). + +Bug Fixes +--------- +* Fix `Advapi32Util.registryGetValues()` tried to allocate memory for a zero-length `REG_BINARY` value - [@phailwhale22](https://github.com/phailwhale22). +* Fix crash in direct mode callbacks with certain type conversions - [@twall](https://github.com/twall). +* More thoroughly propagate unexpected exceptions generated in jnidispatch - [@twall](https://github.com/twall). +* Cleanup maven poms and publishing to central repo - [@bhamail](https://github.com/bhamail). +* [#129](https://github.com/twall/jna/issues/129): Allow `Memory` field in structure - [@twall](https://github.com/twall). +* Preserve `PointerType` fields on `Structure.read()` if unchanged - [@twall](https://github.com/twall). +* [#128](https://github.com/twall/jna/issues/128): Fix masking extracting DWORD upper and lower WORD values - [@twall](https://github.com/twall). +* [#135](https://github.com/twall/jna/issues/135): Fix for `Advapi32Util.registryGetValues()` when reading zero length values - [@danwi](https://github.com/danwi). + +Release 3.4.2 +============= + +Features +-------- +* Add `platform.win32.Kernel32.GetEnvironmentVariable` and `platform.win32.Kernel32Util.getEnvironmentVariable` - [@dblock](https://github.com/dblock). +* Moved `Kernel32.dll` function definitions from `WinNT.java` into `Kernel32.java` - [@dblock](https://github.com/dblock). +* Provide `toPointer()` methods on all `_PTR` types (platform win32) - [@twall](https://github.com/twall). +* Provide `ant -Dskip-native` to skip platform native build - [@twall](https://github.com/twall). +* Provide `ant -Dheadless=true` to run unit tests headless - [@twall](https://github.com/twall). +* Added Windows dev environment instructions - [@twall](https://github.com/twall). + +Bug Fixes +--------- +* Ensure platform win32 classes use unsigned where appropriate (`ULONG_PTR`, `UINT_PTR`, `ULONGLONG`, `WORD`, `DWORDLONG`) - [@twall](https://github.com/twall). +* [#71](https://github.com/twall/jna/issues/71), [#73](https://github.com/twall/jna/issues/73): Fix OSGI entries in manifest - [@twall](https://github.com/twall). +* [#78](https://github.com/twall/jna/issues/78): Fix NPE in `platform.win32.Netapi32Util.getDomainTrusts` - [@dblock](https://github.com/dblock). +* Fix: auto-sync memory for `struct**` arguments (array of struct pointers) - [@twall](https://github.com/twall). +* Fix: `platform.win32.Secur32.AcquireCredentialsHandle`, `InitializeSecurityContext` and `AcceptSecurityContext` on Win32 64-bit - [@dblock](https://github.com/dblock). +* Fix: avoid overwriting native `char *` or `wchar_t *` fields within structures when unmodified (similar to current operation with pointers) - [@twall](https://github.com/twall). +* Fix: `platform.win32.DsGetDC.DS_DOMAIN_TRUSTS` and `DsEnumerateDomainTrusts` on Win32 64-bit - [@trejkaz](https://github.com/trejkaz). +* Fix: Crash freeing the wrong pointer in `Netapi32Util.getDomainTrusts` - [@trejkaz](https://github.com/trejkaz). +* [#100](https://github.com/twall/jna/issues/100): Fix `platform.win32.W32FileMonitor` - [@dblock](https://github.com/dblock). +* Return INT_PTR from `platform.win32.Shell32.ShellExecute`, since returning +`HINSTANCE` is useless. +* Fix runtime error in some instances where Structure.setFieldOrder is used (never return self when sharing AutoAllocated memory). +* [#107](https://github.com/twall/jna/issues/107): `Structure.clear()` always calls `ensureAllocated()` to avoid NPE. +* Ensure internal memory pointer is *always* allocated when calling `Structure.useMemory()`, even if layout is not yet determined. + +Release 3.4.1 +============= + +Features +-------- +* Add 'unsigned' modifier to IntegerType. +* Add to `platform.win32.User32`: `GetLastInputInfo`. +* Add `platform.win32.WinNT.GetFileType` and `platform.win32.Kernel32Util.getFileType`. +* Add to `platform.win32.Kernel32Util`: `getFileType`. + +Bug Fixes +--------- +* Re-build linux-amd and linux-i386 against older versions of glibc (2.2.5 and +2.1.3 respectively). +* Properly initialize first printer info struct in winspool library. +* Properly support getting and setting zero-array-length `REG_MULTI_SZ` values on Win32. +* Fixed SID in Win32 `USER_INFO_23` and `GROUP_INFO_3`. +* Fixed passing domain name into Win32 `Netapi32Util.getUserInfo`. + +Release 3.4.0 +============= + +Features +-------- +* Provide `jna.nosys=true` to avoid loading any system-provided JNA (useful for local build/development). +* Allow override of default jnidispatch library name with `jna.boot.library.name` system property. +* Throw an Error if a system install of JNA is incompatible or if JNA's JNI library does not match. +* Disable automatic jnidispatch unpacking with `jna.nounpack=true`. +* Automatically look up system error messages for LastErrorException. +* Improved callback thread-mapping support; re-use, rename, and group callback +threads. +* Cache structure layout results, improving performance of structure creation. +* linux/arm 32-bit support (hardware provided by Alex Lam). +* linux/ppc 32-bit support (hardware provided by Fritiof Hedman). +* Preliminary linux/ia64, linux/ppc64 support (thanks to Laurent Guerby and the GCC compile farm). +* Windows CE/Mobile support (w32ce-arm) (resources provided by andrea antonello and Hydrologis SRL). +* linux multi-arch support (kohsuke). +* Added REG_QWORD registry type support +* Add to `platform.unix.x11`: `XGrabKey`, `XUngrabKey`, `XSetErrorHandler`. +* Add to `platform.mac.Carbon`: `GetEventDispatcherTarget`, `InstallEventHandler`, `RegisterEventHotKey`, `GetEventParameter`, `RemoveEventHandler`, `UnregisterEventHotKey`. +* Add to `platform.win32.Kernel32`: `CopyFile`, `MoveFile`, `MoveFileEx`, `CreateProcess`, `SetEnvironmentVariables`, `GetFileTime`, `SetFileTime`, `SetFileAttributes`, `DeviceIoControl`, `GetDiskFreeSpaceEx`, `CreateToolhelp32Snapshot`, `Process32First`, `Process32Next`. +* Add to `platform.win32.Msi`: `MsiGetComponentPath`, `MsiLocateComponent`, `MsiGetProductCode`, `MsiEnumComponents`. +* Add to `platform.win32.User32`: `RegisterHotKey`, `UnregisterHotKey` +* Add to `platform.win32.SetupApi`: `SetupDiGetClassDevs`, `SetupDiDestroyDeviceInfoList`, `SetupDiEnumDeviceInterfaces`, `SetupDiGetDeviceInterfaceDetail`, `SetupDiGetDeviceRegistryProperty`. +* Add `platform.win32.Shell32.ShellExecute`. +* Add to `platform.win32.User32`: `SetParent`, `IsWindowVisible`, `MoveWindow`, `SetWindowPos`, `AttachInputThread`, `SetForegroundWindow`, `GetForegroundWindow`, `SetFocus`, `SendInput`, `WaitForInputIdle`, `InvalidateRect`, `RedrawWindow`, `GetWindow`, `UpdateWindow`, `ShowWindow`, `CloseWindow`. +* Add to `platform.win32.Version`: `GetFileVersionInfoSize`, `GetFileVersionInfo`, `VerQueryValue`. +* Add to `platform.win32.Advapi32`: `GetFileSecurity`, `RegQueryValueEx(...Long...)`. +* Add to `platform.win32.Netapi32`: `NetUserGetInfo`. + +Bug Fixes +-------- +* Revise cleanup of in-use temporary files on win32 (issue 6). +* Fix structure alignment issues on linux/ppc. +* Fix structure alignment issues on linux/arm. +* Account for NIO Buffer position (JIRA issue 185). +* Avoid crash with very long Strings (> 150k in length). +* Fix bug tracking Memory with an associated direct ByteBuffer. +* Fix bug handling structs by value when type mappers are in effect (JIRA issue 188). + +Release 3.3.0 +============= + +Features +-------- + +* Facilitate `Memory` subclasses (jbellis). +* Allow multiple fields of the same type in Unions (Francis Barber). +* Add `platform.win32.Advapi32.AdjustTokenPrivileges`, `platform.win32.Advapi32.LookupPrivilegeName`, `platform.win32.Advapi32.LookupPrivilegeValue`, `platform.win32.Advapi32.ImpersonateSelf`. +* Add `platform.win32.Advapi32.DuplicateTokenEx`, `platform.win32.Advapi32.CreateProcessAsUser`, `platform.win32.Kernel32.GetExitCodeProcess`, `platform.win32.Kernel32.TerminateProcess`, `platform.win32.Kernel32.ReadFile`, `platform.win32.Kernel32.CreatePipe`, `platform.win32.Kernel32.SetHandleInformation` and related constants / structures in `platform.win32.WinBase` and `platform.win32.WinNT`. Please note that the `SECURITY_ATTRIBUTES` structure has been moved from `platform.win32.WinNT` to `platform.win32.WinBase`. +* Add `platform.win32.Kernel32.DeleteFile` and `platform.win32.Kernel32Util.deleteFile`. +* Add `platform.win32.Kernel32.GetFileAttributes` and `platform.win32.Kernel32Util.getFileAttributes`. +* Add `platform.win32.Kernel32.GetTickCount`. +* Add Win32 Service functions to `platform.win32.Advapi32`. +* Add `platform.win32.W32ServiceManager` and `W32Service`. +* Add Win32 Event Logging functions to `platform.win32.Advapi32` and `platform.win32.Advapi32Util.EventLogIterator`. +* `platform.win32.Advapi32Util.registryCreateKey` returns `true` if key was created, `false` if it already exists. +* Add `REG_BINARY`, `REG_EXPAND_SZ` and `REG_MULTI_SZ` support to `platform.win32.Advapi32Util` registry functions. +* Reduce JNI crossings in a number of native methods, moving object creation out into pure Java code. + +Bug Fixes +--------- + +* Move all native functions into `com.sun.jna.Native`, to ensure that all dependent classes must be disposed before the `Native` class is unloaded. Note that this change is incompatible with all previous JNA native libraries. +* Fix `platform.win32.Kernel32.GetNativeSystemInfo` and `GetSystemInfo` AV on Win64. +* Fix several potential minor bugs as reported by TvT. +* Fix bug in Structure.StructureSet.toString (Blair Zajac), exposed by Tomcat ThreadLocal cleanup. +* Fix several bugs when using Structure(Pointer) ctor and array fields (Samuel Audet). + +Release 3.2.7 +============= + +Features +-------- + +* Add native peer value accessors for Pointer +* The `jna.library.path` property is now re-evaluated whenever a native library is loaded. Previously this value was cached when the JNA classes loaded. +* `Native.loadLibrary` can now load `.drv` files. +* Refactor `com.sun.jna.platform.win32.WINBASE` into `WinDef`, `WinNT` and `BaseTSD`, matching Windows SDK headers. +* Refactor constants from `com.sun.jna.platform.win32.GDI32` into `WinGDI`, matching Windows SDK headers. +* Refactor constants from `com.sun.jna.platform.win32.User32` into `WinUser`, matching Windows SDK headers. +* Refactor `platform.win32.WinNT.LARGE_INTEGER` into a union. +* Add `platform.win32.ObjBase`, `com.sun.jna.platform.win32.Ole32.CoInitializeEx`, `CoUninitialize`, and `CoCreateInstance`. +* Add `platform.win32.Oleaut32.SysAllocString` and `SysFreeString`. +* Add `platform.win32.Secur32.ImpersonateSecurityContext` and `RevertSecurityContext`. +* Add `platform.win32.WinNT.WELL_KNOWN_SID_TYPE`, `SECURITY_MAX_SID_SIZE` and other related SID-related constants. +* Add `platform.win32.Advapi32.CreateWellKnownSid` and `IsWellKnownSid` and `com.sun.jna.platform.win32.Advapi32Util.isWellKnownSid`. +* Add `platform.win32.Kernel32.GetVersion`, `GetVersionEx`, `GetSystemInfo`, `GetNativeSystemInfo`, `GlobalMemoryStatusEx`, `GetLogicalDriveStrings` and `IsWow64Process`. +* Add `platform.win32.Kernel32Util.getLogicalDriveStrings`. +* Add `platform.win32.User32.GetSystemMetrics`. +* Add `platform.win32.BaseTSD.DWORD_PTR`. +* Add `platform.win32.WinBase.SYSTEM_INFO` and `MEMORYSTATUSEX`. +* Add `platform.win32.WinNT.OSVERSIONINFOEX`, `VER` constants. +* Add `platform.win32.WinDef.ULONGLONG` and `DWORDLONG`. +* Add `platform.win32.Shell32.SHGetDesktopFolder` (prep work for Com4JNA). +* Add `platform.win32.Winspool.GetPrinterInfo`. +* Add `platform.win32.WinspoolUtil.getPrinterInfo1`. +* Add `platform.win32.GDI32.GetDeviceCaps`. +* Add `platform.win32.GDI32.GetDIBits`. + +Bug Fixes +--------- + +* Fix `ClassCastException` in `Structure.equals` (issue 152). +* Fix bug initializing a structure object from existing memory when the structure has initialized fields (issue 133). +* Fix NPE reading an array of string from a pointer when an element of the array is `NULL` (issue 151). +* Avoid calling `UnregisterNatives` in native code (issue 154). +* Compare unpacked library path against canonical (long) filename (issue 156). +* Fix `read()` of uninitialized memory in `platform.win32.Advapi32Util.getTokenGroups` and `getTokenAccount`. +* Fix `com.sun.jna.platform.win32.Secur32.QuerySecurityContextToken` to take a `CtxtHandle` instead of `PSecHandle`. +* Fix definition of BITMAPINFO (platform/win32). + +Release 3.2.5 +============= + +Features +-------- + +* Split code in examples.jar into a contrib platform.jar package and individual packages for demos. +* Fix Eclipse build and added Eclipse projects for all contrib samples, import projects from jnalib and contrib. +* Ensure Structure fields correctly ordered when inherited. +* Use explicit Structure field whenever provided, regardless of whether the VM requires it. +* Add Win32 mappings for two dozen functions from Kernel32.dll, Advapi32.dll, Netapi32.dll, Secur32.dll, NtDll.dll, Ole32.dll, Shell32.dll and Crypt32.dll to com.sun.jna.platform.win32. +* Port parts of WinError.h, WinNT.h, LMAccess.h, LMCons.h, LMErr.h, LMJoin.h, NTStatus.h, ShlObj.h, WinDef.h, ShellApi.h, Wdm.h, WinReg.h, WinCrypt.h, Sspi.h, Guid.h, NtSecApi.h and DsGetDc.h. +* Add Win32 simplified utility interfaces Kernel32Util, Advapi32Util, Netapi32Util, Crypt32Util, NtDllUtil, Shell32Util, Ole32Util and Secur32Util to com.sun.jna.platform.win32. +* Support unicode paths in W32FileUtils. +* Fix exception during dispose in W32FileMonitor. + +Bug Fixes +--------- + +* Provide String.replace for 1.4 compatibility. +* Avoid allocating memory when Structure is provided a pointer in the ctor. +* Ensure proper value returned in Pointer.getValue() for non-null, unchanged NIO Buffer values. +* Use 1.4-compatible URI generation (issue 149). + +Release 3.2.4 +============= + +Features +-------- + +* Make Pointer ctor public. +* Provide access to Function objects for arbitrary Pointer values. +* Add linux/ia64 binaries (bpiwowar). See issue 134 patch. + +Bug Fixes +--------- + +* Use a more robust method to decode a file-based URL (issue 135). + +Release 3.2.3 +============= + +Features +-------- + +* Include version information in code in case package information lost. + +Bug Fixes +--------- + +* Fix WindowUtils exception on mouse over TrayIcon. +* Fix bug toggling windows transparent/opaque (win32/OSX). +* Avoid overwriting unchanged Pointer values in arrays (function calls with Pointer[] and Structure.read). +* Ensure Structure fields marked `final` are never written. +* Fix bug preventing proper population Structure.ByReference fields on Structure read. +* Ensure double buffering is disabled in components added to a transparent window. +* Fix UnsatisfiedLinkError attempting to load system libraries under Web Start. +* Fix loading Web Start-provided libraries on OSX (libraries must have a .jnilib suffix under Web Start). +* Properly include sources in Maven zip file (Issue 129). + +Release 3.2.2 +============= + +Features +-------- + +* Provide length-specified Pointer.getStringArray() + +Bug Fixes +--------- + +* Fix crash with direct mapping if NULL struct* used (Issue 125). +* Fix case where null-valued Structure fields would get non-null values on write. +* Synch callback Structure/Structure[] arguments on callback return. +* Fix NPE when mapping an interface to the current process. +* Automatically load proper C library version from current process on Linux (avoids crashing bug on Ubuntu with libc-i686 packages active). +* Avoid scanning structure contents in Structure.toString if contents aren't actually used. + +Release 3.2.1 +========== + +Features +-------- + +* Add HRESULT, LONG mapping to W32API (marc strapetz). + + +Bug Fixes +--------- + +* Fix definition of HWND_BROADCAST in W32API. +* Fix memory alignment checking (Issue 121). +* Fix Structure equals/hashCode implementation, based on current Java fields rather than strictly native memory contents. Avoid using equals/hashCode when avoiding recursive reads/writes. + +Release 3.2.0 +============= + +Features +-------- + +* Handle String, Structure, Callback, Buffer, and primitive arrays in direct mappings. Handle NativeMapped and TypeMapper, with optimized paths for IntegerType and PointerType. +* Optionally throw errno/GetLastError as an exception. This is preferred to (and more efficient than) calling Native.getLastError(). +* Unload/delete native library unpacked from jna.jar if Native class is garbage collected. Only install shutdown hook if using the system class loader. +* Auto-write contiguous Structure arrays when first element is written. +* Support NativeMapped[] as function arguments for interface-mapped libraries (Issue 90). +* Enable function lookup within current process on Windows. + +Bug Fixes +--------- + +* Restrict recursive structure reads/writes by thread instead of globally. This avoids potentially missed reads/writes with concurrent access (Issue 120). +* Ensure Memory is not GC'd and freed if direct NIO buffers mapped to it are extant. +* Allow types derived from java.nio.Buffer as Structure fields. + +Release 3.1.0 +============= + +Features +-------- + +* Add raw JNI mapping of static Java methods. Performance is about 10X that of traditional JNA interface mapping, although with less type conversion functionality. +* Add library option to allow passing/return of Java Objects. +* Allow handling of uncaught callback exceptions (Issue 63). +* Object oriented interface to X server (see contrib/x11) +* Make Memory class more accessible. +* Provide Structure ctor with Pointer argument (issue 102). +* Allow implicit library access to current process on linux (issue 98). +* Open all shared libraries with RTLD_GLOBAL, if applicable. This was the default behavior on OSX and changes the default behavior on linux. +* Allow NIO Buffer as Structure field (with limitations) (Issue 57) +* Add `size_t` size. + +Bug Fixes +--------- + +* Run tests with libjsig.so, if available, which fixes some crashes when running tests on 64-bit platforms. +* Fix Issue 104. +* Fix Issue 94 (Java 1.6 update 10 regression). +* Fix Issue 51 (Java 1.6 update 10 regression). +* Fix Issue 95. +* Fix Issue 101. +* Fix Issue 111, memory leak with String-returning Callback. +* Fix missing storage of union type information (affects usage of struct/union by value as argument and return type). +* Remove non-functional Structure ctors requiring explicit size. + +Release 3.0.9 +============= + +Bug Fixes +--------- + +* Fix issue 93 by only manually searching jna.library.path, then falling back to passing the mapped library name to dlopen/LoadLibrary. This fixes an issue in JRUBY where the incorrect libc.so.6 was being loaded. + +Release 3.0.8 +========== + +Features +-------- + +* Auto-map Pointer[]/String[]/WString[] return values. +* Provide utility functions to convert String to primitive array. +* Add jna.library.boot.path property to define the directory that the native stub library is loaded from + +Release 3.0.7 +========== + +Features +-------- + +* Improve Win32 loading of libraries with dependencies. + +Bug Fixes +--------- + +* Fix bug reading structures with PointerType fields, introduced with Pointer field preservation fix. + +Release 3.0.6 +============= + +Features +-------- + +* Allow arbitrary callback method names if only one method is defined in the class which implements Callback (colinwalters). +* Allow specification of callback type mappers by using a TYPE_MAPPER field (colinwalters). +* Allow uninitialized (null-valued) boxed primitives in Structures (colinwalters). +* Add convenience methods to set active Union field and value simultaneously (xylo). +* Augment Union read/writeField to set the active field. +* Allow Structure auto-synch across native calls to be disabled. +* Win64 support. + +Bug Fixes +--------- + +* Avoid overwriting unchanged Structure fields of type Pointer. +* Avoid more content dragging on OSX or warn if it's too late. +* Fix UnsatisfiedLinkError using transparent window on Win2K. +* Fix memory leak with callbacks called from native threads with no Java context (johnwallace). +* Defer structure size calculation if type mapper not yet set, allowing type mapper to be set in derived constructors (colinwalters). +* Ensure structure memory is allocated in Structure.read/writeField. + +Release 3.0.5 +============= + +Features +-------- + +* Allow explicit declaration of field order for VMs which have an unpredictable field order. +* Check for w32 libraries with a "lib" prefix in addition to normal lookup. +* Allow String[]/WString[] as callback argument/return value (assume NULL-terminated array). +* Add Solaris8 compatibility to sunos-sparc build (Corey Puffalt). +* Look up libraries using web start library path, if appropriate (Corey Puffalt). +* Use constants to return integer boolean values. + +Bug Fixes +--------- + +* Properly track cursor on alpha-masked windows. +* Avoid searching /lib or /usr/lib on 64-bit Linux. +* Avoid using incorrect version of a library when both 32- and 64-bit versions are found. +* Avoid transparent window events always dragging window bug on OSX. +* Fix division by zero error calculating structure size on OSX/ppc. +* Avoid overwriting initialized NativeMapped Structure fields when calculating structure size. +* Fix NPE reading back into StringArray. + +Release 3.0.4 +============= + +Features +-------- + +* Automatically write contents of Structure.ByReference fields on Structure.write(). +* Use the actual parameter type in Function invocations if no parameter type information is available (whether method is missing or untyped varargs). +* Augmented X11 library mappings (xylo). +* Support read/write of NativeMapped arrays within Structure (notably NativeLong). + +Bug Fixes +--------- + +* Fix library load error when /usr/lib32 and /usr/lib both exist (linux) (Marek Slama). +* Avoid incorrect matches against libraries named with the same prefix (e.g. libc-client.so vs libc.so) (xylo). +* Properly handle arrays of NativeMapped (e.g. NativeLong) as a Structure field (stefan endrullis). +* Ensure structure size calculated prior to setting union active type. +* XID is 64-bits on 64-bit X clients (xylo). +* Ensure proper arch name is used on Debian (amd64 instead of x86_64). + +Release 3.0.3 +============= + +Features +-------- + +* Enable build/run using IBM's J9 VM (leonardo). +* Make StdCallFunctionMapper attempt a leading underscore if the simpler mapping doesn't work. +* Allow Structure.read to overwrite final fields (may not work on some 1.4 VMs). + +Bug Fixes +--------- + +* Fix NPE when passing an array of Structure.ByReference. +* Compare entire linux library version when finding a match. +* Don't pass struct by value unless the method signature declares it. +* Restrict custom first element structure alignment to OSX/ppc. +* Improve performance and reduce memory footprint for window masks. Optimize polygon-based masks on w32. Use XFillRectangles on X11. +* Fix linkage settings on sunos-amd64 to avoid relocation errors. +* Fix callback allocation code on w32, solaris, freebsd, darwin (libffi was misconfigured). +* Fix bug when NativeMapped fields are used in a Structure.ByValue instance. +* Fix NPE calling Structure.read() before memory is initialized. +* Fix NPE calling Structure.read/write with uninitialized NativeMapped fields. + +Release 3.0.2 +============= + +Features +-------- + +* Attempt to force unload of jnidispatch library prior to deleting it (w32). +* Added amd64 targets for OSX, FreeBSD, and Solaris. + +Bug Fixes +--------- + +* Reduce space allocated for invocation arguments. +* Fix NPE when NativeMapped type is used in a Structure. +* Fix some X11 type mappings for 64-bit. +* Fix OSX Leopard/JRE1.5+ window transparency. +* Fix window alpha compositing on X11. +* Fix loading of libraries with unicode names on OSX. + +Release 3.0.1 +============= + +Features +-------- + +* Improve transparent window drawing performance on w32 +* Use closure allocation from libffi + +Bug Fixes +--------- + +* Ensure nested structure arrays initialized with Structure.toArray use the appropriate native memory. +* Ensure structure size is calculated prior to converting to array +* Avoid creating new windows when setting a window mask +* Fix bug in Pointer.setChar. + +Release 3.0 +=========== + +Features +-------- + +* More supported platforms, via GCC's libffi (wmeissner) +* Support struct by value as parameter and return value (duncan) +* Support struct by reference within structures +* Provide access to native peer for java.awt.Component +* Provide access to native peer on OS X. +* Support MINGW32 builds (fullung) +* Allow per-field Structure read/write by field name +* Avoid writing Structure fields marked 'volatile' +* Read and wrap function pointers in Structure fields when read with a Java proxy to allow easy Java-side invocation (Ken Larson) +* Support array-backed Buffers as arguments (wmeissner) +* Auto-conversion of custom types (wmeissner) +* Allow pointer type-safety +* Optional VM crash protection, via Native.setProtected(boolean) +* Auto-convert WString[] +* Provide library synchronization wrapper similar to Collections.synchronizedX +* Support lookup of OSX framework libraries by name +* Explicit access to shared library global data +* Invocation interception to facilitate translation of C preprocessor macros and inline functions +* Provide utility to determine Web Start native library cache location; auto-include this path if jnidispatch is included as a <nativelib> (robertengels) +* Provide access to aligned memory +* Versioning information embedded in jna.jar and native library + +Bug Fixes +--------- + +* Avoid attempts to free native library if it failed to load (wmeissner) +* Explicitly check method signatures for varargs instead of heuristically guessing (wmeissner) +* Disallow declaring Pointer-derived fields in Structures (Function, Memory) +* Ensure Object.toString/hashCode/equals methods are intercepted on proxyied interfaces +* Update X11 library for 64-bit use (wmeissner) +* Properly map arrays of char*/wchar_t* under w32 +* Allow Pointer[] as a Structure field and Function argument +* Fix some misleading Structure error messages +* Properly preserve/return GetLastError/errno after native calls +* Allocate executable memory on w32 to avoid errors with hardware-enforced data execution protection (DEP) +* Fix VM crash on w32 stdcall callbacks +* Use long offsets and sizes rather than ints (64-bit safe) +* Properly clean up references and release closure memory on JNI_Unload +* Use simpler AWT/JAWT library loading workaround +* Avoid changing array references within a Structure on read + +Release 2.5 +=========== + +Features +-------- + +* Unions +* Optimized shaped windows (chris deckers & olivier chafik); instantiation time improved by about 2-3 orders of magnitude for large, mostly contiguous shapes +* Provide type mapping in callback arguments/results +* Provide access to ByteBuffer direct address as a Pointer +* Provide customization of native string encoding with jna.encoding system property + +Bug Fixes +--------- + +* Properly handle VMs with reversed Structure member storage +* Avoid making window undecorated when clearing window mask on X11 +* Fix structure alignment bug on OSX/PPC when first element is > 4 bytes in size +* Clearing OSX window mask by setting to MASK_NONE now works properly +* Avoid index exceptions if native buffers are not NUL-terminated on string conversions +* Write initialized Structure[] argument memory prior to function calls +* Fix IllegalArgumentException reading WString into a Structure +* Clear memory when allocating a structure block (fixes VM crash) +* Remove versioned JAWT dependency on OSX, allowing use on 10.3/JRE1.4. + +Release 2.4 +=========== + +Features +-------- + +* Explicitly support unaligned structures +* Auto-reallocate structure arrays +* Automatic handling of w32 UNICODE/ASCII variants +* Automatic mapping of decorated w32 stdcall function names +* Customizable, automatic type conversion of arguments and results (wmeissner) +* Support char*[] arguments as Java String[] +* Structure supports Callback members (wmeissner) +* getByteBuffer from Pointer/Memory (wmeissner) +* Allow GC of native libraries +* Facilitate use from non-Java contexts (JRuby et al.) (wmeissner) +* Improve library path searching (wmeissner) +* Handle Structure[] arguments +* Handle native long arguments and return values +* Handle direct and array-based ByteBuffer arguments (wmeissner) +* Change default w32 build to use GCC (it's free, yo) + +Bug Fixes +--------- + +* Structure.toArray failed to initialize members +* Disallow explicit free of Structure/Memory +* Ensure native libraries are only loaded once until released +* Properly handle NULL when the return value is a Structure +* Proper conversion to wchar_t on linux +* Copy full length of Java strings to C strings instead of stopping when a NUL character is encountered diff --git a/src/com/sun/jna/Function.java b/src/com/sun/jna/Function.java index a698ebb5d6..c2b7f578c0 100644 --- a/src/com/sun/jna/Function.java +++ b/src/com/sun/jna/Function.java @@ -286,10 +286,11 @@ public Object invoke(Class returnType, Object[] inArgs, Map options) { TypeMapper mapper = (TypeMapper)options.get(Library.OPTION_TYPE_MAPPER); Method invokingMethod = (Method)options.get(OPTION_INVOKING_METHOD); + Class[] paramTypes = invokingMethod != null ? invokingMethod.getParameterTypes() : null; boolean allowObjects = Boolean.TRUE.equals(options.get(Library.OPTION_ALLOW_OBJECTS)); for (int i=0; i < args.length; i++) { args[i] = convertArgument(args, i, invokingMethod, - mapper, allowObjects); + mapper, allowObjects, paramTypes != null ? paramTypes[i] : null); } Class nativeType = returnType; @@ -467,7 +468,7 @@ private Pointer invokePointer(int callFlags, Object[] args) { private Object convertArgument(Object[] args, int index, Method invokingMethod, TypeMapper mapper, - boolean allowObjects) { + boolean allowObjects, Class expectedType) { Object arg = args[index]; if (arg != null) { Class type = arg.getClass(); @@ -556,9 +557,29 @@ else if (NativeMapped[].class.isAssignableFrom(argClass)) { return new NativeMappedArray((NativeMapped[])arg); } else if (Structure[].class.isAssignableFrom(argClass)) { + // If the signature is Structure[], disallow + // Structure.ByReference[] and Structure.ByReference elements Structure[] ss = (Structure[])arg; Class type = argClass.getComponentType(); boolean byRef = Structure.ByReference.class.isAssignableFrom(type); + if (expectedType != null) { + if (!Structure.ByReference[].class.isAssignableFrom(expectedType)) { + if (byRef) { + throw new IllegalArgumentException("Function " + getName() + + " declared Structure[] at parameter " + + index + " but array of " + + type + " was passed"); + } + for (int i=0;i < ss.length;i++) { + if (ss[i] instanceof Structure.ByReference) { + throw new IllegalArgumentException("Function " + getName() + + " declared Structure[] at parameter " + + index + " but element " + i + + " is of Structure.ByReference type"); + } + } + } + } if (byRef) { Structure.autoWrite(ss); Pointer[] pointers = new Pointer[ss.length + 1]; diff --git a/src/com/sun/jna/Structure.java b/src/com/sun/jna/Structure.java index 64df23deb5..cb80d08fb3 100644 --- a/src/com/sun/jna/Structure.java +++ b/src/com/sun/jna/Structure.java @@ -606,12 +606,16 @@ static Structure updateStructureByReference(Class type, Structure s, Pointer add Structure s1 = (Structure)reading().get(address); if (s1 != null && type.equals(s1.getClass())) { s = s1; + s.autoRead(); } else { s = newInstance(type, address); + s.conditionalAutoRead(); } } - s.autoRead(); + else { + s.autoRead(); + } } return s; } diff --git a/test/com/sun/jna/ArgumentsMarshalTest.java b/test/com/sun/jna/ArgumentsMarshalTest.java index b373d46fe7..da2afefedb 100644 --- a/test/com/sun/jna/ArgumentsMarshalTest.java +++ b/test/com/sun/jna/ArgumentsMarshalTest.java @@ -406,6 +406,29 @@ public void testRejectNoncontiguousStructureArrayArgument() { } } + public void testRejectIncompatibleStructureArrayArgument() { + TestLibrary.CheckFieldAlignment s1 = new TestLibrary.CheckFieldAlignment.ByReference(); + TestLibrary.CheckFieldAlignment[] autoArray = (TestLibrary.CheckFieldAlignment[])s1.toArray(3); + try { + lib.modifyStructureArray(autoArray, autoArray.length); + } + catch(IllegalArgumentException e) { + } + TestLibrary.CheckFieldAlignment.ByReference[] byRefArray = + (TestLibrary.CheckFieldAlignment.ByReference[])s1.toArray(3); + try { + lib.modifyStructureArray(byRefArray, byRefArray.length); + } + catch(IllegalArgumentException e) { + } + TestLibrary.CheckFieldAlignment[] arrayWithRefElements = { autoArray[0], autoArray[1], autoArray[2] }; + try { + lib.modifyStructureArray(arrayWithRefElements, arrayWithRefElements.length); + } + catch(IllegalArgumentException e) { + } + } + /** When passing an array of struct* to native, be sure to invoke Structure.write() on each of the elements. */ public void testWriteStructureByReferenceArrayArgumentMemory() { diff --git a/test/com/sun/jna/DirectArgumentsMarshalTest.java b/test/com/sun/jna/DirectArgumentsMarshalTest.java index f47fb2e3c5..7c2ed4678c 100644 --- a/test/com/sun/jna/DirectArgumentsMarshalTest.java +++ b/test/com/sun/jna/DirectArgumentsMarshalTest.java @@ -124,6 +124,7 @@ public void testStringArrayArgument() { } public void testWriteStructureArrayArgumentMemory() { } public void testUninitializedStructureArrayArgument() { } public void testRejectNoncontiguousStructureArrayArgument() { } + public void testRejectIncompatibleStructureArrayArgument() { } public void testWideStringArrayArgument() { } public void testPointerArrayArgument() { } public void testNativeMappedArrayArgument() { } From 9ac8de0f5d4ba151dd29f5a0d6cdc628e0315bdd Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 11 Jun 2013 04:36:35 -0400 Subject: [PATCH 03/21] add some Function tests --- test/com/sun/jna/ArgumentsMarshalTest.java | 2 +- test/com/sun/jna/FunctionTest.java | 57 ++++++++++++++++++++++ test/com/sun/jna/ReturnTypesTest.java | 6 +++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 test/com/sun/jna/FunctionTest.java diff --git a/test/com/sun/jna/ArgumentsMarshalTest.java b/test/com/sun/jna/ArgumentsMarshalTest.java index da2afefedb..018ae27d4a 100644 --- a/test/com/sun/jna/ArgumentsMarshalTest.java +++ b/test/com/sun/jna/ArgumentsMarshalTest.java @@ -505,7 +505,7 @@ public void testLongArrayArgument() { } } - public void testInvalidArgument() { + public void testUnsupportedJavaObjectArgument() { try { lib.returnBooleanArgument(this); fail("Unsupported Java objects should be rejected"); diff --git a/test/com/sun/jna/FunctionTest.java b/test/com/sun/jna/FunctionTest.java new file mode 100644 index 0000000000..867660e45a --- /dev/null +++ b/test/com/sun/jna/FunctionTest.java @@ -0,0 +1,57 @@ +/* Copyright (c) 2007 Timothy Wall, All Rights Reserved + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + *

+ * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +package com.sun.jna; + +import java.util.Arrays; +import java.util.List; + +import junit.framework.TestCase; + +/** Exercise the {@link Function} class. + * + * @author twall@users.sf.net + */ +//@SuppressWarnings("unused") +public class FunctionTest extends TestCase { + + public void testTooManyArgs() { + NativeLibrary lib = NativeLibrary.getInstance(Platform.C_LIBRARY_NAME); + Function f = lib.getFunction("printf"); + Object[] args = new Object[Function.MAX_NARGS+1]; + // Make sure we don't break 'printf' + args[0] = getName(); + try { + f.invokeInt(args); + fail("Arguments should be limited to " + Function.MAX_NARGS); + } + catch(UnsupportedOperationException e) { + } + assertEquals("Wrong result from 'printf'", getName().length(), f.invokeInt(new Object[] { getName() })); + } + + public void testUnsupportedReturnType() { + NativeLibrary lib = NativeLibrary.getInstance(Platform.C_LIBRARY_NAME); + Function f = lib.getFunction("printf"); + try { + f.invoke(getClass(), new Object[] { getName() }); + fail("Invalid return types should throw an exception"); + } + catch(IllegalArgumentException e) { + } + } + + public static void main(java.lang.String[] argList) { + junit.textui.TestRunner.run(FunctionTest.class); + } + +} diff --git a/test/com/sun/jna/ReturnTypesTest.java b/test/com/sun/jna/ReturnTypesTest.java index 51caf03707..4b7e367740 100644 --- a/test/com/sun/jna/ReturnTypesTest.java +++ b/test/com/sun/jna/ReturnTypesTest.java @@ -278,6 +278,8 @@ public void testReturnPointerArray() { Pointer[] result = lib.returnPointerArgument(input); assertEquals("Wrong array length", input.length-1, result.length); assertEquals("Wrong array element value", value, result[0]); + + assertNull("NULL should result in null return value", lib.returnPointerArgument((Pointer[])null)); } public void testReturnStringArray() { @@ -288,6 +290,8 @@ public void testReturnStringArray() { String[] result = lib.returnPointerArgument(input); assertEquals("Wrong array length", input.length-1, result.length); assertEquals("Wrong array element value", VALUE, result[0]); + + assertNull("NULL should result in null return value", lib.returnPointerArgument((String[])null)); } public void testReturnWStringArray() { @@ -298,6 +302,8 @@ public void testReturnWStringArray() { WString[] result = lib.returnPointerArgument(input); assertEquals("Wrong array length", input.length-1, result.length); assertEquals("Wrong array element value", VALUE, result[0]); + + assertNull("NULL should result in null return value", lib.returnPointerArgument((WString[])null)); } public static void main(java.lang.String[] argList) { From e8d4a3e6c01ea04783913697957d5a8fa6651dff Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 11 Jun 2013 04:50:03 -0400 Subject: [PATCH 04/21] Fix varargs tests --- src/com/sun/jna/Function.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/sun/jna/Function.java b/src/com/sun/jna/Function.java index c2b7f578c0..dc1410bd55 100644 --- a/src/com/sun/jna/Function.java +++ b/src/com/sun/jna/Function.java @@ -289,8 +289,13 @@ public Object invoke(Class returnType, Object[] inArgs, Map options) { Class[] paramTypes = invokingMethod != null ? invokingMethod.getParameterTypes() : null; boolean allowObjects = Boolean.TRUE.equals(options.get(Library.OPTION_ALLOW_OBJECTS)); for (int i=0; i < args.length; i++) { + Class paramType = invokingMethod != null + ? (isVarArgs(invokingMethod) && i >= paramTypes.length-1 + ? paramTypes[paramTypes.length-1].getComponentType() + : paramTypes[i]) + : null; args[i] = convertArgument(args, i, invokingMethod, - mapper, allowObjects, paramTypes != null ? paramTypes[i] : null); + mapper, allowObjects, paramType); } Class nativeType = returnType; From 766db7a3186da7b0bdfa40ccd12654da55d0fc96 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 11 Jun 2013 04:52:50 -0400 Subject: [PATCH 05/21] fix formatting --- src/com/sun/jna/NativeLibrary.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/com/sun/jna/NativeLibrary.java b/src/com/sun/jna/NativeLibrary.java index a9d73b248e..2cb29a1033 100644 --- a/src/com/sun/jna/NativeLibrary.java +++ b/src/com/sun/jna/NativeLibrary.java @@ -106,10 +106,10 @@ private NativeLibrary(String libraryName, String libraryPath, long handle, Map o if (Platform.isWindows() && "kernel32".equals(this.libraryName.toLowerCase())) { synchronized(functions) { Function f = new Function(this, "GetLastError", Function.ALT_CONVENTION, encoding) { - Object invoke(Object[] args, Class returnType, boolean b) { - return new Integer(Native.getLastError()); - } - }; + Object invoke(Object[] args, Class returnType, boolean b) { + return new Integer(Native.getLastError()); + } + }; functions.put(functionKey("GetLastError", callFlags, encoding), f); } } @@ -749,13 +749,13 @@ static String matchLibrary(final String libName, List searchPath) { searchPath = Arrays.asList(new String[] { lib.getParent() }); } FilenameFilter filter = new FilenameFilter() { - public boolean accept(File dir, String filename) { - return (filename.startsWith("lib" + libName + ".so") - || (filename.startsWith(libName + ".so") - && libName.startsWith("lib"))) - && isVersionedName(filename); - } - }; + public boolean accept(File dir, String filename) { + return (filename.startsWith("lib" + libName + ".so") + || (filename.startsWith(libName + ".so") + && libName.startsWith("lib"))) + && isVersionedName(filename); + } + }; List matches = new LinkedList(); for (Iterator it = searchPath.iterator(); it.hasNext(); ) { From 2fb4c9b68361a6a3fed0498a0dd521e14fca0f87 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 11 Jun 2013 05:03:32 -0400 Subject: [PATCH 06/21] add more test coverage --- test/com/sun/jna/LibraryLoadTest.java | 5 +++++ test/com/sun/jna/NativeLibraryTest.java | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/test/com/sun/jna/LibraryLoadTest.java b/test/com/sun/jna/LibraryLoadTest.java index 415eecb9b4..fbd8bc87bb 100644 --- a/test/com/sun/jna/LibraryLoadTest.java +++ b/test/com/sun/jna/LibraryLoadTest.java @@ -74,6 +74,11 @@ public void testLoadFromJNALibraryPath() { NativeLibrary.getInstance("testlib"); } + public void testLoadFromCustomPath() throws MalformedURLException { + NativeLibrary.addSearchPath("testlib-path", TESTPATH); + NativeLibrary.getInstance("testlib-path", new TestLoader(new File("."))); + } + public void testLoadFromClasspath() throws MalformedURLException { NativeLibrary.getInstance("testlib-path", new TestLoader(new File(TESTPATH))); } diff --git a/test/com/sun/jna/NativeLibraryTest.java b/test/com/sun/jna/NativeLibraryTest.java index 0c3906f3a2..c9f6bba4f9 100644 --- a/test/com/sun/jna/NativeLibraryTest.java +++ b/test/com/sun/jna/NativeLibraryTest.java @@ -122,6 +122,28 @@ public void testAliasSimpleLibraryName() throws Exception { int count2 = lib2.callCount(); assertEquals("Simple library name not aliased", count + 1, count2); } + + public void testRejectNullFunctionName() { + NativeLibrary lib = NativeLibrary.getInstance("testlib"); + try { + Function f = lib.getFunction(null); + fail("Function must have a name"); + } + catch(NullPointerException e) { + } + } + + public void testIncludeSymbolNameInLookupError() { + NativeLibrary lib = NativeLibrary.getInstance("testlib"); + try { + lib.getGlobalVariableAddress(getName()); + fail("Non-existent global variable lookup should fail"); + } + catch(UnsatisfiedLinkError e) { + assertTrue("Expect symbol name in error message: " + e.getMessage(), e.getMessage().indexOf(getName()) != -1); + } + } + public void testFunctionHoldsLibraryReference() throws Exception { NativeLibrary lib = NativeLibrary.getInstance("testlib"); WeakReference ref = new WeakReference(lib); From 3db7fc10ec46716ee824b58bb53eece54e29d18f Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 02:23:18 -0400 Subject: [PATCH 07/21] rename platform.jar to jna-platform.jar --- build.xml | 6 +++--- contrib/platform/nbproject/project.properties | 8 ++------ pom-platform.xml => pom-jna-platform.xml | 0 3 files changed, 5 insertions(+), 9 deletions(-) rename pom-platform.xml => pom-jna-platform.xml (100%) diff --git a/build.xml b/build.xml index c6b3d42a2b..c1ac74c37d 100644 --- a/build.xml +++ b/build.xml @@ -114,12 +114,12 @@ - + - + @@ -967,7 +967,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc description="Build distribution files"> - + diff --git a/contrib/platform/nbproject/project.properties b/contrib/platform/nbproject/project.properties index c0b5e09573..98034b9d57 100644 --- a/contrib/platform/nbproject/project.properties +++ b/contrib/platform/nbproject/project.properties @@ -14,17 +14,14 @@ debug.test.classpath=\ ${run.test.classpath} # This directory is removed when the project is cleaned: dist.dir=dist -dist.jar=${dist.dir}/platform.jar +dist.jar=${dist.dir}/jna-platform.jar dist.javadoc.dir=${dist.dir}/javadoc file.reference.jna.jar=../../build/jna.jar -file.reference.jna-d64.jar=../../build-d64/jna.jar file.reference.jna-test.jar=../../build/jna-test.jar -file.reference.jna-test-d64.jar=../../build-d64/jna-test.jar libs.junit.classpath=../../lib/junit.jar jar.compress=false javac.classpath=\ - ${file.reference.jna.jar}:\ - ${file.reference.jna-d64.jar} + ${file.reference.jna.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false @@ -33,7 +30,6 @@ javac.target=1.5 javac.test.classpath=\ ${javac.classpath}:\ ${file.reference.jna-test.jar}:\ - ${file.reference.jna-test-d64.jar}:\ ${build.classes.dir}:\ ${libs.junit.classpath} javadoc.additionalparam= diff --git a/pom-platform.xml b/pom-jna-platform.xml similarity index 100% rename from pom-platform.xml rename to pom-jna-platform.xml From d5669d2ae4bc17936cc5048d822c0c886009f794 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 02:23:31 -0400 Subject: [PATCH 08/21] fix javadoc warnings --- .../com/sun/jna/platform/win32/Kernel32.java | 3636 +++++++++-------- .../src/com/sun/jna/platform/win32/WinNT.java | 31 +- 2 files changed, 1837 insertions(+), 1830 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java index cd6f81084e..aa3bf9abb4 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java @@ -20,1337 +20,1339 @@ import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.W32APIOptions; +import com.sun.jna.platform.win32.WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION; + /** * Interface definitions for kernel32.dll. Includes additional * alternate mappings from {@link WinNT} which make use of NIO buffers. */ public interface Kernel32 extends WinNT { - /** The instance. */ - Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", - Kernel32.class, W32APIOptions.UNICODE_OPTIONS); - - /** - * The FormatMessage function formats a message string. The function - * requires a message definition as input. The message definition can come - * from a buffer passed into the function. It can come from a message table - * resource in an already-loaded module. Or the caller can ask the function - * to search the system's message table resource(s) for the message - * definition. The function finds the message definition in a message table - * resource based on a message identifier and a language identifier. The - * function copies the formatted message text to an output buffer, - * processing any embedded insert sequences if requested. - * - * @param dwFlags - * Formatting options, and how to interpret the lpSource - * parameter. The low-order byte of dwFlags specifies how the - * function handles line breaks in the output buffer. The - * low-order byte can also specify the maximum width of a - * formatted output line. - *

- * This version of the function assumes - * FORMAT_MESSAGE_ALLOCATE_BUFFER is not set. - * @param lpSource - * Location of the message definition. - * @param dwMessageId - * Message identifier for the requested message. - * @param dwLanguageId - * Language identifier for the requested message. - * @param lpBuffer - * Pointer to a buffer that receives the null-terminated string - * that specifies the formatted message. - * @param nSize - * This this parameter specifies the size of the output buffer, - * in TCHARs. If FORMAT_MESSAGE_ALLOCATE_BUFFER is - * @param va_list - * Pointer to an array of values that are used as insert values - * in the formatted message. - * @return If the function succeeds, the return value is the number of - * TCHARs stored in the output buffer, excluding the terminating - * null character. If the function fails, the return value is zero. - * To get extended error information, call GetLastError. - */ - int FormatMessage(int dwFlags, Pointer lpSource, int dwMessageId, - int dwLanguageId, Buffer lpBuffer, int nSize, Pointer va_list); - - /** - * Reads data from the specified file or input/output (I/O) device. Reads - * occur at the position specified by the file pointer if supported by the - * device. - * - * This function is designed for both synchronous and asynchronous - * operations. For a similar function designed solely for asynchronous - * operation, see ReadFileEx - * - * @param hFile - * A handle to the device (for example, a file, file stream, - * physical disk, volume, console buffer, tape drive, socket, - * communications resource, mailslot, or pipe). - * @param lpBuffer - * A pointer to the buffer that receives the data read from a - * file or device. - * @param nNumberOfBytesToRead - * The maximum number of bytes to be read. - * @param lpNumberOfBytesRead - * A pointer to the variable that receives the number of bytes - * read when using a synchronous hFile parameter - * @param lpOverlapped - * A pointer to an OVERLAPPED structure is required if the hFile - * parameter was opened with FILE_FLAG_OVERLAPPED, otherwise it - * can be NULL. - * @return If the function succeeds, the return value is nonzero (TRUE). If - * the function fails, or is completing asynchronously, the return - * value is zero (FALSE). To get extended error information, call - * the GetLastError function. - * - * Note The GetLastError code ERROR_IO_PENDING is not a failure; it - * designates the read operation is pending completion - * asynchronously. For more information, see Remarks. - */ - boolean ReadFile(HANDLE hFile, Buffer lpBuffer, int nNumberOfBytesToRead, - IntByReference lpNumberOfBytesRead, WinBase.OVERLAPPED lpOverlapped); - - /** - * Frees the specified local memory object and invalidates its handle. - * - * @param hLocal - * A handle to the local memory object. - * @return If the function succeeds, the return value is NULL. If the - * function fails, the return value is equal to a handle to the - * local memory object. To get extended error information, call - * GetLastError. - */ - Pointer LocalFree(Pointer hLocal); - - /** - * Frees the specified global memory object and invalidates its handle. - * - * @param hGlobal - * A handle to the global memory object. - * @return If the function succeeds, the return value is NULL If the - * function fails, the return value is equal to a handle to the - * global memory object. To get extended error information, call - * GetLastError. - */ - Pointer GlobalFree(Pointer hGlobal); - - /** - * The GetModuleHandle function retrieves a module handle for the specified - * module if the file has been mapped into the address space of the calling - * process. - * - * @param name - * Pointer to a null-terminated string that contains the name of - * the module (either a .dll or .exe file). - * @return If the function succeeds, the return value is a handle to the - * specified module. If the function fails, the return value is - * NULL. To get extended error information, call GetLastError. - */ - HMODULE GetModuleHandle(String name); - - /** - * The GetSystemTime function retrieves the current system date and time. - * The system time is expressed in Coordinated Universal Time (UTC). - * - * @param lpSystemTime - * Pointer to a SYSTEMTIME structure to receive the current - * system date and time. - */ - void GetSystemTime(WinBase.SYSTEMTIME lpSystemTime); - - /** - * Retrieves the current local date and time. - * - * @param lpSystemTime - * A pointer to a SYSTEMTIME structure to receive the current - * local date and time. - */ - void GetLocalTime(WinBase.SYSTEMTIME lpSystemTime); - - /** - * The GetTickCount function retrieves the number of milliseconds that have - * elapsed since the system was started, up to 49.7 days. - * - * @return Number of milliseconds that have elapsed since the system was - * started. - */ - int GetTickCount(); - - /** - * The GetCurrentThreadId function retrieves the thread identifier of the - * calling thread. - * - * @return The return value is the thread identifier of the calling thread. - */ - int GetCurrentThreadId(); - - /** - * The GetCurrentThread function retrieves a pseudo handle for the current - * thread. - * - * @return The return value is a pseudo handle for the current thread. - */ - HANDLE GetCurrentThread(); - - /** - * This function returns the process identifier of the calling process. - * - * @return The return value is the process identifier of the calling - * process. - */ - int GetCurrentProcessId(); - - /** - * This function returns a pseudohandle for the current process. - * - * @return The return value is a pseudohandle to the current process. - */ - HANDLE GetCurrentProcess(); - - /** - * The GetProcessId function retrieves the process identifier of the - * specified process. - * - * @param process - * Handle to the process. The handle must have the - * PROCESS_QUERY_INFORMATION access right. - * @return If the function succeeds, the return value is the process - * identifier of the specified process. If the function fails, the - * return value is zero. To get extended error information, call - * GetLastError. - */ - int GetProcessId(HANDLE process); - - /** - * The GetProcessVersion function retrieves the major and minor version - * numbers of the system on which the specified process expects to run. - * - * @param processId - * Process identifier of the process of interest. A value of zero - * specifies the calling process. - * @return If the function succeeds, the return value is the version of the - * system on which the process expects to run. The high word of the - * return value contains the major version number. The low word of - * the return value contains the minor version number. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. The function fails if ProcessId - * is an invalid value. - */ - int GetProcessVersion(int processId); - - /** - * Retrieves the termination status of the specified process. - * - * @param hProcess - * A handle to the process. - * @param lpExitCode - * A pointer to a variable to receive the process termination - * status. - * @return If the function succeeds, the return value is nonzero. - * - * If the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - boolean GetExitCodeProcess(HANDLE hProcess, IntByReference lpExitCode); - - /** - * Terminates the specified process and all of its threads. - * - * @param hProcess - * A handle to the process to be terminated. - * @param uExitCode - * The exit code to be used by the process and threads terminated - * as a result of this call. - * @return If the function succeeds, the return value is nonzero. - * - * If the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - boolean TerminateProcess(HANDLE hProcess, int uExitCode); - - /** - * The GetLastError function retrieves the calling thread's last-error code - * value. The last-error code is maintained on a per-thread basis. Multiple - * threads do not overwrite each other's last-error code. - * - * @return The return value is the calling thread's last-error code value. - */ - int GetLastError(); - - /** - * The SetLastError function sets the last-error code for the calling - * thread. - * - * @param dwErrCode - * Last-error code for the thread. - */ - void SetLastError(int dwErrCode); - - /** - * The GetDriveType function determines whether a disk drive is a removable, - * fixed, CD-ROM, RAM disk, or network drive. - * - * @param lpRootPathName - * Pointer to a null-terminated string that specifies the root - * directory of the disk to return information about. A trailing - * backslash is required. If this parameter is NULL, the function - * uses the root of the current directory. - * @return The return value specifies the type of drive. - */ - int GetDriveType(String lpRootPathName); - - /** - * The FormatMessage function formats a message string. The function - * requires a message definition as input. The message definition can come - * from a buffer passed into the function. It can come from a message table - * resource in an already-loaded module. Or the caller can ask the function - * to search the system's message table resource(s) for the message - * definition. The function finds the message definition in a message table - * resource based on a message identifier and a language identifier. The - * function copies the formatted message text to an output buffer, - * processing any embedded insert sequences if requested. - * - * @param dwFlags - * Formatting options, and how to interpret the lpSource - * parameter. The low-order byte of dwFlags specifies how the - * function handles line breaks in the output buffer. The - * low-order byte can also specify the maximum width of a - * formatted output line. - *

- * This version of the function assumes - * FORMAT_MESSAGE_ALLOCATE_BUFFER is not set. - * @param lpSource - * Location of the message definition. - * @param dwMessageId - * Message identifier for the requested message. - * @param dwLanguageId - * Language identifier for the requested message. - * @param lpBuffer - * Pointer to a buffer that receives the null-terminated string - * that specifies the formatted message. - * @param nSize - * This this parameter specifies the size of the output buffer, - * in TCHARs. If FORMAT_MESSAGE_ALLOCATE_BUFFER is - * @param va_list - * Pointer to an array of values that are used as insert values - * in the formatted message. - * @return If the function succeeds, the return value is the number of - * TCHARs stored in the output buffer, excluding the terminating - * null character. If the function fails, the return value is zero. - * To get extended error information, call GetLastError. - */ - int FormatMessage(int dwFlags, Pointer lpSource, int dwMessageId, - int dwLanguageId, Pointer lpBuffer, int nSize, Pointer va_list); - - /** - * The FormatMessage function formats a message string. The function - * requires a message definition as input. The message definition can come - * from a buffer passed into the function. It can come from a message table - * resource in an already-loaded module. Or the caller can ask the function - * to search the system's message table resource(s) for the message - * definition. The function finds the message definition in a message table - * resource based on a message identifier and a language identifier. The - * function copies the formatted message text to an output buffer, - * processing any embedded insert sequences if requested. - * - * @param dwFlags - * Formatting options, and how to interpret the lpSource - * parameter. The low-order byte of dwFlags specifies how the - * function handles line breaks in the output buffer. The - * low-order byte can also specify the maximum width of a - * formatted output line. - *

- * This version of the function assumes - * FORMAT_MESSAGE_ALLOCATE_BUFFER is set. - * @param lpSource - * Location of the message definition. - * @param dwMessageId - * Message identifier for the requested message. - * @param dwLanguageId - * Language identifier for the requested message. - * @param lpBuffer - * Pointer to a pointer that receives the allocated buffer in - * which the null-terminated string that specifies the formatted - * message is written. - * @param nSize - * This parameter specifies the minimum number of TCHARs to - * allocate for an output buffer. - * @param va_list - * Pointer to an array of values that are used as insert values - * in the formatted message. - * @return If the function succeeds, the return value is the number of - * TCHARs stored in the output buffer, excluding the terminating - * null character. If the function fails, the return value is zero. - * To get extended error information, call GetLastError. - */ - int FormatMessage(int dwFlags, Pointer lpSource, int dwMessageId, - int dwLanguageId, PointerByReference lpBuffer, int nSize, - Pointer va_list); - - /** - * The CreateFile function creates or opens a file, file stream, directory, - * physical disk, volume, console buffer, tape drive, communications - * resource, mailslot, or named pipe. The function returns a handle that can - * be used to access an object. - * - * @param lpFileName - * A pointer to a null-terminated string that specifies the name - * of an object to create or open. - * @param dwDesiredAccess - * The access to the object, which can be read, write, or both. - * @param dwShareMode - * The sharing mode of an object, which can be read, write, both, - * or none. - * @param lpSecurityAttributes - * A pointer to a SECURITY_ATTRIBUTES structure that determines - * whether or not the returned handle can be inherited by child - * processes. If lpSecurityAttributes is NULL, the handle cannot - * be inherited. - * @param dwCreationDisposition - * An action to take on files that exist and do not exist. - * @param dwFlagsAndAttributes - * The file attributes and flags. - * @param hTemplateFile - * Handle to a template file with the GENERIC_READ access right. - * The template file supplies file attributes and extended - * attributes for the file that is being created. This parameter - * can be NULL. - * @return If the function succeeds, the return value is an open handle to a - * specified file. If a specified file exists before the function - * call and dwCreationDisposition is CREATE_ALWAYS or OPEN_ALWAYS, a - * call to GetLastError returns ERROR_ALREADY_EXISTS, even when the - * function succeeds. If a file does not exist before the call, - * GetLastError returns 0 (zero). If the function fails, the return - * value is INVALID_HANDLE_VALUE. To get extended error information, - * call GetLastError. - */ - HANDLE CreateFile(String lpFileName, int dwDesiredAccess, int dwShareMode, - WinBase.SECURITY_ATTRIBUTES lpSecurityAttributes, - int dwCreationDisposition, int dwFlagsAndAttributes, - HANDLE hTemplateFile); - - /** - * Copies an existing file to a new file. - * - * @param lpExistingFileName - * The name of an existing file. - * - * The name is limited to MAX_PATH characters. To extend this - * limit to 32,767 wide characters, prepend "\\?\" to the path. - * For more information, see Naming a File. - * - * If lpExistingFileName does not exist, CopyFile fails, and - * GetLastError returns ERROR_FILE_NOT_FOUND. - * - * @param lpNewFileName - * The name of the new file. - * - * The name is limited to MAX_PATH characters. To extend this - * limit to 32,767 wide characters, prepend "\\?\" to the path. - * For more information, see Naming a File. - * - * @param bFailIfExists - * If this parameter is TRUE and the new file specified by - * lpNewFileName already exists, the function fails. If this - * parameter is FALSE and the new file already exists, the - * function overwrites the existing file and succeeds. - * - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean CopyFile(String lpExistingFileName, String lpNewFileName, - boolean bFailIfExists); - - /** - * Moves an existing file or a directory, including its children. - * - * @param lpExistingFileName - * The current name of the file or directory on the local - * computer. - * - * The name is limited to MAX_PATH characters. To extend this - * limit to 32,767 wide characters, prepend "\\?\" to the path. - * For more information, see Naming a File. - * @param lpNewFileName - * The new name for the file or directory. The new name must not - * already exist. A new file may be on a different file system or - * drive. A new directory must be on the same drive. - * - * The name is limited to MAX_PATH characters. To extend this - * limit to 32,767 wide characters, prepend "\\?\" to the path. - * For more information, see Naming a File. - * @return true, if successful If the function succeeds, the return value is - * nonzero. - * - * If the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - boolean MoveFile(String lpExistingFileName, String lpNewFileName); - - /** - * Moves an existing file or directory, including its children, with various - * move options. - * - * @param lpExistingFileName - * The current name of the file or directory on the local - * computer. - * - * If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT, the file - * cannot exist on a remote share, because delayed operations are - * performed before the network is available. - * - * The name is limited to MAX_PATH characters. To extend this - * limit to 32,767 wide characters, prepend "\\?\" to the path. - * For more information, see Naming a File - * - * Windows 2000: If you prepend the file name with "\\?\", you - * cannot also specify the MOVEFILE_DELAY_UNTIL_REBOOT flag for - * dwFlags. - * @param lpNewFileName - * The new name of the file or directory on the local computer. - * - * When moving a file, the destination can be on a different file - * system or volume. If the destination is on another drive, you - * must set the MOVEFILE_COPY_ALLOWED flag in dwFlags. - * - * When moving a directory, the destination must be on the same - * drive. - * - * If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT and - * lpNewFileName is NULL, MoveFileEx registers the - * lpExistingFileName file to be deleted when the system - * restarts. If lpExistingFileName refers to a directory, the - * system removes the directory at restart only if the directory - * is empty. - * @param dwFlags - * This parameter can be one or more of the following values. - * @return true, if successful If the function succeeds, the return value is - * nonzero. - * - * If the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - boolean MoveFileEx(String lpExistingFileName, String lpNewFileName, - DWORD dwFlags); - - /** - * The CreateDirectory function creates a new directory. If the underlying - * file system supports security on files and directories, the function - * applies a specified security descriptor to the new directory. - * - * @param lpPathName - * Pointer to a null-terminated string that specifies the path of - * the directory to be created. - * @param lpSecurityAttributes - * Pointer to a SECURITY_ATTRIBUTES structure. The - * lpSecurityDescriptor member of the structure specifies a - * security descriptor for the new directory. If - * lpSecurityAttributes is NULL, the directory gets a default - * security descriptor. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean CreateDirectory(String lpPathName, - WinBase.SECURITY_ATTRIBUTES lpSecurityAttributes); - - /** - * Reads data from the specified file or input/output (I/O) device. Reads - * occur at the position specified by the file pointer if supported by the - * device. - * - * This function is designed for both synchronous and asynchronous - * operations. For a similar function designed solely for asynchronous - * operation, see ReadFileEx - * - * @param hFile - * A handle to the device (for example, a file, file stream, - * physical disk, volume, console buffer, tape drive, socket, - * communications resource, mailslot, or pipe). - * @param lpBuffer - * A pointer to the buffer that receives the data read from a - * file or device. - * @param nNumberOfBytesToRead - * The maximum number of bytes to be read. - * @param lpNumberOfBytesRead - * A pointer to the variable that receives the number of bytes - * read when using a synchronous hFile parameter - * @param lpOverlapped - * A pointer to an OVERLAPPED structure is required if the hFile - * parameter was opened with FILE_FLAG_OVERLAPPED, otherwise it - * can be NULL. - * @return If the function succeeds, the return value is nonzero (TRUE). If - * the function fails, or is completing asynchronously, the return - * value is zero (FALSE). To get extended error information, call - * the GetLastError function. - * - * Note The GetLastError code ERROR_IO_PENDING is not a failure; it - * designates the read operation is pending completion - * asynchronously. For more information, see Remarks. - */ - boolean ReadFile(HANDLE hFile, Pointer lpBuffer, int nNumberOfBytesToRead, - IntByReference lpNumberOfBytesRead, WinBase.OVERLAPPED lpOverlapped); - - /** - * Creates an input/output (I/O) completion port and associates it with a - * specified file handle, or creates an I/O completion port that is not yet - * associated with a file handle, allowing association at a later time. - * - * @param FileHandle - * An open file handle or INVALID_HANDLE_VALUE. - * @param ExistingCompletionPort - * A handle to an existing I/O completion port or NULL. - * @param CompletionKey - * The per-handle user-defined completion key that is included in - * every I/O completion packet for the specified file handle. - * @param NumberOfConcurrentThreads - * The maximum number of threads that the operating system can - * allow to concurrently process I/O completion packets for the - * I/O completion port. - * @return If the function succeeds, the return value is the handle to an - * I/O completion port: If the ExistingCompletionPort parameter was - * NULL, the return value is a new handle. If the - * ExistingCompletionPort parameter was a valid I/O completion port - * handle, the return value is that same handle. If the FileHandle - * parameter was a valid handle, that file handle is now associated - * with the returned I/O completion port. If the function fails, the - * return value is NULL. To get extended error information, call the - * GetLastError function. - */ - HANDLE CreateIoCompletionPort(HANDLE FileHandle, - HANDLE ExistingCompletionPort, Pointer CompletionKey, - int NumberOfConcurrentThreads); - - /** - * Attempts to dequeue an I/O completion packet from the specified I/O - * completion port. If there is no completion packet queued, the function - * waits for a pending I/O operation associated with the completion port to - * complete. - * - * @param CompletionPort - * A handle to the completion port. - * @param lpNumberOfBytes - * A pointer to a variable that receives the number of bytes - * transferred during an I/O operation that has completed. - * @param lpCompletionKey - * A pointer to a variable that receives the completion key value - * associated with the file handle whose I/O operation has - * completed. - * @param lpOverlapped - * A pointer to a variable that receives the address of the - * OVERLAPPED structure that was specified when the completed I/O - * operation was started. - * @param dwMilliseconds - * The number of milliseconds that the caller is willing to wait - * for a completion packet to appear at the completion port. - * @return Returns nonzero (TRUE) if successful or zero (FALSE) otherwise. - */ - boolean GetQueuedCompletionStatus(HANDLE CompletionPort, - IntByReference lpNumberOfBytes, - ULONG_PTRByReference lpCompletionKey, - PointerByReference lpOverlapped, int dwMilliseconds); - - /** - * Posts an I/O completion packet to an I/O completion port. - * - * @param CompletionPort - * A handle to an I/O completion port to which the I/O completion - * packet is to be posted. - * @param dwNumberOfBytesTransferred - * The value to be returned through the - * lpNumberOfBytesTransferred parameter of the - * GetQueuedCompletionStatus function. - * @param dwCompletionKey - * The value to be returned through the lpCompletionKey parameter - * of the GetQueuedCompletionStatus function. - * @param lpOverlapped - * The value to be returned through the lpOverlapped parameter of - * the GetQueuedCompletionStatus function. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError . - */ - boolean PostQueuedCompletionStatus(HANDLE CompletionPort, - int dwNumberOfBytesTransferred, Pointer dwCompletionKey, - WinBase.OVERLAPPED lpOverlapped); - - /** - * Waits until the specified object is in the signaled state or the time-out - * interval elapses. To enter an alertable wait state, use the - * WaitForSingleObjectEx function. To wait for multiple objects, use the - * WaitForMultipleObjects. - * - * @param hHandle - * A handle to the object. For a list of the object types whose - * handles can be specified, see the following Remarks section. - * If this handle is closed while the wait is still pending, the - * function's behavior is undefined. The handle must have the - * SYNCHRONIZE access right. For more information, see Standard - * Access Rights. - * @param dwMilliseconds - * The time-out interval, in milliseconds. If a nonzero value is - * specified, the function waits until the object is signaled or - * the interval elapses. If dwMilliseconds is zero, the function - * does not enter a wait state if the object is not signaled; it - * always returns immediately. If dwMilliseconds is INFINITE, the - * function will return only when the object is signaled. - * @return If the function succeeds, the return value indicates the event - * that caused the function to return. - */ - int WaitForSingleObject(HANDLE hHandle, int dwMilliseconds); - - /** - * Waits until one or all of the specified objects are in the signaled state - * or the time-out interval elapses. To enter an alertable wait state, use - * the WaitForMultipleObjectsEx function. - * - * @param nCount - * The number of object handles in the array pointed to by - * lpHandles. The maximum number of object handles is - * MAXIMUM_WAIT_OBJECTS. - * @param hHandle - * An array of object handles. For a list of the object types - * whose handles can be specified, see the following Remarks - * section. The array can contain handles to objects of different - * types. It may not contain multiple copies of the same handle. - * If one of these handles is closed while the wait is still - * pending, the function's behavior is undefined. The handles - * must have the SYNCHRONIZE access right. For more information, - * see Standard Access Rights. - * @param bWaitAll - * If this parameter is TRUE, the function returns when the state - * of all objects in the lpHandles array is signaled. If FALSE, - * the function returns when the state of any one of the objects - * is set to signaled. In the latter case, the return value - * indicates the object whose state caused the function to - * return. - * @param dwMilliseconds - * The time-out interval, in milliseconds. If a nonzero value is - * specified, the function waits until the specified objects are - * signaled or the interval elapses. If dwMilliseconds is zero, - * the function does not enter a wait state if the specified - * objects are not signaled; it always returns immediately. If - * dwMilliseconds is INFINITE, the function will return only when - * the specified objects are signaled. - * @return If the function succeeds, the return value indicates the event - * that caused the function to return. - */ - int WaitForMultipleObjects(int nCount, HANDLE[] hHandle, boolean bWaitAll, - int dwMilliseconds); - - /** - * The DuplicateHandle function duplicates an object handle. - * - * @param hSourceProcessHandle - * Handle to the process with the handle to duplicate. The handle - * must have the PROCESS_DUP_HANDLE access right. - * @param hSourceHandle - * Handle to duplicate. This is an open object handle that is - * valid in the context of the source process. - * @param hTargetProcessHandle - * Handle to the process that is to receive the duplicated - * handle. The handle must have the PROCESS_DUP_HANDLE access - * right. - * @param lpTargetHandle - * Pointer to a variable that receives the duplicate handle. This - * handle value is valid in the context of the target process. If - * hSourceHandle is a pseudo handle returned by GetCurrentProcess - * or GetCurrentThread, DuplicateHandle converts it to a real - * handle to a process or thread, respectively. - * @param dwDesiredAccess - * Access requested for the new handle. - * @param bInheritHandle - * Indicates whether the handle is inheritable. - * @param dwOptions - * Optional actions. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, - HANDLE hTargetProcessHandle, HANDLEByReference lpTargetHandle, - int dwDesiredAccess, boolean bInheritHandle, int dwOptions); - - /** - * The CloseHandle function closes an open object handle. - * - * @param hObject - * Handle to an open object. This parameter can be a pseudo - * handle or INVALID_HANDLE_VALUE. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean CloseHandle(HANDLE hObject); - - /** - * Retrieves information that describes the changes within the specified - * directory. The function does not report changes to the specified - * directory itself. Note: there's no ReadDirectoryChangesA. - * - * @param directory - * A handle to the directory to be monitored. This directory must - * be opened with the FILE_LIST_DIRECTORY access right. - * @param info - * A pointer to the DWORD-aligned formatted buffer in which the - * read results are to be returned. - * @param length - * The size of the buffer that is pointed to by the lpBuffer - * parameter, in bytes. - * @param watchSubtree - * If this parameter is TRUE, the function monitors the directory - * tree rooted at the specified directory. If this parameter is - * FALSE, the function monitors only the directory specified by - * the hDirectory parameter. - * @param notifyFilter - * The filter criteria that the function checks to determine if - * the wait operation has completed. - * @param bytesReturned - * For synchronous calls, this parameter receives the number of - * bytes transferred into the lpBuffer parameter. For - * asynchronous calls, this parameter is undefined. You must use - * an asynchronous notification technique to retrieve the number - * of bytes transferred. - * @param overlapped - * A pointer to an OVERLAPPED structure that supplies data to be - * used during asynchronous operation. Otherwise, this value is - * NULL. The Offset and OffsetHigh members of this structure are - * not used. - * @param completionRoutine - * A pointer to a completion routine to be called when the - * operation has been completed or canceled and the calling - * thread is in an alertable wait state. - * @return If the function succeeds, the return value is nonzero. For - * synchronous calls, this means that the operation succeeded. For - * asynchronous calls, this indicates that the operation was - * successfully queued. If the function fails, the return value is - * zero. To get extended error information, call GetLastError. If - * the network redirector or the target file system does not support - * this operation, the function fails with ERROR_INVALID_FUNCTION. - */ - public boolean ReadDirectoryChangesW(HANDLE directory, - WinNT.FILE_NOTIFY_INFORMATION info, int length, - boolean watchSubtree, int notifyFilter, - IntByReference bytesReturned, WinBase.OVERLAPPED overlapped, - OVERLAPPED_COMPLETION_ROUTINE completionRoutine); - - /** - * Retrieves the short path form of the specified path. - * - * @param lpszLongPath - * The path string. - * @param lpdzShortPath - * A pointer to a buffer to receive the null-terminated short - * form of the path that lpszLongPath specifies. - * @param cchBuffer - * The size of the buffer that lpszShortPath points to, in - * TCHARs. - * @return If the function succeeds, the return value is the length, in - * TCHARs, of the string that is copied to lpszShortPath, not - * including the terminating null character. If the lpszShortPath - * buffer is too small to contain the path, the return value is the - * size of the buffer, in TCHARs, that is required to hold the path - * and the terminating null character. If the function fails for any - * other reason, the return value is zero. To get extended error - * information, call GetLastError. - */ - int GetShortPathName(String lpszLongPath, char[] lpdzShortPath, - int cchBuffer); - - /** - * The LocalAlloc function allocates the specified number of bytes from the - * heap. Windows memory management does not provide a separate local heap - * and global heap. - * - * @param uFlags - * Memory allocation attributes. The default is the LMEM_FIXED - * value. - * @param uBytes - * Number of bytes to allocate. If this parameter is zero and the - * uFlags parameter specifies LMEM_MOVEABLE, the function returns - * a handle to a memory object that is marked as discarded. - * @return If the function succeeds, the return value is a handle to the - * newly allocated memory object. If the function fails, the return - * value is NULL. To get extended error information, call - * GetLastError. - */ - Pointer LocalAlloc(int /* UINT */ uFlags, int /* SIZE_T */ uBytes); - - /** - * Writes data to the specified file or input/output (I/O) device. - * - * @param hFile - * A handle to the file or I/O device (for example, a file, file - * stream, physical disk, volume, console buffer, tape drive, - * socket, communications resource, mailslot, or pipe). - * @param lpBuffer - * A pointer to the buffer containing the data to be written to - * the file or device. - * @param nNumberOfBytesToWrite - * The number of bytes to be written to the file or device. - * @param lpNumberOfBytesWritten - * A pointer to the variable that receives the number of bytes - * written when using a synchronous hFile parameter. - * @param lpOverlapped - * A pointer to an OVERLAPPED structure is required if the hFile - * parameter was opened with FILE_FLAG_OVERLAPPED, otherwise this - * parameter can be NULL. - * @return If the function succeeds, the return value is nonzero (TRUE). If - * the function fails, or is completing asynchronously, the return - * value is zero (FALSE). To get extended error information, call - * the GetLastError function. - */ - boolean WriteFile(HANDLE hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, - IntByReference lpNumberOfBytesWritten, - WinBase.OVERLAPPED lpOverlapped); - - /** - * Creates or opens a named or unnamed event object. - * - * @param lpEventAttributes - * A pointer to a SECURITY_ATTRIBUTES structure. If this - * parameter is NULL, the handle cannot be inherited by child - * processes. - * @param bManualReset - * If this parameter is TRUE, the function creates a manual-reset - * event object, which requires the use of the ResetEvent - * function to set the event state to nonsignaled. If this - * parameter is FALSE, the function creates an auto-reset event - * object, and system automatically resets the event state to - * nonsignaled after a single waiting thread has been released. - * @param bInitialState - * If this parameter is TRUE, the initial state of the event - * object is signaled; otherwise, it is nonsignaled. - * @param lpName - * The name of the event object. The name is limited to MAX_PATH - * characters. Name comparison is case sensitive. - * @return If the function succeeds, the return value is a handle to the - * event object. If the named event object existed before the - * function call, the function returns a handle to the existing - * object and GetLastError returns ERROR_ALREADY_EXISTS. If the - * function fails, the return value is NULL. To get extended error - * information, call GetLastError. - */ - HANDLE CreateEvent(WinBase.SECURITY_ATTRIBUTES lpEventAttributes, - boolean bManualReset, boolean bInitialState, String lpName); - - /** - * Sets the specified event object to the signaled state. - * - * @param hEvent - * A handle to the event object. The CreateEvent or OpenEvent - * function returns this handle. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean SetEvent(HANDLE hEvent); - - /** - * Sets the specified event object to the signaled state and then resets it - * to the nonsignaled state after releasing the appropriate number of - * waiting threads. - * - * @param hEvent - * A handle to the event object. The CreateEvent or OpenEvent - * function returns this handle. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean PulseEvent(HANDLE hEvent); - - /** - * Creates or opens a named or unnamed file mapping object for a specified - * file. - * - * @param hFile - * A handle to the file from which to create a file mapping - * object. - * @param lpAttributes - * A pointer to a SECURITY_ATTRIBUTES structure that determines - * whether a returned handle can be inherited by child processes. - * The lpSecurityDescriptor member of the SECURITY_ATTRIBUTES - * structure specifies a security descriptor for a new file - * mapping object. - * @param flProtect - * Specifies the page protection of the file mapping object. All - * mapped views of the object must be compatible with this - * protection. - * @param dwMaximumSizeHigh - * The high-order DWORD of the maximum size of the file mapping - * object. - * @param dwMaximumSizeLow - * The low-order DWORD of the maximum size of the file mapping - * object. - * @param lpName - * The name of the file mapping object. - * @return If the function succeeds, the return value is a handle to the - * newly created file mapping object. If the object exists before - * the function call, the function returns a handle to the existing - * object (with its current size, not the specified size), and - * GetLastError returns ERROR_ALREADY_EXISTS. If the function fails, - * the return value is NULL. To get extended error information, call - * GetLastError. - */ - HANDLE CreateFileMapping(HANDLE hFile, - WinBase.SECURITY_ATTRIBUTES lpAttributes, int flProtect, - int dwMaximumSizeHigh, int dwMaximumSizeLow, String lpName); - - /** - * Maps a view of a file mapping into the address space of a calling - * process. - * - * @param hFileMappingObject - * A handle to a file mapping object. The CreateFileMapping and - * OpenFileMapping functions return this handle. - * @param dwDesiredAccess - * The type of access to a file mapping object, which determines - * the protection of the pages. - * @param dwFileOffsetHigh - * A high-order DWORD of the file offset where the view begins. - * @param dwFileOffsetLow - * A low-order DWORD of the file offset where the view is to - * begin. - * @param dwNumberOfBytesToMap - * The number of bytes of a file mapping to map to the view. - * @return If the function succeeds, the return value is the starting - * address of the mapped view. If the function fails, the return - * value is NULL. To get extended error information, call - * GetLastError. - */ - Pointer MapViewOfFile(HANDLE hFileMappingObject, int dwDesiredAccess, - int dwFileOffsetHigh, int dwFileOffsetLow, int dwNumberOfBytesToMap); - - /** - * Unmaps a mapped view of a file from the calling process's address space. - * - * @param lpBaseAddress - * A pointer to the base address of the mapped view of a file - * that is to be unmapped. - * @return If the function succeeds, the return value is the starting - * address of the mapped view. If the function fails, the return - * value is NULL. To get extended error information, call - * GetLastError. - */ - boolean UnmapViewOfFile(Pointer lpBaseAddress); - - /** - * Retrieves only the NetBIOS name of the local computer. - * - * @param buffer - * A pointer to a buffer that receives the computer name or the - * cluster virtual server name. The buffer size should be large - * enough to contain MAX_COMPUTERNAME_LENGTH + 1 characters. - * @param lpnSize - * On input, specifies the size of the buffer, in TCHARs. On - * output, the number of TCHARs copied to the destination buffer, - * not including the terminating null character. If the buffer is - * too small, the function fails and GetLastError returns - * ERROR_BUFFER_OVERFLOW. The lpnSize parameter specifies the - * size of the buffer required, including the terminating null - * character. - * @return If the function succeeds, the return value is a nonzero value. If - * the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - public boolean GetComputerName(char[] buffer, IntByReference lpnSize); - - /** - * The OpenThread function opens an existing thread object. - * - * @param dwDesiredAccess - * Access to the thread object. This access right is checked - * against any security descriptor for the thread. - * @param bInheritHandle - * If this parameter is TRUE, the new process inherits the - * handle. If the parameter is FALSE, the handle is not - * inherited. - * @param dwThreadId - * Identifier of the thread to be opened. - * @return If the function succeeds, the return value is an open handle to - * the specified process. If the function fails, the return value is - * NULL. To get extended error information, call GetLastError. - */ - HANDLE OpenThread(int dwDesiredAccess, boolean bInheritHandle, - int dwThreadId); - - /** - * Creates a new process and its primary thread. The new process runs in the - * security context of the calling process. - * - * @param lpApplicationName - * The name of the module to be executed. - * @param lpCommandLine - * The command line to be executed. - * @param lpProcessAttributes - * A pointer to a SECURITY_ATTRIBUTES structure that determines - * whether the returned handle to the new process object can be - * inherited by child processes. If lpProcessAttributes is NULL, - * the handle cannot be inherited. - * - * @param lpThreadAttributes - * A pointer to a SECURITY_ATTRIBUTES structure that determines - * whether the returned handle to the new thread object can be - * inherited by child processes. If lpThreadAttributes is NULL, - * the handle cannot be inherited. - * - * @param bInheritHandles - * If this parameter TRUE, each inheritable handle in the calling - * process is inherited by the new process. If the parameter is - * FALSE, the handles are not inherited. Note that inherited - * handles have the same value and access rights as the original - * handles. - * - * @param dwCreationFlags - * The flags that control the priority class and the creation of - * the process. - * @param lpEnvironment - * A pointer to the environment block for the new process. If - * this parameter is NULL, the new process uses the environment - * of the calling process. - * - * @param lpCurrentDirectory - * The full path to the current directory for the process. - * @param lpStartupInfo - * A pointer to a STARTUPINFO or STARTUPINFOEX structure. - * @param lpProcessInformation - * A pointer to a PROCESS_INFORMATION structure that receives - * identification information about the new process. - * @return If the function succeeds, the return value is nonzero. - */ - boolean CreateProcess(String lpApplicationName, String lpCommandLine, - WinBase.SECURITY_ATTRIBUTES lpProcessAttributes, - WinBase.SECURITY_ATTRIBUTES lpThreadAttributes, - boolean bInheritHandles, DWORD dwCreationFlags, - Pointer lpEnvironment, String lpCurrentDirectory, - WinBase.STARTUPINFO lpStartupInfo, - WinBase.PROCESS_INFORMATION lpProcessInformation); - - /** - * Creates a new process and its primary thread. The new process runs in the - * security context of the calling process. - * - * @param lpApplicationName - * The name of the module to be executed. - * @param lpCommandLine - * The command line to be executed. The maximum length of - * this string is 32,768 characters, including the Unicode - * terminating null character. If lpApplicationName is - * NULL, the module name portion of lpCommandLine is - * limited to MAX_PATH characters. - *

- * The Unicode version of this function, {@link #CreateProcessW}, - * can modify the contents of this string. Therefore, this - * parameter cannot be a pointer to read-only memory (such - * as a const variable or a literal string). If this - * parameter is a constant string, the function may cause - * an access violation. - *

- * The lpCommandLine parameter can be NULL. In that case, - * the function uses the string pointed to by - * lpApplicationName as the command line. - *

- * If both lpApplicationName and lpCommandLine are - * non-NULL, the null-terminated string pointed to by - * lpApplicationName specifies the module to execute, and - * the null-terminated string pointed to by lpCommandLine - * specifies the command line. The new process can use - * GetCommandLine to retrieve the entire command - * line. Console processes written in C can use the argc - * and argv arguments to parse the command line. Because - * argv[0] is the module name, C programmers generally - * repeat the module name as the first token in the command - * line. - *

- * If lpApplicationName is NULL, the first white - * space-delimited token of the command line specifies the - * module name. If you are using a long file name that - * contains a space, use quoted strings to indicate where - * the file name ends and the arguments begin (see the - * explanation for the lpApplicationName parameter). If the - * file name does not contain an extension, .exe is - * appended. Therefore, if the file name extension is .com, - * this parameter must include the .com extension. If the - * file name ends in a period (.) with no extension, or if - * the file name contains a path, .exe is not appended. If - * the file name does not contain a directory path, the - * system searches for the executable file in the following - * sequence: - *

    - *
  • The directory from which the application loaded. - *
  • The current directory for the parent process. - *
  • The 32-bit Windows system directory. Use the - * GetSystemDirectory function to get the path of this - * directory. - *
  • The 16-bit Windows system directory. There is no - * function that obtains the path of this directory, but it - * is searched. The name of this directory is System. - *
  • The Windows directory. Use the GetWindowsDirectory - * function to get the path of this directory. - *
  • The directories that are listed in the PATH - * environment variable. Note that this function does not - * search the per-application path specified by the App - * Paths registry key. To include this per-application path - * in the search sequence, use the ShellExecute function. - *
- * The system adds a terminating null character to the - * command-line string to separate the file name from the - * arguments. This divides the original string into two - * strings for internal processing. - * @param lpProcessAttributes - * A pointer to a SECURITY_ATTRIBUTES structure that determines - * whether the returned handle to the new process object can be - * inherited by child processes. If lpProcessAttributes is NULL, - * the handle cannot be inherited. - * @param lpThreadAttributes - * A pointer to a SECURITY_ATTRIBUTES structure that determines - * whether the returned handle to the new thread object can be - * inherited by child processes. If lpThreadAttributes is NULL, - * the handle cannot be inherited. - * @param bInheritHandles - * If this parameter TRUE, each inheritable handle in the calling - * process is inherited by the new process. If the parameter is - * FALSE, the handles are not inherited. Note that inherited - * handles have the same value and access rights as the original - * handles. - * @param dwCreationFlags - * The flags that control the priority class and the creation of - * the process. - * @param lpEnvironment - * A pointer to the environment block for the new process. If - * this parameter is NULL, the new process uses the environment - * of the calling process. - * @param lpCurrentDirectory - * The full path to the current directory for the process. - * @param lpStartupInfo - * A pointer to a STARTUPINFO or STARTUPINFOEX structure. - * @param lpProcessInformation - * A pointer to a PROCESS_INFORMATION structure that receives - * identification information about the new process. - * @return If the function succeeds, the return value is nonzero. - */ - boolean CreateProcessW(String lpApplicationName, char[] lpCommandLine, - WinBase.SECURITY_ATTRIBUTES lpProcessAttributes, - WinBase.SECURITY_ATTRIBUTES lpThreadAttributes, - boolean bInheritHandles, DWORD dwCreationFlags, - Pointer lpEnvironment, String lpCurrentDirectory, - WinBase.STARTUPINFO lpStartupInfo, - WinBase.PROCESS_INFORMATION lpProcessInformation); - - /** - * This function returns a handle to an existing process object. - * - * @param fdwAccess - * Not supported; set to zero. - * @param fInherit - * Not supported; set to FALSE. - * @param IDProcess - * Specifies the process identifier of the process to open. - * @return An open handle to the specified process indicates success. NULL - * indicates failure. To get extended error information, call - * GetLastError. - */ - HANDLE OpenProcess(int fdwAccess, boolean fInherit, int IDProcess); - - /** - * The GetTempPath function retrieves the path of the directory designated - * for temporary files. - * - * @param nBufferLength - * Size of the string buffer identified by lpBuffer, in TCHARs. - * @param buffer - * Pointer to a string buffer that receives the null-terminated - * string specifying the temporary file path. The returned string - * ends with a backslash, for example, C:\TEMP\. - * @return If the function succeeds, the return value is the length, in - * TCHARs, of the string copied to lpBuffer, not including the - * terminating null character. If the return value is greater than - * nBufferLength, the return value is the length, in TCHARs, of the - * buffer required to hold the path. - * - * If the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - DWORD GetTempPath(DWORD nBufferLength, char[] buffer); - - /** - * The GetVersion function returns the current version number of the - * operating system. - * - * @return If the function succeeds, the return value includes the major and - * minor version numbers of the operating system in the low order - * word, and information about the operating system platform in the - * high order word. - */ - DWORD GetVersion(); - - /** - * The GetVersionEx function obtains extended information about the version - * of the operating system that is currently running. - * - * @param lpVersionInfo - * Pointer to an OSVERSIONINFO data structure that the function - * fills with operating system version information. - * @return If the function succeeds, the return value is a nonzero value. If - * the function fails, the return value is zero. To get extended - * error information, call GetLastError. The function fails if you - * specify an invalid value for the dwOSVersionInfoSize member of - * the OSVERSIONINFO or OSVERSIONINFOEX structure. - */ - boolean GetVersionEx(OSVERSIONINFO lpVersionInfo); - - /** - * The GetVersionEx function obtains extended information about the version - * of the operating system that is currently running. - * - * @param lpVersionInfo - * Pointer to an OSVERSIONINFOEX data structure that the function - * fills with operating system version information. - * @return If the function succeeds, the return value is a nonzero value. If - * the function fails, the return value is zero. To get extended - * error information, call GetLastError. The function fails if you - * specify an invalid value for the dwOSVersionInfoSize member of - * the OSVERSIONINFO or OSVERSIONINFOEX structure. - */ - boolean GetVersionEx(OSVERSIONINFOEX lpVersionInfo); - - /** - * The GetSystemInfo function returns information about the current system. - * - * @param lpSystemInfo - * Pointer to a SYSTEM_INFO structure that receives the - * information. - */ - void GetSystemInfo(SYSTEM_INFO lpSystemInfo); - - /** - * The GetNativeSystemInfo function retrieves information about the current - * system to an application running under WOW64. If the function is called - * from a 64-bit application, it is equivalent to the GetSystemInfo - * function. - * - * @param lpSystemInfo - * Pointer to a SYSTEM_INFO structure that receives the - * information. - */ - void GetNativeSystemInfo(SYSTEM_INFO lpSystemInfo); - - /** - * The IsWow64Process function determines whether the specified process is - * running under WOW64. - * - * @param hProcess - * Handle to a process. - * @param Wow64Process - * Pointer to a value that is set to TRUE if the process is - * running under WOW64. Otherwise, the value is set to FALSE. - * @return If the function succeeds, the return value is a nonzero value. If - * the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - boolean IsWow64Process(HANDLE hProcess, IntByReference Wow64Process); + /** The instance. */ + Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", + Kernel32.class, W32APIOptions.UNICODE_OPTIONS); + + /** + * The FormatMessage function formats a message string. The function + * requires a message definition as input. The message definition can come + * from a buffer passed into the function. It can come from a message table + * resource in an already-loaded module. Or the caller can ask the function + * to search the system's message table resource(s) for the message + * definition. The function finds the message definition in a message table + * resource based on a message identifier and a language identifier. The + * function copies the formatted message text to an output buffer, + * processing any embedded insert sequences if requested. + * + * @param dwFlags + * Formatting options, and how to interpret the lpSource + * parameter. The low-order byte of dwFlags specifies how the + * function handles line breaks in the output buffer. The + * low-order byte can also specify the maximum width of a + * formatted output line. + *

+ * This version of the function assumes + * FORMAT_MESSAGE_ALLOCATE_BUFFER is not set. + * @param lpSource + * Location of the message definition. + * @param dwMessageId + * Message identifier for the requested message. + * @param dwLanguageId + * Language identifier for the requested message. + * @param lpBuffer + * Pointer to a buffer that receives the null-terminated string + * that specifies the formatted message. + * @param nSize + * This this parameter specifies the size of the output buffer, + * in TCHARs. If FORMAT_MESSAGE_ALLOCATE_BUFFER is + * @param va_list + * Pointer to an array of values that are used as insert values + * in the formatted message. + * @return If the function succeeds, the return value is the number of + * TCHARs stored in the output buffer, excluding the terminating + * null character. If the function fails, the return value is zero. + * To get extended error information, call GetLastError. + */ + int FormatMessage(int dwFlags, Pointer lpSource, int dwMessageId, + int dwLanguageId, Buffer lpBuffer, int nSize, Pointer va_list); + + /** + * Reads data from the specified file or input/output (I/O) device. Reads + * occur at the position specified by the file pointer if supported by the + * device. + * + * This function is designed for both synchronous and asynchronous + * operations. For a similar function designed solely for asynchronous + * operation, see ReadFileEx + * + * @param hFile + * A handle to the device (for example, a file, file stream, + * physical disk, volume, console buffer, tape drive, socket, + * communications resource, mailslot, or pipe). + * @param lpBuffer + * A pointer to the buffer that receives the data read from a + * file or device. + * @param nNumberOfBytesToRead + * The maximum number of bytes to be read. + * @param lpNumberOfBytesRead + * A pointer to the variable that receives the number of bytes + * read when using a synchronous hFile parameter + * @param lpOverlapped + * A pointer to an OVERLAPPED structure is required if the hFile + * parameter was opened with FILE_FLAG_OVERLAPPED, otherwise it + * can be NULL. + * @return If the function succeeds, the return value is nonzero (TRUE). If + * the function fails, or is completing asynchronously, the return + * value is zero (FALSE). To get extended error information, call + * the GetLastError function. + * + * Note The GetLastError code ERROR_IO_PENDING is not a failure; it + * designates the read operation is pending completion + * asynchronously. For more information, see Remarks. + */ + boolean ReadFile(HANDLE hFile, Buffer lpBuffer, int nNumberOfBytesToRead, + IntByReference lpNumberOfBytesRead, WinBase.OVERLAPPED lpOverlapped); + + /** + * Frees the specified local memory object and invalidates its handle. + * + * @param hLocal + * A handle to the local memory object. + * @return If the function succeeds, the return value is NULL. If the + * function fails, the return value is equal to a handle to the + * local memory object. To get extended error information, call + * GetLastError. + */ + Pointer LocalFree(Pointer hLocal); + + /** + * Frees the specified global memory object and invalidates its handle. + * + * @param hGlobal + * A handle to the global memory object. + * @return If the function succeeds, the return value is NULL If the + * function fails, the return value is equal to a handle to the + * global memory object. To get extended error information, call + * GetLastError. + */ + Pointer GlobalFree(Pointer hGlobal); + + /** + * The GetModuleHandle function retrieves a module handle for the specified + * module if the file has been mapped into the address space of the calling + * process. + * + * @param name + * Pointer to a null-terminated string that contains the name of + * the module (either a .dll or .exe file). + * @return If the function succeeds, the return value is a handle to the + * specified module. If the function fails, the return value is + * NULL. To get extended error information, call GetLastError. + */ + HMODULE GetModuleHandle(String name); + + /** + * The GetSystemTime function retrieves the current system date and time. + * The system time is expressed in Coordinated Universal Time (UTC). + * + * @param lpSystemTime + * Pointer to a SYSTEMTIME structure to receive the current + * system date and time. + */ + void GetSystemTime(WinBase.SYSTEMTIME lpSystemTime); + + /** + * Retrieves the current local date and time. + * + * @param lpSystemTime + * A pointer to a SYSTEMTIME structure to receive the current + * local date and time. + */ + void GetLocalTime(WinBase.SYSTEMTIME lpSystemTime); + + /** + * The GetTickCount function retrieves the number of milliseconds that have + * elapsed since the system was started, up to 49.7 days. + * + * @return Number of milliseconds that have elapsed since the system was + * started. + */ + int GetTickCount(); + + /** + * The GetCurrentThreadId function retrieves the thread identifier of the + * calling thread. + * + * @return The return value is the thread identifier of the calling thread. + */ + int GetCurrentThreadId(); + + /** + * The GetCurrentThread function retrieves a pseudo handle for the current + * thread. + * + * @return The return value is a pseudo handle for the current thread. + */ + HANDLE GetCurrentThread(); + + /** + * This function returns the process identifier of the calling process. + * + * @return The return value is the process identifier of the calling + * process. + */ + int GetCurrentProcessId(); + + /** + * This function returns a pseudohandle for the current process. + * + * @return The return value is a pseudohandle to the current process. + */ + HANDLE GetCurrentProcess(); + + /** + * The GetProcessId function retrieves the process identifier of the + * specified process. + * + * @param process + * Handle to the process. The handle must have the + * PROCESS_QUERY_INFORMATION access right. + * @return If the function succeeds, the return value is the process + * identifier of the specified process. If the function fails, the + * return value is zero. To get extended error information, call + * GetLastError. + */ + int GetProcessId(HANDLE process); + + /** + * The GetProcessVersion function retrieves the major and minor version + * numbers of the system on which the specified process expects to run. + * + * @param processId + * Process identifier of the process of interest. A value of zero + * specifies the calling process. + * @return If the function succeeds, the return value is the version of the + * system on which the process expects to run. The high word of the + * return value contains the major version number. The low word of + * the return value contains the minor version number. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. The function fails if ProcessId + * is an invalid value. + */ + int GetProcessVersion(int processId); + + /** + * Retrieves the termination status of the specified process. + * + * @param hProcess + * A handle to the process. + * @param lpExitCode + * A pointer to a variable to receive the process termination + * status. + * @return If the function succeeds, the return value is nonzero. + * + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + boolean GetExitCodeProcess(HANDLE hProcess, IntByReference lpExitCode); + + /** + * Terminates the specified process and all of its threads. + * + * @param hProcess + * A handle to the process to be terminated. + * @param uExitCode + * The exit code to be used by the process and threads terminated + * as a result of this call. + * @return If the function succeeds, the return value is nonzero. + * + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + boolean TerminateProcess(HANDLE hProcess, int uExitCode); + + /** + * The GetLastError function retrieves the calling thread's last-error code + * value. The last-error code is maintained on a per-thread basis. Multiple + * threads do not overwrite each other's last-error code. + * + * @return The return value is the calling thread's last-error code value. + */ + int GetLastError(); + + /** + * The SetLastError function sets the last-error code for the calling + * thread. + * + * @param dwErrCode + * Last-error code for the thread. + */ + void SetLastError(int dwErrCode); + + /** + * The GetDriveType function determines whether a disk drive is a removable, + * fixed, CD-ROM, RAM disk, or network drive. + * + * @param lpRootPathName + * Pointer to a null-terminated string that specifies the root + * directory of the disk to return information about. A trailing + * backslash is required. If this parameter is NULL, the function + * uses the root of the current directory. + * @return The return value specifies the type of drive. + */ + int GetDriveType(String lpRootPathName); + + /** + * The FormatMessage function formats a message string. The function + * requires a message definition as input. The message definition can come + * from a buffer passed into the function. It can come from a message table + * resource in an already-loaded module. Or the caller can ask the function + * to search the system's message table resource(s) for the message + * definition. The function finds the message definition in a message table + * resource based on a message identifier and a language identifier. The + * function copies the formatted message text to an output buffer, + * processing any embedded insert sequences if requested. + * + * @param dwFlags + * Formatting options, and how to interpret the lpSource + * parameter. The low-order byte of dwFlags specifies how the + * function handles line breaks in the output buffer. The + * low-order byte can also specify the maximum width of a + * formatted output line. + *

+ * This version of the function assumes + * FORMAT_MESSAGE_ALLOCATE_BUFFER is not set. + * @param lpSource + * Location of the message definition. + * @param dwMessageId + * Message identifier for the requested message. + * @param dwLanguageId + * Language identifier for the requested message. + * @param lpBuffer + * Pointer to a buffer that receives the null-terminated string + * that specifies the formatted message. + * @param nSize + * This this parameter specifies the size of the output buffer, + * in TCHARs. If FORMAT_MESSAGE_ALLOCATE_BUFFER is + * @param va_list + * Pointer to an array of values that are used as insert values + * in the formatted message. + * @return If the function succeeds, the return value is the number of + * TCHARs stored in the output buffer, excluding the terminating + * null character. If the function fails, the return value is zero. + * To get extended error information, call GetLastError. + */ + int FormatMessage(int dwFlags, Pointer lpSource, int dwMessageId, + int dwLanguageId, Pointer lpBuffer, int nSize, Pointer va_list); + + /** + * The FormatMessage function formats a message string. The function + * requires a message definition as input. The message definition can come + * from a buffer passed into the function. It can come from a message table + * resource in an already-loaded module. Or the caller can ask the function + * to search the system's message table resource(s) for the message + * definition. The function finds the message definition in a message table + * resource based on a message identifier and a language identifier. The + * function copies the formatted message text to an output buffer, + * processing any embedded insert sequences if requested. + * + * @param dwFlags + * Formatting options, and how to interpret the lpSource + * parameter. The low-order byte of dwFlags specifies how the + * function handles line breaks in the output buffer. The + * low-order byte can also specify the maximum width of a + * formatted output line. + *

+ * This version of the function assumes + * FORMAT_MESSAGE_ALLOCATE_BUFFER is set. + * @param lpSource + * Location of the message definition. + * @param dwMessageId + * Message identifier for the requested message. + * @param dwLanguageId + * Language identifier for the requested message. + * @param lpBuffer + * Pointer to a pointer that receives the allocated buffer in + * which the null-terminated string that specifies the formatted + * message is written. + * @param nSize + * This parameter specifies the minimum number of TCHARs to + * allocate for an output buffer. + * @param va_list + * Pointer to an array of values that are used as insert values + * in the formatted message. + * @return If the function succeeds, the return value is the number of + * TCHARs stored in the output buffer, excluding the terminating + * null character. If the function fails, the return value is zero. + * To get extended error information, call GetLastError. + */ + int FormatMessage(int dwFlags, Pointer lpSource, int dwMessageId, + int dwLanguageId, PointerByReference lpBuffer, int nSize, + Pointer va_list); + + /** + * The CreateFile function creates or opens a file, file stream, directory, + * physical disk, volume, console buffer, tape drive, communications + * resource, mailslot, or named pipe. The function returns a handle that can + * be used to access an object. + * + * @param lpFileName + * A pointer to a null-terminated string that specifies the name + * of an object to create or open. + * @param dwDesiredAccess + * The access to the object, which can be read, write, or both. + * @param dwShareMode + * The sharing mode of an object, which can be read, write, both, + * or none. + * @param lpSecurityAttributes + * A pointer to a SECURITY_ATTRIBUTES structure that determines + * whether or not the returned handle can be inherited by child + * processes. If lpSecurityAttributes is NULL, the handle cannot + * be inherited. + * @param dwCreationDisposition + * An action to take on files that exist and do not exist. + * @param dwFlagsAndAttributes + * The file attributes and flags. + * @param hTemplateFile + * Handle to a template file with the GENERIC_READ access right. + * The template file supplies file attributes and extended + * attributes for the file that is being created. This parameter + * can be NULL. + * @return If the function succeeds, the return value is an open handle to a + * specified file. If a specified file exists before the function + * call and dwCreationDisposition is CREATE_ALWAYS or OPEN_ALWAYS, a + * call to GetLastError returns ERROR_ALREADY_EXISTS, even when the + * function succeeds. If a file does not exist before the call, + * GetLastError returns 0 (zero). If the function fails, the return + * value is INVALID_HANDLE_VALUE. To get extended error information, + * call GetLastError. + */ + HANDLE CreateFile(String lpFileName, int dwDesiredAccess, int dwShareMode, + WinBase.SECURITY_ATTRIBUTES lpSecurityAttributes, + int dwCreationDisposition, int dwFlagsAndAttributes, + HANDLE hTemplateFile); + + /** + * Copies an existing file to a new file. + * + * @param lpExistingFileName + * The name of an existing file. + * + * The name is limited to MAX_PATH characters. To extend this + * limit to 32,767 wide characters, prepend "\\?\" to the path. + * For more information, see Naming a File. + * + * If lpExistingFileName does not exist, CopyFile fails, and + * GetLastError returns ERROR_FILE_NOT_FOUND. + * + * @param lpNewFileName + * The name of the new file. + * + * The name is limited to MAX_PATH characters. To extend this + * limit to 32,767 wide characters, prepend "\\?\" to the path. + * For more information, see Naming a File. + * + * @param bFailIfExists + * If this parameter is TRUE and the new file specified by + * lpNewFileName already exists, the function fails. If this + * parameter is FALSE and the new file already exists, the + * function overwrites the existing file and succeeds. + * + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean CopyFile(String lpExistingFileName, String lpNewFileName, + boolean bFailIfExists); + + /** + * Moves an existing file or a directory, including its children. + * + * @param lpExistingFileName + * The current name of the file or directory on the local + * computer. + * + * The name is limited to MAX_PATH characters. To extend this + * limit to 32,767 wide characters, prepend "\\?\" to the path. + * For more information, see Naming a File. + * @param lpNewFileName + * The new name for the file or directory. The new name must not + * already exist. A new file may be on a different file system or + * drive. A new directory must be on the same drive. + * + * The name is limited to MAX_PATH characters. To extend this + * limit to 32,767 wide characters, prepend "\\?\" to the path. + * For more information, see Naming a File. + * @return true, if successful If the function succeeds, the return value is + * nonzero. + * + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + boolean MoveFile(String lpExistingFileName, String lpNewFileName); + + /** + * Moves an existing file or directory, including its children, with various + * move options. + * + * @param lpExistingFileName + * The current name of the file or directory on the local + * computer. + * + * If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT, the file + * cannot exist on a remote share, because delayed operations are + * performed before the network is available. + * + * The name is limited to MAX_PATH characters. To extend this + * limit to 32,767 wide characters, prepend "\\?\" to the path. + * For more information, see Naming a File + * + * Windows 2000: If you prepend the file name with "\\?\", you + * cannot also specify the MOVEFILE_DELAY_UNTIL_REBOOT flag for + * dwFlags. + * @param lpNewFileName + * The new name of the file or directory on the local computer. + * + * When moving a file, the destination can be on a different file + * system or volume. If the destination is on another drive, you + * must set the MOVEFILE_COPY_ALLOWED flag in dwFlags. + * + * When moving a directory, the destination must be on the same + * drive. + * + * If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT and + * lpNewFileName is NULL, MoveFileEx registers the + * lpExistingFileName file to be deleted when the system + * restarts. If lpExistingFileName refers to a directory, the + * system removes the directory at restart only if the directory + * is empty. + * @param dwFlags + * This parameter can be one or more of the following values. + * @return true, if successful If the function succeeds, the return value is + * nonzero. + * + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + boolean MoveFileEx(String lpExistingFileName, String lpNewFileName, + DWORD dwFlags); + + /** + * The CreateDirectory function creates a new directory. If the underlying + * file system supports security on files and directories, the function + * applies a specified security descriptor to the new directory. + * + * @param lpPathName + * Pointer to a null-terminated string that specifies the path of + * the directory to be created. + * @param lpSecurityAttributes + * Pointer to a SECURITY_ATTRIBUTES structure. The + * lpSecurityDescriptor member of the structure specifies a + * security descriptor for the new directory. If + * lpSecurityAttributes is NULL, the directory gets a default + * security descriptor. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean CreateDirectory(String lpPathName, + WinBase.SECURITY_ATTRIBUTES lpSecurityAttributes); + + /** + * Reads data from the specified file or input/output (I/O) device. Reads + * occur at the position specified by the file pointer if supported by the + * device. + * + * This function is designed for both synchronous and asynchronous + * operations. For a similar function designed solely for asynchronous + * operation, see ReadFileEx + * + * @param hFile + * A handle to the device (for example, a file, file stream, + * physical disk, volume, console buffer, tape drive, socket, + * communications resource, mailslot, or pipe). + * @param lpBuffer + * A pointer to the buffer that receives the data read from a + * file or device. + * @param nNumberOfBytesToRead + * The maximum number of bytes to be read. + * @param lpNumberOfBytesRead + * A pointer to the variable that receives the number of bytes + * read when using a synchronous hFile parameter + * @param lpOverlapped + * A pointer to an OVERLAPPED structure is required if the hFile + * parameter was opened with FILE_FLAG_OVERLAPPED, otherwise it + * can be NULL. + * @return If the function succeeds, the return value is nonzero (TRUE). If + * the function fails, or is completing asynchronously, the return + * value is zero (FALSE). To get extended error information, call + * the GetLastError function. + * + * Note The GetLastError code ERROR_IO_PENDING is not a failure; it + * designates the read operation is pending completion + * asynchronously. For more information, see Remarks. + */ + boolean ReadFile(HANDLE hFile, Pointer lpBuffer, int nNumberOfBytesToRead, + IntByReference lpNumberOfBytesRead, WinBase.OVERLAPPED lpOverlapped); + + /** + * Creates an input/output (I/O) completion port and associates it with a + * specified file handle, or creates an I/O completion port that is not yet + * associated with a file handle, allowing association at a later time. + * + * @param FileHandle + * An open file handle or INVALID_HANDLE_VALUE. + * @param ExistingCompletionPort + * A handle to an existing I/O completion port or NULL. + * @param CompletionKey + * The per-handle user-defined completion key that is included in + * every I/O completion packet for the specified file handle. + * @param NumberOfConcurrentThreads + * The maximum number of threads that the operating system can + * allow to concurrently process I/O completion packets for the + * I/O completion port. + * @return If the function succeeds, the return value is the handle to an + * I/O completion port: If the ExistingCompletionPort parameter was + * NULL, the return value is a new handle. If the + * ExistingCompletionPort parameter was a valid I/O completion port + * handle, the return value is that same handle. If the FileHandle + * parameter was a valid handle, that file handle is now associated + * with the returned I/O completion port. If the function fails, the + * return value is NULL. To get extended error information, call the + * GetLastError function. + */ + HANDLE CreateIoCompletionPort(HANDLE FileHandle, + HANDLE ExistingCompletionPort, Pointer CompletionKey, + int NumberOfConcurrentThreads); + + /** + * Attempts to dequeue an I/O completion packet from the specified I/O + * completion port. If there is no completion packet queued, the function + * waits for a pending I/O operation associated with the completion port to + * complete. + * + * @param CompletionPort + * A handle to the completion port. + * @param lpNumberOfBytes + * A pointer to a variable that receives the number of bytes + * transferred during an I/O operation that has completed. + * @param lpCompletionKey + * A pointer to a variable that receives the completion key value + * associated with the file handle whose I/O operation has + * completed. + * @param lpOverlapped + * A pointer to a variable that receives the address of the + * OVERLAPPED structure that was specified when the completed I/O + * operation was started. + * @param dwMilliseconds + * The number of milliseconds that the caller is willing to wait + * for a completion packet to appear at the completion port. + * @return Returns nonzero (TRUE) if successful or zero (FALSE) otherwise. + */ + boolean GetQueuedCompletionStatus(HANDLE CompletionPort, + IntByReference lpNumberOfBytes, + ULONG_PTRByReference lpCompletionKey, + PointerByReference lpOverlapped, int dwMilliseconds); + + /** + * Posts an I/O completion packet to an I/O completion port. + * + * @param CompletionPort + * A handle to an I/O completion port to which the I/O completion + * packet is to be posted. + * @param dwNumberOfBytesTransferred + * The value to be returned through the + * lpNumberOfBytesTransferred parameter of the + * GetQueuedCompletionStatus function. + * @param dwCompletionKey + * The value to be returned through the lpCompletionKey parameter + * of the GetQueuedCompletionStatus function. + * @param lpOverlapped + * The value to be returned through the lpOverlapped parameter of + * the GetQueuedCompletionStatus function. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError . + */ + boolean PostQueuedCompletionStatus(HANDLE CompletionPort, + int dwNumberOfBytesTransferred, Pointer dwCompletionKey, + WinBase.OVERLAPPED lpOverlapped); + + /** + * Waits until the specified object is in the signaled state or the time-out + * interval elapses. To enter an alertable wait state, use the + * WaitForSingleObjectEx function. To wait for multiple objects, use the + * WaitForMultipleObjects. + * + * @param hHandle + * A handle to the object. For a list of the object types whose + * handles can be specified, see the following Remarks section. + * If this handle is closed while the wait is still pending, the + * function's behavior is undefined. The handle must have the + * SYNCHRONIZE access right. For more information, see Standard + * Access Rights. + * @param dwMilliseconds + * The time-out interval, in milliseconds. If a nonzero value is + * specified, the function waits until the object is signaled or + * the interval elapses. If dwMilliseconds is zero, the function + * does not enter a wait state if the object is not signaled; it + * always returns immediately. If dwMilliseconds is INFINITE, the + * function will return only when the object is signaled. + * @return If the function succeeds, the return value indicates the event + * that caused the function to return. + */ + int WaitForSingleObject(HANDLE hHandle, int dwMilliseconds); + + /** + * Waits until one or all of the specified objects are in the signaled state + * or the time-out interval elapses. To enter an alertable wait state, use + * the WaitForMultipleObjectsEx function. + * + * @param nCount + * The number of object handles in the array pointed to by + * lpHandles. The maximum number of object handles is + * MAXIMUM_WAIT_OBJECTS. + * @param hHandle + * An array of object handles. For a list of the object types + * whose handles can be specified, see the following Remarks + * section. The array can contain handles to objects of different + * types. It may not contain multiple copies of the same handle. + * If one of these handles is closed while the wait is still + * pending, the function's behavior is undefined. The handles + * must have the SYNCHRONIZE access right. For more information, + * see Standard Access Rights. + * @param bWaitAll + * If this parameter is TRUE, the function returns when the state + * of all objects in the lpHandles array is signaled. If FALSE, + * the function returns when the state of any one of the objects + * is set to signaled. In the latter case, the return value + * indicates the object whose state caused the function to + * return. + * @param dwMilliseconds + * The time-out interval, in milliseconds. If a nonzero value is + * specified, the function waits until the specified objects are + * signaled or the interval elapses. If dwMilliseconds is zero, + * the function does not enter a wait state if the specified + * objects are not signaled; it always returns immediately. If + * dwMilliseconds is INFINITE, the function will return only when + * the specified objects are signaled. + * @return If the function succeeds, the return value indicates the event + * that caused the function to return. + */ + int WaitForMultipleObjects(int nCount, HANDLE[] hHandle, boolean bWaitAll, + int dwMilliseconds); + + /** + * The DuplicateHandle function duplicates an object handle. + * + * @param hSourceProcessHandle + * Handle to the process with the handle to duplicate. The handle + * must have the PROCESS_DUP_HANDLE access right. + * @param hSourceHandle + * Handle to duplicate. This is an open object handle that is + * valid in the context of the source process. + * @param hTargetProcessHandle + * Handle to the process that is to receive the duplicated + * handle. The handle must have the PROCESS_DUP_HANDLE access + * right. + * @param lpTargetHandle + * Pointer to a variable that receives the duplicate handle. This + * handle value is valid in the context of the target process. If + * hSourceHandle is a pseudo handle returned by GetCurrentProcess + * or GetCurrentThread, DuplicateHandle converts it to a real + * handle to a process or thread, respectively. + * @param dwDesiredAccess + * Access requested for the new handle. + * @param bInheritHandle + * Indicates whether the handle is inheritable. + * @param dwOptions + * Optional actions. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, + HANDLE hTargetProcessHandle, HANDLEByReference lpTargetHandle, + int dwDesiredAccess, boolean bInheritHandle, int dwOptions); + + /** + * The CloseHandle function closes an open object handle. + * + * @param hObject + * Handle to an open object. This parameter can be a pseudo + * handle or INVALID_HANDLE_VALUE. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean CloseHandle(HANDLE hObject); + + /** + * Retrieves information that describes the changes within the specified + * directory. The function does not report changes to the specified + * directory itself. Note: there's no ReadDirectoryChangesA. + * + * @param directory + * A handle to the directory to be monitored. This directory must + * be opened with the FILE_LIST_DIRECTORY access right. + * @param info + * A pointer to the DWORD-aligned formatted buffer in which the + * read results are to be returned. + * @param length + * The size of the buffer that is pointed to by the lpBuffer + * parameter, in bytes. + * @param watchSubtree + * If this parameter is TRUE, the function monitors the directory + * tree rooted at the specified directory. If this parameter is + * FALSE, the function monitors only the directory specified by + * the hDirectory parameter. + * @param notifyFilter + * The filter criteria that the function checks to determine if + * the wait operation has completed. + * @param bytesReturned + * For synchronous calls, this parameter receives the number of + * bytes transferred into the lpBuffer parameter. For + * asynchronous calls, this parameter is undefined. You must use + * an asynchronous notification technique to retrieve the number + * of bytes transferred. + * @param overlapped + * A pointer to an OVERLAPPED structure that supplies data to be + * used during asynchronous operation. Otherwise, this value is + * NULL. The Offset and OffsetHigh members of this structure are + * not used. + * @param completionRoutine + * A pointer to a completion routine to be called when the + * operation has been completed or canceled and the calling + * thread is in an alertable wait state. + * @return If the function succeeds, the return value is nonzero. For + * synchronous calls, this means that the operation succeeded. For + * asynchronous calls, this indicates that the operation was + * successfully queued. If the function fails, the return value is + * zero. To get extended error information, call GetLastError. If + * the network redirector or the target file system does not support + * this operation, the function fails with ERROR_INVALID_FUNCTION. + */ + public boolean ReadDirectoryChangesW(HANDLE directory, + WinNT.FILE_NOTIFY_INFORMATION info, int length, + boolean watchSubtree, int notifyFilter, + IntByReference bytesReturned, WinBase.OVERLAPPED overlapped, + OVERLAPPED_COMPLETION_ROUTINE completionRoutine); + + /** + * Retrieves the short path form of the specified path. + * + * @param lpszLongPath + * The path string. + * @param lpdzShortPath + * A pointer to a buffer to receive the null-terminated short + * form of the path that lpszLongPath specifies. + * @param cchBuffer + * The size of the buffer that lpszShortPath points to, in + * TCHARs. + * @return If the function succeeds, the return value is the length, in + * TCHARs, of the string that is copied to lpszShortPath, not + * including the terminating null character. If the lpszShortPath + * buffer is too small to contain the path, the return value is the + * size of the buffer, in TCHARs, that is required to hold the path + * and the terminating null character. If the function fails for any + * other reason, the return value is zero. To get extended error + * information, call GetLastError. + */ + int GetShortPathName(String lpszLongPath, char[] lpdzShortPath, + int cchBuffer); + + /** + * The LocalAlloc function allocates the specified number of bytes from the + * heap. Windows memory management does not provide a separate local heap + * and global heap. + * + * @param uFlags + * Memory allocation attributes. The default is the LMEM_FIXED + * value. + * @param uBytes + * Number of bytes to allocate. If this parameter is zero and the + * uFlags parameter specifies LMEM_MOVEABLE, the function returns + * a handle to a memory object that is marked as discarded. + * @return If the function succeeds, the return value is a handle to the + * newly allocated memory object. If the function fails, the return + * value is NULL. To get extended error information, call + * GetLastError. + */ + Pointer LocalAlloc(int /* UINT */ uFlags, int /* SIZE_T */ uBytes); + + /** + * Writes data to the specified file or input/output (I/O) device. + * + * @param hFile + * A handle to the file or I/O device (for example, a file, file + * stream, physical disk, volume, console buffer, tape drive, + * socket, communications resource, mailslot, or pipe). + * @param lpBuffer + * A pointer to the buffer containing the data to be written to + * the file or device. + * @param nNumberOfBytesToWrite + * The number of bytes to be written to the file or device. + * @param lpNumberOfBytesWritten + * A pointer to the variable that receives the number of bytes + * written when using a synchronous hFile parameter. + * @param lpOverlapped + * A pointer to an OVERLAPPED structure is required if the hFile + * parameter was opened with FILE_FLAG_OVERLAPPED, otherwise this + * parameter can be NULL. + * @return If the function succeeds, the return value is nonzero (TRUE). If + * the function fails, or is completing asynchronously, the return + * value is zero (FALSE). To get extended error information, call + * the GetLastError function. + */ + boolean WriteFile(HANDLE hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, + IntByReference lpNumberOfBytesWritten, + WinBase.OVERLAPPED lpOverlapped); + + /** + * Creates or opens a named or unnamed event object. + * + * @param lpEventAttributes + * A pointer to a SECURITY_ATTRIBUTES structure. If this + * parameter is NULL, the handle cannot be inherited by child + * processes. + * @param bManualReset + * If this parameter is TRUE, the function creates a manual-reset + * event object, which requires the use of the ResetEvent + * function to set the event state to nonsignaled. If this + * parameter is FALSE, the function creates an auto-reset event + * object, and system automatically resets the event state to + * nonsignaled after a single waiting thread has been released. + * @param bInitialState + * If this parameter is TRUE, the initial state of the event + * object is signaled; otherwise, it is nonsignaled. + * @param lpName + * The name of the event object. The name is limited to MAX_PATH + * characters. Name comparison is case sensitive. + * @return If the function succeeds, the return value is a handle to the + * event object. If the named event object existed before the + * function call, the function returns a handle to the existing + * object and GetLastError returns ERROR_ALREADY_EXISTS. If the + * function fails, the return value is NULL. To get extended error + * information, call GetLastError. + */ + HANDLE CreateEvent(WinBase.SECURITY_ATTRIBUTES lpEventAttributes, + boolean bManualReset, boolean bInitialState, String lpName); + + /** + * Sets the specified event object to the signaled state. + * + * @param hEvent + * A handle to the event object. The CreateEvent or OpenEvent + * function returns this handle. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean SetEvent(HANDLE hEvent); + + /** + * Sets the specified event object to the signaled state and then resets it + * to the nonsignaled state after releasing the appropriate number of + * waiting threads. + * + * @param hEvent + * A handle to the event object. The CreateEvent or OpenEvent + * function returns this handle. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean PulseEvent(HANDLE hEvent); + + /** + * Creates or opens a named or unnamed file mapping object for a specified + * file. + * + * @param hFile + * A handle to the file from which to create a file mapping + * object. + * @param lpAttributes + * A pointer to a SECURITY_ATTRIBUTES structure that determines + * whether a returned handle can be inherited by child processes. + * The lpSecurityDescriptor member of the SECURITY_ATTRIBUTES + * structure specifies a security descriptor for a new file + * mapping object. + * @param flProtect + * Specifies the page protection of the file mapping object. All + * mapped views of the object must be compatible with this + * protection. + * @param dwMaximumSizeHigh + * The high-order DWORD of the maximum size of the file mapping + * object. + * @param dwMaximumSizeLow + * The low-order DWORD of the maximum size of the file mapping + * object. + * @param lpName + * The name of the file mapping object. + * @return If the function succeeds, the return value is a handle to the + * newly created file mapping object. If the object exists before + * the function call, the function returns a handle to the existing + * object (with its current size, not the specified size), and + * GetLastError returns ERROR_ALREADY_EXISTS. If the function fails, + * the return value is NULL. To get extended error information, call + * GetLastError. + */ + HANDLE CreateFileMapping(HANDLE hFile, + WinBase.SECURITY_ATTRIBUTES lpAttributes, int flProtect, + int dwMaximumSizeHigh, int dwMaximumSizeLow, String lpName); + + /** + * Maps a view of a file mapping into the address space of a calling + * process. + * + * @param hFileMappingObject + * A handle to a file mapping object. The CreateFileMapping and + * OpenFileMapping functions return this handle. + * @param dwDesiredAccess + * The type of access to a file mapping object, which determines + * the protection of the pages. + * @param dwFileOffsetHigh + * A high-order DWORD of the file offset where the view begins. + * @param dwFileOffsetLow + * A low-order DWORD of the file offset where the view is to + * begin. + * @param dwNumberOfBytesToMap + * The number of bytes of a file mapping to map to the view. + * @return If the function succeeds, the return value is the starting + * address of the mapped view. If the function fails, the return + * value is NULL. To get extended error information, call + * GetLastError. + */ + Pointer MapViewOfFile(HANDLE hFileMappingObject, int dwDesiredAccess, + int dwFileOffsetHigh, int dwFileOffsetLow, int dwNumberOfBytesToMap); + + /** + * Unmaps a mapped view of a file from the calling process's address space. + * + * @param lpBaseAddress + * A pointer to the base address of the mapped view of a file + * that is to be unmapped. + * @return If the function succeeds, the return value is the starting + * address of the mapped view. If the function fails, the return + * value is NULL. To get extended error information, call + * GetLastError. + */ + boolean UnmapViewOfFile(Pointer lpBaseAddress); + + /** + * Retrieves only the NetBIOS name of the local computer. + * + * @param buffer + * A pointer to a buffer that receives the computer name or the + * cluster virtual server name. The buffer size should be large + * enough to contain MAX_COMPUTERNAME_LENGTH + 1 characters. + * @param lpnSize + * On input, specifies the size of the buffer, in TCHARs. On + * output, the number of TCHARs copied to the destination buffer, + * not including the terminating null character. If the buffer is + * too small, the function fails and GetLastError returns + * ERROR_BUFFER_OVERFLOW. The lpnSize parameter specifies the + * size of the buffer required, including the terminating null + * character. + * @return If the function succeeds, the return value is a nonzero value. If + * the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + public boolean GetComputerName(char[] buffer, IntByReference lpnSize); + + /** + * The OpenThread function opens an existing thread object. + * + * @param dwDesiredAccess + * Access to the thread object. This access right is checked + * against any security descriptor for the thread. + * @param bInheritHandle + * If this parameter is TRUE, the new process inherits the + * handle. If the parameter is FALSE, the handle is not + * inherited. + * @param dwThreadId + * Identifier of the thread to be opened. + * @return If the function succeeds, the return value is an open handle to + * the specified process. If the function fails, the return value is + * NULL. To get extended error information, call GetLastError. + */ + HANDLE OpenThread(int dwDesiredAccess, boolean bInheritHandle, + int dwThreadId); + + /** + * Creates a new process and its primary thread. The new process runs in the + * security context of the calling process. + * + * @param lpApplicationName + * The name of the module to be executed. + * @param lpCommandLine + * The command line to be executed. + * @param lpProcessAttributes + * A pointer to a SECURITY_ATTRIBUTES structure that determines + * whether the returned handle to the new process object can be + * inherited by child processes. If lpProcessAttributes is NULL, + * the handle cannot be inherited. + * + * @param lpThreadAttributes + * A pointer to a SECURITY_ATTRIBUTES structure that determines + * whether the returned handle to the new thread object can be + * inherited by child processes. If lpThreadAttributes is NULL, + * the handle cannot be inherited. + * + * @param bInheritHandles + * If this parameter TRUE, each inheritable handle in the calling + * process is inherited by the new process. If the parameter is + * FALSE, the handles are not inherited. Note that inherited + * handles have the same value and access rights as the original + * handles. + * + * @param dwCreationFlags + * The flags that control the priority class and the creation of + * the process. + * @param lpEnvironment + * A pointer to the environment block for the new process. If + * this parameter is NULL, the new process uses the environment + * of the calling process. + * + * @param lpCurrentDirectory + * The full path to the current directory for the process. + * @param lpStartupInfo + * A pointer to a STARTUPINFO or STARTUPINFOEX structure. + * @param lpProcessInformation + * A pointer to a PROCESS_INFORMATION structure that receives + * identification information about the new process. + * @return If the function succeeds, the return value is nonzero. + */ + boolean CreateProcess(String lpApplicationName, String lpCommandLine, + WinBase.SECURITY_ATTRIBUTES lpProcessAttributes, + WinBase.SECURITY_ATTRIBUTES lpThreadAttributes, + boolean bInheritHandles, DWORD dwCreationFlags, + Pointer lpEnvironment, String lpCurrentDirectory, + WinBase.STARTUPINFO lpStartupInfo, + WinBase.PROCESS_INFORMATION lpProcessInformation); + + /** + * Creates a new process and its primary thread. The new process runs in the + * security context of the calling process. + * + * @param lpApplicationName + * The name of the module to be executed. + * @param lpCommandLine + * The command line to be executed. The maximum length of + * this string is 32,768 characters, including the Unicode + * terminating null character. If lpApplicationName is + * NULL, the module name portion of lpCommandLine is + * limited to MAX_PATH characters. + *

+ * The Unicode version of this function, {@link #CreateProcessW}, + * can modify the contents of this string. Therefore, this + * parameter cannot be a pointer to read-only memory (such + * as a const variable or a literal string). If this + * parameter is a constant string, the function may cause + * an access violation. + *

+ * The lpCommandLine parameter can be NULL. In that case, + * the function uses the string pointed to by + * lpApplicationName as the command line. + *

+ * If both lpApplicationName and lpCommandLine are + * non-NULL, the null-terminated string pointed to by + * lpApplicationName specifies the module to execute, and + * the null-terminated string pointed to by lpCommandLine + * specifies the command line. The new process can use + * GetCommandLine to retrieve the entire command + * line. Console processes written in C can use the argc + * and argv arguments to parse the command line. Because + * argv[0] is the module name, C programmers generally + * repeat the module name as the first token in the command + * line. + *

+ * If lpApplicationName is NULL, the first white + * space-delimited token of the command line specifies the + * module name. If you are using a long file name that + * contains a space, use quoted strings to indicate where + * the file name ends and the arguments begin (see the + * explanation for the lpApplicationName parameter). If the + * file name does not contain an extension, .exe is + * appended. Therefore, if the file name extension is .com, + * this parameter must include the .com extension. If the + * file name ends in a period (.) with no extension, or if + * the file name contains a path, .exe is not appended. If + * the file name does not contain a directory path, the + * system searches for the executable file in the following + * sequence: + *

    + *
  • The directory from which the application loaded. + *
  • The current directory for the parent process. + *
  • The 32-bit Windows system directory. Use the + * GetSystemDirectory function to get the path of this + * directory. + *
  • The 16-bit Windows system directory. There is no + * function that obtains the path of this directory, but it + * is searched. The name of this directory is System. + *
  • The Windows directory. Use the GetWindowsDirectory + * function to get the path of this directory. + *
  • The directories that are listed in the PATH + * environment variable. Note that this function does not + * search the per-application path specified by the App + * Paths registry key. To include this per-application path + * in the search sequence, use the ShellExecute function. + *
+ * The system adds a terminating null character to the + * command-line string to separate the file name from the + * arguments. This divides the original string into two + * strings for internal processing. + * @param lpProcessAttributes + * A pointer to a SECURITY_ATTRIBUTES structure that determines + * whether the returned handle to the new process object can be + * inherited by child processes. If lpProcessAttributes is NULL, + * the handle cannot be inherited. + * @param lpThreadAttributes + * A pointer to a SECURITY_ATTRIBUTES structure that determines + * whether the returned handle to the new thread object can be + * inherited by child processes. If lpThreadAttributes is NULL, + * the handle cannot be inherited. + * @param bInheritHandles + * If this parameter TRUE, each inheritable handle in the calling + * process is inherited by the new process. If the parameter is + * FALSE, the handles are not inherited. Note that inherited + * handles have the same value and access rights as the original + * handles. + * @param dwCreationFlags + * The flags that control the priority class and the creation of + * the process. + * @param lpEnvironment + * A pointer to the environment block for the new process. If + * this parameter is NULL, the new process uses the environment + * of the calling process. + * @param lpCurrentDirectory + * The full path to the current directory for the process. + * @param lpStartupInfo + * A pointer to a STARTUPINFO or STARTUPINFOEX structure. + * @param lpProcessInformation + * A pointer to a PROCESS_INFORMATION structure that receives + * identification information about the new process. + * @return If the function succeeds, the return value is nonzero. + */ + boolean CreateProcessW(String lpApplicationName, char[] lpCommandLine, + WinBase.SECURITY_ATTRIBUTES lpProcessAttributes, + WinBase.SECURITY_ATTRIBUTES lpThreadAttributes, + boolean bInheritHandles, DWORD dwCreationFlags, + Pointer lpEnvironment, String lpCurrentDirectory, + WinBase.STARTUPINFO lpStartupInfo, + WinBase.PROCESS_INFORMATION lpProcessInformation); + + /** + * This function returns a handle to an existing process object. + * + * @param fdwAccess + * Not supported; set to zero. + * @param fInherit + * Not supported; set to FALSE. + * @param IDProcess + * Specifies the process identifier of the process to open. + * @return An open handle to the specified process indicates success. NULL + * indicates failure. To get extended error information, call + * GetLastError. + */ + HANDLE OpenProcess(int fdwAccess, boolean fInherit, int IDProcess); + + /** + * The GetTempPath function retrieves the path of the directory designated + * for temporary files. + * + * @param nBufferLength + * Size of the string buffer identified by lpBuffer, in TCHARs. + * @param buffer + * Pointer to a string buffer that receives the null-terminated + * string specifying the temporary file path. The returned string + * ends with a backslash, for example, C:\TEMP\. + * @return If the function succeeds, the return value is the length, in + * TCHARs, of the string copied to lpBuffer, not including the + * terminating null character. If the return value is greater than + * nBufferLength, the return value is the length, in TCHARs, of the + * buffer required to hold the path. + * + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + DWORD GetTempPath(DWORD nBufferLength, char[] buffer); + + /** + * The GetVersion function returns the current version number of the + * operating system. + * + * @return If the function succeeds, the return value includes the major and + * minor version numbers of the operating system in the low order + * word, and information about the operating system platform in the + * high order word. + */ + DWORD GetVersion(); + + /** + * The GetVersionEx function obtains extended information about the version + * of the operating system that is currently running. + * + * @param lpVersionInfo + * Pointer to an OSVERSIONINFO data structure that the function + * fills with operating system version information. + * @return If the function succeeds, the return value is a nonzero value. If + * the function fails, the return value is zero. To get extended + * error information, call GetLastError. The function fails if you + * specify an invalid value for the dwOSVersionInfoSize member of + * the OSVERSIONINFO or OSVERSIONINFOEX structure. + */ + boolean GetVersionEx(OSVERSIONINFO lpVersionInfo); + + /** + * The GetVersionEx function obtains extended information about the version + * of the operating system that is currently running. + * + * @param lpVersionInfo + * Pointer to an OSVERSIONINFOEX data structure that the function + * fills with operating system version information. + * @return If the function succeeds, the return value is a nonzero value. If + * the function fails, the return value is zero. To get extended + * error information, call GetLastError. The function fails if you + * specify an invalid value for the dwOSVersionInfoSize member of + * the OSVERSIONINFO or OSVERSIONINFOEX structure. + */ + boolean GetVersionEx(OSVERSIONINFOEX lpVersionInfo); + + /** + * The GetSystemInfo function returns information about the current system. + * + * @param lpSystemInfo + * Pointer to a SYSTEM_INFO structure that receives the + * information. + */ + void GetSystemInfo(SYSTEM_INFO lpSystemInfo); + + /** + * The GetNativeSystemInfo function retrieves information about the current + * system to an application running under WOW64. If the function is called + * from a 64-bit application, it is equivalent to the GetSystemInfo + * function. + * + * @param lpSystemInfo + * Pointer to a SYSTEM_INFO structure that receives the + * information. + */ + void GetNativeSystemInfo(SYSTEM_INFO lpSystemInfo); + + /** + * The IsWow64Process function determines whether the specified process is + * running under WOW64. + * + * @param hProcess + * Handle to a process. + * @param Wow64Process + * Pointer to a value that is set to TRUE if the process is + * running under WOW64. Otherwise, the value is set to FALSE. + * @return If the function succeeds, the return value is a nonzero value. If + * the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + boolean IsWow64Process(HANDLE hProcess, IntByReference Wow64Process); /** * Retrieves information about logical processors and related hardware. @@ -1364,502 +1366,502 @@ boolean CreateProcessW(String lpApplicationName, char[] lpCommandLine, */ boolean GetLogicalProcessorInformation(Pointer buffer, DWORDByReference returnLength); - /** - * Retrieves information about the system's current usage of both physical - * and virtual memory. - * - * @param lpBuffer - * A pointer to a MEMORYSTATUSEX structure that receives - * information about current memory availability. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean GlobalMemoryStatusEx(MEMORYSTATUSEX lpBuffer); - - /** - * Retrieves the date and time that a file or directory was created, last - * accessed, and last modified. - * - * @param hFile - * A handle to the file or directory for which dates and times - * are to be retrieved. The handle must have been created using - * the CreateFile function with the GENERIC_READ access right. - * - * @param lpCreationTime - * A pointer to a FILETIME structure to receive the date and time - * the file or directory was created. This parameter can be NULL - * if the application does not require this information. - * - * @param lpLastAccessTime - * A pointer to a FILETIME structure to receive the date and time - * the file or directory was last accessed. The last access time - * includes the last time the file or directory was written to, - * read from, or, in the case of executable files, run. This - * parameter can be NULL if the application does not require this - * information. - * - * @param lpLastWriteTime - * A pointer to a FILETIME structure to receive the date and time - * the file or directory was last written to, truncated, or - * overwritten (for example, with WriteFile or SetEndOfFile). - * This date and time is not updated when file attributes or - * security descriptors are changed. This parameter can be NULL - * if the application does not require this information. - * - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean GetFileTime(HANDLE hFile, + /** + * Retrieves information about the system's current usage of both physical + * and virtual memory. + * + * @param lpBuffer + * A pointer to a MEMORYSTATUSEX structure that receives + * information about current memory availability. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean GlobalMemoryStatusEx(MEMORYSTATUSEX lpBuffer); + + /** + * Retrieves the date and time that a file or directory was created, last + * accessed, and last modified. + * + * @param hFile + * A handle to the file or directory for which dates and times + * are to be retrieved. The handle must have been created using + * the CreateFile function with the GENERIC_READ access right. + * + * @param lpCreationTime + * A pointer to a FILETIME structure to receive the date and time + * the file or directory was created. This parameter can be NULL + * if the application does not require this information. + * + * @param lpLastAccessTime + * A pointer to a FILETIME structure to receive the date and time + * the file or directory was last accessed. The last access time + * includes the last time the file or directory was written to, + * read from, or, in the case of executable files, run. This + * parameter can be NULL if the application does not require this + * information. + * + * @param lpLastWriteTime + * A pointer to a FILETIME structure to receive the date and time + * the file or directory was last written to, truncated, or + * overwritten (for example, with WriteFile or SetEndOfFile). + * This date and time is not updated when file attributes or + * security descriptors are changed. This parameter can be NULL + * if the application does not require this information. + * + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean GetFileTime(HANDLE hFile, WinBase.FILETIME lpCreationTime, WinBase.FILETIME lpLastAccessTime, WinBase.FILETIME lpLastWriteTime); - /** - * Sets the date and time that the specified file or directory was created, - * last accessed, or last modified. - * - * @param hFile - * A handle to the file or directory. The handle must have been - * created using the CreateFile function with the - * FILE_WRITE_ATTRIBUTES access right. For more information, see - * File Security and Access Rights. - * @param lpCreationTime - * A pointer to a FILETIME structure that contains the new - * creation date and time for the file or directory. This - * parameter can be NULL if the application does not need to - * change this information. - * @param lpLastAccessTime - * A pointer to a FILETIME structure that contains the new last - * access date and time for the file or directory. The last - * access time includes the last time the file or directory was - * written to, read from, or (in the case of executable files) - * run. This parameter can be NULL if the application does not - * need to change this information. - * - * To preserve the existing last access time for a file even - * after accessing a file, call SetFileTime immediately after - * opening the file handle with this parameter's FILETIME - * structure members initialized to 0xFFFFFFFF. - * @param lpLastWriteTime - * A pointer to a FILETIME structure that contains the new last - * modified date and time for the file or directory. This - * parameter can be NULL if the application does not need to - * change this information. - * @return If the function succeeds, the return value is nonzero. - * - * If the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - int SetFileTime(HANDLE hFile, WinBase.FILETIME lpCreationTime, - WinBase.FILETIME lpLastAccessTime, WinBase.FILETIME lpLastWriteTime); - - /** - * Sets the attributes for a file or directory. - * - * @param lpFileName - * The name of the file whose attributes are to be set. - * - * The name is limited to MAX_PATH characters. To extend this - * limit to 32,767 wide characters, prepend "\\?\" to the path. - * - * @param dwFileAttributes - * The file attributes to set for the file. This parameter can be - * one or more values, combined using the bitwise-OR operator. - * However, all other values override FILE_ATTRIBUTE_NORMAL. - * - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean SetFileAttributes(String lpFileName, DWORD dwFileAttributes); - - /** - * The GetLogicalDriveStrings function fills a buffer with strings that - * specify valid drives in the system. - * - * @param nBufferLength - * Maximum size of the buffer pointed to by lpBuffer, in TCHARs. - * This size does not include the terminating null character. If - * this parameter is zero, lpBuffer is not used. - * @param lpBuffer - * Pointer to a buffer that receives a series of null-terminated - * strings, one for each valid drive in the system, plus with an - * additional null character. Each string is a device name. - * @return If the function succeeds, the return value is the length, in - * characters, of the strings copied to the buffer, not including - * the terminating null character. Note that an ANSI-ASCII null - * character uses one byte, but a Unicode null character uses two - * bytes. If the buffer is not large enough, the return value is - * greater than nBufferLength. It is the size of the buffer required - * to hold the drive strings. If the function fails, the return - * value is zero. To get extended error information, use the - * GetLastError function. - */ - DWORD GetLogicalDriveStrings(DWORD nBufferLength, char[] lpBuffer); - - /** - * The GetDiskFreeSpaceEx function retrieves information about the amount of - * space that is available on a disk volume, which is the total amount of - * space, the total amount of free space, and the total amount of free space - * available to the user that is associated with the calling thread. - * - * @param lpDirectoryName - * A pointer to a null-terminated string that specifies a - * directory on a disk. If this parameter is NULL, the function - * uses the root of the current disk. If this parameter is a UNC - * name, it must include a trailing backslash, for example, - * \\MyServer\MyShare\. This parameter does not have to specify - * the root directory on a disk. The function accepts any - * directory on a disk. - * @param lpFreeBytesAvailable - * A pointer to a variable that receives the total number of free - * bytes on a disk that are available to the user who is - * associated with the calling thread. This parameter can be - * NULL. - * @param lpTotalNumberOfBytes - * A pointer to a variable that receives the total number of - * bytes on a disk that are available to the user who is - * associated with the calling thread. This parameter can be - * NULL. - * @param lpTotalNumberOfFreeBytes - * A pointer to a variable that receives the total number of free - * bytes on a disk. This parameter can be NULL. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is 0 (zero). To get extended - * error information, call GetLastError. - */ - boolean GetDiskFreeSpaceEx(String lpDirectoryName, - LARGE_INTEGER lpFreeBytesAvailable, - LARGE_INTEGER lpTotalNumberOfBytes, - LARGE_INTEGER lpTotalNumberOfFreeBytes); - - /** - * Deletes an existing file. - * - * @param filename - * The name of the file to be deleted. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero (0). To get extended - * error information, call GetLastError. - */ - public boolean DeleteFile(String filename); - - /** - * Creates an anonymous pipe, and returns handles to the read and write ends - * of the pipe. - * - * @param hReadPipe - * A pointer to a variable that receives the read handle for the - * pipe. - * @param hWritePipe - * A pointer to a variable that receives the write handle for the - * pipe. - * @param lpPipeAttributes - * A pointer to a SECURITY_ATTRIBUTES structure that determines - * whether the returned handle can be inherited by child - * processes. - * @param nSize - * The size of the buffer for the pipe, in bytes. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - public boolean CreatePipe(HANDLEByReference hReadPipe, - HANDLEByReference hWritePipe, - WinBase.SECURITY_ATTRIBUTES lpPipeAttributes, int nSize); - - /** - * Sets certain properties of an object handle. - * - * @param hObject - * A handle to an object whose information is to be set. - * @param dwMask - * A mask that specifies the bit flags to be changed. Use the - * same constants shown in the description of dwFlags. - * @param dwFlags - * Set of bit flags that specifies properties of the object - * handle. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean SetHandleInformation(HANDLE hObject, int dwMask, int dwFlags); - - /** - * Retrieves file system attributes for a specified file or directory. - * - * @param lpFileName - * The name of the file or directory. Prepend \\?\ to the path - * for names up to 32,767 wide characters - * @return INVALID_FILE_ATTRIBUTES if the function fails, otherwise the file - * attributes WinNT.FILE_ATTRIBUTE_* - */ - public int GetFileAttributes(String lpFileName); - - /** - * Retrieves the file type of the specified file. - * - * @param hFile - * A handle to the file. - * @return FILE_TYPE_UNKNOWN if the function fails, or if the type is - * unknown. You can distinguish between a "valid" return of - * FILE_TYPE_UNKNOWN and its return due to a calling error (for - * example, passing an invalid handle to GetFileType) by calling - * GetLastError. If the function worked properly and - * FILE_TYPE_UNKNOWN was returned, a call to GetLastError will - * return NO_ERROR. - */ - public int GetFileType(HANDLE hFile); - - /** - * Sends a control code directly to a specified device driver, causing the - * corresponding device to perform the corresponding operation. - * - * @param hDevice - * A handle to the device on which the operation is to be - * performed. The device is typically a volume, directory, file, - * or stream. To retrieve a device handle, use the CreateFile - * function. For more information, see Remarks. - * - * @param dwIoControlCode - * The control code for the operation. This value identifies the - * specific operation to be performed and the type of device on - * which to perform it. For a list of the control codes, see - * Remarks. The documentation for each control code provides - * usage details for the lpInBuffer, nInBufferSize, lpOutBuffer, - * and nOutBufferSize parameters. - * - * @param lpInBuffer - * A pointer to the input buffer that contains the data required - * to perform the operation. The format of this data depends on - * the value of the dwIoControlCode parameter. This parameter can - * be NULL if dwIoControlCode specifies an operation that does - * not require input data. - * - * @param nInBufferSize - * The size of the input buffer, in bytes. - * - * @param lpOutBuffer - * A pointer to the output buffer that is to receive the data - * returned by the operation. The format of this data depends on - * the value of the dwIoControlCode parameter. This parameter can - * be NULL if dwIoControlCode specifies an operation that does - * not return data. - * - * @param nOutBufferSize - * The size of the output buffer, in bytes. - * - * @param lpBytesReturned - * A pointer to a variable that receives the size of the data - * stored in the output buffer, in bytes. If the output buffer is - * too small to receive any data, the call fails, GetLastError - * returns ERROR_INSUFFICIENT_BUFFER, and lpBytesReturned is - * zero. If the output buffer is too small to hold all of the - * data but can hold some entries, some drivers will return as - * much data as fits. In this case, the call fails, GetLastError - * returns ERROR_MORE_DATA, and lpBytesReturned indicates the - * amount of data received. Your application should call - * DeviceIoControl again with the same operation, specifying a - * new starting point. If lpOverlapped is NULL, lpBytesReturned - * cannot be NULL. Even when an operation returns no output data - * and lpOutBuffer is NULL, DeviceIoControl makes use of - * lpBytesReturned. After such an operation, the value of - * lpBytesReturned is meaningless. If lpOverlapped is not NULL, - * lpBytesReturned can be NULL. If this parameter is not NULL and - * the operation returns data, lpBytesReturned is meaningless - * until the overlapped operation has completed. To retrieve the - * number of bytes returned, call GetOverlappedResult. If hDevice - * is associated with an I/O completion port, you can retrieve - * the number of bytes returned by calling - * GetQueuedCompletionStatus. - * - * @param lpOverlapped - * A pointer to an OVERLAPPED structure. If hDevice was opened - * without specifying FILE_FLAG_OVERLAPPED, lpOverlapped is - * ignored. If hDevice was opened with the FILE_FLAG_OVERLAPPED - * flag, the operation is performed as an overlapped - * (asynchronous) operation. In this case, lpOverlapped must - * point to a valid OVERLAPPED structure that contains a handle - * to an event object. Otherwise, the function fails in - * unpredictable ways. For overlapped operations, DeviceIoControl - * returns immediately, and the event object is signaled when the - * operation has been completed. Otherwise, the function does not - * return until the operation has been completed or an error - * occurs. - * - * @return If the function succeeds, the return value is nonzero. - * - * If the function fails, the return value is zero. To get extended - * error information, call GetLastError. - */ - boolean DeviceIoControl(HANDLE hDevice, int dwIoControlCode, - Pointer lpInBuffer, int nInBufferSize, Pointer lpOutBuffer, - int nOutBufferSize, IntByReference lpBytesReturned, - Pointer lpOverlapped); - - /** - * Retrieves information about the amount of space that is available on a - * disk volume, which is the total amount of space, the total amount of free - * space, and the total amount of free space available to the user that is - * associated with the calling thread. - * - * @param lpDirectoryName - * the lp directory name - * @param lpFreeBytesAvailable - * the lp free bytes available - * @param lpTotalNumberOfBytes - * the lp total number of bytes - * @param lpTotalNumberOfFreeBytes - * the lp total number of free bytes - * @return If the function succeeds, the return value is nonzero. - * - * If the function fails, the return value is zero (0). To get - * extended error information, call GetLastError. - */ - boolean GetDiskFreeSpaceEx(String lpDirectoryName, - LongByReference lpFreeBytesAvailable, - LongByReference lpTotalNumberOfBytes, - LongByReference lpTotalNumberOfFreeBytes); - - /** - * Takes a snapshot of the specified processes, as well as the heaps, - * modules, and threads used by these processes. - * - * @param dwFlags - * The portions of the system to be included in the snapshot. - * - * @param th32ProcessID - * The process identifier of the process to be included in the - * snapshot. This parameter can be zero to indicate the current - * process. This parameter is used when the TH32CS_SNAPHEAPLIST, - * TH32CS_SNAPMODULE, TH32CS_SNAPMODULE32, or TH32CS_SNAPALL - * value is specified. Otherwise, it is ignored and all processes - * are included in the snapshot. - * - * If the specified process is the Idle process or one of the - * CSRSS processes, this function fails and the last error code - * is ERROR_ACCESS_DENIED because their access restrictions - * prevent user-level code from opening them. - * - * If the specified process is a 64-bit process and the caller is - * a 32-bit process, this function fails and the last error code - * is ERROR_PARTIAL_COPY (299). - * - * @return If the function succeeds, it returns an open handle to the - * specified snapshot. - * - * If the function fails, it returns INVALID_HANDLE_VALUE. To get - * extended error information, call GetLastError. Possible error - * codes include ERROR_BAD_LENGTH. - */ - HANDLE CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID); - - /** - * Retrieves information about the first process encountered in a system - * snapshot. - * - * @param hSnapshot - * A handle to the snapshot returned from a previous call to the - * CreateToolhelp32Snapshot function. - * @param lppe - * A pointer to a PROCESSENTRY32 structure. It contains process - * information such as the name of the executable file, the - * process identifier, and the process identifier of the parent - * process. - * @return Returns TRUE if the first entry of the process list has been - * copied to the buffer or FALSE otherwise. The ERROR_NO_MORE_FILES - * error value is returned by the GetLastError function if no - * processes exist or the snapshot does not contain process - * information. - */ - boolean Process32First(HANDLE hSnapshot, - Tlhelp32.PROCESSENTRY32 lppe); - - /** - * Retrieves information about the next process recorded in a system - * snapshot. - * - * @param hSnapshot - * A handle to the snapshot returned from a previous call to the - * CreateToolhelp32Snapshot function. - * @param lppe - * A pointer to a PROCESSENTRY32 structure. - * @return Returns TRUE if the next entry of the process list has been - * copied to the buffer or FALSE otherwise. The ERROR_NO_MORE_FILES - * error value is returned by the GetLastError function if no - * processes exist or the snapshot does not contain process - * information. - */ - boolean Process32Next(HANDLE hSnapshot, - Tlhelp32.PROCESSENTRY32 lppe); - - /** - * The SetEnvironmentVariable function sets the contents of the specified - * environment variable for the current process. - * - * @param lpName - * Pointer to a string containing the name of the environment - * variable to set. - * @param lpValue - * Pointer to a string containing the value to set it to. if this - * value is NULL, the variable is deleted from the current - * process' environment. - * - * @return If the function succeeds, the return value is non-zero. If the - * function fails, the return value is zero. To get extended error - * information, call GetLastError. - */ - boolean SetEnvironmentVariable(String lpName, String lpValue); - - /** - * Retrieves the contents of the specified variable from the environment - * block of the calling process. - * - * @param lpName - * The name of the environment variable. - * @param lpBuffer - * A pointer to a buffer that receives the contents of the - * specified environment variable as a null-terminated string. An - * environment variable has a maximum size limit of 32,767 - * characters, including the null-terminating character. - * @param nSize - * The size of the buffer pointed to by the lpBuffer parameter, - * including the null-terminating character, in characters. - * @return If the function succeeds, the return value is the number of - * characters stored in the buffer pointed to by lpBuffer, not - * including the terminating null character. If lpBuffer is not - * large enough to hold the data, the return value is the buffer - * size, in characters, required to hold the string and its - * terminating null character and the contents of lpBuffer are - * undefined. If the function fails, the return value is zero. To - * get extended error information, call GetLastError. - */ - int GetEnvironmentVariable(String lpName, char[] lpBuffer, int nSize); - - /** - * Returns the locale identifier for the system locale. - * - * @return Returns the locale identifier for the system default locale, - * identified by LOCALE_SYSTEM_DEFAULT. - */ - LCID GetSystemDefaultLCID(); - - /** - * Returns the locale identifier for the user default locale. - * - * @return Returns the locale identifier for the user default locale, - * represented as LOCALE_USER_DEFAULT. If the user default locale is - * a custom locale, this function always returns - * LOCALE_CUSTOM_DEFAULT, regardless of the custom locale that is - * selected. For example, whether the user locale is Hawaiian (US), - * haw-US, or Fijiian (Fiji), fj-FJ, the function returns the same - * value. - */ - LCID GetUserDefaultLCID(); - - /** + /** + * Sets the date and time that the specified file or directory was created, + * last accessed, or last modified. + * + * @param hFile + * A handle to the file or directory. The handle must have been + * created using the CreateFile function with the + * FILE_WRITE_ATTRIBUTES access right. For more information, see + * File Security and Access Rights. + * @param lpCreationTime + * A pointer to a FILETIME structure that contains the new + * creation date and time for the file or directory. This + * parameter can be NULL if the application does not need to + * change this information. + * @param lpLastAccessTime + * A pointer to a FILETIME structure that contains the new last + * access date and time for the file or directory. The last + * access time includes the last time the file or directory was + * written to, read from, or (in the case of executable files) + * run. This parameter can be NULL if the application does not + * need to change this information. + * + * To preserve the existing last access time for a file even + * after accessing a file, call SetFileTime immediately after + * opening the file handle with this parameter's FILETIME + * structure members initialized to 0xFFFFFFFF. + * @param lpLastWriteTime + * A pointer to a FILETIME structure that contains the new last + * modified date and time for the file or directory. This + * parameter can be NULL if the application does not need to + * change this information. + * @return If the function succeeds, the return value is nonzero. + * + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + int SetFileTime(HANDLE hFile, WinBase.FILETIME lpCreationTime, + WinBase.FILETIME lpLastAccessTime, WinBase.FILETIME lpLastWriteTime); + + /** + * Sets the attributes for a file or directory. + * + * @param lpFileName + * The name of the file whose attributes are to be set. + * + * The name is limited to MAX_PATH characters. To extend this + * limit to 32,767 wide characters, prepend "\\?\" to the path. + * + * @param dwFileAttributes + * The file attributes to set for the file. This parameter can be + * one or more values, combined using the bitwise-OR operator. + * However, all other values override FILE_ATTRIBUTE_NORMAL. + * + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean SetFileAttributes(String lpFileName, DWORD dwFileAttributes); + + /** + * The GetLogicalDriveStrings function fills a buffer with strings that + * specify valid drives in the system. + * + * @param nBufferLength + * Maximum size of the buffer pointed to by lpBuffer, in TCHARs. + * This size does not include the terminating null character. If + * this parameter is zero, lpBuffer is not used. + * @param lpBuffer + * Pointer to a buffer that receives a series of null-terminated + * strings, one for each valid drive in the system, plus with an + * additional null character. Each string is a device name. + * @return If the function succeeds, the return value is the length, in + * characters, of the strings copied to the buffer, not including + * the terminating null character. Note that an ANSI-ASCII null + * character uses one byte, but a Unicode null character uses two + * bytes. If the buffer is not large enough, the return value is + * greater than nBufferLength. It is the size of the buffer required + * to hold the drive strings. If the function fails, the return + * value is zero. To get extended error information, use the + * GetLastError function. + */ + DWORD GetLogicalDriveStrings(DWORD nBufferLength, char[] lpBuffer); + + /** + * The GetDiskFreeSpaceEx function retrieves information about the amount of + * space that is available on a disk volume, which is the total amount of + * space, the total amount of free space, and the total amount of free space + * available to the user that is associated with the calling thread. + * + * @param lpDirectoryName + * A pointer to a null-terminated string that specifies a + * directory on a disk. If this parameter is NULL, the function + * uses the root of the current disk. If this parameter is a UNC + * name, it must include a trailing backslash, for example, + * \\MyServer\MyShare\. This parameter does not have to specify + * the root directory on a disk. The function accepts any + * directory on a disk. + * @param lpFreeBytesAvailable + * A pointer to a variable that receives the total number of free + * bytes on a disk that are available to the user who is + * associated with the calling thread. This parameter can be + * NULL. + * @param lpTotalNumberOfBytes + * A pointer to a variable that receives the total number of + * bytes on a disk that are available to the user who is + * associated with the calling thread. This parameter can be + * NULL. + * @param lpTotalNumberOfFreeBytes + * A pointer to a variable that receives the total number of free + * bytes on a disk. This parameter can be NULL. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is 0 (zero). To get extended + * error information, call GetLastError. + */ + boolean GetDiskFreeSpaceEx(String lpDirectoryName, + LARGE_INTEGER lpFreeBytesAvailable, + LARGE_INTEGER lpTotalNumberOfBytes, + LARGE_INTEGER lpTotalNumberOfFreeBytes); + + /** + * Deletes an existing file. + * + * @param filename + * The name of the file to be deleted. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero (0). To get extended + * error information, call GetLastError. + */ + public boolean DeleteFile(String filename); + + /** + * Creates an anonymous pipe, and returns handles to the read and write ends + * of the pipe. + * + * @param hReadPipe + * A pointer to a variable that receives the read handle for the + * pipe. + * @param hWritePipe + * A pointer to a variable that receives the write handle for the + * pipe. + * @param lpPipeAttributes + * A pointer to a SECURITY_ATTRIBUTES structure that determines + * whether the returned handle can be inherited by child + * processes. + * @param nSize + * The size of the buffer for the pipe, in bytes. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + public boolean CreatePipe(HANDLEByReference hReadPipe, + HANDLEByReference hWritePipe, + WinBase.SECURITY_ATTRIBUTES lpPipeAttributes, int nSize); + + /** + * Sets certain properties of an object handle. + * + * @param hObject + * A handle to an object whose information is to be set. + * @param dwMask + * A mask that specifies the bit flags to be changed. Use the + * same constants shown in the description of dwFlags. + * @param dwFlags + * Set of bit flags that specifies properties of the object + * handle. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean SetHandleInformation(HANDLE hObject, int dwMask, int dwFlags); + + /** + * Retrieves file system attributes for a specified file or directory. + * + * @param lpFileName + * The name of the file or directory. Prepend \\?\ to the path + * for names up to 32,767 wide characters + * @return INVALID_FILE_ATTRIBUTES if the function fails, otherwise the file + * attributes WinNT.FILE_ATTRIBUTE_* + */ + public int GetFileAttributes(String lpFileName); + + /** + * Retrieves the file type of the specified file. + * + * @param hFile + * A handle to the file. + * @return FILE_TYPE_UNKNOWN if the function fails, or if the type is + * unknown. You can distinguish between a "valid" return of + * FILE_TYPE_UNKNOWN and its return due to a calling error (for + * example, passing an invalid handle to GetFileType) by calling + * GetLastError. If the function worked properly and + * FILE_TYPE_UNKNOWN was returned, a call to GetLastError will + * return NO_ERROR. + */ + public int GetFileType(HANDLE hFile); + + /** + * Sends a control code directly to a specified device driver, causing the + * corresponding device to perform the corresponding operation. + * + * @param hDevice + * A handle to the device on which the operation is to be + * performed. The device is typically a volume, directory, file, + * or stream. To retrieve a device handle, use the CreateFile + * function. For more information, see Remarks. + * + * @param dwIoControlCode + * The control code for the operation. This value identifies the + * specific operation to be performed and the type of device on + * which to perform it. For a list of the control codes, see + * Remarks. The documentation for each control code provides + * usage details for the lpInBuffer, nInBufferSize, lpOutBuffer, + * and nOutBufferSize parameters. + * + * @param lpInBuffer + * A pointer to the input buffer that contains the data required + * to perform the operation. The format of this data depends on + * the value of the dwIoControlCode parameter. This parameter can + * be NULL if dwIoControlCode specifies an operation that does + * not require input data. + * + * @param nInBufferSize + * The size of the input buffer, in bytes. + * + * @param lpOutBuffer + * A pointer to the output buffer that is to receive the data + * returned by the operation. The format of this data depends on + * the value of the dwIoControlCode parameter. This parameter can + * be NULL if dwIoControlCode specifies an operation that does + * not return data. + * + * @param nOutBufferSize + * The size of the output buffer, in bytes. + * + * @param lpBytesReturned + * A pointer to a variable that receives the size of the data + * stored in the output buffer, in bytes. If the output buffer is + * too small to receive any data, the call fails, GetLastError + * returns ERROR_INSUFFICIENT_BUFFER, and lpBytesReturned is + * zero. If the output buffer is too small to hold all of the + * data but can hold some entries, some drivers will return as + * much data as fits. In this case, the call fails, GetLastError + * returns ERROR_MORE_DATA, and lpBytesReturned indicates the + * amount of data received. Your application should call + * DeviceIoControl again with the same operation, specifying a + * new starting point. If lpOverlapped is NULL, lpBytesReturned + * cannot be NULL. Even when an operation returns no output data + * and lpOutBuffer is NULL, DeviceIoControl makes use of + * lpBytesReturned. After such an operation, the value of + * lpBytesReturned is meaningless. If lpOverlapped is not NULL, + * lpBytesReturned can be NULL. If this parameter is not NULL and + * the operation returns data, lpBytesReturned is meaningless + * until the overlapped operation has completed. To retrieve the + * number of bytes returned, call GetOverlappedResult. If hDevice + * is associated with an I/O completion port, you can retrieve + * the number of bytes returned by calling + * GetQueuedCompletionStatus. + * + * @param lpOverlapped + * A pointer to an OVERLAPPED structure. If hDevice was opened + * without specifying FILE_FLAG_OVERLAPPED, lpOverlapped is + * ignored. If hDevice was opened with the FILE_FLAG_OVERLAPPED + * flag, the operation is performed as an overlapped + * (asynchronous) operation. In this case, lpOverlapped must + * point to a valid OVERLAPPED structure that contains a handle + * to an event object. Otherwise, the function fails in + * unpredictable ways. For overlapped operations, DeviceIoControl + * returns immediately, and the event object is signaled when the + * operation has been completed. Otherwise, the function does not + * return until the operation has been completed or an error + * occurs. + * + * @return If the function succeeds, the return value is nonzero. + * + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + boolean DeviceIoControl(HANDLE hDevice, int dwIoControlCode, + Pointer lpInBuffer, int nInBufferSize, Pointer lpOutBuffer, + int nOutBufferSize, IntByReference lpBytesReturned, + Pointer lpOverlapped); + + /** + * Retrieves information about the amount of space that is available on a + * disk volume, which is the total amount of space, the total amount of free + * space, and the total amount of free space available to the user that is + * associated with the calling thread. + * + * @param lpDirectoryName + * the lp directory name + * @param lpFreeBytesAvailable + * the lp free bytes available + * @param lpTotalNumberOfBytes + * the lp total number of bytes + * @param lpTotalNumberOfFreeBytes + * the lp total number of free bytes + * @return If the function succeeds, the return value is nonzero. + * + * If the function fails, the return value is zero (0). To get + * extended error information, call GetLastError. + */ + boolean GetDiskFreeSpaceEx(String lpDirectoryName, + LongByReference lpFreeBytesAvailable, + LongByReference lpTotalNumberOfBytes, + LongByReference lpTotalNumberOfFreeBytes); + + /** + * Takes a snapshot of the specified processes, as well as the heaps, + * modules, and threads used by these processes. + * + * @param dwFlags + * The portions of the system to be included in the snapshot. + * + * @param th32ProcessID + * The process identifier of the process to be included in the + * snapshot. This parameter can be zero to indicate the current + * process. This parameter is used when the TH32CS_SNAPHEAPLIST, + * TH32CS_SNAPMODULE, TH32CS_SNAPMODULE32, or TH32CS_SNAPALL + * value is specified. Otherwise, it is ignored and all processes + * are included in the snapshot. + * + * If the specified process is the Idle process or one of the + * CSRSS processes, this function fails and the last error code + * is ERROR_ACCESS_DENIED because their access restrictions + * prevent user-level code from opening them. + * + * If the specified process is a 64-bit process and the caller is + * a 32-bit process, this function fails and the last error code + * is ERROR_PARTIAL_COPY (299). + * + * @return If the function succeeds, it returns an open handle to the + * specified snapshot. + * + * If the function fails, it returns INVALID_HANDLE_VALUE. To get + * extended error information, call GetLastError. Possible error + * codes include ERROR_BAD_LENGTH. + */ + HANDLE CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID); + + /** + * Retrieves information about the first process encountered in a system + * snapshot. + * + * @param hSnapshot + * A handle to the snapshot returned from a previous call to the + * CreateToolhelp32Snapshot function. + * @param lppe + * A pointer to a PROCESSENTRY32 structure. It contains process + * information such as the name of the executable file, the + * process identifier, and the process identifier of the parent + * process. + * @return Returns TRUE if the first entry of the process list has been + * copied to the buffer or FALSE otherwise. The ERROR_NO_MORE_FILES + * error value is returned by the GetLastError function if no + * processes exist or the snapshot does not contain process + * information. + */ + boolean Process32First(HANDLE hSnapshot, + Tlhelp32.PROCESSENTRY32 lppe); + + /** + * Retrieves information about the next process recorded in a system + * snapshot. + * + * @param hSnapshot + * A handle to the snapshot returned from a previous call to the + * CreateToolhelp32Snapshot function. + * @param lppe + * A pointer to a PROCESSENTRY32 structure. + * @return Returns TRUE if the next entry of the process list has been + * copied to the buffer or FALSE otherwise. The ERROR_NO_MORE_FILES + * error value is returned by the GetLastError function if no + * processes exist or the snapshot does not contain process + * information. + */ + boolean Process32Next(HANDLE hSnapshot, + Tlhelp32.PROCESSENTRY32 lppe); + + /** + * The SetEnvironmentVariable function sets the contents of the specified + * environment variable for the current process. + * + * @param lpName + * Pointer to a string containing the name of the environment + * variable to set. + * @param lpValue + * Pointer to a string containing the value to set it to. if this + * value is NULL, the variable is deleted from the current + * process' environment. + * + * @return If the function succeeds, the return value is non-zero. If the + * function fails, the return value is zero. To get extended error + * information, call GetLastError. + */ + boolean SetEnvironmentVariable(String lpName, String lpValue); + + /** + * Retrieves the contents of the specified variable from the environment + * block of the calling process. + * + * @param lpName + * The name of the environment variable. + * @param lpBuffer + * A pointer to a buffer that receives the contents of the + * specified environment variable as a null-terminated string. An + * environment variable has a maximum size limit of 32,767 + * characters, including the null-terminating character. + * @param nSize + * The size of the buffer pointed to by the lpBuffer parameter, + * including the null-terminating character, in characters. + * @return If the function succeeds, the return value is the number of + * characters stored in the buffer pointed to by lpBuffer, not + * including the terminating null character. If lpBuffer is not + * large enough to hold the data, the return value is the buffer + * size, in characters, required to hold the string and its + * terminating null character and the contents of lpBuffer are + * undefined. If the function fails, the return value is zero. To + * get extended error information, call GetLastError. + */ + int GetEnvironmentVariable(String lpName, char[] lpBuffer, int nSize); + + /** + * Returns the locale identifier for the system locale. + * + * @return Returns the locale identifier for the system default locale, + * identified by LOCALE_SYSTEM_DEFAULT. + */ + LCID GetSystemDefaultLCID(); + + /** + * Returns the locale identifier for the user default locale. + * + * @return Returns the locale identifier for the user default locale, + * represented as LOCALE_USER_DEFAULT. If the user default locale is + * a custom locale, this function always returns + * LOCALE_CUSTOM_DEFAULT, regardless of the custom locale that is + * selected. For example, whether the user locale is Hawaiian (US), + * haw-US, or Fijiian (Fiji), fj-FJ, the function returns the same + * value. + */ + LCID GetUserDefaultLCID(); + + /** * Retrieves an integer associated with a key in the specified section of an initialization file. * * @param appName diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java index fe4b812c67..8c593b3044 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java @@ -25,6 +25,9 @@ import com.sun.jna.Union; import com.sun.jna.ptr.ByReference; +import com.sun.jna.platform.win32.WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION; +import com.sun.jna.platform.win32.WinNT.LOGICAL_PROCESSOR_RELATIONSHIP; + /** * This module defines the 32-Bit Windows types and constants that are defined * by NT, but exposed through the Win32 API. Ported from WinNT.h Microsoft @@ -2189,8 +2192,8 @@ public static class SYSTEM_LOGICAL_PROCESSOR_INFORMATION extends Structure { * This member can be one of * {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationCache}, * {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationNumaNode}, - * {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationCore} or - * {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationPackage}. + * {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationProcessorCore} or + * {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationProcessorPackage}. * * @see LOGICAL_PROCESSOR_RELATIONSHIP */ @@ -2202,11 +2205,11 @@ public static class SYSTEM_LOGICAL_PROCESSOR_INFORMATION extends Structure { public AnonymousUnionPayload payload; public SYSTEM_LOGICAL_PROCESSOR_INFORMATION() { - super(ALIGN_MSVC); } public SYSTEM_LOGICAL_PROCESSOR_INFORMATION(Pointer memory) { - super(memory, ALIGN_MSVC); + super(memory); + read(); } @Override @@ -2216,7 +2219,7 @@ protected List getFieldOrder() { public static class AnonymousUnionPayload extends Union { /** - * Contains valid data only if {@link #relationship} is {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationCore}. + * Contains valid data only if {@link #relationship} is {@link LOGICAL_PROCESSOR_RELATIONSHIP#RelationProcessorCore}. */ public AnonymousStructProcessorCore processorCore; @@ -2277,25 +2280,25 @@ protected List getFieldOrder() { /** * Represents the relationship between the processor set identified in the corresponding - * {@link SYSTEM_LOGICAL_PROCESSOR_INFORMATION} or {@link SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX} structure. + * {@link SYSTEM_LOGICAL_PROCESSOR_INFORMATION} or SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX structure. */ - public static abstract class LOGICAL_PROCESSOR_RELATIONSHIP { + public interface LOGICAL_PROCESSOR_RELATIONSHIP { /** * The specified logical processors share a single processor core. */ - public static final int RelationProcessorCore = 0; + int RelationProcessorCore = 0; /** * The specified logical processors are part of the same NUMA node. */ - public static final int RelationNumaNode = 1; + int RelationNumaNode = 1; /** *

The specified logical processors share a cache.

* *

Not supported until Windows Server 2003 SP1 / Windows XP Professional x64.

*/ - public static final int RelationCache = 2; + int RelationCache = 2; /** *

The specified logical processors share a physical package (a single package socketed or soldered onto a @@ -2304,23 +2307,25 @@ public static abstract class LOGICAL_PROCESSOR_RELATIONSHIP { * *

Not supported until Windows Server 2003 SP1 / Windows XP Professional x64.

*/ - public static final int RelationProcessorPackage = 3; + int RelationProcessorPackage = 3; /** *

The specified logical processors share a single processor group.

* *

Not supported until Windows Server 2008 R2.

*/ - public static final int RelationGroup = 4; + int RelationGroup = 4; /** *

On input, retrieves information about all possible relation types. This value is not used on output.

* *

Not supported until Windows Server 2008 R2.

*/ - public static final int RelationAll = 0xFFFF; + int RelationAll = 0xFFFF; } + byte CACHE_FULLY_ASSOCIATIVE = (byte)0xFF; + /** * Describes the cache attributes. */ From b9fa73ce7a12105173e564b2eb73a52837b68b65 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 02:48:26 -0400 Subject: [PATCH 09/21] add bsd targets --- build.xml | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/build.xml b/build.xml index c1ac74c37d..0e611c85bc 100644 --- a/build.xml +++ b/build.xml @@ -225,12 +225,17 @@ - - - + + + + - - + + + + + + @@ -390,10 +395,14 @@ processor=arm;osname=linux, com/sun/jna/linux-ia64/libjnidispatch.so; processor=ia64;osname=linux, -com/sun/jna/bsd-x86/libjnidispatch.so; -processor=x86;osname=openbsd;osname=freebsd;osname=netbsd, -com/sun/jna/bsd-x86-64/libjnidispatch.so; -processor=x86-64;osname=openbsd;osname=freebsd;osname=netbsd, +com/sun/jna/freebsd-x86/libjnidispatch.so; +processor=x86;osname=freebsd, +com/sun/jna/freebsd-x86-64/libjnidispatch.so; +processor=x86-64;osname=freebsd, +com/sun/jna/openbsd-x86/libjnidispatch.so; +processor=x86;osname=openbsd, +com/sun/jna/openbsd-x86-64/libjnidispatch.so; +processor=x86-64;osname=openbsd, com/sun/jna/darwin/libjnidispatch.jnilib; osname=macosx;processor=x86;processor=x86-64;processor=ppc @@ -444,12 +453,18 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + + - + + prefix="com/sun/jna/openbsd-x86-64"/> @@ -543,8 +558,10 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - - + + + + From 285e5305cbdb03928623ea61fd099d34009ca9c7 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 02:49:33 -0400 Subject: [PATCH 10/21] remove generic bsd placeholders --- lib/native/bsd-x86-64.jar | Bin 508 -> 0 bytes lib/native/bsd-x86.jar | Bin 508 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 lib/native/bsd-x86-64.jar delete mode 100644 lib/native/bsd-x86.jar diff --git a/lib/native/bsd-x86-64.jar b/lib/native/bsd-x86-64.jar deleted file mode 100755 index 6716399ab65ff2aa137fbe6021402a820a487975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 diff --git a/lib/native/bsd-x86.jar b/lib/native/bsd-x86.jar deleted file mode 100644 index 6716399ab65ff2aa137fbe6021402a820a487975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 From fffe7926dac4feda70cfa6dfb45d539ea0796842 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 03:01:27 -0400 Subject: [PATCH 11/21] replace generic bsd handling --- lib/native/freebsd-x86-64.jar | Bin 0 -> 508 bytes lib/native/freebsd-x86.jar | Bin 0 -> 508 bytes lib/native/openbsd-x86-64.jar | Bin 0 -> 508 bytes lib/native/openbsd-x86.jar | Bin 0 -> 508 bytes src/com/sun/jna/Platform.java | 8 +++++++- test/com/sun/jna/NativeLibraryTest.java | 1 + test/com/sun/jna/PlatformTest.java | 8 ++++---- 7 files changed, 12 insertions(+), 5 deletions(-) create mode 100755 lib/native/freebsd-x86-64.jar create mode 100755 lib/native/freebsd-x86.jar create mode 100755 lib/native/openbsd-x86-64.jar create mode 100755 lib/native/openbsd-x86.jar diff --git a/lib/native/freebsd-x86-64.jar b/lib/native/freebsd-x86-64.jar new file mode 100755 index 0000000000000000000000000000000000000000..6716399ab65ff2aa137fbe6021402a820a487975 GIT binary patch literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 literal 0 HcmV?d00001 diff --git a/lib/native/freebsd-x86.jar b/lib/native/freebsd-x86.jar new file mode 100755 index 0000000000000000000000000000000000000000..6716399ab65ff2aa137fbe6021402a820a487975 GIT binary patch literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 literal 0 HcmV?d00001 diff --git a/lib/native/openbsd-x86-64.jar b/lib/native/openbsd-x86-64.jar new file mode 100755 index 0000000000000000000000000000000000000000..6716399ab65ff2aa137fbe6021402a820a487975 GIT binary patch literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 literal 0 HcmV?d00001 diff --git a/lib/native/openbsd-x86.jar b/lib/native/openbsd-x86.jar new file mode 100755 index 0000000000000000000000000000000000000000..6716399ab65ff2aa137fbe6021402a820a487975 GIT binary patch literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 literal 0 HcmV?d00001 diff --git a/src/com/sun/jna/Platform.java b/src/com/sun/jna/Platform.java index 1bd340a19e..d4fc34fa69 100644 --- a/src/com/sun/jna/Platform.java +++ b/src/com/sun/jna/Platform.java @@ -262,10 +262,16 @@ else if ("x86_64".equals(arch) || "amd64".equals(arch)) { osPrefix = "sunos-" + arch; break; case Platform.FREEBSD: + osPrefix = "freebsd-" + arch; + break; case Platform.OPENBSD: + osPrefix = "openbsd-" + arch; + break; case Platform.NETBSD: + osPrefix = "netbsd-" + arch; + break; case Platform.KFREEBSD: - osPrefix = "bsd-" + arch; + osPrefix = "kfreebsd-" + arch; break; default: osPrefix = name.toLowerCase(); diff --git a/test/com/sun/jna/NativeLibraryTest.java b/test/com/sun/jna/NativeLibraryTest.java index c9f6bba4f9..b0f4f71865 100644 --- a/test/com/sun/jna/NativeLibraryTest.java +++ b/test/com/sun/jna/NativeLibraryTest.java @@ -41,6 +41,7 @@ public void testMapSharedLibraryName() { { Platform.ANDROID, "lib", ".so" }, { Platform.GNU, "lib", ".so" }, { Platform.KFREEBSD, "lib", ".so" }, + { Platform.NETBSD, "lib", ".so" }, }; for (int i=0;i < MAPPINGS.length;i++) { int osType = ((Integer)MAPPINGS[i][0]).intValue(); diff --git a/test/com/sun/jna/PlatformTest.java b/test/com/sun/jna/PlatformTest.java index ef360852c8..55001c3171 100644 --- a/test/com/sun/jna/PlatformTest.java +++ b/test/com/sun/jna/PlatformTest.java @@ -57,16 +57,16 @@ public void testOSPrefix() { assertEquals("Wrong resource path Linux/ppc", "linux-ppc", Platform.getNativeLibraryResourcePrefix(Platform.LINUX, "powerpc", "Linux")); - assertEquals("Wrong resource path OpenBSD/x86", "bsd-x86", + assertEquals("Wrong resource path OpenBSD/x86", "openbsd-x86", Platform.getNativeLibraryResourcePrefix(Platform.OPENBSD, "x86", "OpenBSD")); - assertEquals("Wrong resource path FreeBSD/x86", "bsd-x86", + assertEquals("Wrong resource path FreeBSD/x86", "freebsd-x86", Platform.getNativeLibraryResourcePrefix(Platform.FREEBSD, "x86", "FreeBSD")); - assertEquals("Wrong resource path GNU/kFreeBSD/x86", "bsd-x86", + assertEquals("Wrong resource path GNU/kFreeBSD/x86", "kfreebsd-x86", Platform.getNativeLibraryResourcePrefix(Platform.KFREEBSD, "x86", "GNU/kFreeBSD")); - assertEquals("Wrong resource path NetBSD/x86", "bsd-x86", + assertEquals("Wrong resource path NetBSD/x86", "netbsd-x86", Platform.getNativeLibraryResourcePrefix(Platform.NETBSD, "x86", "NetBSD")); assertEquals("Wrong resource path Linux/armv7l (android)", "android-arm", From c6c99b8b980d97e3777200c0cb2efa9f76ffa9c8 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 03:14:17 -0400 Subject: [PATCH 12/21] abstract option for default encoding for library names --- native/Makefile | 4 ++-- native/dispatch.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/native/Makefile b/native/Makefile index 48d3dc9f11..0f695e5e22 100644 --- a/native/Makefile +++ b/native/Makefile @@ -251,7 +251,7 @@ ARCH=$(shell uname -m | sed 's/i.86/i386/g') PCFLAGS+=-fPIC CINCLUDES+=-I/usr/X11R6/include LDFLAGS=-o $@ -shared -CDEFINES+=-DHAVE_PROTECTION -DFFI_MMAP_EXEC_WRIT +CDEFINES+=-DHAVE_PROTECTION -DFFI_MMAP_EXEC_WRIT -DUSE_DEAFULT_LIBNAME_ENCODING endif ifeq ($(OS),solaris) @@ -259,7 +259,7 @@ ifeq ($(ARCH),) ARCH=$(shell uname -p) endif PCFLAGS+=-fPIC -CDEFINES+=-DHAVE_PROTECTION -DFFI_MMAP_EXEC_WRIT +CDEFINES+=-DHAVE_PROTECTION -DFFI_MMAP_EXEC_WRIT -DUSE_DEFAULT_LIBNAME_ENCODING ifeq ($(ARCH), sparcv9) # alter CC instead of PCFLAGS, since we need to pass it down to libffi # configure and some of the other settings in PCFLAGS might make the build diff --git a/native/dispatch.c b/native/dispatch.c index 427b775147..5a880739a0 100644 --- a/native/dispatch.c +++ b/native/dispatch.c @@ -49,7 +49,7 @@ #include #include #define STRTYPE char* -#ifdef __sun__ // solaris sparc and x86/amd64 use default (file.encoding) +#ifdef USE_DEFAULT_LIBNAME_ENCODING #define NAME2CSTR(ENV,JSTR) newCString(ENV,JSTR) #else #define NAME2CSTR(ENV,JSTR) newCStringUTF8(ENV,JSTR) From a3cdb5a90d28de682a4dfef0e63d04783474a8f5 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 14 May 2013 02:59:24 -0400 Subject: [PATCH 13/21] leave test file behind on failure --- test/com/sun/jna/LibraryLoadTest.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/com/sun/jna/LibraryLoadTest.java b/test/com/sun/jna/LibraryLoadTest.java index fbd8bc87bb..6fc8c7427e 100644 --- a/test/com/sun/jna/LibraryLoadTest.java +++ b/test/com/sun/jna/LibraryLoadTest.java @@ -154,9 +154,14 @@ public void testLoadLibraryWithUnicodeName() throws Exception { String newLibName = libName.replace("testlib", UNICODE); File dst = new File(tmpdir, newLibName); - dst.deleteOnExit(); copy(src, dst); - NativeLibrary.getInstance(UNICODE, new TestLoader(tmpdir)); + try { + NativeLibrary.getInstance(UNICODE, new TestLoader(tmpdir)); + dst.deleteOnExit(); + } + catch(UnsatisfiedLinkError e) { + fail("Library '" + newLibName + "' at " + dst + " could not be loaded: " + e); + } } public void testLoadFrameworkLibrary() { From 3ba1fd097559179bfbf3ca71a6dfc12f0aec470f Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 14 May 2013 03:00:06 -0400 Subject: [PATCH 14/21] update openbsd-x86 natives --- lib/native/openbsd-x86.jar | Bin 508 -> 37876 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/openbsd-x86.jar b/lib/native/openbsd-x86.jar index 6716399ab65ff2aa137fbe6021402a820a487975..5b6171735060b6f0a9d231ba33191ca28325080b 100755 GIT binary patch literal 37876 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 literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 From c6a88f3b7f3493fb4a4b90b7bf22c54eeefa9ed1 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 03:38:30 -0400 Subject: [PATCH 15/21] update openbsd-x86-64 natives --- lib/native/openbsd-x86-64.jar | Bin 508 -> 44114 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/openbsd-x86-64.jar b/lib/native/openbsd-x86-64.jar index 6716399ab65ff2aa137fbe6021402a820a487975..8d0007dd608b5c1a59eca92381e14dfac42457da 100755 GIT binary patch literal 44114 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 literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 From 8db46b4c1a52eeaf067133a9b3014217a5422a5e Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 03:39:54 -0400 Subject: [PATCH 16/21] update freebsd natives --- lib/native/freebsd-x86-64.jar | Bin 508 -> 41301 bytes lib/native/freebsd-x86.jar | Bin 508 -> 34910 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/freebsd-x86-64.jar b/lib/native/freebsd-x86-64.jar index 6716399ab65ff2aa137fbe6021402a820a487975..8ed2aaebbf957a1bc2cd81c10b41cce953d66cc4 100755 GIT binary patch literal 41301 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 E1w!p&egFUf literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 diff --git a/lib/native/freebsd-x86.jar b/lib/native/freebsd-x86.jar index 6716399ab65ff2aa137fbe6021402a820a487975..3dbb368d9d723647789188466defb0e30e9da135 100755 GIT binary patch literal 34910 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 literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 From d0936b0189125ce5efe537eebe6f4da5c1465120 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Thu, 13 Jun 2013 03:47:31 -0400 Subject: [PATCH 17/21] use jna-platform as id for platform jar --- pom-jna-platform.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom-jna-platform.xml b/pom-jna-platform.xml index 88005f35a8..1c49200615 100644 --- a/pom-jna-platform.xml +++ b/pom-jna-platform.xml @@ -5,7 +5,7 @@ 4.0.0 net.java.dev.jna - platform + jna-platform 4.0.0-SNAPSHOT jar From 79272c76a5c3da6f0eec45d5fd4a2d4f71834ea6 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sat, 15 Jun 2013 07:05:53 -0400 Subject: [PATCH 18/21] make unpacked path available as a system property, track down JVM error in System.load --- native/Makefile | 4 ++-- native/dispatch.c | 3 --- src/com/sun/jna/Native.java | 10 ++++++++-- test/com/sun/jna/JNAUnloadTest.java | 17 +++++++++++++++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/native/Makefile b/native/Makefile index 0f695e5e22..1f0ea70c4a 100644 --- a/native/Makefile +++ b/native/Makefile @@ -167,10 +167,10 @@ ifeq ($(ARCH),amd64) USE_MSVC=true else # To build 32-bit under MSVC, un-comment this line (default is gcc) -USE_MSVC=true +#USE_MSVC=true endif -CDEFINES=-DHAVE_PROTECTION -DPSAPI_VERSION=1 -DFFI_BUILDING +CDEFINES=-DHAVE_PROTECTION -DPSAPI_VERSION=1 -DFFI_BUILDING -DUNICODE -D_UNICODE ifndef USE_MSVC LIBS=-lpsapi else diff --git a/native/dispatch.c b/native/dispatch.c index 5a880739a0..931a79036a 100644 --- a/native/dispatch.c +++ b/native/dispatch.c @@ -17,9 +17,6 @@ */ #if defined(_WIN32) -#ifndef UNICODE -#define UNICODE -#endif #define WIN32_LEAN_AND_MEAN #include #include diff --git a/src/com/sun/jna/Native.java b/src/com/sun/jna/Native.java index 5ba4a39a39..7163c84c7a 100644 --- a/src/com/sun/jna/Native.java +++ b/src/com/sun/jna/Native.java @@ -673,6 +673,7 @@ private static void loadNativeDispatchLibrary() { if (DEBUG_JNA_LOAD) { System.out.println("Trying " + path); } + System.setProperty("jnidispatch.path", path); System.load(path); jnidispatchPath = path; if (DEBUG_JNA_LOAD) { @@ -703,6 +704,7 @@ private static void loadNativeDispatchLibrary() { if (DEBUG_JNA_LOAD) { System.out.println("Trying " + path); } + System.setProperty("jnidispatch.path", path); System.load(path); jnidispatchPath = path; if (DEBUG_JNA_LOAD) { @@ -755,6 +757,7 @@ private static void loadNativeDispatchLibraryFromClasspath() { if (DEBUG_JNA_LOAD) { System.out.println("Trying " + lib.getAbsolutePath()); } + System.setProperty("jnidispatch.path", lib.getAbsolutePath()); System.load(lib.getAbsolutePath()); jnidispatchPath = lib.getAbsolutePath(); if (DEBUG_JNA_LOAD) { @@ -764,7 +767,8 @@ private static void loadNativeDispatchLibraryFromClasspath() { // loaded. This avoids the complexity of trying to do so on "exit", // which point can vary under different circumstances (native // compilation, dynamically loaded modules, normal application, etc). - if (isUnpacked(lib)) { + if (isUnpacked(lib) + && !Boolean.getBoolean("jnidispatch.preserve")) { deleteLibrary(lib); } } @@ -867,7 +871,9 @@ else if (!Boolean.getBoolean("jna.nounpack")) { // problems with Web Start. File dir = getTempDir(); lib = File.createTempFile(JNA_TMPLIB_PREFIX, Platform.isWindows()?".dll":null, dir); - lib.deleteOnExit(); + if (!Boolean.getBoolean("jnidispatch.preserve")) { + lib.deleteOnExit(); + } fos = new FileOutputStream(lib); int count; byte[] buf = new byte[1024]; diff --git a/test/com/sun/jna/JNAUnloadTest.java b/test/com/sun/jna/JNAUnloadTest.java index df42f42a23..4ae2713f5c 100644 --- a/test/com/sun/jna/JNAUnloadTest.java +++ b/test/com/sun/jna/JNAUnloadTest.java @@ -213,10 +213,27 @@ public void testLoadFromUnicodePath() throws Exception { unicodeDir.mkdirs(); Properties props = (Properties)System.getProperties().clone(); try { + System.setProperty("jnidispatch.preserve", "true"); System.setProperty("jna.tmpdir", unicodeDir.getAbsolutePath()); ClassLoader loader = new TestLoader(true); Class cls = Class.forName("com.sun.jna.Native", true, loader); assertEquals("Wrong class loader", loader, cls.getClassLoader()); + String path = System.getProperty("jnidispatch.path"); + if (path != null) { + File lib = new File(path); + Native.deleteLibrary(lib); + lib.deleteOnExit(); + } + } + catch(UnsatisfiedLinkError e) { + try { + File lib = new File(System.getProperty("jnidispatch.path")); + NativeLibrary.getInstance(lib.getAbsolutePath()); + throw new Error("JVM error: System.load() failed to load JNA native library from " + lib + "): " + e); + } + catch(UnsatisfiedLinkError ex) { + fail("Failed to load jnidispatch from a unicode path (" + System.getProperty("jnidispatch.path") + "): " + ex); + } } finally { System.setProperties(props); From 418a53806ca760267dd5f0fd5bc1661639eac183 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sat, 15 Jun 2013 07:15:42 -0400 Subject: [PATCH 19/21] rename JNA load test --- .../{JNAUnloadTest.java => JNALoadTest.java} | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) rename test/com/sun/jna/{JNAUnloadTest.java => JNALoadTest.java} (92%) diff --git a/test/com/sun/jna/JNAUnloadTest.java b/test/com/sun/jna/JNALoadTest.java similarity index 92% rename from test/com/sun/jna/JNAUnloadTest.java rename to test/com/sun/jna/JNALoadTest.java index 4ae2713f5c..f348aa472a 100644 --- a/test/com/sun/jna/JNAUnloadTest.java +++ b/test/com/sun/jna/JNALoadTest.java @@ -25,7 +25,7 @@ /** Test loading and unloading native support from various locations. Note * that no JNI classes are directly referenced in these tests. */ -public class JNAUnloadTest extends TestCase implements Paths { +public class JNALoadTest extends TestCase implements Paths { private class TestLoader extends URLClassLoader { public TestLoader(boolean fromJar) throws MalformedURLException { @@ -205,10 +205,11 @@ public void testLoadAndUnloadFromResourcePath() throws Exception { } } - // Fails on windows (32 and 64-bit) + // Fails on Sun JVM windows (32 and 64-bit) + // Works with IBM J9 (jdk6) public void testLoadFromUnicodePath() throws Exception { final String UNICODE = getName() + "-\u0444\u043b\u0441\u0432\u0443"; - File tmpdir = Native.getTempDir(); + File tmpdir = new File(System.getProperty("java.io.tmpdir")); File unicodeDir = new File(tmpdir, UNICODE); unicodeDir.mkdirs(); Properties props = (Properties)System.getProperties().clone(); @@ -221,19 +222,11 @@ public void testLoadFromUnicodePath() throws Exception { String path = System.getProperty("jnidispatch.path"); if (path != null) { File lib = new File(path); - Native.deleteLibrary(lib); lib.deleteOnExit(); } } catch(UnsatisfiedLinkError e) { - try { - File lib = new File(System.getProperty("jnidispatch.path")); - NativeLibrary.getInstance(lib.getAbsolutePath()); - throw new Error("JVM error: System.load() failed to load JNA native library from " + lib + "): " + e); - } - catch(UnsatisfiedLinkError ex) { - fail("Failed to load jnidispatch from a unicode path (" + System.getProperty("jnidispatch.path") + "): " + ex); - } + throw new Error("JVM error: System.load() failed to load JNA native library from " + System.getProperty("jnidispatch.path") + "): " + e); } finally { System.setProperties(props); @@ -241,6 +234,6 @@ public void testLoadFromUnicodePath() throws Exception { } public static void main(String[] args) { - junit.textui.TestRunner.run(JNAUnloadTest.class); + junit.textui.TestRunner.run(JNALoadTest.class); } } From 1737d6addb952447b3b6ac933f420c09187c3e8b Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 16 Jun 2013 09:05:26 -0400 Subject: [PATCH 20/21] accommodate long path names, fixes #243 --- CHANGES.md | 1 + lib/native/win32-x86.jar | Bin 90152 -> 90427 bytes native/dispatch.c | 206 ++++++++++++++++---------- test/com/sun/jna/LibraryLoadTest.java | 25 ++++ 4 files changed, 150 insertions(+), 82 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 774ae64067..9eae6891f2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,6 +20,7 @@ Features * [#236](https://github.com/twall/jna/issues/236): Auto-strip profiler native method prefix specified by `jna.profiler.prefix`, which defaults to $$YJP$$ - [@twall](https://github.com/twall). * Added `jna.debug_load` property to diagnose library loading issues - [@twall](https://github.com/twall). * Throw explicit `IllegalArgumentException` when `Structure.ByReference` is used where it shouldn't be (can result in multiply freed memory or other unexpected behavior) - [@twall](https://github.com/twall). +* [#243](https://github.com/twall/jna/issues/243): Automatically accommodate long library paths on Windows which would otherwise fail - [@twall](https://github.com/twall). Bug Fixes --------- diff --git a/lib/native/win32-x86.jar b/lib/native/win32-x86.jar index 6d465bb5d9ac311074d5753b295e622b12a2d722..4e7c9793d0d36c365d7d27c72a799289121f0e16 100755 GIT binary patch literal 90427 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
    oU4pO8?y;Yu?UK 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 literal 90152 zcmYhhV~{R97q!{8ZQD3)+qP}n)@j>1ZQH!twr$(S_q;PxGqX}jeypo@?Opk?ld34n zfP%pQ0YL!)CE^YV1O5L54Fm=xC#EVyFC{O|_%i_nr1<}!P(TU)p^G#V1p)uzmH$n& z|Hl7|$_dF!iHoVIGRTPo10nri{{N!>kNuzQVj5run9zV;1%LKq-6TDQkX>zZxm{`6 zrEv_H4fRD(B7Xc9r65>gM-T`1^t2zcV8h_}c>EFy5%1-K+SioxcVDH7#4|2jVvfG9wgG}L)a?IX z5&x@~bWP8dQXd%T$paJ!@xLOh?X66$TpW#DO)MEqZEgRT|NpH2>3`V&bk!5!o4ouC zlv9jIZg>ZsWW2;}SfyR6QdRD{Qd1&VA!+fBTrLS7z?>nEj3QV9LlMO9Ges9elg(XG zU*lpcGD<|Rxsc|t$ihzhFOAS%t?PPx!%htwjBeUzrsLJ?;YgzDZTr*j*X!LfnRk}& zG|%Uz+spEO)*B5PMEMt zaarLG4c?yNM9RkR6g&Ip%p~(2gXU9=+D9yzctOH!AqItMeGh)$#X>O~#LhEJbE2)EMHi;>n)3|`EOFcr*N)|Ywe z{f; z4kjPWUI#r^+H?*56Dqet5CvesE9wen;W7J95tAq6Iv66Dnf}(*ax{3ik)<`scie>Q ze*DB5z4Z-!yey*~Q*4Xw-r^txOvuJCx=~MT=L}A4Lk3_7cR<3$>_#5jcO>@u7*1hv z|J%}hYtBrXlHnnNf4rogIBs<3<%Ri)fuztMJC{9>nSp=PBk3(>?%hfT zF_?iD-Mce;1DfdY^hui7mW;U>^oK2N@aIX=ow@t{{WSP?kq*c`K5rSvW*V#M6{(ea zI0o^3e1hs2RW~2A>iu`QXbI^fhp6!+*-CfZPa6|H$K?B0QW&Jd#f*XX`KoPOZ=NLg z;kGC0@byVPjYfU~9b+6naofD2(V({3o1e84res;m+{!(pS*M?=bR(E4rq#VY-gMT_7Jk!(&%!RvD1c38wN6ocHr7 ztMngkNYMlDbH_0uR?QjWtCn>wcfcc=uciwE@Lw)UD!JLleg{|*LFm9t;SR7nPj6N~ zq5FtgBK%r9Tr|3giDJMD&>blZpM4l1#<~+q-@xfVtigy-S3h{p>CPOI3m z{E9a1ALMpmXC-wq9=Zojs<5ZMJHZC#BqdD;}=NN{uI^KobHF=)&K%XMEW zm^I|Kfb^Asb>F}~rUZmRsxdC`5JBfB8d7Y&j@;U+f0X~yBO$*HhRe(=)Giifd|_YW zA3Qv%Ti)>fxRgvu8m8e6Xn{bE2N2M7QeM%Wt?~m#G&$ zMplA>dr+=V^yuY+5Y406Xvvhun)h(ypk-1R`a(b3qg0^g%~8ERmWnUv!tYx%skh+( z5rEGnrSRz0_~1?^Vv3x_K`S%_GTdJqN5QKoLPQ&%`F0^LH$#qpYuxlqFuJddF5V;* z^Ezfk$PExT;Ke`bq=7KF_=1B9=z_Lm10MSvOW1-ip10KL^JlSOj;53L2c%y^4KlmP zy++h&`P0nS=t%O>QB4RFPu=RV$CrpK^Q^C56&uj_eSa(~#A=y7H}uk%(|8@4CrrwZ z*Elk@=3}#CiWQEceqPdsURd8%`s=Fb6(9^^>FrV%6_@rr+}v;qQM-lGp%&6mW5%J00T54tsX?hXxTst6m+;8m2IisAdw3uZns%wVjIgS7at z?hC)ec9<`>e*eWfUSPHsm=TZDFPxg!=<*U#hR&h?$6~05fksy0*vE8<9HGjJC`9;C#ZB>)HHAT77~Q^xT<^J!=+3MWmlRL1c$)& zaR={)x+t3br1p1*$hYQtXa+~7E;{4JRQTX5Y<%DnjADgmT&!MTUkUb^Z8Vl~Jv&Ea z1Y>SgvF7S(n1hIN{(=G3jo%VAt6#6^$khv;0Yb<}hT_bw`mPw6hrpl+FL79_*>y-~y(1M9ek`kx=VYST(wUwF06qhiB#%4O39}ru-ZgTr2oF%X* zs5aWtgu6kVu1vaF&{OCE5(V0<7T6jtw$w}o2qHe;33S~|j$D}6ix+DI0BuA270u_) z2}t|?{@o!5jj?B4;KK~4Z(xC%uRYip7eT%fp|9OgP=s~8fO<0&H_}aaM;ON0U8W+j zb%mekO|MtbfFJLr{6}hC)oa@J`S+x_Rv>fjStHMcu9+Ct?yjiy2%ux)U>wWysTGS+ zeXsVWq{B~!neiFzj2a~#xNhx;9p`t}$g9%`|=CJ(zM%8NZk{rOTm)s6W zzmp`{kLEWC-Aue&zZ0?eoz>plj6HgbQcQw-7q^*l8jobZrVomnhp0NrMqnf;FOizn z2tLgF;jd49YORB_vuElT-*k#3YiS2iqtdLyq%m)(2|_fD(%WjAV-ThSx1WvBWx3h) z9@gFiKf*EHEL8-jXU@uYuPT7dC`l4#Fk@&*gv?wSU2_HFaWlM|OQ<1LK#YU+>EP7M zb+fTOA_MAjHdJeE7KL|8HyKXsI^}AKO(`;w_PN2A`7~|HHzU8>!;v+aH3!72qEWKM z*h{RrCq!}8ovu`7+zdIJD|vg>ynVo9AUs5K;ip@2amOps)^H~AwgrX31%#cmcIaqC z_Jg2tC{L~_Kv}=P-^Htamo!OXU{w8hrY7dn_^HNBu~&^QeBI{=BWWT5H&~4nDeDJS!ZWQM9Z>?e-2&v!%O=@G|R{kWMx3^9Yn!zK> zITPCGC-#S4e~Lpq8;rRLs3WvKX&Lith6|@HRlxNjiNiT@)@h-ks4KfMPnkWINE-84 zeS=U~$g8fKvEq3DqyQmj^k>I@`#-|dpw71Su^eldZh8oFvCPwl2fEFDZ@1B_T*)Ryi}N+|PoJ(h z$J4wERLN3BvMW|8zWiH048|zb-iV;muLs-@!*!fzTn0CHts$Lvt_jj^_ z1-Ojml1|W|Yc!u7-G6uZY?*1Vd`uzaa5)20jgRKAR0mon#H|b1o7Ys)4nBm+*xE@X zOW1aBYpi2GGyA#@$P~e&S8_mR6p%JyCAr40k~ixk+uqeqt9_Yk?8 z@XT%bq4dPw`hc)2FFu5I6nLzJe8=4Q5HxO1fJD=C7d2Zt!mY`uwb7GFPJ&cV6^0@R z{s?MBoz;Skhie6C8i8M8QMg~pDGu%rddCtmr=^-{M*e!E&j0Mv>Tu@MANjs zX0wHgK82Y&HL68)Rr7`7P=gFYO&}J;=;NZe}>u;*1*_Pv9AxF z`4Fl0PbF+~8m>y{5C~V;qiL5TFB2s%qP%g|)Ixn6(yNYL6O_3= z;8e}j>KtjIm?*gvo+j>ps@oyFUjZn;lV_Zg~ zDgEWFUD&t8g^{q3#%n?vl>lYNn^5E=p?2Deqa>5fQPYMEM+hJCAho?=0M=SQvwCFxcI33*1J2~DbL_v8p zlnhLWNfNTbS`Wl+*|!QcS^mcvH!w-|8vEhQ2;~`-4u589LGF)&@M?pw>R0&-aTSuI zVo3})$d)Vi;H4BjXsgx)0a)5oP|(0>!zJ4tywmY^L6J`Y0PO2q2_FQ z;W2j(TyFQ8l|yE~26znmThul3gXM_;Op5^SOB?@w35DOC2u6YdOtHHq<-tkmUbVls zA^a6`)WdB}O}!K?1(aPQ;EXA{2#GE*FuNZ<)sheNVSvH_%2w7HgJEq@v?9rr!q|{z zi7Jn*H;DKp5^o8TVSgG)nvhbc<&nQSjQVkO5Z!Dtk+fyx`?1F29dB2>M^yLi{bN&qZoP-@DEL{}GsdhPO?v!&QPy}t zbN4Je6ZSj9&;6#M{W)A&xvIzspVuZ=C7vH?GsL*coONg&Cb{H4xG1$_UMh4$c+;at z>PMhV#^6>r{`kPH@owi~z*=5xtt>;D4#Z*{BcN95nOn^J16!CZBiXtJD9|snlQr=? zPpK=jeri!QLA}MyxTP+Kql??LXJw+}_*z(dGWKZWW)0uMF|n>zqjmSYH`Zg+KpZy$B#O@D9^lH;tY@eVy3TAOq7=BMg3q#pYE#pt zSfoKMu_qC<5yt-DWjc{iar8n|#e$k|e4+HU7rPfUyl$|rRh{IB$VEX{zh{{nM4Wx1 z8@}c`$C_PgUC_6VJnIoIr!^J68kGC{s)1HwBxfKS%%Ele_?klt5wxspe#czG9i_wFF!R~ zc6DmaPBkbqM=dIAhyZsayCx-)K>D{BBc&28*jz}e1BPkjoi1zUUha2SsH$eBdDu|wYOJSF>t}1icW~)w-RVap+iTG;K{#67_=-(kB!cb z7rCrty$l?_7j*w}c4R||1ue`=n?6}(HMn;3^^kfij%{jrSupw2kWE(%R4@5Pfq&qJ zkNy*@5&w^^_(g&lVwf#C@#25o4x8m1%cq#L)5(}ZjjWqkg#M@G>Dx`q6Lk5`VMf$x za|C59JCm2k(TKVn(nt&Dc91Y7OtHyC_07@A#VH37 z3iKqWNFweW(l3p7`Yofjjd}E${fmqt1K|gGb=b-yyTcppa-jDG#zxKgOhlM_J9*&- z6;oBng&06&-TKFrj6sJL#CKdoPRVN`N0lprsX5S^49eBJ`UCA`e+1#Spb}v~=!ccD`Q`Rx6d4ZHy*7`rN{6+bd1g(-#_k7OJEHhGR%xgX= z{voi*w)Ldz=G~+|4i*ElNrV_DrFXJ-0-|y4Nlnse{b<=F194t|9sk}x0ifP80{|ZU z*qcFg4-+;Tklb7hj36~`9U`QhiW#8&hq{4=F;dp2TDLcGxSNn@HbnHi*tr5cOtW)u3UMVqM3CyY z=DD0{68)R=my7OtpAdlPToPRt9nIdbDqkxFgV|qCe*#{$^2LJy0@c|omPZ0Yq|(~@ z<=f4(qS+1||2y~T@#9CLwQ~txk7G0+sj7Qeca}^${V>5oP()m|$f^9j>E4RlN)2U0 zS)YIhQ(drlxP4;gJ35svqatj;2SGHUPGF9f%Y~1hr($thUmu5b&OzX5x$c@zdzT(&K0?VEe`D+k^wUy0Rs*D@^+^N2&+-FGzl zSeWE|x83;^@qUEf1?+dE{K8|~#n;nAmYkJo)haTD_ggNa;irGwat_H?vvJMsqIvDC z-k_bY#+$&(yZ>^X*~qAZnd_;sriIfhs&9>s>rTz@UvT-lq2XWV>A*jP8OtFVIGohY zCkq8Chmrfn)LFEALucmnvOW@2mSojljqSCusvKFk(0m+obaQ9kizNr!!Ji^ z!*2tpv1_qwmy0WiRi}V1AC)(D2@nj9o{B@vv5SmY|3XlQO(^p4< z?Yt2r#wDozYb_txZ#|vHN;2M}e$Re`@KRlcL+~>lctU{%H@n*B>dk-7_W@qKe}?U8 zDX4>s7=8ew-9XW7og5{UMH^a&H`uF`VX7ldfcdwk=266J_0)fbieQA@oi>6*sK zD)|Loj9mOd6Mk*Wp7J*HG$p8roPJ|#-w4tCUBO2(SaFF>uS-c`YB|l>4W#)o{cj#~sVz6~s-T{kVh5?H^%Z$qe=?BXqP$FN- z&G-?+Kq8y;_NsxnPankwI2U91=zkhT{$K=ep__L#Qd8a;qb-k6WX=66%0{@S7!0lW zt_=J03XwYLsBO)C%2$@6@OHYZz;@j^o^D&uuzYo%ShC`6_!36o>mr$2EG$^zM;7J%EKTM9Kh@*}zq)AU-9~6S)Psr~lbBL* zHwi_syAgPlYZ7HakvXc1v2oaC^hcb+J%<88mq%F)t^u6fuwvLhfQ4$oTV=51PiSvc8%D&j+NIkcUm_kp5(d}usL_lK-bC-J}32app|M+e* z#-vISj}M{hG)SF(TKWwYef=QZQ2TeMJ*Wx3^zmx5PI8ED$ibW#jjAGFP#8iHh6>Zp(`NK+_KYNOVp1JUrFX~ssLWihf zqtJw$fI1AyJ9TwbO+5zM@F2>d?L~R_nAOqeFTuf^s8kimE@Y2smsZY zbwPUXcee@J08dbx<^ySLtyMseEY?Q8Fxn=n{8}f|uqXV!<6f^Rn;%HVu)Or)b~47TT+v-ge@r~ z&2fs$Wkmx~G5Q7$RePzV13`$qBow+u$%Q1VHO{~8H(2VAlp&puAVzIjXJh6-bPKyM z7Gjk1bd&vprEBa*C0k~L#q`C)$_7|R`a=oz9sPwrU2H*T~RFYB21ZMKPIvQKl zT#$i)5fgl@{On8!@oH5pAD^-fc5b}Coo|?K79rzUm=(T5chQ;WwrsaM7(%g)CQ=ww zgcd&`T4w29W9r`<1tkA4K0>h^Hsl4-*ClJ^)V*+4>)JvbszsZv4N&Lmy|I6){hK}P z7NN;S`^k(NbzIQrRw#=qxN2On28R*R4aB-IU4azWO2_q>F~3=_iq4xR=u zq=97`*!jf@Ts53RT*X61T7Iiog$We%ofL=hUp?K5VA>BhbJTBo#RB)6Dzv~(}`z9HRvJOb2hsr3m|lU zXKkDERE_&o_n54NEHTDwGtN$75b`Y`_*%ar3hlw!e0h?=x|iU@TWYHwCY%rAxZjHh zNROfc8^|QZbDkydAN;6In*BP&*cJC5ODDpxVe|7YjYF>%ko*WI==q@tM#79?DNxqK zlA)jqREk+sAzhBya^_9C)WL~wRpFK_)oq03aJ}!PwVap!ELyk)-PXUd^O{>gMUgg8 z1llwC5$%5H{`Qv5Cyx@*4>);Sv(@!EBHpO7m-)U}sLCpyzgnruNnBqmQXl(mJyHvH zz&&mQj2W7IxmUPn!we>@F$4)F?DBbt_f7|w!=@q6(g_Z9gjT-gR>{4eFWWSaVrHm+Pih>K1ZBUazDWr2@mjGUy>T+0{HDv!pu)AuN0> z0ulqSJo-dWpG;;_q{N54s`{u)UHBJj>i%f3FeW~5yP*TN0YQ+rqePv^13{_yPjyW7 zFtzyI!S~0CzI14axQ3;D-{1h&0cA3xTO3EfnVC=11uw!feDFytHQCz&GI3{w7LHAL z?swuqPco=Uku2l8>01rU^9LudFdL`vyzwVSG@IV3_{&v0s#-;e#I7b zI%`T%lKV^uJK$3POmvwdAq^M)k|Q#$72f`Z2VF8zCR|}&6?EHHeLaogScH~kTr!2& zE7ESGXyrbgOfnG->8L|~ibU70&|x2{&6ikynf(VRzN$lMfqyPoO|MOmnK!W9_YG5U zBa#@TvzSU<1V|zL^-5(`)=jS&=iExke{C40rJfCijvVb$AA?*K(3!&n^4OR{;JNl# z=nrtPtHVFnXggG$+BM2>;n5?(soFIYI8VswWQI7R!n~}C6>K>|RAs+5a!byRYPfFb zv3wsDtU7#;*i<#Y+KEb54o$M8QfQn1Gk?$-6U%IP+T?StM9Vwy{E`ohlslU-D0-YY z{g3xCT~r?`ClBbp@bCQr<6XUl$HC8RbxV)yz+?NxRnKv^Zi2uYtBX)4WdQ_xgG!Y8 zI+s2^G})9p#gzF2N6e}`jegz$@N~P!VIFZDHM<4Q!Q(jRXw!W%ukF!qzflq6FTnOz zVMpNhMLw4PSbDPcQPxW_Y#^SVAGk1C+uq2*IcH$Az0N z@`rKsS7tW<%LZjE9{l_%*QINuNS|HtH+y3mJ=!>A`h%L2O0|^hl?m)?0Dr;7sM|Em}EVM%eQv@?>YR zQg+3A&eL4^N1kv3LCpO{{%p)+m+ZzHTd6*n#V8}k%8jp&z%y8UmY6q{s$VAV^1jqM zA$;-}#s!o;nazoPU7?x0-B3dp^Bf^XrN-vfr0PaIc7{nBLCpE(<*QzwQvc_iOh1G$ zT3}P^dy&kWv7f#`BKbw-r|o;!Yv()vSM1~W^%vjoSMl!g`I`V=z~HBQ|6{}FbbIH4 z)6XDY&OT$zg>JqBM3Bek6w~hZw-NAjf8(_%@Cp008t?xaAo{yHoBwleVA#v|HS)Xc z+jW%tXfL>qc@`MG^9GoIt;6SXc#!Gs^X0jGW@O(z!4r<|fX`PsSKrm8vbt;OvM^!D z5jkK`e15ZpQvdcFC8|cjg-*fXkky~Hp$NEPYADru;t#KMXB(j$IxE4!48tp{Pv{C& z>e{TAbk4yEUeWP@W0CmVg37+|$oXN`Y#* zDdczAhR96>B^J98CARETx^+4}>gG`K&_EXEZ}gEsoAJU}Z5a1$%>>>QPo2Su{KISW zxGpe^7E@|)Cn}j#cOD+jDONSPDj3nm1E=kc*|?j0)jV4?G(=_Pmi|y)b4RFkrXfQI z414UKh(|d-92TjGc>v|zkmDjPlLbn8=1~`vgcTK!Yk<3yAuul7F?Sk5sil-g72ZFQ zTfwW8`VXSQ>9hTmi#woTdbPe0d-kN2k;CN`|A_S!jDL3jkKD4h+IS7u7|AAt8rfz5 z*I&!J?Re1vV{%sg-HW3|qj*A1m0>-!Qz+?vqZ$^(0%ZH2V?&$*d<==x;m|w*M_|9w zvaBbyE@?v9a(6sh8ZR-N3Q|Q zo)QD1JqKS@xE_Mb5yh(|ngJt^laU{|#SZ2AykCz(?`AvzEnVx=p0T%Q^3OU)D({(S z8HF@70l$d`30`iLWaF8^LQ>(r8g>ywkIaQGD)vP3=g>5th0C zAe7pazoojqKmOpXLL=HXqIJRW%`l5sSR{PBZy>hzFseeb{0xt9gvNnO0^%rRRs z8D%jvUjeuptgflqn^JGGG&N7755LmfJfE@GPWh^*EM7$Hnl;}vZ4E2DRj(+^h*tF| z8q%6y6`Jth?8mZGEk9Zh;(P2vhkZ15y{Qw)9I@ptWH$j_sfh;;b#H-Dd&eisYQ9YO zMw5g#mlKig5|HNS^D0yYAWX3Jx?;8r70P(@%j4VGZ5A70?0XDClUU|E`o`z4XaewYB_5U7Iwv2M@d}WO?M*XC#>yvrWf9x7(op7vQ^W# zaN=Lo?fP@*AVrY6vVh|@*CFPy@k{th7e?Y>DdC=NKpt)J3&iDI6&xwNF8J;DhCOmo zD;OVJJ)?ZtS7+uI(n@tRWpbg`!GiLfxG-UeRfzAlmf8v%T%jD#_okyJ!v2;7MY2fbFC3n_7TWt;x*hQs;Bo{GS)(=L5f^A1@hgLXbgFPtM;YG_E zX6Ai9hUIkIHGJx>CyL8^C^%~5m1h8@5hGN(a`eOU=Mcw$D>asO<>T=pwvfgTHYeKg zQ@g8ndL0ltZv5F3uCcJGw;&X5nCMLRewp!E&J)v(g}s$4DaRNUeZVPiGotKYY1^)f zBAZY2%Xj~y0@+0a@u{%_occQK26Tdp)ePF4J_nqAbBJI64d>RE_j$l=xU7g@FTD#K zMEdH)up^Q2f_)QFnm#R4Kd`k|cE9-e$(yb3?u*~z)G zPOxWcAZB`-4FkXhJoXt@(*_9E2nasEHq>qg17&LcOmNffPz7#7xIV2Os;O9#D7&94 z1e^r8F#EF0hp#?eEavY6L(hMb%F42jl+*ncp@+u!u+ zZ(9k@QOg;5vIh!~*8K@#XzM-W48j|UO8OWZ6dEbSib=KTcPnJaE@2R-#lY?m!R(~9 ztrruqOGD!gxaQ2a^n0}sX82Ngxq&^XmXbO@q1ibg&q%fbtW)(SVSl!5G@XCK8~Ng| z)`|w8&+Z%I3)NoSMp1L9fO;n3aRm%~khHMjkS!Jd%5xeXsE{s(6rQx0zuM?wQziC! zT{Y$6LB{L9S7;~h^R0KDOjN${yTaYm9@b9EnfSFi<|>rtzx}ko;9j^?Do)E4&$2#w zEYO6@FPBUXcEjqr&%khxWjo;jICNty;L;v1NO!XoXW(aKGmY#-8OUj;s= zQ1uuLdV<&$m*%A2M{(WR%)>)m>U*G0SKKs47VS(2!A+RTwQza8CVM}uxe3;D1GF~v z-~YOUAAhQB=bsVFKG z+cL*ypjyF%ap9y?KxvKbki*uwOi zBIzo?S(kWKWu{XJl1=F6Pk7yc3{E=TJIe_6>SHsdx!!}>KTDJpRsW`FkWA)7_(VW? z)~St?tZ^nc|{Gt8f!p!;anyZcP^DczIu|Y#dU>bf5&qs1d33G-*Yt zff5Ms=_(_zclM}o(Y>>1yEOk_i6SbxG-xfpJMiaN?CV2yEp%T-}C}ppP z(vclO;^BhQ!FGSNGMxA+L#Dx%Y@FaP<$Rem1`j7@PZYVuaX4-lP5K&7_Delx_nCCm zN}jmMh1QWPb<|6!P>UjQ14!H=6jg?MXOyZ<616v_awe5J!U14P)N;vpY3`f7y`7sn zyA97o>$1)J#^`>A6OXkxNRoNz@^-8{9qC6L=_dzoUHzAhJ4#3Lf7v*rbnM1awvokc zv5>VrsKWGol8@6%k+k_zIZqyrlS}x4zVh6e>fURB&RqcZcWx`H0;cRKykEZ{4fEgh zVKl#&!Qfu3;9GMH^TpRNRr*`W`|alqF;Q)a2iS{)Yh;4A%ld0c*7l)3{b|-J$<`3r z)@Xvi2c-hP>CmqZ$TSBfdo}0}UC) z*Se5j<|9xps@9r zSLEv_kzbHQpULKUxguxTaIQ>)dyY|C0z7;fY>ObW?anaZt-QRM2BuTeFHf;H z2~op=?cM~TBU~Tw&e8Wnq1KZtRS#G+oP>721VC2(X96I)G7JIH^`k1wRb>6{R`pd- zFBd|Wa^c^iAvGjx0l%<@68uSpJCZ2XZ+}ZSp8E&*Fxr@s4G(S6gKHKHufb?ZuHu!Kvva|8iu%n_ulDr= zYvjOnlEAvuLULv68G&pE5j?5fXe11x#oHhZ%n)4DLFvCb`i3>(g&|`XA?; zmzg|vF_7@KG&!O2eF$ba7LG4?-y43-{JYAWJ!wmg%=L%+w#{Unq|aO*HQ1-MO(x6 zHb-?Ms!aR`MRQmuU4pF-&&O5_cjO!*FRoyrwfZGuM99P}z11eQ1KBR{Q|b0{N>~Ir zu81n&jx@q4_F&)ot`qOZs7_e>-WX1{ zN)Aa=_=}fHw{=9JukR7WaZ4a?WxAuOLvbwCDmnCj{<49KV&CQ; zokyr~Gl{{URMW8?mb7pxH^Xtju8#z5IH`A*%u9-Zx%BZ(>PMU!u~F}Cp~ZFuB)9~$ zT#cc4sL3L71s{!#gl1oHCW$G0KqrEA5soiU3ZCc20?w(wUR$ z1w9@!FizJlS;%cPNxJH$I9d}ovW&aV$nDdDWK#eda48hz-X6~>aSGE5=!OR)K3Ws* zS1CC(0#bJJuK*?BiDK*pucLG{RgUYpclyiPlGJnMOovoDfl_qlhsCMprjV(NZ2K`5 zy507G-lxhtZXh|WCk&v7fOAa+_Z`Q)(~+OUghw~g_6v!2u0dDq;9XC|r(q~y$2gsw zSy#MCn2hr~%&ED|qgmlozJJO&Y%I#*)QU=1rF!0!PKfocK9ZwF^*sG$vO@*7^gxq2Pt6zrvhs8vbEsk{#56fFna6*Pr zpOvw-e;gV|-%ErJsV$3^t=}1jPMBZFSzcRbtmQ5T7FIuAlDUD@S}ytcYQ_(P)BENv zJxas#U>tk2z7-uEn12lsc$F#r^0Ik?$*p8iyGq$zjXH$`jIAB5Y3tFq|(0=x)* z6%$*N2?}XgwZ*wL5K`^~1kJTAKc(zyi#8pCOd{gwOxRckQM!bZ%p&{fDy7C>g0cj# znj5*No2d|G$VdZZxnn>ziK^dMg69>P(zcZD^7pCFmMyQo9c-E7_?g@3dJc#G#EkbRZR`FQ04n~gSnaaLGuS|CQ z!^8nKAqtJJ0yu3onLl6zK9g3j5Zl47bYXk*w890YK6gu;JEwc~lP1fepSE-8 zGb3>kk-3wd#sIkdtYc=fl$50L4J5k5B>7VwaI>j4)T}6CGy^YPn^W#{&Dkumjc-Ou zr_uF_lU>Fo^5hM{Wcz~5Vn!LRA9!{%|Bu5ruzPEN?3jE=2=oRK8cxRo8BG$#8d^tQ z;7aRL}xq)%bw;#5=x24AKiYeB+yXjG5~d~CTpkTLNR7;S zE-kB;6l1m1mZNAvGrw87mf*Nl#+uAo*OZ(3ulUZ4)HByQUMS0FO`44fFAb{;8j6HB zx8q@t_v1y`%nv1$eo?2@Z%<~<`vW2bikUgTEF1}+8navgzTu0?2uWHja{D0KB z+RQU6@#;SCH-!BtOEWD=ZCc(Xmk9QwJ>1-F)MXfpG^*X)obY#nbNkR20Pr&2sb!KeSY^bt# zWt_)dXR(2?`Z9z zKwj#Nc<7mSXhyn0K_aKUB~pYc#~El!7+KazJ)`h9t zR)fA*`pfQ~a~_ex`k=)$$C#L_=6v4NJd{@p?RBUeGaS|Rn;Jv+Jf?tdF%UztFb+=> zJL2Nno>cQx4(Q}CzL7kmJ|n6y<$hkm+EKYdrt0q1NDd_M173rFpy0YHL;McPN2<+FQ7(L z)W7@zex|(Wyc1~2_q6BwvQXEd`UU2t#_+ch6bnm-3=P@PA>;b$e8G4`3Nu*VImqJp zB4xOVJtQ;%PBWV1N>!-7?hB^pM3Xfl&br|5?Qp?C1flEHC9@!mIWEqQ5H7?#AIjKk z{%DGCxXW7W5iNW@ox&#@vw~kSYYwrgm^B!A)ju?e&ep5al9K9?Es^Ys>RfI~P{*)> ze^jGuB!KM(@^^p0wiaZmFg^Me-d+ z7lDj5)~@BA+PG#>zlI=(oz&WSTrB=1;_X?T3*wJHQayqZgJ9?GRI6e?Z68W19x&m4 zUxkf7wWv5`$H9K~0XrvV+E~VB4OwGvA`R9GI8nLGS{y z69|3RDa)N96uQy2OGcfO@g-d)f2`6J<;-73JAAO# ztr2{LFCJI}F5n7I_b|~1FPg~0cl=d+Z@mD~E)m41Dc0m%t)E{1{7i&aR!H{x5n1Fj`^#c+~X1J*FREyv!29PJTxOa2qkIoohx2;q^H5 zmp*|V-P4*RGJ2`tfI6`IA1AQqhN`9KE&bbv2O*%{O?mI9L^;VRnXq#eFoA>(*4=5k z7gx*LeG@d>FrSD;HtEW|@Hh$!=;?4JiEI4Zi86Zz!_*|-r5~h!ScyB=HqcaQ>Q067 z*-gNw7y6T_TmA#8Yjr>0M^Z&pNTG{qWpe{4|L{90NRuQatsA&`UH@SB3%mQJ*4hA0 zMimi+dAo{d=apJq7O7Kq_v6jNc=Mo;Wd%xkM94hu&|WMbdRM~id0p6sx*?J;JUP` ze3Z1*yr%L~gX_XIt1Je$UCnnLe@EpCy55f-g&fvZF1q~_FZzRTc$wHw?@MvN8aqFu z%sj_({JYYzYo-Y8Epg{-lpAo^;%)6|a+%OBb+G&JoDI73FVp=M`(=ksUR4%y>?i7m zYkR zgCN>KT8#td(T-Eiup&PpdUxX_crn||5xB!9Ix{m&=7nRwg7+CoEzn?}sO_$!r9a5- zdH|TKWO`y$(tW;AY+pCBeRcdPq^orWfg8rK3F-j*b~s6fx~+eKE;=C79n->>Cz+gE zpMjN+5A5Upx+|B}J>;na>iA-UU-JDUR}56Re_7PmA&tU%+{66^QD2kmN6MXRurnLV;osIBn_+su z3Zx7~yLCJK?)iCj?0(3@=tx6@yEP~1`DnOnxYT*N)6+G4Vw161YLn*JJ#9wmJE)lh z*~H6{LM@Um18i}odNrhaeiFwf zv*`UHm>{{s%Xb34l=8vowir7llhmo|4h63{LRFDV`XhjR%{i{PX!dfy$J?@Q5-w8)_KE8@()`kg zeJ*DhfT~-aeWJ$)OP*Q*e>wWZb$d;0$oRGPihll@mjk8(3QAg{&vAy4ZClAE*8^I%^DZ$Ib*UUE+Qb`8YQ^-m)^$G8GR zJdTo0dbmq+Y?2~}yNsZBP9Gc5F~PA(hX0(KPIpe|5chWaEvyF$$d!|C&TSIC=8>^Z z_$tV@1TRZ0V6gfpz0b^s-idTUPFtE(h=#1OMXFGwK9sRSupDo!MUr5|+$J@#_<-9i z@SrK2=C}P3YdidrJPO++b@+~oz8&cX!-%62d-8-?T4j-@nx(lG=_W)2m7yD>#k>`9 zghybLFYiZ&5Oa_%zT;BGOQLrkc{|xvrImd^7QdwQ^k143v*^2tJOM}KOkdV!%Cmm2 zCo)cU_qi^3TdBVU%1vxK{5L)|_6#R|WIQE9`<#8AuKtM~xsl}~q>4`R*Ifxcafhu* z87I&8SjiO33FaQ9D>hweQfY_pxVuHJ=#ZVABaXQzin~gWkcSw0gE~QWzBHlPHCpOm zoe<fgTH%TdLN z>l8-1TzC`8qtXFT zPamRs>LB$b9rI5zPHgu41BZ*0E_Ha?OfXDHp-M$#1yuiI&AFpc7FVQ6cUo(=A(@@G z4y%JtY5jI+?uvA2J%(O^`~}Uh9%>0=QWEMvq8wW5pKqFobmtxx*P{m;(6)s4p~2FT za|%|IBxoqjqljCDpkBrZMr07)-wa|j4uEcpMp4hz!{`*>>_GNT8-7>;HRiXKNzNnT zEx3vu)z9_hVZ`1Bl{Sfcn|S}CYh}409rgUJe_|`yZ!@egho{LiY%o2)EqZ65h)xlp zTe0sWxqZvu2hBbMtW_v>qUSwicfA2t1daL393iKj%I=X*a(1(m%)oHbdl9a@z^=|f zzDXge)7Zgyw-q0(7`7F^%cP#reBF&96SpC^<ql`fb7`kvxEKW%_#ud%=~lrA zH3Or;0uPG5?g-2vcbuWr3jdU;{@i1d6Ph%O)+c?&qq%>OO1ni*A^x6ak)O2Z9uvLZ zbPBnk#!obAjgPvP%Y|CYH?x*+#FpR2sKm>ja~D9fe}T=Oi_I=joBaVw#}jr^U$J)m z!JxG{zQJ!8v<44AgX;{`V81YyO*VevE7V#Xn>O-s^+{)dZ7{d+*~ocNih$I3&WuBa zm-kI^{jaf?Gmv(gjQo@M93=Jmj)}fB=u|<<%o47{1Q_st6eir@ zgjR_r;_xGQ#&C-HRz|VscHpz}>I(9Xa~ev!*<@G%lVOfJ8BUd%E^eZU83;c7cfUZS zNX{-sA1t(dXGPxb({O^d^{9!IQv`A$-j zJr~Nio9Tl10zn=PQXg^uOLp>zy#h;a(Z&7ZCYZQ9pBZ6Q4Kvpm*_hk9Y?M4hfWocf zGoImU7lV#vTEV%WssQQB9fn_eMo}H2_c~y5uF?H5s06}2uAhu{sGx)|**iq!l4Db6al-%H35EU)6dE=F!e~0xS6L-hW{J~<%%|` zER$Sdp?n*yi6*^FllD(>z=razw4%lN3G9)!!yn>p;Fm#%jOf^k4*`X=4ogbqcBZ$( zzx<3O|L>>Yn=rs-|MY)w%yps?gJpM<4fBVrf|-EZBg<_5DK_6JS2`@Kn|k`>Wmf+b zm{{C>xuu{|-o@)5kw8QES9r_hCu|~E^a_EvekGPKBP{VBbBQ>;p<>A+=bQx zSWRFyNbc=^+h~8WHMe6W$iQ}*QsmO@a>aI-SUgQ;b#C#r*rn1s<$Xl#*dEFkF2knN z*l=!#9;LCuyoIH8(_om^?!}p|z+4-oPYYtE*>5YB6n&ZKxh>tFJPW4L1;qPt<92wz z?5vYA5L1syIvgq#(2DUFn*FncTOB)=_2#;_!w|q(t91LskNv`hQt3A7faieGvrrh2 z%+eeXrfsSitu@ArQJyMB5fr0KO*%1JX_l5+q++x5lqLKt(EL(0b|XgfuVqstsW3T% zdijn_&}6K~!@q>r(kyFu4i+oc6xu1gwDax942Eh?W!pIEGkF){b6xZH_uI%$mK|+i zDu2{-S+&#&Cb03i-?mPkV)aiW(*sv`Qmb4H1En7{&IvaC0Q%fd#Pvt;?(Jq+EYkha z2c>e0bdOnDZjlPjp+Y-J#v~+Wmd$?$$yN}9o1U;4K&-e>ee8L{3O}vxk4dJUIjhOk z>@)hduSPs~WK!D?2bp0up^Y`X7E8{x5(M6&8dK(eZ2LP)xqnTK#CL4Nk@!{k85@Z< zG6J{74aF_8V+(geZwVFCAgpRS{2{Ec{dsIGzCvTMI5rl29quK31WLPU_}ycdR#>DJ z=I~!m0kcLit@I*^%|U6JReH=W-ENU?H-|@JCV?{GiKhwk`1qazSq#s_$!V(Ap1*)m zsti-xc4|1#AHklk}y2{ER8aYyqxSlx=#!U;#1(YNDMRm zPKn-gC}s)fpX=$|n^;*)hnIVg)wM*LLj(3LD6N`)f5Y5(%Mwk$4tyFj{Y39e2*O|f zj$Weq7xqPBz3>t~US$nW#`vH))}9)5oV$Odj&Y{nV#=*J64N8DfhS8+=+3A=NyMG`4`+(NOb;mHn+s__0X!*p*dzL3VD6zt73}jdp;SNO6n`hKH z&%TXvL|n`r0D~A!@2Oz6fX+iBy4mw#f1ObR(>L>C_jl#t7@N5aUKkyH6GOQJQf05W z{sl6@nb|XdE4L{WlRbsoqQhCM-1A9f!~ZdG{wfdsgSqc;GXnFklfP_Nm_7XMK;r(C zXMY~K{ZyMxt;5+T*)9gVlCf*$t%KTYUUVzRM%Xh~Ai+Abt*3$?DFfV~$=nair9q~r z+(E9V4u9D6HJd0yNl2 z%w-6Cc?$WW(_oWvY)-XH4h5z0tmyq)8p$R~;k#)u8(YDuD64a6FRZhhx=guMNT=xi zP@v!?b*R=-tWSeu@IU(XdeV~?rzbDg$VWYydye!Z626%cJ{?)Z^<)pOkM4now7_M$a=4D(KOmEn zbmi|&am!@T)cr9sH=8sv-$XKTib?ZC(nQ}RvP%1C^my(U1`;Hn;ydE!h`tna#8X&m z23Si>>4tBQ#uRcU*8K$7o_5N|#%5DCKRNr1&FIK8N*Oe{P8C!gg?!J=u+dyKfr59t zY3z_|2N#hP>`73bv)SVMKc%7fo$u*(lKDOg&1+w~RC*+Qo00i*?Q)q}UMj$%;V+W2 zL$`j+vx7nf>*#}isq`S~F?3V-ZKA*E#!isfXZ~e~sn0t}C_zfwxRid(rIhpf8qFIb zm$t#0dbK=Nn-K%dA<|FLT5T$aaFaIoaXhgukjX5S;Y3uV_BZ9MpK3*HL1~&j*5%DH z&&bp`&&V$|&xrJi)TxZ`W?_I+p>m`91UW`0_K{l;7ii87$#Fy~Gbh~dd4yhc`VL9X zBcRwRYOLE>dP1%^fm^pStoZ72w?i6*-4uQjeuMJ#&$e18hA^HsqSSrF>RpIA*h>2* zj=~zlGvOEagRT2I+Rz&wgzDzn{CAS1Pe_ZI@fXMT*Q6#H7Kk={rN5sm{r!V0{c@vT=^so``j-zdvla77 zrc(MpqHvF#AlrUmvv@HM?we@4bN&tQ;brHiPe}))mOE(4F8=nn{dw{Ca@Sc^?5d<{hTIGfB#Is^t2=CccwN=^ZR2; z^gZ~_mFTC)oViy2oz%T=<4P_Z(J!6G;-+BD8K#kc_nE#l-YOM-5C`D9;=1d=kX3B= z84OxHJlUg_7QPuKyUnsFeJUFzM+Z!Op2#RXP87L_A188Mi8?b~c64|Ym`jW+M~55= zoo;n^0R}Q{ME^a4JVTJ5HlrFjA>VG6N;^gG+wd-7Kl4;enrno=FzRVb^OqZCXQynE zulEe3t+b1~^V1vYDimdyCt_ZCMKsHow*tCnIKN$lcKd~U4RPmPJ(V44Kxob(PvsGV z_|s-zv)cyG1ofGbp1CG_285M2Qgv9*B2UC5)-*4|w$?CLq$>kdA%hQ_X`CET(vp?^8*KB|BIE*D; zmO=3lf`5M2Wf<|v8le;}WWlkHu8AEiHrOn^hvkf?F>AAHAqy(eWh)*HkD{eVumz6+ zjlSSh-;WUGa{t}}!%_@%tB3gwK6y51YBY@s1l~~<>^i=kl zTp~pxTRlM$V~3|$@8+Q{?7Y-8o8;*0*+@S^Q*0Kj93HGyABgM$8RzOVD}Q#E?wOH4 zbLiv!h@bN*eTEe#a@k=6Ysk?hdb3esza>?kz;`gnhOylu7CQ6s;jX$X*^;x)E_zSW zfIdP8PienfzTE~L17?!wokM07=0?aDz#Q^K4B`tkx;l*F^EkSuBYiW?F#S>dlx4HH zyMT?cO>B%YP2#r7Mo%yerjHWnI*+r%P?%fM7LUu_$iCvU0T{)IemJO^G#YLlU{&*h zofdmXN5Y(VWXc9YZ%3!tbRHURWud%BShOF;;#!XwD5g}wFos3dntWsFB;6-^_p&H@ zxxgYD_#uHGgNXW9XI<_2dtdk!3Uy;u7iHNQ7CH$qg$^sJ6#^BU1m(4KeH>l~otOLR zKw^Jp;(41@ljH@0UwHW|26jAV+-N$UFitMD&SAcpKPQyxq!v&b2LA**>Zxjq zH74EsJBWVTo~)nFSYrC=xzE>6yjD#=jWi|erypV{D?5JxYtz5Zky>ZD9;fI?*RoJL zt=n1_g^Iy?>$y?Js}b)6D@%~amP{MbJVhESr^#mH0sMsFCE%+?xgE<*QpX|*Rue6P zoaPIK;}9%$53Fcic4<+Vrl};u?+lLeeS8StcmNJKUe}<(pJ# z_UyNimn{#yyQe8+&~?0#j$iJ#NPX;NWg9(EI_b6hZ=iO;bndB5%FmKbbpAi=y$f8F zRr)x7UKkV+ea9qkQBE}$tco)*zzj27l#7=@F~KY~MHrOi7R-2CFW4}~+c-*XZS~!1 zYqz$xZCh(g?Peef>bj+p23``)YR1tdGr%jq=Q-zn=K>1s{{G+Z@Avur7e3FN_dVx1 z&w0*s&UwyruCJVyNNNbZ)+38vhZDj!w_=HTZW`=wfnvgw~lAmiqI2@QWVF1S12+YFW53d!uJa;o#x=o&TJ4wpknowevTQ2+YR$SLP(d5Lgz=1b7=s}Bhwh(zg za0dZ|0Q>^)E`Tcltt~7Z;f_-bq&Q>19S5Kh{kXl{UVoPC-TaOk7teoQ;|cAEBvn}V8wo;8P6E9{6rkVE9?_I;`XTMPb z;$=NxBBX`TY>$F|^gLz*pdH{Ez$t*k06zd6JI%roxNjLqaRz|P1Kck9`DQ!S;Y#E` zhhNAz{6_KH;CH+Ye!`mJ=iU?WbJwvVhifGG*|N{MhR`?zX`BGWgLbO~71E`Ay~?kw zjg=o>6VM0@ybJI?z*c~d0bU3AFMvM-{9X)4*dc-xXE(q;fG@jc0!s`EWCE7mudwXK zK+)U{Wp^i(-AE|A+gaHSM$`d_Dzi!T(sLhA${|i(P49|v>j&(waqB%Eff`Kpf&2S5 zOzn7otUa!u*acG@>3cb;!It~`zkdt;i&y@n`;n;7u)Mcy(_?r6%S_JQ}b!I+t#eB?7l`OE=>Wd0?g4sT~VBCNS4 zd}$u!d+;fB52g`HJXc+9o+%zP;443(z4>wITFeT1;U>FIz_BE=`}rwLN0R9nbno`; zGgQZC*C62}BAvCN+y9r&WCYL20iAy?wE;)A&!yIT6Ca4gvui5W)DymP26PD(YZ~Aw zmF{>uBlaI4&ab@a4xQ=65Zi3PeYjSe+-P~L8@_M-S){{V5wg#?H2Ky1Ho&Au zVJN0K2L`R-UkE>~cT%*=kg||*#09cU0jDh^!f)lSDvz2rrD|0=LD*5;2jzczy%7piwG&%hH9=3uCR^vVY4pbpsP z23n7q4@)$zF=UbQP0u5_lULW^*TU+s1qHJfL`^<(I-0=rBoHux100dK;Ey&{vdpnL z1HU*9dY<3Dc+|E_}d4^GrHBAbS+z{*f|$z;*1V z=aI3yfNo(@*%0V*%mI!x+$Bqku+9;OJ5iB+z%ZX}2*5{g&Nqmue989bGeJX3q=-mE zB;=dlIby7)YTv(^!YNB_U_72qE0aT`1J^Quj7Qhy46lV}p+(ql3xvwu*+Toz{Rh4K zPs_Pbdx~-#HH}l0VN|E4DB1K!ic&$puTG8rP}WD`%_t^in9ZcrfM!(!j@C9$sREnW z05wiy`H^!^tY*=>f`X;J`M2Fph_01SYps_>5gWz@I+k7I>U@wPeKFfK(g_&2c;i;j z5_W>VhGa7VT>)+uxX1?HH4+Byykmt*yv=c3^LM{H*>a)@%;L6PoM}|sE*W3BiFKj| z9K`aULj?6+R|tfd=ZbF_hzXBDl?Dkf5&S_sTA&vSwDTyN>1DB z9ag5$7@`~@|=Ha$cwrL}(WCOv|QpXAK zyDMyNU9~L;cn+2BE*&-%as}_cNIv5=dRkKWhvi&4=FVQI94F?C_M)`27^igH9);Tg zz&cnFpsVL+wBnY4dfvVng2P*3c$plyHmEH*07P!X80}WPW-N5=6g$)tddN3RIfCEj z2c)REQXk1q>#x0E-Nx@oi6)kM4*7Hp!iCr-B)RSf%LUE?EcsbG*KLQQ33c&!zTznT zCaU8M4*Zh?@fcx^Fe?zSccrr-eR3fEaO4VhEwaVI0drEUcYR}-e{jz99Jm+9ue(7a zU(6C3akxE^<#;DQqY0M*>(DG@kF?2Y2X~`xJ-D` zd>+tQDzgLEjubAkL(z z&i;^p_)bSB@&~k_^(kyX%T~x*A&_a`jc3J8awIhtX(Bn-->T7R-%ahk2Ggq;s&I!s zEzMtG4XXoAZ7YL8AfWd-9JrcwkdoWcbs>#qAYgASJp-^sxb8ZTD zYQlj5O~MiLR-kX28EieYcBFrHOZXLdkgIE|>t+2_mKsiX!2Ao>pkLF%S3W{#=g!zN z1FeVnO}JIV9}g^?!6?Gaz_s&j^Upv>{Ab+9YwBk?%i&(H>@&6pfi_=-8_Q4u#Ua+L zK>M^#i1k3=+FwcMbFwpS3@HKEPh9S$01w} zUDHx_o~G}v<7*Xel3T9cl%zBnM&*gRQ(oVHEK+|D=ZlhLu1#+xnck@HuRy<-g`Mk9 z6Btshzk=6Y@zx1+$?yy&I@6sUe$zwZ{AzuF6(k8UyQKPqGm@T1Z9ir?LfXG^-gkrH zBb^6=ac9g6-~+KCDqWTH*zXSsU$PV4p_Yyk{<&Iy>p^~Nvyj?k4>^qc&-tyjmO6h+ z%_OiB)rW-U_MdSss1EFpRl$UxIw{!pV4yw4-_N_|z0pBy9xq&hw*eRFbnXqDqOHTr zFDxyJs?_6DKK$0~Gk0IKPf}I+gGM#z)()`jj19^@UNx(e|LYBPP2+{OS_Pll&Zl+= zR|Z@(f2o@fq_(mdU0WvBflat>g>~#GzTCl~X;d%scUQAIJw{nf&pibSO=F=YtP0dM z@SAX+IJ^N=>#D%DO3Rw25)&>0wM_~LH1)S!06ht14T&V-Ag&5GG254SQnZoa-IfGs zgMj^}`eaU31w#=(2!=QlSfGrz(tTR(!Z%=t(Fy}~OE~ISbs0o6nFEb{R`?mB0C&so z71o@gS8p7*nOndr7OwC+{2iINGy0pd3pNNe9|zJS-IRVrN-Ct3Mk%@L93;L2Hw}D_ z3acTB>F&v$?(#3s)OpVi|I1Ir5eb@p8eep_Zp zJ{YA-Y-w`ActEUEGuynh*;n?|7V(x2>|6P5Y3#=R?5}VxX6snmA2zH_QXc~^eur!n zbSHJ3<2vq3?!ZoG-48b70ZDAoKj5cd9pAKjE`Sp6#}h+#L5S<0`PE{Yj*y8sUZNMD zp&q0+bBK2?!z7 zPjPh1sIHc`-!vQ(-8z(BKvQ|h)Q{h>6V0ZJ&=4Hu5F0F!7BwUS4Q%Z)q1AB#57Fbh zN$DyT*Vk?m-4RP!3l>=mUUyXL_n~}P&kwxPO)bC}XkhchZzb`SnVs~&5Y5~#zd!{{ z1P?Gf0?n1yPSg8bhmaOr4G5T=<10V_Rk`AV>$f&4{7t{c?fXHwL5Ds zkFLGq7rsw8Xg+I8g4bv~lK{gtonB_A5Y7sz!M0S{ zAgotHsth!`WlyT(l}ohs3r^vpJ*9uA0FO2zo!2m5Ib{m~iDD-tpriHXMLuDMQ3Tmr5LjX$0wh zRYyPkSbMrsyZ$n%z&mD4<6(e{X1PY`c>4ysS?Y=LINnH^`zTnC!MH|6kB~d@%Z4KI zPmXVXVYsv1xL6)&i=~S>p!af{lnaqnF!}Om77Ae;B(ZB^Spm~>9GI3W%D0$>o3W20 zEyv`GKJ3?ZOQ zLr$mYK?io=XepSls$-SZAY2wMqFnxXh2D)J2}XADCW6^K){|9fzdWR1PQ<{oaZDp7 z2YZvn``R!xYpjn<-SZC4?@wt31?P}*|gOWY;1{s$6B?*ablW0va6nY^4&H-8NS($Y&Uf#=BQcZAq0KW;R94xi5K|rEvFbuDRg9B>$O3aT? zD>PV6@xnjVU)Ek9tv)>9y7@IdaI$&VH+fMg*T?u#CgXz7sLTlq$7;FBugWAJ8`P3t{pP+?=B?eZ=D8Qo9 z!Ra*XA?oD^Iw=-jKjLcW_#OEZzTj#sPR@F0g2a3f_vhLbu}}6n(9e@Prh+CGplNSWAwwj@JK2dcHw8O1r8#j-Ss{g#ebv7-;i; zrqS-14c7mk@1ieIFw4|XqvWoEV0(W6;kp~k6kv(-JNj8VBFtx@tBU{~>T*alswoZ8 zOqmr77Nll0-Gb6xUhnCS5d<#@B&Y1-U!HFiJ`D6KVPM)u>aeNGdcH$BW_=SKU*mZBB*LY<1*D|o+ zBe1u?wJKDfBD@c5~0tpo)L`fiIdto!G!K>Ecfk1irxHWr;(QdEh;V-`XGT z6@CX^H%PC+f~s!m7{gm}KdP;gQnaTlQ-rHhQtI7yi9&pINAOJ)BKBm*PDf^&xhQX-nUUY4@ zS@EXuP#D+-usKb8$TRko%mWxG_<`A7dC0sezgk@*oMh}8Dq@$kGVhO zEdMiqVo6sfu|+;WcKV~nJ?|&9TCQ{ahL^GT(OT+dAJbm-zU8=PXu_{QIO3x4%%ji& z;xq^+9Tpd+>`%v?*1hH-V#(@&IE+g%&%L61rU$Zb4$+&7>E!Ya zM>d{rJ&7q-U+)(CMZaER$NnP4ez1G&Wxd7LU6NvlT=$ffRG;|`^hzSE}0LO#wu9|?u1(CSapuE`1Mt!kCw-MkP^y)4yK_(5Ilf$ z8EXGF=E3UHSvUR+317zW4_w76&s$?9e>MzvZof(kH_TdN`Ut}D8!&#nbrqg4PLtVU z#6_AgYn!0rt9G%ppo!@fh?``tE@aR>~DAk z48oEyAc`@O^p=dbF2=qCq#t<9pmdgAr}uG+K~H%H;aMQjK9Q;w7MhIKCtBJ!gp>Ke ze=(F=v15hEoArt(so^)g=qWt*4zN^lC5G*NuecJ$SK<}>UK*;>iw0IAHx0`*YERL@ zvGWgC-1B9~*Nzd(>1plMRvaq47$Gvb6S~6V-$8x40o(~Eo!?#V?5xCF7noL{3A$xH z5J*=1nv3Ks-{pKbYQy7e!=M$pD;(4!=kKuL_QSS?EktS_&ht3y?NLtoOgj}`riNpf z#i63A-uVi8^n*5FsSl)aq3t-|^Nm|YqpB}cwluu802OncAJuN|N|{ZWvrVUjvP332 zuhEISDRh$o7N972Tyb>XdzlJ&9Qp^ct~1HG5Hi1g3>GeSCR5I^&g8=ma6d=(j`-%X z|23RgOUD53R_NStjS9GOJ$OhBM7_6to-(Ct&3?IqN+b)^1{LB#Brg}H$S}|GnC=ct zY-jD2(Qf%XeHGb)O!^eWZP%Ds{Jh1I(BZKqoPYA(P?4=ZM8D_t4l`Ny(<&tFwzTxO zeD|fLLncJHzlTt>f|FM_*WlW1Q*Bc~@Jdd8VxDs0`a(=S$sfDupJC9@T+=j0j$y!O z^WI}l{z>Y)x4Gq{^F)&*esCAkVt6toh!B_Gi6)>m1@zl$rD`z0c{tv4l&+iy&9{o) zc?5~VFi2&sIUzg$Dp2P)uL`0T3?2!qb&SSOP%J^8)yhm5$XJgKAf#y!@*$-J{7h-y z>&*ji`2w&kyZvBrp{@5*+aKf9C?<`9jpe7{ybn&ME>=(zWuf&D)>_kDFg94oTaO1* z9v4!qV5MUs!wRGCFjQA7@V0BpB;M$V6DTw|5Ik_13Dn>K@lgnaP|bkB`PJ)p(J9UY z(s>0yK(kGK2&|4y#oEEt2!`R)PEOabt{vx^uiQngN4#%IsIyP*tnCP}%btK*qJp^S zYkwd_Kof5t?SBF-H8LT{vQwr5jPlm8Fn)tEk86N5pSaULsneEj2|>l#DWiK)Tn))` zvCQZfhcI&=gws@av1&IDjQC1w_VU*M!d@`h{oQ0lzJD}$y~CuyGTe|#I7Ts0+*yZf z@}EHsbNmX1kxU9G15jEA>cDoQao=HaIXXR4$W{RTnUVbwM!hhydsI>Q&$6h5M$KYT z16kB981;khQE7i|XW5c=)fJ6l^%94@_LL!=SZU!oU8sfpqw234S)W7*t zCC*9k+cr}7!{B_t!;kDWzeAm4SxOZ=Vp#K!C!NcN9)p6$YQG9CMrcDEwl+{;r$V@c z*xZHz!|5Oo6PCpCFvyPTgzWIEtO<)vhTm`)ZF!81n6#$>5x{dHK3mRm;X5IRS$x$e z{iuXg*m5_E&s@4P3s6f%#kj)qsS?+|2Jla!niAgv_)RTC;O!myCR5jl{$TIy$H}72 z$phTDU^Z;>qt$0MVWo>|z_BS&~l6K}2p9m_nL2FXx?RVwjA zOQ^d~WI=({Gz|&_@9r8Hh_A*)l0OB}L>GcSYYqqjq~n@@z5tF`bG%sNw^dTF51k^C zc{T@NE?jxEJvG-H-}lWwn)m(dX{3Ut<}e+_P12d^PrI0XHkLPB8LSmG(z=b%x4^#> zFQBTH8uF!kX>xR=zLBc2aL{gCEmY5W&iJby`|Pun-^hho^4ik@me$d+U`p?5eI&$jdALvs~=)18~xqQ zf#WxQFo1QEP-#K2m+~9418HYi8r~rGorNA9U3EQ(*8eaL+Alzsv@LMQD6tEJ+Jg%q z*1c;L*7Ix8EYH#vLi3)n8^lx?j=xzVH3%!U)~uZk_^WZyk2m93JJ-g!yT;Y*vvIeD zvdea<{Q_<7iBYt3z^z`6ej_QJaWw5Zq!`}8TVDuZTuR(27z)yk{H9Q@4v8t@T45V27Zv+5x7Inj zT^b+I1)Z^MyWJcoYAZ>fJI7wZ_OaWgVC}^boNDaUBeyXZKkWeLKnc7p9S`G?H>-?sTCdu?Rs7(KjOgA%)2Uu48G)|_# zM-;^ijXoG+p#ntK3c1YESK3RCo3% zlDcc!R}};*??+L&*~SIA>zfWl1LJ?0q*c+}b@5W*mwe@Qe=5Y|dqn|)qWt+^OZ*>I z8K`N$ISUNzJ9hTO(N(XSUtz_M<%LouUgbIX7uw;irW1^KIqC&y{GlK(PveKm8a>iW zv8)FB36ukx=^g#(N&YPGTPS?tB|?F1G)!?e6KZ{pLn#}# z6VT$Gtnq9{Q9F>KndKlKG=$qYj<1vl(23a1UohLmfFr1+sv+1hLzZ;!ux5_|m3Q^0 zEzG;|;eIp6Tfl~{9luTV4B{HPV{8baD}-JBg$739a*iEF+vy2$(sa#H6cLf3| z9B&=WOsg6c*F+iG1eLU>=Qmw~yjrmDgP$zgN6=iKz{^QYO094h+m%;sgt0niN#nZb zW_-VJ8^}>a7V4w}FsBEx9gEa%(X;MkT@CQ5QRBi3?nzFPYVUe%wX2nL{P@bP`1or% zx30f)HTHkIy|wLP8P&FDVX!K-MW$Q*Xj`1}6RJju=vfZWF`j5b!cg&F3t)YMq!vLQ zv~S4x$*bJozeJ^%IoMm9q3UIe%ljc1I*(FyCs++DIMkf4v{QpMoyrRpK2?#A|AL(0 zKakdX&%3y_sI8T1(S^ccQGp&0rdH}r^e8IZ4}zJ-YyO9%Q(buewP_#bgGFhs>B*{u z;daQ0W>Md{4NDvgu~L#u$K9N6kNK?=N5Pz=#&h$|rdp;5`6n-RbasAo8iz#uhG`do z|7O(Eba2&=ul$XS>S?LhlQTu4a`_3nE7o+Xpb$;JuwI!-z7Z(Em=^2jSg5hK44Hj0 zs)TuBe!{O~*8|Oa3U)uB`ls;rv^LuQ=7sO^sk9E%7--_z6-m(DhtU$n3-4SP}V6PwCeHi9mM0p~3W*Ah9tY5w#$-rcCT= znIDH@Ij$3cnqYsNzj{7neXN#vETD!XJ`0sb&c0J$a&!s zofZgVtkOezj`g?Uj0#O&Je5}>DX0z@j^=@iG!JaUM0x8&IO_(&s^&Mz{5{3*Tl7#q zQm^?6uD(u`NmgRaAaN?G!M-FIY*I^YFqOzSrCnwfXC(t2+edhg5Ta7X;W8CfExkBP zETa1_(?=>Fp8~y;PQ&B+Lk)-Zok_)8V3LH$dE8~dRRv1=!aMNWb2QL73Rfn4lAv>* z;i%z%9Rk&DFZ;^trc{oZ@pR{umwfLY(pA3vZ7f3|ig768O*kb%^J2=SrR(N})=NFd z=2<0aI|tsNTBjL}!4u7%#>qeR1y%>^9;OYX21>kgHTfKVq>Si9i8wc0VcC%I_(~1# zgDYWOieyb#h4z~Y+w=i=Y9Rx7qm&QlQiJi5zQn>)F50wJ0^`v6+@(&p4eR`bS?ZJ* z=k*(u3vWduRjhTm>}dT$RKLz?s4jeSj5CAILa~(S*V_3M+y<3S&%tP%_18Mxlc2oy z8Qcp<>v-jpD1hP{tfITM$mU;lQc~Q=8vG)XoYEN9*+qI*yoJ*F(>3v!l~eJfI0tPx zmu}sQ+kM8FL-N;O=_Jb+R>`-sdkWI)@~g!IC!x3{50~xjY^vTMDieBF8*c8xLjckl zUH3s3uniQ$@QjoKlz$*S<8;XMrX%xqoC(A)yU_!1uIIe=H{q!UEQ5JU{PgKvV339J z+g5{kOiCrLs5HISbP&vLm6QgIP3hjT7j9>56F2K(i>|&MX9DmfDi$wzJc-w9)$-fE z7MgHT20#66gG8XVC_&59V;R!^O1$lC9`vVOl8Ek-#CZ0O2V=2w`A(q~5={re zX4)_e{4KlYN&D-pd+BCz(@|T05R##xKdqiy{c!!@RYJAR5{_+ds8|iv%#>P{qKwDI zSP(V4&uX3$Cv}4TylNX&(ZK$y5UfEXa4fV1yy!h2&O*8ep$6+X?xmnJP=Gr-MEn9N z)XQ;@|1eV&U1WWV)$HzRWhnz)&*V4Y2lCpS!^LfR*7IgLuum`Y$QS&bc;u&RY;ip0 z!|8#cBB!Px8rNA55gjpT$$rtv8i(`mbY0M|s=xEk?)^Jm+lPss?K5CI@iY(In1ZVk z+OAc&>^9#j{1|qzJJmJNEC*V4a=4ta;5PgW<;U_Dp_PF`<5Q2Yg=!6zTN7^EakO8* zN#haElZfpHOe7RT@QZAWj7k}60`LgRE~E=zc>d3EWQZ?sUkveR7_a8_`4Eaff;F#W z);7BBKGgK6Z5ZTYjBJ`SA%V;iMA>0c@!^jX^O#phOS_*B$_GB%k&(+hca$? za@5hUgswZ}`cSy)de5`}8Kk9TI&Gd(D-~Qf^@gAR^cK#0@-FJ_Ejg+;>#>gmLE?OB zBbqO`rUhx=#R^b`2TL6WG?aEJ=RPW4nJ`Oz4A0}HD;1W@LzfMqTNJq(OC4v=lBo z&fD8ED5qdzm?ewpOdK% zS?WTdV{iWnlv|1wuiC*ra2{XjpqR=z!Z%*Ss&vr}6WwvN{z07f`)oR?&lHcmPT{bk zuzodt2)JyKJyd;OIDlUQ0sWapYbOqSwJP265cxUin)24|Cls&3GRjL{E*2!JO#_#L1$~ zKr*8N6+<1L4-&f*^K`r<3%$;;*zh_BUk|%qw}iv1pW{YnLjcC5cQ451+GV>j8aAM3 z7%EK&uOYMI2b(>}u7hslmPqcNkbYvZ%XY9 zIh1k;q&TwH&)22!uR;%^U;ufL)Il;wh5R{uwg;Cfz6Zx-Gz z0c62u(pY{i8?bH+r2RF$mtAHHu_FJ%P$85)SatzpbDeuJv%3Q4Iu{0EKM^?B=YAyh zUaFz6*G{tGYBh{jY)NwA8%sk7p3h;Mu2Q6}C3w45h)uTHhWoAm=4j7T%DEYUUi6oTRCy8DNK^nU2ozM z9NQ$B*k>eB+fryS#UZABN-$pX7Ob>~&>=6S16GTrhTZY?@c_{eVjjU+PRNLB6I8w= z%%|%m$vz2{8qX>A@$kVwT+xt3uVxT3Lufhqo@c<@|4hnKkc`O&`euP#cVbPj;1EuL zb=fN1fI)f6okX7&NVn|$9)0p5L40gWIOu~UVW(whh&{b3M7Iyu)ysL| zfM^xh$aJ;Kf40vEv9JDph&?StciC=wH$-658#w+_L6!`>iICvkWz51i>t5hh|qNRjrHS9``gp^zgD$X_KiSz7$f%WJRtK?BIQMJs6IH4k*sMG8Ex zQr}j`na3TxYMNr}2g>fk7S6F92jvmCCMpo=dd43e@8dT?>p0U_bn?icbPQqDZMSI= z-Vb`g@idqs2d|p9LyeF|F*0k`DrjJy`Ey$HwzChcH}KXx94>xIQ*cbeR7D0&k<2dv z(sa(nUDTbfw`jV!|Bls?-9kT;gH;9R98@MU<>R1C9n)BF{U4E(sh(lD{^n!Pj>A)S zHk>0&l?yj)*|ORj0rq+Q@J?S{-P!?cKTsXp4|Mj5SSjUv*Q9m7G%aGf%q1M`Qr%;G+*>Y;M$+$xSh-zG32o3*2_$MgW5ip(`B{&ll*aNiP>3Teoj8LTDrhaoa54k0*b(N)>3SvG86lVSfM_41 z`o!%>0&Yyw9a(3d+_t*{3p-#3x9AeMX$?WL~ zGK&*BVVO;>i!=|_HI}v7LUDv5!+rf=zSWJa0T0U_&fBk>KEToALdZ@Ylpn5HJIpxx z?I3(5{ZPV2ykQs*j#4eK^0Fv!4g0RWup-!&Cbt)3x1gcTOKCT4z=p21CCfqWLWT_X za&$uN^DOKRMeMsqVE+N0>bQvQ)@}L2$Mo#9Jh|=31v8vyl|)z0!G42vE1#=GjSj z-N+-rZ7Y%wMLn+vJo8DrVYBU_Yxc?4z-|k{RW)YhpxtJ=glY=?=sCJfY~7kJ=h>u- zV6r+SA(@&*Wh{Q<&pT3nwa`jWjtbuhb>tQBL%}!d0&YEeB%W+q4<@m6;Sro za;TX{_|NKamqx9nBS^>~>mK}QAf**v+xX-9FX%2Ts6*;D-Pa&E+Lf0F*vhUo{%D_a zd*inQzQJ>3C)k3jlM>O!Nq|Lj{l3?>|`b%m_oONg9U zkMXGo@sp_hr|rT|jTfwKcutPZe_*$Q`4PSjHz~t#20g6t2b`T5@TKsRup*@KtmO(P zWR4hl$g&f3G!(jNGH!^oKYQ0d@e2ak(=0DxncoyS@ z*dJGjpL(RV!Tb^bS$eg6{g06{x=&+X?dbr)Oe{Z*4&NsXcfBvwSKt)ba4r+)Kk&pC z9_r$^2H|iI275bUuonat20WmT`KO<~?QPb+@vNv4=Ui;ra{HPP;U7Xr?bQHXBX55i zl}XlfavVH_C_yiQDx~*CX1xppIoz2qW7n@?;o9cCj0GHw0t-)91~A>5W7$Q&qErWiuE1p{A+`2H_FzAC4Qt}IkPSc< zS3LKae@0raPbK>j_(t_YpI!ym`!bjY8MBymfA! zZE6Vr>0WNn+&XrDBcb;0M`9!Q5fX4zZa7g*Df}e6WFOJO7gPkWeRHB_UlQn0;I@HwkO@o2TeH_zhd= z07tme{OvFr?${9`<}7Qza(TkY~~K(fRJ&H-FqnPs}tI68T)k^ z$Cr&3%q;?-AwES;b%^&PW}m|=68XO;VG9ez&&KaXlzNI{ z-Y>Man}MbMjmD<-Z}r*xg(E`4a-LqStzXl`Kflv@z!VUE@(%NHDnU~O#%FZHJ4Rl_ zn5QWzNCy(ek0__^Z*&N$XXqEJ*j2DT*Gc+}m1+5gLTO_8W&~nEr{Y;yDChaXLcNgD zY96O+TK0&rM>yKvCe${ho}*<4V&CI?@2A*TvvBoZ-O=So`OkLJLUEWgbdB_s36_ev zRV)?r`|7=}cky~ZCh@%>^PeD1_D!5r%5`ch&~I z5L&4a&In%%M?ne=5DmSlu+LDzJ7^)CfxtQ%p{c!HXlyjL3bpOu>y8Tb%ZDH zzH%rO^i(I_J?0}XT*AN%O74ID{_p#v7C{~--w$vIpc&u{z*&G+fOdcz00Bl$9tM0aO9JfbVgfJPG81w++@LGTGoCP9y!FE2011ziHDa#wm+vD#xheu@nX@V$XH&Uv)CA?7?T%79?MylGodi2c=3c(48*wE#l{t-#$1yzPmEwJ zHWwMoawv(Sl00*vv7C%4SLEju6ar4zn7nX!jZ;i5UY1i>kf$g&m6>x*<}#xq&zN6O zTwp3FDOQ9PL;Ph%g=uA}5xg1YaIfU278V*8=M+vXTMUU6n^ITg8cQ)I@u8iYQ&@;> z&`cH6@a*C;V{Xaf;(}Gc%=D=<6pPIH`NlGu5|QE+8H-BFRw{CGb0PC2Ij8u3lLAPU z&$y`dZN=g((ImN)gD4lXeSW(Uj#h5}6y%*Qn#pUMG(vmVLx*4Uk z#7c@if}A@hZ@ywoIms<4now>op72<4&V=-waudy_zRJ12K3iZiFIEN3Oqh>IffMH(WX08k9i5z)*=xC(xI zG@kcc!E-&}Tmxu}VL)Puynn3cT@KH~0TclD1E|EXSa4}Q$#n}P&uGfYU7|28f%*c1 z%{M{5vFtHBROUfadlu`UiQ-G`iA96@Hamk#(;Za|ahDpc4M?jtj>td!Z-lP_WO^dM zL(kq*^`5Z#@VrjnJB`2efU~;~@&9+>45ZKkd}-s?hj;fPi;bqt zvJz;5rj=sZnY|l+8MNxMV%ogMDayf%s^SlliTtkse*#be{9besUI2L7>-|>nl-IMR zOW5i@#Q)y~JwQ|{k#Bea@&eEdFf4<}7XZ8raC8Qdj{~p(IN&{TI<%8?76)OO`1~BW zM*w~c;e!D8muW;^F`39enM&lx0fOLNEBf^X7K^xB!F_HTa}lg*&~~RVxDDvWPG!&A zC-)3e9B;t*tZhq8uw>C=sH~Rcl!NLr7AqF#lr4gu7aBh(N$g;Q+la7O6ua!DOBW_bkR!qVJh2gKmZ-!izWe`i+6vOSyE680uhObeMxR%PI);Rrmpf`j(&Y5a&r+g9p8nnWP|ry z;XR~HQbFESu*yj*XVXU2*SZlQMd(`oQaXL-%$uQPv9Iin4>#V;B0nhUb>&3bwa%c! znDV~TbVrZyjoxEY-Q>^*`q;kQ8M%4ia4E)}B^2Y5uLmne4iyCm<`&zgBZt8oB zI_sm>8Rf}kCFauZde=7}UD@e-M!cDONRn8ubz8!`mEqG{d>`Dfo0}Y6^o(R>^r%{W z=z25fZ3*T8yWSib(C^@^koO-oW-4gCDIAwl*!GhdA>cg8w37a+zE$D*cWhG0y z>nG;zZL9Q=EV)Gwl9o0VMI^c9WLZf;9?35($uW_<67!-$BPlE?UMxPEL5^BdPJi)P z9YbHh!MCVL`UVcZ#c1doILHWgFbl?%lWr+1iVDihrJ2BpB_%NQd5q+c<-|lHNFFI9 zcumU$vWOIrVsN{MjUnX}2w5;~;zL;rCL2xQBxyy#K~C}%7~qj5s0&42S-qviAp7b6Q*Ozy$DQsXnIOd>ESreD|mTSq@uJi#{~7Q zh=q~qCB@^#sW)+IuArQb{M-|cL=&Nk!242(IwwY@iPgl!E{fI}wXqs)zAiS}sESgl zV{(mAc{qrYp7e9(OYYCKgSH!NK6ccn_S3F-Yij@xSxhq;1KZ=)z zN}wxZS5JzWLbXFz)NZ~^zOzxmc%(~TyAP(b9?neliZrRDq|lgC>=n=3N5lacdm~7% zB3+PdPOeE}kX1t;Ke6~xu->KbeitX(S-;|i;qAk4P?}x{?pGE{Md%gmd1v8FZe9r8 zJdhxpVxhAwVN>C!8$TifhK0@YL7-U@gE1s5*(ca76%hqP!zTHlplroZ34KuTLKNYC zXH$qC)fT}#=4AQgtGBHy;oBRN~fn5z-XrEl{Ts zkJb}$yLxz#(}TQYGsPtk|w z7#qC!j(HFtMW)3!i6`+jzW^R#@KBP+1`B=ei_OJiZ`{i~x)-Xi(O(3HJ*MgF%hp|e z{R#_;m*VU_TjHgLWNDePbU|)GzL)Vd4cYzX|XH!1O;7xgfd-tKfO5*ZZwto)=C=7yJZxzu8z{ znO&TlV_v+(Q)W}x+RjZzfmq*eI$>~2B6@f6b|c@zoP^ITL&kB;mSLQ0gO^0~9;8_i>!CdUUy+Tx4#n4G6uzaIhEh~o6Oji0V zCOAGR-eo45RKmUt$S9I^27nh6ayk3z8yxLI2L42)5;^r+&h{uG;6dQSb5H zEr+w+{_y0ZjL@^;c-1<9KYf-_@bh{e?1dBT^*qoEC&=r00DbnO5a{(xZ)l)<-#F6G z>p8&dnf)z40(uKz0l+MPDI&Cd#Q>jGXFyj$t6Z)qGeZk4V!a}iXwk%8cdZiZS#$TZJOKcxiFT@?u44xzU_g0-B$S8n=#> zmX(-Fpjj)H8OzGiV@zH|P%m*76_})r6%==R&UCO$@<|veCT2QU6ONj!*j!i`PBI^y zIz20GLF$~$8PijzXDvvXI(cf=ERxxelfTO`(1_1>d-+Mw62Qs#1hD5V;JzR}R|Is& z{a4|DnBJ?RTLG>SAf!KgZ}sBG;&*F0N&UO~Df+-)i;TGw!L0!B2iWb;$)5yR+-|;={r0KQ z^!)pWUNS_z`PSik+otN`-@KG^oqr?p<>xnk8Tj$sG07$GA8 zAROye*m}ou3euV0atV1FH3`yrTmjuo2(CMmL-!t(-#-j{w0~jKfUnGoKwk38$Voe z=ihEm$-Hp-$eB?Oq&#ytqu-aU6)C7KMgpwqIb;9%`#=0AZEWTUw>mIbCaVJFjt8Fb z8kVFMA|C?p69)%c{U!|xK!2RLU3iMfcN334;^L(knWu^TfS3Qo4gQoC+P{i#iF}(^ z*#CS^|MPdNKgIKZor&%TA9A#B-y}lV7LF`@pCd1Pz>zJ`kP!|%&7gEO14XU~vl+Bz ziSQzW(%&&q{1<~)C78`%VF`nzYz7r;7#zr9P_c-?fm{aiJO(u);CK%~wT6KrpF!pt z1}*svwk&2)A;C%pEpr*jOBvMsj=`2$3|d7{Wicoffy`o1^B{wySq!#hF=$=QAgP4G z!fXbL`3zb_kUz@cfC$wK7-TMFAkPuuIR+I43>1%v@DhW}r3_j{s3>GW6)=Fjh(XN~ z5grp^HG?fh3^I!uRFp8N{tW}wLkwC)P|RV_BEqW=Gg$Zt1I1hhyP!^e32+?13D5x$ zzLg{M0iFPO8(VB;mA0E2LOryo&op>pc&vAz?e@tk_qrQz;ghf z0(=h;{25200UiZ-3gBIU!vMbk4Br810W1Uf9Y7tx4*-Kd=ZFd*8(;;%D*$x>E`T95 z9Ek&11Yif)0&oQ23V@=PBZ&Yx0BZqW0jL9T0myf9L<=wdGr;cvb^)9P z7`hMQ>|>)0KN#!CVBFCU#w39-UI~J+OfVS)BOM<4ts&$#G8Fok+sQC89Qvz~WE8oB zgpxbSU1T&-kh{q}sfqKJk>lNb_9v_wbZ zh@KcoJV^laFNsVflSnd2A*m#dOosk#Dw#$eAn7E7OeZr)CYebd1O<>qvdL`n5Sc?B zCXbN0WFDDM9wiINLXtxkkzDBej3l2dCQC>Gd5kQD@k9}fEJ{czd7PAya$)XN<>ulAj}_-EU{gQ~7N{2+O(}E% zmreOf+iU*S2ubS5p5ye1u$x%SE%9*Ava#pT9;4HFL2(nLG%NV8ASXrLnmA7Vs&P`G zcZ?*Bs%ND9GNTbt*$(Z00kx;hQ*1gnt;WgezM&;W-MVDGG5f-)4{B0m4`A25@YVta&u81(Rygc;(A_h;k~eg zi#EN5_d-I{44#by{{n7Oq^3u7w!qvgMlT$)h3wuCdLc5kxJMEY+zSEs`MN$K^<46F z<-V8jUf5wzv)MdapAmazi|tA14WSpt*jh4MaQi%h@8x zt(8z$#GX1!x*#_rf5C!jllp?wlkUTrv#BY!7MvK~Los^R9-x;&1x{Do{w3_51jsfD z_R_Guk$O@Q46o4qJJvL7dO7DckMT5Q|^-ioebIb>;cXFOB_kG0c z$^K!ebk9}qC_VC4o>^96qN{#=!RetP6wxJ~UV?k7>LsPdTPs!!>?ty?KtW?)5H)G) z)IK34Mcz6qZoK5a5KHbOv6Q|LOX(xAw7w8a>m#wLeIYirkHn_+h1j${5}VZ*VzYW9 zwz!}iny9!#v~Orh+FQ4o@?K0yF}$aKr@R+aQVj2fL<(JhrR&puMC*-U&;5)WqbH40 z-kSj_A@ssaPkjpu?u9__2BbGqPXryj}&t8e6b>Z5$H`bMs&UdjinZ{&LFr+l!G+<*T5Z~n_Wz`37W z4|8PBL5?(e`N@uOWIy<|c=@dczpubA^PtCXBlx8p^1OThrGtMSz-oX^051V-0jL4^ z3gCNyHh|k2Iidnc19$|W44@LA8sJX=TLE?e>;w1;;50xh0Qrg|g8>u(s;?LiX`-76 z?xO(304o400GRiV=}0Kg4~?KSw?!`mYgH0*g<#oCiA$olCq*4Fa+p5 zV-FFskV`8w8q*6FmF0l#u!EZnhM~Ev%vg*)Grf`P2Ksqy9TMUP?-}&2F*cV1R3@Sy zMwrO9juBFVKJ0QHdM^DNzp3u2iLPvY??<;#;?X)|UUErMX-*mLhg_0VjC&m&-l1;q ztA10&xm<>YgAZU}*2z5o40EBW0EuLk zVBb#-=VaL|pIleSW)&KZrQ|oVtitk%bRV->LZ7Vk%U{lJL|Egu80uj0GD3duN4H-Z z@!B*({^*BCLNTS+{lw8bdE2kZSd?1|`T7e!6_qSAl6UY4&o_`7KX4ccvd<4Pn7agI ze-NJvVen4A!lz=4{*7Pxa*;7|&TpB-B)ROjJhzIr@%X11H5O>nwU8?A|*Zj-|Nc$^Y?H5;U3-A zZ^{3&cU=DG@78}KTRC|sz@8U4xvb^?-Fr^|^LOjN(c=C;+;f8!U<4Q#UH#F*Q{BWL z|8Vc;9O&WF{XI0({qe(Jv&k&70De>HUYV(62AK};Q{guap7HN9*@YX7j!cZn+(fT8 zzb^c~gP*+zdL~jv?^jq1)Cx!;!Bd6BB%gqJL8>T@%Kfh)i|F3fN64MvpA0xfq?F_U z{z~8`2j1xMCo&D5mjQ&4ERsROiGqfjfc`STP=G~~3;#w^4*v?kng-z$=@|h6PeXyW z#7hdr%B4J(QVJ!cSWE-sDB#VTav?k|0_+@sl@xCr>E}gnHURDz^3c(c2*^_e%~vED zKylfb1w}V(53WL#1R+`y3~^9qCW?*x6naVHG4LrMc>v{9Rwl^J66$|1#7hU9#WY4T z-Osd=<`j22;W?J>ehTtufJj;zS~8wKsYw+0WdTkR;F|z%CA>dGsTPWLOAcwx5a|?% zJW4Vt?uA#+eH+usaG;Y3bV|U_456lfyWH_F3~FUpdfjDCpcY^~oJ~u$do3kINo#l( zE%#!GTPUU~l`$b(q=xa|^9K$7Rd5EVhN{9;@v7gdzEmAool>n)Th)J6f2jUAvMzF# zW{&2sn!}oa=vEK5=s5?-T11FQL+crnMcMQL2fm zrK&ZmzoX$%IW_WdWJJ{ZsD`NhQKzHMN4+2YRdieQh?sOFW8vC&B0&oO@MMRS&B6sTx%QYL!~2&Q!mqzNU_fd^9pQ zay8V2aZ&21dmNkqdtrpsaX>JUUWoEbc`PI(Jz*d{UG)c ztwY;Sw@7!w08NF~vo}@ms(!0JsBTiLA~PcwK{-Ah`CjC~NI#IrhN#-8i%}CbWtv(| zKumeekl6UxwAlAzKaTw(c082U>)JnSKiB@KZPzZ+E!C~l{Z+SBcX!-26W&cYk??)O z%*00$ixXc?{1fIMGLK*R3{j0#O;A0mTC6&xI;Ogyx>J3h`f2rV)qhi;P+wQ~iyRd> zF>+(%pCjLotdIOQGBRpLR8~|0)WEwmsha7UMVj@{PA+P$YJ#KH(N9Fb6#ZKC$50Oq zG4o><#jJ{XE#`boQ0&my`(smLcR;Q*+Ia1Q+PT^i?bq5CtzMU+%Z9RkSNC__e%*IE zP22-d7R;`Z7(;1b_YY)%B_NM7ZzoMTm4szs_|)o)ZU zsNPrYQ0-RjR~=EEQ+29_s_$2iQ>UqCtLLj1s|(dnsGm{4sQ#n+BlTYO*XkeC=Rgkf z$dQp@k*SdnMH(Ybkt-wDM*dgiTanu$zluB^c`>p*a!AyjQCL@Eq8^NTG^#MF9BRxH zQ7=Tj74^5MkD|VeIu>;{>O$0|D7j{oW{hT>CPtI4c|=p7*`Rqw^QvZx=5x()jYHF+ z=^w3(Rz)X8&xkIJUKRaR^ycV4M}HW-D|&DA7tv>gz^IlAC%mI-1)tG^?^4MR+YGNnGX2ur9u8Z9q`z+{y&trGR?v4E}_CoBn z*n!$Gs9$N?2ed{gi`812_HFGx?Gf!5SkE?keDz9w8fJNH3^3j zP9B>p{dXX1fGXJUIIT3A}JUHYj)RO3~8)il){)#Ivl zs!ghwR3ED9pjNi1F01;hhpCn7c=ZFIRhFpNt2e7(QNN?!t!`AG1`RVHa(Lu@k($Vi z$oY}^k=DrPBR_!JdKl{KwaDP8+oLp5X;HaRW@y3BMExb|lc-%$-$wlsb(==1iPB7j zQg}>L4yEuqw8BQsX-%tUK=jDyd!i?TRxO1({dDy2qqj%zi9Q(J8toS|Iz}Cn6f+&9 zzC5NP=Jz1=FJf9^F2r1q85VnA?1b3qu?u6@fW%*keJ6Hz?BUpNVy}bd9j7&DCu(PE zbG1d<71}jgyY~0cwm;B*q}>a;_&aT@_7`n{Zn*Al-8h{Z^ztm-eBBaVk#3D{v+hOR z>$*SdKGOX|cUac~t>hP7|F|J>p>cP|spFF4GUDdM&5tXJTL) zxWjSZ#kI$A`e6MK{oVQ~eY}2(K0`lWU!q^Buha|r7xjP9f2gm~@75pI|DgW~S{G*+ zVz}2Z-k>$a8!`+F3grbz94>OyeWn5 za&^LUpqIBL)F$kQ9_3WR&k5HP0uu)%-U(V-mza_`HSyuZrT>e)Hvx~T$Qp*LZr$$O zB%P!~0t5&U*|#L!NvG3EI)o6GY>*JP1aO*=9kQ8phpWd;hPWr@QN%I#qS*)Twh$)vbFkSnI7B zJ2EcMxGCd~jQcYl%6K8;-HcB%zRCDI+OH0Xi{UTCGTJiPVzZ=x9bay#uryjcmK~NW zE!SDPEO%HQ0=xdE<$cR1mcLuVtiwQuCWDR7vo5x-v{qO>)?HxhuCd;1ebD;8H9q0D z3HK+QP52}sHgR5JW#SgF&-wNx_RYx=jsnNzl(>|t)RU>Nr>3M8fj2L57CV3AEO)MU zHac6J8=Y;=-Oh`hmpQM78F8bt%bA&;pZ?kOuc2RrI|96!_h}0S9?r3@w%%cV-TF7{ zSD>F)f)98%@tZ`+Hq6PiN=~t#7N`IR7vy`{(UgT-c@ZoL5f*{#;_gs}+@un>2EBt|7pPE1XlnK(aj zVPZAdg%=XvO#B>t+7#Oi+ZDFxq_IiPq-&FI2VeGbk_qPeU+oHbvDoCqWM}fc)P1Sfr#_YX zV(RCqscCc4mV+g|73Sa3v=`IfNgL*z1hegV=i5$0`Z?*DFq_VYxpYtZQ|a%go57me zre{qrhk3IV=FL?w;`dEI0sj2m>9&kT8Ruo}1bcccGsyFVtblQ6mVB56TP<%{ zqO5l7Mb=BLH&~BZPg>uxerr_{LLs)fG+|%D@4k7sjb5aY^Db@T{v~X0A@GPi#tT zNnD?}8MJw4;sp>@Iw2mZu&uFewmoJ0i!H{U3^R8*#AQtog>1L)wO?g_!2Y8Bb^8zY zkmL~%XO$&iko?Ew7m`0s4slF$*c>w)B@oGb932qL-_5P^S;y#)iNLYUy^WJ!kpyarQDiwB4u3a z{M5gLuWWXH1a|Xli2b8sY{N1pWK7FgkWmaV^nc@gHB)}y=v2!ymZ?cUq>N0xIF-cU zij$D*EqT_55*1s4?N(b$(nCpKJBEOM%}rU7QUU9Y%_-NW97}mI z`ey1EsiV^-rGZ`0Y2{}tT4{nKZTj` z1H`_e$wQJyf&Yt3wkJ=A7#8DeiYA)KFdt18GkEtXOSC1%G7eT<(<~OS*ba-+GQ%>< zk`3Bg2(ekQWrby>rQA|&sRb+UwzOI{f(~!D?6zEF>9AY|QQI|^1C|>sH-lwAWVzdN zAFMQvTOPG^LmcsOu#P)rIStnSW6NijFD>7|`iWR&t70{Q-6w^VJPrCQCn|}i zL~~*!=zVlzOyao2Nf5VLAVzQ`IumCk&PvQq%ug(YD7QFqMdHfDa+nvjiH(Ww#MZ=( ziCe)|>`uHWu_N&^i0z_nF%Uycf@scSv)LRrCs>bJwrq&(3T=yE4Y|U$(pGM(w$<7i zZEjnuZKG|gZM$u^?IK%;?K0aw+cgmR-C(=f)&=q3-M0H+J$KypD6Hw8wmolq+4d?# zgr{t$Au9YBVv;W*HvAq|dvcPJWJ)q8MJ7chMJL5Tv^Xhg8bpk?BnQ~68DPWjOS(Vl zI7E!yNlzy|5BBTTq&JdIflYru>0^jszD)Wi>H8#Nm+gw(1d(K2 z*l)1kZ0~}#+}-y3V4Zy2{wVm3ry(AF+5W2i4Tz9V+uyf;Z2!#urTrWG_jZyjCo9P& zh*KkzqmrYOW0J=uPfDJaY=NlN0XB99tQWGA^C5m+lw6#=0%EH2mi|Mpwq6jJq@L17C1FwVVyt;em8TDz@3pN?Du>%|*j70{K~pHv6# zWoz=r2&h@$sZ?wmi%S%HxT6$hwM-sCh$^`jwna8BgQcf;{It43)njcM5HquvmDuud`F>U zk)znL!m-j(?x=RuIvO2rh*CE?wmP;ub~`Qtn|K+-9oIMxfTzD1eEo69qmFLJ)8O%8 z5Vndv)M%K|`7n3MDJq`f0`s1HCh~|ySb<+?N9SMqL=&QWiVVU1AoC-%cm6|0Eg!EF zJ>IAMvte5P@zcb-g!RrpGDORdd7qf~_bESln72ISpCk3o9~7hITRtM@seQ^{Hb%=| z3He+4#w!hk%&M)OS6Wk_RkUcK zyR-=(8uvb6OWpi}{!k!tsTcS0!$VA7G$fFa^Dx&{zOLTou5IRbe~?c&%3a%3QC044 zXd;IL02aCB6|Lkc4Q$4?$eS8iQD08}f`F^F)>TSmMNO_J!xWXo(_B$b<|@5g^gTSf zNh?%Fc4^6Sat$Qw@PR~}y4KxX-qhfBRW>x0Rgj1K%HDt&7KA|3qR9{HVr<8 z4j%@Axf&~K5*>Dz`q(3v`phBm<~%Z+Xw%|tkl;zed(q$$FN<-Zq?$N0M~1McZ%`M*lO0RH((JJa-cDS_TlC4cc2<*5q!eTSZ>w z>1Gays|ATfvl3^4b}i)Bt%B^eWn?77bTbE<$q1R}@Dn5OSxhwJaU+m*^6oUXxcK1} z*Q|t0K6PELdOutv$Kk0M&g$J9JkQer11ZYD=O09~I`@SV(#3~#rmu=HK51w2+lUcP z=Wv~;){W|dn728mCSetaMh0m49L(git+8Qkk{9&}N7Xi0*Hj9`U4e)wt83&?eh^pn zn#xKJ+Jg~Xl_1*sJBP~Ew#J4agoklN(X3ETTT|t(sBh*N565`H%LG_czs`%okA-N4 z^&ODV3qrO&{+4jDxtmIBYS(+q{4f0cp6KoWLE<&qPbJv~@|ly9Kbw32 ziCIevie{0<YKw{Fwy>`NRNK@WgOP6fP;qnMEc;Dqkd%A(@>ye-;#3Uja@Cx_`gDT)4oLPlS=I}Q>kN~RpD|lHLOi;b2%+*rrs;y~uliLBMrH^^V zg1yBv|1gNly&|{)yD@L}JmA7LGjm~1mMdreoPwfxnTv7?=987c*MONG`yPr>J_JYiO zQO|X>M`_DBp0j`vs1L;r$l}ThlD{t!kCk9#$jX<;sDl|eqm_B?Y9xBBWr}d-5?2Q? z)Dn`cRIV{&&X8e!U?9Z0R4mGH)+0+k3TjVx(m`i2xa+WUu0oD^WXn8u*JZhee8qSz z9ii?dZWlxu;{eq%}zzC#VHfFpa9TV54)xqil;4uoiJw>`JA^@y52P;axB zEkCC#zP!qmtN0koqkoMSw&(3gEY0r}wg;MRb%eY{jh4I%mL_;SDUXUrpm{RE%tajK zZ!^9396tEYb$pdLoX|&)h1U&{4Ur+?+?ZL1+gMXYoIH~&H%)%YTIy^1|G@r}SlGj& zL874UPgqzGkv9(~g?R-7p=j5af)@ih|f$WmccMzF1- zvZ^MWM~JHeYo)S~st9dVILrX5E(`k90$~H#nSxfNIKwKED(;m9Qi>HmfRj`89#vaZ z4wkT>o`J~OvD|(^98zr#N?_{Ol1V@iLCxI(ZKL|+$rixeWlJdD8N&vm>?Zi>NQnHA zdz)OE?aX%*extE34Sfv3nwO}j*)AxAYB5!1LVhHXRla|!&HrmYU<6h7l}|n(T`UhR zRw~(l@RhO4jx{i#3rFMz)0(uT!jje)E6&Dd@QGOucG=(AFG5Dl>0{^3mzO#&L5T9* zf*kxU!bbey1If7SqYTZs|6MsL(jWm;Y)lt8`**K3Gbku6qP|{&u%^4TG&dB?4&~CD zq1ZPnbMh@B6xwg-;o%sQCQC-hb#F~=cFYrHT%!erxx`nvRh%?dkXVldIdf2u7`$H) z!U0T?TUeKnHL)caB&uK0dG0bO;sG;G4@#GY3l9~R`DAjMhH9LKh{SbAm@8eS-qv}p za?Qd1cqUs!l$f{&>4Q^}G)3Q?C1v802JhL93bOP14hIu2-4}_9h^}|cj_xMy4V-xl zzyr-XHJvH;OWDt#7|ZlNl+NOrMx}33lcDZVjy?+UCAEbQ-of9X{@Ax=H|#TrFwi<5 zKFRchAoGok$CzBh00}8;r<_Sup2Y)UtvxB6&z~XLm$2Cyy*)06--8ZriT|t5akq0a z$W4I6d>HeI5JVvV6cg9+5DApZisdtSp23?rBErUH&Uv$om7W!rq!|usat~-S*oNb$ zDxQcduLGI(+AYyY@ldew#v3Q6oVte=!iib9Sc?wNM+T7;7edX|8<5)&Mn7&X6qb(ePMhZ{^Jcumsfj&}xl2Uz=>3U4v6d+sT8)K2swwFfFzQf!j)F(^ z;l;t6tPJdHf~+HWhhAgwm5S!$xwBU0%A}0XJJ`-0&>!16bb2oj-tU=)wbK&&%YI`g zq|(~I&E&HRC7j~Pmn6~^|EDo_@jvE!hj{Xw1QxfS-WyVB_uppo+!6`rq|)gLEM|Y_ z3pxM4#^KNKngo`!AJ?BjK0mIU5(+lI&F+7krX|uHf81T-aWMNO(m%5b|C{wE+E4gy zny!RJ)5pK^6*E7!pSWk4g=~ud>Hjz9`4Oq~*I#)^_pHLQlmxgrebWK9&2pF{#>PBe z$-&t?o?tf18x#d<#lhKNd}0k~bjC)#l2P`caIE!OsorB*8#t>~TG_ZfbvP>y9o>8( zFUH0_e+t%MV;*-l&CmtEFe_%9pszp4V*NH)tRK|~cN3V8#Ni)-rqc&~nK$|S9^0ZAZ>;sB zHE|;5B)eL?Pey@sefnW2G32%eNSpQ7>NvbH`IZP-7}aLLvr*7MIyB?iA>gy@h<(5j zL6Lc+;oR~AOX3jMST*IdVXay)0x%#7vt~fPHNklb;7CQ;G=XBq@~7F)fyUk%7y7;rS_%)O_t3=EwzwCg$8PX&By1DKOB@iOEA?yCpXs*|3Vz)NgVN z#6!Zx8h!&wV7nsnt=lRgT@OG`gFTe-cJ|sj&D!f3fihb(y(~{2K0mpbM^{eFU2n2$ zqB{NwWcCw5SBmx1gJsmL(3kex7gP`ai>`<8n7mn&PYn7dg#iz#$Po?(Kia<6o{Q_M z7^Y(H|3>(M@sfVSU_DR)Nwn#LwSgI-9b~(sx9KhU8jZBa9my@+j6&=gV)x%m2=!wp z({%`4alvwdRWuAe=8imp{iFC(T8l-mTKSF;_JME^ep1hQ^LX+B6t$N>U&+B>s2mgqWTUyA+syYS{^bGT&JpJ9s+=+alC06`?4)x5|(bLnVz zJ-bh|pXlz=B^C>9Ti_HCZDj%Z3Ee_NQcq&?l(8?ExMqt@>N~$)%3f? zP)>d-pdDiU@UtMTME%ylY-xN|h(lLy%`o2|T!8S}VR!~4w^t+e;G2$K%c+EHMt=Pn z3g8_$>pc-MB`Zp9=wCJlvV+BXL$;7=IxR@g@5WiJI3>dn_}XvK5Ak1~k7K;$Ki3!7 z2H%m(x^?(D+c2`r(p?1HCO~vyKjD!c1N0qnNkwaha+YpU7l4y^L3ZS7fEOXaNKAB- zZa^GmJ;Ek9IVxJP?^K6WulJ)=T5gBlTC+w)KczPZq6b!bWg}pAzaW}mc6X?RwNFw+ zZ4!O3bySp;gH0@Zr}n~{Aona7J|VeRyp|UxJ?`Rz`6srvCOEGHu^-(3RWuZw8ZXo%`Jg~G! zz?vh^4Ser$$Cp`73_huEjKoA*4KlTEtkqMNcKdqor3C;Cp?7U7s}RSTBvtA^R&;KP-$PwT5a z!3Qi_fte8E=Su+gzX{NnPa?shh80lyx}qggPfurnt@>G_kZF(-RE2XMTo|dyH@(Om z;Sxj)(S#UD(9khgUo)9eq1^Ob*#;^tfR0;VTuD`zl+a3S`ymHC<#`>j5!!TXChCr% zYoGBSIgx~c1zTN9SgVE%C}7_r*hx-fvS$ku-mE|2C_EuOX9AdJgsS2?4HDc&o@2$6 z5?w4~@DPwuQ$Vu98(+X~5%lQa*_J;Ve`ob=a3fgJ0u?->Bo2Y*=67M6d+bF?qtoUG zrLB&*sxpKeF!yj!!OBI2ueWqVik)$Vn>Z?aQ(SH{=60fI^uiMC$5{)+lRp0;&RC2f zxDZ)jB5af*z$GuoWeIRHP=Eksf|FUrTK&+S{MWDuWd4fnowvtw7@}taY0-sgp}+;q zt*d)Tb=zR$P}4Z^IzeA+P-oY93&hlC;|8Q-^xbgKsMs$3N{78_w9fT0g19PQoXn_; z$!?G+dHojDKKf0qevq+s#0r16o~L>G``4uof({QzHSKUw%JZ!jn9t3?yNhO*GvR8X zNh{#I1Jn-ULXpg1Ho5q|`RY{ORhYcRMg<>6Cw+W_Ue+pKHGQ1BxguGXM*1iVvlQb$ zt%X?{Jk!CF^s~+v%4wvJ|E%+gb1f`M^sCi$(x8UZh37+WTuR+YGuCx{c7sCCxrP+Dqmg+!}4vXQ9NKro;mVMINiPfVVF5T8PzbQ0s5 zeRTk!8je(|Ipg3dt|!pt6lCASe<8%gkNqRJeUY(GUg6 zCY8M5$rKTB{bBa6B$WIXGqD$4>c$#Ty=Wq|`E`NlU*v_-sPpuI$Sxg($9t0)1iCsK z06xOwxs-ao&Tb|lJIIs)#eu-S~PPR3KttelRkfn!trD>aZuLyEDzwN=VziX3SAQhR$cr?HR(B5Zhkc-`8 z3WV5#Ykpgoe7Vvd-2MHAi%Fit|NS&RYoGnvu7XU5KIw+?B$iWPj^TA)>4R(&Ruc1W zVhWz^Hbj8v9&l<>=P?-ATr+c~`MwGB2*u=uJaZO|5iV`0GX0q;!ezU6DNRHP0*DJ662I`m{L#@FI-MJvvE{*Hjd*5Y%7dDcDdMfIN|+6nIVBpRM9RBP*T~D`f4DrFN)#r=8+dy1@v@k!+i20T+(Q#EE;cHDsX;-Q2>YsSkkCZQ;?z(;8 zfp4XyE(<-q4PPGS+Pu`GB8Ny(?`ED?EdI5b%(_rggt5!s`QmrhE?*lkH6?q(JipQ( z`k3d(hI39G8)ri1^dv<*`6wsBc2BG6W6tQ*dM~La&kxqb7hY26Ccx;LnMY8s#A>aY zkMi#MJte>f^$rgG8y(w!0c<7!(F!0|o#N+Am)SiEjzkPuxQBc<8x#?afj;T9cZNj3 zLNMVAnBP@He*z&f`{5^iM$ctdPm@I?>Rm7ppQ z-LL4$Z))~SeX@0e51Sh(GP2g6LyEYVpiZZZw!nA)TI;ZXpRlx6GfRcaqJA${kfF_aic9w7ueH3IQTP3yq z7*JkHWFvuL9ALm(^xbP!f;B4yY4JsM1{-8ciZW^{nwnxwy3p0FSWK6!D^?DaBP+;Q zK`Bf3u;GP8H=@mzsMQ4Yj9jCO01Xolylt{EPm8#bkjLr1UVucMneKWr0C>TzWB;l+ zk=3}jsyn&nmb$lApYL^-hg_8Zx~_6>EOjr8-f72asn}LfnNtk#gV-5(a)bfMB zcWf<`I6!P{!2nYBbrQvO*FNY3LNcvDfclU^7?|M? zjjggGtL@h|`VWtSryD&_+&i_~1KlOjqtARkchl6{AQ zVp<5(%vK4$Wf?+-d*DQU7t0(Z2kcnSP_2E_!$V5n{Z>zqR?lsi=Nf(5W#Bk?s0P1z zY}t`YnXos9+;ua5cMhD9L!m%L`t@E5KC^jq>s?mJAOZTe>t=Zx>Z`FBAH)U?GZvku z%GA*;M{0Ur&{A4NfJ4my=F+D+A6vP%wx0YGbES(5cm-o3264u%78LqF5hK>%iUBbq zK4k+}gSb4L3dYQ(O<5nJ+cz}@oilS&`@TPfkJ_SRI-zgsuhtOjPqGGh1Q#A}JUy5f zAHuz(PaE6sH%AWNH$XChz_<6ws%)pq-|ksmmv@LW_LNycSqW3ndi1 zK$V`ioQyi)k8<0`Ir*lD+i(l%KH)Am)V{y(A$0P^am^sG)IHN8IG_osTLS1E_BtVM z4IP;v^Ps)4Ps!4eV3tVbgZN8Q9oUi2>zbbCdz7cQG{d|hGFd$(CU=Ci{AS-dy4ABL zPK4ZBhp#lD+q8gh15?0x!esE61W$n9qSVure%Q09!@D3CXXk{H9!bG6F$ zAD=^nA<*qVT$uaD*8&PWLf?Sc8fD+%R&)Hb#-nAq$&sZf55Ez*QD;aVHMJex0#(2Z z`rpqOR1%Bl@6(l43_x!@DGQ=z@5XCF-9XX4M!C_7G*PvIGx1gQ*!NRy|Lyc85p&32 z^dkfZ83S1!Ef_%#oXI2B9*LB`70?fTt_}=-iWl<(y$z+}KO~vDqSUk`uSmiEF7LCU z9oT&lwdrc=+(wPt{-w_w&6dQDvbrpzqLkwF!&HCud2ON32YYlex$ej@v9Zacio4g4 zIhFzRYs3xZZ3l5#^pi$GtW!n`-CW_q&>bkf>^(TO1)ivIWMh%*`a}$FDP8@yfkGKj zOvS9dRIoXGRl-tm<)(`D-dahp`Lu0CWcuky;IdL0o6ttGO&BLROgjqQW}li{HU~Qq z#0yQ$7aL)%{W0IsQ;+{GCBY|a?_CZQR$3A4Zv)##&~qR3x}8ylXHXtTtkYwoSn<9= zYjK*9L1XdCkU_=H$<%wu?JRwtVx?@v3A8u(f4Gb~@ZiaaC_DtuCvOZVZFa504}i>( zieL*K*wsjh!0W7{N+xK;(GdT)<*kRRG)`|*fU5!hZC@h1WK*mF1waXjO8Vitd3Uj-V6 z9Sa4GaKL%d&qoUWIad0?zMq*Y&F+X)_-8Z8qdU@(7GucQ~{zs|!( zvip(F3kA4ZVZifSVG%}0^|xh&$Ms+MdLW+FFm%H_@~FE4*VC#)#9)Dl8TgH16$X3B zOuGJ1eVS(00|P`y)7ufbJ7Ec%Pgax7QiSwrbF)^2^w()`147I$TSqvs+c~eGbk%_Y zmpee_Z25nI&XID9yI{h4^tKJ*T1UPEQVVPq>c%;SfNeiGd-wl{Yq}sH>WOn*{d+`y zFOBmk01&EfB6uQENb3R(SKtE2;D~^U4o5`!i$ygIHg(^%F5Vkc_doEM4+`WO!eK$y zDZG~=cigE6{0W>r1uMD6K~x_Isn`gm#%V6Gm~gb(D1;mERf&?og5gKxQLE+twsQ2P z%t(hnGkXP!ISgA(D{~z;Lun46-gb#{;4ld4KhI{{PnNkB*8BICeT_|G-M1M`(TR6z zy}ttXLz5(vC9G(3YHnQ#q|DE%Z_5cfD}hD2LnG$^SjI7!(8*yr*T zkU|OG8S%R`Ce1*-g^tfcY*mT1geBz@WSW=~HTVA2jmkP)0+HJjih}q|;O{XE2-($u zHZCzzVW4rSjc%OJ4qQ_kP`)D;0yWanQM0zPNsUnTZCH+cx4#ZWWuuO(_es zid!%Y?^L|EI!0{0!7J@J(TXEJb#ld3;`B>|Rd^E~iqq{xh@PQj*qi#77`RKBMsX&= zh38`VCJ22-iLg6GU=jMrqV$0av!$i6eK|mpS4zpZiguo2g%A|<#LN;Lra%-PS#^JW zHwM+|W?fD6!5QvmoKn#~?9X%(a}+l%tBp!MuuyP;G~929B;TrsG0*r&JG#%0tnXqo zY4&HO0w_6JwFrb@|4dG`A`)PEh(im!6gdJztm3zj;X6d4(FGlmjY5bGo& z%7=zMfta@*P;hD<-eP8&FbDi>L9oQ~@?o)q&22);)FoMJo0) zqOA2UDObp$m?*JOD6I}kNmcQd3oMTo-4nhK2i=t%!7p62YW>q2E`&%1+$aiee+8wgc=~A=sA;r>ZiLf!f~OSl zfrXcS1=QM{Kfk4@pme1iXG2s^Cm2NcN034yD7g@%kP1;OQ%G3B4Zf1;nebD`tQ9{Y zS7;&&imXi5jZ0{ELeuColSM3Bps>R%>w-rH{(da(`pkFowCiuq=vu;jgv%_T6$hlrEFgk3iBVgiru|0KRUy{5J(^1B*KW9~K9>e$ zbLBi%he3>mqtY(!6JlMtJPn6D(b!}3*HqNwYx04&){0$9CXnKw)smu@E{s1@b4f*0 zNR=tei~D6+ypJ{vnEANp)Pvhtd3E#cguRRGuIv-!63oQFpie+6h*B}S&r~v6B-dB- z11v^hy+%#wu7WT*E8xrMt{#!qctkMB?uuLl6Sf-{l6ynzMNtJnO6tnWehLN&i3C-0 zEQ%bk}jwAY0 zvMHysR7+1@W!HCkuLcxk^GNp-!F1;dkGHR=s$+r%rEe8_ryy^^vFAsITSvA$a+}|2 zZ~^Yo0bPNRNgtU9vNog3Il89~oqadv^*7@+JaK%~<(DTM)-@jaADILAw^YmzSv^C4 zv9;)wFshkm*LAl^#|KdXQzOTEHFxGj)xiFD;+yQgFsiU|_6&R=rjwq&uAHP3VB&t^ zuPA+kgD|wScqCM?lp^i*LBgj@k&)p$6+NC#oifY@ySFid0pEBLP zp!NREhW7*exnfw`Sbs~L9ZLB|;mLhdGK0xt1dWWr>#c*+cY^7o;1}cfUPqTPIbH}= zJ>ljF70Enh4F(y1?GeVTqvDn&IY>++m%nf(cBGi;H|uMV!1|ea4}?5v*WJp$BE&o) zov80={)VcS7Tknbll5hlrGq++k44DILGv##7^#Dr7bVBe8wB??6BgvS4uL2KiX7|) z2bF2NEqcBH!Y}pf^qIL$sfUm5zZlh&4HA;=>Ekn?jsIl$#U(I?(6>PcA2o_v1ZV;e zud9ccm?M}W^EqbQeV)}>hA5R89pq-vMdHJgnR1DG{jPwQHR`hxAhba-vVT%F{{n;X zVp#{OrtwS7R0ShE)!B6gN+toq!3@N4fd1zCRp!eo(}9s6y!jZ(Yebb)cco? z>?u&*7K064vJOx%gU-o?%>AZ3D1Add#o!ZD+GC=?u6l-lrNORoh9|B4!_S@q4V((G zM~A89_lceQMwNQofMi!)%lCxrIsOe{@d?X<5|+siTZNOW)NWs!jOQPMQxqh8An%b$ zU3KU=4HQo`yQ7+mMPm_Mh+^U8nP)6c#W-RiUj8_#TsA3c3y=>O_&yTS>=THLaeRyD z&AyAS{K3H&6eBjjYlUbkH#aYVWg)_TaounF1k3qiaE9$(6Iv83kihyntA@`J}!>>U= zlE>`$+VEPa94rmYlrZr+j z3($`S#Mw1`#vrUVAn>oa+G_qmGl5mawG4glb|}RJ>X9%0rM;A3g!^fMhu;E2aYlm% zuwOFD#R%Jh;N>>{H>YHQmBYS}iYtEDxIoC0E6dSK{nuat;oQO(l0RRryfSeySZQlk zw;7b}U*rR&*JV>IDb_*c)`2$~0`|D=-lpU)26G8N%(C~$*tH>8pgjZ)1m~+2k|Hmq zChe&aFSB5IN`g|*YktT;iQ1kSseyg4U1n=wn{-1UDj<1g=&8Z_qy!q1c`)dkzPoNf zyQe&U0u7>Xh`?rvZm+uOO7POs@D_dh+EA%Wp_J5C{Tk++`*gyly%%_<%0$hP5y3mt zY`GPrE+P9gMteQOG)v@^q4srA=?$U@+b*Yd%qjmyKT(;lF!&bUyBK4P>tIAUob7ZI&78UbvOOuFVyYlQaqkbgIRZWM_Jeue{-P6s61-x` z{)2bB*Afhc8KjJ!0fK+`8#x#Twi#vCoV-oT0p4E&OQ{_RGp+c>y@$i6@+(9&BOS$orcNDn!@k=RFiv#|dV&Et;M~nb>Nk&IJaZhsF z)%WJd#`p9kfU^7F0Ce2E?EDKSK=uy?yBPHCkLi{hqb9rjq35SFDqRoZb}QDTRoMVH z7-EQP7v3$HT9pJK(l2=K0m#lvhzUOriInjC1$QXs?{NhNt0UK|I|)cJM$Y5S%BzJ&ap!6Tg2LQ#68g!3ut1XPD){O&bNX`UIv7b~ty0+V;G5Pn2N)&Lj=JRuWA7x`-$X6O zYybvIX3p>Dh@cMYj=}*I;m-&R9V=exp5pg5h&wNtLYW(zr;P@YwG#n^lO{naA2u}h ze9w|^_C6juh}SvGYqr#D1OjodPIiA}%FIxgA`qCzeXYEWy5QI+_5wh!ix$;ae4AoSZ83f>hHcysk17VZZEq1`VzuLof1{LC)wUUhKKkTxiv2O&pz z<1!Rn=uUD6CiPJ%51l>%W|2Elig!60aq#ei3>?uUeT?Hys8qQM779zUN*X=A_@O+{ zKwU%QyWnNQ#%4uO`rTbB_|D`2BOF&K!Ps8Q>hm0jQbkbOBD~7kT}gzR`CfdGN8_Ab z+cb!5# zAdqJtFx5`sD+-s48zkpN|Q79}FpJU=%j zq5YhDWV14Pvg)qa0E84*SYzEC&>c_#UlZtjDMqO)kY_Pa!)oq1lx44Ub|v$<-B@!a z7cdSb-|fqJ^SSRhlx9~xp$gX1KJz5T8*cGZt^KSm7|k@)(l?RZ-k11Y$2te&>oR0X zqFfpCK}S1V(@*m`Wtf^S-6k$Au+^W05FLo8WfK>PJZFZ9vIVnHuVvIaHE^_A!4wqm zjAp?!6mYeWY(!fYO8MIytG+x`=u$cFl6H*{eO&9t&|e5L`3FV9UX|)yB+Y$%e;BaE zAubbVM4ReLWn2*89bns6^+4O!I;A-GYUNTtUpS}!)XSrP1hBKC_CoYYw{@5C8=eT- zj39${X1KR3#`ufe_$Up#QZ-4#+6cDF_;V0{8lry>x~Ap9E)a6*K%%`?r=H&1Pj&>m zeb@=>&#T)yf5Og6raqW7-M(ECU78dX+Lw(p+qYFoV z5(1jJrz=^31%^5W@g3GHl!e^f2Pb*YeyoOGJofHP>j6bVz2)T1xlhTl?N<9cG8Dk(7 z>cyG+qM>?)LFgi?%b&%0&jinl?%-GEq%1)n9_Em$Jzpyqg>&@*s$z>ib z5y(QnHzx_#hr)NCc8MbB4Kzkg$lJ7X5o`+4p%7cSXijRgAD@vZ@<}D;yBI{>&3&Ct zYOc-yyt1YBUh*M%ugqF$(}&MVTWNzFAs*nZGd64TBNjSiyFE3AyL$gbopi=1LQFp- zG0&cpn!{^TD5T%~fcyh@wFoNQmbIDjG16HzstB((cM}sgx#Yku) zG+hPIPldJO_KL&*@`Ou)|KwWy{`maaP3}2%q99Ku+H!@a&#lFf^z|(O155G;GLW%y zOvMHmQ^DP)GQg3eN~bc2$`*q`f(kN#GY|^Pg2sUoa~OqU9=ZsE0mPA6Qvb3LS=IUx zu9JQ&Au&OR3kRqn4w37Eqlk&1qe_o%!I7Y(1yF+IUa;AKzFJlb+OZ6fB6S#3jONw+ z3G5StsT6q^|91wVAZz*ut}met;014(n%OIZMkw?Ys)y>z9=!2c{w=`-|C~}58zV=5 z3nZ-?j-;HcvI#K=5#(wnx7qiV&tjGjcSlet`z;8A>d*E8R)s0n+P9%|xe_C}>caq$ zT>C8!HwVUt2L5YFV|TzEwlk$r?DPQ{xvB;jnPdp+iJA1>PM5;F_?GAnK1mQ4{{XC% zNB}NwpC88Ws{pBxpjUUUdCUh)=u?c4#sB@@5r$v@**G9tDyx4$7fc~%(aj<5-&FGU zef0f`#h?iGXRvkZw>ZK}bfKWm4V2D=<~2zfYknvl8wO;`E;Dfe5wu)kl&Tw90eq}4 zkbFk_iRl0zM2MH=jUK^@$Le<$HW|xCsfsYc2k;lM?B@p_mY6$czZ5mqOy6k3+3(s_ z4a~Hd6Q4T3EWS?@^LvGs@3MtRjgKGBh~SAY@i2h4@2lMOUS$YrYBvxj;D;*qd-C6z zlFdOyl;xlRD*wC=GUT^H!ds2Rj1Aidh0)F++w05L>5fYd805J?t`DTYEjjpyRNvuF z84}|+ph*u3FvR$x{QNEBIJ^V)c%6JI7P=fGdnvXmb2=gr7uf9sp;PiD!IS4iC0mQi zqG-Yq0B}@FA54Ufa{|jt=Z9O^&~ONK!7xDG`)V+cl^i$G9F)aJ!p^^#-bI>@*-i>u z!zlWT2Rg33`k)7))wfsfanuXdm9;cl@bv6eSi=>^Jzh-B&y^~#r{C9kzSWkCU+{u& z@D%x$sGk|biT8ZR#Q-%E;;sR(&7X>Kjql-4y}Usz#!?hxP~r$SOE(C8vfDo(`MZKL zJGk+Q(`;HiZ2mwZg~UgW{GBiO-t6#NOM1rHw|+GWLLP55XpCZn?>P#T(vKaWEMJG! zT!1dcT*~cWk*)g({s-B>S$=4(jQzh_Xc!YPb9P4nw91dN) z@~D*U*^8o? zQLETuOXT!=k#kD7L@Ht4LKoR36Yyt#68^3d=y{KHT_2;15xH=LkSFvyHTwOZ+c-R< zI)hy*YF{V>l~E5!(vJX-3)e)XMr*C2DQy0>m{&y0WOksJ7K$zsWoglH@&bXbC}33JEDy0w}s!gZre3MBIK*fUCz+{*YjFo%S=~Qoi>Y}*Hn#~jrYJ4 z<3R40{tJ{3r3g$G)@2PUfW-*soPNL5Pt-W|dlc?QXO#rPK4b1{Zdm-=RX@?klxdy+ zH5B>b8n4TZ;J_wn#9Y}+^Tt)Tli>rkk&}6j-!W|waX?Vjy1vI=dhY-Ry!hP}6*k33 zu;(*mYqv&5RQluVZS$;(u+JTw@eG}`@LLb&iC~h!CyMc-Lbzuc)^TQsO9YBj%-o$- z6}IVX=fvl}0hit@mcsk+jT`EN!V}78c523+Ec}xurNR7s!kqUAJ-;5OW8l|@>hYAN z_6pv{;_NPlNLSuM)LHZwySTaL?=tmszc-2SAC59L0Z=fXXkGWvTIXI3H_z}F3IAE zAT(;$AWLyZjVnXIzUqV-2HMCku=IdSlKjJJIfO_$JwJSl#DDQ%@$_%3!~4I(Z%pvn z_r0R1mc}&i$ME7`#noIK+FT-EZO=x8Pz?NRt_?8d)HxI2FI?5shOO7;&$8=IdYLdZ zCzoCL)mWeYF3(R9Cni{$!c~MB01jGh3tqujE_IY!b5&oDQ~89BSDe3TS-;#y@>Xy+ z2L~yv%FnrRfp$z1Q*Cq&8L?iK$)1VxE|KT^eyz%nF=a9r*2RSfiJ;YF&u8^Q4Anif z7cmYveXzInZ?kQ2nk*xui9;vA*t((~`)#44BH|kQvXkG_>Q1 zP~6m!(Lv!i5#`c2G0ur&dw!YPqA6_%hQBs0CRtE>MP5$yxHiN%H>{d=XR90;Fn6D) zF5h1ZZFW{(0+zt~_q&o38?n}@JSp6VL;=rl<_Q>_g8>otd1mm z=#7<-A{4^T$w2UI`^J8YVIumap`R;sR(&tsYr_3qiP@1{ba{<%EY3lsWvIO7(?{7# z)c(8XfE(S%k?XQ{TtL(PihR6>cir$8*}%1j%5?8CSiGsMr!nZxSl?IV3@WorE&0p8 zqlJf=%c%{7@Bx2^nc9vPiZ+Xv+FFjE8)-BeT=WN>ujfW&=w)eQ1`A1fRT0Ludu^4) zAAa?do*0`0=~c)m+gzb7zmO&ZMG#a0DxpMqr{Azf04@}*&@3Tn* z3@tU4kH4?#&EHxAgJw=l3{KA=b?Yf=G{@C{lFdhrh9H!jcWau5Ej`7X-pjW4DtKT$ z3Tg}%T{8b5^#t?RsolFUF#!FaLaN>?4dUS=+;$>SL8*o znPZspbddJEK%VrRcg9-Am%BZdR_u{NAmN;VbxRY~J-N|$8$aOYI=)(39ZB!*jYgUdrk&@RJ1 zX=SKhS#=6$jO4XKwS{+W4rvl&yq}~MrhxdE3WSD;W{Tb04zH)m3k4b5BF2?e+i>tB zK0hc5?V*SrsG)CSz#YSHZu;n;$41gy5Z-*%P}B^W{v4N?tr>H)6a32N5cn~p3Th%0 z30)m4S^ebUm}rxWEV8uQ21tJ>BW-Hf1F zUYRA4Bd&qNGCqT!xf$CFUJJajy&ua(XVd^p4kRDN2BMxY_PXcrj>X zDy>FRP?Q1 zw%k?+ugm^$yXnn3*V|A&oCHr+0)#k=& zULIAlzUl+OhfHJ1u20F059o}yLFC_<9^Y_f-IJX<{EIPvNBH3mAnQ<_HsZyt#fdXN zpv0{M4u_q<7-${tN( zDa!tVVmu?F!L`bKy92ij-#)%eMkTyv;RK#=jJnWXP=@xmEB zIA$rEa*x!J?A)-G;X$QpimRa#xd7g61i# zXE49IGu@T;h_xL5zx5eBVyg}0Oa8rva7qwECyAC7*~u#iBF*wvTGeK8t zB6~=A*Y-r=Xs%fw-if83mE7g3S4!-VOb#{)>+?>`& zH{tHk2e5zm9s48e?pSh7ZKIDtvIQ^%tV_~`#enzu!QI69ezQH+{l#z%405J1_^qd} zO>1}WQuJ%ND=)iY!NR) zLit#FyJ%=?DSfOw=ILu7pRH9QFIe_-AFUle&0H2F9cT8In2dUTOtX#6xBZe%T2;f} zvazv0XL|@W$JJ zZMSx;qBjU~)EBq$z5|(f`|9$~VabSRK-ZVaqp;m=J4)6DxD1D;_&^udh(_uZa5J-y zshSDwZh)-$cel}6FOXj_cB>&bF>%)uUkBc3s8W=uhm>gA8ya=%@0~j9|D@yOag7vs z@Jcx}k5GR|HJ{i>`@H&9ZD4l(;D``gZ&8q4E%59H>R;>V%OwjM%5`K#@sCM5AofF5 zXsb}V@#od;@A4esF#wGmb7x!fl}3)MAh^#X4ByBb`-Zce*q558%=brIDZ58^$Accf zTT6ri(|ULr*l`K4GyDd!v2?5_L8A#Rt1!aR*x9OH{UVeO1zS+^e3YK~QddryAhzcp zpPo=CCg4rQkl)h3Ef!p}^N&a^X%w#EC$Y`PJX~}2f#>u6F$s5~ zn}Q7_uk!k;HO&5(aYDvFZ*gn32W9~w>=73*%M`Ej^tvpB7Hm-1d#vET;Gih8_ zhI&FL(O5Z#2krvzkPh=159R1GmYz}ja{32EllCp&O?6F$oHHc)IwTjOA@56~MH+2E z_(r?dF?k!Ia(}5zB++Kb?ijR_<_)ibdS9tM`qXt`nBTa|60TMkhrWoMsG_(_sN62K zd%Fd=W6BftL1Eb|x<_p`&-6CfI(j%dlDcZ&pm3L`eie_8eVV!Dp5TvPX{=!}NUd0n z8QCNtAi^fdQ(A;43=317DNUViBpKCEC~c?)V-2+;oSMiu{L-j##Q617Aft&~3PWNf zd~~=xzBO!J>9n{ZcD2qzO44V%;T<{>!aC2%jduL2C`v z;rZ*TrZ!tT7bAo%fZHp(xsJM!WRtHpj_1*E#|mlLDP(fM%XuQXnm+N9Te3N4?9R7~ z#yG%zHHXa!ux35O=A4PAM^>_yq)X11o8Oy~s8XmI(4(=+RK#I}JLBqHpvriefc`7F z;bp1#S@3bGt4<0A1lA+)#_7*%(aPnwLkC{>3FQ8~dlD=`){^W`2`N2X=gx6+d$Msm zHQ-N6shz@^jlp-z9}IE5n+%Y?`CSa{`&}=(Lm60ddKZ z-|C1Xf7zrhsJR(kZZom@`Wd>ye#MDi*(ahttwrjH+7vP4FG}O5EK6B3VFsipM0C(K z&qE7Uul5U~PuXR0KL%x@`S1I=2i~`<6C7SobsX4Yq`M*iJth5cUA~dJKS!ZXbyel> z(;LgjeL#+s-$OWDMbLn1-HOC$6t*^M8w?BDZMq?`f7PT_;Y(;K0WDtRw!SQ=!l*W#KZ(8 zWy5!eAz)BQ=gRo*=+kD^WozBlC7}KuX<#zLGg9bCp`U&cu;R@)U>SO+y$U`iBZ2#d z_&)%+Ku5p&tAayS2!)SgViV}NDbD!^;#1S+x5sBH*5z||v?~#5d-E)4hn@Lp z=}#0Se+&!QbqzCPFU>e_ZBv>jyLHRFDKi!qP2R=URW3k5LHvV%TzK5%DcnTo;ZLkL z*vj$Zlyv^fgBuoE%*!du__|-}sWhgiZT}N^8d#Gq5Q}g-w~>6OY8oFHUVv{UdDJ>q zb5x1Gj@R-e+}=;*k3)RzR}%lfbg5*Zk@_iDO?r>!BpA&TgjQV-%cFO%U&iW-6~4nU z&nK&+EVvVbf|lYvtV+pE7x~M<*^W};()Z>-R%BNeES$bwuCDqI-hRc62V>(eOP}s} zl{J6~Y^}WFfU=AYQU>Mb<<)qOwx(D|E@!Q|D_LR>3ya}p8{5|cld8j0k zh$tk!|07kjrq7)@IVUeKZ{8WMg%+-bYS4VtU*$@waL>ufy)IO98gU)QgSRO|-Mcol zuxMC`uZ?r%S9@+?^+!sM0yEd)K4VU&vL9l!z_$H2u&C47M`K}Ptm--%>#?w@r`_kL z#-~ls<2AZ{e5K_hyXhPu*hM9knwxi~rMI_~RB$0vOI3u zi$B@ki3qYNILQ)}o>x3&d=$oX7*E2CIdB_0%uh(3!;$|~WCM=1E_{NRbaGQ!* zXb)@3ElNwz16%j(=3FTGM_Oq~ogS~`<+KaSiLtM-gavn@^j0ZiKTd4LRh3ASBXaU| zbe;$Hvtg(CiWAnwx%eB>b8IIj*XG7n)yAgZ4lRAVDK{OO+Qm1=zugok(p4}p=}9c5 zi_MK=DNbw7eiqh&iAG&967tDQ;nAIW?S$Vj$I zvJz+{>Z6&{ZkV%Ep0kTdSwSK4<0pVTRGu3wxq}`#@py=w87e=P6+F)eV?)VdnO ziFuN)Jr{4umwy2A$M%!oUmwN+?os&SaiI)dnZ-d^C_8us{5}TwX)2xNG%;`T?`utv z=xbImrjR}>nDc`4hk!mnqn{OG$ovsrunaz)6;I0)61}YCoShJ%W~=$;GsHYhC(G=1 z!|a{%>|LzDC(6uVX|_*#vx22dd{8FH(xKL6IZMoEb#*P+#dgZ=2LGDY`IjAtcN0Vd zcwl9Uj`vEnzvI;WLdehcm){yyept1a?f}q@*3r!m5+r#)B0me@@HIbphNDSWc6PhG zlYuT}o>1G7mSUQZY>ZlF#s|cFovV)LxZtwv8z?aS8llt-K!Bm3JAc?68l?T>ee5C+hdEdfmEwgq?+3h&5 zLS-1i;5Cn&fWiaKUwkwSUH~RS2WE#BwoB3WzCr0#w|MfOrQoE1_h4k3(O4G$pT+<_*c@a4Jab5RZ9q^Db$sp z>sS6O&;iLO3lxJn6D0vNJ~W0oX+OdM`=gb|*8)CHbYr2G#Q~WUIzu|tPjT#kO>6%f z!rvMW<#%HHS)d?Hx*!Os9|7tUDES(!Sa}4r-~=gD%i*i_-Ws4?)Pd{!9m5(xhMJ)! z(+Mc}I2s(ZQ)->~=DQtq;5uIq>RUWJxS`*cyz==D?6YB@Ivd#;*1xi8WD^nyvVnl0Si}7y(r^*6_9=g^9+*Lo?fwne3uR@=wUj^)OD@l+Slq&t(5sk+BwC%uTXt2jPwjs25n_7a{!1{NM{k4mU_o zRA~)g1f}zYkNcoc%T7<<7T*r1WCu;Vn>eG*oi@Nzmm+`Piu0wWtI6IlfO`@(4k#3P zTsS(P`@ky@_(u@tEjDrL=*AAUf7}cCrkC#DPt#Kw(sZ`ivGQM>6^^m} zEV?FV<+a&Yg)ZaloT4zU`BcBN>rB-)azWA3=ZxPxdj6Yv<=PXa>``O$hV^;h$-+pfqWZp z^6kNHY+}o~{e=0jd@(5J4v8yfH#POl-}5=+Ed z+G4eyxZ*bLxlF^o=SG%!17ELraF)!9cUg{g88)6YGCPpHpqrCFG zRm)Z^j+9m`u3WS-QoeZk%7yv{@kPBzz;)58mF51^LhFg5SyPW&vAx))c!a;4ok+IC zqK%%q7_Po4iHm~yYZ7hIhSnGao10=yNeXE}{f2r)*cSj=m;2$%E0LPk7WJWwb(@ov zq}G~CV#)3u%vU$`7c49#LNws}XZl`5!~I|UVf`iB!~VFZHcW`l16C=zH4j)VGTP4x z^!HKaw*s)3N$t9p{-WXoSR83rs88Q?tO1J6n;o)Y?-FFe)FN_fCa#UC&!GQeAe5B#d| zfj{uvOx#R=H*k3aZgz_v#rJ^t20kR3fe%Yaz(>4e&wQy>Q0S%lpZIWli1>D74g4db+3%+2bG?k9Uov}Gi8-edP zoto_w+dO)VGV1|?zlba5xXNz@fa7lbAYOmr(g(bk1=~+-N`c6AgFlj`b7seC&-!&& zZ>ETy1E+d!eZydRhVX#1#2>Im`~ho426&n0mINk%7qdBEEY4PJF-2LytQBI2l(3Ez zh;^>$7W%tV6alZ2$N+bUQsC!B26(gZfvL2_^^_^ci$CB2Ntnr-s*i%x!C{X}@No0V3Ny~TK*?K2yxKo@h{b~zI>KHIb z>K<^E)Jb5G$N*!)2d)=Ba7S7Thfa9D;uWWW%aq}kFOx=+Ncd`C@@f-6aVk9k$w@zq zQowTdxZDI+x?UO;B6V;iphN4ayFDOL2RPCZIi9INMZi;sD+gSkKe6P5FhhKVAYTw)`pcI1i)0>7tXmprJ5JH-Kbmw32Kd@CXQH-MD@{#}vfTGT4Ab4((4G;A=T z?r1nb_=M1h2wxET&k_V^TiFJW%?kbx2(7~ic>{lZe+txl;_{w}h`E{=X}yh=l-?#$ z&i3M-jx+dL7S(+vrw(zykV!~B#3XbbW)czqeOh*>)yI$+DezRLi-FUH4=fgWV7bTu zD?|pkDt!zoRVz*Pe76MF(qmM70@q21z#66tYW!9p47`NtLg2J)RrW^|aVpoJLf~|! z!@!R+T>vbWZXGy7>Km|D2V}==BgY?bzcR8N`#L~;kcCP{54q#AQ|cjGT>YTv!4B#= zPB-97imU?sfJyDkYM6aLW!H&%YE%I;IQab?zAw|*zCiB3b2B|o5|>Isfl0{#V5?*d zaFb*h@CwOD;BT2O0{%|;z!yax_>zPJ{Jn$^{DbHP4$0wg?09YAfeqj`MOJD_B5lD> zE7x*Bic_2tKdKM+eO1`LShOr9v8CLF;M>f7+xRhgUWCufaWq4~txOjKuNFS=2g0}g zoyVgwIN!`&J(}c-YnC2Ba--T7n#GF)Hx>b zYIy&G=7YG2A1+LRNU;#$E-eJ&`&#JxM!Ol(ViV#4$pYYyna%@V+>g5|AiqD63<1^0 zI;<`XVf;J?ja})Dq4FC;HvhzsN-TiA`J-ig`16AtZV!QQr)aLuO&6ey{y>7lkQBH` z1zQd1VDd8rC-qb0NqiF%NI*T4mk@lCNxB?4&vfoICSv6`ixn7;ih6TJ{(Fuj0%S$sdEsQ!&a0@E{{DeuJ zSwy~>t23nn@Chc@^w*K80DPVk4EP3f0S_?w8%aBnCrKKKtR>jQB;X1r0bBCiX_%D< znst3J)~fB)?%OGd9eHeBz#Ey)0}jt;O9PI`XBprW;RB0>54NlEfw2Rz_5Ik zbc8U8$*JPWYK-qD!BkVqBg(Rb}(00!F~1FCOiCax6|_u$u8hdrt^Sb zV!8mhi|H`%W~K{)&ko?O6!;v|g}~>T4g(J}T>$(w(|N!n1Ec{V{Lg`ImyCGb&Up)f zIQ7FXh@{meL-0W*SPr;K3044p#N>}8W<3E9^kWDnDg_ZHlZ0 zd}e^E;#nyWH!}Z5Nh4Zef;ZSBV44cH8i3pAlt&O8iE2L*Wqu_5evTd=7%2T5;g6Wk z1OAxl0^oy8hk-v~x)69-ff`00P{bz-*a3Js(_!EhOcwy#na%@lVLAl7RtIFq?0FU0 zQoywZu1&%DMb6t7edjf{^CO&Uz@ItQfG#eDw+Q}@TO_?psqTzUfqn;H81P!WnG?am z)1U$sM3`VG?z1PyOUViJ2<21`n9EWfk_@ZKJs_cGdoxmb##8keT(i&Qc*!3kegCF- zw$tMd$tB=U$vxngBv*lB2Fa8V#MnXX036439&kLaz_0mOOY0k~2;080nCQyj$R z%PNAU0E9^m*m&_}wPgd0wjB+pn}GZ|*v63s?Bf#N+mRju zip`3HDZ*lUo*@|koGBRtoFy3soGlp%JVP=VSU6a69>nm$>;N3WbQpL%(*?khOy>cM zm<|C~>VQC$NACqDOes`EEhAu_i zF^nC6dzlUczsGa|@J^=lfOjz+0zOhG0ogG-q>8H)P#IPw2RL_#O7PAO5Tk~2ITOqp zD*SUOtj`oG{&xxPDippQ^q*BCic>==z~jSM(`oSrcw0_LA<#8LEJh`Hzod|*fh~oW zqYe^L{PkdG#{b@6jw-Sn0e)u~(@1S)A=3!&kwUjfvJsoG6Vyk;nKJ;v9vqT611dQK z+Iz_h1pUb{)+%@Wup#<13D~8`YQU3B zB1i65nNy8uO)hjsHW!f4MM|&?aJ?=?5T6<9kIOzIiS@^2ciF@m$3!ts=N^m}7)+Emf=vxYiDHn$m-mrk@pZeFpxV={(@m zOcwy3VLA-_71M>lvqz}a}-$(IG?$IjfyM> zoOpub0!}^w(Trc70x?eUO9As0f5#0SAil`*fLjz<4fq~&0rxQ%@Fa5q&oNiQiHZxz zS7bF{F>?Vcmwe)_1G0G%MQC$`>2}8Y@Nz|49VDhaI_*#-8=Mb!B@)CmY zF!_6eSC||}<}^uJR%w)AJ(If$_A~h&K}eZX>6rvyVDc7%2bg?{AjHN5`#G1%RRo`A z683W|lQ5b`nd~BXlS!DzTvddnu!-}T{C9#Em_)(8#biEZd{~u1Dc}TEO!49rh|$bP zvCd#}5y9n5eu3a7CedQt!Q`{1NJ~+Q<5Xdkt~BLhTIKht0Vx>nux^lc1Opb}e&t;D zKEWha5M@)PVIy)2!RJ-;GCQ@0@E)P_M{6@J`!oS!Y4@6$byWHRSNZ|ZOreqdx}s;L zzAj2g1P$glk7s?l1R#E%m^{Q|l4M)C(=MmSh=volcBnY9$c|kdFu_lcmIs|0lH1df z0ww0X%a}LXR@f?u?Dkhl!Tq^PL|oyo72S3@@OLUf)qvMVIE8^0Wc!KfVS#(`iORpi zW<_tj9C*!%&d>+F!g6l^FIp%4o4w+QpS_13Vmc4lkLd!S?5$%fz$;+75coyjLO+lN z;wIT&1%6rfU4dVb{aD~`*{20|%Kj~IceVrs;%3<{1l}Usg}2DQ90CG%%64I=?B^jM z;IDK*APz}Dz-J{O;ByiX@OcRcctipM4$YB(Kn&w;t3qHQ(_!FnrVD^0WNQmpBwJp< zPmYj)>`ect%ETQZ;AeS@cz4ImL{#y?s1UF|TO5$E6ZtS$2>3>>IDjbRU6K%R6mMDp z&JZ?`qd@W*q7a7G4|wk@jPTB7k74!6i~%ybAiP)T*9pfBWcsgzC}O-^5YDAB@60gM zmyTeiplzL>yDXZ3}^JNt7Zac6%MT%jF($+@i^*u|fn&BC+& zoZH%g+#1zi9%f6nkR~fvwszP-=5vs@cT|Q-r&gASV}{??4m& z-az=UNL@hMnn$Hss(tPU%Zu&2V6~-VHxZq@kOlaw<`+}`oXzv+C_y`ufX=}pg6#X+ zPB+# zZUNQ|BfOp$FxKoK+^uHA)qqR6jMo6$+zt;(-{x_Ly@5KOJNq#We4-zB>OYZc2L58w z(jIm@cpV1i>GqD#dVJbQJs_9<7LuLezq!rM&VC}a)2P}}a;IL8$=} z6o~KeM$&hrp;SU3e!_cAI?_01<=30-9aeL&y#vHDUTO!3eQ&p#2~wsrS-F5178Vx} z6L~QLuviP}Ou~s7%KkZp!aviu(d``tzFBVXc!r1<^@C-j+ui!CGZ`f%ZN&DDLcE@& zlc$qy;t?An4_0HfUA0fo=!X~m#%g<}_M@byVtgalEjiGZL6-!|O{}}bvg4AB`3;9a zc8e*O*nM2SoE6QNgQ_`RUQudPma)S(+d+I*KcJ?wITxp%FcB(A0l8}}R&khpoOl4y zDGQM38Dc}225uN4LLj#22M~vcvXs@jz1a?;Y8X2J*A8Rdz;(k!Xr12#zS$1q4e{}Y zX$~oYbEE}?1Monh_&`Aqlfgc4^lR=?{ zh!Nspgc*7iJ57Rg>^nQYEJu>CkxLeHZiv^tup|b$l8wpg{&%W=@9F;X0OF6_uei07-%i9{?$-AD-P+N1Yjm(vjR9tc3S7e} zPQ7Ru4s2z1cRf&X3K8nZX4BOUf^Dd^J@xAx(_?hC>mEb33NV$y1H{GZGP>Gvrg$~C zHj7sKP0}JgwpK!Zmr-daS2qm(XaJmBWZDMh1?|DTgSCGmU@HCbfPn}eq$lWV_q$7{ zx#&{Oh4c$u?Uo^QwOjo{SG(0ObhRTBr5wB3`&y26;T=nfWf-sC-Eovk<6~;PIwSQl zzuw+$k5}*R@aHo#Qb39O-NpvTdirI+N;JxGK3R$(*Ii5k4)V;RAQyAQ5q#nlqp{iQ zWM3sz->DjhN`FXIsf(CMJ$oWj*KZ>A+=)nCJ*;ChR$}+7LCiyv*oUO^Qw|^aDc|2= zja>G3=nhalfVe`k;R=5!vcE(3fa<}Y*v+s<9Q)0P0}i?eR1P|_(EM(HnO=Z6L5(&m z0jDzwI9W}gDgj^1M+>~sYxTya5Q({Z+Jxq^qQH05GbHi{z#K_C>G={l4Uyes?KIOL z3*FvP^pJ+FF4=2cd{-zkR*)lB9^Nf!;~{8Uw+U{07-TT$QJ;YYRFk6JaN zQW6%C5{Vbg+KSd*GsClXd0+w0DATO|4jIBjYz$s5hwpQ}u>T31#g5#j5Z)YTTt=TcLN^v$?BgBkDYm_YSq znyNFUfVusI58_PbpXm=PcPWE@HD4Y;yu~wcz&|wqAJY3;vlzv{*SGUsww>?luxxvm z>Q*n+>wX!>4uMg@@_cy!v6`a94!*qV?MhdWk?a{?;17KD*7`XRi_LGiwAojiSMS-{BBd zq}TIU04U|XTQvkyWV<_b)mIN7LNXWz4jIf%(-7$gm5?*B-f|%_OC6-=Ax%v<<%`F8!!*g`NseEp0DR40loRB|%<+T!k zOmdd~fbc1yUk&p#0yNsEe!NkwZ3=9^*WR)8bN<%OjbdD2`|d^U0ucF*+jq$@V*ufSsIgJH-%*3o{(UyWoHc zJUX8s#z|b{@0CmfuI5qg)nc&3)#gg1HdZ3Fsao5_?UYNO&T~e&7(N#a;z5lZ2_x5i zCSNKM|1h72z>MLy+%aP8f8KDXkJPhVSpFzec-6YOc4xK4rhivsKZ-=6fN9`u+~#$v z*-^8KM>Qb9u>-U*7tqcm;B_YbQmY2EOS8~!N~L;chAtO0QhOPnwz$j`QMGPHA)(g+ z@pcEnr}^vy;PGJ+>&H#mRi9}}soF24YQL1K{ZcZ$W4Sf)IOt_sMj##5GD4^75>Jrk z64;g}4sGU;f9Vx|Guo-T!Sor0a>!IF$^pbx`r#@mBT6`c%c82y6hIXU;NWp0eNdWd ziUdF!tX%JO>Ory$JMwxFJ zWtfhh&%3Jt>2*3gj>SyGGPZU6kV^fhYyf~mdBO+LkS`A)9?}mWp5)=nlljJEwsmJR z+w3lRTZgqiwN3TUQrg=(>=L%R;ca#|yv^>0x7pqBHoF_%W_QEeGOa{zvsWUw*(;IT z?3KuE_DbY7drY*=UWwdhuSB}~PyhqGTjV{JuCsKP?emVDg^OW+r-tkoV8!X%YN~j_ zodmyOQpeQ}2vMFmz~xPpWY~eDSoWzd?gE`K+Y9RQJk|GKfTWHd;yU9wHpC54=YlP# zGsEWTJhA8JSIuC*97Cf*9u5IM&Qoo``KriUJ5uM%Fp2ourpco}R8SjpSMeSlV3ca;Do2^& zQYG5F6WHS4ZwGO@YW2!aA7s|@-fwUB7x3P1_dBG@;=y{9Pzl(;vK&yTCS{d{L-bUwQZMvSaDXP}0^&m?xVWqqJbPN~i4jI%E-)flNZ};cDmDW<{`|Y{~Pg~28+K^`VY~khITR59#YS+pE5lzjn)Gk3V0MIbKrVkh*^7%V!(|1hCCInL%$kuNP| z9*!vF=D#*J^;3HKImhDXrUWWb0y}v=1VHM2FHSG1m$DBN@gj%wVwO29(baxpPKFiT zS0(#!>NiVYI#dn_We1{e4rHYHa?WD}&RyVV-z9RAdQKixM3FcEuhtIs?*xzQy~o!A zV@mAl%YWRRxgp#)4Uv%S7c~5U%042#t+UN=`3U=HnCJU8?_uE{kA&xx^LF~XQKAkU z$cLSZfdz8#Nz3Ar5|0aAvv3cGT)+W%O(i^Tz4uMxLnIjBP&rox9467rB1bjpS z0{%(|1mZaf2>84N1UxJO0e>w40gp&Pz_HnBMuNQJj|=Tk_$kintpt0R{JzAU$VWsw z-awVW?Ds4Du!>W_8@U?YO7QPYB7n!4L;$agutIJXhGlcOmbKWyZZ*MHBdn*Gd`eQU zPMm{yf!nUEl&$5jMoaZ5g3(Nl&eplI(LeI|Nhwt7o4zl_LgXWov3P$sOGndmUiA`9 zs=c9H5bA^JUe#wzR#tsqik`>^rG%CABT|yY*AXW29f@y_*OqN!b`~+u;~WH3W~JG_ z=ef~*IdxOg}#QG&?+AmERmIGc= zxnSKHQIxH(iAsjXWNRBw<^jja$w=UMIWY;GBqu3>@97E#;sbF2ekdM*o}7#XX35D& zg>o_ycy>-&O-0PUEj12!KO1d!N=w^S(HAaGX<w$Gv`*d)F5`7hBH8_;J7l*tmY(rEb%?2!@zsfqI1A=FE0I&L>>5JNfPiu2?HpXm=*%NxN>jF z0`V8A+`zv|) z1w66@6fz0;u1I{3@DZVbPqPT%c_smW*5S!-D(P6uqkz?GO&?wMxb&+;R*;Ws_O%-L zc@B2sS42XGi;=EO9r7jWWP71hf#1u2PtFYxc~Ii3M4p!5EJL3yu_P9tf|Zr( zs8JlM{j{0U>lov!0&qQdt^gk9SHb^9+>Qa(sTd?KPpy-zw5)Qf39Awys!Zdx){L-r z?CH?a@)v{n`MPYBZPksT>Kj9!A^JY+IXxik{!~at*x~5kJtCLuk>|=AL%7&bC}jfKFVd2&;n0`euFGg3f(bXLnA@JyxWd)u=lb|~L0x2`@%f3Lc# zenWq+iz?thM3r{Os8uE#A>hdpJg`XkK)LU_2zW-CT7)q!%TZfGj|)W%_=I=|9u)q; zEPVy0pV#fg`v%v7-ds`OYbJu4tR)b3*brSK52$k zRe%rE1NcxB_49JZ&(AXNI&3qwu=Eu(B=<-A^f*MC$|2Im!I*$&Niz#vAbjB2A`d)A zWPs<246syWfE6MGTqQEV%CshWZ8qQa3m&jmWPveh=7H-aJYc0Ygq3{nvL-=Dd76g{?jdOr=(uRl_Mtvch4H(Gh zxXJ+csCZx6k-A6J5Fa6bnC*poHV}ANt~z?TZ2waC&F%+bp)*CsI8(r z*Q>ZOL`~v7l5hH12cw_0zwZ$L2N~KuOo8}X=F+fafu#-O!U`GB0h3G@0bA3?d0XiD zO5p)NC1XP1RWeot%Jqg};I;B%6!2|z9wgbNh`)!}0eF<@Fz_9w3xMx3ode@=r*7Ytqc0__46;mPv^R(EP$Z9lgRG+zc$m*0172eCC6hh=rF_3Mkt_%N znZpA7g-IN3{v;~}>~{4ZA)z;wU>TqvhrXs?NXN8PXOBJ9$v4hbma`ce45H^#`94O# zvXF_$UY0BY9%PAwegGvpfFUOQYAbv*M?y$D+4oM9q%ws0u*Cmi3BNz8Wd8eOQ+Rlq zdkO(hSCSQgGy1_b;mw$s0@=YX zfGd5MD~tz7A5LA)&vz`u(J;86((_>L$5dUA^>u&{qx ze~p;!f-Nl_#X$B|60KriR3?cGBMGlgMIoooF7&vpE}aA!Q|#F@j6v zNcm-i*W@}A<&QaGgch6IEX(~c%J&c)=CZQ=bu!D3sc}7%Sl?w6`>yy!s|b9N*)K|R z)jQ?y$~(E1MXn)M%uj*5vFpEcPrL^?a)5_bNG+GAK>V5c2sEExT?HK1Uqp`Uua%ih z(0N445Zwou1RP;9BmofVdpD6m(S1<~mVHr@h3@ZNKi;M*+#?x-(g6ODYy86|gH5F? zBA?^Lcz|)H!@x_058Ntz;MLmLe%raZ~I&HPoA7~N%tmSa}bzXlnUIYoR1Nbqw#T%W%bHdGYEoQIz(Blrt zfgN(~E2<&zMy3mZJ0-_}Ut+ot_)MOxeS`P~-^p4C{3X+2;IEi2_>~+If&$WFpb}!0Bp{4Mw#&a z9_JuH0{3sj?yoOGt{Nn|o!2(BLdrM_*I@S)y;v3(lip730J# zfqR%P2JRI;@Pq;G5a~SPUCDRXUMY9;suuWLMC@li;7z`b81SAFX}dhte*gz(^(jlp z?W=qT@wf7|YqhP5FZylq;QSLl*o<%n@xkUn19S{qOuc~m5BaqkUt^{1dcTTMyft;d z(OLRm(^-VqnFdI1n)89lgNo=92jIMcX?s1m>i4I7j3uAkP8#Sme@z4UT4GZB#sGbo zt-|)pu2t|mLb+A}rVPX-CT(}-nHIT1WGUT+sW(ha;(nXGnV8q{3HsH*FLPl49%T0N zHwNhI4XUAGHj}gEn4LXIsUE-q4!{(o;KL6Gdncsud?zOr@E=V6hY3GE65;=i*?_kO z=)2e^q^6j&d?s_Yh)+th?`llzZzis$_bQ>sRUA=;=kt33fY?CC3Lv?XB||I47x!^l zDbN>kOaL`*r0}y>SF=5t+IVKS79XL~SImTg{XLo55I)ZIc;FMl2Rg@RdgDJyVgG{u4$RaOJ#-9w-1dvRiN8&Mw;$I#A6KcC4&k>Pa2G1B z1g$148p>DHu9fRm`zpUY%y-p3F8=Dne5GszM?mTC6ZCgM*q2`*x0C9NQ4#)uVZJ-A z9bG<*FS)3-_+2DBayZ}piF?s{`gyXoII$>zS5#q(r*`U9s#XJ;R~dyyP8#b;Hf_xJfYl!bF?M`UwU|CY#3 z5KgLm`WX1wu*Bw~-jCEjygeNuf!R5+35Ca^jUXF7=_jdltr3kMD@(?BX}qsgeyYS@$^hSS$25}H==$qMY4 ztKZKA!%AjV#3{I2;;}jBag-YhyjPV&P z+(Al)2WaWPlZADhlKEyvnU4yqK* zes(y&AWoel^Jm1lpUuIzeS5C$t0Jq`!QLH0Qu>>5Ana5fX? zki)?Nl9wG0j(i+-ICl`IIM0qDPU;Em;-S-Q>PbP_CeIR8no+Tr|+pw8i7TW^=c!A9L4H_jn_H=fQ7?7_v4 zvpJ^|r)03rSs3C=GW~E6m!hyOgSZ@ZWMG3uLu@CPdDP+DpUcPoe9kk( zdD-Fo4qHqP2b)WIPI+OIVx+?vNu0?JXMBI2miinlzb|!LB&_i}9DGl0u9NdvjbG|; zKGmN;Z0U2pK%A~owymc6>n%VngIBj+b~ryK&LM|`+r#plw)YRjIqJw@t#+~_Q$X$9 zNQX0;ICCA&^gKRyd4?zadVyAz!%nzI5PM~+GmXY;xC z`kZ@-Q#{r7h1Z}DIc>t>d_Icrb6$Zi#}^h|_c$Ssp)u?>r>(==aGM;?BD}-va4Lzj z$Kk|?v)bWoB+gQYgE4lU!}%g{b~&6qSdBf!X_1KYsFTviiL+&z(;5?}v)Ja~{?C^k zU&Clreq@FnGFEc8Ik|y1{KB)GwwE{u9Zn^2if7xpurhhn(RIy0ZrQCCi8zlsrE>>y z4wTs8;M-yQ9AD2uW`V6e2Sde$HfI`fN*vB=Tsh}(t|U&E!}%6*iWk|OpAskTaNb5Z z4(BB5x4Rq;z93ez*ydb8oV5<;7UC2wu{j5DKd!_1BXNq)wmJB~Q_YtOMcFCv_CZO$MXYaDSnrxB-Uh0VDLG7jfj;)Kt$IeUq7(BV8w zob4-Z4nBNST55AnAx^l==By&lL5H&m_uG`)oZZAJs&Lu__;NUJA>>sy=R_I}9dI}$ zc)z;R=F||UsLDwxagI2g+wmfHwaxh@arQc#EShE=SZ#AA5ogOMY|gpFDLUWgG{cv} z`66*jFR(fLiPPn9ev6RT*qjiJ*TNUtoXN!5>u^@!V=oukoQ=dOiP)SkWA(@3{3mg? zIGh)tYps)Z8o}*x>iclwY^k?p77%Bb)60|+C*EMo;2NC+4hP>iI_Plr6Q|4Jyokwb zqs_q!$i)t4Hdc=u&RXJZaX8lzXRpKAHJs<(ew=R`&abujobL_i?F66mLvWmS{xEzw zoVST{@JeU=Ok>RLSJ|9Xi4(rsY3qp7^=X^aPMo6aoVJcQoet*^apKq8oc_mCK0BN< zh*NZf&8a2McBem$6Q}r8o6|v@Eza2Zy5sfNt2E~($nx@`%mZN}RoqIio@1to@12xf7hnZO#+O zu_x?2{0(v9PXu!8L7ihC8^HVdeax}E-mQ1uL~Xq|2a)f}NUkPLuEtwp@kmYmdN*tT z3>$l@XY0*5f%5PvJ2yrUXZufW&UoS+bU1T}6FwMdk)G1|^P1$se?$IA+IRXE6}==D zlv_$MEIHV-MXe^8hJzeu?(Sp6X>mAl;+*v}o3j-m|IDO4k!)Q@+-67S%Otb*XLgR= zPMirpw`G1roZ_E5;j~0I);cnWNv8DYb~t|}PSMl0Ou>noqh-br=T}BXmrlt+T{>SP z!&>p*Qabp3Om;;>N@kN#RyY!$BND@$p!T3HZ+bn1#-EPWr~WqQv_;uzoY|#WX`DG& zgB6b0&)0gepSq@KBUpYo>yve@O_z9{rAt!rvQEW+wMXm8<~bEJasEhY&r*AEnPh@# zxARBRzPE?8|1YF#_9`9ctWb9{r!CFyRp#^?v~6S!2+By>U-CyO4T(f+JiRkoMAqB& zbkA*OHOUk|V@7C^$fnvzRPEDZ{*WV_%hXOObMV85-u6C|-ez{0e5Q`f>+k64TRw+_ zLLToXBcFLU`NoVX!)`M6ka;&5r@to$WU!lzJ!IZZzA%epZ^ehQb^QGKm_DdpD<>tP3$qYmubSU2FPWxTmFybz!^B z(v?wWQC_byi{^*D-qN+`{K6h&@WZY>_Ud`po~8p{VA85~?Xg$SyY`uTLhRaOuby}9 z^8#gxA9n4rSI@ilM+51?54-k7Uhlj1C;{HJKQrL2>nSd2ld(-A)>_+qYD=u4xyG-p z8>u!Oc&6uidM(L>e_@a7zJ!|lOJ_8ABEL8xy^PdK4jD1TS+g;24F8E*X+rL%1W_yh zn5}E&{oU5erv~d<`5G1Rgn$fcC2mXLTFIA2Iq?w-uQe9_?Tqn(MWF{_i`wsXXHhs= z#1=I-Cm`UlMV+0cEea>_Gh0+DOIy^yj8+GWD)D-@s2|CAW4Mx89dO4FR)trlv7k-;~xp9K=}bQ1_$CNPPN?IWtbPMl$%lNWMxBS^Wh<_Bs#QcK9~F zBOI_p)`d9ZG_c#N1?@0HYa@1e_!#W)8zF6nU(YB5JH(fK*$#0(!|;F%?66-yZHIRU z;)5S-3|FhLjcxV1v#|&IX&W2fZL77>*x0g+x?p3ttch*x=)xpP19eg*V z4C>$(ulqWv?dNi1Kj41dsfcDo{oKE%eucFCWChcWAIj_6+}`VLeRo__!Lu(#K|nwO zL8%ssARR()igZcn(h)<4Pz*)DP!!Mzh;#y>iu6tbNK;yn-UEaZK_OBCN(o9RH@^3K z@7_P|p0>MZzPqzCv!B!U%+Bh8uxp1!ndQ~mp);h}HMBBV=_}#dyh{Gq(d54L@?<;9 z-+dA^4C}P8SnL-3Di7pD|7)Kx{RDRoKN%R>b#^Ny*AmVFuD?MWjB&h|`-g9Id=Blov156bo#y{`^veHqbm!Wm z!PReK>VW z1OF-HYwJgWL2haHRTWVB&EWjO(P^gwJ~G;~za(g3_nSP&k?K_YBN*dxF8f~4=hRTO zB+{>(5_RN{pxNCMCA}lnk2hS$cLT#Zj#NPiGv6WWVG#JoxRL02SBA{Tc5K=+JrnZh zmb3uj6r;Zr39@(Ba=}5OPPw_AyHNs$H;yj(i;fYS(wei)^0@T5BJQqnnh)j=UKdE) zGcQT2=S=^U_Bu99YK_)$_u~m`XBVh14dF)rpJea$p)mY(FhU{OZqT&+@^``en;Em-zY~>hy*D_Xlj-1TZE-+HJ^3Q#IifnP;j?WZ`{v`i=Qc zQ~ozq*q^Qljg*f>cZ)9$3!v#a(03Ktm_&dl2})=4U}BtqTdzHcrIAS3PWqLre>P|q zqa+mDG~6e!LQea!$Pzns#d~kH2Z8{>dJ&16%G)N8*Dc+!EcX1)dFT5WwHUtT0Ay2- z@e*!j`y-C!{K_+YDnVfTR}DLwkA-1d^&7qFVrnVzilV)XqxUfs(bPj++7Yc%49=Rz zJb9hO|B5ez_Z1%}kE%FJ%XfNJwWYb0>8Q4*9tjMKH_sOPhSkqd#Uj3`rU~P=-$5y& z{LTwwO9EY?wmDF$54BgLGaxNZckPLJ3jOCI;uXKH+cp_ELrh=G4Sp#CS{F)e@<~=w|V4ZGBZpEye zmco5S>Amca!h?k!Y;x~If45-PE>8e_A((m$tz@l3aYAs7=MXqmS3l8%nqO1b>g%b*X9{Gv}}6!$Vci8C`^n?KsG0jnz?_5YyD8 zLS{{A)R98FTUJw9k+0sxoZGmfU*&njswSCz7(aB}puTii^PxHZaoKa{H@T=hhT>2xsI8!4|O{$K4yryLJe{tMYsePBUTBf&DZt}mn5|a$af5Y)sL_uu)mjvV7>W(A9F zG;5tgCOe_9Ne$J4QxC21yYET6bg0+lVpynFxYGOm50na+Jp|@Oh|JXgn!ZniBU~Kp zCqcPJ|dwgQJwsM2m~$S8{-wml2vf&fXoy zz?a6Vhbi9Fui117VIpT98E)Cml=9xY{9~>#3f=zW;&F*q=%Fzg7e)FVy(h+!Hv3b{ z*oLAhG&M1m7Uxcn0p>0D*HPP2Dik&Lf4ov zR&sN5p9ihh1m|4%^7(-;{|1aogOX8xJF{eiy7R8U5yu+vT#rFr%C@5`@N;`<>XVI) z5k=ym!M&zKeWvh0IpxRfL1Dv@cbq?an(H5V4h^oE4t0KO9D9vo7AsMtHcD+5 zP$3s59VuK&UHr#lq?V;k`ZYU@7Id)%QI{iV;{#j695oN7&H}YIokH2b7y8_BY0KYxWG}fdM%uk7 zX%@6Su;D}|xNUKp7n6ly++M-Scyl>-nSiFRHsb5koPQe?)&=ALV9w6s_RDW$(;-T# zZ%_WRKvm%8sx#}0roACA1C){vC1kSv2p3f2G;bqLZJKHb@TqV9XJ);A4P<1y%nNYJ zn6l^PerddaN#aV*0t_Jp{=;L*mLIoX!px0u}SvDcCfbA>C9^v-X_Kxti0{BPH1 zWR$om6AF4hffIJB! z{i~75eF)`@v7JB2eas#+YbOZ}R(5fE%oM;M__PHkPWlb;{<~?t#Pu_9iTx5Gx&Ex$ zemK;#>inG?)RFbi@sp~^JYxdJ)iL^xoCj~@R4;4juu`P_T~7f*ElkF}ODQs=7sCvDoCQ69uI@YGc|P;}EF)21bm;rvN;?h0&*$eQCZZu> z*@Ul1eI(k7?@@1xMW(t)zB@=iX{?Chq(eXx$poMBv~hrFYYP_HpV(LDf3rb;Jx-K3 z9LPfYMc3%xo}aW}$E!_FENevXZtevUzxj7ZeAQpe0rD?v-s*T1DbwXNX5rN5RdaL@ z@fLf?IFJy$f8~~HXclPAW{Y4Au1YQvC%6PE3EV=g0hP=}_G~osq1cBDvR7HwI*@?L z6?-Mq-C$23U%&zJJoDT>$DTcCrX zKxfJ*&bO9&$m59JhmlKkuC1Mg08?2uy^U8RVnhHm1)o_sOl|xx-4+ulQ3UC2)K9jHEVy~;KYHoGFA|{nEWY( zEwwXNQy0mD3_koN*f}vuXg5O6@&Y9-YaZx5z7_D6Z?t7#rH!vwSf)DdfSVY zf*G&FOwuIbvdE~sA_2Z%lKNV%oGcm&x5~^zb3)T#6-e77JIj7dpyy`Sm@%S0S!;deZE-x{Z{V zlGL$jKJy9n4?2Qv8+=TQQ3woGeTKdoCp%E5;Uijj9>=EL=M~4b>2?`${Vw-x|7)ae!`t8c5`Bi?tMJ#Q%vh~I1kO}qi z(wtZwJ6>HKKJ+IRcbimlJJM}{1#F-VoxWx>z1UjQb+^dF@PeIfQI1fU@NEm}rDu<8 zoRSKQpY4Oa$od4FMpf~gBaP2Ol0g-*$M8wgHa|^6?#X48wh`sr_6h3r!e1QMnsP&2 z!Y${rk~vJQi@~8WPlDyu>bI}=axYeFd4mx#DI=F2GD>4DrtFOtFF!jpJ{$1B*W;{Fq7L1zA1=_aX|QHotv1NU`MFH;S&SHQH6ScJpYpt1Y4Nd0 z3uK5d^>S^c{QPW~D!Jlsd|z_T{u;z1@nd?T+B4tUH<<4-gTT|Jr@jM1w09ueFt~4s z4_(7}M1~7aJoS}=xe&(f<{?S0R0rB}>7#^I32mHg$2#UYls)L_BJEWXv#G^tPHzK~ zq^magD@)%pnBwQry+_Yw!o)X`IXspjS<@^TvlUuqT{9DcHup@XGHv)OQr>NCmSgQ( ztC8)u!Lw4OA;Z?;87PIBf?9bAD%;p&5A9Reddnb*`m!3i{nP;un8NArg3aKrHn-A&civ+5lFxor;Fkc z!yxZ>3y{Rg+;t-?VD`ADGvO*QDcR589`mi*K17CjK))K#Qd!IS>ArU3+4gnU$9DTd z9Q1)VEH3igfn!U)_8FVsCaV>{u7ND3m zyj`edvA_vOvLnz><{MHF&?KE_D>6osDsBTp{oWVh<7^s2WNvd$kL^0^KO%4v<+t#n^-;5QcJ0;8+@J$&jehWp~PDpox~QVsh? znG#j;GxjMS5Q`LoM0}Nx?J{pQpsyP&r4H`ZEPPx>Eu3_gWd-GbVJ0iwnDemJJ2ZjL z-B_*6-67qWxv09$x=8`ut1vAR=IxHYa_=5uK^qobI1=^oP|483Y?J4;oY&@T=I~~r zzmF+D?~!#^no`Aksb%xQlX9-VFCSn274EIb)hAtEsjvId+2<`JLEgv|qaY*`(%@F1 zwuGL2Gp&zzoB`|`gPr42tGqpzTb}HPT7R_~THpF^AU^*4%1p(S8u-hzKyk^+mJM^d zhr;D^CM->t#NNOeZBo}vTgd464BGEvZjq+n3v<^^Cq^X z0=0(UUMYFO!jvMvzV^z|isIp4aU^?w4mW*0aY$Rx7V3EqAa6ZBOXE@~pZUnc@pe<8 z3^pxc8ld<~tk70B4bpqKm^;)*_Xy%)2RFpGXP_QhiItmX!(QbDmi+bk!orq}(}SZumaf%xl7{CAJ) zmTv)W-)_9xQOXYQ-*g|zW%u-i7-AKRV*3VI*Mh)lw7D9Ue-c&^H%Oz|cX+t7XLWci zd?u{{!+XqyRWV%i2Z`|`r?oCo`)zyI8_h&P% z2gmVIuW{O-+q*3S$WZ^%2SW$kP9{#HyEbXT-upI?rpm=b{<rR2Ke^!KHJo}*Qt73~W zY=$nJ%DH>$&T^wl#xscuzIJ!w-A4PN<|?!!;x+8_Fp3@6ByQ8>p?<%$x4vaH1hVK8 zdkV<7KC^9&DhEhbVTDONaPhk7`#0=DkQJr4SHcY+J0%9MSq)VB8a$ny!@ZAL83LaU z2Q|f)d>`Qf?dN~*D>XfK&sX39GQ(Ss4|VHGWNHR*$A?>h4&RaqlP&Kr12^w1uf}N8 zCLPBO{a|o-2K7#c*#AEf4!z z{#Q4E$!kMmRywyGi@W(XwcGQ|ia~lh&+U`HaB9S4n&?W_I?b|uM3gdy{c{s2e3#UU z#C6kMIxcj5Bdm&q+>-*bOL-?IbI+*UBUQv*(6NF@KC$LCrMx2J9uhYax2>yts+{;n zdf%blfWZsz?u~zAt$o^xdB|g#ub(#jzKxNE#*(^(v(lj*ZhO_M_0%K-(R71k3lbH| z>3hTMELjxrNH&$0yk-t`bH?FUOtgErJA6SHdl0iqO3c91;!t%q_~!WH8#ke!TCYZ| znMwlqHQb)dp#9+3poX~`#n4AAg_T}!oXL6!KPK+11AB{{9*%s=k$Yt<)0H|GF7F#p zvvce#r`09Qk3?fj>04XM(aGWkak`j$+1_?MlmXhkTapHXQuS(kaFywzV`i5)hVpA- z94McEJ`W9l3WLx0N7~hv3TR4tCGO&K<6Md|F0%nH=hQwYVDJb|*Ta#mUJDOt#yh_g zUEvj3_wEAZIclx8q_+)N{LQx6srT(`!)tdcf2{6v{@r7PS>{;ij9+x(ipNO2@@I6z zKB^3p@PT+1PM}=cE5OMvu&H&e&b`XZ5&G2}llJ#+#@uA*NqhGG4rL7Gluv@YWn~ z!K{SL!Fiz<9OIRd0Y;V5h;R{Q=PmDy`{o!k$LrfgFJZ-_ozHJ`*Jh?zRWk!dMvPw+ zk8rR7$H=!XGO-)O?bfZveciQ<-R)S_>3}ER9kPW0&#+Ve;wa z@W3{3cDm8}$0V$U_0qfAN4P+z2`GB9_Ohq>9?yd*IRxGC&d0D_RIZvLV9Ca}E~Eb- z>QP6+T|hk`+9ooDR@&SYIVvH|xHt5WwIi&ecF$_+oZ7^Qnuddxk&5aP6;(1%?*pp; z5g4d0{3msVig^ED)L6&jzJvi#SL$q#it4|im#E%Tpi^Rlg^?7Z3d+XukNQ8MIQkwX z_Wz;A_kjkwI_4IV#=8HrgnyOanR5sfaipd?2%)87{eN)Eu{in{W$)$d>Ea3XcMb%5 aNV@p=m>6B8`$t1dSz0MaYbR>T{=WeAMvz(n diff --git a/native/dispatch.c b/native/dispatch.c index 931a79036a..71fd0839bc 100644 --- a/native/dispatch.c +++ b/native/dispatch.c @@ -21,7 +21,7 @@ #include #include #define STRTYPE wchar_t* -#define NAME2CSTR(ENV,JSTR) newWideCString(ENV,JSTR) +#define NAME2CSTR(ENV,JSTR) w32_short_name(ENV,JSTR) #ifdef _WIN32_WCE #include #define DEFAULT_LOAD_OPTS 0 /* altered search path unsupported on CE */ @@ -98,81 +98,6 @@ static int _protect; extern "C" { #endif -#ifdef _WIN32 -static char* -w32_format_error(int err, char* buf, int len) { - wchar_t* wbuf = NULL; - int wlen = - FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM - |FORMAT_MESSAGE_IGNORE_INSERTS - |FORMAT_MESSAGE_ALLOCATE_BUFFER, - NULL, err, 0, (LPWSTR)&wbuf, 0, NULL); - if (wlen > 0) { - int result = WideCharToMultiByte(CP_UTF8, 0, wbuf, -1, buf, len, NULL, NULL); - if (result == 0) { - fprintf(stderr, "JNA: error converting error message: %d\n", (int)GET_LAST_ERROR()); - *buf = 0; - } - else { - buf[len-1] = 0; - } - } - else { - // Error retrieving message - *buf = 0; - } - if (wbuf) { - LocalFree(wbuf); - } - - return buf; -} -static HANDLE -w32_find_entry(JNIEnv* env, HANDLE handle, const char* funname) { - void* func = NULL; - if (handle != GetModuleHandle(NULL)) { - func = GetProcAddress(handle, funname); - } - else { -#if defined(_WIN32_WCE) - /* CE has no EnumProcessModules, have to use an alternate API */ - HANDLE snapshot; - if ((snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0)) != INVALID_HANDLE_VALUE) { - MODULEENTRY32 moduleInfo; - moduleInfo.dwSize = sizeof(moduleInfo); - if (Module32First(snapshot, &moduleInfo)) { - do { - if ((func = (void *) GetProcAddress(moduleInfo.hModule, funname))) { - break; - } - } while (Module32Next(snapshot, &moduleInfo)); - } - CloseToolhelp32Snapshot(snapshot); - } -#else - HANDLE cur_proc = GetCurrentProcess (); - HMODULE *modules; - DWORD needed, i; - if (!EnumProcessModules (cur_proc, NULL, 0, &needed)) { - fail: - throwByName(env, EError, "Unexpected error enumerating modules"); - return 0; - } - modules = (HMODULE*) alloca (needed); - if (!EnumProcessModules (cur_proc, modules, needed, &needed)) { - goto fail; - } - for (i = 0; i < needed / sizeof (HMODULE); i++) { - if ((func = (void *) GetProcAddress (modules[i], funname))) { - break; - } - } -#endif - } - return func; -} -#endif /* _WIN32 */ - #define MEMCPY(ENV,D,S,L) do { \ PSTART(); memcpy(D,S,L); PEND(ENV); \ } while(0) @@ -304,6 +229,118 @@ static ffi_type* getStructureType(JNIEnv *, jobject); typedef void (JNICALL* release_t)(JNIEnv*,jarray,void*,jint); +#ifdef _WIN32 +static char* +w32_format_error(int err, char* buf, int len) { + wchar_t* wbuf = NULL; + int wlen = + FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM + |FORMAT_MESSAGE_IGNORE_INSERTS + |FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, err, 0, (LPWSTR)&wbuf, 0, NULL); + if (wlen > 0) { + int result = WideCharToMultiByte(CP_UTF8, 0, wbuf, -1, buf, len, NULL, NULL); + if (result == 0) { + fprintf(stderr, "JNA: error converting error message: %d\n", (int)GET_LAST_ERROR()); + *buf = 0; + } + else { + buf[len-1] = 0; + } + } + else { + // Error retrieving message + *buf = 0; + } + if (wbuf) { + LocalFree(wbuf); + } + + return buf; +} +static wchar_t* +w32_short_name(JNIEnv* env, jstring str) { + wchar_t* wstr = newWideCString(env, str); + if (wstr && *wstr) { + DWORD required; + size_t size = wcslen(wstr) + 5; + wchar_t* prefixed = (wchar_t*)alloca(sizeof(wchar_t) * size); + +#ifdef _MSC_VER + swprintf(prefixed, size, L"\\\\?\\%ls", wstr); +#else + swprintf(prefixed, L"\\\\?\\%ls", wstr); +#endif + if ((required = GetShortPathNameW(prefixed, NULL, 0)) != 0) { + wchar_t* wshort = (wchar_t*)malloc(sizeof(wchar_t) * required); + if (GetShortPathNameW(prefixed, wshort, required)) { + free((void *)wstr); + wstr = wshort; + } + else { + char buf[MSG_SIZE]; + throwByName(env, EError, LOAD_ERROR(buf, sizeof(buf))); + free((void *)wstr); + free((void *)wshort); + wstr = NULL; + } + } + else if (GET_LAST_ERROR() != ERROR_FILE_NOT_FOUND) { + char buf[MSG_SIZE]; + throwByName(env, EError, LOAD_ERROR(buf, sizeof(buf))); + free((void *)wstr); + wstr = NULL; + } + } + return wstr; +} + +static HANDLE +w32_find_entry(JNIEnv* env, HANDLE handle, const char* funname) { + void* func = NULL; + if (handle != GetModuleHandle(NULL)) { + func = GetProcAddress(handle, funname); + } + else { +#if defined(_WIN32_WCE) + /* CE has no EnumProcessModules, have to use an alternate API */ + HANDLE snapshot; + if ((snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0)) != INVALID_HANDLE_VALUE) { + MODULEENTRY32 moduleInfo; + moduleInfo.dwSize = sizeof(moduleInfo); + if (Module32First(snapshot, &moduleInfo)) { + do { + if ((func = (void *) GetProcAddress(moduleInfo.hModule, funname))) { + break; + } + } while (Module32Next(snapshot, &moduleInfo)); + } + CloseToolhelp32Snapshot(snapshot); + } +#else + HANDLE cur_proc = GetCurrentProcess (); + HMODULE *modules; + DWORD needed, i; + if (!EnumProcessModules (cur_proc, NULL, 0, &needed)) { + fail: + throwByName(env, EError, "Unexpected error enumerating modules"); + return 0; + } + modules = (HMODULE*) alloca (needed); + if (!EnumProcessModules (cur_proc, modules, needed, &needed)) { + goto fail; + } + for (i = 0; i < needed / sizeof (HMODULE); i++) { + if ((func = (void *) GetProcAddress (modules[i], funname))) { + break; + } + } +#endif + } + return func; +} +#endif /* _WIN32 */ + #if 0 /** Invokes System.err.println (for debugging only). */ void @@ -621,6 +658,8 @@ getChars(JNIEnv* env, wchar_t* volatile dst, jcharArray chars, volatile jint off int i; (*env)->GetCharArrayRegion(env, chars, off, count, buf); for (i=0;i < count;i++) { + // TODO: ensure proper encoding conversion from jchar to native + // wchar_t dst[i] = (wchar_t)buf[i]; } dst += count; @@ -725,13 +764,16 @@ newCStringEncoding(JNIEnv *env, jstring jstr, const char* encoding) /* Translates a Java string to a wide C string using the String.toCharArray * method. */ -// TODO: are any encoding changes required? static wchar_t * newWideCString(JNIEnv *env, jstring str) { jcharArray chars = 0; wchar_t *result = NULL; + if ((*env)->IsSameObject(env, str, NULL)) { + return result; + } + chars = (*env)->CallObjectMethod(env, str, MID_String_toCharArray); if (!(*env)->ExceptionCheck(env)) { jint len = (*env)->GetArrayLength(env, chars); @@ -741,7 +783,6 @@ newWideCString(JNIEnv *env, jstring str) throwByName(env, EOutOfMemory, "Can't allocate wide C string"); return NULL; } - // TODO: ensure proper encoding conversion from jchar to native wchar_t getChars(env, result, chars, 0, len); if ((*env)->ExceptionCheck(env)) { free((void *)result); @@ -1816,8 +1857,9 @@ method_handler(ffi_cif* cif, void* volatile resp, void** argp, void *cdata) { case CVT_ARRAY_LONG: case CVT_ARRAY_FLOAT: case CVT_ARRAY_DOUBLE: - if (*(void **)args[i] && release[i]) + if (*(void **)args[i] && release[i] != NULL) { release[i](env, objects[i], elems[i], 0); + } break; } } @@ -2036,7 +2078,7 @@ Java_com_sun_jna_Native_open(JNIEnv *env, jclass UNUSED(cls), jstring lib, jint handle = (void *)LOAD_LIBRARY(libname, flags != -1 ? flags : DEFAULT_LOAD_OPTS); if (!handle) { - char buf[1024]; + char buf[MSG_SIZE]; throwByName(env, EUnsatisfiedLink, LOAD_ERROR(buf, sizeof(buf))); } if (libname != NULL) { @@ -2054,7 +2096,7 @@ JNIEXPORT void JNICALL Java_com_sun_jna_Native_close(JNIEnv *env, jclass UNUSED(cls), jlong handle) { if (FREE_LIBRARY(L2A(handle))) { - char buf[1024]; + char buf[MSG_SIZE]; throwByName(env, EError, LOAD_ERROR(buf, sizeof(buf))); } } @@ -2075,7 +2117,7 @@ Java_com_sun_jna_Native_findSymbol(JNIEnv *env, jclass UNUSED(cls), if (funname != NULL) { func = (void *)FIND_ENTRY(handle, funname); if (!func) { - char buf[1024]; + char buf[MSG_SIZE]; throwByName(env, EUnsatisfiedLink, LOAD_ERROR(buf, sizeof(buf))); } free((void *)funname); diff --git a/test/com/sun/jna/LibraryLoadTest.java b/test/com/sun/jna/LibraryLoadTest.java index 6fc8c7427e..8c00d95d31 100644 --- a/test/com/sun/jna/LibraryLoadTest.java +++ b/test/com/sun/jna/LibraryLoadTest.java @@ -164,6 +164,31 @@ public void testLoadLibraryWithUnicodeName() throws Exception { } } + public void testLoadLibraryWithLongName() throws Exception { + File tmpdir = Native.getTempDir(); + String libName = NativeLibrary.mapSharedLibraryName("testlib"); + File src = new File(TESTPATH, libName); + assertTrue("Expected JNA native library at " + src + " is missing", src.exists()); + + for (int i=0;i < 16;i++) { + tmpdir = new File(tmpdir, "subdir0123456789"); + tmpdir.deleteOnExit(); + } + + final String NAME = getName(); + String newLibName = libName.replace("testlib", NAME); + tmpdir.mkdirs(); + File dst = new File(tmpdir, newLibName); + copy(src, dst); + try { + NativeLibrary.getInstance(NAME, new TestLoader(tmpdir)); + dst.deleteOnExit(); + } + catch(UnsatisfiedLinkError e) { + fail("Library '" + newLibName + "' at " + dst + " could not be loaded: " + e); + } + } + public void testLoadFrameworkLibrary() { if (Platform.isMac()) { final String PATH = "/System/Library/Frameworks/CoreServices.framework"; From 897b318324832471084e4966fd0329b551db9465 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 16 Jun 2013 20:30:02 -0400 Subject: [PATCH 21/21] update win64 natives --- lib/native/win32-x86-64.jar | Bin 77322 -> 78415 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/win32-x86-64.jar b/lib/native/win32-x86-64.jar index 60a9c1c961ca4fbd9263a4ef6e040fc50253afc6..1dceea09784b5d179df606c9c100578f6137061d 100755 GIT binary patch literal 78415 zcmYg%1yCJL&@E2z00Dx#dxE>WySux)yK}LNyIXL#1ig50_lpL1=jZ$D)q8KYS8C?$ zcAe?z-l~}%C0S?~L zXu$oTPk7bm`R()gzfgH$1!)O!RW&Ag2}p>q|J(lGSA+h$d=~q-2E=}rZx9bc?>q7C zQeNWpM;f_2ZglN3c!sQhyCWzFpC8InP=9%j+(m4N(N@C`fw6lVMo$4O80FrYQbxSb(SHA-1?4TmfId_A27B_b*Ga z!ZbR#+#8aFeNr3k!OK~fPjOBK>K82<6v!O?doLgW@^P`W@q;wf&ZHR zEB_1oyr1^?`l*UP3kD=peJx-YrcvvFt-#wiftfEVpl$ummKIZ#7OSDmP^3gURJDyg zCu19h4Kws_*WO%Hb4I^qyGVQnTfD8JYy70@uGQB>59h*b(lhTcGxO&mxTH3J+A=Wk z%_}KyZQ>??$u-~7V(fs;mOHDgW0^U3u^Bu5J-qq+!@Y4!n7oy^!^ug!GW_3<5q>$rOd#!bAg|M-1)^>cIJA6NI3PICcb zF9OlHEc@9mzK^wM-pgs`?nZ!pYF~a+V%emN&8qJ0`D6>K{LPMiF7$gp|I2BFV3za3 ziHnr>sbK;Y6khs-Wv6|>@5;BInsY=QbCvSJ>1o`n&_X1s#b>-)$~Nu^8sMYg>)Ma1 z+*J+B`{}*n^m&PuyFnM~PYZTU7{A6MviKC1)zVO9t+ILWkH~Qiz9*I&>3B1~ z%#HP?H~lM%bE@5|rX?8znJvIIRy&9~u3VcVE%Tq0B>#Jq#P=Cz>hPmQItsav)6`*p zOg2T~WbC4P{|G$klTwv77H&U26)|k5RXIW!5nx0dkwp~UX~#~GL=-(fkiZ`Ea`!OK z*i45XV5kx#(A7R#D#8?t`qBjyWf4Tvs2$#C&Mr(v81caBsULZ+8|15P3L!RvFC$gQje& zT|=d1$T2!SIxC2TamoY*hWR5l0n$#Z-#4d^Z#5);z-`4ZCuW;&RSX8m$NMu6D}=*V z%jqJfX-=rge50$SOY0CD;x5E82tL}0_PvE?cDLGD=n~?zAk;aU8)(3s@eeHE1in>MF3HzwF#FY z9&cB4krG*EcG%YJDW|(F1^gTAi9Z!Eo;ZKQX6nC~^6)pXyE}x1*D}Ns+i4ZUG)f!~ zYJ|!-`}jv;IVQp0kU%#$%^A30ExWArcUUrE5HZCy5wKvgMcf>iNF? ztrhM)SVC&SFiAX+R6H>AscTHiEp9+ZLqZVY*;L$>u=|#ydt|6)f%umQYb=$>Zq*j@ z1rEzpzwg#kx!&$}919s~?ST?dE{k}`tno(Kq)kWgxyy~m9XAvSdS6X&ST}=G5F2HZ zFH>JLK8nF8{SwMp{!xW@@}-%+xqj5$!Um16DMXz9PuQOl6w)&{*I-=>cqy1^)|3(n z^RQnn5elu&u0UIrsXb<4ZgMh?Se%`!Fz#{TDVMSui5fpG;}LlsdU?DZD#nqD*%ExE zx)OkIfJ{00l|K~qEL)eB)7-vOFgK8v8E%OV%4gbAw;hp_f z+1#YDfwWrBU-4%qDE>!r6(d~RxUA6rxJr0hScQ+N)KD{v8%uEU#4R@5DwfVI)L$L$ zC7p2P9oAIUKJiqK1eGbbrJQ0A5i)1<;P7~H1QiwDXFY6F1(vR#^POzm~XL~a?V*`o{I+Pljfk=VA9(|;2F zjxFv+!QqOtpx$$yZBtPF*95f^b#D(@OG%vx{Xwm3bVNHDBKUCiX1&WC!mQgh6~Nm!g@MtjQQ05^YUYRT(S5e81%_23 zvUGXpqu$xOU=8bsvu=z!n5ZJY7_k5B{;mF90etq#lAEwp=Rhy8GnzGn{w zq@8*az2r^>q+dVCF4wI+vk9$4`%p4m?GryxQeGK#cBo@YKRMY}$a55CEKEUGpG~1> z&VQ+Uh&nMhTvLH9rA%K_dMlDtBYx@!(k+v4Peh!o*7=Cs(Pk^f(JlX2IhZJUzB%MC z>|8LY11KeHt}1P8kyp8%dWXZL6PSp)XT}fzsC=J+%T^A*&Gwr~l6Ied&r{;x+SCCM zCd=AarE)FvaSgVDb4um|)qj;FCcMed**sFs5W@>^C3ZU`Z=P|s$MehqfTznYIf=M**fl(-eEi4?OcTW1b zr^glgrbh9Skj|Kfz6jfbd1UC^Sf3&R|d2^&JktGO0Mp-s9`Hs+W1qd%|Q zEVS;&ylAbtJm^JoG_Z3^jyA0MchgRP>yjRolAsUtFGerY$MlCMk~<@*2oG&DMxxu` zfBQ*2n=E!K*;@p(hHaJ$#jUkG;_6OZ92LA(H8`QEwVXj9v|zC*K{j+mkFq92H*Fze zJc)E>G%<>htmE4%G)@c;5zC_E3t1do;wC-%o}4g}h3V}bblfT=$fCJ$X8!PF!+Q;2lP5l?(=?NvL_TnVb_a!D~CcnVCtfccC zX9Z|Tj>W5=J;AWVjh?;Rj_)gM48s#4AXrU?=BfOKi=A>$Z zji)J`YAN}W0S{?gyrQkeT(P0Z!0xTmF>IPby<#O1XD-g5D$?^D&7B(gRT5FmaQVfq z#Hj=_`WT`&!Oo51W)g7rF$Tx2ir}6^sRl{j2*52+`s2r>qD8}c^X0}G+srtHyko^0 zD&8{f2AOhx30w7v%j&n%*<4b85Q+r^%SaY$B8cwjSf*kDsPs;7N}8AkVEN9WA#yJ& zbTC!)QY+h1H((zZ0?a7&=XfIW%?sblU4rFieRNB@D zBru}t*v;oB?HD4HPa=7O1=uafQS?pFJu8nvOoVQMAisa7Oxvq`-al-Bs@Exekki19 zq`T#KCxKrTa<9C4zFuj>pc9T03)mN}p?bb#h_s+{=@VQkGco^*b*=cKZ=` zjI~85S0}rD$697a5Ny0JAV=v=Y&_!&9%)R23w0YMAnJ4}^ppa@PEmc(Xc z8^yhX-h%t)vc+&NtLX|xlFiL#r7rfARoAb9$psRMbS=_xt0`hGI)*QS zsFn(bnp?f+2D{>ponDP$7i%L-A7*L`0MCM41DLZv83HH{h5Al$o|CqC`?+L5Pl2O? zZq=`Y-8aWGWET|c7inBAU`JBBe!|F?uH$!(c0ycKt2MTByfGj~O3*CPeK^|<&*!UD=le1WyMtdnGIY$?~CcOXzvqBg1pqJ--r=UL}TFJF<8QUo95GBkK z${ZfmvSL_6vZtbEl7BtkgJ;^flqXQ@-rf4(Rd)9QLhCOEP?|9~1M(=kD{HMP448W; zxu>LynRD|H0q{GmDp~b5^!vFx5vU}PaLW~Y`cMX!9h-2MHd;NGzbceJWG{dT9SpCfed z%dhe|3I46u8S*5H6V8pgFDm`}LB_PH|5tqQsw}GXJ?{_UWwuGU5B5KA)fzY_NNf5b z@4ssKUe;d^C}l&P)z-nY1)R?IzpC~zum`J-=}wv1=ZzIz;PslbaCczM8Ay%`CKnP~ zby%`{=#Uyxn^|FKM_V*e(!MWG5eJt$&HcUyKfI~g0h6w`AouLVXdoS%{g^nzH(q|p zFB6yyyr}U;+K-(nJ^EaOiLTs}(&{|lXRr)q<%}g)FJa%XfT|C)?UeDNYgkix+?A3! zEe|bD_XE26&aLy`?k%$GVL>Z%be2f6S#mXL4{>j_3cdl>R zeilD<9=g2E6FGb5!&S(!$I2DZHwBrP_^b-BragRNWpD7pmpg9waeR!w@Wc8+SBVP6 zH?Jp-ZIT&H^lDyBCsl9kHskbGE0z1URREcIFCmA4RO{BzW@`5 z86^y-S+y&iT?)g}*Y7|xNo;U0STnmnRu_rvlBygF&oclid&vK6g{^oI*%&$B6`DnF zOl`jx=n$K{?LBBzua6;h!i{Ugm9k$jJln8oDLWEU6fh+6+y7K(P`3{`q>Y`;HPOXm z4dh5Fr8;1N*37cQ?ACr{0sqQ)`Aa(j8v8N9y$icfXyeykwo?z3T&hm}*$A#`<5okY zmbfhag9w`qNFTKB?Z0>TC2N&%4WtWM;orEjvZd`k-9)SSk!Tg+DoZz#PCz1K>B3d@ zyecn^06GxKoo6k+O0Krl(@&|5c|ux#q{^T)H5;FFw|mP%%;s5RMk~464C1`_(br3f zxWh=B@?qWCXq}=6G1lzyoWRot{?Vt5Lf-yZLrdJwICEW_e$I|(OFxpRIeqc7fZ5#e+GtXJP^>(^M^%B|;42_9QTNZ(0OY&t>I_Bj({GsO8E-Y|rNi6{Em z*zKU^|qhD*Zt2`j=yVzE_3 z3wzrQsM@66VwvjLiC5gd%0kz8wx3Y2;m&_i(iP$V9j7;}B6&Qxp+uQFB+HlQ4_m=!2#AfysjUHSe)1VEBq<=FN!SH|Im- zMpKpT3|yIYADO~t&-(KA86sBhBs|_2U+y=gxfH;oS6+G!Xdg?lOg;Nvk>6v2lA@aW z8x-jW`h_)l;KrR-VA>BtG%~eVPL=tu?(A0~>Q~2{6>e!HFAOi_C;5DmqEYiFN0d|B zozfUL;rv~`yP*BF8O;w`-4UxL@VB!aF24!H`!~P)a%)*m7kbZJKlpGZQ(gvN{u}Vt z-M_kQ+8f}LQ zUgdsqNLu@I>!$WXQM#95^zzYb`ooIZl(4GgI6WA|r`*3Uut^cjM)pl0dSr_-LU6D{1!Svo+6>HEHn8`HU=2;x;%rSP7#KhA%7hV_H$+c>}`#5*n`S_P%&3xmyXocYY z>D-Og#nVIo^wiCxFwTF2wz$C8JPyh{?gwuW-{PXGIp5!M{@?MU(b*~5%Jd0KehS;6ashdR*;s-pGQ2UKlmg*#y_y$su8=2J~m#KkD3e{ zH^`sMJ)}SGA3mt>HIIo|JL#WOwm7rrZ<%91%wbFFCi(oa8eZh*(U2S0ELJGN4kPk@ zlmUd#nnEJ6<3nIyJa*GR)t&X~ySjzY#tl+z75RbH7S7i#3nM3r&hK330(+$8%ku^6 zrML#f#w(x*^F}U2XNqS()8>};{Gj)avTvLLwPg>3i{LrDJ3;L$<^H1n0%e{P=s)@{ zO<`(%9G$_aV$wP1qxh5gQ^foPcB0t~C4MXwvy$G>Jjh*Qk*Scd%~{2BPt&NbHYTZI zwB(z=y6#2uyVA_h{yD!!+~h2i#5vUbTQwd2l&kFd)f@$mC zR8Yffcz|%>-xrJft{^{k*_7PTOwun^Pj>b;F1)=WR3J2MUZTwodBR99b=b!4XHlr_=m>G`G5q~|c*ZowoFAjR4bMk& zVZ@XreCF7aKb2bVH*S*A$X5gx`q;p~-<8}l4Lt|sb!jztDy4X~{(Koi}Fe>1mDvY8w1_kqEmF)37fhydIZB*dH>|7C@4bhKaZI|ia z`tmH6UQV=(&o*5^@(jLlB_g}DN8>YHlXcscmp0C!NeZy>nON!dbhU(aD zc0XsZ*z#rS6iLw$#Y_F_B?Q=B~>m@!7nhfMa zvTuM5oK$Q5!<|AwZnZ5UppAxib5^0;xT0QyP5>mPzqV9hPdK~k#mv`~m4`Cj`undn zJ}}i;DAo3*0<1Ov28{KI$7xbz{i`Fyu=)c38%4l<|j5<)I+bktb=v8#kMx^f+48j+!nYr;--f)wqWE$pF;l zyztH0CEtu%4uVWh_e*FTt29(5AzMNM7Uz_3vCv!9&|A--JEH$~^#Mh~ zyzDj3Fyd8Af4hhpGuBx-Bjo|lzzj?hnun70&hnYDkZl4(M6_2*b#DOqga8027bN7p%qGVeGFCgv=6c7Odr zjL=U5K9@UO+UJcQ6F8CMR^_d*phGfwCQdjOOr?BVYcrH5I&nct(8(zQV2N^X`NC-` z^|-TF(YUu9t<=1bn~BH{a3B#qQfVTj%1Ak4xlkHP1s?hGF3o=6zgNS4%td`PQGED* z{B?czP0*yg?5z{;4#2qR|3EYd|Lq%cX;6XXl`nX;^}G6;S33G;3x?xeAZ(r9c05^k zG)7$?VO~S;;Hu#v7o=)Ag_Li&@PWORzBfkQGg^r)l?kMTx#pC@MHA6wV;xUJPZ=|D z`!*x5pdBdmwOj`<`BEps@!^$bbkjJJc4l_^mi@u`T#5OdDgGOY;_^`Uqwf09=rnxg zVA^3#lzNj1(O$46NTwyuBMDfmKmX;dC;;f896ZZJ7nP1JL~kkV>5sppS>}PBR=Uje z900jL7wf%d@?u(}@0LBo6axEUU)oW0G&NMjn~pV`BI~LdACtasLQmCLkk;bsQm77X zf_IjuX+L^NwvnhD3PQsY5f{FP zoB81BvBx^Dbwp`oDUmq%ko>@Z3XJ{jD-h%5C}#ftQMYZ6;kESDKyP>B<>doz(;}EN z_);OsYvfh)G7EN-dK~>Cav#d^ki69kSA0lTDFD0e@4bSO1Vuq*`p@LL=1m1RLv1E1 zdmMf;4V^we(_!RVl(*=}h|3kprdJ?hNyy$#UESL2Q#HjQ&Oz%1zol-~*s^K+mBuJ}bbmyRR*hFdI;goL5j5axT%x$)=B7v5=%;J_7c(^V!ThRLXRLSf6itk2-@mc*^0 z0o@U?7Ypy3-N7h{pfaE@541%#y0r=WRC5nfn#PZGdM-zQ>qveF|2ndiHWTSQv@CV}&<4_zWZtE8|D;;uw1S_K)F zpcxq6Wmvjt@SD5G8^NX1JDP@USXRMvAT}rf1TlU9)vC_;<*9YaxKB_XcsWgIhcDpz z;UEyuZd7ai%Azn3A9oL+H#*&;kr{A6J%VY2KAfAL$FU1b@?MAss)sV%SajR~fb2DyF=! zVAw79guG^p2^dP-cM^k$fx^8XSW*E{aFZW92Kd(l(J#Wuz9rcpK}pKKo29r{S$N&i zY0_&?jHj+skf1!6I0fuTa&1rd6dUwfiVHR*y$;tp*jH>J-+HyB*m|@T?&VBN*`Y*y zA|ScoUe3~&O=U^dzaUrNa<0qLU)rR<(NzbY`ea74=P_7dHvAy>Y01)0+#7AmvRtys z)35gOs7*$=O)P2fREvkbFeW2h+p22lOBog*4ef4Nq3Sa5L~Cr>B}!8K)gJl1GVQ5E zW0bljIerTh|3hu%@oXb5UeaHKLx6^>o>WMVqF9A-}K=H%_}qIiXz17+FZU+vfju| zE?;CIW9*reDB%{f1ETlnV;zezsqo@d=ElyCiQA-+)siO}XxLs;a|%CSSYjQQj@Od; zHzRaBj!>zWEOAKZ@ia!=f~fG59LP;L@n;??$rc>QlJ1@V6P|V{LY0yfsglwvDdP2E zv1d&~TcCkld{e^zepJYI57TC&;{wWA?8!LLlfzi8*j3q ze-}v|=F_MR9zD#pqy<0_I5u=sDa5ms@cPh3_QdRf1)eU}d*V%djcxmJ&HT`i9GD97 zjeZT*wFhk}j&-Qg9Ws&$N-!?qKs^ol*Nh%V#SM=RuK{#+IoP@1PB=1&c$z56pW0R^ z%308naA(}vxe2}TDXDX*Kc!qDFNeq6r88d4Mw#7XT!LzrDp9>e(8BC_PD*%Aj@v9b zY4E`k{n)6B;2JafwuN*SQoY2pLkhnAKY8hpdMTAMl`dJSlB&hekYc`Xr3(2;i>@aY zy{(f{=8d^s8V_1*!WS=n085y_C}bAPDCTg&+imkVvQCr{3g9ktRko=&HT_`o4N|#( z*HxbkaH>{|AF-}mS=6;>dtpKE+KM`NrOVRyrAGj}Viay8j!1Zmu27p@GoeIX+DX%ep8;!Uq9fK~-P z+O3dIg(+%&%YNb1kIo|u1jkKux+p2Za_4|MB$k;)asUn?$^D=y+q`^oW)gAyv{d%>UD z`rLKcU#?7IEwo*~A5pFg{>I6Xm2RJV?Ty+v)H?^GKGhiPKNx!mW^4_RJ(IrnhHNBm zKct-ou=Ul2u*1LhW^E+yJhaqff4E>YCM=4-c`NaUk8 zP3+&T0PUZ$K{x84S?%${_U9Ci9%+z*B(G?{T($X?ZN-CR8b37mhq1+Ypafqdd@Gnc zR(a)IGGcL8#o=u%+gM9oK8)IwtY&1I#U-LFeH3tCw>{2PU>FvMnvRa~6soRJ&Z?kV zKEv~X;^?3*b!^KKl5gIH$OMcuEAVLFPDK`giW_Ldd^noxn{j#z{%H!ceA4Nv;dNL3 zQb0ej;i(bg3;#>RDx%H4w0%xk*BUa9^lSF>*rZYjTeoiD3GJ%`aaY|e{f>Zg@}7|) z{Yv)OuMPieUb%AttQ{|FEJJEljmesS66YXYHRcnctq+^G%!@xN)pX5AU$g3jC1+yX z-n(d}Tv6hkSWhj3C9p9Gp#Fj z)+X+PND3*f+ULnANA{P4KKgYCkymlcs@@e>2RldmN|)!OHZ0{rjVD=|-xvL$<4NYU z+EHw4#gs+W?onP5kd19Lx{XSW38f)cLPkC)nl1v4s6C2ia1;K-!<;PUF|-X zgN|71vE-Ss9_34oC1~Vi-%v?Kioc00L6SalB=pK__Ug}vRZd9CJ)yjZNgWa4C>jZ5 zKUVd=BPqRx>Mrl;4W!VI*XWV;5ue6I-?$v4*rkt_7DRX7j%HxIepj1-kIl=uy-UcO z==bvaE|B?nC+`>NY-(&B#(|Gkk=n^K%DDEL?Gk0MzFZs1hxXIspAeFbdc}H@I)$^; z#YWUW@pX=0c)&L&W7V|~st3bF&(+7gfxhK=`w>y!KjN120W16ORFH4#|0;PGpG2@h zmkaIQkmETd8t;@Jjk)#{e1XtK_BsVC@KayVdVi!BxrC%AyM#O=AgqN3Hx4PLPJ&U5dFo^K5w2)enam0%Nv?RjZ}_>f-ULEQC)+5P<54xD$RW#Fw>N{ zY{_i6_lrs3YZ`jC7qRU`D*3cq*mwg~o~6kAmVa8us%(yC+w&ZY;}!5Qs_fuSwW0yS zu>yUo0ggW8o*iJ6F7knYZu2~foR(FZ9Ci5N6E7mtyy-|mw}kKPyzu3;>)fDmxRQ46 zK}KN0Jgp_tIn|BO+Pqm2u9$i&=%A$5_;@B$YNUsv$!b~E!CzLmyGqbqLaA9g+MUtDs||LuR{HgXCY+L^B4q)r4b6PQo`bKQ;xViMYSo`T@7i8@*%Nu znyGX>joCaX(2gchH`1Y3MnKjK= zgREubf-GWW)VNLVOxEXHV-1OmEIaet;eWJ!26Y}A#Y^M8p1EZn8z=#m`i=t^YGfWY z=sn6}k-uIp|D|mf>p4vErtc1#nhD}83o2Qe3o?hkk(LxfR;%A{R8t1HV&4naG#P)i z@KD^V4eo9|v(-y;uq59x*e$JnFcX5sTK#Kdm9}ORhp>LDg%UkB@ zIz;3qXt*t({O&7u{Zh974_F`s{g>@ zJ!?z8*Nr=3q?M8g zaeSUyL*{jg;ge6Z@rMps>w46$>eFf6V>Y;BHQcww!S?uH`klZKT#Hf4YQy)zUgG-0*`MLoqG!K*3vbuC)Q z1q?l@BPaYRiEp0wP01*Az%_1}@0He&B~*wSkO!(TsoA}nH&G4V( z%y~@pMox2kKjx$ij~sp-pHfMoE-Wo0e|Q?NJ6lxQ_W(Wv#QfLHDm77*{k6sXm#0+P zFdDMsj$o@QG_S<8e~UA27sV7x4Hi9{ku|BgXi510n6ar0)C-MrG$__NDYcEu1Tvfo zI>n>BaAG#FOWX#H1>CU@1_U(`Z=b$!zr5Q4pVwfT=Or=!sz@5l)t36`o0?Ykw176w zbrw{n=Vc5+wZ(dR7A59=$XaKk3`$~rq#2`i2E`e7i{Lscgsm${W8n zhSR=|^@z7aAbCT1{1FxWz~s1hUu2WxKO-y4%FMmLDmQ?a*BhXxZRH+tO{>Zp*QL!T z)24ENJWfCbTX|Z~g8bwg8OLapg9{%)YurOpd&PZ1q*0~r@DJGypkvGYYQyK)^`j)a z?@?*_#xUOG{)25fuzEG(4d>IOsN|iaqnDfu-HC%MZSFsso90J8t!Wr1EUT}yQCnK3 zwx)H$kMZe(RlrsM(wY1*vJ+9w)u_(As0}MIPHtkRzT}7UPmNQb8p$)2Mg!66b!_Ip zSC{setShzHR3b!F@ix_8G&Rkm$tEqQ%f`Q_j=c*4uiw8}ZY{1%PN_5$|5cfkEG*?< z`t*}=;HuUMGsQ{u0#zWU==|H~kX=)lmmt%y{M7Y_aW}frmYS8;bOSI2cfUN`eFe3RsVCt^@TuS|P!r z5KouF8lYO3juaBXhEM_zT#*AqDiT*_au6U4nHE5bpp6C)#|0pSbVrgf*Ej7e!*I)p z5cQJ|VEm{Nil790Lp+(}VOS2w-EF4OklvI!}N4PiLHvIL-DeU#pDU5Fv^*VztjIU8f=(+k! zql$=*tjn`8O8^{2# zJOIQ7F#tzHIugUaRFY~+vlb|AMp86b5dII6$gg0nknXNAxJF<}4N%2kth6Q#(1K`I z8}>SFjO-!=2M!+i+K47hWDfttD*cp@dM(dno*P!9O7f2a%oMb~zJ%xvA~{JRi~vv@ z+CU$de0%9hy>?|XFAlR)Bf+NxFF7vOI=M3RH)*NUuJKL~%0cRgzSsS2YSS zfU_!;C#jN0TZ-&T%P9+*LJ*Nz?t=ePzHnz+bAv~00&sI5ON@l2P9&G*?5QE!%O_sWjbPISLjG} zu|OIK-mF4CKS&5E_PJr6EO}`KNofTED(|_nD@>$oSRfCC6=D+3`$iEWITchAP=g0x zgjonwjPnIFfb-QXGVD}|gqH#=Tl^hdfeea{Bs2R*6Sm&^`&TaoNFU=G7qvrCFA3SDZ5;7wI;pwWgF@u_?AwbmyA@D>W@BO$ef0!MOdfcQ(6e}r@o zmuU5JmBx|CQi8vsBETozyqhOLMn8Nxh60@+gWO@B;)zL_TSEQbMZ(qt3WNM!MK=3V z0YtE~GzOz zo@u!2_opx3hklS90Rk6>GN1w|+*ANDvL#^JMg!D`ZZ_f+M!>NJ*O>fGmlTUPg}zlv z1e+G%WjF`_3W+;2k6Ryj;1pUDaPjZRAP_zty5Fe)o4=orz&+P`8}RD99=kjqU0eT0 zLE!+7x9rW`X^eD-Nr=PRT4~3xGqP0p<#2|d0R?Y-YhboO=A8%#m&>1iZfvbY7>Fht z>T&f@&sGsK5)O+c`t%9Ap4_*0Kv`KHMHx(o^Zyaqrhe=UiPjxWv;|JgKE6UEN@w=K zV@qs{Ke{r^`DQ3ta#L4(>qU_`zJy+T82rRj)WOGMD0xf$-jYI8e%YPs5{n-B24?CwJuV)hG({p#ldp$hp&; z*4WO@d`GMHz$`px$AZx+xcrXgO|xsK=~8Etf2H!+u*F)(1sO%1c?i8}0Q8UOX5`85 zkSVYeH$@~H|GpwPaJKe4&=A(@NgX0L#uOfET(lWbV5Z4JKtEd~Ik#zK*@w$!MLcng zeJjysO_Y_8CBrWluy&C~W=K5^+dF2QJ5`TeRyKNmbt>=X#g*szy-WHq(aJdr<*k_H z*YaP%v9zH_0hSS32f>53k~V~xO=SP1^oI!#bwl6Sj9!mFkX6;5!c!lVFX0jDXkO;y z?9N)cza0cQ0x%+p-GXD+-SohV^=rO!Bt~Ar>oYv(Hk$X|aSIx@Gf%VmcnoS{*dm@M zMttC`iSzV)2wuVKcsbDpuVnph_&~$Uv2T!a+#3a6j1Y#F!RK2EseDNx%DSvMWACm-Nk67)sZ$l0DOF3jUJ6!* zqUTnxL%RO!I|t3$U2bib^52ngPP=O2YJ4E#lt!K$EVLg z#(munp`kF-xcxY{)-pM&@7@S7d*dC6p z8Rh9*)tVJUj}>M!6DC3&ee_-Sy7s4a3e|DN@Ij9P{<=bcZTMrnjZe?Lofb(YjfE#viY=iP;WTDdjJ);414j+3Iip7RBC_OwU8H#FbA)D1Yn=w0 zjtJ}&+_@$ByiWMr4Qk4XdK$Fwt_b*4$-Ttd%J(`g|2V2qhtE}h6rt-$+j&thwv;Fi zE2O{JwAML{w};(Ug-tG;gG)Vg1r<$OJsF0>J1a&MIIo_R)H%^v4HX_9^XDYuX#bk4 zmrTPUA7$S|%Q4>Q58^RGLUgf*<9m&1j>HK)y<+(>GOedeyC|y(-#3o@OB}M!!QOyq zM(aA6=h#fRW1LIgYNb};v}$7IGHaJw`BJ`VG+4Rz7ZT#v=#c$Gw*X!3_mOG(j z0KT8Um(A>U6w!SVgaI4-UyWb4+>0jzuB5AYV^0kV#sL%R8N}-YB0e-kd1mt(cwoaP zT3InB4c$L6@yst{oLBWoGOtY7)ta@cIMw6=iMst+20uMK4u138!Z=*|XwsK_bnTcr zzuunH5StYtk7xe`0iSL!nTtAlR{Z+4bSsHv4+O4M)-@ofo=E;^H#N*(#Q$kk@ruG& z@~jBKO4f=0d6#u;|6Qkavs~2Q6dtt-HzaYI0V3lUM2d7>wBdJC3}}Qc z?1o^x^dh3aWPi+ud*;Rw4vD4V0adU||se*E1w z_>#r#0U_!GRi9)40Y`odB7h9KKnU$2wu1T{0YYt)Ui`As#$X^>jTGG=snBG4>eD7J zuM{)D4eUeX6<2ePGKbD}Z)?!dvRTvNO_tP^#&}oK9pXBJ-tuECvswS#r5!reLMSht zp3vuRd=VD)G-!I_@=lh#o!L8&DGhGLM<+)p^AlH<=i(5}Fx4Ks>XE9;6fH(Fb>S}}K7;RuA08yd3E4*C`~l_o{RoFcEY z(cKeaoXHej64|%y3~x>G!z`*wZcnt?IxNJh)Z0O&n)sYIIZlINW% zIAD;4ZB1)q;N)d{bv-QJUoFTc4uR^jY>dAl3Y#UB!Z*f!Xv)PeofVU!oEfX5LUjKF zQ9!Q0HQk`&s+rs~ItLmu=x{3Dr|O^s!sPM5=<##+!V%SF?8gI%CPRn=>GO|;Es<_! z;hGx2)j7VgQB*tk4KrHR-lt-m?(Eo(Myw|ya?7S>h?ju3`aR3}woN7U0``G&$!(j; zLi)d_!JbXSZeTAXP4ih{UmAjvJ~fmT`|Dh?2Dp`O19)`CN3uO$+0^h4Y%%{sw3zW` z$3LjWd^Zjf<2%-3ej054 zJOq+WfRN7!UxneL=kQ@51cf>{jfrL>5vRIvX;=h8YAn!OnnIN~EKE_xPPayRC^Jx7 zi8avmDqSYDIsBxDCW!^r%tpx{B=gJ zqnn&)A>FvVH$gjv9&)dX(#^rqb8vqhrFnxB04LcO2sMWrWe;no%`b*_nzdwPyrn8l z4U|6m@xNy;Pq%dcq9=$p6k?907Iq0MudusO>fx<(wP^~$r=8sy_?N zQt#{_D)`S+;Y&j2=ezqKf`tFzemvjZJ3{-zOPcoUHcjhf*J5^^!_+cnx2C^JXK`i*O+>oOMaEfz1Ziz)R*O*@AD-u*Mvbcd$RWxq!Dd#8uL zC;0VV7XLVYh2I?Z>(P8tY-M4E7Ohs#^QtgLw3vy$I2mW!pE-%9@bIj_98ELr`X%N? zq?Lzb?*>Rz$)oM*P%!(*Haja;0gjE<7$Ob5pYLHYhjrr+&i?j2q@e`+_9waSCnB<>14E zwdRq}Dh4=(M(vgykMmJQCAjNSB7fmfo_KWEiDIN;yuWb6L3XAlDejp@Eok*}n zf;Gc005f5cvELf5xkj_%7Eh4-A??!EQB;u@7kwfdP4!;WuI00iv{fLc@OI21RG z5=^k{uPf3MMaCKom6J-x%G5%tBnN@}z}UV2H<)Lux;VcQtxX5385<<}6{UrY zNpU|W!NafPPrCjfk}opG&ux=dolII{?>G>=oN0bLmIBaz*Xt%?!mcR6x+9U_Q9ud1 zS|4=0ny`B#$8l9GbNaSy%1GrIGdL9AAu3t^=*uX|x|(0#hZVp3HSp)6lgnCNIGO2V zeVkaQqp`klllsERUR>pnl1QvJoRxJZjHzBH%YA!kFYKgL6jZ$7@4o_1(1~@9FNzRG~an3uu*~)MQ zWT04Uj+hlcJR?LUM%VMKA2w}LNIUg^|JoX{THLpVa0@nrjhz``s|4#XpAYGzarI`C zKr_I_?vPD5_3ks28>%z~fo_bLnz#S%!3q5hg#~UymwMB&#*8<~25ufK#ZAJdJP>u|V=@qA$w`?>sfv3xZ03n)v+`9xW-1Kb;;iu`h3D#$rlE})FJa0i zI^B{aHoNRnktJ#s4F2*=g_Y1D86m{TXa6+tUo9;=lu3?~Z zCSs*N4f;rlVXq8?uJJr@oaA$N_*~+B%H_%6 z>6&sfmqmyQ5HkWVBm89=-r-ajSgvPa3er-3U8R+BGxRa0frc`USL;vUm zyVnDwL+oA;@HPx}*r@i6Qt}Jh!jr}p_2UgwyU_dX15A2&MS^L*B#Wsf zP+rZ*tU#M@A)w?JKR`80MHH)O`oa=KsH$qFDKV<`ukMD7co)8y(RK=X?-&89^f$}_ z(1A#yyBJifsYO(;$y8Ku)=QcyYQ=r5wzfa`>dB`8(Swwyfi=T2s8yUoNsnGyKK45i zlU^kyy-G}a!(ji5{)R*JWBk4-nQ&ohpzs;A{&NQReZ$d;KNZq!2~gXpPx0lqQ5%1`xrfJ@nl4%a1~Dj9M2te&D22BLBMnO1=NxINmt&HoVJAZE-ZfR;8|H z%5srspsiX5n$$X==1}lsU+0iy+DHdSY3fcE-`%?e*sI!*rmX`<~1DfqqpHi zUh7aC@$2}fCPw_$^3uLfc=b-Pa|FH_W7Kj@jo?O-eAHnmo+1Rgj<6~tLa6Hqk&Fn{ zT}K#_5uu{%2%l)y2#sAw*p?AtbJr0XGa|Hf86h>t9J-_H&|}S^eO-nw!JbTPXO5EO zi%g{xb%l5`ZIVZqgUcQy?2aSs(*F8`l(hfTQ8Mj+z$LC^UeHkP!%L(ZP{8AIb>J&ygdc zQvi?9VS%$c?pUvZ(-ZV)URc=t=!cr-`$*IFvR|70?&nwd6|>(mWp;$A!{63ll#jfomy<_r|fUK20HmCq$bAm-i62f{WmzY)M2U7@x0gY zc^}NvDMwKBrJ;!aj5FN)O65lx(B;j>kkq{W$X38IvK5viTVbBq5c?&T=p2N9jLlfg zF#SHXiWrM|AlIqsgE!**R8S)pVzoXkS^!5zFs!JT^A+;7X%3z)EA_?=C{Kk+zm4WJ z4MVdR^8ps2lNqQJpdD^3K7^0l;5bjQ58pCGT3O?LDpY_&SPA#>xj3p&kxSz)A^o7k zaLBmGdVTWdKX^c4^f7s9F7TwWG( zCme6`ZeQpE0F6CAK%;ves~TQ9rNDs~NLuCm1Ki+HT#&rd}u>fv~n*mPRw$%gO3Zw&c{VTI}dAciTsKncnc!A8-A=)Ss&3^x17a=T6OJz&-1|{E!3k-A;K~HE@|nS&9i2Fy>L# zpnw-FKP=1>hqpK&v1oj=e_5&J^K8i-iO zQ&^`cQ$bo-$O0oTxLijxMuPfX8r90>#onh*IfNBAhoa0>sABHes@iy~V&kpS#x|q; zqKqDElx%228t0$hta4u0n{ockP1vl1jQv74`5zBqqm{Mf(Ee?2?$8cLpEc03<5FaVBN95u#NSQz;RB{mm-Rxh}?YZ{RuJuo)xE$&{fH zdZkRKB!DMfV+C+>0(sNWFi+iPw57LxL2pSZ9&*K6bK>pYxS5}Ik=1p*%ok3OATWpu zPo;b*R05@6y_2M5VVlA}jwW2)F#>k!H-cUDv)7|{4n)NEnz#NVC!TAE#b2LzX#u)Z z6c|iTE-moJoe^(Po79FtSVXV z$NB?!gOmy-NLN;hH}bHo@m|P?7aI(g=ky+!Fq7O@fgbY=g zsYtJCqO`3ryZm6vZVixu#l1@mt_i3-JJ5RV7qNV6R!XVUd%&-Ww3Wz0?-HkXPU{!m z{#x=dsIiGB7;dT=V(X)aRm-^|TcP{EECbLD-?3t{>1$R`yPM88dD>AGm04=hdm=dtqP z^gdWV4E;fqZg#wA3E=XNQA|x+%vmgO6rV6E^*{>oXNKry3X!}H$APSYMv6eFX$W@? zETbellrh7i!wRij@MK0mcs%PE6xvcg_h>8SAK8^$P%S}+jb%dW*+9hpHtA88Hx z8_f>=kfR`xTi?cxw8Ty=&J6VKkr4H6GQiwGW`Lt8SJlCFkw|( zYJYY&)y(pV<|-yOr7@>wSk{vBNCuXAGPw; z!O|kWb`2Q8JsC;^DkFjAbK|oE@v?yA1!rGqh0j*Radmi~8t4(6jF^B2xrU4^$Fg#$ zgk0{5WcI6O=&6J$P?1re&`YI}Ld!Zzga6|qAe_Aj2&+W^j6Y)$u;vD}2)Gj5G=8lA zMNOfv8U55zEHBa589pN~@p27Z5DE6`v3M|OCAc8o4UQX$OKRuNe_>(ss4q2b4*Tt6 zzfoUl+OV&C_KUNyue0C1UufFqFX;-u<=<-Bo$U8H`;9%IX}9(87vO~b>zYYA6G9Zzq4KP6lwk@p%4 z2Yz1|oV)&2i<6h-(R$wcH#H?1HQ0^NjXZRihH1U^ztKz}+X& zqNwgl)k+(?CJ4Sp)fQhP97U})d-7E){zcWiZ&9s!7WT$*v{b+npiaw(1L+(`9x^;} zGR7}>KPHjC|9gk%&cHV1jzPE~(s%i=tI8sF_aC@ZkC}`ZouK?T^7*)n+^&0PKE~f> z#G*n6&cu5#-)VSUnGTqQeVTs77_khT7)PVVre2ya_n)B-X#P1ITy#O(+@XBFj|=xD zN*{It3>_Ud1^=Fee?$0p8vZT8ztiz=82_Gzeqz;K2TgZ@gIH3RyB-Vc@J>X)Uy`e8Wh(GD9J=orx z1$Ri?fLMMlGNtFLW5jzg0e%vGa72&8t1~(tude9f6d^hsPvP`ve4xN^$8^w!L?&|1 znxSe&KbS@X&S#}~@@I_(Cqf=?>}`$4oH$v70+a_Z7Tsy z>7SwDR^f1nh8yR{`>cmM5PMQ9#ar)F#>-2MpwAg^&y+!*HeODVK^GV=j}R~8#=8OP z7kLum>xZx(}L8YrtrDqsjtE>nt)}v8+-dJ2Ok?_ zNeov*!4OadKl8m@^EOMjjI(OXlCfkZ)jneya}&QqRT(KD1MPn6x2g=k$F)7Vbd zy#=YWj$Un?Y2G9u#gtuIPNR0Ep}5BSrLk3hN7R{`5QbJLRe_}*?&e#{8qMLMbOnpd z2KS76ze}g}MmU-pn&hmpSRKX2VsQQoYJSVm5~JsS@=Kv5STk0@8DTAske_R;2m4gC zo*{*TSUy@B$Ml?-&8U@C=oet4x~!Zvc!T&Mjvs)0Ii7Q0Dr>71eM#KXK&l_!;ock& zg#F5bAl|y=C|+oOcjKi-^99NkK2t(4SDlKFX!<$o7f1AT_0bufqCUD{R!SiQd&fm+ zB-lq~E8X(E>60$n1$^GZ#j|gP%;H_rjvS;}We zv{ZR=MvqsXT(CutK`1%|+j636El}i44U+-6pN0~G)KDNqDG*bHvL^BIn#7k(|7@M9 z?B1RrgtwuC*X^wD?9x_D!du!DLR9t9{LGg*I5+H0+rBMk03M_2!ZbcG}!v>?8iv6-&mf| zLS&hQ`}HfR!{L*SQml3gUeb!`8ge{?wq@zGso2Ti^$PQw-YwGb9vXGW*S;D2rvG*| zVH6+CUmq%n4@vWzp&z7rqZ<);D@AC!pA~?`e)+@-@8Y0*f+_KU>;o9k{3EXZD5h-9Dr{k?a$X*2HHYwk zGkp3T8ct*LF4;9AoJV$R%6SvJyB76|fNUuP1m>myEQu^KArz!q1joUq;sWxy+4v1+ zuS^#k(*i)&OC3b~p=(25*%ia|=pg+C*at*P);WaOw9V$k-T1VyDeN({p>)|WSvpL~ z68Fp$^n#q8ALR4af1rs+F7XiV2GK{K&gvX+a0RnUg2KQ-N$@>kS<#H))a+V4EE#zu znuwF*Q9qTlW~N7_abo**Uj8BE0q3%mPyO74KKBv$%-W7A@ zsE0meXczDLhBNBF%=8bDtCe0}6YZ`Fi~0QE=T})evDNUUv;#q>zuNL&H zB>iIK*?>4Z3q-f|x8HVU<6pkx)rTb(j@Y0-(&-fNPhwbwJ76459w&*stq2ei?TNut^X#w6Y?*(sDhtN03 zF6;_5KJx5L?O;#^nf@fJKgHcWV^cS{V9=zG-p~h!CJ&9f`+1zOeu+K?cTWi<{YOsdS{b+4ZEg}Va?uK z*$o5^FB@*EYkaaf$I@JJLCUS~TS@Esb47sIn@06W-ZmiSCH-Y6f zUlX~|@F%bxg=NOG#C69yJtFQ}K?343EB2U(GuG+)UlQ4?vvmJ|K*RArrmCEPK5e6@07YwUm{dM1>QmHy>3L%Vg2yeu|6Lke@(QgvNQJq3nZY8eC-ok!fjQ;Z8q^= zT);KvzWry1#&zm`kl&XZMG+pAG&VN%3ie5hjt=7<>xsO%>`}k<1aqzFPQtn7sdGgQ zQMZi7?Qy5{;>_v+ny^y`nh86B@J~ls36I37ardV`Ie1~XW`;~Wara-~^_ZRVc!0S3 z?VrfZtvnIHYrpsU8#Eb-e}m-Z{yl__yMMzYb#PUYCzSiDpUAx*A29`r?VTYJ3dpte z4w9mX>98bjv3YgalUfevG;uiGOu5aS`x7J;ygfwRat}2-5^#^-;v2Xm9k>l5%WE>4 zDrC7wK1$=hqRDYk_w7Fl)yD2IwB)}2N3L3T?T@IWD}N-eb&7Tkf9zB>+bK0Wmm;0b zL+$56>53}%OMxuP>Qp4{RQXN~5~<})m}I?~w=Mi}cOlD3*vyIMvag4N7siFWeDhvz!b~uD-CZ)43Ha-@a?Nyqw}wN5`|qli5JV3C-Bl zAHR1%yXrNv@(=6@7eTbS55Nc3jB0a#!|r-(G`--jVE>pLDFj>7wMA zTn%ON)<2TN=W1xZ3E!VSRvQqUl4iFQ8cTOQCVf9xWA z8xG=PRv-|JC8WLeUqKas_GC>d(Bwht*5;{U+vwZ-z7`xtV;Kzw@??HmTPW9_!E++w zV9ihWvoNQeC~+`T^4pH^ z==SiK2ziW$d8Hc;x6nXt`d8Q-UVfyaNFa<2>VbUlh4=DkR2uiH&JOpV!%X+X9j!y$hVnVu<(AYiFdgZjOcT5IYJgW(9{Y-iHcQ5aLi=p?ESdJN-@ME@$JkUMi0~W#uB;he=V)s?wKw`+N{>G}i zO0#s8%g3Xqy-3$pX>#SSG^LePA49>YC>k`fDl|1hbm4>t17Bx@?(mqUNMC>E_sI^R#3-V z7jR8SN2m@O%7}*;QKs@}rENm-bT5p@A`Bf!L?yx_Ul}FB=C8~`@TCTdN$HI@_Bqxw z)E%I*ncBnR-u6A5KnnNX`X@A_fz2N8*OV4D?{j!#37!g@)vwf4+iYuAU-z2uSv29} zW(@-@P+f7T(aS+oh~}}8qw9P3Qp=epJgqB-w_oT8lSVqhO9bJs<8>AAdh%-cx?;G^ zcZ}Awx*|t;3-yh+VU|-Rh?9KOU{_wOuF5e7V*Rhxa5NtcF|khAVEw|&HLS?}B~5qX zi7v@Djaq^fX?<0WiKA*WN#_CBWF;qijGX2=Q;eo+Gd=t|xuoxb=s^81i#ab5#tWqL z)I=qs9V2Ze4lKU#2s>_V5KbJUC1bl^{2cdADU!AEo3v}hJM4XAGBp`$F3wCtf$r0g zSY{re9!VHa@rjIS<-S@R?`)PxlDC;_qyvoHk5VR90qqyv!%Rkk-7_MFw{b6{U?itC zGREj^1_gJ(*arTZ^VZ^Kyj|*4^vg#WdA|>imj&$TB-s^=YqH14tG!@!knvUNbMBPU zz4b3?vQ&OX6KN9tMW`a?kqcNC_JEhXmw8h4Hr!~^ox#TB;=r;ijqYn7`7MXq`xt(5 zIIuio1e)QI8I(GTfr-wwvA~wO46{;6j^rD<-36Ft4k7VdDm4X6R<|<;OO>Ub6!Ja z={(~->r(Q5VOZ@K%Bh0lZ6Ow{xJ3(+)*|>uch$1pd&}c-XaY-1Exnv@DWKu&#MMX^wMk+2b z+>uxj5+|`4E>r1SYHe#m9}=iY8&p{hsGJ=Pr{4 zY5V@(@B3)Y+`MGB&SfvH`9-61yd$ABMnkyh} z2$_a4d0v6e+xyrXBx?7$GHk5=)(C7CRBbkyJB;|&iQtrv3=-rNaF zvJuWpOID&~>H0(vk!w*mwET*y!PyriWM6TT?DY$?3V8MvX7&Y! z3xEQ1gjexa@b!60T)P1%UiD~3j|U`owJoN|gLaa=^p#;H0g01rHD zkVnQU(;r`f!S#~fg+hzP9QhtSf<;xu0&)xnG@%|`C3S(7HDo8^8AGI}&^1+1t$S{V zYV{dehnw>ZEsxGuGI-R)@fw})4;AXsJ*N^~X!xDb+iZrQ0qXcJpYpYeWUh~BLq~a%&2p$;|0UT)Z768f zAhEu-o85FF%g1MG>99VRpnni;t@ zVJP~BnKmT3c(jY-K7E?hu{;X&S?4ieGP*6p+|aBsF{gFL1k`g`$Ll9?-JPX&1yH;A z0&`mD4P^|56!5~30=Pad&#Jex6tHpu4R&||TVL}HY@}2A`GYohc4IA2s`m#HpjOck z3Rq;NfJNK{v&bZBseDEiaa|~aXpW_a5*7!f|&#` z!$JV#mmA(h>>qe*l#9;8Pv%i z!_BFX4eQnYDxH>mALim_iPEU74ytwREo7~mulg>QHAW-hkgh`YapPFy-D5K|96Bw1 z$uut?;aLqcFQw!RE7>FWYt|AX398m^g9xn}q%LB6+MqCZ%$a0K$hHL(>cR}8nZs~m zk&YA3;`Q9ChMQBAj&(C_HeHfh#E~KXn%&!N%1U+VF-J9C_%1ZO#k-TDw8Unzq0j}( z{tl0EvAx3c*_)6hGd6?0F57rB8xenSFge5sH3TH}JcsE+c0BT5=))H5nsoKr8)2Ef zjBD*rwuA-~neYse{jl#f-y0l?F>4lLNgn&q(p`yRZflJ^_Mu_CH93|kN#>~WQSnsu zsT+`X#ct=fiF=4c7$k?#|M`dEUv9V&IG9DeMs)p}5F`=Uqr1C7gh!lP*s@3I6vYo0D{Tc*Beo3siWLFB@*NX6m=B zmRA(X(PDB)#$Cr8!RhP{lU-6WF4KI{2sg83*>#wFhTV8HVBI)AFZ9r1tlac|){)(* z*tzM6EXZ!%kR7zng6!%n$WAYyZV0j)#`10HT-Mm8l;ISoy?r`y#v+YDZW!#x@>3*6)H9-Eor(79@XdqdffIxF0(GvQu`wFCxL^x49> zhyrU^vt=p{3UkLYk}L@o!yXPM8BHFx|ID|-Jz~Fx!aZH@Jzs}=dJlJ-b|1Q7iH`VK z6chAOEDPx4W+x2v=~nv`X>UTVwgk{;vnMo#fj)C#vj`0I>3I&*lRf`xPjb+AbJ<|f z$J^{S?IjYcgWnnGvxd41(C4xbExl(@>DC&#>_fwPjI_qYG(q3*g9Q2(An2>#g6Qq` z+fJ?@;uz07jM$J{ivfLI9P9CSqFaXZl2Dd@^eOfUrm9Da9HdngPJ{}*n;;lL428Rv zl|K1%Q3)7CDga-A1Q>Blg5)QAa@_EOWYo^@;u(^{Bs`~(BA8ol5Ewlg!BC1ewJLck|B4iNzaCik%$@<10?mSKI`In8PeLT}vRD%Z-)Y&7iD)I~JF- z@D-QOW9d?0!VT3+&f)?XuFtDBRd;w>{e5~Kd0eoJDA`!0425@ijMgmTC-aJ!XgHlq zaS`QGTSJ)!H=;)Yu2Wc3g&YUbz{WsAzlM@f{9z3=xOP&Q|@;GD-k zo-E>As3kY1Lc_1@bZDoRPM6e9ZqZLoupf5DWEBg*ALEP(KSO~(=Glt|o4ylaTsl#a zkd~h@X<%fZXMt&HdpX5S_!*P`BoqCN$$y%M{ol@Gm7Wz(;LlwKqp<9x>!5MuIcv)B z^K@DLlJO=$<>$D}X$*PRdTg@pPK3!{3D=Ld%xIm}))hKvsCz%3hUgk*YC8K`&Cz_V zo$p|<4w+?oMnVjx(C`S4ex7DcpzFN`$=xYxcuSfdg=;ft=hU@m9#fm)u_94DAjgW3 z%}Q8hy*es2&smu0RY#=&Y=3#RMVsN#6%D%7nf;owe833!%e5IEUF+~o(M@dz3vN!Z zv!Gu?o55pvhKs?p8EgX_u~eqbuyzVb*hd>t4QGpg+tZAP`-qRp^Y94p4O8BZG{WN0&bY%|Q|ns|AxHZeHpF-C0|``lwQMEN@VTy15ayLm@+^TonB zCybxKl2j+M&-gu&BdNBq&(#+8SuemG8=ZY-Ul`F+*-9&##kxgLWM!Y##IOYRS+&G_ zGNDDlK0i2!eeSoJUF0$Z#9=1hV!X3%-fZYe@RPwi<5#Pm#La{{9`=SmiM;cf?8BLM zeJ{i)#HS`CvGUF+a^{j}o|1M|o>R^@5(~G9GX-WC&75HvXAD0T#+kae+bW^X(=i9vljNB!Gexnm%z1p> zd#qw?6VIoJuflLZLN{dJ~WKCCdV=*O_o`nF;q_i!MDz!V`q$s9?U`~@XtD- zBhoD;_Z=`^aAqS4MTp8gtPs!2nG()<4rWwUGn$j}$|vD!Es>MHk!dy}Gk)UK7&H;TPsb>T0vO`=C0gj}V8M`2$TLUG zo|`=Y%A3Dr(AhFpvDh+xl8;M!bS_}7(cOSfGGnS*&dM_zgKDmUAe_H;8mu+bXAOtob-Y*DFBcNf%^0Dn2?&4Wh(g0E zo@=$9t8Qk(6d3^QC+VL(!+n-bE2a@jia(v$U~cC#+K6XB`aQ)A7G{bdlIXQD-O zd(!Q_R`Zew&tGk-L#Qk5ygNoj@_aQjBu|zVfaImY1GK27z_4~>7~XBXR}*?4mGF+Z z-ND;ZZFn0>%(Gf}RKMA%noC>;VfCkNHj}}@sh-%07|gseR9oP_$I5S1a}d3>$egaG zrb+i|Ff{8Y6SL;n&cwNvtj{c>k;^V(tu5gAyq`C%U?hC5FRy}O@p(dW6QBRl0!fC& z=LNdSQiTrA3z+naWmCY_TZT}3D62cgo-kA%lXvG)8G!F#pa_3-0I$oweM7ig&I@x^ zGXWaW{4)VOeosV36oCVHnx7oN>jjv@rUQ8Pg>A*nY+WtAg7ur8$g0lif-9txA-e+(y<--EAqo9bxt$g_u9l@Abl4a@2BjY zZ*R17Y0slGN1MyXF!OCVe^BUg!@#b&%>vv z-|jJXu_CtP-~pL=(0QG1a?&(Tw~sG>UH7 z?%BZl!6!Ug!h8vB-JthO!)~q}x7Yygw3*#vI-oH&Kgo!$Z_?yZseBkeG&45X$q&ut z@EgZ-OuDn1g&Vj-6-KLdNjx6+$yCnD=R2;%)b4D@^%p{i zeVU}V#RLG>4PVCuu;G7O|7vdd6_yR(*|eUO{LOp)_DiAUzZ(nb6!-dyQ`zgk|9`UA zJD*y|oGpyB&8wG~+x$wt%~#+yA9emzAF|b1?Gi|Ni z6lk-`IkVO>Pdv}*D8j6?Gxjp4Z9qxeoo~O)whVZDNqm+GvOQV0QXvAx(!2bGb~4!sG`54|6z6P zG3uyCRxNe3iX3TNa%caL#4Bv7lWa~qi^uZr_YRTmb}0+%{+#^HROfAHuN9wbn$%1e)i`@fw}L;L3WIuZZIT?9%ic|oVr zqxH=x2ZCZhcd~mE{)0V={Tc-Eut75!tt()1_5!;>gWi7LoO8Ohw}(&mJSJf;uqSx% zyYqRAcfUd30?#w=e&X}GcR!Y=Q+nR&-OpnYx03wVss1RBO%0DOH_;ilJWBv~Ico|_ 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%0Dq0bmg1MZ5xn#rUiVL)*-x+=%l5d0Lna#ao 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%0DLU)qn&5eve*jM^XPmbh5h;&8mO-10*!6=>0?% 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 bnH8(Kt*weY9Q=P6n2)XFBlPF^AVU2wRtw&} literal 77322 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%0DG#=0qCb43{R4!JiXyMs2`l zuZ=bcOl_&PdtLUrfu3gI&b5hMq1Jx`8zOpv2|w~AjzlFgP>QoC5pRA58?%efonPPz z4WtXMV`mpW4MY%c7tw#6Q8i&S@% zJmnrl?+_)sjPT?mPa+$FG@^;rAL!P6hvC*tJkKy^Y9o`*f!c4l2?$(LgC<`g0eEC$ zw6xILEJ4nYBJ&(tPC0#`6;^MtzNCXyFlU+S&JG+G?i}EbwVlD{AqQd!_cwF}bJT10 z8=}tscVW|YYB8(gIa8+rBl+ShGrvGzDG(gK@Pu}NG_q6eZ9}Pq+^X|o(0O>$^QFgO zcg<{vqTa~wRn(@s-uEamk2v?B$8|8+ndEPeu0c9?&gN#M{);s9gIA*1Ii2AnPyW&= zg6`RUeu-@!bbI&N$aGGJVR$2tvH?uGVgbVVQ5eKAkLy^l0D4RU8KVH0FBRIemg$CMj8c{hr*A>`+4i=6s)~bpQg*3mqM| z`eG>j5mEstg-71BoV3SDOxeW}zfjj~B`@er$a{wJ4hvda?5E88wHMjqj-jX1l3-f# z$nNEBUdY5{Y4j^lvf#B!r2#U&_-1?SPVyO3c zcusCCog89!k{f8K!j7jh38KT9i85%MUjYEmV8ZaFIM~}6>9rw@JAnpb1RacfvRyp{ z(h2mt6IO4aXJSj7ks0En4)lg*->XE6`e6yKv8eCC95fZ}M;9u#3Qyl|5yS{;C<7HA z!sPxKB%-TAGkOJi`Bloe-u~IJ5;sGy=fXB^g8bVtU&-pFB`WfSj$4AKsh6W#$<-lG z)!L!^yx2rv!=d1KD3SuJcsk4Uh+Ykb1zcRtRBB_~2heO8G^@2mSHNGkNG?=hLaU

    >wU&^PRvgJbVFc`u?K*e&twbt=$qlN2+LNc(PrJ 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 hb^PdN