From e12f860f1bdc63d5f4835b568cb4023f7d72e15c Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Sun, 3 Aug 2014 12:36:02 +0300 Subject: [PATCH] Added native Cocoa back-end implementation --- src/cocoa/i_backend_cocoa.mm | 1744 ++++++++++++++++++++++++++++++++++ src/cocoa/i_joystick.cpp | 776 +++++++++++++++ src/cocoa/i_timer.cpp | 191 ++++ src/cocoa/zdoom-info.plist | 47 + src/cocoa/zdoom.icns | Bin 0 -> 196176 bytes src/cocoa/zdoom.xib | 874 +++++++++++++++++ 6 files changed, 3632 insertions(+) create mode 100644 src/cocoa/i_backend_cocoa.mm create mode 100644 src/cocoa/i_joystick.cpp create mode 100644 src/cocoa/i_timer.cpp create mode 100644 src/cocoa/zdoom-info.plist create mode 100644 src/cocoa/zdoom.icns create mode 100644 src/cocoa/zdoom.xib diff --git a/src/cocoa/i_backend_cocoa.mm b/src/cocoa/i_backend_cocoa.mm new file mode 100644 index 000000000..d4c353edd --- /dev/null +++ b/src/cocoa/i_backend_cocoa.mm @@ -0,0 +1,1744 @@ +/* + ** i_backend_cocoa.mm + ** + **--------------------------------------------------------------------------- + ** Copyright 2012-2014 Alexey Lysiuk + ** All rights reserved. + ** + ** Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions + ** are met: + ** + ** 1. Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** 2. Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in the + ** documentation and/or other materials provided with the distribution. + ** 3. The name of the author may not be used to endorse or promote products + ** derived from this software without specific prior written permission. + ** + ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **--------------------------------------------------------------------------- + ** + */ + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include + +// Avoid collision between DObject class and Objective-C +#define Class ObjectClass + +#include "basictypes.h" +#include "basicinlines.h" +#include "bitmap.h" +#include "c_console.h" +#include "c_dispatch.h" +#include "cmdlib.h" +#include "d_event.h" +#include "d_gui.h" +#include "dikeys.h" +#include "doomdef.h" +#include "doomstat.h" +#include "s_sound.h" +#include "textures.h" +#include "v_video.h" +#include "version.h" + +#undef Class + + +#define ZD_UNUSED(VARIABLE) ((void)(VARIABLE)) + + +// --------------------------------------------------------------------------- + + +#ifndef NSAppKitVersionNumber10_7 + +@interface NSView(HiDPIStubs) +- (NSPoint)convertPointToBacking:(NSPoint)aPoint; +- (NSSize)convertSizeToBacking:(NSSize)aSize; +- (NSSize)convertSizeFromBacking:(NSSize)aSize; + +- (void)setWantsBestResolutionOpenGLSurface:(BOOL)flag; +@end + +@interface NSScreen(HiDPIStubs) +- (NSRect)convertRectToBacking:(NSRect)aRect; +@end + +#endif // NSAppKitVersionNumber10_7 + + +// --------------------------------------------------------------------------- + + +CVAR(Bool, use_mouse, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CVAR(Bool, m_noprescale, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CVAR(Bool, m_filter, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) + +CUSTOM_CVAR(Int, mouse_capturemode, 1, CVAR_GLOBALCONFIG | CVAR_ARCHIVE) +{ + if (self < 0) + { + self = 0; + } + else if (self > 2) + { + self = 2; + } +} + +bool GUICapture; + + +extern int paused, chatmodeon; +extern constate_e ConsoleState; + +EXTERN_CVAR(Int, m_use_mouse); + +void I_ShutdownJoysticks(); + + +namespace +{ + +struct FrameBufferParameters +{ + float pixelScale; + + float shiftX; + float shiftY; + + float width; + float height; +}; + +FrameBufferParameters s_frameBufferParameters; + + +const int ARGC_MAX = 64; + +int s_argc; +char* s_argv[ARGC_MAX]; + +TArray s_argvStorage; + + +bool s_nativeMouse = true; + +// TODO: remove this magic! +size_t s_skipMouseMoves; + +NSCursor* s_cursor; + + +void CheckGUICapture() +{ + const bool wantCapture = (MENU_Off == menuactive) + ? (c_down == ConsoleState || c_falling == ConsoleState || chatmodeon) + : (menuactive == MENU_On || menuactive == MENU_OnNoPause); + + if (wantCapture != GUICapture) + { + GUICapture = wantCapture; + + ResetButtonStates(); + } +} + +void CenterCursor() +{ + NSWindow* window = [NSApp keyWindow]; + if (nil == window) + { + return; + } + + const NSRect displayRect = [[window screen] frame]; + const NSRect windowRect = [window frame]; + const CGPoint centerPoint = CGPointMake(NSMidX(windowRect), displayRect.size.height - NSMidY(windowRect)); + + CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); + + if (NULL != eventSource) + { + CGEventRef mouseMoveEvent = CGEventCreateMouseEvent(eventSource, + kCGEventMouseMoved, centerPoint, kCGMouseButtonLeft); + + if (NULL != mouseMoveEvent) + { + CGEventPost(kCGHIDEventTap, mouseMoveEvent); + CFRelease(mouseMoveEvent); + } + + CFRelease(eventSource); + } + + // TODO: remove this magic! + s_skipMouseMoves = 2; +} + + +bool IsInGame() +{ + switch (mouse_capturemode) + { + default: + case 0: + return gamestate == GS_LEVEL; + + case 1: + return gamestate == GS_LEVEL || gamestate == GS_INTERMISSION || gamestate == GS_FINALE; + + case 2: + return true; + } +} + +void SetNativeMouse(bool wantNative) +{ + if (wantNative != s_nativeMouse) + { + s_nativeMouse = wantNative; + + if (!wantNative) + { + CenterCursor(); + } + + CGAssociateMouseAndMouseCursorPosition(wantNative); + + if (wantNative) + { + [NSCursor unhide]; + } + else + { + [NSCursor hide]; + } + } +} + +void CheckNativeMouse() +{ + bool windowed = (NULL == screen) || !screen->IsFullscreen(); + bool wantNative; + + if (windowed) + { + if (![NSApp isActive] || !use_mouse) + { + wantNative = true; + } + else if (MENU_WaitKey == menuactive) + { + wantNative = false; + } + else + { + wantNative = (!m_use_mouse || MENU_WaitKey != menuactive) + && (!IsInGame() || GUICapture || paused || demoplayback); + } + } + else + { + // ungrab mouse when in the menu with mouse control on. + wantNative = m_use_mouse + && (MENU_On == menuactive || MENU_OnNoPause == menuactive); + } + + SetNativeMouse(wantNative); +} + +} // unnamed namespace + + +// from iokit_joystick.cpp +void I_ProcessJoysticks(); + + +void I_GetEvent() +{ + [[NSRunLoop mainRunLoop] limitDateForMode:NSDefaultRunLoopMode]; +} + +void I_StartTic() +{ + CheckGUICapture(); + CheckNativeMouse(); + + I_ProcessJoysticks(); + I_GetEvent(); +} + +void I_StartFrame() +{ + +} + + +void I_SetMouseCapture() +{ + +} + +void I_ReleaseMouseCapture() +{ + +} + + +// --------------------------------------------------------------------------- + + +namespace +{ + +const size_t KEY_COUNT = 128; + + +// See Carbon -> HIToolbox -> Events.h for kVK_ constants + +const uint8_t KEYCODE_TO_DIK[KEY_COUNT] = +{ + DIK_A, DIK_S, DIK_D, DIK_F, DIK_H, DIK_G, DIK_Z, DIK_X, // 0x00 - 0x07 + DIK_C, DIK_V, 0, DIK_B, DIK_Q, DIK_W, DIK_E, DIK_R, // 0x08 - 0x0F + DIK_Y, DIK_T, DIK_1, DIK_2, DIK_3, DIK_4, DIK_6, DIK_5, // 0x10 - 0x17 + DIK_EQUALS, DIK_9, DIK_7, DIK_MINUS, DIK_8, DIK_0, DIK_RBRACKET, DIK_O, // 0x18 - 0x1F + DIK_U, DIK_LBRACKET, DIK_I, DIK_P, DIK_RETURN, DIK_L, DIK_J, DIK_APOSTROPHE, // 0x20 - 0x27 + DIK_K, DIK_SEMICOLON, DIK_BACKSLASH, DIK_COMMA, DIK_SLASH, DIK_N, DIK_M, DIK_PERIOD, // 0x28 - 0x2F + DIK_TAB, DIK_SPACE, DIK_GRAVE, DIK_BACK, 0, DIK_ESCAPE, 0, DIK_LWIN, // 0x30 - 0x37 + DIK_LSHIFT, DIK_CAPITAL, DIK_LMENU, DIK_LCONTROL, DIK_RSHIFT, DIK_RMENU, DIK_RCONTROL, 0, // 0x38 - 0x3F + 0, DIK_DECIMAL, 0, DIK_MULTIPLY, 0, DIK_ADD, 0, 0, // 0x40 - 0x47 + DIK_VOLUMEUP, DIK_VOLUMEDOWN, DIK_MUTE, DIK_SLASH, DIK_NUMPADENTER, 0, DIK_SUBTRACT, 0, // 0x48 - 0x4F + 0, DIK_NUMPAD_EQUALS, DIK_NUMPAD0, DIK_NUMPAD1, DIK_NUMPAD2, DIK_NUMPAD3, DIK_NUMPAD4, DIK_NUMPAD5, // 0x50 - 0x57 + DIK_NUMPAD6, DIK_NUMPAD7, 0, DIK_NUMPAD8, DIK_NUMPAD9, 0, 0, 0, // 0x58 - 0x5F + DIK_F5, DIK_F6, DIK_F7, DIK_F3, DIK_F8, DIK_F9, 0, DIK_F11, // 0x60 - 0x67 + 0, DIK_F13, 0, DIK_F14, 0, DIK_F10, 0, DIK_F12, // 0x68 - 0x6F + 0, DIK_F15, 0, DIK_HOME, 0, DIK_DELETE, DIK_F4, DIK_END, // 0x70 - 0x77 + DIK_F2, 0, DIK_F1, DIK_LEFT, DIK_RIGHT, DIK_DOWN, DIK_UP, 0, // 0x78 - 0x7F +}; + +const uint8_t KEYCODE_TO_ASCII[KEY_COUNT] = +{ + 'a', 's', 'd', 'f', 'h', 'g', 'z', 'x', // 0x00 - 0x07 + 'c', 'v', 0, 'b', 'q', 'w', 'e', 'r', // 0x08 - 0x0F + 'y', 't', '1', '2', '3', '4', '6', '5', // 0x10 - 0x17 + '=', '9', '7', '-', '8', '0', ']', 'o', // 0x18 - 0x1F + 'u', '[', 'i', 'p', 13, 'l', 'j', '\'', // 0x20 - 0x27 + 'k', ';', '\\', ',', '/', 'n', 'm', '.', // 0x28 - 0x2F + 9, ' ', '`', 12, 0, 27, 0, 0, // 0x30 - 0x37 + 0, 0, 0, 0, 0, 0, 0, 0, // 0x38 - 0x3F + 0, 0, 0, 0, 0, 0, 0, 0, // 0x40 - 0x47 + 0, 0, 0, 0, 0, 0, 0, 0, // 0x48 - 0x4F + 0, 0, 0, 0, 0, 0, 0, 0, // 0x50 - 0x57 + 0, 0, 0, 0, 0, 0, 0, 0, // 0x58 - 0x5F + 0, 0, 0, 0, 0, 0, 0, 0, // 0x60 - 0x67 + 0, 0, 0, 0, 0, 0, 0, 0, // 0x68 - 0x6F + 0, 0, 0, 0, 0, 0, 0, 0, // 0x70 - 0x77 + 0, 0, 0, 0, 0, 0, 0, 0, // 0x78 - 0x7F +}; + + +uint8_t ModifierToDIK(const uint32_t modifier) +{ + switch (modifier) + { + case NSAlphaShiftKeyMask: return DIK_CAPITAL; + case NSShiftKeyMask: return DIK_LSHIFT; + case NSControlKeyMask: return DIK_LCONTROL; + case NSAlternateKeyMask: return DIK_LMENU; + case NSCommandKeyMask: return DIK_LWIN; + } + + return 0; +} + +SWORD ModifierFlagsToGUIKeyModifiers(NSEvent* theEvent) +{ + const NSUInteger modifiers([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask); + return ((modifiers & NSShiftKeyMask ) ? GKM_SHIFT : 0) + | ((modifiers & NSControlKeyMask ) ? GKM_CTRL : 0) + | ((modifiers & NSAlternateKeyMask) ? GKM_ALT : 0) + | ((modifiers & NSCommandKeyMask ) ? GKM_META : 0); +} + +bool ShouldGenerateGUICharEvent(NSEvent* theEvent) +{ + const NSUInteger modifiers([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask); + return !(modifiers & NSControlKeyMask) + && !(modifiers & NSAlternateKeyMask) + && !(modifiers & NSCommandKeyMask) + && !(modifiers & NSFunctionKeyMask); +} + +void ProcessKeyboardFlagsEvent(NSEvent* theEvent) +{ + static const uint32_t FLAGS_MASK = + NSDeviceIndependentModifierFlagsMask & ~NSNumericPadKeyMask; + + const uint32_t modifiers = [theEvent modifierFlags] & FLAGS_MASK; + static uint32_t oldModifiers = 0; + const uint32_t deltaModifiers = modifiers ^ oldModifiers; + + if (0 == deltaModifiers) + { + return; + } + + event_t event = {}; + + event.type = modifiers > oldModifiers ? EV_KeyDown : EV_KeyUp; + event.data1 = ModifierToDIK(deltaModifiers); + + oldModifiers = modifiers; + + // Caps Lock is a modifier key which generates one event per state change + // but not per actual key press or release. So treat any event as key down + // Also its event should be not be posted in menu and console + + if (DIK_CAPITAL == event.data1) + { + if (GUICapture) + { + return; + } + + event.type = EV_KeyDown; + } + + D_PostEvent(&event); +} + +NSStringEncoding GetEncodingForUnicodeCharacter(const unichar character) +{ + if (character >= L'\u0100' && character <= L'\u024F') + { + return NSWindowsCP1250StringEncoding; // Central and Eastern Europe + } + else if (character >= L'\u0370' && character <= L'\u03FF') + { + return NSWindowsCP1253StringEncoding; // Greek + } + else if (character >= L'\u0400' && character <= L'\u04FF') + { + return NSWindowsCP1251StringEncoding; // Cyrillic + } + + // TODO: add handling for other characters + // TODO: Turkish should use NSWindowsCP1254StringEncoding + + return NSWindowsCP1252StringEncoding; +} + +unsigned char GetCharacterFromNSEvent(NSEvent* theEvent) +{ + const NSString* unicodeCharacters = [theEvent characters]; + + if (0 == [unicodeCharacters length]) + { + return '\0'; + } + + const unichar unicodeCharacter = [unicodeCharacters characterAtIndex:0]; + const NSStringEncoding encoding = GetEncodingForUnicodeCharacter(unicodeCharacter); + + unsigned char character = '\0'; + + if (NSWindowsCP1252StringEncoding == encoding) + { + // TODO: make sure that the following is always correct + character = unicodeCharacter & 0xFF; + } + else + { + const NSData* const characters = + [[theEvent characters] dataUsingEncoding:encoding]; + + character = [characters length] > 0 + ? *static_cast([characters bytes]) + : '\0'; + } + + return character; +} + +void ProcessKeyboardEventInMenu(NSEvent* theEvent) +{ + event_t event = {}; + + event.type = EV_GUI_Event; + event.subtype = NSKeyDown == [theEvent type] ? EV_GUI_KeyDown : EV_GUI_KeyUp; + event.data2 = GetCharacterFromNSEvent(theEvent); + event.data3 = ModifierFlagsToGUIKeyModifiers(theEvent); + + if (EV_GUI_KeyDown == event.subtype && [theEvent isARepeat]) + { + event.subtype = EV_GUI_KeyRepeat; + } + + const unsigned short keyCode = [theEvent keyCode]; + + switch (keyCode) + { + case kVK_Return: event.data1 = GK_RETURN; break; + case kVK_PageUp: event.data1 = GK_PGUP; break; + case kVK_PageDown: event.data1 = GK_PGDN; break; + case kVK_End: event.data1 = GK_END; break; + case kVK_Home: event.data1 = GK_HOME; break; + case kVK_LeftArrow: event.data1 = GK_LEFT; break; + case kVK_RightArrow: event.data1 = GK_RIGHT; break; + case kVK_UpArrow: event.data1 = GK_UP; break; + case kVK_DownArrow: event.data1 = GK_DOWN; break; + case kVK_Delete: event.data1 = GK_BACKSPACE; break; + case kVK_ForwardDelete: event.data1 = GK_DEL; break; + case kVK_Escape: event.data1 = GK_ESCAPE; break; + case kVK_F1: event.data1 = GK_F1; break; + case kVK_F2: event.data1 = GK_F2; break; + case kVK_F3: event.data1 = GK_F3; break; + case kVK_F4: event.data1 = GK_F4; break; + case kVK_F5: event.data1 = GK_F5; break; + case kVK_F6: event.data1 = GK_F6; break; + case kVK_F7: event.data1 = GK_F7; break; + case kVK_F8: event.data1 = GK_F8; break; + case kVK_F9: event.data1 = GK_F9; break; + case kVK_F10: event.data1 = GK_F10; break; + case kVK_F11: event.data1 = GK_F11; break; + case kVK_F12: event.data1 = GK_F12; break; + default: + event.data1 = KEYCODE_TO_ASCII[keyCode]; + break; + } + + if (event.data1 < 128) + { + event.data1 = toupper(event.data1); + + D_PostEvent(&event); + } + + if (!iscntrl(event.data2) + && EV_GUI_KeyUp != event.subtype + && ShouldGenerateGUICharEvent(theEvent)) + { + event.subtype = EV_GUI_Char; + event.data1 = event.data2; + event.data2 = event.data3 & GKM_ALT; + + D_PostEvent(&event); + } +} + +void ProcessKeyboardEvent(NSEvent* theEvent) +{ + const unsigned short keyCode = [theEvent keyCode]; + if (keyCode >= KEY_COUNT) + { + assert(!"Unknown keycode"); + return; + } + + if (GUICapture) + { + ProcessKeyboardEventInMenu(theEvent); + } + else + { + event_t event = {}; + + event.type = NSKeyDown == [theEvent type] ? EV_KeyDown : EV_KeyUp; + event.data1 = KEYCODE_TO_DIK[ keyCode ]; + + if (0 != event.data1) + { + event.data2 = KEYCODE_TO_ASCII[ keyCode ]; + + D_PostEvent(&event); + } + } +} + + +bool IsHiDPISupported() +{ +#ifdef NSAppKitVersionNumber10_7 + return NSAppKitVersionNumber >= NSAppKitVersionNumber10_7; +#else // !NSAppKitVersionNumber10_7 + return false; +#endif // NSAppKitVersionNumber10_7 +} + +NSSize GetRealContentViewSize(const NSWindow* const window) +{ + const NSView* view = [window contentView]; + const NSSize frameSize = [view frame].size; + + // TODO: figure out why [NSView frame] returns different values in "fullscreen" and in window + // In "fullscreen" the result is multiplied by [NSScreen backingScaleFactor], but not in window + + return (IsHiDPISupported() && NSNormalWindowLevel == [window level]) + ? [view convertSizeToBacking:frameSize] + : frameSize; +} + + +void NSEventToGameMousePosition(NSEvent* inEvent, event_t* outEvent) +{ + const NSWindow* window = [inEvent window]; + const NSView* view = [window contentView]; + + const NSPoint screenPos = [NSEvent mouseLocation]; + const NSPoint windowPos = [window convertScreenToBase:screenPos]; + + const NSPoint viewPos = IsHiDPISupported() + ? [view convertPointToBacking:windowPos] + : [view convertPointFromBase:windowPos]; + + const CGFloat frameHeight = GetRealContentViewSize(window).height; + + const CGFloat posX = ( viewPos.x - s_frameBufferParameters.shiftX) / s_frameBufferParameters.pixelScale; + const CGFloat posY = (frameHeight - viewPos.y - s_frameBufferParameters.shiftY) / s_frameBufferParameters.pixelScale; + + outEvent->data1 = static_cast< int >(posX); + outEvent->data2 = static_cast< int >(posY); +} + +void ProcessMouseButtonEvent(NSEvent* theEvent) +{ + event_t event = {}; + + const NSEventType cocoaEventType = [theEvent type]; + + if (GUICapture) + { + event.type = EV_GUI_Event; + + switch (cocoaEventType) + { + case NSLeftMouseDown: event.subtype = EV_GUI_LButtonDown; break; + case NSRightMouseDown: event.subtype = EV_GUI_RButtonDown; break; + case NSOtherMouseDown: event.subtype = EV_GUI_MButtonDown; break; + case NSLeftMouseUp: event.subtype = EV_GUI_LButtonUp; break; + case NSRightMouseUp: event.subtype = EV_GUI_RButtonUp; break; + case NSOtherMouseUp: event.subtype = EV_GUI_MButtonUp; break; + } + + NSEventToGameMousePosition(theEvent, &event); + + D_PostEvent(&event); + } + else + { + switch (cocoaEventType) + { + case NSLeftMouseDown: + case NSRightMouseDown: + case NSOtherMouseDown: + event.type = EV_KeyDown; + break; + + case NSLeftMouseUp: + case NSRightMouseUp: + case NSOtherMouseUp: + event.type = EV_KeyUp; + break; + } + + event.data1 = std::min(KEY_MOUSE1 + [theEvent buttonNumber], NSInteger(KEY_MOUSE8)); + + D_PostEvent(&event); + } +} + + +void ProcessMouseMoveInMenu(NSEvent* theEvent) +{ + event_t event = {}; + + event.type = EV_GUI_Event; + event.subtype = EV_GUI_MouseMove; + + NSEventToGameMousePosition(theEvent, &event); + + D_PostEvent(&event); +} + +void ProcessMouseMoveInGame(NSEvent* theEvent) +{ + if (!use_mouse) + { + return; + } + + // TODO: remove this magic! + + if (s_skipMouseMoves > 0) + { + --s_skipMouseMoves; + return; + } + + int x([theEvent deltaX]); + int y(-[theEvent deltaY]); + + if (0 == x && 0 == y) + { + return; + } + + if (!m_noprescale) + { + x *= 3; + y *= 2; + } + + event_t event = {}; + + static int lastX = 0, lastY = 0; + + if (m_filter) + { + event.x = (x + lastX) / 2; + event.y = (y + lastY) / 2; + } + else + { + event.x = x; + event.y = y; + } + + lastX = x; + lastY = y; + + if (0 != event.x | 0 != event.y) + { + event.type = EV_Mouse; + + D_PostEvent(&event); + } +} + +void ProcessMouseMoveEvent(NSEvent* theEvent) +{ + if (GUICapture) + { + ProcessMouseMoveInMenu(theEvent); + } + else + { + ProcessMouseMoveInGame(theEvent); + } +} + + +void ProcessMouseWheelEvent(NSEvent* theEvent) +{ + const CGFloat delta = [theEvent deltaY]; + const bool isZeroDelta = fabs(delta) < 1.0E-5; + + if (isZeroDelta && GUICapture) + { + return; + } + + event_t event = {}; + + if (GUICapture) + { + event.type = EV_GUI_Event; + event.subtype = delta > 0.0f ? EV_GUI_WheelUp : EV_GUI_WheelDown; + event.data3 = delta; + event.data3 = ModifierFlagsToGUIKeyModifiers(theEvent); + } + else + { + event.type = isZeroDelta ? EV_KeyUp : EV_KeyDown; + event.data1 = delta > 0.0f ? KEY_MWHEELUP : KEY_MWHEELDOWN; + } + + D_PostEvent(&event); +} + +} // unnamed namespace + + +// --------------------------------------------------------------------------- + + +@interface FullscreenWindow : NSWindow +{ + +} + +- (bool)canBecomeKeyWindow; + +- (void)close; + +@end + + +@implementation FullscreenWindow + +- (bool)canBecomeKeyWindow +{ + return true; +} + + +- (void)close +{ + [super close]; + + I_ShutdownJoysticks(); + + [NSApp terminate:self]; +} + +@end + + +// --------------------------------------------------------------------------- + + +@interface FullscreenView : NSOpenGLView +{ + +} + +- (void)resetCursorRects; + +@end + + +@implementation FullscreenView + +- (void)resetCursorRects +{ + [super resetCursorRects]; + [self addCursorRect: [self bounds] + cursor: s_cursor]; +} + +@end + + +// --------------------------------------------------------------------------- + + +@interface ApplicationDelegate : NSResponder +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 + +#endif +{ +@private + FullscreenWindow* m_window; + + bool m_openGLInitialized; + int m_multisample; +} + +- (id)init; +- (void)dealloc; + +- (void)keyDown:(NSEvent*)theEvent; +- (void)keyUp:(NSEvent*)theEvent; + +- (void)applicationDidBecomeActive:(NSNotification*)aNotification; +- (void)applicationWillResignActive:(NSNotification*)aNotification; + +- (void)applicationDidFinishLaunching:(NSNotification*)aNotification; + +- (void)applicationWillTerminate:(NSNotification*)aNotification; + +- (BOOL)application:(NSApplication*)theApplication openFile:(NSString*)filename; + +- (int)multisample; +- (void)setMultisample:(int)multisample; + +- (void)initializeOpenGL; +- (void)changeVideoResolution:(bool)fullscreen width:(int)width height:(int)height; + +- (void)processEvents:(NSTimer*)timer; + +- (void)invalidateCursorRects; + +- (void)setMainWindowVisible:(bool)visible; + +@end + + +static ApplicationDelegate* s_applicationDelegate; + + +@implementation ApplicationDelegate + +- (id)init +{ + self = [super init]; + + m_openGLInitialized = false; + m_multisample = 0; + + return self; +} + +- (void)dealloc +{ + [m_window release]; + + [super dealloc]; +} + + +- (void)keyDown:(NSEvent*)theEvent +{ + // Empty but present to avoid playing of 'beep' alert sound + + ZD_UNUSED(theEvent); +} + +- (void)keyUp:(NSEvent*)theEvent +{ + // Empty but present to avoid playing of 'beep' alert sound + + ZD_UNUSED(theEvent); +} + + +- (void)applicationDidBecomeActive:(NSNotification*)aNotification +{ + ZD_UNUSED(aNotification); + + S_SetSoundPaused(1); +} + +- (void)applicationWillResignActive:(NSNotification*)aNotification +{ + ZD_UNUSED(aNotification); + + S_SetSoundPaused(0); +} + + +- (void)applicationDidFinishLaunching:(NSNotification*)aNotification +{ + // When starting from command line with real executable path, e.g. ZDoom.app/Contents/MacOS/ZDoom + // application remains deactivated for an unknown reason. + // The following call resolves this issue + [NSApp activateIgnoringOtherApps:YES]; + + // Setup timer for custom event loop + + NSTimer* timer = [NSTimer timerWithTimeInterval:0 + target:self + selector:@selector(processEvents:) + userInfo:nil + repeats:YES]; + [[NSRunLoop mainRunLoop] addTimer:timer + forMode:NSDefaultRunLoopMode]; + + exit(SDL_main(s_argc, s_argv)); +} + + +- (BOOL)application:(NSApplication*)theApplication openFile:(NSString*)filename +{ + ZD_UNUSED(theApplication); + + if (0 == [filename length] || s_argc + 2 >= ARGC_MAX) + { + return FALSE; + } + + // Some parameters from command line are passed to this function + // These parameters need to be skipped to avoid duplication + // Note: SDL has different approach to fix this issue, see the same method in SDLMain.m + + const char* const charFileName = [filename UTF8String]; + + for (int i = 0; i < s_argc; ++i) + { + if (0 == strcmp(s_argv[i], charFileName)) + { + return FALSE; + } + } + + s_argvStorage.Push("-file"); + s_argv[s_argc++] = s_argvStorage.Last().LockBuffer(); + + s_argvStorage.Push([filename UTF8String]); + s_argv[s_argc++] = s_argvStorage.Last().LockBuffer(); + + return TRUE; +} + + +- (void)applicationWillTerminate:(NSNotification*)aNotification +{ + ZD_UNUSED(aNotification); + + // Hide window as nothing will be rendered at this point + [m_window orderOut:nil]; +} + + +- (int)multisample +{ + return m_multisample; +} + +- (void)setMultisample:(int)multisample +{ + m_multisample = multisample; +} + + +- (void)initializeOpenGL +{ + if (m_openGLInitialized) + { + return; + } + + // Create window + + m_window = [[FullscreenWindow alloc] initWithContentRect:NSMakeRect(0, 0, 640, 480) + styleMask:NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask + backing:NSBackingStoreBuffered + defer:NO]; + [m_window setOpaque:YES]; + [m_window makeFirstResponder:self]; + [m_window setAcceptsMouseMovedEvents:YES]; + + // Create OpenGL context and view + + NSOpenGLPixelFormatAttribute attributes[16]; + size_t i = 0; + + attributes[i++] = NSOpenGLPFADoubleBuffer; + attributes[i++] = NSOpenGLPFAColorSize; + attributes[i++] = 32; + attributes[i++] = NSOpenGLPFADepthSize; + attributes[i++] = 24; + attributes[i++] = NSOpenGLPFAStencilSize; + attributes[i++] = 8; + + if (m_multisample) + { + attributes[i++] = NSOpenGLPFAMultisample; + attributes[i++] = NSOpenGLPFASampleBuffers; + attributes[i++] = 1; + attributes[i++] = NSOpenGLPFASamples; + attributes[i++] = m_multisample; + } + + attributes[i] = 0; + + NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; + + const NSRect contentRect = [m_window contentRectForFrameRect:[m_window frame]]; + NSOpenGLView* glView = [[FullscreenView alloc] initWithFrame:contentRect + pixelFormat:pixelFormat]; + [[glView openGLContext] makeCurrentContext]; + + if (IsHiDPISupported()) + { + [glView setWantsBestResolutionOpenGLSurface:YES]; + } + + [m_window setContentView:glView]; + + m_openGLInitialized = true; +} + +- (void)changeVideoResolution:(bool)fullscreen width:(int)width height:(int)height +{ + [self initializeOpenGL]; + + CGLContextObj context = CGLGetCurrentContext(); + NSView* view = [m_window contentView]; + + if (fullscreen) + { + NSScreen* screen = [m_window screen]; + const NSRect screenFrame = [screen frame]; + const NSRect displayRect = IsHiDPISupported() + ? [screen convertRectToBacking:screenFrame] + : screenFrame; + + const float displayWidth = displayRect.size.width; + const float displayHeight = displayRect.size.height; + + const float pixelScaleFactorX = displayWidth / static_cast< float >(width ); + const float pixelScaleFactorY = displayHeight / static_cast< float >(height); + + s_frameBufferParameters.pixelScale = std::min(pixelScaleFactorX, pixelScaleFactorY); + + s_frameBufferParameters.width = width * s_frameBufferParameters.pixelScale; + s_frameBufferParameters.height = height * s_frameBufferParameters.pixelScale; + + s_frameBufferParameters.shiftX = (displayWidth - s_frameBufferParameters.width ) / 2.0f; + s_frameBufferParameters.shiftY = (displayHeight - s_frameBufferParameters.height) / 2.0f; + + [m_window setLevel:NSMainMenuWindowLevel + 1]; + [m_window setStyleMask:NSBorderlessWindowMask]; + [m_window setHidesOnDeactivate:YES]; + [m_window setFrame:displayRect display:YES]; + [m_window setFrameOrigin:NSMakePoint(0.0f, 0.0f)]; + } + else + { + s_frameBufferParameters.pixelScale = 1.0f; + + s_frameBufferParameters.width = static_cast< float >(width ); + s_frameBufferParameters.height = static_cast< float >(height); + + s_frameBufferParameters.shiftX = 0.0f; + s_frameBufferParameters.shiftY = 0.0f; + + const NSSize windowPixelSize = NSMakeSize(width, height); + const NSSize windowSize = IsHiDPISupported() + ? [view convertSizeFromBacking:windowPixelSize] + : windowPixelSize; + + [m_window setLevel:NSNormalWindowLevel]; + [m_window setStyleMask:NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask]; + [m_window setHidesOnDeactivate:NO]; + [m_window setContentSize:windowSize]; + [m_window center]; + } + + const NSSize viewSize = GetRealContentViewSize(m_window); + + glViewport(0, 0, viewSize.width, viewSize.height); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClear(GL_COLOR_BUFFER_BIT); + + CGLFlushDrawable(context); + + static NSString* const TITLE_STRING = + [NSString stringWithFormat:@"%s %s", GAMESIG, GetVersionString()]; + [m_window setTitle:TITLE_STRING]; + + if (![m_window isKeyWindow]) + { + [m_window makeKeyAndOrderFront:nil]; + } +} + + +- (void)processEvents:(NSTimer*)timer +{ + ZD_UNUSED(timer); + + while (true) + { + NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask + untilDate:[NSDate dateWithTimeIntervalSinceNow:0] + inMode:NSDefaultRunLoopMode + dequeue:YES]; + if (nil == event) + { + break; + } + + const NSEventType eventType = [event type]; + + switch (eventType) + { + case NSMouseMoved: + ProcessMouseMoveEvent(event); + break; + + case NSLeftMouseDown: + case NSLeftMouseUp: + case NSRightMouseDown: + case NSRightMouseUp: + case NSOtherMouseDown: + case NSOtherMouseUp: + ProcessMouseButtonEvent(event); + break; + + case NSLeftMouseDragged: + case NSRightMouseDragged: + case NSOtherMouseDragged: + ProcessMouseButtonEvent(event); + ProcessMouseMoveEvent(event); + break; + + case NSScrollWheel: + ProcessMouseWheelEvent(event); + break; + + case NSKeyDown: + case NSKeyUp: + ProcessKeyboardEvent(event); + break; + + case NSFlagsChanged: + ProcessKeyboardFlagsEvent(event); + break; + } + + [NSApp sendEvent:event]; + } + + [NSApp updateWindows]; +} + + +- (void)invalidateCursorRects +{ + [m_window invalidateCursorRectsForView:[m_window contentView]]; +} + + +- (void)setMainWindowVisible:(bool)visible +{ + if (visible) + { + [m_window orderFront:nil]; + } + else + { + [m_window orderOut:nil]; + } +} + +@end + + +// --------------------------------------------------------------------------- + + +void I_SetMainWindowVisible(bool visible) +{ + [s_applicationDelegate setMainWindowVisible:visible]; + + SetNativeMouse(!visible); +} + + +// --------------------------------------------------------------------------- + + +bool I_SetCursor(FTexture* cursorpic) +{ + if (NULL == cursorpic || FTexture::TEX_Null == cursorpic->UseType) + { + s_cursor = [NSCursor arrowCursor]; + } + else + { + // Create bitmap image representation + + const NSInteger imageWidth = cursorpic->GetWidth(); + const NSInteger imageHeight = cursorpic->GetHeight(); + const NSInteger imagePitch = imageWidth * 4; + + NSBitmapImageRep* bitmapImageRep = [NSBitmapImageRep alloc]; + [bitmapImageRep initWithBitmapDataPlanes:NULL + pixelsWide:imageWidth + pixelsHigh:imageHeight + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSDeviceRGBColorSpace + bytesPerRow:imagePitch + bitsPerPixel:0]; + + // Load bitmap data to representation + + BYTE* buffer = [bitmapImageRep bitmapData]; + FBitmap bitmap(buffer, imagePitch, imageWidth, imageHeight); + cursorpic->CopyTrueColorPixels(&bitmap, 0, 0); + + // Swap red and blue components in each pixel + + for (size_t i = 0; i < size_t(imageWidth * imageHeight); ++i) + { + const size_t offset = i * 4; + + const BYTE temp = buffer[offset ]; + buffer[offset ] = buffer[offset + 2]; + buffer[offset + 2] = temp; + } + + // Create image from representation and set it as cursor + + NSData* imageData = [bitmapImageRep representationUsingType:NSPNGFileType + properties:nil]; + NSImage* cursorImage = [[NSImage alloc] initWithData:imageData]; + + s_cursor = [[NSCursor alloc] initWithImage:cursorImage + hotSpot:NSMakePoint(0.0f, 0.0f)]; + } + + [s_applicationDelegate invalidateCursorRects]; + + return true; +} + + +// --------------------------------------------------------------------------- + + +extern "C" +{ + +struct SDL_mutex +{ + pthread_mutex_t mutex; +}; + + +SDL_mutex* SDL_CreateMutex() +{ + pthread_mutexattr_t attributes; + pthread_mutexattr_init(&attributes); + pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_RECURSIVE); + + SDL_mutex* result = new SDL_mutex; + + if (0 != pthread_mutex_init(&result->mutex, &attributes)) + { + delete result; + result = NULL; + } + + pthread_mutexattr_destroy(&attributes); + + return result; +} + +int SDL_mutexP(SDL_mutex* mutex) +{ + return pthread_mutex_lock(&mutex->mutex); +} + +int SDL_mutexV(SDL_mutex* mutex) +{ + return pthread_mutex_unlock(&mutex->mutex); +} + +void SDL_DestroyMutex(SDL_mutex* mutex) +{ + pthread_mutex_destroy(&mutex->mutex); + delete mutex; +} + + +static timeval s_startTicks; + +uint32_t SDL_GetTicks() +{ + timeval now; + gettimeofday(&now, NULL); + + const uint32_t ticks = + (now.tv_sec - s_startTicks.tv_sec ) * 1000 + + (now.tv_usec - s_startTicks.tv_usec) / 1000; + + return ticks; +} + + +int SDL_Init(Uint32 flags) +{ + ZD_UNUSED(flags); + + return 0; +} + +void SDL_Quit() +{ + if (NULL != s_applicationDelegate) + { + [NSApp setDelegate:nil]; + [NSApp deactivate]; + + [s_applicationDelegate release]; + s_applicationDelegate = NULL; + } +} + + +char* SDL_GetError() +{ + static char empty[] = {0}; + return empty; +} + + +char* SDL_VideoDriverName(char* namebuf, int maxlen) +{ + return strncpy(namebuf, "Native OpenGL", maxlen); +} + +const SDL_VideoInfo* SDL_GetVideoInfo() +{ + // NOTE: Only required fields are assigned + + static SDL_PixelFormat pixelFormat; + memset(&pixelFormat, 0, sizeof(pixelFormat)); + + pixelFormat.BitsPerPixel = 32; + + static SDL_VideoInfo videoInfo; + memset(&videoInfo, 0, sizeof(videoInfo)); + + const NSRect displayRect = [[NSScreen mainScreen] frame]; + + videoInfo.current_w = displayRect.size.width; + videoInfo.current_h = displayRect.size.height; + videoInfo.vfmt = &pixelFormat; + + return &videoInfo; +} + +SDL_Rect** SDL_ListModes(SDL_PixelFormat* format, Uint32 flags) +{ + ZD_UNUSED(format); + ZD_UNUSED(flags); + + static std::vector< SDL_Rect* > resolutions; + + if (resolutions.empty()) + { +#define DEFINE_RESOLUTION(WIDTH, HEIGHT) \ + static SDL_Rect resolution_##WIDTH##_##HEIGHT = { 0, 0, WIDTH, HEIGHT }; \ + resolutions.push_back(&resolution_##WIDTH##_##HEIGHT); + + DEFINE_RESOLUTION(640, 480); + DEFINE_RESOLUTION(720, 480); + DEFINE_RESOLUTION(800, 600); + DEFINE_RESOLUTION(1024, 640); + DEFINE_RESOLUTION(1024, 768); + DEFINE_RESOLUTION(1152, 720); + DEFINE_RESOLUTION(1280, 720); + DEFINE_RESOLUTION(1280, 800); + DEFINE_RESOLUTION(1280, 960); + DEFINE_RESOLUTION(1280, 1024); + DEFINE_RESOLUTION(1366, 768); + DEFINE_RESOLUTION(1400, 1050); + DEFINE_RESOLUTION(1440, 900); + DEFINE_RESOLUTION(1600, 900); + DEFINE_RESOLUTION(1600, 1200); + DEFINE_RESOLUTION(1680, 1050); + DEFINE_RESOLUTION(1920, 1080); + DEFINE_RESOLUTION(1920, 1200); + DEFINE_RESOLUTION(2048, 1536); + DEFINE_RESOLUTION(2560, 1440); + DEFINE_RESOLUTION(2560, 1600); + DEFINE_RESOLUTION(2880, 1800); + +#undef DEFINE_RESOLUTION + + resolutions.push_back(NULL); + } + + return &resolutions[0]; +} + + +//static GLAuxilium::Texture2D* s_softwareTexture; +static GLuint s_frameBufferTexture = 0; + +static const Uint16 BYTES_PER_PIXEL = 4; + +static SDL_PixelFormat* GetPixelFormat() +{ + static SDL_PixelFormat result; + + result.palette = NULL; + result.BitsPerPixel = BYTES_PER_PIXEL * 8; + result.BytesPerPixel = BYTES_PER_PIXEL; + result.Rloss = 0; + result.Gloss = 0; + result.Bloss = 0; + result.Aloss = 8; + result.Rshift = 8; + result.Gshift = 16; + result.Bshift = 24; + result.Ashift = 0; + result.Rmask = 0x000000FF; + result.Gmask = 0x0000FF00; + result.Bmask = 0x00FF0000; + result.Amask = 0xFF000000; + result.colorkey = 0; + result.alpha = 0xFF; + + return &result; +} + + +SDL_Surface* SDL_SetVideoMode(int width, int height, int, Uint32 flags) +{ + [s_applicationDelegate changeVideoResolution:(SDL_FULLSCREEN & flags) width:width height:height]; + + static SDL_Surface result; + + const bool isSoftwareRenderer = !(SDL_OPENGL & flags); + + if (isSoftwareRenderer) + { + if (NULL != result.pixels) + { + free(result.pixels); + } + + if (0 != s_frameBufferTexture) + { + glBindTexture(GL_TEXTURE_2D, 0); + glDeleteTextures(1, &s_frameBufferTexture); + s_frameBufferTexture = 0; + } + } + + result.flags = flags; + result.format = GetPixelFormat(); + result.w = width; + result.h = height; + result.pitch = width * BYTES_PER_PIXEL; + result.pixels = isSoftwareRenderer ? malloc(width * height * BYTES_PER_PIXEL) : NULL; + result.refcount = 1; + + result.clip_rect.x = 0; + result.clip_rect.y = 0; + result.clip_rect.w = width; + result.clip_rect.h = height; + + return &result; +} + + +void SDL_WM_SetCaption(const char* title, const char* icon) +{ + ZD_UNUSED(title); + ZD_UNUSED(icon); + + // Window title is set in SDL_SetVideoMode() +} + +static void ResetSoftwareViewport() +{ + // For an unknown reason the following call to glClear() is needed + // to avoid drawing of garbage in fullscreen mode + // when game video resolution's aspect ratio is different from display one + + GLint viewport[2]; + glGetIntegerv(GL_MAX_VIEWPORT_DIMS, viewport); + + glViewport(0, 0, viewport[0], viewport[1]); + glClear(GL_COLOR_BUFFER_BIT); + + glViewport(s_frameBufferParameters.shiftX, s_frameBufferParameters.shiftY, + s_frameBufferParameters.width, s_frameBufferParameters.height); +} + +int SDL_WM_ToggleFullScreen(SDL_Surface* surface) +{ + if (surface->flags & SDL_FULLSCREEN) + { + surface->flags &= ~SDL_FULLSCREEN; + } + else + { + surface->flags |= SDL_FULLSCREEN; + } + + [s_applicationDelegate changeVideoResolution:(SDL_FULLSCREEN & surface->flags) + width:surface->w + height:surface->h]; + ResetSoftwareViewport(); + + return 1; +} + + +void SDL_GL_SwapBuffers() +{ + [[NSOpenGLContext currentContext] flushBuffer]; +} + +int SDL_LockSurface(SDL_Surface* surface) +{ + ZD_UNUSED(surface); + + return 0; +} + +void SDL_UnlockSurface(SDL_Surface* surface) +{ + ZD_UNUSED(surface); +} + +int SDL_BlitSurface(SDL_Surface* src, SDL_Rect* srcrect, SDL_Surface* dst, SDL_Rect* dstrect) +{ + ZD_UNUSED(src); + ZD_UNUSED(srcrect); + ZD_UNUSED(dst); + ZD_UNUSED(dstrect); + + return 0; +} + + +static void SetupSoftwareRendering(SDL_Surface* screen) +{ + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0.0, screen->w, screen->h, 0.0, -1.0, 1.0); + + ResetSoftwareViewport(); + + glEnable(GL_TEXTURE_2D); + + glGenTextures(1, &s_frameBufferTexture); + glBindTexture(GL_TEXTURE_2D, s_frameBufferTexture); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); +} + +int SDL_Flip(SDL_Surface* screen) +{ + assert(NULL != screen); + + if (0 == s_frameBufferTexture) + { + SetupSoftwareRendering(screen); + } + + const int width = screen->w; + const int height = screen->h; + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, + width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, screen->pixels); + + glBegin(GL_QUADS); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glTexCoord2f(0.0f, 0.0f); + glVertex2f(0.0f, 0.0f); + glTexCoord2f(1.0f, 0.0f); + glVertex2f(width, 0.0f); + glTexCoord2f(1.0f, 1.0f); + glVertex2f(width, height); + glTexCoord2f(0.0f, 1.0f); + glVertex2f(0.0f, height); + glEnd(); + + glFlush(); + + SDL_GL_SwapBuffers(); + + return 0; +} + +int SDL_SetPalette(SDL_Surface* surface, int flags, SDL_Color* colors, int firstcolor, int ncolors) +{ + ZD_UNUSED(surface); + ZD_UNUSED(flags); + ZD_UNUSED(colors); + ZD_UNUSED(firstcolor); + ZD_UNUSED(ncolors); + + return 0; +} + +} // extern "C" + +#ifdef main +#undef main +#endif // main + +static void CheckOSVersion() +{ + static const char* const PARAMETER_NAME = "kern.osrelease"; + + size_t size = 0; + + if (-1 == sysctlbyname(PARAMETER_NAME, NULL, &size, NULL, 0)) + { + return; + } + + char* version = static_cast(alloca(size)); + + if (-1 == sysctlbyname(PARAMETER_NAME, version, &size, NULL, 0)) + { + return; + } + + if (strcmp(version, "10.0") < 0) + { + CFOptionFlags responseFlags; + CFUserNotificationDisplayAlert(0, kCFUserNotificationStopAlertLevel, NULL, NULL, NULL, + CFSTR("Unsupported version of OS X"), CFSTR("You need OS X 10.6 or higher running on Intel platform in order to play."), + NULL, NULL, NULL, &responseFlags); + + exit(EXIT_FAILURE); + } +} + +int main(int argc, char** argv) +{ + CheckOSVersion(); + + gettimeofday(&s_startTicks, NULL); + + for (int i = 0; i <= argc; ++i) + { + const char* const argument = argv[i]; + + if (NULL == argument || '\0' == argument[0]) + { + continue; + } + + s_argvStorage.Push(argument); + s_argv[s_argc++] = s_argvStorage.Last().LockBuffer(); + } + + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + + [NSApplication sharedApplication]; + [NSBundle loadNibNamed:@"zdoom" owner:NSApp]; + + s_applicationDelegate = [ApplicationDelegate new]; + [NSApp setDelegate:s_applicationDelegate]; + + [NSApp run]; + + [pool release]; + + return EXIT_SUCCESS; +} diff --git a/src/cocoa/i_joystick.cpp b/src/cocoa/i_joystick.cpp new file mode 100644 index 000000000..add1b1bd7 --- /dev/null +++ b/src/cocoa/i_joystick.cpp @@ -0,0 +1,776 @@ +/* + ** i_joystick.cpp + ** + **--------------------------------------------------------------------------- + ** Copyright 2012-2014 Alexey Lysiuk + ** All rights reserved. + ** + ** Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions + ** are met: + ** + ** 1. Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** 2. Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in the + ** documentation and/or other materials provided with the distribution. + ** 3. The name of the author may not be used to endorse or promote products + ** derived from this software without specific prior written permission. + ** + ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **--------------------------------------------------------------------------- + ** + */ + +#include "m_joy.h" + +#include "HID_Utilities_External.h" + +#include "d_event.h" +#include "doomdef.h" +#include "templates.h" + + +namespace +{ + +FString ToFString( const CFStringRef string ) +{ + if ( NULL == string ) + { + return FString(); + } + + const CFIndex stringLength = CFStringGetLength( string ); + + if ( 0 == stringLength ) + { + return FString(); + } + + const size_t bufferSize = CFStringGetMaximumSizeForEncoding( stringLength, kCFStringEncodingUTF8 ) + 1; + + char buffer[ bufferSize ]; + memset( buffer, 0, bufferSize ); + + CFStringGetCString( string, buffer, bufferSize, kCFStringEncodingUTF8 ); + + return FString( buffer ); +} + + +class IOKitJoystick : public IJoystickConfig +{ +public: + explicit IOKitJoystick( IOHIDDeviceRef device ); + virtual ~IOKitJoystick(); + + virtual FString GetName(); + virtual float GetSensitivity(); + virtual void SetSensitivity( float scale ); + + virtual int GetNumAxes(); + virtual float GetAxisDeadZone( int axis ); + virtual EJoyAxis GetAxisMap( int axis ); + virtual const char* GetAxisName( int axis ); + virtual float GetAxisScale( int axis ); + + virtual void SetAxisDeadZone( int axis, float deadZone ); + virtual void SetAxisMap( int axis, EJoyAxis gameAxis ); + virtual void SetAxisScale( int axis, float scale ); + + virtual bool IsSensitivityDefault(); + virtual bool IsAxisDeadZoneDefault( int axis ); + virtual bool IsAxisMapDefault( int axis ); + virtual bool IsAxisScaleDefault( int axis ); + + virtual void SetDefaultConfig(); + virtual FString GetIdentifier(); + + void AddAxes( float axes[ NUM_JOYAXIS ] ) const; + + void Update(); + +private: + IOHIDDeviceRef m_device; + + float m_sensitivity; + + struct AxisInfo + { + char name[ 64 ]; + + float value; + + float deadZone; + float defaultDeadZone; + float sensitivity; + float defaultSensitivity; + + EJoyAxis gameAxis; + EJoyAxis defaultGameAxis; + + IOHIDElementRef element; + }; + + TArray< AxisInfo > m_axes; + + TArray< IOHIDElementRef > m_buttons; + TArray< IOHIDElementRef > m_POVs; + + + static const float DEFAULT_DEADZONE; + static const float DEFAULT_SENSITIVITY; + + + bool ProcessAxis ( const IOHIDValueRef value ); + bool ProcessButton( const IOHIDValueRef value ); + bool ProcessPOV ( const IOHIDValueRef value ); + +}; + + +const float IOKitJoystick::DEFAULT_DEADZONE = 0.25f; +const float IOKitJoystick::DEFAULT_SENSITIVITY = 1.0f; + + +IOKitJoystick::IOKitJoystick( IOHIDDeviceRef device ) +: m_device( device ) +, m_sensitivity( DEFAULT_SENSITIVITY ) +{ + IOHIDElementRef element = HIDGetFirstDeviceElement( device, kHIDElementTypeInput ); + + while ( NULL != element ) + { + const uint32_t usagePage = IOHIDElementGetUsagePage( element ); + + if ( kHIDPage_GenericDesktop == usagePage ) + { + const uint32_t usage = IOHIDElementGetUsage( element ); + + if ( kHIDUsage_GD_Slider == usage + || kHIDUsage_GD_X == usage || kHIDUsage_GD_Y == usage || kHIDUsage_GD_Z == usage + || kHIDUsage_GD_Rx == usage || kHIDUsage_GD_Ry == usage || kHIDUsage_GD_Rz == usage ) + { + AxisInfo axis; + memset( &axis, 0, sizeof( axis ) ); + + if ( const CFStringRef name = IOHIDElementGetName( element ) ) + { + CFStringGetCString( name, axis.name, sizeof( axis.name ) - 1, kCFStringEncodingUTF8 ); + } + else + { + snprintf( axis.name, sizeof( axis.name ), "Axis %i", m_axes.Size() + 1 ); + } + + axis.element = element; + + m_axes.Push( axis ); + + IOHIDElement_SetCalibrationMin( element, -1 ); + IOHIDElement_SetCalibrationMax( element, 1 ); + + HIDQueueElement( m_device, element ); + } + else if ( kHIDUsage_GD_Hatswitch == usage && m_POVs.Size() < 4 ) + { + m_POVs.Push( element ); + + HIDQueueElement( m_device, element ); + } + } + else if ( kHIDPage_Button == usagePage ) + { + m_buttons.Push( element ); + + HIDQueueElement( m_device, element ); + } + + element = HIDGetNextDeviceElement( element, kHIDElementTypeInput ); + } + + SetDefaultConfig(); +} + +IOKitJoystick::~IOKitJoystick() +{ + M_SaveJoystickConfig( this ); +} + + +FString IOKitJoystick::GetName() +{ + FString result; + + result += ToFString( IOHIDDevice_GetManufacturer( m_device ) ); + result += " "; + result += ToFString( IOHIDDevice_GetProduct( m_device ) ); + + return result; +} + + +float IOKitJoystick::GetSensitivity() +{ + return m_sensitivity; +} + +void IOKitJoystick::SetSensitivity( float scale ) +{ + m_sensitivity = scale; +} + + +int IOKitJoystick::GetNumAxes() +{ + return static_cast< int >( m_axes.Size() ); +} + +#define IS_AXIS_VALID ( static_cast< unsigned int >( axis ) < m_axes.Size() ) + +float IOKitJoystick::GetAxisDeadZone( int axis ) +{ + return IS_AXIS_VALID ? m_axes[ axis ].deadZone : 0.0f; +} + +EJoyAxis IOKitJoystick::GetAxisMap( int axis ) +{ + return IS_AXIS_VALID ? m_axes[ axis ].gameAxis : JOYAXIS_None; +} + +const char* IOKitJoystick::GetAxisName( int axis ) +{ + return IS_AXIS_VALID ? m_axes[ axis ].name : "Invalid"; +} + +float IOKitJoystick::GetAxisScale( int axis ) +{ + return IS_AXIS_VALID ? m_axes[ axis ].sensitivity : 0.0f; +} + +void IOKitJoystick::SetAxisDeadZone( int axis, float deadZone ) +{ + if ( IS_AXIS_VALID ) + { + m_axes[ axis ].deadZone = clamp( deadZone, 0.0f, 1.0f ); + } +} + +void IOKitJoystick::SetAxisMap( int axis, EJoyAxis gameAxis ) +{ + if ( IS_AXIS_VALID ) + { + m_axes[ axis ].gameAxis = ( gameAxis > JOYAXIS_None && gameAxis < NUM_JOYAXIS ) + ? gameAxis + : JOYAXIS_None; + } +} + +void IOKitJoystick::SetAxisScale( int axis, float scale ) +{ + if ( IS_AXIS_VALID ) + { + m_axes[ axis ].sensitivity = scale; + } +} + + +bool IOKitJoystick::IsSensitivityDefault() +{ + return DEFAULT_SENSITIVITY == m_sensitivity; +} + +bool IOKitJoystick::IsAxisDeadZoneDefault( int axis ) +{ + return IS_AXIS_VALID + ? ( m_axes[ axis ].deadZone == m_axes[ axis ].defaultDeadZone ) + : true; +} + +bool IOKitJoystick::IsAxisMapDefault( int axis ) +{ + return IS_AXIS_VALID + ? ( m_axes[ axis ].gameAxis == m_axes[ axis ].defaultGameAxis ) + : true; +} + +bool IOKitJoystick::IsAxisScaleDefault( int axis ) +{ + return IS_AXIS_VALID + ? ( m_axes[ axis ].sensitivity == m_axes[ axis ].defaultSensitivity ) + : true; +} + +#undef IS_AXIS_VALID + +void IOKitJoystick::SetDefaultConfig() +{ + m_sensitivity = DEFAULT_SENSITIVITY; + + const size_t axisCount = m_axes.Size(); + + for ( size_t i = 0; i < axisCount; ++i ) + { + m_axes[i].deadZone = DEFAULT_DEADZONE; + m_axes[i].sensitivity = DEFAULT_SENSITIVITY; + m_axes[i].gameAxis = JOYAXIS_None; + } + + // Two axes? Horizontal is yaw and vertical is forward. + + if ( 2 == axisCount) + { + m_axes[0].gameAxis = JOYAXIS_Yaw; + m_axes[1].gameAxis = JOYAXIS_Forward; + } + + // Three axes? First two are movement, third is yaw. + + else if ( axisCount >= 3 ) + { + m_axes[0].gameAxis = JOYAXIS_Side; + m_axes[1].gameAxis = JOYAXIS_Forward; + m_axes[2].gameAxis = JOYAXIS_Yaw; + + // Four axes? First two are movement, last two are looking around. + + if ( axisCount >= 4 ) + { + m_axes[3].gameAxis = JOYAXIS_Pitch; +// ??? m_axes[3].sensitivity = 0.75f; + + // Five axes? Use the fifth one for moving up and down. + + if ( axisCount >= 5 ) + { + m_axes[4].gameAxis = JOYAXIS_Up; + } + } + } + + // If there is only one axis, then we make no assumptions about how + // the user might want to use it. + + // Preserve defaults for config saving. + + for ( size_t i = 0; i < axisCount; ++i ) + { + m_axes[i].defaultDeadZone = m_axes[i].deadZone; + m_axes[i].defaultSensitivity = m_axes[i].sensitivity; + m_axes[i].defaultGameAxis = m_axes[i].gameAxis; + } +} + + +FString IOKitJoystick::GetIdentifier() +{ + char identifier[ 32 ] = {0}; + + snprintf( identifier, sizeof( identifier ), "VID_%04lx_PID_%04lx", + IOHIDDevice_GetVendorID( m_device ), IOHIDDevice_GetProductID( m_device ) ); + + return FString( identifier ); +} + + +void IOKitJoystick::AddAxes( float axes[ NUM_JOYAXIS ] ) const +{ + for ( size_t i = 0, count = m_axes.Size(); i < count; ++i ) + { + const EJoyAxis axis = m_axes[i].gameAxis; + + if ( JOYAXIS_None == axis ) + { + continue; + } + + axes[ axis ] -= m_axes[i].value; + } +} + + +void IOKitJoystick::Update() +{ + IOHIDValueRef value = NULL; + + while ( HIDGetEvent( m_device, &value ) && NULL != value ) + { + ProcessAxis( value ) || ProcessButton( value ) || ProcessPOV( value ); + + CFRelease( value ); + } +} + + +bool IOKitJoystick::ProcessAxis( const IOHIDValueRef value ) +{ + const IOHIDElementRef element = IOHIDValueGetElement( value ); + + if ( NULL == element ) + { + return false; + } + + for ( size_t i = 0, count = m_axes.Size(); i < count; ++i ) + { + if ( element != m_axes[i].element ) + { + continue; + } + + AxisInfo& axis = m_axes[i]; + + const double scaledValue = IOHIDValueGetScaledValue( value, kIOHIDValueScaleTypeCalibrated ); + const double filteredValue = Joy_RemoveDeadZone( scaledValue, axis.deadZone, NULL ); + + axis.value = static_cast< float >( filteredValue * m_sensitivity * axis.sensitivity ); + + return true; + } + + return false; +} + +bool IOKitJoystick::ProcessButton( const IOHIDValueRef value ) +{ + const IOHIDElementRef element = IOHIDValueGetElement( value ); + + if ( NULL == element ) + { + return false; + } + + for ( size_t i = 0, count = m_buttons.Size(); i < count; ++i ) + { + if ( element != m_buttons[i] ) + { + continue; + } + + const int newButton = IOHIDValueGetIntegerValue( value ) & 1; + const int oldButton = ~newButton; + + Joy_GenerateButtonEvents( oldButton, newButton, 1, + static_cast< int >( KEY_FIRSTJOYBUTTON + i ) ); + + return true; + } + + return false; +} + +bool IOKitJoystick::ProcessPOV( const IOHIDValueRef value ) +{ + const IOHIDElementRef element = IOHIDValueGetElement( value ); + + if ( NULL == element ) + { + return false; + } + + for ( size_t i = 0, count = m_POVs.Size(); i < count; ++i ) + { + if ( element != m_POVs[i] ) + { + continue; + } + + const CFIndex direction = IOHIDValueGetIntegerValue( value ); + + // Default values is for Up/North + int oldButtons = 0; + int newButtons = 1; + int numButtons = 1; + int baseButton = KEY_JOYPOV1_UP; + + switch ( direction ) + { + case 0: // N + break; + + case 1: // NE + newButtons = 3; + numButtons = 2; + break; + + case 2: // E + baseButton = KEY_JOYPOV1_RIGHT; + break; + + case 3: // SE + newButtons = 3; + numButtons = 2; + baseButton = KEY_JOYPOV1_RIGHT; + break; + + case 4: // S + baseButton = KEY_JOYPOV1_DOWN; + break; + + case 5: // SW + newButtons = 3; + numButtons = 2; + baseButton = KEY_JOYPOV1_DOWN; + break; + + case 6: // W + baseButton = KEY_JOYPOV1_LEFT; + break; + + case 7: // NW + newButtons = 9; // UP and LEFT + numButtons = 4; + break; + + default: + // release all four directions + oldButtons = 15; + newButtons = 0; + numButtons = 4; + break; + } + + Joy_GenerateButtonEvents( oldButtons, newButtons, numButtons, + static_cast< int >( baseButton + i * 4 ) ); + } + + return false; +} + + +// --------------------------------------------------------------------------- + + +class IOKitJoystickManager +{ +public: + IOKitJoystickManager(); + ~IOKitJoystickManager(); + + void GetJoysticks( TArray< IJoystickConfig* >& joysticks ) const; + + void AddAxes( float axes[ NUM_JOYAXIS ] ) const; + + // Updates axes/buttons states + void Update(); + + // Rebuilds device list + void Rescan(); + +private: + TArray< IOKitJoystick* > m_joysticks; + + static void OnDeviceChanged( void* context, IOReturn result, void* sender, IOHIDDeviceRef device ); + + void ReleaseJoysticks(); + + void EnableCallbacks(); + void DisableCallbacks(); + +}; + + +IOKitJoystickManager::IOKitJoystickManager() +{ + Rescan(); +} + +IOKitJoystickManager::~IOKitJoystickManager() +{ + ReleaseJoysticks(); + DisableCallbacks(); + + HIDReleaseDeviceList(); +} + + +void IOKitJoystickManager::GetJoysticks( TArray< IJoystickConfig* >& joysticks ) const +{ + const size_t joystickCount = m_joysticks.Size(); + + joysticks.Resize( joystickCount ); + + for ( size_t i = 0; i < joystickCount; ++i ) + { + M_LoadJoystickConfig( m_joysticks[i] ); + + joysticks[i] = m_joysticks[i]; + } +} + +void IOKitJoystickManager::AddAxes( float axes[ NUM_JOYAXIS ] ) const +{ + for ( size_t i = 0, count = m_joysticks.Size(); i < count; ++i ) + { + m_joysticks[i]->AddAxes( axes ); + } +} + + +void IOKitJoystickManager::Update() +{ + for ( size_t i = 0, count = m_joysticks.Size(); i < count; ++i ) + { + m_joysticks[i]->Update(); + } +} + + +void IOKitJoystickManager::Rescan() +{ + ReleaseJoysticks(); + DisableCallbacks(); + + const int usageCount = 2; + + const UInt32 usagePages[ usageCount ] = + { + kHIDPage_GenericDesktop, + kHIDPage_GenericDesktop + }; + + const UInt32 usages[ usageCount ] = + { + kHIDUsage_GD_Joystick, + kHIDUsage_GD_GamePad + }; + + if ( HIDUpdateDeviceList( usagePages, usages, usageCount ) ) + { + IOHIDDeviceRef device = HIDGetFirstDevice(); + + while ( NULL != device ) + { + IOKitJoystick* joystick = new IOKitJoystick( device ); + m_joysticks.Push( joystick ); + + device = HIDGetNextDevice( device ); + } + } + else + { + Printf( "IOKitJoystickManager: Failed to build gamepad/joystick device list.\n" ); + } + + EnableCallbacks(); +} + + +void IOKitJoystickManager::OnDeviceChanged( void* context, IOReturn result, void* sender, IOHIDDeviceRef device ) +{ + event_t event; + + memset( &event, 0, sizeof( event ) ); + event.type = EV_DeviceChange; + + D_PostEvent( &event ); +} + + +void IOKitJoystickManager::ReleaseJoysticks() +{ + for ( size_t i = 0, count = m_joysticks.Size(); i < count; ++i ) + { + delete m_joysticks[i]; + } + + m_joysticks.Clear(); +} + + +void IOKitJoystickManager::EnableCallbacks() +{ + if ( NULL == gIOHIDManagerRef ) + { + return; + } + + IOHIDManagerRegisterDeviceMatchingCallback( gIOHIDManagerRef, OnDeviceChanged, this ); + IOHIDManagerRegisterDeviceRemovalCallback ( gIOHIDManagerRef, OnDeviceChanged, this ); + IOHIDManagerScheduleWithRunLoop( gIOHIDManagerRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode ); +} + +void IOKitJoystickManager::DisableCallbacks() +{ + if ( NULL == gIOHIDManagerRef ) + { + return; + } + + IOHIDManagerUnscheduleFromRunLoop( gIOHIDManagerRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode ); + IOHIDManagerRegisterDeviceMatchingCallback( gIOHIDManagerRef, NULL, NULL ); + IOHIDManagerRegisterDeviceRemovalCallback ( gIOHIDManagerRef, NULL, NULL ); +} + + +IOKitJoystickManager* s_joystickManager; + + +} // unnamed namespace + + +// --------------------------------------------------------------------------- + + +void I_StartupJoysticks() +{ + s_joystickManager = new IOKitJoystickManager; +} + +void I_ShutdownJoysticks() +{ + delete s_joystickManager; +} + +void I_GetJoysticks( TArray< IJoystickConfig* >& sticks ) +{ + if ( NULL != s_joystickManager ) + { + s_joystickManager->GetJoysticks( sticks ); + } +} + +void I_GetAxes( float axes[ NUM_JOYAXIS ] ) +{ + for ( size_t i = 0; i < NUM_JOYAXIS; ++i ) + { + axes[i] = 0.0f; + } + + if ( use_joystick && NULL != s_joystickManager ) + { + s_joystickManager->AddAxes( axes ); + } +} + +IJoystickConfig* I_UpdateDeviceList() +{ + if ( use_joystick && NULL != s_joystickManager ) + { + s_joystickManager->Rescan(); + } + + return NULL; +} + + +// --------------------------------------------------------------------------- + + +void I_ProcessJoysticks() +{ + if ( use_joystick && NULL != s_joystickManager ) + { + s_joystickManager->Update(); + } +} diff --git a/src/cocoa/i_timer.cpp b/src/cocoa/i_timer.cpp new file mode 100644 index 000000000..29d3f8865 --- /dev/null +++ b/src/cocoa/i_timer.cpp @@ -0,0 +1,191 @@ + +#include +#include +#include + +#include + +#include "basictypes.h" +#include "basicinlines.h" +#include "doomdef.h" +#include "i_system.h" +#include "templates.h" + + +unsigned int I_MSTime() +{ + return SDL_GetTicks(); +} + +unsigned int I_FPSTime() +{ + return SDL_GetTicks(); +} + + +bool g_isTicFrozen; + + +namespace +{ + +timespec GetNextTickTime() +{ + static const long MILLISECONDS_IN_SECOND = 1000; + static const long MICROSECONDS_IN_SECOND = 1000 * MILLISECONDS_IN_SECOND; + static const long NANOSECONDS_IN_SECOND = 1000 * MICROSECONDS_IN_SECOND; + + static timespec ts = {}; + + if (__builtin_expect((0 == ts.tv_sec), 0)) + { + timeval tv; + gettimeofday(&tv, NULL); + + ts.tv_sec = tv.tv_sec; + ts.tv_nsec = (tv.tv_usec + MICROSECONDS_IN_SECOND / TICRATE) * MILLISECONDS_IN_SECOND; + } + else + { + ts.tv_nsec += (MICROSECONDS_IN_SECOND / TICRATE) * MILLISECONDS_IN_SECOND; + } + + if (ts.tv_nsec >= NANOSECONDS_IN_SECOND) + { + ts.tv_sec++; + ts.tv_nsec -= NANOSECONDS_IN_SECOND; + } + + return ts; +} + + +pthread_cond_t s_timerEvent; +pthread_mutex_t s_timerMutex; +pthread_t s_timerThread; + +bool s_timerInitialized; +bool s_timerExitRequested; + +uint32_t s_ticStart; +uint32_t s_ticNext; + +uint32_t s_timerStart; +uint32_t s_timerNext; + +int s_tics; + + +void* TimerThreadFunc(void*) +{ + assert(s_timerInitialized); + assert(!s_timerExitRequested); + + while (true) + { + if (s_timerExitRequested) + { + break; + } + + const timespec timeToNextTick = GetNextTickTime(); + + pthread_mutex_lock(&s_timerMutex); + pthread_cond_timedwait(&s_timerEvent, &s_timerMutex, &timeToNextTick); + + if (!g_isTicFrozen) + { + __sync_add_and_fetch(&s_tics, 1); + } + + s_timerStart = SDL_GetTicks(); + s_timerNext = Scale(Scale(s_timerStart, TICRATE, 1000) + 1, 1000, TICRATE); + + pthread_cond_broadcast(&s_timerEvent); + pthread_mutex_unlock(&s_timerMutex); + } + + return NULL; +} + +int GetTimeThreaded(bool saveMS) +{ + if (saveMS) + { + s_ticStart = s_timerStart; + s_ticNext = s_timerNext; + } + + return s_tics; +} + +int WaitForTicThreaded(int prevTic) +{ + assert(!g_isTicFrozen); + + while (s_tics <= prevTic) + { + pthread_mutex_lock(&s_timerMutex); + pthread_cond_wait(&s_timerEvent, &s_timerMutex); + pthread_mutex_unlock(&s_timerMutex); + } + + return s_tics; +} + +void FreezeTimeThreaded(bool frozen) +{ + g_isTicFrozen = frozen; +} + +} // unnamed namespace + + +fixed_t I_GetTimeFrac(uint32* ms) +{ + const uint32_t now = SDL_GetTicks(); + + if (NULL != ms) + { + *ms = s_ticNext; + } + + const uint32_t step = s_ticNext - s_ticStart; + + return 0 == step + ? FRACUNIT + : clamp( (now - s_ticStart) * FRACUNIT / step, 0, FRACUNIT); +} + + +void I_InitTimer () +{ + assert(!s_timerInitialized); + s_timerInitialized = true; + + pthread_cond_init (&s_timerEvent, NULL); + pthread_mutex_init(&s_timerMutex, NULL); + + pthread_create(&s_timerThread, NULL, TimerThreadFunc, NULL); + + I_GetTime = GetTimeThreaded; + I_WaitForTic = WaitForTicThreaded; + I_FreezeTime = FreezeTimeThreaded; +} + +void I_ShutdownTimer () +{ + if (!s_timerInitialized) + { + // This might happen if Cancel button was pressed + // in the IWAD selector window + return; + } + + s_timerExitRequested = true; + + pthread_join(s_timerThread, NULL); + + pthread_mutex_destroy(&s_timerMutex); + pthread_cond_destroy (&s_timerEvent); +} diff --git a/src/cocoa/zdoom-info.plist b/src/cocoa/zdoom-info.plist new file mode 100644 index 000000000..8371b0555 --- /dev/null +++ b/src/cocoa/zdoom-info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + zdoom.icns + CFBundleIdentifier + org.zdoom.zdoom + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ZDoom + CFBundlePackageType + APPL + CFBundleShortVersionString + Version 2.8.0 + CFBundleSignature + ???? + LSApplicationCategoryType + public.app-category.action-games + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + CFBundleDocumentTypes + + + CFBundleTypeName + Doom Resource File + CFBundleTypeRole + Viewer + CFBundleTypeExtensions + + wad + pk3 + zip + pk7 + 7z + + + + NSPrincipalClass + NSApplication + + diff --git a/src/cocoa/zdoom.icns b/src/cocoa/zdoom.icns new file mode 100644 index 0000000000000000000000000000000000000000..decb4c5ab4054a1ec0a67990d88f8dd89bc982d9 GIT binary patch literal 196176 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

}H=*^zpE$L?6y<<;n-s>}Wt%_rw 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�pG)$e1cGaNmA`$z82_HgTV*HdT$ov9n^zmP@%*Tr)hIe3Q*Wde4H+ z6KO9FPWsYb^>MqZ!D?owi?;Ow)8@TWp53#rLZIvSytWx{&z+cg!i7__KJB~Lxf$$7 zRs=|dPF$$b{YR`%$gRm={hj$ zf5a@Muhuym=KG~M?L9R;JI`Ir|4E2v#LAr?x|6S8$+{>|v1F!TkpH)rI-hH{S^o0jk!`?Ha|F9iVLz=Dz2?*vcIZups?fA z?Iv}(@_pt{cAK|vH*Sw-b@>y0GV8gi?t?Q*PES=PMH%SU?zq!t_dHZ~Q%t>lso>W` z_D8}UzNyv!7kX*8Ao2U3cloP#f7ZNkj?}a*cF~0hl;Bn&H?%kQU zzUXf=cYD80q4LjURiPPoltt3n90M-B_M84gKIi*_6B-|l!fq>vUNC#NNaIbVSAtO~ zSLV|nde@uY+^T-Fep^di56h0VWm9^XAL*-SMD}={{Bhfmoq7Qv*w-I^!ArwcC_=lK&@k2`J63uZavt(?8Ba? zn^`Y!Y&su%f7ewFRilN`+LQlUszzS_X#72?OzXABe9MbJIyiLaTwCq)H`=auPl~*Y zQV-juH_Lt|H`<>6s<-n|ik9Za!)1ylLd(?4=LxM~+p3bZZUQg6LU7IGh$HON7QBv% zxb^4L!3nK?g)J|S6;|5(s#h!g{=FgV{(}su>Ny+#@qLRj+ciP#a;)~LH|n3+`sWp# zt(Twf_ig?YtD}F4y5}YTvaxZysF12<`s7LRt5p|%eq8rg%sj<-0@IgkE8qS+r<}ZM z!CNn}^DBNZiJAKbEv$dN)+T7n3B~e;-RJF2Je7KOXReX@+3bF;LpcsF)7Z_XNvX%o zIQ(|&*&61BGA;^oO)KrM&*STugdI6%2t*oGZWmdbmD^r^arU2A&ikhBO!#s3-zzbX ztH-^RAE%kLnsFYP&(NM}%ILuUXlE&>qu&IhFHBks3#LBaboRdFisUPYnFVbX|m@3n|_sNUz@^e>j$U(YyBCt8V?uOo%kRyrSM4ky%lTi53iYeY~J}9 zeR*Y!oF2&*PP=sLQ~xYzZV~;fYa8>4QTjXS?oOpvPAAeWJmK z8siGNGK=J+?`9Oq#~$CQsHJmdL(XoU=^qcvu8!N1EFifwzbA9?6Pu17?<*ZMIFBvQ z`U0Xj3+#objlB&+tyj_d}EuJ&}ySkYusn9{}RB* zwz22rfpzyJzORgEc=_pLjl%DHOazTg4l~9L6q4ql)p7h+CaLe-Z zbvEHs6QYE|FF%&vKU zA?EIiPb;_EvOQ5@IaBpW&GB}_hs}#_Ul2O|X=UDzhe7MdnHKFg=(HW{;38xb_ zX4whtWUyUyKiY${=T7b0OO7G>b_AObK$R9=Al1d z^Yo**d%<6o_;#9YTp*w|ndesDnn^WT(O0|rmU!`dvUuz>4~f0!>Nn-L0c-uU#1}1E zAKEYep5e+=enUs1`<3CEc>k_%2J*I(q+Ik`RQ_}S&CV!w{iF8Ga$d_#Gt=|AKepO= zO^eC2=HZ&O(#_AyxB5ov(L?1|3uD8oA4WK>{8PT5VxG2)Kt;5e#j-}hV(VJfe}AgZ zFZ(`U`Rd)~Cv%qO^oU)wT|YfuXIb#~>mT;_b$!eC-uv{aU$It);G9Vb-&O37eJwrc zceg@%rLfpD)8CFaS6CLP<(@Bn-LpvecKC@&&C@1m73X6ZG9o2 zzA*I6-koiCZm3&--EPTkJv~o%A$zE}gzVNQD}1AWjE%AjW8)oNk~*$#mJeo%7mYA=SR?egu4i?W?&F2EUHkWZI1%+dGg;v6<%WJG zYyEG$Iz5i;UpWsnRU08~(jqq8+={z3ct6O6k&=1}3sK$(@^xj;bVt4zt8^_keI#8pULpW zj`vbVrnYq(e#{U!R{x9fQEH&{WVxa%=03|8cOCP&dMr%MQs`{o+pBK*A9o#Dz_dMV z30v$L&%_YLB!>IYlr>gm^I&iHT9c70mZ(g(9dZm_=Gv$`g}ctQm^*U3F(P)_44#cNq4XIdh*aPbJw$3E2mWP+yg1?T z?YWP)6{&nvyx02I`wD~HQT?ofw$zyPUtYT=#O!9UoT9S0=Z)}=UJC(hxr-&|ExN>B zizZyyyY3*rkHq#ZlQ|V_UQ2j|yj#QnNMVn_hKXNiWQMa zSSNTgDR8}-pj4{6#q`hyiCaHU2W?<<+F8`yoY3547k8SWy329N$;Z2-oKNg^Wlpo_ zWArncxhF@}afx!?3Sp;s6Y~Y7lUICQ!1M7)oaJYg^9n~c3(GxS8FylTz}@b=o6n_8 zxt4B{ymYmr&O%kEICa?VACC7tb*gYok z3j}w)d=+H1?8fY*@GA|c1J++Uu$fh3;a>1zIr4zf;Wak}u z7M|etF6>ER&7yR!zqcZvvjtsyFn@BR(y^mg%nFNV^q32#gfLlOsJ!FyPhQ3M__2E5 zZ5a>xHET}TIQy*qqvw^Z^}KJ_&EVS?{<{WzJ?3roc5ckwsp^Vc>#Y^7BNv$kuDO#K zwC!Th`9lhNr}FAu-=-gL{Vfu!9wfsyJ7(4AiF40Lm27P+)fP633!9V1$HF=_eeu+J zZ`VzHV)<_?BX_ru{;XU>1?|aow}UgM2Ze4B$XS&vJt=8cjM>&1*CQnE>|>wmBF{EA zU2j&%h6QdCPb#coMqgX`y;-wT6|kh_G_(%t18Q@qxIC>ul<@`He>3V164C7 za-P1Xy`tj%_KXijD!cnwKG*KL{>S?Ef9H+SZ!dMfeHF)Ew{CxXTKr)blb_#mzm~53 z&-O_9iS+NPxBsNwp8v?I|M2efzI!L?+veQQcl%IdANoJ>#{CZ$a%)3lzm~?{&)cy0 ziTv-XCI6(_9{(|k|4}aapFO1hu(N%;LxAkFqWjwy8Z$+F_M7C*AS-cY2j`7zZ);+`2_`lkZ`U z$3NHZtealVxW`9SKa4T!{L3vFKTQMbtj}NXSuC}8!5zODca;?Rj(p#vwRf$^k(D>Y z3t4^~o>gVwc5UOH^Xqa--4iBmj_XO)Y!Wh_@kHeYvr(qS%A(3u7wRkX8CTy5xs=>h zRN4LT!DgS!OHG%=Z+8k7Uc2vp1K+!w4|RHj+8N{-k6rIAGJ0pQ>Emyui)YdvOuXCX zHUH`pz9g<)J-3r)?%lHeUc#CLKK6)fk=*BZhj54IpL_Rcuc7=Qar;?6OVM*@M zFx6>A4L1Y7UC8fLrjP6|S9-nYOHw^nutRgL)QA5Lm$RO9x}Eki`Qewj*+})I?ZxQ1 zQw=9Xn+iCZy0%UzTEwZ%Xiz<6O3{KIMFX|ztr7P=d`?e@oN-;RN=9(H!{fv|yOhHi zey;Xh)4a}(qnhQf)Hmj=KeE;{=&h?^UYbWO3U1%Dn|JVJtSJ(;t zTW7cQ$h9zDaB@ARc>0vynynmjPKRkr`P45h2+Ub?+NE-WjPYGz4&}Bhp^-csYVWM` zdJM#Vdfay1Qe(o@J}K=>lkv*WoSIctyUwpNUjH`Jgz&%};U7zPovGahAB`nhCdg^YU6f zGu}j0a9s4XWBV+8wRYLE<0YD!ACp$a{JfYu^XNt11MfQuHyKqf^1uF(|8sq&==F=4 zwncYNxh$0wf9QYl^3l3C%i8)FtqKdzURJ1_Eu>+YTH)|-yPw^HohSUf4w!#@I{nQ7 z`TJ%zJ4N3q@4fvy`q~_Y1!nJAJe-p%uIhF_X=#}@{{Y|VxNA+9R^`{v2%eA{aDwf8 zSII#m3GE-VLkbn*#O6*fD!=W!)@l|f$4rSz5mU`&PbN=rj0*bcRQ+CR+f2Qqy@6+r zPx(5N^P_pFpU^3}rZ*oKi}<8Por;Xr_guqX*ygrRq-e@woAtA7&q*BWFDreLs3hO_BWgi+v4obGRv;_w{$<5 zV)x_)`<&kq( zw`F^8>gK(6PmTQ?m|t=%U{0KV>fM6Ho3-laT;lK+*cYdo71*GEqxVFOVj0(iI!TFl zO6J=WN8KwDT&p!bbnSt!e)Ga5GhHvAVYc2Re7M?MX1+w(f=6-}|0{aDsZH4aKcZ7W z@@cl9UdkH#hA9ytj9v#cLzdlfU(#~VhUY@8VYz`POBc`o;I}=Kr@9-dTVHhbEL6U+ zPB*T~R{YJI*zI9cuT46>af54-DiO6hrquUn(V% zrebBcX=?pHvt^6#u9&v=!o`2QEAIK46<>M3{Nji1wq<7Fn@mEEmiDIT|9ZMAaenhp zPIqUWs5h1eXNIYse|v0hxR~=v?u!p^AHR0@$@k?9UoQQdCLEBQxKMnr{4&iVEo<*j zvNbbvBrdkBp0b;IrIVN2#sfH&%xHZZwknz-75LqnnkjvWofB#FN>&MY+yZ zTYQ-!qo?m{clmXtLp@dYkK5+8>S+#fipMvL-7Cmy6H2PQa&hsjWjghlD?e%IoNL&| z>nL|TC}hFj{Rbnqm3=i8a+Kfx@3yb=6xPGiF8dpI72htI?-!+TZA+BOvn1p{V(D=7;HPrmzdu@Ya4+Ns8-!;U}DXre?0Y z*1Ku)LdTuI_lBP3Ue@2ry~^`ei%!<=S}Db9UUswBy=og~eUo<*m#x=1ot<5go?HK+ z*S)3Ebe}_vrg{DSsQ#1FuHN{&^ov6MX7_}sbH3+K>R6PB1^R+8xy%T)>E3!T2@`NK#JZv*3oSI{K!lF0mm^agk9j&(BoZpqgJni;{ zzIpk@CFhuR3G;IMn4enu#9`)9Aod`ll5TY2RvQ=saHeMf!?+*EMSQrUU) z;G6otEO$G-8ouXSx~5H(I_fh)?#V<4rk~%%7~X8xy>g68Qsb}MU8R8Q;>z|(3>!Uv zJS*f6o&V6I>)v|z(&^gDuD18(+yf*zS}`KR!0*6W=K_tz}$ zS-I8wd#&2fZGC>3N44Hh>bLfgyXK_xc2Q>0vKiCDJveSXn6drBw@trKc0ABlo}qO_ zW`4iY;VVA(zU1wHth0!vYTl&#?<&qsO=MD^B`OT;4`R!knqTJRTsM4~Xu)+25 z%KA>jX*moBFK9>V`3ouBJ7N7upZnf%(O&^OTscp=oxeF}s_{xr8K*bA^W(W&G!B2~ z-0<_0>$7(mA7-TF21@#9&Nf;9O;#n;*?G5a-|E`_zPm~1Cind2Emn$LCceh<;)|q9 zc^v_hL~J}8EW59$WORR8x9i+FmIortFE*4-Z+R54#(Z0afW(P~v3=_fc zK?{@@eQ*wSclvJl?m*mM?Z~z3q8e4bcU-NXW_8lU_2DAVrrZ3-FNg0~zO~_Mh5GXI zzjeDJd(##ldckSV`r>!uKHa{Rv-&oj-?RC_>6KU7baGnHZrRGgc3Ay6kIJ&ma~^T8 z+n~5&VoHJA9o7HQ1yiNhZ=7~z<-%ouA7Au%Sr^#HYxC&d1*MYS8tz(wEVJ68g-ZEM z@1s699Ek3BnpXYgv&exKj`Q+dOClsDD=*)6?&EA(*&`cbr-)pf&G@88>eaF0rqvhs zMs@w$829wOslKsHgU)QDNtX_{1j=w~kKLAx0%Ght@v%v}M8KE|FG+ zIvL|wajPpnp;;2DA}d1$ttQ;}-f5_|-Bga>N#g~V-|yXzj~st_Z|_r%Ba^6C^)Fo_RlPxNvSwcy^`@^Ykm5R$!C9_zviw}Nr^1Z_Srn|-L!?QE}n)$5vg z??lWB!wFB;Rs8rGdh$R27D3OB#mheIX5MT%AtGKRzJe+LR(!+4MdzH&b5{5J7EIvW z`m5D^g}w{NYrGw%W`71GRNE9hyMF-IiqP8%eCgE)eGOrJeH+D@2r}1 zY2Kt4Q`9QAR?gVHF;Xn}q>J%K7sG3fT@JBz`pFmbd7@uice8R|`nR+D>-a(?^u-Ru*b0M zrH{;_O+VGXY(8sT_HBc|(Cx#2!%potJu154>`mo`t@C}og%`KBB>&jl^n6BTfs1Hf z?E>NE%Grm_qZmXyOG2!KQ@&~UcD+*bOS}4W-_o~M7Hiz^6>Vq{+kI{Jfv1JPKQ`+3 zRSR!!W&3f!&X9Zhy90|2@BjL9QZjFOWJ(Hy)dw-ry^jyf5w)(!3O=^^=)Ar?H+Yp# z@_knk$~*h>S1yMvSJb`3O5a``7czYI@hQ_Y`+sbYyBcb`1_nRFR5_=l)Z)M`~15w-G?^|=uHZ**7?1j}!Oun3%rf8!1ZMxW0 z^FA%UsZ|H=dHY{`aHNAfMM6n%?moX)tj|6!bCkXEAftKeTt?%~C#ILC-Z7Tm^GM%r zj;hy}j`?PLqJ?a9vRyZ8GW);C*6(I}Sn`8a`P{c-tj}jGYpsk)d{AF^(CXl|j_ef+ zrUp7Z;kU23ZuYe~%H`C`18w&C2~U>QUpi*GyVUrH_SO&PnRs0ioh36z+`*(v^QXv5oj&dyZOX=Yh^z&J4SK(vUYg4M!S+99lGAduw_UoIY zKBkM;ce7voCav{)N5!ufY+-+FkDkuHe|~!zzm&l8qdv#tYHDvYrDsh#YxsEoMTZ3z zx1)=Cp3YnPWq)Wv%^AfIo z(tEf(vBQr&p7+&_v?%tCw|^B~S3StHtK_hL^o*$BUs^2}i$5=nzgE$`DSYCEi**s{ zkFG53eLU&A*nE-Zu)>V#>V6Le^IPX!50LJ1-N2B<C+FyW%fF_L=MY+7(yXK1!XP zcB!s@iP%&Iv*xX8kLDHMuUxmj+Ii<=sTaYC47Ok8IbS?mJL7+O<~z6oH8uY(k$y9+8(J#GXC=Fq9P-*@^|*3= z_)ewpP5zt2dfwl*&I~${cKb<7i)YcJZ_oZ_o@y+7v!!!`dx&;wIU4Vqx38HS|M;)z*SELUe7slqQF8veEAI1Fl_$EWF3KwYbJdFF z{WGzx)2~ezz7c6_&SpPP;sKAKziPzI=acU1vPXCBlvGv~S4OzVp4^3-(yla`h%KI$7r;hh( zWWIfUw`Wsr=Dmfs5ep4#3vMj!c_vDS8`ye$ukDW#)PL9G#!r?%K3I_EJumwNGeMP}A1e*EB0{)NiReWx+G2 z?$E^NzfBbLCW`2MIi|K@Yy8SN53=q~agf|tsZcRxHOtpSM?(HxSG#1_{*-sluD%n7 zTc>;$IdOV|%;Sk}%=edZWtj1JPg&ZmT2X2&Hd01O?a$-E&&7ye! zm=h1KB#FNNw~tTuG;73F%MF|Qb+>AUY8tiZpRqdC7C4oL;#r@6#Oa z&SmlvBC#2Got+81no94}{o+;qEGR_2^lx7SQqDr{;$Kjq!lIk(x9F6CJoe>`wn z?pWW6sL(fTjt?{69lg%V(H0r^*8lUQ`@3GS&A4Bx=IU@M`iF)`@D7#yL(3K}xi{@| zh#kwWy~=w}ZRB$J#^toR;_K(egU(Mo(|itYb<{s0>)7?M%U%iiicj#y5p%0w} z{L@q}ud&Hs2`Zed|7U0Sj7ReqEc+jov4nMTt8~z2*}T}c2=a zl}!JdH8Q_C7M&AY9^IaCl;4b-okjC3&v$nJeIibCB>opXJYuwDw>)#yo*SmssYc6l z1@f=Db(PO@wU9I4BT~$5w!rk%kq*y2p7ZKY8)ygoFuus=HmjDUq^xscP57htuXwt4 z{ivwxT&&Fd`OOsJ&8wyAwRGG!{hrjrf28=pG2NUp*(4>N+r_(ge_Z=-3$vBO0~^Dw zzc)U9f1~y8W-nLIZ`xIj2i9I_W#<$vP_4C7?)10W^Yc>uf_Eky`ja0A-wP|>ull1y z{>1wRyX$srQmX|ozFm6Q;z!bfn;UMwPq^bIb+SL&pnB@>$uqZDDe1nPdr>gtp^}u- zxvw70v+PAo3^FFJ4i`L>(h+ib%hXG3eNWfgYHU4mW}})-+^N19pYv`N+dOtk*u8kG z9+%vV#^yw0#hZVoysPlbXq?Zp=v3;5o!VdaeLMN!*uI|*N86{D#~exTc(qTY@0Q;| z#}^MnekK-g5Bhw0>E$;2&9mD!Tn!Vt_ivBml=hNfiL}#8He3%oY408Gf3ozhW!C96 z-0_K@O=sDhn9?NIZ_Rf1wVXfSk{`QQi8(Frn!jYxy=|(#E-l}uIdFU5-q_K3wlCnJ z+WJ#H>v}hCG*T%QowxLHQvSp}GTiDl3KCgot0N~LpC7hAj zZZ(vi2xp0?V!ZSy>&0QI4O$f!X1~0^$fgl?>C38RbFa88n%1#>`3jEDKjk|gJ_zaA zu>Gf6v-i{QHTGxA@1_51tJU4V<@l+F|3=&Q=%~eUtju3 zwQ--SlE=#zmmfw%ym})ZRm|Jr<$d6ZWd8kS8 z?{Ba8^z*1=O&8N5IkwKw)d_F@Sxl%fWR$)9ML6Bk-1kYn(A3B5Di3B9^&auvz3h+z zQ=05q1K&AQME05O{{F>4&c&oaSpP_+q_+4S%eVm6UDNhNOs?YXVfS=qI?T_pT{d`C z>*1f_J7?#P9-HH9MAdo3bSLNKCBD3DwL;=aTSpC}pW+Oenx`4_rg6NRx#K|O zzaK{Ph5jo_7I=u1zP$0g_&|$|lUd8LtxS8XOt&SmTzwHVe^*DV+~me(w=zoQgF6edkg>Gdb{||_v4dotd9N&)FHKbTe5wDhg?;YZedqc* zy%)*vTNSv;!ugPteg2~}=F*WVyPgXk&iW;p-QeZxcf~FJ9p~H2%MNZ+XlLs*Nsv=$ zd~qwe%uU>|!d@{kFY~>%G+$B92LVR!7Ex}G?574VlRjyw7sULRpI&OiDS6<=5(8OH z=UtIjRyFpkq#0VSpMT_VOK-MD@Cos)%cs46vf$3Nzt8J@jT;op1O9GMXW4$kHFvc? zQ}K^8u23PG?Lj@0iC5^zfTkLo)*F+1i{}Ofi%k8K-Bg^k`#nLXT^5cakl}3_AXB-6dH0FAXyG8uRN zN($fkT=(N?lH0>8j~2Ul8s5Ff#wWb5OL^Lf*?%2m{~mF*U&MA#SM5KO@6neJ_MFi3 zZhjqaVi0;?Y!VN5{keHLvpwyct)ma`=ncHH+b!3j{#Ly8#ZBug0wb&*a7HNpJaR)k z_uril-vx~m&KG%Z<8N|H(G%*ve5lT~!l&BdVQ^dX!+LKu7xhqPp}=;B#3$GO{=E3v z@SEdh4>OaeA+vOZvo}^LNlhy|IPq3T`oFUFCP~dZmrUQs?Bx5ZW;7}JM)YQO4SvD* z9J^x{M5(QJ-K|!pwYTm}TtKK4n+`Nx3OK|AW7+>bU-&J$lcKvMTW7Md|0$``(1VU^SitD8n|ekS<~ip_EcB&)I3j) zMN?KBzIuyKvir}hUiRg^6%CIAULSey^~XZ2J?E9XLwn&Y#y7_5oTZ0Ms@@B&SNb@o zj6?4Jm+GXN=uI<^cWpHIHuVR?^tX>^75v@5MCIJecUyM&n(5x05VtCMqWaT^H~I65 zZIX6nPg?$#yM`_7_K8-f6Id)2GAJ)-s9*S}_I zFjq_c;`tPny`}wZU4695Y;A||8|OFH@;V8;vwOv>q*ht=>cywaPmZTf+8wxjY1PWK zGZX!~cP+J%mNh&5KZ{wXqWH_SdDj}RPdvM4Md8Ahob%f?{9SLQFf9BuNiDhj?X#6j zc2AzfkdRe%=#eZRqwjr9*XrZ0c`tvgc@w0X+vXy<_u!ID?YFjf_is-(vu4y3QVW{% z)Hi!~P;B4t-xH=t=RC@*V#|pB^8Q+b)w<;WR@-`>h;};d-4Var?3E9_LSJ}X z2vTqQkTdV6zCp>PvfyQ@2ONaga&6RAclP?2RMY)@qR_6UOV{ilq#yU2;vMp-{H2(H zx`HcD$Jg^}O$K`F@=q{*UbJ37Aa?qMBVFYcH|_Nm-Yqr!5m&WWF6rQvwtuYiX5IT? zBKyfJ;O`3->j;$(N7K(PV!R|3!o648y+CPxG=t-6*1t)G3CaI5B6zuuF6CQt*zivG ze9y0|8Kpl4@b#C3TJJyhDeUiErqmMG1@|<%Ggh@0r~aO2ymGpq>-`0PF3LFOok_1` zy2tmO$&g3>o7)%u>RVD5+w(TJC>To~+RLl@SluvIe(fu%;KJz{y{C>eXm?qqI178k zmSq(4rdN3x$yn@YE%>s)e1Y`8#lq&CWdTPo+y*vJNuJUd3lZpub z={33N8P6Ww&nC^^|43|R&oYvW6;un#;N0fG_WJB* zWd+vVYV*62PSx2Zt@!cAW5r3P`dR0-{B*a?pCj_Lficm>UN<=^dwCX5PSa_J#?Sd) zpBy6>{n=x1Z}wBuTERN8vZwoHFM?>Y0Qu+G&S(=WK) z@X#~}RxI^=pci*I@WP?*vswLCng+bQmC7P_He-MKUbp;s^JMNU|IXch`wCZVUzGBp z{VhvlRoDL8)s0e})l*A&ZQdrSpR6^1al!D!a_3U*=?q^t{k@X!{X)98X7=4L3zt2g zYJPU=9+w}JADVnNb>!N8B}gyfLC8`k&6RDFo<7%j{d2DUyFYgco*95|wiS?%}Fer6ye z&E4jI)5^kGp!4&Mk2zgunP+-;TdbMfV;K2)W75+(um0V-xRpJ!_>_&{y#w3a-#DmM zd9OJ8>cO9NQ%}_%+V0!Jc6f?WSp9EPcXx$=oje~Evn2#?{mossJ7L``cBXYaavv{m z(&5?=CFjcdpy!rDdHt@3TQyS7XdP(X=)|#TVM|e>Ys_JRA30}U{nO_m3|UU9L=^vUB8{+%{;`t#!Gnv)mZrcRdI;VnKfaZ}>d*WC-u?PiDN zo-BDn6MH z{G4r1GM*)@W&J4oWXgY)YuhHzf3zra&1yflroa}veVP|McH345Im}dEDf(3H)|}#K z`x8B;+&V|*I{HuXI1tEj`1uCTHw+skZZNNkn~qhlPfsRZaLxg7Up`NeOb{PqQAK=?cKVn==M(adGjhvwKnJe(kt0mxOt81Qdi>* zJ-_~DT5NCHZ`r??)zxbm>xcP8yUYxjgVkeo9DYvcIVAE~#BtBdy&uHg9`#LmDBPXL z7n$@==9X64)JOY0HgViqT>0hu=4qeaFAz01y`kM0&HH_G(^3;Xj<+4_&p&*i{%FC% z+e{Ye`@_@94%j?7WqQS-;4$Z~_{PwuF?{(y1+VtMxRoJ#J z*;pwkY9?~QJjL9`F=1onyBC{&z5CHV>*|)7Ci`;h(>QNG+8f{)kh+7_!2Gz*gs%rn z!WCcdo)zEqnMLPM)ltp0E}K5u+V;*qDR!DpZa^F^Ce^Ahl7v&;&#n5eVZD!jpg}~Raew{S@w4c8GXnJn0NNAikuMdwsrm{ zD|FWeJdtNPk;uMtLi+9HOV$U3?eK9}5x2KP;rO5A*7VxXvpY(Ti+D{j-5}RC2%CM6G9Wd*T`LxpKKCwW(JGBT^|nSPq}Z|if>Gf^yFd5S#0&ZdV~ z%u7*kpJp#~n$!Ov=T`=4?@)!JsbYpMLAuWmHSC(h_gUE>I@&Q|cbL^dC$AK*8xtPd-3Ww4iiv|5A?|P@iBdRhvZC-Mx&m!YB3sue@ zk=iSG{q&-6-e&7t=Tg2IWK|e%^>n#1P5!3jj)nD`UyB}7uTu7${cYy`X_kRGCqDiA z!#9uH>eVTAgQ7j_HmzA^&D*HP(<&tUd~QaKLr|-#f71cAL!ZCBd%3+>NY_B&U1D5_ zTaH+QTl>y(Go4*AT#t^c9bNEIJZ)2*WxJa6W){5#nHLiLuE&1U+_tA^am2(KOppKc z2Ar^IJY1+@(1)Op&s z4=zgIzU|?6fAe*mdpdWV&Uh3)=jZACB|F}f-ra1z;@y45xI2FS>V3u^4RPSHxn)o=&iEHMyN2jCrgkF^2XjxIeG~s_*>A`zPPx(9$=Puu+P%h zS^ebl4~tWElGoTLOjHdwuFTccn^du8YqRkGfU+BpoGTZe4&J=|=H2VtU%K7>F#q5lU6w-XXA(oX$6ck9oTZHMmX z1$}X!WADECa)t4&c{H z{(oQj@(%{+d{|uJo_4eBpoN|FlRLr(%7tH_ELeTq(7ATTyBRDlr@3yJ-%;P(aZ=v= zcr_sb}u@Sdttu6qsRuq z18n*{J3VWbRo+~&{#koOljw>|q0OpqqUtNIPd#^awO?>)e*L2K^}Zd8v~$xBojh0& zcG~>Tl*mutUF3rV9m^I3cb9qnVGJwY{?;>i@$1=N=0{sM{4|^|eq^^wI7{UvfuGk- zUp}$yk!xc7mmM}T$_*QnXLc{wa|+yl?EdUiS8i@uwe;31K{s30^Rj>APu@+-=7}jz zf0%qqoU>8klu`V7Hdpt|B@uB7TUI(++X6T^EJ`>NZd{zPx|KGo=XHFEL& zeH$+HuX~hdF!{MR7rT*9#Jx5@J(0)))c~(1L9tth7jDRz!1Z&7YJ0#ed-osg+q3_! zS#JNg_@m$9mo610=N|~vKl`?*(@4oz|Mp=o!y~aP{33jP{{C3wbnWTmmNP#b0^ZoE zhtDY8lXdoJ&Cli=7t0R6Hur5lrfv}bI&adXj-aX&_DdfyEwp~b&!^U5_Jy^X>~l_wc8q9DWm1-BxX!mQ%+cn_kHTWc zhw=PZ!v4O0H^I?CndQT;j0tvm{6;U#^g|=R8fLzn(`1>wkuQD5ZsdF?SJ@zU_xhQz-vYMbts<-Lero-3|1E33GfWy--+ zy+dbP(vM0xP6<~iZ99}HW~A5i&QePKTGQ!zp6Da;Y?~R4n+&x15_R`p{(G89UHFu$ zO_z11rsCr38!qi|ITo;`(*BQ5y8g5Ir?e{MT+W&${^-6Weu-H?>_yd$)fT$9XY6ih zTIElTZsR%KUMgY1A^-nJrao zC*EYgX34kcfPv<&)E}R&O#9?^;GyD4uJk1rljLkTw%s$2<(M*mrafDr<&#HC-{;Ie z`AK)N`ik>ig0&m3ewyUn>gW?QPF? zz0{lc+$`%0e!chLn3VM;C3f-&@rqW3iORP^ws9Gz@N)R^uhV>gTtK9)G;}c=N3Cv( z*o9Ni=U+%(@NrrHhuiY`mp_Wl5`DTptuXs@;Ro&5Pv+i!<`RoOHCg?upYlP}H^R4v zo8#u5=DYu$9wbTq%>C+AsUGHXH|3;YolJKB&Uob~Uz;L&&4ZqBfANx3OPa@AV!iOE z?~i}IFZ6sL)bIEjx%YEY>A$iq>+Mv8>)Ru4y!t5pQK?N}&dh+)hYM%K9=K?3$#(ae z#_X-k`zHOGue|Y=;S%PXcgv0YtKxPXEjnbZn4Q$gq2vE+q3-A0yGNK}uUW30IQ6*0 zgw^`>2ZJq~`wj&4Dj!MClW$skm;ayhmRD0dvX{vSsHXn<>Kvib{(f?c*5y5C1GQRS zp4@w~Tv_Cg@wCXpYYa9kZTXS6PbCyiZ%wh6oOkhm((Xx{SsyKZ8N7aSDesTRmhTEGK57`x z|CX7zzThyU{#o`7wQ{MeUb%f}{G#St=MbvB``gN}*Q)ocn3$B$e+>8kCc8$~`A4$& zEY2-IGNwj^)b4w9LhbK?Z?l(L-|av6h;4qc<&TFfGwV8vkF~Dj_H_T%l9auXDW&S~ zlOvl~Z2RhTf9?#u=SvzsU!QB>ZTdx~_O|WRN4!>NKguW1dvs4H;mf-Vzb7o3q}5n> z?o3)dN5;2jQ4CIUuDZpnQpU-uH4zTQOmn8F<*#g0J95wZzr>kSJ5S&2c^5Ea;{2{J z4l~xvrsP}o$vu*i<8gIi{GYUhy=3p_V|jr)+LS^pXUaZFYv-&wc$xE=F~bU(lC`H> zeU|((d{wrS`=yRZv_ooV!Wu0t-sKyfA84@fe{-Ut!rzEIF!*98&e$YuC(j*q|VyOTXzNB`>?FG$Sv%R;{6JiASEvTuF zpOiCwpLO7O*D)EM_*HKw+0T3Y(q_*5U@_H88={{^tckFhRGw`9`mcOijMSv~d)Itw zb?!Bu6I*deBf^#M)Rl09z&{_4 z>rw9ECoUMp#Iwodw`xR-t~LIC^VhN;!r#4mWsFi=3MMoy+}Rs-`Qx?-WuZr>Pt23t zd0VqUa^bs=zg|A^cE2QloJHquRnY1NAMFK8d)`A)dG-?`4U8v0Y# zl`q@n(SKvc>iGig>LEYwEy`i^IJj#|nxV#G$G7J`@Ei1+mdUxYEa$X)C7-<6t>=MV zZiHJ}*Mki*36Tsxq%O2CXD_@c+pJhn8Q8MN(%gH4VbQf@^`$MpOQvXAuBg>F(oSE~ zn#Ia-JG1r!_t8sCSI#W=T|Dm)L*kEPd#}w2%@%qa$L&(7Q1U_YzlPB1t!5J+M4j<$ z^)44WYGwT_=jjyQkiUohRlWCpgDbXzKtiZ8!ev0U}7&C!iVH{CB+V?nKMcWoP_MV*auCaly zeRUm|&-M1N*W^s)_H(|hnHnnFlzGm4jktYT$t=TbvKkFm`(=au<{$50xo6?+S7lkQ zKUL2ft>4QN$=kl>U;bkrwX*t+Z)Hr^-+j5|>W7!xcj|C;>p2L&3_I{|dDRO;`4^|; zQ9)z3peQZyoT7Uq?G4&e5X{B+~w>)2b%7Crp2U}50N{l!mukIiA* zt79yDbK12iwW_eQDY2*3uPvB(*Yg3#-m>yPt@Y&-17<6lKTPFo;QMzZ)yqe30t-jy zj{d6)jLL=0*?F0J4eVutcEn!e|6MB5Wb(0Koz$X>t9|;{?Q!WKFbeL+}pEIL1yPq;o^AR zDjCx?kzIY6M>uaxO8D-^Ue>u+<+^gty}g_7I*B`-u#vs_skqN}%ZlY2;}S>vkiu+v3D7*w@Ne3Ns_aXYEmeCReN5$Gk|yYoSBM+OO+OLO1-j3Ro?LD$%`Y| zs~au#VvoeDw$$YcvT7VyR=DMY=c2qNrTe44e0~@yw6Q?(ly20~q6_sl?z8HpGNQJ> zWzsr*Us9r`^n`?i)>@N?%o9`V6CU^pu44Po_VZZimgNh2E;TY$&Z^t8tAtNnMNWrx z>h7e~_cU%yYo8>j$K}gxuv>2)*UVp?jGG*tYF4X#ntWxIdzzod4ec7MK70PDmrYK% zG8){P`nBJt?)0OEva|7w@kiC)D=VCOs=A9gf1XjC&79;@iY-@prg0UEpS)|U5oQ_Q zaQo!U4ZkimhE07pdqe7;j@sp0Gng7|A5;YDb)5asUUg9YrTuNbuQ7S9_c!p1@9(*q zR+Oq0#?-RcQ?onxRoVBJBgPC~eulU6H0$nc<&&_QZPL6bd*@~zzij2hxj%UITx(qB zZ72~4dAE6)jbEE=)1#;7Z*_cG*7;_zr< zZFzpm>F*!+Iy2?Z3M^MC5@c;mvy31MGT?y;50 z>M1LkDjD-l+G2Dn>4N?O;hoO>HZJ;~P4gGdn`7dAZpxNbf&H_WnP`8?_rCNt;C^ZI z-VdiDmOQB2d~=ebT-TO$u@^TfePEViVtZ_Kab)G5JdBkyY`TxU*Olgfa^|Pm#eG=|n3u%{ z$=|zSl6-ZEd%NRtpS7~nI9@8}wjcHPJ<%@K-#7V$(TcL`#H2XDUG zbztt~EiEk_eg%eepUw;B`Kx?fpFQ2;K*-^#Ad2J7?C}ycRa#ou}xdU3rpoX;+J#T9DMH$}3ajW|=K{U-~d;TaeWygNOI@ZXdrl z?|F10gK(g z?K1=u&mD<<7hBV0u=G^{U)d@v50BMZ7oRNno0z}D^@ZmBOQKVojOML7H}hEKrnAQ{ zt7+vHN^P;(Df{x_x}RUB`n^2N|DChsV&rw^#tm}iE0gbdu*O(KC*(>idlR|%<|5aDJs}ghTyR!hyt0Z;`g&7mnO7Ei0% zlhf;+zh2(3n%imK$9F>c*G=DQ9{M7CLvvT^><#U2s~oa9)^UEd;`$-Y?_SY)v}w=f z@Za;+%(U(**Rn|ed4E^NHT#p3LIY5rrw%}KoXS~#sdW((EUnE=usKnqR*y?cze+m;DJzTIU{q z=$(3N{)^?Ivlea%EP8#x*v)^149EL8?%;+q7SH+kY7F%F)jEA_0{$~;`AhQZbgOUw zuYNf&dEZ}_Tl1#N`!L3f7#ub1+`ZzJkm--B$L4js*t1_wJVd)k>zCSequ<*Xubraj zF0_6t%kQ)gk57a=((_KUlGHx2s42*NaZN~ge!TGwp#&+)X=34mRRNk|L{Y^_*e@}b)P0;Vu$(-lw^bFovc&+z4k`v48P+P+D z=!jY4BO}hGU5R-z`d5)rXP0g*OT-TE|6S&YGKNUP1VZKQQ$hIz9;D_K8Q z?kv4@>+7^BtPg+3)dz>$p0$t>+rA^Er2j788A9f5oxs zZQ{N^#o{`b|D{|0Je%L}x38^uK98TS*v`KFejT4~=*79>%U^uC zoh0HtZTX*d1sfau-XGa_viabp79|Y@-Q_$n>rH1itbe%dVfa+_3ybEu*V`TBJ>1LQ z-+D$PUd$raWyxi^Q-2oQD>OBUIO?o%SUBaIWnlV6@xM`jdHWexKDxjkoo(&p*lFKcA9E};xuG4Odw22PkKvq* zk>}56dTnf2f9=QJd(7Fj9P+Gs><%|yMm;Z#)B7Ql$MLH9fWq~4g3es7zyGbu=b5We zv`w5l;117}$PT3oA7?!|oB7c=GH1^Gs23~v6>n`>XtS-`Qg54N{OnivdftXB&scTx zme0kq%z5_qf}hlzVwN#kygRhUgjMyw_>@xL)^y%`av-hVu>NPt`mpZ^{%NzAu*HPFF&s4I1{BJi2(+-0eS0;-$0BUmncL(o$)86CZ0d$%pZS z9CwGG^eZm@%bVV-Z01Rx(!6(Fii~B-`WE&3yX@Kpt{$&vDZACf8K2s*Re~pFw&o+f z8(pWh5(>}TzP&1*Y+faMWV`w0>ZNN>G2K?H@U7EZzHQ-K;RCA1|Lec3v8;61$DpI*yRD{Z##TJ7mCo_yKNMS3R}p%bTkSD}bFl8};#Ehdzw#*H|EKWn@BK|`|-k#+`9LUVgZj9Kak9AIr}{S=yz^$|EjgGUTUiQH8;^Zw1**z|l>n9AGldDCP#pWklVYPw^=f^EMZXf}J_)$+cYn|}Bb{^eEk%xRoelb<(N+0JMV-m)zEYhLQ+=|?Yoc$>bV!X}<~$EvkY zHrd_y!_#MRbZrEutxotx&dZ5OOOtHQTSj-^<1kHUV|8J7PUr|&#i^Ml_q zE_?oKTSuu2cUfJYl&oASt}eLhjhN}tAFm`67wp)YDd{ZqL+Em3s*klZSBwe?si88yb9WV@IS}9 zw$vsg5#g`@<`nlPw3S@!JrLLJo$*Ib)^?KY(u4Dz7qnl!{Y2%c#vOGIown4@Pix{6 z-+wu}*W`wef$KrLtIh@Awn%;`DwBcUpnZ^MH+HOTVb+_br8nZ7m=xjGC&&;@F3GAQG4d4RjT}F-*JuqZu+ETmXCq`qVaz@YfrQ<{p_I?W8=P8=*_#i z-#wOReV-O7ncLcsR`;53hx$2_TT&IdW&Lq=@0Yo$ad$sm{Z)7SkNlglDxWt;)?HP~ zP|G+Ko3XBb$)m+3d8#bTE!+3r&syv4ICGooPS0Z+d&FF-di6K#-=@v{Em(1b>GPeE zd{6fK%59#_w5H(wlg9LYJ$sXGsxDRi;X8MKf)39&milFzU(5Z-*eCXB>-JOb4-YD~8tis? zX|A30^jyOp>k1{McWGOmI9=N`q0Q1kSLkrb0cU|yW&hhI8`kMD>+C*nE9qzbB$N5; z`gKJm&%1?YTxwE#b9>g(vPDY#&!c8rPA_hB@S6WUq4UqWql;8k-A+eEE=nk5^{|aO zQsUNm_OgD;i?@bXXD|lDGSB*VTxH?rl;1gZA=Q_Ko6Yuj@7XT?Dr3+7kNR`Pey0Aa zXqu<`kAqG8xMy8t>)w?~*;hAZ3B(8S9D5X~y>b%3&ZIZpDNeSPFdx`#%AxG~Yn);tnPAuigrBCt~ z^o7qm-{L%<`!q`Qq0ExATF2w6roK)RQ;@x;EVy%%m&^kfn?vd9;ve=qUVrs7*?%vC z(M7{s;qE&15(+g%LU;XENxx7lQM=Au@s+V{EvKhiQk}kwcIsEj%PLZR>$lDS%#me! zbI}^P#;b2P@wr6uCa>rT{=y=&I>JhRs$?E(y#IOy!F0i>^N;Euu80j$w_d3AcEN_& z1_?)=yZU9zOI`VczV@zVJaI$+RM@foXYOzYF4T3~wXODmg|j!iczc-e13!g?e2(Jh zY`-7IpU6DUtvYFo@g4o?2iW5|T(?(!a1s@>T&Tk#^z(g$d;WTcx}%FjJ(ldg?2{v6 zFFr5qYJ&W}9J4pULLyoMqB9cr95?uy_bPYV&c68?inlHK78w3v{*lme=zn>=*o^r9 zL5^ZORx9`v8;N%A{qsi5=V?MhhV8+q3P7Oc()o6>xZfs<1}a>q4Z8HePC*sqq$ z_f3-|ucXcA&K=(t$@t=d)@IW~4|@Op zyyZSW{7!E2ZpAM<-@l#vOrX;FU)tkalV4@}$nAZ5^MZ}$yylh_cc(QimB!fOcAy(%n_uKRAM_Z-pG$Tv#W$ zsHZ8NRq>z5{Yj3g3|z;y#%nWFDQm>?wJ+-1_e%H6?ejMS`!1gn}KxGvkf<jY~bjdc}D_#4R#l0w%|Ak?8 z%vX9d^XxdeDnh^SIo2!xUi;IPV~3f4-G9EuLHd=fuA$|z&8qH=n~q%NdGTIrdNk|4 zliTNJ{9|)*j9M7HZrW{?@-t5|o(0HM^(^eII8x+&Eueeu2lY!6!+$R+vyXCK@p{!F znI#j?%$T*L*Luy}>-XMRraZ_y#(0K94|-+%3gu3-+V(ORdH#-9`YyUnmV0K$xrs{@3$}>o%JS|CxcOiB(IT!F-C`4% zBTl_oKX4P6CdBpdG+d82ZK+^>sJ*g81$ac z44>a(opVs;jIo;6qClQKsxK9P`&gH5uD&@z?aI6Tv!DD9P@f{9WceiI<%EBS-u0dl z`dH}~^Y+`T*`W;j8#hcadMCB$g|SuqWS7|8VuvpGoVcRoUgo@fchb_Y=3KSh76%JG z`p>G`t~6Mo-Qd5&YxDNo651KZPpMd{vIy_^axwDVyv|*sKVPrnxm=`oHoLrhQ^*bf zmm(od3=(fUej7+k^ZIVI&VIs#bEYNPr#c?g-i+D&`9bo{D^aumZk}=d*6y^horX4A z^6Hrf-E_@`Q|R#n&Fh<`jm$$+dioCY}`kU;0ZH5M9#kz=kq&d zW-S-^Pvy^psstadQ%p~ndbF_=pDFT|ckf;zRk^vla?u|X-bGtkU(CztSB!6*?0jOg zb#;7$wy@$I!5ym4%KYbT^w!!M5n6ooyT;|NfAg7V?*A&|J*(P+pV=p+Q-tR~@0(Ii zt6J~;*9}kR7WdrOIrZl57WoNlb&gM&x5nkQuU^cIy9Ud*{#TQ|y{>#Z*ZZB^@v+fM zj3;( zyi1{zX65kYu2s?Of3LVOZnY>!{=tg2&`ZnL&d-~(@DZbe?dR1u#IB39M70=gzWhNX zbuO!8S<;aP-#ROWCqAZsSK2K&*VZ2|bXQG6v2-H8`qMq3UPoojcKk^Bef*T9_LGjX zxff0@OYM`C)A6hL^1bt@h}-iUuK&etpSOl;g>AKavP(~K_KNxKZOcxoo;Y-R(*E=} z5q7h8Cp3h*8O=-C_OMLR@NLV5@+Ci|za`i(cCUH;J>W2FQfyP}6S;&bRTY)Hs>Rn8 z*4^+abJ|%DQeonGtoI$yw4HW8_00F*PW+L(HI4J%9I|?$MEX8L25z zrjbt>86@7l*zqU6t~dB=n#-4rgQuBz?%saFuf~2wpfGIe!OM1{Jr<&E5v|5zQ#L-D zHn(qj`D!_a$xB-WtnO}zUo7(M?z^DMBONvCn=WX?D1GCY&G&U@{!N*th?x@(Tfh5N zys_T+wKtP8KhJ~yf4uGAcvyKmdS^5xC0Re3wa)3vlc(3OO}+pAVyI5dBD*xFqw!y> zeAi2etePb$X!SUF+Jv=>{cUbbXm=#>ZzzFKvn7O#b!cnI%iB_U47jyBaT--LSE`aWO(- ziTA}2VXS^|iA4R`W^z|@hr*5L{^bGAC#qk4*Jjt~ zV`7dlUw-nW>!Y9M3;(XW#V7JjXX_lBscTM&)}EQGS$|#O;BvFT_uTnbJNLhsFS{+R zRO@su$EwW3qFG+2AHMBZQHhTA(hk3Kz{>H^6}=sc>&|H{ROl1l|5qse{m+S_CEFOk zzEPQ}W7_r2np4Aa%kw8U3fc~A%RSVz2Tp=S7Zln=~tPR>omPZ|IMLOt6W!plsII3Kk;^j z!i&8IW|!O5G&F>k2R*v=JkV#7%I?X`lRRbiL^W>Fe&+8hqw+X9Yg<8*dyzo0Ql~<7UlVE}%EHqo?RJh$fwN$3~!zaJlSyTEa)MuG^R2@AetRsAU*28_G>)&Ya`7dq6 zS@mAS@xY;HssS#$3q3No$(Pv!f)+2?`a1N--G0;cQV%#Xh;~~GVQB2+p zKBp3&epz1lz39@_=6Ut%;$K~k=(#&J<{vt9Qz5W^{lEBnH>;@qN!l^ni>*x`+-^|% zn~;~Z^n;H}io@TZ=8rpj^cZIMcS}`IXi*Q%E>C^xgHYNLH z;`7WGRmUoS?wGD=HBXbvG4sN%VCkT8$2? z@#{=od8Lo;SyB}9+EjkY-2Hr)#nu@p@AohMR4z4rSIraG9-e5ac==>th2c7ftGUuN>{&}16!EIi()f?W=IO3b!wa=$y*Se|a9kZSuRAUH|=x#FK zqy4~Y7f0JH%|t8zJX75%r*Dd#e4=Trw%~K^uG&A=%l|vCKKkvw4&UFJ`20lk+j04~ zw%5kad4GGGOU+!N{z)I6{VtjPqwM>C_Amj#^Q(&*h zsT*ckNU-+S?0Rs%$swfj=80@e&VNT^nr7?OZk9N`MZ&J`wGhWjf6cNz0S&?dt9RZ@ zb~k@e+Mu2B(R$;<(ACSFVpd%aTr`CtCocbHkHq=EtF?A5%5IOfv*>+bYuYM0L8ri| z&EZC7`V!_BGDqhu)~?-WUSrYdqW}Eu2GJvnzdu;V`SFG9p9wn`r!aEzi-fALox06m zqeS3NzI*TIR9L?<`$LN z9&6Mqw*3lJcrbHqI79o|`VQ$yo(t6&eX>&3; zF81AMp|Rmok3jBqXSHJ-axYGrb3c$F*->b5>HOC>PAF8~)~`DtJH68~G44~}Z!_hv zwcD4S^tt@wk)yay)Q+>4IHgxj5$I6qy!W6{5fJ2XNS zKL-9Of6D!7o=8ac$A-SMH>WXs?qFBhBayk`EzA1XKe*q&5x7u#((Fj6@1{GBZx-mR z=6&>8faP-erR_?ST6p_*)rT2L@^qE1c3h}4TkgazJqz!c#=hG&TZG>~_?cQPc=537 zmc5(w8IlTDZ;|TfzrkR{5|qY~Bll>(Mtp7Svex=1Uw!S;y&hi|c~c!7u=SyUUX6I^ ze|5cu4_^sh_Li~vtG#1Vgy8FQ%myK=pFgd&@%fcCb%JfVaOC2npM`E}^j$gpb>#)c z+qK)hyEn9jh*rHWc~zkI{^z%dpnDx2+jq@<70ca~dZr*P@!yh5{oC}mU;B`260NnN zHb*wC&F1Q&wVC%;Z7WaM@V)VyM4!v9uiw~Gi&nh(TV40sr*+xJ=d-wV54c=SH=QEH zsUxkB;kDq?or%rIWedBvaJywHh6^Uy*sqz9qUiX8+g1E^^2@C4O^kCc&a02xrP)_> z`sX*#*z&WriXA1Q$2?eLza8nxeRp8J`0bzE;wPjgf5_7ge0O&h&sehKKt3!Qz|+OGTqo_Z>x(jWO%RX@Ve7g66e@vx|Pfq!D*K3l@*WWztUsC^>37szwcbRahwrwTP!skzQF07uj z>Tlc4uGy(G7p~$rWa(O)TzaW%+N#K#=cfvM6pR;;?h`(G?K72RHS>UmJ zc5%e^*)2N#vpFm{C-|M8b%=5IDTf{Bqn5WjTy33GRa9pp>mcltbtI`;c^b>t5V<5n zPL1_SGkHE}3b*sz;nukAntIQvkKx!ayN;H_El`u*<%>(zpH)*Bbye=L|Mx%GwKN86H+r*F7Qo}O&GG|MRMShxJE_jk>k zPo>laUFKKWwb%XR0@o{3@+*4pKlc@~);{2I{A``Wl8x8i?a!9DztS)M-<&mE#g!5h zYA1&m)jeswt?T$d)wwLglQne4GOxET55-#~dsr52y&ij+`^&|k4Y#)Z7hiJMCvWpd zqoeZ`6zqhBek84cQ1v8T1$0ZD(18@$}K<6l(Jau9q&mS=80+(7}hgw zT->t6f1XswSGHoXeDvQHga41!}b#!92@SOe9&-s>V~e|atDPkcHxt< z%csf*ehc20VSLro}ZFzeLY92EpT1U z=c(l`R{OhrgQgxgez0k`_Qkej&V%w!vkJCXY}LPfbyB_U(+DQ+B(0+DCbiGiO5{?q z8f5oAQxlX)IXlryxS&wvz)azPc}HgNi20FZI_+=jn*ZsSrfQr|?VTH1^I}fgM~g$h z_`kOE#0OTy)~xR_`>^fMf>Ve29PY(vzBHP|T6H+ee^#ZP?g_>lJf&0EB2F!Gw-S8$ z`HGf_q?LP5x8{ULmanv!j1^C5F`ur8(EGYnVB3{1Dyy8nmgrv4dVhIR%Lv*-HL)Rjp!?B5qiWGw!Ed-eCilvb;-indH98IwO| zH4f|D)fg6RTYL1cq20l2lCEaPYs_*3SG^FpnW;OWC+|@Cyr(NIU4AdAigdaA$@Ytp zcFgO!i*u?(EPxwCBriR#2Ry z5#nZBYCU7#y0&e_*M;ST-o!1wF2Qqg$Es(kat|J!OiKTgbFaw%eCR}V>l5Z*ql6X* z#Z20;vi;4E_s_2?zi~RWcwa*F75{Q`^(sBT{t15zFF5{|VOqmsArW?SX2QgUleOPZ zme4m^d8M;%Mp#PRf><&w7C^D4J)ay+zk-KoFcMKT7vIvz((FV1%=~7tZ2S-YGS2u@6e_ z|JZ4|hvn(P+}>`bn@5;prKcF54LTIYVt#r#d$Pbv{RJ_rmv%7N?k;)~$$u#ZQlRG7+J}EkrSHu=|ZdUo*#XZw++-BeR{F%8srRjpS;n<;!aS&C31U%{8mY-n2Bcc++f7kptKEYn|Z|TO!S* zZe(uQS${&dNJZ$$eB;?~T?-C}|27vZS*jd%dB)w6WACqA$j=H0UUA~t&H0%O78P|t z#o-rtU4NZD_&-rg-{))S{Ka~ua`kF`F7m&3&Sh9%>ChB)Ge)YRMB3l@Hq*=FS3Wi* zzrOgO#57$|bv4UdCAk1wExsRbo!nAq9$zu%>Lrb$l|mO+-L0eCPJmwGGxwbPSPVvE|Mkn+DjUYTArsSVO_=RB)i z_P*~%&!paTx%l_*gkI*{3|{HhFVYc~ck{rpXny~Ke zJO9M)3SInRMnvt=l?&o4yVjKX>~c9{debJpUT*5QcE=?l8J+W+lp2-vnBIl{Tk+|C zcqg~L*y`8GuPZjQGR98+yJR1$QfqCpzRb7fv05KCA8t71*>IRy(^u+l`l|&JDyw%t zd%fcDrh}q<8`pN)C-5hQ#LS*$*tPS+_Jxlh%$&}(duf24xWT6osePf7CoE-Tp5ly*A1_ZdIG5+Pyy@4=Hd6JqbN)$QA|eeR=q z5{4?ui7z$n%%`0YeQRxN8y+3M`2%aa;+|y(eo6M7dB5NAh?_yi8~x8xS1)BsZ%lDG zp8P*;pXRN*eq3{G8hzMgf2X{adLBHtZ=2(#1|`9#o6fPO%zC69yX>By#6Q>0STti(a?){Z(D%dvIdD!JSLFJ}K5k*Vi4&?OX2nQ*T0CdeKgs&0CoJgRE_`CCsh~ zXnf|(ID9@w_W?8u5lKuWh!4Ce}6AmYcA)@oD-fU{Ovo|{hb^k!~XGe z_8X^0mYqg%hnNE*6{l1cr1EfZL~XnC<7VAbrX9M1VWAq)OzZpmJ+Ge-QoDL$r=@|3 zr^l6yxBK>968d=ch))IY>5!6{*DtxJC|NvP^JYU%`)7^Ncez>h=B{h3uH>^T_gIAA zI=RU=_3pFl6YjZGZG4`wru5kRZ{js6YSZ_qD#fuT8g5E#n-TH6wp590f%3vn7vHyr^A0L21rj+e2r9yAEq-_$datX zeWdvL)yCIy3MIR`x=l{rKVmI(>f@u&kN1QMXzn~W(a%mjdF4$fYq1Wem?x>l=|;aU zY*L=|-|yiTmnq?~X{CBc`$MKZWfpk<;p4_C#s9JsS5B9(d~wb9ezJ6qUxT^G_v^RH zH*!0y_F1{f^VsjQo6LuLH}9@G=VqO;;$GlV&s#PUzO&Za#s_SI*fe>Uum`pC?r-1y5~{V9XN?YsUP5*BR#GPS2-`V)C3gCFx9RtZGTVcyZe zzOpy5K`K_|q{qz(_Ul0h?EU9kU7E#Zf9%~BpUKOQUiGoH`|P@L1Fx$KllILZRqpv; zFWo+|C;H4RzOSZ?e>MgAgx&5GtP<4Wc>U?r><9b*nc3~i+H9uryFqE4(w+-0eg||m z*)-LJ9Q|Aw8Bo!b%qx=@mUmBG#_GG%?XG=0{N+z9Rr||P8gd|4E}Uu7a((rp>lRyl z&IDe+zhPHF759P*NBP}6f5()jKQh)@v1WEy^wWH#m)G#`P-~ zusOt=^k#b8(qK*cps>Yk=dyN5l^c6l)s~dWL`5xoDWB9{a#qV{mR`w|OM5oRcot{~ z{MzLZCRvbio0sqDoNW7|9ejsB?PhOSd9SBgO@86r+S3xJE($7z{EGhG949FEeaDLl zPvY6O2>zaKWb`D|drj4uS64+IFKp-K%d_PE*>2UYBv(CSW!eexoI=l^o-hB`w}zaT zZsVKUxHb6pA?d@pZ+Mte1fRAnsc8^jv0#ppVbXtTC4r59*I#|dyexzDyx*xAZ|-d5 ziM;;SG~l56%#KG#a?To@+Y^`cW9o;86OR37X1agqYQtrfb5ECF-+3eLvCfLhXt9Ht zE?!wl9kOaqF0M&f@Q1zFI7rlDMoMW?EnmRJ+{trRcpm3mF)?}Nzq5G}FLpM!?qOb3 zbKs2cle!=|hMwtSvkPu*U`)D}t#iNdNHvQY&(d4kbNSR?d|b>@?EE#hqfJ9o^}fPH znd4G-mfo*Vdu69KF|GR1ow-~KjW_JN(ydhOI{Ull%}%b@EBK~t`*P3cd(`t)+B;fQ zeyBKo*V^5Zbwf+;Qcd8Tg=Z$#{5c#~>f;@={#=UEnq7*V?w(!kNA!d=@}-XMOv!k>$Xaju*HisIiypi?-t@S*;rYsE zyO*j>+WK|9Qtvgpj`YpJoR{{+h@E&pQ~&3DW23!2dztP_de18qcwouzt5;brqYD^b{_v?e)$|5Zu3#p7B3lcy=z?>lhGM`FE=OO0jk)imyVYA*k7wk|xu=6al` z@aXzPw$Q3`TdVG`_A$LP*XaBD9kaiF`qXdI_VZ4GM(_sKnt$KlUcVt_t?wSNkY{bf z+a*k@SM>b0haEi=vp;}!zrI2ArT+cLIo+4-Io6#s)3=)?d0V5uPUbqU^{>M-8x&Vt z@rbzf&6;&V`ES|6Vgd6tPrRM^(+f^b-M+@YQ*--5(V0R&&fIKP3cksDC2)3fSGv?+ zQP+YcrvF`!Kk>iId2q7Tvb7JZU+dhNy7ifMVU@Mp_n9l|{7g&O&uqEazbN}ddifoP z$gRTi4~`{W`kH#&ox8Z?BJa0HyK^!br;AF6XY*|f_-r>rbDUce;L^5m9i|h<)jf6&W@AOzwDG zSX*jcmD1Z888wSR_wPr;H(w03J-Ex?9^M{s^5GfJ%e+sFb!C1}dwO&K-=r&>F2Ao_ zqtE7Z>ALuC4!Pe3JZWM#-$A3e*z8{Pug;+I=+&y| zwVz*|iBVd1$9aO^kz;4}ylVScZzjFN*(CbAkRO{_-J!=kizm&G5_%+NP_R~2a{9A1 zJ+FW5sc@ZjdiUqOo(t0cR|n1R+F7z)`1ZGh%Uk$XPtm!*%kM?uwLc+$Ii*L9A)8eEMhqmEy73jD~&o~m-<{9V47WtR6ULT7j{Et;`XYL};3U;S3$ z`}|>ZHrm|Zu;nmg=+*7(c#6D|+56V-P5t70;Ggyc8;^jF9a5p&RO*G|t zMo8gTpUbl6gxYn>mQ9Q?ny1A6eMU%r80(K-fyMG|);0dd$L!so9W0jLv1GaQkBlb^ zBTObShb>^N>UH=~b?F%2f;+XwE-aN^wZ9d=#EX9Vm&Dn1<#FWIL!YF-N#)5N`5k=R z{xpZB?-bEZlUpZkm|bv7imCpM$vd;XDMnuy3RRZ*7r5+SsJt|}u4C)%!$Rd57v{`q zGuZ7d*5qw)+2Rk|f2CJ!2i3lwaQf|+_+kyqlmF@Ev)?O*eRtfk)be5_3YCVS)Mg)70$Zi`>ucU%iiUlzYVffU)uA@iJApYDKSnA zpYc2Ye%{3SM^5mT1a_Rdv|5sL=W6X&8*^@+ICXj|OT>rRSw_}eRo7R~&G!Cv+&WC} zhqw>d#JyV+j-I<&aIf(I^Q(9F3;!7xb#R^&*Z8o9Ex4L*-Qm1Ti$tpe+taF-PFPy& zd95(S;o)QX+R0Dd66fSzyl}U|K_f&!a;nfYKCO&A$2(r%!VJE$=JHPezUaP*)MGY< z_6x$?M}Iqfd!qGae`d_8d8 z&Ae?d_Si(HPtZU4#ojXOq57_li~FmJIlU^A#knrNFwF=OyEXUCZ_bQ0SI-Cr7z!@E zQYvyWbC%f--gRzVuX-n$e(qi;xurhU(Y!EXqwt)9jSP))^?}vOFIN}&#s2!aiL+`E zr_;rw6{Wim$$vR^tTXptxB$a8pZ5w}Pk-LEPZFB3;a0`ObZtIUQTdeKx3Mj+>>9Fu zRcyJ?^5bNU`ETtLJVEdHtokesjlzfbSkZ1pmYa<>=P7Ka*@0Rb%o<_5Q|j zd;X8|A5#{usazhJD4&pZ&VQ;^>VImhCR;zV;g$5`u_4i61_XANo;y^ zQK80X{T}6IClhDQa?7m}+voLc)6xBD%Pc(>`vkFaO}SR=>W6Bg z_IQS!nSG-Fz|BKxi&S}Li1kfh=Fvq>-y~~*Y)-0cAqJ;P8ca~bquXHRjHjRf0oly&dF4`xs-L^%{TnpiF4Y1+J0bcP#x+-Ib5aGGo8=2Qsf+WpP_3OE&d~yXl61MhpJPPP-cSZ&GVX!P|@0 z3CboGn`10(kN%6)+hvwkZYa3o;LnIZi_a8Egv>v)e0|`NtMj&NX?1*_Gx?d_^%K`7 zgsf1hk%|_(=(E5*MAW+u!(BU)H-`8@A|dG? zxAcVT4{Lr~KbbmhlDukxyWe>uQKze)Umh1|yDyV4`DlJjK*iOoOBs#1H~rS#vj65b z!>{t5z1}+%WUC%>SFiK&+@8Pu(y#4jTt)jQdcEBuT9|%leaM8yy5Oz9@^x!=H2-Nh zW25SA&T#nSTInZwO;U5xoaz$zyTA12M3rAVwujqxo7^?-of;=k#H-!YU8AJF=V`D~ zO{_Pw&KaWv2iWW`#r_brSsoYCpLo|%&B!Wto}BmfEm;$uHzdpbSG*MRM5ASw@2A8X zOEu*grmRoP?`ii5o(nbQW?8&<<{3X}rKU#db=s%Q-p(*t_u#^p*viW^Y&fb#VKkrr7 z#)h=Nw+?}i;Yvf ze*3%H&n+`Vw!f43%{p5O^bUhH>`YpC*>E*ictGkfu|<{MW2$xG&3WoywiJ0K7$ z@0hl3CC8nGI!oBI|Fitn6L#E^!0@lRlx?|-td!mkgL_IZ#MF|PEw^P+nVxS_dE#>D z2iSR(A{0ROuKjEQ8xb*X^VaA{GZv2P2TglcW%(tnuPxSmA4Ie z5-OjYai3JW`fkPX@ap5%UzYsS-|%F|(k0Hkta~|TiLkFuXqvxAuHaJT;b(=nZ<#%R zIsahSEz5e%+=E6D4f4(!_5~%}o1d@H>tNFVr>?&^gV|O%Y59+4HJzzH_nL0|q&UO; zgsc0d)cso(jqUg%9(sgMo_KMIESIFNz=nsxR#VrsyCrdHewPZXT@hkhU z?|&bU&QjRTTRTIX)#}0jaKly|R*x@n(QlcYVpiYqOR$NXCABWw<>HLU6?fM4f4UI) z=S$3gcNez{IiG$-EBEhjJ05(@ecsDpfvD#SHZkqFzn6bo!sdBuv%=n(?;3AKUh>{o zb&sk#=JHwkS>M6?_B)$e>U^bae}^@t_?+?3`P~rCzaTPC*Oyi9;39|n+df^L8oa%> z_M&OS0@cd$wVZbAOg06XT>V@zqdzq2<8c?Zjbi!s&eyk`6q>tsf?>K)x9P7-&#&8E zma#C=Y`NoFJxz1LDi?`AXH{(H&b>ZwE{8~Zyv>bgEY>gj|4XZ-+y2blUsh(t_#r`| z!H#=>xyPy4*UX;_)`ys8Y!bY4jW;Rx@||tQ;=z1kF`I2p+RL5{PMAN}qIE0Ju{q() zw#*hbLa9d+%{O1*Y&VbCD`nLG$ zk6-t?snS48}n--?m78aOnmuYL9*!*m-CHh$BHg2{AsW* zG&IAYEOgJ$`U7@tb9bz2x80;$boI6G?AL{kt>=CS>kAgDB|ixEzH6tjV&*lEOU8FC zSwHWab|ox#iKoFLwvuU+C4Dt7IQZ-kwCLNg#*K|j;o8r>i!M7KE=qcBIpvN2EfqKO z2~HQ!YoG1-r`^exWwhYq&ZQgYOgX^Hd2n6&k%r!iD<1Xho;LNCz5b)GYqHa){#*Lf zMJ`8oU0>J~8@c|Py%XD9AulTf5%mTsu4#WCc23~u*E3td%K7iCX!9B2s}Ft$X3ycw zinyqje?{bog`ZY2YL}C{#h#HMo#4H(<+;M;7g_DAclIeX6;70h zycOEj&yaRx)s9B*q&e%=;wm3R=$hWv_^G>}XIU`+(hW7{ht?d(XV1Q{VaH0zhFc~+ z)wjQH)Vshbs_;1>;7GqX!+jIBjAPI5F|(%?Nu*xoyJWWM)AVfx+qB-q7H+#z#d+j# zF3+oLJ2q{#Dz_BhVHL@*t@PbvM&5m1HWwY!{kQis|DHCpZ;>Qt9q$_<7so>p%O_?F zOKzVkyum}&LD2T%cl*a5wV%oCoa{d>N!)L8bG+vm-+nPky;#0OsO_uG{>7Kx%5|4SJb!oN$NQZ|8%<>XR2*FYU-uj1ZM*q% z(=2^nO_}!c%hh^oALa_1+uVH1DKc58l?)Ug%|_QY#Pu9%101x&ngXuFrC|CA1=Xo0GW zDJS|K{#jP=!F?@P*i~DrjW)?qEtwL3lI`D0{+asuWtY>r+$$`xvrJ>TAMKZzE^asR zVEyZqYcHgy7wt5Ee&mX6kJ9RghuSq}O|O~tPk6h>m5Dl!Up-p?=SR@`{&0(h-m9ed zOB`_9-8!i@|5n0PG2ti9{%jk?)mgcJZhQXp7wg+a&n`4wP5KzNcKg~HS?T#g{%Sw% zE+}l&_~BwVM=Hj~$EeP~Nz-EW>8HwD%y-Lg{KE1=IQq871ST2DM_c|0C0_`cF@6Ta%4r){_DlfEaj4tH_?OVCVLFFH}A|7m*kc9n}uHp{-e_rSog zG=EL)lX4TyW`;|7&s#cd4PRgB6nj6_NJU6pb%o0F#b zKFwU-DV*OeZrK_6SgvYWw)e+7gQdS3nM2&ChF)r5G5xtr=fZ(4eA~7)-CXiuR^9TSO{?xL zJGVt(-GaqmH$J~raFKbDZNpjnL!S@c?hHPkI%AjdBh{>VALHV8DjpP{Z`pbN5UL)=BBtcu#Jq?|RAC@%+=y>Iv1=wPrhi z9~BhY-@|;6=~}d*g!#1XnIBi&WW8j)D0s=FY3!e;ypKEd)uq2)PE4VGa#?ZneBwl3*K$e|tIGq43??j1|-D1E-|L=FWef%*?l|a;bOL znv+&*)oZSGNguwywWHf`V|jmub?%%qENzpY@7R8FLR!sEwo<<3=gY2(=%&tE)6l&f6Qc1{SNH=Wz} zwBg!J)};?_&wEyEXczNtzP^`PsAI>hoLN5qKK61bOu99lJ6uck{EKDxzoeg9TI_jt zKi8R?+aJ2`D&McVDa0&CJ%~`7cUgwERru*BwpHd#0e_qs`ICJx)nowc$_x}x34(u@QbJ!}zc+|Z<^v8b} z$A^L~pE^!?eW>f4VQ@bu)$~(x)&ha!yO%$cDGsgwut@%O^3eykg2QD07u=a?$ipzt z?HA+3GkX^A(^7Y2mS*MN)O-6y*u2Y&K5t8SmXY;-S6%eIsL2~XO}eEvJ)_WWX?@Ja?KU3eD)8lx2 z)%5NMA7(u-YMrjn)t=cU9Qo#MWJ%%rH1S^G%hqvUGVXE!EUCB zpW8lgYlM8-Qfc+7W8%z5f(sTr4RpVl{Hm-#V0O$}cIi?z*J}~h&+S)BF4a6OqwpZb zo#p<&qpu2hwQhZ1`omXzx7LRAoV1%^CGmT;QuQbLUuRED-?o%JzvBDEY4cC6(Gx%T zO5)wrH8yecTheazWPYE`%J4HnrpqNLx!tsB#w<^sntSqPes_OQ^YWZ^X_uUqaK^l{ z%DB==S#C>qx^+kkZxm^93lvdPvOL(LaWC>(soFx{BZpqB@bW!$$X;G7Y+|hSe9t9^ z%|rM)!D+#2>66{}ecSy}?Qjx9e(_1|34(t2!j{N#Da-0Tl}Y>Y zKDK=2oO{iG_E}z8E0}Z7g(1HC?MJzPMPGlr@O?k?`}h2WJZqg}24!D5mRS5xc=>4G zrq9lXfx85@{GIoCTWP1QWW&WjKTNY17G7gL_EJ7np;Tq<+?7H5UE^M@JG)h9kLUsZ zGp5{+&(G@I_Wrkc{}qO_J>ur8%*!+jj>MY=s?N4j(ORLi+N*Wjl$Y~Eq88of)Z*s( z==NcSdd;@b6&4$py<}1gaMpZ$$WymzcIl0mm5j`09dAVDg}&~c&;LJg(Vlg^4XayT zdfnTtxp290)v0@)nHyF1TE@+Mp*zvLpMz=Eq}JU*%bT}a9Lw9t_vF*_jwZ!~xDC#s z-{&T7-!)P1+3&|HLASrBusW-pel~F$$Cmh|T~C6WG`VIQ-(K+dR(9t69R_ETy((j7 z`@DQ(r?s_iUW3XPMjM~HDf=f{tL$8v^t))e`Zb;VYE}nlG6%jf5w~4zuXDJ@YoV7x zmC4j=GWU+=9Do1u!t%f=TKAMp)#{aAwkm4gZa(eXziDMW=dXkmNyB3n6CZ6q{Num$ zvxFvw%^p9lOkqFo>Z0-T!`$-t2CIF)<~Mipd!0DnDf(phtxKtO0{d80K zl$^|v7%kTA4QCmI)Ql2mSidRF&2V?Hw_3f`*j@5}a^SXGHWrU-p1iDV?YOyxQ)un! z#^x`+I??4U#o2Comw&e|^ZP8ieA3FclK;k+XHN55=(FbK`)tWN&#imcKF#aXf3)M@ zUO54sXDd$}lPfDw$(iDIv15sOz_*1>-p5y#nXTvH?hT*4>+a8I-oFjMPN`!{Rkojb z<;CfMLn8bA1D@qQ=Q?Whecj2WWn6ay7pZ1Wemm*J{P}_kI*a6Tx;-^kotNXc$zAq$ zv%1z-E%U2)Ud_E~yzkb`xu)&QXECZohW*y!|GVkkPyWLFdyX7>bo%tB=b=iSn^jpK zR9aqp`#VqT>vuW!znSiv+l%*1Uwuu&^_Fs%mACEjE%sj{eu=7dE%`BHcIk$BPR6@# zE`HUrVb>SI@;I;c*O(T}xyK~B#q8GR<+HyFK07T|d-m{~>F?*ul~ml^vCDSFw5^dn zsUm+PduJ%gbzSL|Tr_7mPZWZSZ%txRmN_fo*|qkD||hlV&^4^J`MT zFAGUW122n(Io~&w9I4ltwAI|Y{6a&-$>aS(zYU%*SN46*biI64W!Le>4o2e{a$jH0 zO&4Tm|9ko46eS@Yk97GnbC)if-SDR5mxb}}C;UBe=G|<|HM@?rr*2=kqv~4a?7Ufy zPj~a&`pKh{zVghWCBIH)t(jIiv8d*)!L@hW_T)Y5ZN7LZD_Ym0r!i^mr(We_mp9}@ z?mZ_^!z8_+_+QMw8IC(H6yGlU`AYRxbl+N*W+AU5nU{IL@+|4MpWe8G=l+B};%VG% zi~eXu-1m1q-Nwu2QrWWO;kD%^4>#v?PgoYFz!Q{hzO0g;dq+~);cdHHpDHZ8;j*=> z!#tF0*Y(eD`E;jj=UZicRPKoXHP(zZmom@pdVJNI{mKu<$KMZZ&3~dbOHuyhpX2T_ zD(h^*j!)D(pCYC9;OMn7WvdT-KRecWh96Osuzyx4ob)?Rz2UgK#?;v?8k;ozS=-XO zwoG{B5tAoB`vR}+1^-`6vqCt_f<=N3-}hiEn4tHXZ&u5L{+)aG zbed?&-NFx(k{e={Za=X9QMOTn#evA6sgtf)_X=I)ozk*&W24Nj>%`(l6WM}q%r z73CS{?jCt6w`v+^>m|1P+8s=aZml+7a@8-N;{6ycX?Lhd^^Wx~y|gE5uD{LkU%h!2 zbLB<}%}y@=bNw4sliq!fn0{f=rMq(s+>+~6IqpZvnNOQ@FIq2q1rzbiH?JfEIX z?J|GC#c)vw!S0Sg6dnZruV`t(MG1EPE`D@5{8) zJ$Ihj=1AG)BTY+hun4ZZwce}9p~!dEw1;bq&n~gs`K8O|kzsYhNsmP~SHtRJlOAog zI~x=l;LH@mwc>@|B%LR3K6Y#>O*RSKw?--`^kIH}1^2G3@5|@@PrulkS&bv0O7)QHt=Q^}sm zohd5*0eBFt=( ztEU~e-F)HEBh3P}>09cTWL3(EpKa~GG5yX8i(C8nN~BLYZM`9Ic}vQj{RfPiHmq6O z{oP9PvSG`U&TC0?d>P8br7PC{xwGF%aJ$LAhi5=xmc;k)kWxg_7-WUJ6_@vzMVb zAwF;Oi>EghDV^QZp0_gOoI{}Ehk43bD?fJl@NJOEXj}YmmjA|mndZ)R$F(iyZ1+>xUycXXJ?4E-Ra9bMO9}Cl$hFI#}&EU^i;dZzU|KZ&}oZ% z=UsC9DZTJ~$+PXD>N*ok*nBm!rsY*BN_~~|`6a~1vGq?(S+4ZEg(hzo-afAHYFPjF z{^!h_ZGPLf7w=tJ%5lP*-D_#(D=w*5?oYhFzAusZAAI}oftRhRhRtQ4RzHord+FN! z6|=={f;^1y)hS8vx? zS=uj}z5Pzu>}hwJmniilLmk)aq zmWNzg_a{5)e|E)6)!gNbyJpIztk@j0nyud87Kc$?@KpW0eLnLXqiuw1dLGPjUfONp zGVhnnfr|4yPZeu}j_@6E@wS>DxI8m>eZ_9+Z+qU<9=XPF;4+`D$a=HxX$IdoJd*O; z^c6nUzgZi~eU7uR^-cbL0hN}`H!Fj0R7(GtG@z#w?J$BXk-E*~xYKRp2a7k9{ErBoxUW<7QM+zXh?U-?ty7j( ztGwK2)7)amiB&kcjNKn6~`7`5bKb>p|ITI-*#@kIp3fDI~>0* z{gT*>@0-dZ{{FR0lAIE}^@`y$>pfyUVN0&^{B&SBGpVXE&#Uv1-QI=KOr|nxSu88| zM|?>6yLm%`&F7W3Lbd&F2ZZsZ2s++!+arxcDpnaS3TL=s5bFYu|aN{NuD|3Y{;D^WQe+EURk%Ch?#zJim52_e}G~ zJ&ZF91Fi+%-gUf+S?<@h57T#_yR|~Bz|8t3^PG)rN471y^DVo}#`ykJY0iCD^zv=J z|6ZJZBjWw0p!>SPg-`2tBu?LJ&v-FZZO85IYbVQ$_F}nGCw~L z486Ddq|Q3Cu*MGYr+bX9v3h4ke-~c8XIn{azR*3BvoV*KdwosieQ&X8$Fsnlug|e& zZhg=3XHwP%qditq!f|Z;&;LibRaK_FG!}V#(e1*Ob;{3N|xBa_x#5-9F-4JI1{~ZNKEU<3^U_>IcXjH%e}LF_@2roIxi^NH^r9i zvH!<8vt~q^>xd@Jd{&{hc0;@StcKXGNohjT32Sy*p8vV%+&|ZydzT$9TAcmAp(|!~ znsbKg!~;(^9{Y0f%X!NiOFp{B{3{Q7W&5Ea_w5z-eAbjHQM=1#Uf?Y~cVhYcRZ`4M z*FMg&70CO3#I0s#{W|aZDcS7;OHvm1X5LahYZ7pNLH^@#!Qoa-NF z`#)JCz3R}Py4MnX>r5{C9g?=NDZTyXdRY3?D!FclOQMrK<^@gpx^3qE$8XY~uigLs z%*pGE%+z0}+P?9R&sgQhESeZ@DRK0YUhcGwYYcq#vQp0+F|nQPWnIp_MU6MTeD3_z zGhJGptFzgjd`?q*U-6-;P+an4xaAh^Ov|@fAO8f;)97EIKD9g7`@%w-%kSnpT={!x ze;d!^XB}T7>i+&(I=h^N03 zOAIILWF0-)BX|CN^JhopwCh~^XQ=(C&MoFWk-@p`N94CF8E1YK%?|XPrz=^Ta64aO`5aaw&C4^VFJtKyUe#pB_NIOpn@z3BMya-X+h>Qx z?eBhgdu6Tf8pZJYX8*19t~ z*};cJ`xKXX^?7u!wS0DJCR4}*#@6ZkRf;Y*Pt7-ZZ{IXq^k~U{PK%=-e?C32sMBvo z_JyWbtXwgkQ;oVyPTL!(%@(w55wc2ahh51+BeiHVZdDG2FB1Vh;>)LUw)!x$n_1sKTk2!z!m%cmn zC?!VA@x4W4YfSLxv;PvWiGMWWaf#byxOunzmXuAK7iAc}@jtj`@!gBNxZ8FYFblq@ z^L`vTbN0dCAtJXqr|sLjHsrZTdGV@{Yn${IB^)^Y`N)m9JjVF_57u#qta#GIW$|qO zE0&hDog8k~F*9$kUT|CLQ|S9t-SuI`t0sr1Z|RveBjmQk6@2bnNWu>Fy&3$Kz zTj%Ji_nF&$6?!V&{OWLDd7W|VeI>d6b3x~BeaK>Es@=8S|IBXwE%Ot0bTH0Zr@naS z0})~8<0oD3IBq?7TA}>O;WpVG?{n2#&Xs=`jsGHLImy-iLBj7T|Dzk_<7JjsHSrw| z548L&ap*^zaf@78&s478dsglC4>{(e?h`D3Yue!{He0t@9L@`3ee3!qY=PM6In9?@ z1%J(4zkO-Z`_oyh=QVe&{5b16$JcPr!}l*6=~LUwnT$H(n*b%fru2&h_Zd@1KwA-F{#C$vSkQcIU2x_9vE}{*Wu|#B#=5 ztHIs#SS!yihq+AqQ#h9XQsq9peWk(6qsoWYdrF(!k;qE-)A2~3b^FFOvxRq!k35*R ze%7oV0Ww_Ci%&htn*AYv-gY|yT?dwv^WJTI{&V6Q{`U`3r&>)lt|^TY+_b}tHvwEN2Y^cHjU>BB90f7k9^P_VT2 zR$G4VL&-|R1uFYLDy-e#-CNQSx9Nf4YVo;Tm%H!#yV-7f9~1w?AZPc%>q}m1Ue36_ zG4eU*eBIu@9R2rq%>Ulg$t+cvbUB1|#f4QS`S+!SH|`Bs`cvzUp=0KvKdjs4X11SZ z>NY46K4;ZG<1ojeEmJGSX55IKwcvotg=;Tr8xGX3sPtcTNBEN9L)L{`^wV$q+b?=! zvLqs{*;$eEY|LUEec2D+R;*RtE^(^;ZChEi3!m??({F+d8O^UauXbSe_&h^%i51tG z+H2R|=-R(aSbc(Bnd|vNEA@5L)o1TN?DdLs@vQqE5f|rJ{*{hVSbBhA&+*zbzkRo# zdh}6!V${K?cD^}!bB&gkEtq&I-_p>z>D#8nkI|1P&SO(krZKesw%KLnx}|N|a*$@kM{)xVN3{UUT;H z+fP>i+a51|wp+1O?G)P{<6{f1$y}bS+#&KdNNT#-v1O0BI#%m7t7>ODoGJc>jHHa(V*SjTKvV)h4gA&fk6IzEeB@%0Ncno2h}> zW2~Uv()-XKtL~f%-u~mj_M8^sn@`M2uF9FR&bM!qPJZ0)dq-MOI#a)}-?Hv>i<7N) zT*b9auRlfyf6B`3?Re_HWr<}2-?FBqN!A-X`aZZ{?3yaRkXLZ$lfI-iY!MY#MVlG^ zTmMTxA7EAZRr~JNGM0S1`@YRLwl49sSv`mCA|GR5-S47sodvVKCgVY*hkRMxNCB5O<5T#8GwOYLJ%7S=gko#-&7X2I2&Yi~|pAH}=&sL8cA zZ=38S_0?Xlt1RN$s1xpZkLCUUMA@sVy7!*{jD6KSam9;`X2%mReNfzLvH8dLQx`

KAfy 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 H$G`vp69<`! literal 0 HcmV?d00001 diff --git a/src/cocoa/zdoom.xib b/src/cocoa/zdoom.xib new file mode 100644 index 000000000..56099dc4b --- /dev/null +++ b/src/cocoa/zdoom.xib @@ -0,0 +1,874 @@ + + + + 1060 + 11C74 + 851 + 1138.23 + 567.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 851 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + NSFontManager + + + Main Menu + + YES + + + ZDoom + + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + ZDoom + + YES + + + About ZDoom + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Services + + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 2147483647 + + + + + + Hide ZDoom + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Quit ZDoom + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + Edit + + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + + + + Window + + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bring All to Front + + 2147483647 + + + + + _NSWindowsMenu + + + + _NSMainMenu + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performZoom: + + + + 240 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + terminate: + + + + 369 + + + + unhideAllApplications: + + + + 370 + + + + cut: + + + + 738 + + + + paste: + + + + 739 + + + + redo: + + + + 742 + + + + undo: + + + + 746 + + + + copy: + + + + 752 + + + + delete: + + + + 753 + + + + selectAll: + + + + 755 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 371 + + + + + 681 + + + YES + + + + + + 682 + + + YES + + + + + + + + + + + + + 683 + + + + + 684 + + + + + 685 + + + + + 686 + + + + + 687 + + + + + 688 + + + + + 690 + + + + + 691 + + + + + + + YES + + YES + -3.IBPluginDependency + 129.IBPluginDependency + 129.ImportedFromIB2 + 130.IBPluginDependency + 130.ImportedFromIB2 + 130.editorWindowContentRectSynchronizationRect + 131.IBPluginDependency + 131.ImportedFromIB2 + 134.IBPluginDependency + 134.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 143.IBPluginDependency + 143.ImportedFromIB2 + 144.IBPluginDependency + 144.ImportedFromIB2 + 145.IBPluginDependency + 145.ImportedFromIB2 + 149.IBPluginDependency + 149.ImportedFromIB2 + 150.IBPluginDependency + 150.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 236.IBPluginDependency + 236.ImportedFromIB2 + 239.IBPluginDependency + 239.ImportedFromIB2 + 24.IBEditorWindowLastContentRect + 24.IBPluginDependency + 24.ImportedFromIB2 + 24.editorWindowContentRectSynchronizationRect + 29.IBEditorWindowLastContentRect + 29.IBPluginDependency + 29.ImportedFromIB2 + 29.WindowOrigin + 29.editorWindowContentRectSynchronizationRect + 5.IBPluginDependency + 5.ImportedFromIB2 + 56.IBPluginDependency + 56.ImportedFromIB2 + 57.IBEditorWindowLastContentRect + 57.IBPluginDependency + 57.ImportedFromIB2 + 57.editorWindowContentRectSynchronizationRect + 58.IBPluginDependency + 58.ImportedFromIB2 + 681.IBPluginDependency + 682.IBEditorWindowLastContentRect + 682.IBPluginDependency + 683.IBPluginDependency + 684.IBPluginDependency + 685.IBPluginDependency + 686.IBPluginDependency + 687.IBPluginDependency + 688.IBPluginDependency + 690.IBPluginDependency + 691.IBPluginDependency + 92.IBPluginDependency + 92.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{436, 809}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{651, 262}, {194, 73}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{525, 802}, {197, 73}} + {{514, 335}, {220, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + {74, 862} + {{11, 977}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{487, 217}, {195, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{23, 794}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + {{607, 182}, {151, 153}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + + YES + + + + + YES + + + YES + + + + 842 + + + + YES + + NSObject + + IBFrameworkSource + Print.framework/Headers/PDEPluginInterface.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ZDoom.xcodeproj + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {9, 8} + {7, 2} + + + +