{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200 {\fonttbl\f0\fnil\fcharset0 Menlo-Regular;\f1\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;\red170\green13\blue145; \red92\green38\blue153;\red0\green116\blue0;\red46\green13\blue110;\red63\green110\blue116;\red38\green71\blue75; \red28\green0\blue207;\red196\green26\blue22;} {\*\expandedcolortbl;;\csgenericrgb\c0\c0\c0;\csgray\c100000;\csgenericrgb\c66500\c5200\c56900; \csgenericrgb\c35900\c14900\c60100;\csgenericrgb\c0\c45600\c0;\csgenericrgb\c18100\c5200\c43100;\csgenericrgb\c24700\c43100\c45600;\csgenericrgb\c14900\c27800\c29400; \csgenericrgb\c11000\c0\c81000;\csgenericrgb\c77000\c10200\c8600;} \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0 \deftab543 \pard\tx543\pardeftab543\pardirnatural\partightenfactor0 \f0\fs22 \cf2 \cb3 \cf4 func\cf2 application(\cf4 _\cf2 application: \cf5 UIApplication\cf2 , didFinishLaunchingWithOptions launchOptions: [\cf5 UIApplicationLaunchOptionsKey\cf2 : \cf4 Any\cf2 ]?) -> \cf5 Bool\cf2 \{\ \cf6 \cb3 //// Disabled Fast Image Cache Generation \f1\fs24 \cf0 \cb3 \ \f0\fs22 \cf2 \cf4 let\cf2 notificationSettings = \cf5 UIUserNotificationSettings\cf2 (types: [.\cf5 alert\cf2 , .\cf5 sound\cf2 ], categories: \cf4 nil\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf5 UIApplication\cf2 .\cf5 shared\cf2 .\cf7 \cb3 registerUserNotificationSettings\cf2 \cb3 (notificationSettings) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 application.\cf7 \cb3 registerForRemoteNotifications\cf2 \cb3 ()\ \ \cf4 if\cf2 \cf4 let\cf2 doorPhoneClientConfiguration = \cf8 databaseInterface\cf2 .\cf9 getSIPServerDetails\cf2 () \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 isSIPConfigured\cf2 = \cf4 true \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 #available\cf2 (\cf4 iOS\cf2 \cf10 10.0\cf2 , *) \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf5 UNUserNotificationCenter\cf2 .\cf7 \cb3 current\cf2 \cb3 ().\cf7 \cb3 requestAuthorization\cf2 \cb3 (options: [.\cf5 alert\cf2 , .\cf5 sound\cf2 ]) \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 (granted, error) \cf4 in \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf6 \cb3 //Parse errors and track state \f1\fs24 \cf0 \cb3 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \cf4 else\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf6 \cb3 // Fallback on earlier versions \f1\fs24 \cf0 \cb3 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \ \ \f0\fs22 \cf2 application.\cf7 \cb3 registerUserNotificationSettings\cf2 \cb3 (\cf5 UIUserNotificationSettings\cf2 (types: [.\cf5 alert\cf2 , .\cf5 sound\cf2 ], categories: \cf5 Set\cf2 (arrayLiteral: \cf4 self\cf2 .\cf9 getCallNotificationCategory\cf2 ()))) \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 let\cf2 linphoneManager = \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 backgroundModePreference = linphoneManager?.\cf9 lpConfigBool\cf2 (forKey: \cf11 \cb3 "backgroundmode_preference"\cf2 \cb3 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 startAtBootPreference = linphoneManager?.\cf9 lpConfigBool\cf2 (forKey: \cf11 \cb3 "start_at_boot_preference"\cf2 \cb3 ) \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 if\cf2 (application.\cf5 applicationState\cf2 == .\cf7 \cb3 background\cf2 \cb3 ) && (!startAtBootPreference! || !backgroundModePreference!) \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 return\cf2 \cf4 true \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 backgroundTaskIdentifier\cf2 = application.\cf7 \cb3 beginBackgroundTask\cf2 \cb3 (expirationHandler: \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 () -> \cf5 Void\cf2 \cf4 in \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 application.\cf7 \cb3 endBackgroundTask\cf2 \cb3 (\cf4 self\cf2 .\cf8 backgroundTaskIdentifier\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \}) \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 linphoneManager?.\cf9 startLinphoneCore\cf2 () \f1\fs24 \cf0 \ \ \ \f0\fs22 \cf2 \cf4 if\cf2 doorPhoneClientConfiguration.\cf5 count\cf2 > \cf10 0\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 username = doorPhoneClientConfiguration[\cf11 \cb3 "UserName"\cf2 \cb3 ] \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 password = doorPhoneClientConfiguration[\cf11 \cb3 "Password"\cf2 \cb3 ] \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 domain = doorPhoneClientConfiguration[\cf11 \cb3 "Domain"\cf2 \cb3 ] \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 network = \cf11 \cb3 "TCP"\cf6 //doorPhoneClientConfiguration["Network"] \f1\fs24 \cf0 \cb3 \ \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 addProxyConfig\cf2 (username, password: password, domain: domain, withTransport: network) \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 self\cf2 .\cf8 backgroundTaskIdentifier\cf2 != \cf5 UIBackgroundTaskInvalid\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 application.\cf7 \cb3 endBackgroundTask\cf2 \cb3 (\cf4 self\cf2 .\cf8 backgroundTaskIdentifier\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \}\ \}\cf4 \ \ \ public\cf2 \cf4 func\cf2 pushRegistry(\cf4 _\cf2 registry: \cf5 PKPushRegistry\cf2 , didReceiveIncomingPushWith payload: \cf5 PKPushPayload\cf2 , forType type: \cf5 PKPushType\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf5 UIApplication\cf2 .\cf5 shared\cf2 .\cf5 applicationState\cf2 == \cf5 UIApplicationState\cf2 .\cf7 \cb3 background\cf2 \cb3 || \cf5 UIApplication\cf2 .\cf5 shared\cf2 .\cf5 applicationState\cf2 == \cf5 UIApplicationState\cf2 .\cf7 \cb3 inactive\cf2 \cb3 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 callFlag\cf2 = \cf10 0 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 #available\cf2 (\cf4 iOS\cf2 \cf10 10.0\cf2 , *) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \{ \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 let\cf2 aps = payload.\cf5 dictionaryPayload\cf2 [\cf11 \cb3 "aps"\cf2 \cb3 ] \cf4 as\cf2 ? \cf5 NSDictionary\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 let\cf2 alert = aps[\cf11 \cb3 "alert"\cf2 \cb3 ] \cf4 as\cf2 ? \cf5 String\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 (alert == \cf11 \cb3 "missed"\cf2 \cb3 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 callFlag\cf2 = \cf10 8 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 notificationTimer\cf2 = \cf5 Timer\cf2 .\cf7 \cb3 scheduledTimer\cf2 \cb3 (timeInterval: \cf10 1.0\cf2 , target: \cf4 self\cf2 , selector: \cf4 #selector\cf2 (\cf4 self\cf2 .\cf9 videoUpdateSeekSlider\cf2 ), userInfo: \cf8 localNotification\cf2 , repeats: \cf4 false\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 else\cf2 \cf4 if\cf2 (alert == \cf11 \cb3 "accepted"\cf2 \cb3 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 callFlag\cf2 = \cf10 5 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 notificationTimer\cf2 = \cf5 Timer\cf2 .\cf7 \cb3 scheduledTimer\cf2 \cb3 (timeInterval: \cf10 1.0\cf2 , target: \cf4 self\cf2 , selector: \cf4 #selector\cf2 (\cf4 self\cf2 .\cf9 videoUpdateSeekSlider\cf2 ), userInfo: \cf8 localNotification\cf2 , repeats: \cf4 false\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 else \f1\fs24 \cf0 \ \f0\fs22 \cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 localNotification\cf2 .\cf5 alertBody\cf2 = \cf11 \cb3 "Incoming Call" \f1\fs24 \cf0 \cb3 \ \f0\fs22 \cf2 \cf8 localNotification\cf2 .\cf5 applicationIconBadgeNumber\cf2 = \cf10 0\cf2 ; \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 localNotification\cf2 .\cf5 soundName\cf2 = \cf11 \cb3 "defaulttone.wav" \f1\fs24 \cf0 \cb3 \ \f0\fs22 \cf2 \cf5 UIApplication\cf2 .\cf5 shared\cf2 .\cf7 \cb3 presentLocalNotificationNow\cf2 \cb3 (\cf8 localNotification\cf2 ); \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf8 notificationTimer\cf2 = \cf5 Timer\cf2 .\cf7 \cb3 scheduledTimer\cf2 \cb3 (timeInterval: \cf10 5.0\cf2 , target: \cf4 self\cf2 , selector: \cf4 #selector\cf2 (\cf4 self\cf2 .\cf9 videoUpdateSeekSlider\cf2 ), userInfo: \cf8 localNotification\cf2 , repeats: \cf4 true\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf8 connectivity\cf2 = \cf8 none\cf2 ; \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 setupNetworkReachabilityCallback\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 resetLinphoneCore\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 refreshRegisters\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 startLinphoneCore\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 becomeActive\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 socketConnection\cf2 .\cf9 startAccepting\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 currentCall = \cf9 linphone_core_get_current_call\cf2 (\cf8 LinphoneManager\cf2 .\cf9 linphoneCore\cf2 ()) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 // getting nil object in currentCall \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \}\ \ \ \ \ \ \ \ \cf4 func\cf2 applicationDidBecomeActive(\cf4 _\cf2 application: \cf5 UIApplication\cf2 ) \{ \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf8 isConfigurationAvailable\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 self\cf2 .\cf9 updateApplicationContent\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 self\cf2 .\cf8 isSIPConfigured\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 becomeActive\cf2 () \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 startLinphoneCore\cf2 () \f1\fs24 \cf0 \ \ \ \f0\fs22 \cf2 \cf4 let\cf2 currentCall = \cf9 linphone_core_get_current_call\cf2 (\cf8 LinphoneManager\cf2 .\cf9 linphoneCore\cf2 ()) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 currentCall != \cf4 nil\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 var\cf2 callContext = \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf8 currentCallContextBeforeGoingBackground \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 if\cf2 currentCall == callContext.\cf8 call\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf9 linphone_call_params_video_enabled\cf2 (\cf9 linphone_call_get_current_params\cf2 (currentCall)) == \cf10 1\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf9 linphone_call_enable_camera\cf2 (currentCall, \cf10 0\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 callContext.\cf8 call\cf2 = \cf5 OpaquePointer\cf2 (bitPattern: \cf10 0\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 self\cf2 .\cf8 isDoorPhoneCallActive\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 let\cf2 rootViewController = application.\cf5 keyWindow\cf2 ?.\cf5 rootViewController\cf2 \cf4 as\cf2 ? \cf8 RootViewController\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 rootViewController.\cf5 presentedViewController\cf2 \cf4 as\cf2 ? \cf8 DoorPhoneViewController\cf2 == \cf4 nil\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 rootViewController.\cf9 callSegueForVideoDoor\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \}\ \ \ \ \ \cf4 func\cf2 applicationWillResignActive(\cf4 _\cf2 application: \cf5 UIApplication\cf2 ) \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 self\cf2 .\cf8 isSIPConfigured\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 currentCall = \cf9 linphone_core_get_current_call\cf2 (\cf8 LinphoneManager\cf2 .\cf9 linphoneCore\cf2 ()) \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 if\cf2 currentCall != \cf4 nil\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 let\cf2 linphoneManager = \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 var\cf2 callContext = linphoneManager?.\cf8 currentCallContextBeforeGoingBackground \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 callContext?.\cf8 call\cf2 = currentCall \f1\fs24 \cf0 \ \f0\fs22 \cf2 callContext?.\cf8 cameraIsEnabled\cf2 = \cf10 0 \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 if\cf2 \cf9 linphone_call_params_video_enabled\cf2 (\cf9 linphone_call_get_current_params\cf2 (currentCall)) == \cf10 1\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf9 linphone_call_enable_camera\cf2 (currentCall, \cf10 0\cf2 ) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 if\cf2 (!\cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 resignActive\cf2 ())\{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 func\cf2 applicationDidEnterBackground(\cf4 _\cf2 application: \cf5 UIApplication\cf2 ) \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 self\cf2 .\cf8 isSIPConfigured\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 enterBackgroundMode\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf8 socketConnection\cf2 .\cf9 stopAccepting\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \ \f0\fs22 \cf2 \cf4 func\cf2 applicationWillTerminate(\cf4 _\cf2 application: \cf5 UIApplication\cf2 ) \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf4 if\cf2 \cf4 self\cf2 .\cf8 isSIPConfigured\cf2 \{ \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf9 linphone_core_terminate_all_calls\cf2 (\cf8 LinphoneManager\cf2 .\cf9 linphoneCore\cf2 ()) \f1\fs24 \cf0 \ \f0\fs22 \cf2 \cf8 LinphoneManager\cf2 .\cf9 instance\cf2 ().\cf9 destroyLinphoneCore\cf2 () \f1\fs24 \cf0 \ \f0\fs22 \cf2 \} \f1\fs24 \cf0 \ \f0\fs22 \cf2 \}}