From 7172f8272a97c233c0d6f14303a805c896fe3846 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 26 Aug 2025 23:14:49 +0000 Subject: [PATCH 1/4] Initial plan From 6d5ab153a75c5adbdb67ee5b2930ac5e6561ed33 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 26 Aug 2025 23:28:19 +0000 Subject: [PATCH 2/4] Implement generic event handling system for C++ Co-authored-by: lijy91 <3889523+lijy91@users.noreply.github.com> --- docs/EVENT_SYSTEM.md | 209 +++++++++++++++++++++++++++++++++++ include/nativeapi.h | 2 + src/callback_test | Bin 0 -> 198416 bytes src/callback_test.cpp | 48 ++++++++ src/common_events.h | 158 ++++++++++++++++++++++++++ src/event.h | 112 +++++++++++++++++++ src/event_dispatcher.cpp | 183 ++++++++++++++++++++++++++++++ src/event_dispatcher.h | 181 ++++++++++++++++++++++++++++++ src/event_dispatcher.o | Bin 0 -> 331912 bytes src/event_system.cpp | 10 ++ src/event_system.h | 110 ++++++++++++++++++ src/event_system.o | Bin 0 -> 3536 bytes src/event_system_example.cpp | 135 ++++++++++++++++++++++ src/event_system_test.cpp | 157 ++++++++++++++++++++++++++ src/event_test | Bin 0 -> 260960 bytes src/simple_event_test.cpp | 55 +++++++++ src/simple_test | Bin 0 -> 164272 bytes 17 files changed, 1360 insertions(+) create mode 100644 docs/EVENT_SYSTEM.md create mode 100755 src/callback_test create mode 100644 src/callback_test.cpp create mode 100644 src/common_events.h create mode 100644 src/event.h create mode 100644 src/event_dispatcher.cpp create mode 100644 src/event_dispatcher.h create mode 100644 src/event_dispatcher.o create mode 100644 src/event_system.cpp create mode 100644 src/event_system.h create mode 100644 src/event_system.o create mode 100644 src/event_system_example.cpp create mode 100644 src/event_system_test.cpp create mode 100755 src/event_test create mode 100644 src/simple_event_test.cpp create mode 100755 src/simple_test diff --git a/docs/EVENT_SYSTEM.md b/docs/EVENT_SYSTEM.md new file mode 100644 index 0000000..8d0ac0b --- /dev/null +++ b/docs/EVENT_SYSTEM.md @@ -0,0 +1,209 @@ +# Generic Event Handling System + +## Overview + +The Generic Event Handling System provides a type-safe, flexible, and thread-safe mechanism for handling events in C++. It supports both observer patterns and callback-based event handling, making it suitable for various use cases in native API development. + +## Key Features + +- **Type Safety**: Template-based design ensures compile-time type checking +- **Flexible Patterns**: Supports both observer pattern and callback-based handling +- **Thread Safety**: Safe for multi-threaded environments with proper synchronization +- **Asynchronous Processing**: Built-in support for async event dispatch with background thread +- **Automatic Cleanup**: RAII-based listener management prevents memory leaks +- **Exception Safety**: Handles exceptions in event listeners gracefully +- **Event Timestamping**: All events include creation timestamps +- **Generic Design**: Works with any event type through templates + +## Core Components + +### Event Base Classes + +- `Event`: Base class for all events, provides timestamping and type information +- `TypedEvent`: Template base class that provides automatic type identification +- `EventListener`: Generic event listener interface +- `TypedEventListener`: Type-safe event listener for specific event types +- `CallbackEventListener`: Wrapper for std::function callbacks + +### Event Dispatcher + +- `EventDispatcher`: Main class that manages event distribution +- Supports both synchronous and asynchronous event dispatch +- Thread-safe listener management +- Background thread for async event processing + +### Utility Classes + +- `EventListenerGuard`: RAII helper for automatic listener cleanup +- `GetGlobalEventDispatcher()`: Singleton access to global event dispatcher + +## Usage Examples + +### 1. Define Custom Events + +```cpp +#include "event_system.h" + +// Define a custom event +class UserLoginEvent : public nativeapi::TypedEvent { + public: + UserLoginEvent(const std::string& username, bool success) + : username_(username), success_(success) {} + + const std::string& GetUsername() const { return username_; } + bool IsSuccess() const { return success_; } + + private: + std::string username_; + bool success_; +}; +``` + +### 2. Observer Pattern + +```cpp +// Implement an observer +class LoginObserver : public nativeapi::TypedEventListener { + public: + void OnTypedEvent(const UserLoginEvent& event) override { + std::cout << "User " << event.GetUsername() + << (event.IsSuccess() ? " logged in" : " login failed") << std::endl; + } +}; + +// Register the observer +nativeapi::EventDispatcher dispatcher; +LoginObserver observer; +auto listener_id = dispatcher.AddListener(&observer); + +// Dispatch an event +dispatcher.DispatchSync("john_doe", true); + +// Clean up +dispatcher.RemoveListener(listener_id); +``` + +### 3. Callback Pattern + +```cpp +// Register a callback function +auto callback_id = dispatcher.AddListener( + [](const UserLoginEvent& event) { + // Handle the event + std::cout << "Callback: " << event.GetUsername() << std::endl; + }); + +// Or use RAII for automatic cleanup +auto guard = nativeapi::AddScopedListener(dispatcher, + [](const UserLoginEvent& event) { + std::cout << "Scoped callback: " << event.GetUsername() << std::endl; + }); +// Listener is automatically removed when guard goes out of scope +``` + +### 4. Multi-Event Observer + +```cpp +// Handle multiple event types with one observer +class MultiEventObserver : public nativeapi::EventListener { + public: + void OnEvent(const nativeapi::Event& event) override { + if (auto login_event = dynamic_cast(&event)) { + HandleLogin(*login_event); + } else if (auto logout_event = dynamic_cast(&event)) { + HandleLogout(*logout_event); + } + } + + private: + void HandleLogin(const UserLoginEvent& event) { /* ... */ } + void HandleLogout(const UserLogoutEvent& event) { /* ... */ } +}; +``` + +### 5. Asynchronous Event Processing + +```cpp +// Start background thread for async processing +dispatcher.Start(); + +// Dispatch events asynchronously +dispatcher.DispatchAsync("alice", true); +dispatcher.DispatchAsync("bob", false); + +// Events will be processed on background thread +// Stop background processing when done +dispatcher.Stop(); +``` + +### 6. Global Event System + +```cpp +// Use the global event dispatcher +auto& global_dispatcher = nativeapi::GetGlobalEventDispatcher(); + +global_dispatcher.AddListener([](const UserLoginEvent& event) { + // This listener is globally available +}); +``` + +## Thread Safety + +The event system is designed to be thread-safe: + +- Listener registration/removal is protected by mutexes +- Event dispatch creates snapshots of listeners to avoid holding locks during dispatch +- Async event processing uses condition variables for efficient waiting +- Exception handling prevents one listener from affecting others + +## Performance Considerations + +- **Synchronous dispatch**: Direct function calls, minimal overhead +- **Asynchronous dispatch**: Events are queued and processed on background thread +- **Memory management**: Automatic cleanup of callback listeners +- **Exception handling**: Try-catch blocks around listener calls + +## Integration with Existing Code + +The event system can be integrated with existing components: + +```cpp +// Example: Extend DisplayManager to use events +class EventAwareDisplayManager : public DisplayManager { + public: + EventAwareDisplayManager(nativeapi::EventDispatcher& dispatcher) + : dispatcher_(dispatcher) {} + + protected: + void OnDisplayAdded(const Display& display) { + // Existing logic... + + // Dispatch event + dispatcher_.DispatchAsync(display); + } + + private: + nativeapi::EventDispatcher& dispatcher_; +}; +``` + +## Best Practices + +1. **Use RAII**: Prefer `EventListenerGuard` or scoped listeners for automatic cleanup +2. **Handle exceptions**: Event listeners should handle their own exceptions +3. **Avoid blocking**: Keep event handlers fast to avoid blocking other listeners +4. **Use appropriate dispatch**: Sync for immediate handling, async for background processing +5. **Clean up**: Remove listeners when they're no longer needed +6. **Type safety**: Prefer `TypedEventListener` over raw `EventListener` when possible + +## Common Event Types + +The system includes predefined events for common scenarios: + +- `DisplayAddedEvent`, `DisplayRemovedEvent`: Display management +- `KeyPressedEvent`, `KeyReleasedEvent`: Keyboard input +- `MouseMovedEvent`, `MouseClickedEvent`: Mouse input +- `WindowCreatedEvent`, `WindowClosedEvent`: Window management +- `ApplicationStartedEvent`, `ApplicationExitingEvent`: Application lifecycle + +These can be used directly or serve as examples for creating custom events. \ No newline at end of file diff --git a/include/nativeapi.h b/include/nativeapi.h index ecc15ad..0263472 100644 --- a/include/nativeapi.h +++ b/include/nativeapi.h @@ -4,6 +4,8 @@ #include "../src/app_runner.h" #include "../src/display.h" #include "../src/display_manager.h" +#include "../src/event_system.h" +#include "../src/common_events.h" #include "../src/geometry.h" #include "../src/keyboard_monitor.h" #include "../src/menu.h" diff --git a/src/callback_test b/src/callback_test new file mode 100755 index 0000000000000000000000000000000000000000..e309e47a701a92d906cbd5d18762fae6d2b8462b GIT binary patch literal 198416 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 P4*%ibnyZUd_z3=ASzpIT literal 0 HcmV?d00001 diff --git a/src/callback_test.cpp b/src/callback_test.cpp new file mode 100644 index 0000000..84134a8 --- /dev/null +++ b/src/callback_test.cpp @@ -0,0 +1,48 @@ +#include +#include + +#include "event_system.h" + +// Simple test event +class SimpleEvent : public nativeapi::TypedEvent { + public: + explicit SimpleEvent(int value) : value_(value) {} + int GetValue() const { return value_; } + private: + int value_; +}; + +int main() { + std::cout << "=== Callback Test ===" << std::endl; + + nativeapi::EventDispatcher dispatcher; + + // Test callback + bool callback_called = false; + int callback_value = 0; + + std::cout << "Adding callback listener..." << std::endl; + auto callback_id = dispatcher.AddListener([&](const SimpleEvent& event) { + std::cout << "Callback called with value: " << event.GetValue() << std::endl; + callback_value = event.GetValue(); + callback_called = true; + }); + + std::cout << "Callback ID: " << callback_id << std::endl; + + SimpleEvent event(123); + std::cout << "Dispatching event..." << std::endl; + dispatcher.DispatchSync(event); + + std::cout << "Callback called: " << callback_called << std::endl; + std::cout << "Callback value: " << callback_value << std::endl; + + if (callback_called && callback_value == 123) { + std::cout << "✓ Test passed!" << std::endl; + } else { + std::cout << "✗ Test failed!" << std::endl; + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/src/common_events.h b/src/common_events.h new file mode 100644 index 0000000..9d4d92a --- /dev/null +++ b/src/common_events.h @@ -0,0 +1,158 @@ +#pragma once + +#include "event.h" +#include "display.h" +#include "geometry.h" + +namespace nativeapi { + +/** + * Example events that demonstrate how to integrate the generic event system + * with existing components like display management and keyboard monitoring. + */ + +/** + * Display-related events + */ +class DisplayAddedEvent : public TypedEvent { + public: + explicit DisplayAddedEvent(const Display& display) : display_(display) {} + + const Display& GetDisplay() const { return display_; } + + private: + Display display_; +}; + +class DisplayRemovedEvent : public TypedEvent { + public: + explicit DisplayRemovedEvent(const Display& display) : display_(display) {} + + const Display& GetDisplay() const { return display_; } + + private: + Display display_; +}; + +class DisplayChangedEvent : public TypedEvent { + public: + DisplayChangedEvent(const Display& old_display, const Display& new_display) + : old_display_(old_display), new_display_(new_display) {} + + const Display& GetOldDisplay() const { return old_display_; } + const Display& GetNewDisplay() const { return new_display_; } + + private: + Display old_display_; + Display new_display_; +}; + +/** + * Keyboard-related events + */ +class KeyPressedEvent : public TypedEvent { + public: + explicit KeyPressedEvent(int keycode) : keycode_(keycode) {} + + int GetKeycode() const { return keycode_; } + + private: + int keycode_; +}; + +class KeyReleasedEvent : public TypedEvent { + public: + explicit KeyReleasedEvent(int keycode) : keycode_(keycode) {} + + int GetKeycode() const { return keycode_; } + + private: + int keycode_; +}; + +class ModifierKeysChangedEvent : public TypedEvent { + public: + explicit ModifierKeysChangedEvent(uint32_t modifier_keys) + : modifier_keys_(modifier_keys) {} + + uint32_t GetModifierKeys() const { return modifier_keys_; } + + private: + uint32_t modifier_keys_; +}; + +/** + * Mouse-related events + */ +class MouseMovedEvent : public TypedEvent { + public: + MouseMovedEvent(const Point& old_position, const Point& new_position) + : old_position_(old_position), new_position_(new_position) {} + + const Point& GetOldPosition() const { return old_position_; } + const Point& GetNewPosition() const { return new_position_; } + + private: + Point old_position_; + Point new_position_; +}; + +class MouseClickedEvent : public TypedEvent { + public: + enum class Button { Left, Right, Middle, X1, X2 }; + + MouseClickedEvent(Button button, const Point& position) + : button_(button), position_(position) {} + + Button GetButton() const { return button_; } + const Point& GetPosition() const { return position_; } + + private: + Button button_; + Point position_; +}; + +/** + * Window-related events + */ +class WindowCreatedEvent : public TypedEvent { + public: + explicit WindowCreatedEvent(void* window_handle) + : window_handle_(window_handle) {} + + void* GetWindowHandle() const { return window_handle_; } + + private: + void* window_handle_; +}; + +class WindowClosedEvent : public TypedEvent { + public: + explicit WindowClosedEvent(void* window_handle) + : window_handle_(window_handle) {} + + void* GetWindowHandle() const { return window_handle_; } + + private: + void* window_handle_; +}; + +/** + * Application-related events + */ +class ApplicationStartedEvent : public TypedEvent { + public: + ApplicationStartedEvent() = default; +}; + +class ApplicationExitingEvent : public TypedEvent { + public: + explicit ApplicationExitingEvent(int exit_code = 0) : exit_code_(exit_code) {} + + int GetExitCode() const { return exit_code_; } + + private: + int exit_code_; +}; + +} // namespace nativeapi \ No newline at end of file diff --git a/src/event.h b/src/event.h new file mode 100644 index 0000000..1c74fda --- /dev/null +++ b/src/event.h @@ -0,0 +1,112 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace nativeapi { + +/** + * Base class for all events in the generic event system. + * Events should inherit from this class and provide their own data. + */ +class Event { + public: + Event() : timestamp_(std::chrono::steady_clock::now()) {} + virtual ~Event() = default; + + // Get the time when this event was created + std::chrono::steady_clock::time_point GetTimestamp() const { + return timestamp_; + } + + // Get a string representation of the event type (for debugging) + virtual std::string GetTypeName() const = 0; + + private: + std::chrono::steady_clock::time_point timestamp_; +}; + +/** + * Template for typed events. This provides type safety and automatic + * type identification for events. + */ +template +class TypedEvent : public Event { + public: + static std::type_index GetStaticType() { + return std::type_index(typeid(T)); + } + + std::type_index GetType() const { + return GetStaticType(); + } + + std::string GetTypeName() const override { + return typeid(T).name(); + } +}; + +/** + * Generic event listener interface that can handle any event type. + * This is the base interface for the observer pattern. + */ +class EventListener { + public: + virtual ~EventListener() = default; + + /** + * Handle an event. Implementations should check the event type + * and cast appropriately. + */ + virtual void OnEvent(const Event& event) = 0; +}; + +/** + * Template for typed event listeners. This provides type safety + * by automatically casting events to the correct type. + */ +template +class TypedEventListener : public EventListener { + public: + virtual ~TypedEventListener() = default; + + void OnEvent(const Event& event) override { + // Check if this is the correct event type + if (auto typed_event = dynamic_cast(&event)) { + OnTypedEvent(*typed_event); + } + } + + /** + * Handle a typed event. Subclasses should override this method. + */ + virtual void OnTypedEvent(const EventType& event) = 0; +}; + +/** + * Callback-based event handler that wraps std::function callbacks. + * This allows using lambda functions or function pointers as event handlers. + */ +template +class CallbackEventListener : public TypedEventListener { + public: + using CallbackType = std::function; + + explicit CallbackEventListener(CallbackType callback) + : callback_(std::move(callback)) {} + + void OnTypedEvent(const EventType& event) override { + if (callback_) { + callback_(event); + } + } + + private: + CallbackType callback_; +}; + +} // namespace nativeapi \ No newline at end of file diff --git a/src/event_dispatcher.cpp b/src/event_dispatcher.cpp new file mode 100644 index 0000000..bdeba28 --- /dev/null +++ b/src/event_dispatcher.cpp @@ -0,0 +1,183 @@ +#include "event_dispatcher.h" + +#include +#include + +namespace nativeapi { + +EventDispatcher::EventDispatcher() + : running_(false), stop_requested_(false), next_listener_id_(1) { +} + +EventDispatcher::~EventDispatcher() { + Stop(); +} + +size_t EventDispatcher::AddListener(std::type_index event_type, EventListener* listener) { + if (!listener) { + return 0; // Invalid listener + } + + std::lock_guard lock(listeners_mutex_); + size_t listener_id = next_listener_id_.fetch_add(1); + + listeners_[event_type].push_back({listener, listener_id}); + + return listener_id; +} + +bool EventDispatcher::RemoveListener(size_t listener_id) { + std::lock_guard lock(listeners_mutex_); + + for (auto& [event_type, listener_list] : listeners_) { + auto it = std::find_if(listener_list.begin(), listener_list.end(), + [listener_id](const ListenerInfo& info) { + return info.id == listener_id; + }); + + if (it != listener_list.end()) { + listener_list.erase(it); + return true; + } + } + + return false; +} + +void EventDispatcher::RemoveAllListeners(std::type_index event_type) { + std::lock_guard lock(listeners_mutex_); + listeners_[event_type].clear(); +} + +void EventDispatcher::RemoveAllListeners() { + std::lock_guard lock(listeners_mutex_); + listeners_.clear(); + callback_listeners_.clear(); +} + +void EventDispatcher::DispatchSync(const Event& event) { + std::type_index event_type = typeid(event); + std::vector listeners_copy; + + // Copy listeners to avoid holding the lock during dispatch + { + std::lock_guard lock(listeners_mutex_); + auto it = listeners_.find(event_type); + if (it != listeners_.end()) { + listeners_copy.reserve(it->second.size()); + for (const auto& info : it->second) { + listeners_copy.push_back(info.listener); + } + } + } + + // Dispatch to all listeners + for (auto* listener : listeners_copy) { + try { + listener->OnEvent(event); + } catch (const std::exception& e) { + std::cerr << "Exception in event listener: " << e.what() << std::endl; + } catch (...) { + std::cerr << "Unknown exception in event listener" << std::endl; + } + } +} + +void EventDispatcher::DispatchAsync(std::unique_ptr event) { + if (!event) { + return; + } + + // Start the worker thread if not already running + if (!running_.load()) { + Start(); + } + + { + std::lock_guard lock(queue_mutex_); + event_queue_.push(std::move(event)); + } + + queue_condition_.notify_one(); +} + +void EventDispatcher::Start() { + if (running_.load()) { + return; // Already running + } + + stop_requested_.store(false); + running_.store(true); + + worker_thread_ = std::thread(&EventDispatcher::ProcessAsyncEvents, this); +} + +void EventDispatcher::Stop() { + if (!running_.load()) { + return; // Not running + } + + stop_requested_.store(true); + queue_condition_.notify_all(); + + if (worker_thread_.joinable()) { + worker_thread_.join(); + } + + running_.store(false); + + // Clear any remaining events in the queue + std::lock_guard lock(queue_mutex_); + while (!event_queue_.empty()) { + event_queue_.pop(); + } +} + +bool EventDispatcher::IsRunning() const { + return running_.load(); +} + +size_t EventDispatcher::GetListenerCount(std::type_index event_type) const { + std::lock_guard lock(listeners_mutex_); + auto it = listeners_.find(event_type); + return (it != listeners_.end()) ? it->second.size() : 0; +} + +size_t EventDispatcher::GetTotalListenerCount() const { + std::lock_guard lock(listeners_mutex_); + size_t total = 0; + for (const auto& [event_type, listener_list] : listeners_) { + total += listener_list.size(); + } + return total; +} + +void EventDispatcher::ProcessAsyncEvents() { + while (running_.load()) { + std::unique_ptr event; + + // Wait for an event or stop signal + { + std::unique_lock lock(queue_mutex_); + queue_condition_.wait(lock, [this] { + return !event_queue_.empty() || stop_requested_.load(); + }); + + if (stop_requested_.load()) { + break; + } + + if (!event_queue_.empty()) { + event = std::move(event_queue_.front()); + event_queue_.pop(); + } + } + + // Dispatch the event if we have one + if (event) { + DispatchSync(*event); + } + } +} + +} // namespace nativeapi \ No newline at end of file diff --git a/src/event_dispatcher.h b/src/event_dispatcher.h new file mode 100644 index 0000000..3dd6bdb --- /dev/null +++ b/src/event_dispatcher.h @@ -0,0 +1,181 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "event.h" + +namespace nativeapi { + +/** + * Generic event dispatcher that supports both synchronous and asynchronous + * event dispatching. It maintains listeners for different event types and + * can dispatch events either immediately or queue them for later processing. + */ +class EventDispatcher { + public: + EventDispatcher(); + ~EventDispatcher(); + + /** + * Add a listener for a specific event type. + * The listener will be called whenever an event of that type is dispatched. + * + * @param listener Pointer to the event listener (must remain valid until removed) + * @return A unique listener ID that can be used to remove the listener + */ + template + size_t AddListener(TypedEventListener* listener) { + return AddListener(TypedEvent::GetStaticType(), listener); + } + + /** + * Add a callback function as a listener for a specific event type. + * + * @param callback Function to call when the event occurs + * @return A unique listener ID that can be used to remove the listener + */ + template + size_t AddListener(std::function callback) { + auto callback_listener = std::make_unique>( + std::move(callback)); + auto listener_ptr = callback_listener.get(); + + // Store the callback listener first, then add it + { + std::lock_guard lock(listeners_mutex_); + callback_listeners_.emplace_back(std::move(callback_listener)); + } + + // Use the type-erased method to avoid infinite recursion + return AddListener(TypedEvent::GetStaticType(), listener_ptr); + } + + /** + * Remove a listener by its ID. + * + * @param listener_id The ID returned by AddListener + * @return true if the listener was found and removed, false otherwise + */ + bool RemoveListener(size_t listener_id); + + /** + * Remove all listeners for a specific event type. + */ + template + void RemoveAllListeners() { + RemoveAllListeners(TypedEvent::GetStaticType()); + } + + /** + * Remove all listeners. + */ + void RemoveAllListeners(); + + /** + * Dispatch an event synchronously to all registered listeners. + * This will call all listeners immediately on the current thread. + * + * @param event The event to dispatch + */ + void DispatchSync(const Event& event); + + /** + * Dispatch an event synchronously using perfect forwarding. + * This creates the event object and dispatches it immediately. + */ + template + void DispatchSync(Args&&... args) { + EventType event(std::forward(args)...); + DispatchSync(event); + } + + /** + * Queue an event for asynchronous dispatch. + * The event will be dispatched on the background thread. + * + * @param event The event to queue (will be copied) + */ + void DispatchAsync(std::unique_ptr event); + + /** + * Queue an event for asynchronous dispatch using perfect forwarding. + */ + template + void DispatchAsync(Args&&... args) { + auto event = std::make_unique(std::forward(args)...); + DispatchAsync(std::move(event)); + } + + /** + * Start the background thread for asynchronous event processing. + * This is called automatically when needed, but can be called explicitly. + */ + void Start(); + + /** + * Stop the background thread and clear the event queue. + */ + void Stop(); + + /** + * Check if the background thread is running. + */ + bool IsRunning() const; + + /** + * Get the number of listeners registered for a specific event type. + */ + template + size_t GetListenerCount() const { + return GetListenerCount(TypedEvent::GetStaticType()); + } + + /** + * Get the total number of registered listeners. + */ + size_t GetTotalListenerCount() const; + + private: + struct ListenerInfo { + EventListener* listener; + size_t id; + }; + + // Type-erased methods for internal use + size_t AddListener(std::type_index event_type, EventListener* listener); + void RemoveAllListeners(std::type_index event_type); + size_t GetListenerCount(std::type_index event_type) const; + + // Background thread function for processing async events + void ProcessAsyncEvents(); + + // Member variables + mutable std::mutex listeners_mutex_; + std::unordered_map> listeners_; + + // Storage for callback listeners to manage their lifetime + std::vector> callback_listeners_; + + // Async event processing + std::mutex queue_mutex_; + std::queue> event_queue_; + std::condition_variable queue_condition_; + std::thread worker_thread_; + std::atomic running_; + std::atomic stop_requested_; + + // Listener ID generation + std::atomic next_listener_id_; +}; + +} // namespace nativeapi \ No newline at end of file diff --git a/src/event_dispatcher.o b/src/event_dispatcher.o new file mode 100644 index 0000000000000000000000000000000000000000..531f8a3885e42f346d362da3ea2671057319151d GIT binary patch literal 331912 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 GH2?pqzX1mT literal 0 HcmV?d00001 diff --git a/src/event_system.cpp b/src/event_system.cpp new file mode 100644 index 0000000..32dc94f --- /dev/null +++ b/src/event_system.cpp @@ -0,0 +1,10 @@ +#include "event_system.h" + +namespace nativeapi { + +EventDispatcher& GetGlobalEventDispatcher() { + static EventDispatcher global_dispatcher; + return global_dispatcher; +} + +} // namespace nativeapi \ No newline at end of file diff --git a/src/event_system.h b/src/event_system.h new file mode 100644 index 0000000..cb9307a --- /dev/null +++ b/src/event_system.h @@ -0,0 +1,110 @@ +#pragma once + +/** + * Generic Event Handling System + * + * This header provides a comprehensive, type-safe event handling mechanism + * that supports both observer patterns and callback-based event handling. + * + * Key Features: + * - Type-safe event dispatching using templates + * - Both synchronous and asynchronous event processing + * - Observer pattern support with EventListener interface + * - Callback-based handling with std::function + * - Thread-safe operations + * - Automatic lifetime management for callback listeners + * - Event timestamping + * - Exception safety in event handling + * + * Usage Examples: + * + * 1. Define custom events: + * class MyEvent : public TypedEvent { + * // Add event data here + * }; + * + * 2. Use observer pattern: + * class MyListener : public TypedEventListener { + * void OnTypedEvent(const MyEvent& event) override { + * // Handle event + * } + * }; + * + * 3. Use callback pattern: + * dispatcher.AddListener([](const MyEvent& event) { + * // Handle event + * }); + * + * 4. Dispatch events: + * dispatcher.DispatchSync(MyEvent()); // Synchronous + * dispatcher.DispatchAsync(MyEvent()); // Asynchronous + */ + +#include "event.h" +#include "event_dispatcher.h" + +namespace nativeapi { + +/** + * Convenience function to create a global event dispatcher instance. + * This is useful for applications that need a single, shared event system. + */ +EventDispatcher& GetGlobalEventDispatcher(); + +/** + * RAII helper class for automatically removing event listeners. + * This ensures listeners are properly cleaned up when they go out of scope. + */ +class EventListenerGuard { + public: + EventListenerGuard(EventDispatcher& dispatcher, size_t listener_id) + : dispatcher_(&dispatcher), listener_id_(listener_id) {} + + ~EventListenerGuard() { + if (dispatcher_ && listener_id_ != 0) { + dispatcher_->RemoveListener(listener_id_); + } + } + + // Non-copyable but movable + EventListenerGuard(const EventListenerGuard&) = delete; + EventListenerGuard& operator=(const EventListenerGuard&) = delete; + + EventListenerGuard(EventListenerGuard&& other) noexcept + : dispatcher_(other.dispatcher_), listener_id_(other.listener_id_) { + other.dispatcher_ = nullptr; + other.listener_id_ = 0; + } + + EventListenerGuard& operator=(EventListenerGuard&& other) noexcept { + if (this != &other) { + if (dispatcher_ && listener_id_ != 0) { + dispatcher_->RemoveListener(listener_id_); + } + dispatcher_ = other.dispatcher_; + listener_id_ = other.listener_id_; + other.dispatcher_ = nullptr; + other.listener_id_ = 0; + } + return *this; + } + + size_t GetListenerId() const { return listener_id_; } + + private: + EventDispatcher* dispatcher_; + size_t listener_id_; +}; + +/** + * Helper function to create an EventListenerGuard for automatic cleanup. + */ +template +EventListenerGuard AddScopedListener( + EventDispatcher& dispatcher, + std::function callback) { + size_t id = dispatcher.AddListener(std::move(callback)); + return EventListenerGuard(dispatcher, id); +} + +} // namespace nativeapi \ No newline at end of file diff --git a/src/event_system.o b/src/event_system.o new file mode 100644 index 0000000000000000000000000000000000000000..0c3dab855acefe6144f013234abeff15d5bfc8ff GIT binary patch literal 3536 zcmbtX&2Jk;6rYXLrl2%V!&jxC%1EdxA6@Jug@P)S)Y;e(RvPjFs0EES_SQDoyJmN6 z9K?szrbrPWRfuwc8!A#S^uU2~Kq#W(<4@qg4UmvHAud&g6yBSi=Zps%QuRr*Gw(OQ z_pxu^?AmWTg}DLCVk8!On(b(WGPZcf&U#udr`Z@gAi4WM$L+t8hiSW@C0bn_F0A1B`7UmVkkBe>^ek^~J&xv)ZFWpCB?m zK0LJVA{72XP;j7Jg@Lxr85wbGvPE=`t2W&+ZQcnIYQcx!%H9FxoWLM`LKNRv3bY=)Ckqb$A1|}97YyzSuU!>gnS@@=b0hGq zXSWuFz*_ZRtNJCr1DrZH^Kl8j#!5vn2cB9XG0hI&n|~Svq3j^8}l`= z#Xd4+S^>jq#-7DG(|3>N6kyo;T{Q*000ZS}Jaw+>m~`}USfQ`!4iYbZR1Pc30ORAc zqwgg30-h_R(C-~sO1Vi3V>aVI3j65Ow3ki+pEe9qfa!vLg%rKl#DKv#zH7qOwmI4h||J)eB>zm^!{sWc>~Mv?5ZSvHl2=J>hQvhN03hbV;fBSYKTz zf0{4ACarZ|p%>VLdkHZ7wP&Qy7L|Pp_H?2A3HuxtNHy&n%05p-HJkQV0Poemc||09 ztlxeZWKZ?$6&pi+rQ*M!62osmFMIqS^sn9pY*Zc4YsQT!x4?)6&welaiz?A?h^S`M F{vUcy3+ey> literal 0 HcmV?d00001 diff --git a/src/event_system_example.cpp b/src/event_system_example.cpp new file mode 100644 index 0000000..3e96461 --- /dev/null +++ b/src/event_system_example.cpp @@ -0,0 +1,135 @@ +#include "event_system.h" +#include "common_events.h" +#include +#include +#include + +namespace nativeapi { + +/** + * Example demonstrating various ways to use the generic event system + */ + +// Example 1: Observer pattern implementation +class DisplayEventObserver : public TypedEventListener { + public: + void OnTypedEvent(const DisplayAddedEvent& event) override { + std::cout << "Observer: Display added at " + << std::chrono::duration_cast( + event.GetTimestamp().time_since_epoch()).count() + << "ms" << std::endl; + } +}; + +// Example 2: Multi-event observer +class KeyboardEventObserver : public EventListener { + public: + void OnEvent(const Event& event) override { + if (auto key_pressed = dynamic_cast(&event)) { + OnKeyPressed(*key_pressed); + } else if (auto key_released = dynamic_cast(&event)) { + OnKeyReleased(*key_released); + } + } + + private: + void OnKeyPressed(const KeyPressedEvent& event) { + std::cout << "Observer: Key pressed - " << event.GetKeycode() << std::endl; + } + + void OnKeyReleased(const KeyReleasedEvent& event) { + std::cout << "Observer: Key released - " << event.GetKeycode() << std::endl; + } +}; + +void RunEventSystemExample() { + std::cout << "=== Generic Event System Example ===" << std::endl; + + // Get the global event dispatcher + auto& dispatcher = GetGlobalEventDispatcher(); + + // Example 1: Register an observer + DisplayEventObserver display_observer; + auto display_listener_id = dispatcher.AddListener(&display_observer); + + // Example 2: Register callback functions + auto key_pressed_guard = AddScopedListener(dispatcher, + [](const KeyPressedEvent& event) { + std::cout << "Lambda: Key pressed - " << event.GetKeycode() << std::endl; + }); + + auto key_released_guard = AddScopedListener(dispatcher, + [](const KeyReleasedEvent& event) { + std::cout << "Lambda: Key released - " << event.GetKeycode() << std::endl; + }); + + // Example 3: Register multiple event handler + KeyboardEventObserver keyboard_observer; + auto key_pressed_id2 = dispatcher.AddListener(&keyboard_observer); + auto key_released_id2 = dispatcher.AddListener(&keyboard_observer); + + // Example 4: Register application events + auto app_started_guard = AddScopedListener(dispatcher, + [](const ApplicationStartedEvent& event) { + std::cout << "Application started!" << std::endl; + }); + + auto app_exiting_guard = AddScopedListener(dispatcher, + [](const ApplicationExitingEvent& event) { + std::cout << "Application exiting with code: " << event.GetExitCode() << std::endl; + }); + + std::cout << "Total listeners registered: " << dispatcher.GetTotalListenerCount() << std::endl; + std::cout << "KeyPressed listeners: " << dispatcher.GetListenerCount() << std::endl; + + // Start async processing + dispatcher.Start(); + + // Example 5: Dispatch some synchronous events + std::cout << "\n--- Synchronous Events ---" << std::endl; + + // Create a dummy display (this would normally come from the system) + Display dummy_display; // Assuming Display has a default constructor + dispatcher.DispatchSync(dummy_display); + + dispatcher.DispatchSync(65); // 'A' key + dispatcher.DispatchSync(65); + + dispatcher.DispatchSync(); + + // Example 6: Dispatch some asynchronous events + std::cout << "\n--- Asynchronous Events ---" << std::endl; + + dispatcher.DispatchAsync(66); // 'B' key + dispatcher.DispatchAsync(66); + + dispatcher.DispatchAsync(0); + + // Wait a bit for async events to process + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + // Example 7: Remove specific listeners + dispatcher.RemoveListener(display_listener_id); + dispatcher.RemoveListener(key_pressed_id2); + dispatcher.RemoveListener(key_released_id2); + + std::cout << "\nAfter removing some listeners: " << dispatcher.GetTotalListenerCount() << std::endl; + + // Dispatch one more event to show remaining listeners + dispatcher.DispatchSync(67); // 'C' key + + // Stop async processing + dispatcher.Stop(); + + std::cout << "\n=== Example Complete ===" << std::endl; +} + +} // namespace nativeapi + +// If building as a standalone example +#ifdef EVENT_SYSTEM_EXAMPLE_MAIN +int main() { + nativeapi::RunEventSystemExample(); + return 0; +} +#endif \ No newline at end of file diff --git a/src/event_system_test.cpp b/src/event_system_test.cpp new file mode 100644 index 0000000..c06428c --- /dev/null +++ b/src/event_system_test.cpp @@ -0,0 +1,157 @@ +#include +#include +#include +#include +#include + +#include "../src/event_system.h" + +// Simple test events +class TestEvent : public nativeapi::TypedEvent { + public: + explicit TestEvent(int value) : value_(value) {} + int GetValue() const { return value_; } + private: + int value_; +}; + +class AnotherTestEvent : public nativeapi::TypedEvent { + public: + explicit AnotherTestEvent(const std::string& message) : message_(message) {} + const std::string& GetMessage() const { return message_; } + private: + std::string message_; +}; + +// Test observer +class TestObserver : public nativeapi::TypedEventListener { + public: + TestObserver() : event_count_(0) {} + + void OnTypedEvent(const TestEvent& event) override { + last_value_ = event.GetValue(); + event_count_++; + } + + int GetLastValue() const { return last_value_; } + int GetEventCount() const { return event_count_; } + + private: + int last_value_ = 0; + std::atomic event_count_; +}; + +int main() { + std::cout << "=== Event System Test ===" << std::endl; + + nativeapi::EventDispatcher dispatcher; + + // Test 1: Basic observer pattern + std::cout << "Test 1: Basic observer pattern" << std::endl; + TestObserver observer; + auto listener_id = dispatcher.AddListener(&observer); + + dispatcher.DispatchSync(42); + assert(observer.GetLastValue() == 42); + assert(observer.GetEventCount() == 1); + std::cout << "✓ Observer received event with value: " << observer.GetLastValue() << std::endl; + + // Test 2: Callback pattern + std::cout << "Test 2: Callback pattern" << std::endl; + std::atomic callback_called(false); + std::atomic callback_value(0); + + auto callback_id = dispatcher.AddListener( + [&](const TestEvent& event) { + callback_value = event.GetValue(); + callback_called = true; + }); + + dispatcher.DispatchSync(123); + assert(callback_called.load()); + assert(callback_value.load() == 123); + assert(observer.GetEventCount() == 2); // Observer should also get this event + std::cout << "✓ Callback received event with value: " << callback_value.load() << std::endl; + + // Test 3: Multiple event types + std::cout << "Test 3: Multiple event types" << std::endl; + std::atomic another_callback_called(false); + std::string received_message; + + auto another_callback_id = dispatcher.AddListener( + [&](const AnotherTestEvent& event) { + received_message = event.GetMessage(); + another_callback_called = true; + }); + + dispatcher.DispatchSync("Hello World"); + assert(another_callback_called.load()); + assert(received_message == "Hello World"); + std::cout << "✓ Another callback received message: " << received_message << std::endl; + + // Test 4: Async dispatch + std::cout << "Test 4: Asynchronous dispatch" << std::endl; + dispatcher.Start(); + + std::atomic async_callback_called(false); + auto async_callback_id = dispatcher.AddListener( + [&](const TestEvent& event) { + async_callback_called = true; + }); + + dispatcher.DispatchAsync(999); + + // Wait for async event to be processed + auto timeout = std::chrono::steady_clock::now() + std::chrono::seconds(1); + while (!async_callback_called.load() && std::chrono::steady_clock::now() < timeout) { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + + assert(async_callback_called.load()); + std::cout << "✓ Async event processed successfully" << std::endl; + + // Test 5: Listener removal + std::cout << "Test 5: Listener removal" << std::endl; + int initial_count = observer.GetEventCount(); + + assert(dispatcher.RemoveListener(callback_id)); + dispatcher.DispatchSync(777); + + // Observer should get the event, but the removed callback should not + assert(observer.GetEventCount() == initial_count + 1); + std::cout << "✓ Listener removed successfully" << std::endl; + + // Test 6: Listener count + std::cout << "Test 6: Listener count" << std::endl; + size_t test_event_listeners = dispatcher.GetListenerCount(); + size_t total_listeners = dispatcher.GetTotalListenerCount(); + std::cout << "✓ TestEvent listeners: " << test_event_listeners << std::endl; + std::cout << "✓ Total listeners: " << total_listeners << std::endl; + + // Test 7: Scoped listener (RAII) + std::cout << "Test 7: Scoped listener (RAII)" << std::endl; + std::atomic scoped_callback_called(false); + { + auto scoped_guard = nativeapi::AddScopedListener(dispatcher, + [&](const TestEvent& event) { + scoped_callback_called = true; + }); + + dispatcher.DispatchSync(555); + assert(scoped_callback_called.load()); + std::cout << "✓ Scoped listener called" << std::endl; + } + // Scoped listener should be automatically removed here + + scoped_callback_called = false; + dispatcher.DispatchSync(666); + assert(!scoped_callback_called.load()); + std::cout << "✓ Scoped listener automatically removed" << std::endl; + + // Cleanup + dispatcher.Stop(); + dispatcher.RemoveAllListeners(); + + std::cout << "\n=== All Tests Passed! ===" << std::endl; + return 0; +} \ No newline at end of file diff --git a/src/event_test b/src/event_test new file mode 100755 index 0000000000000000000000000000000000000000..e1445c19181b2791166b4dfcf367dfc4bc9fd630 GIT binary patch literal 260960 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 literal 0 HcmV?d00001 diff --git a/src/simple_event_test.cpp b/src/simple_event_test.cpp new file mode 100644 index 0000000..5a661ca --- /dev/null +++ b/src/simple_event_test.cpp @@ -0,0 +1,55 @@ +#include +#include + +#include "event_system.h" + +// Simple test event +class SimpleEvent : public nativeapi::TypedEvent { + public: + explicit SimpleEvent(int value) : value_(value) {} + int GetValue() const { return value_; } + private: + int value_; +}; + +int main() { + std::cout << "=== Simple Event Test ===" << std::endl; + + nativeapi::EventDispatcher dispatcher; + + // Test 1: Observer pattern + class SimpleObserver : public nativeapi::TypedEventListener { + public: + SimpleObserver() : called_(false), value_(0) {} + + void OnTypedEvent(const SimpleEvent& event) override { + std::cout << "Observer called with value: " << event.GetValue() << std::endl; + value_ = event.GetValue(); + called_ = true; + } + + bool IsCalled() const { return called_; } + int GetValue() const { return value_; } + + private: + bool called_; + int value_; + }; + + SimpleObserver observer; + auto listener_id = dispatcher.AddListener(&observer); + std::cout << "Listener ID: " << listener_id << std::endl; + + SimpleEvent event(42); + std::cout << "Dispatching event..." << std::endl; + dispatcher.DispatchSync(event); + + std::cout << "Observer called: " << observer.IsCalled() << std::endl; + std::cout << "Observer value: " << observer.GetValue() << std::endl; + + assert(observer.IsCalled()); + assert(observer.GetValue() == 42); + + std::cout << "✓ Test passed!" << std::endl; + return 0; +} \ No newline at end of file diff --git a/src/simple_test b/src/simple_test new file mode 100755 index 0000000000000000000000000000000000000000..822d9cf22df98913683334b82a395b2df81ccd55 GIT binary patch literal 164272 zcmeFa4|rWgwf}vRCNy9r5n7E<@PGvil#>1d3Kj^Zfm3Kp>>upqS4h(|rGYdJ$w_IE zKZUf|m=1JE_$_s*VeECQd060?#|l;IP`rS5on=(YDL>WN<7?~ltSw!m#KY8?91C}J@WjkaU4(`sv$pE3Qk z+7+kP*3>nvJ9XWRGfq8Y`sBtnlc%Z(B3GPWseaM?#W9AZOY&Sb#&S29w8u|qV_mwG zfApb?Q!kIdujjD&RSjQRJU?gPzQw~*M&y<{QbvA+pF8B~^m%-eGOCZ9FT`pXRmnS_ z-&y?jR6n=+gw5KS$}Sz(GO*zG{F3bEcxRRCR_e81j?5G zbVUACI+m?`G9v%^(b>!YE~5PG2sv+Jz_PWwmA+=n{|FN$TmHQf?YZ=zmJgTnFzi0N3?rbggsmsF)sH->(SU-D+>+W6P$91gtX#V&CWUak1i9uN$9CRB9}CGyOfD z)u{X-lkriv{LdKQ55>mEN=t%#VigrvtzJ`C(U`1kNLEzDD&{PjSFxhHq57(t#$bmWCI6L8nO3o|qH0b3`U;^omX%kPUsAR3Ok}uxVRC9oMMZK|!qp-f*l@ITTvq! z6>BRSYGll&Ux&)e7RV5|($}u3x`xW9uWm|KuM_!J)RwOmmh%^`sckGmVv9K1Vf2WP973Yils906Qs*5`8oM@wJb$tvD zjmZ^Nr<@|2>oX*IRTV5HHAPZYCjX)fE~uC`xg>Vc+&Qx@sF*r=div8e|Krrjrq9CtIUqH>K;3iJk4zgx{>8FA-rD#Xjfe z)o8jf_GLG{O4EnOcDU*FFMJny#>9T)rIr4H*d8~1t)>r+{oGAgYPuk{&rSdQyVnq@ z9}@esn=Vy)e(a!|PM&lJpYmcKKx)xJleRZ1_7OMTpyhL86G+RCcb-Qj{aN-2gA?62 z+RKl-`7=WKu~SU^TpG&1`@amIL@2-8%`Xq-54rivLiyWV{;NXyPkztvuMg!9y7}uu z`MV!B-_u99yk~dee6N4u{346L(7c~gD}Sb!39gFBZ;#0L#zA-= z$*qPI<0*B9I4C7m**AUPq&r-VJ{Qx zvGPA+<@Z|o#a4cwmH$yI-?8$KvhoM5{G+Y>AuHc|MyO=ho@ES=vC0=%`NvxMMOME1 z=uoM}R({+nAGh+4v+^fe`Nv!NC072&t^65Q{sb$()XG1>%1>DNZb+fjaw~tLRep(; zf0C8I%*sF6%3o#WpJL_LTlsPp>HVy;@+W(l;07!IG%J6zl|RMGZ@2O_Bz9@rto&(K z`3@`pbSr;{m4Aknzst%$)5`C(@@H82T~_{CR(`jYf3B7P|M!o7DLnR_MDzZFL~H(U z3UgwKO{;hseEo&vLQ51)S6;W@G46UOj=;m1m2Qht?mx_{sB@bJoZO^eI!f6-5i zr8;Q~k6!;Qr(Nv^d`WBmA^D-2PlYEsnPT?RV4t6$jhD&rgeE?SIivi$m>y(oahO z(EoiuEsnMSUOz1hc>f)KS{!Wut$tb@Ykz~E7Khru+)s-m?O))h#ew$E^3&ot`=|P8 zahUzb`)P5M{YUs|aghDFep(!3|J(me_dhP_eSTUTVgHMMS{z{ilYUwpU;p?0v^c!} zd;PRHy8b)-v;>0vxB6*uc>N82S{z;faz8B&u781_7RS~<%TJ3#>!0eU#gX+N@25|d z^bvkq99n;_pB6{f|MtOj|0VG0-{+^rq4mF*P7j~3c1%ueW#PwW$8^37pYZZw!Sr*X z^wXjAW1;keq4Wcx^nIc9*FxzphSIl((zk`uH-*w`L+QFudSxhmWhi}FC_O)vzA%(N zHyMm#L%cj&eMq(-c62$!5<3@gM#5c zGjF~6vc7FNr|bhPaZRTzPBfo$Hzi||EYVmabF_g=>g1YJU zrGEc)5Zf11sZ&4rdW#b+H#&*dGAGfJa<0IY>*waKiIV;fuG~#8lk{=8 zayPwB(x-am^E==yIhWw9wM71)oAVHk%;dyX^ptb7$0dIvIge3Jt9G$&nSv+T+22WL z%iixXezkNTtJ=U+>0hGdDOVK*;v zxGmAr)ShTrym>{UHSYvjRuU~`&Xlf1^NpKhO@}=~Myww*gxTV4iMFy`iI$f|$_Asr zZHatQ33a*>sj_a-OsY(7f=J_C)af2f6h2WTEp(Cthw_PVA^misBs7KY)D(Xo&cbaq`ooI(q zpXBYN&YYG#Uh-4Q;+Jz<-V|apVIK@+B((6&rh%?R+hTr2_d2$nWN++Bo=Udpz01x1 zjg)Ssq}JAw2g!Ow27O?XC-fE4leWdXOj=7#AZue+;id^V0W~OS9U@N!MmgeGYN@ki zhKGygI~)JUjOEgI7|ZJ<(Y$Bb|2co@73rBJ5Xm*$wMToP(73c5b8+E>>oEmjhcPXPbnbJD^7pV}N zOs=Yzx;p*8C8DIV^`C|6hR3o=Q`1g>PY7v^DO0D8duKJwx(N6x?`Z!V|?myltAU; zTh*CLPm2<*48UDxIJ~Jj{DN2K7sAD;%@gKUvJmDwMu3#_GJ7AfpR`RBZaju5+w-e)BsyO)Ew8>ko*b;KSKv4*cuR5-HR=?mu|s=BjKhInJm4Hay%vMa?kfjFnc}@;9Yh_(6_o;b>ENykGe& zsXSIHA7IPocETA&#=tl)^;gOajP^UoP^O$`b-**`=}FQ8((BHAV~b5>VY&cWVyuTn9gp#gFe&G16Z^PT4UIxdoA1#i zP-x5lD@Q6AVIN_Kqt)9MlRd8wy`jtJgj>B#d9l2hY3a-^>T zH+jNe#7(B-RF;x>R^N={4fa#ybVq)Vh%T<$>Z;eBn+rUe7t~eJqABeKe#api3-J-b z+)L8sBz6rd@Fb6`v7kZEUvWM&;Iip(^?AF|4#IgkSCXTWH~j+TP&eiLSSn^JrvQuc z*N{L28&t;m$YW_yX3h*T7gpph+hlZ+S`@>3AzG&2Wa*O8wiM(o8S+AD%3LE z1*^zc>5>#f)|Au1sbGe-@|}UV(ml`E->@R&cSyge{ua*HnA@=kG9;^o&XdPH51Gd) zC<8cJ_lyJioz%maJkKNAOrXuqkT(0}eIwb7NO2fACh~x^zynH|xx6)gTut zp5b|Cn^YERP?Yt^B%-Lf3@kMzI-~(Qa-!FfpmB^&q72+9jK-!GQ zWSHniLun&w%6XA>y7?bDO-G7#QZMC9g$-kH=)eg^jE{SSIoghFqdHyw$FOpF+_dh? zA|u>ZnO1ez>*@KPJmFioDaGPBaFM@GsI6Rr81}lU+&054%gF!vk7fcq^QSC}$4f%g z3E^5roWUEy5e%|9bP&stJ}yz6(v^9GWIeiymVJe959z>$PzZc!cH9}mz>n_+e% z+hk*5ziemoYt_$)vE3S%OY<7vB9-#{wC2c`aIvfp?v69x$)`I3mg%mvYrr1tz}bEW z+^s%4%E0UpJ-ANy7aD6X))~=~i{PHgWAP;@4MjEep|oD+s6!<_tEe|#ittYi~4BN(t4;5Yamy4mhy?#VPhCtcrcG(G5+0SQ|EwIZDiN0LERhea9g`AdQ zuT}O;DcihyD2J1Wp;+PPOGOF6{(W`66d4+oESCQZKi?wNn}>3em-Bya@|1zksOEK< zSB0!GjU6H#9$4;4^)rcl%$~~A%!PKrv%G@aGYc}&M0~@s$Se36Em+p)o+OB8Do&46 z>lN-8u@8`P;%8oWK9_cq-r%Zx^Ea>Q$-!|%W^TKm)pFy(mZqWB#Rr)#$MyL62vHYjHsA-YuOt?x!%NwiCp)Au3V$S+?^Jmm?4+Zl=#EDx~#~>)28|>aZKWM zj5g)cpzmE&=gx=lLYssIG8`@}#kVc!$G>{Zm_7NOeSgSO{O7;7iidSz6u?P?j>Ey` z8xO{khqaa+q?v1|7u1@{zzHemKGE~7@K)=lM$FC(NfL;+fC_iX@PYH z=3BVyw!aHg>EfC<1>qwdq43Fvkr6NG3~)FnL#OS2 zvTTs!w}C5-5PB+yD@L@lp7e%wmM5S}&#{#p;L-Te+PJKWD!w~fUqw5cy1cq(G;D2o z+DI|e8CPpQ3B_Nn1|JrB;_pq^p*`y;^_RjAnHl$&!lJSRq-3cdN~B6L6lIxJ_gPv} z$;Hmf3$h8K2bD#pe{xRQC~j$RAWw2a+-|vXXc#YjT~VjpDe^=g!Wzl7&*RnYsI(%h z-G3zT z#173}RMi?xs6eoR8`cJis3Zo3b6|0wh=p1*cq30K(Xe+UoSu_ux>%ZwSCKtjp011z z&_jC2j0}Ir-tGD5l^3;$pd9>0l<+uG?`!^4n=H>2(HnV88ZK)>fbWG=U4QePx| z+saE!`(_-NmNEx4OU~Em>Rb9`fTF3=Vn~M8RvvH7zxk#ZkG1Q%&bemOQcfW_e7G&}X$RT4CY9~OKcU?!Kzl>r==%$=SSVkB!pa+y{ z`;e@CyyK{mZQ>5@!i*%N+sE|e3`wz_y>GOP+mvd{X!PUxFMrj)Q8vGrQ?{9_rSSu5 z#p-AN(=|l9G+rYRn{5twjeo_bcwR>vG%jQB-$xi}Q{-2sNLo>W7G-YGff1G!*WJoq z#NL6M!#`$u${CVl25Cz;nUjX!X%;&T$<8Hy9+ZO5o7_H=+b-QmpH8!=-2Hmkw*~wd za);9HZc>}2fwH0Y_CSe{Ni=BlOm{?i$@+Yov3A=UY>Smnx!n1rJ?^Gim7B@aIQI^^5?y+R}L#7NRtkJ!2>J@qapk>(#wl09hJn+y&%RGdUWk?!R zGbF8M_{_(V&#U@r;|$W{AJWRRBlN{uS6Ex({Fd-rs@+4V?*utVpL>~yEF1M4=_#zC z3wgJ>vd)y;wz3W@>+jOpHhEUrM7C7^Z_&YJW-5|QIjcl!X#V334Cp_8?FF3nSQcrl zlR2|L3p;zBdU~-|+t>5}&=VKTYNgQFxpWfZNwzSL~5M*j2gVW4RPHGcI z<-W1C>!g(KY{;x(W}@ z*xE)h80`BM4N!6Zp;Cn#pEgmgl0KrRQaV&DoIFA?HZsvpu9|mPqUCM(SocRdp@fex5d-B6bnH(g znCA0PB1ep##&z58w$_(;VjuU`Jc>-i^a_^NBCCXJNXj*vD{HlPy)u6jm`o>%-9?+7 z?gb#Qw219q@_LiWxr00|XkiI5mw9%9J=@XJ~Yn@o4Wt7ekX%J_p9j2Y~f`Q|;Ww>80T4_Q5i;aXPRyagvQ>O2V)0vDj zZc)GQN8RVdgD?#2eJ8#A@A>72jRj=zdzIsCe~hyF_;1nK%^B0?YVl!ZgAvASi z44w8u*(=v-%*wEV$0d))#W>1eQsX%P$L@|46G%DlFvR9c7fe#lf0LZcO;OYK;k14J zkEx5vixujM@dN2v+q@oapl#gQ@ONk2^FQaK7EC!mGGdqY`my$+fq62Sq&2sYjD>mp zLuT2=KPEr;m`Ex|*gt^R+?GDwP(jO>>tkaG`xabA~1^PU;p%R2uGYlK3v%T`*k zMj=F%bNH;QRi+mn%~OP+7cTO~RAd^@g_b}&I!{m&!|KIHY5-FBFB5`3IwaLmVP1ij zu4b~s_g|03Zj@HDI5kUo-V_K%V`8Zj>1;2}_KN&3$P*Rgezbes4nE1F{ak5jFSJjR zXu#Oio0>u=?ipzGSuN}arK#U)4RPYR(&?u;=@b;wuM9KE%dxvZ_b?YJQGc-*hf~W zQWn?|beWDeTtBMMS}&)yfc8CeGuGfXqDR^8XVXZ~Ktnw&Rm0>OCT@^>8#ngEk|osc zb?uXEjX&^|bU~s4^Z3+p-PYQP?>Q;F;|L8Hgo&t+T~Vl}@6WYh%K43J?2n12q((0N zA2?RrptVfjrQRNKQ_gmx3cP&Sr#6%;LD*2n2zD3wWk9eHS=TK3!mA1pkG5&?-|#C+m>A;(`K9Z*E51USjajU!EGEdwA+iB zxuv?zEE+1vR%NTVB6qn{@D|B3x3qR40L)YskCNRk0{P2OzVq#$Nzjnqf5@n<-Pow4L8 z)Z$}T0mWr(RZA%LJZxOp`y`n?8>77t*f0{6BoA)Jpta_Q#LPhRr zj%&Y4B+zyGEGeUhHX@@DPOJq;Xyy2;`mg}W` zIrPYOC0>h_XDgQPoU_*~*W=K*QzD7rler9Akg-TG7M&5Xa^c3$sYc9Iq#1JcMPlaG z1qF1KO7l>p#KwNyJl2$veCY+WVB9SJ#d)Jo$vebO79JSda>#lnI>{9L4iC-HL$ zpRhpQywLs&1BBo%ygY!Ha9WbTbZzk-PEXhysaqqJAr8Nuo%WtH9mS*xn9=iEKgin=sscy-Ss_-7jSUNd9l zqvQo>=5^t>3zuNT@AV2B#xr3tRww` z&|+ORFeg2;6thy-u!OP%6sOa&)*W)Ugm%@Vw5phAhyURGXq_lj(mGbHJqn4A%ch2h;1?W34mJOwKN@W<779>uA$rD3)!U*r!7fa4o z5*>dYmtNXUM>1Re z|3GZ>;YqTT_%j1T8$w)bKO6A4nf8ZSrJOCg+&$&oEqGRM;hl0A#C<5^%g*L00$S`I zm`+Z&iAm<|GE`lJ8>vPGxf<5p|5fqd?w!Ni`$f@)%Ur{y$1LKq5UM$sQG{!W-|~u` zKry)@>77$(p*lJ0QFD|*OHYMXlila8f{3ICTiT^>C{6q+!>dfbZ35w*uobWWNj57k z@-!*>d0O?8a%O^=x@ILQLMrrbJ)6nm3*BR(=yF~ZDo#!3i9`_&9Ula7YSP3!e#_kJ zBPIkIkki2Q%^+(c#Y2kKztNil0l{^jNQqDgKpaQYdE&I302nOEhNwnOx z3YU^$J??8c;}%p{FE*Z_$|9_C-^)QO)>}H_4_bKm;u2AAvvGbKFbsapyFzBfUNfBV zJEo!5#hcx+e8wDfHFS&Np1j@LE9@lzU?6yLRO`?)IeAN!?J_MHF(I#(r~8!lx|4GLp`w(i zG_CShl0JNzZ~Cz-(OkBx!0V>4&!{h#cFl@JXPdUU^$+*zdm1vGY+X>4IAw8r;)!=g zG3GR;(^Q^FdTpq$FY;5n+?8Onb%cuA*hsp4DlclM@8bU5_tx^A(kF#qU@s%y=Uoq6TT1v7vfgQO*`!@$5bBvD6vS33?5LXJy;CkFznQV~8ye(9?ScbN&{m9y5pO zsKKSo#gy}i7+Tx7S)784MyRMDF|~VkBG>Ay*C?w=`e$xSku_t7xao1RmtJB2>=S%! z-V@iC5!3PzJ=uD|3Gisv%#tfYosTXl_v|b+$;vR19`<^2UkWE?lcW7%+S+G6pHf;n zf?g&`nb~?Db%my=IP#f~sM*_bHg}b{@?S>ffCuuPhRI@MTq{@_*S7~bO)p10GM0$i zyG3KS^2P*W_as`bkgkB<+;zJ`nXxz-4Pt~9S8p}!p>}!EfSepDp96As5sGKt&+0i} zmzt*>`I{S=tEc;hbM)$YI@PkSp0CMeba(aakm;}QF5#neb=5U(^uFNgxt?Mft7plf zS{K~}R?m4RyD!`7S*0|4^;{FNdVcaT5i%SD#%1Ez%Z0?$_KqZO*bO3+Y~B6y-yhp? ze&n7(rd`TuAP3|K2DAlZW-J3x!^#JGT7BwTn3eC+ynKy+A zwnfcP7RXbqmelZz*0js!i|iJ4;x!%ixSZlUui|a60j^)`Dd%C2a|a{lJniP{3`{x4 z$iY8_-s6;1UuHe?1E=`&HGCczB_YVdl*KhkeXz>Ea&dw!mXUW zhe!CZN9_^zeUKdQx&CvptZL$1Wd2@}&OTQcJFf5F=){up){pwj%XDVQYJg4X`*|xU z*B)V$rdY~(o0mIG6ZG0x)9aGuA5&T*ZjTOT_k=#IO|MXy_Tc7-r?Jj8t>|t*0=qu? zCyj&b0C}I&_$@iU6oFKkO*EyUVAFGfDBtihYpn!#=AsU1t@UGS5mSGZY)FB3VfI4e zmAovS(*>4AMU7tBG-f_IiOak;@@Y`Y8YK6lOb++@Lp4V7p5}q(R(;+h%gU~Y8Az@~ z|3&VN!&Zi!FVgDD<#V^Z(I$t+#E5J_BcXeZjen{OI&CykYuiw zatnLA(ifb>6MZ}omNlbS8}y$b_nK_{BL_-)&L*vBB(+nyk~FJXuWNY68Sf+KekEF~ z`40uI9PV4VB3`j8t`WO+$qb{3&%H=r^hn9m#GmEJkApvvux%`noc6M$oezE-R=Dx= z=%s%X|A|G4EfxPrv_fG$;Sww`byfE7iyDQRHg!Il%jE&a+%?tfHgnp>=1HFMbnPf?8$nVBD%eIgY1PuNj+5>; zmu*JrW*gN?GiQ};Zs3JY_q!X!YAxE6g&SMcj?xnRlQ$#SW0|iOVEfV9W_Io8eAHuGr?{pGy9g(HC$v1U-Weaholcnn-%sUjI>;>*zs zk3M){3o@l;{ZJmijO&o!vPbm)9&tCyo}9i?HRw+Kj-G&Zch)syF{I+En_|MmYbfpz&w`T``fdm2!2>u(;#&zgw312J^>5M z{o6MUP=}dRGGudA)#4NhIK{Sg9qtrk+Y5_1EkA)V1DkUGQh z^JHj8T4ohsX6eWInbNAHoDUF>9A(6oib%fz3(%3OW|_34C-SPNpGeiTi?PK<=5-+W zwy;+ach}q%7x5m~Cl-jRL9{x3-1xdU?R7Fx#Rd_gb>22c*J=F$uY^63Xz7vj6HJF! z+xm#sC#wrd2h{3WA2e&t4rO8F?U$HB&nL<{5^V{%BBZor){%EijSiUYva<7Ekd#k+-K=pEk=Sfd+__>qWwYsVR|q~ z=Aab1uUAJgxc}pf!dhoDJZajGEryxx30x~@u&h%Y%Lfi7((AOn?rI7Ajy*ffsfdG9 z!47oGtoD$j;){7eVh16URO2;z%xz13Iq@x>xxw9V#{3KJ7wM7413IN|i0V~ou`i)h zLn*75UXQ4VU|4tlml&2WU&g3pJMq(Hm=@^3AR}v?>HS7WKWz*zYBGh0J=lb< zeXlvsOQv^{m$_X`%kqB5?@Ebm)IaHP%DbqElb(_XoH9Io)12PnjfbDMvMQS}pQuSuas%j%O=c_c$qhR#{(zd@YRTJRweti^Prc z{;%eImz)8dl8j)`UPh}#wmT6O6k`#NPC9pnb?eh3S&`K~AJQZy>OasOmAT6=@@BMj zceljBt#+j4=^AYiGMF{L#9(Qud%{?_@v|D+nkWCaD-V{A)&&&Ieh1-dQ-(Pr?m}W+ zFU}Ov-6sgkct_FNnDJ^jiCy}tcWI&ENc1iKkT3lu#1RWX8 zamQ6}VFyp)ve~nIn}B<4vX32uWzSEL^g}key)B`dIfV91H|ro>Dn{OV1!HX7A^{rR zDsF#|kvWrU0e=t}w;4fd##{}0P+Y?MIB`pd!bONWC?*~LZbs?f3~@^o;MYH3KJHgC zax%4}514;Igrj3fP1)ouD0YWQ-ey&X@_MKtP1KV?Gm3xYrAyPE#-5mtK54NhN2s?$ za2a%&U&=SZ*sGwoUh0aHat_C6EG^q>q&KK(=5Ce$AzHWmWO%+1zH}9!3kR9ij6c8^ zC}P!&xA8EqNVG2}HZ8hg0C6Q|3obUobVxbB<|cyZO5&TeIX_B8@-o*>Z{XxmMm+pJ(=vvRxxut%Ctxpu<~|46Dd#~WU5_X2NhU3E%JWD%s3XWYtIRtVa>G zG4j0@DAM_cB!c$j$=-{Z^k62;Q<>F#ze_Qn$mJV?RU4d}w&bE-r+|Eib*;PMwSn`@ zF&KB>zbTycY*j3YdTJMAIQe$ILaV0SQ_kZmjM^H^(;rh&$q{j7D=)r7PXzEIdL{uQ75@pI zwujH!(%g`Sx_rZu2%!gTq9XC5;s*2`S4y6{5IN$r202z4R;Q#qEifO$n*cY5+wI%Xgx+Y$`Xo3Itx<-;O!Ie^7+to7N0X4-ZJ@OH#t= zO-4>UA3J`Hi8h%I@C}BV!%>%EtZUzHRWuS0|t%f$!5>&wazgKN%{K|-hrx|+otcYbYKrV;I#{0oj5qs zubCHs-uR5@x|>S1^J(`_|X%&6fJbmsW zOGnZ?#Ncu+(27-Tx3&Ep-&*| zJ89_)v}B4t<@``Zzzg%vy?hLwrN~T_8H|s%SK6!*d^Xob^m~p9lHt^J8KK#t2r?eE zrD$NCp_WT2zp&8UEaTC*{-^P;!y^V$lJ9kqx5LbB3dePBCy4R0PR-5fVrn;EiBsWass9X_r9J*n?+t?$(& zx-eI7QG^bEA*-1Ta&Rx)B!vTe;ZY)7U@!bdsx0QErGVodPTEVyx~O-CNe>Ld;@8?L`W`)P#G4}i+}9S9F2g! zX}=_G-|6dlXaV1=KZP;{ITK6o775diN>e|k6Exp>WE-yf3Ix^|K9?zY1WHsXcJk12j40=va7A?9u&Smpv zQDu+GS%_rKB)1 zZ{Q>nZI>5F!FTnE2WM|4s924*-6AC{+cYw-3(t*TWy|1h8|IiYlHW^NXvE$vvX+TI za}UVQ>PR!=q>ectTQFL@fXZU7Rv^=YgmsGY?YC8vWS7s-Vw{~(-gc{~rWDn5 zhrNcJ9IHg?;`5$?k$Zcoi&nkQowCk_97ZV$^G74={P)k>8h#NtZ~GKU|Ge!{>0k65 zcSnCvO8E_jC*VQILEl^C8Lp`FA4*P}v^PIp-v4)~reTY-%*$T&`R?!+stL*=fOxf( z^L-s!Z}^$>sj?wA@*4{6N(Wd`LJL5kTQ3H?l`$p4S{jWgwi4Y6{%x4x8A-~#1dHI3 z&v^y4eV+*PIDK`@X17}(gUG&ERtqX*xvalS)-!($O~ubs(e|vFogl}K4Bd8z-ovL~ zy45z&v?kOg2bK&OeWXh7>pZ*3=&9eLzD~d-_JiZUzyz0aJkx~iz;%ZOzteY?0^jiJ zD_mz@9*sE&BS*^q+0c-p`j7KnExZZBoyFu&K!xp(s zO_OSM>uJ^EAQK*QwmnN$A3*=Ch%-HJbf8mCVq~%Wv!Sn3&~id)K7kpfa)#a*NS9QD z(#;`Z4(IZwS6@&8{8<_r_woOb8IyAUHjQ_(vju-z>fgxeo z3aR}UkpG{dKBJud@y@haTNFJ!al*g0V>xsSJC+HpYMkjE z%OWyEJ~yuRE_0f5C1Y*rZ~q`q=l7{p%VHZ;@}D@Z(jN0i`vgaL;^aE9jPHaFodJa7 zZ*|$OuFV4lgySzc%5zcoHVXH0RobuXi$3<=c(L9q<3(rI#~l#Do= zMrR*ER%ZFp(}70z|C?q1|Jn3x;zk_%e;T(v>U%dH-2cm~?(Y6yE^rKC59X#_VEf;$ zc4JY|O=$NYvH_IpaY~Q;)pQ^*@}W8z(aV^TSLtN-)meIhW>#gVYUB{GpehP#*VV9i z2}(jjYmZnIF%Q1M*jOb)hoQQfVqKj05@ph@s?haL$Wzou>JI<5b8ma{0)&KlCPe&!%mRel_EU z8+Y=zCLrz-C+S{YM>&RRce?en%DNjTx+zYcG!~TR$dltE-D4fW9;=@}ODu-gV{L+9 zCZi|CgH=tnlcm~=X-PE%>m;TtUHLnJm9KrG1A6bQfB=`zyh@?n9^5M6>eMw z=30RI(;zj|wP)sd&m7$F@OXVc5~FWjAR_~g^sU(!JE~bMgihT>sB&t#Y7A1s_Fu^ zrr`>vA7a^q`rd8ejec|;Pp>&`@)v>vd-`7yZ(963|F{GH81=0^`~M)*fPrl*dmQZ3 z6Y35=^}ri{RQ9;NA(cOG&I*t-=av4}rjDCMM^|(k{zN5QG=Ky4 zW?!cb+>Szyl=B*kTV}a@r(JXoeU%JAvkpM$fIK|B-t&xfJd;!SbuW;N(~pS2=11@z zI7*&>@CWGBOXWGFmxG&WIe{%2T1zTBcTAI?v`s8k_EW0kbb2lvW;+C<1(5qX~KE zjHE>kI4>E|}-)Bdy5#F~;G?ir?Om{FtU)c^u-IeGCq_qx3pVUsI z4O^~X`VW?Wq(nJ{#LRUnzAQQ6^U)DntD?Ns+9G9`Zmo=@-&(s8?bcRFPPjF1prh@0 zGu5IO^M8q&)@;}s9EMe91*?W^tL!)0SI~UOe!@=D%qMS?`~KFzvg>id%hv0xNw0zJ zWWLwT2^lW|U~n0Gld#rOmvq^+zJQ9~i%pNR@%02B+xvuO@Xv#dhN!X|vqZ{D4YZ__ z%=zc*x!;boh~}bTjxr1f;y$E%i{KlrO8fwcaOkevu;9 z#f>ISs(cq@kuM}o8%3hs!xyqsy%DGJk4kIq$hXFt`*P%EATw*^a6%rpvP+YQh2_V| zk)sA)nIG+C=~~P;49HISmEj)S|Js7OLmSU7j%zGjQnkC1IS?5+thR*@=C5g%C+Fry zP6an|DoBf7-)i#zu;)eRKMHpqJ>?&ItD*iKOC)*g&5~rL%^$?i$pmc6f9*OM5Z?bu zYLP;h-YGmt!(2PO>zrpz~%Z$DPz8gtd!=>w;|YnZd4Tq@3=hRZW~v{ zS5BEM4O_i0Z%>u-#hE${Jo^e-PFw!latB_e9lA+AaZOH}7IW{DIDR>PlfG&R>#lipshN$u^I zB&TiDF1@|Y{VN^SO&i=~g<#uVn)C{3wRc4^Et}RUJ^vwI2r&BI>^4*+Y+G=>rikeJ z73V8lTBr4c;wnv;_)*h(J8T|1+3np`qae5CH>P<`cX>W~tycfBU;USo({`6sPxnE^ z`;mk{ZTYj)JO;H=%2_8hxQyGD?&5SRa{z0s;US}+%l#&<(EJ*4 zItM!Xy0gHrInrlSqHNNQK2A|y$(V?YPwC4APdq$Ty5E-nxF%(y{Zv1toD)QAzPw+g zYV**^NvZo;w=TErq;7M%?l;}K{cBVY52OjsXGHhhS2sg(ttM4vx0CY-d|LJNYd(zh)z4{iXIazh55=@Z0FRhrkg;zH_>WiZCBU zh0a8k+ul2SyGm!?CcOxh{-ee}kyg#$>ZSIYxFuhJz3^N$kI0M6(S+SR@W{u z;1WE|`||U06;LV+)P{Rnf(`QiNvnBJMYfYT`c&DV%-ex{o}drrJYDvdELpuYJ}A#B z+REP2$oUnS`tm1*@jLv%E7_0+pNjr0qqR7#dHYvl9M{(1lJ!)FxXJlG>ySq6-t#(r zsBjz;Dr7Py$l|L9MLUE1ee4-e5~BoT?+lx9DAD=U&ig-`4Wl9ZHK+fEZjB66FKk@$eJX9^&bn5{Rpsfx z&C+;=`P?36WvoX+d3{4f!sfn*RK~V({q^u`JNAxCVRSUI?&55$ zfS!pBvdt4QhF`E}l6dnO3~4t*+GY1Z;~;teS5MH}@~@S4v4}5oOf8CRTl_jasit;X zDGGF77j9&&(?fU1*H_>;9HtzqN~w%v^L*!)8sX3TnRLuaNr%Eq}d;=S%1luUWcMT6?YB}S&`8Ir3OnsS^W`OF(``VUd*v#o1@CsJ^zTI$m4Za8-3fJh`f} zF21^QT}5Nf_0ejBgrn+Iy!sO}6ruy3IITz2He^y;(vSw{{Wqr+*)61lvvuhgbE0a~LsvF8KT)Vcc zeBtzpGX1gI^jeF>E?usDYlv6Tq3RX!>uQp#;%h5wo2pUMIp>@cUntF2$CY(_QFUW7 zPHt?jtIPPD*_88|tf{-o=z8+x$zjeEOSk3muVGYHSJu>_k49~#LPx41Ni&nH>g!`` zT82x| z44yKUS2osERWv3Wkp1j<)tWj!HdU$NtZZ1bI$qaQTN|%wjLYC6cFhW3by+{z<1u5= z`uge>syRxDmXGEzx%H9dHjgfy0r!BVw_I-~{ki za5lIbTmilWZUhT>X0!)f0`3R*fn$zD&)_8R_|Nd38CVY1f-Au-;3jYZ3k7ZiCxJV_x!_)~7TgbR z0ms}#eQ*Z27hDGJ2RDFY_=blLa1uE2X6l0puoheeZUNiDo!~BTFW3X_2M571*he8( z5IVq9!7gwvSdTp_xU!MWg8@M>^3xEYkc?e#Et z0DKi3dvq-Jfm?@%r-K{8Mc`I232q0sf=`3H!FR!4u%sFL1aAe$kB1Lf3LXTPfoE*Q zKEY?f9pC}58$6lF-T@O}!7+>{I1$_eCcp>4Rp9Ty&EVg`9pK?y|LX=X2OaQ!a3c2o z2QUE^a|3o2_yD*C>;-p%L*QQU_|51STm+8!SS)rQSOUgc=r4FOm;{%ATfq(BZt!cL zLto&N-~q4~92=)T*Rf}SZ-Yy~SzDOj;H}^`p@W^^qhK%C2M&R6gT;8-liR2dCT?dw zfGfd`;BDY`a2L1-d=7jAJP76;AB!FJdFB&16Pyh;f-AsH;70Hsa66dSj=sQ)K?ht5 zPQnjt1?PhM!CG+Y7tj|t8{7#l0{4PXf`i}zu!sjXC*Fa+z%#&da5GpB-VL^cPlCI^ z58p|D!CS#0a5q?dLM-+sI0GC4mw@ZGqA&36yRdUG?~B+u_%8Scc-fceFMg^6oB%!x z&Ib2`+rf9iJ>bRLC=a%Sd7ofjgA>3vzKmUfm)}i4!5*+3%>4>-f=7To;0kaMTniRW z#IEjP9)LaIB5(*yg7L3n7vO4eH@F>q3EcN}`U&QB(9e_TKR5%N4lV&}z;)nfz-{2| zU?;c}>;-3jgLQyY>6Ks{YzIrhA#eqF;=PP3xEtI7I^Se`z^U7@XYh02m{agm;3V*A za4y&j)`FwI#rT3pfjhx^a4*;e?gz)-M}7VV*9~9^*a?<{FN5`<1GahIXwI-=zs^oqy7v3F&X~^&IGrD z%fR9XnE&7ca3{F-yT}c02KR$|zel^QS5v=FyWmo=9Bcr4z^&jQcpq3)f?a^q!Ga$! zuHaNK2`0d;;1X~*xF75V58KVSf?L4iDfj_!2AKcD;o+rVF?a)bG{>GD;Bv4F+z9r8 zbw9!$r=lNlB6tu?fJb%Wr@$HDX7FNg2e=;W20K7U=npY2)8GqE0yltj!Mng(a5uOG zocb{10xku6z<0nw@U%zh_w-n-7AyfD1j|AB%NzCJt&cJ;;Nd?;Zg4sH2Dl5%J3SWr zBRB!feT;br#=#X}65I$bc$|3%-T>|aZwKE1JHWg%VzKXo6Tlb2+2FlT(k@v16zzf~ zU?(_X5B30l;wQ`l;*L5n4n6{wf^UP%z}Zi;o`4U49pGND4}1-b&0w8N(H^)KoDKdb zxB`3(+z37gZU^^+d%(lHkr$i^=AA{n1Wo`S0%wCi1y_JmpP@cj4sHjRgL^>v%aacH z8dz{P{rM?+1}_B{fpuUK+yZU|?+15--QY{$o8SSkY%lA{C)p2y)4?Wi5x5mhf-izw z!6Sc0eQ+Z95_mRv0K6C+JCpbgoDSX(E&?9~lVI_4)CVsHcY~|Im%!`61K`l})IW!K zp@;h5CU6OOAGi*D1>6RH^aaKXoCNlQ=Ym6EIaquy{RL-$+rTB@li)gV5ZnfS_(kf2 zH-Nq1K5z(}`E%y~d9m14;7o86xD@;*cmwzZcn{bIJ_^1Kz6y?e3I7331IL$QkKjyj zIk*(u2HpV1eu2G!wO|+c4X_V<4UCv%!-8rarg=+z5UV+z##r_kb^gZ-9sWlKL00PJk1@o50!NVZWk2 zxCPt@?)o+U0d&A_@YvU|JMdhvU^adWoCvN36W~^G6?h-G8SDgifJeMeeXs;{z*%5H z8F4E(5xfaZfbHNaunXJ_p3+Bs@EoukTnakiO<=)=tYhFr@aw<9zknz1W1fREz;^Ir za2L1~>;cz+gWzM}*o&Blzr}9Ancx!e5^x=O1-K2o0qg{~gT3Hi!69(;8`xcf_P`n7 zY;Xy<0$c}f1h;{&ft}zW*bAQUJL-dHg2i)Uv2TGh!6V;r!f#x7wUai|YY087Ekz-8cP z!3|(1*a1EZc7YDq2OiQ-{kiyCFb*ey5#d;^>X=FN}Az6(wOUjS!=Z-FbooIg?@JQCav zJ_+tDCw>6;g4h3v@dvknMW3QQums!-mV^HQcY*Kxnex;xd7JefTmg=`lywW71b!c! z3-*Dv;NgE^Jp|7McY^D{z2NQOesCu^hIXF?CxP#PbHRxRs1IHSZUJut>uG;C*bcq{ z_JRxkirs+MgT)J2U%(k)54Z&E1J{A?g4@7Jf5TsaWq-$Cf$iWyp@ZWWBL5J21IOZ` z08C@WEPbGgmzkLgahfkCOvqu*ROyHMgI<{&qdK<-u!;3CFy!hh6 z4_sHUA$HzTXPrE4!tvy4{iR_2rRZ5Q+#lhau3n|`TJA49)Op`UEiD}DMT z=odrZVbgQJt_4KCxzJyP{+R&1Ax*D^KKZI>{#&45j=n!2_0P}Jf9S>3Kh36J?aQ|p z`X@%9?}vT{^r^OdHGcgux#$P_$87p#K7Eo)C%p6ZZ?!MkIoFrZRZANEm2)m9JoW5J z>_&cP!XGn_<$a~p=TX)?DtDIO&Q{u4LAlRSE#y+XW3kIusUKx$)1kizJxWiDpuYfJ$H{AdrO!VJy$^a+`&*&^ z33^ojc0+fdtDSiKE&aU&{UzuV?fzBx?H_n)sY|j8!hTRtpKQUdmiNe|UJD@cJhk9&f(EYt-nRv`!PF z*+bChD4Sjdy?O-tX6Qq-qc-XJ{ws~FBF8eu>>%{}MUKsu92adF)too#ZjnUFZKm8! z<-{=3r$(!s^!;ALPi$a__73?Jdo(_$`;>c4x+SALUO$2%TW%WQRpSg4(g%j zM9|~#Zihbq)5F96!{@Y|($@jMjop-)u!McKl<{mO*90=smzSVFN*ofkz8rx5Yy@5U zx)<9hhQGWHl_!S|w$1PMZGPrq><{4+)z_ua9~gmt1N5EHr$|4%Hdgulya)PY(4+kL zqtLscN39dDLVq6mdYgZ4y*40vItYCtV^L_+t$1@h3#`OjQS_P63!ooo*LT;UIC*2y z^I_0ACW_@XaoFSavCi+~26!AxnQS@`9!ua+0-ex5mUp_vBR8Q;q|6PJxso!n9_Nj- z%lK=uLpxh36E$B8#uz%5?aO(skyGuTHXfk5f6C!=6n^d`n~yt> zMCbL;CqU<@&gWs=t;YE6(9a&hPws*~V+48+bh#~bqRrom{RW}WgdSy6MIU4j2VKT2 z-A8M@N}w->euPb*WAz{UMbM*S$9k9lT)Tem1S=>Pw8AZa?>;G<}!U#}6^e z{@ic$+wXyXJ@wDC>oZ0&l)`@y`rXh^wdro`8z-;maL)3f-(}Nfj6dtQF`Y6;)kKf+ zBIpyKN7-7^rAOJwR_K$dA2lax8N*WOIwwxWk~~|q=7iW$9c6S*e9$iA&xwPyvz;O@Z3jGr{-CeUq*Gr-AfqraY%^8O zd!hdcdX#V5@753K%JOYvQ1a;2(Yl@l{eR$}&9}wT^<3y8-zq+*^(^*i?XBu5Go3ar zw9DM++jN5Qyd3%|(DSaH;`6cgPx4pE8i-v>g@+gae8#u=m!QvrM^s#L0D39(B~stB z2P=LW%K_552pPp@r$hf5blCXytuJ)iEz6>+jAF%BD`ujX^!7fSpxxyBJo z8{6RVEM?GuPq$*DPUx>fpK8;svz%V&e~OSn_zyvU4f+DRey-_+(2F^!E2@j`qx>z( zT<9{#(mHg{7{nJ8p`62@ON^TLz0>?MVh>h~wE;e7P_EYIlUt>ODROi`zZH6v9=f1! z9f95l{XXbXV->?OZG(Pup#8PlzVxG)ibK$^7yt2BW~OH^^kY=5?>iFkxwt-iJ8}4| zf<6=aJ9aywi~YXcZlTN(*A5SV+AfnjKdpYqHiWpi_(m%=|v*R{~6LXTRDwm`oUdcZfJqjmI9 zmd(6jjfsV{f&&W65#&%O-){M!b-7J4>a#;MW?{YvQ5 z?AStV@&w-|U!_c4GCCGM2t5fsDt;MX%-&)I`b_8>q0bBSVRqUcmqPy@^fPR_QFBcC za0B#i=;!8=@Ww&*|EK1rd2~=_-`Z%K?SlRW^lW+(J@-L>8G6)O5c??mW$33nl?%W7^oca#*1oV;CX1%{j87$tH!`d6jy}rAlx7l==U*>30$F!U>dFw{D%OqvS zu8;O(TcMu|{nK_kmLJ*;eJ%8;F?|Voas>JT=nc@LY-a4yoX<6f$d%BebTk8cIdojEuOsVO+!E*)LXYzG>!3G4zr?QZ zJ_Ldk+s1!ih0cud`B(a5&BMK_Myw5FNOXk+fQGtXSN$f3gNMlGCenO7HYR) zj$-vpWIOaXpl9o=)ZYXBZ_u;ZQyls|jP;2(8(rqze4?)lSD&IUxvM>iGR=HW_ru*I z<+|rUaYzolHdF3wKIffj@p8+EJd5D(t7y{r* z`luWVdt)X2_^Yq$1Z5gGM#rwJpx+H0@OfBg#hW4A1HIp-OB=s3ZN$mnNtxxFLNTN1 z%Pc7+ed(c0J7qo@;v->~&(C>zRn%%y&cGg4x z4s<++uLt*hHcnPM^j*-m*>usv=X_o7rp$!fqV4u2=#!yG_3;4oNzmC2`7*fYYSM?X zJcK(gqJA9ubm(#DH}W}P4{LlGmr&+<%0$hrbW4LWY!@4tJ0N6u-sGv-2nK9{ljHd^p}+5Fo_wdHNeZ$4yHr>wB3Db_>Tlef70 zclqqc+*}v|f%*Sqz_OIR0 zFN7XtI}Y?l=-Kw7GPVVTh@XSLz?RcG51R=6QRp=Rx_PiA_2pfULp~pETdSZiKhHfc z@Ztq@DXNtEo1wn}|7^AqhrR>)%h2oioE|r$M}6WTJoZv1jto&gXFv3lp-1g?$6zGq zLFZ`DZ^ODjHwpSw=-GURv_BX6@zA5@S1ojr5BKZyxArVs-1^z}pTd79^b+c4(~Qa?(-d_t-nwvsz2i~q_;<)&xAfW0(~j;KaD`Y0lK^g7S;Ye(Ek9vf&ov#8 z@pu&aNnePr|0?uPK##JQgU~+;J)6H2{^NNFQ4IZDyZt8P+k`$7`WevAx9KJ{)v;U( z{nOB+)}tGs&xIZ(-#yUJg&sBE9)&&`denS=75W9x>87v0N?-ni(C3fP{`g7wW#~)o z`ne0!^JymZ8=yz+OP4~w9eULG-T-~e2<_hk{U+!)=2-HNN~ZTvk3xU-j_6qORp|Sm z2j;VxC+XNfhO;^0&g^lyjBy-C zK%W5pVddp+}AJM(Bq_C*<;VXgxFC4*f$T@ZSTya0L1rF8@NCzZG}q z@d)x=bezqP#Hlj@`dIj{vg^wjSTZIkvxG9&*k!D>cNO&Q(6hB6cCZ=xL(rpQ`yJ3< zh8`7XiXA-%{VsUr9f`;F*1Oy-X@9jJ9;J7g`<_1C9QKP0W0>S$gdR0lCPD9j9!*aE%$i_vzn6Z$OZQ99lWy={d0`=Q?qy*kkT(zJfY zOyw*Q`gEIaokLE7-U}TzzJ9H}z+C8mfF3o^YN0zL(6>N;6Z#CB|NqtAm4L}rRq59u z%>+aU3Na!B&1%@%uI|pppk^zQ&f27#5CM6qR9Dg!x~rP1>P~`)!8IZvFvu>liEJ`a zK@qozs0^T@qJul5s0=EigS!LspL@=E@4j2_Rdsi|ACH$_l1a8nIwZQV4D8Zmc-^B& zpN8j?+TdBFA6X-v_Us;x^jFyQExRY}<(*O^o%Z-nLVAQ>PY8XkXz%a58t=at>2qq( z--h(o8qYt9^p+aw&mx`bH|hH(qhXqm4wf0#uVue#K|0Y-8iSoke@hMe14!>jdQ$sd zjPyRFA7Z~>?1a>RwjsTMbg;XyeBzTv`oUJT?>R{SZ~Q%RA8>r-gT$|YZn~-ICw~T= zh1VpnYfOcrd>7J_>S-3zudk858tIqTNZ*9?cOw0j_IHS`*#zuLq;Ev}3Ok*?LG0U< z=d;LjV~spiUr!*<*O4ble(`2PhD3VO+}MQlhmoFC4|93!rEYhKRhHW8! zGE}}TNPht7C)w$;enjclBmECG-oG8`zpU~8Cy@S&8tJrm{Yj)J^~a_<>2oAKX}qsN z`ay_ckyL+MkUkmd=#F9i@RV%&>GeoIBH{TaJhC0>uR?mke%`W+P#)T6pQ(|D>Uq*^ z?5Rw652a5-`UjDo)Xs~Leoc+^UZh`DBYi8mZAH3QBmGvS zKaclswaahq>3R_9>+t-CBI%b0a>-Lj|9Oq_O*#Rw7LdNb{k)}PO+)%4NKcxV79suX zNKfLky-5Ed(qCuOx8~KYNdGm`lXRe4k^U^wn)Xg(Bl2IsSjL$^jS61??n0xr1#t3 zX!(pjg7kMFJ;}cMYox!c2K~L>z|SY~>SK{Ui09+dN%okC`dyFoyXfy5b`SZ)eDZhT z-Dgw}70@~Ires_EWk^2(=@4Z?8mLDSbLjcIk=}{)f40-R!*+fQ>C2Ix)YqOv`WZ-1 z>Z|*`5p7i?y&dUi*P!2x^z)GpmJ^oW@{gz>{br;mjkU{=el^mQzVB|NUs)slF{EFP z^u+H+`YlLL{Qfzp;~MGhNWZ@Z{cfc1jj@XE5c*DR;dTzo@~I+%s@ z0~6|i#=>OO@qE1h1?Y+sZ`v*VPV#SjCe#(ljO(kNIw6UG%3F&K)evq9m{uxcc{*3RWu|)dFMA~?-`iAHv z)RsM<(ThBaHM^xA6%)!14q~DFdCw5z9pgwgA z_bJMEGxDwbFvoA0INQm0HRnS%?}Zl{=>I)WZG5P~`%^<>fb6pne_z<}+Q%EbchT{x z$h1#8?)NvWdU}F)#cm9}ycPG3#cNdhcxbe8c4vy|3*y;jW3h zJwEY-A2fRRHNNV<8oh5eQu58aCt5S2Z+#zQOyI6lQOJ#r6j8 zH-hZ{#>PKP@ZQ|`#02l=3H0ZUQX2gl_r4z;4^wQ!8Ftq-G=8zcd#`+u=9_d>V++2* zlwk7lx1s6&-q85D3EtCAzCALHz214|OJBI=kcKJmr9Xet(D=s*4G-_u_~>rlAE_YJ z^5&AdrMK*{vhl6n9p*`@qx~CRestr)h7FBHCdZGwaLo}7uUP`^;6oD{@0{51^lpt8 zPu%VPiOb&K=-t!EgiUSH^LxFvvALnU@lD>D;Tx^@(L48iQ{z1i-p{1c_MG4Njt1{$ z`L%x=CjN7lZfo?OZTQ)QD;vGv(hG#Z9?Kg`+@M5dMcX?Yybnsz_0x9U$Dsz+U>%dL zCb{!3{Cf=dkE=h*$b)kKv)nb`m6GrNk1_JB-0!}Re;+EpHUEQ>|MpKY^0?d&{fy?| z`xBCH;wSlctK8ju(WjDsZQmZBwoTsSrfT_J{Lcyb-F%ad4Thwf6!|^*e*Wo}V~gPK z`?d+L^`peL3+}%6S-~~m?GF4v^o|B%S6hx-|U{&%aQl-`g;i(*@38u0?zD9n!A3o|1Hdy|z6Vf0?9% zrJKvhe)2cn zzD@4i<^HJLpOE{ra`z6E_shLW?&Ob2*BrT%|0P{(zpK?BfAQ)F*nsdm#Yi4;mK@NV#A)2ATw?ZXK7O#?1t8vbPPgf_*jN z2jNdRIO(v2yYp8E@CHcW1Fihs`t>Ip{8gUvA^bGgIrx|8=zJ)!w-tXhcvC#(Yl?pa zf5era*dfu`AoHp6rSAy7=me%<^dkJ(fPzu}jSl`g!6%xv!tMB2!5~GNEprsTFwK%=$T8u zOUwDs4zA@q$icOK4t8*@pC$*_?>fZ6Ka}uY_W-AM`NcLar*u>AG4owhz11?GW9i>q z&nD#G2aJH|s61$F6L?~g;MaYOpEvdh{8{7>VD4HAo;buj&^WuuVWls+v`{d*Y-Nj!L_}b z9XyGD9%IVCpLg*TEujg8~G8<(>wf2VLtk6siE^~&y@>KHuwR79Hmd43H(sh z^SxobZ4iHcP4LI0JO@kuqrd>o_X@w#{&Sk( zH(ksbkCyy*2(EfXzu>^JIy#i=G-zfOM-^%$5LVq6& z9HMhM>_~KJd5#eL(z6*~$v5vj!CN~RSSt8Kf_DggE$6}bgXljY6-;&@y4DJQ!0G(^ zH+=KHBluFMKF>tQAUe;znKQOZ{?7o%tE;a6l>Cq0#7X}xInLjY={$4;19+Xez9;zC zrCk(12J$?;_k+TaRJ^!Q@J0W|&uhPWTJY!YWnAlj(iHf(fuE>;tNq~s;6(rL>pB1H z_~tDYe65u80KwlT_{TrVfcC@dfoqv1tGPWO`Tt`+qgu|cSMhtVzlCufM;{gZ^tn;I z69uMnc3#G~zUvmjr(D7KVSMv;17oD`Z4v&j^s~T;&ZPUswi52yU^ zK8FD<|J8z@dNSiHCI8+~EGfU*C6rE4@cjFubRH0VvCz@>I_yBEbN(XEukC)9;M0T; zXg$0P4MFcMNdK8G7R-RiT+;FPZkUPbHQ*3pDFJ} zH#XPP!1Y;y_}0Yvx661xRT5tfe6sf%ugTE^nk4_-&Uk!>;Fn&+1oXSUE%<^pj4$Jx z_nJfay$5}Y0d1E~!MCquyjSvHBKUXjiRS-2@VM{#zU06AM$WI}X#Yd`y^C{@7ys6F{|j*H&)b~-d;~f?)&ErKKdnON8sKr|d{Xl7F7>bDn)ZVc zohfHBf!!zYeJvO!;rCt3zqOu!Ciw1eU|i|^(-EBi#3hWU_~xw?yifYG(s^3&Ur718 zCI5VUIHVkJ=(P+?XyE%g;8Y&9^P$-0dPMMtfA?wfyyXAvr#-I;{mpaw z+nJL8*dflS{NXymmv=ILkd)`Af_n=YN4GauI~WeV_cbz4feo7LZo#jAJO9=;ns5}& zBlxwQai}fk+7~#{DRlAgV+3y%{QMpUw4CP%{#oIN+MmB7_1s!QUqMkko^gf1BWkN&}uE z`M+~4(>dr|2Br%>4+EL#fAw+(v|n8&ct!fB*8i6U??n64W!9u{KdzbSbidoc-gA8O z-iCop{jjHvf&USFJ8*jMbMqL``aHM=dx`PH#O;hrH}PfzkE_pBz=_Tpryai}_?-)w zj*g>W2>x^Dd)twL=oH?<`IY~y6Z~)yl+fJfn$XJmSAURyFBW`>!R3c_TL(O@{F{Z& zjY8)FdFBTR`6r+rshk%La7JzSR>9qV-X-|GlK&k-|G9RibLfc-X#M2SF^K+ow=k~# z;S++d&N8n3XYvfr-z4Mrc%eTi_>XUAU?0Ih2b}uD!5?RU)_3W;U-BQifqzSNdxe?t z^+q8yshsCXMz9fcJ)e-DLVr^JFWt=fq?>x55`5mjGOpum-`Sl1#+w*N_cqs^frAA!1RB7HRI>;&HJk0Z+Hs>+8 z;Y&)VPw*{o<^0mEy=L$cDt|%Vt8~@~{$1f?$_KtL_$@1#&f!v?wl^}J3Fk9V5d8Ck z|NbNfw7nM2;ru5F-`4j&23*T5B+Tu3$^XL}7(G=I=g(z2PoK-cX9T}P@B@YzP?~#! zuhI8jEcq8p{z2fHM<8?CD*0PLk1n03-ivbYJK;5+Yu~*bxakj{b!&;78rTxYpY@1n-mY)p5N$#y`>jgHz8R5Zsj; z9|BJOR@c8K^J~1PCI3Ux?)wYAU=ink+>zfl0H^o5dhS;Qf7fl%@{>G4`LFJZ;^zup z_%P$zMn4yP_sbdA{_uJTK``c{Q3`Y{&jrwjs+j2{BvYLn0Prz`-I@n&f$zYzP=>*xo>7% zn$t^x;SilmFJoNG|8~JA%J*t{{svs@il5+rr!HqYH{Qs z{Xn0!=^tTm@YNKfzm&wK3HjFnr|)`H#>+oT{`UypDSS`I#gUzy|B98IQOodezz@NA zoGNnfB%$*#aLpr-x&2Y-?0X)g`$^&|v@4b8Thbqn68uAg@3nz}DS|(Ua!~$rUeCb! zf32 zT+H}BeDnSw_|3wXv>(3jzU^D&AhS3V2-ozYRFiS#vqlIY!F! zpx_V4ymqDFN1wv^*Zms<{eoXA_%z`g(tW*83jVS?IHT6j;j5X>;X?RKq4O@m_r!B_ zX_n?RQ*nN(F!vNGW z2x)Vh2At~c(c>A_`aePN@1M)Kw(q5a-zM*Uoe;ZK@Dt8rK*)LjaT?Qi`AO&LjNf=6 z=U*dqJ`6mroL`arx1c@g5_aGn2)=d*p4h(Kz#g)h>m1(w<)-xD)`Sxc8 zUnhL*Ajv=3=ll=e!T^S?xlR}SM5%}41b>&{SIYdT?Q%cxxbOOd!K?N6scYi%7l6}u z{aD87q4M5~1V3H+xxVXLg8x()iMHdh8K(1?e2{+cmj(a5vugW_+A5yYxx^6-iZHCcKH9Rfm8kO0eOKgrGFLW$FFDaXZ%3Ed7qa2uHEJp zy-dfof0hNGvVsXjZcC^WO#k*AFuldA)bi z2B!16G~=7)C4UwC@<9d;5qv!wli9ONqO3VQ+X!OjpmHtdicIIg zC5-EPm!Ln!s&!{?jpVc>D?{-or0 z?TwR4Oy?(C`S}?_CkLGB?d``hP!arU$-hSUp7x(71fM7T=QzoKc$w*6Eqp`egfj*I zJmz`2rt!`Drr;-ilz~?WeiRBo^``!TcMF~u{5qK*wf?^(xND!;3;j}Q3JG&N3pmk# z{bh{4QW75mPUBbo^;!gfUh)sgd$s&04l$jFmUG6Xl7EZfu07;I!B@SNGafDZr)*+6 zuH51aJ`M9ZU4P}9_XWWZ#k@+FzIRUyO!}@h!dLa%HweB-`sYdfnD-IEADP3zVS;}_ z@Y_~0Fh%f1XEXh6S22KUG1t!o-_Pj}?U;wCJXvYq{Uv|D;1#KV?dOjR?%G=pIfv;y z^sh`n+kN||x!-O%l5x3t8zukjD;QV$hoIi6Jm=gH#mm68t~iDN{glBWw;#j5w@Kn( z67s+7T&91sG>F>07YaTk<J}DSFY|rJ}Up@Zq9h3k{div|`KJhe=j{w={l8Q2XXh|}u;jl?@cZv#K--0a1rUAL zuVDGx8Q*pt=Ql9}@aM+`Kl@b17xT^g&O11Nll0Gn1Rr>3{C8aloZjo|^*9@mVfbkn9du8&WS?j zD}qlF{-f>qTfzT$EoYo1`Tu1r({a~3-X-`Z8IM}dDevX{tLHEQZTA+z_q&zx=|cbG zf*<>O208`*hT!j<%YgQW9OeV6w<z(#qVL*)KOy+H|ILs= z9=;kbj;C`VaH8`p+LJDQ*Oh|1>nxukIurJyMZ(DSMajR{oeXPz{zdR3wlS{s=Ul?? zo!A-0ZwIb<>=!&B`L~`C&A;EJOoz@cr|USrdB+O=Noil@WA6q|c2{>j{Zh&A+L1mX z_#dP`gYOdjXa_$7^A^?Tfor%Rua)v#37q7vKOV~fo$p82w@8WZY?ck)4I|x5;-Y{f`O$=?zTa zXrZ$wc@i98R~Q?pFHnsrt^UCx2>FvxEhTALgra5=i}hZ z^xmcD?{w++ra#E|9d|IU`9C4}w`APucdfXN^PjMo^P@S;wO#P1*Yj_sKk-AHf6|*7 zAL5&Ln&7U!bD!YNct2fQZ+{c~D)0}w4(6M8()CP#75F7xTF(2gXWU))-~9&0mq>-_ zympD;*M8EFq2p!Db(i3}Pv~`m{{T3Rmzlyh?h?H5#;|S$GPl*hP5pn0QRM>{3hs`J z#|7{0=lqza&9(3*rn6;`e``4(6ujvTj33E2?{|VfxP}39W(WQ(+{|>&mx611eN*rg z1Ya(6mVKDNcascUdA&CPoWAQBDd$O&|677zjB!BMbiR2rZlOLr)zke%lLcP}oajt> z69ZbF+XO#g4&zOH^S&s!yN)>lBFZeT)ZNq*gjrtSMJ!PkO6 z(WT`%{Z^*$^6gIo-Kfc$?sV z6MU`oTM<*d$+t6|W8cUbr%C=p1fPfgOP7wLb%MKmW)JWMD$l74IX|WYbDbvmcR$0w z@j2$YLGY)f|I8D766Rg~MuE)jB;Z89_q~kfCGkGNS4chRvwMFup3XerM91YffJo>j90p}oNpEU@gn2xeDmJ? zG0yL<&ps&lzw$1|mEV5*6HMpI^BDgT-@KRK z!}zV}?{uBYH}8JI9}wUu!Iz+)(f1zH%Yc@%Ao#t~uN1#s@ON+F{L6&SRPaHf^Py~% zPG0aMrJTyo=iJNr-F3{*34WnN=M|sk{H~vBpWv6Q;rGsv^4tfU{1{!ovad@1M}@vr zw>RTHrtkWnpDXxpFrMhr@_$co-Jg0KCwtEb{tKy?{RKY-TP+T`9hK&kIiTKV4d$lRnGz-S65i__m9p`H%V>=U+9%_!Pc*%RkS!>px%o z0^^ULz!{a#yc4+g4IyD}S0vyM2p!k%x94`IKS9d5Qi!b*y!1W>&J_GA!LPf70TY`R zfBx)?Ovl|9(0xDSKa~2^GG8V5oh7DY&N{)Lhkc3je`^ur$~SHi{N{5Q*Y<6Efb(}t z`48q~Z<*k(ANZMq-zt1yAIbko!EZl_0Uf7ZUuOD!^B7n9|0TFvZ_~fR`A>K^=YN&Z zpZ-cko!{&FmtF!q?!DV2zq^m%#D|#9R`5l-{+Vyy8NjJLx^H@_ z;O9&JUx@sm}XqhnfCUw=tmo_M3vcei4U0!ub!B3HeB&Qxx2_!+b_? z*Y17D*O<;9g|W@m@(X_T84M`9`PkPv|K#^EeyHSM^bN*upA*IVfD^w`xl6Kpnn(N|CfTheh4k!Vmg0c%o(-+KP32y!t9|l=g1h@8 z{wnw*QV=cYiH|XzvoU|t^*X+JZxP&`-&?-J`Ca*NE^yLo){4OL7ol@DaO&q%W!$w0 zewWbsxVeL(OBguXuenBc#aeyHu@ zKhAWHJcH@%BQLp9aF-u8e~(ydY<5~mVT(;JNXAp$6aS{5&WX7nU417o*&A4bBycwz2HYI$7);$ z<)8NgCwar&U(@wt#@&4i|1NmOX!Va~Wh^8ZS3cfM$O zg6SM^6=(c_P?UH417++c9V?0@eOIzwkMYR*E# zpObzT-)|2CPVeo0Bj=wd#AYPqUnTiZ7yd8Z#ru=suD$xgCz*cN?Mztv!%qdj_7uj? zmhYPQ3(oKI)eV9_aWUsVUCMdYFFC*KAN#Q2&-tA3wUU32r#SzO|H8mq1aA>Me;)%& z1m7U|ktmZcTX{O`) z3ET)gF8`M$|JS7+juc|M{fg<3e;-}a{9d2n$4iG@$I0Gfg0FcW1NyF$f6a7geVZ=D zKOwlgZ*jNZ@c7+!Kj+_@Z{GgE^;v<;?HJ(HKi8~ebfzTUEjX>W&?U*--1_N?H46Zu5PMd`Oyrg`(=MZnECx|Zq4^y57#_+sIQ`rg++ z%lT&8arD0;`Q81P ze-V87QZ7cb6zZJ+j;Het;8Z`4%;AiON&a67-YfNUu;6XaasIzAW8iCo4+`ES16S*F zyWsBrvd08pwVnwGyYc?|2P!A*e$yD=U-(bQANjqmoSXq3S3g@4@Q(_eHw-X+8D`!S ze`5NNUC+4o=fnTZ_%nAfuHW?*!3WM~{Aj*;pA&rMZ47AH_WBFcarY0-22S$NR>u!~ ziR5?Z!Mg-^{WiZP`1vRCdxQ4+E5FyB7akMb^<&)a@0`DQOSJrN1Wx5#wa`=L|6*Y{mQ43rwf$T*hB7`A_p2%y>C!69d}5cM5*cJ&ezg{9hB?wR0Za&=70a zJpnk4$5XCg0tX45vf!?rXDjd~$z$KHko+xk89hc4uf)blqJQEN22z6mOz>MyV4ziS zgzYo=T|4m0pg<9w+b-vfTF$ctclR%UPw=Im;{00wdrxFK-a^K;z1A393Sr&OmHZz* zp21g2+IxT#-#EI3ftLy2_$BZr$z$Id8u`7yy@pZg7Tz_2yXy}BBlu!Ret6sNOvm-3 zyGQWbq(dDdFK_=R$^U)^-XQp;f*(JJ0jpfaGSdV)C}Sc?S!Lxldg_yO5z5Wd`!8>1it0f}mKb_LaH*;!tiW)mb4| zO82LiFFCny<&x!HEq8Y-Ezbixkrg5FR950P2C>4{k_~~xHYXSY& z-9m+{{lT+3OT}!iT%KFrT*#W*D5rm%5>AN_yl@ySeMg%zc^4%rF?&<V?M zKI^=>x+S?CQFqa5rjnTEZSgy3pwJ6Cx&e00=C(yCUcA<&lE}x}<*DE3X=?U`^dC2S zSEZeLa>vTr4U|+(shDb7K^fts%FUkD8G8w}+UJ<>n&M>f|lzkX^9eK>sxPqXFCn7#UC zinWJ-Yx}}nWuck*orw=TKQ&Wjf?zsC{ViOzLj=lsk}7;IS0z`jXsO!!GxPJ)N(WK;5>xx1*xKxk%^7P6jsT9B3{I=*W zao;(sqdY&;*GEs*%!ayMmFXMIMY6fX7Vrlqm2yGtk66&c)zgt&J>6Z2Y5s{T=Ptu^ zw|s#Qw&^ciezKolB;cY2D?NX~o0iXA)-m7n7cN~fZ|+im#fc|&VOr^)J8x;)aCU2y zw5I$;nR0K1BmqCSw&?ff`UWs7FU_~4ku7)DAmpA(5#uw}LbC&gR8MYGdg)qpRB2_J zPEvmNAoURH1szNKQ|ZM3+k0~BGJ|~(7;_|&LZ}KvHkR1X*VADCE5I+%Bt&PrzW}cU z9hJ1`y&_r+R7x=E5DAi{AmP(DNmZ~o^ZzS0c?@Nb-sWzl5&Pm3#2(sVvkAHq|Qi`8U+m;Gl3EQXu{I;Rw^0?N+Zz#`OEiNO znHgxeOeGf%i9qO2?7$=KS3(=_DNyh2hX7aF>=#SW4k3lK`M!<#{l%XAx;*xskzO+k zZC9?8ikmw+sUODoa~YFK-8(%5$|CY@=_<4Qj>1s!Ow3e}94j>UbSz$0>l@Q24h@0(^9W9LEC#D)j=5l9 z1*@r}X1p}rOkWEN4LZ8%*d(j=(-g*iaR+LKv_aO!(A`HdaM3H%*`c+}7?plae9W&b22iamElWEGm%Fb@Vp0{zNNj+j)` z5E7mIBlaA3x(6j{VN50>FVM8^_hc#=;mF-kgp`HJJdmEVaB0W9`Kwp^ZO!e?t*u-a zA-|eoO^ar9cc8$`TV9+ooleb0g9>B8ST^jZoL0sIQH5-IMlvFCE@o1&2AfKAMk<^M zy1jT9L$;bxCySf(4q>Gc4#uJ;5zVg8Rb+tW&LZJpJfy|0xx{Bcn~afQ$SMw_4kDez zWufWC5IMoXj4jL-hF8O`vKVYmls&kjeTHp4!k zV5E80`|N2rxl2QXdT|G}8GkBIqXhzfQ?rb9w7kgB!-tQpoMGBmirl>_?4#&xMxbVm z5}a|g6FyB8bh#Y3-Cs_^qNQk#?S~m@k<}c?c$j%G07-PT*!x_c1uQC>HT+sakvhr? z(qeV!sszJqvCWi(4aaZ`umx1X%EVEm5)_ye=FYSjf>*NXoSq5>!C33cZD8y@Ih}{V zz^3~$2Z^9J)*V5I2R;fb0cnc< zcE7CtP8IqvFOr~Ugz|RkT7i64RgI(9F4C!%NDrG~dYI|d?i3HOYND;0HtS6F?a`@T zy0O{^L;|f>eM@YH;K~}#%2z1XCse1Ii$j64N(5KN2QfJ?c#P!zXu*F_+f!Svz~*4$ zapPfo#6k#U>vdRT^UL|OwR;!)AZgngf=GF)+in17A%iT9h8!sxJb8^97gib2R00-A z@@E-tXpFh2nP?Y|Wm7c2U~(f~PNv>cFpi@WM@_DvdKTGhg9*V*2G-OakAn zGf(OaVZAkZN*0xpES0%ZKbozQ8;WV!YPMogcNETaM3A4}Lk4j(W=CbVBmPQ4*6e}e z0GvCD1=gXAQehd2X7{T7OjN8;#2AiQh1%a3?qY@Xc=2Kdix-gkthz|9X_4T@Z4e~u z_rx5M949dKCpkaZ-JrP*?l@$?mazm&r)7*t`Ml~;N4TodZ%I?pmd1xHGp;-NOdog- zSzTDKw!8A)EOSXj{~q;}U}T2$43q^zmhyvS!O9x8qu?3ABgC^TQah3H zDKgiLZHsGHvc{1sGlX>_J#eh$YHH}xAX`AGpNr4aa5%m)T)Tgcozs;iVh;4B`!Ebi zz7N(zY8B8ddFa}t)Z6@2M}3C4xRV6;A@Ia*NP{b&RPpE^D`u_@4&DPV2UdDt96%nlG=xZGK2$;lzz*Y+LEr{e~gCd8dC8!7!_Dd$Pl#a3G857&QW9hdC3wOpXmVEMdeG|II{5?*LYJKc$4)QP?ar^tDhw(W?k zArGuEU6Qymy_ADjfZYWgCx({vVq;~tq$IQW8|wOO%`v_cyOb(g)He(I)>0S^(JD>e z9kyYM4QH^Cq~mJzfz1dVG~$PXCbao`ogR_4M%;9^a#*GyEaAp@Inc6LnO6Q)!od(F zr{Pqp71CTji^LLKC_1wE>J<5)sTV|+VFjJ~i zA=Tk7jXuVk1WVK;{K5^bqHF5BGTRTk9^6|Z2H4q_0d|Si4PD_WHDh6}qV5gzi#Yt5 zlwgZ5$m|Y9ZHH8~igIqOO^e#5wm-aYcFgPw|F7((jBh^Chl@bA*IJX2NfZMx;E`lZ zh*_-!^|*np ztnnEvEmjpgRI*eIh$_^nok%BWCy#X0O|V>5RmGNWT!(u>;9y5O(<4CGXn(AP`mN2a zSfK+i>dO@(5J|)R`SD#%t!fbx;3C?wE|9CCAa34;ydk}jZ1CEbL~5g67xuSM7~91q zV}0&0>2yITgG&Z2Y(N|~l1_sB9y-|2G6#gQF24h--ME;gCipTWF5g~#71af@9MAEi+ph}@KY)2Cb=aL$O*0$Nq9vFoC8hKP<5VP!oY9EjJgmj-- zr2D8ROqG0Qv7CB~*s<(7cn-DVzy-j2Dw_r!{tP2^W4$PcK8Or=#!!Ks-mHaw* zd1AdU$}&?aWr3<+(KaFFk;B%>MpA0h#8e4`pPp>m!3c)quW?Y!!4=S!x9fEuS+An1 zK>b4K#bBH6uY@ZHf155$MP#i}*SK*tFuab80K~x(O%@@`!-_buy!l{xvN$f)UOiJ+ zv5W+%$~Xg{2-1HX4j8FFXJtV9jq%-rk;m^I(3O&6U}7B&y{c9CR$YZ3rG>?sfdf8l ztlJ~$Z#5Q##$$J;Whf+pm3CpGiQwE9a`ROEo8%pzw|Q|yt8a4n7|p6Tv7aL50rQx%@*ph5k_f@i0FBNv>bl( zcy_hWS44V!J%8bv950w&Wv(!;A_D`mNSVT}htMIN{LoW%-IJ|;Q+Iv}-`;L*-6m_K zxU0`2Q@Aklpn72`GCn!RsuP%Q#%F83a zg;=bicp^doT*yns5{z7~AT{b)orDK#L11hb)-d=&UxaWW6;-k0vl{tdC(hwx{24QR z*;W^Lu9H55{X(#SJLZ50Z{%$?yg4vfoVLAsRYDv4Z8g@`Lr80o*U3SlgCsX%it)SD zlD65<6ZJQu@rsS#Q^qDp?C9>x(YOw0a>qC=dpON}x62Y6V~JJnkHInyo>dX*jxT*3 z4^DUWfMs1XrlbCV)l=%oocwoL=;QW#(k8MpqN((mrA3+@a^>D)AN%12uFYdTeT{Ml zfi?W=i~iClqZ)&w!Wmg%%zbBjc=^e8pjW$jSn-ClY1Krbq1nQ*Kcb@Q`vcGd3#~nq z+rnb#rLJoUX*A=%@R(jc!(T`%JE6Qa1G`fD^VyDmGHS4|W^L7c#~qvDfJ56jVZr2h zPB6~FpvfCNtl`Q{7RH2X@2V78Z6KrFxR_R_=lTaKn=QlYn8z~c?^o($Wq3BGq#oWJ zZuT@%6fs)ete&%BnZtNDF%<#_436^@`nsq+0R$qhIab3s3=ui2mL6@(xDmn4##292 zLBz5ivqyy3s41kov>Cpr#+b!mQbVZ~f8s?RL>Mrg#>8aS>&%KNV!stjmFNm?z?p1* z>o}YhF^gm=LnSOYJqYe^&l8WGo7<*WqxRpjd=V~00HBc1%JEoaQs^W z=RGh?R`g)(poI``!70rM9M%k0ziE??a53c~tu|LS`$OdBOpYt6_Hz&;R{Qf2Swt5w z#*CA}L=&^uA~509>N^RYa(WhhPz>wFxVB5ti&6B*1uBewK(p&?F%hgQ=FTFsBw5G; z$q);!HY=;mrgv!5;?6OSL&l=4cN9Glo8z!FEK9b5C$a)$24z8vxBrFG7|p|@^FD=` z1u4sz)WgX(8jNHIw&aDC5;E48-Vh&_YQ(}ct)NkmDK>LPcXu_n>RN4rOjKtKKvIwp zSy1rMo|q*!Axi8}iu{4IeVFb1V8ErL6DHap$|m~^_Z8Q}A2Hbg8>5+!B}ICh>XUKu z8Yw3f7D@W&m~nKoc|^A@8Nrm^fD)j;=S}z*-X1>=+6z$4pES}mOHz$ly*ZnHx?2N~vLY8q;6fn-3LF`EZ(=CT)fqxb+mMo-df7W%*V>}yel&2xNOpuu zQlx5YHv!>rAhpchgJB9#_Z;hd#-*pc5k(|5p;Kj z^ANcmkiY%71qS(lwdMskF5krX#D;V-r}+{o#(2wNX&q57vKd5rH=BJlh>G$bh?%WH z#Heb2sE|1ihbxi{;c)34Ut|phx(4olWnv>WH~=Xs{Hj==q}(M#&+Mqm((0gP|}Q=c+G`Tb9+SN&*~4 zghn+sg|*%qs?H{GsBVM7i+Eu-;<}Pf*IXqso7Zr4X*J$G5rXcJam_f;U&T)c>r{cuwnU3`-KC(xqyqn0 zxO@gWK(!g6#;A3QkbW^lY+{>g!Y6-zcsY}mK8)UE^X5_S0BS{x*n|>x0BOr7i=S0& zw2q7%uvb#Ga3V<h-5K#BWGfrYJ7gRx z^Oo8SPAkd{A(}rFh8~%k!ufe8FgU8@*iK%oh&`9gHR~wtCWNxtL!l9r(UU21vbEdO zgx7{VIXh>fOVK$;tIH+Gcd#Dg*dw@e(4W|G;$sXFuSYd<%+0?1ndX2Pvtt6NiT@mI zTFxU>l?efcr)Fs?tda;XLs6_GI@ok-2l%N3!3AMaTxd)?mI(-=Zq->!W8pGDs}L%b zCfROk)G$p1;h+h7(2E;HQrw>H!Im5@DRBozau*xUlxQ!_hZ>6TsU7ksLewiWLThcr zp50MiIanyrnFLj%`5!q1e8};4oUvk2pejx^vl%j?j36wJ7HXFuGkigYY$(|H$})@5?|x3t8k# zKgnW1EaRq-E#&y^QN1aG{Oaf zQ<$pvKc(jO^l0ll!Kc#{K?OT6h$f%D6=b9>vZ4u9SqLnqQm36U0K$`?RP!NKk(a{A zQ5>fVxZSABueUPYNhg0qT#q!|1SVUF14oO?#`u#4j}%+Vh_*7PP0*ehB+o__#<=>5 z9*`qdH)1PqtB;{t%=*1~tY3$nPN$Yy<3d$BYmFs#Y*~$0-B+TA#^|b{vCZz<`4GGF zf%bVKx?LGN9}4SnS{k3a0c)KR8bp943!ZV~(IHjsFg_x;j4Ii01dXcwB-IMn=Dtjp z3Wh){i!rajjzi%<)bXF1U3=arUN9pY^&lGqF*wQbfJ_b!`QZ$eQ2oQhJ|A0brtQG( zg*{Q%>D3D&eFocx zO?x?qD+J-OB6Us2%)pg&*i~uA?=iNZu1a5-EM1P@QCt9+EJPfL(J>pB!|q#M`*9LA z-WLrVSJ+q;3O;0|k=Av@LuJl0$yEubuG&lSu83^6Wz{@mnYIE!HrVYe0k%eV_$C#N z!mSufe-?5Z{56tRrktWu{fz3JQ2}JcBxtbph@Olx#Hbl{>M)pRcezK!x<^?Cik`mC zp~&G;#up+Y70dQ&Hs^;S9>OyRiTmMHs~xnMgP}wZ9h41CYL^d!DGYm)-YBEs+uU|X zPHPIS2xH~_Wy~iS!h8m$gp*gV!(D=YoS+}Bl#%UpCvsGY=zDYuN#}_xyNX?YL_H4H zG%dNt%(cVwvNnDckTl}?6TI@hG>*o zp(3L))38Ni-sBSvgdY>*osNR98RMN)VqWm2NQKy+JsKe{2=qSG*^NN&952``KFRJD z96TTHCnG)ADJq4B9cfYR&cQVvdSE)fTt=dG$`&rOI0xw1^SLYsu_K_FM_=^QUPB|i z8flW7Xr#-)YI;Odjg+$lt{jeUtn8OkN8`2W>E%kXluNHgsUruU%SdwezhPrUtJxSq z*^Q@Ac#doANvJjSd{XmGSF>irYAs*=W$o=OF&xAm-_`13)SwzFfpBCa-h{9ZxJ>Xd znF%#%re_OL^Vf9?%;3MIS@ssFUv!8&rD7qd!JdXw^NroLg@>X}M z#t0y*Guj{LCG_SHWgZhM7NvAL9Vzd@Cc-Wb9!SSBKorh`6x^tyD@BGAg&mrwh>)8` zt$!nuk}aDgS)*u`3*VIOJ=2fGEucMLJkG2W<*mkwtKdjI)|=JB*0b3R?UdxmhBOA^ zb_$>pcoQTx@>LQg8jP^0ly6(%RM4+lUat889PiMoJ~8PA5qw5FW{v7zeMk{Ze;he< zh2a!_&t`a3U?*)hQ+8r?kW3PFjEsCpQjbntsQ@`R?q%~4U~hrXetF?SakS_<J0;_Jgm^r$>s)-}E$YfXJ%=L&B z9^FtSpW(EL6`4C6{8e9*YE@yeYjYtBJpc>jBDTwb82RiWMt@leHyz537)~ zx0S#;pvehG0>0J)gHC96RD#4O<;_{l0{HIbu8*5 zmAY%k0FOU7t)2LIl`GgweH3I(b0?iv^Wq&EU>ufcI}J7$sPB__qO`UHW*-!A&jBinb>r6jO-FbnR~t9S<+DNA8}rjmWIHAZ}xxwRc+7WNg_X0Y2SSE#7|m@BEcIbt(b z3-R83d7xN^_exFURjluJ%c2l55{&uz_SR}Coo{b8 zyc^R9SZyF_i6_qZxH^Wsm@FEF+$PZ&A_a&!rvS^`{bIyXW;d+LrMHM1h8%EePVJ+L zPY=~I2r8picin(nhw-lKk63f4`EX**YOL$A*cM20J;!?MSWNcSrTu0P`H<|Yc8yG3L7sXWG%SyTu@w}BFlr-P z9F)yit5^GN%^FCJ^?8V=V;WK_@LdazuOchB9+eU?hmTqkoIyRErp~1Eu3*Qt&%1Ki z`3U+2Ej?CqchQNQfRq&Xx16sNlae}*gpIcrY9n=JyU5o1NVsc6KGLy9#~wm}lCOY> zzyoy5*3@X9lI$De-~`}L)$Ao2LLI$=m);_CFf0ZpFk&!#EQaNL-w4hw4RzRHcHG(Q zZlS4UtXd^xEF+bwH2N);1kp;ez=WEUnW+9;Da#WiN@EU?V5M->h8lna3-l~WU01^S zOam+UKuzN!M~glcL@$pIRt8HW2^=`Rx0IvcS&%0pF67OrS=76igtGJ)E)rUPQvLaK zA6|q{gd>g|X;@rWLxrg`iKd~rtdt>v-k$FNSVtY-yP8aWjLZI{-2raOv8};Z`RrBNc&?DMXeQ%{qYB{StoVZ zSB+{Z^zd2=0CCmiGGKMiSrdA~^sw{?bM1lSg zj1GrXsEu)WMuE^GDq|Z|j47msw^(Grxkmq_buEisaKyccbwgWV+@&ON5D5|In7(R$ zl-Ro1T7tvoSiOyU_Ked~GWv_P#lW}{+eNLRJJUpExmAXd4#%q}LQ$&fiDstUv5*SG z+iGDp!|ifZiE~u3yjIa1yXq*ejzXIt3q>>d91Adua;22*AE-XiA~g$s%~)gBjw~B1`A``hiQhbie-Irhkb0_?p0ie* zmq1ZXUIZf66?-;^>CVcls6KWg-}`p5DcJ7!J5kwG^bOm%zOEz(f19%ye|PO$e(I#zjEnBy-4cFlOq+gRD7mh5;aHfqV2JTyk0i7H!lYrxTw!GzyC&CN!am8RKsJ@I8TA8j8*GIG?HM_*$Dz7B$yn7ZCh2dXT8O=@rrh6*=W!% z+K;VKRb>fv{JOMT&%#oX*+Cj`yB#w)n1Zo|2OMgQ4Z=#!5oQ&xvzM-p)TO)--Ef&7 zH9D)wXqUnhr|_tB#a{Ih*#lvlFqdX4sd6RT*D?0~ZYHp(@jY#!O%FcaV}kF%nMN$e zE4ofJ8ZU|!E4FHQDNK87%Lu_s=c|fRHpbmb$x-K3zPw{&*Q{z+2R#Uxy`#y6GK8c5 zk(-M36c3cpC6u?;lZZgtiI|vC^dv2{#y}&ZByB)YZnFcND+s4%?SG7%A@6)Wt=d&7 z%f?7L$_>V#ho~dE0^n!r1eIbJDXKvjVXz+?RvtM1A@HhnH&-REuLc+ul#M(=v!GBr zk^EsrcObWX#?W9CbgC&t-EP^JSdlTP(oBJ($J387g-x zVN`$-aWPyOXmDZCeSR3y-SVd#wV8;Wq7XhVl`oc!uK^uzUdog5+p z!S3;Fh&(_iv8~NlOgjoWbFx}D6nQyUjoc;V%~&Gl|5ifM#T29m3B>3$7Q1i?V{Zl9 ziRKv@>}HCIt~SOmwS*riGYdKW)Cd~W?u2fS&eg*cpIRg06N*|Lo-Sp=)728iQtf;k zj~=q3(Y?n?GY^C+#2@b@wFl*lxN*P4Lyx40*tk>5?kPPCq+qOMVVuZtMuTE9TCLga zu_0w~wi%Z;BMOuq$eLC_Ta2|p`@rAkSdW-3fF=RH{R?DYa4Az*4{v_s%TLe5yZtk{ znc+7l9j{8Bh=E$mXN=%@cM?90C?68oRcY8y$Y;_y0tn;ll{{!D3_`L(Om$HoGeIOY z-29G&nIwlT)&uoqRCoGlMSxwCP@JjIgoMc#a4<>5EYA(9 zi#MGjhZ8a*vb>&+iDorRQgFOObj3=xw`x&JR6Y|I6#}}ye$yr&v6IThLZ&ZY+3XLs zR6P<563nVEek>_i;_C6}pnyBUvWOTC!2p9WyM~4DSeV^lKYZ}15K%G%8Y9Qv?HdYi zSXJ!!b2z*Nez!j`x{tyGHe6?8U_N zG6B740M$F2AQ};DM-L~Ug9%_D>RRAq8sqLU;?3nS5YRyr*5-2RWHD~0sg^>ql3%x( z)VWxP(-&dW2gNhdWnP(n+cy;Rh1l|pwC6|Hq{FYF5af0jsa6zpfT1R79Pz;&!;LvU zb`B2a=oUGE%||36KT|P|D6DUXA4GwiA)>4=K+i`gXPh50J`Rg!9{|};%}}@Omo;ro z(US*it%^i;QlZmEHNBcmCfp8e+KLiocF%~^(cKl zI3|`Zj|@IROio`neaAk@pG|^!j;V!fJRH+IS%lnBjtPn= zaW0I=0~;K%=Cv+srY`3Q%j7vHf`jgNiIf7}G_2Ma z*Md3_xTlO%h9gaa4>nD&bfWLH%IQUfU4f; z=n3SD6>J}mvi~M8L~$Zh>r;m~7h+CeyvDT5E9i5*j%1f~;FTajY(~0>ut3 zq_4-Hu|bkf5D;@*c5t)}6oUf_f{F7bQG@WU^^DtM=r?B{?qdG|`-g1Mg%w5^1Bgom zBGvGPCu_(UYhBcdEoN4r4jT*;@2~Gim+w8bcPS(SU+4hI_Rk0 z&?M#@ToIgGF%oa0;S4~-cXd{`)VpE0y z7+E%6rKmF>herh%;fIe3u)|@!Br8QE1<9WE;f!x#4rnvSPh=!b7Q7J>n=%d<=<8UY z;ZH|C?V(fq*f&ft25s{>DRvN{!V}*Or)tmUN+oAHvOa(gvDxv+d&V&(#t_d3DW|6Q z$LFAjun&$p1Vz>$8YRQnHbv7}S68rY%J?+0!zzo1#{a$p zTrJt#5fY0Pp<-N2MJj@XOu%ODH6|(}Pl4mD2wXp0>p}e48maL(TcZ`)W?u%(joh&j zdXQF@VPvE8o!KtBL(>o~2?s{Zsx@D`zFf(V{hPez^5%XtI_{Mc-+T2h3I}pB~HQFvt=kk zksm(NusbY656E8weHE|S9MIm3KbzMV@ss{2=dxaN1!q=y&9GJHk-ONFsbsw7T(7^b zlz}~>w+Gbp7haRi`mBC|$RO zy&vx6pXmJVaGt+Fp4WSmliz**6r}(0g%^ri{%!KS-e<}4yUX1ze+Kx=@V`F)lsvEZ zHS!>RBh{TgKNWw|mB;_|h(5n)PeMIU?`?bVZ~fP;|Fe+rf>r)=UdcK2zEvL7^6Pu_ zelF6Vx1OK0A3vb?7I`6+pUSD_=Ukq5A^xB`ReH1b=M=rKZsgzketllQ{|b429%u6| zK7jww`!;DXdY+Qp=WhT;MO6A;6MoRuWd8N2f7_Sa{?{VWe!i)RbL+iD+EZyvmOu3V z5&X8F?>vk%=w0(AJ-^L)evLe@_oh1U|FrY`mLvI1dVl@{`ewen<@tj9{AcBPxxYO6 zxM^z}`m#K)?eA@uRJkAKl)p)m_4YOVLG`E4AO0my(fjF6f!+4|f%E*9Z}and-)}zu z)_=AC=O`%_&r}tyEU>1ckw=>WdF@6+FU-woOJ zv7VnM&rciX^ZVd=dXv7tMV@bw=bz$YAO~OiUj2O_(rN7I^HY!I2c}X2uF3NKH2&$* z=e1ex07g0W`DxAk+_Z!E{y5+0QFH0@dOrf`ltrKSl;Je-gH8Nc@UK3nz%j^1m_9#8 zo^O)pw`hVqFh?JhJ7uRgwK%vwe~g23srVU6qTfyzF;8^L`=>27KfQx-n~VRo{L24` oy*ouT4{X}NZ~Dy3^^FEL@8iGt-+gh5d%kTGmuhzO@v7(l7roD4mH+?% literal 0 HcmV?d00001 From 7de3fd6be0bddffa1cf85e602629c8a9f2f45f10 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 26 Aug 2025 23:30:01 +0000 Subject: [PATCH 3/4] Complete generic event system with integration examples and demo Co-authored-by: lijy91 <3889523+lijy91@users.noreply.github.com> --- .gitignore | 9 +- src/callback_test | Bin 198416 -> 0 bytes src/complete_event_demo.cpp | 164 ++++++++++++++++++++++++++++++++ src/event_dispatcher.o | Bin 331912 -> 0 bytes src/event_integration_example.h | 148 ++++++++++++++++++++++++++++ src/event_system.o | Bin 3536 -> 0 bytes src/event_test | Bin 260960 -> 0 bytes src/simple_test | Bin 164272 -> 0 bytes 8 files changed, 320 insertions(+), 1 deletion(-) delete mode 100755 src/callback_test create mode 100644 src/complete_event_demo.cpp delete mode 100644 src/event_dispatcher.o create mode 100644 src/event_integration_example.h delete mode 100644 src/event_system.o delete mode 100755 src/event_test delete mode 100755 src/simple_test diff --git a/.gitignore b/.gitignore index 987c968..c354476 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,11 @@ .vs/ .vscode/ build/ -cmake-build-debug/ \ No newline at end of file +cmake-build-debug/ + +# Generated test binaries and object files +*.o +*_test +callback_test +simple_test +event_test \ No newline at end of file diff --git a/src/callback_test b/src/callback_test deleted file mode 100755 index e309e47a701a92d906cbd5d18762fae6d2b8462b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198416 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 P4*%ibnyZUd_z3=ASzpIT diff --git a/src/complete_event_demo.cpp b/src/complete_event_demo.cpp new file mode 100644 index 0000000..6dbfe2d --- /dev/null +++ b/src/complete_event_demo.cpp @@ -0,0 +1,164 @@ +#include "event_system.h" +#include "common_events.h" +#include "event_integration_example.h" +#include +#include +#include + +/** + * Complete demonstration of the generic event system capabilities + */ +namespace nativeapi { + +void DemonstrateGenericEventSystem() { + std::cout << "=== Generic Event System Demonstration ===" << std::endl; + + // Get global event dispatcher + auto& dispatcher = GetGlobalEventDispatcher(); + + std::cout << "\n1. Setting up event listeners..." << std::endl; + + // Example 1: Type-specific callback listeners + auto key_listener = AddScopedListener(dispatcher, + [](const KeyPressedEvent& event) { + std::cout << "🎹 Key pressed: " << event.GetKeycode() << std::endl; + }); + + auto display_listener = AddScopedListener(dispatcher, + [](const DisplayAddedEvent& event) { + std::cout << "🖥️ Display added" << std::endl; + }); + + // Example 2: Multi-event observer + UnifiedSystemEventHandler system_handler; + auto key_pressed_id = dispatcher.AddListener(&system_handler); + auto key_released_id = dispatcher.AddListener(&system_handler); + auto display_added_id = dispatcher.AddListener(&system_handler); + auto display_removed_id = dispatcher.AddListener(&system_handler); + auto app_started_id = dispatcher.AddListener(&system_handler); + + // Example 3: Application lifecycle listeners + auto app_exit_listener = AddScopedListener(dispatcher, + [](const ApplicationExitingEvent& event) { + std::cout << "🚪 Application exiting with code: " << event.GetExitCode() << std::endl; + }); + + std::cout << "Total listeners registered: " << dispatcher.GetTotalListenerCount() << std::endl; + + // Example 4: Start async processing + std::cout << "\n2. Starting asynchronous event processing..." << std::endl; + dispatcher.Start(); + + // Example 5: Synchronous event dispatch + std::cout << "\n3. Dispatching synchronous events..." << std::endl; + + dispatcher.DispatchSync(); + + // Create dummy display for demonstration + Display dummy_display; // Assuming Display has default constructor + dispatcher.DispatchSync(dummy_display); + + dispatcher.DispatchSync(65); // 'A' + dispatcher.DispatchSync(65); + + // Example 6: Asynchronous event dispatch + std::cout << "\n4. Dispatching asynchronous events..." << std::endl; + + dispatcher.DispatchAsync(66); // 'B' + dispatcher.DispatchAsync(67); // 'C' + dispatcher.DispatchAsync(66); + dispatcher.DispatchAsync(67); + + dispatcher.DispatchAsync(dummy_display); + + // Wait for async events to process + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + // Example 7: Custom event with complex data + std::cout << "\n5. Custom complex event..." << std::endl; + + class CustomUserEvent : public TypedEvent { + public: + CustomUserEvent(const std::string& action, int user_id, bool success) + : action_(action), user_id_(user_id), success_(success) {} + + const std::string& GetAction() const { return action_; } + int GetUserId() const { return user_id_; } + bool IsSuccess() const { return success_; } + + private: + std::string action_; + int user_id_; + bool success_; + }; + + auto custom_listener = AddScopedListener(dispatcher, + [](const CustomUserEvent& event) { + std::cout << "👤 User " << event.GetUserId() + << " " << event.GetAction() + << " - " << (event.IsSuccess() ? "success" : "failed") << std::endl; + }); + + dispatcher.DispatchSync("login", 123, true); + dispatcher.DispatchAsync("logout", 123, true); + + // Wait for final async event + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + + // Example 8: Event timestamping + std::cout << "\n6. Event timestamping demonstration..." << std::endl; + + auto timestamp_listener = AddScopedListener(dispatcher, + [](const ApplicationExitingEvent& event) { + auto now = std::chrono::steady_clock::now(); + auto event_time = event.GetTimestamp(); + auto diff = std::chrono::duration_cast(now - event_time); + std::cout << "⏱️ Event processed " << diff.count() << " microseconds after creation" << std::endl; + }); + + dispatcher.DispatchSync(0); + + // Example 9: Cleanup demonstration + std::cout << "\n7. Cleanup and listener management..." << std::endl; + + std::cout << "Listeners before cleanup: " << dispatcher.GetTotalListenerCount() << std::endl; + + // Remove some specific listeners + dispatcher.RemoveListener(key_pressed_id); + dispatcher.RemoveListener(display_added_id); + + std::cout << "Listeners after removing 2: " << dispatcher.GetTotalListenerCount() << std::endl; + + // Scoped listeners will be automatically removed when they go out of scope + + // Stop async processing + std::cout << "\n8. Stopping async processing..." << std::endl; + dispatcher.Stop(); + + std::cout << "\n=== Demonstration Complete ===" << std::endl; + std::cout << "The generic event system provides:" << std::endl; + std::cout << "✓ Type-safe event handling" << std::endl; + std::cout << "✓ Both observer and callback patterns" << std::endl; + std::cout << "✓ Synchronous and asynchronous dispatch" << std::endl; + std::cout << "✓ Thread-safe operations" << std::endl; + std::cout << "✓ Automatic memory management" << std::endl; + std::cout << "✓ Event timestamping" << std::endl; + std::cout << "✓ Exception safety" << std::endl; + std::cout << "✓ RAII-based cleanup" << std::endl; + + // Clean up remaining listeners + dispatcher.RemoveListener(key_released_id); + dispatcher.RemoveListener(display_removed_id); + dispatcher.RemoveListener(app_started_id); + + std::cout << "\nFinal listener count: " << dispatcher.GetTotalListenerCount() << std::endl; +} + +} // namespace nativeapi + +#ifdef DEMO_MAIN +int main() { + nativeapi::DemonstrateGenericEventSystem(); + return 0; +} +#endif \ No newline at end of file diff --git a/src/event_dispatcher.o b/src/event_dispatcher.o deleted file mode 100644 index 531f8a3885e42f346d362da3ea2671057319151d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331912 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 GH2?pqzX1mT diff --git a/src/event_integration_example.h b/src/event_integration_example.h new file mode 100644 index 0000000..4dee450 --- /dev/null +++ b/src/event_integration_example.h @@ -0,0 +1,148 @@ +#pragma once + +/** + * Integration Example: Event-Aware Display Manager + * + * This example shows how to integrate the generic event system + * with existing components like DisplayManager. + */ + +#include "display_manager.h" +#include "event_system.h" +#include "common_events.h" + +namespace nativeapi { + +/** + * Extended DisplayManager that uses the generic event system + * in addition to the existing listener pattern. + * + * This demonstrates how existing code can be enhanced with the + * new event system without breaking existing functionality. + */ +class EventAwareDisplayManager : public DisplayManager { + public: + explicit EventAwareDisplayManager(EventDispatcher* dispatcher = nullptr) + : dispatcher_(dispatcher ? dispatcher : &GetGlobalEventDispatcher()) {} + + // Override methods to dispatch events + void AddListener(DisplayListener* listener) override { + DisplayManager::AddListener(listener); + + // Also dispatch an event when listeners are added + // This allows other parts of the system to react to listener changes + if (dispatcher_) { + // We could define a ListenerAddedEvent if needed + } + } + + void RemoveListener(DisplayListener* listener) override { + DisplayManager::RemoveListener(listener); + + // Dispatch event for listener removal if needed + } + + protected: + /** + * Override the notification method to also dispatch generic events. + * This is called internally when displays change. + */ + void NotifyListeners(std::function callback) override { + // Call the base implementation first + DisplayManager::NotifyListeners(callback); + + // If this was a display added/removed notification, we could + // dispatch the corresponding event here. For example: + // dispatcher_->DispatchAsync(...); + } + + /** + * Example method that would be called when a display is actually added. + * This would normally be called by the platform-specific implementation. + */ + void OnSystemDisplayAdded(const Display& display) { + // Update internal state + // ... existing logic ... + + // Notify existing listeners + NotifyListeners([&display](DisplayListener* listener) { + listener->OnDisplayAdded(display); + }); + + // Dispatch generic event + if (dispatcher_) { + dispatcher_->DispatchAsync(display); + } + } + + /** + * Example method for display removal + */ + void OnSystemDisplayRemoved(const Display& display) { + // Update internal state + // ... existing logic ... + + // Notify existing listeners + NotifyListeners([&display](DisplayListener* listener) { + listener->OnDisplayRemoved(display); + }); + + // Dispatch generic event + if (dispatcher_) { + dispatcher_->DispatchAsync(display); + } + } + + private: + EventDispatcher* dispatcher_; +}; + +/** + * Example of a unified event handler that can handle both + * keyboard and display events using the generic event system. + */ +class UnifiedSystemEventHandler : public EventListener { + public: + void OnEvent(const Event& event) override { + // Handle different event types + if (auto display_added = dynamic_cast(&event)) { + HandleDisplayAdded(*display_added); + } else if (auto display_removed = dynamic_cast(&event)) { + HandleDisplayRemoved(*display_removed); + } else if (auto key_pressed = dynamic_cast(&event)) { + HandleKeyPressed(*key_pressed); + } else if (auto key_released = dynamic_cast(&event)) { + HandleKeyReleased(*key_released); + } else if (auto app_started = dynamic_cast(&event)) { + HandleApplicationStarted(*app_started); + } + } + + private: + void HandleDisplayAdded(const DisplayAddedEvent& event) { + std::cout << "System: Display added" << std::endl; + // Handle display addition... + } + + void HandleDisplayRemoved(const DisplayRemovedEvent& event) { + std::cout << "System: Display removed" << std::endl; + // Handle display removal... + } + + void HandleKeyPressed(const KeyPressedEvent& event) { + std::cout << "System: Key " << event.GetKeycode() << " pressed" << std::endl; + // Handle key press... + } + + void HandleKeyReleased(const KeyReleasedEvent& event) { + std::cout << "System: Key " << event.GetKeycode() << " released" << std::endl; + // Handle key release... + } + + void HandleApplicationStarted(const ApplicationStartedEvent& event) { + std::cout << "System: Application started, setting up..." << std::endl; + // Initialize system components... + } +}; + +} // namespace nativeapi \ No newline at end of file diff --git a/src/event_system.o b/src/event_system.o deleted file mode 100644 index 0c3dab855acefe6144f013234abeff15d5bfc8ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3536 zcmbtX&2Jk;6rYXLrl2%V!&jxC%1EdxA6@Jug@P)S)Y;e(RvPjFs0EES_SQDoyJmN6 z9K?szrbrPWRfuwc8!A#S^uU2~Kq#W(<4@qg4UmvHAud&g6yBSi=Zps%QuRr*Gw(OQ z_pxu^?AmWTg}DLCVk8!On(b(WGPZcf&U#udr`Z@gAi4WM$L+t8hiSW@C0bn_F0A1B`7UmVkkBe>^ek^~J&xv)ZFWpCB?m zK0LJVA{72XP;j7Jg@Lxr85wbGvPE=`t2W&+ZQcnIYQcx!%H9FxoWLM`LKNRv3bY=)Ckqb$A1|}97YyzSuU!>gnS@@=b0hGq zXSWuFz*_ZRtNJCr1DrZH^Kl8j#!5vn2cB9XG0hI&n|~Svq3j^8}l`= z#Xd4+S^>jq#-7DG(|3>N6kyo;T{Q*000ZS}Jaw+>m~`}USfQ`!4iYbZR1Pc30ORAc zqwgg30-h_R(C-~sO1Vi3V>aVI3j65Ow3ki+pEe9qfa!vLg%rKl#DKv#zH7qOwmI4h||J)eB>zm^!{sWc>~Mv?5ZSvHl2=J>hQvhN03hbV;fBSYKTz zf0{4ACarZ|p%>VLdkHZ7wP&Qy7L|Pp_H?2A3HuxtNHy&n%05p-HJkQV0Poemc||09 ztlxeZWKZ?$6&pi+rQ*M!62osmFMIqS^sn9pY*Zc4YsQT!x4?)6&welaiz?A?h^S`M F{vUcy3+ey> diff --git a/src/event_test b/src/event_test deleted file mode 100755 index e1445c19181b2791166b4dfcf367dfc4bc9fd630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260960 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 diff --git a/src/simple_test b/src/simple_test deleted file mode 100755 index 822d9cf22df98913683334b82a395b2df81ccd55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164272 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 From 50e9be1a57c6f38218d52178eaa8417b155afc74 Mon Sep 17 00:00:00 2001 From: LiJianying Date: Wed, 27 Aug 2025 19:59:22 +0800 Subject: [PATCH 4/4] Remove legacy event system and update to new event dispatcher - Delete event_system and related demo/test files - Remove common_events and integration examples - Update CMakeLists.txt to require C++17 - Update nativeapi.h to use event_dispatcher/event headers - Implement GetGlobalEventDispatcher in event_dispatcher.cpp/h --- docs/EVENT_SYSTEM.md | 209 ------------------------ examples/display_example/CMakeLists.txt | 2 +- examples/window_example/CMakeLists.txt | 2 +- include/nativeapi.h | 4 +- src/callback_test.cpp | 48 ------ src/common_events.h | 158 ------------------ src/complete_event_demo.cpp | 164 ------------------- src/event_dispatcher.cpp | 59 ++++--- src/event_dispatcher.h | 46 +++--- src/event_integration_example.h | 148 ----------------- src/event_system.cpp | 10 -- src/event_system.h | 110 ------------- src/event_system_example.cpp | 135 --------------- src/event_system_test.cpp | 157 ------------------ src/simple_event_test.cpp | 55 ------- 15 files changed, 62 insertions(+), 1245 deletions(-) delete mode 100644 docs/EVENT_SYSTEM.md delete mode 100644 src/callback_test.cpp delete mode 100644 src/common_events.h delete mode 100644 src/complete_event_demo.cpp delete mode 100644 src/event_integration_example.h delete mode 100644 src/event_system.cpp delete mode 100644 src/event_system.h delete mode 100644 src/event_system_example.cpp delete mode 100644 src/event_system_test.cpp delete mode 100644 src/simple_event_test.cpp diff --git a/docs/EVENT_SYSTEM.md b/docs/EVENT_SYSTEM.md deleted file mode 100644 index 8d0ac0b..0000000 --- a/docs/EVENT_SYSTEM.md +++ /dev/null @@ -1,209 +0,0 @@ -# Generic Event Handling System - -## Overview - -The Generic Event Handling System provides a type-safe, flexible, and thread-safe mechanism for handling events in C++. It supports both observer patterns and callback-based event handling, making it suitable for various use cases in native API development. - -## Key Features - -- **Type Safety**: Template-based design ensures compile-time type checking -- **Flexible Patterns**: Supports both observer pattern and callback-based handling -- **Thread Safety**: Safe for multi-threaded environments with proper synchronization -- **Asynchronous Processing**: Built-in support for async event dispatch with background thread -- **Automatic Cleanup**: RAII-based listener management prevents memory leaks -- **Exception Safety**: Handles exceptions in event listeners gracefully -- **Event Timestamping**: All events include creation timestamps -- **Generic Design**: Works with any event type through templates - -## Core Components - -### Event Base Classes - -- `Event`: Base class for all events, provides timestamping and type information -- `TypedEvent`: Template base class that provides automatic type identification -- `EventListener`: Generic event listener interface -- `TypedEventListener`: Type-safe event listener for specific event types -- `CallbackEventListener`: Wrapper for std::function callbacks - -### Event Dispatcher - -- `EventDispatcher`: Main class that manages event distribution -- Supports both synchronous and asynchronous event dispatch -- Thread-safe listener management -- Background thread for async event processing - -### Utility Classes - -- `EventListenerGuard`: RAII helper for automatic listener cleanup -- `GetGlobalEventDispatcher()`: Singleton access to global event dispatcher - -## Usage Examples - -### 1. Define Custom Events - -```cpp -#include "event_system.h" - -// Define a custom event -class UserLoginEvent : public nativeapi::TypedEvent { - public: - UserLoginEvent(const std::string& username, bool success) - : username_(username), success_(success) {} - - const std::string& GetUsername() const { return username_; } - bool IsSuccess() const { return success_; } - - private: - std::string username_; - bool success_; -}; -``` - -### 2. Observer Pattern - -```cpp -// Implement an observer -class LoginObserver : public nativeapi::TypedEventListener { - public: - void OnTypedEvent(const UserLoginEvent& event) override { - std::cout << "User " << event.GetUsername() - << (event.IsSuccess() ? " logged in" : " login failed") << std::endl; - } -}; - -// Register the observer -nativeapi::EventDispatcher dispatcher; -LoginObserver observer; -auto listener_id = dispatcher.AddListener(&observer); - -// Dispatch an event -dispatcher.DispatchSync("john_doe", true); - -// Clean up -dispatcher.RemoveListener(listener_id); -``` - -### 3. Callback Pattern - -```cpp -// Register a callback function -auto callback_id = dispatcher.AddListener( - [](const UserLoginEvent& event) { - // Handle the event - std::cout << "Callback: " << event.GetUsername() << std::endl; - }); - -// Or use RAII for automatic cleanup -auto guard = nativeapi::AddScopedListener(dispatcher, - [](const UserLoginEvent& event) { - std::cout << "Scoped callback: " << event.GetUsername() << std::endl; - }); -// Listener is automatically removed when guard goes out of scope -``` - -### 4. Multi-Event Observer - -```cpp -// Handle multiple event types with one observer -class MultiEventObserver : public nativeapi::EventListener { - public: - void OnEvent(const nativeapi::Event& event) override { - if (auto login_event = dynamic_cast(&event)) { - HandleLogin(*login_event); - } else if (auto logout_event = dynamic_cast(&event)) { - HandleLogout(*logout_event); - } - } - - private: - void HandleLogin(const UserLoginEvent& event) { /* ... */ } - void HandleLogout(const UserLogoutEvent& event) { /* ... */ } -}; -``` - -### 5. Asynchronous Event Processing - -```cpp -// Start background thread for async processing -dispatcher.Start(); - -// Dispatch events asynchronously -dispatcher.DispatchAsync("alice", true); -dispatcher.DispatchAsync("bob", false); - -// Events will be processed on background thread -// Stop background processing when done -dispatcher.Stop(); -``` - -### 6. Global Event System - -```cpp -// Use the global event dispatcher -auto& global_dispatcher = nativeapi::GetGlobalEventDispatcher(); - -global_dispatcher.AddListener([](const UserLoginEvent& event) { - // This listener is globally available -}); -``` - -## Thread Safety - -The event system is designed to be thread-safe: - -- Listener registration/removal is protected by mutexes -- Event dispatch creates snapshots of listeners to avoid holding locks during dispatch -- Async event processing uses condition variables for efficient waiting -- Exception handling prevents one listener from affecting others - -## Performance Considerations - -- **Synchronous dispatch**: Direct function calls, minimal overhead -- **Asynchronous dispatch**: Events are queued and processed on background thread -- **Memory management**: Automatic cleanup of callback listeners -- **Exception handling**: Try-catch blocks around listener calls - -## Integration with Existing Code - -The event system can be integrated with existing components: - -```cpp -// Example: Extend DisplayManager to use events -class EventAwareDisplayManager : public DisplayManager { - public: - EventAwareDisplayManager(nativeapi::EventDispatcher& dispatcher) - : dispatcher_(dispatcher) {} - - protected: - void OnDisplayAdded(const Display& display) { - // Existing logic... - - // Dispatch event - dispatcher_.DispatchAsync(display); - } - - private: - nativeapi::EventDispatcher& dispatcher_; -}; -``` - -## Best Practices - -1. **Use RAII**: Prefer `EventListenerGuard` or scoped listeners for automatic cleanup -2. **Handle exceptions**: Event listeners should handle their own exceptions -3. **Avoid blocking**: Keep event handlers fast to avoid blocking other listeners -4. **Use appropriate dispatch**: Sync for immediate handling, async for background processing -5. **Clean up**: Remove listeners when they're no longer needed -6. **Type safety**: Prefer `TypedEventListener` over raw `EventListener` when possible - -## Common Event Types - -The system includes predefined events for common scenarios: - -- `DisplayAddedEvent`, `DisplayRemovedEvent`: Display management -- `KeyPressedEvent`, `KeyReleasedEvent`: Keyboard input -- `MouseMovedEvent`, `MouseClickedEvent`: Mouse input -- `WindowCreatedEvent`, `WindowClosedEvent`: Window management -- `ApplicationStartedEvent`, `ApplicationExitingEvent`: Application lifecycle - -These can be used directly or serve as examples for creating custom events. \ No newline at end of file diff --git a/examples/display_example/CMakeLists.txt b/examples/display_example/CMakeLists.txt index 45f6a65..9a4f0f3 100644 --- a/examples/display_example/CMakeLists.txt +++ b/examples/display_example/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10) project(display_example VERSION 0.0.1 LANGUAGES CXX) # Set C++ standard -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Add example program diff --git a/examples/window_example/CMakeLists.txt b/examples/window_example/CMakeLists.txt index 2953452..8797260 100644 --- a/examples/window_example/CMakeLists.txt +++ b/examples/window_example/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10) project(window_example VERSION 0.0.1 LANGUAGES CXX) # Set C++ standard -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Add example program diff --git a/include/nativeapi.h b/include/nativeapi.h index 0263472..f16704c 100644 --- a/include/nativeapi.h +++ b/include/nativeapi.h @@ -4,8 +4,8 @@ #include "../src/app_runner.h" #include "../src/display.h" #include "../src/display_manager.h" -#include "../src/event_system.h" -#include "../src/common_events.h" +#include "../src/event.h" +#include "../src/event_dispatcher.h" #include "../src/geometry.h" #include "../src/keyboard_monitor.h" #include "../src/menu.h" diff --git a/src/callback_test.cpp b/src/callback_test.cpp deleted file mode 100644 index 84134a8..0000000 --- a/src/callback_test.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include - -#include "event_system.h" - -// Simple test event -class SimpleEvent : public nativeapi::TypedEvent { - public: - explicit SimpleEvent(int value) : value_(value) {} - int GetValue() const { return value_; } - private: - int value_; -}; - -int main() { - std::cout << "=== Callback Test ===" << std::endl; - - nativeapi::EventDispatcher dispatcher; - - // Test callback - bool callback_called = false; - int callback_value = 0; - - std::cout << "Adding callback listener..." << std::endl; - auto callback_id = dispatcher.AddListener([&](const SimpleEvent& event) { - std::cout << "Callback called with value: " << event.GetValue() << std::endl; - callback_value = event.GetValue(); - callback_called = true; - }); - - std::cout << "Callback ID: " << callback_id << std::endl; - - SimpleEvent event(123); - std::cout << "Dispatching event..." << std::endl; - dispatcher.DispatchSync(event); - - std::cout << "Callback called: " << callback_called << std::endl; - std::cout << "Callback value: " << callback_value << std::endl; - - if (callback_called && callback_value == 123) { - std::cout << "✓ Test passed!" << std::endl; - } else { - std::cout << "✗ Test failed!" << std::endl; - return 1; - } - - return 0; -} \ No newline at end of file diff --git a/src/common_events.h b/src/common_events.h deleted file mode 100644 index 9d4d92a..0000000 --- a/src/common_events.h +++ /dev/null @@ -1,158 +0,0 @@ -#pragma once - -#include "event.h" -#include "display.h" -#include "geometry.h" - -namespace nativeapi { - -/** - * Example events that demonstrate how to integrate the generic event system - * with existing components like display management and keyboard monitoring. - */ - -/** - * Display-related events - */ -class DisplayAddedEvent : public TypedEvent { - public: - explicit DisplayAddedEvent(const Display& display) : display_(display) {} - - const Display& GetDisplay() const { return display_; } - - private: - Display display_; -}; - -class DisplayRemovedEvent : public TypedEvent { - public: - explicit DisplayRemovedEvent(const Display& display) : display_(display) {} - - const Display& GetDisplay() const { return display_; } - - private: - Display display_; -}; - -class DisplayChangedEvent : public TypedEvent { - public: - DisplayChangedEvent(const Display& old_display, const Display& new_display) - : old_display_(old_display), new_display_(new_display) {} - - const Display& GetOldDisplay() const { return old_display_; } - const Display& GetNewDisplay() const { return new_display_; } - - private: - Display old_display_; - Display new_display_; -}; - -/** - * Keyboard-related events - */ -class KeyPressedEvent : public TypedEvent { - public: - explicit KeyPressedEvent(int keycode) : keycode_(keycode) {} - - int GetKeycode() const { return keycode_; } - - private: - int keycode_; -}; - -class KeyReleasedEvent : public TypedEvent { - public: - explicit KeyReleasedEvent(int keycode) : keycode_(keycode) {} - - int GetKeycode() const { return keycode_; } - - private: - int keycode_; -}; - -class ModifierKeysChangedEvent : public TypedEvent { - public: - explicit ModifierKeysChangedEvent(uint32_t modifier_keys) - : modifier_keys_(modifier_keys) {} - - uint32_t GetModifierKeys() const { return modifier_keys_; } - - private: - uint32_t modifier_keys_; -}; - -/** - * Mouse-related events - */ -class MouseMovedEvent : public TypedEvent { - public: - MouseMovedEvent(const Point& old_position, const Point& new_position) - : old_position_(old_position), new_position_(new_position) {} - - const Point& GetOldPosition() const { return old_position_; } - const Point& GetNewPosition() const { return new_position_; } - - private: - Point old_position_; - Point new_position_; -}; - -class MouseClickedEvent : public TypedEvent { - public: - enum class Button { Left, Right, Middle, X1, X2 }; - - MouseClickedEvent(Button button, const Point& position) - : button_(button), position_(position) {} - - Button GetButton() const { return button_; } - const Point& GetPosition() const { return position_; } - - private: - Button button_; - Point position_; -}; - -/** - * Window-related events - */ -class WindowCreatedEvent : public TypedEvent { - public: - explicit WindowCreatedEvent(void* window_handle) - : window_handle_(window_handle) {} - - void* GetWindowHandle() const { return window_handle_; } - - private: - void* window_handle_; -}; - -class WindowClosedEvent : public TypedEvent { - public: - explicit WindowClosedEvent(void* window_handle) - : window_handle_(window_handle) {} - - void* GetWindowHandle() const { return window_handle_; } - - private: - void* window_handle_; -}; - -/** - * Application-related events - */ -class ApplicationStartedEvent : public TypedEvent { - public: - ApplicationStartedEvent() = default; -}; - -class ApplicationExitingEvent : public TypedEvent { - public: - explicit ApplicationExitingEvent(int exit_code = 0) : exit_code_(exit_code) {} - - int GetExitCode() const { return exit_code_; } - - private: - int exit_code_; -}; - -} // namespace nativeapi \ No newline at end of file diff --git a/src/complete_event_demo.cpp b/src/complete_event_demo.cpp deleted file mode 100644 index 6dbfe2d..0000000 --- a/src/complete_event_demo.cpp +++ /dev/null @@ -1,164 +0,0 @@ -#include "event_system.h" -#include "common_events.h" -#include "event_integration_example.h" -#include -#include -#include - -/** - * Complete demonstration of the generic event system capabilities - */ -namespace nativeapi { - -void DemonstrateGenericEventSystem() { - std::cout << "=== Generic Event System Demonstration ===" << std::endl; - - // Get global event dispatcher - auto& dispatcher = GetGlobalEventDispatcher(); - - std::cout << "\n1. Setting up event listeners..." << std::endl; - - // Example 1: Type-specific callback listeners - auto key_listener = AddScopedListener(dispatcher, - [](const KeyPressedEvent& event) { - std::cout << "🎹 Key pressed: " << event.GetKeycode() << std::endl; - }); - - auto display_listener = AddScopedListener(dispatcher, - [](const DisplayAddedEvent& event) { - std::cout << "🖥️ Display added" << std::endl; - }); - - // Example 2: Multi-event observer - UnifiedSystemEventHandler system_handler; - auto key_pressed_id = dispatcher.AddListener(&system_handler); - auto key_released_id = dispatcher.AddListener(&system_handler); - auto display_added_id = dispatcher.AddListener(&system_handler); - auto display_removed_id = dispatcher.AddListener(&system_handler); - auto app_started_id = dispatcher.AddListener(&system_handler); - - // Example 3: Application lifecycle listeners - auto app_exit_listener = AddScopedListener(dispatcher, - [](const ApplicationExitingEvent& event) { - std::cout << "🚪 Application exiting with code: " << event.GetExitCode() << std::endl; - }); - - std::cout << "Total listeners registered: " << dispatcher.GetTotalListenerCount() << std::endl; - - // Example 4: Start async processing - std::cout << "\n2. Starting asynchronous event processing..." << std::endl; - dispatcher.Start(); - - // Example 5: Synchronous event dispatch - std::cout << "\n3. Dispatching synchronous events..." << std::endl; - - dispatcher.DispatchSync(); - - // Create dummy display for demonstration - Display dummy_display; // Assuming Display has default constructor - dispatcher.DispatchSync(dummy_display); - - dispatcher.DispatchSync(65); // 'A' - dispatcher.DispatchSync(65); - - // Example 6: Asynchronous event dispatch - std::cout << "\n4. Dispatching asynchronous events..." << std::endl; - - dispatcher.DispatchAsync(66); // 'B' - dispatcher.DispatchAsync(67); // 'C' - dispatcher.DispatchAsync(66); - dispatcher.DispatchAsync(67); - - dispatcher.DispatchAsync(dummy_display); - - // Wait for async events to process - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - - // Example 7: Custom event with complex data - std::cout << "\n5. Custom complex event..." << std::endl; - - class CustomUserEvent : public TypedEvent { - public: - CustomUserEvent(const std::string& action, int user_id, bool success) - : action_(action), user_id_(user_id), success_(success) {} - - const std::string& GetAction() const { return action_; } - int GetUserId() const { return user_id_; } - bool IsSuccess() const { return success_; } - - private: - std::string action_; - int user_id_; - bool success_; - }; - - auto custom_listener = AddScopedListener(dispatcher, - [](const CustomUserEvent& event) { - std::cout << "👤 User " << event.GetUserId() - << " " << event.GetAction() - << " - " << (event.IsSuccess() ? "success" : "failed") << std::endl; - }); - - dispatcher.DispatchSync("login", 123, true); - dispatcher.DispatchAsync("logout", 123, true); - - // Wait for final async event - std::this_thread::sleep_for(std::chrono::milliseconds(50)); - - // Example 8: Event timestamping - std::cout << "\n6. Event timestamping demonstration..." << std::endl; - - auto timestamp_listener = AddScopedListener(dispatcher, - [](const ApplicationExitingEvent& event) { - auto now = std::chrono::steady_clock::now(); - auto event_time = event.GetTimestamp(); - auto diff = std::chrono::duration_cast(now - event_time); - std::cout << "⏱️ Event processed " << diff.count() << " microseconds after creation" << std::endl; - }); - - dispatcher.DispatchSync(0); - - // Example 9: Cleanup demonstration - std::cout << "\n7. Cleanup and listener management..." << std::endl; - - std::cout << "Listeners before cleanup: " << dispatcher.GetTotalListenerCount() << std::endl; - - // Remove some specific listeners - dispatcher.RemoveListener(key_pressed_id); - dispatcher.RemoveListener(display_added_id); - - std::cout << "Listeners after removing 2: " << dispatcher.GetTotalListenerCount() << std::endl; - - // Scoped listeners will be automatically removed when they go out of scope - - // Stop async processing - std::cout << "\n8. Stopping async processing..." << std::endl; - dispatcher.Stop(); - - std::cout << "\n=== Demonstration Complete ===" << std::endl; - std::cout << "The generic event system provides:" << std::endl; - std::cout << "✓ Type-safe event handling" << std::endl; - std::cout << "✓ Both observer and callback patterns" << std::endl; - std::cout << "✓ Synchronous and asynchronous dispatch" << std::endl; - std::cout << "✓ Thread-safe operations" << std::endl; - std::cout << "✓ Automatic memory management" << std::endl; - std::cout << "✓ Event timestamping" << std::endl; - std::cout << "✓ Exception safety" << std::endl; - std::cout << "✓ RAII-based cleanup" << std::endl; - - // Clean up remaining listeners - dispatcher.RemoveListener(key_released_id); - dispatcher.RemoveListener(display_removed_id); - dispatcher.RemoveListener(app_started_id); - - std::cout << "\nFinal listener count: " << dispatcher.GetTotalListenerCount() << std::endl; -} - -} // namespace nativeapi - -#ifdef DEMO_MAIN -int main() { - nativeapi::DemonstrateGenericEventSystem(); - return 0; -} -#endif \ No newline at end of file diff --git a/src/event_dispatcher.cpp b/src/event_dispatcher.cpp index bdeba28..11f1cf9 100644 --- a/src/event_dispatcher.cpp +++ b/src/event_dispatcher.cpp @@ -5,42 +5,42 @@ namespace nativeapi { -EventDispatcher::EventDispatcher() - : running_(false), stop_requested_(false), next_listener_id_(1) { -} +EventDispatcher::EventDispatcher() + : running_(false), stop_requested_(false), next_listener_id_(1) {} EventDispatcher::~EventDispatcher() { Stop(); } -size_t EventDispatcher::AddListener(std::type_index event_type, EventListener* listener) { +size_t EventDispatcher::AddListener(std::type_index event_type, + EventListener* listener) { if (!listener) { - return 0; // Invalid listener + return 0; // Invalid listener } std::lock_guard lock(listeners_mutex_); size_t listener_id = next_listener_id_.fetch_add(1); - + listeners_[event_type].push_back({listener, listener_id}); - + return listener_id; } bool EventDispatcher::RemoveListener(size_t listener_id) { std::lock_guard lock(listeners_mutex_); - + for (auto& [event_type, listener_list] : listeners_) { auto it = std::find_if(listener_list.begin(), listener_list.end(), - [listener_id](const ListenerInfo& info) { - return info.id == listener_id; - }); - + [listener_id](const ListenerInfo& info) { + return info.id == listener_id; + }); + if (it != listener_list.end()) { listener_list.erase(it); return true; } } - + return false; } @@ -58,7 +58,7 @@ void EventDispatcher::RemoveAllListeners() { void EventDispatcher::DispatchSync(const Event& event) { std::type_index event_type = typeid(event); std::vector listeners_copy; - + // Copy listeners to avoid holding the lock during dispatch { std::lock_guard lock(listeners_mutex_); @@ -70,7 +70,7 @@ void EventDispatcher::DispatchSync(const Event& event) { } } } - + // Dispatch to all listeners for (auto* listener : listeners_copy) { try { @@ -97,35 +97,35 @@ void EventDispatcher::DispatchAsync(std::unique_ptr event) { std::lock_guard lock(queue_mutex_); event_queue_.push(std::move(event)); } - + queue_condition_.notify_one(); } void EventDispatcher::Start() { if (running_.load()) { - return; // Already running + return; // Already running } stop_requested_.store(false); running_.store(true); - + worker_thread_ = std::thread(&EventDispatcher::ProcessAsyncEvents, this); } void EventDispatcher::Stop() { if (!running_.load()) { - return; // Not running + return; // Not running } stop_requested_.store(true); queue_condition_.notify_all(); - + if (worker_thread_.joinable()) { worker_thread_.join(); } - + running_.store(false); - + // Clear any remaining events in the queue std::lock_guard lock(queue_mutex_); while (!event_queue_.empty()) { @@ -155,24 +155,24 @@ size_t EventDispatcher::GetTotalListenerCount() const { void EventDispatcher::ProcessAsyncEvents() { while (running_.load()) { std::unique_ptr event; - + // Wait for an event or stop signal { std::unique_lock lock(queue_mutex_); queue_condition_.wait(lock, [this] { return !event_queue_.empty() || stop_requested_.load(); }); - + if (stop_requested_.load()) { break; } - + if (!event_queue_.empty()) { event = std::move(event_queue_.front()); event_queue_.pop(); } } - + // Dispatch the event if we have one if (event) { DispatchSync(*event); @@ -180,4 +180,9 @@ void EventDispatcher::ProcessAsyncEvents() { } } -} // namespace nativeapi \ No newline at end of file +EventDispatcher& GetGlobalEventDispatcher() { + static EventDispatcher global_dispatcher; + return global_dispatcher; +} + +} // namespace nativeapi diff --git a/src/event_dispatcher.h b/src/event_dispatcher.h index 3dd6bdb..4f5eec8 100644 --- a/src/event_dispatcher.h +++ b/src/event_dispatcher.h @@ -29,40 +29,41 @@ class EventDispatcher { /** * Add a listener for a specific event type. * The listener will be called whenever an event of that type is dispatched. - * - * @param listener Pointer to the event listener (must remain valid until removed) + * + * @param listener Pointer to the event listener (must remain valid until + * removed) * @return A unique listener ID that can be used to remove the listener */ - template + template size_t AddListener(TypedEventListener* listener) { return AddListener(TypedEvent::GetStaticType(), listener); } /** * Add a callback function as a listener for a specific event type. - * + * * @param callback Function to call when the event occurs * @return A unique listener ID that can be used to remove the listener */ - template + template size_t AddListener(std::function callback) { - auto callback_listener = std::make_unique>( - std::move(callback)); + auto callback_listener = + std::make_unique>(std::move(callback)); auto listener_ptr = callback_listener.get(); - + // Store the callback listener first, then add it { std::lock_guard lock(listeners_mutex_); callback_listeners_.emplace_back(std::move(callback_listener)); } - + // Use the type-erased method to avoid infinite recursion return AddListener(TypedEvent::GetStaticType(), listener_ptr); } /** * Remove a listener by its ID. - * + * * @param listener_id The ID returned by AddListener * @return true if the listener was found and removed, false otherwise */ @@ -71,7 +72,7 @@ class EventDispatcher { /** * Remove all listeners for a specific event type. */ - template + template void RemoveAllListeners() { RemoveAllListeners(TypedEvent::GetStaticType()); } @@ -84,7 +85,7 @@ class EventDispatcher { /** * Dispatch an event synchronously to all registered listeners. * This will call all listeners immediately on the current thread. - * + * * @param event The event to dispatch */ void DispatchSync(const Event& event); @@ -93,7 +94,7 @@ class EventDispatcher { * Dispatch an event synchronously using perfect forwarding. * This creates the event object and dispatches it immediately. */ - template + template void DispatchSync(Args&&... args) { EventType event(std::forward(args)...); DispatchSync(event); @@ -102,7 +103,7 @@ class EventDispatcher { /** * Queue an event for asynchronous dispatch. * The event will be dispatched on the background thread. - * + * * @param event The event to queue (will be copied) */ void DispatchAsync(std::unique_ptr event); @@ -110,7 +111,7 @@ class EventDispatcher { /** * Queue an event for asynchronous dispatch using perfect forwarding. */ - template + template void DispatchAsync(Args&&... args) { auto event = std::make_unique(std::forward(args)...); DispatchAsync(std::move(event)); @@ -135,7 +136,7 @@ class EventDispatcher { /** * Get the number of listeners registered for a specific event type. */ - template + template size_t GetListenerCount() const { return GetListenerCount(TypedEvent::GetStaticType()); } @@ -162,10 +163,10 @@ class EventDispatcher { // Member variables mutable std::mutex listeners_mutex_; std::unordered_map> listeners_; - + // Storage for callback listeners to manage their lifetime std::vector> callback_listeners_; - + // Async event processing std::mutex queue_mutex_; std::queue> event_queue_; @@ -173,9 +174,14 @@ class EventDispatcher { std::thread worker_thread_; std::atomic running_; std::atomic stop_requested_; - + // Listener ID generation std::atomic next_listener_id_; }; -} // namespace nativeapi \ No newline at end of file +/** + * Convenience function to create a global event dispatcher instance. + * This is useful for applications that need a single, shared event system. + */ +EventDispatcher& GetGlobalEventDispatcher(); +} // namespace nativeapi diff --git a/src/event_integration_example.h b/src/event_integration_example.h deleted file mode 100644 index 4dee450..0000000 --- a/src/event_integration_example.h +++ /dev/null @@ -1,148 +0,0 @@ -#pragma once - -/** - * Integration Example: Event-Aware Display Manager - * - * This example shows how to integrate the generic event system - * with existing components like DisplayManager. - */ - -#include "display_manager.h" -#include "event_system.h" -#include "common_events.h" - -namespace nativeapi { - -/** - * Extended DisplayManager that uses the generic event system - * in addition to the existing listener pattern. - * - * This demonstrates how existing code can be enhanced with the - * new event system without breaking existing functionality. - */ -class EventAwareDisplayManager : public DisplayManager { - public: - explicit EventAwareDisplayManager(EventDispatcher* dispatcher = nullptr) - : dispatcher_(dispatcher ? dispatcher : &GetGlobalEventDispatcher()) {} - - // Override methods to dispatch events - void AddListener(DisplayListener* listener) override { - DisplayManager::AddListener(listener); - - // Also dispatch an event when listeners are added - // This allows other parts of the system to react to listener changes - if (dispatcher_) { - // We could define a ListenerAddedEvent if needed - } - } - - void RemoveListener(DisplayListener* listener) override { - DisplayManager::RemoveListener(listener); - - // Dispatch event for listener removal if needed - } - - protected: - /** - * Override the notification method to also dispatch generic events. - * This is called internally when displays change. - */ - void NotifyListeners(std::function callback) override { - // Call the base implementation first - DisplayManager::NotifyListeners(callback); - - // If this was a display added/removed notification, we could - // dispatch the corresponding event here. For example: - // dispatcher_->DispatchAsync(...); - } - - /** - * Example method that would be called when a display is actually added. - * This would normally be called by the platform-specific implementation. - */ - void OnSystemDisplayAdded(const Display& display) { - // Update internal state - // ... existing logic ... - - // Notify existing listeners - NotifyListeners([&display](DisplayListener* listener) { - listener->OnDisplayAdded(display); - }); - - // Dispatch generic event - if (dispatcher_) { - dispatcher_->DispatchAsync(display); - } - } - - /** - * Example method for display removal - */ - void OnSystemDisplayRemoved(const Display& display) { - // Update internal state - // ... existing logic ... - - // Notify existing listeners - NotifyListeners([&display](DisplayListener* listener) { - listener->OnDisplayRemoved(display); - }); - - // Dispatch generic event - if (dispatcher_) { - dispatcher_->DispatchAsync(display); - } - } - - private: - EventDispatcher* dispatcher_; -}; - -/** - * Example of a unified event handler that can handle both - * keyboard and display events using the generic event system. - */ -class UnifiedSystemEventHandler : public EventListener { - public: - void OnEvent(const Event& event) override { - // Handle different event types - if (auto display_added = dynamic_cast(&event)) { - HandleDisplayAdded(*display_added); - } else if (auto display_removed = dynamic_cast(&event)) { - HandleDisplayRemoved(*display_removed); - } else if (auto key_pressed = dynamic_cast(&event)) { - HandleKeyPressed(*key_pressed); - } else if (auto key_released = dynamic_cast(&event)) { - HandleKeyReleased(*key_released); - } else if (auto app_started = dynamic_cast(&event)) { - HandleApplicationStarted(*app_started); - } - } - - private: - void HandleDisplayAdded(const DisplayAddedEvent& event) { - std::cout << "System: Display added" << std::endl; - // Handle display addition... - } - - void HandleDisplayRemoved(const DisplayRemovedEvent& event) { - std::cout << "System: Display removed" << std::endl; - // Handle display removal... - } - - void HandleKeyPressed(const KeyPressedEvent& event) { - std::cout << "System: Key " << event.GetKeycode() << " pressed" << std::endl; - // Handle key press... - } - - void HandleKeyReleased(const KeyReleasedEvent& event) { - std::cout << "System: Key " << event.GetKeycode() << " released" << std::endl; - // Handle key release... - } - - void HandleApplicationStarted(const ApplicationStartedEvent& event) { - std::cout << "System: Application started, setting up..." << std::endl; - // Initialize system components... - } -}; - -} // namespace nativeapi \ No newline at end of file diff --git a/src/event_system.cpp b/src/event_system.cpp deleted file mode 100644 index 32dc94f..0000000 --- a/src/event_system.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "event_system.h" - -namespace nativeapi { - -EventDispatcher& GetGlobalEventDispatcher() { - static EventDispatcher global_dispatcher; - return global_dispatcher; -} - -} // namespace nativeapi \ No newline at end of file diff --git a/src/event_system.h b/src/event_system.h deleted file mode 100644 index cb9307a..0000000 --- a/src/event_system.h +++ /dev/null @@ -1,110 +0,0 @@ -#pragma once - -/** - * Generic Event Handling System - * - * This header provides a comprehensive, type-safe event handling mechanism - * that supports both observer patterns and callback-based event handling. - * - * Key Features: - * - Type-safe event dispatching using templates - * - Both synchronous and asynchronous event processing - * - Observer pattern support with EventListener interface - * - Callback-based handling with std::function - * - Thread-safe operations - * - Automatic lifetime management for callback listeners - * - Event timestamping - * - Exception safety in event handling - * - * Usage Examples: - * - * 1. Define custom events: - * class MyEvent : public TypedEvent { - * // Add event data here - * }; - * - * 2. Use observer pattern: - * class MyListener : public TypedEventListener { - * void OnTypedEvent(const MyEvent& event) override { - * // Handle event - * } - * }; - * - * 3. Use callback pattern: - * dispatcher.AddListener([](const MyEvent& event) { - * // Handle event - * }); - * - * 4. Dispatch events: - * dispatcher.DispatchSync(MyEvent()); // Synchronous - * dispatcher.DispatchAsync(MyEvent()); // Asynchronous - */ - -#include "event.h" -#include "event_dispatcher.h" - -namespace nativeapi { - -/** - * Convenience function to create a global event dispatcher instance. - * This is useful for applications that need a single, shared event system. - */ -EventDispatcher& GetGlobalEventDispatcher(); - -/** - * RAII helper class for automatically removing event listeners. - * This ensures listeners are properly cleaned up when they go out of scope. - */ -class EventListenerGuard { - public: - EventListenerGuard(EventDispatcher& dispatcher, size_t listener_id) - : dispatcher_(&dispatcher), listener_id_(listener_id) {} - - ~EventListenerGuard() { - if (dispatcher_ && listener_id_ != 0) { - dispatcher_->RemoveListener(listener_id_); - } - } - - // Non-copyable but movable - EventListenerGuard(const EventListenerGuard&) = delete; - EventListenerGuard& operator=(const EventListenerGuard&) = delete; - - EventListenerGuard(EventListenerGuard&& other) noexcept - : dispatcher_(other.dispatcher_), listener_id_(other.listener_id_) { - other.dispatcher_ = nullptr; - other.listener_id_ = 0; - } - - EventListenerGuard& operator=(EventListenerGuard&& other) noexcept { - if (this != &other) { - if (dispatcher_ && listener_id_ != 0) { - dispatcher_->RemoveListener(listener_id_); - } - dispatcher_ = other.dispatcher_; - listener_id_ = other.listener_id_; - other.dispatcher_ = nullptr; - other.listener_id_ = 0; - } - return *this; - } - - size_t GetListenerId() const { return listener_id_; } - - private: - EventDispatcher* dispatcher_; - size_t listener_id_; -}; - -/** - * Helper function to create an EventListenerGuard for automatic cleanup. - */ -template -EventListenerGuard AddScopedListener( - EventDispatcher& dispatcher, - std::function callback) { - size_t id = dispatcher.AddListener(std::move(callback)); - return EventListenerGuard(dispatcher, id); -} - -} // namespace nativeapi \ No newline at end of file diff --git a/src/event_system_example.cpp b/src/event_system_example.cpp deleted file mode 100644 index 3e96461..0000000 --- a/src/event_system_example.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include "event_system.h" -#include "common_events.h" -#include -#include -#include - -namespace nativeapi { - -/** - * Example demonstrating various ways to use the generic event system - */ - -// Example 1: Observer pattern implementation -class DisplayEventObserver : public TypedEventListener { - public: - void OnTypedEvent(const DisplayAddedEvent& event) override { - std::cout << "Observer: Display added at " - << std::chrono::duration_cast( - event.GetTimestamp().time_since_epoch()).count() - << "ms" << std::endl; - } -}; - -// Example 2: Multi-event observer -class KeyboardEventObserver : public EventListener { - public: - void OnEvent(const Event& event) override { - if (auto key_pressed = dynamic_cast(&event)) { - OnKeyPressed(*key_pressed); - } else if (auto key_released = dynamic_cast(&event)) { - OnKeyReleased(*key_released); - } - } - - private: - void OnKeyPressed(const KeyPressedEvent& event) { - std::cout << "Observer: Key pressed - " << event.GetKeycode() << std::endl; - } - - void OnKeyReleased(const KeyReleasedEvent& event) { - std::cout << "Observer: Key released - " << event.GetKeycode() << std::endl; - } -}; - -void RunEventSystemExample() { - std::cout << "=== Generic Event System Example ===" << std::endl; - - // Get the global event dispatcher - auto& dispatcher = GetGlobalEventDispatcher(); - - // Example 1: Register an observer - DisplayEventObserver display_observer; - auto display_listener_id = dispatcher.AddListener(&display_observer); - - // Example 2: Register callback functions - auto key_pressed_guard = AddScopedListener(dispatcher, - [](const KeyPressedEvent& event) { - std::cout << "Lambda: Key pressed - " << event.GetKeycode() << std::endl; - }); - - auto key_released_guard = AddScopedListener(dispatcher, - [](const KeyReleasedEvent& event) { - std::cout << "Lambda: Key released - " << event.GetKeycode() << std::endl; - }); - - // Example 3: Register multiple event handler - KeyboardEventObserver keyboard_observer; - auto key_pressed_id2 = dispatcher.AddListener(&keyboard_observer); - auto key_released_id2 = dispatcher.AddListener(&keyboard_observer); - - // Example 4: Register application events - auto app_started_guard = AddScopedListener(dispatcher, - [](const ApplicationStartedEvent& event) { - std::cout << "Application started!" << std::endl; - }); - - auto app_exiting_guard = AddScopedListener(dispatcher, - [](const ApplicationExitingEvent& event) { - std::cout << "Application exiting with code: " << event.GetExitCode() << std::endl; - }); - - std::cout << "Total listeners registered: " << dispatcher.GetTotalListenerCount() << std::endl; - std::cout << "KeyPressed listeners: " << dispatcher.GetListenerCount() << std::endl; - - // Start async processing - dispatcher.Start(); - - // Example 5: Dispatch some synchronous events - std::cout << "\n--- Synchronous Events ---" << std::endl; - - // Create a dummy display (this would normally come from the system) - Display dummy_display; // Assuming Display has a default constructor - dispatcher.DispatchSync(dummy_display); - - dispatcher.DispatchSync(65); // 'A' key - dispatcher.DispatchSync(65); - - dispatcher.DispatchSync(); - - // Example 6: Dispatch some asynchronous events - std::cout << "\n--- Asynchronous Events ---" << std::endl; - - dispatcher.DispatchAsync(66); // 'B' key - dispatcher.DispatchAsync(66); - - dispatcher.DispatchAsync(0); - - // Wait a bit for async events to process - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - - // Example 7: Remove specific listeners - dispatcher.RemoveListener(display_listener_id); - dispatcher.RemoveListener(key_pressed_id2); - dispatcher.RemoveListener(key_released_id2); - - std::cout << "\nAfter removing some listeners: " << dispatcher.GetTotalListenerCount() << std::endl; - - // Dispatch one more event to show remaining listeners - dispatcher.DispatchSync(67); // 'C' key - - // Stop async processing - dispatcher.Stop(); - - std::cout << "\n=== Example Complete ===" << std::endl; -} - -} // namespace nativeapi - -// If building as a standalone example -#ifdef EVENT_SYSTEM_EXAMPLE_MAIN -int main() { - nativeapi::RunEventSystemExample(); - return 0; -} -#endif \ No newline at end of file diff --git a/src/event_system_test.cpp b/src/event_system_test.cpp deleted file mode 100644 index c06428c..0000000 --- a/src/event_system_test.cpp +++ /dev/null @@ -1,157 +0,0 @@ -#include -#include -#include -#include -#include - -#include "../src/event_system.h" - -// Simple test events -class TestEvent : public nativeapi::TypedEvent { - public: - explicit TestEvent(int value) : value_(value) {} - int GetValue() const { return value_; } - private: - int value_; -}; - -class AnotherTestEvent : public nativeapi::TypedEvent { - public: - explicit AnotherTestEvent(const std::string& message) : message_(message) {} - const std::string& GetMessage() const { return message_; } - private: - std::string message_; -}; - -// Test observer -class TestObserver : public nativeapi::TypedEventListener { - public: - TestObserver() : event_count_(0) {} - - void OnTypedEvent(const TestEvent& event) override { - last_value_ = event.GetValue(); - event_count_++; - } - - int GetLastValue() const { return last_value_; } - int GetEventCount() const { return event_count_; } - - private: - int last_value_ = 0; - std::atomic event_count_; -}; - -int main() { - std::cout << "=== Event System Test ===" << std::endl; - - nativeapi::EventDispatcher dispatcher; - - // Test 1: Basic observer pattern - std::cout << "Test 1: Basic observer pattern" << std::endl; - TestObserver observer; - auto listener_id = dispatcher.AddListener(&observer); - - dispatcher.DispatchSync(42); - assert(observer.GetLastValue() == 42); - assert(observer.GetEventCount() == 1); - std::cout << "✓ Observer received event with value: " << observer.GetLastValue() << std::endl; - - // Test 2: Callback pattern - std::cout << "Test 2: Callback pattern" << std::endl; - std::atomic callback_called(false); - std::atomic callback_value(0); - - auto callback_id = dispatcher.AddListener( - [&](const TestEvent& event) { - callback_value = event.GetValue(); - callback_called = true; - }); - - dispatcher.DispatchSync(123); - assert(callback_called.load()); - assert(callback_value.load() == 123); - assert(observer.GetEventCount() == 2); // Observer should also get this event - std::cout << "✓ Callback received event with value: " << callback_value.load() << std::endl; - - // Test 3: Multiple event types - std::cout << "Test 3: Multiple event types" << std::endl; - std::atomic another_callback_called(false); - std::string received_message; - - auto another_callback_id = dispatcher.AddListener( - [&](const AnotherTestEvent& event) { - received_message = event.GetMessage(); - another_callback_called = true; - }); - - dispatcher.DispatchSync("Hello World"); - assert(another_callback_called.load()); - assert(received_message == "Hello World"); - std::cout << "✓ Another callback received message: " << received_message << std::endl; - - // Test 4: Async dispatch - std::cout << "Test 4: Asynchronous dispatch" << std::endl; - dispatcher.Start(); - - std::atomic async_callback_called(false); - auto async_callback_id = dispatcher.AddListener( - [&](const TestEvent& event) { - async_callback_called = true; - }); - - dispatcher.DispatchAsync(999); - - // Wait for async event to be processed - auto timeout = std::chrono::steady_clock::now() + std::chrono::seconds(1); - while (!async_callback_called.load() && std::chrono::steady_clock::now() < timeout) { - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - } - - assert(async_callback_called.load()); - std::cout << "✓ Async event processed successfully" << std::endl; - - // Test 5: Listener removal - std::cout << "Test 5: Listener removal" << std::endl; - int initial_count = observer.GetEventCount(); - - assert(dispatcher.RemoveListener(callback_id)); - dispatcher.DispatchSync(777); - - // Observer should get the event, but the removed callback should not - assert(observer.GetEventCount() == initial_count + 1); - std::cout << "✓ Listener removed successfully" << std::endl; - - // Test 6: Listener count - std::cout << "Test 6: Listener count" << std::endl; - size_t test_event_listeners = dispatcher.GetListenerCount(); - size_t total_listeners = dispatcher.GetTotalListenerCount(); - std::cout << "✓ TestEvent listeners: " << test_event_listeners << std::endl; - std::cout << "✓ Total listeners: " << total_listeners << std::endl; - - // Test 7: Scoped listener (RAII) - std::cout << "Test 7: Scoped listener (RAII)" << std::endl; - std::atomic scoped_callback_called(false); - { - auto scoped_guard = nativeapi::AddScopedListener(dispatcher, - [&](const TestEvent& event) { - scoped_callback_called = true; - }); - - dispatcher.DispatchSync(555); - assert(scoped_callback_called.load()); - std::cout << "✓ Scoped listener called" << std::endl; - } - // Scoped listener should be automatically removed here - - scoped_callback_called = false; - dispatcher.DispatchSync(666); - assert(!scoped_callback_called.load()); - std::cout << "✓ Scoped listener automatically removed" << std::endl; - - // Cleanup - dispatcher.Stop(); - dispatcher.RemoveAllListeners(); - - std::cout << "\n=== All Tests Passed! ===" << std::endl; - return 0; -} \ No newline at end of file diff --git a/src/simple_event_test.cpp b/src/simple_event_test.cpp deleted file mode 100644 index 5a661ca..0000000 --- a/src/simple_event_test.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include - -#include "event_system.h" - -// Simple test event -class SimpleEvent : public nativeapi::TypedEvent { - public: - explicit SimpleEvent(int value) : value_(value) {} - int GetValue() const { return value_; } - private: - int value_; -}; - -int main() { - std::cout << "=== Simple Event Test ===" << std::endl; - - nativeapi::EventDispatcher dispatcher; - - // Test 1: Observer pattern - class SimpleObserver : public nativeapi::TypedEventListener { - public: - SimpleObserver() : called_(false), value_(0) {} - - void OnTypedEvent(const SimpleEvent& event) override { - std::cout << "Observer called with value: " << event.GetValue() << std::endl; - value_ = event.GetValue(); - called_ = true; - } - - bool IsCalled() const { return called_; } - int GetValue() const { return value_; } - - private: - bool called_; - int value_; - }; - - SimpleObserver observer; - auto listener_id = dispatcher.AddListener(&observer); - std::cout << "Listener ID: " << listener_id << std::endl; - - SimpleEvent event(42); - std::cout << "Dispatching event..." << std::endl; - dispatcher.DispatchSync(event); - - std::cout << "Observer called: " << observer.IsCalled() << std::endl; - std::cout << "Observer value: " << observer.GetValue() << std::endl; - - assert(observer.IsCalled()); - assert(observer.GetValue() == 42); - - std::cout << "✓ Test passed!" << std::endl; - return 0; -} \ No newline at end of file

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