From 2dfd9ceda39c26c3a46d69df0310f57bb353b7b3 Mon Sep 17 00:00:00 2001 From: Ryan Wilson Date: Tue, 7 Jan 2020 10:27:04 -0500 Subject: [PATCH] Open Sourcing FirebaseCrashlytics Co-authored-by: Jason Hu Co-authored-by: Bryan Klimt --- Crashlytics/CHANGELOG.md | 8 + .../Components/FIRCLSApplication.h | 88 ++ .../Components/FIRCLSApplication.m | 211 ++++ .../Components/FIRCLSBinaryImage.h | 81 ++ .../Components/FIRCLSBinaryImage.m | 571 +++++++++++ .../Crashlytics/Components/FIRCLSContext.h | 106 +++ .../Crashlytics/Components/FIRCLSContext.m | 400 ++++++++ .../Components/FIRCLSCrashedMarkerFile.c | 31 + .../Components/FIRCLSCrashedMarkerFile.h | 19 + .../Crashlytics/Components/FIRCLSGlobals.h | 28 + .../Crashlytics/Components/FIRCLSHost.h | 37 + .../Crashlytics/Components/FIRCLSHost.m | 161 ++++ .../Crashlytics/Components/FIRCLSProcess.c | 806 ++++++++++++++++ .../Crashlytics/Components/FIRCLSProcess.h | 45 + .../Components/FIRCLSUserLogging.h | 103 ++ .../Components/FIRCLSUserLogging.m | 531 +++++++++++ .../Controllers/FIRCLSNetworkClient.h | 61 ++ .../Controllers/FIRCLSNetworkClient.m | 362 +++++++ .../Controllers/FIRCLSReportManager.h | 53 ++ .../Controllers/FIRCLSReportManager.m | 897 +++++++++++++++++ .../Controllers/FIRCLSReportManager_Private.h | 34 + .../Controllers/FIRCLSReportUploader.h | 77 ++ .../Controllers/FIRCLSReportUploader.m | 274 ++++++ .../FIRCLSReportUploader_Private.h | 23 + .../FIRCLSDataCollectionArbiter.h | 39 + .../FIRCLSDataCollectionArbiter.m | 143 +++ .../FIRCLSDataCollectionToken.h | 45 + .../FIRCLSDataCollectionToken.m | 27 + .../FIRCLSURLSession/FIRCLSURLSession.h | 84 ++ .../FIRCLSURLSession/FIRCLSURLSession.m | 346 +++++++ .../FIRCLSURLSessionAvailability.h | 28 + .../FIRCLSURLSessionConfiguration.h | 42 + .../FIRCLSURLSessionConfiguration.m | 92 ++ .../FIRCLSURLSession_PrivateMethods.h | 27 + .../Tasks/FIRCLSURLSessionDataTask.h | 32 + .../Tasks/FIRCLSURLSessionDataTask.m | 120 +++ .../FIRCLSURLSessionDataTask_PrivateMethods.h | 43 + .../Tasks/FIRCLSURLSessionDownloadTask.h | 31 + .../Tasks/FIRCLSURLSessionDownloadTask.m | 157 +++ ...CLSURLSessionDownloadTask_PrivateMethods.h | 39 + .../Tasks/FIRCLSURLSessionTask.h | 38 + .../Tasks/FIRCLSURLSessionTask.m | 95 ++ .../FIRCLSURLSessionTask_PrivateMethods.h | 55 ++ .../Tasks/FIRCLSURLSessionUploadTask.h | 25 + .../Tasks/FIRCLSURLSessionUploadTask.m | 28 + .../FIRCLSUserDefaults/FIRCLSUserDefaults.h | 42 + .../FIRCLSUserDefaults/FIRCLSUserDefaults.m | 372 ++++++++ .../FIRCLSUserDefaults_private.h | 23 + Crashlytics/Crashlytics/FIRCrashlytics.m | 302 ++++++ .../Crashlytics/Handlers/FIRCLSException.h | 71 ++ .../Crashlytics/Handlers/FIRCLSException.mm | 413 ++++++++ .../Crashlytics/Handlers/FIRCLSHandler.h | 26 + .../Crashlytics/Handlers/FIRCLSHandler.m | 61 ++ .../Handlers/FIRCLSMachException.c | 453 +++++++++ .../Handlers/FIRCLSMachException.h | 78 ++ .../Crashlytics/Handlers/FIRCLSSignal.c | 323 +++++++ .../Crashlytics/Handlers/FIRCLSSignal.h | 50 + .../Crashlytics/Helpers/FIRAEvent+Internal.h | 23 + .../Crashlytics/Helpers/FIRAEvent+Internal.m | 42 + Crashlytics/Crashlytics/Helpers/FIRAEvent.h | 79 ++ Crashlytics/Crashlytics/Helpers/FIRAValue.h | 69 ++ .../Crashlytics/Helpers/FIRCLSAllocate.c | 208 ++++ .../Crashlytics/Helpers/FIRCLSAllocate.h | 54 ++ .../Crashlytics/Helpers/FIRCLSDefines.h | 81 ++ .../Crashlytics/Helpers/FIRCLSFCRAnalytics.h | 32 + .../Crashlytics/Helpers/FIRCLSFCRAnalytics.m | 90 ++ .../Crashlytics/Helpers/FIRCLSFeatures.h | 31 + Crashlytics/Crashlytics/Helpers/FIRCLSFile.h | 104 ++ Crashlytics/Crashlytics/Helpers/FIRCLSFile.m | 692 ++++++++++++++ .../Helpers/FIRCLSInternalLogging.c | 101 ++ .../Helpers/FIRCLSInternalLogging.h | 57 ++ .../Crashlytics/Helpers/FIRCLSLogger.h | 24 + .../Crashlytics/Helpers/FIRCLSLogger.m | 52 + .../Crashlytics/Helpers/FIRCLSProfiling.c | 47 + .../Crashlytics/Helpers/FIRCLSProfiling.h | 29 + .../Crashlytics/Helpers/FIRCLSThreadState.c | 145 +++ .../Crashlytics/Helpers/FIRCLSThreadState.h | 57 ++ .../Crashlytics/Helpers/FIRCLSUtility.h | 54 ++ .../Crashlytics/Helpers/FIRCLSUtility.m | 213 +++++ .../Models/FIRCLSExecutionIdentifierModel.h | 33 + .../Models/FIRCLSExecutionIdentifierModel.m | 33 + .../Crashlytics/Models/FIRCLSFileManager.h | 82 ++ .../Crashlytics/Models/FIRCLSFileManager.m | 331 +++++++ .../Models/FIRCLSInstallIdentifierModel.h | 46 + .../Models/FIRCLSInstallIdentifierModel.m | 160 ++++ .../Crashlytics/Models/FIRCLSInternalReport.h | 113 +++ .../Crashlytics/Models/FIRCLSInternalReport.m | 242 +++++ Crashlytics/Crashlytics/Models/FIRCLSReport.h | 110 +++ Crashlytics/Crashlytics/Models/FIRCLSReport.m | 239 +++++ .../Crashlytics/Models/FIRCLSReport_Private.h | 27 + .../Crashlytics/Models/FIRCLSSettings.h | 125 +++ .../Crashlytics/Models/FIRCLSSettings.m | 325 +++++++ .../Crashlytics/Models/FIRCLSStackFrame.h | 44 + .../Crashlytics/Models/FIRCLSStackFrame.m | 50 + .../Crashlytics/Models/FIRCLSSymbolResolver.h | 26 + .../Crashlytics/Models/FIRCLSSymbolResolver.m | 175 ++++ .../Operations/FIRCLSAsyncOperation.h | 23 + .../Operations/FIRCLSAsyncOperation.m | 135 +++ .../Operations/FIRCLSAsyncOperation_Private.h | 24 + .../Reports/FIRCLSPackageReportOperation.h | 35 + .../Reports/FIRCLSPackageReportOperation.m | 210 ++++ .../Reports/FIRCLSProcessReportOperation.h | 30 + .../Reports/FIRCLSProcessReportOperation.m | 113 +++ .../Symbolication/FIRCLSDemangleOperation.h | 24 + .../Symbolication/FIRCLSDemangleOperation.mm | 96 ++ ...RCLSSerializeSymbolicatedFramesOperation.h | 21 + ...RCLSSerializeSymbolicatedFramesOperation.m | 63 ++ .../FIRCLSSymbolicationOperation.h | 23 + .../FIRCLSSymbolicationOperation.m | 28 + .../FIRCLSThreadArrayOperation.h | 25 + .../FIRCLSThreadArrayOperation.m | 33 + .../Crashlytics/Public/FIRCrashlytics.h | 173 ++++ .../Crashlytics/Public/FirebaseCrashlytics.h | 17 + .../FIRCLSSettingsOnboardingManager.h | 54 ++ .../FIRCLSSettingsOnboardingManager.m | 229 +++++ .../Models/FIRCLSApplicationIdentifierModel.h | 64 ++ .../Models/FIRCLSApplicationIdentifierModel.m | 134 +++ .../FIRCLSDownloadAndSaveSettingsOperation.h | 80 ++ .../FIRCLSDownloadAndSaveSettingsOperation.m | 132 +++ .../Operations/FIRCLSNetworkOperation.h | 55 ++ .../Operations/FIRCLSNetworkOperation.m | 92 ++ .../Operations/FIRCLSOnboardingOperation.h | 84 ++ .../Operations/FIRCLSOnboardingOperation.m | 208 ++++ .../Unwind/Compact/FIRCLSCompactUnwind.c | 374 ++++++++ .../Unwind/Compact/FIRCLSCompactUnwind.h | 67 ++ .../Compact/FIRCLSCompactUnwind_Private.h | 28 + .../Unwind/Dwarf/FIRCLSDataParsing.c | 237 +++++ .../Unwind/Dwarf/FIRCLSDataParsing.h | 46 + .../Dwarf/FIRCLSDwarfExpressionMachine.c | 466 +++++++++ .../Dwarf/FIRCLSDwarfExpressionMachine.h | 53 ++ .../Unwind/Dwarf/FIRCLSDwarfUnwind.c | 899 ++++++++++++++++++ .../Unwind/Dwarf/FIRCLSDwarfUnwind.h | 139 +++ .../Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h | 150 +++ Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c | 315 ++++++ Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h | 53 ++ .../Crashlytics/Unwind/FIRCLSUnwind_arch.h | 33 + .../Crashlytics/Unwind/FIRCLSUnwind_arm.c | 215 +++++ .../Crashlytics/Unwind/FIRCLSUnwind_x86.c | 430 +++++++++ .../Crashlytics/Unwind/FIRCLSUnwind_x86.h | 76 ++ Crashlytics/README.md | 28 + Crashlytics/Shared/FIRCLSByteUtility.h | 41 + Crashlytics/Shared/FIRCLSByteUtility.m | 116 +++ Crashlytics/Shared/FIRCLSConstants.h | 45 + Crashlytics/Shared/FIRCLSConstants.m | 49 + Crashlytics/Shared/FIRCLSFABHost.h | 35 + Crashlytics/Shared/FIRCLSFABHost.m | 119 +++ .../Shared/FIRCLSMachO/FIRCLSCodeMapping.h | 34 + .../Shared/FIRCLSMachO/FIRCLSCodeMapping.m | 40 + Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h | 110 +++ Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m | 506 ++++++++++ .../Shared/FIRCLSMachO/FIRCLSMachOBinary.h | 41 + .../Shared/FIRCLSMachO/FIRCLSMachOBinary.m | 171 ++++ .../Shared/FIRCLSMachO/FIRCLSMachOSlice.h | 37 + .../Shared/FIRCLSMachO/FIRCLSMachOSlice.m | 93 ++ Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h | 38 + Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m | 109 +++ .../FIRCLSNetworking/FIRCLSFABNetworkClient.h | 56 ++ .../FIRCLSNetworking/FIRCLSFABNetworkClient.m | 280 ++++++ .../FIRCLSMultipartMimeStreamEncoder.h | 88 ++ .../FIRCLSMultipartMimeStreamEncoder.m | 208 ++++ .../FIRCLSNetworkResponseHandler.h | 87 ++ .../FIRCLSNetworkResponseHandler.m | 290 ++++++ .../FIRCLSNetworking/FIRCLSURLBuilder.h | 44 + .../FIRCLSNetworking/FIRCLSURLBuilder.m | 103 ++ .../FIRCLSOperation/FIRCLSCompoundOperation.h | 58 ++ .../FIRCLSOperation/FIRCLSCompoundOperation.m | 165 ++++ .../FIRCLSOperation/FIRCLSFABAsyncOperation.h | 39 + .../FIRCLSOperation/FIRCLSFABAsyncOperation.m | 146 +++ .../FIRCLSFABAsyncOperation_Private.h | 32 + .../Shared/FIRCLSOperation/FIRCLSOperation.h | 19 + Crashlytics/Shared/FIRCLSUUID.h | 27 + Crashlytics/Shared/FIRCLSUUID.m | 39 + .../UnitTests/CrashlyticsKitTests-Info.plist | 22 + .../CrashlyticsKitTests-OSX-Prefix.pch | 23 + .../UnitTests/Data/10.9.3 libobjc.A.dylib | Bin 0 -> 3737344 bytes .../Data/10.9.4 libsystem_kernel.dylib | Bin 0 -> 511328 bytes Crashlytics/UnitTests/Data/DS_Store | Bin 0 -> 15364 bytes ...nary_images_with_null_base_entry.clsrecord | 6 + .../UnitTests/Data/exception.clsrecord | 7 + .../metadata_only_report/metadata.clsrecord | 4 + .../FABOperation/FABNetworkOperationTests.m | 43 + .../FABOperationInFlightCancellationTest.m | 154 +++ .../FABOperationPreFlightCancellationTest.m | 129 +++ .../FABOperation/FABTestAsyncOperation.h | 23 + .../FABOperation/FABTestAsyncOperation.m | 43 + .../FABOperation/FABTestExpectations.h | 59 ++ .../FABOperation/FABTestExpectations.m | 169 ++++ Crashlytics/UnitTests/FABURLBuilderTests.m | 56 ++ .../UnitTests/FIRCLSCompactUnwindTests.m | 176 ++++ .../FIRCLSDataCollectionArbiterTest.m | 165 ++++ .../UnitTests/FIRCLSDemangleOperationTests.m | 75 ++ .../UnitTests/FIRCLSDwarfExpressionTests.m | 142 +++ Crashlytics/UnitTests/FIRCLSDwarfTests.m | 171 ++++ .../UnitTests/FIRCLSFileManagerTests.m | 76 ++ Crashlytics/UnitTests/FIRCLSFileTests.m | 430 +++++++++ .../FIRCLSInstallIdentifierModelTests.m | 317 ++++++ .../UnitTests/FIRCLSInternalReportTests.m | 70 ++ Crashlytics/UnitTests/FIRCLSLoggingTests.m | 374 ++++++++ .../FIRCLSMachO/FIRCLSMachOBinaryTests.h | 19 + .../FIRCLSMachO/FIRCLSMachOBinaryTests.m | 51 + .../UnitTests/FIRCLSMachO/FIRCLSMachOTests.h | 19 + .../UnitTests/FIRCLSMachO/FIRCLSMachOTests.m | 331 +++++++ .../UnitTests/FIRCLSMachO/FIRCLSdSYMTests.h | 19 + .../UnitTests/FIRCLSMachO/FIRCLSdSYMTests.m | 54 ++ .../FIRCLSMachO/data/armv7-armv7s-arm64.dylib | Bin 0 -> 495440 bytes .../FIRCLSMachO/data/armv7-armv7s-executable | Bin 0 -> 715024 bytes .../armv7-armv7s.dSYM/Contents/Info.plist | 20 + .../Contents/Resources/DWARF/CrashTest | Bin 0 -> 1055283 bytes Crashlytics/UnitTests/FIRCLSMachO/data/armv7k | Bin 0 -> 914768 bytes .../i386-simulator.dSYM/Contents/Info.plist | 20 + .../Contents/Resources/DWARF/CrashTest | Bin 0 -> 549022 bytes .../UnitTests/FIRCLSMachO/data/tvos-binary | Bin 0 -> 849792 bytes .../FIRCLSMachO/data/tvsimulator-binary | Bin 0 -> 184068 bytes .../FIRCLSMachO/data/watchOS-simulator | Bin 0 -> 229920 bytes .../FIRCLSMachO/data/x86_64-executable | Bin 0 -> 238568 bytes .../FIRCLSPackageReportsOperationTests.m | 150 +++ .../FIRCLSProcessReportOperationTests.m | 108 +++ .../UnitTests/FIRCLSReportManagerTests.m | 570 +++++++++++ Crashlytics/UnitTests/FIRCLSReportTests.m | 130 +++ .../UnitTests/FIRCLSReportUploaderTests.m | 97 ++ Crashlytics/UnitTests/FIRCLSSettingsTests.m | 418 ++++++++ .../UnitTests/FIRCLSSymbolResolverTests.m | 65 ++ .../FIRCLSSymbolicationOperationTests.m | 74 ++ Crashlytics/UnitTests/FIRCLSURLSessionTests.m | 39 + .../UnitTests/FIRCLSUserDefaultsTests.m | 274 ++++++ Crashlytics/UnitTests/FIRCLSUtilityTests.m | 80 ++ .../Mocks/FABMockApplicationIdentifierModel.h | 31 + .../Mocks/FABMockApplicationIdentifierModel.m | 26 + Crashlytics/UnitTests/Mocks/FIRAppFake.h | 21 + Crashlytics/UnitTests/Mocks/FIRAppFake.m | 35 + .../UnitTests/Mocks/FIRCLSMockFileManager.h | 38 + .../UnitTests/Mocks/FIRCLSMockFileManager.m | 47 + .../UnitTests/Mocks/FIRCLSMockNetworkClient.h | 19 + .../UnitTests/Mocks/FIRCLSMockNetworkClient.m | 30 + .../UnitTests/Mocks/FIRCLSMockReportManager.h | 45 + .../UnitTests/Mocks/FIRCLSMockReportManager.m | 89 ++ .../Mocks/FIRCLSMockReportUploader.h | 22 + .../Mocks/FIRCLSMockReportUploader.m | 75 ++ .../UnitTests/Mocks/FIRCLSMockSettings.h | 22 + .../UnitTests/Mocks/FIRCLSMockSettings.m | 24 + .../Mocks/FIRCLSMockSymbolResolver.h | 21 + .../Mocks/FIRCLSMockSymbolResolver.m | 61 ++ .../UnitTests/Mocks/FIRMockInstanceID.h | 22 + .../UnitTests/Mocks/FIRMockInstanceID.m | 59 ++ ...binary_images_missing_base_entry.clsrecord | 6 + Crashlytics/run | 76 ++ Crashlytics/third_party/libunwind/LICENSE | 18 + Crashlytics/third_party/libunwind/dwarf.h | 256 +++++ Crashlytics/upload-symbols | Bin 0 -> 506752 bytes FirebaseCore/CHANGELOG.md | 2 +- FirebaseCrashlytics.podspec | 82 ++ .../Sources/ZipBuilder/FirebasePods.swift | 1 + .../Sources/ZipBuilder/ZipBuilder.swift | 17 + 253 files changed, 28697 insertions(+), 1 deletion(-) create mode 100644 Crashlytics/CHANGELOG.md create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSApplication.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSApplication.m create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSContext.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSContext.m create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSGlobals.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSHost.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSHost.m create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSProcess.c create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSProcess.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h create mode 100644 Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m create mode 100644 Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h create mode 100644 Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h create mode 100644 Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m create mode 100644 Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h create mode 100644 Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h create mode 100644 Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m create mode 100644 Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h create mode 100644 Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m create mode 100644 Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h create mode 100644 Crashlytics/Crashlytics/FIRCrashlytics.m create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSException.h create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSException.mm create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c create mode 100644 Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m create mode 100644 Crashlytics/Crashlytics/Helpers/FIRAEvent.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRAValue.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSFile.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSFile.m create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h create mode 100644 Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSFileManager.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSFileManager.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSReport.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSReport.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSSettings.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSSettings.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSStackFrame.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSStackFrame.m create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h create mode 100644 Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m create mode 100644 Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h create mode 100644 Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m create mode 100644 Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h create mode 100644 Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h create mode 100644 Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m create mode 100644 Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h create mode 100644 Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h create mode 100644 Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m create mode 100644 Crashlytics/Crashlytics/Public/FIRCrashlytics.h create mode 100644 Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h create mode 100644 Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h create mode 100644 Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m create mode 100644 Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h create mode 100644 Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m create mode 100644 Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h create mode 100644 Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m create mode 100644 Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h create mode 100644 Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m create mode 100644 Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h create mode 100644 Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m create mode 100644 Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c create mode 100644 Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h create mode 100644 Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h create mode 100644 Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c create mode 100644 Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h create mode 100644 Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c create mode 100644 Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h create mode 100644 Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c create mode 100644 Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h create mode 100644 Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h create mode 100644 Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c create mode 100644 Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h create mode 100644 Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h create mode 100644 Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c create mode 100644 Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c create mode 100644 Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h create mode 100644 Crashlytics/README.md create mode 100644 Crashlytics/Shared/FIRCLSByteUtility.h create mode 100644 Crashlytics/Shared/FIRCLSByteUtility.m create mode 100644 Crashlytics/Shared/FIRCLSConstants.h create mode 100644 Crashlytics/Shared/FIRCLSConstants.m create mode 100644 Crashlytics/Shared/FIRCLSFABHost.h create mode 100644 Crashlytics/Shared/FIRCLSFABHost.m create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h create mode 100644 Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h create mode 100644 Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m create mode 100644 Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h create mode 100644 Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m create mode 100644 Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h create mode 100644 Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m create mode 100644 Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h create mode 100644 Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h create mode 100644 Crashlytics/Shared/FIRCLSUUID.h create mode 100644 Crashlytics/Shared/FIRCLSUUID.m create mode 100644 Crashlytics/UnitTests/CrashlyticsKitTests-Info.plist create mode 100644 Crashlytics/UnitTests/CrashlyticsKitTests-OSX-Prefix.pch create mode 100755 Crashlytics/UnitTests/Data/10.9.3 libobjc.A.dylib create mode 100755 Crashlytics/UnitTests/Data/10.9.4 libsystem_kernel.dylib create mode 100644 Crashlytics/UnitTests/Data/DS_Store create mode 100644 Crashlytics/UnitTests/Data/binary_images_with_null_base_entry.clsrecord create mode 100644 Crashlytics/UnitTests/Data/exception.clsrecord create mode 100644 Crashlytics/UnitTests/Data/metadata_only_report/metadata.clsrecord create mode 100644 Crashlytics/UnitTests/FABOperation/FABNetworkOperationTests.m create mode 100644 Crashlytics/UnitTests/FABOperation/FABOperationInFlightCancellationTest.m create mode 100644 Crashlytics/UnitTests/FABOperation/FABOperationPreFlightCancellationTest.m create mode 100644 Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.h create mode 100644 Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.m create mode 100644 Crashlytics/UnitTests/FABOperation/FABTestExpectations.h create mode 100644 Crashlytics/UnitTests/FABOperation/FABTestExpectations.m create mode 100644 Crashlytics/UnitTests/FABURLBuilderTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSCompactUnwindTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSDataCollectionArbiterTest.m create mode 100644 Crashlytics/UnitTests/FIRCLSDemangleOperationTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSDwarfExpressionTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSDwarfTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSFileManagerTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSFileTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSInstallIdentifierModelTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSInternalReportTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSLoggingTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.h create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.h create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.h create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.m create mode 100755 Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s-arm64.dylib create mode 100755 Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s-executable create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s.dSYM/Contents/Info.plist create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s.dSYM/Contents/Resources/DWARF/CrashTest create mode 100755 Crashlytics/UnitTests/FIRCLSMachO/data/armv7k create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/data/i386-simulator.dSYM/Contents/Info.plist create mode 100644 Crashlytics/UnitTests/FIRCLSMachO/data/i386-simulator.dSYM/Contents/Resources/DWARF/CrashTest create mode 100755 Crashlytics/UnitTests/FIRCLSMachO/data/tvos-binary create mode 100755 Crashlytics/UnitTests/FIRCLSMachO/data/tvsimulator-binary create mode 100755 Crashlytics/UnitTests/FIRCLSMachO/data/watchOS-simulator create mode 100755 Crashlytics/UnitTests/FIRCLSMachO/data/x86_64-executable create mode 100644 Crashlytics/UnitTests/FIRCLSPackageReportsOperationTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSProcessReportOperationTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSReportManagerTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSReportTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSReportUploaderTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSSettingsTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSSymbolResolverTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSSymbolicationOperationTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSURLSessionTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m create mode 100644 Crashlytics/UnitTests/FIRCLSUtilityTests.m create mode 100644 Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.h create mode 100644 Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRAppFake.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRAppFake.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.m create mode 100644 Crashlytics/UnitTests/Mocks/FIRMockInstanceID.h create mode 100644 Crashlytics/UnitTests/Mocks/FIRMockInstanceID.m create mode 100644 Crashlytics/UnitTests/binary_images_missing_base_entry.clsrecord create mode 100755 Crashlytics/run create mode 100644 Crashlytics/third_party/libunwind/LICENSE create mode 100644 Crashlytics/third_party/libunwind/dwarf.h create mode 100755 Crashlytics/upload-symbols create mode 100644 FirebaseCrashlytics.podspec diff --git a/Crashlytics/CHANGELOG.md b/Crashlytics/CHANGELOG.md new file mode 100644 index 000000000000..8d28439cea2e --- /dev/null +++ b/Crashlytics/CHANGELOG.md @@ -0,0 +1,8 @@ +# v4.0.0-beta.1 + +This Firebase Crashlytics version includes the initial beta release of the Firebase Crashlytics SDK: + + - [feature] The SDK is now open-sourced. Take a look in our [GitHub repository](https://github.com/firebase/firebase-ios-sdk/tree/master/Crashlytics). + - [feature] Added support for Catalyst (note that Crashlytics still supports tvOS and macOS). + - [feature] Added new APIs that are more consistent with other Firebase SDKs and more intuitive to use. The new APIs also give your users more control over how you collect their data. + - [removed] Removed the Fabric API Key. Now, Crashlytics uses the GoogleService-Info.plist file to associate your app with your project. If you linked your app from Fabric and want to upgrade to the new SDK, remove the Fabric API key from your `run` and `upload-symbols` scripts. We also recommend removing the Fabric section from your app's Info.plist (when you upgrade, Crashlytics uses the new configuration you set up in Firebase). diff --git a/Crashlytics/Crashlytics/Components/FIRCLSApplication.h b/Crashlytics/Crashlytics/Components/FIRCLSApplication.h new file mode 100644 index 000000000000..75536f7cdd81 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSApplication.h @@ -0,0 +1,88 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#if CLS_TARGET_OS_HAS_UIKIT +#import +#endif + +__BEGIN_DECLS + +#define FIRCLSApplicationActivityDefault \ + (NSActivitySuddenTerminationDisabled | NSActivityAutomaticTerminationDisabled) + +/** + * Type to indicate application installation source + */ +typedef NS_ENUM(NSInteger, FIRCLSApplicationInstallationSourceType) { + FIRCLSApplicationInstallationSourceTypeDeveloperInstall = 1, + // 2 and 3 are reserved for legacy values. + FIRCLSApplicationInstallationSourceTypeAppStore = 4 +}; + +/** + * Returns the application bundle identifier with occurences of "/" replaced by "_" + */ +NSString* FIRCLSApplicationGetBundleIdentifier(void); + +/** + * Returns the SDK's bundle ID + */ +NSString* FIRCLSApplicationGetSDKBundleID(void); + +/** + * Returns the platform identifier, either: ios, mac, or tvos. + * Catalyst apps are treated as mac. + */ +NSString* FIRCLSApplicationGetPlatform(void); + +/** + * Returns the user-facing app name + */ +NSString* FIRCLSApplicationGetName(void); + +/** + * Returns the build number + */ +NSString* FIRCLSApplicationGetBundleVersion(void); + +/** + * Returns the human-readable build version + */ +NSString* FIRCLSApplicationGetShortBundleVersion(void); + +/** + * Returns a number to indicate how the app has been installed: Developer / App Store + */ +FIRCLSApplicationInstallationSourceType FIRCLSApplicationInstallationSource(void); + +BOOL FIRCLSApplicationIsExtension(void); +NSString* FIRCLSApplicationExtensionPointIdentifier(void); + +#if CLS_TARGET_OS_HAS_UIKIT +UIApplication* FIRCLSApplicationSharedInstance(void); +#else +id FIRCLSApplicationSharedInstance(void); +#endif + +void FIRCLSApplicationOpenURL(NSURL* url, + NSExtensionContext* extensionContext, + void (^completionBlock)(BOOL success)); + +id FIRCLSApplicationBeginActivity(NSActivityOptions options, NSString* reason); +void FIRCLSApplicationEndActivity(id activity); + +void FIRCLSApplicationActivity(NSActivityOptions options, NSString* reason, void (^block)(void)); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Components/FIRCLSApplication.m b/Crashlytics/Crashlytics/Components/FIRCLSApplication.m new file mode 100644 index 000000000000..219b4bb7a2e4 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSApplication.m @@ -0,0 +1,211 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSApplication.h" + +#import "FIRCLSHost.h" +#import "FIRCLSUtility.h" + +#if CLS_TARGET_OS_OSX +#import +#endif + +#if CLS_TARGET_OS_HAS_UIKIT +#import +#endif + +NSString* FIRCLSApplicationGetBundleIdentifier(void) { + return [[[NSBundle mainBundle] bundleIdentifier] stringByReplacingOccurrencesOfString:@"/" + withString:@"_"]; +} + +NSString* FIRCLSApplicationGetSDKBundleID(void) { + return + [@"com.google.firebase.crashlytics." stringByAppendingString:FIRCLSApplicationGetPlatform()]; +} + +NSString* FIRCLSApplicationGetPlatform(void) { +#if defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST + return @"mac"; +#elif TARGET_OS_IOS + return @"ios"; +#elif TARGET_OS_OSX + return @"mac"; +#elif TARGET_OS_TV + return @"tvos"; +#endif +} + +// these defaults match the FIRCLSInfoPlist helper in FIRCLSIDEFoundation +NSString* FIRCLSApplicationGetBundleVersion(void) { + return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; +} + +NSString* FIRCLSApplicationGetShortBundleVersion(void) { + return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; +} + +NSString* FIRCLSApplicationGetName(void) { + NSString* name; + NSBundle* mainBundle; + + mainBundle = [NSBundle mainBundle]; + + name = [mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + if (name) { + return name; + } + + name = [mainBundle objectForInfoDictionaryKey:@"CFBundleName"]; + if (name) { + return name; + } + + return FIRCLSApplicationGetBundleVersion(); +} + +BOOL FIRCLSApplicationHasAppStoreReceipt(void) { + NSURL* url = NSBundle.mainBundle.appStoreReceiptURL; + return [NSFileManager.defaultManager fileExistsAtPath:[url path]]; +} + +FIRCLSApplicationInstallationSourceType FIRCLSApplicationInstallationSource(void) { + if (FIRCLSApplicationHasAppStoreReceipt()) { + return FIRCLSApplicationInstallationSourceTypeAppStore; + } + + return FIRCLSApplicationInstallationSourceTypeDeveloperInstall; +} + +BOOL FIRCLSApplicationIsExtension(void) { + return FIRCLSApplicationExtensionPointIdentifier() != nil; +} + +NSString* FIRCLSApplicationExtensionPointIdentifier(void) { + id extensionDict = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"NSExtension"]; + + if (!extensionDict) { + return nil; + } + + if (![extensionDict isKindOfClass:[NSDictionary class]]) { + FIRCLSSDKLog("Error: NSExtension Info.plist entry is mal-formed\n"); + return nil; + } + + id typeValue = [(NSDictionary*)extensionDict objectForKey:@"NSExtensionPointIdentifier"]; + + if (![typeValue isKindOfClass:[NSString class]]) { + FIRCLSSDKLog("Error: NSExtensionPointIdentifier Info.plist entry is mal-formed\n"); + return nil; + } + + return typeValue; +} + +#if CLS_TARGET_OS_HAS_UIKIT +UIApplication* FIRCLSApplicationSharedInstance(void) { + if (FIRCLSApplicationIsExtension()) { + return nil; + } + + return [[UIApplication class] performSelector:@selector(sharedApplication)]; +} +#elif CLS_TARGET_OS_OSX +id FIRCLSApplicationSharedInstance(void) { + return [NSClassFromString(@"NSApplication") sharedApplication]; +} +#else +id FIRCLSApplicationSharedInstance(void) { + return nil; // FIXME: what do we actually return for watch? +} +#endif + +void FIRCLSApplicationOpenURL(NSURL* url, + NSExtensionContext* extensionContext, + void (^completionBlock)(BOOL success)) { + if (extensionContext) { + [extensionContext openURL:url completionHandler:completionBlock]; + return; + } + + BOOL result = NO; + +#if TARGET_OS_IOS + // What's going on here is the value returned is a scalar, but we really need an object to + // call this dynamically. Hoops must be jumped. + NSInvocationOperation* op = + [[NSInvocationOperation alloc] initWithTarget:FIRCLSApplicationSharedInstance() + selector:@selector(openURL:) + object:url]; + [op start]; + [op.result getValue:&result]; +#elif CLS_TARGET_OS_OSX + result = [[NSClassFromString(@"NSWorkspace") sharedWorkspace] openURL:url]; +#endif + + completionBlock(result); +} + +id FIRCLSApplicationBeginActivity(NSActivityOptions options, NSString* reason) { + if ([[NSProcessInfo processInfo] respondsToSelector:@selector(beginActivityWithOptions: + reason:)]) { + return [[NSProcessInfo processInfo] beginActivityWithOptions:options reason:reason]; + } + +#if CLS_TARGET_OS_OSX + if (options & NSActivitySuddenTerminationDisabled) { + [[NSProcessInfo processInfo] disableSuddenTermination]; + } + + if (options & NSActivityAutomaticTerminationDisabled) { + [[NSProcessInfo processInfo] disableAutomaticTermination:reason]; + } +#endif + + // encode the options, so we can undo our work later + return @{@"options" : @(options), @"reason" : reason}; +} + +void FIRCLSApplicationEndActivity(id activity) { + if (!activity) { + return; + } + + if ([[NSProcessInfo processInfo] respondsToSelector:@selector(endActivity:)]) { + [[NSProcessInfo processInfo] endActivity:activity]; + return; + } + +#if CLS_TARGET_OS_OSX + NSInteger options = [[(NSDictionary*)activity objectForKey:@"options"] integerValue]; + + if (options & NSActivitySuddenTerminationDisabled) { + [[NSProcessInfo processInfo] enableSuddenTermination]; + } + + if (options & NSActivityAutomaticTerminationDisabled) { + [[NSProcessInfo processInfo] + enableAutomaticTermination:[(NSDictionary*)activity objectForKey:@"reason"]]; + } +#endif +} + +void FIRCLSApplicationActivity(NSActivityOptions options, NSString* reason, void (^block)(void)) { + id activity = FIRCLSApplicationBeginActivity(options, reason); + + block(); + + FIRCLSApplicationEndActivity(activity); +} diff --git a/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h b/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h new file mode 100644 index 000000000000..75929df675b3 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h @@ -0,0 +1,81 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFeatures.h" +#include "FIRCLSFile.h" +#include "FIRCLSMachO.h" + +#include +#include + +__BEGIN_DECLS + +// Typically, apps seem to have ~300 binary images loaded +#define CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT (512) +#define CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE (32) +#define CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME 0 + +#define FIRCLSUUIDStringLength (33) + +typedef struct { + _Atomic(void*) volatile baseAddress; + uint64_t size; +#if CLS_DWARF_UNWINDING_SUPPORTED + const void* ehFrame; +#endif +#if CLS_COMPACT_UNWINDING_SUPPORTED + const void* unwindInfo; +#endif + const void* crashInfo; +#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME + char name[CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE]; +#endif +} FIRCLSBinaryImageRuntimeNode; + +typedef struct { + char uuidString[FIRCLSUUIDStringLength]; + bool encrypted; + FIRCLSMachOVersion builtSDK; + FIRCLSMachOVersion minSDK; + FIRCLSBinaryImageRuntimeNode node; + struct FIRCLSMachOSlice slice; + intptr_t vmaddr_slide; +} FIRCLSBinaryImageDetails; + +typedef struct { + const char* path; +} FIRCLSBinaryImageReadOnlyContext; + +typedef struct { + FIRCLSFile file; + FIRCLSBinaryImageRuntimeNode nodes[CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT]; +} FIRCLSBinaryImageReadWriteContext; + +void FIRCLSBinaryImageInit(FIRCLSBinaryImageReadOnlyContext* roContext, + FIRCLSBinaryImageReadWriteContext* rwContext); + +#if CLS_COMPACT_UNWINDING_SUPPORTED +bool FIRCLSBinaryImageSafeFindImageForAddress(uintptr_t address, + FIRCLSBinaryImageRuntimeNode* image); +bool FIRCLSBinaryImageSafeHasUnwindInfo(FIRCLSBinaryImageRuntimeNode* image); +#endif + +bool FIRCLSBinaryImageFindImageForUUID(const char* uuidString, + FIRCLSBinaryImageDetails* imageDetails); + +bool FIRCLSBinaryImageRecordMainExecutable(FIRCLSFile* file); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m b/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m new file mode 100644 index 000000000000..e26229758a74 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m @@ -0,0 +1,571 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSBinaryImage.h" + +#include +#include + +#include + +#include + +#include "FIRCLSByteUtility.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSFile.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSHost.h" +#include "FIRCLSMachO.h" +#include "FIRCLSUtility.h" + +#include + +// this is defined only if __OPEN_SOURCE__ is *not* defined in the TVOS SDK's mach-o/loader.h +// also, it has not yet made it back to the OSX SDKs, for example +#ifndef LC_VERSION_MIN_TVOS +#define LC_VERSION_MIN_TVOS 0x2F +#endif + +#pragma mark Prototypes +static bool FIRCLSBinaryImageOpenIfNeeded(bool* needsClosing); + +static void FIRCLSBinaryImageAddedCallback(const struct mach_header* mh, intptr_t vmaddr_slide); +static void FIRCLSBinaryImageRemovedCallback(const struct mach_header* mh, intptr_t vmaddr_slide); +static void FIRCLSBinaryImageChanged(bool added, + const struct mach_header* mh, + intptr_t vmaddr_slide); +static bool FIRCLSBinaryImageFillInImageDetails(FIRCLSBinaryImageDetails* details); + +static void FIRCLSBinaryImageStoreNode(bool added, FIRCLSBinaryImageDetails imageDetails); +static void FIRCLSBinaryImageRecordSlice(bool added, const FIRCLSBinaryImageDetails imageDetails); + +#pragma mark - Core API +void FIRCLSBinaryImageInit(FIRCLSBinaryImageReadOnlyContext* roContext, + FIRCLSBinaryImageReadWriteContext* rwContext) { + // initialize our node array to all zeros + memset(&_clsContext.writable->binaryImage, 0, sizeof(_clsContext.writable->binaryImage)); + _clsContext.writable->binaryImage.file.fd = -1; + + dispatch_async(FIRCLSGetBinaryImageQueue(), ^{ + if (!FIRCLSUnlinkIfExists(_clsContext.readonly->binaryimage.path)) { + FIRCLSSDKLog("Unable to reset the binary image log file %s\n", strerror(errno)); + } + + bool needsClosing; // unneeded + if (!FIRCLSBinaryImageOpenIfNeeded(&needsClosing)) { + FIRCLSSDKLog("Error: Unable to open the binary image log file during init\n"); + } + }); + + _dyld_register_func_for_add_image(FIRCLSBinaryImageAddedCallback); + _dyld_register_func_for_remove_image(FIRCLSBinaryImageRemovedCallback); + + dispatch_async(FIRCLSGetBinaryImageQueue(), ^{ + FIRCLSFileClose(&_clsContext.writable->binaryImage.file); + }); +} + +static bool FIRCLSBinaryImageOpenIfNeeded(bool* needsClosing) { + if (!FIRCLSIsValidPointer(_clsContext.writable)) { + return false; + } + + if (!FIRCLSIsValidPointer(_clsContext.readonly)) { + return false; + } + + if (!FIRCLSIsValidPointer(needsClosing)) { + return false; + } + + *needsClosing = false; + + if (FIRCLSFileIsOpen(&_clsContext.writable->binaryImage.file)) { + return true; + } + + if (!FIRCLSFileInitWithPath(&_clsContext.writable->binaryImage.file, + _clsContext.readonly->binaryimage.path, false)) { + FIRCLSSDKLog("Error: unable to open binary image log file\n"); + return false; + } + + *needsClosing = true; + + return true; +} + +#if CLS_COMPACT_UNWINDING_SUPPORTED +bool FIRCLSBinaryImageSafeFindImageForAddress(uintptr_t address, + FIRCLSBinaryImageRuntimeNode* image) { + if (!FIRCLSContextIsInitialized()) { + return false; + } + + if (address == 0) { + return false; + } + + if (!FIRCLSIsValidPointer(image)) { + return false; + } + + FIRCLSBinaryImageRuntimeNode* nodes = _clsContext.writable->binaryImage.nodes; + if (!nodes) { + FIRCLSSDKLogError("The node structure is NULL\n"); + return false; + } + + for (uint32_t i = 0; i < CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT; ++i) { + FIRCLSBinaryImageRuntimeNode* node = &nodes[i]; + if (!FIRCLSIsValidPointer(node)) { + FIRCLSSDKLog( + "Invalid node pointer encountered in context's writable binary image at index %i", i); + continue; + } + + if ((address >= (uintptr_t)node->baseAddress) && + (address < (uintptr_t)node->baseAddress + node->size)) { + *image = *node; // copy the image + return true; + } + } + + return false; +} + +bool FIRCLSBinaryImageSafeHasUnwindInfo(FIRCLSBinaryImageRuntimeNode* image) { + return FIRCLSIsValidPointer(image->unwindInfo); +} +#endif + +bool FIRCLSBinaryImageFindImageForUUID(const char* uuidString, + FIRCLSBinaryImageDetails* imageDetails) { + if (!imageDetails || !uuidString) { + FIRCLSSDKLog("null input\n"); + return false; + } + + uint32_t imageCount = _dyld_image_count(); + + for (uint32_t i = 0; i < imageCount; ++i) { + const struct mach_header* mh = _dyld_get_image_header(i); + + FIRCLSBinaryImageDetails image; + + image.slice = FIRCLSMachOSliceWithHeader((void*)mh); + FIRCLSBinaryImageFillInImageDetails(&image); + + if (strncmp(uuidString, image.uuidString, FIRCLSUUIDStringLength) == 0) { + *imageDetails = image; + return true; + } + } + + return false; +} + +#pragma mark - DYLD callback handlers +static void FIRCLSBinaryImageAddedCallback(const struct mach_header* mh, intptr_t vmaddr_slide) { + FIRCLSBinaryImageChanged(true, mh, vmaddr_slide); +} + +static void FIRCLSBinaryImageRemovedCallback(const struct mach_header* mh, intptr_t vmaddr_slide) { + FIRCLSBinaryImageChanged(false, mh, vmaddr_slide); +} + +#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME +static bool FIRCLSBinaryImagePopulateRuntimeNodeName(FIRCLSBinaryImageDetails* details) { + if (!FIRCLSIsValidPointer(details)) { + return false; + } + + memset(details->node.name, 0, CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE); + + // We have limited storage space for the name. And, we really want to store + // "CoreFoundation", not "/System/Library/Fram", so we have to play tricks + // to make sure we get the right side of the string. + const char* imageName = FIRCLSMachOSliceGetExecutablePath(&details->slice); + if (!imageName) { + return false; + } + + const size_t imageNameLength = strlen(imageName); + + // Remember to leave one character for null-termination. + if (imageNameLength > CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE - 1) { + imageName = imageName + (imageNameLength - (CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE - 1)); + } + + // subtract one to make sure the string is always null-terminated + strncpy(details->node.name, imageName, CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE - 1); + + return true; +} +#endif + +// There were plans later to replace this with FIRCLSMachO +static FIRCLSMachOSegmentCommand FIRCLSBinaryImageMachOGetSegmentCommand( + const struct load_command* cmd) { + FIRCLSMachOSegmentCommand segmentCommand; + + memset(&segmentCommand, 0, sizeof(FIRCLSMachOSegmentCommand)); + + if (!cmd) { + return segmentCommand; + } + + if (cmd->cmd == LC_SEGMENT) { + struct segment_command* segCmd = (struct segment_command*)cmd; + + memcpy(segmentCommand.segname, segCmd->segname, 16); + segmentCommand.vmaddr = segCmd->vmaddr; + segmentCommand.vmsize = segCmd->vmsize; + } else if (cmd->cmd == LC_SEGMENT_64) { + struct segment_command_64* segCmd = (struct segment_command_64*)cmd; + + memcpy(segmentCommand.segname, segCmd->segname, 16); + segmentCommand.vmaddr = segCmd->vmaddr; + segmentCommand.vmsize = segCmd->vmsize; + } + + return segmentCommand; +} + +static bool FIRCLSBinaryImageMachOSliceInitSectionByName(FIRCLSMachOSliceRef slice, + const char* segName, + const char* sectionName, + FIRCLSMachOSection* section) { + if (!FIRCLSIsValidPointer(slice)) { + return false; + } + + if (!section) { + return false; + } + + memset(section, 0, sizeof(FIRCLSMachOSection)); + + if (FIRCLSMachOSliceIs64Bit(slice)) { + const struct section_64* sect = + getsectbynamefromheader_64(slice->startAddress, segName, sectionName); + if (!sect) { + return false; + } + + section->addr = sect->addr; + section->size = sect->size; + section->offset = sect->offset; + } else { + const struct section* sect = getsectbynamefromheader(slice->startAddress, segName, sectionName); + if (!sect) { + return false; + } + + section->addr = sect->addr; + section->size = sect->size; + section->offset = sect->offset; + } + + return true; +} + +static bool FIRCLSBinaryImageFillInImageDetails(FIRCLSBinaryImageDetails* details) { + if (!FIRCLSIsValidPointer(details)) { + return false; + } + + if (!FIRCLSIsValidPointer(details->slice.startAddress)) { + return false; + } + +#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME + // this is done for debugging purposes, so if it fails, its ok to continue + FIRCLSBinaryImagePopulateRuntimeNodeName(details); +#endif + + // This cast might look a little dubious, but its just because we're using the same + // struct types in a few different places. + details->node.baseAddress = (void* volatile)details->slice.startAddress; + + FIRCLSMachOSliceEnumerateLoadCommands( + &details->slice, ^(uint32_t type, uint32_t size, const struct load_command* cmd) { + switch (type) { + case LC_UUID: { + const uint8_t* uuid = FIRCLSMachOGetUUID(cmd); + FIRCLSSafeHexToString(uuid, 16, details->uuidString); + } break; + case LC_ENCRYPTION_INFO: + details->encrypted = FIRCLSMachOGetEncrypted(cmd); + break; + case LC_SEGMENT: + case LC_SEGMENT_64: { + FIRCLSMachOSegmentCommand segmentCommand = FIRCLSBinaryImageMachOGetSegmentCommand(cmd); + + if (strncmp(segmentCommand.segname, SEG_TEXT, sizeof(SEG_TEXT)) == 0) { + details->node.size = segmentCommand.vmsize; + } + } break; + case LC_VERSION_MIN_MACOSX: + case LC_VERSION_MIN_IPHONEOS: + case LC_VERSION_MIN_TVOS: + case LC_VERSION_MIN_WATCHOS: + details->minSDK = FIRCLSMachOGetMinimumOSVersion(cmd); + details->builtSDK = FIRCLSMachOGetLinkedSDKVersion(cmd); + break; + } + }); + + // We look up the section we want, and we *should* be able to use: + // + // address of data we want = start address + section.offset + // + // However, the offset value is coming back funky in iOS 9. So, instead we look up the address + // the section should be loaded at, and compute the offset by looking up the address of the + // segment itself. + + FIRCLSMachOSection section; + +#if CLS_COMPACT_UNWINDING_SUPPORTED + if (FIRCLSBinaryImageMachOSliceInitSectionByName(&details->slice, SEG_TEXT, "__unwind_info", + §ion)) { + details->node.unwindInfo = (void*)(section.addr + details->vmaddr_slide); + } +#endif + +#if CLS_DWARF_UNWINDING_SUPPORTED + if (FIRCLSBinaryImageMachOSliceInitSectionByName(&details->slice, SEG_TEXT, "__eh_frame", + §ion)) { + details->node.ehFrame = (void*)(section.addr + details->vmaddr_slide); + } +#endif + + if (FIRCLSBinaryImageMachOSliceInitSectionByName(&details->slice, SEG_DATA, "__crash_info", + §ion)) { + details->node.crashInfo = (void*)(section.addr + details->vmaddr_slide); + } + + return true; +} + +static void FIRCLSBinaryImageChanged(bool added, + const struct mach_header* mh, + intptr_t vmaddr_slide) { + // FIRCLSSDKLog("Binary image %s %p\n", added ? "loaded" : "unloaded", mh); + + FIRCLSBinaryImageDetails imageDetails; + + memset(&imageDetails, 0, sizeof(FIRCLSBinaryImageDetails)); + + imageDetails.slice = FIRCLSMachOSliceWithHeader((void*)mh); + imageDetails.vmaddr_slide = vmaddr_slide; + FIRCLSBinaryImageFillInImageDetails(&imageDetails); + + // this is an atomic operation + FIRCLSBinaryImageStoreNode(added, imageDetails); + + // this isn't, so do it on a serial queue + dispatch_async(FIRCLSGetBinaryImageQueue(), ^{ + FIRCLSBinaryImageRecordSlice(added, imageDetails); + }); +} + +#pragma mark - In-Memory Storage +static void FIRCLSBinaryImageStoreNode(bool added, FIRCLSBinaryImageDetails imageDetails) { + // This function is mutating a structure that needs to be accessed at crash time. We + // need to make sure the structure is always in as valid a state as possible. + // FIRCLSSDKLog("Storing %s node %p\n", added ? "loaded" : "unloaded", + // (void*)imageDetails.node.baseAddress); + + if (!_clsContext.writable) { + FIRCLSSDKLog("Error: Writable context is NULL\n"); + return; + } + + void* searchAddress = NULL; + bool success = false; + FIRCLSBinaryImageRuntimeNode* nodes = _clsContext.writable->binaryImage.nodes; + + if (!added) { + // capture the search address first + searchAddress = imageDetails.node.baseAddress; + + // If we are removing a node, we need to set its entries to zero. By clearing all of + // these values, we can just copy in imageDetails.node. Using memset here is slightly + // weird, since we have to restore one field. But, this way, if/when the structure changes, + // we still do the right thing. + memset(&imageDetails.node, 0, sizeof(FIRCLSBinaryImageRuntimeNode)); + + // restore the baseAddress, which just got zeroed, and is used for indexing + imageDetails.node.baseAddress = searchAddress; + } + + for (uint32_t i = 0; i < CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT; ++i) { + FIRCLSBinaryImageRuntimeNode* node = &nodes[i]; + + if (!node) { + FIRCLSSDKLog("Error: Binary image storage is NULL\n"); + break; + } + + // navigate through the array, looking for our matching address + if (node->baseAddress != searchAddress) { + continue; + } + + // Attempt to swap the base address with whatever we are searching for. Success means that + // entry has been claims/cleared. Failure means some other thread beat us to it. + if (atomic_compare_exchange_strong(&node->baseAddress, &searchAddress, + imageDetails.node.baseAddress)) { + *node = imageDetails.node; + success = true; + + break; + } + + // If this is an unload, getting here means two threads unloaded at the same time. I think + // that's highly unlikely, and possibly even impossible. So, I'm choosing to abort the process + // at this point. + if (!added) { + FIRCLSSDKLog("Error: Failed to swap during image unload\n"); + break; + } + } + + if (!success) { + FIRCLSSDKLog("Error: Unable to track a %s node %p\n", added ? "loaded" : "unloaded", + (void*)imageDetails.node.baseAddress); + } +} + +#pragma mark - On-Disk Storage +static void FIRCLSBinaryImageRecordDetails(FIRCLSFile* file, + const FIRCLSBinaryImageDetails imageDetails) { + if (!file) { + FIRCLSSDKLog("Error: file is invalid\n"); + return; + } + + FIRCLSFileWriteHashEntryString(file, "uuid", imageDetails.uuidString); + FIRCLSFileWriteHashEntryUint64(file, "base", (uintptr_t)imageDetails.slice.startAddress); + FIRCLSFileWriteHashEntryUint64(file, "size", imageDetails.node.size); +} + +static void FIRCLSBinaryImageRecordLibraryFrameworkInfo(FIRCLSFile* file, const char* path) { + if (!file) { + FIRCLSSDKLog("Error: file is invalid\n"); + return; + } + + if (!path) { + return; + } + + // Because this function is so expensive, we've decided to omit this info for all Apple-supplied + // frameworks. This really isn't that bad, because we can know their info ahead of time (within a + // small margin of error). With this implemenation, we will still record this info for any + // user-built framework, which in the end is the most important thing. + if (strncmp(path, "/System", 7) == 0) { + return; + } + + // check to see if this is a potential framework bundle + if (!strstr(path, ".framework")) { + return; + } + + // My.framework/Versions/A/My for OS X + // My.framework/My for iOS + + NSString* frameworkPath = [NSString stringWithUTF8String:path]; +#if TARGET_OS_IPHONE + frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; +#else + frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; // My.framework/Versions/A + frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; // My.framework/Versions + frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; // My.framework +#endif + + NSBundle* const bundle = [NSBundle bundleWithPath:frameworkPath]; + + if (!bundle) { + return; + } + + FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty(file, "bundle_id", [bundle bundleIdentifier]); + FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty( + file, "build_version", [bundle objectForInfoDictionaryKey:@"CFBundleVersion"]); + FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty( + file, "display_version", [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]); +} + +static void FIRCLSBinaryImageRecordSlice(bool added, const FIRCLSBinaryImageDetails imageDetails) { + bool needsClosing = false; + if (!FIRCLSBinaryImageOpenIfNeeded(&needsClosing)) { + FIRCLSSDKLog("Error: unable to open binary image log file\n"); + return; + } + + FIRCLSFile* file = &_clsContext.writable->binaryImage.file; + + FIRCLSFileWriteSectionStart(file, added ? "load" : "unload"); + + FIRCLSFileWriteHashStart(file); + + const char* path = FIRCLSMachOSliceGetExecutablePath((FIRCLSMachOSliceRef)&imageDetails.slice); + + FIRCLSFileWriteHashEntryString(file, "path", path); + + if (added) { + // this won't work if the binary has been unloaded + FIRCLSBinaryImageRecordLibraryFrameworkInfo(file, path); + } + + FIRCLSBinaryImageRecordDetails(file, imageDetails); + + FIRCLSFileWriteHashEnd(file); + + FIRCLSFileWriteSectionEnd(file); + + if (needsClosing) { + FIRCLSFileClose(file); + } +} + +bool FIRCLSBinaryImageRecordMainExecutable(FIRCLSFile* file) { + FIRCLSBinaryImageDetails imageDetails; + + memset(&imageDetails, 0, sizeof(FIRCLSBinaryImageDetails)); + + imageDetails.slice = FIRCLSMachOSliceGetCurrent(); + FIRCLSBinaryImageFillInImageDetails(&imageDetails); + + FIRCLSFileWriteSectionStart(file, "executable"); + FIRCLSFileWriteHashStart(file); + + FIRCLSFileWriteHashEntryString(file, "architecture", + FIRCLSMachOSliceGetArchitectureName(&imageDetails.slice)); + + FIRCLSBinaryImageRecordDetails(file, imageDetails); + FIRCLSFileWriteHashEntryBoolean(file, "encrypted", imageDetails.encrypted); + FIRCLSFileWriteHashEntryString(file, "minimum_sdk_version", + [FIRCLSMachOFormatVersion(&imageDetails.minSDK) UTF8String]); + FIRCLSFileWriteHashEntryString(file, "built_sdk_version", + [FIRCLSMachOFormatVersion(&imageDetails.builtSDK) UTF8String]); + + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); + + return true; +} diff --git a/Crashlytics/Crashlytics/Components/FIRCLSContext.h b/Crashlytics/Crashlytics/Components/FIRCLSContext.h new file mode 100644 index 000000000000..f3656087e81d --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSContext.h @@ -0,0 +1,106 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSAllocate.h" +#include "FIRCLSBinaryImage.h" +#include "FIRCLSException.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSHost.h" +#include "FIRCLSInternalLogging.h" +#include "FIRCLSMachException.h" +#include "FIRCLSSignal.h" +#include "FIRCLSUserLogging.h" + +#include +#include + +// The purpose of the crash context is to hold values that absolutely must be read and/or written at +// crash time. For robustness against memory corruption, they are protected with guard pages. +// Further, the context is seperated into read-only and read-write sections. + +__BEGIN_DECLS + +typedef struct { + volatile bool initialized; + volatile bool debuggerAttached; + const char* previouslyCrashedFileFullPath; + const char* logPath; +#if CLS_USE_SIGALTSTACK + void* signalStack; +#endif +#if CLS_MACH_EXCEPTION_SUPPORTED + void* machStack; +#endif + void* delegate; + void* callbackDelegate; + + FIRCLSBinaryImageReadOnlyContext binaryimage; + FIRCLSExceptionReadOnlyContext exception; + FIRCLSHostReadOnlyContext host; + FIRCLSSignalReadContext signal; +#if CLS_MACH_EXCEPTION_SUPPORTED + FIRCLSMachExceptionReadContext machException; +#endif + FIRCLSUserLoggingReadOnlyContext logging; +} FIRCLSReadOnlyContext; + +typedef struct { + FIRCLSInternalLoggingWritableContext internalLogging; + volatile bool crashOccurred; + FIRCLSBinaryImageReadWriteContext binaryImage; + FIRCLSUserLoggingWritableContext logging; + FIRCLSExceptionWritableContext exception; +} FIRCLSReadWriteContext; + +typedef struct { + FIRCLSReadOnlyContext* readonly; + FIRCLSReadWriteContext* writable; + FIRCLSAllocatorRef allocator; +} FIRCLSContext; + +typedef struct { + void* delegate; + const char* customBundleId; + const char* rootPath; + const char* previouslyCrashedFileRootPath; + const char* sessionId; + const char* installId; + const char* betaToken; +#if CLS_MACH_EXCEPTION_SUPPORTED + exception_mask_t machExceptionMask; +#endif + bool errorsEnabled; + bool customExceptionsEnabled; + uint32_t maxCustomExceptions; + uint32_t maxErrorLogSize; + uint32_t maxLogSize; + uint32_t maxKeyValues; +} FIRCLSContextInitData; + +bool FIRCLSContextInitialize(const FIRCLSContextInitData* initData); + +// Re-writes the metadata file on the current thread +void FIRCLSContextUpdateMetadata(const FIRCLSContextInitData* initData); + +void FIRCLSContextBaseInit(void); +void FIRCLSContextBaseDeinit(void); + +bool FIRCLSContextIsInitialized(void); +bool FIRCLSContextHasCrashed(void); +void FIRCLSContextMarkHasCrashed(void); +bool FIRCLSContextMarkAndCheckIfCrashed(void); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Components/FIRCLSContext.m b/Crashlytics/Crashlytics/Components/FIRCLSContext.m new file mode 100644 index 000000000000..1438bf3abf1a --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSContext.m @@ -0,0 +1,400 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSContext.h" + +#include +#include + +#include "FIRCLSApplication.h" +#include "FIRCLSCrashedMarkerFile.h" +#include "FIRCLSDefines.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSInternalReport.h" +#include "FIRCLSProcess.h" +#include "FIRCLSUtility.h" + +// The writable size is our handler stack plus whatever scratch we need. We have to use this space +// extremely carefully, however, because thread stacks always needs to be page-aligned. Only the +// first allocation is gauranteed to be page-aligned. +// +// CLS_SIGNAL_HANDLER_STACK_SIZE and CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE are platform dependant, +// defined as 0 for tv/watch. +#define CLS_MINIMUM_READWRITE_SIZE \ + (CLS_SIGNAL_HANDLER_STACK_SIZE + CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE + \ + sizeof(FIRCLSReadWriteContext)) + +// We need enough space here for the context, plus storage for strings. +#define CLS_MINIMUM_READABLE_SIZE (sizeof(FIRCLSReadOnlyContext) + 4096 * 4) + +static const int64_t FIRCLSContextInitWaitTime = 5LL * NSEC_PER_SEC; + +static bool FIRCLSContextRecordMetadata(const char* path, const FIRCLSContextInitData* initData); +static const char* FIRCLSContextAppendToRoot(NSString* root, NSString* component); +static void FIRCLSContextAllocate(FIRCLSContext* context); + +bool FIRCLSContextInitialize(const FIRCLSContextInitData* initData) { + if (!initData) { + return false; + } + + FIRCLSContextBaseInit(); + + dispatch_group_t group = dispatch_group_create(); + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + + if (!FIRCLSIsValidPointer(initData->rootPath)) { + return false; + } + + NSString* rootPath = [NSString stringWithUTF8String:initData->rootPath]; + + // setup our SDK log file synchronously, because other calls may depend on it + _clsContext.readonly->logPath = FIRCLSContextAppendToRoot(rootPath, @"sdk.log"); + if (!FIRCLSUnlinkIfExists(_clsContext.readonly->logPath)) { + FIRCLSErrorLog(@"Unable to write initialize SDK write paths %s", strerror(errno)); + } + + // some values that aren't tied to particular subsystem + _clsContext.readonly->debuggerAttached = FIRCLSProcessDebuggerAttached(); + _clsContext.readonly->delegate = initData->delegate; + + dispatch_group_async(group, queue, ^{ + FIRCLSHostInitialize(&_clsContext.readonly->host); + }); + + dispatch_group_async(group, queue, ^{ + _clsContext.readonly->logging.errorStorage.maxSize = 0; + _clsContext.readonly->logging.errorStorage.maxEntries = + initData->errorsEnabled ? initData->maxCustomExceptions : 0; + _clsContext.readonly->logging.errorStorage.restrictBySize = false; + _clsContext.readonly->logging.errorStorage.entryCount = + &_clsContext.writable->logging.errorsCount; + _clsContext.readonly->logging.errorStorage.aPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportErrorAFile); + _clsContext.readonly->logging.errorStorage.bPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportErrorBFile); + + _clsContext.readonly->logging.logStorage.maxSize = initData->maxLogSize; + _clsContext.readonly->logging.logStorage.maxEntries = 0; + _clsContext.readonly->logging.logStorage.restrictBySize = true; + _clsContext.readonly->logging.logStorage.entryCount = NULL; + _clsContext.readonly->logging.logStorage.aPath = + FIRCLSContextAppendToRoot(rootPath, @"log_a.clsrecord"); + _clsContext.readonly->logging.logStorage.bPath = + FIRCLSContextAppendToRoot(rootPath, @"log_b.clsrecord"); + _clsContext.readonly->logging.customExceptionStorage.aPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportCustomExceptionAFile); + _clsContext.readonly->logging.customExceptionStorage.bPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportCustomExceptionBFile); + _clsContext.readonly->logging.customExceptionStorage.maxSize = 0; + _clsContext.readonly->logging.customExceptionStorage.restrictBySize = false; + _clsContext.readonly->logging.customExceptionStorage.maxEntries = initData->maxCustomExceptions; + _clsContext.readonly->logging.customExceptionStorage.entryCount = + &_clsContext.writable->exception.customExceptionCount; + + _clsContext.readonly->logging.userKVStorage.maxCount = initData->maxKeyValues; + _clsContext.readonly->logging.userKVStorage.incrementalPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportUserIncrementalKVFile); + _clsContext.readonly->logging.userKVStorage.compactedPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportUserCompactedKVFile); + + _clsContext.readonly->logging.internalKVStorage.maxCount = 32; // Hardcode = bad + _clsContext.readonly->logging.internalKVStorage.incrementalPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportInternalIncrementalKVFile); + _clsContext.readonly->logging.internalKVStorage.compactedPath = + FIRCLSContextAppendToRoot(rootPath, CLSReportInternalCompactedKVFile); + + FIRCLSUserLoggingInit(&_clsContext.readonly->logging, &_clsContext.writable->logging); + }); + + dispatch_group_async(group, queue, ^{ + _clsContext.readonly->binaryimage.path = + FIRCLSContextAppendToRoot(rootPath, CLSReportBinaryImageFile); + + FIRCLSBinaryImageInit(&_clsContext.readonly->binaryimage, &_clsContext.writable->binaryImage); + }); + + dispatch_group_async(group, queue, ^{ + NSString* rootPath = [NSString stringWithUTF8String:initData->previouslyCrashedFileRootPath]; + NSString* fileName = [NSString stringWithUTF8String:FIRCLSCrashedMarkerFileName]; + _clsContext.readonly->previouslyCrashedFileFullPath = + FIRCLSContextAppendToRoot(rootPath, fileName); + }); + + if (!_clsContext.readonly->debuggerAttached) { + dispatch_group_async(group, queue, ^{ + _clsContext.readonly->signal.path = FIRCLSContextAppendToRoot(rootPath, CLSReportSignalFile); + + FIRCLSSignalInitialize(&_clsContext.readonly->signal); + }); + +#if CLS_MACH_EXCEPTION_SUPPORTED + dispatch_group_async(group, queue, ^{ + _clsContext.readonly->machException.path = + FIRCLSContextAppendToRoot(rootPath, CLSReportMachExceptionFile); + + FIRCLSMachExceptionInit(&_clsContext.readonly->machException, initData->machExceptionMask); + }); +#endif + + dispatch_group_async(group, queue, ^{ + _clsContext.readonly->exception.path = + FIRCLSContextAppendToRoot(rootPath, CLSReportExceptionFile); + _clsContext.readonly->exception.maxCustomExceptions = + initData->customExceptionsEnabled ? initData->maxCustomExceptions : 0; + + FIRCLSExceptionInitialize(&_clsContext.readonly->exception, &_clsContext.writable->exception, + initData->delegate); + }); + } else { + FIRCLSSDKLog("Debugger present - not installing handlers\n"); + } + + dispatch_group_async(group, queue, ^{ + const char* metaDataPath = + [[rootPath stringByAppendingPathComponent:CLSReportMetadataFile] fileSystemRepresentation]; + if (!FIRCLSContextRecordMetadata(metaDataPath, initData)) { + FIRCLSSDKLog("Unable to record context metadata\n"); + } + }); + + // At this point we need to do two things. First, we need to do our memory protection *only* after + // all of these initialization steps are really done. But, we also want to wait as long as + // possible for these to be complete. If we do not, there's a chance that we will not be able to + // correctly report a crash shortly after start. + + // Note at this will retain the group, so its totally fine to release the group here. + dispatch_group_notify(group, queue, ^{ + _clsContext.readonly->initialized = true; + __sync_synchronize(); + + if (!FIRCLSAllocatorProtect(_clsContext.allocator)) { + FIRCLSSDKLog("Error: Memory protection failed\n"); + } + }); + + if (dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, FIRCLSContextInitWaitTime)) != + 0) { + FIRCLSSDKLog("Error: Delayed initialization\n"); + } + + return true; +} + +void FIRCLSContextUpdateMetadata(const FIRCLSContextInitData* initData) { + NSString* rootPath = [NSString stringWithUTF8String:initData->rootPath]; + + const char* metaDataPath = + [[rootPath stringByAppendingPathComponent:CLSReportMetadataFile] fileSystemRepresentation]; + + if (!FIRCLSContextRecordMetadata(metaDataPath, initData)) { + FIRCLSErrorLog(@"Unable to update context metadata"); + } +} + +void FIRCLSContextBaseInit(void) { + NSString* sdkBundleID = FIRCLSApplicationGetSDKBundleID(); + + NSString* loggingQueueName = [sdkBundleID stringByAppendingString:@".logging"]; + NSString* binaryImagesQueueName = [sdkBundleID stringByAppendingString:@".binary-images"]; + NSString* exceptionQueueName = [sdkBundleID stringByAppendingString:@".exception"]; + + _clsLoggingQueue = dispatch_queue_create([loggingQueueName UTF8String], DISPATCH_QUEUE_SERIAL); + _clsBinaryImageQueue = + dispatch_queue_create([binaryImagesQueueName UTF8String], DISPATCH_QUEUE_SERIAL); + _clsExceptionQueue = + dispatch_queue_create([exceptionQueueName UTF8String], DISPATCH_QUEUE_SERIAL); + + FIRCLSContextAllocate(&_clsContext); + + _clsContext.writable->internalLogging.logFd = -1; + _clsContext.writable->internalLogging.logLevel = FIRCLSInternalLogLevelDebug; + _clsContext.writable->crashOccurred = false; + + _clsContext.readonly->initialized = false; + + __sync_synchronize(); +} + +static void FIRCLSContextAllocate(FIRCLSContext* context) { + // create the allocator, and the contexts + // The ordering here is really important, because the "stack" variable must be + // page-aligned. There's no mechanism to ask the allocator to do alignment, but we + // do know the very first allocation in a region is aligned to a page boundary. + + context->allocator = FIRCLSAllocatorCreate(CLS_MINIMUM_READWRITE_SIZE, CLS_MINIMUM_READABLE_SIZE); + + context->readonly = + FIRCLSAllocatorSafeAllocate(context->allocator, sizeof(FIRCLSReadOnlyContext), CLS_READONLY); + memset(context->readonly, 0, sizeof(FIRCLSReadOnlyContext)); + +#if CLS_MEMORY_PROTECTION_ENABLED +#if CLS_MACH_EXCEPTION_SUPPORTED + context->readonly->machStack = FIRCLSAllocatorSafeAllocate( + context->allocator, CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE, CLS_READWRITE); +#endif +#if CLS_USE_SIGALTSTACK + context->readonly->signalStack = + FIRCLSAllocatorSafeAllocate(context->allocator, CLS_SIGNAL_HANDLER_STACK_SIZE, CLS_READWRITE); +#endif +#else +#if CLS_MACH_EXCEPTION_SUPPORTED + context->readonly->machStack = valloc(CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE); +#endif +#if CLS_USE_SIGALTSTACK + context->readonly->signalStack = valloc(CLS_SIGNAL_HANDLER_STACK_SIZE); +#endif +#endif + +#if CLS_MACH_EXCEPTION_SUPPORTED + memset(_clsContext.readonly->machStack, 0, CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE); +#endif +#if CLS_USE_SIGALTSTACK + memset(_clsContext.readonly->signalStack, 0, CLS_SIGNAL_HANDLER_STACK_SIZE); +#endif + + context->writable = FIRCLSAllocatorSafeAllocate(context->allocator, + sizeof(FIRCLSReadWriteContext), CLS_READWRITE); + memset(context->writable, 0, sizeof(FIRCLSReadWriteContext)); +} + +void FIRCLSContextBaseDeinit(void) { + _clsContext.readonly->initialized = false; + + FIRCLSAllocatorDestroy(_clsContext.allocator); +} + +bool FIRCLSContextIsInitialized(void) { + __sync_synchronize(); + if (!FIRCLSIsValidPointer(_clsContext.readonly)) { + return false; + } + + return _clsContext.readonly->initialized; +} + +bool FIRCLSContextHasCrashed(void) { + if (!FIRCLSContextIsInitialized()) { + return false; + } + + // we've already run a full barrier above, so this read is ok + return _clsContext.writable->crashOccurred; +} + +void FIRCLSContextMarkHasCrashed(void) { + if (!FIRCLSContextIsInitialized()) { + return; + } + + _clsContext.writable->crashOccurred = true; + __sync_synchronize(); +} + +bool FIRCLSContextMarkAndCheckIfCrashed(void) { + if (!FIRCLSContextIsInitialized()) { + return false; + } + + if (_clsContext.writable->crashOccurred) { + return true; + } + + _clsContext.writable->crashOccurred = true; + __sync_synchronize(); + + return false; +} + +static const char* FIRCLSContextAppendToRoot(NSString* root, NSString* component) { + return FIRCLSDupString( + [[root stringByAppendingPathComponent:component] fileSystemRepresentation]); +} + +static bool FIRCLSContextRecordIdentity(FIRCLSFile* file, const FIRCLSContextInitData* initData) { + FIRCLSFileWriteSectionStart(file, "identity"); + + FIRCLSFileWriteHashStart(file); + + FIRCLSFileWriteHashEntryString(file, "generator", CLS_SDK_GENERATOR_NAME); + FIRCLSFileWriteHashEntryString(file, "display_version", CLS_SDK_DISPLAY_VERSION); + FIRCLSFileWriteHashEntryString(file, "build_version", CLS_SDK_DISPLAY_VERSION); + FIRCLSFileWriteHashEntryUint64(file, "started_at", time(NULL)); + + FIRCLSFileWriteHashEntryString(file, "session_id", initData->sessionId); + FIRCLSFileWriteHashEntryString(file, "install_id", initData->installId); + FIRCLSFileWriteHashEntryString(file, "beta_token", initData->betaToken); + FIRCLSFileWriteHashEntryBoolean(file, "absolute_log_timestamps", true); + + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); + + return true; +} + +static bool FIRCLSContextRecordApplication(FIRCLSFile* file, const char* customBundleId) { + FIRCLSFileWriteSectionStart(file, "application"); + + FIRCLSFileWriteHashStart(file); + + FIRCLSFileWriteHashEntryString(file, "bundle_id", + [FIRCLSApplicationGetBundleIdentifier() UTF8String]); + FIRCLSFileWriteHashEntryString(file, "custom_bundle_id", customBundleId); + FIRCLSFileWriteHashEntryString(file, "build_version", + [FIRCLSApplicationGetBundleVersion() UTF8String]); + FIRCLSFileWriteHashEntryString(file, "display_version", + [FIRCLSApplicationGetShortBundleVersion() UTF8String]); + FIRCLSFileWriteHashEntryString(file, "extension_id", + [FIRCLSApplicationExtensionPointIdentifier() UTF8String]); + + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); + + return true; +} + +static bool FIRCLSContextRecordMetadata(const char* path, const FIRCLSContextInitData* initData) { + if (!FIRCLSUnlinkIfExists(path)) { + FIRCLSSDKLog("Unable to unlink existing metadata file %s\n", strerror(errno)); + } + + FIRCLSFile file; + + if (!FIRCLSFileInitWithPath(&file, path, false)) { + FIRCLSSDKLog("Unable to open metadata file %s\n", strerror(errno)); + return false; + } + + if (!FIRCLSContextRecordIdentity(&file, initData)) { + FIRCLSSDKLog("Unable to write out identity metadata\n"); + } + + if (!FIRCLSHostRecord(&file)) { + FIRCLSSDKLog("Unable to write out host metadata\n"); + } + + if (!FIRCLSContextRecordApplication(&file, initData->customBundleId)) { + FIRCLSSDKLog("Unable to write out application metadata\n"); + } + + if (!FIRCLSBinaryImageRecordMainExecutable(&file)) { + FIRCLSSDKLog("Unable to write out executable metadata\n"); + } + + FIRCLSFileClose(&file); + + return true; +} diff --git a/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c b/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c new file mode 100644 index 000000000000..d8ad35cf890e --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c @@ -0,0 +1,31 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSCrashedMarkerFile.h" +#include "FIRCLSFile.h" +#include "FIRCLSUtility.h" + +const char *FIRCLSCrashedMarkerFileName = "previously-crashed"; + +void FIRCLSCreateCrashedMarkerFile() { + FIRCLSFile file; + + if (!FIRCLSFileInitWithPath(&file, _clsContext.readonly->previouslyCrashedFileFullPath, false)) { + FIRCLSSDKLog("Unable to create the crashed marker file\n"); + return; + } + + FIRCLSFileClose(&file); + FIRCLSSDKLog("Created the crashed marker file\n"); +} diff --git a/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h b/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h new file mode 100644 index 000000000000..ccf42767303b --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h @@ -0,0 +1,19 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +extern const char *FIRCLSCrashedMarkerFileName; + +void FIRCLSCreateCrashedMarkerFile(void); diff --git a/Crashlytics/Crashlytics/Components/FIRCLSGlobals.h b/Crashlytics/Crashlytics/Components/FIRCLSGlobals.h new file mode 100644 index 000000000000..191b24def3d5 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSGlobals.h @@ -0,0 +1,28 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSContext.h" + +__BEGIN_DECLS + +extern FIRCLSContext _clsContext; +extern dispatch_queue_t _clsLoggingQueue; +extern dispatch_queue_t _clsBinaryImageQueue; +extern dispatch_queue_t _clsExceptionQueue; + +#define FIRCLSGetLoggingQueue() (_clsLoggingQueue) +#define FIRCLSGetBinaryImageQueue() (_clsBinaryImageQueue) +#define FIRCLSGetExceptionQueue() (_clsExceptionQueue) + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Components/FIRCLSHost.h b/Crashlytics/Crashlytics/Components/FIRCLSHost.h new file mode 100644 index 000000000000..31dfc24b10f3 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSHost.h @@ -0,0 +1,37 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFile.h" + +#include +#include + +typedef struct { + const char* documentDirectoryPath; + vm_size_t pageSize; +} FIRCLSHostReadOnlyContext; + +__BEGIN_DECLS + +void FIRCLSHostInitialize(FIRCLSHostReadOnlyContext* roContext); + +vm_size_t FIRCLSHostGetPageSize(void); + +bool FIRCLSHostRecord(FIRCLSFile* file); + +void FIRCLSHostWriteDiskUsage(FIRCLSFile* file); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Components/FIRCLSHost.m b/Crashlytics/Crashlytics/Components/FIRCLSHost.m new file mode 100644 index 000000000000..a2900bfdac54 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSHost.m @@ -0,0 +1,161 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSHost.h" + +#include +#include +#include + +#import "FIRCLSApplication.h" +#include "FIRCLSDefines.h" +#import "FIRCLSFABHost.h" +#include "FIRCLSFile.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSUtility.h" + +#if TARGET_OS_IPHONE +#import +#else +#import +#endif + +#define CLS_HOST_SYSCTL_BUFFER_SIZE (128) + +#if CLS_CPU_ARM64 +#define CLS_MAX_NATIVE_PAGE_SIZE (1024 * 16) +#else +// return 4K, which is correct for all platforms except arm64, currently +#define CLS_MAX_NATIVE_PAGE_SIZE (1024 * 4) +#endif +#define CLS_MIN_NATIVE_PAGE_SIZE (1024 * 4) + +#pragma mark Prototypes +static void FIRCLSHostWriteSysctlEntry( + FIRCLSFile* file, const char* key, const char* sysctlKey, void* buffer, size_t bufferSize); +static void FIRCLSHostWriteModelInfo(FIRCLSFile* file); +static void FIRCLSHostWriteOSVersionInfo(FIRCLSFile* file); + +#pragma mark - API +void FIRCLSHostInitialize(FIRCLSHostReadOnlyContext* roContext) { + _clsContext.readonly->host.pageSize = FIRCLSHostGetPageSize(); + _clsContext.readonly->host.documentDirectoryPath = NULL; + + // determine where the document directory is mounted, so we can get file system statistics later + NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + if ([paths count]) { + _clsContext.readonly->host.documentDirectoryPath = + FIRCLSDupString([[paths objectAtIndex:0] fileSystemRepresentation]); + } +} + +vm_size_t FIRCLSHostGetPageSize(void) { + size_t size; + int pageSize; + + // hw.pagesize is defined as HW_PAGESIZE, which is an int. It's important to match + // these types. Turns out that sysctl will not init the data to zero, but it appears + // that sysctlbyname does. This API is nicer, but that's important to keep in mind. + + pageSize = 0; + size = sizeof(pageSize); + if (sysctlbyname("hw.pagesize", &pageSize, &size, NULL, 0) != 0) { + FIRCLSSDKLog("sysctlbyname failed while trying to get hw.pagesize\n"); + + return CLS_MAX_NATIVE_PAGE_SIZE; + } + + // if the returned size is not the expected value, abort + if (size != sizeof(pageSize)) { + return CLS_MAX_NATIVE_PAGE_SIZE; + } + + // put in some guards to make sure our size is reasonable + if (pageSize > CLS_MAX_NATIVE_PAGE_SIZE) { + return CLS_MAX_NATIVE_PAGE_SIZE; + } + + if (pageSize < CLS_MIN_NATIVE_PAGE_SIZE) { + return CLS_MIN_NATIVE_PAGE_SIZE; + } + + return pageSize; +} + +static void FIRCLSHostWriteSysctlEntry( + FIRCLSFile* file, const char* key, const char* sysctlKey, void* buffer, size_t bufferSize) { + if (sysctlbyname(sysctlKey, buffer, &bufferSize, NULL, 0) != 0) { + FIRCLSFileWriteHashEntryString(file, key, "(failed)"); + return; + } + + FIRCLSFileWriteHashEntryString(file, key, buffer); +} + +static void FIRCLSHostWriteModelInfo(FIRCLSFile* file) { + FIRCLSFileWriteHashEntryString(file, "model", [FIRCLSHostModelInfo() UTF8String]); + + // allocate a static buffer for the sysctl values, which are typically + // quite short + char buffer[CLS_HOST_SYSCTL_BUFFER_SIZE]; + +#if TARGET_OS_EMBEDDED + FIRCLSHostWriteSysctlEntry(file, "machine", "hw.model", buffer, CLS_HOST_SYSCTL_BUFFER_SIZE); +#else + FIRCLSHostWriteSysctlEntry(file, "machine", "hw.machine", buffer, CLS_HOST_SYSCTL_BUFFER_SIZE); + FIRCLSHostWriteSysctlEntry(file, "cpu", "machdep.cpu.brand_string", buffer, + CLS_HOST_SYSCTL_BUFFER_SIZE); +#endif +} + +static void FIRCLSHostWriteOSVersionInfo(FIRCLSFile* file) { + FIRCLSFileWriteHashEntryString(file, "os_build_version", [FIRCLSHostOSBuildVersion() UTF8String]); + FIRCLSFileWriteHashEntryString(file, "os_display_version", + [FIRCLSHostOSDisplayVersion() UTF8String]); + FIRCLSFileWriteHashEntryString(file, "platform", [FIRCLSApplicationGetPlatform() UTF8String]); +} + +bool FIRCLSHostRecord(FIRCLSFile* file) { + FIRCLSFileWriteSectionStart(file, "host"); + + FIRCLSFileWriteHashStart(file); + + FIRCLSHostWriteModelInfo(file); + FIRCLSHostWriteOSVersionInfo(file); + FIRCLSFileWriteHashEntryString(file, "locale", + [[[NSLocale currentLocale] localeIdentifier] UTF8String]); + + FIRCLSFileWriteHashEnd(file); + + FIRCLSFileWriteSectionEnd(file); + + return true; +} + +void FIRCLSHostWriteDiskUsage(FIRCLSFile* file) { + struct statfs tStats; + + FIRCLSFileWriteSectionStart(file, "storage"); + + FIRCLSFileWriteHashStart(file); + + if (statfs(_clsContext.readonly->host.documentDirectoryPath, &tStats) == 0) { + FIRCLSFileWriteHashEntryUint64(file, "free", tStats.f_bavail * tStats.f_bsize); + FIRCLSFileWriteHashEntryUint64(file, "total", tStats.f_blocks * tStats.f_bsize); + } + + FIRCLSFileWriteHashEnd(file); + + FIRCLSFileWriteSectionEnd(file); +} diff --git a/Crashlytics/Crashlytics/Components/FIRCLSProcess.c b/Crashlytics/Crashlytics/Components/FIRCLSProcess.c new file mode 100644 index 000000000000..d1a5b32dc9b4 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSProcess.c @@ -0,0 +1,806 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDefines.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSProcess.h" +#include "FIRCLSUtility.h" +#include "FIRCLSThreadState.h" +#include "FIRCLSUnwind.h" +#include "FIRCLSProfiling.h" +#include "FIRCLSGlobals.h" + +#include +#include +#include +#include + +#define THREAD_NAME_BUFFER_SIZE (64) + +#pragma mark Prototypes +static bool FIRCLSProcessGetThreadName(FIRCLSProcess *process, thread_t thread, char* buffer, size_t length); +static const char* FIRCLSProcessGetThreadDispatchQueueName(FIRCLSProcess *process, thread_t thread); + +#pragma mark - API +bool FIRCLSProcessInit(FIRCLSProcess *process, thread_t crashedThread, void *uapVoid) { + if (!process) { + return false; + } + + process->task = mach_task_self(); + process->thisThread = mach_thread_self(); + process->crashedThread = crashedThread; + process->uapVoid = uapVoid; + + if (task_threads(process->task, &process->threads, &process->threadCount) != KERN_SUCCESS) { + // failed to get all threads + process->threadCount = 0; + FIRCLSSDKLog("Error: unable to get task threads\n"); + + return false; + } + + return true; + +} + +bool FIRCLSProcessDestroy(FIRCLSProcess *process) { + return false; +} + +// https://developer.apple.com/library/mac/#qa/qa2004/qa1361.html +bool FIRCLSProcessDebuggerAttached(void) { + int junk; + int mib[4]; + struct kinfo_proc info; + size_t size; + + // Initialize the flags so that, if sysctl fails for some bizarre + // reason, we get a predictable result. + info.kp_proc.p_flag = 0; + + // Initialize mib, which tells sysctl the info we want, in this case + // we're looking for information about a specific process ID. + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); + + // Call sysctl. + size = sizeof(info); + junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0); + if (junk != 0) { + FIRCLSSDKLog("sysctl failed while trying to get kinfo_proc\n"); + return false; + } + + // We're being debugged if the P_TRACED flag is set. + return (info.kp_proc.p_flag & P_TRACED) != 0; +} + +#pragma mark - Thread Support +static bool FIRCLSProcessIsCurrentThread(FIRCLSProcess *process, thread_t thread) { + return MACH_PORT_INDEX(process->thisThread) == MACH_PORT_INDEX(thread); +} + +static bool FIRCLSProcessIsCrashedThread(FIRCLSProcess *process, thread_t thread) { + return MACH_PORT_INDEX(process->crashedThread) == MACH_PORT_INDEX(thread); +} + +static uint32_t FIRCLSProcessGetThreadCount(FIRCLSProcess *process) { + return process->threadCount; +} + +static thread_t FIRCLSProcessGetThread(FIRCLSProcess *process, uint32_t index) { + if (index >= process->threadCount) { + return MACH_PORT_NULL; + } + + return process->threads[index]; +} + +bool FIRCLSProcessSuspendAllOtherThreads(FIRCLSProcess *process) { + mach_msg_type_number_t i; + bool success; + + success = true; + for (i = 0; i < process->threadCount; ++i) { + thread_t thread; + + thread = FIRCLSProcessGetThread(process, i); + + if (FIRCLSProcessIsCurrentThread(process, thread)) { + continue; + } + + // FIXME: workaround to get this building on watch, but we need to suspend/resume threads! +#if CLS_CAN_SUSPEND_THREADS + success = success && (thread_suspend(thread) == KERN_SUCCESS); +#endif + } + + return success; +} + +bool FIRCLSProcessResumeAllOtherThreads(FIRCLSProcess *process) { + mach_msg_type_number_t i; + bool success; + + success = true; + for (i = 0; i < process->threadCount; ++i) { + thread_t thread; + + thread = FIRCLSProcessGetThread(process, i); + + if (FIRCLSProcessIsCurrentThread(process, thread)) { + continue; + } + + // FIXME: workaround to get this building on watch, but we need to suspend/resume threads! +#if CLS_CAN_SUSPEND_THREADS + success = success && (thread_resume(thread) == KERN_SUCCESS); +#endif + } + + return success; + +} + +#pragma mark - Thread Properties +void* FIRCLSThreadGetCurrentPC(void) { + return __builtin_return_address(0); +} + +static bool FIRCLSProcessGetThreadState(FIRCLSProcess *process, thread_t thread, FIRCLSThreadContext *context) { + if (!FIRCLSIsValidPointer(context)) { + FIRCLSSDKLogError("invalid context supplied"); + return false; + } + + // If the thread context we should use is non-NULL, then just assign it here. Otherwise, + // query the thread state + if (FIRCLSProcessIsCrashedThread(process, thread) && FIRCLSIsValidPointer(process->uapVoid)) { + *context = *((_STRUCT_UCONTEXT*)process->uapVoid)->uc_mcontext; + return true; + } + + // Here's a wild trick: emulate what thread_get_state would do. It apppears that + // we cannot reliably unwind out of thread_get_state. So, instead of trying, setup + // a thread context that resembles what the real thing would look like + if (FIRCLSProcessIsCurrentThread(process, thread)) { + FIRCLSSDKLog("Faking current thread\n"); + memset(context, 0, sizeof(FIRCLSThreadContext)); + + // Compute the frame address, and then base the stack value off of that. A frame pushes + // two pointers onto the stack, so we have to offset. + const uintptr_t frameAddress = (uintptr_t)__builtin_frame_address(0); + const uintptr_t stackAddress = FIRCLSUnwindStackPointerFromFramePointer(frameAddress); + +#if CLS_CPU_X86_64 + context->__ss.__rip = (uintptr_t)FIRCLSThreadGetCurrentPC(); + context->__ss.__rbp = frameAddress; + context->__ss.__rsp = stackAddress; +#elif CLS_CPU_I386 + context->__ss.__eip = (uintptr_t)FIRCLSThreadGetCurrentPC(); + context->__ss.__ebp = frameAddress; + context->__ss.__esp = stackAddress; +#elif CLS_CPU_ARM64 + FIRCLSThreadContextSetPC(context, (uintptr_t)FIRCLSThreadGetCurrentPC()); + FIRCLSThreadContextSetFramePointer(context, frameAddress); + FIRCLSThreadContextSetLinkRegister(context, (uintptr_t)__builtin_return_address(0)); + FIRCLSThreadContextSetStackPointer(context, stackAddress); +#elif CLS_CPU_ARM + context->__ss.__pc = (uintptr_t)FIRCLSThreadGetCurrentPC(); + context->__ss.__r[7] = frameAddress; + context->__ss.__lr = (uintptr_t)__builtin_return_address(0); + context->__ss.__sp = stackAddress; +#endif + + return true; + } + +#if !TARGET_OS_WATCH + // try to get the value by querying the thread state + mach_msg_type_number_t stateCount = FIRCLSThreadStateCount; + if (thread_get_state(thread, FIRCLSThreadState, (thread_state_t)(&(context->__ss)), &stateCount) != KERN_SUCCESS) { + FIRCLSSDKLogError("failed to get thread state\n"); + return false; + } + + return true; +#else + return false; +#endif + +} + +static bool FIRCLSProcessGetThreadName(FIRCLSProcess *process, thread_t thread, char *buffer, size_t length) { + pthread_t pthread; + + if (!buffer || length <= 0) { + return false; + } + + pthread = pthread_from_mach_thread_np(thread); + + return pthread_getname_np(pthread, buffer, length) == 0; +} + +static const char* FIRCLSProcessGetThreadDispatchQueueName(FIRCLSProcess *process, thread_t thread) { + thread_identifier_info_data_t info; + mach_msg_type_number_t infoCount; + dispatch_queue_t* queueAddress; + dispatch_queue_t queue; + const char* string; + + infoCount = THREAD_IDENTIFIER_INFO_COUNT; + if (thread_info(thread, THREAD_IDENTIFIER_INFO, (thread_info_t)&info, &infoCount) != KERN_SUCCESS) { + FIRCLSSDKLog("unable to get thread info\n"); + return NULL; + } + + queueAddress = (dispatch_queue_t*)info.dispatch_qaddr; + if (queueAddress == NULL) { + return ""; + } + + // Sometimes a queue address is invalid. I cannot explain why this is, but + // it can cause a crash. + if (!FIRCLSReadMemory((vm_address_t)queueAddress, &queue, sizeof(void*))) { + return ""; + } + + // here, we know it is safe to de-reference this address, so attempt to get the queue name + if (!queue) { + return ""; + } + + string = dispatch_queue_get_label(queue); + + // but, we still don't if the entire string is valid, so check that too + if (!FIRCLSReadString((vm_address_t)string, (char**)&string, 128)) { + return ""; + } + + return string; +} + +#pragma mark - Data Recording +static bool FIRCLSProcessRecordThreadRegisters(FIRCLSThreadContext context, FIRCLSFile *file) { +#if CLS_CPU_ARM + FIRCLSFileWriteHashEntryUint64(file, "r0", context.__ss.__r[0]); + FIRCLSFileWriteHashEntryUint64(file, "r1", context.__ss.__r[1]); + FIRCLSFileWriteHashEntryUint64(file, "r2", context.__ss.__r[2]); + FIRCLSFileWriteHashEntryUint64(file, "r3", context.__ss.__r[3]); + FIRCLSFileWriteHashEntryUint64(file, "r4", context.__ss.__r[4]); + FIRCLSFileWriteHashEntryUint64(file, "r5", context.__ss.__r[5]); + FIRCLSFileWriteHashEntryUint64(file, "r6", context.__ss.__r[6]); + FIRCLSFileWriteHashEntryUint64(file, "r7", context.__ss.__r[7]); + FIRCLSFileWriteHashEntryUint64(file, "r8", context.__ss.__r[8]); + FIRCLSFileWriteHashEntryUint64(file, "r9", context.__ss.__r[9]); + FIRCLSFileWriteHashEntryUint64(file, "r10", context.__ss.__r[10]); + FIRCLSFileWriteHashEntryUint64(file, "r11", context.__ss.__r[11]); + FIRCLSFileWriteHashEntryUint64(file, "ip", context.__ss.__r[12]); + FIRCLSFileWriteHashEntryUint64(file, "sp", context.__ss.__sp); + FIRCLSFileWriteHashEntryUint64(file, "lr", context.__ss.__lr); + FIRCLSFileWriteHashEntryUint64(file, "pc", context.__ss.__pc); + FIRCLSFileWriteHashEntryUint64(file, "cpsr", context.__ss.__cpsr); +#elif CLS_CPU_ARM64 + FIRCLSFileWriteHashEntryUint64(file, "x0", context.__ss.__x[0]); + FIRCLSFileWriteHashEntryUint64(file, "x1", context.__ss.__x[1]); + FIRCLSFileWriteHashEntryUint64(file, "x2", context.__ss.__x[2]); + FIRCLSFileWriteHashEntryUint64(file, "x3", context.__ss.__x[3]); + FIRCLSFileWriteHashEntryUint64(file, "x4", context.__ss.__x[4]); + FIRCLSFileWriteHashEntryUint64(file, "x5", context.__ss.__x[5]); + FIRCLSFileWriteHashEntryUint64(file, "x6", context.__ss.__x[6]); + FIRCLSFileWriteHashEntryUint64(file, "x7", context.__ss.__x[7]); + FIRCLSFileWriteHashEntryUint64(file, "x8", context.__ss.__x[8]); + FIRCLSFileWriteHashEntryUint64(file, "x9", context.__ss.__x[9]); + FIRCLSFileWriteHashEntryUint64(file, "x10", context.__ss.__x[10]); + FIRCLSFileWriteHashEntryUint64(file, "x11", context.__ss.__x[11]); + FIRCLSFileWriteHashEntryUint64(file, "x12", context.__ss.__x[12]); + FIRCLSFileWriteHashEntryUint64(file, "x13", context.__ss.__x[13]); + FIRCLSFileWriteHashEntryUint64(file, "x14", context.__ss.__x[14]); + FIRCLSFileWriteHashEntryUint64(file, "x15", context.__ss.__x[15]); + FIRCLSFileWriteHashEntryUint64(file, "x16", context.__ss.__x[16]); + FIRCLSFileWriteHashEntryUint64(file, "x17", context.__ss.__x[17]); + FIRCLSFileWriteHashEntryUint64(file, "x18", context.__ss.__x[18]); + FIRCLSFileWriteHashEntryUint64(file, "x19", context.__ss.__x[19]); + FIRCLSFileWriteHashEntryUint64(file, "x20", context.__ss.__x[20]); + FIRCLSFileWriteHashEntryUint64(file, "x21", context.__ss.__x[21]); + FIRCLSFileWriteHashEntryUint64(file, "x22", context.__ss.__x[22]); + FIRCLSFileWriteHashEntryUint64(file, "x23", context.__ss.__x[23]); + FIRCLSFileWriteHashEntryUint64(file, "x24", context.__ss.__x[24]); + FIRCLSFileWriteHashEntryUint64(file, "x25", context.__ss.__x[25]); + FIRCLSFileWriteHashEntryUint64(file, "x26", context.__ss.__x[26]); + FIRCLSFileWriteHashEntryUint64(file, "x27", context.__ss.__x[27]); + FIRCLSFileWriteHashEntryUint64(file, "x28", context.__ss.__x[28]); + FIRCLSFileWriteHashEntryUint64(file, "fp", FIRCLSThreadContextGetFramePointer(&context)); + FIRCLSFileWriteHashEntryUint64(file, "sp", FIRCLSThreadContextGetStackPointer(&context)); + FIRCLSFileWriteHashEntryUint64(file, "lr", FIRCLSThreadContextGetLinkRegister(&context)); + FIRCLSFileWriteHashEntryUint64(file, "pc", FIRCLSThreadContextGetPC(&context)); + FIRCLSFileWriteHashEntryUint64(file, "cpsr", context.__ss.__cpsr); +#elif CLS_CPU_I386 + FIRCLSFileWriteHashEntryUint64(file, "eax", context.__ss.__eax); + FIRCLSFileWriteHashEntryUint64(file, "ebx", context.__ss.__ebx); + FIRCLSFileWriteHashEntryUint64(file, "ecx", context.__ss.__ecx); + FIRCLSFileWriteHashEntryUint64(file, "edx", context.__ss.__edx); + FIRCLSFileWriteHashEntryUint64(file, "edi", context.__ss.__edi); + FIRCLSFileWriteHashEntryUint64(file, "esi", context.__ss.__esi); + FIRCLSFileWriteHashEntryUint64(file, "ebp", context.__ss.__ebp); + FIRCLSFileWriteHashEntryUint64(file, "esp", context.__ss.__esp); + FIRCLSFileWriteHashEntryUint64(file, "ss", context.__ss.__ss); + FIRCLSFileWriteHashEntryUint64(file, "eflags", context.__ss.__eflags); + FIRCLSFileWriteHashEntryUint64(file, "eip", context.__ss.__eip); + FIRCLSFileWriteHashEntryUint64(file, "cs", context.__ss.__cs); + FIRCLSFileWriteHashEntryUint64(file, "ds", context.__ss.__ds); + FIRCLSFileWriteHashEntryUint64(file, "es", context.__ss.__es); + FIRCLSFileWriteHashEntryUint64(file, "fs", context.__ss.__fs); + FIRCLSFileWriteHashEntryUint64(file, "gs", context.__ss.__gs); + + // how do we get the cr2 register? +#elif CLS_CPU_X86_64 + FIRCLSFileWriteHashEntryUint64(file, "rax", context.__ss.__rax); + FIRCLSFileWriteHashEntryUint64(file, "rbx", context.__ss.__rbx); + FIRCLSFileWriteHashEntryUint64(file, "rcx", context.__ss.__rcx); + FIRCLSFileWriteHashEntryUint64(file, "rdx", context.__ss.__rdx); + FIRCLSFileWriteHashEntryUint64(file, "rdi", context.__ss.__rdi); + FIRCLSFileWriteHashEntryUint64(file, "rsi", context.__ss.__rsi); + FIRCLSFileWriteHashEntryUint64(file, "rbp", context.__ss.__rbp); + FIRCLSFileWriteHashEntryUint64(file, "rsp", context.__ss.__rsp); + FIRCLSFileWriteHashEntryUint64(file, "r8", context.__ss.__r8); + FIRCLSFileWriteHashEntryUint64(file, "r9", context.__ss.__r9); + FIRCLSFileWriteHashEntryUint64(file, "r10", context.__ss.__r10); + FIRCLSFileWriteHashEntryUint64(file, "r11", context.__ss.__r11); + FIRCLSFileWriteHashEntryUint64(file, "r12", context.__ss.__r12); + FIRCLSFileWriteHashEntryUint64(file, "r13", context.__ss.__r13); + FIRCLSFileWriteHashEntryUint64(file, "r14", context.__ss.__r14); + FIRCLSFileWriteHashEntryUint64(file, "r15", context.__ss.__r15); + FIRCLSFileWriteHashEntryUint64(file, "rip", context.__ss.__rip); + FIRCLSFileWriteHashEntryUint64(file, "rflags", context.__ss.__rflags); + FIRCLSFileWriteHashEntryUint64(file, "cs", context.__ss.__cs); + FIRCLSFileWriteHashEntryUint64(file, "fs", context.__ss.__fs); + FIRCLSFileWriteHashEntryUint64(file, "gs", context.__ss.__gs); +#endif + + return true; +} + +static bool FIRCLSProcessRecordThread(FIRCLSProcess *process, thread_t thread, FIRCLSFile *file) { + FIRCLSUnwindContext unwindContext; + FIRCLSThreadContext context; + + if (!FIRCLSProcessGetThreadState(process, thread, &context)) { + FIRCLSSDKLogError("unable to get thread state"); + return false; + } + + if (!FIRCLSUnwindInit(&unwindContext, context)) { + FIRCLSSDKLog("unable to init unwind context\n"); + + return false; + } + + FIRCLSFileWriteHashStart(file); + + // registers + FIRCLSFileWriteHashKey(file, "registers"); + FIRCLSFileWriteHashStart(file); + + FIRCLSProcessRecordThreadRegisters(context, file); + + FIRCLSFileWriteHashEnd(file); + + // stacktrace + FIRCLSFileWriteHashKey(file, "stacktrace"); + + // stacktrace is an array of integers + FIRCLSFileWriteArrayStart(file); + + uint32_t repeatedPCCount = 0; + uint64_t repeatedPC = 0; + const FIRCLSInternalLogLevel level = _clsContext.writable->internalLogging.logLevel; + + while (FIRCLSUnwindNextFrame(&unwindContext)) { + const uintptr_t pc = FIRCLSUnwindGetPC(&unwindContext); + const uint32_t frameCount = FIRCLSUnwindGetFrameRepeatCount(&unwindContext); + + if (repeatedPC == pc && repeatedPC != 0) { + // actively counting a recursion + repeatedPCCount = frameCount; + continue; + } + + if (frameCount >= FIRCLSUnwindInfiniteRecursionCountThreshold && repeatedPC == 0) { + repeatedPC = pc; + FIRCLSSDKLogWarn("Possible infinite recursion - suppressing logging\n"); + _clsContext.writable->internalLogging.logLevel = FIRCLSInternalLogLevelWarn; + continue; + } + + if (repeatedPC != 0) { + // at this point, we've recorded a repeated PC, but it is now no longer + // repeating, so we can restore the logging + _clsContext.writable->internalLogging.logLevel = level; + } + + FIRCLSFileWriteArrayEntryUint64(file, pc); + } + + FIRCLSFileWriteArrayEnd(file); + + // crashed? + if (FIRCLSProcessIsCrashedThread(process, thread)) { + FIRCLSFileWriteHashEntryBoolean(file, "crashed", true); + } + + if (repeatedPC != 0) { + FIRCLSFileWriteHashEntryUint64(file, "repeated_pc", repeatedPC); + FIRCLSFileWriteHashEntryUint64(file, "repeat_count", repeatedPCCount); + } + + // Just for extra safety, restore the logging level again. The logic + // above is fairly tricky, this is cheap, and no logging is a real pain. + _clsContext.writable->internalLogging.logLevel = level; + + // end thread info + FIRCLSFileWriteHashEnd(file); + + return true; +} + +bool FIRCLSProcessRecordAllThreads(FIRCLSProcess *process, FIRCLSFile *file) { + uint32_t threadCount; + uint32_t i; + + threadCount = FIRCLSProcessGetThreadCount(process); + + FIRCLSFileWriteSectionStart(file, "threads"); + + FIRCLSFileWriteArrayStart(file); + + for (i = 0; i < threadCount; ++i) { + thread_t thread; + + thread = FIRCLSProcessGetThread(process, i); + + FIRCLSSDKLogInfo("recording thread %d data\n", i); + if (!FIRCLSProcessRecordThread(process, thread, file)) { + return false; + } + } + + FIRCLSFileWriteArrayEnd(file); + + FIRCLSFileWriteSectionEnd(file); + + FIRCLSSDKLogInfo("completed recording all thread data\n"); + + return true; +} + +void FIRCLSProcessRecordThreadNames(FIRCLSProcess *process, FIRCLSFile* file) { + uint32_t threadCount; + uint32_t i; + + FIRCLSFileWriteSectionStart(file, "thread_names"); + + FIRCLSFileWriteArrayStart(file); + + threadCount = FIRCLSProcessGetThreadCount(process); + for (i = 0; i < threadCount; ++i) { + thread_t thread; + char name[THREAD_NAME_BUFFER_SIZE]; + + thread = FIRCLSProcessGetThread(process, i); + + name[0] = 0; // null-terminate, just in case nothing is written + + FIRCLSProcessGetThreadName(process, thread, name, THREAD_NAME_BUFFER_SIZE); + + FIRCLSFileWriteArrayEntryString(file, name); + } + + FIRCLSFileWriteArrayEnd(file); + FIRCLSFileWriteSectionEnd(file); +} + +void FIRCLSProcessRecordDispatchQueueNames(FIRCLSProcess *process, FIRCLSFile* file) { + uint32_t threadCount; + uint32_t i; + + FIRCLSFileWriteSectionStart(file, "dispatch_queue_names"); + + FIRCLSFileWriteArrayStart(file); + + threadCount = FIRCLSProcessGetThreadCount(process); + for (i = 0; i < threadCount; ++i) { + thread_t thread; + const char* name; + + thread = FIRCLSProcessGetThread(process, i); + + name = FIRCLSProcessGetThreadDispatchQueueName(process, thread); + + FIRCLSFileWriteArrayEntryString(file, name); + } + + FIRCLSFileWriteArrayEnd(file); + FIRCLSFileWriteSectionEnd(file); +} + +#pragma mark - Othe Process Info +bool FIRCLSProcessGetMemoryUsage(uint64_t* active, uint64_t* inactive, uint64_t* wired, uint64_t* freeMem) { + mach_port_t hostPort; + mach_msg_type_number_t hostSize; + vm_size_t pageSize; + vm_statistics_data_t vmStat; + + hostPort = mach_host_self(); + + hostSize = sizeof(vm_statistics_data_t) / sizeof(integer_t); + + pageSize = _clsContext.readonly->host.pageSize; + + if (host_statistics(hostPort, HOST_VM_INFO, (host_info_t)&vmStat, &hostSize) != KERN_SUCCESS) { + FIRCLSSDKLog("Failed to get vm statistics\n"); + return false; + } + + if (!(active && inactive && wired && freeMem)) { + FIRCLSSDKLog("Invalid pointers\n"); + return false; + } + + // compute the sizes in bytes and return the values + *active = vmStat.active_count * pageSize; + *inactive = vmStat.inactive_count * pageSize; + *wired = vmStat.wire_count * pageSize; + *freeMem = vmStat.free_count * pageSize; + + return true; +} + +bool FIRCLSProcessGetInfo(FIRCLSProcess* process, uint64_t* virtualSize, uint64_t* residentSize, time_value_t* userTime, time_value_t* systemTime) { + struct task_basic_info_64 taskInfo; + mach_msg_type_number_t count; + + count = TASK_BASIC_INFO_64_COUNT; + if (task_info(process->task, TASK_BASIC_INFO_64, (task_info_t)&taskInfo, &count) != KERN_SUCCESS) { + FIRCLSSDKLog("Failed to get task info\n"); + return false; + } + + if (!(virtualSize && residentSize && userTime && systemTime)) { + FIRCLSSDKLog("Invalid pointers\n"); + return false; + } + + *virtualSize = taskInfo.virtual_size; + *residentSize = taskInfo.resident_size; + *userTime = taskInfo.user_time; + *systemTime = taskInfo.system_time; + + return true; +} + +void FIRCLSProcessRecordStats(FIRCLSProcess* process, FIRCLSFile* file) { + uint64_t active; + uint64_t inactive; + uint64_t virtualSize; + uint64_t residentSize; + uint64_t wired; + uint64_t freeMem; + time_value_t userTime; + time_value_t systemTime; + + if (!FIRCLSProcessGetMemoryUsage(&active, &inactive, &wired, &freeMem)) { + FIRCLSSDKLog("Unable to get process memory usage\n"); + return; + } + + if (!FIRCLSProcessGetInfo(process, &virtualSize, &residentSize, &userTime, &systemTime)) { + FIRCLSSDKLog("Unable to get process stats\n"); + return; + } + + FIRCLSFileWriteSectionStart(file, "process_stats"); + + FIRCLSFileWriteHashStart(file); + + FIRCLSFileWriteHashEntryUint64(file, "active", active); + FIRCLSFileWriteHashEntryUint64(file, "inactive", inactive); + FIRCLSFileWriteHashEntryUint64(file, "wired", wired); + FIRCLSFileWriteHashEntryUint64(file, "freeMem", freeMem); // Intentionally left in, for now. Arg. + FIRCLSFileWriteHashEntryUint64(file, "free_mem", freeMem); + FIRCLSFileWriteHashEntryUint64(file, "virtual", virtualSize); + FIRCLSFileWriteHashEntryUint64(file, "resident", active); + FIRCLSFileWriteHashEntryUint64(file, "user_time", (userTime.seconds * 1000 * 1000) + userTime.microseconds); + FIRCLSFileWriteHashEntryUint64(file, "sys_time", (systemTime.seconds * 1000 * 1000) + systemTime.microseconds); + + FIRCLSFileWriteHashEnd(file); + + FIRCLSFileWriteSectionEnd(file); +} + +#pragma mark - Runtime Info +#define OBJC_MSG_SEND_START ((vm_address_t)objc_msgSend) +#define OBJC_MSG_SEND_SUPER_START ((vm_address_t)objc_msgSendSuper) +#define OBJC_MSG_SEND_END (OBJC_MSG_SEND_START+66) +#define OBJC_MSG_SEND_SUPER_END (OBJC_MSG_SEND_SUPER_START+66) + +#if !CLS_CPU_ARM64 +#define OBJC_MSG_SEND_STRET_START ((vm_address_t)objc_msgSend_stret) +#define OBJC_MSG_SEND_SUPER_STRET_START ((vm_address_t)objc_msgSendSuper_stret) +#define OBJC_MSG_SEND_STRET_END (OBJC_MSG_SEND_STRET_START+66) +#define OBJC_MSG_SEND_SUPER_STRET_END (OBJC_MSG_SEND_SUPER_STRET_START+66) +#endif + +#if CLS_CPU_X86 +#define OBJC_MSG_SEND_FPRET_START ((vm_address_t)objc_msgSend_fpret) +#define OBJC_MSG_SEND_FPRET_END (OBJC_MSG_SEND_FPRET_START+66) +#endif + +static const char* FIRCLSProcessGetObjCSelectorName(FIRCLSThreadContext registers) { + void* selectorAddress; + void* selRegister; +#if !CLS_CPU_ARM64 + void* stretSelRegister; +#endif + vm_address_t pc; + + // First, did we crash in objc_msgSend? The two ways I can think + // of doing this are to use dladdr, and then comparing the strings to + // objc_msg*, or looking up the symbols, and guessing if we are "close enough". + + selectorAddress = NULL; + +#if CLS_CPU_ARM + pc = registers.__ss.__pc; + selRegister = (void*)registers.__ss.__r[1]; + stretSelRegister = (void*)registers.__ss.__r[2]; +#elif CLS_CPU_ARM64 + pc = FIRCLSThreadContextGetPC(®isters); + selRegister = (void*)registers.__ss.__x[1]; +#elif CLS_CPU_I386 + pc = registers.__ss.__eip; + selRegister = (void*)registers.__ss.__ecx; + stretSelRegister = (void*)registers.__ss.__ecx; +#elif CLS_CPU_X86_64 + pc = registers.__ss.__rip; + selRegister = (void*)registers.__ss.__rsi; + stretSelRegister = (void*)registers.__ss.__rdx; +#endif + + if ((pc >= OBJC_MSG_SEND_START) && (pc <= OBJC_MSG_SEND_END)) { + selectorAddress = selRegister; + } + +#if !CLS_CPU_ARM64 + if ((pc >= OBJC_MSG_SEND_SUPER_START) && (pc <= OBJC_MSG_SEND_SUPER_END)) { + selectorAddress = selRegister; + } + + if ((pc >= OBJC_MSG_SEND_STRET_START) && (pc <= OBJC_MSG_SEND_STRET_END)) { + selectorAddress = stretSelRegister; + } + + if ((pc >= OBJC_MSG_SEND_SUPER_STRET_START) && (pc <= OBJC_MSG_SEND_SUPER_STRET_END)) { + selectorAddress = stretSelRegister; + } + +#if CLS_CPU_X86 + if ((pc >= OBJC_MSG_SEND_FPRET_START) && (pc <= OBJC_MSG_SEND_FPRET_END)) { + selectorAddress = selRegister; + } +#endif +#endif + + if (!selectorAddress) { + return ""; + } + + if (!FIRCLSReadString((vm_address_t)selectorAddress, (char**)&selectorAddress, 128)) { + FIRCLSSDKLog("Unable to read the selector string\n"); + return ""; + } + + return selectorAddress; + +} + +#define CRASH_ALIGN __attribute__((aligned(8))) +typedef struct { + unsigned version CRASH_ALIGN; + const char *message CRASH_ALIGN; + const char *signature CRASH_ALIGN; + const char *backtrace CRASH_ALIGN; + const char *message2 CRASH_ALIGN; + void *reserved CRASH_ALIGN; + void *reserved2 CRASH_ALIGN; +} crash_info_t; + +static void FIRCLSProcessRecordCrashInfo(FIRCLSFile* file) { + // TODO: this should be abstracted into binary images, if possible + FIRCLSBinaryImageRuntimeNode* nodes = _clsContext.writable->binaryImage.nodes; + if (!nodes) { + FIRCLSSDKLogError("The node structure is NULL\n"); + return; + } + + for (uint32_t i = 0; i < CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT; ++i) { + FIRCLSBinaryImageRuntimeNode* node = &nodes[i]; + + if (!node->crashInfo) { + continue; + } + + crash_info_t info; + + if (!FIRCLSReadMemory((vm_address_t)node->crashInfo, &info, sizeof(crash_info_t))) { + continue; + } + + FIRCLSSDKLogDebug("Found crash info with version %d\n", info.version); + + // Currently support versions 0 through 5. + // 4 was in use for a long time, but it appears that with iOS 9 / swift 2.0, the verison has been bumped. + if (info.version > 5) { + continue; + } + + if (!info.message) { + continue; + } + +#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME + FIRCLSSDKLogInfo("Found crash info for %s\n", node->name); +#endif + + FIRCLSSDKLogDebug("attempting to read crash info string\n"); + + char *string = NULL; + + if (!FIRCLSReadString((vm_address_t)info.message, &string, 256)) { + FIRCLSSDKLogError("Failed to copy crash info string\n"); + continue; + } + + FIRCLSFileWriteArrayEntryHexEncodedString(file, string); + } +} + +void FIRCLSProcessRecordRuntimeInfo(FIRCLSProcess* process, FIRCLSFile* file) { + FIRCLSThreadContext mcontext; + + if (!FIRCLSProcessGetThreadState(process, process->crashedThread, &mcontext)) { + FIRCLSSDKLogError("unable to get crashed thread state"); + } + + FIRCLSFileWriteSectionStart(file, "runtime"); + + FIRCLSFileWriteHashStart(file); + + FIRCLSFileWriteHashEntryString(file, "objc_selector", FIRCLSProcessGetObjCSelectorName(mcontext)); + + FIRCLSFileWriteHashKey(file, "crash_info_entries"); + + FIRCLSFileWriteArrayStart(file); + FIRCLSProcessRecordCrashInfo(file); + FIRCLSFileWriteArrayEnd(file); + + FIRCLSFileWriteHashEnd(file); + + FIRCLSFileWriteSectionEnd(file); +} diff --git a/Crashlytics/Crashlytics/Components/FIRCLSProcess.h b/Crashlytics/Crashlytics/Components/FIRCLSProcess.h new file mode 100644 index 000000000000..c12fd738776d --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSProcess.h @@ -0,0 +1,45 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFile.h" + +#include +#include + +typedef struct { + // task info + mach_port_t task; + + // thread stuff + thread_t thisThread; + thread_t crashedThread; + thread_act_array_t threads; + mach_msg_type_number_t threadCount; + void *uapVoid; // current thread state +} FIRCLSProcess; + +bool FIRCLSProcessInit(FIRCLSProcess *process, thread_t crashedThread, void *uapVoid); +bool FIRCLSProcessDestroy(FIRCLSProcess *process); +bool FIRCLSProcessDebuggerAttached(void); + +bool FIRCLSProcessSuspendAllOtherThreads(FIRCLSProcess *process); +bool FIRCLSProcessResumeAllOtherThreads(FIRCLSProcess *process); + +void FIRCLSProcessRecordThreadNames(FIRCLSProcess *process, FIRCLSFile *file); +void FIRCLSProcessRecordDispatchQueueNames(FIRCLSProcess *process, FIRCLSFile *file); +bool FIRCLSProcessRecordAllThreads(FIRCLSProcess *process, FIRCLSFile *file); +void FIRCLSProcessRecordStats(FIRCLSProcess *process, FIRCLSFile *file); +void FIRCLSProcessRecordRuntimeInfo(FIRCLSProcess *process, FIRCLSFile *file); diff --git a/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h b/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h new file mode 100644 index 000000000000..737d240d364d --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h @@ -0,0 +1,103 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFile.h" + +__BEGIN_DECLS + +#ifdef __OBJC__ +extern NSString* const FIRCLSStartTimeKey; +extern NSString* const FIRCLSFirstRunloopTurnTimeKey; +extern NSString* const FIRCLSInBackgroundKey; +#if TARGET_OS_IPHONE +extern NSString* const FIRCLSDeviceOrientationKey; +extern NSString* const FIRCLSUIOrientationKey; +#endif +extern NSString* const FIRCLSUserIdentifierKey; +extern NSString* const FIRCLSUserNameKey; +extern NSString* const FIRCLSUserEmailKey; +extern NSString* const FIRCLSDevelopmentPlatformNameKey; +extern NSString* const FIRCLSDevelopmentPlatformVersionKey; +#endif + +extern const uint32_t FIRCLSUserLoggingMaxKVEntries; + +typedef struct { + const char* incrementalPath; + const char* compactedPath; + + uint32_t maxIncrementalCount; + uint32_t maxCount; +} FIRCLSUserLoggingKVStorage; + +typedef struct { + const char* aPath; + const char* bPath; + uint32_t maxSize; + uint32_t maxEntries; + bool restrictBySize; + uint32_t* entryCount; +} FIRCLSUserLoggingABStorage; + +typedef struct { + FIRCLSUserLoggingKVStorage userKVStorage; + FIRCLSUserLoggingKVStorage internalKVStorage; + + FIRCLSUserLoggingABStorage logStorage; + FIRCLSUserLoggingABStorage errorStorage; + FIRCLSUserLoggingABStorage customExceptionStorage; +} FIRCLSUserLoggingReadOnlyContext; + +typedef struct { + const char* activeUserLogPath; + const char* activeErrorLogPath; + const char* activeCustomExceptionPath; + uint32_t userKVCount; + uint32_t internalKVCount; + uint32_t errorsCount; +} FIRCLSUserLoggingWritableContext; + +void FIRCLSUserLoggingInit(FIRCLSUserLoggingReadOnlyContext* roContext, + FIRCLSUserLoggingWritableContext* rwContext); + +void CLSLogDisableUninitializedKitMessaging(void); + +#ifdef __OBJC__ +void FIRCLSUserLoggingRecordUserKeyValue(NSString* key, id value); +void FIRCLSUserLoggingRecordInternalKeyValue(NSString* key, id value); +void FIRCLSUserLoggingWriteInternalKeyValue(NSString* key, NSString* value); + +void FIRCLSUserLoggingRecordError(NSError* error, NSDictionary* additionalUserInfo); + +NSDictionary* FIRCLSUserLoggingGetCompactedKVEntries(FIRCLSUserLoggingKVStorage* storage, + bool decodeHex); +void FIRCLSUserLoggingCompactKVEntries(FIRCLSUserLoggingKVStorage* storage); + +void FIRCLSUserLoggingRecordKeyValue(NSString* key, + id value, + FIRCLSUserLoggingKVStorage* storage, + uint32_t* counter); + +void FIRCLSUserLoggingWriteAndCheckABFiles(FIRCLSUserLoggingABStorage* storage, + const char** activePath, + void (^openedFileBlock)(FIRCLSFile* file)); + +NSArray* FIRCLSUserLoggingStoredKeyValues(const char* path); + +OBJC_EXTERN void FIRCLSLog(NSString* format, ...) NS_FORMAT_FUNCTION(1, 2); +#endif + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m b/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m new file mode 100644 index 000000000000..587d92399bc8 --- /dev/null +++ b/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m @@ -0,0 +1,531 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSUserLogging.h" + +#include + +#include "FIRCLSGlobals.h" +#include "FIRCLSUtility.h" + +#import "FIRCLSReportManager_Private.h" + +NSString *const FIRCLSStartTimeKey = @"com.crashlytics.kit-start-time"; +NSString *const FIRCLSFirstRunloopTurnTimeKey = @"com.crashlytics.first-run-loop-time"; +NSString *const FIRCLSInBackgroundKey = @"com.crashlytics.in-background"; +#if TARGET_OS_IPHONE +NSString *const FIRCLSDeviceOrientationKey = @"com.crashlytics.device-orientation"; +NSString *const FIRCLSUIOrientationKey = @"com.crashlytics.ui-orientation"; +#endif +NSString *const FIRCLSUserIdentifierKey = @"com.crashlytics.user-id"; +NSString *const FIRCLSDevelopmentPlatformNameKey = @"com.crashlytics.development-platform-name"; +NSString *const FIRCLSDevelopmentPlatformVersionKey = + @"com.crashlytics.development-platform-version"; + +const uint32_t FIRCLSUserLoggingMaxKVEntries = 64; + +static bool clsDisableUninitializedKitMessaging = false; + +#pragma mark - Prototypes +static void FIRCLSUserLoggingWriteKeyValue(NSString *key, + NSString *value, + FIRCLSUserLoggingKVStorage *storage, + uint32_t *counter); +static void FIRCLSUserLoggingCheckAndSwapABFiles(FIRCLSUserLoggingABStorage *storage, + const char **activePath, + off_t fileSize); +void FIRCLSLogInternal(NSString *message); + +#pragma mark - Setup +void FIRCLSUserLoggingInit(FIRCLSUserLoggingReadOnlyContext *roContext, + FIRCLSUserLoggingWritableContext *rwContext) { + rwContext->activeUserLogPath = roContext->logStorage.aPath; + rwContext->activeErrorLogPath = roContext->errorStorage.aPath; + rwContext->activeCustomExceptionPath = roContext->customExceptionStorage.aPath; + + rwContext->userKVCount = 0; + rwContext->internalKVCount = 0; + rwContext->errorsCount = 0; + + roContext->userKVStorage.maxIncrementalCount = FIRCLSUserLoggingMaxKVEntries; + roContext->internalKVStorage.maxIncrementalCount = roContext->userKVStorage.maxIncrementalCount; +} + +void CLSLogDisableUninitializedKitMessaging(void) { + clsDisableUninitializedKitMessaging = true; +} + +#pragma mark - KV Logging +void FIRCLSUserLoggingRecordInternalKeyValue(NSString *key, id value) { + FIRCLSUserLoggingRecordKeyValue(key, value, &_clsContext.readonly->logging.internalKVStorage, + &_clsContext.writable->logging.internalKVCount); +} + +void FIRCLSUserLoggingWriteInternalKeyValue(NSString *key, NSString *value) { + // Unsynchronized - must be run on the correct queue + FIRCLSUserLoggingWriteKeyValue(key, value, &_clsContext.readonly->logging.internalKVStorage, + &_clsContext.writable->logging.internalKVCount); +} + +void FIRCLSUserLoggingRecordUserKeyValue(NSString *key, id value) { + FIRCLSUserLoggingRecordKeyValue(key, value, &_clsContext.readonly->logging.userKVStorage, + &_clsContext.writable->logging.userKVCount); +} + +static id FIRCLSUserLoggingGetComponent(NSDictionary *entry, + NSString *componentName, + bool decodeHex) { + id value = [entry objectForKey:componentName]; + + return (decodeHex && value != [NSNull null]) ? FIRCLSFileHexDecodeString([value UTF8String]) + : value; +} + +static NSString *FIRCLSUserLoggingGetKey(NSDictionary *entry, bool decodeHex) { + return FIRCLSUserLoggingGetComponent(entry, @"key", decodeHex); +} + +static id FIRCLSUserLoggingGetValue(NSDictionary *entry, bool decodeHex) { + return FIRCLSUserLoggingGetComponent(entry, @"value", decodeHex); +} + +NSDictionary *FIRCLSUserLoggingGetCompactedKVEntries(FIRCLSUserLoggingKVStorage *storage, + bool decodeHex) { + if (!FIRCLSIsValidPointer(storage)) { + FIRCLSSDKLogError("storage invalid\n"); + return nil; + } + + NSArray *incrementalKVs = FIRCLSUserLoggingStoredKeyValues(storage->incrementalPath); + NSArray *compactedKVs = FIRCLSUserLoggingStoredKeyValues(storage->compactedPath); + + NSMutableDictionary *finalKVSet = [NSMutableDictionary new]; + + // These should all be unique, so there might be a more efficient way to + // do this + for (NSDictionary *entry in compactedKVs) { + NSString *key = FIRCLSUserLoggingGetKey(entry, decodeHex); + NSString *value = FIRCLSUserLoggingGetValue(entry, decodeHex); + + if (!key || !value) { + FIRCLSSDKLogError("compacted key/value contains a nil and must be dropped\n"); + continue; + } + + [finalKVSet setObject:value forKey:key]; + } + + // Now, assign the incremental values, in file order, so we overwrite any older values. + for (NSDictionary *entry in incrementalKVs) { + NSString *key = FIRCLSUserLoggingGetKey(entry, decodeHex); + NSString *value = FIRCLSUserLoggingGetValue(entry, decodeHex); + + if (!key || !value) { + FIRCLSSDKLogError("incremental key/value contains a nil and must be dropped\n"); + continue; + } + + if ([value isEqual:[NSNull null]]) { + [finalKVSet removeObjectForKey:key]; + } else { + [finalKVSet setObject:value forKey:key]; + } + } + + return finalKVSet; +} + +void FIRCLSUserLoggingCompactKVEntries(FIRCLSUserLoggingKVStorage *storage) { + if (!FIRCLSIsValidPointer(storage)) { + FIRCLSSDKLogError("Error: storage invalid\n"); + return; + } + + NSDictionary *finalKVs = FIRCLSUserLoggingGetCompactedKVEntries(storage, false); + + if (unlink(storage->compactedPath) != 0) { + FIRCLSSDKLog("Error: Unable to remove compacted KV store before compaction %s\n", + strerror(errno)); + } + + FIRCLSFile file; + + if (!FIRCLSFileInitWithPath(&file, storage->compactedPath, true)) { + FIRCLSSDKLog("Error: Unable to open compacted k-v file\n"); + return; + } + + uint32_t maxCount = storage->maxCount; + if ([finalKVs count] > maxCount) { + // We need to remove keys, to avoid going over the max. + // This is just about the worst way to go about doing this. There are lots of smarter ways, + // but it's very uncommon to go down this path. + NSArray *keys = [finalKVs allKeys]; + + FIRCLSSDKLogInfo("Truncating KV set, which is above max %d\n", maxCount); + + finalKVs = + [finalKVs dictionaryWithValuesForKeys:[keys subarrayWithRange:NSMakeRange(0, maxCount)]]; + } + + for (NSString *key in finalKVs) { + NSString *value = [finalKVs objectForKey:key]; + + FIRCLSFileWriteSectionStart(&file, "kv"); + FIRCLSFileWriteHashStart(&file); + // tricky - the values stored incrementally have already been hex-encoded + FIRCLSFileWriteHashEntryString(&file, "key", [key UTF8String]); + FIRCLSFileWriteHashEntryString(&file, "value", [value UTF8String]); + FIRCLSFileWriteHashEnd(&file); + FIRCLSFileWriteSectionEnd(&file); + } + + FIRCLSFileClose(&file); + + if (unlink(storage->incrementalPath) != 0) { + FIRCLSSDKLog("Error: Unable to remove incremental KV store after compaction %s\n", + strerror(errno)); + } +} + +void FIRCLSUserLoggingRecordKeyValue(NSString *key, + id value, + FIRCLSUserLoggingKVStorage *storage, + uint32_t *counter) { + if (!FIRCLSIsValidPointer(key)) { + FIRCLSSDKLogWarn("User provided bad key\n"); + return; + } + + // ensure that any invalid pointer is actually set to nil + if (!FIRCLSIsValidPointer(value) && value != nil) { + FIRCLSSDKLogWarn("Bad value pointer being clamped to nil\n"); + value = nil; + } + + if (!FIRCLSContextIsInitialized()) { + return; + } + + if ([value respondsToSelector:@selector(description)]) { + value = [value description]; + } else { + // passing nil will result in a JSON null being written, which is deserialized as [NSNull null], + // signaling to remove the key during compaction + value = nil; + } + + dispatch_sync(FIRCLSGetLoggingQueue(), ^{ + FIRCLSUserLoggingWriteKeyValue(key, value, storage, counter); + }); +} + +static void FIRCLSUserLoggingWriteKeyValue(NSString *key, + NSString *value, + FIRCLSUserLoggingKVStorage *storage, + uint32_t *counter) { + FIRCLSFile file; + + if (!FIRCLSIsValidPointer(storage) || !FIRCLSIsValidPointer(counter)) { + FIRCLSSDKLogError("Bad parameters\n"); + return; + } + + if (!FIRCLSFileInitWithPath(&file, storage->incrementalPath, true)) { + FIRCLSSDKLogError("Unable to open k-v file\n"); + return; + } + + FIRCLSFileWriteSectionStart(&file, "kv"); + FIRCLSFileWriteHashStart(&file); + FIRCLSFileWriteHashEntryHexEncodedString(&file, "key", [key UTF8String]); + FIRCLSFileWriteHashEntryHexEncodedString(&file, "value", [value UTF8String]); + FIRCLSFileWriteHashEnd(&file); + FIRCLSFileWriteSectionEnd(&file); + + FIRCLSFileClose(&file); + + *counter += 1; + if (*counter >= storage->maxIncrementalCount) { + dispatch_async(FIRCLSGetLoggingQueue(), ^{ + FIRCLSUserLoggingCompactKVEntries(storage); + *counter = 0; + }); + } +} + +NSArray *FIRCLSUserLoggingStoredKeyValues(const char *path) { + if (!FIRCLSContextIsInitialized()) { + return nil; + } + + return FIRCLSFileReadSections(path, true, ^NSObject *(id obj) { + return [obj objectForKey:@"kv"]; + }); +} + +#pragma mark - NSError Logging +static void FIRCLSUserLoggingRecordErrorUserInfo(FIRCLSFile *file, + const char *fileKey, + NSDictionary *userInfo) { + if ([userInfo count] == 0) { + return; + } + + FIRCLSFileWriteHashKey(file, fileKey); + FIRCLSFileWriteArrayStart(file); + + for (id key in userInfo) { + id value = [userInfo objectForKey:key]; + if (![value respondsToSelector:@selector(description)]) { + continue; + } + + FIRCLSFileWriteArrayStart(file); + FIRCLSFileWriteArrayEntryHexEncodedString(file, [key UTF8String]); + FIRCLSFileWriteArrayEntryHexEncodedString(file, [[value description] UTF8String]); + FIRCLSFileWriteArrayEnd(file); + } + + FIRCLSFileWriteArrayEnd(file); +} + +static void FIRCLSUserLoggingWriteError(FIRCLSFile *file, + NSError *error, + NSDictionary *additionalUserInfo, + NSArray *addresses, + uint64_t timestamp) { + FIRCLSFileWriteSectionStart(file, "error"); + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashEntryHexEncodedString(file, "domain", [[error domain] UTF8String]); + FIRCLSFileWriteHashEntryInt64(file, "code", [error code]); + FIRCLSFileWriteHashEntryUint64(file, "time", timestamp); + + // addresses + FIRCLSFileWriteHashKey(file, "stacktrace"); + FIRCLSFileWriteArrayStart(file); + for (NSNumber *address in addresses) { + FIRCLSFileWriteArrayEntryUint64(file, [address unsignedLongLongValue]); + } + FIRCLSFileWriteArrayEnd(file); + + // user-info + FIRCLSUserLoggingRecordErrorUserInfo(file, "info", [error userInfo]); + FIRCLSUserLoggingRecordErrorUserInfo(file, "extra_info", additionalUserInfo); + + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); +} + +void FIRCLSUserLoggingRecordError(NSError *error, + NSDictionary *additionalUserInfo) { + if (!error) { + return; + } + + if (!FIRCLSContextIsInitialized()) { + return; + } + + // record the stacktrace and timestamp here, so we + // are as close as possible to the user's log statement + NSArray *addresses = [NSThread callStackReturnAddresses]; + uint64_t timestamp = time(NULL); + + FIRCLSUserLoggingWriteAndCheckABFiles( + &_clsContext.readonly->logging.errorStorage, + &_clsContext.writable->logging.activeErrorLogPath, ^(FIRCLSFile *file) { + FIRCLSUserLoggingWriteError(file, error, additionalUserInfo, addresses, timestamp); + }); +} + +#pragma mark - CLSLog Support +void FIRCLSLog(NSString *format, ...) { + // If the format is nil do nothing just like NSLog. + if (!format) { + return; + } + + va_list args; + va_start(args, format); + NSString *msg = [[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + FIRCLSLogInternal(msg); +} + +#pragma mark - Properties +uint32_t FIRCLSUserLoggingMaxLogSize(void) { + // don't forget that the message encoding overhead is 2x, and we + // wrap everything in a json structure with time. So, there is + // quite a penalty + + uint32_t size = 1024 * 64; + + return size * 2; +} + +uint32_t FIRCLSUserLoggingMaxErrorSize(void) { + return FIRCLSUserLoggingMaxLogSize(); +} + +#pragma mark - AB Logging +void FIRCLSUserLoggingCheckAndSwapABFiles(FIRCLSUserLoggingABStorage *storage, + const char **activePath, + off_t fileSize) { + if (!activePath || !storage) { + return; + } + + if (!*activePath) { + return; + } + + if (storage->restrictBySize) { + if (fileSize <= storage->maxSize) { + return; + } + } else { + if (!FIRCLSIsValidPointer(storage->entryCount)) { + FIRCLSSDKLogError("Error: storage has invalid pointer, but is restricted by entry count\n"); + return; + } + + if (*storage->entryCount < storage->maxEntries) { + return; + } + + // Here we have rolled over, so we have to reset our counter. + *storage->entryCount = 0; + } + + // if it is too big: + // - reset the other log + // - make it active + const char *otherPath = NULL; + + if (*activePath == storage->aPath) { + otherPath = storage->bPath; + } else { + // take this path if the pointer is invalid as well, to reset + otherPath = storage->aPath; + } + + // guard here against path being nil or empty + NSString *pathString = [NSString stringWithUTF8String:otherPath]; + + if ([pathString length] > 0) { + // ignore the error, because there is nothing we can do to recover here, and its likely + // any failures would be intermittent + + [[NSFileManager defaultManager] removeItemAtPath:pathString error:nil]; + } + + *activePath = otherPath; +} + +void FIRCLSUserLoggingWriteAndCheckABFiles(FIRCLSUserLoggingABStorage *storage, + const char **activePath, + void (^openedFileBlock)(FIRCLSFile *file)) { + if (!storage || !activePath || !openedFileBlock) { + return; + } + + if (!*activePath) { + return; + } + + if (storage->restrictBySize) { + if (storage->maxSize == 0) { + return; + } + } else { + if (storage->maxEntries == 0) { + return; + } + } + + dispatch_sync(FIRCLSGetLoggingQueue(), ^{ + FIRCLSFile file; + + if (!FIRCLSFileInitWithPath(&file, *activePath, true)) { + FIRCLSSDKLog("Unable to open log file\n"); + return; + } + + openedFileBlock(&file); + + off_t fileSize = 0; + FIRCLSFileCloseWithOffset(&file, &fileSize); + + // increment the count before calling FIRCLSUserLoggingCheckAndSwapABFiles, so the value + // reflects the actual amount of stuff written + if (!storage->restrictBySize && FIRCLSIsValidPointer(storage->entryCount)) { + *storage->entryCount += 1; + } + + dispatch_async(FIRCLSGetLoggingQueue(), ^{ + FIRCLSUserLoggingCheckAndSwapABFiles(storage, activePath, fileSize); + }); + }); +} + +void FIRCLSLogInternalWrite(FIRCLSFile *file, NSString *message, uint64_t time) { + FIRCLSFileWriteSectionStart(file, "log"); + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashEntryHexEncodedString(file, "msg", [message UTF8String]); + FIRCLSFileWriteHashEntryUint64(file, "time", time); + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); +} + +void FIRCLSLogInternal(NSString *message) { + if (!message) { + return; + } + + if (!FIRCLSContextIsInitialized()) { + if (!clsDisableUninitializedKitMessaging) { + FIRCLSWarningLog(@"WARNING: FIRCLSLog has been used before (or concurrently with) " + @"Crashlytics initialization and cannot be recorded. The message was: \n%@", + message); + } + return; + } + struct timeval te; + + NSUInteger messageLength = [message length]; + int maxLogSize = _clsContext.readonly->logging.logStorage.maxSize; + + if (messageLength > maxLogSize) { + FIRCLSWarningLog( + @"WARNING: Attempted to write %zd bytes, but %d is the maximum size of the log. " + @"Truncating to %d bytes.\n", + messageLength, maxLogSize, maxLogSize); + message = [message substringToIndex:maxLogSize]; + } + + // unable to get time - abort + if (gettimeofday(&te, NULL) != 0) { + return; + } + + const uint64_t time = te.tv_sec * 1000LL + te.tv_usec / 1000; + + FIRCLSUserLoggingWriteAndCheckABFiles(&_clsContext.readonly->logging.logStorage, + &_clsContext.writable->logging.activeUserLogPath, + ^(FIRCLSFile *file) { + FIRCLSLogInternalWrite(file, message, time); + }); +} diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h b/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h new file mode 100644 index 000000000000..2c259c29604b --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h @@ -0,0 +1,61 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +typedef NS_ENUM(NSInteger, FIRCLSNetworkClientErrorType) { + FIRCLSNetworkClientErrorTypeUnknown = -1, + FIRCLSNetworkClientErrorTypeFileUnreadable = -2 +}; + +extern NSString *const FIRCLSNetworkClientErrorDomain; + +@protocol FIRCLSNetworkClientDelegate; +@class FIRCLSDataCollectionToken; +@class FIRCLSFileManager; + +@interface FIRCLSNetworkClient : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithQueue:(NSOperationQueue *)queue + fileManager:(FIRCLSFileManager *)fileManager + delegate:(id)delegate; + +@property(nonatomic, weak) id delegate; + +@property(nonatomic, readonly) NSOperationQueue *operationQueue; +@property(nonatomic, readonly) BOOL supportsBackgroundRequests; + +- (void)startUploadRequest:(NSURLRequest *)request + filePath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + immediately:(BOOL)immediate; + +- (void)attemptToReconnectBackgroundSessionWithCompletionBlock:(void (^)(void))completionBlock; + +@end + +@class FIRCLSNetworkClient; + +@protocol FIRCLSNetworkClientDelegate +@required +- (BOOL)networkClientCanUseBackgroundSessions:(FIRCLSNetworkClient *)client; + +@optional +- (void)networkClient:(FIRCLSNetworkClient *)client + didFinishUploadWithPath:(NSString *)path + error:(NSError *)error; + +@end diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m b/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m new file mode 100644 index 000000000000..86183486a9da --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m @@ -0,0 +1,362 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSNetworkClient.h" + +#import "FIRCLSApplication.h" +#import "FIRCLSByteUtility.h" +#import "FIRCLSDataCollectionToken.h" +#import "FIRCLSDefines.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSNetworkResponseHandler.h" +#import "FIRCLSURLSession.h" +#import "FIRCLSURLSessionConfiguration.h" + +#import "FIRCLSUtility.h" + +NSString *const FIRCLSNetworkClientErrorDomain = @"FIRCLSNetworkError"; + +NSString *const FIRCLSNetworkClientBackgroundIdentifierSuffix = @".crash.background-session"; + +@interface FIRCLSNetworkClient () { + NSURLSession *_session; +} + +@property(nonatomic, strong) void (^backgroundCompletionHandler)(void); +@property(nonatomic, strong, readonly) NSURLSession *session; +@property(nonatomic, assign) BOOL canUseBackgroundSession; +@property(nonatomic, strong) FIRCLSFileManager *fileManager; + +@end + +@implementation FIRCLSNetworkClient + +- (instancetype)initWithQueue:(NSOperationQueue *)queue + fileManager:(FIRCLSFileManager *)fileManager + delegate:(id)delegate { + self = [super init]; + if (!self) { + return nil; + } + + _operationQueue = queue; + _delegate = delegate; + _fileManager = fileManager; + + self.canUseBackgroundSession = [_delegate networkClientCanUseBackgroundSessions:self]; + + if (!self.supportsBackgroundRequests) { + FIRCLSDeveloperLog( + "Crashlytics:Crash:Client", + @"Background session uploading not supported, asynchronous uploading will be used"); + } + + return self; +} + +#pragma mark - Background Support +- (NSURLSession *)session { + // Creating a NSURLSession takes some time. Doing it lazily saves us time in the normal case. + if (_session) { + return _session; + } + + NSURLSessionConfiguration *config = nil; + + Class urlSessionClass; + Class urlSessionConfigurationClass; +#if FIRCLSURLSESSION_REQUIRED + urlSessionClass = [FIRCLSURLSession class]; + urlSessionConfigurationClass = [FIRCLSURLSessionConfiguration class]; +#else + urlSessionClass = [NSURLSession class]; + urlSessionConfigurationClass = [NSURLSessionConfiguration class]; +#endif + + if (self.supportsBackgroundRequests) { + NSString *sdkBundleID = FIRCLSApplicationGetSDKBundleID(); + NSString *backgroundConfigName = + [sdkBundleID stringByAppendingString:FIRCLSNetworkClientBackgroundIdentifierSuffix]; + + config = [urlSessionConfigurationClass backgroundSessionConfiguration:backgroundConfigName]; +#if TARGET_OS_IPHONE + [config setSessionSendsLaunchEvents:NO]; +#endif + } + + if (!config) { + // take this code path if we don't support background requests OR if we failed to create a + // background configuration + config = [urlSessionConfigurationClass defaultSessionConfiguration]; + } + + _session = [urlSessionClass sessionWithConfiguration:config + delegate:self + delegateQueue:self.operationQueue]; + + if (!_session || !config) { + FIRCLSErrorLog(@"Failed to initialize"); + } + + return _session; +} + +#if FIRCLSURLSESSION_REQUIRED +- (BOOL)NSURLSessionAvailable { + if ([[FIRCLSURLSession class] respondsToSelector:@selector(NSURLSessionShouldBeUsed)]) { + return [FIRCLSURLSession NSURLSessionShouldBeUsed]; + } + + return NSClassFromString(@"NSURLSession") != nil; +} +#endif + +- (BOOL)supportsBackgroundRequests { + return !FIRCLSApplicationIsExtension() +#if FIRCLSURLSESSION_REQUIRED + && [self NSURLSessionAvailable] +#endif + && self.canUseBackgroundSession; +} + +- (void)attemptToReconnectBackgroundSessionWithCompletionBlock:(void (^)(void))completionBlock { + if (!self.supportsBackgroundRequests) { + completionBlock(); + return; + } + + // This is the absolute minimum necessary. Perhaps we can do better? + [[NSOperationQueue mainQueue] addOperationWithBlock:completionBlock]; +} + +#pragma mark - API +- (void)startUploadRequest:(NSURLRequest *)request + filePath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + immediately:(BOOL)immediate { + if (![dataCollectionToken isValid]) { + FIRCLSErrorLog(@"An upload was requested with an invalid data collection token."); + return; + } + + if (immediate) { + [self startImmediateUploadRequest:request filePath:path]; + return; + } + + NSString *description = [self relativeTaskPathForAbsolutePath:path]; + [self checkForExistingTaskMatchingDescription:description + completionBlock:^(BOOL found) { + if (found) { + FIRCLSDeveloperLog( + "Crashlytics:Crash:Client", + @"A task currently exists for this upload, skipping"); + return; + } + + [self startNewUploadRequest:request filePath:path]; + }]; +} + +#pragma mark - Support API +- (void)startImmediateUploadRequest:(NSURLRequest *)request filePath:(NSString *)path { + // check the ivar directly, to avoid going back to the delegate + if (self.supportsBackgroundRequests) { + // this can be done here, because the request will be started synchronously. + [self startNewUploadRequest:request filePath:path]; + return; + } + + if (![[NSFileManager defaultManager] isReadableFileAtPath:path]) { + FIRCLSSDKLog("Error: file unreadable\n"); + // Following the same logic as below, do not try to inform the delegate + return; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [mutableRequest setHTTPBodyStream:[NSInputStream inputStreamWithFileAtPath:path]]; + + NSURLResponse *requestResponse = nil; + + [[NSURLSession sharedSession] + dataTaskWithRequest:mutableRequest + completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, + NSError *_Nullable error) { + [FIRCLSNetworkResponseHandler + clientResponseType:requestResponse + handler:^(FIRCLSNetworkClientResponseType type, NSInteger statusCode) { + if (type != FIRCLSNetworkClientResponseSuccess) { + // don't even inform the delegate of a failure here, because we don't + // want any action to be taken synchronously + return; + } + + [[self delegate] networkClient:self + didFinishUploadWithPath:path + error:error]; + }]; + }]; +} + +- (void)startNewUploadRequest:(NSURLRequest *)request filePath:(NSString *)path { + if (![[NSFileManager defaultManager] isReadableFileAtPath:path]) { + [self.operationQueue addOperationWithBlock:^{ + [self + handleTaskDescription:path + completedWithError:[NSError errorWithDomain:FIRCLSNetworkClientErrorDomain + code:FIRCLSNetworkClientErrorTypeFileUnreadable + userInfo:@{@"path" : path}]]; + }]; + + return; + } + + NSURLSessionUploadTask *task = [self.session uploadTaskWithRequest:request + fromFile:[NSURL fileURLWithPath:path]]; + + // set the description, so we can determine what file was successfully uploaded later on + [task setTaskDescription:[self relativeTaskPathForAbsolutePath:path]]; + + [task resume]; +} + +- (NSString *)rootPath { + return self.fileManager.rootPath; +} + +- (NSString *)absolutePathForRelativeTaskPath:(NSString *)path { + return [self.rootPath stringByAppendingPathComponent:path]; +} + +- (NSString *)relativeTaskPathForAbsolutePath:(NSString *)path { + // make sure this has a tailing slash, so the path looks relative + NSString *root = [self.rootPath stringByAppendingString:@"/"]; + + if (![path hasPrefix:root]) { + FIRCLSSDKLog("Error: path '%s' is not at the root '%s'", [path UTF8String], [root UTF8String]); + return nil; + } + + return [path stringByReplacingOccurrencesOfString:root withString:@""]; +} + +#pragma mark - Task Management +- (BOOL)taskArray:(NSArray *)array hasTaskMatchingDescription:(NSString *)description { + NSUInteger idx = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger arrayIdx, BOOL *stop) { + return [[obj taskDescription] isEqualToString:description]; + }]; + + return idx != NSNotFound; +} + +- (void)checkSession:(NSURLSession *)session + forTasksMatchingDescription:(NSString *)description + completionBlock:(void (^)(BOOL found))block { + if (!session) { + block(NO); + return; + } + + [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, + NSArray *downloadTasks) { + if ([self taskArray:uploadTasks hasTaskMatchingDescription:description]) { + block(YES); + return; + } + + if ([self taskArray:dataTasks hasTaskMatchingDescription:description]) { + block(YES); + return; + } + + if ([self taskArray:downloadTasks hasTaskMatchingDescription:description]) { + block(YES); + return; + } + + block(NO); + }]; +} + +- (void)checkForExistingTaskMatchingDescription:(NSString *)description + completionBlock:(void (^)(BOOL found))block { + // Do not instantiate the normal session, because if it doesn't exist yet, it cannot possibly have + // existing tasks + [_operationQueue addOperationWithBlock:^{ + [self checkSession:self.session + forTasksMatchingDescription:description + completionBlock:^(BOOL found) { + block(found); + }]; + }]; +} + +#pragma mark - Result Handling +// This method is duplicated from FIRCLSFABNetworkClient. Sharing it is a little weird - I didn't +// feel like it fit into FIRCLSNetworkResponseHandler. +- (void)runAfterRetryValueFromResponse:(NSURLResponse *)response block:(void (^)(void))block { + NSTimeInterval delay = [FIRCLSNetworkResponseHandler retryValueForResponse:response]; + + // FIRCLSDeveloperLog("Network", @"Restarting request after %f", delay); + + FIRCLSAddOperationAfter(delay, _operationQueue, block); +} + +- (void)restartTask:(NSURLSessionTask *)task { + NSURLRequest *request = [task originalRequest]; + + [self runAfterRetryValueFromResponse:[task response] + block:^{ + NSString *path = [self + absolutePathForRelativeTaskPath:[task taskDescription]]; + + [self startNewUploadRequest:request filePath:path]; + }]; +} + +- (void)handleTask:(NSURLSessionTask *)task completedWithError:(NSError *)error { + [self handleTaskDescription:[task taskDescription] completedWithError:error]; +} + +- (void)handleTaskDescription:(NSString *)taskDescription completedWithError:(NSError *)error { + NSString *path = [self absolutePathForRelativeTaskPath:taskDescription]; + + [[self delegate] networkClient:self didFinishUploadWithPath:path error:error]; +} + +#pragma mark - NSURLSessionDelegate +- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error { + FIRCLSDeveloperLog("Crashlytics:Crash:Client", @"session became invalid: %@", error); +} + +// Careful! Not implementing this method appears to cause a crash when using a background task +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didCompleteWithError:(NSError *)error { + [FIRCLSNetworkResponseHandler handleCompletedResponse:task.response + forOriginalRequest:task.originalRequest + error:error + block:^(BOOL restart, NSError *taskError) { + if (restart) { + [self restartTask:task]; + return; + } + + [self handleTask:task + completedWithError:taskError]; + }]; +} + +@end diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h new file mode 100644 index 000000000000..667374885c79 --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h @@ -0,0 +1,53 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#include "FIRCLSProfiling.h" +#include "FIRCrashlytics.h" + +@class FBLPromise; + +NS_ASSUME_NONNULL_BEGIN + +@class FIRCLSDataCollectionArbiter; +@class FIRCLSFileManager; +@class FIRCLSInternalReport; +@class FIRCLSSettings; +@class FIRInstanceID; +@protocol FIRAnalyticsInterop; + +@interface FIRCLSReportManager : NSObject + +- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager + instanceID:(FIRInstanceID *)instanceID + analytics:(nullable id)analytics + googleAppID:(NSString *)googleAppID + dataArbiter:(FIRCLSDataCollectionArbiter *)dataArbiter + NS_DESIGNATED_INITIALIZER; +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (FBLPromise *)startWithProfilingMark:(FIRCLSProfileMark)mark; + +- (FBLPromise *)checkForUnsentReports; +- (FBLPromise *)sendUnsentReports; +- (FBLPromise *)deleteUnsentReports; + +@end + +extern NSString *const FIRCLSConfigSubmitReportsKey; +extern NSString *const FIRCLSConfigPackageReportsKey; + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m new file mode 100644 index 000000000000..bba828991938 --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m @@ -0,0 +1,897 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#import "FBLPromises.h" + +#import "FIRCLSApplication.h" +#import "FIRCLSDataCollectionArbiter.h" +#import "FIRCLSDataCollectionToken.h" +#import "FIRCLSDefines.h" +#import "FIRCLSFeatures.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSLogger.h" +#import "FIRCLSNetworkClient.h" +#import "FIRCLSPackageReportOperation.h" +#import "FIRCLSProcessReportOperation.h" +#import "FIRCLSReportUploader.h" +#import "FIRCLSSettings.h" +#import "FIRCLSSymbolResolver.h" +#import "FIRCLSUserLogging.h" + +#include "FIRCLSGlobals.h" +#include "FIRCLSUtility.h" + +#import "FIRCLSApplicationIdentifierModel.h" +#import "FIRCLSConstants.h" +#import "FIRCLSExecutionIdentifierModel.h" +#import "FIRCLSInstallIdentifierModel.h" +#import "FIRCLSSettingsOnboardingManager.h" + +#import "FIRCLSReportManager_Private.h" + +#include +#include +#include "FIRAEvent+Internal.h" +#include "FIRCLSFCRAnalytics.h" + +#if TARGET_OS_IPHONE +#import +#else +#import +#endif + +static NSTimeInterval const CLSReportRetryInterval = 10 * 60; + +static NSString *FIRCLSFirebaseAnalyticsEventLogFormat = @"$A$:%@"; + +@interface FIRCLSAnalyticsInteropListener : NSObject { +} +@end + +@implementation FIRCLSAnalyticsInteropListener + +- (void)messageTriggered:(NSString *)name parameters:(NSDictionary *)parameters { + NSDictionary *event = @{ + @"name" : name, + @"parameters" : parameters, + }; + NSString *json = FIRCLSFIRAEventDictionaryToJSON(event); + if (json != nil) { + FIRCLSLog(FIRCLSFirebaseAnalyticsEventLogFormat, json); + } +} + +@end + +/** + * A FIRReportAction is used to indicate how to handle unsent reports. + */ +typedef NS_ENUM(NSInteger, FIRCLSReportAction) { + /** Upload the reports to Crashlytics. */ + FIRCLSReportActionSend, + /** Delete the reports without uploading them. */ + FIRCLSReportActionDelete, +}; + +/** + * This is just a helper to make code using FIRReportAction more readable. + */ +typedef NSNumber FIRCLSWrappedReportAction; +@implementation NSNumber (FIRCLSWrappedReportAction) +- (FIRCLSReportAction)reportActionValue { + return [self intValue]; +} +@end + +/** + * This is a helper to make code using NSNumber for bools more readable. + */ +typedef NSNumber FIRCLSWrappedBool; + +@interface FIRCLSReportManager () { + FIRCLSFileManager *_fileManager; + FIRCLSNetworkClient *_networkClient; + FIRCLSReportUploader *_uploader; + dispatch_queue_t _dispatchQueue; + NSOperationQueue *_operationQueue; + id _analytics; + + // A promise that will be resolved when unsent reports are found on the device, and + // processReports: can be called to decide how to deal with them. + FBLPromise *_unsentReportsAvailable; + + // A promise that will be resolved when the user has provided an action that they want to perform + // for all the unsent reports. + FBLPromise *_reportActionProvided; + + // A promise that will be resolved when all unsent reports have been "handled". They won't + // necessarily have been uploaded, but we will know whether they should be sent or deleted, and + // the initial work to make that happen will have been processed on the work queue. + // + // Currently only used for testing + FBLPromise *_unsentReportsHandled; + + // A token to make sure that checkForUnsentReports only gets called once. + atomic_bool _checkForUnsentReportsCalled; + + BOOL _registeredAnalyticsEventListener; +} + +@property(nonatomic, readonly) NSString *googleAppID; + +@property(nonatomic, strong) FIRCLSDataCollectionArbiter *dataArbiter; + +// Uniquely identifies a build / binary of the app +@property(nonatomic, strong) FIRCLSApplicationIdentifierModel *appIDModel; + +// Uniquely identifies an install of the app +@property(nonatomic, strong) FIRCLSInstallIdentifierModel *installIDModel; + +// Uniquely identifies a run of the app +@property(nonatomic, strong) FIRCLSExecutionIdentifierModel *executionIDModel; + +// Settings fetched from the server +@property(nonatomic, strong) FIRCLSSettings *settings; + +// Runs the operations that fetch settings and call onboarding endpoints +@property(nonatomic, strong) FIRCLSSettingsOnboardingManager *settingsAndOnboardingManager; + +@end + +@implementation FIRCLSReportManager + +// Used only for internal data collection E2E testing +static void (^reportSentCallback)(void); + +- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager + instanceID:(FIRInstanceID *)instanceID + analytics:(id)analytics + googleAppID:(NSString *)googleAppID + dataArbiter:(FIRCLSDataCollectionArbiter *)dataArbiter { + self = [super init]; + if (!self) { + return nil; + } + + _fileManager = fileManager; + _analytics = analytics; + _googleAppID = [googleAppID copy]; + _dataArbiter = dataArbiter; + + NSString *sdkBundleID = FIRCLSApplicationGetSDKBundleID(); + + _operationQueue = [NSOperationQueue new]; + [_operationQueue setMaxConcurrentOperationCount:1]; + [_operationQueue setName:[sdkBundleID stringByAppendingString:@".work-queue"]]; + + _dispatchQueue = dispatch_queue_create("com.google.firebase.crashlytics.startup", 0); + _operationQueue.underlyingQueue = _dispatchQueue; + + _networkClient = [self clientWithOperationQueue:_operationQueue]; + + _unsentReportsAvailable = [FBLPromise pendingPromise]; + _reportActionProvided = [FBLPromise pendingPromise]; + _unsentReportsHandled = [FBLPromise pendingPromise]; + + _checkForUnsentReportsCalled = NO; + + _appIDModel = [[FIRCLSApplicationIdentifierModel alloc] init]; + _installIDModel = [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:instanceID]; + _executionIDModel = [[FIRCLSExecutionIdentifierModel alloc] init]; + + _settings = [[FIRCLSSettings alloc] initWithFileManager:_fileManager appIDModel:_appIDModel]; + + _settingsAndOnboardingManager = + [[FIRCLSSettingsOnboardingManager alloc] initWithAppIDModel:self.appIDModel + installIDModel:self.installIDModel + settings:self.settings + fileManager:self.fileManager + googleAppID:self.googleAppID]; + + return self; +} + +- (FIRCLSNetworkClient *)clientWithOperationQueue:(NSOperationQueue *)queue { + return [[FIRCLSNetworkClient alloc] initWithQueue:queue fileManager:_fileManager delegate:self]; +} + +/** + * Returns the number of unsent reports on the device, including the ones passed in. + */ +- (int)unsentReportsCountWithPreexisting:(NSArray *)paths { + int count = [self countSubmittableAndDeleteUnsubmittableReportPaths:paths]; + count += _fileManager.processingPathContents.count; + count += _fileManager.preparedPathContents.count; + return count; +} + +// This method returns a promise that is resolved with a wrapped FIRReportAction once the user has +// indicated whether they want to upload currently cached reports. +// This method should only be called when we have determined there is at least 1 unsent report. +// This method waits until either: +// 1. Data collection becomes enabled, in which case, the promise will be resolved with Send. +// 2. The developer uses the processCrashReports API to indicate whether the report +// should be sent or deleted, at which point the promise will be resolved with the action. +- (FBLPromise *)waitForReportAction { + FIRCLSDebugLog(@"[Crashlytics:Crash] Notifying that unsent reports are available."); + [_unsentReportsAvailable fulfill:@YES]; + + // If data collection gets enabled while we are waiting for an action, go ahead and send the + // reports, and any subsequent explicit response will be ignored. + FBLPromise *collectionEnabled = + [[self.dataArbiter waitForCrashlyticsCollectionEnabled] + then:^id _Nullable(NSNumber *_Nullable value) { + return @(FIRCLSReportActionSend); + }]; + + FIRCLSDebugLog(@"[Crashlytics:Crash] Waiting for send/deleteUnsentReports to be called."); + // Wait for either the processReports callback to be called, or data collection to be enabled. + return [FBLPromise race:@[ collectionEnabled, _reportActionProvided ]]; +} + +- (FBLPromise *)checkForUnsentReports { + bool expectedCalled = NO; + if (!atomic_compare_exchange_strong(&_checkForUnsentReportsCalled, &expectedCalled, YES)) { + FIRCLSErrorLog(@"checkForUnsentReports should only be called once per execution."); + return [FBLPromise resolvedWith:@NO]; + } + return _unsentReportsAvailable; +} + +- (FBLPromise *)sendUnsentReports { + [_reportActionProvided fulfill:@(FIRCLSReportActionSend)]; + return _unsentReportsHandled; +} + +- (FBLPromise *)deleteUnsentReports { + [_reportActionProvided fulfill:@(FIRCLSReportActionDelete)]; + return _unsentReportsHandled; +} + +- (FBLPromise *)startWithProfilingMark:(FIRCLSProfileMark)mark { + NSString *executionIdentifier = self.executionIDModel.executionID; + + // This needs to be called before any values are read from settings + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings reloadFromCacheWithGoogleAppID:self.googleAppID currentTimestamp:currentTimestamp]; + + if (![self checkBundleIDExists]) { + return [FBLPromise resolvedWith:@NO]; + } + +#if DEBUG + FIRCLSDebugLog(@"Root: %@", [_fileManager rootPath]); +#endif + + if ([self.dataArbiter isLegacyDataCollectionKeyInPlist]) { + FIRCLSErrorLog(@"Found legacy data collection key in app's Info.plist: " + @"firebase_crashlytics_collection_enabled"); + FIRCLSErrorLog(@"Please update your Info.plist to use the new data collection key: " + @"FirebaseCrashlyticsCollectionEnabled"); + FIRCLSErrorLog(@"The legacy data collection Info.plist value could be overridden by " + @"calling: [Fabric with:...]"); + FIRCLSErrorLog(@"The new value can be overridden by calling: [[FIRCrashlytics " + @"crashlytics] setCrashlyticsCollectionEnabled:]"); + + return [FBLPromise resolvedWith:@NO]; + } + + if (![self.settings crashReportingEnabled]) { + FIRCLSInfoLog(@"Reporting is disabled"); + [_fileManager removeContentsOfAllPaths]; + return [FBLPromise resolvedWith:@NO]; + } + + if (![_fileManager createReportDirectories]) { + return [FBLPromise resolvedWith:@NO]; + } + + // Grab existing reports + BOOL launchFailure = [self checkForAndCreateLaunchMarker]; + NSArray *preexistingReportPaths = _fileManager.activePathContents; + + FIRCLSInternalReport *report = [self setupCurrentReport:executionIdentifier]; + if (!report) { + FIRCLSErrorLog(@"Unable to setup a new report"); + } + + if (![self startCrashReporterWithProfilingMark:mark report:report]) { + FIRCLSErrorLog(@"Unable to start crash reporter"); + report = nil; + } + + // Regenerate the Install ID on a background thread if it needs to rotate because + // fetching the Firebase Install ID can be slow on some devices. This should happen after we + // create the session on disk so that we can update the Install ID in the written crash report + // metadata. + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + [self checkAndRotateInstallUUIDIfNeededWithReport:report]; + }); + + FBLPromise *promise = [FBLPromise resolvedWith:@(report != nil)]; + + if ([self.dataArbiter isCrashlyticsCollectionEnabled]) { + FIRCLSDebugLog(@"Automatic data collection is enabled."); + FIRCLSDebugLog(@"Unsent reports will be uploaded at startup"); + FIRCLSDataCollectionToken *dataCollectionToken = [FIRCLSDataCollectionToken validToken]; + [self startNetworkRequestsWithToken:dataCollectionToken + preexistingReportPaths:preexistingReportPaths + blockingSend:launchFailure + report:report]; + + // If data collection is enabled, the SDK will not notify the user + // when unsent reports are available, or respect Send / DeleteUnsentReports + [_unsentReportsAvailable fulfill:@NO]; + + } else { + FIRCLSDebugLog(@"Automatic data collection is disabled."); + + // TODO: This counting of the file system happens on the main thread. Now that some of the other + // work below has been made async and moved to the dispatch queue, maybe we can move this code + // to the dispatch queue as well. + int unsentReportsCount = [self unsentReportsCountWithPreexisting:preexistingReportPaths]; + if (unsentReportsCount > 0) { + FIRCLSDebugLog( + @"[Crashlytics:Crash] %d unsent reports are available. Checking for upload permission.", + unsentReportsCount); + // Wait for an action to get sent, either from processReports: or automatic data collection. + promise = [[self waitForReportAction] + onQueue:_dispatchQueue + then:^id _Nullable(FIRCLSWrappedReportAction *_Nullable wrappedAction) { + // Process the actions for the reports on disk. + FIRCLSReportAction action = [wrappedAction reportActionValue]; + if (action == FIRCLSReportActionSend) { + FIRCLSDebugLog(@"Sending unsent reports."); + FIRCLSDataCollectionToken *dataCollectionToken = + [FIRCLSDataCollectionToken validToken]; + [self startNetworkRequestsWithToken:dataCollectionToken + preexistingReportPaths:preexistingReportPaths + blockingSend:NO + report:report]; + + } else if (action == FIRCLSReportActionDelete) { + FIRCLSDebugLog(@"Deleting unsent reports."); + [self removeExistingReportPaths:preexistingReportPaths]; + [self removeContentsInOtherReportingDirectories]; + } else { + FIRCLSErrorLog(@"Unknown report action: %d", action); + } + return @(report != nil); + }]; + } else { + FIRCLSDebugLog(@"[Crashlytics:Crash] There are no unsent reports."); + [_unsentReportsAvailable fulfill:@NO]; + } + } + + if (report != nil) { + // capture the start-up time here, but record it asynchronously + double endMark = FIRCLSProfileEnd(mark); + + dispatch_async(FIRCLSGetLoggingQueue(), ^{ + FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSStartTimeKey, [@(endMark) description]); + }); + } + + // To make the code more predictable and therefore testable, don't resolve the startup promise + // until the operations that got queued up for processing reports have been processed through the + // work queue. + NSOperationQueue *__weak queue = _operationQueue; + FBLPromise *__weak unsentReportsHandled = _unsentReportsHandled; + promise = [promise then:^id _Nullable(NSNumber *_Nullable value) { + [queue waitUntilAllOperationsAreFinished]; + // Signal that to callers of processReports that everything is finished. + [unsentReportsHandled fulfill:nil]; + return value; + }]; + + return promise; +} + +- (void)checkAndRotateInstallUUIDIfNeededWithReport:(FIRCLSInternalReport *)report { + [self.installIDModel regenerateInstallIDIfNeededWithBlock:^(BOOL didRotate) { + if (!didRotate) { + return; + } + + FIRCLSContextInitData initData = [self initializeContextInitData:report]; + + FIRCLSContextUpdateMetadata(&initData); + }]; +} + +- (void)startNetworkRequestsWithToken:(FIRCLSDataCollectionToken *)token + preexistingReportPaths:(NSArray *)preexistingReportPaths + blockingSend:(BOOL)blockingSend + report:(FIRCLSInternalReport *)report { + if (self.settings.isCacheExpired) { + // This method can be called more than once if the user calls + // SendUnsentReports again, so don't repeat the settings fetch + static dispatch_once_t settingsFetchOnceToken; + dispatch_once(&settingsFetchOnceToken, ^{ + [self.settingsAndOnboardingManager beginSettingsAndOnboardingWithGoogleAppId:self.googleAppID + token:token]; + }); + } + + [self processExistingReportPaths:preexistingReportPaths + dataCollectionToken:token + asUrgent:blockingSend]; + [self handleContentsInOtherReportingDirectoriesWithToken:token]; +} + +- (FIRCLSContextInitData)initializeContextInitData:(FIRCLSInternalReport *)report { + FIRCLSContextInitData initData; + + memset(&initData, 0, sizeof(FIRCLSContextInitData)); + + // Because we need to start the crash reporter right away, + // it starts up either with default settings, or cached settings + // from the last time they were fetched + FIRCLSSettings *settings = self.settings; + + initData.customBundleId = NULL; + initData.installId = [self.installIDModel.installID UTF8String]; + initData.sessionId = [[report identifier] UTF8String]; + initData.rootPath = [[report path] UTF8String]; + initData.previouslyCrashedFileRootPath = [[_fileManager rootPath] UTF8String]; +#if CLS_MACH_EXCEPTION_SUPPORTED + initData.machExceptionMask = [self machExceptionMask]; +#endif + initData.errorsEnabled = [settings errorReportingEnabled]; + initData.customExceptionsEnabled = [settings customExceptionsEnabled]; + initData.maxCustomExceptions = [settings maxCustomExceptions]; + initData.maxErrorLogSize = [settings errorLogBufferSize]; + initData.maxLogSize = [settings logBufferSize]; + initData.maxKeyValues = [settings maxCustomKeys]; + + return initData; +} + +- (BOOL)startCrashReporterWithProfilingMark:(FIRCLSProfileMark)mark + report:(FIRCLSInternalReport *)report { + if (!report) { + return NO; + } + + FIRCLSContextInitData initData = [self initializeContextInitData:report]; + + // If this is set, then we could attempt to do a synchronous submission for certain kinds of + // events (exceptions). This is a very cool feature, but adds complexity to the backend. For now, + // we're going to leave this disabled. It does work in the exception case, but will ultimtely + // result in the following crash to be discared. Usually that crash isn't interesting. But, if it + // was, we'd never have a chance to see it. + initData.delegate = NULL; + + if (![self installCrashReportingHandlers:&initData]) { + return NO; + } + + [self registerAnalyticsEventListener]; + + [self crashReportingSetupCompleted:mark]; + + return YES; +} + +- (void)crashReportingSetupCompleted:(FIRCLSProfileMark)mark { + // check our handlers + FIRCLSDispatchAfter(2.0, dispatch_get_main_queue(), ^{ + FIRCLSExceptionCheckHandlers((__bridge void *)(self)); + FIRCLSSignalCheckHandlers(); +#if CLS_MACH_EXCEPTION_SUPPORTED + FIRCLSMachExceptionCheckHandlers(); +#endif + }); + + // remove the launch failure marker and record the startup time + dispatch_async(dispatch_get_main_queue(), ^{ + [self removeLaunchFailureMarker]; + dispatch_async(FIRCLSGetLoggingQueue(), ^{ + FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSFirstRunloopTurnTimeKey, + [@(FIRCLSProfileEnd(mark)) description]); + }); + }); +} + +- (BOOL)checkBundleIDExists { + if (self.appIDModel.bundleID.length == 0) { + FIRCLSErrorLog(@"An application must have a valid bundle identifier in its Info.plist"); + return NO; + } + + return YES; +} + +- (FIRCLSReportUploader *)uploader { + if (!_uploader) { + _uploader = [[FIRCLSReportUploader alloc] initWithQueue:self.operationQueue + delegate:self + dataSource:self + client:self.networkClient + fileManager:_fileManager + analytics:_analytics]; + } + + return _uploader; +} + +#if CLS_MACH_EXCEPTION_SUPPORTED +- (exception_mask_t)machExceptionMask { + __block exception_mask_t mask = 0; + + // TODO(b/141241224) This if statement was hardcoded to no, so this block was never run + // FIRCLSSignalEnumerateHandledSignals(^(int idx, int signal) { + // if ([self.delegate ensureDeliveryOfUnixSignal:signal]) { + // mask |= FIRCLSMachExceptionMaskForSignal(signal); + // } + // }); + + return mask; +} +#endif + +#pragma mark - Reporting Lifecycle + +- (BOOL)installCrashReportingHandlers:(FIRCLSContextInitData *)initData { + if (!FIRCLSContextInitialize(initData)) { + return NO; + } + + [self setupStateNotifications]; + + return YES; +} + +- (FIRCLSInternalReport *)setupCurrentReport:(NSString *)executionIdentifier { + [self createLaunchFailureMarker]; + + NSString *reportPath = [_fileManager setupNewPathForExecutionIdentifier:executionIdentifier]; + + return [[FIRCLSInternalReport alloc] initWithPath:reportPath + executionIdentifier:executionIdentifier]; +} + +- (void)removeExistingReportPaths:(NSArray *)reportPaths { + [self.operationQueue addOperationWithBlock:^{ + for (NSString *path in reportPaths) { + [self.fileManager removeItemAtPath:path]; + } + }]; +} + +- (int)countSubmittableAndDeleteUnsubmittableReportPaths:(NSArray *)reportPaths { + int count = 0; + for (NSString *path in reportPaths) { + FIRCLSInternalReport *report = [FIRCLSInternalReport reportWithPath:path]; + if ([report needsToBeSubmitted]) { + count++; + } else { + [self.operationQueue addOperationWithBlock:^{ + [self->_fileManager removeItemAtPath:path]; + }]; + } + } + return count; +} + +- (void)processExistingReportPaths:(NSArray *)reportPaths + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent { + for (NSString *path in reportPaths) { + [self processExistingActiveReportPath:path + dataCollectionToken:dataCollectionToken + asUrgent:urgent]; + } +} + +- (void)processExistingActiveReportPath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent { + FIRCLSInternalReport *report = [FIRCLSInternalReport reportWithPath:path]; + + // TODO: needsToBeSubmitted should really be called on the background queue. + if (![report needsToBeSubmitted]) { + [self.operationQueue addOperationWithBlock:^{ + [self->_fileManager removeItemAtPath:path]; + }]; + + return; + } + + if (urgent && [dataCollectionToken isValid]) { + // We can proceed without the delegate. + [[self uploader] prepareAndSubmitReport:report + dataCollectionToken:dataCollectionToken + asUrgent:urgent + withProcessing:YES]; + return; + } + + [self submitReport:report dataCollectionToken:dataCollectionToken]; +} + +- (void)submitReport:(FIRCLSInternalReport *)report + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken { + [self.operationQueue addOperationWithBlock:^{ + [[self uploader] prepareAndSubmitReport:report + dataCollectionToken:dataCollectionToken + asUrgent:NO + withProcessing:YES]; + }]; + + [self didSubmitReport]; +} + +- (void)removeReport:(FIRCLSInternalReport *)report { + [_fileManager removeItemAtPath:report.path]; +} + +- (void)removeContentsInOtherReportingDirectories { + [self removeExistingReportPaths:self.fileManager.processingPathContents]; + [self removeExistingReportPaths:self.fileManager.preparedPathContents]; +} + +- (void)handleContentsInOtherReportingDirectoriesWithToken:(FIRCLSDataCollectionToken *)token { + [self handleExistingFilesInProcessingWithToken:token]; + [self handleExistingFilesInPreparedWithToken:token]; +} + +- (void)handleExistingFilesInProcessingWithToken:(FIRCLSDataCollectionToken *)token { + NSArray *processingPaths = _fileManager.processingPathContents; + + // deal with stuff in processing more carefully - do not process again + [self.operationQueue addOperationWithBlock:^{ + for (NSString *path in processingPaths) { + FIRCLSInternalReport *report = [FIRCLSInternalReport reportWithPath:path]; + [[self uploader] prepareAndSubmitReport:report + dataCollectionToken:token + asUrgent:NO + withProcessing:NO]; + } + }]; +} + +- (void)handleExistingFilesInPreparedWithToken:(FIRCLSDataCollectionToken *)token { + NSArray *preparedPaths = _fileManager.preparedPathContents; + + // Give our network client a chance to reconnect here, if needed. This attempts to avoid + // trying to re-submit a prepared file that is already in flight. + [self.networkClient attemptToReconnectBackgroundSessionWithCompletionBlock:^{ + [self.operationQueue addOperationWithBlock:^{ + [self uploadPreexistingFiles:preparedPaths withToken:token]; + }]; + }]; +} + +- (void)uploadPreexistingFiles:(NSArray *)files withToken:(FIRCLSDataCollectionToken *)token { + // Because this could happen quite a bit after the inital set of files was + // captured, some could be completed (deleted). So, just double-check to make sure + // the file still exists. + + for (NSString *path in files) { + if (![[_fileManager underlyingFileManager] fileExistsAtPath:path]) { + continue; + } + + [[self uploader] uploadPackagedReportAtPath:path dataCollectionToken:token asUrgent:NO]; + } +} + +- (void)retryUploadForReportAtPath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)token { + FIRCLSAddOperationAfter(CLSReportRetryInterval, self.operationQueue, ^{ + FIRCLSDeveloperLog("Crashlytics:Crash", @"re-attempting report submission"); + [[self uploader] uploadPackagedReportAtPath:path dataCollectionToken:token asUrgent:NO]; + }); +} + +#pragma mark - Launch Failure Detection +- (NSString *)launchFailureMarkerPath { + return [[_fileManager structurePath] stringByAppendingPathComponent:@"launchmarker"]; +} + +- (BOOL)createLaunchFailureMarker { + // It's tempting to use - [NSFileManger createFileAtPath:contents:attributes:] here. But that + // operation, even with empty/nil contents does a ton of work to write out nothing via a + // temporarly file. This is a much faster implemenation. + const char *path = [[self launchFailureMarkerPath] fileSystemRepresentation]; + +#if TARGET_OS_IPHONE + /* + * data-protected non-portable open(2) : + * int open_dprotected_np(user_addr_t path, int flags, int class, int dpflags, int mode) + */ + int fd = open_dprotected_np(path, O_WRONLY | O_CREAT | O_TRUNC, 4, 0, 0644); +#else + int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); +#endif + if (fd == -1) { + return NO; + } + + return close(fd) == 0; +} + +- (BOOL)launchFailureMarkerPresent { + return [[_fileManager underlyingFileManager] fileExistsAtPath:[self launchFailureMarkerPath]]; +} + +- (BOOL)removeLaunchFailureMarker { + return [_fileManager removeItemAtPath:[self launchFailureMarkerPath]]; +} + +- (BOOL)checkForAndCreateLaunchMarker { + BOOL launchFailure = [self launchFailureMarkerPresent]; + if (launchFailure) { + FIRCLSDeveloperLog("Crashlytics:Crash", + @"Last launch failed: this may indicate a crash shortly after app launch."); + } else { + [self createLaunchFailureMarker]; + } + + return launchFailure; +} + +#pragma mark - + +- (void)registerAnalyticsEventListener { + if (_registeredAnalyticsEventListener) { + return; + } + FIRCLSAnalyticsInteropListener *listener = [[FIRCLSAnalyticsInteropListener alloc] init]; + [FIRCLSFCRAnalytics registerEventListener:listener toAnalytics:_analytics]; + _registeredAnalyticsEventListener = YES; +} + +#pragma mark - Notifications +- (void)setupStateNotifications { + [self captureInitialNotificationStates]; + +#if TARGET_OS_IOS + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(willBecomeActive:) + name:UIApplicationWillEnterForegroundNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(didBecomeInactive:) + name:UIApplicationDidEnterBackgroundNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(didChangeOrientation:) + name:UIDeviceOrientationDidChangeNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(didChangeUIOrientation:) + name:UIApplicationDidChangeStatusBarOrientationNotification + object:nil]; +#elif CLS_TARGET_OS_OSX + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(willBecomeActive:) + name:@"NSApplicationWillBecomeActiveNotification" + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(didBecomeInactive:) + name:@"NSApplicationDidResignActiveNotification" + object:nil]; +#endif +} + +- (void)captureInitialNotificationStates { +#if TARGET_OS_IOS + UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; + UIInterfaceOrientation statusBarOrientation = + [FIRCLSApplicationSharedInstance() statusBarOrientation]; +#endif + + // It's nice to do this async, so we don't hold up the main thread while doing three + // consecutive IOs here. + dispatch_async(FIRCLSGetLoggingQueue(), ^{ + FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSInBackgroundKey, @"0"); +#if TARGET_OS_IOS + FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSDeviceOrientationKey, + [@(orientation) description]); + FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSUIOrientationKey, + [@(statusBarOrientation) description]); +#endif + }); +} + +- (void)willBecomeActive:(NSNotification *)notification { + FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSInBackgroundKey, @NO); +} + +- (void)didBecomeInactive:(NSNotification *)notification { + FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSInBackgroundKey, @YES); +} + +#if TARGET_OS_IOS +- (void)didChangeOrientation:(NSNotification *)notification { + UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; + + FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSDeviceOrientationKey, @(orientation)); +} + +- (void)didChangeUIOrientation:(NSNotification *)notification { + UIInterfaceOrientation statusBarOrientation = + [FIRCLSApplicationSharedInstance() statusBarOrientation]; + + FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSUIOrientationKey, @(statusBarOrientation)); +} +#endif + +#pragma mark - FIRCLSNetworkClientDelegate +- (BOOL)networkClientCanUseBackgroundSessions:(FIRCLSNetworkClient *)client { + return !FIRCLSApplicationIsExtension(); +} + +- (void)networkClient:(FIRCLSNetworkClient *)client + didFinishUploadWithPath:(NSString *)path + error:(NSError *)error { + // Route this through to the reports uploader. + // Since this callback happens after an upload finished, then we can assume that the original data + // collection was authorized. This isn't ideal, but it's better than trying to plumb the data + // collection token through all the system networking callbacks. + FIRCLSDataCollectionToken *token = [FIRCLSDataCollectionToken validToken]; + [[self uploader] reportUploadAtPath:path dataCollectionToken:token completedWithError:error]; +} + +#pragma mark - FIRCLSReportUploaderDelegate + +- (void)didCompletePackageSubmission:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)token + error:(NSError *)error { + if (!error) { + FIRCLSDeveloperLog("Crashlytics:Crash", @"report submission successful"); + return; + } + + FIRCLSDeveloperLog("Crashlytics:Crash", @"report submission failed with error %@", error); + FIRCLSSDKLog("Error: failed to submit report '%s'\n", error.description.UTF8String); + + [self retryUploadForReportAtPath:path dataCollectionToken:token]; +} + +- (void)didCompleteAllSubmissions { + [self.operationQueue addOperationWithBlock:^{ + // Dealloc the reports uploader. If we need it again (if we re-enqueued submissions from + // didCompletePackageSubmission:, we can just create it again + self->_uploader = nil; + + FIRCLSDeveloperLog("Crashlytics:Crash", @"report submission complete"); + }]; +} + +#pragma mark - UITest Helpers + +// Used only for internal data collection E2E testing +- (void)didSubmitReport { + if (reportSentCallback) { + dispatch_async(dispatch_get_main_queue(), ^{ + reportSentCallback(); + }); + } +} + ++ (void)setReportSentCallback:(void (^)(void))callback { + reportSentCallback = callback; +} + +@end diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h new file mode 100644 index 000000000000..4940855990e7 --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h @@ -0,0 +1,34 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSReportManager.h" +#import "FIRCLSReportUploader.h" + +@interface FIRCLSReportManager () + +@property(nonatomic, strong) NSOperationQueue *operationQueue; +@property(nonatomic, strong) FIRCLSNetworkClient *networkClient; +@property(nonatomic, readonly) FIRCLSReportUploader *uploader; +@property(nonatomic, strong) FIRCLSFileManager *fileManager; + +@end + +@interface FIRCLSReportManager (PrivateMethods) + +- (BOOL)createLaunchFailureMarker; +- (BOOL)launchFailureMarkerPresent; + +- (BOOL)potentiallySubmittableCrashOccurred; + +@end diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h b/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h new file mode 100644 index 000000000000..d1d9e963ef8c --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h @@ -0,0 +1,77 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSDataCollectionToken; +@class FIRCLSInternalReport; +@class FIRCLSSettings; +@class FIRCLSFileManager; +@class FIRCLSNetworkClient; +@class FIRCLSReportUploader; + +@protocol FIRCLSReportUploaderDelegate; +@protocol FIRCLSReportUploaderDataSource; +@protocol FIRAnalyticsInterop; + +@interface FIRCLSReportUploader : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithQueue:(NSOperationQueue *)queue + delegate:(id)delegate + dataSource:(id)dataSource + client:(FIRCLSNetworkClient *)client + fileManager:(FIRCLSFileManager *)fileManager + analytics:(id)analytics NS_DESIGNATED_INITIALIZER; + +@property(nonatomic, weak) id delegate; +@property(nonatomic, weak) id dataSource; + +@property(nonatomic, readonly) NSOperationQueue *operationQueue; +@property(nonatomic, readonly) FIRCLSNetworkClient *networkClient; +@property(nonatomic, readonly) FIRCLSFileManager *fileManager; + +- (BOOL)prepareAndSubmitReport:(FIRCLSInternalReport *)report + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent + withProcessing:(BOOL)shouldProcess; + +- (BOOL)uploadPackagedReportAtPath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent; + +- (void)reportUploadAtPath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + completedWithError:(NSError *)error; + +@end + +@protocol FIRCLSReportUploaderDelegate +@required + +- (void)didCompletePackageSubmission:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)token + error:(NSError *)error; +- (void)didCompleteAllSubmissions; + +@end + +@protocol FIRCLSReportUploaderDataSource +@required + +- (NSString *)googleAppID; +- (FIRCLSSettings *)settings; + +@end diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m b/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m new file mode 100644 index 000000000000..aa837b2b3dff --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m @@ -0,0 +1,274 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import "FIRCLSApplication.h" +#import "FIRCLSDataCollectionArbiter.h" +#import "FIRCLSDataCollectionToken.h" +#import "FIRCLSDefines.h" +#import "FIRCLSFCRAnalytics.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSInstallIdentifierModel.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSNetworkClient.h" +#import "FIRCLSPackageReportOperation.h" +#import "FIRCLSProcessReportOperation.h" +#import "FIRCLSReportUploader_Private.h" +#import "FIRCLSSettings.h" +#import "FIRCLSSymbolResolver.h" + +#include "FIRCLSUtility.h" + +#import "FIRCLSConstants.h" +#import "FIRCLSMultipartMimeStreamEncoder.h" +#import "FIRCLSURLBuilder.h" + +@interface FIRCLSReportUploader () { + id _analytics; +} +@end + +@implementation FIRCLSReportUploader + +- (instancetype)initWithQueue:(NSOperationQueue *)queue + delegate:(id)delegate + dataSource:(id)dataSource + client:(FIRCLSNetworkClient *)client + fileManager:(FIRCLSFileManager *)fileManager + analytics:(id)analytics { + self = [super init]; + if (!self) { + return nil; + } + + _operationQueue = queue; + _delegate = delegate; + _dataSource = dataSource; + _networkClient = client; + _fileManager = fileManager; + _analytics = analytics; + + return self; +} + +#pragma mark - Properties + +- (NSURL *)reportURL { + FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:FIRCLSReportsEndpoint]; + + [url appendComponent:@"/sdk-api/v1/platforms/"]; + [url appendComponent:FIRCLSApplicationGetPlatform()]; + [url appendComponent:@"/apps/"]; + [url appendComponent:self.dataSource.settings.fetchedBundleID]; + [url appendComponent:@"/reports"]; + + return [url URL]; +} + +- (NSString *)localeIdentifier { + return [[NSLocale currentLocale] localeIdentifier]; +} + +#pragma mark - URL Requests +- (NSMutableURLRequest *)mutableRequestWithURL:(NSURL *)url timeout:(NSTimeInterval)timeout { + NSMutableURLRequest *request = + [NSMutableURLRequest requestWithURL:url + cachePolicy:NSURLRequestReloadIgnoringLocalCacheData + timeoutInterval:timeout]; + + NSString *localeId = [self localeIdentifier]; + + [request setValue:@CLS_SDK_GENERATOR_NAME forHTTPHeaderField:FIRCLSNetworkUserAgent]; + [request setValue:FIRCLSNetworkApplicationJson forHTTPHeaderField:FIRCLSNetworkAccept]; + [request setValue:FIRCLSNetworkUTF8 forHTTPHeaderField:FIRCLSNetworkAcceptCharset]; + [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkAcceptLanguage]; + [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkContentLanguage]; + [request setValue:FIRCLSDeveloperToken forHTTPHeaderField:FIRCLSNetworkCrashlyticsDeveloperToken]; + [request setValue:FIRCLSApplicationGetSDKBundleID() + forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientId]; + [request setValue:@CLS_SDK_DISPLAY_VERSION + forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientDisplayVersion]; + [request setValue:[[self dataSource] googleAppID] + forHTTPHeaderField:FIRCLSNetworkCrashlyticsGoogleAppId]; + + return request; +} + +- (BOOL)fillInRequest:(NSMutableURLRequest *)request forMultipartMimeDataAtPath:(NSString *)path { + NSString *boundary = [[path lastPathComponent] stringByDeletingPathExtension]; + + [request setValue:[FIRCLSMultipartMimeStreamEncoder + contentTypeHTTPHeaderValueWithBoundary:boundary] + forHTTPHeaderField:@"Content-Type"]; + + NSNumber *fileSize = [[self fileManager] fileSizeAtPath:path]; + if (fileSize == nil) { + FIRCLSErrorLog(@"Could not determine size of multipart mime file"); + return NO; + } + + [request setValue:[fileSize stringValue] forHTTPHeaderField:@"Content-Length"]; + + return YES; +} + +#pragma mark - Packaging and Submission +- (BOOL)prepareAndSubmitReport:(FIRCLSInternalReport *)report + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent + withProcessing:(BOOL)shouldProcess { + __block BOOL success = NO; + + if (![dataCollectionToken isValid]) { + FIRCLSErrorLog(@"Data collection disabled and report will not be submitted"); + return NO; + } + + NSString *reportOrgID = self.dataSource.settings.orgID; + if (!reportOrgID) { + FIRCLSDebugLog(@"Skipping report with id '%@' this run of the app because Organization ID was " + @"nil. Report will upload once settings are download successfully", + report.identifier); + return YES; + } + + FIRCLSApplicationActivity( + FIRCLSApplicationActivityDefault, @"Crashlytics Crash Report Processing", ^{ + if (shouldProcess) { + if (![self.fileManager moveItemAtPath:[report path] + toDirectory:self.fileManager.processingPath]) { + FIRCLSErrorLog(@"Unable to move report for processing"); + return; + } + + // adjust the report's path, and process it + [report setPath:[self.fileManager.processingPath + stringByAppendingPathComponent:report.directoryName]]; + + FIRCLSSymbolResolver *resolver = [[FIRCLSSymbolResolver alloc] init]; + + FIRCLSProcessReportOperation *processOperation = + [[FIRCLSProcessReportOperation alloc] initWithReport:report resolver:resolver]; + + [processOperation start]; + } + + FIRCLSPackageReportOperation *packageOperation = + [[FIRCLSPackageReportOperation alloc] initWithReport:report + fileManager:self.fileManager + settings:self.dataSource.settings]; + + [packageOperation start]; + + NSString *packagedPath = [packageOperation finalPath]; + if (!packagedPath) { + FIRCLSErrorLog(@"Unable to package report"); + return; + } + + // Save the crashed on date for potential scion event sending. + NSTimeInterval crashedOnDate = report.crashedOnDate.timeIntervalSince1970; + // We only want to forward crash events to scion, storing this for later use. + BOOL isCrash = report.isCrash; + + if (![[self fileManager] removeItemAtPath:[report path]]) { + FIRCLSErrorLog(@"Unable to remove a processing item"); + } + + NSLog(@"[Firebase/Crashlytics] Packaged report with id '%@' for submission", + report.identifier); + + success = [self uploadPackagedReportAtPath:packagedPath + dataCollectionToken:dataCollectionToken + asUrgent:urgent]; + + // If the upload was successful and the report contained a crash forward it to scion. + if (success && isCrash) { + [FIRCLSFCRAnalytics logCrashWithTimeStamp:crashedOnDate toAnalytics:self->_analytics]; + } + }); + + return success; +} + +- (BOOL)submitPackageMultipartMimeAtPath:(NSString *)multipartmimePath + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + synchronously:(BOOL)synchronous { + FIRCLSDeveloperLog(@"Crashlytics:Crash:Reports", "Submitting %@ %@", + synchronous ? @"sync" : @"async", multipartmimePath); + + if ([[[self fileManager] fileSizeAtPath:multipartmimePath] unsignedIntegerValue] == 0) { + FIRCLSDeveloperLog("Crashlytics:Crash:Reports", @"Already-submitted report being ignored"); + return NO; + } + + NSTimeInterval timeout = 10.0; + + // If we are submitting synchronously, be more aggressive with the timeout. However, + // we only need this if the client does not support background requests. + if (synchronous && ![[self networkClient] supportsBackgroundRequests]) { + timeout = 2.0; + } + + NSMutableURLRequest *request = [self mutableRequestWithURL:[self reportURL] timeout:timeout]; + + [request setHTTPMethod:@"POST"]; + + if (![self fillInRequest:request forMultipartMimeDataAtPath:multipartmimePath]) { + return NO; + } + + [[self networkClient] startUploadRequest:request + filePath:multipartmimePath + dataCollectionToken:dataCollectionToken + immediately:synchronous]; + + return YES; +} + +- (BOOL)uploadPackagedReportAtPath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent { + FIRCLSDeveloperLog("Crashlytics:Crash:Reports", @"Submitting report%@", + urgent ? @" as urgent" : @""); + return [self submitPackageMultipartMimeAtPath:path + dataCollectionToken:dataCollectionToken + synchronously:urgent]; +} + +- (BOOL)cleanUpSubmittedReportAtPath:(NSString *)path { + if (![[self fileManager] removeItemAtPath:path]) { + FIRCLSErrorLog(@"Unable to remove packaged submission"); + return NO; + } + + return YES; +} + +- (void)reportUploadAtPath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + completedWithError:(NSError *)error { + FIRCLSDeveloperLog("Crashlytics:Crash:Reports", @"completed submission of %@", path); + + if (!error) { + [self cleanUpSubmittedReportAtPath:path]; + } + + [[self delegate] didCompletePackageSubmission:path + dataCollectionToken:dataCollectionToken + error:error]; +} + +@end diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h b/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h new file mode 100644 index 000000000000..f54dc16733e2 --- /dev/null +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h @@ -0,0 +1,23 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSReportUploader.h" + +@interface FIRCLSReportUploader (PrivateMethods) + +@property(nonatomic, readonly) NSURL *reportURL; + +- (NSMutableURLRequest *)mutableRequestWithURL:(NSURL *)url timeout:(NSTimeInterval)timeout; + +@end diff --git a/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h new file mode 100644 index 000000000000..147bc7bbce64 --- /dev/null +++ b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h @@ -0,0 +1,39 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRApp; +@class FBLPromise; + +NS_ASSUME_NONNULL_BEGIN + +@interface FIRCLSDataCollectionArbiter : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +- (instancetype)initWithApp:(FIRApp *)app withAppInfo:(NSDictionary *)dict; + +- (BOOL)isLegacyDataCollectionKeyInPlist; + +- (BOOL)isCrashlyticsCollectionEnabled; + +- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled; + +// Returns a promise that is fulfilled once data collection is enabled. +- (FBLPromise *)waitForCrashlyticsCollectionEnabled; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m new file mode 100644 index 000000000000..b8af47f17364 --- /dev/null +++ b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m @@ -0,0 +1,143 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSDataCollectionArbiter.h" + +#import "FBLPromises.h" + +#import "FIRApp.h" +#import "FIRCLSUserDefaults.h" + +// The legacy data collection setting allows Fabric customers to turn off auto- +// initialization, but can be overridden by calling [Fabric with:]. +// +// While we support Fabric, we must have two different versions, because +// they require these slightly different semantics. +NSString *const FIRCLSLegacyCrashlyticsCollectionKey = @"firebase_crashlytics_collection_enabled"; + +// The new data collection setting can be set by an API that is stored in FIRCLSUserDefaults +NSString *const FIRCLSDataCollectionEnabledKey = @"com.crashlytics.data_collection"; + +// The new data collection setting also allows Firebase customers to turn off data +// collection in their Info.plist, and can be overridden by setting it to true using +// the setCrashlyticsCollectionEnabled API. +NSString *const FIRCLSCrashlyticsCollectionKey = @"FirebaseCrashlyticsCollectionEnabled"; + +typedef NS_ENUM(NSInteger, FIRCLSDataCollectionSetting) { + FIRCLSDataCollectionSettingNotSet = 0, + FIRCLSDataCollectionSettingEnabled = 1, + FIRCLSDataCollectionSettingDisabled = 2, +}; + +@interface FIRCLSDataCollectionArbiter () { + NSLock *_mutex; + FBLPromise *_dataCollectionEnabled; + BOOL _promiseResolved; + FIRApp *_app; + NSDictionary *_appInfo; +} +@end + +@implementation FIRCLSDataCollectionArbiter + +- (instancetype)initWithApp:(FIRApp *)app withAppInfo:(NSDictionary *)dict { + self = [super init]; + if (self) { + _mutex = [[NSLock alloc] init]; + _appInfo = dict; + _app = app; + if ([FIRCLSDataCollectionArbiter isCrashlyticsCollectionEnabledWithApp:app withAppInfo:dict]) { + _dataCollectionEnabled = [FBLPromise resolvedWith:nil]; + _promiseResolved = YES; + } else { + _dataCollectionEnabled = [FBLPromise pendingPromise]; + _promiseResolved = NO; + } + } + + return self; +} + +/* + * Legacy collection key that we provide for customers to disable Crash reporting. + * Customers can later turn on Crashlytics using Fabric.with if they choose to do so. + * + * This flag is unsupported for the "New SDK" + */ +- (BOOL)isLegacyDataCollectionKeyInPlist { + if ([_appInfo objectForKey:FIRCLSLegacyCrashlyticsCollectionKey]) { + return true; + } + + return false; +} + +// This functionality is called in the initializer before self is fully initialized, +// so a class method is used. The instance method below allows for a consistent clean API. ++ (BOOL)isCrashlyticsCollectionEnabledWithApp:(FIRApp *)app withAppInfo:(NSDictionary *)dict { + FIRCLSDataCollectionSetting stickySetting = [FIRCLSDataCollectionArbiter stickySetting]; + if (stickySetting != FIRCLSDataCollectionSettingNotSet) { + return stickySetting == FIRCLSDataCollectionSettingEnabled; + } + + id firebaseCrashlyticsCollectionEnabled = [dict objectForKey:FIRCLSCrashlyticsCollectionKey]; + if ([firebaseCrashlyticsCollectionEnabled isKindOfClass:[NSString class]] || + [firebaseCrashlyticsCollectionEnabled isKindOfClass:[NSNumber class]]) { + return [firebaseCrashlyticsCollectionEnabled boolValue]; + } + + return [app isDataCollectionDefaultEnabled]; +} + +- (BOOL)isCrashlyticsCollectionEnabled { + return [FIRCLSDataCollectionArbiter isCrashlyticsCollectionEnabledWithApp:_app + withAppInfo:_appInfo]; +} + +- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled { + FIRCLSUserDefaults *userDefaults = [FIRCLSUserDefaults standardUserDefaults]; + FIRCLSDataCollectionSetting setting = + enabled ? FIRCLSDataCollectionSettingEnabled : FIRCLSDataCollectionSettingDisabled; + [userDefaults setInteger:setting forKey:FIRCLSDataCollectionEnabledKey]; + [userDefaults synchronize]; + + [_mutex lock]; + if (enabled) { + if (!_promiseResolved) { + [_dataCollectionEnabled fulfill:nil]; + _promiseResolved = YES; + } + } else { + if (_promiseResolved) { + _dataCollectionEnabled = [FBLPromise pendingPromise]; + _promiseResolved = NO; + } + } + [_mutex unlock]; +} + ++ (FIRCLSDataCollectionSetting)stickySetting { + FIRCLSUserDefaults *userDefaults = [FIRCLSUserDefaults standardUserDefaults]; + return [userDefaults integerForKey:FIRCLSDataCollectionEnabledKey]; +} + +- (FBLPromise *)waitForCrashlyticsCollectionEnabled { + FBLPromise *result = nil; + [_mutex lock]; + result = _dataCollectionEnabled; + [_mutex unlock]; + return result; +} + +@end diff --git a/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h new file mode 100644 index 000000000000..4ab2bb66156a --- /dev/null +++ b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h @@ -0,0 +1,45 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * A FIRCLSDataCollectionToken represents having permission to upload data. A data collection token + * is either valid or nil. Every function that directly initiates a network operation that will + * result in data collection must check to make sure it has been passed a valid token. Tokens should + * only be created when either (1) automatic data collection is enabled, or (2) the user has + * explicitly given permission to collect data for a particular purpose, using the API. For all the + * functions in between, the data collection token getting passed as an argument helps to document + * and enforce the flow of data collection permission through the SDK. + */ +@interface FIRCLSDataCollectionToken : NSObject + +/** + * Creates a valid token. Only call this method when either (1) automatic data collection is + * enabled, or (2) the user has explicitly given permission to collect data for a particular + * purpose, using the API. + */ ++ (instancetype)validToken; + +/** + * Use this to verify that a token is valid. If this is called on a nil instance, it will return NO. + * @return YES. + */ +- (BOOL)isValid; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m new file mode 100644 index 000000000000..1a41ee1df88c --- /dev/null +++ b/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m @@ -0,0 +1,27 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSDataCollectionToken.h" + +@implementation FIRCLSDataCollectionToken + ++ (instancetype)validToken { + return [[FIRCLSDataCollectionToken alloc] init]; +} + +- (BOOL)isValid { + return YES; +} + +@end diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h new file mode 100644 index 000000000000..fa53468c141d --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h @@ -0,0 +1,84 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import "FIRCLSURLSessionConfiguration.h" + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FIRCLSURLSession : NSObject { + id _delegate; + NSOperationQueue *_delegateQueue; + NSURLSessionConfiguration *_configuration; + NSMutableSet *_taskSet; + dispatch_queue_t _queue; + + NSString *_sessionDescription; +} + ++ (BOOL)NSURLSessionShouldBeUsed; + ++ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration; ++ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration + delegate:(nullable id)delegate + delegateQueue:(nullable NSOperationQueue *)queue; + +@property(nonatomic, readonly, retain) NSOperationQueue *delegateQueue; +@property(nonatomic, readonly, retain) id delegate; +@property(nonatomic, readonly, copy) NSURLSessionConfiguration *configuration; + +@property(nonatomic, copy) NSString *sessionDescription; + +- (void)getTasksWithCompletionHandler: + (void (^)(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks))completionHandler; + +// task creation - suitable for background operations +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL; + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request; +- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url; + +// convenience methods (that are not available for background sessions +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(nullable void (^)(NSData *data, + NSURLResponse *response, + NSError *error))completionHandler; +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request; + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + completionHandler: + (nullable void (^)(NSURL *targetPath, + NSURLResponse *response, + NSError *error))completionHandler; + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + completionHandler: + (nullable void (^)(NSData *data, + NSURLResponse *response, + NSError *error))completionHandler; + +- (void)invalidateAndCancel; +- (void)finishTasksAndInvalidate; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m new file mode 100644 index 000000000000..9815423683e9 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m @@ -0,0 +1,346 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED +#import "FIRCLSURLSession.h" + +#import "FIRCLSURLSessionDataTask.h" +#import "FIRCLSURLSessionDataTask_PrivateMethods.h" +#import "FIRCLSURLSessionDownloadTask.h" +#import "FIRCLSURLSessionDownloadTask_PrivateMethods.h" +#import "FIRCLSURLSessionTask_PrivateMethods.h" +#import "FIRCLSURLSessionUploadTask.h" + +#define DELEGATE ((id)self->_delegate) + +@interface FIRCLSURLSession () + +@property(nonatomic, retain) NSOperationQueue *delegateQueue; +@property(nonatomic, retain) id delegate; +@property(nonatomic, copy) NSURLSessionConfiguration *configuration; + +@end + +@implementation FIRCLSURLSession + +@synthesize delegate = _delegate; +@synthesize delegateQueue = _delegateQueue; +@synthesize configuration = _configuration; +@synthesize sessionDescription = _sessionDescription; + ++ (BOOL)NSURLSessionShouldBeUsed { + if (!NSClassFromString(@"NSURLSession")) { + return NO; + } + + // We use this as a proxy to verify that we are on at least iOS 8 or 10.10. The first OSes that + // has NSURLSession were fairly unstable. + return [[NSURLSessionConfiguration class] + respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]; +} + ++ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration { + return [self sessionWithConfiguration:configuration delegate:nil delegateQueue:nil]; +} + ++ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration + delegate:(nullable id)delegate + delegateQueue:(nullable NSOperationQueue *)queue { + if ([self NSURLSessionShouldBeUsed]) { + return [NSURLSession sessionWithConfiguration:configuration + delegate:delegate + delegateQueue:queue]; + } + + if (!configuration) { + return nil; + } + +#if __has_feature(objc_arc) + FIRCLSURLSession *session = [self new]; +#else + FIRCLSURLSession *session = [[self new] autorelease]; +#endif + [session setDelegate:delegate]; + // When delegate exists, but delegateQueue is nil, create a serial queue like NSURLSession + // documents. + if (delegate && !queue) { + queue = [self newDefaultDelegateQueue]; + } + session.delegateQueue = queue; + session.configuration = configuration; + return (NSURLSession *)session; +} + ++ (NSOperationQueue *)newDefaultDelegateQueue { + NSOperationQueue *delegateQueue = [[NSOperationQueue alloc] init]; + delegateQueue.name = [NSString stringWithFormat:@"%@ %p", NSStringFromClass(self), self]; + delegateQueue.maxConcurrentOperationCount = 1; + return delegateQueue; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _queue = dispatch_queue_create("com.crashlytics.URLSession", 0); + + return self; +} + +#if !__has_feature(objc_arc) +- (void)dealloc { + [_taskSet release]; + [_delegate release]; + [_delegateQueue release]; + [_configuration release]; + +#if !OS_OBJECT_USE_OBJC + dispatch_release(_queue); +#endif + + [super dealloc]; +} +#endif + +#pragma mark - Managing the Session + +- (void)invalidateAndCancel { + dispatch_sync(_queue, ^{ + for (FIRCLSURLSessionTask *task in self->_taskSet) { + [task cancel]; + } + }); + + self.delegate = nil; +} + +- (void)finishTasksAndInvalidate { + self.delegate = nil; +} + +#pragma mark - + +- (void)getTasksWithCompletionHandler: + (void (^)(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks))completionHandler { + [[self delegateQueue] addOperationWithBlock:^{ + // TODO - this is totally wrong, but better than not calling back at all + completionHandler(@[], @[], @[]); + }]; +} + +- (void)removeTaskFromSet:(FIRCLSURLSessionTask *)task { + dispatch_async(_queue, ^{ + [self->_taskSet removeObject:task]; + }); +} + +- (void)configureTask:(FIRCLSURLSessionTask *)task + withRequest:(NSURLRequest *)request + block:(void (^)(NSMutableURLRequest *mutableRequest))block { + NSMutableURLRequest *modifiedRequest = [request mutableCopy]; + + dispatch_sync(_queue, ^{ + [self->_taskSet addObject:task]; + + // TODO: this isn't allowed to overwrite existing headers + for (NSString *key in [self->_configuration HTTPAdditionalHeaders]) { + [modifiedRequest addValue:[[self->_configuration HTTPAdditionalHeaders] objectForKey:key] + forHTTPHeaderField:key]; + } + }); + + if (block) { + block(modifiedRequest); + } + + [task setOriginalRequest:modifiedRequest]; + [task setDelegate:self]; + +#if !__has_feature(objc_arc) + [modifiedRequest release]; +#endif +} + +- (BOOL)shouldInvokeDelegateSelector:(SEL)selector forTask:(FIRCLSURLSessionTask *)task { + return [task invokesDelegate] && [_delegate respondsToSelector:selector]; +} + +#pragma mark Task Creation +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL { + return [self uploadTaskWithRequest:request fromFile:fileURL completionHandler:nil]; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request { + return [self downloadTaskWithRequest:request completionHandler:nil]; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url { + return [self downloadTaskWithRequest:[NSURLRequest requestWithURL:url]]; +} + +#pragma mark Async Convenience Methods +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(nullable void (^)(NSData *data, + NSURLResponse *response, + NSError *error))completionHandler { + FIRCLSURLSessionDataTask *task = [FIRCLSURLSessionDataTask task]; + + if (completionHandler) { + [task setCompletionHandler:completionHandler]; + [task setInvokesDelegate:NO]; + } + + [self configureTask:task withRequest:request block:nil]; + + return (NSURLSessionDataTask *)task; +} + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request { + return [self dataTaskWithRequest:request completionHandler:nil]; +} + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + completionHandler: + (nullable void (^)(NSData *data, + NSURLResponse *response, + NSError *error))completionHandler { + FIRCLSURLSessionUploadTask *task = [FIRCLSURLSessionUploadTask task]; + + if (completionHandler) { + [task setCompletionHandler:completionHandler]; + [task setInvokesDelegate:NO]; + } + + [self configureTask:task + withRequest:request + block:^(NSMutableURLRequest *mutableRequest) { + // you cannot set up both of these, and we'll be using the stream here + [mutableRequest setHTTPBody:nil]; + [mutableRequest setHTTPBodyStream:[NSInputStream inputStreamWithURL:fileURL]]; + }]; + + return (NSURLSessionUploadTask *)task; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + completionHandler: + (nullable void (^)(NSURL *targetPath, + NSURLResponse *response, + NSError *error))completionHandler { + FIRCLSURLSessionDownloadTask *task = [FIRCLSURLSessionDownloadTask task]; + + if (completionHandler) { + [task setDownloadCompletionHandler:completionHandler]; + [task setInvokesDelegate:NO]; + } + + [self configureTask:task withRequest:request block:nil]; + + return (NSURLSessionDownloadTask *)task; +} + +#pragma mark FIRCLSURLSessionTaskDelegate +- (NSURLRequest *)task:(FIRCLSURLSessionTask *)task + willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request { + // just accept the proposed redirection + return request; +} + +- (void)task:(FIRCLSURLSessionTask *)task didCompleteWithError:(NSError *)error { + if (![self shouldInvokeDelegateSelector:@selector(URLSession:task:didCompleteWithError:) + forTask:task]) { + [self removeTaskFromSet:task]; + return; + } + + [_delegateQueue addOperationWithBlock:^{ + [DELEGATE URLSession:(NSURLSession *)self + task:(NSURLSessionTask *)task + didCompleteWithError:error]; + + // Note that you *cannot* clean up here, because this method could be run asynchronously with + // the delegate methods that care about the state of the task + [self removeTaskFromSet:task]; + }]; +} + +#pragma mark FIRCLSURLSessionDataTask +- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveResponse:(NSURLResponse *)response { + if (![self shouldInvokeDelegateSelector:@selector + (URLSession:dataTask:didReceiveResponse:completionHandler:) + forTask:task]) { + return; + } + + [_delegateQueue addOperationWithBlock:^{ + [DELEGATE URLSession:(NSURLSession *)self + dataTask:(NSURLSessionDataTask *)task + didReceiveResponse:response + completionHandler:^(NSURLSessionResponseDisposition disposition){ + // nothing to do here + }]; + }]; +} + +- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveData:(NSData *)data { + if (![self shouldInvokeDelegateSelector:@selector(URLSession:dataTask:didReceiveData:) + forTask:task]) { + return; + } + + [_delegateQueue addOperationWithBlock:^{ + [DELEGATE URLSession:(NSURLSession *)self + dataTask:(NSURLSessionDataTask *)task + didReceiveData:data]; + }]; +} + +#pragma mark FIRCLSURLSessionDownloadDelegate +- (void)downloadTask:(FIRCLSURLSessionDownloadTask *)task didFinishDownloadingToURL:(NSURL *)url { + if (![self shouldInvokeDelegateSelector:@selector(URLSession: + downloadTask:didFinishDownloadingToURL:) + forTask:task]) { + // We have to be certain that we cleanup only once the delegate no longer cares about the state + // of the task being changed. In the case of download, this is either after the delegate method + // has been invoked, or here, if the delegate doesn't care. + [task cleanup]; + return; + } + + [_delegateQueue addOperationWithBlock:^{ + [DELEGATE URLSession:(NSURLSession *)self + downloadTask:(NSURLSessionDownloadTask *)task + didFinishDownloadingToURL:url]; + + // Cleanup for the download tasks is a little complex. As long as we do it only after + // the delegate has been informed of the completed download, we are ok. + [task cleanup]; + }]; +} + +@end + +#else + +INJECT_STRIP_SYMBOL(clsurlsession) + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h new file mode 100644 index 000000000000..056594835ce8 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h @@ -0,0 +1,28 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include + +#define FIRCLSURLSESSION_REQUIRED (!TARGET_OS_WATCH && !TARGET_OS_TV) + +// These macros generate a function to force a symbol for the containing .o, to work around an issue +// where strip will not strip debug information without a symbol to strip. +#define CONCAT_EXPANDED(a, b) a##b +#define CONCAT(a, b) CONCAT_EXPANDED(a, b) +#define DUMMY_FUNCTION_NAME(x) CONCAT(strip_this_, x) +#define INJECT_STRIP_SYMBOL(x) \ + void DUMMY_FUNCTION_NAME(x)(void) { \ + } diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h new file mode 100644 index 000000000000..bda0f7083d41 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h @@ -0,0 +1,42 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import + +@interface FIRCLSURLSessionConfiguration : NSObject { + NSDictionary *_additionalHeaders; + NSURLCache *_URLCache; + NSHTTPCookieAcceptPolicy _cookiePolicy; +} + ++ (NSURLSessionConfiguration *)defaultSessionConfiguration; ++ (NSURLSessionConfiguration *)ephemeralSessionConfiguration; ++ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier; ++ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier; + +@property(nonatomic, copy) NSDictionary *HTTPAdditionalHeaders; +@property(nonatomic, retain) NSURLCache *URLCache; +@property(nonatomic, assign) NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy; +@property(nonatomic, assign) BOOL sessionSendsLaunchEvents; +@property(nonatomic, assign) NSTimeInterval timeoutIntervalForRequest; +@property(nonatomic, assign) NSTimeInterval timeoutIntervalForResource; +@property(nonatomic, assign) BOOL allowsCellularAccess; + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m new file mode 100644 index 000000000000..177e7a6bfde0 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m @@ -0,0 +1,92 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#import "FIRCLSURLSession.h" + +#if FIRCLSURLSESSION_REQUIRED +#import "FIRCLSURLSessionConfiguration.h" + +@implementation FIRCLSURLSessionConfiguration + +@synthesize URLCache = _URLCache; +@synthesize HTTPAdditionalHeaders = _additionalHeaders; +@synthesize HTTPCookieAcceptPolicy = _cookiePolicy; + ++ (NSURLSessionConfiguration *)defaultSessionConfiguration { + if ([FIRCLSURLSession NSURLSessionShouldBeUsed]) { + return [NSURLSessionConfiguration defaultSessionConfiguration]; + } + +#if __has_feature(objc_arc) + return [self new]; +#else + return [[self new] autorelease]; +#endif +} + ++ (NSURLSessionConfiguration *)ephemeralSessionConfiguration { + if ([FIRCLSURLSession NSURLSessionShouldBeUsed]) { + return [NSURLSessionConfiguration ephemeralSessionConfiguration]; + } + +#if __has_feature(objc_arc) + return [self new]; +#else + return [[self new] autorelease]; +#endif +} + ++ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier { + return [self backgroundSessionConfigurationWithIdentifier:identifier]; +} + ++ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier { + if (![FIRCLSURLSession NSURLSessionShouldBeUsed]) { + return nil; + } + + if ([[NSURLSessionConfiguration class] + respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) { + return [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]; + } + + return [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]; +} + +- (id)copyWithZone:(NSZone *)zone { + FIRCLSURLSessionConfiguration *configuration; + + configuration = [FIRCLSURLSessionConfiguration new]; + [configuration setHTTPAdditionalHeaders:[self HTTPAdditionalHeaders]]; + + return configuration; +} + +// This functionality is not supported by the wrapper, so we just stub it out +- (BOOL)sessionSendsLaunchEvents { + return NO; +} + +- (void)setSessionSendsLaunchEvents:(BOOL)sessionSendsLaunchEvents { +} + +@end + +#else + +INJECT_STRIP_SYMBOL(clsurlsessionconfiguration) + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h new file mode 100644 index 000000000000..84885e1d69c0 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h @@ -0,0 +1,27 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import + +@interface FIRCLSURLSession (PrivateMethods) + +- (void)runOnDelegateQueue:(void (^)(void))block; + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h new file mode 100644 index 000000000000..22099584efe8 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h @@ -0,0 +1,32 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import "FIRCLSURLSessionTask.h" + +@interface FIRCLSURLSessionDataTask : FIRCLSURLSessionTask { + void (^_completionHandler)(NSData *data, NSURLResponse *response, NSError *error); + NSURLConnection *_connection; + NSMutableData *_data; + NSString *_taskDescription; +} + +@property(nonatomic, copy) NSString *taskDescription; + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m new file mode 100644 index 000000000000..b75d8099a7eb --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m @@ -0,0 +1,120 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED +#import "FIRCLSURLSessionDataTask.h" + +#import "FIRCLSURLSessionDataTask_PrivateMethods.h" + +#define DELEGATE ((id)[self delegate]) + +@interface FIRCLSURLSessionDataTask () +@end + +@implementation FIRCLSURLSessionDataTask + +@synthesize connection = _connection; +@synthesize completionHandler = _completionHandler; +@synthesize taskDescription = _taskDescription; + +#if !__has_feature(objc_arc) +- (void)dealloc { + [_connection release]; + [_completionHandler release]; + [_taskDescription release]; + [_data release]; + + [super dealloc]; +} +#endif + +- (void)resume { + dispatch_async([self queue], ^{ + NSURLConnection *connection; + + if ([self connection]) { + return; + } + + connection = [[NSURLConnection alloc] initWithRequest:[self originalRequest] + delegate:self + startImmediately:NO]; + [self setConnection:connection]; + + // bummer we have to do this on a runloop, but other mechanisms require iOS 5 or 10.7 + [connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; +#if !__has_feature(objc_arc) + [connection release]; +#endif + [connection start]; + }); +} + +- (void)complete { + // call completion handler first + if (_completionHandler) { + // this should go to another queue + _completionHandler(_data, [self response], [self error]); + } + + // and then finally, call the session delegate completion + [DELEGATE task:self didCompleteWithError:[self error]]; +} + +- (void)cancel { + [self.connection cancel]; +} + +#pragma mark NSURLConnectionDelegate +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { + dispatch_async([self queue], ^{ + [DELEGATE task:self didReceiveResponse:response]; + + [self setResponse:response]; + }); +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { + dispatch_async([self queue], ^{ + if (!self->_data) { + self->_data = [NSMutableData new]; + } + + [self->_data appendData:data]; + [DELEGATE task:self didReceiveData:data]; + }); +} + +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { + dispatch_async([self queue], ^{ + [self setError:error]; + [self complete]; + }); +} + +- (void)connectionDidFinishLoading:(NSURLConnection *)connection { + dispatch_async([self queue], ^{ + [self complete]; + }); +} + +@end + +#else + +INJECT_STRIP_SYMBOL(clsurlsessiondatatask) + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h new file mode 100644 index 000000000000..f85a3776ff71 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h @@ -0,0 +1,43 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import + +#import "FIRCLSURLSessionTask_PrivateMethods.h" + +@protocol FIRCLSURLSessionDataDelegate; + +@interface FIRCLSURLSessionDataTask () + +@property(nonatomic, retain) NSURLConnection *connection; +@property(nonatomic, copy) void (^completionHandler) + (NSData *data, NSURLResponse *response, NSError *error); + +- (void)complete; + +@end + +@protocol FIRCLSURLSessionDataDelegate +@required + +- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveResponse:(NSURLResponse *)response; +- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveData:(NSData *)data; + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h new file mode 100644 index 000000000000..314180f7dc77 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h @@ -0,0 +1,31 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import "FIRCLSURLSessionDataTask.h" + +@protocol FIRCLSURLSessionDownloadDelegate; + +@interface FIRCLSURLSessionDownloadTask : FIRCLSURLSessionDataTask { + void (^_downloadCompletionHandler)(NSURL *targetPath, NSURLResponse *response, NSError *error); + NSOutputStream *_outputStream; + NSURL *_targetURL; +} + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m new file mode 100644 index 000000000000..a0c9b2a846df --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m @@ -0,0 +1,157 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED +#import "FIRCLSURLSessionDownloadTask.h" + +#import "FIRCLSURLSessionDownloadTask_PrivateMethods.h" + +#define DELEGATE ((id)[self delegate]) + +@interface FIRCLSURLSessionDownloadTask () +@end + +@implementation FIRCLSURLSessionDownloadTask + +@synthesize downloadCompletionHandler = _downloadCompletionHandler; + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + +#if __has_feature(objc_arc) + _targetURL = [self temporaryFileURL]; + _outputStream = [NSOutputStream outputStreamWithURL:_targetURL append:NO]; +#else + _targetURL = [[self temporaryFileURL] retain]; + _outputStream = [[NSOutputStream outputStreamWithURL:_targetURL append:NO] retain]; +#endif + + [_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; + [_outputStream setDelegate:self]; + + return self; +} + +#if !__has_feature(objc_arc) +- (void)dealloc { + [_downloadCompletionHandler release]; + [_targetURL release]; + [_outputStream release]; + + [super dealloc]; +} +#else +- (void)dealloc { + [_outputStream close]; + _outputStream.delegate = nil; +} +#endif + +- (NSURL *)temporaryFileURL { + NSString *tmpPath; + + tmpPath = [NSTemporaryDirectory() + stringByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]]; + + // TODO: make this actually unique + return [NSURL fileURLWithPath:tmpPath isDirectory:NO]; +} + +- (void)cleanup { + // now, remove the temporary file + [[NSFileManager defaultManager] removeItemAtURL:_targetURL error:nil]; +} + +- (void)complete { + // This is an override of FIRCLSURLSessionDataTask's cleanup method + + // call completion handler first + if (_downloadCompletionHandler) { + _downloadCompletionHandler(_targetURL, [self response], [self error]); + } + + // followed by the session delegate, if there was no error + if (![self error]) { + [DELEGATE downloadTask:self didFinishDownloadingToURL:_targetURL]; + } + + // and then finally, call the session delegate completion + [DELEGATE task:self didCompleteWithError:[self error]]; +} + +- (void)writeDataToStream:(NSData *)data { + // open the stream first + if ([_outputStream streamStatus] == NSStreamStatusNotOpen) { + [_outputStream open]; + } + + if ([data respondsToSelector:@selector(enumerateByteRangesUsingBlock:)]) { + [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { + [self->_outputStream write:bytes maxLength:byteRange.length]; + }]; + + return; + } + + // fall back to the less-efficient mechanism for older OSes + [_outputStream write:[data bytes] maxLength:[data length]]; +} + +#pragma mark NSURLConnectionDelegate +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { + dispatch_async([self queue], ^{ + [self writeDataToStream:data]; + }); +} + +- (void)completeForError { + dispatch_async([self queue], ^{ + [self->_outputStream close]; + [self->_connection cancel]; + if (![self error]) { + [self setError:[NSError errorWithDomain:@"FIRCLSURLSessionDownloadTaskError" + code:-1 + userInfo:nil]]; + } + [self complete]; + }); +} + +#pragma mark NSStreamDelegate +- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { + switch (eventCode) { + case NSStreamEventHasSpaceAvailable: + break; + case NSStreamEventErrorOccurred: + [self completeForError]; + break; + case NSStreamEventEndEncountered: + break; + default: + break; + } +} + +@end + +#else + +INJECT_STRIP_SYMBOL(clsurlsessiondownloadtask) + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h new file mode 100644 index 000000000000..7e8ee9d9f967 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h @@ -0,0 +1,39 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import + +#import "FIRCLSURLSessionDataTask_PrivateMethods.h" + +@protocol FIRCLSURLSessionDownloadDelegate; + +@interface FIRCLSURLSessionDownloadTask () + +@property(nonatomic, copy) void (^downloadCompletionHandler) + (NSURL *targetPath, NSURLResponse *response, NSError *error); + +@end + +@protocol FIRCLSURLSessionDownloadDelegate +@required + +- (void)downloadTask:(FIRCLSURLSessionDownloadTask *)task didFinishDownloadingToURL:(NSURL *)url; + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h new file mode 100644 index 000000000000..92316464d149 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h @@ -0,0 +1,38 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@protocol FIRCLSURLSessionTaskDelegate; + +@interface FIRCLSURLSessionTask : NSObject { + __unsafe_unretained id _delegate; + + NSURLRequest* _originalRequest; + NSURLRequest* _currentRequest; + NSURLResponse* _response; + NSError* _error; + dispatch_queue_t _queue; + BOOL _invokesDelegate; +} + +@property(nonatomic, readonly, copy) NSURLRequest* originalRequest; +@property(nonatomic, readonly, copy) NSURLRequest* currentRequest; +@property(nonatomic, readonly, copy) NSURLResponse* response; + +@property(nonatomic, readonly, copy) NSError* error; + +- (void)resume; + +@end diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m new file mode 100644 index 000000000000..8eba2c185a55 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m @@ -0,0 +1,95 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED +#import "FIRCLSURLSession.h" + +#import "FIRCLSURLSessionTask.h" + +#import "FIRCLSURLSessionTask_PrivateMethods.h" +#import "FIRCLSURLSession_PrivateMethods.h" + +@implementation FIRCLSURLSessionTask + ++ (instancetype)task { +#if __has_feature(objc_arc) + return [[self class] new]; + +#else + return [[[self class] new] autorelease]; +#endif +} + +@synthesize currentRequest = _currentRequest; +@synthesize originalRequest = _originalRequest; +@synthesize response = _response; +@synthesize error = _error; +@synthesize queue = _queue; +@synthesize invokesDelegate = _invokesDelegate; + +- (instancetype)init { + self = [super init]; + if (!self) { + return self; + } + + _queue = dispatch_queue_create("com.crashlytics.URLSessionTask", 0); + + _invokesDelegate = YES; + + return self; +} + +#if !__has_feature(objc_arc) +- (void)dealloc { + [_originalRequest release]; + [_currentRequest release]; + [_response release]; + [_error release]; + +#if !OS_OBJECT_USE_OBJC + dispatch_release(_queue); +#endif + + [super dealloc]; +} +#endif + +- (void)start { +#if DEBUG + assert(0 && "Must be implemented by FIRCLSURLSessionTask subclasses"); +#endif +} + +- (void)cancel { +#if DEBUG + assert(0 && "Must be implemented by FIRCLSURLSessionTask subclasses"); +#endif +} + +- (void)resume { +} + +- (void)cleanup { +} + +@end + +#else + +INJECT_STRIP_SYMBOL(clsurlsessiontask) + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h new file mode 100644 index 000000000000..784b3a3ce606 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h @@ -0,0 +1,55 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import + +@protocol FIRCLSURLSessionTaskDelegate; + +@interface FIRCLSURLSessionTask () + ++ (instancetype)task; + +@property(nonatomic, assign) id delegate; + +@property(nonatomic, copy) NSURLRequest *originalRequest; +@property(nonatomic, copy) NSURLRequest *currentRequest; +@property(nonatomic, copy) NSURLResponse *response; + +@property(nonatomic, readonly) dispatch_queue_t queue; +@property(nonatomic, assign) BOOL invokesDelegate; + +- (void)cancel; + +@property(nonatomic, copy) NSError *error; + +- (void)cleanup; + +@end + +@protocol FIRCLSURLSessionTaskDelegate +@required + +- (NSURLRequest *)task:(FIRCLSURLSessionTask *)task + willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request; + +- (void)task:(FIRCLSURLSessionTask *)task didCompleteWithError:(NSError *)error; + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h new file mode 100644 index 000000000000..6c5ed8b4bf31 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h @@ -0,0 +1,25 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED + +#import "FIRCLSURLSessionDataTask.h" + +@interface FIRCLSURLSessionUploadTask : FIRCLSURLSessionDataTask + +@end + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m new file mode 100644 index 000000000000..df3df8382bf8 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m @@ -0,0 +1,28 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLSessionAvailability.h" + +#if FIRCLSURLSESSION_REQUIRED +#import "FIRCLSURLSessionUploadTask.h" + +@implementation FIRCLSURLSessionUploadTask + +@end + +#else + +INJECT_STRIP_SYMBOL(clsurlsessionuploadtask) + +#endif diff --git a/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h b/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h new file mode 100644 index 000000000000..6df153268c18 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h @@ -0,0 +1,42 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +extern NSString *const FIRCLSUserDefaultsPathComponent; + +@interface FIRCLSUserDefaults : NSObject + ++ (instancetype)standardUserDefaults; + +- (id)objectForKey:(NSString *)key; +- (NSString *)stringForKey:(NSString *)key; +- (BOOL)boolForKey:(NSString *)key; +- (NSInteger)integerForKey:(NSString *)key; + +- (void)setObject:(id)object forKey:(NSString *)key; +- (void)setString:(NSString *)string forKey:(NSString *)key; +- (void)setBool:(BOOL)boolean forKey:(NSString *)key; +- (void)setInteger:(NSInteger)integer forKey:(NSString *)key; + +- (void)removeObjectForKey:(NSString *)key; +- (void)removeAllObjects; + +- (NSDictionary *)dictionaryRepresentation; + +- (void)migrateFromNSUserDefaults:(NSArray *)keysToMigrate; +- (id)objectForKeyByMigratingFromNSUserDefaults:(NSString *)keyToMigrateOrNil; +- (void)synchronize; + +@end diff --git a/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m b/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m new file mode 100644 index 000000000000..1c7257a60ec2 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m @@ -0,0 +1,372 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSUserDefaults.h" + +#import "FIRCLSApplication.h" +#import "FIRCLSLogger.h" + +#define CLS_USER_DEFAULTS_SERIAL_DISPATCH_QUEUE "com.crashlytics.CLSUserDefaults.access" +#define CLS_USER_DEFAULTS_SYNC_QUEUE "com.crashlytics.CLSUserDefaults.io" + +#define CLS_TARGET_CAN_WRITE_TO_DISK !TARGET_OS_TV + +// These values are required to stay the same between versions of the SDK so +// that when end users upgrade, their crashlytics data is still saved on disk. +#if !CLS_TARGET_CAN_WRITE_TO_DISK +static NSString *const FIRCLSNSUserDefaultsDataDictionaryKey = + @"com.crashlytics.CLSUserDefaults.user-default-key.data-dictionary"; +#endif + +NSString *const FIRCLSUserDefaultsPathComponent = @"CLSUserDefaults"; + +/** + * This class is an isolated re-implementation of NSUserDefaults which isolates our storage + * from that of our customers. This solves a number of issues we have seen in production, firstly + * that customers often delete or clear NSUserDefaults, unintentionally deleting our data. + * Further, we have seen thread safety issues in production with NSUserDefaults, as well as a number + * of bugs related to accessing NSUserDefaults before the device has been unlocked due to the + * NSFileProtection of NSUserDefaults. + */ +@interface FIRCLSUserDefaults () +@property(nonatomic, readwrite) BOOL synchronizeWroteToDisk; +#if CLS_TARGET_CAN_WRITE_TO_DISK +@property(nonatomic, copy, readonly) NSURL *directoryURL; +@property(nonatomic, copy, readonly) NSURL *fileURL; +#endif +@property(nonatomic, copy, readonly) + NSDictionary *persistedDataDictionary; // May only be safely accessed on the DictionaryQueue +@property(nonatomic, copy, readonly) + NSMutableDictionary *dataDictionary; // May only be safely accessed on the DictionaryQueue +@property(nonatomic, readonly) dispatch_queue_t + serialDictionaryQueue; // The queue on which all access to the dataDictionary occurs. +@property(nonatomic, readonly) + dispatch_queue_t synchronizationQueue; // The queue on which all disk access occurs. + +@end + +@implementation FIRCLSUserDefaults + +#pragma mark - singleton + ++ (instancetype)standardUserDefaults { + static FIRCLSUserDefaults *standardUserDefaults = nil; + static dispatch_once_t onceToken; + + dispatch_once(&onceToken, ^{ + standardUserDefaults = [[super allocWithZone:NULL] init]; + }); + + return standardUserDefaults; +} + +- (id)copyWithZone:(NSZone *)zone { + return self; +} + +- (id)init { + if (self = [super init]) { + _serialDictionaryQueue = + dispatch_queue_create(CLS_USER_DEFAULTS_SERIAL_DISPATCH_QUEUE, DISPATCH_QUEUE_SERIAL); + _synchronizationQueue = + dispatch_queue_create(CLS_USER_DEFAULTS_SYNC_QUEUE, DISPATCH_QUEUE_SERIAL); + + dispatch_sync(self.serialDictionaryQueue, ^{ +#if CLS_TARGET_CAN_WRITE_TO_DISK + self->_directoryURL = [self generateDirectoryURL]; + self->_fileURL = [[self->_directoryURL + URLByAppendingPathComponent:FIRCLSUserDefaultsPathComponent + isDirectory:NO] URLByAppendingPathExtension:@"plist"]; +#endif + self->_persistedDataDictionary = [self loadDefaults]; + if (!self->_persistedDataDictionary) { + self->_persistedDataDictionary = [NSDictionary dictionary]; + } + self->_dataDictionary = [self->_persistedDataDictionary mutableCopy]; + }); + } + return self; +} + +- (NSURL *)generateDirectoryURL { + NSURL *directoryBaseURL = + [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory + inDomains:NSUserDomainMask] lastObject]; + NSString *hostAppBundleIdentifier = [self getEscapedAppBundleIdentifier]; + return [self generateDirectoryURLForBaseURL:directoryBaseURL + hostAppBundleIdentifier:hostAppBundleIdentifier]; +} + +- (NSURL *)generateDirectoryURLForBaseURL:(NSURL *)directoryBaseURL + hostAppBundleIdentifier:(NSString *)hostAppBundleIdentifier { + NSURL *directoryURL = directoryBaseURL; + // On iOS NSApplicationSupportDirectory is contained in the app's bundle. On OSX, it is not (it is + // ~/Library/Application Support/). On OSX we create a directory + // ~/Library/Application Support//com.crashlytics/ for storing files. + // Mac App Store review process requires files to be written to + // ~/Library/Application Support//, + // so ~/Library/Application Support/com.crashlytics// cannot be used. +#if !TARGET_OS_SIMULATOR && !TARGET_OS_EMBEDDED + if (hostAppBundleIdentifier) { + directoryURL = [directoryURL URLByAppendingPathComponent:hostAppBundleIdentifier]; + } +#endif + directoryURL = [directoryURL URLByAppendingPathComponent:@"com.crashlytics"]; + return directoryURL; +} + +- (NSString *)getEscapedAppBundleIdentifier { + return FIRCLSApplicationGetBundleIdentifier(); +} + +#pragma mark - fetch object + +- (id)objectForKey:(NSString *)key { + __block id result; + + dispatch_sync(self.serialDictionaryQueue, ^{ + result = [self->_dataDictionary objectForKey:key]; + }); + + return result; +} + +- (NSString *)stringForKey:(NSString *)key { + id result = [self objectForKey:key]; + + if (result != nil && [result isKindOfClass:[NSString class]]) { + return (NSString *)result; + } else { + return nil; + } +} + +- (BOOL)boolForKey:(NSString *)key { + id result = [self objectForKey:key]; + if (result != nil && [result isKindOfClass:[NSNumber class]]) { + return [(NSNumber *)result boolValue]; + } else { + return NO; + } +} + +// Defaults to 0 +- (NSInteger)integerForKey:(NSString *)key { + id result = [self objectForKey:key]; + if (result && [result isKindOfClass:[NSNumber class]]) { + return [(NSNumber *)result integerValue]; + } else { + return 0; + } +} + +#pragma mark - set object + +- (void)setObject:(id)object forKey:(NSString *)key { + dispatch_sync(self.serialDictionaryQueue, ^{ + [self->_dataDictionary setValue:object forKey:key]; + }); +} + +- (void)setString:(NSString *)string forKey:(NSString *)key { + [self setObject:string forKey:key]; +} + +- (void)setBool:(BOOL)boolean forKey:(NSString *)key { + [self setObject:[NSNumber numberWithBool:boolean] forKey:key]; +} + +- (void)setInteger:(NSInteger)integer forKey:(NSString *)key { + [self setObject:[NSNumber numberWithInteger:integer] forKey:key]; +} + +#pragma mark - removing objects + +- (void)removeObjectForKey:(NSString *)key { + dispatch_sync(self.serialDictionaryQueue, ^{ + [self->_dataDictionary removeObjectForKey:key]; + }); +} + +- (void)removeAllObjects { + dispatch_sync(self.serialDictionaryQueue, ^{ + [self->_dataDictionary removeAllObjects]; + }); +} + +#pragma mark - dictionary representation + +- (NSDictionary *)dictionaryRepresentation { + __block NSDictionary *result; + + dispatch_sync(self.serialDictionaryQueue, ^{ + result = [self->_dataDictionary copy]; + }); + + return result; +} + +#pragma mark - synchronization + +- (void)synchronize { + __block BOOL dirty = NO; + + // only write to the disk if the dictionaries have changed + dispatch_sync(self.serialDictionaryQueue, ^{ + dirty = ![self->_persistedDataDictionary isEqualToDictionary:self->_dataDictionary]; + }); + + _synchronizeWroteToDisk = dirty; + if (!dirty) { + return; + } + + NSDictionary *state = [self dictionaryRepresentation]; + dispatch_sync(self.synchronizationQueue, ^{ +#if CLS_TARGET_CAN_WRITE_TO_DISK + BOOL isDirectory; + BOOL pathExists = [[NSFileManager defaultManager] fileExistsAtPath:[self->_directoryURL path] + isDirectory:&isDirectory]; + + if (!pathExists) { + NSError *error; + if (![[NSFileManager defaultManager] createDirectoryAtURL:self->_directoryURL + withIntermediateDirectories:YES + attributes:nil + error:&error]) { + FIRCLSErrorLog(@"Failed to create directory with error: %@", error); + } + } + + if (![state writeToURL:self->_fileURL atomically:YES]) { + FIRCLSErrorLog(@"Unable to open file for writing at path %@", [self->_fileURL path]); + } else { +#if TARGET_OS_IOS + // We disable NSFileProtection on our file in order to allow us to access it even if the + // device is locked. + NSError *error; + if (![[NSFileManager defaultManager] + setAttributes:@{NSFileProtectionKey : NSFileProtectionNone} + ofItemAtPath:[self->_fileURL path] + error:&error]) { + FIRCLSErrorLog(@"Error setting NSFileProtection: %@", error); + } +#endif + } +#else + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:state forKey:FIRCLSNSUserDefaultsDataDictionaryKey]; + [defaults synchronize]; +#endif + }); + + dispatch_sync(self.serialDictionaryQueue, ^{ + self->_persistedDataDictionary = [self->_dataDictionary copy]; + }); +} + +- (NSDictionary *)loadDefaults { + __block NSDictionary *state = nil; + dispatch_sync(self.synchronizationQueue, ^{ +#if CLS_TARGET_CAN_WRITE_TO_DISK + BOOL isDirectory; + BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[self->_fileURL path] + isDirectory:&isDirectory]; + + if (fileExists && !isDirectory) { + state = [NSDictionary dictionaryWithContentsOfURL:self->_fileURL]; + if (nil == state) { + FIRCLSErrorLog(@"Failed to read existing UserDefaults file"); + } + } else if (!fileExists && !isDirectory) { + // No file found. This is expected on first launch. + } else if (fileExists && isDirectory) { + FIRCLSErrorLog(@"Found directory where file expected. Removing conflicting directory"); + + NSError *error; + if (![[NSFileManager defaultManager] removeItemAtURL:self->_fileURL error:&error]) { + FIRCLSErrorLog(@"Error removing conflicting directory: %@", error); + } + } +#else + state = [[NSUserDefaults standardUserDefaults] dictionaryForKey:FIRCLSNSUserDefaultsDataDictionaryKey]; +#endif + }); + return state; +} + +#pragma mark - migration + +// This method migrates all keys specified from NSUserDefaults to FIRCLSUserDefaults +// To do so, we copy all known key-value pairs into FIRCLSUserDefaults, synchronize it, then +// remove the keys from NSUserDefaults and synchronize it. +- (void)migrateFromNSUserDefaults:(NSArray *)keysToMigrate { + BOOL didFindKeys = NO; + + // First, copy all of the keysToMigrate which are stored NSUserDefaults + for (NSString *key in keysToMigrate) { + id oldValue = [[NSUserDefaults standardUserDefaults] objectForKey:(NSString *)key]; + if (nil != oldValue) { + didFindKeys = YES; + [self setObject:oldValue forKey:key]; + } + } + + if (didFindKeys) { + // First synchronize FIRCLSUserDefaults such that all keysToMigrate in NSUserDefaults are stored + // in FIRCLSUserDefaults. At this point, data is duplicated. + [[FIRCLSUserDefaults standardUserDefaults] synchronize]; + + for (NSString *key in keysToMigrate) { + [[NSUserDefaults standardUserDefaults] removeObjectForKey:(NSString *)key]; + } + + // This should be our last interaction with NSUserDefaults. All data is migrated into + // FIRCLSUserDefaults + [[NSUserDefaults standardUserDefaults] synchronize]; + } +} + +// This method first queries FIRCLSUserDefaults to see if the key exist, and upon failure, +// searches for the key in NSUserDefaults, and migrates it if found. +- (id)objectForKeyByMigratingFromNSUserDefaults:(NSString *)keyToMigrateOrNil { + if (!keyToMigrateOrNil) { + return nil; + } + + id clsUserDefaultsValue = [self objectForKey:keyToMigrateOrNil]; + if (clsUserDefaultsValue != nil) { + return clsUserDefaultsValue; // if the value exists in FIRCLSUserDefaults, return it. + } + + id oldNSUserDefaultsValue = + [[NSUserDefaults standardUserDefaults] objectForKey:keyToMigrateOrNil]; + if (!oldNSUserDefaultsValue) { + return nil; // if the value also does not exist in NSUserDefaults, return nil. + } + + // Otherwise, the key exists in NSUserDefaults. Migrate it to FIRCLSUserDefaults + // and then return the associated value. + + // First store it in FIRCLSUserDefaults so in the event of a crash, data is not lost. + [self setObject:oldNSUserDefaultsValue forKey:keyToMigrateOrNil]; + [[FIRCLSUserDefaults standardUserDefaults] synchronize]; + + [[NSUserDefaults standardUserDefaults] removeObjectForKey:keyToMigrateOrNil]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + return oldNSUserDefaultsValue; +} + +@end diff --git a/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h b/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h new file mode 100644 index 000000000000..775bca24a2c6 --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h @@ -0,0 +1,23 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "FIRCLSUserDefaults.h" + +@interface FIRCLSUserDefaults (Private) +- (BOOL)synchronizeWroteToDisk; +- (NSDictionary *)loadDefaults; +- (NSURL *)generateDirectoryURLForBaseURL:(NSURL *)directoryBaseURL + hostAppBundleIdentifier:(NSString *)hostAppBundleIdentifer; +@end diff --git a/Crashlytics/Crashlytics/FIRCrashlytics.m b/Crashlytics/Crashlytics/FIRCrashlytics.m new file mode 100644 index 000000000000..fd0ece6883ef --- /dev/null +++ b/Crashlytics/Crashlytics/FIRCrashlytics.m @@ -0,0 +1,302 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#import "FBLPromises.h" + +#include "FIRCLSCrashedMarkerFile.h" +#import "FIRCLSDataCollectionArbiter.h" +#import "FIRCLSDefines.h" +#include "FIRCLSException.h" +#import "FIRCLSFileManager.h" +#include "FIRCLSGlobals.h" +#import "FIRCLSHost.h" +#include "FIRCLSProfiling.h" +#import "FIRCLSReport_Private.h" +#import "FIRCLSUserDefaults.h" +#include "FIRCLSUserLogging.h" +#include "FIRCLSUtility.h" + +#import "FIRCLSByteUtility.h" +#import "FIRCLSFABHost.h" +#import "FIRCLSLogger.h" + +#import "FIRCLSReportManager.h" + +#import +#import +#import +#import +#import +#import +#import +#import + +#if TARGET_OS_IPHONE +#import +#endif + +FIRCLSContext _clsContext; +dispatch_queue_t _clsLoggingQueue; +dispatch_queue_t _clsBinaryImageQueue; +dispatch_queue_t _clsExceptionQueue; + +static atomic_bool _hasInitializedInstance; + +/// Empty protocol to register with FirebaseCore's component system. +@protocol FIRCrashlyticsInstanceProvider +@end + +@interface FIRCrashlytics () + +@property(nonatomic) BOOL didPreviouslyCrash; +@property(nonatomic, copy) NSString *googleAppID; +@property(nonatomic) FIRCLSDataCollectionArbiter *dataArbiter; +@property(nonatomic) FIRCLSFileManager *fileManager; +@property(nonatomic) FIRCLSReportManager *reportManager; + +@end + +@implementation FIRCrashlytics + +#pragma mark - Singleton Support + +- (instancetype)initWithApp:(FIRApp *)app + appInfo:(NSDictionary *)appInfo + instanceID:(FIRInstanceID *)instanceID + analytics:(id)analytics { + self = [super init]; + + if (self) { + bool expectedCalled = NO; + if (!atomic_compare_exchange_strong(&_hasInitializedInstance, &expectedCalled, YES)) { + FIRCLSErrorLog(@"Cannot instantiate more than one instance of Crashlytics."); + return nil; + } + + FIRCLSProfileMark mark = FIRCLSProfilingStart(); + + NSLog(@"[Firebase/Crashlytics] Version %@", @CLS_SDK_DISPLAY_VERSION); + + FIRCLSDeveloperLog("Crashlytics", @"Running on %@, %@ (%@)", FIRCLSHostModelInfo(), + FIRCLSHostOSDisplayVersion(), FIRCLSHostOSBuildVersion()); + + _fileManager = [[FIRCLSFileManager alloc] init]; + _googleAppID = app.options.googleAppID; + _dataArbiter = [[FIRCLSDataCollectionArbiter alloc] initWithApp:app withAppInfo:appInfo]; + _reportManager = [[FIRCLSReportManager alloc] initWithFileManager:_fileManager + instanceID:instanceID + analytics:analytics + googleAppID:_googleAppID + dataArbiter:_dataArbiter]; + + // Process did crash during previous execution + NSString *crashedMarkerFileName = [NSString stringWithUTF8String:FIRCLSCrashedMarkerFileName]; + NSString *crashedMarkerFileFullPath = + [[_fileManager rootPath] stringByAppendingPathComponent:crashedMarkerFileName]; + _didPreviouslyCrash = [_fileManager fileExistsAtPath:crashedMarkerFileFullPath]; + + if (_didPreviouslyCrash) { + // Delete the crash file marker in the background ensure start up is as fast as possible + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ + [self.fileManager removeItemAtPath:crashedMarkerFileFullPath]; + }); + } + + [[[_reportManager startWithProfilingMark:mark] then:^id _Nullable(NSNumber *_Nullable value) { + if (![value boolValue]) { + FIRCLSErrorLog(@"Crash reporting could not be initialized"); + } + return value; + }] catch:^void(NSError *error) { + FIRCLSErrorLog(@"Crash reporting failed to initialize with error: %@", error); + }]; + } + + return self; +} + ++ (void)load { + [FIRApp registerInternalLibrary:(Class)self + withName:@"firebase-crashlytics" + withVersion:@CLS_SDK_DISPLAY_VERSION]; +} + ++ (NSArray *)componentsToRegister { + FIRDependency *analyticsDep = + [FIRDependency dependencyWithProtocol:@protocol(FIRAnalyticsInterop)]; + + FIRComponentCreationBlock creationBlock = + ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) { + if (!container.app.isDefaultApp) { + FIRCLSErrorLog(@"Crashlytics must be used with the default Firebase app."); + return nil; + } + + id analytics = FIR_COMPONENT(FIRAnalyticsInterop, container); + + FIRInstanceID *instanceID = FIRInstanceID.instanceID; + + *isCacheable = YES; + + return [[FIRCrashlytics alloc] initWithApp:container.app + appInfo:NSBundle.mainBundle.infoDictionary + instanceID:instanceID + analytics:analytics]; + }; + + FIRComponent *component = + [FIRComponent componentWithProtocol:@protocol(FIRCrashlyticsInstanceProvider) + instantiationTiming:FIRInstantiationTimingEagerInDefaultApp + dependencies:@[ analyticsDep ] + creationBlock:creationBlock]; + return @[ component ]; +} + ++ (instancetype)crashlytics { + // The container will return the same instance since isCacheable is set + + FIRApp *defaultApp = [FIRApp defaultApp]; // Missing configure will be logged here. + + // Get the instance from the `FIRApp`'s container. This will create a new instance the + // first time it is called, and since `isCacheable` is set in the component creation + // block, it will return the existing instance on subsequent calls. + id instance = + FIR_COMPONENT(FIRCrashlyticsInstanceProvider, defaultApp.container); + + // In the component creation block, we return an instance of `FIRCrashlytics`. Cast it and + // return it. + return (FIRCrashlytics *)instance; +} + +- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled { + [self.dataArbiter setCrashlyticsCollectionEnabled:enabled]; +} + +- (BOOL)isCrashlyticsCollectionEnabled { + return [self.dataArbiter isCrashlyticsCollectionEnabled]; +} + +#pragma mark - API: didCrashDuringPreviousExecution + +- (BOOL)didCrashDuringPreviousExecution { + return self.didPreviouslyCrash; +} + +- (void)processDidCrashDuringPreviousExecution { + NSString *crashedMarkerFileName = [NSString stringWithUTF8String:FIRCLSCrashedMarkerFileName]; + NSString *crashedMarkerFileFullPath = + [[self.fileManager rootPath] stringByAppendingPathComponent:crashedMarkerFileName]; + self.didPreviouslyCrash = [self.fileManager fileExistsAtPath:crashedMarkerFileFullPath]; + + if (self.didPreviouslyCrash) { + // Delete the crash file marker in the background ensure start up is as fast as possible + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ + [self.fileManager removeItemAtPath:crashedMarkerFileFullPath]; + }); + } +} + +#pragma mark - API: Logging +- (void)log:(NSString *)msg { + FIRCLSLog(@"%@", msg); +} + +- (void)logWithFormat:(NSString *)format, ... { + va_list args; + va_start(args, format); + [self logWithFormat:format arguments:args]; + va_end(args); +} + +- (void)logWithFormat:(NSString *)format arguments:(va_list)args { + [self log:[[NSString alloc] initWithFormat:format arguments:args]]; +} + +#pragma mark - API: Accessors + +- (void)checkForUnsentReportsWithCompletion:(void (^)(BOOL))completion { + [[self.reportManager checkForUnsentReports] then:^id _Nullable(NSNumber *_Nullable value) { + completion([value boolValue]); + return nil; + }]; +} + +- (void)sendUnsentReports { + [self.reportManager sendUnsentReports]; +} + +- (void)deleteUnsentReports { + [self.reportManager deleteUnsentReports]; +} + +#pragma mark - API: setUserID +- (void)setUserID:(NSString *)userID { + FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSUserIdentifierKey, userID); +} + +#pragma mark - API: setCustomValue + +- (void)setCustomValue:(id)value forKey:(NSString *)key { + FIRCLSUserLoggingRecordUserKeyValue(key, value); +} + +#pragma mark - API: Development Platform +// These two methods are depercated by our own API, so +// its ok to implement them +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" ++ (void)setDevelopmentPlatformName:(NSString *)name { + [[self crashlytics] setDevelopmentPlatformName:name]; +} + ++ (void)setDevelopmentPlatformVersion:(NSString *)version { + [[self crashlytics] setDevelopmentPlatformVersion:version]; +} +#pragma clang diagnostic pop + +- (NSString *)developmentPlatformName { + FIRCLSErrorLog(@"developmentPlatformName is write-only"); + return nil; +} + +- (void)setDevelopmentPlatformName:(NSString *)developmentPlatformName { + FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSDevelopmentPlatformNameKey, + developmentPlatformName); +} + +- (NSString *)developmentPlatformVersion { + FIRCLSErrorLog(@"developmentPlatformVersion is write-only"); + return nil; +} + +- (void)setDevelopmentPlatformVersion:(NSString *)developmentPlatformVersion { + FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSDevelopmentPlatformVersionKey, + developmentPlatformVersion); +} + +#pragma mark - API: Errors and Exceptions +- (void)recordError:(NSError *)error { + FIRCLSUserLoggingRecordError(error, nil); +} + +- (void)recordCustomExceptionName:(NSString *)name + reason:(NSString *)reason + frameArray:(NSArray *)frameArray { + FIRCLSExceptionRecord(FIRCLSExceptionTypeCustom, [[name copy] UTF8String], + [[reason copy] UTF8String], [frameArray copy], NO); +} + +@end diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSException.h b/Crashlytics/Crashlytics/Handlers/FIRCLSException.h new file mode 100644 index 000000000000..7287d9eeeee0 --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSException.h @@ -0,0 +1,71 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include + +#ifdef __OBJC__ +#import +@class FIRCLSStackFrame; +#endif + +#define CLS_EXCEPTION_STRING_LENGTH_MAX (1024 * 16) + +typedef enum { + FIRCLSExceptionTypeUnknown = 0, + FIRCLSExceptionTypeObjectiveC = 1, + FIRCLSExceptionTypeCpp = 2, + // 3 was FIRCLSExceptionTypeJavascript + // Keeping these numbers the same just to be safe + FIRCLSExceptionTypeCustom = 4 +} FIRCLSExceptionType; + +typedef struct { + const char* path; + + void (*originalTerminateHandler)(void); + +#if !TARGET_OS_IPHONE + void* originalNSApplicationReportException; +#endif + + uint32_t maxCustomExceptions; +} FIRCLSExceptionReadOnlyContext; + +typedef struct { + uint32_t customExceptionCount; +} FIRCLSExceptionWritableContext; + +__BEGIN_DECLS + +void FIRCLSExceptionInitialize(FIRCLSExceptionReadOnlyContext* roContext, + FIRCLSExceptionWritableContext* rwContext, + void* delegate); +void FIRCLSExceptionCheckHandlers(void* delegate); + +void FIRCLSExceptionRaiseTestObjCException(void) __attribute((noreturn)); +void FIRCLSExceptionRaiseTestCppException(void) __attribute((noreturn)); + +#ifdef __OBJC__ +void FIRCLSExceptionRecordNSException(NSException* exception); +void FIRCLSExceptionRecord(FIRCLSExceptionType type, + const char* name, + const char* reason, + NSArray* frames, + BOOL attemptDelivery); +#endif + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSException.mm b/Crashlytics/Crashlytics/Handlers/FIRCLSException.mm new file mode 100644 index 000000000000..cb48cbd889d0 --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSException.mm @@ -0,0 +1,413 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#include "FIRCLSException.h" + +#include "FIRCLSApplication.h" +#include "FIRCLSFile.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSHandler.h" +#import "FIRCLSLogger.h" +#include "FIRCLSProcess.h" +#import "FIRCLSStackFrame.h" +#import "FIRCLSUserLogging.h" +#import "FIRCLSUtility.h" + +#include "FIRCLSDemangleOperation.h" +#import "FIRCLSReportManager_Private.h" + +// C++/Objective-C exception handling +#include +#include +#include +#include + +#if !TARGET_OS_IPHONE +#import +#import +#endif + +#pragma mark Prototypes +static void FIRCLSTerminateHandler(void); +#if !TARGET_OS_IPHONE +void FIRCLSNSApplicationReportException(id self, SEL cmd, NSException *exception); + +typedef void (*NSApplicationReportExceptionFunction)(id, SEL, NSException *); + +static BOOL FIRCLSIsNSApplicationCrashOnExceptionsEnabled(void); +static NSApplicationReportExceptionFunction FIRCLSOriginalNSExceptionReportExceptionFunction(void); +static Method FIRCLSGetNSApplicationReportExceptionMethod(void); + +#endif + +#pragma mark - API +void FIRCLSExceptionInitialize(FIRCLSExceptionReadOnlyContext *roContext, + FIRCLSExceptionWritableContext *rwContext, + void *delegate) { + if (!FIRCLSUnlinkIfExists(roContext->path)) { + FIRCLSSDKLog("Unable to reset the exception file %s\n", strerror(errno)); + } + + roContext->originalTerminateHandler = std::set_terminate(FIRCLSTerminateHandler); + +#if !TARGET_OS_IPHONE + // If FIRCLSApplicationSharedInstance is null, we don't need this + if (FIRCLSIsNSApplicationCrashOnExceptionsEnabled() && FIRCLSApplicationSharedInstance()) { + Method m = FIRCLSGetNSApplicationReportExceptionMethod(); + + roContext->originalNSApplicationReportException = + (void *)method_setImplementation(m, (IMP)FIRCLSNSApplicationReportException); + } +#endif + + rwContext->customExceptionCount = 0; +} + +#if 0 +// This bit of code might be useful at some point. But, currently it isn't needed. +static void FIRCLSExceptionUninstallHandlers(void) { + std::set_terminate(_clsContext.readonly->exception.originalTerminateHandler); + +#if !TARGET_OS_IPHONE + Method m = FIRCLSGetNSApplicationReportExceptionMethod(); + + method_setImplementation(m, (IMP)FIRCLSOriginalNSExceptionReportExceptionFunction()); +#endif +} +#endif + +void FIRCLSExceptionRecordNSException(NSException *exception) { + FIRCLSSDKLog("Recording an NSException\n"); + + NSArray *returnAddresses = [exception callStackReturnAddresses]; + + NSString *name = [exception name]; + NSString *reason = [exception reason]; + + // It's tempting to try to make use of callStackSymbols here. But, the output + // of that function is not intended to be machine-readible. We could parse it, + // but that isn't really worthwhile, considering that address-based symbolication + // needs to work anyways. + + // package our frames up into the appropriate format + NSMutableArray *frames = [NSMutableArray new]; + + for (NSNumber *address in returnAddresses) { + [frames addObject:[FIRCLSStackFrame stackFrameWithAddress:[address unsignedIntegerValue]]]; + } + + FIRCLSExceptionRecord(FIRCLSExceptionTypeObjectiveC, [name UTF8String], [reason UTF8String], + frames, YES); +} + +static void FIRCLSExceptionRecordFrame(FIRCLSFile *file, FIRCLSStackFrame *frame) { + FIRCLSFileWriteHashStart(file); + + FIRCLSFileWriteHashEntryUint64(file, "pc", [frame address]); + + NSString *string = [frame symbol]; + if (string) { + FIRCLSFileWriteHashEntryHexEncodedString(file, "symbol", [string UTF8String]); + } + + FIRCLSFileWriteHashEntryUint64(file, "offset", [frame offset]); + + string = [frame library]; + if (string) { + FIRCLSFileWriteHashEntryHexEncodedString(file, "library", [string UTF8String]); + } + + string = [frame fileName]; + if (string) { + FIRCLSFileWriteHashEntryHexEncodedString(file, "file", [string UTF8String]); + } + + FIRCLSFileWriteHashEntryUint64(file, "line", [frame lineNumber]); + + FIRCLSFileWriteHashEnd(file); +} + +static bool FIRCLSExceptionIsNative(FIRCLSExceptionType type) { + return type == FIRCLSExceptionTypeObjectiveC || type == FIRCLSExceptionTypeCpp; +} + +static const char *FIRCLSExceptionNameForType(FIRCLSExceptionType type) { + switch (type) { + case FIRCLSExceptionTypeObjectiveC: + return "objective-c"; + case FIRCLSExceptionTypeCpp: + return "c++"; + case FIRCLSExceptionTypeCustom: + return "custom"; + default: + break; + } + + return "unknown"; +} + +void FIRCLSExceptionWrite(FIRCLSFile *file, + FIRCLSExceptionType type, + const char *name, + const char *reason, + NSArray *frames) { + FIRCLSFileWriteSectionStart(file, "exception"); + + FIRCLSFileWriteHashStart(file); + + FIRCLSFileWriteHashEntryString(file, "type", FIRCLSExceptionNameForType(type)); + FIRCLSFileWriteHashEntryHexEncodedString(file, "name", name); + FIRCLSFileWriteHashEntryHexEncodedString(file, "reason", reason); + FIRCLSFileWriteHashEntryUint64(file, "time", time(NULL)); + + if ([frames count]) { + FIRCLSFileWriteHashKey(file, "frames"); + FIRCLSFileWriteArrayStart(file); + + for (FIRCLSStackFrame *frame in frames) { + FIRCLSExceptionRecordFrame(file, frame); + } + + FIRCLSFileWriteArrayEnd(file); + } + + FIRCLSFileWriteHashEnd(file); + + FIRCLSFileWriteSectionEnd(file); +} + +void FIRCLSExceptionRecord(FIRCLSExceptionType type, + const char *name, + const char *reason, + NSArray *frames, + BOOL attemptDelivery) { + if (!FIRCLSContextIsInitialized()) { + return; + } + + bool native = FIRCLSExceptionIsNative(type); + + FIRCLSSDKLog("Recording an exception structure (%d, %d)\n", attemptDelivery, native); + + // exceptions can happen on multiple threads at the same time + if (native) { + dispatch_sync(_clsExceptionQueue, ^{ + const char *path = _clsContext.readonly->exception.path; + FIRCLSFile file; + + if (!FIRCLSFileInitWithPath(&file, path, false)) { + FIRCLSSDKLog("Unable to open exception file\n"); + return; + } + + FIRCLSExceptionWrite(&file, type, name, reason, frames); + + // We only want to do this work if we have the expectation that we'll actually crash + FIRCLSHandler(&file, mach_thread_self(), NULL); + + FIRCLSFileClose(&file); + + // disallow immediate delivery for non-native exceptions + if (attemptDelivery) { + FIRCLSHandlerAttemptImmediateDelivery(); + } + }); + } else { + FIRCLSUserLoggingWriteAndCheckABFiles(&_clsContext.readonly->logging.customExceptionStorage, + &_clsContext.writable->logging.activeCustomExceptionPath, + ^(FIRCLSFile *file) { + FIRCLSExceptionWrite(file, type, name, reason, frames); + }); + } + + FIRCLSSDKLog("Finished recording an exception structure\n"); +} + +// Ignore this message here, because we know that this call will not leak. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Winvalid-noreturn" +void FIRCLSExceptionRaiseTestObjCException(void) { + [NSException raise:@"CrashlyticsTestException" + format:@"This is an Objective-C exception using for testing."]; +} + +void FIRCLSExceptionRaiseTestCppException(void) { + throw "Crashlytics C++ Test Exception"; +} +#pragma clang diagnostic pop + +static const char *FIRCLSExceptionDemangle(const char *symbol) { + return [[FIRCLSDemangleOperation demangleCppSymbol:symbol] UTF8String]; +} + +static void FIRCLSCatchAndRecordActiveException(std::type_info *typeInfo) { + if (!FIRCLSIsValidPointer(typeInfo)) { + FIRCLSSDKLog("Error: invalid parameter\n"); + return; + } + + const char *name = typeInfo->name(); + FIRCLSSDKLog("Recording exception of type '%s'\n", name); + + // This is a funny technique to get the exception object. The inner @try + // has the ability to capture NSException-derived objects. It seems that + // c++ trys can do that in some cases, but I was warned by the WWDC labs + // that there are cases where that will not work (like for NSException subclasses). + try { + @try { + // This could potentially cause a call to std::terminate() if there is actually no active + // exception. + throw; + } @catch (NSException *exception) { +#if TARGET_OS_IPHONE + FIRCLSExceptionRecordNSException(exception); +#else + // There's no need to record this here, because we're going to get + // the value forward to us by AppKit + FIRCLSSDKLog("Skipping ObjC exception at this point\n"); +#endif + } + } catch (const char *exc) { + FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "const char *", exc, nil, YES); + } catch (const std::string &exc) { + FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::string", exc.c_str(), nil, YES); + } catch (const std::exception &exc) { + FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc.what(), nil, + YES); + } catch (const std::exception *exc) { + FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc->what(), nil, + YES); + } catch (const std::bad_alloc &exc) { + // it is especially important to avoid demangling in this case, because the expetation at this + // point is that all allocations could fail + FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::bad_alloc", exc.what(), nil, YES); + } catch (...) { + FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), "", nil, YES); + } +} + +#pragma mark - Handlers +static void FIRCLSTerminateHandler(void) { + FIRCLSSDKLog("C++ terminate handler invoked\n"); + + void (*handler)(void) = _clsContext.readonly->exception.originalTerminateHandler; + if (handler == FIRCLSTerminateHandler) { + FIRCLSSDKLog("Error: original handler was set recursively\n"); + handler = NULL; + } + + // Restore pre-existing handler, if any. Do this early, so that + // if std::terminate is called while we are executing here, we do not recurse. + if (handler) { + FIRCLSSDKLog("restoring pre-existing handler\n"); + + // To prevent infinite recursion in this function, check that we aren't resetting the terminate + // handler to the same function again, which would be this function in the event that we can't + // actually change the handler during a terminate. + if (std::set_terminate(handler) == handler) { + FIRCLSSDKLog("handler has already been restored, aborting\n"); + abort(); + } + } + + // we can use typeInfo to record the type of the exception, + // but we must use a catch to get the value + std::type_info *typeInfo = __cxxabiv1::__cxa_current_exception_type(); + if (typeInfo) { + FIRCLSCatchAndRecordActiveException(typeInfo); + } else { + FIRCLSSDKLog("no active exception\n"); + } + + // only do this if there was a pre-existing handler + if (handler) { + FIRCLSSDKLog("invoking pre-existing handler\n"); + handler(); + } + + FIRCLSSDKLog("aborting\n"); + abort(); +} + +void FIRCLSExceptionCheckHandlers(void *delegate) { +#if !TARGET_OS_IPHONE + // Check this on OS X all the time, even if the debugger is attached. This is a common + // source of errors, so we want to be extra verbose in this case. + if (FIRCLSApplicationSharedInstance()) { + if (!FIRCLSIsNSApplicationCrashOnExceptionsEnabled()) { + FIRCLSWarningLog(@"Warning: NSApplicationCrashOnExceptions is not set. This will " + @"result in poor top-level uncaught exception reporting."); + } + } +#endif + + if (_clsContext.readonly->debuggerAttached) { + return; + } + + void *ptr = NULL; + + ptr = (void *)std::get_terminate(); + if (ptr != FIRCLSTerminateHandler) { + FIRCLSLookupFunctionPointer(ptr, ^(const char *name, const char *lib) { + FIRCLSWarningLog(@"Warning: std::get_terminate is '%s' in '%s'", name, lib); + }); + } + +#if TARGET_OS_IPHONE + ptr = (void *)NSGetUncaughtExceptionHandler(); + if (ptr) { + FIRCLSLookupFunctionPointer(ptr, ^(const char *name, const char *lib) { + FIRCLSWarningLog(@"Warning: NSUncaughtExceptionHandler is '%s' in '%s'", name, lib); + }); + } +#else + if (FIRCLSApplicationSharedInstance() && FIRCLSIsNSApplicationCrashOnExceptionsEnabled()) { + // In this case, we *might* be able to intercept exceptions. But, verify we've still + // swizzled the method. + Method m = FIRCLSGetNSApplicationReportExceptionMethod(); + + if (method_getImplementation(m) != (IMP)FIRCLSNSApplicationReportException) { + FIRCLSWarningLog( + @"Warning: top-level NSApplication-reported exceptions cannot be intercepted"); + } + } +#endif +} + +#pragma mark - AppKit Handling +#if !TARGET_OS_IPHONE +static BOOL FIRCLSIsNSApplicationCrashOnExceptionsEnabled(void) { + return [[NSUserDefaults standardUserDefaults] boolForKey:@"NSApplicationCrashOnExceptions"]; +} + +static Method FIRCLSGetNSApplicationReportExceptionMethod(void) { + return class_getInstanceMethod(NSClassFromString(@"NSApplication"), @selector(reportException:)); +} + +static NSApplicationReportExceptionFunction FIRCLSOriginalNSExceptionReportExceptionFunction(void) { + return (NSApplicationReportExceptionFunction) + _clsContext.readonly->exception.originalNSApplicationReportException; +} + +void FIRCLSNSApplicationReportException(id self, SEL cmd, NSException *exception) { + FIRCLSExceptionRecordNSException(exception); + + // Call the original implementation + FIRCLSOriginalNSExceptionReportExceptionFunction()(self, cmd, exception); +} + +#endif diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h b/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h new file mode 100644 index 000000000000..2940de2a56d2 --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h @@ -0,0 +1,26 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFile.h" + +#include + +__BEGIN_DECLS + +void FIRCLSHandler(FIRCLSFile* file, thread_t crashedThread, void* uapVoid); +void FIRCLSHandlerAttemptImmediateDelivery(void); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m b/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m new file mode 100644 index 000000000000..9cfaa0473026 --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m @@ -0,0 +1,61 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSHandler.h" + +#include "FIRCLSCrashedMarkerFile.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSHost.h" +#include "FIRCLSProcess.h" +#include "FIRCLSUtility.h" + +#import "FIRCLSReportManager_Private.h" + +void FIRCLSHandler(FIRCLSFile* file, thread_t crashedThread, void* uapVoid) { + FIRCLSProcess process; + + FIRCLSProcessInit(&process, crashedThread, uapVoid); + + FIRCLSProcessSuspendAllOtherThreads(&process); + + FIRCLSProcessRecordAllThreads(&process, file); + + FIRCLSProcessRecordRuntimeInfo(&process, file); + // Get dispatch queue and thread names. Note that getting the thread names + // can hang, so let's do that last + FIRCLSProcessRecordDispatchQueueNames(&process, file); + FIRCLSProcessRecordThreadNames(&process, file); + + // this stuff isn't super important, but we can try + FIRCLSProcessRecordStats(&process, file); + FIRCLSHostWriteDiskUsage(file); + + // This is the first common point where various crash handlers call into + // Store a crash file marker to indicate that a crash has occured + FIRCLSCreateCrashedMarkerFile(); + + FIRCLSProcessResumeAllOtherThreads(&process); + + // clean up after ourselves + FIRCLSProcessDestroy(&process); +} + +void FIRCLSHandlerAttemptImmediateDelivery(void) { + // now, attempt to relay the event to the delegate + FIRCLSReportManager* manager = (__bridge id)_clsContext.readonly->delegate; + + if ([manager respondsToSelector:@selector(potentiallySubmittableCrashOccurred)]) { + [manager potentiallySubmittableCrashOccurred]; + } +} diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c b/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c new file mode 100644 index 000000000000..1766f9d0a19f --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c @@ -0,0 +1,453 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDefines.h" +#include "FIRCLSFeatures.h" + +#if CLS_MACH_EXCEPTION_SUPPORTED + +#include "FIRCLSMachException.h" +#include "FIRCLSProcess.h" +#include "FIRCLSUtility.h" +#include "FIRCLSSignal.h" +#include "FIRCLSHandler.h" +#include "FIRCLSGlobals.h" + +#include +#include +#include +#include + +#pragma mark Prototypes +static exception_mask_t FIRCLSMachExceptionMask(void); +static void* FIRCLSMachExceptionServer(void* argument); +static bool FIRCLSMachExceptionThreadStart(FIRCLSMachExceptionReadContext* context); +static bool FIRCLSMachExceptionReadMessage(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message); +static kern_return_t FIRCLSMachExceptionDispatchMessage(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message); +static bool FIRCLSMachExceptionReply(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message, kern_return_t result); +static bool FIRCLSMachExceptionRegister(FIRCLSMachExceptionReadContext* context, exception_mask_t ignoreMask); +static bool FIRCLSMachExceptionUnregister(FIRCLSMachExceptionOriginalPorts* originalPorts, exception_mask_t mask); +static bool FIRCLSMachExceptionRecord(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message); + +#pragma mark - Initialization +void FIRCLSMachExceptionInit(FIRCLSMachExceptionReadContext* context, exception_mask_t ignoreMask) { + if (!FIRCLSUnlinkIfExists(context->path)) { + FIRCLSSDKLog("Unable to reset the mach exception file %s\n", strerror(errno)); + } + + if (!FIRCLSMachExceptionRegister(context, ignoreMask)) { + FIRCLSSDKLog("Unable to register mach exception handler\n"); + return; + } + + if (!FIRCLSMachExceptionThreadStart(context)) { + FIRCLSSDKLog("Unable to start thread\n"); + FIRCLSMachExceptionUnregister(&context->originalPorts, context->mask); + } +} + +void FIRCLSMachExceptionCheckHandlers(void) { + if (_clsContext.readonly->debuggerAttached) { + return; + } + + // It isn't really critical that this be done, as its extremely uncommon to run into + // preexisting handlers. + // Can use task_get_exception_ports for this. +} + +static exception_mask_t FIRCLSMachExceptionMask(void) { + exception_mask_t mask; + + // EXC_BAD_ACCESS + // EXC_BAD_INSTRUCTION + // EXC_ARITHMETIC + // EXC_EMULATION - non-failure + // EXC_SOFTWARE - non-failure + // EXC_BREAKPOINT - trap instructions, from the debugger and code. Needs special treatment. + // EXC_SYSCALL - non-failure + // EXC_MACH_SYSCALL - non-failure + // EXC_RPC_ALERT - non-failure + // EXC_CRASH - see below + // EXC_RESOURCE - non-failure, happens when a process exceeds a resource limit + // EXC_GUARD - see below + // + // EXC_CRASH is a special kind of exception. It is handled by launchd, and treated special by + // the kernel. Seems that we cannot safely catch it - our handler will never be called. This + // is a confirmed kernel bug. Lacking access to EXC_CRASH means we must use signal handlers to + // cover all types of crashes. + // EXC_GUARD is relatively new, and isn't available on all OS versions. You have to be careful, becuase + // you cannot succesfully register hanlders if there are any unrecognized masks. + // We've dropped support for old OS versions that didn't have EXC_GUARD (iOS 5 and below, macOS 10.6 and below) + // so we always add it now + + mask = EXC_MASK_BAD_ACCESS | EXC_MASK_BAD_INSTRUCTION | EXC_MASK_ARITHMETIC | EXC_MASK_BREAKPOINT | EXC_MASK_GUARD; + + return mask; +} + +static bool FIRCLSMachExceptionThreadStart(FIRCLSMachExceptionReadContext* context) { + pthread_attr_t attr; + + if (pthread_attr_init(&attr) != 0) { + FIRCLSSDKLog("pthread_attr_init %s\n", strerror(errno)); + return false; + } + + if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0) { + FIRCLSSDKLog("pthread_attr_setdetachstate %s\n", strerror(errno)); + return false; + } + + // Use to pre-allocate a stack for this thread + // The stack must be page-aligned + if (pthread_attr_setstack(&attr, _clsContext.readonly->machStack, CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE) != 0) { + FIRCLSSDKLog("pthread_attr_setstack %s\n", strerror(errno)); + return false; + } + + if (pthread_create(&context->thread, &attr, FIRCLSMachExceptionServer, context) != 0) { + FIRCLSSDKLog("pthread_create %s\n", strerror(errno)); + return false; + } + + pthread_attr_destroy(&attr); + + return true; +} + +exception_mask_t FIRCLSMachExceptionMaskForSignal(int signal) { + switch (signal) { + case SIGTRAP: return EXC_MASK_BREAKPOINT; + case SIGSEGV: return EXC_MASK_BAD_ACCESS; + case SIGBUS: return EXC_MASK_BAD_ACCESS; + case SIGILL: return EXC_MASK_BAD_INSTRUCTION; + case SIGABRT: return EXC_MASK_CRASH; + case SIGSYS: return EXC_MASK_CRASH; + case SIGFPE: return EXC_MASK_ARITHMETIC; + } + + return 0; +} + +#pragma mark - Message Handling +static void* FIRCLSMachExceptionServer(void* argument) { + FIRCLSMachExceptionReadContext* context = argument; + + pthread_setname_np("com.google.firebase.crashlytics.MachExceptionServer"); + + while (1) { + MachExceptionMessage message; + + // read the exception message + if (!FIRCLSMachExceptionReadMessage(context, &message)) { + break; + } + + // handle it, and possibly forward + kern_return_t result = FIRCLSMachExceptionDispatchMessage(context, &message); + + // and now, reply + if (!FIRCLSMachExceptionReply(context, &message, result)) { + break; + } + } + + FIRCLSSDKLog("Mach exception server thread exiting\n"); + + return NULL; +} + +static bool FIRCLSMachExceptionReadMessage(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message) { + mach_msg_return_t r; + + memset(message, 0, sizeof(MachExceptionMessage)); + + r = mach_msg(&message->head, MACH_RCV_MSG|MACH_RCV_LARGE, 0, sizeof(MachExceptionMessage), context->port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (r != MACH_MSG_SUCCESS) { + FIRCLSSDKLog("Error receving mach_msg (%d)\n", r); + return false; + } + + FIRCLSSDKLog("Accepted mach exception message\n"); + + return true; +} + +static kern_return_t FIRCLSMachExceptionDispatchMessage(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message) { + FIRCLSSDKLog("Mach exception: 0x%x, count: %d, code: 0x%llx 0x%llx\n", + message->exception, + message->codeCnt, + message->codeCnt > 0 ? message->code[0] : -1, + message->codeCnt > 1 ? message->code[1] : -1); + + // This will happen if a child process raises an exception, as the exception ports are + // inherited. + if (message->task.name != mach_task_self()) { + FIRCLSSDKLog("Mach exception task mis-match, returning failure\n"); + return KERN_FAILURE; + } + + FIRCLSSDKLog("Unregistering handler\n"); + if (!FIRCLSMachExceptionUnregister(&context->originalPorts, context->mask)) { + FIRCLSSDKLog("Failed to unregister\n"); + return KERN_FAILURE; + } + + FIRCLSSDKLog("Restoring original signal handlers\n"); + if (!FIRCLSSignalSafeInstallPreexistingHandlers(&_clsContext.readonly->signal)) { + FIRCLSSDKLog("Failed to restore signal handlers\n"); + return KERN_FAILURE; + } + + FIRCLSSDKLog("Recording mach exception\n"); + if (!FIRCLSMachExceptionRecord(context, message)) { + FIRCLSSDKLog("Failed to record mach exception\n"); + return KERN_FAILURE; + } + + return KERN_SUCCESS; +} + +static bool FIRCLSMachExceptionReply(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message, kern_return_t result) { + MachExceptionReply reply; + mach_msg_return_t r; + + // prepare the reply + reply.head.msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(message->head.msgh_bits), 0); + reply.head.msgh_remote_port = message->head.msgh_remote_port; + reply.head.msgh_size = (mach_msg_size_t)sizeof(MachExceptionReply); + reply.head.msgh_local_port = MACH_PORT_NULL; + reply.head.msgh_id = message->head.msgh_id + 100; + + reply.NDR = NDR_record; + + reply.retCode = result; + + FIRCLSSDKLog("Sending exception reply\n"); + + // send it + r = mach_msg(&reply.head, MACH_SEND_MSG, reply.head.msgh_size, 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (r != MACH_MSG_SUCCESS) { + FIRCLSSDKLog("mach_msg reply failed (%d)\n", r); + return false; + } + + FIRCLSSDKLog("Exception reply delivered\n"); + + return true; +} + +#pragma mark - Registration +static bool FIRCLSMachExceptionRegister(FIRCLSMachExceptionReadContext* context, exception_mask_t ignoreMask) { + mach_port_t task = mach_task_self(); + + kern_return_t kr = mach_port_allocate(task, MACH_PORT_RIGHT_RECEIVE, &context->port); + if (kr != KERN_SUCCESS) { + FIRCLSSDKLog("Error: mach_port_allocate failed %d\n", kr); + return false; + } + + kr = mach_port_insert_right(task, context->port, context->port, MACH_MSG_TYPE_MAKE_SEND); + if (kr != KERN_SUCCESS) { + FIRCLSSDKLog("Error: mach_port_insert_right failed %d\n", kr); + mach_port_deallocate(task, context->port); + return false; + } + + // Get the desired mask, which covers all the mach exceptions we are capable of handling, + // but clear out any that are in our ignore list. We do this by ANDing with the bitwise + // negation. Because we are only clearing bits, there's no way to set an incorrect mask + // using ignoreMask. + context->mask = FIRCLSMachExceptionMask() & ~ignoreMask; + + // ORing with MACH_EXCEPTION_CODES will produce 64-bit exception data + kr = task_swap_exception_ports(task, + context->mask, + context->port, + EXCEPTION_DEFAULT | MACH_EXCEPTION_CODES, + THREAD_STATE_NONE, + context->originalPorts.masks, + &context->originalPorts.count, + context->originalPorts.ports, + context->originalPorts.behaviors, + context->originalPorts.flavors); + if (kr != KERN_SUCCESS) { + FIRCLSSDKLog("Error: task_swap_exception_ports %d\n", kr); + return false; + } + + for (int i = 0; i < context->originalPorts.count; ++i) { + FIRCLSSDKLog("original 0x%x 0x%x 0x%x 0x%x\n", context->originalPorts.ports[i], + context->originalPorts.masks[i], + context->originalPorts.behaviors[i], + context->originalPorts.flavors[i]); + } + + return true; +} + +static bool FIRCLSMachExceptionUnregister(FIRCLSMachExceptionOriginalPorts* originalPorts, exception_mask_t mask) { + kern_return_t kr; + + // Re-register all the old ports. + for (mach_msg_type_number_t i = 0; i < originalPorts->count; ++i) { + // clear the bits from this original mask + mask &= ~originalPorts->masks[i]; + + kr = task_set_exception_ports(mach_task_self(), originalPorts->masks[i], originalPorts->ports[i], originalPorts->behaviors[i], originalPorts->flavors[i]); + if (kr != KERN_SUCCESS) { + FIRCLSSDKLog("unable to restore original port: %d", originalPorts->ports[i]); + } + } + + // Finally, mark any masks we registered for that do not have an original port as unused. + kr = task_set_exception_ports(mach_task_self(), mask, MACH_PORT_NULL, EXCEPTION_DEFAULT | MACH_EXCEPTION_CODES, THREAD_STATE_NONE); + if (kr != KERN_SUCCESS) { + FIRCLSSDKLog("unable to unset unregistered mask: 0x%x", mask); + return false; + } + + return true; +} + +#pragma mark - Recording +static void FIRCLSMachExceptionNameLookup(exception_type_t number, mach_exception_data_type_t code, const char** name, const char** codeName) { + if (!name || !codeName) { + return; + } + + *name = NULL; + *codeName = NULL; + + switch (number) { + case EXC_BAD_ACCESS: + *name = "EXC_BAD_ACCESS"; + switch (code) { + case KERN_INVALID_ADDRESS: *codeName = "KERN_INVALID_ADDRESS"; break; + case KERN_PROTECTION_FAILURE: *codeName = "KERN_PROTECTION_FAILURE"; break; + } + + break; + case EXC_BAD_INSTRUCTION: + *name = "EXC_BAD_INSTRUCTION"; +#if CLS_CPU_X86 + *codeName = "EXC_I386_INVOP"; +#endif + break; + case EXC_ARITHMETIC: + *name = "EXC_ARITHMETIC"; +#if CLS_CPU_X86 + switch (code) { + case EXC_I386_DIV: *codeName = "EXC_I386_DIV"; break; + case EXC_I386_INTO: *codeName = "EXC_I386_INTO"; break; + case EXC_I386_NOEXT: *codeName = "EXC_I386_NOEXT"; break; + case EXC_I386_EXTOVR: *codeName = "EXC_I386_EXTOVR"; break; + case EXC_I386_EXTERR: *codeName = "EXC_I386_EXTERR"; break; + case EXC_I386_EMERR: *codeName = "EXC_I386_EMERR"; break; + case EXC_I386_BOUND: *codeName = "EXC_I386_BOUND"; break; + case EXC_I386_SSEEXTERR: *codeName = "EXC_I386_SSEEXTERR"; break; + } +#endif + break; + case EXC_BREAKPOINT: + *name = "EXC_BREAKPOINT"; +#if CLS_CPU_X86 + switch (code) { + case EXC_I386_DIVERR: *codeName = "EXC_I386_DIVERR"; break; + case EXC_I386_SGLSTP: *codeName = "EXC_I386_SGLSTP"; break; + case EXC_I386_NMIFLT: *codeName = "EXC_I386_NMIFLT"; break; + case EXC_I386_BPTFLT: *codeName = "EXC_I386_BPTFLT"; break; + case EXC_I386_INTOFLT: *codeName = "EXC_I386_INTOFLT"; break; + case EXC_I386_BOUNDFLT: *codeName = "EXC_I386_BOUNDFLT"; break; + case EXC_I386_INVOPFLT: *codeName = "EXC_I386_INVOPFLT"; break; + case EXC_I386_NOEXTFLT: *codeName = "EXC_I386_NOEXTFLT"; break; + case EXC_I386_EXTOVRFLT: *codeName = "EXC_I386_EXTOVRFLT"; break; + case EXC_I386_INVTSSFLT: *codeName = "EXC_I386_INVTSSFLT"; break; + case EXC_I386_SEGNPFLT: *codeName = "EXC_I386_SEGNPFLT"; break; + case EXC_I386_STKFLT: *codeName = "EXC_I386_STKFLT"; break; + case EXC_I386_GPFLT: *codeName = "EXC_I386_GPFLT"; break; + case EXC_I386_PGFLT: *codeName = "EXC_I386_PGFLT"; break; + case EXC_I386_EXTERRFLT: *codeName = "EXC_I386_EXTERRFLT"; break; + case EXC_I386_ALIGNFLT: *codeName = "EXC_I386_ALIGNFLT"; break; + case EXC_I386_ENDPERR: *codeName = "EXC_I386_ENDPERR"; break; + case EXC_I386_ENOEXTFLT: *codeName = "EXC_I386_ENOEXTFLT"; break; + } +#endif + break; + case EXC_GUARD: + *name = "EXC_GUARD"; + break; + } +} + +static bool FIRCLSMachExceptionRecord(FIRCLSMachExceptionReadContext* context, MachExceptionMessage* message) { + if (!context || !message) { + return false; + } + + if (FIRCLSContextMarkAndCheckIfCrashed()) { + FIRCLSSDKLog("Error: aborting mach exception handler because crash has already occurred\n"); + exit(1); + return false; + } + + FIRCLSFile file; + + if (!FIRCLSFileInitWithPath(&file, context->path, false)) { + FIRCLSSDKLog("Unable to open mach exception file\n"); + return false; + } + + FIRCLSFileWriteSectionStart(&file, "mach_exception"); + + FIRCLSFileWriteHashStart(&file); + + FIRCLSFileWriteHashEntryUint64(&file, "exception", message->exception); + + // record the codes + FIRCLSFileWriteHashKey(&file, "codes"); + FIRCLSFileWriteArrayStart(&file); + for (mach_msg_type_number_t i = 0; i < message->codeCnt; ++i) { + FIRCLSFileWriteArrayEntryUint64(&file, message->code[i]); + } + FIRCLSFileWriteArrayEnd(&file); + + const char* name = NULL; + const char* codeName = NULL; + + FIRCLSMachExceptionNameLookup(message->exception, message->codeCnt > 0 ? message->code[0] : 0, &name, &codeName); + + FIRCLSFileWriteHashEntryString(&file, "name", name); + FIRCLSFileWriteHashEntryString(&file, "code_name", codeName); + + FIRCLSFileWriteHashEntryUint64(&file, "original_ports", context->originalPorts.count); + FIRCLSFileWriteHashEntryUint64(&file, "time", time(NULL)); + + FIRCLSFileWriteHashEnd(&file); + + FIRCLSFileWriteSectionEnd(&file); + + FIRCLSHandler(&file, message->thread.name, NULL); + + FIRCLSFileClose(&file); + + return true; +} + +#else + +INJECT_STRIP_SYMBOL(cls_mach_exception) + +#endif diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h b/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h new file mode 100644 index 000000000000..b19881a7a5d1 --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h @@ -0,0 +1,78 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSFeatures.h" + +#pragma once + +#if CLS_MACH_EXCEPTION_SUPPORTED + +#include +#include +#include + +// must be at least PTHREAD_STACK_MIN size +#define CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE (256 * 1024) + +#pragma mark Structures +#pragma pack(push, 4) +typedef struct { + mach_msg_header_t head; + /* start of the kernel processed data */ + mach_msg_body_t msgh_body; + mach_msg_port_descriptor_t thread; + mach_msg_port_descriptor_t task; + /* end of the kernel processed data */ + NDR_record_t NDR; + exception_type_t exception; + mach_msg_type_number_t codeCnt; + mach_exception_data_type_t code[EXCEPTION_CODE_MAX]; + mach_msg_trailer_t trailer; +} MachExceptionMessage; + +typedef struct { + mach_msg_header_t head; + NDR_record_t NDR; + kern_return_t retCode; +} MachExceptionReply; +#pragma pack(pop) + +typedef struct { + mach_msg_type_number_t count; + exception_mask_t masks[EXC_TYPES_COUNT]; + exception_handler_t ports[EXC_TYPES_COUNT]; + exception_behavior_t behaviors[EXC_TYPES_COUNT]; + thread_state_flavor_t flavors[EXC_TYPES_COUNT]; +} FIRCLSMachExceptionOriginalPorts; + +typedef struct { + mach_port_t port; + pthread_t thread; + const char* path; + + exception_mask_t mask; + FIRCLSMachExceptionOriginalPorts originalPorts; +} FIRCLSMachExceptionReadContext; + +#pragma mark - API +void FIRCLSMachExceptionInit(FIRCLSMachExceptionReadContext* context, exception_mask_t ignoreMask); +exception_mask_t FIRCLSMachExceptionMaskForSignal(int signal); + +void FIRCLSMachExceptionCheckHandlers(void); + +#else + +#define CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE 0 + +#endif diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c b/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c new file mode 100644 index 000000000000..11a7a50a7912 --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c @@ -0,0 +1,323 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSFeatures.h" +#include "FIRCLSSignal.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSUtility.h" +#include "FIRCLSHandler.h" + +#include +#include + +static const int FIRCLSFatalSignals[FIRCLSSignalCount] = { + SIGABRT, + SIGBUS, + SIGFPE, + SIGILL, + SIGSEGV, + SIGSYS, + SIGTRAP +}; + +#if CLS_USE_SIGALTSTACK +static void FIRCLSSignalInstallAltStack(FIRCLSSignalReadContext *roContext); +#endif +static void FIRCLSSignalInstallHandlers(FIRCLSSignalReadContext *roContext); +static void FIRCLSSignalHandler(int signal, siginfo_t* info, void *uapVoid); + +void FIRCLSSignalInitialize(FIRCLSSignalReadContext *roContext) { + if (!FIRCLSUnlinkIfExists(roContext->path)) { + FIRCLSSDKLog("Unable to reset the signal log file %s\n", strerror(errno)); + } + +#if CLS_USE_SIGALTSTACK + FIRCLSSignalInstallAltStack(roContext); +#endif + FIRCLSSignalInstallHandlers(roContext); +#if TARGET_IPHONE_SIMULATOR + // prevent the OpenGL stack (by way of OpenGLES.framework/libLLVMContainer.dylib) from installing signal handlers + // that do not chain back + // TODO: I don't believe this is necessary as of recent iOS releases + bool *ptr = dlsym(RTLD_DEFAULT, "_ZN4llvm23DisablePrettyStackTraceE"); + if (ptr) { + *ptr = true; + } +#endif +} + +void FIRCLSSignalEnumerateHandledSignals(void (^block)(int idx, int signal)) { + for (int i = 0; i < FIRCLSSignalCount; ++i) { + block(i, FIRCLSFatalSignals[i]); + } +} + +#if CLS_USE_SIGALTSTACK + +static void FIRCLSSignalInstallAltStack(FIRCLSSignalReadContext *roContext) { + stack_t signalStack; + stack_t originalStack; + + signalStack.ss_sp = _clsContext.readonly->signalStack; + signalStack.ss_size = CLS_SIGNAL_HANDLER_STACK_SIZE; + signalStack.ss_flags = 0; + + if (sigaltstack(&signalStack, &originalStack) != 0) { + FIRCLSSDKLog("Unable to setup stack %s\n", strerror(errno)); + + return; + } + + roContext->originalStack.ss_sp = NULL; + roContext->originalStack = originalStack; +} + +#endif + +static void FIRCLSSignalInstallHandlers(FIRCLSSignalReadContext *roContext) { + FIRCLSSignalEnumerateHandledSignals(^(int idx, int signal) { + struct sigaction action; + struct sigaction previousAction; + + action.sa_sigaction = FIRCLSSignalHandler; + // SA_RESETHAND seems like it would be great, but it doesn't appear to + // work correctly. After taking a signal, causing another identical signal in + // the handler will *not* cause the default handler to be invokved (which should + // terminate the process). I've found some evidence that others have seen this + // behavior on MAC OS X. + action.sa_flags = SA_SIGINFO | SA_ONSTACK; + + sigemptyset(&action.sa_mask); + + previousAction.sa_sigaction = NULL; + if (sigaction(signal, &action, &previousAction) != 0) { + FIRCLSSDKLog("Unable to install handler for %d (%s)\n", signal, strerror(errno)); + } + + // store the last action, so it can be recalled + roContext->originalActions[idx].sa_sigaction = NULL; + + if (previousAction.sa_sigaction) { + roContext->originalActions[idx] = previousAction; + } + }); +} + +void FIRCLSSignalCheckHandlers(void) { + if (_clsContext.readonly->debuggerAttached) { + return; + } + + FIRCLSSignalEnumerateHandledSignals(^(int idx, int signal) { + struct sigaction previousAction; + Dl_info info; + void* ptr; + + if (sigaction(signal, 0, &previousAction) != 0) { + fprintf(stderr, "Unable to read signal handler\n"); + return; + } + + ptr = previousAction.__sigaction_u.__sa_handler; + const char* signalName = NULL; + const char* codeName = NULL; + + FIRCLSSignalNameLookup(signal, 0, &signalName, &codeName); + + if (ptr == FIRCLSSignalHandler) { + return; + } + + const char* name = NULL; + if (dladdr(ptr, &info) != 0) { + name = info.dli_sname; + } + + fprintf(stderr, "[Crashlytics] The signal %s has a non-Crashlytics handler (%s). This will interfere with reporting.\n", signalName, name); + }); +} + +void FIRCLSSignalSafeRemoveHandlers(bool includingAbort) { + for (int i = 0; i < FIRCLSSignalCount; ++i) { + struct sigaction sa; + + if (!includingAbort && (FIRCLSFatalSignals[i] == SIGABRT)) { + continue; + } + + sa.sa_handler = SIG_DFL; + sigemptyset(&sa.sa_mask); + + if (sigaction(FIRCLSFatalSignals[i], &sa, NULL) != 0) + FIRCLSSDKLog("Unable to set default handler for %d (%s)\n", i, strerror(errno)); + } +} + +bool FIRCLSSignalSafeInstallPreexistingHandlers(FIRCLSSignalReadContext *roContext) { + bool success; + + FIRCLSSignalSafeRemoveHandlers(true); + +#if CLS_USE_SIGALTSTACK + + // re-install the original stack, if needed + if (roContext->originalStack.ss_sp) { + if (sigaltstack(&roContext->originalStack, 0) != 0) { + FIRCLSSDKLog("Unable to setup stack %s\n", strerror(errno)); + + return false; + } + } + +#endif + + // re-install the original handlers, if any + success = true; + for (int i = 0; i < FIRCLSSignalCount; ++i) { + if (roContext->originalActions[i].sa_sigaction == NULL) { + continue; + } + + if (sigaction(FIRCLSFatalSignals[i], &roContext->originalActions[i], 0) != 0) { + FIRCLSSDKLog("Unable to install handler for %d (%s)\n", i, strerror(errno)); + success = false; + } + } + + return success; +} + +void FIRCLSSignalNameLookup(int number, int code, const char** name, const char** codeName) { + if (!name || !codeName) { + return; + } + + *codeName = NULL; + + switch (number) { + case SIGABRT: + *name = "SIGABRT"; + *codeName = "ABORT"; + break; + case SIGBUS: + *name = "SIGBUS"; + break; + case SIGFPE: + *name = "SIGFPE"; + break; + case SIGILL: + *name = "SIGILL"; + break; + case SIGSEGV: + *name = "SIGSEGV"; + break; + case SIGSYS: + *name = "SIGSYS"; + break; + case SIGTRAP: + *name = "SIGTRAP"; + break; + default: + *name = "UNKNOWN"; + break; + } +} + +static void FIRCLSSignalRecordSignal(int savedErrno, siginfo_t *info, void *uapVoid) { + if (!_clsContext.readonly) { + return; + } + + if (FIRCLSContextMarkAndCheckIfCrashed()) { + FIRCLSSDKLog("Error: aborting signal handler because crash has already occurred"); + exit(1); + return; + } + + FIRCLSFile file; + + if (!FIRCLSFileInitWithPath(&file, _clsContext.readonly->signal.path, false)) { + FIRCLSSDKLog("Unable to open signal file\n"); + return; + } + + FIRCLSFileWriteSectionStart(&file, "signal"); + + FIRCLSFileWriteHashStart(&file); + + if (FIRCLSIsValidPointer(info)) { + FIRCLSFileWriteHashEntryUint64(&file, "number", info->si_signo); + FIRCLSFileWriteHashEntryUint64(&file, "code", info->si_code); + FIRCLSFileWriteHashEntryUint64(&file, "address", (uint64_t)info->si_addr); + + const char* name = NULL; + const char* codeName = NULL; + + FIRCLSSignalNameLookup(info->si_signo, info->si_code, &name, &codeName); + + FIRCLSFileWriteHashEntryString(&file, "name", name); + FIRCLSFileWriteHashEntryString(&file, "code_name", codeName); + } + + FIRCLSFileWriteHashEntryUint64(&file, "errno", savedErrno); + FIRCLSFileWriteHashEntryUint64(&file, "time", time(NULL)); + + FIRCLSFileWriteHashEnd(&file); + + FIRCLSFileWriteSectionEnd(&file); + + FIRCLSHandler(&file, mach_thread_self(), uapVoid); + + FIRCLSFileClose(&file); +} + +static void FIRCLSSignalHandler(int signal, siginfo_t* info, void *uapVoid) { + int savedErrno; + sigset_t set; + + // save errno, both because it is interesting, and so we can restore it afterwards + savedErrno = errno; + errno = 0; + + FIRCLSSDKLog("Signal: %d\n", signal); + + // it is important to do this before unmasking signals, otherwise we can get + // called in a loop + FIRCLSSignalSafeRemoveHandlers(true); + + sigfillset(&set); + if (sigprocmask(SIG_UNBLOCK, &set, NULL) != 0) { + FIRCLSSDKLog("Unable to unmask signals - we risk infinite recursion here\n"); + } + + // check info and uapVoid, and set them to appropriate values if invalid. This can happen + // if we have been called without the SA_SIGINFO flag set + if (!FIRCLSIsValidPointer(info)) { + info = NULL; + } + + if (!FIRCLSIsValidPointer(uapVoid)) { + uapVoid = NULL; + } + + FIRCLSSignalRecordSignal(savedErrno, info, uapVoid); + + // re-install original handlers + if (_clsContext.readonly) { + FIRCLSSignalSafeInstallPreexistingHandlers(&_clsContext.readonly->signal); + } + + // restore errno + errno = savedErrno; +} diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h b/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h new file mode 100644 index 000000000000..64ce78e285d6 --- /dev/null +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h @@ -0,0 +1,50 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFile.h" + +#include +#include + +#define FIRCLSSignalCount (7) + +// per man sigaltstack, MINSIGSTKSZ is the minimum *overhead* needed to support +// a signal stack. The actual stack size must be larger. Let's pick the recommended +// size. +#if CLS_USE_SIGALTSTACK +#define CLS_SIGNAL_HANDLER_STACK_SIZE (SIGSTKSZ * 2) +#else +#define CLS_SIGNAL_HANDLER_STACK_SIZE 0 +#endif + +typedef struct { + const char* path; + struct sigaction originalActions[FIRCLSSignalCount]; + +#if CLS_USE_SIGALTSTACK + stack_t originalStack; +#endif +} FIRCLSSignalReadContext; + +void FIRCLSSignalInitialize(FIRCLSSignalReadContext* roContext); +void FIRCLSSignalCheckHandlers(void); + +void FIRCLSSignalSafeRemoveHandlers(bool includingAbort); +bool FIRCLSSignalSafeInstallPreexistingHandlers(FIRCLSSignalReadContext* roContext); + +void FIRCLSSignalNameLookup(int number, int code, const char** name, const char** codeName); + +void FIRCLSSignalEnumerateHandledSignals(void (^block)(int idx, int signal)); diff --git a/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h b/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h new file mode 100644 index 000000000000..f0de9fed9007 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h @@ -0,0 +1,23 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef FIRAEvent_Internal_h +#define FIRAEvent_Internal_h + +#import "FIRAEvent.h" +#import "FIRAValue.h" + +NSString* FIRCLSFIRAEventDictionaryToJSON(NSDictionary* eventAsDictionary); + +#endif /* FIRAEvent_Internal_h */ diff --git a/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m b/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m new file mode 100644 index 000000000000..4591e29f17c5 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m @@ -0,0 +1,42 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRAEvent+Internal.h" + +#import "FIRCLSUtility.h" + +NSString* FIRCLSFIRAEventDictionaryToJSON(NSDictionary* eventAsDictionary) { + NSError* error = nil; + + if (eventAsDictionary == nil) { + return nil; + } + + if (![NSJSONSerialization isValidJSONObject:eventAsDictionary]) { + FIRCLSSDKLog("Firebase Analytics event is not valid JSON"); + return nil; + } + + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:eventAsDictionary + options:0 + error:&error]; + + if (error == nil) { + NSString* json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + return json; + } else { + FIRCLSSDKLog("Unable to convert Firebase Analytics event to json"); + return nil; + } +} diff --git a/Crashlytics/Crashlytics/Helpers/FIRAEvent.h b/Crashlytics/Crashlytics/Helpers/FIRAEvent.h new file mode 100644 index 000000000000..9fcbd6602c95 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRAEvent.h @@ -0,0 +1,79 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRAPBEvent; + +/// An application event. +@interface FIRAEvent : NSObject + +/// Origin of this event (eg "app" or "auto"). +@property(nonatomic, readonly) NSString *origin; + +/// Name of this event. +@property(nonatomic, readonly) NSString *name; + +/// Timestamp of when this event was fired. +@property(nonatomic, readonly) NSTimeInterval timestamp; + +/// Timestamp of the previous time an event with this name was fired, if any. +@property(nonatomic, readonly) NSTimeInterval previousTimestamp; + +/// The event's parameters as {NSString : NSString} or {NSString : NSNumber}. +@property(nonatomic, readonly) NSDictionary *parameters; + +/// Indicates whether the event has the conversion parameter. Setting to YES adds the conversion +/// parameter if not already present. Setting to NO removes the conversion parameter and adds an +/// error. +@property(nonatomic, getter=isConversion) BOOL conversion; + +/// Indicates whether the event has the real-time parameter. Setting to YES adds the real-time +/// parameter if not already present. Setting to NO removes the real-time parameter. +@property(nonatomic, getter=isRealtime) BOOL realtime; + +/// Indicates whether the event has debug parameter. Setting to YES adds the debug parameter if +/// not already present. Setting to NO removes the debug parameter. +@property(nonatomic, getter=isDebug) BOOL debug; + +/// The populated FIRAPBEvent for proto. +@property(nonatomic, readonly) FIRAPBEvent *protoEvent; + +/// Creates an event with the given parameters. Parameters will be copied and normalized. Returns +/// nil if the name does not meet length requirements. +/// If |parameters| contains the "_o" parameter, its value will be overwritten with the value of +/// |origin|. +- (instancetype)initWithOrigin:(NSString *)origin + isPublic:(BOOL)isPublic + name:(NSString *)name + timestamp:(NSTimeInterval)timestamp + previousTimestamp:(NSTimeInterval)previousTimestamp + parameters:(NSDictionary *)parameters NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + +/// Returns a new event object with the given previousTimestamp. +- (instancetype)copyWithPreviousTimestamp:(NSTimeInterval)previousTimestamp; + +/// Returns a new event object with the new parameters. +- (instancetype)copyWithParameters:(NSDictionary *)parameters; + +/// Returns YES if all parameters in screenParameters were added to the event object. Returns NO if +/// screenParameters is nil/empty or the event already contains any of the screen parameter keys. +/// Performs internal validation on the screen parameter values and converts them to FIRAValue +/// objects if they aren't already. screenParameters should be a dictionary of +/// { NSString : NSString | NSNumber } or { NSString : FIRAValue }. +- (BOOL)addScreenParameters:(NSDictionary *)screenParameters; + +@end diff --git a/Crashlytics/Crashlytics/Helpers/FIRAValue.h b/Crashlytics/Crashlytics/Helpers/FIRAValue.h new file mode 100644 index 000000000000..b34dacf44f76 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRAValue.h @@ -0,0 +1,69 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@import Foundation; + +typedef NS_ENUM(NSInteger, FIRAValueType) { + kFIRAValueTypeDouble = 0, + kFIRAValueTypeInteger, + kFIRAValueTypeString, +}; + +@interface FIRAValue : NSObject + +/// The type of the value. +@property(nonatomic, readonly) FIRAValueType valueType; + +#pragma mark - Double type. + +/// Indicates whether the FIRAValue instance is a floating point. +@property(nonatomic, readonly) BOOL isDouble; + +/// Float value. Check valueType to see if this attribute has float value. +@property(nonatomic, readonly) double doubleValue; + +#pragma mark - Integer type. + +/// Indicates whether the FIRAValue instance is an integer. +@property(nonatomic, readonly) BOOL isInt64; + +/// Int64 value. Check valueType to see if this attribute has int64 value. +@property(nonatomic, readonly) int64_t int64Value; + +#pragma mark - String type. + +/// Indicates whether the FIRAValue instance is a string. +@property(nonatomic, readonly) BOOL isString; + +/// String value. Check valueType to see if this attribute has string value. +@property(nonatomic, readonly) NSString *stringValue; + +#pragma mark - Initializers. + +/// Creates a @c FIRAValue if |object| is of type NSString or NSNumber. Returns |object| if it's +/// already a FIRAValue. Returns nil otherwise. ++ (instancetype)valueFromObject:(id)object; + +/// Creates a @c FIRAValue with double value. +- (instancetype)initWithDouble:(double)value; + +/// Creates a @c FIRAValue with int64 value. +- (instancetype)initWithInt64:(int64_t)value; + +/// Creates a @c FIRAValue with string value. +- (instancetype)initWithString:(NSString *)stringValue; + +- (instancetype)init NS_UNAVAILABLE; + +@end diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c b/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c new file mode 100644 index 000000000000..4b547562b9aa --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c @@ -0,0 +1,208 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "FIRCLSAllocate.h" +#include "FIRCLSHost.h" +#include "FIRCLSUtility.h" + +#include +#include +#include +#include +#include +#include +#include + +void* FIRCLSAllocatorSafeAllocateFromRegion(FIRCLSAllocationRegion* region, size_t size); + +FIRCLSAllocatorRef FIRCLSAllocatorCreate(size_t writableSpace, size_t readableSpace) { + FIRCLSAllocatorRef allocator; + FIRCLSAllocationRegion writableRegion; + FIRCLSAllocationRegion readableRegion; + size_t allocationSize; + vm_size_t pageSize; + void* buffer; + + // | GUARD | WRITABLE_REGION | GUARD | READABLE_REGION | GUARD | + + pageSize = FIRCLSHostGetPageSize(); + + readableSpace += sizeof(FIRCLSAllocator); // add the space for our allocator itself + + // we can only protect at the page level, so we need all of our regions to be + // exact multples of pages. But, we don't need anything in the special-case of zero. + + writableRegion.size = 0; + if (writableSpace > 0) { + writableRegion.size = ((writableSpace / pageSize) + 1) * pageSize; + } + + readableRegion.size = 0; + if (readableSpace > 0) { + readableRegion.size = ((readableSpace / pageSize) + 1) * pageSize; + } + + // Make one big, continous allocation, adding additional pages for our guards. Note + // that we cannot use malloc (or valloc) in this case, because we need to assert full + // ownership over these allocations. mmap is a much better choice. We also mark these + // pages as MAP_NOCACHE. + allocationSize = writableRegion.size + readableRegion.size + pageSize*3; + buffer = mmap(0, allocationSize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE | MAP_NOCACHE, -1, 0); + if (buffer == MAP_FAILED) { + FIRCLSSDKLogError("Mapping failed %s\n", strerror(errno)); + return NULL; + } + + // move our cursors into position + writableRegion.cursor = (void*)((uintptr_t)buffer + pageSize); + readableRegion.cursor = (void*)((uintptr_t)buffer + pageSize + writableRegion.size + pageSize); + writableRegion.start = writableRegion.cursor; + readableRegion.start = readableRegion.cursor; + + FIRCLSSDKLogInfo("Mapping: %p %p %p, total: %zu K\n", buffer, writableRegion.start, readableRegion.start, allocationSize/1024); + + // protect first guard page + if (mprotect(buffer, pageSize, PROT_NONE) != 0) { + FIRCLSSDKLogError("First guard protection failed %s\n", strerror(errno)); + return NULL; + } + + // middle guard + if (mprotect((void*)((uintptr_t)buffer + pageSize + writableRegion.size), pageSize, PROT_NONE) != 0) { + FIRCLSSDKLogError("Middle guard protection failed %s\n", strerror(errno)); + return NULL; + } + + // end guard + if (mprotect((void*)((uintptr_t)buffer + pageSize + writableRegion.size + pageSize + readableRegion.size), pageSize, PROT_NONE) != 0) { + FIRCLSSDKLogError("Last guard protection failed %s\n", strerror(errno)); + return NULL; + } + + // now, perform our first "allocation", which is to place our allocator into the read-only region + allocator = FIRCLSAllocatorSafeAllocateFromRegion(&readableRegion, sizeof(FIRCLSAllocator)); + + // set up its data structure + allocator->buffer = buffer; + allocator->protectionEnabled = false; + allocator->readableRegion = readableRegion; + allocator->writeableRegion = writableRegion; + + FIRCLSSDKLogDebug("Allocator successfully created %p", allocator); + + return allocator; +} + +void FIRCLSAllocatorDestroy(FIRCLSAllocatorRef allocator) { + if (allocator) { + } +} + +bool FIRCLSAllocatorProtect(FIRCLSAllocatorRef allocator) { + void* address; + + if (!FIRCLSIsValidPointer(allocator)) { + FIRCLSSDKLogError("Invalid allocator"); + return false; + } + + if (allocator->protectionEnabled) { + FIRCLSSDKLogWarn("Write protection already enabled"); + return true; + } + + // This has to be done first + allocator->protectionEnabled = true; + + vm_size_t pageSize = FIRCLSHostGetPageSize(); + + // readable region + address = (void*)((uintptr_t)allocator->buffer + pageSize + allocator->writeableRegion.size + pageSize); + + return mprotect(address, allocator->readableRegion.size, PROT_READ) == 0; +} + +bool FIRCLSAllocatorUnprotect(FIRCLSAllocatorRef allocator) { + size_t bufferSize; + + if (!allocator) { + return false; + } + + vm_size_t pageSize = FIRCLSHostGetPageSize(); + + bufferSize = (uintptr_t)allocator->buffer + pageSize + allocator->writeableRegion.size + pageSize + allocator->readableRegion.size + pageSize; + + allocator->protectionEnabled = !(mprotect(allocator->buffer, bufferSize, PROT_READ | PROT_WRITE) == 0); + + return allocator->protectionEnabled; +} + +void* FIRCLSAllocatorSafeAllocateFromRegion(FIRCLSAllocationRegion* region, size_t size) { + void* newCursor; + void* originalCursor; + + // Here's the idea + // - read the current cursor + // - compute what our new cursor should be + // - attempt a swap + // if the swap fails, some other thread has modified stuff, and we have to start again + // if the swap works, everything has been updated correctly and we are done + do { + originalCursor = region->cursor; + + // this shouldn't happen unless we make a mistake with our size pre-computations + if ((uintptr_t)originalCursor - (uintptr_t)region->start + size > region->size) { + FIRCLSSDKLog("Unable to allocate sufficient memory, falling back to malloc\n"); + return malloc(size); + } + + newCursor = (void*)((uintptr_t)originalCursor + size); + } while (!atomic_compare_exchange_strong(®ion->cursor, &originalCursor, newCursor)); + + return originalCursor; +} + +void* FIRCLSAllocatorSafeAllocate(FIRCLSAllocatorRef allocator, size_t size, FIRCLSAllocationType type) { + FIRCLSAllocationRegion* region; + + if (!allocator) { + // fall back to malloc in this case + FIRCLSSDKLog("Allocator invalid, falling back to malloc\n"); + return malloc(size); + } + + if (allocator->protectionEnabled) { + FIRCLSSDKLog("Allocator already protected, falling back to malloc\n"); + return malloc(size); + } + + switch (type) { + case CLS_READONLY: region = &allocator->readableRegion; break; + case CLS_READWRITE: region = &allocator->writeableRegion; break; + default: return NULL; + } + + return FIRCLSAllocatorSafeAllocateFromRegion(region, size); +} + +void FIRCLSAllocatorFree(FIRCLSAllocatorRef allocator, void* ptr) { + if (!allocator) { + free(ptr); + } + + // how do we do deallocations? +} diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h b/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h new file mode 100644 index 000000000000..66fcda43a3e2 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h @@ -0,0 +1,54 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSFeatures.h" + +#pragma once + +#include +#include + +typedef enum { CLS_READONLY = 0, CLS_READWRITE = 1 } FIRCLSAllocationType; + +typedef struct { + size_t size; + void* start; + _Atomic(void*) volatile cursor; +} FIRCLSAllocationRegion; + +typedef struct { + void* buffer; + bool protectionEnabled; + FIRCLSAllocationRegion writeableRegion; + FIRCLSAllocationRegion readableRegion; +} FIRCLSAllocator; +typedef FIRCLSAllocator* FIRCLSAllocatorRef; + +FIRCLSAllocatorRef FIRCLSAllocatorCreate(size_t writableSpace, size_t readableSpace); +void FIRCLSAllocatorDestroy(FIRCLSAllocatorRef allocator); + +bool FIRCLSAllocatorProtect(FIRCLSAllocatorRef allocator); +bool FIRCLSAllocatorUnprotect(FIRCLSAllocatorRef allocator); + +void* FIRCLSAllocatorSafeAllocate(FIRCLSAllocatorRef allocator, + size_t size, + FIRCLSAllocationType type); +const char* FIRCLSAllocatorSafeStrdup(FIRCLSAllocatorRef allocator, const char* string); +void FIRCLSAllocatorFree(FIRCLSAllocatorRef allocator, void* ptr); + +#if CLS_MEMORY_PROTECTION_ENABLED +#define FIRCLSFree(x) FIRCLSAllocatorFree(_clsContext.allocator, (void*)(x)); +#else +#define FIRCLSFree(x) free((void*)(x)) +#endif diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h b/Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h new file mode 100644 index 000000000000..27def6ea7b48 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h @@ -0,0 +1,81 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "TargetConditionals.h" + +// macro trickiness +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#define CONCAT_EXPANDED(a, b) a##b +#define CONCAT(a, b) CONCAT_EXPANDED(a, b) + +// These macros generate a function to force a symbol for the containing .o, to work around an issue +// where strip will not strip debug information without a symbol to strip. +#define DUMMY_FUNCTION_NAME(x) CONCAT(strip_this_, x) +#define INJECT_STRIP_SYMBOL(x) \ + void DUMMY_FUNCTION_NAME(x)(void) { \ + } + +// These make some target os types available to previous versions of xcode that do not yet have them +// in their SDKs +#ifndef TARGET_OS_IOS +#define TARGET_OS_IOS TARGET_OS_IPHONE +#endif + +#ifndef TARGET_OS_WATCH +#define TARGET_OS_WATCH 0 +#endif + +#ifndef TARGET_OS_TV +#define TARGET_OS_TV 0 +#endif + +// These help compile based on availability of technologies/frameworks. +#define CLS_TARGET_OS_OSX (TARGET_OS_MAC && !TARGET_OS_IPHONE) +#define CLS_TARGET_OS_HAS_UIKIT (TARGET_OS_IOS || TARGET_OS_TV) + +#define CLS_SDK_DISPLAY_VERSION STR(DISPLAY_VERSION) + +#define CLS_SDK_GENERATOR_NAME (STR(CLS_SDK_NAME) "/" CLS_SDK_DISPLAY_VERSION) + +// arch definitions +#if defined(__arm__) || defined(__arm64__) || defined(__arm64e__) +#include +#endif + +#if defined(__arm__) +#define CLS_CPU_ARM 1 +#endif +#if defined(__arm64__) || defined(__arm64e__) +#define CLS_CPU_ARM64 1 +#endif +#if defined(__ARM_ARCH_7S__) +#define CLS_CPU_ARMV7S 1 +#endif +#if defined(_ARM_ARCH_7) +#define CLS_CPU_ARMV7 1 +#endif +#if defined(_ARM_ARCH_6) +#define CLS_CPU_ARMV6 1 +#endif +#if defined(__i386__) +#define CLS_CPU_I386 1 +#endif +#if defined(__x86_64__) +#define CLS_CPU_X86_64 1 +#endif +#define CLS_CPU_X86 (CLS_CPU_I386 || CLS_CPU_X86_64) +#define CLS_CPU_64BIT (CLS_CPU_X86_64 || CLS_CPU_ARM64) diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h b/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h new file mode 100644 index 000000000000..098833f616c3 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h @@ -0,0 +1,32 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSSettings; +@protocol FIRAnalyticsInterop; +@protocol FIRAnalyticsInteropListener; + +@interface FIRCLSFCRAnalytics : NSObject + +/** Logs a Crashlytics crash session in Firebase Analytics. + * @param crashTimeStamp The time stamp of the crash to be logged. + */ ++ (void)logCrashWithTimeStamp:(NSTimeInterval)crashTimeStamp + toAnalytics:(id)analytics; + ++ (void)registerEventListener:(id)eventListener + toAnalytics:(id)analytics; + +@end diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m b/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m new file mode 100644 index 000000000000..6901290c859e --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m @@ -0,0 +1,90 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSFCRAnalytics.h" + +#import "FIRCLSInternalLogging.h" +#import "FIRCLSSettings.h" + +#import + +// Origin for events and user properties generated by Crashlytics. +static NSString *const kFIREventOriginCrash = @"clx"; + +// Origin for events and user properties generated by Crash Reporting. +// We're using this for now because it's whitelisted, and "clx" is not. +// TODO(b/144163610) add a separate parameter for Crashlytics +static NSString *const kFIREventListenerOriginCrash = @"crash"; + +// App exception event name. +static NSString *const kFIREventAppException = @"_ae"; + +// Timestamp key for the event payload. +static NSString *const kFIRParameterTimestamp = @"timestamp"; + +// Fatal key for the event payload. +static NSString *const kFIRParameterFatal = @"fatal"; + +// Realtime flag +// TODO(b/144114243) We had to remove this because it's blacklisted. +// Previously, the value was set as: +// static NSString *const kFIRParameterRealtime = @"_r"; +// and used in buildLogParamsFromCrash as: +// kFIRParameterRealtime : @(INT64_C(1)), + +FOUNDATION_STATIC_INLINE NSNumber *timeIntervalInMillis(NSTimeInterval timeInterval) { + return @(llrint(timeInterval * 1000.0)); +} + +@implementation FIRCLSFCRAnalytics + ++ (void)logCrashWithTimeStamp:(NSTimeInterval)crashTimeStamp + toAnalytics:(id)analytics { + if (analytics == nil) { + return; + } + + FIRCLSDeveloperLog(@"Crashlytics:Crash:Reports:Event", "Sending event."); + NSDictionary *params = [self buildLogParamsFromCrash:crashTimeStamp]; + [analytics logEventWithOrigin:kFIREventOriginCrash name:kFIREventAppException parameters:params]; +} + ++ (void)registerEventListener:(id)eventListener + toAnalytics:(id)analytics { + if (analytics == nil) { + return; + } + + [analytics registerAnalyticsListener:eventListener withOrigin:kFIREventListenerOriginCrash]; + + FIRCLSDeveloperLog(@"Crashlytics:Crash:Reports:Event", + "Registered Firebase Analytics event listener"); +} + +/** + * Builds a dictionary of params to be sent to Analytics using the crash object. + * + * @param crashTimeStamp The time stamp of the crash to be logged. + * + * @return An NSDictionary containing the time the crash occured and the fatal + * flag to be fed into Firebase Analytics. + */ ++ (NSDictionary *)buildLogParamsFromCrash:(NSTimeInterval)crashTimeStamp { + return @{ + kFIRParameterTimestamp : timeIntervalInMillis(crashTimeStamp), + kFIRParameterFatal : @(INT64_C(1)) + }; +} + +@end diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h b/Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h new file mode 100644 index 000000000000..4810a5d9b16f --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h @@ -0,0 +1,31 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSDefines.h" + +#define CLS_MEMORY_PROTECTION_ENABLED 1 +#define CLS_COMPACT_UNWINDED_ENABLED 1 +#define CLS_DWARF_UNWINDING_ENABLED 1 + +#define CLS_USE_SIGALTSTACK (!TARGET_OS_WATCH && !TARGET_OS_TV) +#define CLS_CAN_SUSPEND_THREADS !TARGET_OS_WATCH +#define CLS_MACH_EXCEPTION_SUPPORTED (!TARGET_OS_WATCH && !TARGET_OS_TV) + +#define CLS_COMPACT_UNWINDING_SUPPORTED \ + ((CLS_CPU_I386 || CLS_CPU_X86_64 || CLS_CPU_ARM64) && CLS_COMPACT_UNWINDED_ENABLED) + +#define CLS_DWARF_UNWINDING_SUPPORTED \ + (CLS_COMPACT_UNWINDING_SUPPORTED && CLS_DWARF_UNWINDING_ENABLED) diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSFile.h b/Crashlytics/Crashlytics/Helpers/FIRCLSFile.h new file mode 100644 index 000000000000..ad2e54dd9c5a --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSFile.h @@ -0,0 +1,104 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include + +#if defined(__OBJC__) +#import +#endif + +__BEGIN_DECLS + +typedef struct { + int fd; + int collectionDepth; + bool needComma; + + bool bufferWrites; + char* writeBuffer; + size_t writeBufferLength; + + off_t writtenLength; +} FIRCLSFile; +typedef FIRCLSFile* FIRCLSFileRef; + +#define CLS_FILE_MAX_STRING_LENGTH (10240) +#define CLS_FILE_HEX_BUFFER \ + (32) // must be at least 2, and should be even (to account for 2 chars per hex value) +#define CLS_FILE_MAX_WRITE_ATTEMPTS (50) + +extern const size_t FIRCLSWriteBufferLength; + +// make sure to stop work if either FIRCLSFileInit... method returns false, because the FIRCLSFile +// struct will contain garbage data! +bool FIRCLSFileInitWithPath(FIRCLSFile* file, const char* path, bool bufferWrites); +bool FIRCLSFileInitWithPathMode(FIRCLSFile* file, + const char* path, + bool appendMode, + bool bufferWrites); + +void FIRCLSFileFlushWriteBuffer(FIRCLSFile* file); +bool FIRCLSFileClose(FIRCLSFile* file); +bool FIRCLSFileCloseWithOffset(FIRCLSFile* file, off_t* finalSize); +bool FIRCLSFileIsOpen(FIRCLSFile* file); + +bool FIRCLSFileLoopWithWriteBlock(const void* buffer, + size_t length, + ssize_t (^writeBlock)(const void* partialBuffer, + size_t partialLength)); +bool FIRCLSFileWriteWithRetries(int fd, const void* buffer, size_t length); + +// writing +void FIRCLSFileWriteSectionStart(FIRCLSFile* file, const char* name); +void FIRCLSFileWriteSectionEnd(FIRCLSFile* file); + +void FIRCLSFileWriteHashStart(FIRCLSFile* file); +void FIRCLSFileWriteHashEnd(FIRCLSFile* file); +void FIRCLSFileWriteHashKey(FIRCLSFile* file, const char* key); +void FIRCLSFileWriteHashEntryUint64(FIRCLSFile* file, const char* key, uint64_t value); +void FIRCLSFileWriteHashEntryInt64(FIRCLSFile* file, const char* key, int64_t value); +void FIRCLSFileWriteHashEntryString(FIRCLSFile* file, const char* key, const char* value); +#if defined(__OBJC__) +void FIRCLSFileWriteHashEntryNSString(FIRCLSFile* file, const char* key, NSString* string); +void FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty(FIRCLSFile* file, + const char* key, + NSString* string); +#endif +void FIRCLSFileWriteHashEntryHexEncodedString(FIRCLSFile* file, const char* key, const char* value); +void FIRCLSFileWriteHashEntryBoolean(FIRCLSFile* file, const char* key, bool value); + +void FIRCLSFileWriteArrayStart(FIRCLSFile* file); +void FIRCLSFileWriteArrayEnd(FIRCLSFile* file); +void FIRCLSFileWriteArrayEntryUint64(FIRCLSFile* file, uint64_t value); +void FIRCLSFileWriteArrayEntryString(FIRCLSFile* file, const char* value); +void FIRCLSFileWriteArrayEntryHexEncodedString(FIRCLSFile* file, const char* value); + +void FIRCLSFileFDWriteUInt64(int fd, uint64_t number, bool hex); +void FIRCLSFileFDWriteInt64(int fd, int64_t number); +void FIRCLSFileWriteUInt64(FIRCLSFile* file, uint64_t number, bool hex); +void FIRCLSFileWriteInt64(FIRCLSFile* file, int64_t number); + +#if defined(__OBJC__) && TARGET_OS_MAC +NSArray* FIRCLSFileReadSections(const char* path, + bool deleteOnFailure, + NSObject* (^transformer)(id obj)); +NSString* FIRCLSFileHexEncodeString(const char* string); +NSString* FIRCLSFileHexDecodeString(const char* string); +#endif + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSFile.m b/Crashlytics/Crashlytics/Helpers/FIRCLSFile.m new file mode 100644 index 000000000000..393fc58530e1 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSFile.m @@ -0,0 +1,692 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSFile.h" + +#include "FIRCLSByteUtility.h" +#include "FIRCLSUtility.h" + +#if TARGET_OS_MAC +#include +#endif + +#include + +#include +#include + +#include + +// uint64_t should only have max 19 chars in base 10, and less in base 16 +static const size_t FIRCLSUInt64StringBufferLength = 21; +static const size_t FIRCLSStringBufferLength = 16; +const size_t FIRCLSWriteBufferLength = 1000; + +static bool FIRCLSFileInit(FIRCLSFile* file, int fdm, bool appendMode, bool bufferWrites); + +static void FIRCLSFileWriteToFileDescriptorOrBuffer(FIRCLSFile* file, + const char* string, + size_t length); +static void FIRCLSFileWriteToBuffer(FIRCLSFile* file, const char* string, size_t length); +static void FIRCLSFileWriteToFileDescriptor(FIRCLSFile* file, const char* string, size_t length); + +short FIRCLSFilePrepareUInt64(char* buffer, uint64_t number, bool hex); + +static void FIRCLSFileWriteString(FIRCLSFile* file, const char* string); +static void FIRCLSFileWriteHexEncodedString(FIRCLSFile* file, const char* string); +static void FIRCLSFileWriteBool(FIRCLSFile* file, bool value); + +static void FIRCLSFileWriteCollectionStart(FIRCLSFile* file, const char openingChar); +static void FIRCLSFileWriteCollectionEnd(FIRCLSFile* file, const char closingChar); +static void FIRCLSFileWriteColletionEntryProlog(FIRCLSFile* file); +static void FIRCLSFileWriteColletionEntryEpilog(FIRCLSFile* file); + +#define CLS_FILE_DEBUG_LOGGING 0 + +#pragma mark - File Structure +static bool FIRCLSFileInit(FIRCLSFile* file, int fd, bool appendMode, bool bufferWrites) { + if (!file) { + FIRCLSSDKLog("Error: file is null\n"); + return false; + } + + if (fd < 0) { + FIRCLSSDKLog("Error: file descriptor invalid\n"); + return false; + } + + memset(file, 0, sizeof(FIRCLSFile)); + + file->fd = fd; + + file->bufferWrites = bufferWrites; + if (bufferWrites) { + file->writeBuffer = malloc(FIRCLSWriteBufferLength * sizeof(char)); + file->writeBufferLength = 0; + } + + file->writtenLength = 0; + if (appendMode) { + struct stat fileStats; + fstat(fd, &fileStats); + off_t currentFileSize = fileStats.st_size; + if (currentFileSize > 0) { + file->writtenLength += currentFileSize; + } + } + + return true; +} + +bool FIRCLSFileInitWithPath(FIRCLSFile* file, const char* path, bool bufferWrites) { + return FIRCLSFileInitWithPathMode(file, path, true, bufferWrites); +} + +bool FIRCLSFileInitWithPathMode(FIRCLSFile* file, + const char* path, + bool appendMode, + bool bufferWrites) { + if (!file) { + FIRCLSSDKLog("Error: file is null\n"); + return false; + } + + int mask = O_WRONLY | O_CREAT; + + if (appendMode) { + mask |= O_APPEND; + } else { + mask |= O_TRUNC; + } + + // make sure to call FIRCLSFileInit no matter what + int fd = -1; + if (path) { +#if TARGET_OS_IPHONE + /* + * data-protected non-portable open(2) : + * int open_dprotected_np(user_addr_t path, int flags, int class, int dpflags, int mode) + */ + fd = open_dprotected_np(path, mask, 4, 0, 0644); +#else + fd = open(path, mask, 0644); +#endif + + if (fd < 0) { + FIRCLSSDKLog("Error: Unable to open file %s\n", strerror(errno)); + } + } + + return FIRCLSFileInit(file, fd, appendMode, bufferWrites); +} + +bool FIRCLSFileClose(FIRCLSFile* file) { + return FIRCLSFileCloseWithOffset(file, NULL); +} + +bool FIRCLSFileCloseWithOffset(FIRCLSFile* file, off_t* finalSize) { + if (!FIRCLSIsValidPointer(file)) { + return false; + } + + if (file->bufferWrites && FIRCLSIsValidPointer(file->writeBuffer)) { + if (file->writeBufferLength > 0) { + FIRCLSFileFlushWriteBuffer(file); + } + free(file->writeBuffer); + } + + if (FIRCLSIsValidPointer(finalSize)) { + *finalSize = file->writtenLength; + } + + if (close(file->fd) != 0) { + FIRCLSSDKLog("Error: Unable to close file %s\n", strerror(errno)); + return false; + } + + memset(file, 0, sizeof(FIRCLSFile)); + file->fd = -1; + + return true; +} + +bool FIRCLSFileIsOpen(FIRCLSFile* file) { + if (!FIRCLSIsValidPointer(file)) { + return false; + } + + return file->fd > -1; +} + +#pragma mark - Core Writing API +void FIRCLSFileFlushWriteBuffer(FIRCLSFile* file) { + if (!FIRCLSIsValidPointer(file)) { + return; + } + + if (!file->bufferWrites) { + return; + } + + FIRCLSFileWriteToFileDescriptor(file, file->writeBuffer, file->writeBufferLength); + file->writeBufferLength = 0; +} + +static void FIRCLSFileWriteToFileDescriptorOrBuffer(FIRCLSFile* file, + const char* string, + size_t length) { + if (file->bufferWrites) { + if (file->writeBufferLength + length > FIRCLSWriteBufferLength - 1) { + // fill remaining space in buffer + size_t remainingSpace = FIRCLSWriteBufferLength - file->writeBufferLength - 1; + FIRCLSFileWriteToBuffer(file, string, remainingSpace); + FIRCLSFileFlushWriteBuffer(file); + + // write remainder of string to newly-emptied buffer + size_t remainingLength = length - remainingSpace; + FIRCLSFileWriteToFileDescriptorOrBuffer(file, string + remainingSpace, remainingLength); + } else { + FIRCLSFileWriteToBuffer(file, string, length); + } + } else { + FIRCLSFileWriteToFileDescriptor(file, string, length); + } +} + +static void FIRCLSFileWriteToFileDescriptor(FIRCLSFile* file, const char* string, size_t length) { + if (!FIRCLSFileWriteWithRetries(file->fd, string, length)) { + return; + } + + file->writtenLength += length; +} + +// Beware calling this method directly: it will truncate the input string if it's longer +// than the remaining space in the buffer. It's safer to call through +// FIRCLSFileWriteToFileDescriptorOrBuffer. +static void FIRCLSFileWriteToBuffer(FIRCLSFile* file, const char* string, size_t length) { + size_t writeLength = length; + if (file->writeBufferLength + writeLength > FIRCLSWriteBufferLength - 1) { + writeLength = FIRCLSWriteBufferLength - file->writeBufferLength - 1; + } + strncpy(file->writeBuffer + file->writeBufferLength, string, writeLength); + file->writeBufferLength += writeLength; + file->writeBuffer[file->writeBufferLength] = '\0'; +} + +bool FIRCLSFileLoopWithWriteBlock(const void* buffer, + size_t length, + ssize_t (^writeBlock)(const void* buf, size_t len)) { + for (size_t count = 0; length > 0 && count < CLS_FILE_MAX_WRITE_ATTEMPTS; ++count) { + // try to write all that is left + ssize_t ret = writeBlock(buffer, length); + if (ret >= 0 && ret == length) { + return true; + } + + // Write was unsuccessful (out of space, etc) + if (ret < 0) { + return false; + } + + // We wrote more bytes than we expected, abort + if (ret > length) { + return false; + } + + // wrote a portion of the data, adjust and keep trying + if (ret > 0) { + length -= ret; + buffer += ret; + continue; + } + + // return value is <= 0, which is an error + break; + } + + return false; +} + +bool FIRCLSFileWriteWithRetries(int fd, const void* buffer, size_t length) { + return FIRCLSFileLoopWithWriteBlock(buffer, length, + ^ssize_t(const void* partialBuffer, size_t partialLength) { + return write(fd, partialBuffer, partialLength); + }); +} + +#pragma mark - Strings + +static void FIRCLSFileWriteUnbufferedStringWithSuffix(FIRCLSFile* file, + const char* string, + size_t length, + char suffix) { + char suffixBuffer[2]; + + // collaspe the quote + suffix into one single write call, for a small performance win + suffixBuffer[0] = '"'; + suffixBuffer[1] = suffix; + + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\"", 1); + FIRCLSFileWriteToFileDescriptorOrBuffer(file, string, length); + FIRCLSFileWriteToFileDescriptorOrBuffer(file, suffixBuffer, suffix == 0 ? 1 : 2); +} + +static void FIRCLSFileWriteStringWithSuffix(FIRCLSFile* file, + const char* string, + size_t length, + char suffix) { + // 2 for quotes, 1 for suffix (if present) and 1 more for null character + const size_t maxStringSize = FIRCLSStringBufferLength - (suffix == 0 ? 3 : 4); + + if (length >= maxStringSize) { + FIRCLSFileWriteUnbufferedStringWithSuffix(file, string, length, suffix); + return; + } + + // we are trying to achieve this in one write call + // <"><"> + + char buffer[FIRCLSStringBufferLength]; + + buffer[0] = '"'; + + strncpy(buffer + 1, string, length); + + buffer[length + 1] = '"'; + length += 2; + + if (suffix) { + buffer[length] = suffix; + length += 1; + } + + // Always add the terminator. strncpy above would copy the terminator, if we supplied length + 1, + // but since we do this suffix adjustment here, it's easier to just fix it up in both cases. + buffer[length + 1] = 0; + + FIRCLSFileWriteToFileDescriptorOrBuffer(file, buffer, length); +} + +void FIRCLSFileWriteString(FIRCLSFile* file, const char* string) { + if (!string) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "null", 4); + return; + } + + FIRCLSFileWriteStringWithSuffix(file, string, strlen(string), 0); +} + +void FIRCLSFileWriteHexEncodedString(FIRCLSFile* file, const char* string) { + if (!file) { + return; + } + + if (!string) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "null", 4); + return; + } + + char buffer[CLS_FILE_HEX_BUFFER]; + + memset(buffer, 0, sizeof(buffer)); + + size_t length = strlen(string); + + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\"", 1); + + int bufferIndex = 0; + for (int i = 0; i < length; ++i) { + FIRCLSHexFromByte(string[i], &buffer[bufferIndex]); + + bufferIndex += 2; // 1 char => 2 hex values at a time + + // we can continue only if we have enough space for two more hex + // characters *and* a terminator. So, we need three total chars + // of space + if (bufferIndex >= CLS_FILE_HEX_BUFFER) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, buffer, CLS_FILE_HEX_BUFFER); + bufferIndex = 0; + } + } + + // Copy the remainder, which could even be the entire string, if it + // fit into the buffer completely. Be careful with bounds checking here. + // The string needs to be non-empty, and we have to have copied at least + // one pair of hex characters in. + if (bufferIndex > 0 && length > 0) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, buffer, bufferIndex); + } + + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\"", 1); +} + +#pragma mark - Integers +void FIRCLSFileWriteUInt64(FIRCLSFile* file, uint64_t number, bool hex) { + char buffer[FIRCLSUInt64StringBufferLength]; + short i = FIRCLSFilePrepareUInt64(buffer, number, hex); + char* beginning = &buffer[i]; // Write from a pointer to the begining of the string. + FIRCLSFileWriteToFileDescriptorOrBuffer(file, beginning, strlen(beginning)); +} + +void FIRCLSFileFDWriteUInt64(int fd, uint64_t number, bool hex) { + char buffer[FIRCLSUInt64StringBufferLength]; + short i = FIRCLSFilePrepareUInt64(buffer, number, hex); + char* beginning = &buffer[i]; // Write from a pointer to the begining of the string. + FIRCLSFileWriteWithRetries(fd, beginning, strlen(beginning)); +} + +void FIRCLSFileWriteInt64(FIRCLSFile* file, int64_t number) { + if (number < 0) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "-", 1); + number *= -1; // make it positive + } + + FIRCLSFileWriteUInt64(file, number, false); +} + +void FIRCLSFileFDWriteInt64(int fd, int64_t number) { + if (number < 0) { + FIRCLSFileWriteWithRetries(fd, "-", 1); + number *= -1; // make it positive + } + + FIRCLSFileFDWriteUInt64(fd, number, false); +} + +short FIRCLSFilePrepareUInt64(char* buffer, uint64_t number, bool hex) { + uint32_t base = hex ? 16 : 10; + + // zero it out, which will add a terminator + memset(buffer, 0, FIRCLSUInt64StringBufferLength); + + // TODO: look at this closer + // I'm pretty sure there is a bug in this code that + // can result in numbers with leading zeros. Technically, + // those are not valid json. + + // Set current index. + short i = FIRCLSUInt64StringBufferLength - 1; + + // Loop through filling in the chars from the end. + do { + char value = number % base + '0'; + if (value > '9') { + value += 'a' - '9' - 1; + } + + buffer[--i] = value; + } while ((number /= base) > 0 && i > 0); + + // returns index pointing to the beginning of the string. + return i; +} + +void FIRCLSFileWriteBool(FIRCLSFile* file, bool value) { + if (value) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "true", 4); + } else { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "false", 5); + } +} + +void FIRCLSFileWriteSectionStart(FIRCLSFile* file, const char* name) { + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashKey(file, name); +} + +void FIRCLSFileWriteSectionEnd(FIRCLSFile* file) { + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\n", 1); +} + +void FIRCLSFileWriteCollectionStart(FIRCLSFile* file, const char openingChar) { + char string[2]; + + string[0] = ','; + string[1] = openingChar; + + if (file->needComma) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, string, 2); // write the seperator + opening char + } else { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, &string[1], 1); // write only the opening char + } + + file->collectionDepth++; + + file->needComma = false; +} + +void FIRCLSFileWriteCollectionEnd(FIRCLSFile* file, const char closingChar) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, &closingChar, 1); + + if (file->collectionDepth <= 0) { + // FIRCLSSafeLog("Collection depth invariant violated\n"); + return; + } + + file->collectionDepth--; + + file->needComma = file->collectionDepth > 0; +} + +void FIRCLSFileWriteColletionEntryProlog(FIRCLSFile* file) { + if (file->needComma) { + FIRCLSFileWriteToFileDescriptorOrBuffer(file, ",", 1); + } +} + +void FIRCLSFileWriteColletionEntryEpilog(FIRCLSFile* file) { + file->needComma = true; +} + +void FIRCLSFileWriteHashStart(FIRCLSFile* file) { + FIRCLSFileWriteCollectionStart(file, '{'); +} + +void FIRCLSFileWriteHashEnd(FIRCLSFile* file) { + FIRCLSFileWriteCollectionEnd(file, '}'); +} + +void FIRCLSFileWriteHashKey(FIRCLSFile* file, const char* key) { + FIRCLSFileWriteColletionEntryProlog(file); + + FIRCLSFileWriteStringWithSuffix(file, key, strlen(key), ':'); + + file->needComma = false; +} + +void FIRCLSFileWriteHashEntryUint64(FIRCLSFile* file, const char* key, uint64_t value) { + // no prolog needed because it comes from the key + + FIRCLSFileWriteHashKey(file, key); + FIRCLSFileWriteUInt64(file, value, false); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +void FIRCLSFileWriteHashEntryInt64(FIRCLSFile* file, const char* key, int64_t value) { + // prolog from key + FIRCLSFileWriteHashKey(file, key); + FIRCLSFileWriteInt64(file, value); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +void FIRCLSFileWriteHashEntryString(FIRCLSFile* file, const char* key, const char* value) { + FIRCLSFileWriteHashKey(file, key); + FIRCLSFileWriteString(file, value); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +void FIRCLSFileWriteHashEntryNSString(FIRCLSFile* file, const char* key, NSString* string) { + FIRCLSFileWriteHashEntryString(file, key, [string UTF8String]); +} + +void FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty(FIRCLSFile* file, + const char* key, + NSString* string) { + if ([string length] > 0) { + FIRCLSFileWriteHashEntryString(file, key, [string UTF8String]); + } +} + +void FIRCLSFileWriteHashEntryHexEncodedString(FIRCLSFile* file, + const char* key, + const char* value) { + FIRCLSFileWriteHashKey(file, key); + FIRCLSFileWriteHexEncodedString(file, value); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +void FIRCLSFileWriteHashEntryBoolean(FIRCLSFile* file, const char* key, bool value) { + FIRCLSFileWriteHashKey(file, key); + FIRCLSFileWriteBool(file, value); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +void FIRCLSFileWriteArrayStart(FIRCLSFile* file) { + FIRCLSFileWriteCollectionStart(file, '['); +} + +void FIRCLSFileWriteArrayEnd(FIRCLSFile* file) { + FIRCLSFileWriteCollectionEnd(file, ']'); +} + +void FIRCLSFileWriteArrayEntryUint64(FIRCLSFile* file, uint64_t value) { + FIRCLSFileWriteColletionEntryProlog(file); + + FIRCLSFileWriteUInt64(file, value, false); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +void FIRCLSFileWriteArrayEntryString(FIRCLSFile* file, const char* value) { + FIRCLSFileWriteColletionEntryProlog(file); + + FIRCLSFileWriteString(file, value); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +void FIRCLSFileWriteArrayEntryHexEncodedString(FIRCLSFile* file, const char* value) { + FIRCLSFileWriteColletionEntryProlog(file); + + FIRCLSFileWriteHexEncodedString(file, value); + + FIRCLSFileWriteColletionEntryEpilog(file); +} + +NSArray* FIRCLSFileReadSections(const char* path, + bool deleteOnFailure, + NSObject* (^transformer)(id obj)) { + if (!FIRCLSIsValidPointer(path)) { + FIRCLSSDKLogError("Error: input path is invalid\n"); + return nil; + } + + NSString* pathString = [NSString stringWithUTF8String:path]; + NSString* contents = [NSString stringWithContentsOfFile:pathString + encoding:NSUTF8StringEncoding + error:nil]; + NSArray* components = [contents componentsSeparatedByString:@"\n"]; + + if (!components) { + if (deleteOnFailure) { + unlink(path); + } + + FIRCLSSDKLog("Unable to read file %s\n", path); + return nil; + } + + NSMutableArray* array = [NSMutableArray array]; + + // loop through all the entires, and + for (NSString* component in components) { + NSData* data = [component dataUsingEncoding:NSUTF8StringEncoding]; + + id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + if (!obj) { + continue; + } + + if (transformer) { + obj = transformer(obj); + } + + if (!obj) { + continue; + } + + [array addObject:obj]; + } + + return array; +} + +NSString* FIRCLSFileHexEncodeString(const char* string) { + size_t length = strlen(string); + char* encodedBuffer = malloc(length * 2 + 1); + + if (!encodedBuffer) { + return nil; + } + + memset(encodedBuffer, 0, length * 2 + 1); + + int bufferIndex = 0; + for (int i = 0; i < length; ++i) { + FIRCLSHexFromByte(string[i], &encodedBuffer[bufferIndex]); + + bufferIndex += 2; // 1 char => 2 hex values at a time + } + + NSString* stringObject = [NSString stringWithUTF8String:encodedBuffer]; + + free(encodedBuffer); + + return stringObject; +} + +NSString* FIRCLSFileHexDecodeString(const char* string) { + size_t length = strlen(string); + char* decodedBuffer = malloc(length); // too long, but safe + + memset(decodedBuffer, 0, length); + + for (int i = 0; i < length / 2; ++i) { + size_t index = i * 2; + + uint8_t hiNybble = FIRCLSNybbleFromChar(string[index]); + uint8_t lowNybble = FIRCLSNybbleFromChar(string[index + 1]); + + if (hiNybble == FIRCLSInvalidCharNybble || lowNybble == FIRCLSInvalidCharNybble) { + // char is invalid, abort loop + break; + } + + decodedBuffer[i] = (hiNybble << 4) | lowNybble; + } + + NSString* strObject = [NSString stringWithUTF8String:decodedBuffer]; + + free(decodedBuffer); + + return strObject; +} diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c b/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c new file mode 100644 index 000000000000..ceea3c45bf4e --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c @@ -0,0 +1,101 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSInternalLogging.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSContext.h" +#include "FIRCLSUtility.h" + +void FIRCLSSDKFileLog(FIRCLSInternalLogLevel level, const char* format, ...) { + if (!_clsContext.readonly || !_clsContext.writable) { + return; + } + + const char *path = _clsContext.readonly->logPath; + if (!FIRCLSIsValidPointer(path)) { + return; + } + + if (_clsContext.writable->internalLogging.logLevel > level) { + return; + } + + if (_clsContext.writable->internalLogging.logFd == -1) { + _clsContext.writable->internalLogging.logFd = open(path, O_WRONLY|O_CREAT|O_APPEND, 0644); + } + + const int fd = _clsContext.writable->internalLogging.logFd; + if (fd < 0) { + return; + } + + va_list args; + va_start(args, format); + +#if DEBUG && 0 + // It's nice to use printf here, so all the formatting works. However, its possible to hit a deadlock if you + // call vfprintf in a crash handler. So, this code is handy to keep, just in case, if there's a really tough + // thing to debug. + FILE* file = fopen(path, "a+"); + vfprintf(file, format, args); + fclose(file); +#else + size_t formatLength = strlen(format); + for (size_t idx = 0; idx < formatLength; ++idx) { + if (format[idx] != '%') { + write(fd, &format[idx], 1); + continue; + } + + idx++; // move to the format char + switch (format[idx]) { + case 'd': { + int value = va_arg(args, int); + FIRCLSFileFDWriteInt64(fd, value); + } + break; + case 'u': { + uint32_t value = va_arg(args, uint32_t); + FIRCLSFileFDWriteUInt64(fd, value, false); + } + break; + case 'p': { + uintptr_t value = va_arg(args, uintptr_t); + write(fd, "0x", 2); + FIRCLSFileFDWriteUInt64(fd, value, true); + } + break; + case 's': { + const char* string = va_arg(args, const char*); + if (!string) { + string = "(null)"; + } + + write(fd, string, strlen(string)); + } + break; + case 'x': { + unsigned int value = va_arg(args, unsigned int); + FIRCLSFileFDWriteUInt64(fd, value, true); + } + break; + default: + // unhandled, back up to write out the percent + the format char + write(fd, &format[idx - 1], 2); + break; + } + } +#endif + va_end(args); +} diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h b/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h new file mode 100644 index 000000000000..4ff164453955 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h @@ -0,0 +1,57 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include + +#if __OBJC__ +#import "FIRCLSLogger.h" +#define FIRCLSDeveloperLog(label, __FORMAT__, ...) \ + FIRCLSDebugLog(@"[" label "] " __FORMAT__, ##__VA_ARGS__); +#endif + +typedef enum { + FIRCLSInternalLogLevelUnknown = 0, + FIRCLSInternalLogLevelDebug = 1, + FIRCLSInternalLogLevelInfo = 2, + FIRCLSInternalLogLevelWarn = 3, + FIRCLSInternalLogLevelError = 4 +} FIRCLSInternalLogLevel; + +typedef struct { + int logFd; + FIRCLSInternalLogLevel logLevel; +} FIRCLSInternalLoggingWritableContext; + +#define FIRCLSSDKLogDebug(__FORMAT__, ...) \ + FIRCLSSDKFileLog(FIRCLSInternalLogLevelDebug, "DEBUG [%s:%d] " __FORMAT__, __FUNCTION__, \ + __LINE__, ##__VA_ARGS__) +#define FIRCLSSDKLogInfo(__FORMAT__, ...) \ + FIRCLSSDKFileLog(FIRCLSInternalLogLevelInfo, "INFO [%s:%d] " __FORMAT__, __FUNCTION__, \ + __LINE__, ##__VA_ARGS__) +#define FIRCLSSDKLogWarn(__FORMAT__, ...) \ + FIRCLSSDKFileLog(FIRCLSInternalLogLevelWarn, "WARN [%s:%d] " __FORMAT__, __FUNCTION__, \ + __LINE__, ##__VA_ARGS__) +#define FIRCLSSDKLogError(__FORMAT__, ...) \ + FIRCLSSDKFileLog(FIRCLSInternalLogLevelError, "ERROR [%s:%d] " __FORMAT__, __FUNCTION__, \ + __LINE__, ##__VA_ARGS__) + +#define FIRCLSSDKLog FIRCLSSDKLogWarn + +__BEGIN_DECLS + +void FIRCLSSDKFileLog(FIRCLSInternalLogLevel level, const char* format, ...) __printflike(2, 3); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h b/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h new file mode 100644 index 000000000000..e03d99a9e89f --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h @@ -0,0 +1,24 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +__BEGIN_DECLS + +void FIRCLSDebugLog(NSString *message, ...); +void FIRCLSInfoLog(NSString *message, ...); +void FIRCLSWarningLog(NSString *message, ...); +void FIRCLSErrorLog(NSString *message, ...); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m b/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m new file mode 100644 index 000000000000..0bef6087a204 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m @@ -0,0 +1,52 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSLogger.h" + +#import + +FIRLoggerService kFIRLoggerCrashlytics = @"[Firebase/Crashlytics]"; + +NSString *const CrashlyticsMessageCode = @"I-CLS000000"; + +void FIRCLSDebugLog(NSString *message, ...) { + va_list args_ptr; + va_start(args_ptr, message); + FIRLogBasic(FIRLoggerLevelDebug, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, + args_ptr); + va_end(args_ptr); +} + +void FIRCLSInfoLog(NSString *message, ...) { + va_list args_ptr; + va_start(args_ptr, message); + FIRLogBasic(FIRLoggerLevelInfo, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, args_ptr); + va_end(args_ptr); +} + +void FIRCLSWarningLog(NSString *message, ...) { + va_list args_ptr; + va_start(args_ptr, message); + FIRLogBasic(FIRLoggerLevelWarning, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, + args_ptr); + va_end(args_ptr); +} + +void FIRCLSErrorLog(NSString *message, ...) { + va_list args_ptr; + va_start(args_ptr, message); + FIRLogBasic(FIRLoggerLevelError, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, + args_ptr); + va_end(args_ptr); +} diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c b/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c new file mode 100644 index 000000000000..77078ffa0efe --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c @@ -0,0 +1,47 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSProfiling.h" + +#include +#include + +FIRCLSProfileMark FIRCLSProfilingStart(void) { + return mach_absolute_time(); +} + +double FIRCLSProfileEnd(FIRCLSProfileMark mark) { + uint64_t duration = mach_absolute_time() - mark; + + mach_timebase_info_data_t info; + mach_timebase_info(&info); + + if (info.denom == 0) { + return 0.0; + } + + // Convert to nanoseconds + duration *= info.numer; + duration /= info.denom; + + return (double)duration / (double)NSEC_PER_MSEC; // return time in milliseconds +} + +void FIRCLSProfileBlock(const char* label, void (^block)(void)) { + FIRCLSProfileMark mark = FIRCLSProfilingStart(); + + block(); + + fprintf(stderr, "[Profile] %s: %f ms\n", label, FIRCLSProfileEnd(mark)); +} diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h b/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h new file mode 100644 index 000000000000..5cc312f4e953 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h @@ -0,0 +1,29 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include + +typedef uint64_t FIRCLSProfileMark; + +__BEGIN_DECLS + +// high-resolution timing, returning the results in seconds +FIRCLSProfileMark FIRCLSProfilingStart(void); +double FIRCLSProfileEnd(FIRCLSProfileMark mark); + +void FIRCLSProfileBlock(const char* label, void (^block)(void)); + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c b/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c new file mode 100644 index 000000000000..98ac5692534d --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c @@ -0,0 +1,145 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDefines.h" +#include "FIRCLSThreadState.h" +#include "FIRCLSUtility.h" + +#if defined (__arm__) || defined (__arm64__) +#include +#include +#endif + +#if CLS_CPU_X86_64 +#define GET_IP_REGISTER(r) (r->__ss.__rip) +#define GET_FP_REGISTER(r) (r->__ss.__rbp) +#define GET_SP_REGISTER(r) (r->__ss.__rsp) +#define GET_LR_REGISTER(r) 0 +#define SET_IP_REGISTER(r,v) (r->__ss.__rip = v) +#define SET_FP_REGISTER(r,v) (r->__ss.__rbp = v) +#define SET_SP_REGISTER(r,v) (r->__ss.__rsp = v) +#define SET_LR_REGISTER(r,v) +#elif CLS_CPU_I386 +#define GET_IP_REGISTER(r) (r->__ss.__eip) +#define GET_FP_REGISTER(r) (r->__ss.__ebp) +#define GET_SP_REGISTER(r) (r->__ss.__esp) +#define GET_LR_REGISTER(r) 0 +#define SET_IP_REGISTER(r,v) (r->__ss.__eip = v) +#define SET_FP_REGISTER(r,v) (r->__ss.__ebp = v) +#define SET_SP_REGISTER(r,v) (r->__ss.__esp = v) +#define SET_LR_REGISTER(r,v) +#elif CLS_CPU_ARM64 +// The arm_thread_state64_get_* macros translate down to the AUTIA and AUTIB instructions which authenticate the address, +// but don't clear the upper bits. +// From the docs: +// "If the authentication passes, the upper bits of the address are restored to enable subsequent use of the address. +// the authentication fails, the upper bits are corrupted and any subsequent use of the address results in a Translation fault." +// Since we only want the address (with the metadata in the upper bits masked out), we used the ptrauth_strip macro to clear the upper bits. +// +// We found later that ptrauth_strip doesn't seem to do anything. In many cases, the upper bits were already stripped, so +// for most non-system-library code, Crashlytics would still symbolicate. But for system libraries, the upper bits were being +// left in even when we called ptrauth_strip. Instead, we're bit masking and only allowing the latter 36 bits. +#define CLS_PTRAUTH_STRIP(pointer) ((uintptr_t)pointer & 0x0000000FFFFFFFFF) +#define GET_IP_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_pc(r->__ss))) +#define GET_FP_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_fp(r->__ss))) +#define GET_SP_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_sp(r->__ss))) +#define GET_LR_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_lr(r->__ss))) +#define SET_IP_REGISTER(r,v) arm_thread_state64_set_pc_fptr(r->__ss,(void*)v) +#define SET_FP_REGISTER(r,v) arm_thread_state64_set_fp(r->__ss,v) +#define SET_SP_REGISTER(r,v) arm_thread_state64_set_sp(r->__ss,v) +#define SET_LR_REGISTER(r,v) arm_thread_state64_set_lr_fptr(r->__ss,(void*)v) +#elif CLS_CPU_ARM +#define GET_IP_REGISTER(r) (r->__ss.__pc) +#define GET_FP_REGISTER(r) (r->__ss.__r[7]) +#define GET_SP_REGISTER(r) (r->__ss.__sp) +#define GET_LR_REGISTER(r) (r->__ss.__lr) +#define SET_IP_REGISTER(r,v) (r->__ss.__pc = v) +#define SET_FP_REGISTER(r,v) (r->__ss.__r[7] = v) +#define SET_SP_REGISTER(r,v) (r->__ss.__sp = v) +#define SET_LR_REGISTER(r,v) (r->__ss.__lr = v) +#else +#error "Architecture Unsupported" +#endif + +uintptr_t FIRCLSThreadContextGetPC(FIRCLSThreadContext* registers) { + if (!registers) { + return 0; + } + + return GET_IP_REGISTER(registers); +} + +uintptr_t FIRCLSThreadContextGetStackPointer(const FIRCLSThreadContext* registers) { + if (!registers) { + return 0; + } + + return GET_SP_REGISTER(registers); +} + +bool FIRCLSThreadContextSetStackPointer(FIRCLSThreadContext* registers, uintptr_t value) { + if (!FIRCLSIsValidPointer(registers)) { + return false; + } + + SET_SP_REGISTER(registers, value); + + return true; +} + +uintptr_t FIRCLSThreadContextGetLinkRegister(const FIRCLSThreadContext* registers) { + if (!FIRCLSIsValidPointer(registers)) { + return 0; + } + + return GET_LR_REGISTER(registers); +} + +bool FIRCLSThreadContextSetLinkRegister(FIRCLSThreadContext* registers, uintptr_t value) { + if (!FIRCLSIsValidPointer(registers)) { + return false; + } + + SET_LR_REGISTER(registers, value); + + return true; +} + +bool FIRCLSThreadContextSetPC(FIRCLSThreadContext* registers, uintptr_t value) { + if (!registers) { + return false; + } + + SET_IP_REGISTER(registers, value); + + return true; +} + +uintptr_t FIRCLSThreadContextGetFramePointer(const FIRCLSThreadContext *registers) { + if (!FIRCLSIsValidPointer(registers)) { + return 0; + } + + return GET_FP_REGISTER(registers); +} + +bool FIRCLSThreadContextSetFramePointer(FIRCLSThreadContext* registers, uintptr_t value) { + if (!FIRCLSIsValidPointer(registers)) { + return false; + } + + SET_FP_REGISTER(registers, value); + + return true; +} diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h b/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h new file mode 100644 index 000000000000..f281f665c992 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h @@ -0,0 +1,57 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include + +#if CLS_CPU_ARM +#define FIRCLSThreadStateCount ARM_THREAD_STATE_COUNT +#define FIRCLSThreadState ARM_THREAD_STATE +#elif CLS_CPU_ARM64 +#define FIRCLSThreadStateCount ARM_THREAD_STATE64_COUNT +#define FIRCLSThreadState ARM_THREAD_STATE64 +#elif CLS_CPU_I386 +#define FIRCLSThreadStateCount x86_THREAD_STATE32_COUNT +#define FIRCLSThreadState x86_THREAD_STATE32 +#elif CLS_CPU_X86_64 +#define FIRCLSThreadStateCount x86_THREAD_STATE64_COUNT +#define FIRCLSThreadState x86_THREAD_STATE64 +#endif + +// _STRUCT_MCONTEXT was fixed to point to the right thing on ARM in the iOS 7.1 SDK +typedef _STRUCT_MCONTEXT FIRCLSThreadContext; + +// I'm not entirely sure what happened when, but this appears to have disappeared from +// the SDKs... +#if !defined(_STRUCT_UCONTEXT64) +typedef _STRUCT_UCONTEXT _STRUCT_UCONTEXT64; +#endif + +#pragma mark Register Access + +uintptr_t FIRCLSThreadContextGetPC(FIRCLSThreadContext* registers); +uintptr_t FIRCLSThreadContextGetStackPointer(const FIRCLSThreadContext* registers); +uintptr_t FIRCLSThreadContextGetFramePointer(const FIRCLSThreadContext* registers); + +bool FIRCLSThreadContextSetPC(FIRCLSThreadContext* registers, uintptr_t value); +bool FIRCLSThreadContextSetStackPointer(FIRCLSThreadContext* registers, uintptr_t value); +bool FIRCLSThreadContextSetFramePointer(FIRCLSThreadContext* registers, uintptr_t value); + +// The link register only exists on ARM platforms. +#if CLS_CPU_ARM || CLS_CPU_ARM64 +uintptr_t FIRCLSThreadContextGetLinkRegister(const FIRCLSThreadContext* registers); +bool FIRCLSThreadContextSetLinkRegister(FIRCLSThreadContext* registers, uintptr_t value); +#endif diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h b/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h new file mode 100644 index 000000000000..5a50f0fd3102 --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h @@ -0,0 +1,54 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include +#include "FIRCLSGlobals.h" + +#define FIRCLSIsValidPointer(x) ((uintptr_t)x >= 4096) +#define FIRCLSInvalidCharNybble (255) + +__BEGIN_DECLS + +void FIRCLSLookupFunctionPointer(void* ptr, void (^block)(const char* name, const char* lib)); + +void FIRCLSHexFromByte(uint8_t c, char output[]); +uint8_t FIRCLSNybbleFromChar(char c); + +bool FIRCLSReadMemory(vm_address_t src, void* dest, size_t len); +bool FIRCLSReadString(vm_address_t src, char** dest, size_t maxlen); + +const char* FIRCLSDupString(const char* string); + +bool FIRCLSUnlinkIfExists(const char* path); + +#if __OBJC__ +void FIRCLSDispatchAfter(float timeInSeconds, dispatch_queue_t queue, dispatch_block_t block); + +NSString* FIRCLSNormalizeUUID(NSString* value); +NSString* FIRCLSGenerateNormalizedUUID(void); + +NSString* FIRCLSNSDataToNSString(NSData* data); + +void FIRCLSAddOperationAfter(float timeInSeconds, NSOperationQueue* queue, void (^block)(void)); +#endif + +#if DEBUG +void FIRCLSPrintAUUID(const uint8_t* value); +#endif + +__END_DECLS diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m b/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m new file mode 100644 index 000000000000..ce6620a0d47d --- /dev/null +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m @@ -0,0 +1,213 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSUtility.h" + +#include + +#include + +#include "FIRCLSFeatures.h" +#include "FIRCLSFile.h" +#include "FIRCLSGlobals.h" + +#import "FIRCLSByteUtility.h" +#import "FIRCLSUUID.h" + +#import + +void FIRCLSLookupFunctionPointer(void* ptr, void (^block)(const char* name, const char* lib)) { + Dl_info info; + + if (dladdr(ptr, &info) == 0) { + block(NULL, NULL); + return; + } + + const char* name = "unknown"; + const char* lib = "unknown"; + + if (info.dli_sname) { + name = info.dli_sname; + } + + if (info.dli_fname) { + lib = info.dli_fname; + } + + block(name, lib); +} + +uint8_t FIRCLSNybbleFromChar(char c) { + if (c >= '0' && c <= '9') { + return c - '0'; + } + + if (c >= 'a' && c <= 'f') { + return c - 'a' + 10; + } + + if (c >= 'A' && c <= 'F') { + return c - 'A' + 10; + } + + return FIRCLSInvalidCharNybble; +} + +bool FIRCLSReadMemory(vm_address_t src, void* dest, size_t len) { + if (!FIRCLSIsValidPointer(src)) { + return false; + } + + vm_size_t readSize = len; + + return vm_read_overwrite(mach_task_self(), src, len, (pointer_t)dest, &readSize) == KERN_SUCCESS; +} + +bool FIRCLSReadString(vm_address_t src, char** dest, size_t maxlen) { + char c; + vm_address_t address; + + if (!dest) { + return false; + } + + // Walk the entire string. Not certain this is perfect... + for (address = src; address < src + maxlen; ++address) { + if (!FIRCLSReadMemory(address, &c, 1)) { + return false; + } + + if (c == 0) { + break; + } + } + + *dest = (char*)src; + + return true; +} + +const char* FIRCLSDupString(const char* string) { +#if CLS_MEMORY_PROTECTION_ENABLED + char* buffer; + size_t length; + + if (!string) { + return NULL; + } + + length = strlen(string); + buffer = FIRCLSAllocatorSafeAllocate(_clsContext.allocator, length + 1, CLS_READONLY); + + memcpy(buffer, string, length); + + buffer[length] = 0; // null-terminate + + return buffer; +#else + return strdup(string); +#endif +} + +void FIRCLSDispatchAfter(float timeInSeconds, dispatch_queue_t queue, dispatch_block_t block) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeInSeconds * NSEC_PER_SEC)), queue, + block); +} + +bool FIRCLSUnlinkIfExists(const char* path) { + if (unlink(path) != 0) { + if (errno != ENOENT) { + return false; + } + } + + return true; +} + +/* +NSString* FIRCLSGenerateUUID(void) { + NSString* string; + + CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault); + string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); + CFRelease(uuid); + + return string; +} +*/ + +NSString* FIRCLSNormalizeUUID(NSString* value) { + return [[value stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString]; +} + +NSString* FIRCLSGenerateNormalizedUUID(void) { + return FIRCLSNormalizeUUID(FIRCLSGenerateUUID()); +} + +NSString* FIRCLSNSDataToNSString(NSData* data) { + NSString* string; + char* buffer; + size_t size; + NSUInteger length; + + // we need 2 hex char for every byte of data, plus one more spot for a + // null terminator + length = [data length]; + size = (length * 2) + 1; + buffer = malloc(sizeof(char) * size); + + FIRCLSSafeHexToString([data bytes], length, buffer); + + string = [NSString stringWithUTF8String:buffer]; + + free(buffer); + + return string; +} + +/* +NSString* FIRCLSHashBytes(const void* bytes, size_t length) { + uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; + CC_SHA1(bytes, (CC_LONG)length, digest); + + NSData* result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; + + return FIRCLSNSDataToNSString(result); +} + +NSString* FIRCLSHashNSData(NSData* data) { + return FIRCLSHashBytes([data bytes], [data length]); +} +*/ + +void FIRCLSAddOperationAfter(float timeInSeconds, NSOperationQueue* queue, void (^block)(void)) { + dispatch_queue_t afterQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + FIRCLSDispatchAfter(timeInSeconds, afterQueue, ^{ + [queue addOperationWithBlock:block]; + }); +} + +#if DEBUG +void FIRCLSPrintAUUID(const uint8_t* value) { + CFUUIDRef uuid = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, *(CFUUIDBytes*)value); + + NSString* string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); + + CFRelease(uuid); + + FIRCLSDebugLog(@"%@", [[string stringByReplacingOccurrencesOfString:@"-" + withString:@""] lowercaseString]); +} +#endif diff --git a/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h b/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h new file mode 100644 index 000000000000..41a489672f9a --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h @@ -0,0 +1,33 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * This class is a model to identify a single execution of the app + */ +@interface FIRCLSExecutionIdentifierModel : NSObject + +/** + * Returns the launch identifier. This is a unique id that will remain constant until this process + * is relaunched. This value is useful for correlating events across kits and/or across reports at + * the process-lifecycle level. + */ +@property(nonatomic, readonly) NSString *executionID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m b/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m new file mode 100644 index 000000000000..e312d46f8f7c --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m @@ -0,0 +1,33 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSExecutionIdentifierModel.h" + +#import "FIRCLSUUID.h" + +@implementation FIRCLSExecutionIdentifierModel + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _executionID = [[FIRCLSGenerateUUID() stringByReplacingOccurrencesOfString:@"-" + withString:@""] lowercaseString]; + + return self; +} + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSFileManager.h b/Crashlytics/Crashlytics/Models/FIRCLSFileManager.h new file mode 100644 index 000000000000..cb788f760279 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSFileManager.h @@ -0,0 +1,82 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSInternalReport; + +@interface FIRCLSFileManager : NSObject + +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +@property(nonatomic, readonly) NSFileManager *underlyingFileManager; + +/** + * Returns the folder containing the settings file + */ +@property(nonatomic, readonly) NSString *settingsDirectoryPath; + +/** + * Returns the path to the settings file + */ +@property(nonatomic, readonly) NSString *settingsFilePath; + +/** + * Path to the file that holds the ttl and keys that invalidate settings + */ +@property(nonatomic, readonly) NSString *settingsCacheKeyPath; + +@property(nonatomic, readonly) NSString *rootPath; +@property(nonatomic, readonly) NSString *structurePath; +@property(nonatomic, readonly) NSString *activePath; +@property(nonatomic, readonly) NSString *processingPath; +@property(nonatomic, readonly) NSString *pendingPath; +@property(nonatomic, readonly) NSString *preparedPath; +@property(nonatomic, readonly) NSArray *activePathContents; +@property(nonatomic, readonly) NSArray *preparedPathContents; +@property(nonatomic, readonly) NSArray *processingPathContents; + +- (BOOL)fileExistsAtPath:(NSString *)path; +- (BOOL)createFileAtPath:(NSString *)path + contents:(NSData *)data + attributes:(NSDictionary *)attr; +- (BOOL)createDirectoryAtPath:(NSString *)path; +- (BOOL)removeItemAtPath:(NSString *)path; +- (BOOL)removeContentsOfDirectoryAtPath:(NSString *)path; +- (BOOL)moveItemAtPath:(NSString *)path toDirectory:(NSString *)destDir; +- (void)enumerateFilesInDirectory:(NSString *)directory + usingBlock:(void (^)(NSString *filePath, NSString *extension))block; +- (BOOL)moveItemsFromDirectory:(NSString *)srcDir toDirectory:(NSString *)destDir; +- (NSNumber *)fileSizeAtPath:(NSString *)path; +- (NSArray *)contentsOfDirectory:(NSString *)path; + +// logic of managing files/directories +- (BOOL)createReportDirectories; +- (NSString *)setupNewPathForExecutionIdentifier:(NSString *)identifier; + +- (void)enumerateFilesInActiveDirectoryUsingBlock:(void (^)(NSString *path, + NSString *extension))block; +- (void)enumerateReportsInProcessingDirectoryUsingBlock:(void (^)(FIRCLSInternalReport *report, + NSString *path))block; +- (void)enumerateFilesInPreparedDirectoryUsingBlock:(void (^)(NSString *path, + NSString *extension))block; + +- (BOOL)moveProcessingContentsToPrepared; +- (BOOL)movePendingToProcessing; + +- (BOOL)removeContentsOfProcessingPath; +- (BOOL)removeContentsOfPendingPath; +- (BOOL)removeContentsOfAllPaths; + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSFileManager.m b/Crashlytics/Crashlytics/Models/FIRCLSFileManager.m new file mode 100644 index 000000000000..69fd8b0e7dea --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSFileManager.m @@ -0,0 +1,331 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSFileManager.h" + +#import "FIRCLSApplication.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSLogger.h" + +NSString *const FIRCLSCacheDirectoryName = @"com.crashlytics.data"; +NSString *const FIRCLSCacheVersion = @"v4"; + +@interface FIRCLSFileManager () { + NSString *_rootPath; +} + +@end + +@implementation FIRCLSFileManager + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _underlyingFileManager = [NSFileManager defaultManager]; + + NSString *path = + [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; + path = [path stringByAppendingPathComponent:FIRCLSCacheDirectoryName]; + path = [path stringByAppendingPathComponent:[self pathNamespace]]; + _rootPath = [path copy]; + + return self; +} + +#pragma mark - Core API + +- (BOOL)fileExistsAtPath:(NSString *)path { + return [_underlyingFileManager fileExistsAtPath:path]; +} + +- (BOOL)createFileAtPath:(NSString *)path + contents:(nullable NSData *)data + attributes:(nullable NSDictionary *)attr { + return [_underlyingFileManager createFileAtPath:path contents:data attributes:attr]; +} + +- (BOOL)createDirectoryAtPath:(NSString *)path { + NSDictionary *attributes; + NSError *error; + + attributes = @{NSFilePosixPermissions : [NSNumber numberWithShort:0755]}; + error = nil; + + if (![[self underlyingFileManager] createDirectoryAtPath:path + withIntermediateDirectories:YES + attributes:attributes + error:&error]) { + FIRCLSErrorLog(@"Unable to create directory %@", error); + return NO; + } + + return YES; +} + +- (BOOL)removeItemAtPath:(NSString *)path { + NSError *error; + + error = nil; + if (![[self underlyingFileManager] removeItemAtPath:path error:&error] || !path) { + FIRCLSErrorLog(@"Failed to remove file %@: %@", path, error); + + return NO; + } + + return YES; +} + +- (BOOL)removeContentsOfDirectoryAtPath:(NSString *)path { + __block BOOL success = YES; + + // only return true if we were able to remove every item in the directory (or it was empty) + + [self enumerateFilesInDirectory:path + usingBlock:^(NSString *filePath, NSString *extension) { + success = [self removeItemAtPath:filePath] && success; + }]; + + return success; +} + +- (BOOL)moveItemAtPath:(NSString *)path toDirectory:(NSString *)destDir { + NSString *destPath; + NSError *error; + + destPath = [destDir stringByAppendingPathComponent:[path lastPathComponent]]; + error = nil; + + if (!path || !destPath) { + FIRCLSErrorLog(@"Failed to move file, inputs invalid"); + + return NO; + } + + if (![[self underlyingFileManager] moveItemAtPath:path toPath:destPath error:&error]) { + FIRCLSErrorLog(@"Failed to move file: %@", error); + + return NO; + } + + return YES; +} + +- (void)enumerateFilesInDirectory:(NSString *)directory + usingBlock:(void (^)(NSString *filePath, NSString *extension))block { + for (NSString *path in [[self underlyingFileManager] contentsOfDirectoryAtPath:directory + error:nil]) { + NSString *extension; + NSString *fullPath; + + // Skip files that start with a dot. This is important, because if you try to move a .DS_Store + // file, it will fail if the target directory also has a .DS_Store file in it. Plus, its + // wasteful, because we don't care about dot files. + if ([path hasPrefix:@"."]) { + continue; + } + + extension = [path pathExtension]; + fullPath = [directory stringByAppendingPathComponent:path]; + + block(fullPath, extension); + } +} + +- (BOOL)moveItemsFromDirectory:(NSString *)srcDir toDirectory:(NSString *)destDir { + __block BOOL success = YES; + + [self enumerateFilesInDirectory:srcDir + usingBlock:^(NSString *filePath, NSString *extension) { + success = success && [self moveItemAtPath:filePath toDirectory:destDir]; + }]; + + return success; +} + +- (NSNumber *)fileSizeAtPath:(NSString *)path { + NSError *error = nil; + NSDictionary *attrs = [[self underlyingFileManager] attributesOfItemAtPath:path error:&error]; + + if (!attrs) { + FIRCLSErrorLog(@"Unable to read file size: %@", error); + return nil; + } + + return [attrs objectForKey:NSFileSize]; +} + +- (NSArray *)contentsOfDirectory:(NSString *)path { + NSMutableArray *array = [NSMutableArray array]; + + [self enumerateFilesInDirectory:path + usingBlock:^(NSString *filePath, NSString *extension) { + [array addObject:filePath]; + }]; + + return array; +} + +#pragma - Properties +- (NSString *)pathNamespace { + return FIRCLSApplicationGetBundleIdentifier(); +} + +- (NSString *)versionedPath { + return [[self rootPath] stringByAppendingPathComponent:FIRCLSCacheVersion]; +} + +#pragma - Settings Paths + +// This path should be different than the structurePath because the +// settings download operations will delete the settings directory, +// which would delete crash reports if these were the same +- (NSString *)settingsDirectoryPath { + return [[self versionedPath] stringByAppendingPathComponent:@"settings"]; +} + +- (NSString *)settingsFilePath { + return [[self settingsDirectoryPath] stringByAppendingPathComponent:@"settings.json"]; +} + +- (NSString *)settingsCacheKeyPath { + return [[self settingsDirectoryPath] stringByAppendingPathComponent:@"cache-key.json"]; +} + +#pragma - Report Paths +- (NSString *)structurePath { + return [[self versionedPath] stringByAppendingPathComponent:@"reports"]; +} + +- (NSString *)activePath { + return [[self structurePath] stringByAppendingPathComponent:@"active"]; +} + +- (NSString *)pendingPath { + return [[self structurePath] stringByAppendingPathComponent:@"pending"]; +} + +- (NSString *)processingPath { + return [[self structurePath] stringByAppendingPathComponent:@"processing"]; +} + +- (NSString *)preparedPath { + return [[self structurePath] stringByAppendingPathComponent:@"prepared"]; +} + +- (NSArray *)activePathContents { + return [self contentsOfDirectory:[self activePath]]; +} + +- (NSArray *)preparedPathContents { + return [self contentsOfDirectory:[self preparedPath]]; +} + +- (NSArray *)processingPathContents { + return [self contentsOfDirectory:[self processingPath]]; +} + +#pragma mark - Logic +- (BOOL)createReportDirectories { + if (![self createDirectoryAtPath:[self activePath]]) { + return NO; + } + + if (![self createDirectoryAtPath:[self processingPath]]) { + return NO; + } + + if (![self createDirectoryAtPath:[self preparedPath]]) { + return NO; + } + + return YES; +} + +- (NSString *)setupNewPathForExecutionIdentifier:(NSString *)identifier { + NSString *path = [[self activePath] stringByAppendingPathComponent:identifier]; + + if (![self createDirectoryAtPath:path]) { + return nil; + } + + return path; +} + +- (void)enumerateReportsInProcessingDirectoryUsingBlock:(void (^)(FIRCLSInternalReport *report, + NSString *path))block { + [self enumerateFilesInDirectory:[self processingPath] + usingBlock:^(NSString *filePath, NSString *extension) { + FIRCLSInternalReport *report = + [FIRCLSInternalReport reportWithPath:filePath]; + + block(report, filePath); + }]; +} + +- (void)enumerateFilesInActiveDirectoryUsingBlock:(void (^)(NSString *path, + NSString *extension))block { + [self enumerateFilesInDirectory:[self activePath] usingBlock:block]; +} + +- (void)enumerateFilesInPreparedDirectoryUsingBlock:(void (^)(NSString *path, + NSString *extension))block { + [self enumerateFilesInDirectory:[self preparedPath] usingBlock:block]; +} + +- (BOOL)moveProcessingContentsToPrepared { + return [self moveItemsFromDirectory:[self processingPath] toDirectory:[self preparedPath]]; +} + +- (BOOL)movePendingToProcessing { + return [self moveItemsFromDirectory:[self pendingPath] toDirectory:[self processingPath]]; +} + +- (BOOL)removeContentsOfProcessingPath { + return [self removeContentsOfDirectoryAtPath:[self processingPath]]; +} + +- (BOOL)removeContentsOfPendingPath { + return [self removeContentsOfDirectoryAtPath:[self pendingPath]]; +} + +- (BOOL)removeContentsOfAllPaths { + BOOL success = YES; + + // We want to call all of these methods, even if some fail, and return + // NO if any fail. This turned out to be slightly tricky to do in more + // compact forms, so I did it the simple but verbose way. + + if (![self removeContentsOfProcessingPath]) { + success = NO; + } + + if (![self removeContentsOfPendingPath]) { + success = NO; + } + + if (![self removeContentsOfDirectoryAtPath:self.preparedPath]) { + success = NO; + } + + if (![self removeContentsOfDirectoryAtPath:self.activePath]) { + success = NO; + } + + return success; +} + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h b/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h new file mode 100644 index 000000000000..9cfd99900ead --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h @@ -0,0 +1,46 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRInstanceID; + +NS_ASSUME_NONNULL_BEGIN + +/** + * This class is a model for identifying an installation of an app + */ +@interface FIRCLSInstallIdentifierModel : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +- (instancetype)initWithInstanceID:(FIRInstanceID *)instanceID NS_DESIGNATED_INITIALIZER; + +/** + * Returns the backwards compatible Crashlytics Installation UUID + */ +@property(nonatomic, readonly) NSString *installID; + +/** + * To support end-users rotating Install IDs, this will check and rotate the Install ID, + * which is a costly operation performance-wise. To keep the startup time impact down, call this in + * a background thread. + * + * The block will be called on a background thread. + */ +- (void)regenerateInstallIDIfNeededWithBlock:(void (^)(BOOL didRotate))callback; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m b/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m new file mode 100644 index 000000000000..1eaf184c9c68 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m @@ -0,0 +1,160 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSInstallIdentifierModel.h" + +#import + +#import "FIRCLSByteUtility.h" +#import "FIRCLSLogger.h" +#import "FIRCLSUUID.h" +#import "FIRCLSUserDefaults.h" + +static NSString *const FIRCLSInstallationUUIDKey = @"com.crashlytics.iuuid"; +static NSString *const FIRCLSInstallationIIDHashKey = @"com.crashlytics.install.iid"; + +// Legacy key that is automatically removed +static NSString *const FIRCLSInstallationADIDKey = @"com.crashlytics.install.adid"; + +@interface FIRCLSInstallIdentifierModel () + +@property(nonatomic, copy) NSString *installID; + +@property(nonatomic, readonly) FIRInstanceID *instanceID; + +@end + +@implementation FIRCLSInstallIdentifierModel + +// This needs to be synthesized so we can set without using the setter in the constructor and +// overridden setters and getters +@synthesize installID = _installID; + +- (instancetype)initWithInstanceID:(FIRInstanceID *)instanceID { + self = [super init]; + if (!self) { + return nil; + } + + // capture the install ID information + _installID = [self readInstallationUUID].copy; + _instanceID = instanceID; + + if (!_installID) { + FIRCLSDebugLog(@"Generating Install ID"); + _installID = [self generateInstallationUUID].copy; + + FIRCLSUserDefaults *defaults = [FIRCLSUserDefaults standardUserDefaults]; + [defaults synchronize]; + } + + return self; +} + +- (NSString *)installID { + @synchronized(self) { + return _installID; + } +} + +- (void)setInstallID:(NSString *)installID { + @synchronized(self) { + _installID = installID; + } +} + +/** + * Reads installation UUID stored in persistent storage. + * If the installation UUID is stored in legacy key, migrates it over to the new key. + */ +- (NSString *)readInstallationUUID { + return [[FIRCLSUserDefaults standardUserDefaults] objectForKey:FIRCLSInstallationUUIDKey]; +} + +/** + * Generates a new UUID and saves it in persistent storage. + * Does not sychronize the user defaults (to allow optimized + * batching of user default synchronizing) + */ +- (NSString *)generateInstallationUUID { + NSString *UUID = FIRCLSGenerateUUID(); + FIRCLSUserDefaults *userDefaults = [FIRCLSUserDefaults standardUserDefaults]; + [userDefaults setObject:UUID forKey:FIRCLSInstallationUUIDKey]; + return UUID; +} + +#pragma mark Privacy Shield + +/** + * To support privacy shield we need to regenerate the install id when the IID changes. + * + * This is a blocking, slow call that must be called on a background thread. + */ +- (void)regenerateInstallIDIfNeededWithBlock:(void (^)(BOOL didRotate))callback { + // This callback is on the main thread + [self.instanceID getIDWithHandler:^(NSString *_Nullable currentIID, NSError *_Nullable error) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + BOOL didRotate = [self rotateCrashlyticsInstallUUIDWithIID:currentIID error:error]; + callback(didRotate); + }); + }]; +} + +- (BOOL)rotateCrashlyticsInstallUUIDWithIID:(NSString *_Nullable)currentIID + error:(NSError *_Nullable)error { + BOOL didRotate = NO; + + FIRCLSUserDefaults *defaults = [FIRCLSUserDefaults standardUserDefaults]; + + // Remove the legacy ID + NSString *adID = [defaults objectForKey:FIRCLSInstallationADIDKey]; + if (adID.length != 0) { + [defaults removeObjectForKey:FIRCLSInstallationADIDKey]; + [defaults synchronize]; + } + + if (error != nil) { + FIRCLSErrorLog(@"Failed to get Firebase Instance ID: %@", error); + return didRotate; + } + + if (currentIID.length == 0) { + FIRCLSErrorLog(@"Firebase Instance ID was empty when checked for changes"); + return didRotate; + } + + NSString *currentIIDHash = + FIRCLS256HashNSData([currentIID dataUsingEncoding:NSUTF8StringEncoding]); + NSString *lastIIDHash = [defaults objectForKey:FIRCLSInstallationIIDHashKey]; + + // If the IDs are the same, we never regenerate + if ([lastIIDHash isEqualToString:currentIIDHash]) { + return didRotate; + } + + // If we had an FIID saved, we know it's not an upgrade scenario, so we can regenerate + if (lastIIDHash.length != 0) { + FIRCLSDebugLog(@"Regenerating Install ID"); + self.installID = [self generateInstallationUUID].copy; + didRotate = YES; + } + + // Write the new FIID to UserDefaults + [defaults setObject:currentIIDHash forKey:FIRCLSInstallationIIDHashKey]; + [defaults synchronize]; + + return didRotate; +} + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h b/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h new file mode 100644 index 000000000000..bf9caa7c5eb3 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h @@ -0,0 +1,113 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#include "FIRCLSFeatures.h" + +extern NSString *const CLSReportBinaryImageFile; +extern NSString *const CLSReportExceptionFile; +extern NSString *const CLSReportCustomExceptionAFile; +extern NSString *const CLSReportCustomExceptionBFile; +extern NSString *const CLSReportSignalFile; +#if CLS_MACH_EXCEPTION_SUPPORTED +extern NSString *const CLSReportMachExceptionFile; +#endif +extern NSString *const CLSReportErrorAFile; +extern NSString *const CLSReportErrorBFile; +extern NSString *const CLSReportMetadataFile; +extern NSString *const CLSReportInternalIncrementalKVFile; +extern NSString *const CLSReportInternalCompactedKVFile; +extern NSString *const CLSReportUserIncrementalKVFile; +extern NSString *const CLSReportUserCompactedKVFile; + +@class FIRCLSFileManager; + +@interface FIRCLSInternalReport : NSObject + ++ (instancetype)reportWithPath:(NSString *)path; +- (instancetype)initWithPath:(NSString *)path + executionIdentifier:(NSString *)identifier NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithPath:(NSString *)path; +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@property(nonatomic, copy, readonly) NSString *directoryName; +@property(nonatomic, copy) NSString *path; +@property(nonatomic, assign, readonly) BOOL needsToBeSubmitted; + +// content paths +@property(nonatomic, copy, readonly) NSString *binaryImagePath; +@property(nonatomic, copy, readonly) NSString *metadataPath; + +- (void)enumerateSymbolicatableFilesInContent:(void (^)(NSString *path))block; + +- (NSString *)pathForContentFile:(NSString *)name; + +// Metadata Helpers + +/** + * Returns the org id for the report. + **/ +@property(nonatomic, copy, readonly) NSString *orgID; + +/** + * Returns the Install UUID for the report. + **/ +@property(nonatomic, copy, readonly) NSString *installID; + +/** + * Returns YES if report contains a signal, mach exception or unhandled exception record, NO + * otherwise. + **/ +@property(nonatomic, assign, readonly) BOOL isCrash; + +/** + * Returns the session identifier for the report. + **/ +@property(nonatomic, copy, readonly) NSString *identifier; + +/** + * Returns the custom key value data for the report. + **/ +@property(nonatomic, copy, readonly) NSDictionary *customKeys; + +/** + * Returns the CFBundleVersion of the application that generated the report. + **/ +@property(nonatomic, copy, readonly) NSString *bundleVersion; + +/** + * Returns the CFBundleShortVersionString of the application that generated the report. + **/ +@property(nonatomic, copy, readonly) NSString *bundleShortVersionString; + +/** + * Returns the date that the report was created. + **/ +@property(nonatomic, copy, readonly) NSDate *dateCreated; + +@property(nonatomic, copy, readonly) NSDate *crashedOnDate; + +/** + * Returns the os version that the application crashed on. + **/ +@property(nonatomic, copy, readonly) NSString *OSVersion; + +/** + * Returns the os build version that the application crashed on. + **/ +@property(nonatomic, copy, readonly) NSString *OSBuildVersion; + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m b/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m new file mode 100644 index 000000000000..97a8bfa7b62c --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m @@ -0,0 +1,242 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSInternalReport.h" + +#import "FIRCLSFile.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSLogger.h" + +NSString *const CLSReportBinaryImageFile = @"binary_images.clsrecord"; +NSString *const CLSReportExceptionFile = @"exception.clsrecord"; +NSString *const CLSReportCustomExceptionAFile = @"custom_exception_a.clsrecord"; +NSString *const CLSReportCustomExceptionBFile = @"custom_exception_b.clsrecord"; +NSString *const CLSReportSignalFile = @"signal.clsrecord"; +#if CLS_MACH_EXCEPTION_SUPPORTED +NSString *const CLSReportMachExceptionFile = @"mach_exception.clsrecord"; +#endif +NSString *const CLSReportMetadataFile = @"metadata.clsrecord"; +NSString *const CLSReportErrorAFile = @"errors_a.clsrecord"; +NSString *const CLSReportErrorBFile = @"errors_b.clsrecord"; +NSString *const CLSReportInternalIncrementalKVFile = @"internal_incremental_kv.clsrecord"; +NSString *const CLSReportInternalCompactedKVFile = @"internal_compacted_kv.clsrecord"; +NSString *const CLSReportUserIncrementalKVFile = @"user_incremental_kv.clsrecord"; +NSString *const CLSReportUserCompactedKVFile = @"user_compacted_kv.clsrecord"; + +@interface FIRCLSInternalReport () { + NSString *_identifier; + NSString *_path; + NSArray *_metadataSections; +} + +@end + +@implementation FIRCLSInternalReport + ++ (instancetype)reportWithPath:(NSString *)path { + return [[self alloc] initWithPath:path]; +} + +#pragma mark - Initialization +/** + * Initializes a new report, i.e. one without metadata on the file system yet. + */ +- (instancetype)initWithPath:(NSString *)path executionIdentifier:(NSString *)identifier { + self = [super init]; + if (!self) { + return self; + } + + if (!path || !identifier) { + return nil; + } + + [self setPath:path]; + + _identifier = [identifier copy]; + + return self; +} + +/** + * Initializes a pre-existing report, i.e. one with metadata on the file system. + */ +- (instancetype)initWithPath:(NSString *)path { + NSString *metadataPath = [path stringByAppendingPathComponent:CLSReportMetadataFile]; + NSString *identifier = [[[[self.class readFIRCLSFileAtPath:metadataPath] objectAtIndex:0] + objectForKey:@"identity"] objectForKey:@"session_id"]; + if (!identifier) { + FIRCLSErrorLog(@"Unable to read identifier at path %@", path); + } + return [self initWithPath:path executionIdentifier:identifier]; +} + +#pragma mark - Path Helpers +- (NSString *)directoryName { + return self.path.lastPathComponent; +} + +- (NSString *)pathForContentFile:(NSString *)name { + return [[self path] stringByAppendingPathComponent:name]; +} + +- (NSString *)metadataPath { + return [[self path] stringByAppendingPathComponent:CLSReportMetadataFile]; +} + +- (NSString *)binaryImagePath { + return [self pathForContentFile:CLSReportBinaryImageFile]; +} + +#pragma mark - Processing Methods +- (BOOL)needsToBeSubmitted { + NSArray *reportFiles = @[ + CLSReportExceptionFile, CLSReportSignalFile, CLSReportCustomExceptionAFile, + CLSReportCustomExceptionBFile, +#if CLS_MACH_EXCEPTION_SUPPORTED + CLSReportMachExceptionFile, +#endif + CLSReportErrorAFile, CLSReportErrorBFile + ]; + return [self checkExistenceOfAtLeastOnceFileInArray:reportFiles]; +} + +- (NSArray *)crashFilenames { + static NSArray *files; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + files = @[ + CLSReportExceptionFile, +#if CLS_MACH_EXCEPTION_SUPPORTED + CLSReportMachExceptionFile, +#endif + CLSReportSignalFile + ]; + }); + return files; +} + +- (BOOL)isCrash { + NSArray *crashFiles = [self crashFilenames]; + return [self checkExistenceOfAtLeastOnceFileInArray:crashFiles]; +} + +- (BOOL)checkExistenceOfAtLeastOnceFileInArray:(NSArray *)files { + NSFileManager *manager = [NSFileManager defaultManager]; + + for (NSString *fileName in files) { + NSString *path = [self pathForContentFile:fileName]; + + if ([manager fileExistsAtPath:path]) { + return YES; + } + } + + return NO; +} + +- (void)enumerateSymbolicatableFilesInContent:(void (^)(NSString *path))block { + for (NSString *fileName in [self crashFilenames]) { + NSString *path = [self pathForContentFile:fileName]; + + block(path); + } +} + +#pragma mark - Metadata helpers ++ (NSArray *)readFIRCLSFileAtPath:(NSString *)path { + NSArray *sections = FIRCLSFileReadSections([path fileSystemRepresentation], false, nil); + + if ([sections count] == 0) { + return nil; + } + + return sections; +} + +- (NSArray *)metadataSections { + if (!_metadataSections) { + _metadataSections = [self.class readFIRCLSFileAtPath:self.metadataPath]; + } + return _metadataSections; +} + +- (NSString *)orgID { + return + [[[self.metadataSections objectAtIndex:0] objectForKey:@"identity"] objectForKey:@"org_id"]; +} + +- (NSDictionary *)customKeys { + return nil; +} + +- (NSString *)bundleVersion { + return [[[self.metadataSections objectAtIndex:2] objectForKey:@"application"] + objectForKey:@"build_version"]; +} + +- (NSString *)bundleShortVersionString { + return [[[self.metadataSections objectAtIndex:2] objectForKey:@"application"] + objectForKey:@"display_version"]; +} + +- (NSDate *)dateCreated { + NSUInteger unixtime = [[[[self.metadataSections objectAtIndex:0] objectForKey:@"identity"] + objectForKey:@"started_at"] unsignedIntegerValue]; + + return [NSDate dateWithTimeIntervalSince1970:unixtime]; +} + +- (NSDate *)crashedOnDate { + if (!self.isCrash) { + return nil; + } + +#if CLS_MACH_EXCEPTION_SUPPORTED + // try the mach exception first, because it is more common + NSDate *date = [self timeFromCrashContentFile:CLSReportMachExceptionFile + sectionName:@"mach_exception"]; + if (date) { + return date; + } +#endif + + return [self timeFromCrashContentFile:CLSReportSignalFile sectionName:@"signal"]; +} + +- (NSDate *)timeFromCrashContentFile:(NSString *)fileName sectionName:(NSString *)sectionName { + // This works because both signal and mach exception files have the same structure to extract + // the "time" component + NSString *path = [self pathForContentFile:fileName]; + + NSNumber *timeValue = [[[[self.class readFIRCLSFileAtPath:path] objectAtIndex:0] + objectForKey:sectionName] objectForKey:@"time"]; + if (timeValue == nil) { + return nil; + } + + return [NSDate dateWithTimeIntervalSince1970:[timeValue unsignedIntegerValue]]; +} + +- (NSString *)OSVersion { + return [[[self.metadataSections objectAtIndex:1] objectForKey:@"host"] + objectForKey:@"os_display_version"]; +} + +- (NSString *)OSBuildVersion { + return [[[self.metadataSections objectAtIndex:1] objectForKey:@"host"] + objectForKey:@"os_build_version"]; +} + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSReport.h b/Crashlytics/Crashlytics/Models/FIRCLSReport.h new file mode 100644 index 000000000000..464dff7366f4 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSReport.h @@ -0,0 +1,110 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * The CLSCrashReport protocol is deprecated. See the CLSReport class and the CrashyticsDelegate + * changes for details. + **/ +@protocol FIRCLSCrashReport + +@property(nonatomic, copy, readonly) NSString *identifier; +@property(nonatomic, copy, readonly) NSDictionary *customKeys; +@property(nonatomic, copy, readonly) NSString *bundleVersion; +@property(nonatomic, copy, readonly) NSString *bundleShortVersionString; +@property(nonatomic, readonly, nullable) NSDate *crashedOnDate; +@property(nonatomic, copy, readonly) NSString *OSVersion; +@property(nonatomic, copy, readonly) NSString *OSBuildVersion; + +@end + +/** + * The CLSReport exposes an interface to the phsyical report that Crashlytics has created. You can + * use this class to get information about the event, and can also set some values after the + * event has occurred. + **/ +@interface FIRCLSReport : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * Returns the session identifier for the report. + **/ +@property(nonatomic, copy, readonly) NSString *identifier; + +/** + * Returns the custom key value data for the report. + **/ +@property(nonatomic, copy, readonly) NSDictionary *customKeys; + +/** + * Returns the CFBundleVersion of the application that generated the report. + **/ +@property(nonatomic, copy, readonly) NSString *bundleVersion; + +/** + * Returns the CFBundleShortVersionString of the application that generated the report. + **/ +@property(nonatomic, copy, readonly) NSString *bundleShortVersionString; + +/** + * Returns the date that the report was created. + **/ +@property(nonatomic, copy, readonly) NSDate *dateCreated; + +/** + * Returns the os version that the application crashed on. + **/ +@property(nonatomic, copy, readonly) NSString *OSVersion; + +/** + * Returns the os build version that the application crashed on. + **/ +@property(nonatomic, copy, readonly) NSString *OSBuildVersion; + +/** + * Returns YES if the report contains any crash information, otherwise returns NO. + **/ +@property(nonatomic, assign, readonly) BOOL isCrash; + +/** + * You can use this method to set, after the event, additional custom keys. The rules + * and semantics for this method are the same as those documented in FIRCrashlytics.h. Be aware + * that the maximum size and count of custom keys is still enforced, and you can overwrite keys + * and/or cause excess keys to be deleted by using this method. + **/ +- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; + +/** + * Record an application-specific user identifier. See FIRCrashlytics.h for details. + **/ +@property(nonatomic, copy, nullable) NSString *userIdentifier; + +/** + * Record a user name. See FIRCrashlytics.h for details. + **/ +@property(nonatomic, copy, nullable) NSString *userName; + +/** + * Record a user email. See FIRCrashlytics.h for details. + **/ +@property(nonatomic, copy, nullable) NSString *userEmail; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Models/FIRCLSReport.m b/Crashlytics/Crashlytics/Models/FIRCLSReport.m new file mode 100644 index 000000000000..18b1b6f40e54 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSReport.m @@ -0,0 +1,239 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSContext.h" +#import "FIRCLSFile.h" +#import "FIRCLSGlobals.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSReport_Private.h" +#import "FIRCLSUserLogging.h" + +@interface FIRCLSReport () { + FIRCLSInternalReport *_internalReport; + uint32_t _internalKVCounter; + uint32_t _userKVCounter; + + NSString *_internalCompactedKVFile; + NSString *_internalIncrementalKVFile; + NSString *_userCompactedKVFile; + NSString *_userIncrementalKVFile; + + BOOL _readOnly; + + // cached values, to ensure that their contents remain valid + // even if the report is deleted + NSString *_identifer; + NSString *_bundleVersion; + NSString *_bundleShortVersionString; + NSDate *_dateCreated; + NSDate *_crashedOnDate; + NSString *_OSVersion; + NSString *_OSBuildVersion; + NSNumber *_isCrash; + NSDictionary *_customKeys; +} + +@end + +@implementation FIRCLSReport + +- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report + prefetchData:(BOOL)shouldPrefetch { + self = [super init]; + if (!self) { + return nil; + } + + _internalReport = report; + + // TODO: correct kv accounting + // The internal report will have non-zero compacted and incremental keys. The right thing to do + // is count them, so we can kick off compactions/pruning at the right times. By + // setting this value to zero, we're allowing more entries to be made than there really + // should be. Not the end of the world, but we should do better eventually. + _internalKVCounter = 0; + _userKVCounter = 0; + + _internalCompactedKVFile = + [self.internalReport pathForContentFile:CLSReportInternalCompactedKVFile]; + _internalIncrementalKVFile = + [self.internalReport pathForContentFile:CLSReportInternalIncrementalKVFile]; + _userCompactedKVFile = [self.internalReport pathForContentFile:CLSReportUserCompactedKVFile]; + _userIncrementalKVFile = [self.internalReport pathForContentFile:CLSReportUserIncrementalKVFile]; + + _readOnly = shouldPrefetch; + + if (shouldPrefetch) { + _identifer = report.identifier; + _bundleVersion = report.bundleVersion; + _bundleShortVersionString = report.bundleShortVersionString; + _dateCreated = report.dateCreated; + _crashedOnDate = report.crashedOnDate; + _OSVersion = report.OSVersion; + _OSBuildVersion = report.OSBuildVersion; + _isCrash = [NSNumber numberWithBool:report.isCrash]; + + _customKeys = [self readCustomKeys]; + } + + return self; +} + +- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report { + return [self initWithInternalReport:report prefetchData:NO]; +} + +#pragma mark - Helpers +- (FIRCLSUserLoggingKVStorage)internalKVStorage { + FIRCLSUserLoggingKVStorage storage; + + storage.maxCount = _clsContext.readonly->logging.internalKVStorage.maxCount; + storage.maxIncrementalCount = _clsContext.readonly->logging.internalKVStorage.maxIncrementalCount; + storage.compactedPath = [_internalCompactedKVFile fileSystemRepresentation]; + storage.incrementalPath = [_internalIncrementalKVFile fileSystemRepresentation]; + + return storage; +} + +- (FIRCLSUserLoggingKVStorage)userKVStorage { + FIRCLSUserLoggingKVStorage storage; + + storage.maxCount = _clsContext.readonly->logging.userKVStorage.maxCount; + storage.maxIncrementalCount = _clsContext.readonly->logging.userKVStorage.maxIncrementalCount; + storage.compactedPath = [_userCompactedKVFile fileSystemRepresentation]; + storage.incrementalPath = [_userIncrementalKVFile fileSystemRepresentation]; + + return storage; +} + +- (BOOL)canRecordNewValues { + return !_readOnly && FIRCLSContextIsInitialized(); +} + +- (void)recordValue:(id)value forInternalKey:(NSString *)key { + if (!self.canRecordNewValues) { + return; + } + + FIRCLSUserLoggingKVStorage storage = [self internalKVStorage]; + + FIRCLSUserLoggingRecordKeyValue(key, value, &storage, &_internalKVCounter); +} + +- (void)recordValue:(id)value forUserKey:(NSString *)key { + if (!self.canRecordNewValues) { + return; + } + + FIRCLSUserLoggingKVStorage storage = [self userKVStorage]; + + FIRCLSUserLoggingRecordKeyValue(key, value, &storage, &_userKVCounter); +} + +- (NSDictionary *)readCustomKeys { + FIRCLSUserLoggingKVStorage storage = [self userKVStorage]; + + // return decoded entries + return FIRCLSUserLoggingGetCompactedKVEntries(&storage, true); +} + +#pragma mark - Metadata helpers + +- (NSString *)identifier { + if (!_identifer) { + _identifer = self.internalReport.identifier; + } + + return _identifer; +} + +- (NSDictionary *)customKeys { + if (!_customKeys) { + _customKeys = [self readCustomKeys]; + } + + return _customKeys; +} + +- (NSString *)bundleVersion { + if (!_bundleVersion) { + _bundleVersion = self.internalReport.bundleVersion; + } + + return _bundleVersion; +} + +- (NSString *)bundleShortVersionString { + if (!_bundleShortVersionString) { + _bundleShortVersionString = self.internalReport.bundleShortVersionString; + } + + return _bundleShortVersionString; +} + +- (NSDate *)dateCreated { + if (!_dateCreated) { + _dateCreated = self.internalReport.dateCreated; + } + + return _dateCreated; +} + +// for compatibility with the CLSCrashReport Protocol +- (NSDate *)crashedOnDate { + if (!_crashedOnDate) { + _crashedOnDate = self.internalReport.crashedOnDate; + } + + return _crashedOnDate; +} + +- (NSString *)OSVersion { + if (!_OSVersion) { + _OSVersion = self.internalReport.OSVersion; + } + + return _OSVersion; +} + +- (NSString *)OSBuildVersion { + if (!_OSBuildVersion) { + _OSBuildVersion = self.internalReport.OSBuildVersion; + } + + return _OSBuildVersion; +} + +- (BOOL)isCrash { + if (_isCrash == nil) { + _isCrash = [NSNumber numberWithBool:self.internalReport.isCrash]; + } + + return [_isCrash boolValue]; +} + +#pragma mark - Public Read/Write Methods +- (void)setObjectValue:(id)value forKey:(NSString *)key { + [self recordValue:value forUserKey:key]; +} + +- (NSString *)userIdentifier { + return nil; +} + +- (void)setUserIdentifier:(NSString *)userIdentifier { + [self recordValue:userIdentifier forInternalKey:FIRCLSUserIdentifierKey]; +} + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h b/Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h new file mode 100644 index 000000000000..0d8b67c6b7d7 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h @@ -0,0 +1,27 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSReport.h" + +@class FIRCLSInternalReport; + +@interface FIRCLSReport () + +- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report + prefetchData:(BOOL)shouldPrefetch NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report; + +@property(nonatomic, strong, readonly) FIRCLSInternalReport *internalReport; + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSSettings.h b/Crashlytics/Crashlytics/Models/FIRCLSSettings.h new file mode 100644 index 000000000000..c83b07104d6f --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSSettings.h @@ -0,0 +1,125 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import "FBLPromise.h" + +@class FIRCLSApplicationIdentifierModel; +@class FIRCLSFileManager; + +NS_ASSUME_NONNULL_BEGIN + +@interface FIRCLSSettings : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager + appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel + NS_DESIGNATED_INITIALIZER; + +/** + * Recreates the settings dictionary by re-reading the settings file from persistent storage. This + * should be called before any settings values are read, as it will populate the underlying + * settingsDictionary. If the Google App ID has changed or there is an error, delete the cache file + * and settingsDictionary. If the cache has expired, set `isCacheExpired` to true so that settings + * are re-fetched, but do not delete any values. + */ +- (void)reloadFromCacheWithGoogleAppID:(NSString *)googleAppID + currentTimestamp:(NSTimeInterval)currentTimestamp; + +/** + * Stores a separate file with the settings expiration and Google App ID it was saved with + * so that we can later determine that the settings have expired. + * + * This should be called in a background thread right after the settings.json file has been + * downloaded. + */ +- (void)cacheSettingsWithGoogleAppID:(NSString *)googleAppID + currentTimestamp:(NSTimeInterval)currentTimestamp; + +/** + * Returns true when Settings should be fetched from the server again + */ +@property(nonatomic, readonly) BOOL isCacheExpired; + +/** + * Determines how long these Settings should be respected until the SDK should fetch again + */ +@property(nonatomic, readonly) uint32_t cacheDurationSeconds; + +/** + * The Crashlytics Organization identifier of the app. Allows data continuity between + * old and new Crashlytics SDKs. + */ +@property(nonatomic, nullable, readonly) NSString *orgID; + +/** + * The backend bundle identifier of the app. Crashlytics can in some cases have + * a different bundle identifier than the app itself (eg. Crashlytics will always downcase + * the bundle ID). + */ +@property(nonatomic, nullable, readonly) NSString *fetchedBundleID; + +/** + * Indicates whether the app needs onboarding + */ +@property(nonatomic, readonly) BOOL appNeedsOnboarding; + +/** + * Indicates whether the app needs an update + */ +@property(nonatomic, readonly) BOOL appUpdateRequired; + +/** + * When this is false, Crashlytics will not start up + */ +@property(nonatomic, readonly) BOOL crashReportingEnabled; + +/** + * When this is false, Crashlytics will not collect non-fatal errors and errors + * from the custom exception / record error APIs + */ +@property(nonatomic, readonly) BOOL errorReportingEnabled; + +/** + * When this is false, Crashlytics will not collect custom exceptions from the API + */ +@property(nonatomic, readonly) BOOL customExceptionsEnabled; + +/** + * Returns the maximum number of custom exception events that will be + * recorded in a session. + */ +@property(nonatomic, readonly) uint32_t errorLogBufferSize; + +/** + * Returns the maximum size of the log buffer in bytes + */ +@property(nonatomic, readonly) uint32_t logBufferSize; + +/** + * Returns the maximum number of custom exceptions that will be collected + * in a session. + */ +@property(nonatomic, readonly) uint32_t maxCustomExceptions; + +/** + * Returns the maximum number of custom key-value pair keys (not bytes). + */ +@property(nonatomic, readonly) uint32_t maxCustomKeys; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Models/FIRCLSSettings.m b/Crashlytics/Crashlytics/Models/FIRCLSSettings.m new file mode 100644 index 000000000000..41438fdb8ae4 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSSettings.m @@ -0,0 +1,325 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSettings.h" + +#import "FBLPromise.h" + +#import "FIRCLSApplicationIdentifierModel.h" +#import "FIRCLSConstants.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSLogger.h" +#import "FIRCLSURLBuilder.h" + +NSString *const CreatedAtKey = @"created_at"; +NSString *const GoogleAppIDKey = @"google_app_id"; +NSString *const BuildInstanceID = @"build_instance_id"; + +@interface FIRCLSSettings () + +@property(nonatomic, strong) FIRCLSFileManager *fileManager; +@property(nonatomic, strong) FIRCLSApplicationIdentifierModel *appIDModel; + +@property(nonatomic, strong) NSDictionary *settingsDictionary; + +@property(nonatomic) BOOL isCacheKeyExpired; + +@end + +@implementation FIRCLSSettings + +- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager + appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel { + self = [super init]; + if (!self) { + return nil; + } + + _fileManager = fileManager; + _appIDModel = appIDModel; + + _settingsDictionary = nil; + _isCacheKeyExpired = NO; + + return self; +} + +#pragma mark - Public Methods + +- (void)reloadFromCacheWithGoogleAppID:(NSString *)googleAppID + currentTimestamp:(NSTimeInterval)currentTimestamp { + NSString *settingsFilePath = self.fileManager.settingsFilePath; + + NSData *data = [NSData dataWithContentsOfFile:settingsFilePath]; + if (!data) { + FIRCLSDebugLog(@"[Crashlytics:Settings] No settings were cached"); + + return; + } + + NSError *error = nil; + @synchronized(self) { + _settingsDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + } + + if (!_settingsDictionary) { + FIRCLSErrorLog(@"Could not load settings file data with error: %@", error.localizedDescription); + + // Attempt to remove it, in case it's messed up + [self deleteCachedSettings]; + return; + } + + NSDictionary *cacheKey = [self loadCacheKey]; + if (!cacheKey) { + FIRCLSErrorLog(@"Could not load settings cache key"); + + [self deleteCachedSettings]; + return; + } + + NSString *cachedGoogleAppID = cacheKey[GoogleAppIDKey]; + if (![cachedGoogleAppID isEqualToString:googleAppID]) { + FIRCLSDebugLog( + @"[Crashlytics:Settings] Invalidating settings cache because Google App ID changed"); + + [self deleteCachedSettings]; + return; + } + + NSTimeInterval cacheCreatedAt = [cacheKey[CreatedAtKey] unsignedIntValue]; + NSTimeInterval cacheDurationSeconds = self.cacheDurationSeconds; + if (currentTimestamp > (cacheCreatedAt + cacheDurationSeconds)) { + FIRCLSDebugLog(@"[Crashlytics:Settings] Settings TTL expired"); + + @synchronized(self) { + self.isCacheKeyExpired = YES; + } + } + + NSString *cacheBuildInstanceID = cacheKey[BuildInstanceID]; + if (![cacheBuildInstanceID isEqualToString:self.appIDModel.buildInstanceID]) { + FIRCLSDebugLog(@"[Crashlytics:Settings] Settings expired because build instance changed"); + + @synchronized(self) { + self.isCacheKeyExpired = YES; + } + } +} + +- (void)cacheSettingsWithGoogleAppID:(NSString *)googleAppID + currentTimestamp:(NSTimeInterval)currentTimestamp { + NSNumber *createdAtTimestamp = [NSNumber numberWithDouble:currentTimestamp]; + NSDictionary *cacheKey = @{ + CreatedAtKey : createdAtTimestamp, + GoogleAppIDKey : googleAppID, + BuildInstanceID : self.appIDModel.buildInstanceID, + }; + + NSError *error = nil; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:cacheKey + options:kNilOptions + error:&error]; + + if (!jsonData) { + FIRCLSErrorLog(@"Could not create settings cache key with error: %@", + error.localizedDescription); + + return; + } + + if ([self.fileManager fileExistsAtPath:self.fileManager.settingsCacheKeyPath]) { + [self.fileManager removeItemAtPath:self.fileManager.settingsCacheKeyPath]; + } + [self.fileManager createFileAtPath:self.fileManager.settingsCacheKeyPath + contents:jsonData + attributes:nil]; + + // If Settings were expired before, they should no longer be expired after this. + // This may be set back to YES if reloading from the cache fails + @synchronized(self) { + self.isCacheKeyExpired = NO; + } + + [self reloadFromCacheWithGoogleAppID:googleAppID currentTimestamp:currentTimestamp]; +} + +#pragma mark - Convenience Methods + +- (NSDictionary *)loadCacheKey { + NSData *cacheKeyData = [NSData dataWithContentsOfFile:self.fileManager.settingsCacheKeyPath]; + + if (!cacheKeyData) { + return nil; + } + + NSError *error = nil; + NSDictionary *cacheKey = [NSJSONSerialization JSONObjectWithData:cacheKeyData + options:NSJSONReadingAllowFragments + error:&error]; + return cacheKey; +} + +- (void)deleteCachedSettings { + __weak FIRCLSSettings *weakSelf = self; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ + __strong FIRCLSSettings *strongSelf = weakSelf; + if ([strongSelf.fileManager fileExistsAtPath:strongSelf.fileManager.settingsFilePath]) { + [strongSelf.fileManager removeItemAtPath:strongSelf.fileManager.settingsFilePath]; + } + if ([strongSelf.fileManager fileExistsAtPath:strongSelf.fileManager.settingsCacheKeyPath]) { + [strongSelf.fileManager removeItemAtPath:strongSelf.fileManager.settingsCacheKeyPath]; + } + }); + + @synchronized(self) { + self.isCacheKeyExpired = YES; + _settingsDictionary = nil; + } +} + +- (NSDictionary *)settingsDictionary { + @synchronized(self) { + return _settingsDictionary; + } +} + +#pragma mark - Settings Groups + +- (NSDictionary *)appSettings { + return self.settingsDictionary[@"app"]; +} + +- (NSDictionary *)sessionSettings { + return self.settingsDictionary[@"session"]; +} + +- (NSDictionary *)featuresSettings { + return self.settingsDictionary[@"features"]; +} + +- (NSDictionary *)fabricSettings { + return self.settingsDictionary[@"fabric"]; +} + +#pragma mark - Caching + +- (BOOL)isCacheExpired { + if (!self.settingsDictionary) { + return YES; + } + + @synchronized(self) { + return self.isCacheKeyExpired; + } +} + +- (uint32_t)cacheDurationSeconds { + id fetchedCacheDuration = self.settingsDictionary[@"cache_duration"]; + if (fetchedCacheDuration) { + return [fetchedCacheDuration unsignedIntValue]; + } + + return 60 * 60; +} + +#pragma mark - Identifiers + +- (nullable NSString *)orgID { + return self.fabricSettings[@"org_id"]; +} + +- (nullable NSString *)fetchedBundleID { + return self.fabricSettings[@"bundle_id"]; +} + +#pragma mark - Onboarding / Update + +- (NSString *)appStatus { + return self.appSettings[@"status"]; +} + +- (BOOL)appNeedsOnboarding { + return [self.appStatus isEqualToString:@"new"]; +} + +- (BOOL)appUpdateRequired { + return [[self.appSettings objectForKey:@"update_required"] boolValue]; +} + +#pragma mark - On / Off Switches + +- (BOOL)errorReportingEnabled { + NSNumber *value = [self featuresSettings][@"collect_logged_exceptions"]; + + if (value != nil) { + return [value boolValue]; + } + + return YES; +} + +- (BOOL)customExceptionsEnabled { + // Right now, recording custom exceptions from the API and + // automatically capturing non-fatal errors go hand in hand + return [self errorReportingEnabled]; +} + +- (BOOL)crashReportingEnabled { + NSNumber *value = [self featuresSettings][@"collect_reports"]; + + if (value != nil) { + return value.boolValue; + } + + return YES; +} + +#pragma mark - Optional Limit Overrides + +- (uint32_t)errorLogBufferSize { + return [self logBufferSize]; +} + +- (uint32_t)logBufferSize { + NSNumber *value = [self sessionSettings][@"log_buffer_size"]; + + if (value != nil) { + return value.unsignedIntValue; + } + + return 64 * 1000; +} + +- (uint32_t)maxCustomExceptions { + NSNumber *value = [self sessionSettings][@"max_custom_exception_events"]; + + if (value != nil) { + return value.unsignedIntValue; + } + + return 8; +} + +- (uint32_t)maxCustomKeys { + NSNumber *value = [self sessionSettings][@"max_custom_key_value_pairs"]; + + if (value != nil) { + return value.unsignedIntValue; + } + + return 64; +} + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSStackFrame.h b/Crashlytics/Crashlytics/Models/FIRCLSStackFrame.h new file mode 100644 index 000000000000..24ef1cc8bc5e --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSStackFrame.h @@ -0,0 +1,44 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * + * This class is used in conjunction with -[Crashlytics + * recordCustomExceptionName:reason:frameArray:] to record information about non-ObjC/C++ + * exceptions. All information included here will be displayed in the Crashlytics UI, and can + * influence crash grouping. Be particularly careful with the use of the address property. If set, + * Crashlytics will attempt symbolication and could overwrite other properities in the process. + * + **/ +@interface FIRCLSStackFrame : NSObject + ++ (instancetype)stackFrame; ++ (instancetype)stackFrameWithAddress:(NSUInteger)address; ++ (instancetype)stackFrameWithSymbol:(NSString *)symbol; + +@property(nonatomic, copy, nullable) NSString *symbol; +@property(nonatomic, copy, nullable) NSString *rawSymbol; +@property(nonatomic, copy, nullable) NSString *library; +@property(nonatomic, copy, nullable) NSString *fileName; +@property(nonatomic, assign) uint32_t lineNumber; +@property(nonatomic, assign) uint64_t offset; +@property(nonatomic, assign) uint64_t address; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Models/FIRCLSStackFrame.m b/Crashlytics/Crashlytics/Models/FIRCLSStackFrame.m new file mode 100644 index 000000000000..8227e4ff463a --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSStackFrame.m @@ -0,0 +1,50 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSStackFrame.h" + +@implementation FIRCLSStackFrame + ++ (instancetype)stackFrame { + return [[self alloc] init]; +} + ++ (instancetype)stackFrameWithAddress:(NSUInteger)address { + FIRCLSStackFrame* frame = [self stackFrame]; + + [frame setAddress:address]; + + return frame; +} + ++ (instancetype)stackFrameWithSymbol:(NSString*)symbol { + FIRCLSStackFrame* frame = [self stackFrame]; + + frame.symbol = symbol; + frame.rawSymbol = symbol; + + return frame; +} + +- (NSString*)description { + if ([self fileName]) { + return [NSString stringWithFormat:@"{[0x%llx] %@ - %@:%u}", [self address], [self fileName], + [self symbol], [self lineNumber]]; + } + + return [NSString + stringWithFormat:@"{[0x%llx + %u] %@}", [self address], [self lineNumber], [self symbol]]; +} + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h b/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h new file mode 100644 index 000000000000..85adc85094d4 --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h @@ -0,0 +1,26 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSStackFrame; + +@interface FIRCLSSymbolResolver : NSObject + +- (BOOL)loadBinaryImagesFromFile:(NSString *)path; + +- (FIRCLSStackFrame *)frameForAddress:(uint64_t)address; +- (BOOL)updateStackFrame:(FIRCLSStackFrame *)frame; + +@end diff --git a/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m b/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m new file mode 100644 index 000000000000..a96dd70aa38b --- /dev/null +++ b/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m @@ -0,0 +1,175 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSymbolResolver.h" + +#include + +#include "FIRCLSBinaryImage.h" +#include "FIRCLSFile.h" +#import "FIRCLSLogger.h" +#import "FIRCLSStackFrame.h" + +@interface FIRCLSSymbolResolver () { + NSMutableArray* _binaryImages; +} + +@end + +@implementation FIRCLSSymbolResolver + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _binaryImages = [NSMutableArray array]; + + return self; +} + +- (BOOL)loadBinaryImagesFromFile:(NSString*)path { + if ([path length] == 0) { + return NO; + } + + NSArray* sections = FIRCLSFileReadSections([path fileSystemRepresentation], false, nil); + + if ([sections count] == 0) { + FIRCLSErrorLog(@"Failed to read binary image file %@", path); + return NO; + } + + // filter out unloads, as well as loads with invalid entries + for (NSDictionary* entry in sections) { + NSDictionary* details = [entry objectForKey:@"load"]; + if (!details) { + continue; + } + + // This does happen occationally and causes a crash. I'm really not sure there + // is anything sane we can do in this case. + if (![details objectForKey:@"base"] || ![details objectForKey:@"size"]) { + continue; + } + + if ([details objectForKey:@"base"] == (id)[NSNull null] || + [details objectForKey:@"size"] == (id)[NSNull null]) { + continue; + } + + [_binaryImages addObject:details]; + } + + [_binaryImages sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { + NSNumber* base1 = [obj1 objectForKey:@"base"]; + NSNumber* base2 = [obj2 objectForKey:@"base"]; + + return [base1 compare:base2]; + }]; + + return YES; +} + +- (NSDictionary*)loadedBinaryImageForPC:(uintptr_t)pc { + NSUInteger index = + [_binaryImages indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL* stop) { + uintptr_t base = [[obj objectForKey:@"base"] unsignedIntegerValue]; + uintptr_t size = [[obj objectForKey:@"size"] unsignedIntegerValue]; + + return pc >= base && pc < (base + size); + }]; + + if (index == NSNotFound) { + return nil; + } + + return [_binaryImages objectAtIndex:index]; +} + +- (BOOL)fillInImageDetails:(FIRCLSBinaryImageDetails*)details forUUID:(NSString*)uuid { + if (!details || !uuid) { + return NO; + } + + return FIRCLSBinaryImageFindImageForUUID([uuid UTF8String], details); +} + +- (FIRCLSStackFrame*)frameForAddress:(uint64_t)address { + FIRCLSStackFrame* frame = [FIRCLSStackFrame stackFrameWithAddress:(NSUInteger)address]; + + if (![self updateStackFrame:frame]) { + return nil; + } + + return frame; +} + +- (BOOL)updateStackFrame:(FIRCLSStackFrame*)frame { + uint64_t address = [frame address]; + if (address == 0) { + return NO; + } + + NSDictionary* binaryImage = [self loadedBinaryImageForPC:(uintptr_t)address]; + + FIRCLSBinaryImageDetails imageDetails; + + if (![self fillInImageDetails:&imageDetails forUUID:[binaryImage objectForKey:@"uuid"]]) { +#if DEBUG + FIRCLSDebugLog(@"Image not found"); +#endif + return NO; + } + + uintptr_t addr = (uintptr_t)address - + (uintptr_t)[[binaryImage objectForKey:@"base"] unsignedIntegerValue] + + (uintptr_t)imageDetails.node.baseAddress; + Dl_info dlInfo; + + if (dladdr((void*)addr, &dlInfo) == 0) { +#if DEBUG + FIRCLSDebugLog(@"Could not look up address"); +#endif + return NO; + } + + if (addr - (uintptr_t)dlInfo.dli_saddr == 0) { + addr -= 2; + if (dladdr((void*)addr, &dlInfo) == 0) { +#if DEBUG + FIRCLSDebugLog(@"Could not look up address"); +#endif + return NO; + } + } + + if (dlInfo.dli_sname) { + NSString* symbol = [NSString stringWithUTF8String:dlInfo.dli_sname]; + + frame.symbol = symbol; + frame.rawSymbol = symbol; + } + + if (addr > (uintptr_t)dlInfo.dli_saddr) { + [frame setOffset:addr - (uintptr_t)dlInfo.dli_saddr]; + } + + [frame setLibrary:[[binaryImage objectForKey:@"path"] lastPathComponent]]; + + return YES; +} + +@end diff --git a/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h b/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h new file mode 100644 index 000000000000..5636d3d09c4b --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h @@ -0,0 +1,23 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +typedef void (^FIRCLSAsyncOperationCompletionBlock)(NSError* error); + +@interface FIRCLSAsyncOperation : NSOperation + +@property(copy, nonatomic) FIRCLSAsyncOperationCompletionBlock asyncCompletion; + +@end diff --git a/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m b/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m new file mode 100644 index 000000000000..94415f14efd0 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m @@ -0,0 +1,135 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSAsyncOperation.h" + +@interface FIRCLSAsyncOperation () { + BOOL _internalExecuting; + BOOL _internalFinished; +} + +@property(nonatomic, strong) NSRecursiveLock *lock; + +@end + +@implementation FIRCLSAsyncOperation + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _internalExecuting = NO; + _internalFinished = NO; + + self.lock = [[NSRecursiveLock alloc] init]; + self.lock.name = @"com.crashlytics.async-operation-lock"; + + return self; +} + +#pragma mark - NSOperation Overrides +- (BOOL)isConcurrent { + return YES; +} + +- (BOOL)isAsynchronous { + return YES; +} + +- (BOOL)isExecuting { + [self.lock lock]; + BOOL result = _internalExecuting; + [self.lock unlock]; + + return result; +} + +- (BOOL)isFinished { + [self.lock lock]; + BOOL result = _internalFinished; + [self.lock unlock]; + + return result; +} + +- (void)start { + if ([self checkForCancellation]) { + return; + } + + [self markStarted]; + + [self main]; +} + +#pragma mark - Utilities +- (void)changeValueForKey:(NSString *)key inBlock:(void (^)(void))block { + [self willChangeValueForKey:key]; + block(); + [self didChangeValueForKey:key]; +} + +- (void)lock:(void (^)(void))block { + [self.lock lock]; + block(); + [self.lock unlock]; +} + +- (BOOL)checkForCancellation { + if ([self isCancelled]) { + [self markDone]; + return YES; + } + + return NO; +} + +#pragma mark - State Management +- (void)unlockedMarkFinished { + [self changeValueForKey:@"isFinished" + inBlock:^{ + self->_internalFinished = YES; + }]; +} + +- (void)unlockedMarkStarted { + [self changeValueForKey:@"isExecuting" + inBlock:^{ + self->_internalExecuting = YES; + }]; +} + +- (void)unlockedMarkComplete { + [self changeValueForKey:@"isExecuting" + inBlock:^{ + self->_internalExecuting = NO; + }]; +} + +- (void)markStarted { + [self lock:^{ + [self unlockedMarkStarted]; + }]; +} + +- (void)markDone { + [self lock:^{ + [self unlockedMarkComplete]; + [self unlockedMarkFinished]; + }]; +} + +@end diff --git a/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h b/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h new file mode 100644 index 000000000000..1135ed75ba33 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h @@ -0,0 +1,24 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSAsyncOperation.h" + +@interface FIRCLSAsyncOperation (Private) + +- (void)markStarted; +- (void)markDone; + +- (BOOL)checkForCancellation; + +@end diff --git a/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h new file mode 100644 index 000000000000..5822e75279c0 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h @@ -0,0 +1,35 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSInternalReport; +@class FIRCLSFileManager; +@class FIRCLSSettings; + +@interface FIRCLSPackageReportOperation : NSOperation + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithReport:(FIRCLSInternalReport *)report + fileManager:(FIRCLSFileManager *)fileManager + settings:(FIRCLSSettings *)settings NS_DESIGNATED_INITIALIZER; + +@property(nonatomic, readonly) FIRCLSInternalReport *report; +@property(nonatomic, readonly) FIRCLSFileManager *fileManager; +@property(nonatomic, readonly) FIRCLSSettings *settings; + +@property(nonatomic, copy, readonly) NSString *finalPath; + +@end diff --git a/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m new file mode 100644 index 000000000000..d67ca5694c72 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m @@ -0,0 +1,210 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSPackageReportOperation.h" + +#include +#include + +#import "FIRCLSFileManager.h" +#import "FIRCLSInternalReport.h" + +#import "FIRCLSUtility.h" + +#import "FIRCLSByteUtility.h" +#import "FIRCLSMultipartMimeStreamEncoder.h" + +#import "FIRCLSSettings.h" + +@interface FIRCLSPackageReportOperation () + +@property(nonatomic, copy) NSString *finalPath; + +@end + +@implementation FIRCLSPackageReportOperation + +- (instancetype)initWithReport:(FIRCLSInternalReport *)report + fileManager:(FIRCLSFileManager *)fileManager + settings:(FIRCLSSettings *)settings { + self = [super init]; + if (!self) { + return nil; + } + + _report = report; + _fileManager = fileManager; + _settings = settings; + + return self; +} + +- (BOOL)compressData:(NSData *)data toPath:(NSString *)path { + gzFile file = gzopen([path fileSystemRepresentation], "w"); + if (file == Z_NULL) { + FIRCLSSDKLogError("Error: unable to open file for compression %s\n", strerror(errno)); + return NO; + } + + __block BOOL success = [data length] > 0; + + FIRCLSEnumerateByteRangesOfNSDataUsingBlock( + data, ^(const void *bytes, NSRange byteRange, BOOL *stop) { + size_t length = byteRange.length; + + if (![self writeBytes:bytes length:length toGZFile:file]) { + *stop = YES; + success = NO; + } + }); + + gzclose(file); + + return success; +} + +- (BOOL)writeBytes:(const void *)buffer length:(size_t)length toGZFile:(gzFile)file { + return FIRCLSFileLoopWithWriteBlock( + buffer, length, ^ssize_t(const void *partialBuffer, size_t partialLength) { + errno = 0; + int ret = gzwrite(file, buffer, (unsigned int)length); + + if (ret == 0) { + int zerror = 0; + const char *errorString = gzerror(file, &zerror); + + FIRCLSSDKLogError("Error: failed to write compressed bytes %d, %s, %s \n", zerror, + errorString, strerror(errno)); + } + + return ret; + }); +} + +- (NSString *)reportPath { + return [self.report path]; +} + +- (NSString *)destinationDirectory { + return [self.fileManager preparedPath]; +} + +- (NSString *)packagedPathWithName:(NSString *)name { + // the output file will use the boundary as the filename, and "multipartmime" as the extension + return [[self.destinationDirectory stringByAppendingPathComponent:name] + stringByAppendingPathExtension:@"multipartmime"]; +} + +- (void)main { + NSString *reportOrgID = self.settings.orgID; + if (!reportOrgID) { + FIRCLSDebugLog( + @"[Crashlytics:PackageReport] Skipping packaging of report with id '%@' this run of the " + @"app because Organization ID was nil. Report will upload once settings are download " + @"successfully", + self.report.identifier); + + return; + } + + self.finalPath = nil; + + NSString *boundary = [FIRCLSMultipartMimeStreamEncoder generateBoundary]; + NSString *destPath = [self packagedPathWithName:boundary]; + + // try to read the metadata file, which could always fail + NSString *reportSessionId = self.report.identifier; + + NSOutputStream *stream = [NSOutputStream outputStreamToFileAtPath:destPath append:NO]; + + FIRCLSMultipartMimeStreamEncoder *encoder = + [FIRCLSMultipartMimeStreamEncoder encoderWithStream:stream andBoundary:boundary]; + if (!encoder) { + return; + } + + [encoder encode:^{ + [encoder addValue:reportOrgID fieldName:@"org_id"]; + + if (reportSessionId) { + [encoder addValue:reportSessionId fieldName:@"report_id"]; + } + + [self.fileManager + enumerateFilesInDirectory:self.reportPath + usingBlock:^(NSString *filePath, NSString *extension) { + if (self.cancelled) { + return; + } + + // Do not package or include already gz'ed files. These can get left over + // from previously-submitted reports. There's an opportinity here to avoid + // compressed certain types of files that cannot be changed. + if ([extension isEqualToString:@"gz"]) { + return; + } + + NSData *data = [NSData dataWithContentsOfFile:filePath + options:0 + error:nil]; + if ([data length] == 0) { + const char *filename = [[filePath lastPathComponent] UTF8String]; + + FIRCLSSDKLogError("Error: unable to read data for compression: %s\n", + filename); + return; + } + + [self encode:encoder data:data fromPath:filePath]; + }]; + }]; + + if (self.cancelled) { + [self.fileManager removeItemAtPath:destPath]; + return; + } + + self.finalPath = destPath; +} + +- (void)encode:(FIRCLSMultipartMimeStreamEncoder *)encoder + data:(NSData *)data + fromPath:(NSString *)path { + // must be non-nil and > 0 length + if ([path length] == 0) { + FIRCLSSDKLogError("Error: path is invalid\n"); + return; + } + + NSString *uploadPath = [path stringByAppendingPathExtension:@"gz"]; + NSString *fieldname = [path lastPathComponent]; + NSString *filename = [uploadPath lastPathComponent]; + NSString *mimeType = @"application/x-gzip"; + + // first, attempt to compress + if (![self compressData:data toPath:uploadPath]) { + FIRCLSSDKLogError("Error: compression failed for %s\n", [filename UTF8String]); + + // attempt the upload without compression + mimeType = @"text/plain"; + uploadPath = path; + } + + [encoder addFile:[NSURL fileURLWithPath:uploadPath] + fileName:filename + mimeType:mimeType + fieldName:fieldname]; +} + +@end diff --git a/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h new file mode 100644 index 000000000000..1e902863656f --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h @@ -0,0 +1,30 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSInternalReport; +@class FIRCLSSymbolResolver; + +@interface FIRCLSProcessReportOperation : NSOperation + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithReport:(FIRCLSInternalReport *)report + resolver:(FIRCLSSymbolResolver *)resolver NS_DESIGNATED_INITIALIZER; + +@property(nonatomic, readonly) FIRCLSSymbolResolver *symbolResolver; +@property(nonatomic, readonly) FIRCLSInternalReport *report; + +@end diff --git a/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m new file mode 100644 index 000000000000..3c5ab8a1ba98 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m @@ -0,0 +1,113 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSProcessReportOperation.h" + +#import "FIRCLSDemangleOperation.h" +#import "FIRCLSFile.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSSerializeSymbolicatedFramesOperation.h" +#import "FIRCLSStackFrame.h" +#import "FIRCLSSymbolResolver.h" +#import "FIRCLSSymbolicationOperation.h" + +@implementation FIRCLSProcessReportOperation + +- (instancetype)initWithReport:(FIRCLSInternalReport *)report + resolver:(FIRCLSSymbolResolver *)resolver { + self = [super init]; + if (!self) { + return nil; + } + + _report = report; + _symbolResolver = resolver; + + return self; +} + +- (NSString *)binaryImagePath { + return self.report.binaryImagePath; +} + +- (NSArray *)threadArrayFromFile:(NSString *)path { + NSArray *threads = + FIRCLSFileReadSections([path fileSystemRepresentation], false, ^NSObject *(id obj) { + // use this to select out the one entry that has a "threads" top-level entry + return [obj objectForKey:@"threads"]; + }); + + if ([threads count] == 0) { + return nil; + } + + // threads is actually an array of arrays + threads = [threads objectAtIndex:0]; + if (!threads) { + return nil; + } + + NSMutableArray *threadArray = [NSMutableArray array]; + + for (NSDictionary *threadDetails in threads) { + NSMutableArray *frameArray = [NSMutableArray array]; + + for (NSNumber *pc in [threadDetails objectForKey:@"stacktrace"]) { + FIRCLSStackFrame *frame = [FIRCLSStackFrame stackFrameWithAddress:[pc unsignedIntegerValue]]; + + [frameArray addObject:frame]; + } + + [threadArray addObject:frameArray]; + } + + return threadArray; +} + +- (BOOL)symbolicateFile:(NSString *)path withResolver:(FIRCLSSymbolResolver *)resolver { + NSArray *threadArray = [self threadArrayFromFile:path]; + if (!threadArray) { + return NO; + } + + FIRCLSSymbolicationOperation *symbolicationOp = [[FIRCLSSymbolicationOperation alloc] init]; + [symbolicationOp setThreadArray:threadArray]; + [symbolicationOp setSymbolResolver:resolver]; + + FIRCLSDemangleOperation *demangleOp = [[FIRCLSDemangleOperation alloc] init]; + [demangleOp setThreadArray:threadArray]; + + FIRCLSSerializeSymbolicatedFramesOperation *serializeOp = + [[FIRCLSSerializeSymbolicatedFramesOperation alloc] init]; + [serializeOp setThreadArray:threadArray]; + [serializeOp setOutputPath:[path stringByAppendingPathExtension:@"symbolicated"]]; + + [symbolicationOp start]; + [demangleOp start]; + [serializeOp start]; + + return YES; +} + +- (void)main { + if (![self.symbolResolver loadBinaryImagesFromFile:self.binaryImagePath]) { + return; + } + + [self.report enumerateSymbolicatableFilesInContent:^(NSString *path) { + [self symbolicateFile:path withResolver:self.symbolResolver]; + }]; +} + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h new file mode 100644 index 000000000000..b26b87cd7a07 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h @@ -0,0 +1,24 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSThreadArrayOperation.h" + +@interface FIRCLSDemangleOperation : FIRCLSThreadArrayOperation + ++ (NSString *)demangleSymbol:(const char *)symbol; ++ (NSString *)demangleCppSymbol:(const char *)symbol; + +- (NSString *)demangleSymbol:(const char *)symbol; + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm new file mode 100644 index 000000000000..182f7a018493 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm @@ -0,0 +1,96 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDemangleOperation.h" +#include "FIRCLSStackFrame.h" + +#import + +@implementation FIRCLSDemangleOperation + ++ (NSString *)demangleSymbol:(const char *)symbol { + if (!symbol) { + return nil; + } + + if (strncmp(symbol, "_Z", 2) == 0) { + return [self demangleCppSymbol:symbol]; + } else if (strncmp(symbol, "__Z", 3) == 0) { + return [self demangleBlockInvokeCppSymbol:symbol]; + } + + return nil; +} + ++ (NSString *)demangleBlockInvokeCppSymbol:(const char *)symbol { + NSString *string = [NSString stringWithUTF8String:symbol]; + + // search backwards, because this string should be at the end + NSRange range = [string rangeOfString:@"_block_invoke" options:NSBackwardsSearch]; + + if (range.location == NSNotFound) { + return nil; + } + + // we need at least a "_Z..." for a valid C++ symbol, so make sure of that + if (range.location < 5) { + return nil; + } + + // extract the mangled C++ symbol from the string + NSString *cppSymbol = [string substringWithRange:NSMakeRange(1, range.location - 1)]; + cppSymbol = [self demangleSymbol:[cppSymbol UTF8String]]; + if (!cppSymbol) { + return nil; + } + + // extract out just the "_block_invoke..." part + string = + [string substringWithRange:NSMakeRange(range.location, [string length] - range.location)]; + + // and glue that onto the end + return [cppSymbol stringByAppendingString:string]; +} + ++ (NSString *)demangleCppSymbol:(const char *)symbol { + int status; + char *buffer = NULL; + + buffer = __cxxabiv1::__cxa_demangle(symbol, buffer, NULL, &status); + if (!buffer) { + return nil; + } + + NSString *result = [NSString stringWithUTF8String:buffer]; + + free(buffer); + + return result; +} + +- (NSString *)demangleSymbol:(const char *)symbol { + return [[self class] demangleSymbol:symbol]; +} + +- (void)main { + [self enumerateFramesWithBlock:^(FIRCLSStackFrame *frame) { + NSString *demangedSymbol = [self demangleSymbol:[[frame rawSymbol] UTF8String]]; + + if (demangedSymbol) { + [frame setSymbol:demangedSymbol]; + } + }]; +} + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h new file mode 100644 index 000000000000..b73c67cdc28c --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h @@ -0,0 +1,21 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSThreadArrayOperation.h" + +@interface FIRCLSSerializeSymbolicatedFramesOperation : FIRCLSThreadArrayOperation + +@property(nonatomic, copy) NSString *outputPath; + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m new file mode 100644 index 000000000000..6b2b79b7466c --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m @@ -0,0 +1,63 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSerializeSymbolicatedFramesOperation.h" + +#import "FIRCLSFile.h" +#import "FIRCLSLogger.h" +#import "FIRCLSStackFrame.h" + +@implementation FIRCLSSerializeSymbolicatedFramesOperation + +- (void)main { + FIRCLSFile file; + + // Make sure not to open in append mode, so we can overwrite any pre-existing symbolication + // files. + if (!FIRCLSFileInitWithPathMode(&file, [self.outputPath fileSystemRepresentation], false, + false)) { + FIRCLSErrorLog(@"Failed to create output file"); + return; + } + + FIRCLSFileWriteSectionStart(&file, "threads"); + FIRCLSFileWriteArrayStart(&file); + + for (NSArray *frameArray in self.threadArray) { + FIRCLSFileWriteArrayStart(&file); + + for (FIRCLSStackFrame *frame in frameArray) { + FIRCLSFileWriteHashStart(&file); + FIRCLSFileWriteHashEntryString(&file, "symbol", [[frame symbol] UTF8String]); + + // only include this field if it is present and different + if (![[frame rawSymbol] isEqualToString:[frame symbol]]) { + FIRCLSFileWriteHashEntryString(&file, "raw_symbol", [[frame rawSymbol] UTF8String]); + } + + FIRCLSFileWriteHashEntryUint64(&file, "offset", [frame offset]); + FIRCLSFileWriteHashEntryString(&file, "library", [[frame library] UTF8String]); + + FIRCLSFileWriteHashEnd(&file); + } + + FIRCLSFileWriteArrayEnd(&file); + } + + FIRCLSFileWriteArrayEnd(&file); + FIRCLSFileWriteSectionEnd(&file); + FIRCLSFileClose(&file); +} + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h new file mode 100644 index 000000000000..7c63e20e9b1b --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h @@ -0,0 +1,23 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSThreadArrayOperation.h" + +@class FIRCLSSymbolResolver; + +@interface FIRCLSSymbolicationOperation : FIRCLSThreadArrayOperation + +@property(nonatomic, strong) FIRCLSSymbolResolver *symbolResolver; + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m new file mode 100644 index 000000000000..e2988b2d4b8e --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m @@ -0,0 +1,28 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSymbolicationOperation.h" + +#import "FIRCLSStackFrame.h" +#import "FIRCLSSymbolResolver.h" + +@implementation FIRCLSSymbolicationOperation + +- (void)main { + [self enumerateFramesWithBlock:^(FIRCLSStackFrame *frame) { + [self.symbolResolver updateStackFrame:frame]; + }]; +} + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h new file mode 100644 index 000000000000..e223523ffffa --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h @@ -0,0 +1,25 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSStackFrame; + +@interface FIRCLSThreadArrayOperation : NSOperation + +@property(nonatomic, strong) NSArray *threadArray; + +- (void)enumerateFramesWithBlock:(void (^)(FIRCLSStackFrame *frame))block; + +@end diff --git a/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m new file mode 100644 index 000000000000..96c732776267 --- /dev/null +++ b/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m @@ -0,0 +1,33 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSThreadArrayOperation.h" + +#import "FIRCLSStackFrame.h" + +@implementation FIRCLSThreadArrayOperation + +- (void)enumerateFramesWithBlock:(void (^)(FIRCLSStackFrame *frame))block { + for (NSArray *frameArray in self.threadArray) { + for (FIRCLSStackFrame *frame in frameArray) { + block(frame); + + if ([self isCancelled]) { + break; + } + } + } +} + +@end diff --git a/Crashlytics/Crashlytics/Public/FIRCrashlytics.h b/Crashlytics/Crashlytics/Public/FIRCrashlytics.h new file mode 100644 index 000000000000..16a442416ade --- /dev/null +++ b/Crashlytics/Crashlytics/Public/FIRCrashlytics.h @@ -0,0 +1,173 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * The Firebase Crashlytics API provides methods to annotate and manage fatal and + * non-fatal reports captured and reported to Firebase Crashlytics. + * + * By default, Firebase Crashlytics is initialized with `[FIRApp configure]`. + * + * Note: The Crashlytics class cannot be subclassed. If this makes testing difficult, + * we suggest using a wrapper class or a protocol extension. + */ +NS_SWIFT_NAME(Crashlytics) +@interface FIRCrashlytics : NSObject + +/** :nodoc: */ +- (instancetype)init NS_UNAVAILABLE; + +/** + * Accesses the singleton Crashlytics instance. + * + * @return The singleton Crashlytics instance. + */ ++ (instancetype)crashlytics NS_SWIFT_NAME(crashlytics()); + +/** + * Adds logging that is sent with your crash data. The logging does not appear in the + * system.log and is only visible in the Crashlytics dashboard. + * + * @param msg Message to log + */ +- (void)log:(NSString *)msg; + +/** + * Adds logging that is sent with your crash data. The logging does not appear in the + * system.log and is only visible in the Crashlytics dashboard. + * + * @param format Format of string + * @param ... A comma-separated list of arguments to substitute into format + */ +- (void)logWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); + +/** + * Adds logging that is sent with your crash data. The logging does not appear in the + * system.log and is only visible in the Crashlytics dashboard. + * + * @param format Format of string + * @param args Arguments to substitute into format + */ +- (void)logWithFormat:(NSString *)format + arguments:(va_list)args NS_SWIFT_NAME(log(format:arguments:)); + +/** + * Sets a custom key and value to be associated with subsequent fatal and non-fatal reports. + * When setting an object value, the object is converted to a string. This is + * typically done by calling "-[NSObject description]". + * + * @param value The value to be associated with the key + * @param key A unique key + */ +- (void)setCustomValue:(id)value forKey:(NSString *)key; + +/** + * Records a user ID (identifier) that's associated with subsequent fatal and non-fatal reports. + * + * If you want to associate a crash with a specific user, we recommend specifying an arbitrary + * string (e.g., a database, ID, hash, or other value that you can index and query, but is + * meaningless to a third-party observer). This allows you to facilitate responses for support + * requests and reach out to users for more information. + * + * @param userID An arbitrary user identifier string that associates a user to a record in your + * system. + */ +- (void)setUserID:(NSString *)userID; + +/** + * + * Records a non-fatal event described by an NSError object. The events are + * grouped and displayed similarly to crashes. Keep in mind that this method can be expensive. + * The total number of NSErrors that can be recorded during your app's life-cycle is limited by a + * fixed-size circular buffer. If the buffer is overrun, the oldest data is dropped. Errors are + * relayed to Crashlytics on a subsequent launch of your application. + * + * @param error Non-fatal error to be recorded + */ +- (void)recordError:(NSError *)error NS_SWIFT_NAME(record(error:)); + +/** + * Returns whether the app crashed during the previous execution. + */ +- (BOOL)didCrashDuringPreviousExecution; + +/** + * Enables/disables automatic data collection. + * + * Calling this method overrides both the FirebaseCrashlyticsCollectionEnabled flag in your + * App's Info.plist and FIRApp's isDataCollectionDefaultEnabled flag. + * + * When you set a value for this method, it persists across runs of the app. + * + * The value does not apply until the next run of the app. If you want to disable data + * collection without rebooting, add the FirebaseCrashlyticsCollectionEnabled flag to your app's + * Info.plist. + * * + * @param enabled Determines whether automatic data collection is enabled + */ +- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled; + +/** + * Indicates whether or not automatic data collection is enabled + * + * This method uses three ways to decide whether automatic data collection is enabled, + * in order of priority: + * - If setCrashlyticsCollectionEnabled iscalled with a value, use it + * - If the FirebaseCrashlyticsCollectionEnabled key is in your app's Info.plist, use it + * - Otherwise, use the default isDataCollectionDefaultEnabled in FIRApp + */ +- (BOOL)isCrashlyticsCollectionEnabled; + +/** + * Determines whether there are any unsent crash reports cached on the device, then calls the given + * callback. + * + * The callback only executes if automatic data collection is disabled. You can use + * the callback to get one-time consent from a user upon a crash, and then call + * sendUnsentReports or deleteUnsentReports, depending on whether or not the user gives consent. + * + * Disable automatic collection by: + * - Adding the FirebaseCrashlyticsCollectionEnabled: NO key to your App's Info.plist + * - Calling [[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:NO] in your app + * - Setting FIRApp's isDataCollectionDefaultEnabled to NO + * + * @param completion The callback that's executed once Crashlytics finishes checking for unsent + * reports. The callback is set to YES if there are unsent reports on disk. + */ +- (void)checkForUnsentReportsWithCompletion:(void (^)(BOOL))completion + NS_SWIFT_NAME(checkForUnsentReports(completion:)); + +/** + * Enqueues any unsent reports on the device to upload to Crashlytics. + * + * This method only applies if automatic data collection is disabled. + * + * When automatic data collection is enabled, Crashlytics automatically uploads and deletes reports + * at startup, so this method is ignored. + */ +- (void)sendUnsentReports; + +/** + * Deletes any unsent reports on the device. + * + * This method only applies if automatic data collection is disabled. + */ +- (void)deleteUnsentReports; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h b/Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h new file mode 100644 index 000000000000..d85680b00596 --- /dev/null +++ b/Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h @@ -0,0 +1,17 @@ +/* + * Copyright 2019 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FIRCrashlytics.h" diff --git a/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h b/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h new file mode 100644 index 000000000000..8c818c9feb26 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h @@ -0,0 +1,54 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import "FBLPromise.h" + +@class FIRCLSApplicationIdentifierModel; +@class FIRCLSDataCollectionToken; +@class FIRCLSFileManager; +@class FIRCLSInstallIdentifierModel; +@class FIRCLSSettings; + +NS_ASSUME_NONNULL_BEGIN + +/** + * Use this class to retrieve remote settings for the application from crashlytics backend, and + * onboard the application on the server. + */ +@interface FIRCLSSettingsOnboardingManager : NSObject + +/** + * Designated Initializer. + */ +- (instancetype)initWithAppIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel + installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel + settings:(FIRCLSSettings *)settings + fileManager:(FIRCLSFileManager *)fileManager + googleAppID:(NSString *)googleAppID NS_DESIGNATED_INITIALIZER; +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * This method kicks off downloading settings and onboarding for the app. + * @param googleAppID (required) GMP id for the app. + * @param token (required) Data collection token signifying we can make network calls + */ +- (void)beginSettingsAndOnboardingWithGoogleAppId:(NSString *)googleAppID + token:(FIRCLSDataCollectionToken *)token; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m b/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m new file mode 100644 index 000000000000..d0f017effed6 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m @@ -0,0 +1,229 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSettingsOnboardingManager.h" + +#import "FIRCLSApplicationIdentifierModel.h" +#import "FIRCLSConstants.h" +#import "FIRCLSDataCollectionToken.h" +#import "FIRCLSDefines.h" +#import "FIRCLSDownloadAndSaveSettingsOperation.h" +#import "FIRCLSFABNetworkClient.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSInstallIdentifierModel.h" +#import "FIRCLSLogger.h" +#import "FIRCLSOnboardingOperation.h" +#import "FIRCLSSettings.h" +#import "FIRCLSURLBuilder.h" + +@interface FIRCLSSettingsOnboardingManager () + +@property(nonatomic, strong) FIRCLSApplicationIdentifierModel *appIDModel; +@property(nonatomic, strong) FIRCLSInstallIdentifierModel *installIDModel; + +@property(nonatomic, strong) FIRCLSSettings *settings; + +@property(nonatomic, nullable, strong) FIRCLSOnboardingOperation *onboardingOperation; +@property(nonatomic, strong) FIRCLSFileManager *fileManager; + +// set to YES once onboarding call has been made. +@property(nonatomic) BOOL hasAttemptedAppConfigure; + +@property(nonatomic) NSDictionary *configuration; +@property(nonatomic) NSDictionary *defaultConfiguration; +@property(nonatomic, copy) NSString *googleAppID; +@property(nonatomic, copy) NSDictionary *kitVersionsByKitBundleIdentifier; +@property(nonatomic, readonly) FIRCLSFABNetworkClient *networkClient; + +@end + +@implementation FIRCLSSettingsOnboardingManager + +- (instancetype)initWithAppIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel + installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel + settings:(FIRCLSSettings *)settings + fileManager:(FIRCLSFileManager *)fileManager + googleAppID:(NSString *)googleAppID { + self = [super init]; + if (!self) { + return nil; + } + + _appIDModel = appIDModel; + _installIDModel = installIDModel; + _settings = settings; + _fileManager = fileManager; + _googleAppID = googleAppID; + + _networkClient = [[FIRCLSFABNetworkClient alloc] initWithQueue:nil]; + + return self; +} + +- (void)beginSettingsAndOnboardingWithGoogleAppId:(NSString *)googleAppID + token:(FIRCLSDataCollectionToken *)token { + NSParameterAssert(googleAppID); + + self.googleAppID = googleAppID; + + // This map helps us determine what versions of the SDK + // are out there. We're keeping the Fabric value in there for + // backwards compatibility + // TODO(b/141747635) + self.kitVersionsByKitBundleIdentifier = @{ + FIRCLSApplicationGetSDKBundleID() : @CLS_SDK_DISPLAY_VERSION, + }; + + [self beginSettingsDownload:token]; +} + +#pragma mark Helper methods + +/** + * Makes a settings download request. If the request fails, the error is handled silently(with a log + * statement). If the server response indicates onboarding is needed, an onboarding request is sent + * to the server. If the onboarding request fails, the error is handled silently(with a log + * statement). + */ +- (void)beginSettingsDownload:(FIRCLSDataCollectionToken *)token { + FIRCLSDownloadAndSaveSettingsOperation *operation = nil; + operation = [[FIRCLSDownloadAndSaveSettingsOperation alloc] + initWithGoogleAppID:self.googleAppID + delegate:self + settingsURL:self.settingsURL + settingsDirectoryPath:self.fileManager.settingsDirectoryPath + settingsFilePath:self.fileManager.settingsFilePath + installIDModel:self.installIDModel + networkClient:self.networkClient + token:token]; + + [operation startWithToken:token]; +} + +- (void)beginOnboarding:(BOOL)appCreate + endpointString:(NSString *)endpoint + token:(FIRCLSDataCollectionToken *)token { + [self.onboardingOperation cancel]; + + self.onboardingOperation = + [[FIRCLSOnboardingOperation alloc] initWithDelegate:self + shouldCreate:appCreate + googleAppID:self.googleAppID + kitVersionsByKitBundleIdentifier:self.kitVersionsByKitBundleIdentifier + appIdentifierModel:self.appIDModel + endpointString:endpoint + networkClient:self.networkClient + token:token + settings:self.settings]; + + [self.onboardingOperation startWithToken:token]; +} + +- (void)finishNetworkingSession { + [self.networkClient invalidateAndCancel]; +} + +#pragma mark FIRCLSOnboardingOperationDelegate methods + +- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation + didCompleteAppCreationWithError:(nullable NSError *)error { + if (error) { + FIRCLSErrorLog(@"Unable to complete application configure: %@", error); + [self finishNetworkingSession]; + return; + } + self.onboardingOperation = nil; + FIRCLSDebugLog(@"Completed configure"); + + // now, go get settings, as they can change (and it completes the onboarding process) + [self beginSettingsDownload:operation.token]; +} + +- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation + didCompleteAppUpdateWithError:(nullable NSError *)error { + [self finishNetworkingSession]; + if (error) { + FIRCLSErrorLog(@"Unable to complete application update: %@", error); + return; + } + self.onboardingOperation = nil; + FIRCLSDebugLog(@"Completed application update"); +} + +#pragma mark FIRCLSDownloadAndSaveSettingsOperationDelegate methods + +- (void)operation:(FIRCLSDownloadAndSaveSettingsOperation *)operation + didDownloadAndSaveSettingsWithError:(nullable NSError *)error { + if (error) { + FIRCLSErrorLog(@"Failed to download settings %@", error); + [self finishNetworkingSession]; + return; + } + + FIRCLSDebugLog(@"Settings downloaded successfully"); + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:self.googleAppID currentTimestamp:currentTimestamp]; + + // only try this once + if (self.hasAttemptedAppConfigure) { + FIRCLSDebugLog(@"App already onboarded in this run of the app"); + [self finishNetworkingSession]; + return; + } + + // Onboarding is still needed in Firebase, here are the backend app states - + // 1. When the app is created in the Firebase console, app state: built (client settings call + // returns app status: new) + // 2. After onboarding call is made, app state: build_configured + // 3. Another settings call is triggered after onboarding, app state: activated + if ([self.settings appNeedsOnboarding]) { + FIRCLSDebugLog(@"Starting onboarding with app create"); + self.hasAttemptedAppConfigure = YES; + [self beginOnboarding:YES endpointString:FIRCLSConfigureEndpoint token:operation.token]; + return; + } + + if ([self.settings appUpdateRequired]) { + FIRCLSDebugLog(@"Starting onboarding with app update"); + self.hasAttemptedAppConfigure = YES; + [self beginOnboarding:NO endpointString:FIRCLSConfigureEndpoint token:operation.token]; + return; + } + + // we're all set! + [self finishNetworkingSession]; +} + +- (NSURL *)settingsURL { + // GET + // /spi/v2/platforms/:platform/apps/:identifier/settings?build_version=1234&display_version=abc&instance=xyz&source=1 + FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:FIRCLSSettingsEndpoint]; + + [url appendComponent:@"/spi/v2/platforms/"]; + [url escapeAndAppendComponent:self.appIDModel.platform]; + [url appendComponent:@"/gmp/"]; + [url escapeAndAppendComponent:self.googleAppID]; + [url appendComponent:@"/settings"]; + + [url appendValue:self.appIDModel.buildVersion forQueryParam:@"build_version"]; + [url appendValue:self.appIDModel.displayVersion forQueryParam:@"display_version"]; + [url appendValue:self.appIDModel.buildInstanceID forQueryParam:@"instance"]; + [url appendValue:@(self.appIDModel.installSource) forQueryParam:@"source"]; + // TODO: find the right param name for KitVersions and add them here + return url.URL; +} + +@end diff --git a/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h b/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h new file mode 100644 index 000000000000..b229e6996d29 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h @@ -0,0 +1,64 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import "FIRCLSApplication.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * This class is a model for identifiers related to the application binary. + * It is thread-safe. + */ +@interface FIRCLSApplicationIdentifierModel : NSObject + +@property(nonatomic, readonly, nullable) NSString* bundleID; + +/** + * Returns the user-facing app name + */ +@property(nonatomic, readonly, nullable) NSString* displayName; + +@property(nonatomic, readonly, nullable) NSString* platform; +@property(nonatomic, readonly, nullable) NSString* buildVersion; +@property(nonatomic, readonly, nullable) NSString* displayVersion; +@property(nonatomic, readonly) FIRCLSApplicationInstallationSourceType installSource; + +/** + * A mapping between all supported architectures and their UUIDs + */ +@property(nonatomic, readonly) NSDictionary* architectureUUIDMap; + +/** + * Returns the linked OS SDK + */ +@property(nonatomic, readonly) NSString* builtSDKString; + +/** + * Returns the min supported OS + */ +@property(nonatomic, readonly) NSString* minimumSDKString; + +/** + * The unique identifier for this instance of the version of app running Crashlytics. This is + * computed by hashing the app itself. + * + * On Android, this is called the Build ID + */ +@property(nonatomic, readonly) NSString* buildInstanceID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m b/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m new file mode 100644 index 000000000000..81a8631c9f9f --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m @@ -0,0 +1,134 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSApplicationIdentifierModel.h" + +#import "FIRCLSApplication.h" +#import "FIRCLSByteUtility.h" +#import "FIRCLSDefines.h" +#import "FIRCLSMachO.h" +#import "FIRCLSUUID.h" + +@interface FIRCLSApplicationIdentifierModel () + +@property(nonatomic, copy, readwrite) NSDictionary *architectureUUIDMap; +@property(nonatomic, copy, readwrite) NSString *buildInstanceID; +@property(nonatomic, readonly) FIRCLSMachOVersion builtSDK; +@property(nonatomic, readonly) FIRCLSMachOVersion minimumSDK; + +@end + +@implementation FIRCLSApplicationIdentifierModel + +- (nullable instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + if (![self computeExecutableInfo]) { + return nil; + } + + [self computeInstanceIdentifier]; + + return self; +} + +- (NSString *)bundleID { + return FIRCLSApplicationGetBundleIdentifier(); +} + +- (NSString *)displayName { + return FIRCLSApplicationGetName(); +} + +- (NSString *)platform { + return FIRCLSApplicationGetPlatform(); +} + +- (NSString *)buildVersion { + return FIRCLSApplicationGetBundleVersion(); +} + +- (NSString *)displayVersion { + return FIRCLSApplicationGetShortBundleVersion(); +} + +- (FIRCLSApplicationInstallationSourceType)installSource { + return FIRCLSApplicationInstallationSource(); +} + +- (NSString *)builtSDKString { + return FIRCLSMachOFormatVersion(&_builtSDK); +} + +- (NSString *)minimumSDKString { + return FIRCLSMachOFormatVersion(&_minimumSDK); +} + +- (BOOL)computeExecutableInfo { + struct FIRCLSMachOFile file; + + if (!FIRCLSMachOFileInitWithCurrent(&file)) { + return NO; + } + + NSMutableDictionary *executables = [NSMutableDictionary dictionary]; + + FIRCLSMachOFileEnumerateSlices(&file, ^(FIRCLSMachOSliceRef fileSlice) { + NSString *arch; + + arch = [NSString stringWithUTF8String:FIRCLSMachOSliceGetArchitectureName(fileSlice)]; + + FIRCLSMachOSliceEnumerateLoadCommands( + fileSlice, ^(uint32_t type, uint32_t size, const struct load_command *cmd) { + if (type == LC_UUID) { + const uint8_t *uuid; + + uuid = FIRCLSMachOGetUUID(cmd); + + [executables setObject:FIRCLSUUIDToNSString(uuid) forKey:arch]; + } else if (type == LC_VERSION_MIN_MACOSX || type == LC_VERSION_MIN_IPHONEOS) { + self->_minimumSDK = FIRCLSMachOGetMinimumOSVersion(cmd); + self->_builtSDK = FIRCLSMachOGetLinkedSDKVersion(cmd); + } + }); + }); + + FIRCLSMachOFileDestroy(&file); + + _architectureUUIDMap = executables; + + return YES; +} + +- (void)computeInstanceIdentifier { + // build up the components of the instance identifier + NSMutableString *string = [NSMutableString string]; + + // first, the uuids, sorted by architecture name + for (NSString *key in + [[_architectureUUIDMap allKeys] sortedArrayUsingSelector:@selector(compare:)]) { + [string appendString:[self.architectureUUIDMap objectForKey:key]]; + } + + // TODO: the instance identifier calculation needs to match Beta's expectation. So, we have to + // continue generating a less-correct value for now. One day, we should encorporate a hash of the + // Info.plist and icon data. + + _buildInstanceID = FIRCLSHashNSData([string dataUsingEncoding:NSUTF8StringEncoding]); +} + +@end diff --git a/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h new file mode 100644 index 000000000000..318089ff9359 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h @@ -0,0 +1,80 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "FIRCLSNetworkOperation.h" + +@class FIRCLSDownloadAndSaveSettingsOperation; +@class FIRCLSFABNetworkClient; +@class FIRCLSInstallIdentifierModel; + +NS_ASSUME_NONNULL_BEGIN + +/** + * This is the protocol that a delegate of FIRCLSDownloadAndSaveSettingsOperation needs to follow. + */ +@protocol FIRCLSDownloadAndSaveSettingsOperationDelegate + +@required + +/** + * Method that is called when settings have been downloaded and saved, or an error has occurred + * during the operation. This method may be called on an arbitrary background thread. + */ +- (void)operation:(FIRCLSDownloadAndSaveSettingsOperation *)operation + didDownloadAndSaveSettingsWithError:(nullable NSError *)error; + +@end + +/** + * This operation downloads settings from the backend servers, and saves them in file on disk. + */ +@interface FIRCLSDownloadAndSaveSettingsOperation : FIRCLSNetworkOperation + +- (instancetype)initWithGoogleAppID:(NSString *)googleAppID + token:(FIRCLSDataCollectionToken *)token NS_UNAVAILABLE; + +/** + * @param googleAppID must NOT be nil + * @param delegate gets a callback after settings have been downloaded or an error occurs. + * @param settingsURL must NOT be nil. This is the URL to which a download request is made. + * @param settingsDirectoryPath must NOT be nil. This is the directory on disk where the settings + * are persisted. + * @param settingsFilePath must NOT be nil. It is the full file path(including file name) in which + * settings will be persisted on disk. + * @param installIDModel must NOT be nil. This value is sent back to the backend to uniquely + * identify the app install. + */ +- (instancetype)initWithGoogleAppID:(NSString *)googleAppID + delegate:(id)delegate + settingsURL:(NSURL *)settingsURL + settingsDirectoryPath:(NSString *)settingsDirectoryPath + settingsFilePath:(NSString *)settingsFilePath + installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel + networkClient:(FIRCLSFABNetworkClient *)networkClient + token:(FIRCLSDataCollectionToken *)token NS_DESIGNATED_INITIALIZER; + +/** + * Delegate of this operation. + */ +@property(nonatomic, readonly, weak) id delegate; + +/** + * When an error occurs during this operation, it is made available in this property. + */ +@property(nonatomic, readonly) NSError *error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m new file mode 100644 index 000000000000..9d32f91509c9 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m @@ -0,0 +1,132 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSDownloadAndSaveSettingsOperation.h" + +#import "FIRCLSConstants.h" +#import "FIRCLSFABHost.h" +#import "FIRCLSFABNetworkClient.h" +#import "FIRCLSInstallIdentifierModel.h" +#import "FIRCLSLogger.h" + +@interface FIRCLSDownloadAndSaveSettingsOperation () + +/** + * Method called to fetch the URL from where settings have to be downloaded. + */ +@property(readonly, nonatomic) NSURL *settingsURL; +/** + * File manager which will be used to save settings on disk. + */ +@property(readonly, nonatomic) NSFileManager *fileManager; + +/** + * Directory path on which settings file will be saved + */ +@property(readonly, nonatomic) NSString *settingsDirectoryPath; +/** + * Complete file path on which settings file will be saved + */ +@property(readonly, nonatomic) NSString *settingsFilePath; +/** + * App install identifier. + */ +@property(strong, readonly, nonatomic) FIRCLSInstallIdentifierModel *installIDModel; + +@property(weak, readonly, nonatomic) FIRCLSFABNetworkClient *networkClient; + +@end + +@implementation FIRCLSDownloadAndSaveSettingsOperation + +- (instancetype)initWithGoogleAppID:(NSString *)googleAppID + delegate:(id)delegate + settingsURL:(NSURL *)settingsURL + settingsDirectoryPath:(NSString *)settingsDirectoryPath + settingsFilePath:(NSString *)settingsFilePath + installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel + networkClient:(FIRCLSFABNetworkClient *)networkClient + token:(FIRCLSDataCollectionToken *)token { + NSParameterAssert(settingsURL); + NSParameterAssert(settingsDirectoryPath); + NSParameterAssert(settingsFilePath); + NSParameterAssert(installIDModel); + + self = [super initWithGoogleAppID:googleAppID token:token]; + if (self) { + _delegate = delegate; + _settingsURL = settingsURL.copy; + _settingsDirectoryPath = settingsDirectoryPath.copy; + _settingsFilePath = settingsFilePath.copy; + _fileManager = [[NSFileManager alloc] init]; + _installIDModel = installIDModel; + _networkClient = networkClient; + } + return self; +} + +- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:(NSURL *)url { + NSMutableURLRequest *request = + [super mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:url]; + request.HTTPMethod = @"GET"; + [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; + [request setValue:self.installIDModel.installID + forHTTPHeaderField:@"X-Crashlytics-Installation-ID"]; + [request setValue:FIRCLSHostModelInfo() forHTTPHeaderField:@"X-Crashlytics-Device-Model"]; + [request setValue:FIRCLSHostOSBuildVersion() + forHTTPHeaderField:@"X-Crashlytics-OS-Build-Version"]; + [request setValue:FIRCLSHostOSDisplayVersion() + forHTTPHeaderField:@"X-Crashlytics-OS-Display-Version"]; + [request setValue:FIRCLSVersion forHTTPHeaderField:@"X-Crashlytics-API-Client-Version"]; + + return request; +} + +- (void)main { + NSMutableURLRequest *request = + [self mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:self.settingsURL]; + + [self.networkClient + startDownloadTaskWithRequest:request + retryLimit:1 + completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { + if (error) { + self->_error = error; + [self.delegate operation:self didDownloadAndSaveSettingsWithError:self.error]; + [self finishWithError:error]; + return; + } + // This move needs to happen synchronously, because after this method completes, + // the file will not be available. + NSError *moveError = nil; + + // this removal will frequently fail, and we don't want the warning + [self.fileManager removeItemAtPath:self.settingsDirectoryPath error:nil]; + + [self.fileManager createDirectoryAtPath:self.settingsDirectoryPath + withIntermediateDirectories:YES + attributes:nil + error:nil]; + if (![self.fileManager moveItemAtPath:location.path + toPath:self.settingsFilePath + error:&moveError]) { + FIRCLSErrorLog(@"Unable to complete settings download %@", moveError); + self->_error = moveError; + } + [self.delegate operation:self didDownloadAndSaveSettingsWithError:self.error]; + [self finishWithError:self.error]; + }]; +} + +@end diff --git a/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h new file mode 100644 index 000000000000..a449903f7a17 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h @@ -0,0 +1,55 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "FIRCLSOperation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class FIRCLSDataCollectionToken; +@class FIRCLSSettings; + +/** + * This is a base class for network based operations. + */ +@interface FIRCLSNetworkOperation : FIRCLSFABAsyncOperation + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * Designated initializer. All parameters are mandatory and must not be nil. + */ +- (instancetype)initWithGoogleAppID:(NSString *)googleAppID + token:(FIRCLSDataCollectionToken *)token NS_DESIGNATED_INITIALIZER; + +- (void)start NS_UNAVAILABLE; +- (void)startWithToken:(FIRCLSDataCollectionToken *)token; + +/** + * Creates a mutable request for posting to Crashlytics backend with a default timeout. + */ +- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:(NSURL *)url; + +/** + * Creates a mutable request for posting to Crashlytics backend with given timeout. + */ +- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeadersForURL:(NSURL *)url + timeout:(NSTimeInterval)timeout; + +@property(nonatomic, strong, readonly) FIRCLSDataCollectionToken *token; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m new file mode 100644 index 000000000000..52b77c19c24b --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m @@ -0,0 +1,92 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSNetworkOperation.h" + +#import "FIRCLSApplication.h" +#import "FIRCLSConstants.h" +#import "FIRCLSDataCollectionToken.h" +#import "FIRCLSDefines.h" +#import "FIRCLSLogger.h" + +@interface FIRCLSNetworkOperation () + +@property(nonatomic, strong, readonly) NSString *googleAppID; + +@end + +@implementation FIRCLSNetworkOperation + +- (instancetype)initWithGoogleAppID:(NSString *)googleAppID + token:(FIRCLSDataCollectionToken *)token { + NSParameterAssert(googleAppID); + if (!googleAppID) { + return nil; + } + + self = [super init]; + if (self) { + _googleAppID = googleAppID; + _token = token; + } + return self; +} + +- (void)startWithToken:(FIRCLSDataCollectionToken *)token { + // Settings and Onboarding are considered data collection, so we must only + // call this with a valid token + if (![token isValid]) { + FIRCLSErrorLog(@"Skipping network operation with invalid data collection token"); + return; + } + + [super start]; +} + +- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:(NSURL *)url { + return [self mutableRequestWithDefaultHTTPHeadersForURL:url timeout:10.0]; +} + +- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeadersForURL:(NSURL *)url + timeout:(NSTimeInterval)timeout { + NSMutableURLRequest *request = + [NSMutableURLRequest requestWithURL:url + cachePolicy:NSURLRequestReloadIgnoringLocalCacheData + timeoutInterval:timeout]; + + NSString *localeId = self.localeIdentifier; + + [request setValue:self.userAgentString forHTTPHeaderField:FIRCLSNetworkUserAgent]; + [request setValue:FIRCLSNetworkUTF8 forHTTPHeaderField:FIRCLSNetworkAcceptCharset]; + [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkAcceptLanguage]; + [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkContentLanguage]; + [request setValue:FIRCLSDeveloperToken forHTTPHeaderField:FIRCLSNetworkCrashlyticsDeveloperToken]; + [request setValue:FIRCLSApplicationGetSDKBundleID() + forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientId]; + [request setValue:FIRCLSVersion + forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientDisplayVersion]; + [request setValue:self.googleAppID forHTTPHeaderField:FIRCLSNetworkCrashlyticsGoogleAppId]; + + return request; +} + +- (NSString *)userAgentString { + return [NSString stringWithFormat:@"%@/%@", FIRCLSApplicationGetSDKBundleID(), FIRCLSVersion]; +} + +- (NSString *)localeIdentifier { + return NSLocale.currentLocale.localeIdentifier; +} + +@end diff --git a/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h new file mode 100644 index 000000000000..14d56ed64559 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h @@ -0,0 +1,84 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "FIRCLSApplicationIdentifierModel.h" +#import "FIRCLSDataCollectionToken.h" +#import "FIRCLSNetworkOperation.h" + +NS_ASSUME_NONNULL_BEGIN + +extern NSString *const FIRCLSOnboardingErrorDomain; + +@class FIRCLSOnboardingOperation; +@class FIRCLSFABNetworkClient; +@class FIRCLSSettings; + +/** + * This is the protocol that a delegate of FIRCLSOnboardingOperation should follow. + */ +@protocol FIRCLSOnboardingOperationDelegate +@required + +/** + * This callback is for the delegate to know that app update has completed with/without an error. + */ +- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation + didCompleteAppUpdateWithError:(nullable NSError *)error; +/** + * This callback is for the delegate to know that app creation has completed with/without an error. + */ +- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation + didCompleteAppCreationWithError:(nullable NSError *)error; + +@end + +/** + * This class onboards the app, by making request to the backend servers. + */ +@interface FIRCLSOnboardingOperation : FIRCLSNetworkOperation + +/** + * When an error occurs during this operation, it is made available in this property. + */ +@property(nonatomic, readonly) NSError *error; + +- (instancetype)initWithGoogleAppID:(NSString *)googleAppID + token:(FIRCLSDataCollectionToken *)token NS_UNAVAILABLE; + +/** + * Designated initializer. + * @param delegate may be nil. Gets callbacks when app creation or updation succeeds or gets errored + * out. + * @param googleAppID must NOT be nil. + * @param kitVersionsByKitBundleIdentifier may be nil. Maps Kit bundle identifier to kit version + * being used in the app. + * @param appIdentifierModel must NOT be nil. Used to get information required in the onboarding + * network call. + * @param appEndPoint must NOT be nil. Endpoint which needs to be hit with the onboarding request. + * @param settings which are used to fetch the organization identifier. + */ +- (instancetype)initWithDelegate:(id)delegate + shouldCreate:(BOOL)shouldCreate + googleAppID:(NSString *)googleAppID + kitVersionsByKitBundleIdentifier:(NSDictionary *)kitVersionsByKitBundleIdentifier + appIdentifierModel:(FIRCLSApplicationIdentifierModel *)appIdentifierModel + endpointString:(NSString *)appEndPoint + networkClient:(FIRCLSFABNetworkClient *)networkClient + token:(FIRCLSDataCollectionToken *)token + settings:(FIRCLSSettings *)settings NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m new file mode 100644 index 000000000000..5f556b734d67 --- /dev/null +++ b/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m @@ -0,0 +1,208 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSOnboardingOperation.h" + +#import "FIRCLSByteUtility.h" +#import "FIRCLSConstants.h" +#import "FIRCLSFABNetworkClient.h" +#import "FIRCLSLogger.h" +#import "FIRCLSMachO.h" +#import "FIRCLSMultipartMimeStreamEncoder.h" +#import "FIRCLSSettings.h" +#import "FIRCLSURLBuilder.h" + +// The SPIv1/v2 onboarding flow looks something like this: +// - get settings +// - settings says we're good, nothing to do +// - settings says update +// - do an update +// - settings says new +// - do a create +// - get settings again (and do *not* take action after that) + +NSString *const FIRCLSOnboardingErrorDomain = @"FIRCLSOnboardingErrorDomain"; + +typedef NS_ENUM(NSInteger, FIRCLSOnboardingError) { + FIRCLSOnboardingErrorMultipartMimeConfiguration +}; + +@interface FIRCLSOnboardingOperation () + +@property(nonatomic) BOOL shouldCreate; +@property(nonatomic, readonly) FIRCLSApplicationIdentifierModel *appIdentifierModel; +@property(nonatomic, readonly) NSString *appEndpoint; +@property(nonatomic, readonly, unsafe_unretained) id delegate; +@property(nonatomic, weak, readonly) FIRCLSFABNetworkClient *networkClient; +@property(nonatomic, readonly) NSDictionary *kitVersionsByKitBundleIdentifier; +@property(nonatomic, readonly) FIRCLSSettings *settings; +@end + +@implementation FIRCLSOnboardingOperation + +#pragma mark lifecycle methods + +- (instancetype)initWithDelegate:(id)delegate + shouldCreate:(BOOL)shouldCreate + googleAppID:(NSString *)googleAppID + kitVersionsByKitBundleIdentifier:(NSDictionary *)kitVersionsByKitBundleIdentifier + appIdentifierModel:(FIRCLSApplicationIdentifierModel *)appIdentifierModel + endpointString:(NSString *)appEndPoint + networkClient:(FIRCLSFABNetworkClient *)networkClient + token:(FIRCLSDataCollectionToken *)token + settings:(FIRCLSSettings *)settings { + NSParameterAssert(appIdentifierModel); + NSParameterAssert(appEndPoint); + + self = [super initWithGoogleAppID:googleAppID token:token]; + if (self) { + _shouldCreate = shouldCreate; + _delegate = delegate; + _appIdentifierModel = appIdentifierModel; + _appEndpoint = appEndPoint; + _networkClient = networkClient; + _kitVersionsByKitBundleIdentifier = kitVersionsByKitBundleIdentifier.copy; + _settings = settings; + } + return self; +} + +- (void)main { + [self beginAppConfigure]; +} + +- (void)beginAppConfigure { + NSOutputStream *stream = [[NSOutputStream alloc] initToMemory]; + NSString *boundary = [FIRCLSMultipartMimeStreamEncoder generateBoundary]; + + FIRCLSMultipartMimeStreamEncoder *encoder = + [FIRCLSMultipartMimeStreamEncoder encoderWithStream:stream andBoundary:boundary]; + if (!encoder) { + FIRCLSErrorLog(@"Configure failed during onboarding"); + [self finishWithError:[self errorForCode:FIRCLSOnboardingErrorMultipartMimeConfiguration + userInfo:@{ + NSLocalizedDescriptionKey : @"Multipart mime encoder was nil" + }]]; + return; + } + + NSString *orgID = [self.settings orgID]; + if (!orgID) { + FIRCLSErrorLog(@"Could not onboard app with missing Organization ID"); + [self finishWithError:[self errorForCode:FIRCLSOnboardingErrorMultipartMimeConfiguration + userInfo:@{ + NSLocalizedDescriptionKey : @"Organization ID was nil" + }]]; + return; + } + + [encoder encode:^{ + [encoder addValue:orgID fieldName:@"org_id"]; + + [encoder addValue:self.settings.fetchedBundleID fieldName:@"app[identifier]"]; + [encoder addValue:self.appIdentifierModel.buildInstanceID + fieldName:@"app[instance_identifier]"]; + [encoder addValue:self.appIdentifierModel.displayName fieldName:@"app[name]"]; + [encoder addValue:self.appIdentifierModel.buildVersion fieldName:@"app[build_version]"]; + [encoder addValue:self.appIdentifierModel.displayVersion fieldName:@"app[display_version]"]; + [encoder addValue:@(self.appIdentifierModel.installSource) fieldName:@"app[source]"]; + [encoder addValue:self.appIdentifierModel.minimumSDKString + fieldName:@"app[minimum_sdk_version]"]; + [encoder addValue:self.appIdentifierModel.builtSDKString fieldName:@"app[built_sdk_version]"]; + [self.kitVersionsByKitBundleIdentifier + enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + NSString *formKey = [NSString stringWithFormat:@"%@[%@]", @"app[build][libraries]", key]; + [encoder addValue:obj fieldName:formKey]; + }]; + + [self.appIdentifierModel.architectureUUIDMap + enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [encoder addValue:key fieldName:@"app[slices][][arch]"]; + [encoder addValue:obj fieldName:@"app[slices][][uuid]"]; + }]; + }]; + + NSMutableURLRequest *request = [self onboardingRequestForAppCreate:self.shouldCreate]; + [request setValue:orgID forHTTPHeaderField:FIRCLSNetworkCrashlyticsOrgId]; + + [request setValue:encoder.contentTypeHTTPHeaderValue forHTTPHeaderField:@"Content-Type"]; + [request setValue:encoder.contentLengthHTTPHeaderValue forHTTPHeaderField:@"Content-Length"]; + [request setHTTPBody:[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]]; + + // Retry only when onboarding an app for the first time, otherwise it'll overwhelm our servers + NSUInteger retryLimit = self.shouldCreate ? 10 : 1; + + [self.networkClient + startDataTaskWithRequest:request + retryLimit:retryLimit + completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + self->_error = error; + if (!self.shouldCreate) { + [self.delegate onboardingOperation:self didCompleteAppUpdateWithError:error]; + } else { + [self.delegate onboardingOperation:self didCompleteAppCreationWithError:error]; + } + [self finishWithError:error]; + }]; +} + +#pragma mark private methods + +- (NSError *)errorForCode:(NSUInteger)code userInfo:(NSDictionary *)userInfo { + return [NSError errorWithDomain:FIRCLSOnboardingErrorDomain code:code userInfo:userInfo]; +} + +- (NSURL *)appCreateURL { + // https://api.crashlytics.com/spi/v1/platforms/mac/apps/com.crashlytics.mac + + FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:self.appEndpoint]; + + [url appendComponent:@"/spi/v1/platforms/"]; + [url escapeAndAppendComponent:self.appIdentifierModel.platform]; + [url appendComponent:@"/apps"]; + + return url.URL; +} + +- (NSURL *)appUpdateURL { + // https://api.crashlytics.com/spi/v1/platforms/mac/apps/com.crashlytics.mac + + FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:[self appEndpoint]]; + + [url appendComponent:@"/spi/v1/platforms/"]; + [url escapeAndAppendComponent:self.appIdentifierModel.platform]; + [url appendComponent:@"/apps/"]; + [url escapeAndAppendComponent:self.settings.fetchedBundleID]; + + return url.URL; +} + +- (NSMutableURLRequest *)onboardingRequestForAppCreate:(BOOL)shouldCreate { + const NSTimeInterval timeout = 10.0; + NSURL *url = nil; + NSString *httpVerb = nil; + if (shouldCreate) { + httpVerb = @"POST"; + url = self.appCreateURL; + } else { + httpVerb = @"PUT"; + url = self.appUpdateURL; + } + NSMutableURLRequest *request = [self mutableRequestWithDefaultHTTPHeadersForURL:url + timeout:timeout]; + request.HTTPMethod = httpVerb; + return request; +} + +@end diff --git a/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c b/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c new file mode 100644 index 000000000000..1ec3da3b7b07 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c @@ -0,0 +1,374 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDefines.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSCompactUnwind_Private.h" +#include "FIRCLSDataParsing.h" +#include "FIRCLSDwarfUnwind.h" +#include "FIRCLSUnwind.h" +#include "FIRCLSUtility.h" + +#include + +#if CLS_COMPACT_UNWINDING_SUPPORTED + +#pragma mark Parsing +bool FIRCLSCompactUnwindInit(FIRCLSCompactUnwindContext* context, const void* unwindInfo, const void* ehFrame, uintptr_t loadAddress) { + if (!FIRCLSIsValidPointer(context)) { + FIRCLSSDKLog("Error: invalid context passed to compact unwind init"); + return false; + } + if (!FIRCLSIsValidPointer(unwindInfo)) { + FIRCLSSDKLog("Error: invalid unwind info passed to compact unwind init"); + return false; + } + if (!FIRCLSIsValidPointer(loadAddress)) { + FIRCLSSDKLog("Error: invalid load address passed to compact unwind init"); + return false; + } + + memset(context, 0, sizeof(FIRCLSCompactUnwindContext)); + + if(!FIRCLSReadMemory((vm_address_t)unwindInfo, &context->unwindHeader, sizeof(struct unwind_info_section_header))) { + FIRCLSSDKLog("Error: could not read memory contents of unwindInfo\n"); + return false; + } + + if (context->unwindHeader.version != UNWIND_SECTION_VERSION) { + FIRCLSSDKLog("Error: bad unwind_info structure version (%d != %d)\n", context->unwindHeader.version, UNWIND_SECTION_VERSION); + return false; + } + + // copy in the values + context->unwindInfo = unwindInfo; + context->ehFrame = ehFrame; + context->loadAddress = loadAddress; + + return true; +} + +void *FIRCLSCompactUnwindGetIndexData(FIRCLSCompactUnwindContext* context) { + return (void*)((uintptr_t)context->unwindInfo + (uintptr_t)context->unwindHeader.indexSectionOffset); +} + +compact_unwind_encoding_t *FIRCLSCompactUnwindGetCommonEncodings(FIRCLSCompactUnwindContext* context) { + return (compact_unwind_encoding_t*)((uintptr_t)context->unwindInfo + (uintptr_t)context->unwindHeader.commonEncodingsArraySectionOffset); +} + +void *FIRCLSCompactUnwindGetSecondLevelData(FIRCLSCompactUnwindContext* context) { + return (void*)((uintptr_t)context->unwindInfo + context->indexHeader.secondLevelPagesSectionOffset); +} + +uintptr_t FIRCLSCompactUnwindGetIndexFunctionOffset(FIRCLSCompactUnwindContext* context) { + return context->loadAddress + context->indexHeader.functionOffset; +} +uintptr_t FIRCLSCompactUnwindGetTargetAddress(FIRCLSCompactUnwindContext* context, uintptr_t pc) { + uintptr_t offset = FIRCLSCompactUnwindGetIndexFunctionOffset(context); + + if (pc <= offset) { + FIRCLSSDKLog("Error: PC is invalid\n"); + return 0; + } + + return pc - offset; +} + +#pragma mark - Parsing and Lookup +bool FIRCLSCompactUnwindLookupFirstLevel(FIRCLSCompactUnwindContext *context, uintptr_t address) { + if (!context) { + return false; + } + + // In practice, it appears that there always one more first level entry + // than required. This actually makes sense, since we have to use this + // info to check if we are in range. This implies there must be + // at least 2 indices at a minimum. + + uint32_t indexCount = context->unwindHeader.indexCount; + if (indexCount < 2) { + return false; + } + + // make sure our address is valid + if (address < context->loadAddress) { + return false; + } + + struct unwind_info_section_header_index_entry* indexEntries = FIRCLSCompactUnwindGetIndexData(context); + if (!indexEntries) { + return false; + } + + address -= context->loadAddress; // search relative to zero + + // minus one because of the extra entry - see comment above + for (uint32_t index = 0; index < indexCount - 1; ++index) { + uint32_t value = indexEntries[index].functionOffset; + uint32_t nextValue = indexEntries[index + 1].functionOffset; + + if (address >= value && address < nextValue) { + context->firstLevelNextFunctionOffset = nextValue; + context->indexHeader = indexEntries[index]; + return true; + } + } + + return false; +} + +uint32_t FIRCLSCompactUnwindGetSecondLevelPageKind(FIRCLSCompactUnwindContext *context) { + if (!context) { + return 0; + } + + return *(uint32_t*)FIRCLSCompactUnwindGetSecondLevelData(context); +} + +bool FIRCLSCompactUnwindLookupSecondLevelRegular(FIRCLSCompactUnwindContext *context, uintptr_t pc, FIRCLSCompactUnwindResult* result) { + FIRCLSSDKLog("Encountered a regular second-level page\n"); + return false; +} + +// this only works for compressed entries right now +bool FIRCLSCompactUnwindBinarySearchSecondLevel(uintptr_t address, uint32_t* index, uint16_t entryCount, uint32_t* entryArray) { + if (!index || !entryArray) { + return false; + } + + if (entryCount == 0) { + return false; + } + + if (address == 0) { + return false; + } + + uint32_t highIndex = entryCount; + *index = 0; + + while (*index < highIndex) { + uint32_t midIndex = (*index + highIndex) / 2; + +// FIRCLSSDKLog("%u %u %u\n", *index, midIndex, highIndex); + + uintptr_t value = UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entryArray[midIndex]); + + if (value > address) { + if (highIndex == midIndex) { + return false; + } + + highIndex = midIndex; + continue; + } + + *index = midIndex; + + // are we at the end of the array? + if (midIndex == entryCount - 1) { + return false; + } + + uintptr_t nextValue = UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entryArray[midIndex + 1]); + if (nextValue > address) { + // we've found it + break; + } + + *index += 1; + } + + // check to make sure we're still within bounds + return *index < entryCount; +} + +bool FIRCLSCompactUnwindLookupSecondLevelCompressed(FIRCLSCompactUnwindContext *context, uintptr_t pc, FIRCLSCompactUnwindResult* result) { + if (!context || !result) { + return false; + } + + void* ptr = FIRCLSCompactUnwindGetSecondLevelData(context); + + if (!ptr) { + return false; + } + + memset(result, 0, sizeof(FIRCLSCompactUnwindResult)); + + struct unwind_info_compressed_second_level_page_header *header = (struct unwind_info_compressed_second_level_page_header*)ptr; + + // adjust address + uintptr_t targetAddress = FIRCLSCompactUnwindGetTargetAddress(context, pc); + + uint32_t* entryArray = ptr + header->entryPageOffset; + + uint32_t index = 0; + + if (!FIRCLSCompactUnwindBinarySearchSecondLevel(targetAddress, &index, header->entryCount, entryArray)) { + FIRCLSSDKLogInfo("Unable to find PC in second level\n"); + return false; + } + + uint32_t entry = entryArray[index]; + + // Computing the fuction start address is easy + result->functionStart = UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entry) + FIRCLSCompactUnwindGetIndexFunctionOffset(context); + + // Computing the end is more complex, because we could be on the last entry. In that case, we cannot use the next + // value as the end. + result->functionEnd = context->loadAddress; + if (index < header->entryCount - 1) { + result->functionEnd += UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entryArray[index + 1]) + context->indexHeader.functionOffset; + } else { + result->functionEnd += context->firstLevelNextFunctionOffset; + } + +// FIRCLSSDKLog("Located %lx => %lx %lx\n", pc, result->functionStart, result->functionEnd); + + if ((pc < result->functionStart) || (pc >= result->functionEnd)) { + FIRCLSSDKLog("PC does not match computed function range\n"); + return false; + } + + uint32_t encodingIndex = UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(entry); + + // encoding could be in the common array + if (encodingIndex < context->unwindHeader.commonEncodingsArrayCount) { + result->encoding = FIRCLSCompactUnwindGetCommonEncodings(context)[encodingIndex]; + +// FIRCLSSDKLog("Entry has common encoding: 0x%x\n", result->encoding); + } else { + encodingIndex = encodingIndex - context->unwindHeader.commonEncodingsArrayCount; + + compact_unwind_encoding_t *encodings = ptr + header->encodingsPageOffset; + + result->encoding = encodings[encodingIndex]; + +// FIRCLSSDKLog("Entry has compressed encoding: 0x%x\n", result->encoding); + } + + if (result->encoding == 0) { + FIRCLSSDKLogInfo("Entry has has no unwind info\n"); + return false; + } + + return true; +} + +bool FIRCLSCompactUnwindLookupSecondLevel(FIRCLSCompactUnwindContext *context, uintptr_t pc, FIRCLSCompactUnwindResult* result) { + switch (FIRCLSCompactUnwindGetSecondLevelPageKind(context)) { + case UNWIND_SECOND_LEVEL_REGULAR: + FIRCLSSDKLogInfo("Found a second level regular header\n"); + if (FIRCLSCompactUnwindLookupSecondLevelRegular(context, pc, result)) { + return true; + } + break; + case UNWIND_SECOND_LEVEL_COMPRESSED: + FIRCLSSDKLogInfo("Found a second level compressed header\n"); + if (FIRCLSCompactUnwindLookupSecondLevelCompressed(context, pc, result)) { + return true; + } + break; + default: + FIRCLSSDKLogError("Unrecognized header kind - unable to continue\n"); + break; + } + + return false; +} + +bool FIRCLSCompactUnwindLookup(FIRCLSCompactUnwindContext *context, uintptr_t pc, FIRCLSCompactUnwindResult* result) { + if (!context || !result) { + return false; + } + + // step 1 - find the pc in the first-level index + if (!FIRCLSCompactUnwindLookupFirstLevel(context, pc)) { + FIRCLSSDKLogWarn("Unable to find pc in first level\n"); + return false; + } + + FIRCLSSDKLogDebug("Found first level (second => %u)\n", context->indexHeader.secondLevelPagesSectionOffset); + + // step 2 - use that info to find the second-level information + // that second actually has the encoding info we're looking for. + if (!FIRCLSCompactUnwindLookupSecondLevel(context, pc, result)) { + FIRCLSSDKLogInfo("Second-level PC lookup failed\n"); + return false; + } + + return true; +} + +#pragma mark - Unwinding +bool FIRCLSCompactUnwindLookupAndCompute(FIRCLSCompactUnwindContext *context, FIRCLSThreadContext* registers) { + if (!context || !registers) { + return false; + } + + uintptr_t pc = FIRCLSThreadContextGetPC(registers); + + // little sanity check + if (pc < context->loadAddress) { + return false; + } + + FIRCLSCompactUnwindResult result; + + memset(&result, 0, sizeof(result)); + + if (!FIRCLSCompactUnwindLookup(context, pc, &result)) { + FIRCLSSDKLogInfo("Unable to lookup compact unwind for pc %p\n", (void*)pc); + return false; + } + + // Ok, armed with the encoding, we can actually attempt to modify the registers. Because + // the encoding is arch-specific, this function has to be defined per-arch. + if (!FIRCLSCompactUnwindComputeRegisters(context, &result, registers)) { + FIRCLSSDKLogError("Failed to compute registers\n"); + return false; + } + + return true; +} + +#if CLS_DWARF_UNWINDING_SUPPORTED +bool FIRCLSCompactUnwindDwarfFrame(FIRCLSCompactUnwindContext* context, uintptr_t dwarfOffset, FIRCLSThreadContext* registers) { + if (!context || !registers) { + return false; + } + + // Everyone's favorite! Dwarf unwinding! + FIRCLSSDKLogInfo("Trying to read dwarf data with offset %lx\n", dwarfOffset); + + FIRCLSDwarfCFIRecord record; + + if (!FIRCLSDwarfParseCFIFromFDERecordOffset(&record, context->ehFrame, dwarfOffset)) { + FIRCLSSDKLogError("Unable to init FDE\n"); + return false; + } + + if (!FIRCLSDwarfUnwindComputeRegisters(&record, registers)) { + FIRCLSSDKLogError("Failed to compute DWARF registers\n"); + return false; + } + + return true; +} +#endif + +#else +INJECT_STRIP_SYMBOL(compact_unwind) +#endif diff --git a/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h b/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h new file mode 100644 index 000000000000..5102212103fa --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h @@ -0,0 +1,67 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSThreadState.h" + +#include +#include + +// We have to pack the arrays defined in this header, so +// we can reason about pointer math. +#pragma pack(push) +#pragma pack(1) +#include +#pragma pack(pop) + +// First masks out the value, and then shifts the value by the number +// of zeros in the mask. __builtin_ctz returns the number of trailing zeros. +// Its output is undefined if the input is zero. +#define GET_BITS_WITH_MASK(value, mask) ((value & mask) >> (mask == 0 ? 0 : __builtin_ctz(mask))) + +typedef struct { + const void* unwindInfo; + const void* ehFrame; + uintptr_t loadAddress; + + struct unwind_info_section_header unwindHeader; + struct unwind_info_section_header_index_entry indexHeader; + uint32_t firstLevelNextFunctionOffset; +} FIRCLSCompactUnwindContext; + +typedef struct { + compact_unwind_encoding_t encoding; + uintptr_t functionStart; + uintptr_t functionEnd; + uintptr_t lsda; + uintptr_t personality; + +} FIRCLSCompactUnwindResult; + +bool FIRCLSCompactUnwindInit(FIRCLSCompactUnwindContext* context, + const void* unwindInfo, + const void* ehFrame, + uintptr_t loadAddress); +void* FIRCLSCompactUnwindGetIndexData(FIRCLSCompactUnwindContext* context); +void* FIRCLSCompactUnwindGetSecondLevelData(FIRCLSCompactUnwindContext* context); +bool FIRCLSCompactUnwindFindFirstLevelIndex(FIRCLSCompactUnwindContext* context, + uintptr_t pc, + uint32_t* index); + +bool FIRCLSCompactUnwindDwarfFrame(FIRCLSCompactUnwindContext* context, + uintptr_t dwarfOffset, + FIRCLSThreadContext* registers); +bool FIRCLSCompactUnwindLookupAndCompute(FIRCLSCompactUnwindContext* context, + FIRCLSThreadContext* registers); diff --git a/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h b/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h new file mode 100644 index 000000000000..1dd01562fd78 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h @@ -0,0 +1,28 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSCompactUnwind.h" +#pragma pack(push, 1) +#include +#pragma pack(pop) + +bool FIRCLSCompactUnwindLookup(FIRCLSCompactUnwindContext* context, + uintptr_t pc, + FIRCLSCompactUnwindResult* result); + +bool FIRCLSCompactUnwindComputeRegisters(FIRCLSCompactUnwindContext* context, + FIRCLSCompactUnwindResult* result, + FIRCLSThreadContext* registers); diff --git a/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c new file mode 100644 index 000000000000..601733b7147d --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c @@ -0,0 +1,237 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDataParsing.h" +#include "FIRCLSDefines.h" +#include "FIRCLSUtility.h" +#include "dwarf.h" + +#include + +#if CLS_DWARF_UNWINDING_SUPPORTED + +uint8_t FIRCLSParseUint8AndAdvance(const void** cursor) { + uint8_t tmp = **(uint8_t**)cursor; + + *cursor += sizeof(uint8_t); + + return tmp; +} + +uint16_t FIRCLSParseUint16AndAdvance(const void** cursor) { + uint16_t tmp = **(uint16_t**)cursor; + + *cursor += sizeof(uint16_t); + + return tmp; +} + +int16_t FIRCLSParseInt16AndAdvance(const void** cursor) { + int16_t tmp = **(int16_t**)cursor; + + *cursor += sizeof(int16_t); + + return tmp; +} + +uint32_t FIRCLSParseUint32AndAdvance(const void** cursor) { + uint32_t tmp = **(uint32_t**)cursor; + + *cursor += sizeof(uint32_t); + + return tmp; +} + +int32_t FIRCLSParseInt32AndAdvance(const void** cursor) { + int32_t tmp = **(int32_t**)cursor; + + *cursor += sizeof(int32_t); + + return tmp; +} + +uint64_t FIRCLSParseUint64AndAdvance(const void** cursor) { + uint64_t tmp = **(uint64_t**)cursor; + + *cursor += sizeof(uint64_t); + + return tmp; +} + +int64_t FIRCLSParseInt64AndAdvance(const void** cursor) { + int64_t tmp = **(int64_t**)cursor; + + *cursor += sizeof(int64_t); + + return tmp; +} + +uintptr_t FIRCLSParsePointerAndAdvance(const void** cursor) { + uintptr_t tmp = **(uintptr_t**)cursor; + + *cursor += sizeof(uintptr_t); + + return tmp; +} + +// Signed and Unsigned LEB128 decoding algorithms taken from Wikipedia - http://en.wikipedia.org/wiki/LEB128 +uint64_t FIRCLSParseULEB128AndAdvance(const void** cursor) { + uint64_t result = 0; + char shift = 0; + + for (int i = 0; i < sizeof(uint64_t); ++i) { + char byte; + + byte = **(uint8_t**)cursor; + + *cursor += 1; + + result |= ((0x7F & byte) << shift); + if ((0x80 & byte) == 0) { + break; + } + + shift += 7; + } + + return result; +} + +int64_t FIRCLSParseLEB128AndAdvance(const void** cursor) { + uint64_t result = 0; + char shift = 0; + char size = sizeof(int64_t) * 8; + char byte = 0; + + for (int i = 0; i < sizeof(uint64_t); ++i) { + byte = **(uint8_t**)cursor; + + *cursor += 1; + + result |= ((0x7F & byte) << shift); + shift += 7; + + /* sign bit of byte is second high order bit (0x40) */ + if ((0x80 & byte) == 0) { + break; + } + } + + if ((shift < size) && (0x40 & byte)) { + // sign extend + result |= - (1 << shift); + } + + return result; +} + +const char* FIRCLSParseStringAndAdvance(const void** cursor) { + const char* string; + + string = (const char*)(*cursor); + + // strlen doesn't include the null character, which we need to advance past + *cursor += strlen(string) + 1; + + return string; +} + +uint64_t FIRCLSParseRecordLengthAndAdvance(const void** cursor) { + uint64_t length; + + length = FIRCLSParseUint32AndAdvance(cursor); + if (length == DWARF_EXTENDED_LENGTH_FLAG) { + length = FIRCLSParseUint64AndAdvance(cursor); + } + + return length; +} + +uintptr_t FIRCLSParseAddressWithEncodingAndAdvance(const void** cursor, uint8_t encoding) { + if (encoding == DW_EH_PE_omit) { + return 0; + } + + if (!cursor) { + return CLS_INVALID_ADDRESS; + } + + if (!*cursor) { + return CLS_INVALID_ADDRESS; + } + + intptr_t inputAddr = (intptr_t)*cursor; + intptr_t addr; + + switch (encoding & DW_EH_PE_VALUE_MASK) { + case DW_EH_PE_ptr: + // 32 or 64 bits + addr = FIRCLSParsePointerAndAdvance(cursor); + break; + case DW_EH_PE_uleb128: + addr = (intptr_t)FIRCLSParseULEB128AndAdvance(cursor); + break; + case DW_EH_PE_udata2: + addr = FIRCLSParseUint16AndAdvance(cursor); + break; + case DW_EH_PE_udata4: + addr = FIRCLSParseUint32AndAdvance(cursor); + break; + case DW_EH_PE_udata8: + addr = (intptr_t)FIRCLSParseUint64AndAdvance(cursor); + break; + case DW_EH_PE_sleb128: + addr = (intptr_t)FIRCLSParseLEB128AndAdvance(cursor); + break; + case DW_EH_PE_sdata2: + addr = FIRCLSParseInt16AndAdvance(cursor); + break; + case DW_EH_PE_sdata4: + addr = FIRCLSParseInt32AndAdvance(cursor); + break; + case DW_EH_PE_sdata8: + addr = (intptr_t)FIRCLSParseInt64AndAdvance(cursor); + break; + default: + FIRCLSSDKLog("Unhandled: encoding 0x%02x\n", encoding); + return CLS_INVALID_ADDRESS; + } + + // and now apply the relative offset + switch (encoding & DW_EH_PE_RELATIVE_OFFSET_MASK) { + case DW_EH_PE_absptr: + break; + case DW_EH_PE_pcrel: + addr += inputAddr; + break; + default: + FIRCLSSDKLog("Unhandled: relative encoding 0x%02x\n", encoding); + return CLS_INVALID_ADDRESS; + } + + // Here's a crazy one. It seems this encoding means you actually look up + // the value of the address using the result address itself + if (encoding & DW_EH_PE_indirect) { + if (!addr) { + return CLS_INVALID_ADDRESS; + } + + addr = *(uintptr_t*)addr; + } + + return addr; +} +#else +INJECT_STRIP_SYMBOL(data_parsing) +#endif diff --git a/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h new file mode 100644 index 000000000000..44c8a287029b --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h @@ -0,0 +1,46 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFeatures.h" + +#include + +#if CLS_DWARF_UNWINDING_SUPPORTED + +#if CLS_CPU_64BIT +#define CLS_INVALID_ADDRESS (0xffffffffffffffff) +#else +#define CLS_INVALID_ADDRESS (0xffffffff) +#endif + +// basic data types +uint8_t FIRCLSParseUint8AndAdvance(const void** cursor); +uint16_t FIRCLSParseUint16AndAdvance(const void** cursor); +int16_t FIRCLSParseInt16AndAdvance(const void** cursor); +uint32_t FIRCLSParseUint32AndAdvance(const void** cursor); +int32_t FIRCLSParseInt32AndAdvance(const void** cursor); +uint64_t FIRCLSParseUint64AndAdvance(const void** cursor); +int64_t FIRCLSParseInt64AndAdvance(const void** cursor); +uintptr_t FIRCLSParsePointerAndAdvance(const void** cursor); +uint64_t FIRCLSParseULEB128AndAdvance(const void** cursor); +int64_t FIRCLSParseLEB128AndAdvance(const void** cursor); +const char* FIRCLSParseStringAndAdvance(const void** cursor); + +// FDE/CIE-specifc structures +uint64_t FIRCLSParseRecordLengthAndAdvance(const void** cursor); +uintptr_t FIRCLSParseAddressWithEncodingAndAdvance(const void** cursor, uint8_t encoding); + +#endif diff --git a/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c new file mode 100644 index 000000000000..6f80010d04cf --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c @@ -0,0 +1,466 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDataParsing.h" +#include "FIRCLSDefines.h" +#include "FIRCLSDwarfExpressionMachine.h" +#include "FIRCLSDwarfUnwindRegisters.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSUnwind_arch.h" +#include "FIRCLSUtility.h" +#include "dwarf.h" + +#if CLS_DWARF_UNWINDING_SUPPORTED + +static bool FIRCLSDwarfExpressionMachineExecute_bregN(FIRCLSDwarfExpressionMachine *machine, uint8_t opcode); +static bool FIRCLSDwarfExpressionMachineExecute_deref(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_plus_uconst(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_and(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_plus(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_dup(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_swap(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_deref_size(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_ne(FIRCLSDwarfExpressionMachine *machine); +static bool FIRCLSDwarfExpressionMachineExecute_litN(FIRCLSDwarfExpressionMachine *machine, uint8_t opcode); + +#pragma mark - +#pragma mark Stack Implementation +void FIRCLSDwarfExpressionStackInit(FIRCLSDwarfExpressionStack *stack) +{ + if (!FIRCLSIsValidPointer(stack)) { + return; + } + + memset(stack, 0, sizeof(FIRCLSDwarfExpressionStack)); + + stack->pointer = stack->buffer; +} + +bool FIRCLSDwarfExpressionStackIsValid(FIRCLSDwarfExpressionStack *stack) +{ + if (!FIRCLSIsValidPointer(stack)) { + return false; + } + + // check for valid stack pointer + if (stack->pointer < stack->buffer) { + return false; + } + + if (stack->pointer > stack->buffer + CLS_DWARF_EXPRESSION_STACK_SIZE) { + return false; + } + + return true; +} + +bool FIRCLSDwarfExpressionStackPush(FIRCLSDwarfExpressionStack *stack, intptr_t value) +{ + if (!FIRCLSDwarfExpressionStackIsValid(stack)) { + return false; + } + + if (stack->pointer == stack->buffer + CLS_DWARF_EXPRESSION_STACK_SIZE) { + // overflow + stack->pointer = NULL; + return false; + } + + *(stack->pointer) = value; + stack->pointer += 1; + + return true; +} + +intptr_t FIRCLSDwarfExpressionStackPeek(FIRCLSDwarfExpressionStack *stack) +{ + if (!FIRCLSDwarfExpressionStackIsValid(stack)) { + return 0; + } + + if (stack->pointer == stack->buffer) { + // underflow + stack->pointer = NULL; + return 0; + } + + return *(stack->pointer - 1); +} + +intptr_t FIRCLSDwarfExpressionStackPop(FIRCLSDwarfExpressionStack *stack) +{ + if (!FIRCLSDwarfExpressionStackIsValid(stack)) { + return 0; + } + + if (stack->pointer == stack->buffer) { + // underflow + stack->pointer = NULL; + return 0; + } + + stack->pointer -= 1; + + return *(stack->pointer); +} + +#pragma mark - +#pragma mark Machine API +bool FIRCLSDwarfExpressionMachineInit(FIRCLSDwarfExpressionMachine *machine, const void *cursor, const FIRCLSThreadContext *registers, intptr_t stackValue) +{ + if (!FIRCLSIsValidPointer(machine)) { + return false; + } + + memset(machine, 0, sizeof(FIRCLSDwarfExpressionMachine)); + + if (!FIRCLSIsValidPointer(cursor)) { + return false; + } + + machine->dataCursor = cursor; + machine->registers = registers; + + FIRCLSDwarfExpressionStackInit(&machine->stack); + + return FIRCLSDwarfExpressionStackPush(&machine->stack, stackValue); +} + +bool FIRCLSDwarfExpressionMachinePrepareForExecution(FIRCLSDwarfExpressionMachine *machine) +{ + if (!FIRCLSIsValidPointer(machine)) { + FIRCLSSDKLog("Error: invalid inputs\n"); + return false; + } + + uint64_t expressionLength = FIRCLSParseULEB128AndAdvance(&machine->dataCursor); + + if (expressionLength == 0) { + FIRCLSSDKLog("Error: DWARF expression length is zero\n"); + return false; + } + + machine->endAddress = machine->dataCursor + expressionLength; + + return true; +} + +bool FIRCLSDwarfExpressionMachineIsFinished(FIRCLSDwarfExpressionMachine *machine) +{ + if (!FIRCLSIsValidPointer(machine)) { + FIRCLSSDKLog("Error: invalid inputs\n"); + return true; + } + + if (!FIRCLSIsValidPointer(machine->endAddress) || !FIRCLSIsValidPointer(machine->dataCursor)) { + FIRCLSSDKLog("Error: DWARF machine pointers invalid\n"); + return true; + } + + if (!FIRCLSDwarfExpressionStackIsValid(&machine->stack)) { + FIRCLSSDKLog("Error: DWARF machine stack invalid\n"); + return true; + } + + return machine->dataCursor >= machine->endAddress; +} + +bool FIRCLSDwarfExpressionMachineGetResult(FIRCLSDwarfExpressionMachine *machine, intptr_t *result) +{ + if (!FIRCLSIsValidPointer(machine) || !FIRCLSIsValidPointer(result)) { + return false; + } + + if (machine->dataCursor != machine->endAddress) { + FIRCLSSDKLog("Error: DWARF expression hasn't completed execution\n"); + return false; + } + + *result = FIRCLSDwarfExpressionStackPeek(&machine->stack); + + return FIRCLSDwarfExpressionStackIsValid(&machine->stack); +} + +bool FIRCLSDwarfExpressionMachineExecuteNextOpcode(FIRCLSDwarfExpressionMachine *machine) +{ + if (!FIRCLSIsValidPointer(machine)) { + return false; + } + + const uint8_t opcode = FIRCLSParseUint8AndAdvance(&machine->dataCursor); + + bool success = false; + + switch (opcode) { + case DW_OP_deref: + success = FIRCLSDwarfExpressionMachineExecute_deref(machine); + break; + case DW_OP_dup: + success = FIRCLSDwarfExpressionMachineExecute_dup(machine); + break; + case DW_OP_and: + success = FIRCLSDwarfExpressionMachineExecute_and(machine); + break; + case DW_OP_plus: + success = FIRCLSDwarfExpressionMachineExecute_plus(machine); + break; + case DW_OP_swap: + success = FIRCLSDwarfExpressionMachineExecute_swap(machine); + break; + case DW_OP_plus_uconst: + success = FIRCLSDwarfExpressionMachineExecute_plus_uconst(machine); + break; + case DW_OP_ne: + success = FIRCLSDwarfExpressionMachineExecute_ne(machine); + break; + case DW_OP_lit0: + case DW_OP_lit1: + case DW_OP_lit2: + case DW_OP_lit3: + case DW_OP_lit4: + case DW_OP_lit5: + case DW_OP_lit6: + case DW_OP_lit7: + case DW_OP_lit8: + case DW_OP_lit9: + case DW_OP_lit10: + case DW_OP_lit11: + case DW_OP_lit12: + case DW_OP_lit13: + case DW_OP_lit14: + case DW_OP_lit15: + case DW_OP_lit16: + case DW_OP_lit17: + case DW_OP_lit18: + case DW_OP_lit19: + case DW_OP_lit20: + case DW_OP_lit21: + case DW_OP_lit22: + case DW_OP_lit23: + case DW_OP_lit24: + case DW_OP_lit25: + case DW_OP_lit26: + case DW_OP_lit27: + case DW_OP_lit28: + case DW_OP_lit29: + case DW_OP_lit30: + case DW_OP_lit31: + success = FIRCLSDwarfExpressionMachineExecute_litN(machine, opcode); + break; + case DW_OP_breg0: + case DW_OP_breg1: + case DW_OP_breg2: + case DW_OP_breg3: + case DW_OP_breg4: + case DW_OP_breg5: + case DW_OP_breg6: + case DW_OP_breg7: + case DW_OP_breg8: + case DW_OP_breg9: + case DW_OP_breg10: + case DW_OP_breg11: + case DW_OP_breg12: + case DW_OP_breg13: + case DW_OP_breg14: + case DW_OP_breg15: + case DW_OP_breg16: + case DW_OP_breg17: + case DW_OP_breg18: + case DW_OP_breg19: + case DW_OP_breg20: + case DW_OP_breg21: + case DW_OP_breg22: + case DW_OP_breg23: + case DW_OP_breg24: + case DW_OP_breg25: + case DW_OP_breg26: + case DW_OP_breg27: + case DW_OP_breg28: + case DW_OP_breg29: + case DW_OP_breg30: + case DW_OP_breg31: + success = FIRCLSDwarfExpressionMachineExecute_bregN(machine, opcode); + break; + case DW_OP_deref_size: + success = FIRCLSDwarfExpressionMachineExecute_deref_size(machine); + break; + default: + FIRCLSSDKLog("Error: Unrecognized DWARF expression opcode 0x%x\n", opcode); + return false; + } + + return success; +} + +#pragma mark - +#pragma mark Helpers +static intptr_t FIRCLSDwarfExpressionMachineStackPop(FIRCLSDwarfExpressionMachine *machine) +{ + return FIRCLSDwarfExpressionStackPop(&machine->stack); +} + +static bool FIRCLSDwarfExpressionMachineStackPush(FIRCLSDwarfExpressionMachine *machine, intptr_t value) +{ + return FIRCLSDwarfExpressionStackPush(&machine->stack, value); +} + +#pragma mark - +#pragma mark Opcode Implementations +static bool FIRCLSDwarfExpressionMachineExecute_bregN(FIRCLSDwarfExpressionMachine *machine, uint8_t opcode) +{ + // find the register number, compute offset value, push + const uint8_t regNum = opcode - DW_OP_breg0; + + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: DW_OP_breg invalid register number\n"); + return false; + } + + int64_t offset = FIRCLSParseLEB128AndAdvance(&machine->dataCursor); + + FIRCLSSDKLog("DW_OP_breg %d value %d\n", regNum, (int)offset); + + const intptr_t value = FIRCLSDwarfUnwindGetRegisterValue(machine->registers, regNum) + (intptr_t)offset; + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_deref(FIRCLSDwarfExpressionMachine *machine) +{ + // pop stack, dereference, push result + intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); + + FIRCLSSDKLog("DW_OP_deref value %p\n", (void*)value); + + if (!FIRCLSReadMemory(value, &value, sizeof(value))) { + FIRCLSSDKLog("Error: DW_OP_deref failed to read memory\n"); + return false; + } + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_plus_uconst(FIRCLSDwarfExpressionMachine *machine) +{ + // pop stack, add constant, push result + intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); + + value += FIRCLSParseULEB128AndAdvance(&machine->dataCursor); + + FIRCLSSDKLog("DW_OP_plus_uconst value %lu\n", value); + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_and(FIRCLSDwarfExpressionMachine *machine) +{ + FIRCLSSDKLog("DW_OP_plus_and\n"); + + intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); + + value = value & FIRCLSDwarfExpressionMachineStackPop(machine); + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_plus(FIRCLSDwarfExpressionMachine *machine) +{ + FIRCLSSDKLog("DW_OP_plus\n"); + + intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); + + value = value + FIRCLSDwarfExpressionMachineStackPop(machine); + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_dup(FIRCLSDwarfExpressionMachine *machine) +{ + // duplicate top of stack + intptr_t value = FIRCLSDwarfExpressionStackPeek(&machine->stack); + + FIRCLSSDKLog("DW_OP_dup value %lu\n", value); + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_swap(FIRCLSDwarfExpressionMachine *machine) +{ + // swap top two values on the stack + intptr_t valueA = FIRCLSDwarfExpressionMachineStackPop(machine); + intptr_t valueB = FIRCLSDwarfExpressionMachineStackPop(machine); + + FIRCLSSDKLog("DW_OP_swap\n"); + + if (!FIRCLSDwarfExpressionMachineStackPush(machine, valueA)) { + return false; + } + + return FIRCLSDwarfExpressionMachineStackPush(machine, valueB); +} + +static bool FIRCLSDwarfExpressionMachineExecute_deref_size(FIRCLSDwarfExpressionMachine *machine) +{ + // pop stack, dereference variable sized value, push result + const void *address = (const void*)FIRCLSDwarfExpressionMachineStackPop(machine); + const uint8_t readSize = FIRCLSParseUint8AndAdvance(&machine->dataCursor); + intptr_t value = 0; + + FIRCLSSDKLog("DW_OP_deref_size %p size %u\n", address, readSize); + + switch (readSize) { + case 1: + value = FIRCLSParseUint8AndAdvance(&address); + break; + case 2: + value = FIRCLSParseUint16AndAdvance(&address); + break; + case 4: + value = FIRCLSParseUint32AndAdvance(&address); + break; + case 8: + // this is a little funky, as an 8 here really doesn't make sense for 32-bit platforms + value = (intptr_t)FIRCLSParseUint64AndAdvance(&address); + break; + default: + FIRCLSSDKLog("Error: unrecognized DW_OP_deref_size argument %x\n", readSize); + return false; + } + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_ne(FIRCLSDwarfExpressionMachine *machine) +{ + FIRCLSSDKLog("DW_OP_ne\n"); + + intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); + + value = value != FIRCLSDwarfExpressionMachineStackPop(machine); + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +static bool FIRCLSDwarfExpressionMachineExecute_litN(FIRCLSDwarfExpressionMachine *machine, uint8_t opcode) +{ + const uint8_t value = opcode - DW_OP_lit0; + + FIRCLSSDKLog("DW_OP_lit %u\n", value); + + return FIRCLSDwarfExpressionMachineStackPush(machine, value); +} + +#else +INJECT_STRIP_SYMBOL(dwarf_expression_machine) +#endif diff --git a/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h new file mode 100644 index 000000000000..2f7ecc27a9ab --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h @@ -0,0 +1,53 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include "FIRCLSThreadState.h" + +#define CLS_DWARF_EXPRESSION_STACK_SIZE (100) + +#if CLS_DWARF_UNWINDING_SUPPORTED + +typedef struct { + intptr_t buffer[CLS_DWARF_EXPRESSION_STACK_SIZE]; + intptr_t *pointer; +} FIRCLSDwarfExpressionStack; + +typedef struct { + FIRCLSDwarfExpressionStack stack; + const void *dataCursor; + const void *endAddress; + const FIRCLSThreadContext *registers; +} FIRCLSDwarfExpressionMachine; + +void FIRCLSDwarfExpressionStackInit(FIRCLSDwarfExpressionStack *stack); +bool FIRCLSDwarfExpressionStackIsValid(FIRCLSDwarfExpressionStack *stack); +bool FIRCLSDwarfExpressionStackPush(FIRCLSDwarfExpressionStack *stack, intptr_t value); +intptr_t FIRCLSDwarfExpressionStackPeek(FIRCLSDwarfExpressionStack *stack); +intptr_t FIRCLSDwarfExpressionStackPop(FIRCLSDwarfExpressionStack *stack); + +bool FIRCLSDwarfExpressionMachineInit(FIRCLSDwarfExpressionMachine *machine, + const void *cursor, + const FIRCLSThreadContext *registers, + intptr_t stackValue); +bool FIRCLSDwarfExpressionMachinePrepareForExecution(FIRCLSDwarfExpressionMachine *machine); +bool FIRCLSDwarfExpressionMachineIsFinished(FIRCLSDwarfExpressionMachine *machine); +bool FIRCLSDwarfExpressionMachineGetResult(FIRCLSDwarfExpressionMachine *machine, intptr_t *result); + +bool FIRCLSDwarfExpressionMachineExecuteNextOpcode(FIRCLSDwarfExpressionMachine *machine); + +#endif diff --git a/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c new file mode 100644 index 000000000000..0f47b057dd7c --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c @@ -0,0 +1,899 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDataParsing.h" +#include "FIRCLSDefines.h" +#include "FIRCLSDwarfExpressionMachine.h" +#include "FIRCLSDwarfUnwind.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSUnwind_arch.h" +#include "FIRCLSUtility.h" +#include "dwarf.h" + +#include + +#if CLS_DWARF_UNWINDING_SUPPORTED + +#define FIRCLSDwarfLog(__FORMAT__, ...) FIRCLSSDKLog(__FORMAT__, ##__VA_ARGS__) + +#define CLS_DWARF_EXPRESSION_STACK_SIZE (100) + +#pragma mark Prototypes +static bool FIRCLSDwarfParseAndProcessAugmentation(DWARFCIERecord* record, const void** ptr); + +#pragma mark - Record Parsing +bool FIRCLSDwarfParseCIERecord(DWARFCIERecord* cie, const void* ptr) { + if (!cie || !ptr) { + return false; + } + + memset(cie, 0, sizeof(DWARFCIERecord)); + + cie->length = FIRCLSParseRecordLengthAndAdvance(&ptr); + if (cie->length == 0) { + FIRCLSSDKLog("Error: CIE length invalid\n"); + return false; + } + + // the length does not include the length field(s) themselves + const void* endAddress = ptr + cie->length; + + if (FIRCLSParseUint32AndAdvance(&ptr) != DWARF_CIE_ID_CIE_FLAG) { + FIRCLSSDKLog("Error: CIE flag not found\n"); + } + + cie->version = FIRCLSParseUint8AndAdvance(&ptr); + if (cie->version != 1 && cie->version != 3) { + FIRCLSSDKLog("Error: CIE version %u unsupported\n", cie->version); + } + + cie->pointerEncoding = DW_EH_PE_absptr; + cie->lsdaEncoding = DW_EH_PE_absptr; + + cie->augmentation = FIRCLSParseStringAndAdvance(&ptr); + cie->codeAlignFactor = FIRCLSParseULEB128AndAdvance(&ptr); + cie->dataAlignFactor = FIRCLSParseLEB128AndAdvance(&ptr); + + switch (cie->version) { + case 1: + cie->returnAddressRegister = FIRCLSParseUint8AndAdvance(&ptr); + break; + case 3: + cie->returnAddressRegister = FIRCLSParseULEB128AndAdvance(&ptr); + break; + default: + FIRCLSSDKLog("Error: CIE version %u unsupported\n", cie->version); + return false; + } + + if (!FIRCLSDwarfParseAndProcessAugmentation(cie, &ptr)) { + return false; + } + + cie->instructions.data = ptr; + cie->instructions.length = (uint32_t)(endAddress - ptr); + + return true; +} + +static bool FIRCLSDwarfParseAndProcessAugmentation(DWARFCIERecord* record, const void** ptr) { + if (!record || !ptr) { + return false; + } + + if (!record->augmentation) { + return false; + } + + if (record->augmentation[0] == 0) { + return true; + } + + if (record->augmentation[0] != 'z') { + FIRCLSSDKLog("Error: Unimplemented: augmentation string %s\n", record->augmentation); + return false; + } + + size_t stringLength = strlen(record->augmentation); + + uint64_t dataLength = FIRCLSParseULEB128AndAdvance(ptr); + const void* ending = *ptr + dataLength; + + // start at 1 because we know the first character is a 'z' + for (size_t i = 1; i < stringLength; ++i) { + switch (record->augmentation[i]) { + case 'L': + // There is an LSDA pointer encoding present. The actual address of the LSDA + // is in the FDE + record->lsdaEncoding = FIRCLSParseUint8AndAdvance(ptr); + break; + case 'R': + // There is a pointer encoding present, used for all addresses in an FDE. + record->pointerEncoding = FIRCLSParseUint8AndAdvance(ptr); + break; + case 'P': + // Two arguments. A pointer encoding, and a pointer to a personality function encoded + // with that value. + record->personalityEncoding = FIRCLSParseUint8AndAdvance(ptr); + record->personalityFunction = FIRCLSParseAddressWithEncodingAndAdvance(ptr, record->personalityEncoding); + if (record->personalityFunction == CLS_INVALID_ADDRESS) { + FIRCLSSDKLog("Error: Found an invalid start address\n"); + return false; + } + break; + case 'S': + record->signalFrame = true; + break; + default: + FIRCLSSDKLog("Error: Unhandled augmentation string entry %c\n", record->augmentation[i]); + return false; + } + + // small sanity check + if (*ptr > ending) { + return false; + } + } + + return true; +} + +bool FIRCLSDwarfParseFDERecord(DWARFFDERecord* fdeRecord, bool parseCIE, DWARFCIERecord* cieRecord, const void* ptr) { + if (!fdeRecord || !cieRecord || !ptr) { + return false; + } + + fdeRecord->length = FIRCLSParseRecordLengthAndAdvance(&ptr); + if (fdeRecord->length == 0) { + FIRCLSSDKLog("Error: FDE has zero length\n"); + return false; + } + + // length does not include length field + const void* endAddress = ptr + fdeRecord->length; + + // According to the spec, this is 32/64 bit value, but libunwind always + // parses this as a 32bit value. + fdeRecord->cieOffset = FIRCLSParseUint32AndAdvance(&ptr); + if (fdeRecord->cieOffset == 0) { + FIRCLSSDKLog("Error: CIE offset invalid\n"); + return false; + } + + if (parseCIE) { + // The CIE offset is really weird. It appears to be an offset from the + // beginning of its field. This isn't what the documentation says, but it is + // a little ambigious. This is what DwarfParser.hpp does. + // Note that we have to back up one sizeof(uint32_t), because we've advanced + // by parsing the offset + const void* ciePointer = ptr - fdeRecord->cieOffset - sizeof(uint32_t); + if (!FIRCLSDwarfParseCIERecord(cieRecord, ciePointer)) { + FIRCLSSDKLog("Error: Unable to parse CIE record\n"); + return false; + } + } + + if (!FIRCLSDwarfCIEIsValid(cieRecord)) { + FIRCLSSDKLog("Error: CIE invalid\n"); + return false; + } + + // the next field depends on the pointer encoding style used + fdeRecord->startAddress = FIRCLSParseAddressWithEncodingAndAdvance(&ptr, cieRecord->pointerEncoding); + if (fdeRecord->startAddress == CLS_INVALID_ADDRESS) { + FIRCLSSDKLog("Error: Found an invalid start address\n"); + return false; + } + + // Here's something weird too. The range is encoded as a "special" address, where only the value is used, regardless + // of other pointer-encoding schemes. + fdeRecord->rangeSize = FIRCLSParseAddressWithEncodingAndAdvance(&ptr, cieRecord->pointerEncoding & DW_EH_PE_VALUE_MASK); + if (fdeRecord->rangeSize == CLS_INVALID_ADDRESS) { + FIRCLSSDKLog("Error: Found an invalid address range\n"); + return false; + } + + // Just skip over the section for now. The data here is only needed for personality functions, + // which we don't need + if (FIRCLSDwarfCIEHasAugmentationData(cieRecord)) { + uintptr_t augmentationLength = (uintptr_t)FIRCLSParseULEB128AndAdvance(&ptr); + + ptr += augmentationLength; + } + + fdeRecord->instructions.data = ptr; + fdeRecord->instructions.length = (uint32_t)(endAddress - ptr); + + return true; +} + +bool FIRCLSDwarfParseCFIFromFDERecord(FIRCLSDwarfCFIRecord* record, const void* ptr) { + if (!record || !ptr) { + return false; + } + + return FIRCLSDwarfParseFDERecord(&record->fde, true, &record->cie, ptr); +} + +bool FIRCLSDwarfParseCFIFromFDERecordOffset(FIRCLSDwarfCFIRecord* record, const void* ehFrame, uintptr_t fdeOffset) { + if (!record || !ehFrame || (fdeOffset == 0)) { + return false; + } + + const void* ptr = ehFrame + fdeOffset; + + return FIRCLSDwarfParseCFIFromFDERecord(record, ptr); +} + +#pragma mark - Properties +bool FIRCLSDwarfCIEIsValid(DWARFCIERecord* cie) { + if (!cie) { + return false; + } + + if (cie->length == 0) { + return false; + } + + if (cie->version != 1 && cie->version != 3) { + return false; + } + + return true; +} + +bool FIRCLSDwarfCIEHasAugmentationData(DWARFCIERecord* cie) { + if (!cie) { + return false; + } + + if (!cie->augmentation) { + return false; + } + + return cie->augmentation[0] == 'z'; +} + +#pragma mark - Instructions + +static bool FIRCLSDwarfParseAndExecute_set_loc(const void** cursor, DWARFCIERecord* cieRecord, intptr_t* codeOffset) { + uintptr_t operand = FIRCLSParseAddressWithEncodingAndAdvance(cursor, cieRecord->pointerEncoding); + + *codeOffset = operand; + + FIRCLSDwarfLog("DW_CFA_set_loc %lu\n", operand); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_advance_loc1(const void** cursor, DWARFCIERecord* cieRecord, intptr_t* codeOffset) { + int64_t offset = FIRCLSParseUint8AndAdvance(cursor) * cieRecord->codeAlignFactor; + + *codeOffset += offset; + + FIRCLSDwarfLog("DW_CFA_advance_loc1 %lld\n", offset); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_advance_loc2(const void** cursor, DWARFCIERecord* cieRecord, intptr_t* codeOffset) { + int64_t offset = FIRCLSParseUint16AndAdvance(cursor) * cieRecord->codeAlignFactor; + + *codeOffset += offset; + + FIRCLSDwarfLog("DW_CFA_advance_loc2 %lld\n", offset); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_advance_loc4(const void** cursor, DWARFCIERecord* cieRecord, intptr_t* codeOffset) { + int64_t offset = FIRCLSParseUint32AndAdvance(cursor) * cieRecord->codeAlignFactor; + + *codeOffset += offset; + + FIRCLSDwarfLog("DW_CFA_advance_loc4 %lld\n", offset); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_def_cfa(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); + + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_def_cfa register number\n"); + return false; + } + + int64_t offset = FIRCLSParseULEB128AndAdvance(cursor); + + state->cfaRegister = regNum; + state->cfaRegisterOffset = offset; + + FIRCLSDwarfLog("DW_CFA_def_cfa %llu, %lld\n", regNum, offset); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_def_cfa_register(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); + + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_def_cfa_register register number\n"); + return false; + } + + state->cfaRegister = regNum; + + FIRCLSDwarfLog("DW_CFA_def_cfa_register %llu\n", regNum); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_def_cfa_offset(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + uint64_t offset = FIRCLSParseULEB128AndAdvance(cursor); + + state->cfaRegisterOffset = offset; + + FIRCLSDwarfLog("DW_CFA_def_cfa_offset %lld\n", offset); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_same_value(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); + + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_same_value register number\n"); + return false; + } + + state->registers[regNum].location = FIRCLSDwarfRegisterUnused; + + FIRCLSDwarfLog("DW_CFA_same_value %llu\n", regNum); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_register(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); + + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_register number\n"); + return false; + } + + uint64_t regValue = FIRCLSParseULEB128AndAdvance(cursor); + + if (regValue > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_register value\n"); + return false; + } + + state->registers[regNum].location = FIRCLSDwarfRegisterInRegister; + state->registers[regNum].value = regValue; + + FIRCLSDwarfLog("DW_CFA_register %llu %llu\n", regNum, regValue); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_expression(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); + + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_expression register number\n"); + return false; + } + + state->registers[regNum].location = FIRCLSDwarfRegisterAtExpression; + state->registers[regNum].value = (uintptr_t)*cursor; + + // read the length of the expression, and advance past it + uint64_t length = FIRCLSParseULEB128AndAdvance(cursor); + *cursor += length; + + FIRCLSDwarfLog("DW_CFA_expression %llu %llu\n", regNum, length); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_val_expression(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); + + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_val_expression register number\n"); + return false; + } + + state->registers[regNum].location = FIRCLSDwarfRegisterIsExpression; + state->registers[regNum].value = (uintptr_t)*cursor; + + // read the length of the expression, and advance past it + uint64_t length = FIRCLSParseULEB128AndAdvance(cursor); + *cursor += length; + + FIRCLSDwarfLog("DW_CFA_val_expression %llu %llu\n", regNum, length); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_def_cfa_expression(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state) { + state->cfaRegister = CLS_DWARF_INVALID_REGISTER_NUM; + state->cfaExpression = *cursor; + + // read the length of the expression, and advance past it + uint64_t length = FIRCLSParseULEB128AndAdvance(cursor); + *cursor += length; + + FIRCLSDwarfLog("DW_CFA_def_cfa_expression %llu\n", length); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_offset(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state, uint8_t regNum) { + if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { + FIRCLSSDKLog("Error: Found an invalid DW_CFA_offset register number\n"); + return false; + } + + int64_t offset = FIRCLSParseULEB128AndAdvance(cursor) * cieRecord->dataAlignFactor; + + state->registers[regNum].location = FIRCLSDwarfRegisterInCFA; + state->registers[regNum].value = offset; + + FIRCLSDwarfLog("DW_CFA_offset %u, %lld\n", regNum, offset); + + return true; +} + +static bool FIRCLSDwarfParseAndExecute_advance_loc(const void** cursor, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state, uint8_t delta, intptr_t* codeOffset) { + if (!FIRCLSIsValidPointer(codeOffset) || !FIRCLSIsValidPointer(cieRecord)) { + FIRCLSSDKLog("Error: invalid inputs\n"); + return false; + } + + *codeOffset = delta * (intptr_t)cieRecord->codeAlignFactor; + + FIRCLSDwarfLog("DW_CFA_advance_loc %u\n", delta); + + return true; +} + +static bool FIRCLSDwarfParseAndExecuteInstructionWithOperand(const void** cursor, uint8_t instruction, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state, intptr_t* codeOffset) { + uint8_t operand = instruction & DW_CFA_OPERAND_MASK; + bool success = false; + + switch (instruction & DW_CFA_OPCODE_MASK) { + case DW_CFA_offset: + success = FIRCLSDwarfParseAndExecute_offset(cursor, cieRecord, state, operand); + break; + case DW_CFA_advance_loc: + success = FIRCLSDwarfParseAndExecute_advance_loc(cursor, cieRecord, state, operand, codeOffset); + break; + case DW_CFA_restore: + FIRCLSSDKLog("Error: Unimplemented DWARF instruction with operand 0x%x\n", instruction); + break; + default: + FIRCLSSDKLog("Error: Unrecognized DWARF instruction 0x%x\n", instruction); + break; + } + + return success; +} + +#pragma mark - Expressions +static bool FIRCLSDwarfEvalulateExpression(const void* cursor, const FIRCLSThreadContext *registers, intptr_t stackValue, intptr_t *result) +{ + FIRCLSDwarfLog("starting at %p with initial value %lx\n", cursor, stackValue); + + if (!FIRCLSIsValidPointer(cursor) || !FIRCLSIsValidPointer(result)) { + FIRCLSSDKLog("Error: inputs invalid\n"); + return false; + } + + FIRCLSDwarfExpressionMachine machine; + + if (!FIRCLSDwarfExpressionMachineInit(&machine, cursor, registers, stackValue)) { + FIRCLSSDKLog("Error: unable to init DWARF expression machine\n"); + return false; + } + + if (!FIRCLSDwarfExpressionMachinePrepareForExecution(&machine)) { + FIRCLSSDKLog("Error: unable to prepare for execution\n"); + return false; + } + + while (!FIRCLSDwarfExpressionMachineIsFinished(&machine)) { + if (!FIRCLSDwarfExpressionMachineExecuteNextOpcode(&machine)) { + FIRCLSSDKLog("Error: failed to execute DWARF machine opcode\n"); + return false; + } + } + + if (!FIRCLSDwarfExpressionMachineGetResult(&machine, result)) { + FIRCLSSDKLog("Error: failed to get DWARF expression result\n"); + return false; + } + + FIRCLSDwarfLog("successfully computed expression result\n"); + + return true; +} + +#pragma mark - Execution +bool FIRCLSDwarfInstructionsEnumerate(DWARFInstructions* instructions, DWARFCIERecord* cieRecord, FIRCLSDwarfState* state, intptr_t pcOffset) { + if (!instructions || !cieRecord || !state) { + FIRCLSSDKLog("Error: inputs invalid\n"); + return false; + } + + // This is a little bit of state that can't be put into the state structure, because + // it is possible for instructions to push/pop state that does not affect this value. + intptr_t codeOffset = 0; + + const void* cursor = instructions->data; + const void* endAddress = cursor + instructions->length; + + FIRCLSDwarfLog("Running instructions from %p to %p\n", cursor, endAddress); + + // parse the instructions, as long as: + // - our data pointer is still in range + // - the pc offset is within the range of instructions that apply + + while ((cursor < endAddress) && (codeOffset < pcOffset)) { + uint8_t instruction = FIRCLSParseUint8AndAdvance(&cursor); + bool success = false; + + switch (instruction) { + case DW_CFA_nop: + FIRCLSDwarfLog("DW_CFA_nop\n"); + continue; + case DW_CFA_set_loc: + success = FIRCLSDwarfParseAndExecute_set_loc(&cursor, cieRecord, &codeOffset); + break; + case DW_CFA_advance_loc1: + success = FIRCLSDwarfParseAndExecute_advance_loc1(&cursor, cieRecord, &codeOffset); + break; + case DW_CFA_advance_loc2: + success = FIRCLSDwarfParseAndExecute_advance_loc2(&cursor, cieRecord, &codeOffset); + break; + case DW_CFA_advance_loc4: + success = FIRCLSDwarfParseAndExecute_advance_loc4(&cursor, cieRecord, &codeOffset); + break; + case DW_CFA_def_cfa: + success = FIRCLSDwarfParseAndExecute_def_cfa(&cursor, cieRecord, state); + break; + case DW_CFA_def_cfa_register: + success = FIRCLSDwarfParseAndExecute_def_cfa_register(&cursor, cieRecord, state); + break; + case DW_CFA_def_cfa_offset: + success = FIRCLSDwarfParseAndExecute_def_cfa_offset(&cursor, cieRecord, state); + break; + case DW_CFA_same_value: + success = FIRCLSDwarfParseAndExecute_same_value(&cursor, cieRecord, state); + break; + case DW_CFA_register: + success = FIRCLSDwarfParseAndExecute_register(&cursor, cieRecord, state); + break; + case DW_CFA_def_cfa_expression: + success = FIRCLSDwarfParseAndExecute_def_cfa_expression(&cursor, cieRecord, state); + break; + case DW_CFA_expression: + success = FIRCLSDwarfParseAndExecute_expression(&cursor, cieRecord, state); + break; + case DW_CFA_val_expression: + success = FIRCLSDwarfParseAndExecute_val_expression(&cursor, cieRecord, state); + break; + case DW_CFA_offset_extended: + case DW_CFA_restore_extended: + case DW_CFA_undefined: + case DW_CFA_remember_state: + case DW_CFA_restore_state: + case DW_CFA_offset_extended_sf: + case DW_CFA_def_cfa_sf: + case DW_CFA_def_cfa_offset_sf: + case DW_CFA_val_offset: + case DW_CFA_val_offset_sf: + case DW_CFA_GNU_window_save: + case DW_CFA_GNU_args_size: + case DW_CFA_GNU_negative_offset_extended: + FIRCLSSDKLog("Error: Unimplemented DWARF instruction 0x%x\n", instruction); + return false; + default: + success = FIRCLSDwarfParseAndExecuteInstructionWithOperand(&cursor, instruction, cieRecord, state, &codeOffset); + break; + } + + if (!success) { + FIRCLSSDKLog("Error: Failed to execute dwarf instruction 0x%x\n", instruction); + return false; + } + } + + return true; +} + +bool FIRCLSDwarfUnwindComputeRegisters(FIRCLSDwarfCFIRecord* record, FIRCLSThreadContext* registers) { + if (!record || !registers) { + return false; + } + + // We need to run the dwarf instructions to compute our register values. + // - initialize state + // - run the CIE instructions + // - run the FDE instructions + // - grab the values + + FIRCLSDwarfState state; + + memset(&state, 0, sizeof(FIRCLSDwarfState)); + + // We need to run all the instructions in the CIE record. So, pass in a large value for the pc offset + // so we don't stop early. + if (!FIRCLSDwarfInstructionsEnumerate(&record->cie.instructions, &record->cie, &state, INTPTR_MAX)) { + FIRCLSSDKLog("Error: Unable to run CIE instructions\n"); + return false; + } + + intptr_t pcOffset = FIRCLSThreadContextGetPC(registers) - record->fde.startAddress; + if (pcOffset < 0) { + FIRCLSSDKLog("Error: The FDE pcOffset value cannot be negative\n"); + return false; + } + + if (!FIRCLSDwarfInstructionsEnumerate(&record->fde.instructions, &record->cie, &state, pcOffset)) { + FIRCLSSDKLog("Error: Unable to run FDE instructions\n"); + return false; + } + + uintptr_t cfaRegister = 0; + + if (!FIRCLSDwarfGetCFA(&state, registers, &cfaRegister)) { + FIRCLSSDKLog("Error: failed to get CFA\n"); + return false; + } + + if (!FIRCLSDwarfUnwindAssignRegisters(&state, registers, cfaRegister, registers)) { + FIRCLSSDKLogError("Error: Unable to assign DWARF registers\n"); + return false; + } + + return true; +} + +bool FIRCLSDwarfUnwindAssignRegisters(const FIRCLSDwarfState *state, const FIRCLSThreadContext* registers, uintptr_t cfaRegister, FIRCLSThreadContext* outputRegisters) { + if (!FIRCLSIsValidPointer(state) || !FIRCLSIsValidPointer(registers)) { + FIRCLSSDKLogError("Error: input invalid\n"); + return false; + } + + // make a copy, which we'll be changing + FIRCLSThreadContext newThreadState = *registers; + + // loop through all the registers, so we can set their values + for (size_t i = 0; i <= CLS_DWARF_MAX_REGISTER_NUM; ++i) { + if (state->registers[i].location == FIRCLSDwarfRegisterUnused) { + continue; + } + + const uintptr_t value = FIRCLSDwarfGetSavedRegister(registers, cfaRegister, state->registers[i]); + + if (!FIRCLSDwarfUnwindSetRegisterValue(&newThreadState, i, value)) { + FIRCLSSDKLog("Error: Unable to restore register value\n"); + return false; + } + } + + if (!FIRCLSDwarfUnwindSetRegisterValue(&newThreadState, CLS_DWARF_REG_SP, cfaRegister)) { + FIRCLSSDKLog("Error: Unable to restore SP value\n"); + return false; + } + + // sanity-check that things have changed + if (FIRCLSDwarfCompareRegisters(registers, &newThreadState, CLS_DWARF_REG_SP)) { + FIRCLSSDKLog("Error: Stack pointer hasn't changed\n"); + return false; + } + + if (FIRCLSDwarfCompareRegisters(registers, &newThreadState, CLS_DWARF_REG_RETURN)) { + FIRCLSSDKLog("Error: PC hasn't changed\n"); + return false; + } + + // set our new value + *outputRegisters = newThreadState; + + return true; +} + +#pragma mark - Register Operations +bool FIRCLSDwarfCompareRegisters(const FIRCLSThreadContext* a, const FIRCLSThreadContext* b, uint64_t registerNum) { + return FIRCLSDwarfUnwindGetRegisterValue(a, registerNum) == FIRCLSDwarfUnwindGetRegisterValue(b, registerNum); +} + +bool FIRCLSDwarfGetCFA(FIRCLSDwarfState *state, const FIRCLSThreadContext *registers, uintptr_t *cfa) { + if (!FIRCLSIsValidPointer(state) || !FIRCLSIsValidPointer(registers) || !FIRCLSIsValidPointer(cfa)) { + FIRCLSSDKLog("Error: invalid input\n"); + return false; + } + + if (state->cfaExpression) { + if (!FIRCLSDwarfEvalulateExpression(state->cfaExpression, registers, 0, (intptr_t*)cfa)) { + FIRCLSSDKLog("Error: failed to compute CFA expression\n"); + return false; + } + + return true; + } + + // libunwind checks that cfaRegister is not zero. This seems like a potential bug - why couldn't + // it be zero? + + *cfa = FIRCLSDwarfUnwindGetRegisterValue(registers, state->cfaRegister) + (uintptr_t)state->cfaRegisterOffset; + + return true; +} + +uintptr_t FIRCLSDwarfGetSavedRegister(const FIRCLSThreadContext* registers, uintptr_t cfaRegister, FIRCLSDwarfRegister dRegister) { + intptr_t result = 0; + + FIRCLSDwarfLog("Getting register %x\n", dRegister.location); + + switch (dRegister.location) { + case FIRCLSDwarfRegisterInCFA: { + const uintptr_t address = cfaRegister + (uintptr_t)dRegister.value; + + if (!FIRCLSReadMemory(address, &result, sizeof(result))) { + FIRCLSSDKLog("Error: Unable to read CFA value\n"); + return 0; + } + } + return result; + case FIRCLSDwarfRegisterInRegister: + return FIRCLSDwarfUnwindGetRegisterValue(registers, dRegister.value); + case FIRCLSDwarfRegisterOffsetFromCFA: + FIRCLSSDKLog("Error: OffsetFromCFA unhandled\n"); + break; + case FIRCLSDwarfRegisterAtExpression: + if (!FIRCLSDwarfEvalulateExpression((void*)dRegister.value, registers, cfaRegister, &result)) { + FIRCLSSDKLog("Error: unable to evaluate expression\n"); + return 0; + } + + if (!FIRCLSReadMemory(result, &result, sizeof(result))) { + FIRCLSSDKLog("Error: Unable to read memory computed from expression\n"); + return 0; + } + + return result; + case FIRCLSDwarfRegisterIsExpression: + if (!FIRCLSDwarfEvalulateExpression((void*)dRegister.value, registers, cfaRegister, &result)) { + FIRCLSSDKLog("Error: unable to evaluate expression\n"); + return 0; + } + + return result; + default: + FIRCLSSDKLog("Error: Unrecognized register save location 0x%x\n", dRegister.location); + break; + } + + return 0; +} + +#if DEBUG +#pragma mark - Debugging +void FIRCLSCFIRecordShow(FIRCLSDwarfCFIRecord* record) { + if (!record) { + FIRCLSSDKLog("Error: CFI record: null\n"); + return; + } + + FIRCLSCIERecordShow(&record->cie); + FIRCLSFDERecordShow(&record->fde, &record->cie); +} + +void FIRCLSCIERecordShow(DWARFCIERecord* record) { + if (!record) { + FIRCLSSDKLog("Error: CIE: null\n"); + return; + } + + FIRCLSSDKLog("CIE:\n"); + FIRCLSSDKLog(" length: %llu\n", record->length); + FIRCLSSDKLog(" version: %u\n", record->version); + FIRCLSSDKLog(" augmentation: %s\n", record->augmentation); + FIRCLSSDKLog(" EH Data: 0x%04lx\n", record->ehData); + FIRCLSSDKLog("LSDA encoding: 0x%02x\n", record->lsdaEncoding); + FIRCLSSDKLog(" personality: 0x%lx\n", record->personalityFunction); + + + FIRCLSDwarfPointerEncodingShow(" encoding", record->pointerEncoding); + FIRCLSDwarfPointerEncodingShow(" P encoding", record->personalityEncoding); + + FIRCLSSDKLog(" code align: %llu\n", record->codeAlignFactor); + FIRCLSSDKLog(" data align: %lld\n", record->dataAlignFactor); + FIRCLSSDKLog(" RA register: %llu\n", record->returnAddressRegister); + + FIRCLSDwarfInstructionsShow(&record->instructions, record); +} + +void FIRCLSFDERecordShow(DWARFFDERecord* record, DWARFCIERecord* cie) { + if (!record) { + FIRCLSSDKLog("FDE: null\n"); + return; + } + + FIRCLSSDKLog("FDE:\n"); + FIRCLSSDKLog(" length: %llu\n", record->length); + FIRCLSSDKLog(" CIE offset: %llu\n", record->cieOffset); + FIRCLSSDKLog(" start addr: 0x%lx\n", record->startAddress); + FIRCLSSDKLog(" range: %lu\n", record->rangeSize); + + FIRCLSDwarfInstructionsShow(&record->instructions, cie); +} + +void FIRCLSDwarfPointerEncodingShow(const char* leadString, uint8_t encoding) { + if (encoding == DW_EH_PE_omit) { + FIRCLSSDKLog("%s: 0x%02x (omit)\n", leadString, encoding); + } else { + const char* peValue = ""; + const char* peOffset = ""; + + switch (encoding & DW_EH_PE_VALUE_MASK) { + case DW_EH_PE_absptr: peValue = "DW_EH_PE_absptr"; break; + case DW_EH_PE_uleb128: peValue = "DW_EH_PE_uleb128"; break; + case DW_EH_PE_udata2: peValue = "DW_EH_PE_udata2"; break; + case DW_EH_PE_udata4: peValue = "DW_EH_PE_udata4"; break; + case DW_EH_PE_udata8: peValue = "DW_EH_PE_udata8"; break; + case DW_EH_PE_signed: peValue = "DW_EH_PE_signed"; break; + case DW_EH_PE_sleb128: peValue = "DW_EH_PE_sleb128"; break; + case DW_EH_PE_sdata2: peValue = "DW_EH_PE_sdata2"; break; + case DW_EH_PE_sdata4: peValue = "DW_EH_PE_sdata4"; break; + case DW_EH_PE_sdata8: peValue = "DW_EH_PE_sdata8"; break; + default: peValue = "unknown"; break; + } + + switch (encoding & DW_EH_PE_RELATIVE_OFFSET_MASK) { + case DW_EH_PE_absptr: break; + case DW_EH_PE_pcrel: peOffset = " + DW_EH_PE_pcrel"; break; + case DW_EH_PE_textrel: peOffset = " + DW_EH_PE_textrel"; break; + case DW_EH_PE_datarel: peOffset = " + DW_EH_PE_datarel"; break; + case DW_EH_PE_funcrel: peOffset = " + DW_EH_PE_funcrel"; break; + case DW_EH_PE_aligned: peOffset = " + DW_EH_PE_aligned"; break; + case DW_EH_PE_indirect: peOffset = " + DW_EH_PE_indirect"; break; + default: break; + } + + FIRCLSSDKLog("%s: 0x%02x (%s%s)\n", leadString, encoding, peValue, peOffset); + } +} + +void FIRCLSDwarfInstructionsShow(DWARFInstructions* instructions, DWARFCIERecord* cie) { + if (!instructions) { + FIRCLSSDKLog("Error: Instructions null\n"); + } + + FIRCLSDwarfState state; + + memset(&state, 0, sizeof(FIRCLSDwarfState)); + + FIRCLSDwarfInstructionsEnumerate(instructions, cie, &state, -1); +} + +#endif + +#else +INJECT_STRIP_SYMBOL(dwarf_unwind) +#endif diff --git a/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h new file mode 100644 index 000000000000..a04d5086b162 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h @@ -0,0 +1,139 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSDwarfUnwindRegisters.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSThreadState.h" + +#include +#include +#include + +#if CLS_DWARF_UNWINDING_SUPPORTED + +#pragma mark Structures +typedef struct { + uint32_t length; + const void* data; +} DWARFInstructions; + +typedef struct { + uint64_t length; + uint8_t version; + uintptr_t ehData; // 8 bytes for 64-bit architectures, 4 bytes for 32 + const char* augmentation; + uint8_t pointerEncoding; + uint8_t lsdaEncoding; + uint8_t personalityEncoding; + uintptr_t personalityFunction; + uint64_t codeAlignFactor; + int64_t dataAlignFactor; + uint64_t returnAddressRegister; // is 64 bits enough for this value? + bool signalFrame; + + DWARFInstructions instructions; +} DWARFCIERecord; + +typedef struct { + uint64_t length; + uint64_t cieOffset; // also an arch-specific size + uintptr_t startAddress; + uintptr_t rangeSize; + + DWARFInstructions instructions; +} DWARFFDERecord; + +typedef struct { + DWARFCIERecord cie; + DWARFFDERecord fde; +} FIRCLSDwarfCFIRecord; + +typedef enum { + FIRCLSDwarfRegisterUnused = 0, + FIRCLSDwarfRegisterInCFA, + FIRCLSDwarfRegisterOffsetFromCFA, + FIRCLSDwarfRegisterInRegister, + FIRCLSDwarfRegisterAtExpression, + FIRCLSDwarfRegisterIsExpression +} FIRCLSDwarfRegisterLocation; + +typedef struct { + FIRCLSDwarfRegisterLocation location; + uint64_t value; +} FIRCLSDwarfRegister; + +typedef struct { + uint64_t cfaRegister; + int64_t cfaRegisterOffset; + const void* cfaExpression; + uint32_t spArgSize; + + FIRCLSDwarfRegister registers[CLS_DWARF_MAX_REGISTER_NUM + 1]; +} FIRCLSDwarfState; + +__BEGIN_DECLS + +#pragma mark - Parsing +bool FIRCLSDwarfParseCIERecord(DWARFCIERecord* cie, const void* ptr); +bool FIRCLSDwarfParseFDERecord(DWARFFDERecord* fdeRecord, + bool parseCIE, + DWARFCIERecord* cieRecord, + const void* ptr); +bool FIRCLSDwarfParseCFIFromFDERecord(FIRCLSDwarfCFIRecord* record, const void* ptr); +bool FIRCLSDwarfParseCFIFromFDERecordOffset(FIRCLSDwarfCFIRecord* record, + const void* ehFrame, + uintptr_t fdeOffset); + +#pragma mark - Properties +bool FIRCLSDwarfCIEIsValid(DWARFCIERecord* cie); +bool FIRCLSDwarfCIEHasAugmentationData(DWARFCIERecord* cie); + +#pragma mark - Execution +bool FIRCLSDwarfInstructionsEnumerate(DWARFInstructions* instructions, + DWARFCIERecord* cieRecord, + FIRCLSDwarfState* state, + intptr_t pcOffset); +bool FIRCLSDwarfUnwindComputeRegisters(FIRCLSDwarfCFIRecord* record, + FIRCLSThreadContext* registers); +bool FIRCLSDwarfUnwindAssignRegisters(const FIRCLSDwarfState* state, + const FIRCLSThreadContext* registers, + uintptr_t cfaRegister, + FIRCLSThreadContext* outputRegisters); + +#pragma mark - Register Operations +bool FIRCLSDwarfCompareRegisters(const FIRCLSThreadContext* a, + const FIRCLSThreadContext* b, + uint64_t registerNum); + +bool FIRCLSDwarfGetCFA(FIRCLSDwarfState* state, + const FIRCLSThreadContext* registers, + uintptr_t* cfa); +uintptr_t FIRCLSDwarfGetSavedRegister(const FIRCLSThreadContext* registers, + uintptr_t cfaRegister, + FIRCLSDwarfRegister dRegister); + +#if DEBUG +#pragma mark - Debugging +void FIRCLSCFIRecordShow(FIRCLSDwarfCFIRecord* record); +void FIRCLSCIERecordShow(DWARFCIERecord* record); +void FIRCLSFDERecordShow(DWARFFDERecord* record, DWARFCIERecord* cie); +void FIRCLSDwarfPointerEncodingShow(const char* leadString, uint8_t encoding); +void FIRCLSDwarfInstructionsShow(DWARFInstructions* instructions, DWARFCIERecord* cie); +#endif + +__END_DECLS + +#endif diff --git a/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h new file mode 100644 index 000000000000..bfb45ad5d8a7 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h @@ -0,0 +1,150 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include + +#if CLS_CPU_X86_64 +enum { + CLS_DWARF_X86_64_RAX = 0, + CLS_DWARF_X86_64_RDX = 1, + CLS_DWARF_X86_64_RCX = 2, + CLS_DWARF_X86_64_RBX = 3, + CLS_DWARF_X86_64_RSI = 4, + CLS_DWARF_X86_64_RDI = 5, + CLS_DWARF_X86_64_RBP = 6, + CLS_DWARF_X86_64_RSP = 7, + CLS_DWARF_X86_64_R8 = 8, + CLS_DWARF_X86_64_R9 = 9, + CLS_DWARF_X86_64_R10 = 10, + CLS_DWARF_X86_64_R11 = 11, + CLS_DWARF_X86_64_R12 = 12, + CLS_DWARF_X86_64_R13 = 13, + CLS_DWARF_X86_64_R14 = 14, + CLS_DWARF_X86_64_R15 = 15, + + CLS_DWARF_X86_64_RET_ADDR = 16 +}; + +#define CLS_DWARF_REG_RETURN CLS_DWARF_X86_64_RET_ADDR +#define CLS_DWARF_REG_SP CLS_DWARF_X86_64_RSP +#define CLS_DWARF_REG_FP CLS_DWARF_X86_64_RBP + +#define CLS_DWARF_MAX_REGISTER_NUM (CLS_DWARF_X86_64_RET_ADDR) + +#elif CLS_CPU_I386 + +enum { + CLS_DWARF_X86_EAX = 0, + CLS_DWARF_X86_ECX = 1, + CLS_DWARF_X86_EDX = 2, + CLS_DWARF_X86_EBX = 3, + CLS_DWARF_X86_EBP = 4, + CLS_DWARF_X86_ESP = 5, + CLS_DWARF_X86_ESI = 6, + CLS_DWARF_X86_EDI = 7, + + CLS_DWARF_X86_RET_ADDR = 8 +}; + +#define CLS_DWARF_REG_RETURN CLS_DWARF_X86_RET_ADDR +#define CLS_DWARF_REG_SP CLS_DWARF_X86_ESP +#define CLS_DWARF_REG_FP CLS_DWARF_X86_EBP + +#define CLS_DWARF_MAX_REGISTER_NUM (CLS_DWARF_X86_RET_ADDR) + +#elif CLS_CPU_ARM64 + +// 64-bit ARM64 registers +enum { + CLS_DWARF_ARM64_X0 = 0, + CLS_DWARF_ARM64_X1 = 1, + CLS_DWARF_ARM64_X2 = 2, + CLS_DWARF_ARM64_X3 = 3, + CLS_DWARF_ARM64_X4 = 4, + CLS_DWARF_ARM64_X5 = 5, + CLS_DWARF_ARM64_X6 = 6, + CLS_DWARF_ARM64_X7 = 7, + CLS_DWARF_ARM64_X8 = 8, + CLS_DWARF_ARM64_X9 = 9, + CLS_DWARF_ARM64_X10 = 10, + CLS_DWARF_ARM64_X11 = 11, + CLS_DWARF_ARM64_X12 = 12, + CLS_DWARF_ARM64_X13 = 13, + CLS_DWARF_ARM64_X14 = 14, + CLS_DWARF_ARM64_X15 = 15, + CLS_DWARF_ARM64_X16 = 16, + CLS_DWARF_ARM64_X17 = 17, + CLS_DWARF_ARM64_X18 = 18, + CLS_DWARF_ARM64_X19 = 19, + CLS_DWARF_ARM64_X20 = 20, + CLS_DWARF_ARM64_X21 = 21, + CLS_DWARF_ARM64_X22 = 22, + CLS_DWARF_ARM64_X23 = 23, + CLS_DWARF_ARM64_X24 = 24, + CLS_DWARF_ARM64_X25 = 25, + CLS_DWARF_ARM64_X26 = 26, + CLS_DWARF_ARM64_X27 = 27, + CLS_DWARF_ARM64_X28 = 28, + CLS_DWARF_ARM64_X29 = 29, + CLS_DWARF_ARM64_FP = 29, + CLS_DWARF_ARM64_X30 = 30, + CLS_DWARF_ARM64_LR = 30, + CLS_DWARF_ARM64_X31 = 31, + CLS_DWARF_ARM64_SP = 31, + // reserved block + CLS_DWARF_ARM64_D0 = 64, + CLS_DWARF_ARM64_D1 = 65, + CLS_DWARF_ARM64_D2 = 66, + CLS_DWARF_ARM64_D3 = 67, + CLS_DWARF_ARM64_D4 = 68, + CLS_DWARF_ARM64_D5 = 69, + CLS_DWARF_ARM64_D6 = 70, + CLS_DWARF_ARM64_D7 = 71, + CLS_DWARF_ARM64_D8 = 72, + CLS_DWARF_ARM64_D9 = 73, + CLS_DWARF_ARM64_D10 = 74, + CLS_DWARF_ARM64_D11 = 75, + CLS_DWARF_ARM64_D12 = 76, + CLS_DWARF_ARM64_D13 = 77, + CLS_DWARF_ARM64_D14 = 78, + CLS_DWARF_ARM64_D15 = 79, + CLS_DWARF_ARM64_D16 = 80, + CLS_DWARF_ARM64_D17 = 81, + CLS_DWARF_ARM64_D18 = 82, + CLS_DWARF_ARM64_D19 = 83, + CLS_DWARF_ARM64_D20 = 84, + CLS_DWARF_ARM64_D21 = 85, + CLS_DWARF_ARM64_D22 = 86, + CLS_DWARF_ARM64_D23 = 87, + CLS_DWARF_ARM64_D24 = 88, + CLS_DWARF_ARM64_D25 = 89, + CLS_DWARF_ARM64_D26 = 90, + CLS_DWARF_ARM64_D27 = 91, + CLS_DWARF_ARM64_D28 = 92, + CLS_DWARF_ARM64_D29 = 93, + CLS_DWARF_ARM64_D30 = 94, + CLS_DWARF_ARM64_D31 = 95 +}; + +#define CLS_DWARF_MAX_REGISTER_NUM (CLS_DWARF_ARM64_SP) + +#define CLS_DWARF_REG_RETURN CLS_DWARF_ARM64_LR +#define CLS_DWARF_REG_SP CLS_DWARF_ARM64_SP +#define CLS_DWARF_REG_FP CLS_DWARF_ARM64_FP + +#endif + +#define CLS_DWARF_INVALID_REGISTER_NUM (CLS_DWARF_MAX_REGISTER_NUM + 1) diff --git a/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c new file mode 100644 index 000000000000..cb7ad80553e8 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c @@ -0,0 +1,315 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSUnwind.h" +#include "FIRCLSUtility.h" +#include "FIRCLSCompactUnwind.h" +#include "FIRCLSBinaryImage.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSGlobals.h" + +#include +#include +#include + +// Without a limit on the number of frames we unwind, there's a real possibility +// we'll get stuck in an infinite loop. But, we still need pretty big limits, +// because stacks can get quite big. Also, the stacks are different on the platforms. +// These values were empirically determined (~525000 on OS X, ~65000 on iOS). +#if TARGET_OS_EMBEDDED +const uint32_t FIRCLSUnwindMaxFrames = 100000; +#else +const uint32_t FIRCLSUnwindMaxFrames = 600000; +#endif + +const uint32_t FIRCLSUnwindInfiniteRecursionCountThreshold = 10; + +#pragma mark Prototypes +static bool FIRCLSUnwindNextFrameUsingAllStrategies(FIRCLSUnwindContext* context); +#if CLS_COMPACT_UNWINDING_SUPPORTED +static bool FIRCLSUnwindWithCompactUnwindInfo(FIRCLSUnwindContext* context); +#endif +bool FIRCLSUnwindContextHasValidPCAndSP(FIRCLSUnwindContext *context); + +#pragma mark - API +bool FIRCLSUnwindInit(FIRCLSUnwindContext* context, FIRCLSThreadContext threadContext) { + if (!context) { + return false; + } + + memset(context, 0, sizeof(FIRCLSUnwindContext)); + + context->registers = threadContext; + + return true; +} + +bool FIRCLSUnwindNextFrame(FIRCLSUnwindContext* context) { + if (!FIRCLSIsValidPointer(context)) { + FIRCLSSDKLog("Error: invalid inputs\n"); + return false; + } + + if (!FIRCLSUnwindContextHasValidPCAndSP(context)) { + // This is a special-case. It is possible to try to unwind a thread that has no stack (ie, is executing + // zero functions. I believe this happens when a thread has exited, but before the kernel has actually + // cleaned it up. This situation can only apply to the first frame. So, in that case, we don't count + // it as an error. But, if it happens mid-unwind, it's a problem. + + if (context->frameCount == 0) { + FIRCLSSDKLog("Cancelling unwind for thread with invalid PC/SP\n"); + } else { + FIRCLSSDKLog("Error: thread PC/SP invalid before unwind\n"); + } + + return false; + } + + if (!FIRCLSUnwindNextFrameUsingAllStrategies(context)) { + FIRCLSSDKLogError("Failed to advance to the next frame\n"); + return false; + } + + uintptr_t pc = FIRCLSUnwindGetPC(context); + uintptr_t sp = FIRCLSUnwindGetStackPointer(context); + + // Unwinding will complete when this is no longer a valid value + if (!FIRCLSIsValidPointer(pc)) { + return false; + } + + // after unwinding, validate that we have a sane register value + if (!FIRCLSIsValidPointer(sp)) { + FIRCLSSDKLog("Error: SP (%p) isn't a valid pointer\n", (void*)sp); + return false; + } + + // track repeating frames + if (context->lastFramePC == pc) { + context->repeatCount += 1; + } else { + context->repeatCount = 0; + } + + context->frameCount += 1; + context->lastFramePC = pc; + + return true; +} + +#pragma mark - Register Accessors +uintptr_t FIRCLSUnwindGetPC(FIRCLSUnwindContext* context) { + if (!FIRCLSIsValidPointer(context)) { + return 0; + } + + return FIRCLSThreadContextGetPC(&context->registers); +} + +uintptr_t FIRCLSUnwindGetStackPointer(FIRCLSUnwindContext* context) { + if (!FIRCLSIsValidPointer(context)) { + return 0; + } + + return FIRCLSThreadContextGetStackPointer(&context->registers); +} + +static uintptr_t FIRCLSUnwindGetFramePointer(FIRCLSUnwindContext* context) { + if (!FIRCLSIsValidPointer(context)) { + return 0; + } + + return FIRCLSThreadContextGetFramePointer(&context->registers); +} + +uint32_t FIRCLSUnwindGetFrameRepeatCount(FIRCLSUnwindContext* context) { + if (!FIRCLSIsValidPointer(context)) { + return 0; + } + + return context->repeatCount; +} + +#pragma mark - Unwind Strategies +static bool FIRCLSUnwindNextFrameUsingAllStrategies(FIRCLSUnwindContext* context) { + if (!FIRCLSIsValidPointer(context)) { + FIRCLSSDKLogError("Arguments invalid\n"); + return false; + } + + if (context->frameCount >= FIRCLSUnwindMaxFrames) { + FIRCLSSDKLogWarn("Exceeded maximum number of frames\n"); + return false; + } + + uintptr_t pc = FIRCLSUnwindGetPC(context); + + // Ok, what's going on here? libunwind's UnwindCursor::setInfoBasedOnIPRegister has a + // parameter that, if true, does this subtraction. Despite the comments in the code + // (of 35.1), I found that the parameter was almost always set to true. + // + // I then ran into a problem when unwinding from _pthread_start -> thread_start. This + // is a common transition, which happens in pretty much every report. An extra frame + // was being generated, because the PC we get for _pthread_start was mapping to exactly + // one greater than the function's last byte, according to the compact unwind info. This + // resulted in using the wrong compact encoding, and picking the next function, which + // turned out to be dwarf instead of a frame pointer. + + // So, the moral is - do the subtraction for all frames except the first. I haven't found + // a case where it produces an incorrect result. Also note that at first, I thought this would + // subtract one from the final addresses too. But, the end of this function will *compute* PC, + // so this value is used only to look up unwinding data. + + if (context->frameCount > 0) { + --pc; + if (!FIRCLSThreadContextSetPC(&context->registers, pc)) { + FIRCLSSDKLogError("Unable to set PC\n"); + return false; + } + } + + if (!FIRCLSIsValidPointer(pc)) { + FIRCLSSDKLogError("PC is invalid\n"); + return false; + } + + // the first frame is special - as the registers we need + // are already loaded by definition + if (context->frameCount == 0) { + return true; + } + +#if CLS_COMPACT_UNWINDING_SUPPORTED + // attempt to advance to the next frame using compact unwinding, and + // only fall back to the frame pointer if that fails + if (FIRCLSUnwindWithCompactUnwindInfo(context)) { + return true; + } +#endif + + // If the frame pointer is zero, we cannot use an FP-based unwind and we can reasonably + // assume that we've just gotten to the end of the stack. + if (FIRCLSUnwindGetFramePointer(context) == 0) { + FIRCLSSDKLogWarn("FP is zero, aborting unwind\n"); + // make sure to set the PC to zero, to indicate the unwind is complete + return FIRCLSThreadContextSetPC(&context->registers, 0); + } + + // Only allow stack scanning (as a last resort) if we're on the first frame. All others + // are too likely to screw up. + if (FIRCLSUnwindWithFramePointer(&context->registers, context->frameCount == 1)) { + return true; + } + + FIRCLSSDKLogError("Unable to use frame pointer\n"); + + return false; +} + +#if CLS_COMPACT_UNWINDING_SUPPORTED +static bool FIRCLSUnwindWithCompactUnwindInfo(FIRCLSUnwindContext* context) { + if (!context) { + return false; + } + + // step one - find the image the current pc is within + FIRCLSBinaryImageRuntimeNode image; + + uintptr_t pc = FIRCLSUnwindGetPC(context); + + if (!FIRCLSBinaryImageSafeFindImageForAddress(pc, &image)) { + FIRCLSSDKLogWarn("Unable to find binary for %p\n", (void*)pc); + return false; + } + +#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME + FIRCLSSDKLogDebug("Binary image for %p at %p => %s\n", (void*)pc, image.baseAddress, image.name); +#else + FIRCLSSDKLogDebug("Binary image for %p at %p\n", (void*)pc, image.baseAddress); +#endif + + if (!FIRCLSBinaryImageSafeHasUnwindInfo(&image)) { + FIRCLSSDKLogInfo("Binary image at %p has no unwind info\n", image.baseAddress); + return false; + } + + if (!FIRCLSCompactUnwindInit(&context->compactUnwindState, image.unwindInfo, image.ehFrame, (uintptr_t)image.baseAddress)) { + FIRCLSSDKLogError("Unable to read unwind info\n"); + return false; + } + + // this function will actually attempt to find compact unwind info for the current PC, + // and use it to mutate the context register state + return FIRCLSCompactUnwindLookupAndCompute(&context->compactUnwindState, &context->registers); +} +#endif + +#pragma mark - Utility Functions +bool FIRCLSUnwindContextHasValidPCAndSP(FIRCLSUnwindContext *context) { + return FIRCLSIsValidPointer(FIRCLSUnwindGetPC(context)) && FIRCLSIsValidPointer(FIRCLSUnwindGetStackPointer(context)); +} + +#if CLS_CPU_64BIT +#define BASIC_INFO_TYPE vm_region_basic_info_64_t +#define BASIC_INFO VM_REGION_BASIC_INFO_64 +#define BASIC_INFO_COUNT VM_REGION_BASIC_INFO_COUNT_64 +#define vm_region_query_fn vm_region_64 +#else +#define BASIC_INFO_TYPE vm_region_basic_info_t +#define BASIC_INFO VM_REGION_BASIC_INFO +#define BASIC_INFO_COUNT VM_REGION_BASIC_INFO_COUNT +#define vm_region_query_fn vm_region +#endif +bool FIRCLSUnwindIsAddressExecutable(vm_address_t address) { +#if CLS_COMPACT_UNWINDING_SUPPORTED + FIRCLSBinaryImageRuntimeNode unusedNode; + + return FIRCLSBinaryImageSafeFindImageForAddress(address, &unusedNode); +#else + return true; +#endif +} + +bool FIRCLSUnwindFirstExecutableAddress(vm_address_t start, vm_address_t end, vm_address_t* foundAddress) { + // This function walks up the data on the stack, looking for the first value that is an address on an + // exectuable page. This is a heurestic, and can hit false positives. + + *foundAddress = 0; // write in a 0 + + do { + vm_address_t address; + + FIRCLSSDKLogDebug("Checking address %p => %p\n", (void*)start, (void*)*(uintptr_t*)start); + + // if start isn't a valid pointer, don't even bother trying + if (FIRCLSIsValidPointer(start)) { + if (!FIRCLSReadMemory(start, &address, sizeof(void*))) { + // if we fail to read from the stack, we're done + return false; + } + + FIRCLSSDKLogDebug("Checking for executable %p\n", (void*)address); + // when we find an exectuable address, we're finished + if (FIRCLSUnwindIsAddressExecutable(address)) { + *foundAddress = address; + return true; + } + } + + start += sizeof(void*); // move back up the stack + + } while (start < end); + + return false; +} diff --git a/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h new file mode 100644 index 000000000000..08b23ead3976 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h @@ -0,0 +1,53 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSThreadState.h" +#include "FIRCLSUtility.h" +#if CLS_COMPACT_UNWINDING_SUPPORTED +#include "FIRCLSCompactUnwind.h" +#endif +#include "FIRCLSUnwind_arch.h" + +#include +#include + +extern const uint32_t FIRCLSUnwindMaxFrames; + +extern const uint32_t FIRCLSUnwindInfiniteRecursionCountThreshold; + +typedef struct { + FIRCLSThreadContext registers; + uint32_t frameCount; +#if CLS_COMPACT_UNWINDING_SUPPORTED + FIRCLSCompactUnwindContext compactUnwindState; +#endif + uintptr_t lastFramePC; + uint32_t repeatCount; +} FIRCLSUnwindContext; + +// API +bool FIRCLSUnwindInit(FIRCLSUnwindContext* context, FIRCLSThreadContext threadContext); + +bool FIRCLSUnwindNextFrame(FIRCLSUnwindContext* context); +uintptr_t FIRCLSUnwindGetPC(FIRCLSUnwindContext* context); +uintptr_t FIRCLSUnwindGetStackPointer(FIRCLSUnwindContext* context); +uint32_t FIRCLSUnwindGetFrameRepeatCount(FIRCLSUnwindContext* context); + +// utility functions +bool FIRCLSUnwindIsAddressExecutable(vm_address_t address); +bool FIRCLSUnwindFirstExecutableAddress(vm_address_t start, + vm_address_t end, + vm_address_t* foundAddress); diff --git a/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h new file mode 100644 index 000000000000..dc5e29692d85 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h @@ -0,0 +1,33 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSFeatures.h" + +#include "FIRCLSThreadState.h" +#if CLS_COMPACT_UNWINDING_SUPPORTED +#include "FIRCLSCompactUnwind.h" +#endif + +bool FIRCLSUnwindWithFramePointer(FIRCLSThreadContext *registers, bool allowScanning); +uintptr_t FIRCLSUnwindStackPointerFromFramePointer(uintptr_t framePtr); + +#if CLS_DWARF_UNWINDING_SUPPORTED +uintptr_t FIRCLSCompactUnwindDwarfOffset(compact_unwind_encoding_t encoding); +bool FIRCLSDwarfUnwindSetRegisterValue(FIRCLSThreadContext *registers, + uint64_t num, + uintptr_t value); +uintptr_t FIRCLSDwarfUnwindGetRegisterValue(const FIRCLSThreadContext *registers, uint64_t num); +#endif diff --git a/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c new file mode 100644 index 000000000000..9abf1fe67775 --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c @@ -0,0 +1,215 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDefines.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSCompactUnwind.h" +#include "FIRCLSCompactUnwind_Private.h" +#include "FIRCLSDwarfUnwind.h" +#include "FIRCLSUnwind.h" +#include "FIRCLSUnwind_arch.h" +#include "FIRCLSUtility.h" + +#if CLS_CPU_ARM || CLS_CPU_ARM64 + +static bool FIRCLSUnwindWithLRRegister(FIRCLSThreadContext* registers) { + if (!FIRCLSIsValidPointer(registers)) { + return false; + } + + // Return address is in LR, SP is pointing to the next frame. + uintptr_t value = FIRCLSThreadContextGetLinkRegister(registers); + + if (!FIRCLSIsValidPointer(value)) { + FIRCLSSDKLog("Error: LR value is invalid\n"); + return false; + } + + return FIRCLSThreadContextSetPC(registers, value); +} + +bool FIRCLSUnwindWithFramePointer(FIRCLSThreadContext* registers, bool allowScanning) { + if (allowScanning) { + // The LR register does have the return address here, but there are situations where + // this can produce false matches. Better backend rules can fix this up in many cases. + if (FIRCLSUnwindWithLRRegister(registers)) { + return true; + } else { + // In this case, we're unable to use the LR. We don't want to just stop unwinding, so + // proceed with the normal, non-scanning path + FIRCLSSDKLog("Unable to use LR, skipping\n"); + } + } + + // read the values from the stack + const uintptr_t framePointer = FIRCLSThreadContextGetFramePointer(registers); + uintptr_t stack[2]; + + if (!FIRCLSReadMemory((vm_address_t)framePointer, stack, sizeof(stack))) { + // unable to read the first stack frame + FIRCLSSDKLog("Error: failed to read memory at address %p\n", (void*)framePointer); + return false; + } + + if (!FIRCLSThreadContextSetPC(registers, stack[1])) { + return false; + } + + if (!FIRCLSThreadContextSetFramePointer(registers, stack[0])) { + return false; + } + + if (!FIRCLSThreadContextSetStackPointer(registers, FIRCLSUnwindStackPointerFromFramePointer(framePointer))) { + return false; + } + + return true; +} + +uintptr_t FIRCLSUnwindStackPointerFromFramePointer(uintptr_t framePtr) { + // the stack pointer is the frame pointer plus the two saved pointers for the frame + return framePtr + 2 * sizeof(void *); +} + +#if CLS_COMPACT_UNWINDING_SUPPORTED +bool FIRCLSCompactUnwindComputeRegisters(FIRCLSCompactUnwindContext* context, FIRCLSCompactUnwindResult* result, FIRCLSThreadContext* registers) { + if (!context || !result || !registers) { + return false; + } + + // Note that compact_uwnind_encoding.h has a few bugs in it prior to iOS 8.0. + // Only refer to the >= 8.0 header. + switch (result->encoding & UNWIND_ARM64_MODE_MASK) { + case UNWIND_ARM64_MODE_FRAMELESS: + // Interestingly, we also know the size of the stack frame, by + // using UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK. Is that useful? + return FIRCLSUnwindWithLRRegister(registers); + break; + case UNWIND_ARM64_MODE_DWARF: + return FIRCLSCompactUnwindDwarfFrame(context, result->encoding & UNWIND_ARM64_DWARF_SECTION_OFFSET, registers); + break; + case UNWIND_ARM64_MODE_FRAME: + return FIRCLSUnwindWithFramePointer(registers, false); + default: + FIRCLSSDKLog("Invalid encoding 0x%x\n", result->encoding); + break; + } + + return false; +} +#endif + +#if CLS_DWARF_UNWINDING_SUPPORTED +uintptr_t FIRCLSDwarfUnwindGetRegisterValue(const FIRCLSThreadContext *registers, uint64_t num) +{ + switch (num) { + case CLS_DWARF_ARM64_X0: return registers->__ss.__x[0]; + case CLS_DWARF_ARM64_X1: return registers->__ss.__x[1]; + case CLS_DWARF_ARM64_X2: return registers->__ss.__x[2]; + case CLS_DWARF_ARM64_X3: return registers->__ss.__x[3]; + case CLS_DWARF_ARM64_X4: return registers->__ss.__x[4]; + case CLS_DWARF_ARM64_X5: return registers->__ss.__x[5]; + case CLS_DWARF_ARM64_X6: return registers->__ss.__x[6]; + case CLS_DWARF_ARM64_X7: return registers->__ss.__x[7]; + case CLS_DWARF_ARM64_X8: return registers->__ss.__x[8]; + case CLS_DWARF_ARM64_X9: return registers->__ss.__x[9]; + case CLS_DWARF_ARM64_X10: return registers->__ss.__x[10]; + case CLS_DWARF_ARM64_X11: return registers->__ss.__x[11]; + case CLS_DWARF_ARM64_X12: return registers->__ss.__x[12]; + case CLS_DWARF_ARM64_X13: return registers->__ss.__x[13]; + case CLS_DWARF_ARM64_X14: return registers->__ss.__x[14]; + case CLS_DWARF_ARM64_X15: return registers->__ss.__x[15]; + case CLS_DWARF_ARM64_X16: return registers->__ss.__x[16]; + case CLS_DWARF_ARM64_X17: return registers->__ss.__x[17]; + case CLS_DWARF_ARM64_X18: return registers->__ss.__x[18]; + case CLS_DWARF_ARM64_X19: return registers->__ss.__x[19]; + case CLS_DWARF_ARM64_X20: return registers->__ss.__x[20]; + case CLS_DWARF_ARM64_X21: return registers->__ss.__x[21]; + case CLS_DWARF_ARM64_X22: return registers->__ss.__x[22]; + case CLS_DWARF_ARM64_X23: return registers->__ss.__x[23]; + case CLS_DWARF_ARM64_X24: return registers->__ss.__x[24]; + case CLS_DWARF_ARM64_X25: return registers->__ss.__x[25]; + case CLS_DWARF_ARM64_X26: return registers->__ss.__x[26]; + case CLS_DWARF_ARM64_X27: return registers->__ss.__x[27]; + case CLS_DWARF_ARM64_X28: return registers->__ss.__x[28]; + case CLS_DWARF_ARM64_FP: return FIRCLSThreadContextGetFramePointer(registers); + case CLS_DWARF_ARM64_LR: return FIRCLSThreadContextGetLinkRegister(registers); + case CLS_DWARF_ARM64_SP: return FIRCLSThreadContextGetStackPointer(registers); + default: + break; + } + + FIRCLSSDKLog("Error: Unrecognized get register number %llu\n", num); + + return 0; +} + +bool FIRCLSDwarfUnwindSetRegisterValue(FIRCLSThreadContext *registers, uint64_t num, uintptr_t value) +{ + switch (num) { + case CLS_DWARF_ARM64_X0: registers->__ss.__x[0] = value; return true; + case CLS_DWARF_ARM64_X1: registers->__ss.__x[1] = value; return true; + case CLS_DWARF_ARM64_X2: registers->__ss.__x[2] = value; return true; + case CLS_DWARF_ARM64_X3: registers->__ss.__x[3] = value; return true; + case CLS_DWARF_ARM64_X4: registers->__ss.__x[4] = value; return true; + case CLS_DWARF_ARM64_X5: registers->__ss.__x[5] = value; return true; + case CLS_DWARF_ARM64_X6: registers->__ss.__x[6] = value; return true; + case CLS_DWARF_ARM64_X7: registers->__ss.__x[7] = value; return true; + case CLS_DWARF_ARM64_X8: registers->__ss.__x[8] = value; return true; + case CLS_DWARF_ARM64_X9: registers->__ss.__x[9] = value; return true; + case CLS_DWARF_ARM64_X10: registers->__ss.__x[10] = value; return true; + case CLS_DWARF_ARM64_X11: registers->__ss.__x[11] = value; return true; + case CLS_DWARF_ARM64_X12: registers->__ss.__x[12] = value; return true; + case CLS_DWARF_ARM64_X13: registers->__ss.__x[13] = value; return true; + case CLS_DWARF_ARM64_X14: registers->__ss.__x[14] = value; return true; + case CLS_DWARF_ARM64_X15: registers->__ss.__x[15] = value; return true; + case CLS_DWARF_ARM64_X16: registers->__ss.__x[16] = value; return true; + case CLS_DWARF_ARM64_X17: registers->__ss.__x[17] = value; return true; + case CLS_DWARF_ARM64_X18: registers->__ss.__x[18] = value; return true; + case CLS_DWARF_ARM64_X19: registers->__ss.__x[19] = value; return true; + case CLS_DWARF_ARM64_X20: registers->__ss.__x[20] = value; return true; + case CLS_DWARF_ARM64_X21: registers->__ss.__x[21] = value; return true; + case CLS_DWARF_ARM64_X22: registers->__ss.__x[22] = value; return true; + case CLS_DWARF_ARM64_X23: registers->__ss.__x[23] = value; return true; + case CLS_DWARF_ARM64_X24: registers->__ss.__x[24] = value; return true; + case CLS_DWARF_ARM64_X25: registers->__ss.__x[25] = value; return true; + case CLS_DWARF_ARM64_X26: registers->__ss.__x[26] = value; return true; + case CLS_DWARF_ARM64_X27: registers->__ss.__x[27] = value; return true; + case CLS_DWARF_ARM64_X28: registers->__ss.__x[28] = value; return true; + case CLS_DWARF_ARM64_FP: FIRCLSThreadContextSetFramePointer(registers, value); return true; + case CLS_DWARF_ARM64_SP: FIRCLSThreadContextSetStackPointer(registers, value); return true; + case CLS_DWARF_ARM64_LR: + // Here's what's going on. For x86, the "return register" is virtual. The architecture + // doesn't actually have one, but DWARF does have the concept. So, when the system + // tries to set the return register, we set the PC. You can see this behavior + // in the FIRCLSDwarfUnwindSetRegisterValue implemenation for that architecture. In the + // case of ARM64, the register is real. So, we have to be extra careful to make sure + // we update the PC here. Otherwise, when a DWARF unwind completes, it won't have + // changed the PC to the right value. + FIRCLSThreadContextSetLinkRegister(registers, value); + FIRCLSThreadContextSetPC(registers, value); + return true; + default: + break; + } + + FIRCLSSDKLog("Unrecognized set register number %llu\n", num); + + return false; +} +#endif + +#else +INJECT_STRIP_SYMBOL(unwind_arm) +#endif diff --git a/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c new file mode 100644 index 000000000000..445a0e6f908c --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c @@ -0,0 +1,430 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSDefines.h" +#include "FIRCLSCompactUnwind_Private.h" +#include "FIRCLSDwarfUnwind.h" +#include "FIRCLSFeatures.h" +#include "FIRCLSUnwind.h" +#include "FIRCLSUnwind_arch.h" +#include "FIRCLSUnwind_x86.h" +#include "FIRCLSUtility.h" + +#if CLS_CPU_X86 + +static bool FIRCLSCompactUnwindBPFrame(compact_unwind_encoding_t encoding, FIRCLSThreadContext* registers); +static bool FIRCLSCompactUnwindFrameless(compact_unwind_encoding_t encoding, FIRCLSThreadContext* registers, uintptr_t functionStart, bool indirect); + +#if CLS_COMPACT_UNWINDING_SUPPORTED +bool FIRCLSCompactUnwindComputeRegisters(FIRCLSCompactUnwindContext* context, FIRCLSCompactUnwindResult* result, FIRCLSThreadContext* registers) { + if (!FIRCLSIsValidPointer(context) || !FIRCLSIsValidPointer(result) || !FIRCLSIsValidPointer(registers)) { + FIRCLSSDKLogError("invalid inputs\n"); + return false; + } + + FIRCLSSDKLogDebug("Computing registers for encoding %x\n", result->encoding); + + switch (result->encoding & CLS_X86_MODE_MASK) { + case CLS_X86_MODE_BP_FRAME: + return FIRCLSCompactUnwindBPFrame(result->encoding, registers); + case CLS_X86_MODE_STACK_IMMD: + return FIRCLSCompactUnwindFrameless(result->encoding, registers, result->functionStart, false); + case CLS_X86_MODE_STACK_IND: + return FIRCLSCompactUnwindFrameless(result->encoding, registers, result->functionStart, true); + case CLS_X86_MODE_DWARF: + return FIRCLSCompactUnwindDwarfFrame(context, result->encoding & CLS_X86_DWARF_SECTION_OFFSET, registers); + default: + FIRCLSSDKLogError("Invalid encoding %x\n", result->encoding); + break; + } + + return false; +} +#endif + +static bool FIRCLSCompactUnwindBPFrame(compact_unwind_encoding_t encoding, FIRCLSThreadContext* registers) { + // this is the plain-vanilla frame pointer process + + //uint32_t offset = GET_BITS_WITH_MASK(encoding, UNWIND_X86_EBP_FRAME_OFFSET); + //uint32_t locations = GET_BITS_WITH_MASK(encoding, UNWIND_X86_64_RBP_FRAME_REGISTERS); + + // TODO: pretty sure we do need to restore registers here, so that if a subsequent frame needs these + // results, they will be correct + + // Checkout CompactUnwinder.hpp in libunwind for how to do this. Since we don't make use of any of + // those registers for a stacktrace only, there's nothing we need do with them. + + // read the values from the stack + const uintptr_t framePointer = FIRCLSThreadContextGetFramePointer(registers); + uintptr_t stack[2]; + + if (!FIRCLSReadMemory((vm_address_t)framePointer, stack, sizeof(stack))) { + // unable to read the first stack frame + FIRCLSSDKLog("Error: failed to read memory at address %p\n", (void*)framePointer); + return false; + } + + if (!FIRCLSThreadContextSetPC(registers, stack[1])) { + return false; + } + + if (!FIRCLSThreadContextSetFramePointer(registers, stack[0])) { + return false; + } + + if (!FIRCLSThreadContextSetStackPointer(registers, FIRCLSUnwindStackPointerFromFramePointer(framePointer))) { + return false; + } + + return true; +} + +bool FIRCLSUnwindWithStackScanning(FIRCLSThreadContext* registers) { + vm_address_t start = (vm_address_t)FIRCLSThreadContextGetStackPointer(registers); + vm_address_t end = (vm_address_t)FIRCLSThreadContextGetFramePointer(registers); + + uintptr_t newPC = 0; + + if (!FIRCLSUnwindFirstExecutableAddress(start, end, (vm_address_t*)&newPC)) { + return false; + } + + return FIRCLSThreadContextSetPC(registers, newPC); +} + +bool FIRCLSUnwindWithFramePointer(FIRCLSThreadContext* registers, bool allowScanning) { + // Here's an interesting case. We've just processed the first frame, and it did + // not have any unwind info. If that first function did not allocate + // a stack frame, we'll "skip" the caller. This might sound unlikely, but it actually + // happens a lot in practice. + + // Sooo, one thing we can do is try to stack the stack for things that look like return + // addresses. Normally, this technique will hit many false positives. But, if we do it + // only for the second frame, and only when we don't have other unwind info available. + + if (allowScanning) { + FIRCLSSDKLogInfo("Attempting stack scan\n"); + if (FIRCLSUnwindWithStackScanning(registers)) { + FIRCLSSDKLogInfo("Stack scan successful\n"); + return true; + } + } + + // If we ever do anything else with the encoding, we need to be sure + // to set it up right. + return FIRCLSCompactUnwindBPFrame(CLS_X86_MODE_BP_FRAME, registers); +} + +uintptr_t FIRCLSUnwindStackPointerFromFramePointer(uintptr_t framePtr) { + // the stack pointer is the frame pointer plus the two saved pointers for the frame + return framePtr + 2 * sizeof(void *); +} + +#if CLS_COMPACT_UNWINDING_SUPPORTED || CLS_DWARF_UNWINDING_SUPPORTED +uintptr_t FIRCLSDwarfUnwindGetRegisterValue(const FIRCLSThreadContext* registers, uint64_t num) { + switch (num) { +#if CLS_CPU_X86_64 + case CLS_DWARF_X86_64_RAX: return registers->__ss.__rax; + case CLS_DWARF_X86_64_RDX: return registers->__ss.__rdx; + case CLS_DWARF_X86_64_RCX: return registers->__ss.__rcx; + case CLS_DWARF_X86_64_RBX: return registers->__ss.__rbx; + case CLS_DWARF_X86_64_RSI: return registers->__ss.__rsi; + case CLS_DWARF_X86_64_RDI: return registers->__ss.__rdi; + case CLS_DWARF_X86_64_RBP: return registers->__ss.__rbp; + case CLS_DWARF_X86_64_RSP: return registers->__ss.__rsp; + case CLS_DWARF_X86_64_R8: return registers->__ss.__r8; + case CLS_DWARF_X86_64_R9: return registers->__ss.__r9; + case CLS_DWARF_X86_64_R10: return registers->__ss.__r10; + case CLS_DWARF_X86_64_R11: return registers->__ss.__r11; + case CLS_DWARF_X86_64_R12: return registers->__ss.__r12; + case CLS_DWARF_X86_64_R13: return registers->__ss.__r13; + case CLS_DWARF_X86_64_R14: return registers->__ss.__r14; + case CLS_DWARF_X86_64_R15: return registers->__ss.__r15; + case CLS_DWARF_X86_64_RET_ADDR: return registers->__ss.__rip; +#elif CLS_CPU_I386 + case CLS_DWARF_X86_EAX: return registers->__ss.__eax; + case CLS_DWARF_X86_ECX: return registers->__ss.__ecx; + case CLS_DWARF_X86_EDX: return registers->__ss.__edx; + case CLS_DWARF_X86_EBX: return registers->__ss.__ebx; + case CLS_DWARF_X86_EBP: return registers->__ss.__ebp; + case CLS_DWARF_X86_ESP: return registers->__ss.__esp; + case CLS_DWARF_X86_ESI: return registers->__ss.__esi; + case CLS_DWARF_X86_EDI: return registers->__ss.__edi; + case CLS_DWARF_X86_RET_ADDR: return registers->__ss.__eip; +#endif + default: + break; + } + + FIRCLSSDKLog("Error: Unrecognized get register number %llu\n", num); + + return 0; +} + +bool FIRCLSDwarfUnwindSetRegisterValue(FIRCLSThreadContext *registers, uint64_t num, uintptr_t value) +{ + switch (num) { +#if CLS_CPU_X86_64 + case CLS_DWARF_X86_64_RAX: registers->__ss.__rax = value; return true; + case CLS_DWARF_X86_64_RDX: registers->__ss.__rdx = value; return true; + case CLS_DWARF_X86_64_RCX: registers->__ss.__rcx = value; return true; + case CLS_DWARF_X86_64_RBX: registers->__ss.__rbx = value; return true; + case CLS_DWARF_X86_64_RSI: registers->__ss.__rsi = value; return true; + case CLS_DWARF_X86_64_RDI: registers->__ss.__rdi = value; return true; + case CLS_DWARF_X86_64_RBP: registers->__ss.__rbp = value; return true; + case CLS_DWARF_X86_64_RSP: registers->__ss.__rsp = value; return true; + case CLS_DWARF_X86_64_R8: registers->__ss.__r8 = value; return true; + case CLS_DWARF_X86_64_R9: registers->__ss.__r9 = value; return true; + case CLS_DWARF_X86_64_R10: registers->__ss.__r10 = value; return true; + case CLS_DWARF_X86_64_R11: registers->__ss.__r11 = value; return true; + case CLS_DWARF_X86_64_R12: registers->__ss.__r12 = value; return true; + case CLS_DWARF_X86_64_R13: registers->__ss.__r13 = value; return true; + case CLS_DWARF_X86_64_R14: registers->__ss.__r14 = value; return true; + case CLS_DWARF_X86_64_R15: registers->__ss.__r15 = value; return true; + case CLS_DWARF_X86_64_RET_ADDR: registers->__ss.__rip = value; return true; +#elif CLS_CPU_I386 + case CLS_DWARF_X86_EAX: registers->__ss.__eax = value; return true; + case CLS_DWARF_X86_ECX: registers->__ss.__ecx = value; return true; + case CLS_DWARF_X86_EDX: registers->__ss.__edx = value; return true; + case CLS_DWARF_X86_EBX: registers->__ss.__ebx = value; return true; + case CLS_DWARF_X86_EBP: registers->__ss.__ebp = value; return true; + case CLS_DWARF_X86_ESP: registers->__ss.__esp = value; return true; + case CLS_DWARF_X86_ESI: registers->__ss.__esi = value; return true; + case CLS_DWARF_X86_EDI: registers->__ss.__edi = value; return true; + case CLS_DWARF_X86_RET_ADDR: registers->__ss.__eip = value; return true; +#endif + default: + break; + } + + FIRCLSSDKLog("Unrecognized set register number %llu\n", num); + + return false; +} +#endif + +#if CLS_COMPACT_UNWINDING_SUPPORTED +bool FIRCLSCompactUnwindComputeStackSize(const compact_unwind_encoding_t encoding, const uintptr_t functionStart, const bool indirect, uint32_t * const stackSize) { + if (!FIRCLSIsValidPointer(stackSize)) { + FIRCLSSDKLog("Error: invalid inputs\n"); + return false; + } + + const uint32_t stackSizeEncoded = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_SIZE); + + if (!indirect) { + *stackSize = stackSizeEncoded * sizeof(void*); + return true; + } + + const vm_address_t sublAddress = functionStart + stackSizeEncoded; + uint32_t sublValue = 0; + + if (!FIRCLSReadMemory(sublAddress, &sublValue, sizeof(uint32_t))) { + FIRCLSSDKLog("Error: unable to read subl value\n"); + return false; + } + + const uint32_t stackAdjust = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_ADJUST); + + *stackSize = sublValue + stackAdjust * sizeof(void*); + + return true; +} + +bool FIRCLSCompactUnwindDecompressPermutation(const compact_unwind_encoding_t encoding, uintptr_t permutatedRegisters[const static 6]) { + const uint32_t regCount = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_COUNT); + uint32_t permutation = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_PERMUTATION); + + switch (regCount) { + case 6: + permutatedRegisters[0] = permutation/120; + permutation -= (permutatedRegisters[0]*120); + permutatedRegisters[1] = permutation/24; + permutation -= (permutatedRegisters[1]*24); + permutatedRegisters[2] = permutation/6; + permutation -= (permutatedRegisters[2]*6); + permutatedRegisters[3] = permutation/2; + permutation -= (permutatedRegisters[3]*2); + permutatedRegisters[4] = permutation; + permutatedRegisters[5] = 0; + break; + case 5: + permutatedRegisters[0] = permutation/120; + permutation -= (permutatedRegisters[0]*120); + permutatedRegisters[1] = permutation/24; + permutation -= (permutatedRegisters[1]*24); + permutatedRegisters[2] = permutation/6; + permutation -= (permutatedRegisters[2]*6); + permutatedRegisters[3] = permutation/2; + permutation -= (permutatedRegisters[3]*2); + permutatedRegisters[4] = permutation; + break; + case 4: + permutatedRegisters[0] = permutation/60; + permutation -= (permutatedRegisters[0]*60); + permutatedRegisters[1] = permutation/12; + permutation -= (permutatedRegisters[1]*12); + permutatedRegisters[2] = permutation/3; + permutation -= (permutatedRegisters[2]*3); + permutatedRegisters[3] = permutation; + break; + case 3: + permutatedRegisters[0] = permutation/20; + permutation -= (permutatedRegisters[0]*20); + permutatedRegisters[1] = permutation/4; + permutation -= (permutatedRegisters[1]*4); + permutatedRegisters[2] = permutation; + break; + case 2: + permutatedRegisters[0] = permutation/5; + permutation -= (permutatedRegisters[0]*5); + permutatedRegisters[1] = permutation; + break; + case 1: + permutatedRegisters[0] = permutation; + break; + case 0: + break; + default: + FIRCLSSDKLog("Error: unhandled number of register permutations for encoding %x\n", encoding); + return false; + } + + return true; +} + +bool FIRCLSCompactUnwindRemapRegisters(const compact_unwind_encoding_t encoding, uintptr_t permutatedRegisters[const static 6], uintptr_t savedRegisters[const static 6]) { + const uint32_t regCount = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_COUNT); + + if (regCount > 6) { + FIRCLSSDKLog("Error: invalid register number count %d\n", regCount); + return false; + } + + // Re-number the registers + + // You are probably wondering, what the hell is this algorithm even doing? It is + // taken from libunwind's implemenation that does the same thing. + bool used[7] = { false, false, false, false, false, false, false }; + for (uint32_t i = 0; i < regCount; ++i) { + int renum = 0; + for (int u = 1; u < 7; ++u) { + if (!used[u]) { + if (renum == permutatedRegisters[i]) { + savedRegisters[i] = u; + used[u] = true; + break; + } + ++renum; + } + } + } + + return true; +} + +bool FIRCLSCompactUnwindRestoreRegisters(compact_unwind_encoding_t encoding, FIRCLSThreadContext* registers, uint32_t stackSize, const uintptr_t savedRegisters[const static 6], uintptr_t* address) { + if (!FIRCLSIsValidPointer(registers) || !FIRCLSIsValidPointer(address)) { + FIRCLSSDKLog("Error: invalid inputs\n"); + return false; + } + + const uint32_t regCount = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_COUNT); + + // compute initial address of saved registers + *address = FIRCLSThreadContextGetStackPointer(registers) + stackSize - sizeof(void*) - sizeof(void*) * regCount; + uintptr_t value = 0; + + for (uint32_t i = 0; i < regCount; ++i) { + value = 0; + + switch (savedRegisters[i]) { + case CLS_X86_REG_RBP: + if (!FIRCLSReadMemory((vm_address_t)*address, (void*)&value, sizeof(uintptr_t))) { + FIRCLSSDKLog("Error: unable to read memory to set register\n"); + return false; + } + + if (!FIRCLSThreadContextSetFramePointer(registers, value)) { + FIRCLSSDKLog("Error: unable to set FP\n"); + return false; + } + break; + default: + // here, we are restoring a register we don't need for unwinding + FIRCLSSDKLog("Error: skipping a restore of register %d at %p\n", (int)savedRegisters[i], (void*)*address); + break; + } + + *address += sizeof(void*); + } + + return true; +} + +static bool FIRCLSCompactUnwindFrameless(compact_unwind_encoding_t encoding, FIRCLSThreadContext* registers, uintptr_t functionStart, bool indirect) { + FIRCLSSDKLog("Frameless unwind encountered with encoding %x\n", encoding); + + uint32_t stackSize = 0; + if (!FIRCLSCompactUnwindComputeStackSize(encoding, functionStart, indirect, &stackSize)) { + FIRCLSSDKLog("Error: unable to compute stack size for encoding %x\n", encoding); + return false; + } + + uintptr_t permutatedRegisters[6]; + + memset(permutatedRegisters, 0, sizeof(permutatedRegisters)); + if (!FIRCLSCompactUnwindDecompressPermutation(encoding, permutatedRegisters)) { + FIRCLSSDKLog("Error: unable to decompress registers %x\n", encoding); + return false; + } + + uintptr_t savedRegisters[6]; + + memset(savedRegisters, 0, sizeof(savedRegisters)); + if (!FIRCLSCompactUnwindRemapRegisters(encoding, permutatedRegisters, savedRegisters)) { + FIRCLSSDKLog("Error: unable to remap registers %x\n", encoding); + return false; + } + + uintptr_t address = 0; + + if (!FIRCLSCompactUnwindRestoreRegisters(encoding, registers, stackSize, savedRegisters, &address)) { + FIRCLSSDKLog("Error: unable to restore registers\n"); + return false; + } + + FIRCLSSDKLog("SP is %p and we are reading %p\n", (void*)FIRCLSThreadContextGetStackPointer(registers), (void*)address); + // read the value from the stack, now that we know the address to read + uintptr_t value = 0; + if (!FIRCLSReadMemory((vm_address_t)address, (void*)&value, sizeof(uintptr_t))) { + FIRCLSSDKLog("Error: unable to read memory to set register\n"); + return false; + } + + FIRCLSSDKLog("Read PC to be %p\n", (void*)value); + if (!FIRCLSIsValidPointer(value)) { + FIRCLSSDKLog("Error: computed PC is invalid\n"); + return false; + } + + return FIRCLSThreadContextSetPC(registers, value) && FIRCLSThreadContextSetStackPointer(registers, address + sizeof(void*)); +} +#endif + +#else +INJECT_STRIP_SYMBOL(unwind_x86) +#endif + diff --git a/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h new file mode 100644 index 000000000000..7c8010ec090a --- /dev/null +++ b/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h @@ -0,0 +1,76 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FIRCLSCompactUnwind.h" +#include "FIRCLSFeatures.h" + +// Add some abstraction to compact unwinding, because compact +// unwinding is nearly identical between 32 and 64 bit +#if CLS_CPU_X86_64 + +#define CLS_X86_MODE_MASK UNWIND_X86_64_MODE_MASK +#define CLS_X86_MODE_BP_FRAME UNWIND_X86_64_MODE_RBP_FRAME +#define CLS_X86_MODE_STACK_IMMD UNWIND_X86_64_MODE_STACK_IMMD +#define CLS_X86_MODE_STACK_IND UNWIND_X86_64_MODE_STACK_IND +#define CLS_X86_MODE_DWARF UNWIND_X86_64_MODE_DWARF + +#define CLS_X86_BP_FRAME_REGISTERS UNWIND_X86_64_RBP_FRAME_REGISTERS +#define CLS_X86_BP_FRAME_OFFSET UNWIND_X86_64_RBP_FRAME_OFFSET + +#define CLS_X86_FRAMELESS_STACK_SIZE UNWIND_X86_64_FRAMELESS_STACK_SIZE +#define CLS_X86_FRAMELESS_STACK_ADJUST UNWIND_X86_64_FRAMELESS_STACK_ADJUST +#define CLS_X86_FRAMELESS_STACK_REG_COUNT UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT +#define CLS_X86_FRAMELESS_STACK_REG_PERMUTATION UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION + +#define CLS_X86_DWARF_SECTION_OFFSET UNWIND_X86_64_DWARF_SECTION_OFFSET + +#define CLS_X86_REG_RBP UNWIND_X86_64_REG_RBP + +#else + +#define CLS_X86_MODE_MASK UNWIND_X86_MODE_MASK +#define CLS_X86_MODE_BP_FRAME UNWIND_X86_MODE_EBP_FRAME +#define CLS_X86_MODE_STACK_IMMD UNWIND_X86_MODE_STACK_IMMD +#define CLS_X86_MODE_STACK_IND UNWIND_X86_MODE_STACK_IND +#define CLS_X86_MODE_DWARF UNWIND_X86_MODE_DWARF + +#define CLS_X86_BP_FRAME_REGISTERS UNWIND_X86_RBP_FRAME_REGISTERS +#define CLS_X86_BP_FRAME_OFFSET UNWIND_X86_RBP_FRAME_OFFSET + +#define CLS_X86_FRAMELESS_STACK_SIZE UNWIND_X86_FRAMELESS_STACK_SIZE +#define CLS_X86_FRAMELESS_STACK_ADJUST UNWIND_X86_FRAMELESS_STACK_ADJUST +#define CLS_X86_FRAMELESS_STACK_REG_COUNT UNWIND_X86_FRAMELESS_STACK_REG_COUNT +#define CLS_X86_FRAMELESS_STACK_REG_PERMUTATION UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION + +#define CLS_X86_DWARF_SECTION_OFFSET UNWIND_X86_DWARF_SECTION_OFFSET + +#define CLS_X86_REG_RBP UNWIND_X86_REG_EBP + +#endif + +#if CLS_COMPACT_UNWINDING_SUPPORTED +bool FIRCLSCompactUnwindComputeStackSize(const compact_unwind_encoding_t encoding, + const uintptr_t functionStart, + const bool indirect, + uint32_t* const stackSize); +bool FIRCLSCompactUnwindDecompressPermutation(const compact_unwind_encoding_t encoding, + uintptr_t permutatedRegisters[const static 6]); +bool FIRCLSCompactUnwindRestoreRegisters(compact_unwind_encoding_t encoding, + FIRCLSThreadContext* registers, + uint32_t stackSize, + const uintptr_t savedRegisters[const static 6], + uintptr_t* address); +#endif diff --git a/Crashlytics/README.md b/Crashlytics/README.md new file mode 100644 index 000000000000..0a2dc7b7fe57 --- /dev/null +++ b/Crashlytics/README.md @@ -0,0 +1,28 @@ +# Firebase Crashlytics SDK + +## Development + +Follow the subsequent instructions to develop, debug, unit test, and +integration test FirebaseCrashlytics: + +### Prereqs + +- At least CocoaPods 1.6.0 +- Install [cocoapods-generate](https://github.com/square/cocoapods-generate) + +### To Develop + +- Run `pod gen FirebaseCrashlytics.podspec` +- `open gen/FirebaseCrashlytics/FirebaseCrashlytics.xcworkspace` + +OR these two commands can be combined with + +- `pod gen FirebaseCrashlytics.podspec --auto-open --gen-directory="gen" --clean` + +You're now in an Xcode workspace generate for building, debugging and +testing the FirebaseCrashlytics CocoaPod. + +### Running Unit Tests + +Open the generated workspace, choose the FirebaseCrashlytics-Unit-unit scheme and press Command-u. + diff --git a/Crashlytics/Shared/FIRCLSByteUtility.h b/Crashlytics/Shared/FIRCLSByteUtility.h new file mode 100644 index 000000000000..ca2abb81de39 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSByteUtility.h @@ -0,0 +1,41 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * Returns a SHA1 Hash of the input NSData + */ +NSString *FIRCLSHashNSData(NSData *data); +/** + * Returns a SHA256 Hash of the input NSData + */ +NSString *FIRCLS256HashNSData(NSData *data); +/** + * Returns a SHA1 Hash of the input bytes + */ +NSString *FIRCLSHashBytes(const void *bytes, size_t length); +/** + * Populates a Hex value conversion of value into outputBuffer. + * If value is nil, then outputBuffer is not modified. + */ +void FIRCLSSafeHexToString(const uint8_t *value, size_t length, char *outputBuffer); + +/** + * Iterates through the raw bytes of NSData in a way that is similar to + * -[NSData enumerateByteRangesUsingBlock:], but is safe to call from older + * OSes that do not support it. + */ +void FIRCLSEnumerateByteRangesOfNSDataUsingBlock( + NSData *data, void (^block)(const void *bytes, NSRange byteRange, BOOL *stop)); diff --git a/Crashlytics/Shared/FIRCLSByteUtility.m b/Crashlytics/Shared/FIRCLSByteUtility.m new file mode 100644 index 000000000000..e54e8203be6d --- /dev/null +++ b/Crashlytics/Shared/FIRCLSByteUtility.m @@ -0,0 +1,116 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSByteUtility.h" + +#import +#import + +#pragma mark Private functions + +static const char FIRCLSHexMap[] = "0123456789abcdef"; + +void FIRCLSHexFromByte(uint8_t c, char output[]) { + if (!output) { + return; + } + + output[0] = FIRCLSHexMap[c >> 4]; + output[1] = FIRCLSHexMap[c & 0x0f]; +} + +void FIRCLSSafeHexToString(const uint8_t *value, size_t length, char *outputBuffer) { + if (!outputBuffer) { + return; + } + + memset(outputBuffer, 0, (length * 2) + 1); + + if (!value) { + return; + } + + for (size_t i = 0; i < length; ++i) { + uint8_t c = value[i]; + + FIRCLSHexFromByte(c, &outputBuffer[i * 2]); + } +} + +NSString *FIRCLSNSDataPrettyDescription(NSData *data) { + NSString *string; + char *buffer; + size_t size; + NSUInteger length; + + // we need 2 hex char for every byte of data, plus one more spot for a + // null terminator + length = data.length; + size = (length * 2) + 1; + buffer = malloc(sizeof(char) * size); + + FIRCLSSafeHexToString(data.bytes, length, buffer); + + string = [NSString stringWithUTF8String:buffer]; + + free(buffer); + + return string; +} + +#pragma mark Public functions + +NSString *FIRCLSHashBytes(const void *bytes, size_t length) { + uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; + CC_SHA1(bytes, (CC_LONG)length, digest); + + NSData *result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; + + return FIRCLSNSDataPrettyDescription(result); +} + +NSString *FIRCLSHashNSData(NSData *data) { + return FIRCLSHashBytes(data.bytes, data.length); +} + +NSString *FIRCLS256HashBytes(const void *bytes, size_t length) { + uint8_t digest[CC_SHA256_DIGEST_LENGTH] = {0}; + CC_SHA256(bytes, (CC_LONG)length, digest); + + NSData *result = [NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH]; + + return FIRCLSNSDataPrettyDescription(result); +} + +NSString *FIRCLS256HashNSData(NSData *data) { + return FIRCLS256HashBytes(data.bytes, data.length); +} + +void FIRCLSEnumerateByteRangesOfNSDataUsingBlock( + NSData *data, void (^block)(const void *bytes, NSRange byteRange, BOOL *stop)) { + if ([data respondsToSelector:@selector(enumerateByteRangesUsingBlock:)]) { + [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { + block(bytes, byteRange, stop); + }]; + + return; + } + + // Fall back to the less-efficient mechanism for older OSes. Safe + // to ignore the return value of stop, since we'll only ever + // call this once anyways + BOOL stop = NO; + + block(data.bytes, NSMakeRange(0, data.length), &stop); +} diff --git a/Crashlytics/Shared/FIRCLSConstants.h b/Crashlytics/Shared/FIRCLSConstants.h new file mode 100644 index 000000000000..c17ee02c5f36 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSConstants.h @@ -0,0 +1,45 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +FOUNDATION_EXPORT NSString *const FIRCLSDeveloperToken; + +FOUNDATION_EXPORT NSString *const FIRCLSVersion; + +// User Messages +FOUNDATION_EXPORT NSString *const FIRCLSMissingConsumerKeyMsg; +FOUNDATION_EXPORT NSString *const FIRCLSMissingConsumerSecretMsg; + +// Exceptions +FOUNDATION_EXPORT NSString *const FIRCLSException; + +// Endpoints +FOUNDATION_EXPORT NSString *const FIRCLSSettingsEndpoint; +FOUNDATION_EXPORT NSString *const FIRCLSConfigureEndpoint; +FOUNDATION_EXPORT NSString *const FIRCLSReportsEndpoint; + +// Network requests +FOUNDATION_EXPORT NSString *const FIRCLSNetworkAccept; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkAcceptCharset; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkApplicationJson; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkAcceptLanguage; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkContentLanguage; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsAPIClientDisplayVersion; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsAPIClientId; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsDeveloperToken; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsGoogleAppId; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsOrgId; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkUserAgent; +FOUNDATION_EXPORT NSString *const FIRCLSNetworkUTF8; diff --git a/Crashlytics/Shared/FIRCLSConstants.m b/Crashlytics/Shared/FIRCLSConstants.m new file mode 100644 index 000000000000..7dac625ce148 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSConstants.m @@ -0,0 +1,49 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSConstants.h" + +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) + +NSString* const FIRCLSDeveloperToken = @"77f0789d8e230eccdb4b99b82dccd78d47f9b604"; + +NSString* const FIRCLSVersion = @STR(DISPLAY_VERSION); + +// User Messages +NSString* const FIRCLSMissingConsumerKeyMsg = @"consumer key is nil or zero length"; +NSString* const FIRCLSMissingConsumerSecretMsg = @"consumer secret is nil or zero length"; + +// Exceptions +NSString* const FIRCLSException = @"FIRCLSException"; + +// Endpoints +NSString* const FIRCLSSettingsEndpoint = @"https://firebase-settings.crashlytics.com"; +NSString* const FIRCLSConfigureEndpoint = @"https://api.crashlytics.com"; +NSString* const FIRCLSReportsEndpoint = @"https://reports.crashlytics.com"; + +// Network requests +NSString* const FIRCLSNetworkAccept = @"Accept"; +NSString* const FIRCLSNetworkAcceptCharset = @"Accept-Charset"; +NSString* const FIRCLSNetworkApplicationJson = @"application/json"; +NSString* const FIRCLSNetworkAcceptLanguage = @"Accept-Language"; +NSString* const FIRCLSNetworkContentLanguage = @"Content-Language"; +NSString* const FIRCLSNetworkCrashlyticsAPIClientDisplayVersion = + @"X-Crashlytics-API-Client-Display-Version"; +NSString* const FIRCLSNetworkCrashlyticsAPIClientId = @"X-Crashlytics-API-Client-Id"; +NSString* const FIRCLSNetworkCrashlyticsDeveloperToken = @"X-Crashlytics-Developer-Token"; +NSString* const FIRCLSNetworkCrashlyticsGoogleAppId = @"X-Crashlytics-Google-App-Id"; +NSString* const FIRCLSNetworkCrashlyticsOrgId = @"X-Crashlytics-Org-Id"; +NSString* const FIRCLSNetworkUserAgent = @"User-Agent"; +NSString* const FIRCLSNetworkUTF8 = @"utf-8"; diff --git a/Crashlytics/Shared/FIRCLSFABHost.h b/Crashlytics/Shared/FIRCLSFABHost.h new file mode 100644 index 000000000000..82c8fccfde13 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSFABHost.h @@ -0,0 +1,35 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * Returns the OS version of the host device + */ +NSOperatingSystemVersion FIRCLSHostGetOSVersion(void); + +/** + * Returns model info for the device on which app is running + */ +NSString *FIRCLSHostModelInfo(void); + +/** + * Returns a string representing the OS build + */ +NSString *FIRCLSHostOSBuildVersion(void); + +/** + * Returns a concatenated string of the OS version(majorVersion.minorVersion.patchVersion) + */ +NSString *FIRCLSHostOSDisplayVersion(void); diff --git a/Crashlytics/Shared/FIRCLSFABHost.m b/Crashlytics/Shared/FIRCLSFABHost.m new file mode 100644 index 000000000000..4c3206c1e16e --- /dev/null +++ b/Crashlytics/Shared/FIRCLSFABHost.m @@ -0,0 +1,119 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSFABHost.h" + +#if TARGET_OS_WATCH +#import +#elif TARGET_OS_IPHONE +#import +#endif + +#include + +#define FIRCLS_HOST_SYSCTL_BUFFER_SIZE (128) + +#pragma mark - OS Versions + +#pragma mark Private + +static NSString *FIRCLSHostSysctlEntry(const char *sysctlKey) { + char buffer[FIRCLS_HOST_SYSCTL_BUFFER_SIZE]; + size_t bufferSize = FIRCLS_HOST_SYSCTL_BUFFER_SIZE; + if (sysctlbyname(sysctlKey, buffer, &bufferSize, NULL, 0) != 0) { + return nil; + } + return [NSString stringWithUTF8String:buffer]; +} + +#pragma mark Public + +NSOperatingSystemVersion FIRCLSHostGetOSVersion(void) { + // works on macos(10.10), ios(8.0), watchos(2.0), tvos(9.0) + if ([NSProcessInfo.processInfo respondsToSelector:@selector(operatingSystemVersion)]) { + return [NSProcessInfo.processInfo operatingSystemVersion]; + } + + NSOperatingSystemVersion version = {0, 0, 0}; + +#if TARGET_OS_IPHONE + +#if TARGET_OS_WATCH + NSString *versionString = [[WKInterfaceDevice currentDevice] systemVersion]; +#else + NSString *versionString = [[UIDevice currentDevice] systemVersion]; +#endif + + NSArray *parts = [versionString componentsSeparatedByString:@"."]; + + if (parts.count > 0) { + version.majorVersion = [[parts objectAtIndex:0] integerValue]; + } + + if ([parts count] > 1) { + version.minorVersion = [[parts objectAtIndex:1] integerValue]; + } + + if ([parts count] > 2) { + version.patchVersion = [[parts objectAtIndex:2] integerValue]; + } + +#endif + + return version; +} + +NSString *FIRCLSHostOSBuildVersion(void) { + return FIRCLSHostSysctlEntry("kern.osversion"); +} + +NSString *FIRCLSHostOSDisplayVersion(void) { + NSOperatingSystemVersion version = FIRCLSHostGetOSVersion(); + return [NSString stringWithFormat:@"%ld.%ld.%ld", (long)version.majorVersion, + (long)version.minorVersion, (long)version.patchVersion]; +} + +#pragma mark - Host Models + +#pragma mark Public + +NSString *FIRCLSHostModelInfo(void) { + NSString *model = nil; + +#if TARGET_OS_SIMULATOR +#if TARGET_OS_WATCH + model = @"watchOS Simulator"; +#elif TARGET_OS_TV + model = @"tvOS Simulator"; +#elif TARGET_OS_IPHONE + switch (UI_USER_INTERFACE_IDIOM()) { + case UIUserInterfaceIdiomPhone: + model = @"iOS Simulator (iPhone)"; + break; + case UIUserInterfaceIdiomPad: + model = @"iOS Simulator (iPad)"; + break; + default: + model = @"iOS Simulator (Unknown)"; + break; + } +#endif +#elif TARGET_OS_EMBEDDED + model = FIRCLSHostSysctlEntry("hw.machine"); +#else + model = FIRCLSHostSysctlEntry("hw.model"); +#endif + + return model; +} diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h b/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h new file mode 100644 index 000000000000..ae80c46ad0bf --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h @@ -0,0 +1,34 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +typedef enum { + FIRCLSCodeMappingSourceUnknown, + FIRCLSCodeMappingSourceBuild, + FIRCLSCodeSourceCache, + FIRCLSCodeSourceSpotlight +} FIRCLSCodeMappingSource; + +@interface FIRCLSCodeMapping : NSObject + ++ (instancetype)mappingWithURL:(NSURL*)URL; + +- (instancetype)initWithURL:(NSURL*)URL; + +@property(nonatomic, copy, readonly) NSURL* URL; +@property(nonatomic, assign) FIRCLSCodeMappingSource source; +@property(nonatomic, copy, readonly) NSString* sourceName; + +@end diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m b/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m new file mode 100644 index 000000000000..c212ce7d1462 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m @@ -0,0 +1,40 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSCodeMapping.h" + +@interface FIRCLSCodeMapping () { + FIRCLSCodeMappingSource _source; +} + +@end + +@implementation FIRCLSCodeMapping + ++ (instancetype)mappingWithURL:(NSURL*)URL { + return [[self alloc] initWithURL:URL]; +} + +- (instancetype)initWithURL:(NSURL*)URL { + self = [super init]; + if (!self) { + return nil; + } + + _URL = [URL copy]; + + return self; +} + +@end diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h new file mode 100644 index 000000000000..59b460556211 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h @@ -0,0 +1,110 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include + +#include + +struct FIRCLSMachOFile { + int fd; + size_t mappedSize; + void* mappedFile; +}; +typedef struct FIRCLSMachOFile* FIRCLSMachOFileRef; + +struct FIRCLSMachOSlice { + const void* startAddress; + cpu_type_t cputype; + cpu_subtype_t cpusubtype; +}; +typedef struct FIRCLSMachOSlice* FIRCLSMachOSliceRef; + +typedef struct { + uint32_t major; + uint32_t minor; + uint32_t bugfix; +} FIRCLSMachOVersion; + +typedef struct { + uint64_t addr; + uint64_t size; + uint32_t offset; +} FIRCLSMachOSection; + +typedef struct { + char segname[16]; + uint64_t vmaddr; + uint64_t vmsize; +} FIRCLSMachOSegmentCommand; + +typedef void (^FIRCLSMachOSliceIterator)(FIRCLSMachOSliceRef slice); +typedef void (^FIRCLSMachOLoadCommandIterator)(uint32_t type, + uint32_t size, + const struct load_command* cmd); + +__BEGIN_DECLS + +bool FIRCLSMachOFileInitWithPath(FIRCLSMachOFileRef file, const char* path); +bool FIRCLSMachOFileInitWithCurrent(FIRCLSMachOFileRef file); +void FIRCLSMachOFileDestroy(FIRCLSMachOFileRef file); +void FIRCLSMachOFileEnumerateSlices(FIRCLSMachOFileRef file, FIRCLSMachOSliceIterator block); +struct FIRCLSMachOSlice FIRCLSMachOFileSliceWithArchitectureName(FIRCLSMachOFileRef file, + const char* name); + +void FIRCLSMachOEnumerateSlicesAtAddress(void* executableData, FIRCLSMachOSliceIterator block); +void FIRCLSMachOSliceEnumerateLoadCommands(FIRCLSMachOSliceRef slice, + FIRCLSMachOLoadCommandIterator block); +struct FIRCLSMachOSlice FIRCLSMachOSliceGetCurrent(void); +struct FIRCLSMachOSlice FIRCLSMachOSliceWithHeader(void* machHeader); + +const char* FIRCLSMachOSliceGetExecutablePath(FIRCLSMachOSliceRef slice); +const char* FIRCLSMachOSliceGetArchitectureName(FIRCLSMachOSliceRef slice); +bool FIRCLSMachOSliceIs64Bit(FIRCLSMachOSliceRef slice); +bool FIRCLSMachOSliceGetSectionByName(FIRCLSMachOSliceRef slice, + const char* segName, + const char* sectionName, + const void** ptr); +bool FIRCLSMachOSliceInitSectionByName(FIRCLSMachOSliceRef slice, + const char* segName, + const char* sectionName, + FIRCLSMachOSection* section); +void FIRCLSMachOSliceGetUnwindInformation(FIRCLSMachOSliceRef slice, + const void** ehFrame, + const void** unwindInfo); + +// load-command-specific calls for convenience + +// returns a pointer to the 16-byte UUID +uint8_t const* FIRCLSMachOGetUUID(const struct load_command* cmd); +const char* FIRCLSMachOGetDylibPath(const struct load_command* cmd); + +// return true if the header indicates the binary is encrypted +bool FIRCLSMachOGetEncrypted(const struct load_command* cmd); + +// SDK minimums +FIRCLSMachOVersion FIRCLSMachOGetMinimumOSVersion(const struct load_command* cmd); +FIRCLSMachOVersion FIRCLSMachOGetLinkedSDKVersion(const struct load_command* cmd); + +// Helpers +FIRCLSMachOSegmentCommand FIRCLSMachOGetSegmentCommand(const struct load_command* cmd); + +#ifdef __OBJC__ +NSString* FIRCLSMachONormalizeUUID(CFUUIDBytes* uuidBytes); +NSString* FIRCLSMachOFormatVersion(FIRCLSMachOVersion* version); +#endif +__END_DECLS diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m new file mode 100644 index 000000000000..47f707cdac05 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m @@ -0,0 +1,506 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSMachO.h" + +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include + +// This is defined in newer versions of iOS/macOS in usr/include/mach/machine.h +#define CLS_CPU_SUBTYPE_ARM64E ((cpu_subtype_t)2) + +static void FIRCLSMachOHeaderValues(FIRCLSMachOSliceRef slice, + const struct load_command** cmds, + uint32_t* cmdCount); +static bool FIRCLSMachOSliceIsValid(FIRCLSMachOSliceRef slice); + +bool FIRCLSMachOFileInitWithPath(FIRCLSMachOFileRef file, const char* path) { + struct stat statBuffer; + + if (!file || !path) { + return false; + } + + file->fd = 0; + file->mappedFile = NULL; + file->mappedSize = 0; + + file->fd = open(path, O_RDONLY); + if (file->fd < 0) { + // unable to open mach-o file + return false; + } + + if (fstat(file->fd, &statBuffer) == -1) { + close(file->fd); + return false; + } + + // We need some minimum size for this to even be a possible mach-o file. I believe + // its probably quite a bit bigger than this, but this at least covers something. + // We also need it to be a regular file. + file->mappedSize = (size_t)statBuffer.st_size; + if (statBuffer.st_size < 16 || !(statBuffer.st_mode & S_IFREG)) { + close(file->fd); + return false; + } + + // Map the file to memory. MAP_SHARED can potentially reduce the amount of actual private + // memory needed to do this mapping. Also, be sure to check for the correct failure result. + file->mappedFile = mmap(0, file->mappedSize, PROT_READ, MAP_FILE | MAP_SHARED, file->fd, 0); + if (!file->mappedFile || (file->mappedFile == MAP_FAILED)) { + close(file->fd); + return false; + } + + return true; +} + +bool FIRCLSMachOFileInitWithCurrent(FIRCLSMachOFileRef file) { + struct FIRCLSMachOSlice slice = FIRCLSMachOSliceGetCurrent(); + + const char* imagePath = FIRCLSMachOSliceGetExecutablePath(&slice); + + return FIRCLSMachOFileInitWithPath(file, imagePath); +} + +void FIRCLSMachOFileDestroy(FIRCLSMachOFileRef file) { + if (!file) { + return; + } + + if (file->mappedFile && file->mappedSize > 0) { + munmap(file->mappedFile, file->mappedSize); + } + + close(file->fd); +} + +void FIRCLSMachOFileEnumerateSlices(FIRCLSMachOFileRef file, FIRCLSMachOSliceIterator block) { + FIRCLSMachOEnumerateSlicesAtAddress(file->mappedFile, block); +} + +void FIRCLSMachOEnumerateSlicesAtAddress(void* executableData, FIRCLSMachOSliceIterator block) { + // check the magic value, to determine if we have a fat header or not + uint32_t magicValue; + uint32_t archCount; + const struct fat_arch* fatArch; + struct FIRCLSMachOSlice slice; + + memset(&slice, 0, sizeof(struct FIRCLSMachOSlice)); + + magicValue = ((struct fat_header*)executableData)->magic; + if ((magicValue != FAT_MAGIC) && (magicValue != FAT_CIGAM)) { + slice.startAddress = executableData; + + // use this to fill in the values + FIRCLSMachOHeaderValues(&slice, NULL, NULL); + + block(&slice); + + return; + } + + archCount = OSSwapBigToHostInt32(((struct fat_header*)executableData)->nfat_arch); + fatArch = executableData + sizeof(struct fat_header); + + for (uint32_t i = 0; i < archCount; ++i) { + slice.cputype = OSSwapBigToHostInt32(fatArch->cputype); + slice.cpusubtype = OSSwapBigToHostInt32(fatArch->cpusubtype); + slice.startAddress = executableData + OSSwapBigToHostInt32(fatArch->offset); + + block(&slice); + + // advance to the next fat_arch structure + fatArch = (struct fat_arch*)((uintptr_t)fatArch + sizeof(struct fat_arch)); + } +} + +struct FIRCLSMachOSlice FIRCLSMachOFileSliceWithArchitectureName(FIRCLSMachOFileRef file, + const char* name) { + __block struct FIRCLSMachOSlice value; + + memset(&value, 0, sizeof(struct FIRCLSMachOSlice)); + + FIRCLSMachOFileEnumerateSlices(file, ^(FIRCLSMachOSliceRef slice) { + if (strcmp(FIRCLSMachOSliceGetArchitectureName(slice), name) == 0) { + value = *slice; + } + }); + + return value; +} + +static void FIRCLSMachOHeaderValues(FIRCLSMachOSliceRef slice, + const struct load_command** cmds, + uint32_t* cmdCount) { + const struct mach_header* header32 = (const struct mach_header*)slice->startAddress; + const struct mach_header_64* header64 = (const struct mach_header_64*)slice->startAddress; + uint32_t commandCount; + const void* commandsAddress; + + if (cmds) { + *cmds = NULL; + } + + if (cmdCount) { + *cmdCount = 0; + } + + if (!slice->startAddress) { + return; + } + + // the 32 and 64 bit versions have an identical structures, so this will work + switch (header32->magic) { + case MH_MAGIC: // 32-bit + case MH_CIGAM: + slice->cputype = header32->cputype; + slice->cpusubtype = header32->cpusubtype; + commandCount = header32->ncmds; + commandsAddress = slice->startAddress + sizeof(struct mach_header); + break; + case MH_MAGIC_64: // 64-bit + case MH_CIGAM_64: + slice->cputype = header64->cputype; + slice->cpusubtype = header64->cpusubtype; + commandCount = header64->ncmds; + commandsAddress = slice->startAddress + sizeof(struct mach_header_64); + break; + default: + // not a valid header + return; + } + + // assign everything back by reference + if (cmds) { + *cmds = commandsAddress; + } + + if (cmdCount) { + *cmdCount = commandCount; + } +} + +static bool FIRCLSMachOSliceIsValid(FIRCLSMachOSliceRef slice) { + if (!slice) { + return false; + } + + if (!slice->startAddress) { + return false; + } + + return true; +} + +void FIRCLSMachOSliceEnumerateLoadCommands(FIRCLSMachOSliceRef slice, + FIRCLSMachOLoadCommandIterator block) { + const struct load_command* cmd; + uint32_t cmdCount; + + if (!block) { + return; + } + + if (!FIRCLSMachOSliceIsValid(slice)) { + return; + } + + FIRCLSMachOHeaderValues(slice, &cmd, &cmdCount); + + for (uint32_t i = 0; cmd != NULL && i < cmdCount; ++i) { + block(cmd->cmd, cmd->cmdsize, cmd); + + cmd = (struct load_command*)((uintptr_t)cmd + cmd->cmdsize); + } +} + +struct FIRCLSMachOSlice FIRCLSMachOSliceGetCurrent(void) { + const NXArchInfo* archInfo; + struct FIRCLSMachOSlice slice; + void* executableSymbol; + Dl_info dlinfo; + + archInfo = NXGetLocalArchInfo(); + if (archInfo) { + slice.cputype = archInfo->cputype; + slice.cpusubtype = archInfo->cpusubtype; + } + + slice.startAddress = NULL; + + executableSymbol = dlsym(RTLD_MAIN_ONLY, MH_EXECUTE_SYM); + + // get the address of the main function + if (dladdr(executableSymbol, &dlinfo) != 0) { + slice.startAddress = dlinfo.dli_fbase; + } + + return slice; +} + +struct FIRCLSMachOSlice FIRCLSMachOSliceWithHeader(void* machHeader) { + struct FIRCLSMachOSlice slice; + + slice.startAddress = machHeader; + + return slice; +} + +const char* FIRCLSMachOSliceGetExecutablePath(FIRCLSMachOSliceRef slice) { + Dl_info info; + + if (!FIRCLSMachOSliceIsValid(slice)) { + return NULL; + } + + // use dladdr here to look up the information we need for a binary image + if (dladdr(slice->startAddress, &info) == 0) { + return NULL; + } + + return info.dli_fname; +} + +const char* FIRCLSMachOSliceGetArchitectureName(FIRCLSMachOSliceRef slice) { + const NXArchInfo* archInfo; + + // there are some special cases here for types not handled by earlier OSes + if (slice->cputype == CPU_TYPE_ARM && slice->cpusubtype == CPU_SUBTYPE_ARM_V7S) { + return "armv7s"; + } + + if (slice->cputype == (CPU_TYPE_ARM | CPU_ARCH_ABI64)) { + if (slice->cpusubtype == CLS_CPU_SUBTYPE_ARM64E) { + return "arm64e"; + } else if (slice->cpusubtype == CPU_SUBTYPE_ARM64_ALL) { + return "arm64"; + } + } + + if (slice->cputype == (CPU_TYPE_ARM) && slice->cpusubtype == CPU_SUBTYPE_ARM_V7K) { + return "armv7k"; + } + + archInfo = NXGetArchInfoFromCpuType(slice->cputype, slice->cpusubtype); + if (!archInfo) { + return "unknown"; + } + + return archInfo->name; +} + +bool FIRCLSMachOSliceIs64Bit(FIRCLSMachOSliceRef slice) { + // I'm pretty sure this is sufficient... + return (slice->cputype & CPU_ARCH_ABI64) == CPU_ARCH_ABI64; +} + +bool FIRCLSMachOSliceGetSectionByName(FIRCLSMachOSliceRef slice, + const char* segName, + const char* sectionName, + const void** ptr) { + if (!ptr) { + return false; + } + + *ptr = NULL; // make sure this is set before returning + + FIRCLSMachOSection section; + + if (!FIRCLSMachOSliceInitSectionByName(slice, segName, sectionName, §ion)) { + return false; + } + + // WARNING: this calculation isn't correct, but is here to maintain backwards + // compatibility for now with callers of FIRCLSMachOSliceGetSectionByName. All new + // users should be calling FIRCLSMachOSliceInitSectionByName + *ptr = (const void*)((uintptr_t)slice->startAddress + section.offset); + + return true; +} + +bool FIRCLSMachOSliceInitSectionByName(FIRCLSMachOSliceRef slice, + const char* segName, + const char* sectionName, + FIRCLSMachOSection* section) { + if (!FIRCLSMachOSliceIsValid(slice)) { + return false; + } + + if (!section) { + return false; + } + + memset(section, 0, sizeof(FIRCLSMachOSection)); + + if (FIRCLSMachOSliceIs64Bit(slice)) { + const struct section_64* sect = + getsectbynamefromheader_64(slice->startAddress, segName, sectionName); + if (!sect) { + return false; + } + + section->addr = sect->addr; + section->size = sect->size; + section->offset = sect->offset; + } else { + const struct section* sect = getsectbynamefromheader(slice->startAddress, segName, sectionName); + if (!sect) { + return false; + } + + section->addr = sect->addr; + section->size = sect->size; + section->offset = sect->offset; + } + + return true; +} + +// TODO: this is left in-place just to ensure that old crashltyics + new fabric are still compatible +// with each other. As a happy bonus, if that situation does come up, this will also fix the bug +// that was preventing compact unwind on arm64 + iOS 9 from working correctly. +void FIRCLSMachOSliceGetUnwindInformation(FIRCLSMachOSliceRef slice, + const void** ehFrame, + const void** unwindInfo) { + if (!unwindInfo && !ehFrame) { + return; + } + + bool found = false; + intptr_t slide = 0; + + // This is inefficient, but we have no other safe way to do this correctly. Modifying the + // FIRCLSMachOSlice structure is tempting, but could introduce weird binary-compatibility issues + // with version mis-matches. + for (uint32_t i = 0; i < _dyld_image_count(); ++i) { + const struct mach_header* header = _dyld_get_image_header(i); + + if (header == slice->startAddress) { + found = true; + slide = _dyld_get_image_vmaddr_slide(i); + break; + } + } + + // make sure we were able to find a matching value + if (!found) { + return; + } + + FIRCLSMachOSection section; + + if (unwindInfo) { + if (FIRCLSMachOSliceInitSectionByName(slice, SEG_TEXT, "__unwind_info", §ion)) { + *unwindInfo = (void*)(section.addr + slide); + } + } + + if (ehFrame) { + if (FIRCLSMachOSliceInitSectionByName(slice, SEG_TEXT, "__eh_frame", §ion)) { + *ehFrame = (void*)(section.addr + slide); + } + } +} + +uint8_t const* FIRCLSMachOGetUUID(const struct load_command* cmd) { + return ((const struct uuid_command*)cmd)->uuid; +} + +const char* FIRCLSMachOGetDylibPath(const struct load_command* cmd) { + const struct dylib_command* dylibcmd = (const struct dylib_command*)cmd; + + return (const char*)((uintptr_t)cmd + dylibcmd->dylib.name.offset); +} + +bool FIRCLSMachOGetEncrypted(const struct load_command* cmd) { + return ((struct encryption_info_command*)cmd)->cryptid > 0; +} + +static FIRCLSMachOVersion FIRCLSMachOVersionFromEncoded(uint32_t encoded) { + FIRCLSMachOVersion version; + + version.major = (encoded & 0xffff0000) >> 16; + version.minor = (encoded & 0x0000ff00) >> 8; + version.bugfix = encoded & 0x000000ff; + + return version; +} + +FIRCLSMachOVersion FIRCLSMachOGetMinimumOSVersion(const struct load_command* cmd) { + return FIRCLSMachOVersionFromEncoded(((const struct version_min_command*)cmd)->version); +} + +FIRCLSMachOVersion FIRCLSMachOGetLinkedSDKVersion(const struct load_command* cmd) { + return FIRCLSMachOVersionFromEncoded(((const struct version_min_command*)cmd)->sdk); +} + +FIRCLSMachOSegmentCommand FIRCLSMachOGetSegmentCommand(const struct load_command* cmd) { + FIRCLSMachOSegmentCommand segmentCommand; + + memset(&segmentCommand, 0, sizeof(FIRCLSMachOSegmentCommand)); + + if (!cmd) { + return segmentCommand; + } + + if (cmd->cmd == LC_SEGMENT) { + struct segment_command* segCmd = (struct segment_command*)cmd; + + memcpy(segmentCommand.segname, segCmd->segname, 16); + segmentCommand.vmaddr = segCmd->vmaddr; + segmentCommand.vmsize = segCmd->vmsize; + } else if (cmd->cmd == LC_SEGMENT_64) { + struct segment_command_64* segCmd = (struct segment_command_64*)cmd; + + memcpy(segmentCommand.segname, segCmd->segname, 16); + segmentCommand.vmaddr = segCmd->vmaddr; + segmentCommand.vmsize = segCmd->vmsize; + } + + return segmentCommand; +} + +NSString* FIRCLSMachONormalizeUUID(CFUUIDBytes* uuidBytes) { + CFUUIDRef uuid = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, *uuidBytes); + + NSString* string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); + + CFRelease(uuid); + + return [[string stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString]; +} + +NSString* FIRCLSMachOFormatVersion(FIRCLSMachOVersion* version) { + if (!version) { + return nil; + } + + return [NSString stringWithFormat:@"%d.%d.%d", version->major, version->minor, version->bugfix]; +} diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h new file mode 100644 index 000000000000..57d54988afe8 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h @@ -0,0 +1,41 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "FIRCLSMachO.h" + +@class FIRCLSMachOSlice; + +@interface FIRCLSMachOBinary : NSObject { + NSURL* _url; + + struct FIRCLSMachOFile _file; + NSMutableArray* _slices; + NSString* _instanceIdentifier; +} + ++ (id)MachOBinaryWithPath:(NSString*)path; + +- (id)initWithURL:(NSURL*)url; + +@property(nonatomic, copy, readonly) NSURL* URL; +@property(nonatomic, copy, readonly) NSString* path; +@property(nonatomic, strong, readonly) NSArray* slices; +@property(nonatomic, copy, readonly) NSString* instanceIdentifier; + +- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block; + +- (FIRCLSMachOSlice*)sliceForArchitecture:(NSString*)architecture; + +@end diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m new file mode 100644 index 000000000000..d409d710a0bc --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m @@ -0,0 +1,171 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMachOBinary.h" + +#import "FIRCLSMachOSlice.h" + +#import + +static void FIRCLSSafeHexToString(const uint8_t* value, size_t length, char* outputBuffer); +static NSString* FIRCLSNSDataToNSString(NSData* data); +static NSString* FIRCLSHashBytes(const void* bytes, size_t length); +static NSString* FIRCLSHashNSString(NSString* value); + +@interface FIRCLSMachOBinary () + ++ (NSString*)hashNSString:(NSString*)value; + +@end + +@implementation FIRCLSMachOBinary + ++ (id)MachOBinaryWithPath:(NSString*)path { + return [[self alloc] initWithURL:[NSURL fileURLWithPath:path]]; +} + +@synthesize slices = _slices; + +- (id)initWithURL:(NSURL*)url { + self = [super init]; + if (self) { + _url = [url copy]; + + if (!FIRCLSMachOFileInitWithPath(&_file, [[_url path] fileSystemRepresentation])) { + return nil; + } + + _slices = [NSMutableArray new]; + FIRCLSMachOFileEnumerateSlices(&_file, ^(FIRCLSMachOSliceRef slice) { + FIRCLSMachOSlice* sliceObject; + + sliceObject = [[FIRCLSMachOSlice alloc] initWithSlice:slice]; + + [self->_slices addObject:sliceObject]; + }); + } + + return self; +} + +- (void)dealloc { + FIRCLSMachOFileDestroy(&_file); +} + +- (NSURL*)URL { + return _url; +} + +- (NSString*)path { + return [_url path]; +} + +- (NSString*)instanceIdentifier { + if (_instanceIdentifier) { + return _instanceIdentifier; + } + + NSMutableString* prehashedString = [NSMutableString new]; + + // sort the slices by architecture + NSArray* sortedSlices = + [_slices sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { + return [[obj1 architectureName] compare:[obj2 architectureName]]; + }]; + + // append them all into a big string + for (FIRCLSMachOSlice* slice in sortedSlices) { + [prehashedString appendString:[slice uuid]]; + } + + _instanceIdentifier = [FIRCLSHashNSString(prehashedString) copy]; + + return _instanceIdentifier; +} + +- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block { + for (FIRCLSMachOSlice* slice in _slices) { + block([slice uuid], [slice architectureName]); + } +} + +- (FIRCLSMachOSlice*)sliceForArchitecture:(NSString*)architecture { + for (FIRCLSMachOSlice* slice in [self slices]) { + if ([[slice architectureName] isEqualToString:architecture]) { + return slice; + } + } + + return nil; +} + ++ (NSString*)hashNSString:(NSString*)value { + return FIRCLSHashNSString(value); +} + +@end + +// TODO: Functions copied from the SDK. We should figure out a way to share this. +static void FIRCLSSafeHexToString(const uint8_t* value, size_t length, char* outputBuffer) { + const char hex[] = "0123456789abcdef"; + + if (!value) { + outputBuffer[0] = '\0'; + return; + } + + for (size_t i = 0; i < length; ++i) { + unsigned char c = value[i]; + outputBuffer[i * 2] = hex[c >> 4]; + outputBuffer[i * 2 + 1] = hex[c & 0x0F]; + } + + outputBuffer[length * 2] = '\0'; // null terminate +} + +static NSString* FIRCLSNSDataToNSString(NSData* data) { + NSString* string; + char* buffer; + size_t size; + NSUInteger length; + + // we need 2 hex char for every byte of data, plus one more spot for a + // null terminator + length = [data length]; + size = (length * 2) + 1; + buffer = malloc(sizeof(char) * size); + + FIRCLSSafeHexToString([data bytes], length, buffer); + + string = [NSString stringWithUTF8String:buffer]; + + free(buffer); + + return string; +} + +static NSString* FIRCLSHashBytes(const void* bytes, size_t length) { + uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; + CC_SHA1(bytes, (CC_LONG)length, digest); + + NSData* result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; + + return FIRCLSNSDataToNSString(result); +} + +static NSString* FIRCLSHashNSString(NSString* value) { + const char* s = [value cStringUsingEncoding:NSUTF8StringEncoding]; + + return FIRCLSHashBytes(s, strlen(s)); +} diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h new file mode 100644 index 000000000000..9f7bcb43f2f5 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h @@ -0,0 +1,37 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "FIRCLSMachO.h" + +@interface FIRCLSMachOSlice : NSObject { + struct FIRCLSMachOSlice _slice; + + NSString* _uuidString; + NSArray* _linkedDylibs; + FIRCLSMachOVersion _minimumOSVersion; + FIRCLSMachOVersion _linkedSDKVersion; +} + ++ (id)runningSlice; + +- (id)initWithSlice:(FIRCLSMachOSliceRef)sliceRef; + +@property(nonatomic, copy, readonly) NSString* uuid; +@property(nonatomic, copy, readonly) NSString* architectureName; +@property(nonatomic, strong, readonly) NSArray* linkedDylibs; +@property(nonatomic, assign, readonly) FIRCLSMachOVersion minimumOSVersion; +@property(nonatomic, assign, readonly) FIRCLSMachOVersion linkedSDKVersion; + +@end diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m new file mode 100644 index 000000000000..961e144a8192 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m @@ -0,0 +1,93 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMachOSlice.h" + +#include + +// this is defined only if __OPEN_SOURCE__ is *not* defined in the TVOS SDK's mach-o/loader.h +// also, it has not yet made it back to the OSX SDKs, for example +#ifndef LC_VERSION_MIN_TVOS +#define LC_VERSION_MIN_TVOS 0x2F +#endif + +@implementation FIRCLSMachOSlice + ++ (id)runningSlice { + struct FIRCLSMachOSlice slice; + + slice = FIRCLSMachOSliceGetCurrent(); + + return [[self alloc] initWithSlice:&slice]; +} + +@synthesize minimumOSVersion = _minimumOSVersion; +@synthesize linkedSDKVersion = _linkedSDKVersion; + +- (id)initWithSlice:(FIRCLSMachOSliceRef)sliceRef { + self = [super init]; + if (self) { + NSMutableArray* dylibs; + + _slice = *sliceRef; + + _minimumOSVersion.major = 0; + _minimumOSVersion.minor = 0; + _minimumOSVersion.bugfix = 0; + + _linkedSDKVersion.major = 0; + _linkedSDKVersion.minor = 0; + _linkedSDKVersion.bugfix = 0; + + dylibs = [NSMutableArray array]; + + FIRCLSMachOSliceEnumerateLoadCommands( + &_slice, ^(uint32_t type, uint32_t size, const struct load_command* cmd) { + switch (type) { + case LC_UUID: + self->_uuidString = + [FIRCLSMachONormalizeUUID((CFUUIDBytes*)FIRCLSMachOGetUUID(cmd)) copy]; + break; + case LC_LOAD_DYLIB: + [dylibs addObject:[NSString stringWithUTF8String:FIRCLSMachOGetDylibPath(cmd)]]; + break; + case LC_VERSION_MIN_IPHONEOS: + case LC_VERSION_MIN_MACOSX: + case LC_VERSION_MIN_WATCHOS: + case LC_VERSION_MIN_TVOS: + self->_minimumOSVersion = FIRCLSMachOGetMinimumOSVersion(cmd); + self->_linkedSDKVersion = FIRCLSMachOGetLinkedSDKVersion(cmd); + break; + } + }); + + _linkedDylibs = [dylibs copy]; + } + + return self; +} + +- (NSString*)architectureName { + return [NSString stringWithUTF8String:FIRCLSMachOSliceGetArchitectureName(&_slice)]; +} + +- (NSString*)uuid { + return _uuidString; +} + +- (NSArray*)linkedDylibs { + return _linkedDylibs; +} + +@end diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h b/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h new file mode 100644 index 000000000000..c80ac745ffe9 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h @@ -0,0 +1,38 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSMachOBinary; + +@interface FIRCLSdSYM : NSObject + +NS_ASSUME_NONNULL_BEGIN + ++ (id)dSYMWithURL:(NSURL*)url; + +- (id)initWithURL:(NSURL*)url; + +@property(nonatomic, readonly) FIRCLSMachOBinary* binary; +@property(nonatomic, copy, readonly, nullable) NSString* bundleIdentifier; +@property(nonatomic, copy, readonly) NSURL* executableURL; +@property(nonatomic, copy, readonly) NSString* executablePath; +@property(nonatomic, copy, readonly) NSString* bundleVersion; +@property(nonatomic, copy, readonly) NSString* shortBundleVersion; + +- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block; + +NS_ASSUME_NONNULL_END + +@end diff --git a/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m b/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m new file mode 100644 index 000000000000..cda787914a6c --- /dev/null +++ b/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m @@ -0,0 +1,109 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSdSYM.h" + +#import "FIRCLSMachOBinary.h" + +#define CLS_XCODE_DSYM_PREFIX (@"com.apple.xcode.dsym.") + +@interface FIRCLSdSYM () + +@property(nonatomic, readonly) NSBundle* bundle; + +@end + +@implementation FIRCLSdSYM + ++ (id)dSYMWithURL:(NSURL*)url { + return [[self alloc] initWithURL:url]; +} + +- (id)initWithURL:(NSURL*)url { + self = [super init]; + if (self) { + NSDirectoryEnumerator* enumerator; + NSString* path; + NSFileManager* fileManager; + BOOL isDirectory; + BOOL fileExistsAtPath; + NSArray* itemsInDWARFDir; + + fileManager = [NSFileManager defaultManager]; + + // Is there a file at this path? + if (![fileManager fileExistsAtPath:[url path]]) { + return nil; + } + + _bundle = [NSBundle bundleWithURL:url]; + if (!_bundle) { + return nil; + } + + path = [[url path] stringByAppendingPathComponent:@"Contents/Resources/DWARF"]; + + // Does this path exist and is it a directory? + fileExistsAtPath = [fileManager fileExistsAtPath:path isDirectory:&isDirectory]; + if (!fileExistsAtPath || !isDirectory) { + return nil; + } + + enumerator = [fileManager enumeratorAtPath:path]; + itemsInDWARFDir = [enumerator allObjects]; + // Do we have a Contents/Resources/DWARF dir but no contents? + if ([itemsInDWARFDir count] == 0) { + return nil; + } + + path = [path stringByAppendingPathComponent:[itemsInDWARFDir objectAtIndex:0]]; + + _binary = [[FIRCLSMachOBinary alloc] initWithURL:[NSURL fileURLWithPath:path]]; + } + + return self; +} + +- (NSString*)bundleIdentifier { + NSString* identifier; + + identifier = [_bundle bundleIdentifier]; + if ([identifier hasPrefix:CLS_XCODE_DSYM_PREFIX]) { + return [identifier substringFromIndex:[CLS_XCODE_DSYM_PREFIX length]]; + } + + return identifier; +} + +- (NSURL*)executableURL { + return [_binary URL]; +} + +- (NSString*)executablePath { + return [_binary path]; +} + +- (NSString*)bundleVersion { + return [[_bundle infoDictionary] objectForKey:@"CFBundleVersion"]; +} + +- (NSString*)shortBundleVersion { + return [[_bundle infoDictionary] objectForKey:@"CFBundleShortVersionString"]; +} + +- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block { + [_binary enumerateUUIDs:block]; +} + +@end diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h new file mode 100644 index 000000000000..ebbd26c919b1 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h @@ -0,0 +1,56 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +OBJC_EXTERN const NSUInteger FIRCLSNetworkMaximumRetryCount; + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^FIRCLSNetworkDataTaskCompletionHandlerBlock)(NSData *__nullable data, + NSURLResponse *__nullable response, + NSError *__nullable error); +typedef void (^FIRCLSNetworkDownloadTaskCompletionHandlerBlock)(NSURL *__nullable location, + NSURLResponse *__nullable response, + NSError *__nullable error); + +@interface FIRCLSFABNetworkClient : NSObject + +- (instancetype)init; +- (instancetype)initWithQueue:(nullable NSOperationQueue *)operationQueue; +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)config + queue:(nullable NSOperationQueue *)operationQueue + NS_DESIGNATED_INITIALIZER; + +- (void)startDataTaskWithRequest:(NSURLRequest *)request + retryLimit:(NSUInteger)retryLimit + completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler; +- (void)startDownloadTaskWithRequest:(NSURLRequest *)request + retryLimit:(NSUInteger)retryLimit + completionHandler: + (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler; + +- (void)invalidateAndCancel; + +// Backwards compatibility (we cannot change an interface in Fabric Base that other kits rely on, +// since we have no control of versioning dependencies) +- (void)startDataTaskWithRequest:(NSURLRequest *)request + completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler; +- (void)startDownloadTaskWithRequest:(NSURLRequest *)request + completionHandler: + (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m new file mode 100644 index 000000000000..d11b3b6115ce --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m @@ -0,0 +1,280 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSFABNetworkClient.h" + +#if FIRCLSURLSESSION_REQUIRED +#import "FIRCLSURLSession.h" +#endif + +#import "FIRCLSNetworkResponseHandler.h" + +static const float FIRCLSNetworkMinimumRetryJitter = 0.90f; +static const float FIRCLSNetworkMaximumRetryJitter = 1.10f; +const NSUInteger FIRCLSNetworkMaximumRetryCount = 10; + +@interface FIRCLSFABNetworkClient () + +@property(nonatomic, strong, readonly) NSURLSession *session; + +@end + +@implementation FIRCLSFABNetworkClient + +- (instancetype)init { + return [self initWithQueue:nil]; +} + +- (instancetype)initWithQueue:(nullable NSOperationQueue *)operationQueue { +#if !FIRCLSURLSESSION_REQUIRED + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; +#else + NSURLSessionConfiguration *config = [FIRCLSURLSessionConfiguration defaultSessionConfiguration]; +#endif + return [self initWithSessionConfiguration:config queue:operationQueue]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)config + queue:(nullable NSOperationQueue *)operationQueue { + self = [super init]; + if (!self) { + return nil; + } + +#if !FIRCLSURLSESSION_REQUIRED + _session = [NSURLSession sessionWithConfiguration:config + delegate:self + delegateQueue:operationQueue]; +#else + _session = [FIRCLSURLSession sessionWithConfiguration:config + delegate:self + delegateQueue:operationQueue]; +#endif + if (!_session) { + return nil; + } + + return self; +} + +- (void)dealloc { + [_session finishTasksAndInvalidate]; +} + +#pragma mark - Delay Handling +- (double)randomDoubleWithMin:(double)min max:(double)max { + return min + ((max - min) * drand48()); +} + +- (double)generateRandomJitter { + return [self randomDoubleWithMin:FIRCLSNetworkMinimumRetryJitter + max:FIRCLSNetworkMaximumRetryJitter]; +} + +- (NSTimeInterval)computeDelayForResponse:(NSURLResponse *)response + withRetryCount:(NSUInteger)count { + NSTimeInterval initialValue = [FIRCLSNetworkResponseHandler retryValueForResponse:response]; + + // make sure count is > 0 + count = MAX(count, 1); + // make sure initialValue is >2 for exponential backoff to work reasonably with low count numbers + initialValue = MAX(initialValue, 2.0); + + const double jitter = [self generateRandomJitter]; + + return pow(initialValue, count) * jitter; // exponential backoff +} + +- (void)runAfterRetryValueFromResponse:(NSURLResponse *)response + attempts:(NSUInteger)count + onQueue:(dispatch_queue_t)queue + block:(void (^)(void))block { + const NSTimeInterval delay = [self computeDelayForResponse:response withRetryCount:count]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (uint64_t)(delay * NSEC_PER_SEC)), queue, block); +} + +- (void)runAfterRetryValueFromResponse:(NSURLResponse *)response + attempts:(NSUInteger)count + block:(void (^)(void))block { + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + + [self runAfterRetryValueFromResponse:response attempts:count onQueue:queue block:block]; +} + +#pragma mark - Tasks + +- (void)startDataTaskWithRequest:(NSURLRequest *)request + retryLimit:(NSUInteger)retryLimit + tries:(NSUInteger)tries + completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler { + NSURLSessionTask *task = [self.session + dataTaskWithRequest:request + completionHandler:^(NSData *data, NSURLResponse *response, NSError *taskError) { + [FIRCLSNetworkResponseHandler + handleCompletedResponse:response + forOriginalRequest:request + error:taskError + block:^(BOOL retry, NSError *error) { + if (!retry) { + completionHandler(data, response, error); + return; + } + + if (tries >= retryLimit) { + NSDictionary *userInfo = @{ + @"retryLimit" : @(retryLimit), + NSURLErrorFailingURLStringErrorKey : request.URL + }; + completionHandler( + nil, nil, + [NSError + errorWithDomain:FIRCLSNetworkErrorDomain + code:FIRCLSNetworkErrorMaximumAttemptsReached + userInfo:userInfo]); + return; + } + + [self + runAfterRetryValueFromResponse:response + attempts:tries + block:^{ + [self + startDataTaskWithRequest: + request + retryLimit: + retryLimit + tries: + (tries + + 1) + completionHandler: + completionHandler]; + }]; + }]; + }]; + + [task resume]; + + if (!task) { + completionHandler(nil, nil, + [NSError errorWithDomain:FIRCLSNetworkErrorDomain + code:FIRCLSNetworkErrorFailedToStartOperation + userInfo:nil]); + } +} + +- (void)startDataTaskWithRequest:(NSURLRequest *)request + retryLimit:(NSUInteger)retryLimit + completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler { + [self startDataTaskWithRequest:request + retryLimit:retryLimit + tries:0 + completionHandler:completionHandler]; +} + +- (void)startDataTaskWithRequest:(NSURLRequest *)request + completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler { + [self startDataTaskWithRequest:request + retryLimit:FIRCLSNetworkMaximumRetryCount + completionHandler:completionHandler]; +} + +- (void)startDownloadTaskWithRequest:(NSURLRequest *)request + retryLimit:(NSUInteger)retryLimit + tries:(NSUInteger)tries + completionHandler: + (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler { + NSURLSessionTask *task = [self.session + downloadTaskWithRequest:request + completionHandler:^(NSURL *location, NSURLResponse *response, NSError *taskError) { + [FIRCLSNetworkResponseHandler + handleCompletedResponse:response + forOriginalRequest:request + error:taskError + block:^(BOOL retry, NSError *error) { + if (!retry) { + completionHandler(location, response, error); + return; + } + + if (tries >= retryLimit) { + NSDictionary *userInfo = @{ + @"retryLimit" : @(retryLimit), + NSURLErrorFailingURLStringErrorKey : request.URL + }; + completionHandler( + nil, nil, + [NSError + errorWithDomain:FIRCLSNetworkErrorDomain + code: + FIRCLSNetworkErrorMaximumAttemptsReached + userInfo:userInfo]); + return; + } + + [self + runAfterRetryValueFromResponse:response + attempts:tries + block:^{ + [self + startDownloadTaskWithRequest: + request + retryLimit: + retryLimit + tries: + (tries + + 1) + completionHandler: + completionHandler]; + }]; + }]; + }]; + + [task resume]; + + if (!task) { + completionHandler(nil, nil, + [NSError errorWithDomain:FIRCLSNetworkErrorDomain + code:FIRCLSNetworkErrorFailedToStartOperation + userInfo:nil]); + } +} + +- (void)startDownloadTaskWithRequest:(NSURLRequest *)request + retryLimit:(NSUInteger)retryLimit + completionHandler: + (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler { + [self startDownloadTaskWithRequest:request + retryLimit:retryLimit + tries:0 + completionHandler:completionHandler]; +} + +- (void)startDownloadTaskWithRequest:(NSURLRequest *)request + completionHandler: + (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler { + [self startDownloadTaskWithRequest:request + retryLimit:FIRCLSNetworkMaximumRetryCount + completionHandler:completionHandler]; +} + +- (void)invalidateAndCancel { + [self.session invalidateAndCancel]; +} + +#pragma mark - NSURLSession Delegate +- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error { +} + +@end diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h new file mode 100644 index 000000000000..c3630a5b437f --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h @@ -0,0 +1,88 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * This class is a helper class for generating Multipart requests, as described in + * http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html. In the case of multiple part messages, in + * which one or more different sets of data are combined in a single body, a "multipart" + * Content-Type field must appear in the entity's header. The body must then contain one or more + * "body parts," each preceded by an encapsulation boundary, and the last one followed by a closing + * boundary. Each part starts with an encapsulation boundary, and then contains a body part + * consisting of header area, a blank line, and a body area. + */ +@interface FIRCLSMultipartMimeStreamEncoder : NSObject + +/** + * Convenience class method to populate a NSMutableURLRequest with data from a block that takes an + * instance of this class as input. + */ ++ (void)populateRequest:(NSMutableURLRequest *)request + withDataFromEncoder:(void (^)(FIRCLSMultipartMimeStreamEncoder *encoder))block; + +/** + * Returns a NSString instance with multipart/form-data appended to the boundary. + */ ++ (NSString *)contentTypeHTTPHeaderValueWithBoundary:(NSString *)boundary; +/** + * Convenience class method that returns an instance of this class + */ ++ (instancetype)encoderWithStream:(NSOutputStream *)stream andBoundary:(NSString *)boundary; +/** + * Returns a unique boundary string. + */ ++ (NSString *)generateBoundary; +/** + * Designated initializer + * @param stream NSOutputStream associated with the Multipart request + * @param boundary the unique Boundary string to be used + */ +- (instancetype)initWithStream:(NSOutputStream *)stream + andBoundary:(NSString *)boundary NS_DESIGNATED_INITIALIZER; +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +/** + * Encodes this block within the boundary on the output stream + */ +- (void)encode:(void (^)(void))block; +/** + * Adds the contents of the file data with given Mime type anf fileName within the boundary in + * stream + */ +- (void)addFileData:(NSData *)data + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + fieldName:(NSString *)name; +/** + * Convenience method for the method above. Converts fileURL to data and calls the above method. + */ +- (void)addFile:(NSURL *)fileURL + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + fieldName:(NSString *)name; +/** + * Adds this field and value in the stream + */ +- (void)addValue:(id)value fieldName:(NSString *)name; +/** + * String referring to the multipart MIME type with boundary + */ +@property(nonatomic, copy, readonly) NSString *contentTypeHTTPHeaderValue; +/** + * Length of the data written to stream + */ +@property(nonatomic, copy, readonly) NSString *contentLengthHTTPHeaderValue; + +@end diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m new file mode 100644 index 000000000000..134b1cefb21d --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m @@ -0,0 +1,208 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMultipartMimeStreamEncoder.h" + +#import "FIRCLSByteUtility.h" +#import "FIRCLSLogger.h" +#import "FIRCLSUUID.h" + +@interface FIRCLSMultipartMimeStreamEncoder () + +@property(nonatomic) NSUInteger length; +@property(nonatomic, copy) NSString *boundary; +@property(nonatomic, copy, readonly) NSData *headerData; +@property(nonatomic, copy, readonly) NSData *footerData; +@property(nonatomic, strong) NSOutputStream *outputStream; + +@end + +@implementation FIRCLSMultipartMimeStreamEncoder + ++ (void)populateRequest:(NSMutableURLRequest *)request + withDataFromEncoder:(void (^)(FIRCLSMultipartMimeStreamEncoder *encoder))block { + NSString *boundary = [self generateBoundary]; + + NSOutputStream *stream = [NSOutputStream outputStreamToMemory]; + + FIRCLSMultipartMimeStreamEncoder *encoder = + [[FIRCLSMultipartMimeStreamEncoder alloc] initWithStream:stream andBoundary:boundary]; + + [encoder encode:^{ + block(encoder); + }]; + + [request setValue:encoder.contentTypeHTTPHeaderValue forHTTPHeaderField:@"Content-Type"]; + [request setValue:encoder.contentLengthHTTPHeaderValue forHTTPHeaderField:@"Content-Length"]; + + NSData *data = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; + request.HTTPBody = data; +} + ++ (NSString *)contentTypeHTTPHeaderValueWithBoundary:(NSString *)boundary { + return [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; +} + ++ (instancetype)encoderWithStream:(NSOutputStream *)stream andBoundary:(NSString *)boundary { + return [[self alloc] initWithStream:stream andBoundary:boundary]; +} + ++ (NSString *)generateBoundary { + return FIRCLSGenerateUUID(); +} + +- (instancetype)initWithStream:(NSOutputStream *)stream andBoundary:(NSString *)boundary { + self = [super init]; + if (!self) { + return nil; + } + + self.outputStream = stream; + + if (!boundary) { + boundary = [FIRCLSMultipartMimeStreamEncoder generateBoundary]; + } + + _boundary = boundary; + + return self; +} + +- (void)encode:(void (^)(void))block { + [self beginEncoding]; + + block(); + + [self endEncoding]; +} + +- (NSString *)contentTypeHTTPHeaderValue { + return [[self class] contentTypeHTTPHeaderValueWithBoundary:self.boundary]; +} + +- (NSString *)contentLengthHTTPHeaderValue { + return [NSString stringWithFormat:@"%lu", (unsigned long)_length]; +} + +#pragma - mark MIME part API +- (void)beginEncoding { + _length = 0; + + [self.outputStream open]; + + [self writeData:self.headerData]; +} + +- (void)endEncoding { + [self writeData:self.footerData]; + + [self.outputStream close]; +} + +- (NSData *)headerData { + return [@"MIME-Version: 1.0\r\n" dataUsingEncoding:NSUTF8StringEncoding]; +} + +- (NSData *)footerData { + return [[NSString stringWithFormat:@"--%@--\r\n", self.boundary] + dataUsingEncoding:NSUTF8StringEncoding]; +} + +- (void)addFileData:(NSData *)data + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + fieldName:(NSString *)name { + if ([data length] == 0) { + FIRCLSErrorLog(@"Unable to MIME encode data with zero length (%@)", name); + return; + } + + if ([name length] == 0 || [fileName length] == 0) { + FIRCLSErrorLog(@"name (%@) or fieldname (%@) is invalid", name, fileName); + return; + } + + NSMutableString *string; + + string = [NSMutableString + stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", + self.boundary, name, fileName]; + + if (mimeType) { + [string appendFormat:@"Content-Type: %@\r\n", mimeType]; + [string appendString:@"Content-Transfer-Encoding: binary\r\n\r\n"]; + } else { + [string appendString:@"Content-Type: application/octet-stream\r\n\r\n"]; + } + + [self writeData:[string dataUsingEncoding:NSUTF8StringEncoding]]; + + [self writeData:data]; + + [self writeData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; +} + +- (void)addValue:(id)value fieldName:(NSString *)name { + if ([name length] == 0 || !value || value == NSNull.null) { + FIRCLSErrorLog(@"name (%@) or value (%@) is invalid", name, value); + return; + } + + NSMutableString *string; + + string = + [NSMutableString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n", + self.boundary, name]; + [string appendString:@"Content-Type: text/plain\r\n\r\n"]; + [string appendFormat:@"%@\r\n", value]; + + [self writeData:[string dataUsingEncoding:NSUTF8StringEncoding]]; +} + +- (void)addFile:(NSURL *)fileURL + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + fieldName:(NSString *)name { + NSData *data = [NSData dataWithContentsOfURL:fileURL]; + + [self addFileData:data fileName:fileName mimeType:mimeType fieldName:name]; +} + +- (BOOL)writeBytes:(const void *)bytes ofLength:(NSUInteger)length { + if ([self.outputStream write:bytes maxLength:length] != length) { + FIRCLSErrorLog(@"Failed to write bytes to stream"); + return NO; + } + + _length += length; + + return YES; +} + +- (void)writeData:(NSData *)data { + FIRCLSEnumerateByteRangesOfNSDataUsingBlock( + data, ^(const void *bytes, NSRange byteRange, BOOL *stop) { + NSUInteger length = byteRange.length; + + if ([self.outputStream write:bytes maxLength:length] != length) { + FIRCLSErrorLog(@"Failed to write data to stream"); + *stop = YES; + return; + } + + self->_length += length; + }); +} + +@end diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h new file mode 100644 index 000000000000..42f0bb49306e --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h @@ -0,0 +1,87 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * Type to indicate response status + */ +typedef NS_ENUM(NSInteger, FIRCLSNetworkClientResponseType) { + FIRCLSNetworkClientResponseSuccess, + FIRCLSNetworkClientResponseInvalid, + FIRCLSNetworkClientResponseFailure, + FIRCLSNetworkClientResponseRetry, + FIRCLSNetworkClientResponseBackOff +}; + +typedef NS_ENUM(NSInteger, FIRCLSNetworkErrorType) { + FIRCLSNetworkErrorUnknown = -1, + FIRCLSNetworkErrorFailedToStartOperation = -3, + FIRCLSNetworkErrorResponseInvalid = -4, + FIRCLSNetworkErrorRequestFailed = -5, + FIRCLSNetworkErrorMaximumAttemptsReached = -6, +}; + +extern NSInteger const FIRCLSNetworkErrorUnknownURLCancelReason; + +/** + * This block is an input parameter to handleCompletedResponse: and handleCompletedTask: methods of + * this class. + * @param retryMightSucceed is YES if the request should be retried. + * @param error is the error received back in response. + */ +typedef void (^FIRCLSNetworkResponseCompletionHandlerBlock)(BOOL retryMightSucceed, NSError *error); + +/** + * Error domain for Crashlytics network errors + */ +extern NSString *const FIRCLSNetworkErrorDomain; +/** + * This class handles network responses. + */ +@interface FIRCLSNetworkResponseHandler : NSObject +/** + * Returns the header in the given NSURLResponse with name as key + */ ++ (NSString *)headerForResponse:(NSURLResponse *)response withKey:(NSString *)key; +/** + * Returns Retry-After header value in response, and if absent returns a default retry value + */ ++ (NSTimeInterval)retryValueForResponse:(NSURLResponse *)response; +/** + * Checks if the content type for response matches the request + */ ++ (BOOL)contentTypeForResponse:(NSURLResponse *)response matchesRequest:(NSURLRequest *)request; + ++ (NSInteger)cancelReasonFromURLError:(NSError *)error; + ++ (BOOL)retryableURLError:(NSError *)error; + +/** + * Convenience method that calls back the input block with FIRCLSNetworkClientResponseType after + * checking the response code in response + */ ++ (void)clientResponseType:(NSURLResponse *)response + handler:(void (^)(FIRCLSNetworkClientResponseType type, + NSInteger statusCode))responseTypeAndStatusCodeHandlerBlock; +/** + * Handles a completed response for request and calls back input block. Populates error even if + * error was nil, but response code indicated an error. + */ ++ (void)handleCompletedResponse:(NSURLResponse *)response + forOriginalRequest:(NSURLRequest *)originalRequest + error:(NSError *)error + block:(FIRCLSNetworkResponseCompletionHandlerBlock)completionHandlerBlock; + +@end diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m new file mode 100644 index 000000000000..d82cdf69a85b --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m @@ -0,0 +1,290 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSNetworkResponseHandler.h" + +@implementation FIRCLSNetworkResponseHandler + +static const NSTimeInterval kFIRCLSNetworkResponseHandlerDefaultRetryInterval = 2.0; +static NSString *const kFIRCLSNetworkResponseHandlerContentType = @"Content-Type"; +NSString *const FIRCLSNetworkErrorDomain = @"FIRCLSNetworkError"; + +NSInteger const FIRCLSNetworkErrorUnknownURLCancelReason = -1; + +#pragma mark - Header Handling ++ (NSString *)headerForResponse:(NSURLResponse *)response withKey:(NSString *)key { + if (![response respondsToSelector:@selector(allHeaderFields)]) { + return nil; + } + + return [((NSHTTPURLResponse *)response).allHeaderFields objectForKey:key]; +} + ++ (NSTimeInterval)retryValueForResponse:(NSURLResponse *)response { + NSString *retryValueString = [self headerForResponse:response withKey:@"Retry-After"]; + if (!retryValueString) { + return kFIRCLSNetworkResponseHandlerDefaultRetryInterval; + } + + NSTimeInterval value = retryValueString.doubleValue; + if (value < 0.0) { + return kFIRCLSNetworkResponseHandlerDefaultRetryInterval; + } + + return value; +} + ++ (NSString *)requestIdForResponse:(NSURLResponse *)response { + return [self headerForResponse:response withKey:@"X-Request-Id"]; +} + ++ (BOOL)contentTypeForResponse:(NSURLResponse *)response matchesRequest:(NSURLRequest *)request { + NSString *accept = [request.allHTTPHeaderFields objectForKey:@"Accept"]; + if (!accept) { + // An omitted accept header is defined to match everything + return YES; + } + + NSString *contentHeader = [self.class headerForResponse:response + withKey:kFIRCLSNetworkResponseHandlerContentType]; + if (!contentHeader) { + // FIRCLSDeveloperLog("Network", @"Content-Type not present in response"); + return NO; + } + + NSString *acceptCharset = request.allHTTPHeaderFields[@"Accept-Charset"]; + + NSArray *parts = [contentHeader componentsSeparatedByString:@"; charset="]; + if (!parts) { + parts = @[ contentHeader ]; + } + + if ([[parts objectAtIndex:0] caseInsensitiveCompare:accept] != NSOrderedSame) { + // FIRCLSDeveloperLog("Network", @"Content-Type does not match Accept"); + return NO; + } + + if (!acceptCharset) { + return YES; + } + + if (parts.count < 2) { + return YES; + } + + return [[parts objectAtIndex:1] caseInsensitiveCompare:acceptCharset] == NSOrderedSame; +} + ++ (NSInteger)cancelReasonFromURLError:(NSError *)error { + if (![[error domain] isEqualToString:NSURLErrorDomain]) { + return FIRCLSNetworkErrorUnknownURLCancelReason; + } + + if ([error code] != NSURLErrorCancelled) { + return FIRCLSNetworkErrorUnknownURLCancelReason; + } + + NSNumber *reason = [[error userInfo] objectForKey:NSURLErrorBackgroundTaskCancelledReasonKey]; + if (reason == nil) { + return FIRCLSNetworkErrorUnknownURLCancelReason; + } + + return [reason integerValue]; +} + ++ (BOOL)retryableURLError:(NSError *)error { + // So far, the only task errors seen are NSURLErrorDomain. For others, we're not + // sure what to do. + if (![[error domain] isEqualToString:NSURLErrorDomain]) { + return NO; + } + + // cases that we know are definitely not retryable + switch ([error code]) { + case NSURLErrorBadURL: + case NSURLErrorUnsupportedURL: + case NSURLErrorHTTPTooManyRedirects: + case NSURLErrorRedirectToNonExistentLocation: + case NSURLErrorUserCancelledAuthentication: + case NSURLErrorUserAuthenticationRequired: + case NSURLErrorAppTransportSecurityRequiresSecureConnection: + case NSURLErrorFileDoesNotExist: + case NSURLErrorFileIsDirectory: + case NSURLErrorDataLengthExceedsMaximum: + case NSURLErrorSecureConnectionFailed: + case NSURLErrorServerCertificateHasBadDate: + case NSURLErrorServerCertificateUntrusted: + case NSURLErrorServerCertificateHasUnknownRoot: + case NSURLErrorServerCertificateNotYetValid: + case NSURLErrorClientCertificateRejected: + case NSURLErrorClientCertificateRequired: + case NSURLErrorBackgroundSessionRequiresSharedContainer: + return NO; + } + + // All other errors, as far as I can tell, are things that could clear up + // without action on the part of the client. + + // NSURLErrorCancelled is a potential special-case. I believe there are + // situations where a cancelled request cannot be successfully restarted. But, + // until I can prove it, we'll retry. There are defnitely many cases where + // a cancelled request definitely can be restarted and will work. + + return YES; +} + +#pragma mark - Error Creation ++ (NSError *)errorForCode:(NSInteger)code userInfo:(NSDictionary *)userInfo { + return [NSError errorWithDomain:FIRCLSNetworkErrorDomain code:code userInfo:userInfo]; +} + ++ (NSError *)errorForResponse:(NSURLResponse *)response + ofType:(FIRCLSNetworkClientResponseType)type + status:(NSInteger)status { + if (type == FIRCLSNetworkClientResponseSuccess) { + return nil; + } + + NSString *requestId = [self requestIdForResponse:response]; + NSString *contentType = [self headerForResponse:response + withKey:kFIRCLSNetworkResponseHandlerContentType]; + + // this could be nil, so be careful + requestId = requestId ? requestId : @""; + contentType = contentType ? contentType : @""; + + NSDictionary *userInfo = @{ + @"type" : @(type), + @"status_code" : @(status), + @"request_id" : requestId, + @"content_type" : contentType + }; + + // compute a reasonable error code type + NSInteger errorCode = FIRCLSNetworkErrorUnknown; + switch (type) { + case FIRCLSNetworkClientResponseFailure: + errorCode = FIRCLSNetworkErrorRequestFailed; + break; + case FIRCLSNetworkClientResponseInvalid: + errorCode = FIRCLSNetworkErrorResponseInvalid; + break; + default: + break; + } + + return [self errorForCode:errorCode userInfo:userInfo]; +} + ++ (void)clientResponseType:(NSURLResponse *)response + handler:(void (^)(FIRCLSNetworkClientResponseType type, + NSInteger statusCode))responseTypeAndStatusCodeHandlerBlock { + if (![response respondsToSelector:@selector(statusCode)]) { + responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseInvalid, 0); + return; + } + + NSInteger code = ((NSHTTPURLResponse *)response).statusCode; + + switch (code) { + case 200: + case 201: + case 202: + case 204: + case 304: + responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseSuccess, code); + return; + case 420: + case 429: + responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseBackOff, code); + return; + case 408: + responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseRetry, code); + return; + case 400: + case 401: + case 403: + case 404: + case 406: + case 410: + case 411: + case 413: + case 419: + case 422: + case 431: + responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseFailure, code); + return; + } + + // check for a 5xx + if (code >= 500 && code <= 599) { + responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseRetry, code); + return; + } + + responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseInvalid, code); +} + ++ (void)handleCompletedResponse:(NSURLResponse *)response + forOriginalRequest:(NSURLRequest *)originalRequest + error:(NSError *)originalError + block: + (FIRCLSNetworkResponseCompletionHandlerBlock)completionHandlerBlock { + // if we have an error, we can just continue + if (originalError) { + BOOL retryable = [self retryableURLError:originalError]; + + completionHandlerBlock(retryable, originalError); + return; + } + + [self.class clientResponseType:response + handler:^(FIRCLSNetworkClientResponseType type, NSInteger statusCode) { + NSError *error = nil; + + switch (type) { + case FIRCLSNetworkClientResponseInvalid: + error = [self errorForResponse:response + ofType:type + status:statusCode]; + break; + case FIRCLSNetworkClientResponseBackOff: + case FIRCLSNetworkClientResponseRetry: + error = [self errorForResponse:response + ofType:type + status:statusCode]; + completionHandlerBlock(YES, error); + return; + case FIRCLSNetworkClientResponseFailure: + error = [self errorForResponse:response + ofType:type + status:statusCode]; + break; + case FIRCLSNetworkClientResponseSuccess: + if (![self contentTypeForResponse:response + matchesRequest:originalRequest]) { + error = [self errorForResponse:response + ofType:FIRCLSNetworkClientResponseInvalid + status:statusCode]; + break; + } + + break; + } + + completionHandlerBlock(NO, error); + }]; +} + +@end diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h new file mode 100644 index 000000000000..c8fbaa94a958 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h @@ -0,0 +1,44 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * This is a convenience class to ease constructing NSURLs. + */ +@interface FIRCLSURLBuilder : NSObject + +/** + * Convenience method that returns a FIRCLSURLBuilder instance with the input base URL appended to + * it. + */ ++ (instancetype)URLWithBase:(NSString *)base; +/** + * Appends the component to the URL being built by FIRCLSURLBuilder instance + */ +- (void)appendComponent:(NSString *)component; +/** + * Escapes and appends the component to the URL being built by FIRCLSURLBuilder instance + */ +- (void)escapeAndAppendComponent:(NSString *)component; +/** + * Adds a query and value to the URL being built + */ +- (void)appendValue:(id)value forQueryParam:(NSString *)param; +/** + * Returns the built URL + */ +- (NSURL *)URL; + +@end diff --git a/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m new file mode 100644 index 000000000000..e832c89877e2 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m @@ -0,0 +1,103 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLBuilder.h" + +#import "FIRCLSLogger.h" + +@interface FIRCLSURLBuilder () + +@property(nonatomic) NSMutableString *URLString; +@property(nonatomic) NSUInteger queryParams; + +- (NSString *)escapeString:(NSString *)string; + +@end + +@implementation FIRCLSURLBuilder + ++ (instancetype)URLWithBase:(NSString *)base { + FIRCLSURLBuilder *url = [[FIRCLSURLBuilder alloc] init]; + + [url appendComponent:base]; + + return url; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _URLString = [[NSMutableString alloc] init]; + _queryParams = 0; + + return self; +} + +- (NSString *)escapeString:(NSString *)string { +#if TARGET_OS_WATCH + // TODO: Question - Why does watchOS use a different encoding from the other platforms and the + // Android SDK? + return + [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet + URLPathAllowedCharacterSet]]; +#else + return + [string stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet + .URLQueryAllowedCharacterSet]; +#endif +} + +- (void)appendComponent:(NSString *)component { + if (component.length == 0) { + FIRCLSErrorLog(@"URLBuilder parameter component must not be empty"); + return; + } + + [self.URLString appendString:component]; +} + +- (void)escapeAndAppendComponent:(NSString *)component { + [self appendComponent:[self escapeString:component]]; +} + +- (void)appendValue:(id)value forQueryParam:(NSString *)param { + if (!value) { + return; + } + + if (self.queryParams == 0) { + [self appendComponent:@"?"]; + } else { + [self appendComponent:@"&"]; + } + + self.queryParams += 1; + + [self appendComponent:param]; + [self appendComponent:@"="]; + if ([value isKindOfClass:NSString.class]) { + [self escapeAndAppendComponent:value]; + } else { + [self escapeAndAppendComponent:[value description]]; + } +} + +- (NSURL *)URL { + return [NSURL URLWithString:self.URLString]; +} + +@end diff --git a/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h b/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h new file mode 100644 index 000000000000..63b9362a94d4 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h @@ -0,0 +1,58 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSFABAsyncOperation.h" + +/** + * If the compound operation is sent a @c -[cancel] message while executing, it will attempt to + * cancel all operations on its internal queue, and will return an error in its @c asyncCompletion + * block with this value as its code. + */ +FOUNDATION_EXPORT const NSUInteger FIRCLSCompoundOperationErrorCodeCancelled; + +/** + * If one or more of the operations on the @c compoundQueue fail, this operation returns an error + * in its @c asyncCompletion block with this code, and an array of @c NSErrors keyed on @c + * FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors in the @c userInfo dictionary. + */ +FOUNDATION_EXPORT const NSUInteger FIRCLSCompoundOperationErrorCodeSuboperationFailed; + +/** + * When all the operations complete, this @c FIRCLSCompoundOperation instance's @c asyncCompletion + * block is called. If any errors were passed by the suboperations' @c asyncCompletion blocks, they + * are put in an array which can be accessed in the @c userInfo dictionary in the error parameter + * for this instance's @c asyncCompletion block. + */ +FOUNDATION_EXPORT NSString *const FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors; + +/** + * An operation that executes a collection of suboperations on an internal private queue. Any + * instance of @c FIRCLSFABAsyncOperation passed into this instance's @c operations property has the + * potential to return an @c NSError in its @c asyncCompletion block. This instance's @c + * asyncCompletion block will put all such errors in an @c NSArray and return an @c NSError whose @c + * userInfo contains that array keyed by @c FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors. + */ +@interface FIRCLSCompoundOperation : FIRCLSFABAsyncOperation + +/** + * An array of @c NSOperations to execute, which can include instances of @c FIRCLSFABAsyncOperation + * or + * @c FIRCLSCompoundOperation. This operation will not be marked as finished until all suboperations + * are marked as finished. + */ +@property(copy, nonatomic) NSArray *operations; + +@property(strong, nonatomic, readonly) NSOperationQueue *compoundQueue; + +@end diff --git a/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m b/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m new file mode 100644 index 000000000000..5dcf42885e88 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m @@ -0,0 +1,165 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSCompoundOperation.h" + +#import "FIRCLSFABAsyncOperation_Private.h" + +#define FIRCLS_DISPATCH_QUEUES_AS_OBJECTS OS_OBJECT_USE_OBJC_RETAIN_RELEASE + +const NSUInteger FIRCLSCompoundOperationErrorCodeCancelled = UINT_MAX - 1; +const NSUInteger FIRCLSCompoundOperationErrorCodeSuboperationFailed = UINT_MAX - 2; + +NSString *const FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors = + @"com.google.firebase.crashlytics.FIRCLSCompoundOperation.error.user-info-key.underlying-" + @"errors"; + +static NSString *const FIRCLSCompoundOperationErrorDomain = + @"com.google.firebase.crashlytics.FIRCLSCompoundOperation.error"; +static char *const FIRCLSCompoundOperationCountingQueueLabel = + "com.google.firebase.crashlytics.FIRCLSCompoundOperation.dispatch-queue.counting-queue"; + +@interface FIRCLSCompoundOperation () + +@property(strong, nonatomic, readwrite) NSOperationQueue *compoundQueue; +@property(assign, nonatomic) NSUInteger completedOperations; +@property(strong, nonatomic) NSMutableArray *errors; +#if FIRCLS_DISPATCH_QUEUES_AS_OBJECTS +@property(strong, nonatomic) dispatch_queue_t countingQueue; +#else +@property(assign, nonatomic) dispatch_queue_t countingQueue; +#endif + +@end + +@implementation FIRCLSCompoundOperation + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _compoundQueue = [[NSOperationQueue alloc] init]; + _completedOperations = 0; + _errors = [NSMutableArray array]; + _countingQueue = + dispatch_queue_create(FIRCLSCompoundOperationCountingQueueLabel, DISPATCH_QUEUE_SERIAL); + + return self; +} + +#if !FIRCLS_DISPATCH_QUEUES_AS_OBJECTS +- (void)dealloc { + if (_countingQueue) { + dispatch_release(_countingQueue); + } +} +#endif + +- (void)main { + for (FIRCLSFABAsyncOperation *operation in self.operations) { + [self injectCompoundAsyncCompletionInOperation:operation]; + [self injectCompoundSyncCompletionInOperation:operation]; + + [self.compoundQueue addOperation:operation]; + } +} + +- (void)cancel { + if (self.compoundQueue.operations.count > 0) { + [self.compoundQueue cancelAllOperations]; + dispatch_sync(self.countingQueue, ^{ + [self attemptCompoundCompletion]; + }); + } else { + for (NSOperation *operation in self.operations) { + [operation cancel]; + } + + // we have to add the operations to the queue in order for their isFinished property to be set + // to true. + [self.compoundQueue addOperations:self.operations waitUntilFinished:NO]; + } + [super cancel]; +} + +- (void)injectCompoundAsyncCompletionInOperation:(FIRCLSFABAsyncOperation *)operation { + __weak FIRCLSCompoundOperation *weakSelf = self; + FIRCLSFABAsyncOperationCompletionBlock originalAsyncCompletion = [operation.asyncCompletion copy]; + FIRCLSFABAsyncOperationCompletionBlock completion = ^(NSError *error) { + __strong FIRCLSCompoundOperation *strongSelf = weakSelf; + + if (originalAsyncCompletion) { + dispatch_sync(strongSelf.countingQueue, ^{ + originalAsyncCompletion(error); + }); + } + + [strongSelf updateCompletionCountsWithError:error]; + }; + operation.asyncCompletion = completion; +} + +- (void)injectCompoundSyncCompletionInOperation:(FIRCLSFABAsyncOperation *)operation { + __weak FIRCLSCompoundOperation *weakSelf = self; + void (^originalSyncCompletion)(void) = [operation.completionBlock copy]; + void (^completion)(void) = ^{ + __strong FIRCLSCompoundOperation *strongSelf = weakSelf; + + if (originalSyncCompletion) { + dispatch_sync(strongSelf.countingQueue, ^{ + originalSyncCompletion(); + }); + } + + dispatch_sync(strongSelf.countingQueue, ^{ + [strongSelf attemptCompoundCompletion]; + }); + }; + operation.completionBlock = completion; +} + +- (void)updateCompletionCountsWithError:(NSError *)error { + dispatch_sync(self.countingQueue, ^{ + if (!error) { + self.completedOperations += 1; + } else { + [self.errors addObject:error]; + } + }); +} + +- (void)attemptCompoundCompletion { + if (self.isCancelled) { + [self finishWithError:[NSError errorWithDomain:FIRCLSCompoundOperationErrorDomain + code:FIRCLSCompoundOperationErrorCodeCancelled + userInfo:@{ + NSLocalizedDescriptionKey : [NSString + stringWithFormat:@"%@ cancelled", self.name] + }]]; + self.asyncCompletion = nil; + } else if (self.completedOperations + self.errors.count == self.operations.count) { + NSError *error = nil; + if (self.errors.count > 0) { + error = [NSError + errorWithDomain:FIRCLSCompoundOperationErrorDomain + code:FIRCLSCompoundOperationErrorCodeSuboperationFailed + userInfo:@{FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors : self.errors}]; + } + [self finishWithError:error]; + } +} + +@end diff --git a/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h b/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h new file mode 100644 index 000000000000..e5d2c7ef4d40 --- /dev/null +++ b/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h @@ -0,0 +1,39 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * Completion block that can be called in your subclass implementation. It is up to you when you + * want to call it. + */ +typedef void (^FIRCLSFABAsyncOperationCompletionBlock)(NSError *__nullable error); + +/** + * FIRCLSFABAsyncOperation is a subclass of NSOperation that allows for asynchronous work to be + * performed, for things like networking, IPC or UI-driven logic. Create your own subclasses to + * encapsulate custom logic. + * @warning When subclassing to create your own operations, be sure to call -[finishWithError:] at + * some point, or program execution will hang. + * @see -[finishWithError:] in FIRCLSFABAsyncOperation_Private.h + */ +@interface FIRCLSFABAsyncOperation : NSOperation + +/** + * Add a callback method for consumers of your subclasses to set when the asynchronous work is + * marked as complete with -[finishWithError:]. + */ +@property(copy, nonatomic, nullable) FIRCLSFABAsyncOperationCompletionBlock asyncCompletion; + +@end diff --git a/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m b/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m new file mode 100644 index 000000000000..dcad16adfc0f --- /dev/null +++ b/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m @@ -0,0 +1,146 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSFABAsyncOperation.h" + +#import "FIRCLSFABAsyncOperation_Private.h" + +@interface FIRCLSFABAsyncOperation () { + BOOL _internalExecuting; + BOOL _internalFinished; +} + +@property(nonatomic, strong) NSRecursiveLock *lock; + +@end + +@implementation FIRCLSFABAsyncOperation + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _internalExecuting = NO; + _internalFinished = NO; + + _lock = [[NSRecursiveLock alloc] init]; + _lock.name = [NSString stringWithFormat:@"com.google.firebase.crashlytics.%@-lock", [self class]]; + ; + + return self; +} + +#pragma mark - NSOperation Overrides +- (BOOL)isConcurrent { + return YES; +} + +- (BOOL)isAsynchronous { + return YES; +} + +- (BOOL)isExecuting { + [self.lock lock]; + BOOL result = _internalExecuting; + [self.lock unlock]; + + return result; +} + +- (BOOL)isFinished { + [self.lock lock]; + BOOL result = _internalFinished; + [self.lock unlock]; + + return result; +} + +- (void)start { + if ([self checkForCancellation]) { + return; + } + + [self markStarted]; + + [self main]; +} + +#pragma mark - Utilities +- (void)changeValueForKey:(NSString *)key inBlock:(void (^)(void))block { + [self willChangeValueForKey:key]; + block(); + [self didChangeValueForKey:key]; +} + +- (void)lock:(void (^)(void))block { + [self.lock lock]; + block(); + [self.lock unlock]; +} + +- (BOOL)checkForCancellation { + if ([self isCancelled]) { + [self markDone]; + return YES; + } + + return NO; +} + +#pragma mark - State Management +- (void)unlockedMarkFinished { + [self changeValueForKey:@"isFinished" + inBlock:^{ + self->_internalFinished = YES; + }]; +} + +- (void)unlockedMarkStarted { + [self changeValueForKey:@"isExecuting" + inBlock:^{ + self->_internalExecuting = YES; + }]; +} + +- (void)unlockedMarkComplete { + [self changeValueForKey:@"isExecuting" + inBlock:^{ + self->_internalExecuting = NO; + }]; +} + +- (void)markStarted { + [self lock:^{ + [self unlockedMarkStarted]; + }]; +} + +- (void)markDone { + [self lock:^{ + [self unlockedMarkComplete]; + [self unlockedMarkFinished]; + }]; +} + +#pragma mark - Protected +- (void)finishWithError:(NSError *)error { + if (self.asyncCompletion) { + self.asyncCompletion(error); + } + [self markDone]; +} + +@end diff --git a/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h b/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h new file mode 100644 index 000000000000..d1e5797b3cee --- /dev/null +++ b/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h @@ -0,0 +1,32 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSFABAsyncOperation.h" + +@interface FIRCLSFABAsyncOperation (Private) + +/** + * Subclasses must call this method when they are done performing work. When it is called is up to + * you; it can be directly after kicking of a network request, say, or in the callback for its + * response. Once this method is called, the operation queue it is on will begin executing the next + * waiting operation. If you directly invoked -[start] on the instance, execution will proceed to + * the next code statement. + * @note as soon as this method is called, @c NSOperation's standard @c completionBlock will be + * executed if one exists, as a result of setting the operation's isFinished property to YES, and + * the asyncCompletion block is called. + * @param error Any error to pass to asyncCompletion, or nil if there is none. + */ +- (void)finishWithError:(NSError *__nullable)error; + +@end diff --git a/Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h b/Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h new file mode 100644 index 000000000000..83fc6947339d --- /dev/null +++ b/Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h @@ -0,0 +1,19 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import "FIRCLSCompoundOperation.h" +#import "FIRCLSFABAsyncOperation.h" +#import "FIRCLSFABAsyncOperation_Private.h" diff --git a/Crashlytics/Shared/FIRCLSUUID.h b/Crashlytics/Shared/FIRCLSUUID.h new file mode 100644 index 000000000000..dc3aedae27ec --- /dev/null +++ b/Crashlytics/Shared/FIRCLSUUID.h @@ -0,0 +1,27 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "FIRCLSConstants.h" + +/** + * Generates and returns a UUID + * This is also used by used by Answers to generate UUIDs. + */ +NSString *FIRCLSGenerateUUID(void); + +/** + * Converts the input uint8_t UUID to NSString + */ +NSString *FIRCLSUUIDToNSString(const uint8_t *uuid); diff --git a/Crashlytics/Shared/FIRCLSUUID.m b/Crashlytics/Shared/FIRCLSUUID.m new file mode 100644 index 000000000000..6534d417fbfe --- /dev/null +++ b/Crashlytics/Shared/FIRCLSUUID.m @@ -0,0 +1,39 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSUUID.h" + +#import "FIRCLSByteUtility.h" + +static NSInteger const FIRCLSUUIDStringLength = 33; + +#pragma mark Public methods + +NSString *FIRCLSGenerateUUID(void) { + NSString *string; + + CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault); + string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); + CFRelease(uuid); + + return string; +} + +NSString *FIRCLSUUIDToNSString(const uint8_t *uuid) { + char uuidString[FIRCLSUUIDStringLength]; + + FIRCLSSafeHexToString(uuid, 16, uuidString); + + return [NSString stringWithUTF8String:uuidString]; +} diff --git a/Crashlytics/UnitTests/CrashlyticsKitTests-Info.plist b/Crashlytics/UnitTests/CrashlyticsKitTests-Info.plist new file mode 100644 index 000000000000..22e2a02b77d4 --- /dev/null +++ b/Crashlytics/UnitTests/CrashlyticsKitTests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.google.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Crashlytics/UnitTests/CrashlyticsKitTests-OSX-Prefix.pch b/Crashlytics/UnitTests/CrashlyticsKitTests-OSX-Prefix.pch new file mode 100644 index 000000000000..256902314350 --- /dev/null +++ b/Crashlytics/UnitTests/CrashlyticsKitTests-OSX-Prefix.pch @@ -0,0 +1,23 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Crashlytics/UnitTests/Data/10.9.3 libobjc.A.dylib b/Crashlytics/UnitTests/Data/10.9.3 libobjc.A.dylib new file mode 100755 index 0000000000000000000000000000000000000000..27bd4fa6ced253af5c97865bc757e3ca528a0b3d GIT binary patch literal 3737344 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%0DA6MoEz2jWsBqy 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 z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk 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%0AdvzAIZ( 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

F9=0?&5#rY;Pi(p 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 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 literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/Data/10.9.4 libsystem_kernel.dylib b/Crashlytics/UnitTests/Data/10.9.4 libsystem_kernel.dylib new file mode 100755 index 0000000000000000000000000000000000000000..f5e6834f22d96a14d0f5d49c4d67148962ac4f82 GIT binary patch literal 511328 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�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 literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/Data/DS_Store b/Crashlytics/UnitTests/Data/DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0621e4ceab5b72443cef69c14ee8bda66ddadef8 GIT binary patch literal 15364 zcmeHNZEV}d8NT;oJETK4OqDE2BPVKHG*0T+k`sR(5~73tXMIiKr(b6#ISV3h7H@F{#mdOU?1qV z_eja1C^AilZfjQ_z&ncfyvMuey(6FZC_)JImE;&9Erbvb4^~P7A$5&}L{{MsM`HEt zs7WjE3gFR(2cAoW%#%D(iAGXHu0aPE0tNyGK1d8u>4KWojcD{OpeyR?8&-0B<0?VC>7FxF(?WVmx_K_E%nuigtd`ful%kI1l(br( z)#e8?T0T)!SpAf=CX-S#B{gLzy{ekbep1oLGn!h;<#mS66g5>%XnK}4GdW=>=M09a zshT*cYenOLWjG~CC0#k8V4K-Fr5{_?C$e};W+(yAy|8*iWLtap{zJ#cOli%{Az_`c zeta&gXVa=OI-iw|*~yfiQSx#&KXWoGD|sV(Z&oStYoL`M$)|FPx$%}wA)!g!;%CK6 zuW+Yjyz!7GGh5lbb!&4-Y!Ywxv*5T>41b`gU@n_2+joS7R(JRY} z++0~o&2jej!nAzl8i;R>N9{^{g*A~5oaGZ_niR}wIa+Um%{E7S(C^Uiux4_y=vEtLb{$M7Plvx}A2= zJLv&BNRxDgj?r;?FV*NgU8IlF&(O!{1^P67mcB?Y(r?>ip={N%l(CCSPQNEB=~VHa zBrd$9kupkpU#fVD{Ys>aS*)?nM>I`Mr_iR{3g>#?S6U0ofPsL4k1zx5`4GW_mGN@9 zWS7>X12ZNeSUr;vR>E_P1FUP2av3j|OLl3QqK##WrELo35Cd#;ydGh2EaT;J$u4bk z0=7AU@|~d^p@4OFw2N490&%+x@_>PWfm#Nd@RGOoFO;?a<38FSrGHAue1Nt8mDNn~ zuU+@C^&4(&iT1<~CnlEFsip0mGTc(wwj{PBbVc&I6l%57$Jih&ZWbbba&;87xN?qT z!GyHZ+}eCwSlBFV^F#BzM9l3w?g)!J#dbdshv9}q%~;2-u+S-X`@vYyAgwU>?7cHA z-X-k!gRwY3syBQ44upk+!XZBxFX_BgXAa(dBrFaI!+tPMI>Jj0=J6BBusAA?`@`Pg zB+i^Xc`7XI6j%Adcy3wG*D8F=e>W`dFQK%*LVicyMrr?N@(u{F5w^k(h{9foLof8h zK{x~nn1C}d3t6}iR4BnBJc6SBv+z0iJY0aM;Td=VUWQjt*k6S2!0T`cegr>`bQwL)qVp+f!@@#WXJ>1qtEX$RHL}p%9c_*5-qo|X$a5SoJ<6@y+P3fT zNb3H@2OeCqx=Wxe5r}C2Ud|uJGuP17nOG7d)&j#cwq2dBMdY;pez{~|q;>hO`}Q)N zyN#SCzYC%;>$uCnYaVU5TIcCNYi()so$nP;kN zE3Wmbb-I<%uP|GVBv|i=f&DDjjtG8+80Uy;@KwFdf0Mbp26L^?mz(oj*loQqm7e=! zs`_6@uyz`-|0SGSYAweEp9{b_o(ngTF+>%uv8K?Xk3CCJwvVBgJUn^hwoVQ%L>^m< z{krbG9DKA#Z6Cf1ewmva!aI4o5P6C56r_NGfPsL4fPsL44>bd9y9`L%e_um(bi`UC zu{}{s)OU5Eo{V*&sAn4T&G#zmaR4p>Es$P}ZVI-JL78lzQql0w32t4&Vx1O;reVSx zbtpND78oB@t4#bvbX~NA#FuI!qxWBkZ(LZ2b?!zMyLNTELZd1r&LX3S>`Cey8a;yb zuCcoqb=Q_7%5q3z$DA3|jydEnkLMv_NcE+)JXUTjo-Os}3vRvb{vMwNwQHr2-2@BeJVI6KB->sY7PWcu`b zT9QHhU%kQNoMw#!ud!+7j_|9uaNM=k(`zLO;(ynA3gUm)zJp^^%6pFh=U_dXi1;%gtyTmh0|ARjPxZbQz$r + +#import "FIRCLSConstants.h" + +#import "FIRCLSDataCollectionToken.h" + +@interface FABNetworkOperationTests : XCTestCase + +@end + +@implementation FABNetworkOperationTests + +- (void)testNetworkOperationHeaders { + FIRCLSDataCollectionToken *token = [FIRCLSDataCollectionToken validToken]; + NSString *googleAppID = @"someGoogleAppID"; + + FIRCLSNetworkOperation *networkOperation = + [[FIRCLSNetworkOperation alloc] initWithGoogleAppID:googleAppID token:token]; + NSURL *url = [NSURL URLWithString:@"https://www.someEndpoint.com"]; + NSMutableURLRequest *request = + [networkOperation mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:url]; + + XCTAssertEqualObjects( + [request.allHTTPHeaderFields valueForKey:FIRCLSNetworkCrashlyticsGoogleAppId], googleAppID); +} + +@end diff --git a/Crashlytics/UnitTests/FABOperation/FABOperationInFlightCancellationTest.m b/Crashlytics/UnitTests/FABOperation/FABOperationInFlightCancellationTest.m new file mode 100644 index 000000000000..2c189209c506 --- /dev/null +++ b/Crashlytics/UnitTests/FABOperation/FABOperationInFlightCancellationTest.m @@ -0,0 +1,154 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This test class checks behavior of an async operation that is cancelled after +// its execution has begun. It makes use of KVO expectations to ensure it goes +// through the expected state changes, and also makes use of the asyncCompletion +// to pass an error proving the cancellation. + +#import + +#import "FIRCLSOperation.h" + +#import "FABTestAsyncOperation.h" +#import "FABTestExpectations.h" + +@interface FABInFlightCancellationTests : XCTestCase + +@end + +@implementation FABInFlightCancellationTests + +- (void)testAsyncCancellationInFlight { + FABTestAsyncOperation *cancelledOperation = [[FABTestAsyncOperation alloc] init]; + cancelledOperation.name = @"cancelledOperation"; + + [FABTestExpectations + addInFlightCancellationCompletionExpectationsToOperation:cancelledOperation + testCase:self + assertionBlock:^(NSString *operationName, + NSError *error) { + XCTAssertNotNil(error, + @"Should have received error for " + @"cancellation of %@.", + operationName); + XCTAssertEqual( + error.code, + FABTestAsyncOperationErrorCodeCancelled, + @"Unexpected error code from %@.", + operationName); + }]; + [FABTestExpectations addInFlightCancellationKVOExpectationsToOperation:cancelledOperation + testCase:self]; + + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + [queue addOperation:cancelledOperation]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + [cancelledOperation cancel]; + }); + + [self waitForExpectationsWithTimeout:5 + handler:^(NSError *error) { + XCTAssertNil(error, @"expectations failed: %@", error); + }]; +} + +// This test case adds several async operations to a compound operation and cancels the compound +// operation while the first of its suboperations is executing. When it cancels the operations on +// its compoundQueue, the first should be checked using the in-flight cancellation checks, and the +// ones awaiting execution should be checked using the pre-flight checks. The compound operation is +// checked using the in-flight checks. +- (void)testCompoundCancellationInFlight { + FIRCLSCompoundOperation *cancelledCompoundOperation = [[FIRCLSCompoundOperation alloc] init]; + cancelledCompoundOperation.name = @"cancelled compound operation"; + cancelledCompoundOperation.compoundQueue.maxConcurrentOperationCount = 1; + + NSMutableArray *cancelledSuboperations = [NSMutableArray array]; + for (int i = 0; i < 5; i++) { + FABTestAsyncOperation *subOperation = [[FABTestAsyncOperation alloc] init]; + subOperation.name = [NSString stringWithFormat:@"cancelledOperation%i", i]; + [cancelledSuboperations addObject:subOperation]; + if (i == 0) { + [FABTestExpectations + addInFlightCancellationCompletionExpectationsToOperation:subOperation + testCase:self + assertionBlock:^(NSString *operationName, + NSError *error) { + XCTAssertNotNil(error, + @"Should have received error " + @"for cancellation of %@.", + operationName); + XCTAssertEqual( + error.code, + FABTestAsyncOperationErrorCodeCancelled, + @"Unexpected error code from %@.", + operationName); + }]; + [FABTestExpectations addInFlightCancellationKVOExpectationsToOperation:subOperation + testCase:self]; + } else { + [FABTestExpectations + addPreFlightCancellationCompletionExpectationsToOperation:subOperation + testCase:self + asyncAssertionBlock:^(NSString *operationName, + NSError *error) { + XCTFail(@"asyncCompletion should not have " + @"executed for %@", + operationName); + }]; + FABTestExpectationObserver *observer = + [FABTestExpectations addPreFlightCancellationKVOExpectationsToOperation:subOperation + testCase:self]; + observer.assertionBlock = ^{ + XCTFail(@"%@ should not have begun executing", subOperation.name); + }; + } + } + cancelledCompoundOperation.operations = cancelledSuboperations; + + [FABTestExpectations + addInFlightCancellationCompletionExpectationsToOperation:cancelledCompoundOperation + testCase:self + assertionBlock:^(NSString *operationName, + NSError *error) { + XCTAssertNotNil(error, + @"Should have received error for " + @"cancellation of %@.", + operationName); + XCTAssertEqual( + error.code, + FIRCLSCompoundOperationErrorCodeCancelled, + @"Unexpected error code from %@.", + operationName); + }]; + [FABTestExpectations addInFlightCancellationKVOExpectationsToOperation:cancelledCompoundOperation + testCase:self]; + + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + [queue addOperation:cancelledCompoundOperation]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + [cancelledCompoundOperation cancel]; + }); + + [self waitForExpectationsWithTimeout:5 + handler:^(NSError *error) { + XCTAssertNil(error, @"expectations failed: %@", error); + }]; +} + +@end diff --git a/Crashlytics/UnitTests/FABOperation/FABOperationPreFlightCancellationTest.m b/Crashlytics/UnitTests/FABOperation/FABOperationPreFlightCancellationTest.m new file mode 100644 index 000000000000..d6eb02848950 --- /dev/null +++ b/Crashlytics/UnitTests/FABOperation/FABOperationPreFlightCancellationTest.m @@ -0,0 +1,129 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This test class checks the behavior of an operation that is cancelled before +// it begins execution. It observes the operation's isExecuting property and fails +// the test if that property is ever set to true. The completionBlock should execute, +// but asyncCompletion should not. + +#import + +#import "FIRCLSOperation.h" + +#import "FABTestAsyncOperation.h" +#import "FABTestExpectations.h" + +@interface FABOperationPreFlightCancellationTest : XCTestCase + +@end + +@implementation FABOperationPreFlightCancellationTest + +- (void)testAsyncCancellationPreFlight { + FABTestAsyncOperation *cancelledOperation = [[FABTestAsyncOperation alloc] init]; + cancelledOperation.name = @"cancelledOperation"; + + [FABTestExpectations + addPreFlightCancellationCompletionExpectationsToOperation:cancelledOperation + testCase:self + asyncAssertionBlock:^(NSString *operationName, + NSError *error) { + XCTFail(@"asyncCompletion should not have executed " + @"for %@", + operationName); + }]; + + FABTestExpectationObserver *observer = + [FABTestExpectations addPreFlightCancellationKVOExpectationsToOperation:cancelledOperation + testCase:self]; + observer.assertionBlock = ^{ + XCTFail(@"%@ should never have begun executing", cancelledOperation.name); + }; + + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + queue.maxConcurrentOperationCount = 1; + [cancelledOperation cancel]; + [queue addOperation:cancelledOperation]; + + [self waitForExpectationsWithTimeout:5 + handler:^(NSError *error) { + XCTAssertNil(error, @"expectations failed: %@", error); + }]; +} + +// This test case adds several async operations to a compound operation and cancels the compound +// operation before it can execute. All suboperations and the compound operation are tested using +// pre-flight cancellation checks. +- (void)testCompoundCancellationPreFlight { + FIRCLSCompoundOperation *cancelledCompoundOperation = [[FIRCLSCompoundOperation alloc] init]; + cancelledCompoundOperation.name = @"cancelled compound operation"; + cancelledCompoundOperation.compoundQueue.maxConcurrentOperationCount = 1; + + NSMutableArray *cancelledSuboperations = [NSMutableArray array]; + NSMutableArray *observers = [NSMutableArray array]; + for (int i = 0; i < 5; i++) { + FABTestAsyncOperation *subOperation = [[FABTestAsyncOperation alloc] init]; + subOperation.name = [NSString stringWithFormat:@"cancelledOperation %i", i]; + [cancelledSuboperations addObject:subOperation]; + [FABTestExpectations + addPreFlightCancellationCompletionExpectationsToOperation:subOperation + testCase:self + asyncAssertionBlock:^(NSString *operationName, + NSError *error) { + XCTFail(@"asyncCompletion should not have executed " + @"for %@", + operationName); + }]; + FABTestExpectationObserver *observer = + [FABTestExpectations addPreFlightCancellationKVOExpectationsToOperation:subOperation + testCase:self]; + observer.assertionBlock = ^{ + XCTFail(@"%@ should not have begun executing", subOperation.name); + }; + [observers addObject:observer]; + } + cancelledCompoundOperation.operations = cancelledSuboperations; + + [FABTestExpectations + addPreFlightCancellationCompletionExpectationsToOperation:cancelledCompoundOperation + testCase:self + asyncAssertionBlock:^(NSString *operationName, + NSError *error) { + XCTAssertNotNil(error, + @"Should have received error for " + @"cancellation of %@.", + operationName); + XCTAssertEqual( + error.code, + FIRCLSCompoundOperationErrorCodeCancelled, + @"Unexpected error code from %@.", operationName); + }]; + FABTestExpectationObserver *observer = [FABTestExpectations + addPreFlightCancellationKVOExpectationsToOperation:cancelledCompoundOperation + testCase:self]; + observer.assertionBlock = ^{ + XCTFail(@"%@ should not have begun executing", cancelledCompoundOperation.name); + }; + + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + [cancelledCompoundOperation cancel]; + [queue addOperation:cancelledCompoundOperation]; + + [self waitForExpectationsWithTimeout:5 + handler:^(NSError *error) { + XCTAssertNil(error, @"expectations failed: %@", error); + }]; +} + +@end diff --git a/Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.h b/Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.h new file mode 100644 index 000000000000..92c41e39ad02 --- /dev/null +++ b/Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.h @@ -0,0 +1,23 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSOperation.h" + +FOUNDATION_EXPORT const NSUInteger FABTestAsyncOperationErrorCodeCancelled; + +/// Example subclass of FABAsyncOperation to use for test cases. It schedules a block using +/// dispatch_after to mark itself as done after 2 seconds. +@interface FABTestAsyncOperation : FIRCLSFABAsyncOperation + +@end diff --git a/Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.m b/Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.m new file mode 100644 index 000000000000..3b54731211e0 --- /dev/null +++ b/Crashlytics/UnitTests/FABOperation/FABTestAsyncOperation.m @@ -0,0 +1,43 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FABTestAsyncOperation.h" + +const NSUInteger FABTestAsyncOperationErrorCodeCancelled = 12345; + +@implementation FABTestAsyncOperation + +- (void)main { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + [self finishWork]; + }); +} + +- (void)finishWork { + if (self.asyncCompletion) { + NSError *error; + if (self.isCancelled) { + error = [NSError errorWithDomain:@"com.FABInFlightCancellationTests.error-domain" + code:FABTestAsyncOperationErrorCodeCancelled + userInfo:@{ + NSLocalizedDescriptionKey : + [NSString stringWithFormat:@"%@ cancelled", self.name] + }]; + } + [self finishWithError:error]; + } +} + +@end diff --git a/Crashlytics/UnitTests/FABOperation/FABTestExpectations.h b/Crashlytics/UnitTests/FABOperation/FABTestExpectations.h new file mode 100644 index 000000000000..d34064a09c8d --- /dev/null +++ b/Crashlytics/UnitTests/FABOperation/FABTestExpectations.h @@ -0,0 +1,59 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@class FIRCLSFABAsyncOperation; +@class XCTestCase; + +/// These blocks provide mechanisms to indirectly call XCTestCase assertion macros, since they +/// require 'self' to be an XCTestCase. So, the test case adding expectations can pass along calls +/// to XCTAssert... and XCTFail into the methods of this class. +typedef void (^FABAsyncCompletionAssertionBlock)(NSString *operationName, NSError *error); +typedef void (^FABPreFlightCancellationFailureAssertionBlock)(void); + +@interface FABTestExpectationObserver : NSObject + +@property(copy, nonatomic) FABPreFlightCancellationFailureAssertionBlock assertionBlock; + +@end + +@interface FABTestExpectations : NSObject + +/* + The two following methods add XCTestExpectations for async operations that will be cancelled after + they begin executing. + */ ++ (void) + addInFlightCancellationCompletionExpectationsToOperation:(FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase + assertionBlock: + (FABAsyncCompletionAssertionBlock)assertionBlock; ++ (void)addInFlightCancellationKVOExpectationsToOperation:(FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase; + +/* + The two following methods add XCTestExpectations for async operations that will be cancelled before + they begin executing. + */ ++ (void) + addPreFlightCancellationCompletionExpectationsToOperation:(FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase + asyncAssertionBlock: + (FABAsyncCompletionAssertionBlock)asyncAssertionBlock; ++ (FABTestExpectationObserver *) + addPreFlightCancellationKVOExpectationsToOperation:(FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase; + +@end diff --git a/Crashlytics/UnitTests/FABOperation/FABTestExpectations.m b/Crashlytics/UnitTests/FABOperation/FABTestExpectations.m new file mode 100644 index 000000000000..9193bfee9cb4 --- /dev/null +++ b/Crashlytics/UnitTests/FABOperation/FABTestExpectations.m @@ -0,0 +1,169 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FABTestExpectations.h" + +#import + +#import "FIRCLSOperation.h" + +#import "FABTestAsyncOperation.h" + +void *FABOperationPreFlightCancellationTestKVOContext = + &FABOperationPreFlightCancellationTestKVOContext; + +@interface FABTestExpectationObserver () + +@property(strong, nonatomic) FIRCLSFABAsyncOperation *observedOperation; + +@end + +@implementation FABTestExpectationObserver + +- (void)dealloc { + [self.observedOperation removeObserver:self + forKeyPath:NSStringFromSelector(@selector(isExecuting))]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + if (context != FABOperationPreFlightCancellationTestKVOContext) { + return; + } + if (![object isKindOfClass:[FABTestAsyncOperation class]]) { + return; + } + if (![keyPath isEqualToString:NSStringFromSelector(@selector(isExecuting))]) { + return; + } + if (![change[@"new"] boolValue]) { + return; + } + + if (self.assertionBlock) { + self.assertionBlock(); + } +} + +@end + +@implementation FABTestExpectations + ++ (void) + addInFlightCancellationCompletionExpectationsToOperation:(FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase + assertionBlock: + (FABAsyncCompletionAssertionBlock)assertionBlock { + XCTestExpectation *syncCompletionExpectation = [testCase + expectationWithDescription:[NSString stringWithFormat:@"%@ syncCompletionExpectation", + operation.name]]; + operation.completionBlock = ^{ + [syncCompletionExpectation fulfill]; + }; + + XCTestExpectation *asyncCompletionExpectation = [testCase + expectationWithDescription:[NSString stringWithFormat:@"%@ asyncCompletionExpectation", + operation.name]]; + NSString *operationName = [operation.name copy]; + operation.asyncCompletion = ^(NSError *error) { + [asyncCompletionExpectation fulfill]; + assertionBlock(operationName, error); + }; +} + ++ (void)addInFlightCancellationKVOExpectationsToOperation:(FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase { + for (NSString *selector in @[ + NSStringFromSelector(@selector(isCancelled)), NSStringFromSelector(@selector(isFinished)), + NSStringFromSelector(@selector(isExecuting)) + ]) { + BOOL (^handler)(NSOperation *observedOperation, NSDictionary *change) = + ^(NSOperation *observedOperation, NSDictionary *change) { + if ([selector isEqualToString:NSStringFromSelector(@selector(isExecuting))]) { + if (!observedOperation.isCancelled && !observedOperation.isFinished && + ![change[@"old"] boolValue] && [change[@"new"] boolValue]) { + return YES; + } + } else if ([selector isEqualToString:NSStringFromSelector(@selector(isCancelled))]) { + if (observedOperation.isExecuting && !observedOperation.isFinished && + ![change[@"old"] boolValue] && [change[@"new"] boolValue]) { + return YES; + } + } else if ([selector isEqualToString:NSStringFromSelector(@selector(isFinished))]) { + if (observedOperation.isCancelled && !observedOperation.isExecuting && + ![change[@"old"] boolValue] && [change[@"new"] boolValue]) { + return YES; + } + } + + return NO; + }; + [testCase keyValueObservingExpectationForObject:operation keyPath:selector handler:handler]; + } +} + ++ (void)addPreFlightCancellationCompletionExpectationsToOperation: + (FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase + asyncAssertionBlock:(FABAsyncCompletionAssertionBlock) + asyncAssertionBlock { + // we expect the synchronous, standard completionBlock to execute. Per Apple's documentation, it + // always executes when isFinished is set to true, regardless of whether by cancellation or + // finishing execution + XCTestExpectation *syncCompletionExpectation = + [testCase expectationWithDescription:@"syncCompletionExpectation"]; + operation.completionBlock = ^{ + [syncCompletionExpectation fulfill]; + }; + + // call block containing XCTest assertions in asyncCompletion which will fail the test, it's just + // more convenient to pass the block in containing them because of the way the macros work: they + // use 'self' which must resolve to the XCTestCase instance + NSString *operationName = [operation.name copy]; + operation.asyncCompletion = ^(NSError *error) { + asyncAssertionBlock(operationName, error); + }; +} + ++ (FABTestExpectationObserver *) + addPreFlightCancellationKVOExpectationsToOperation:(FIRCLSFABAsyncOperation *)operation + testCase:(XCTestCase *)testCase { + // add an expectation that isFinished is set to true, isCancelled is true and isExecuting is false + BOOL (^handler)(NSOperation *observedOperation, NSDictionary *change) = + ^(NSOperation *observedOperation, NSDictionary *change) { + if (observedOperation.isCancelled && !observedOperation.isExecuting && + ![change[@"old"] boolValue] && [change[@"new"] boolValue]) { + return YES; + } + + return NO; + }; + [testCase keyValueObservingExpectationForObject:operation + keyPath:NSStringFromSelector(@selector(isFinished)) + handler:handler]; + + // add key-value observing for isExecuting. if isExecuting ever changes to true for this + // operation, we want to *fail* the test. We can't do this with expectations, so we use plain KVO. + FABTestExpectationObserver *observer = [[FABTestExpectationObserver alloc] init]; + [operation addObserver:observer + forKeyPath:NSStringFromSelector(@selector(isExecuting)) + options:NSKeyValueObservingOptionNew + context:FABOperationPreFlightCancellationTestKVOContext]; + observer.observedOperation = operation; + return observer; +} + +@end diff --git a/Crashlytics/UnitTests/FABURLBuilderTests.m b/Crashlytics/UnitTests/FABURLBuilderTests.m new file mode 100644 index 000000000000..8913a32d1fc6 --- /dev/null +++ b/Crashlytics/UnitTests/FABURLBuilderTests.m @@ -0,0 +1,56 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSURLBuilder.h" + +#import +#import + +@interface FIRCLSURLBuilder (Testing) +- (NSString *)escapeString:(NSString *)string; +@end + +@interface FABURLBuilderTests : XCTestCase + +@end + +@implementation FABURLBuilderTests + +- (void)setUp { + [super setUp]; +} + +- (void)tearDown { + [super tearDown]; +} + +- (void)testTheRightUrlEncodingIsUsed { + NSString *actual = + @"https://settings.crashlytics.com/spi/v2/platforms/ios/apps/" + @"com.dogs.testingappforfunandprofit/" + @"settings?icon_hash=277530e7595e8ff02a163905942a24dd14747fcb&display_version=1.0 " + @"#1234&source=1&instance=d8b2e102647d9cbdc67a650d23bcefd445874a2c&build_version=1"; + + NSString *expected = + @"https://settings.crashlytics.com/spi/v2/platforms/ios/apps/" + @"com.dogs.testingappforfunandprofit/" + @"settings?icon_hash=277530e7595e8ff02a163905942a24dd14747fcb&display_version=1.0%20%231234&" + @"source=1&instance=d8b2e102647d9cbdc67a650d23bcefd445874a2c&build_version=1"; + + FIRCLSURLBuilder *urlBuilder = [FIRCLSURLBuilder new]; + NSString *encoded = [urlBuilder escapeString:actual]; + XCTAssertEqualObjects(encoded, expected); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSCompactUnwindTests.m b/Crashlytics/UnitTests/FIRCLSCompactUnwindTests.m new file mode 100644 index 000000000000..10d6da3ffad2 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSCompactUnwindTests.m @@ -0,0 +1,176 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSCompactUnwind.h" + +#import +#import + +#import "FIRCLSMachO.h" + +#include "FIRCLSCompactUnwind_Private.h" +#include "FIRCLSContext.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSUnwind_x86.h" + +@interface FIRCLSCompactUnwindTests : XCTestCase + +@end + +@implementation FIRCLSCompactUnwindTests + +- (void)setUp { + [super setUp]; + + _clsContext.readonly = malloc(sizeof(FIRCLSReadOnlyContext)); + _clsContext.readonly->logPath = "/tmp/test.log"; +} + +- (void)tearDown { + [super tearDown]; +} + +- (NSString*)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSString*)pathForResource:(NSString*)name { + return [[self resourcePath] stringByAppendingPathComponent:name]; +} + +#if CLS_COMPACT_UNWINDING_SUPPORTED + +#if !TARGET_OS_IPHONE +- (void)testParseCompactUnwindInfoForthread_get_state_10_9_4 { + NSString* dylibPath = [self pathForResource:@"10.9.4 libsystem_kernel.dylib"]; + + struct FIRCLSMachOFile file; + + XCTAssertTrue(FIRCLSMachOFileInitWithPath(&file, [dylibPath fileSystemRepresentation]), @""); + + struct FIRCLSMachOSlice slice = FIRCLSMachOFileSliceWithArchitectureName(&file, "x86_64"); + + const void* compactUnwind = NULL; + const void* ehFrame = NULL; + + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__eh_frame", &ehFrame)); + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__unwind_info", &compactUnwind)); + + XCTAssertTrue(ehFrame != NULL, @""); + XCTAssertTrue(compactUnwind != NULL, @""); + + FIRCLSCompactUnwindContext context; + + // hard-code a load address seen during testing + uintptr_t loadAddress = 0x7fff94044000; + XCTAssertTrue(FIRCLSCompactUnwindInit(&context, compactUnwind, ehFrame, loadAddress), @""); + + FIRCLSCompactUnwindResult result; + + XCTAssertTrue(FIRCLSCompactUnwindLookup(&context, 0x7fff94051e6c, &result), @""); + XCTAssertEqual(result.encoding & UNWIND_X86_64_MODE_MASK, UNWIND_X86_64_MODE_RBP_FRAME, @""); + XCTAssertEqual(result.functionStart, loadAddress + 0x0000DCC1, @""); +} + +- (void)testParseCompactUnwindInfoForFunctionInLastIndexEntry { + NSString* dylibPath = [self pathForResource:@"10.9.4 libsystem_kernel.dylib"]; + + struct FIRCLSMachOFile file; + + XCTAssertTrue(FIRCLSMachOFileInitWithPath(&file, [dylibPath fileSystemRepresentation]), @""); + + struct FIRCLSMachOSlice slice = FIRCLSMachOFileSliceWithArchitectureName(&file, "x86_64"); + + const void* compactUnwind = NULL; + const void* ehFrame = NULL; + + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__eh_frame", &ehFrame)); + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__unwind_info", &compactUnwind)); + + XCTAssertTrue(ehFrame != NULL, @""); + XCTAssertTrue(compactUnwind != NULL, @""); + + FIRCLSCompactUnwindContext context; + + // hard-code a load address seen during testing + uintptr_t loadAddress = 0x7fff94044000; + XCTAssertTrue(FIRCLSCompactUnwindInit(&context, compactUnwind, ehFrame, loadAddress), @""); + + FIRCLSCompactUnwindResult result; + + // there should be no entry here (0x00016FDE maps to the last index entry, 0x00016FDF) + XCTAssertFalse(FIRCLSCompactUnwindLookup(&context, loadAddress + 0x00016FDE, &result), @""); +} + +- (void)testParseCompactUnwindInfoForBoundaryBetween2ndLevelEntries { + NSString* dylibPath = [self pathForResource:@"10.9.4 libsystem_kernel.dylib"]; + + struct FIRCLSMachOFile file; + + XCTAssertTrue(FIRCLSMachOFileInitWithPath(&file, [dylibPath fileSystemRepresentation]), @""); + + struct FIRCLSMachOSlice slice = FIRCLSMachOFileSliceWithArchitectureName(&file, "x86_64"); + + const void* compactUnwind = NULL; + const void* ehFrame = NULL; + + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__eh_frame", &ehFrame)); + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__unwind_info", &compactUnwind)); + + XCTAssertTrue(ehFrame != NULL, @""); + XCTAssertTrue(compactUnwind != NULL, @""); + + FIRCLSCompactUnwindContext context; + + // hard-code a load address seen during testing + uintptr_t loadAddress = 0x7fff94044000; + XCTAssertTrue(FIRCLSCompactUnwindInit(&context, compactUnwind, ehFrame, loadAddress), @""); + + FIRCLSCompactUnwindResult result; + + // funcOffset=0x0000151A _reallocf + // funcOffset=0x00001558 __pthread_exit_if_canceled + + // make sure we hit the last byte of _reallocf + XCTAssertTrue(FIRCLSCompactUnwindLookup(&context, loadAddress + 0x00001557, &result), @""); + XCTAssertEqual(result.encoding & UNWIND_X86_64_MODE_MASK, UNWIND_X86_64_MODE_RBP_FRAME, @""); + XCTAssertEqual(result.functionStart, loadAddress + 0x0000151A, @""); + XCTAssertEqual(result.functionEnd, loadAddress + 0x00001558, @""); + + // and check the very next value, which should be in __pthread_exit_if_canceled + XCTAssertTrue(FIRCLSCompactUnwindLookup(&context, loadAddress + 0x00001558, &result), @""); + XCTAssertEqual(result.encoding & UNWIND_X86_64_MODE_MASK, UNWIND_X86_64_MODE_DWARF, @""); + XCTAssertEqual(result.functionStart, loadAddress + 0x00001558, @""); +} +#endif + +#if CLS_CPU_X86_64 +- (void)testComputeDirectStackSize { + const compact_unwind_encoding_t encoding = 0x20a1860; + const intptr_t functionStart = 0x0; + + uint32_t stackSize = 0; + XCTAssertTrue(FIRCLSCompactUnwindComputeStackSize(encoding, functionStart, false, &stackSize), + @""); + + // 0x20a1860 & 0x00FF0000 = 0xA0000 + // 0x270000 >> 16 = 0xA + // 0xA * 8 = 0x50 + XCTAssertEqual(stackSize, 0x50, @""); +} +#endif + +#endif + +@end diff --git a/Crashlytics/UnitTests/FIRCLSDataCollectionArbiterTest.m b/Crashlytics/UnitTests/FIRCLSDataCollectionArbiterTest.m new file mode 100644 index 000000000000..c93bce1777c4 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSDataCollectionArbiterTest.m @@ -0,0 +1,165 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSDataCollectionArbiter.h" + +#import + +#import "FBLPromises.h" + +#import "FIRAppFake.h" +#import "FIRCLSUserDefaults.h" + +#pragma mark - Tests for FIRCLSDataCollectionArbiter + +@interface FIRCLSDataCollectionArbiterTest : XCTestCase +@property(nonatomic, readwrite) FIRAppFake *fakeApp; +@end + +@implementation FIRCLSDataCollectionArbiterTest + +- (void)setUp { + [super setUp]; + + self.fakeApp = [[FIRAppFake alloc] init]; + + [[FIRCLSUserDefaults standardUserDefaults] removeAllObjects]; + [[FIRCLSUserDefaults standardUserDefaults] synchronize]; +} + +- (void)tearDown { + [[FIRCLSUserDefaults standardUserDefaults] removeAllObjects]; + [[FIRCLSUserDefaults standardUserDefaults] synchronize]; + + [super tearDown]; +} + +// If you do nothing, it should be YES. We should not be turning Fabric +// customers off by default +- (void)testNothingSet { + self.fakeApp.isDefaultCollectionEnabled = YES; + FIRCLSDataCollectionArbiter *arbiter = [self arbiterWithDictionary:@{}]; + XCTAssertTrue([arbiter isCrashlyticsCollectionEnabled]); +} + +- (void)testOnlyStickyOff { + FIRCLSDataCollectionArbiter *arbiter = [self arbiterWithDictionary:@{}]; + [arbiter setCrashlyticsCollectionEnabled:NO]; + XCTAssertFalse([arbiter isCrashlyticsCollectionEnabled]); +} + +- (void)testOnlyFlagOff { + FIRCLSDataCollectionArbiter *arbiter = + [self arbiterWithDictionary:[self fabricConfigWithDataCollectionValue:NO]]; + XCTAssertFalse([arbiter isCrashlyticsCollectionEnabled]); +} + +- (void)testOnlyFIRAppOff { + self.fakeApp.isDefaultCollectionEnabled = NO; + FIRCLSDataCollectionArbiter *arbiter = [self arbiterWithDictionary:@{}]; + XCTAssertFalse([arbiter isCrashlyticsCollectionEnabled]); +} + +- (void)testStickyPrecedent { + FIRCLSDataCollectionArbiter *arbiter = + [self arbiterWithDictionary:[self fabricConfigWithDataCollectionValue:NO]]; + self.fakeApp.isDefaultCollectionEnabled = NO; + [arbiter setCrashlyticsCollectionEnabled:YES]; + XCTAssertTrue([arbiter isCrashlyticsCollectionEnabled]); + XCTAssertFalse([arbiter isLegacyDataCollectionKeyInPlist]); +} + +- (void)testPlistPrecedent { + FIRCLSDataCollectionArbiter *arbiter = + [self arbiterWithDictionary:[self fabricConfigWithDataCollectionValue:YES]]; + self.fakeApp.isDefaultCollectionEnabled = NO; + XCTAssertTrue([arbiter isCrashlyticsCollectionEnabled]); + XCTAssertFalse([arbiter isLegacyDataCollectionKeyInPlist]); +} + +- (void)testLegacyFlag { + FIRCLSDataCollectionArbiter *arbiter = + [self arbiterWithDictionary:[self fabricConfigWithLegacyDataCollectionValue:YES]]; + XCTAssertTrue([arbiter isLegacyDataCollectionKeyInPlist]); +} + +- (void)testLegacyAndNewImplementationsAreIndependent { + FIRCLSDataCollectionArbiter *arbiter = + [self arbiterWithDictionary:[self fabricConfigWithLegacyDataCollectionValue:YES]]; + self.fakeApp.isDefaultCollectionEnabled = NO; + XCTAssertFalse([arbiter isCrashlyticsCollectionEnabled]); + XCTAssertTrue([arbiter isLegacyDataCollectionKeyInPlist]); +} + +- (void)testLegacyAndNewFlagsAreIndependent { + FIRCLSDataCollectionArbiter *arbiter = + [self arbiterWithDictionary:[self fabricConfigWithDataCollectionValue:YES andLegacy:NO]]; + self.fakeApp.isDefaultCollectionEnabled = YES; + XCTAssertTrue([arbiter isCrashlyticsCollectionEnabled]); + XCTAssertTrue([arbiter isLegacyDataCollectionKeyInPlist]); +} + +- (XCTestExpectation *)expectationForPromise:(FBLPromise *)promise { + XCTestExpectation *expectation = [[XCTestExpectation alloc] initWithDescription:@"promise"]; + [promise then:^id _Nullable(id _Nullable value) { + [expectation fulfill]; + return nil; + }]; + return expectation; +} + +- (void)testWaitForCrashlyticsCollectionEnabled { + // true, wait + FIRCLSDataCollectionArbiter *arbiter = [self arbiterWithDictionary:@{}]; + [arbiter setCrashlyticsCollectionEnabled:YES]; + FBLPromise *promise = [arbiter waitForCrashlyticsCollectionEnabled]; + [self waitForExpectations:@[ [self expectationForPromise:promise] ] timeout:1.0]; + + // false, wait, true + [arbiter setCrashlyticsCollectionEnabled:NO]; + promise = [arbiter waitForCrashlyticsCollectionEnabled]; + [arbiter setCrashlyticsCollectionEnabled:YES]; + [self waitForExpectations:@[ [self expectationForPromise:promise] ] timeout:1.0]; + + // false, wait, false, true + [arbiter setCrashlyticsCollectionEnabled:NO]; + promise = [arbiter waitForCrashlyticsCollectionEnabled]; + [arbiter setCrashlyticsCollectionEnabled:NO]; + [arbiter setCrashlyticsCollectionEnabled:YES]; + [self waitForExpectations:@[ [self expectationForPromise:promise] ] timeout:1.0]; +} + +#pragma mark - Helper functions + +- (FIRCLSDataCollectionArbiter *)arbiterWithDictionary:(NSDictionary *)dict { + id fakeApp = self.fakeApp; + return [[FIRCLSDataCollectionArbiter alloc] initWithApp:fakeApp withAppInfo:dict]; +} + +- (NSDictionary *)fabricConfigWithDataCollectionValue:(BOOL)enabled { + return @{@"FirebaseCrashlyticsCollectionEnabled" : @(enabled)}; +} + +- (NSDictionary *)fabricConfigWithLegacyDataCollectionValue:(BOOL)enabled { + return @{@"firebase_crashlytics_collection_enabled" : @(enabled)}; +} + +- (NSDictionary *)fabricConfigWithDataCollectionValue:(BOOL)enabled andLegacy:(BOOL)legacyEnabled { + return @{ + @"FirebaseCrashlyticsCollectionEnabled" : @(enabled), + @"firebase_crashlytics_collection_enabled" : @(legacyEnabled) + }; +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSDemangleOperationTests.m b/Crashlytics/UnitTests/FIRCLSDemangleOperationTests.m new file mode 100644 index 000000000000..8deb8d29e94a --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSDemangleOperationTests.m @@ -0,0 +1,75 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSDemangleOperation.h" + +#import +#import + +#import "FIRCLSStackFrame.h" + +@interface FIRCLSDemangleOperationTests : XCTestCase + +@end + +@implementation FIRCLSDemangleOperationTests + +- (void)setUp { + [super setUp]; +} + +- (void)tearDown { + [super tearDown]; +} + +- (NSString *)demangle:(const char *)symbol { + return [FIRCLSDemangleOperation demangleSymbol:symbol]; +} + +- (void)testDemangleUnmangledSymbol { + XCTAssertNil([self demangle:"unmangledSymbol"], @""); +} + +- (void)testDemangleCppSymbols { + XCTAssertEqualObjects([self demangle:"_Z7monitorP8NSStringlS0_"], + @"monitor(NSString*, long, NSString*)", @""); +} + +- (void)testDemangleCppSymbolsWithBlockInvoke { + XCTAssertEqualObjects([self demangle:"__Z7monitorP8NSStringlS0__block_invoke"], + @"monitor(NSString*, long, NSString*)_block_invoke", @""); + XCTAssertEqualObjects([self demangle:"__Z7monitorP8NSStringlS0__block_invoke_2"], + @"monitor(NSString*, long, NSString*)_block_invoke_2", @""); + XCTAssertNil([self demangle:"__Zt_block_invoke"], @"Invalid Cpp symbol"); + XCTAssertNil([self demangle:"__Zinvalid_block_invoke"], @"Invalid Cpp symbol"); +} + +- (void)testOperation { + NSMutableArray *frameArray = [[NSMutableArray alloc] init]; + [frameArray addObject:[FIRCLSStackFrame stackFrameWithSymbol:@"_Z7monitorP8NSStringlS0_"]]; + [frameArray addObject:[FIRCLSStackFrame stackFrameWithSymbol:@"_ZN9wikipedia7article6formatEv"]]; + [frameArray addObject:[FIRCLSStackFrame stackFrameWithSymbol:@"unmangledSymbol"]]; + + FIRCLSDemangleOperation *op = [[FIRCLSDemangleOperation alloc] init]; + [op setThreadArray:@[ frameArray ]]; + + [op start]; + + XCTAssertEqual([frameArray count], 3, @""); + XCTAssertEqualObjects([frameArray[0] symbol], @"monitor(NSString*, long, NSString*)", @""); + XCTAssertEqualObjects([frameArray[1] symbol], @"wikipedia::article::format()", @""); + XCTAssertEqualObjects([frameArray[2] symbol], @"unmangledSymbol", @""); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSDwarfExpressionTests.m b/Crashlytics/UnitTests/FIRCLSDwarfExpressionTests.m new file mode 100644 index 000000000000..b722e2e09f14 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSDwarfExpressionTests.m @@ -0,0 +1,142 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#include "FIRCLSDwarfExpressionMachine.h" + +@interface FIRCLSDwarfExpressionTests : XCTestCase + +@end + +@implementation FIRCLSDwarfExpressionTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the + // class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the + // class. + [super tearDown]; +} + +#if CLS_DWARF_UNWINDING_SUPPORTED + +- (void)testDwarfStackPushAndPop { + FIRCLSDwarfExpressionStack stack; + + FIRCLSDwarfExpressionStackInit(&stack); + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); + + XCTAssert(FIRCLSDwarfExpressionStackPush(&stack, 1)); + XCTAssert(FIRCLSDwarfExpressionStackPush(&stack, 2)); + XCTAssert(FIRCLSDwarfExpressionStackPush(&stack, 3)); + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); + + XCTAssertEqual(FIRCLSDwarfExpressionStackPop(&stack), (intptr_t)3); + XCTAssertEqual(FIRCLSDwarfExpressionStackPop(&stack), (intptr_t)2); + XCTAssertEqual(FIRCLSDwarfExpressionStackPop(&stack), (intptr_t)1); + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); +} + +- (void)testDwarfStackPeek { + FIRCLSDwarfExpressionStack stack; + + FIRCLSDwarfExpressionStackInit(&stack); + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); + + XCTAssert(FIRCLSDwarfExpressionStackPush(&stack, 1)); + XCTAssert(FIRCLSDwarfExpressionStackPush(&stack, 2)); + + XCTAssertEqual(FIRCLSDwarfExpressionStackPeek(&stack), (intptr_t)2); + XCTAssertEqual(FIRCLSDwarfExpressionStackPeek(&stack), (intptr_t)2); + + XCTAssertEqual(FIRCLSDwarfExpressionStackPop(&stack), (intptr_t)2); + + XCTAssertEqual(FIRCLSDwarfExpressionStackPeek(&stack), (intptr_t)1); + + XCTAssertEqual(FIRCLSDwarfExpressionStackPop(&stack), (intptr_t)1); +} + +- (void)testDwarfStackPushMaxNumberOfValues { + FIRCLSDwarfExpressionStack stack; + + FIRCLSDwarfExpressionStackInit(&stack); + + for (uint32_t i = 0; i < CLS_DWARF_EXPRESSION_STACK_SIZE; ++i) { + XCTAssert(FIRCLSDwarfExpressionStackPush(&stack, i)); + } + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); + XCTAssertEqual(FIRCLSDwarfExpressionStackPop(&stack), + (intptr_t)(CLS_DWARF_EXPRESSION_STACK_SIZE - 1)); +} + +- (void)testDwarfStackOverflow { + FIRCLSDwarfExpressionStack stack; + + FIRCLSDwarfExpressionStackInit(&stack); + + for (uint32_t i = 0; i < CLS_DWARF_EXPRESSION_STACK_SIZE; ++i) { + XCTAssert(FIRCLSDwarfExpressionStackPush(&stack, i)); + } + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); + + XCTAssertFalse(FIRCLSDwarfExpressionStackPush(&stack, 42), + @"Should not be able to push more than the max number of values"); + XCTAssertFalse(FIRCLSDwarfExpressionStackIsValid(&stack)); +} + +- (void)testDwarfStackPopUnderflow { + FIRCLSDwarfExpressionStack stack; + + FIRCLSDwarfExpressionStackInit(&stack); + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); + XCTAssertEqual(FIRCLSDwarfExpressionStackPop(&stack), 0); + XCTAssertFalse(FIRCLSDwarfExpressionStackIsValid(&stack)); +} + +- (void)testDwarfStackPeekUnderflow { + FIRCLSDwarfExpressionStack stack; + + FIRCLSDwarfExpressionStackInit(&stack); + + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&stack)); + XCTAssertEqual(FIRCLSDwarfExpressionStackPeek(&stack), 0); + XCTAssertFalse(FIRCLSDwarfExpressionStackIsValid(&stack)); +} + +- (void)testDwarfExpressionMachineInit { + FIRCLSDwarfExpressionMachine machine; + uint8_t fakeData; + FIRCLSThreadContext registers; + + XCTAssert(FIRCLSDwarfExpressionMachineInit(&machine, (void*)&fakeData, ®isters, 42)); + XCTAssert(FIRCLSDwarfExpressionStackIsValid(&machine.stack)); + + XCTAssertEqual(FIRCLSDwarfExpressionStackPeek(&machine.stack), 42); +} + +#endif + +@end diff --git a/Crashlytics/UnitTests/FIRCLSDwarfTests.m b/Crashlytics/UnitTests/FIRCLSDwarfTests.m new file mode 100644 index 000000000000..279d22441499 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSDwarfTests.m @@ -0,0 +1,171 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#include "dwarf.h" + +#import "FIRCLSMachO.h" + +#include "FIRCLSContext.h" +#include "FIRCLSDefines.h" +#include "FIRCLSDwarfUnwind.h" +#include "FIRCLSGlobals.h" +#include "FIRCLSUnwind_arch.h" + +@interface FIRCLSDwarfTests : XCTestCase + +@end + +@implementation FIRCLSDwarfTests + +- (void)setUp { + [super setUp]; + + _clsContext.readonly = malloc(sizeof(FIRCLSReadOnlyContext)); + _clsContext.readonly->logPath = "/tmp/test.log"; +} + +- (void)tearDown { + [super tearDown]; +} + +- (NSString*)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSString*)pathForResource:(NSString*)name { + return [[self resourcePath] stringByAppendingPathComponent:name]; +} + +#if CLS_DWARF_UNWINDING_SUPPORTED +#if CLS_CPU_X86_64 + +- (void)testParseDwarfUnwindInfoForobjc_msgSend_x86_64_1093 { + NSString* dylibPath = [self pathForResource:@"10.9.3 libobjc.A.dylib"]; + + struct FIRCLSMachOFile file; + + XCTAssertTrue(FIRCLSMachOFileInitWithPath(&file, [dylibPath fileSystemRepresentation]), @""); + + struct FIRCLSMachOSlice slice = FIRCLSMachOFileSliceWithArchitectureName(&file, "x86_64"); + + FIRCLSMachOSection section; + const void* ehFrame = NULL; + + FIRCLSMachOSliceInitSectionByName(&slice, SEG_TEXT, "__eh_frame", §ion); + + // This computation is a little funny. Because we've just opened this dylib as a file, + // the "slide" is really whereever the file ended up being mapped in memory. + ehFrame = (void*)(section.addr + (uintptr_t)slice.startAddress); + + XCTAssertTrue(ehFrame != NULL, @""); + + FIRCLSDwarfCFIRecord record; + + // hard-code to the FDE offset for objc_msgSend + XCTAssertTrue(FIRCLSDwarfParseCFIFromFDERecordOffset(&record, ehFrame, 0x00001a48), @""); + + // check the CIE record + XCTAssertEqual(record.cie.length, 28, @""); + XCTAssertEqual(record.cie.version, 3, @""); + XCTAssertEqual(record.cie.ehData, 0, @""); + XCTAssertEqualObjects([NSString stringWithUTF8String:record.cie.augmentation], @"zPR", @""); + XCTAssertEqual(record.cie.pointerEncoding, DW_EH_PE_absptr | DW_EH_PE_pcrel, @""); + XCTAssertEqual(record.cie.lsdaEncoding, DW_EH_PE_absptr, @""); + XCTAssertEqual(record.cie.personalityEncoding, + DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4, @""); + XCTAssertEqual(record.cie.codeAlignFactor, 1, @""); + XCTAssertEqual(record.cie.dataAlignFactor, -8, @""); + XCTAssertEqual(record.cie.returnAddressRegister, 16, @""); + XCTAssertEqual(record.cie.signalFrame, false, @""); + XCTAssertTrue(FIRCLSDwarfCIEHasAugmentationData(&record.cie), @""); + + // check the FDE record + XCTAssertEqual(record.fde.length, 44, @""); + XCTAssertEqual(record.fde.cieOffset, 68, @""); + XCTAssertEqual(record.fde.startAddress, (uintptr_t)slice.startAddress + 0x5080, @""); + XCTAssertEqual(record.fde.rangeSize, 0x124, @""); + + FIRCLSMachOFileDestroy(&file); +} + +#endif + +- (void)testGetSavedRegisterWithInvalidValues { + FIRCLSThreadContext registers; + const FIRCLSDwarfRegister dRegister = {FIRCLSDwarfRegisterUnused, 0}; + + XCTAssertEqual(FIRCLSDwarfGetSavedRegister(NULL, 0, dRegister), 0, @""); + XCTAssertEqual(FIRCLSDwarfGetSavedRegister(®isters, 0, dRegister), 0, @""); +} + +- (void)testGetSavedRegisterWithInCFA { + uintptr_t memoryBuffer[2] = {45, 46}; + FIRCLSThreadContext registers; + const FIRCLSDwarfRegister dRegister = {FIRCLSDwarfRegisterInCFA, sizeof(uintptr_t)}; + + // this should compute *(memoryBuffer + sizeof(uintptr_t)) = 46 + XCTAssertEqual(FIRCLSDwarfGetSavedRegister(®isters, (uintptr_t)memoryBuffer, dRegister), 46, + @""); +} + +- (void)testRegisterStructureSizingAndMaxValues { + FIRCLSDwarfState state; + + XCTAssertEqual(sizeof(state.registers) / sizeof(FIRCLSDwarfRegister), + CLS_DWARF_MAX_REGISTER_NUM + 1, + @"Number of DWARF register values needs to match the max register size for the " + @"architecture, plus one"); + + XCTAssertTrue(CLS_DWARF_MAX_REGISTER_NUM > 1); + XCTAssertTrue(CLS_DWARF_INVALID_REGISTER_NUM > CLS_DWARF_MAX_REGISTER_NUM); +} + +- (void)testAssignReturnRegisterNumber { + FIRCLSDwarfState state; + FIRCLSThreadContext inputRegisters; + FIRCLSThreadContext outputRegisters; + + memset(&state, 0, sizeof(FIRCLSDwarfState)); + memset(&inputRegisters, 0, sizeof(FIRCLSThreadContext)); + memset(&outputRegisters, 0, sizeof(FIRCLSThreadContext)); + + uintptr_t cfaRegister = 42; // doesn't matter for this test + + // set the return register to live inside another reg, just for convenience + state.registers[CLS_DWARF_REG_RETURN].location = FIRCLSDwarfRegisterInRegister; + + // Setup our arch-specific values. Be careful not to use the 0 register enum value + // because that can artifically pass. +#if CLS_CPU_X86_64 + state.registers[CLS_DWARF_REG_RETURN].value = CLS_DWARF_X86_64_RDX; + FIRCLSDwarfUnwindSetRegisterValue(&inputRegisters, CLS_DWARF_X86_64_RDX, 777); +#elif CLS_CPU_I386 + state.registers[CLS_DWARF_REG_RETURN].value = CLS_DWARF_X86_ECX; + FIRCLSDwarfUnwindSetRegisterValue(&inputRegisters, CLS_DWARF_X86_ECX, 777); +#elif CLS_CPU_ARM64 + state.registers[CLS_DWARF_REG_RETURN].value = CLS_DWARF_ARM64_X1; + FIRCLSDwarfUnwindSetRegisterValue(&inputRegisters, CLS_DWARF_ARM64_X1, 777); +#endif + + XCTAssertTrue( + FIRCLSDwarfUnwindAssignRegisters(&state, &inputRegisters, cfaRegister, &outputRegisters)); + + XCTAssertEqual(FIRCLSDwarfUnwindGetRegisterValue(&outputRegisters, CLS_DWARF_REG_RETURN), 777); +} + +#endif + +@end diff --git a/Crashlytics/UnitTests/FIRCLSFileManagerTests.m b/Crashlytics/UnitTests/FIRCLSFileManagerTests.m new file mode 100644 index 000000000000..9126872df2b3 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSFileManagerTests.m @@ -0,0 +1,76 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FIRCLSMockFileManager.h" + +@interface FIRCLSFileManagerTests : XCTestCase { + FIRCLSMockFileManager* _manager; +} + +@property(nonatomic, retain, readonly) FIRCLSMockFileManager* manager; + +@end + +@implementation FIRCLSFileManagerTests + +- (void)setUp { + [super setUp]; + + _manager = [[FIRCLSMockFileManager alloc] init]; + [_manager setPathNamespace:@"com.crashlytics.unittests"]; + + [self removeRootDirectory]; +} + +- (void)tearDown { + [self removeRootDirectory]; + + [super tearDown]; +} + +- (BOOL)removeRootDirectory { + if ([self doesFileExist:[_manager rootPath]]) { + assert([_manager removeItemAtPath:[_manager rootPath]]); + } + + return YES; +} + +- (void)printPathContents:(NSString*)path { + NSLog(@"%@", [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil]); +} + +- (BOOL)doesFileExist:(NSString*)path { + return [[NSFileManager defaultManager] fileExistsAtPath:path]; +} + +- (void)testCreateV4DirectoryStructure { + NSString* path = [[self manager] rootPath]; + + [[self manager] createReportDirectories]; + + XCTAssertTrue([self doesFileExist:path], @""); + + path = [path stringByAppendingPathComponent:@"v4/reports"]; + XCTAssertTrue([self doesFileExist:path], @""); + + for (NSString* subpath in @[ @"active", @"prepared", @"processing" ]) { + XCTAssertTrue([self doesFileExist:[path stringByAppendingPathComponent:subpath]], @""); + } +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSFileTests.m b/Crashlytics/UnitTests/FIRCLSFileTests.m new file mode 100644 index 000000000000..d82e8fda9006 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSFileTests.m @@ -0,0 +1,430 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSFile.h" + +#import + +@interface FIRCLSFileTests : XCTestCase + +@property(nonatomic, assign) FIRCLSFile unbufferedFile; +@property(nonatomic, assign) FIRCLSFile bufferedFile; +@property(nonatomic, strong) NSString *unbufferedPath; +@property(nonatomic, strong) NSString *bufferedPath; + +@end + +@implementation FIRCLSFileTests + +- (void)setUp { + [super setUp]; + + self.unbufferedPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"file_test"]; + self.bufferedPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"buffered_file_test"]; + + [[NSFileManager defaultManager] removeItemAtPath:self.unbufferedPath error:nil]; + + FIRCLSFileInitWithPathMode(&_unbufferedFile, [self.unbufferedPath fileSystemRepresentation], + false, false); + FIRCLSFileInitWithPathMode(&_bufferedFile, [self.bufferedPath fileSystemRepresentation], false, + true); +} + +- (void)tearDown { + FIRCLSFileClose(&_unbufferedFile); + FIRCLSFileClose(&_bufferedFile); + + [super tearDown]; +} + +- (NSString *)contentsOfFileAtPath:(NSString *)path { + return [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; +} + +#pragma mark - + +- (void)testEmptySection { + [self emptySectionWithFile:&_unbufferedFile filePath:self.unbufferedPath buffered:NO]; + [self emptySectionWithFile:&_bufferedFile filePath:self.bufferedPath buffered:YES]; +} + +- (void)emptySectionWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + FIRCLSFileWriteSectionStart(file, "empty"); + FIRCLSFileWriteSectionEnd(file); + NSString *contents = [self contentsOfFileAtPath:filePath]; + if (buffered) { + XCTAssertEqualObjects( + contents, @"", + @"Expected empty file contents for buffered case: buffer has not yet been flushed to file"); + FIRCLSFileFlushWriteBuffer(file); + contents = [self contentsOfFileAtPath:filePath]; + } + XCTAssertEqualObjects( + contents, @"{\"empty\":}\n", + @"Empty written to and retrieved from file does not match input in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testSingleArrayCollection { + [self singleArrayCollectionWithFile:&_unbufferedFile filePath:self.unbufferedPath buffered:NO]; + [self singleArrayCollectionWithFile:&_bufferedFile filePath:self.bufferedPath buffered:YES]; +} + +- (void)singleArrayCollectionWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + FIRCLSFileWriteSectionStart(file, "array"); + FIRCLSFileWriteArrayStart(file); + FIRCLSFileWriteArrayEntryUint64(file, 1); + FIRCLSFileWriteArrayEnd(file); + FIRCLSFileWriteSectionEnd(file); + NSString *contents = [self contentsOfFileAtPath:filePath]; + if (buffered) { + XCTAssertEqualObjects( + contents, @"", + @"Expected empty file contents for buffered case: buffer has not yet been flushed to file"); + FIRCLSFileFlushWriteBuffer(file); + contents = [self contentsOfFileAtPath:filePath]; + } + XCTAssertEqualObjects( + contents, @"{\"array\":[1]}\n", + @"Single array written to and retrieved from file does not match input in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testEmptyCollectionFollowedByEntry { + [self emptyCollectionFollowedByEntryWithFile:&_unbufferedFile + filePath:self.unbufferedPath + buffered:NO]; + [self emptyCollectionFollowedByEntryWithFile:&_bufferedFile + filePath:self.bufferedPath + buffered:YES]; +} + +- (void)emptyCollectionFollowedByEntryWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + FIRCLSFileWriteSectionStart(file, "empty_array"); + FIRCLSFileWriteArrayStart(file); + FIRCLSFileWriteArrayEnd(file); + + // and now put in another entry into the hash + FIRCLSFileWriteHashEntryUint64(file, "value", 1); + FIRCLSFileWriteSectionEnd(file); + NSString *contents = [self contentsOfFileAtPath:filePath]; + if (buffered) { + XCTAssertEqualObjects( + contents, @"", + @"Expected empty file contents for buffered case: buffer has not yet been flushed to file"); + FIRCLSFileFlushWriteBuffer(file); + contents = [self contentsOfFileAtPath:filePath]; + } + XCTAssertEqualObjects(contents, @"{\"empty_array\":[],\"value\":1}\n", + @"Empty collection and entry written to and retrieved from file does not " + @"match input in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testHexEncodingString { + [self hexEncodingStringWithFile:&_unbufferedFile filePath:self.unbufferedPath buffered:NO]; + [self hexEncodingStringWithFile:&_bufferedFile filePath:self.bufferedPath buffered:YES]; +} + +- (void)hexEncodingStringWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashEntryHexEncodedString(file, "hex", "hex string"); + FIRCLSFileWriteHashEnd(file); + NSString *contents = [self contentsOfFileAtPath:filePath]; + if (buffered) { + XCTAssertEqualObjects( + contents, @"", + @"Expected empty file contents for buffered case: buffer has not yet been flushed to file"); + FIRCLSFileFlushWriteBuffer(file); + contents = [self contentsOfFileAtPath:filePath]; + } + XCTAssertEqualObjects(contents, @"{\"hex\":\"68657820737472696e67\"}", + @"Hex encoded string written to and retrieved from file does not match " + @"input in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testHexEncodingLongString { + [self hexEncodingLongStringWithFile:&_unbufferedFile + filePath:self.unbufferedPath + length:CLS_FILE_HEX_BUFFER * 10 + buffered:NO]; + [self hexEncodingLongStringWithFile:&_bufferedFile + filePath:self.bufferedPath + length:FIRCLSWriteBufferLength * 10 + buffered:YES]; +} + +- (void)hexEncodingLongStringWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + length:(size_t)length + buffered:(BOOL)buffered { + char *longString = malloc(length * sizeof(char)); + + memset(longString, 'a', length); // fill it with 'a' characters + longString[length - 1] = 0; // null terminate + + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashEntryHexEncodedString(file, "hex", longString); + FIRCLSFileWriteHashEnd(file); + + NSDictionary *dict = + [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:filePath] + options:0 + error:nil]; + + if (buffered) { + XCTAssertNil(dict); + FIRCLSFileFlushWriteBuffer(file); + dict = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:filePath] + options:0 + error:nil]; + } + + XCTAssertNotNil(dict, + @"Expected a dictionary serialized from JSON file contents in %@buffered case", + buffered ? @"" : @"un"); + XCTAssertEqual([dict[@"hex"] length], (length - 1) * 2, + @"Long hex encoded string written to and retrieved from file does not match input " + @"in %@buffered case", + buffered ? @"" : @"un"); + + free(longString); +} + +#pragma mark - + +- (void)testSignedInteger { + [self signedIntegerWithFile:&_unbufferedFile filePath:self.unbufferedPath buffered:NO]; + [self signedIntegerWithFile:&_bufferedFile filePath:self.bufferedPath buffered:YES]; +} + +- (void)signedIntegerWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + FIRCLSFileWriteSectionStart(file, "signed"); + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashEntryInt64(file, "value", -1); + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); + + NSString *contents = [self contentsOfFileAtPath:filePath]; + if (buffered) { + XCTAssertEqualObjects( + contents, @"", + @"Expected empty file contents for buffered case: buffer has not yet been flushed to file"); + FIRCLSFileFlushWriteBuffer(file); + contents = [self contentsOfFileAtPath:filePath]; + } + XCTAssertEqualObjects( + contents, @"{\"signed\":{\"value\":-1}}\n", + @"Signed integer written to and retrieved from file does not match input in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testBigInteger { + [self bigIntegerWithFile:&_unbufferedFile filePath:self.unbufferedPath buffered:NO]; + [self bigIntegerWithFile:&_bufferedFile filePath:self.bufferedPath buffered:YES]; +} + +- (void)bigIntegerWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + FIRCLSFileWriteSectionStart(file, "big_int"); + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashEntryUint64(file, "value", 0x12345678900af8a1); + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); + + NSString *contents = [self contentsOfFileAtPath:filePath]; + if (buffered) { + XCTAssertEqualObjects( + contents, @"", + @"Expected empty file contents for buffered case: buffer has not yet been flushed to file"); + FIRCLSFileFlushWriteBuffer(file); + contents = [self contentsOfFileAtPath:filePath]; + } + XCTAssertEqualObjects( + contents, @"{\"big_int\":{\"value\":1311768467284359329}}\n", + @"Big integer written to and retrieved from file does not match input in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testMaxUInt64 { + [self maxUInt64WithFile:&_unbufferedFile filePath:self.unbufferedPath buffered:NO]; + [self maxUInt64WithFile:&_bufferedFile filePath:self.bufferedPath buffered:YES]; +} + +- (void)maxUInt64WithFile:(FIRCLSFile *)file filePath:(NSString *)filePath buffered:(BOOL)buffered { + FIRCLSFileWriteSectionStart(file, "big_int"); + FIRCLSFileWriteHashStart(file); + FIRCLSFileWriteHashEntryUint64(file, "value", 0xFFFFFFFFFFFFFFFF); + FIRCLSFileWriteHashEnd(file); + FIRCLSFileWriteSectionEnd(file); + + NSString *contents = [self contentsOfFileAtPath:filePath]; + if (buffered) { + XCTAssertEqualObjects( + contents, @"", + @"Expected empty file contents for buffered case: buffer has not yet been flushed to file"); + FIRCLSFileFlushWriteBuffer(file); + contents = [self contentsOfFileAtPath:filePath]; + } + XCTAssertEqualObjects(contents, @"{\"big_int\":{\"value\":18446744073709551615}}\n", + @"Max unsigned integer written to and retrieved from file does not match " + @"input in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testSimpleHashPerformanceWithUnbufferedFile { + [self measureBlock:^{ + // just one run isn't sufficient + for (NSUInteger i = 0; i < 2000; ++i) { + FIRCLSFileWriteSectionStart(&self->_unbufferedFile, "hash_test"); + FIRCLSFileWriteHashEntryString(&self->_unbufferedFile, "key1", "value1"); + FIRCLSFileWriteHashEntryUint64(&self->_unbufferedFile, "key2", 64); + FIRCLSFileWriteHashEntryNSString(&self->_unbufferedFile, "key2", @"some string"); + FIRCLSFileWriteSectionEnd(&self->_unbufferedFile); + } + }]; +} + +- (void)testSimpleHashPerformanceWithBufferedFile { + [self measureBlock:^{ + // just one run isn't sufficient + for (NSUInteger i = 0; i < 2000; ++i) { + FIRCLSFileWriteSectionStart(&self->_bufferedFile, "hash_test"); + FIRCLSFileWriteHashEntryString(&self->_bufferedFile, "key1", "value1"); + FIRCLSFileWriteHashEntryUint64(&self->_bufferedFile, "key2", 64); + FIRCLSFileWriteHashEntryNSString(&self->_bufferedFile, "key2", @"some string"); + FIRCLSFileWriteSectionEnd(&self->_bufferedFile); + } + }]; +} + +#pragma mark - + +- (void)testOpenAndClose { + [self openAndCloseWithFile:&_unbufferedFile filePath:self.unbufferedPath buffered:NO]; + [self openAndCloseWithFile:&_bufferedFile filePath:self.bufferedPath buffered:YES]; +} + +- (void)openAndCloseWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + XCTAssert(FIRCLSFileIsOpen(file), @"File should be opened by setup in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileClose(file), @"Closing the file should succeed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssertFalse(FIRCLSFileIsOpen(file), @"File should now be marked as closed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileInitWithPath(file, [filePath fileSystemRepresentation], buffered), + @"Re-opening the same file structure should succeed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileIsOpen(file), + @"That file should be marked as open as well in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testCloseAndOpenAlternatingBufferedOption { + [self closeAndOpenAlternatingBufferedOptionWithFile:&_unbufferedFile + filePath:self.unbufferedPath + buffered:NO]; + [self closeAndOpenAlternatingBufferedOptionWithFile:&_bufferedFile + filePath:self.bufferedPath + buffered:YES]; +} + +- (void)closeAndOpenAlternatingBufferedOptionWithFile:(FIRCLSFile *)file + filePath:(NSString *)filePath + buffered:(BOOL)buffered { + XCTAssert(FIRCLSFileIsOpen(file), @"File should be opened by setup in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileClose(file), @"Closing the file should succeed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssertFalse(FIRCLSFileIsOpen(file), @"File should now be marked as closed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileInitWithPath(file, [filePath fileSystemRepresentation], !buffered), + @"Re-opening the same file structure should succeed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileIsOpen(file), + @"That file should be marked as open as well in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileClose(file), @"Closing the file should succeed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssertFalse(FIRCLSFileIsOpen(file), @"File should now be marked as closed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileInitWithPath(file, [filePath fileSystemRepresentation], buffered), + @"Re-opening the same file structure should succeed in %@buffered case", + buffered ? @"" : @"un"); + XCTAssert(FIRCLSFileIsOpen(file), + @"That file should be marked as open as well in %@buffered case", + buffered ? @"" : @"un"); +} + +#pragma mark - + +- (void)testLoggingInputLongerThanBuffer { + size_t inputLength = (FIRCLSWriteBufferLength + 2) * sizeof(char); + char *input = malloc(inputLength); + for (size_t i = 0; i < inputLength - 1; i++) { + input[i] = i % 26 + 'a'; + } + input[inputLength - 1] = '\0'; + NSString *inputString = [NSString stringWithUTF8String:input]; + + FIRCLSFileWriteHashStart(&_bufferedFile); + FIRCLSFileWriteHashEntryString(&_bufferedFile, "value", input); + FIRCLSFileWriteHashEnd(&_bufferedFile); + FIRCLSFileFlushWriteBuffer(&_bufferedFile); + + NSError *error; + NSDictionary *dict = + [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:self.bufferedPath] + options:0 + error:&error]; + XCTAssertNotNil(dict, + @"No data was retrieved from log file while writing long input with buffering"); + NSString *writtenValue = dict[@"value"]; + XCTAssertEqualObjects(inputString, writtenValue, + @"Data was lost while writing long input to file with write buffering"); + + free(input); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSInstallIdentifierModelTests.m b/Crashlytics/UnitTests/FIRCLSInstallIdentifierModelTests.m new file mode 100644 index 000000000000..5761e1344cf8 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSInstallIdentifierModelTests.m @@ -0,0 +1,317 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSInstallIdentifierModel.h" + +#import + +#import "FIRCLSUserDefaults.h" +#import "FIRMockInstanceID.h" + +static NSString *const FABInstallationUUIDKey = @"com.crashlytics.iuuid"; +static NSString *const FABInstallationADIDKey = @"com.crashlytics.install.adid"; +static NSString *const FIRCLSInstallationIIDHashKey = @"com.crashlytics.install.iid"; + +static NSString *const FIRCLSTestHashOfInstanceID = + @"ed0cf273a55b731a50c3356e8c5a9887b96e7a1a7b233967bff23676bcea896d"; +static NSString *const FIRCLSTestHashOfTestInstanceID = + @"a5da68191a6ce5247c37b6dc93775891b3c4fc183d9c84f7a1c8670e680b9cd4"; + +@interface FIRCLSInstallIdentifierModelTests : XCTestCase { + FIRCLSUserDefaults *_defaults; +} +@end + +@implementation FIRCLSInstallIdentifierModelTests + +- (void)setUp { + _defaults = [FIRCLSUserDefaults standardUserDefaults]; + [_defaults removeObjectForKey:FABInstallationUUIDKey]; + [_defaults removeObjectForKey:FABInstallationADIDKey]; + [_defaults removeObjectForKey:FIRCLSInstallationIIDHashKey]; +} + +- (void)tearDown { + [_defaults removeObjectForKey:FABInstallationUUIDKey]; + [_defaults removeObjectForKey:FABInstallationADIDKey]; + [_defaults removeObjectForKey:FIRCLSInstallationIIDHashKey]; +} + +- (BOOL)blockOnRegeneration:(FIRCLSInstallIdentifierModel *)model { + XCTestExpectation *expectation = [[XCTestExpectation alloc] initWithDescription:@"promise"]; + BOOL __block retDidRotate = NO; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + [model regenerateInstallIDIfNeededWithBlock:^(BOOL didRotate) { + retDidRotate = didRotate; + + [expectation fulfill]; + }]; + }); + + [self waitForExpectations:@[ expectation ] timeout:1.0]; + + return retDidRotate; +} + +- (void)testCreateUUID { + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_instance_id"]; + + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); +} + +- (void)testCreateUUIDAndRotate { + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_instance_id"]; + + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + + XCTAssertFalse(didRotate); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(FIRCLSTestHashOfTestInstanceID, + [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testCreateUUIDAndErrorGettingInstanceID { + NSError *fakeError = [NSError errorWithDomain:NSCocoaErrorDomain code:-1 userInfo:@{}]; + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithError:fakeError]; + + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + + XCTAssertFalse(didRotate); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(nil, [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testCreateUUIDNoIID { + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:nil]; + + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(nil, [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testIIDBecomesNil { + // Set up the initial state with a valid iid and uuid. + [_defaults setObject:@"old_uuid" forKey:FABInstallationUUIDKey]; + [_defaults setObject:@"old_instance_id" forKey:FIRCLSInstallationIIDHashKey]; + + // Initialize the model with the a nil IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:nil]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + // Test that the UUID did not change. The FIID can be nil if + // there's no FIID cached, so we can't say whether to regenerate + XCTAssertEqualObjects(model.installID, @"old_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); +} + +- (void)testIIDChanges { + // Set up the initial state with a valid iid and uuid. + [_defaults setObject:@"old_uuid" forKey:FABInstallationUUIDKey]; + [_defaults setObject:@"old_instance_id" forKey:FIRCLSInstallationIIDHashKey]; + + // Initialize the model with the a new IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"new_instance_id"]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertTrue(didRotate); + + // Test that the UUID changed. + XCTAssertNotEqualObjects(model.installID, @"old_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(FIRCLSTestHashOfInstanceID, + [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testIIDDoesntChange { + // Set up the initial state with a valid iid and uuid. + [_defaults setObject:@"test_uuid" forKey:FABInstallationUUIDKey]; + [_defaults setObject:FIRCLSTestHashOfTestInstanceID forKey:FIRCLSInstallationIIDHashKey]; + + // Initialize the model with the a new IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_instance_id"]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertFalse(didRotate); + + // Test that the UUID changed. + XCTAssertEqualObjects(model.installID, @"test_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(FIRCLSTestHashOfTestInstanceID, + [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testUUIDSetButNeverIIDNilIID { + // Set up the initial state with a valid iid and uuid. + [_defaults setObject:@"old_uuid" forKey:FABInstallationUUIDKey]; + + // Initialize the model with the a nil IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:nil]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertFalse(didRotate); + + // Test that the UUID did not change. The FIID can be nil if + // there's no FIID cached, so we can't say whether to regenerate + XCTAssertEqualObjects(model.installID, @"old_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects([_defaults objectForKey:FIRCLSInstallationIIDHashKey], nil); +} + +- (void)testUUIDSetButNeverIIDWithIID { + // Set up the initial state with a valid iid and uuid. + [_defaults setObject:@"old_uuid" forKey:FABInstallationUUIDKey]; + + // Initialize the model with the a nil IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_instance_id"]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertFalse(didRotate); + + // Test that the UUID did not change. The FIID can be nil if + // there's no FIID cached, so we can't say whether to regenerate + XCTAssertEqualObjects(model.installID, @"old_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects([_defaults objectForKey:FIRCLSInstallationIIDHashKey], + FIRCLSTestHashOfTestInstanceID); +} + +- (void)testADIDWasSetButNeverIID { + // Set up the initial state with a valid adid and uuid. + [_defaults setObject:@"test_uuid" forKey:FABInstallationUUIDKey]; + [_defaults setObject:@"test_adid" forKey:FABInstallationADIDKey]; + + // Initialize the model with the a new IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:nil]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertFalse(didRotate); + + // Test that the UUID didn't change. + XCTAssertEqualObjects(model.installID, @"test_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertNil([_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testADIDWasSetAndIIDBecomesSet { + // Set up the initial state with a valid adid and uuid. + [_defaults setObject:@"test_uuid" forKey:FABInstallationUUIDKey]; + [_defaults setObject:@"test_adid" forKey:FABInstallationADIDKey]; + + // Initialize the model with the a new IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_instance_id"]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertFalse(didRotate); + + // Test that the UUID didn't change. + XCTAssertEqualObjects(model.installID, @"test_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(FIRCLSTestHashOfTestInstanceID, + [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testADIDAndIIDWereSet { + // Set up the initial state with a valid iid, adid, and uuid. + [_defaults setObject:@"test_uuid" forKey:FABInstallationUUIDKey]; + [_defaults setObject:@"test_adid" forKey:FABInstallationADIDKey]; + [_defaults setObject:FIRCLSTestHashOfTestInstanceID forKey:FIRCLSInstallationIIDHashKey]; + + // Initialize the model with the a new IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_instance_id"]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertFalse(didRotate); + + // Test that the UUID didn't change. + XCTAssertEqualObjects(model.installID, @"test_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(FIRCLSTestHashOfTestInstanceID, + [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +- (void)testADIDAndIIDWereSet2 { + // Set up the initial state with a valid iid, adid, and uuid. + [_defaults setObject:@"test_uuid" forKey:FABInstallationUUIDKey]; + [_defaults setObject:@"test_adid" forKey:FABInstallationADIDKey]; + [_defaults setObject:FIRCLSTestHashOfTestInstanceID forKey:FIRCLSInstallationIIDHashKey]; + + // Initialize the model with the a new IID. + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_changed_instance_id"]; + FIRCLSInstallIdentifierModel *model = + [[FIRCLSInstallIdentifierModel alloc] initWithInstanceID:iid]; + XCTAssertNotNil(model.installID); + + BOOL didRotate = [self blockOnRegeneration:model]; + XCTAssertTrue(didRotate); + + // Test that the UUID change. + XCTAssertNotEqualObjects(model.installID, @"test_uuid"); + XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID); + XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]); + XCTAssertEqualObjects(@"f1e1e3969cd926d57448fcd02f6fd4e979739a87256a652a1781cfa0510408b3", + [_defaults objectForKey:FIRCLSInstallationIIDHashKey]); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSInternalReportTests.m b/Crashlytics/UnitTests/FIRCLSInternalReportTests.m new file mode 100644 index 000000000000..42f2d6deab29 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSInternalReportTests.m @@ -0,0 +1,70 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSInternalReport.h" + +#import + +@interface FIRCLSInternalReportTests : XCTestCase + +@end + +@implementation FIRCLSInternalReportTests + +- (NSString *)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSString *)pathForResource:(NSString *)name { + return [[self resourcePath] stringByAppendingPathComponent:name]; +} + +- (void)testCustomExceptionsNeedToBeSubmitted { + NSString *name = @"metadata_only_report"; + + NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:name]; + + // make sure to remove anything that was there previously + [[NSFileManager defaultManager] removeItemAtPath:tempPath error:nil]; + + NSString *resourcePath = [self pathForResource:name]; + + [[NSFileManager defaultManager] copyItemAtPath:resourcePath toPath:tempPath error:nil]; + + FIRCLSInternalReport *report = [[FIRCLSInternalReport alloc] initWithPath:tempPath]; + + NSString *customAPath = [report pathForContentFile:CLSReportCustomExceptionAFile]; + NSString *customBPath = [report pathForContentFile:CLSReportCustomExceptionBFile]; + + XCTAssertFalse(report.needsToBeSubmitted, @"metadata only should not need to be submitted"); + + [[NSFileManager defaultManager] createFileAtPath:customAPath + contents:[NSData data] + attributes:nil]; + + XCTAssert(report.needsToBeSubmitted, @"with the A file present, needs to be submitted"); + + [[NSFileManager defaultManager] createFileAtPath:customBPath + contents:[NSData data] + attributes:nil]; + + // with A and B, also needs + XCTAssert(report.needsToBeSubmitted, + @"with both the A and B files present, needs to be submitted"); + + XCTAssert([[NSFileManager defaultManager] removeItemAtPath:customAPath error:nil]); + XCTAssert(report.needsToBeSubmitted, @"with the B file present, needs to be submitted"); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSLoggingTests.m b/Crashlytics/UnitTests/FIRCLSLoggingTests.m new file mode 100644 index 000000000000..71b4b82310e9 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSLoggingTests.m @@ -0,0 +1,374 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#include "FIRCLSContext.h" +#include "FIRCLSFile.h" +#include "FIRCLSGlobals.h" +#import "FIRCLSInternalReport.h" +#include "FIRCLSUserLogging.h" + +@interface CLSLoggingTests : XCTestCase + +@property(nonatomic, strong) NSString* kvPath; +@property(nonatomic, strong) NSString* compactedKVPath; +@property(nonatomic, strong) NSString* logAPath; +@property(nonatomic, strong) NSString* logBPath; +@property(nonatomic, strong) NSString* errorAPath; +@property(nonatomic, strong) NSString* errorBPath; + +@end + +@implementation CLSLoggingTests + +- (void)setUp { + [super setUp]; + + FIRCLSContextBaseInit(); + + NSString* tempDir = NSTemporaryDirectory(); + self.kvPath = [tempDir stringByAppendingPathComponent:@"kv.clsrecord"]; + self.compactedKVPath = [tempDir stringByAppendingPathComponent:@"compacted_kv.clsrecord"]; + self.logAPath = [tempDir stringByAppendingPathComponent:@"loga.clsrecord"]; + self.logBPath = [tempDir stringByAppendingPathComponent:@"logb.clsrecord"]; + self.errorAPath = [tempDir stringByAppendingPathComponent:CLSReportErrorAFile]; + self.errorBPath = [tempDir stringByAppendingPathComponent:CLSReportErrorBFile]; + + _clsContext.readonly->logging.userKVStorage.incrementalPath = + strdup([self.kvPath fileSystemRepresentation]); + _clsContext.readonly->logging.userKVStorage.compactedPath = + strdup([self.compactedKVPath fileSystemRepresentation]); + _clsContext.readonly->logging.logStorage.aPath = strdup([self.logAPath fileSystemRepresentation]); + _clsContext.readonly->logging.logStorage.bPath = strdup([self.logBPath fileSystemRepresentation]); + _clsContext.readonly->logging.errorStorage.aPath = + strdup([self.errorAPath fileSystemRepresentation]); + _clsContext.readonly->logging.errorStorage.bPath = + strdup([self.errorBPath fileSystemRepresentation]); + _clsContext.readonly->logging.userKVStorage.maxIncrementalCount = FIRCLSUserLoggingMaxKVEntries; + + _clsContext.readonly->logging.logStorage.maxSize = 64 * 1024; + _clsContext.readonly->logging.logStorage.restrictBySize = true; + _clsContext.readonly->logging.errorStorage.maxSize = 64 * 1024; + _clsContext.readonly->logging.errorStorage.restrictBySize = false; + _clsContext.readonly->logging.errorStorage.maxEntries = 8; + _clsContext.readonly->logging.errorStorage.entryCount = + &_clsContext.writable->logging.errorsCount; + _clsContext.readonly->logging.userKVStorage.maxCount = 64; + + _clsContext.writable->logging.activeUserLogPath = _clsContext.readonly->logging.logStorage.aPath; + _clsContext.writable->logging.activeErrorLogPath = + _clsContext.readonly->logging.errorStorage.aPath; + _clsContext.writable->logging.userKVCount = 0; + _clsContext.writable->logging.internalKVCount = 0; + _clsContext.writable->logging.errorsCount = 0; + + _clsContext.readonly->initialized = true; + + for (NSString* path in @[ + self.kvPath, self.compactedKVPath, self.logAPath, self.logBPath, self.errorAPath, + self.errorBPath + ]) { + [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; + } +} + +- (void)tearDown { + free((void*)_clsContext.readonly->logging.userKVStorage.incrementalPath); + free((void*)_clsContext.readonly->logging.userKVStorage.compactedPath); + free((void*)_clsContext.readonly->logging.logStorage.aPath); + free((void*)_clsContext.readonly->logging.logStorage.bPath); + free((void*)_clsContext.readonly->logging.errorStorage.aPath); + free((void*)_clsContext.readonly->logging.errorStorage.bPath); + + FIRCLSContextBaseDeinit(); + + [super tearDown]; +} + +- (NSArray*)incrementalKeyValues { + return FIRCLSUserLoggingStoredKeyValues( + _clsContext.readonly->logging.userKVStorage.incrementalPath); +} + +- (NSArray*)compactedKeyValues { + return FIRCLSUserLoggingStoredKeyValues( + _clsContext.readonly->logging.userKVStorage.compactedPath); +} + +- (NSArray*)logAContents { + return FIRCLSFileReadSections([self.logAPath fileSystemRepresentation], true, nil); +} + +- (NSArray*)logBContents { + return FIRCLSFileReadSections([self.logBPath fileSystemRepresentation], true, nil); +} + +- (NSArray*)errorAContents { + return FIRCLSFileReadSections([self.errorAPath fileSystemRepresentation], true, nil); +} + +- (NSArray*)errorBContents { + return FIRCLSFileReadSections([self.errorBPath fileSystemRepresentation], true, nil); +} + +- (void)testKeyValueWithNilKey { + FIRCLSUserLoggingRecordUserKeyValue(nil, @"some string value"); + + XCTAssertEqual([self incrementalKeyValues].count, 0, @""); +} + +- (void)testKeyValueWithNilValue { + FIRCLSUserLoggingRecordUserKeyValue(@"mykey", nil); + + XCTAssertEqual([[self incrementalKeyValues] count], 1, @""); +} + +- (void)testKeyValueWithNilValueCompaction { + for (int i = 0; i < FIRCLSUserLoggingMaxKVEntries - 1; i++) { + FIRCLSUserLoggingRecordUserKeyValue(@"mykey", [NSString stringWithFormat:@"myvalue%i", i]); + } + FIRCLSUserLoggingRecordUserKeyValue(@"mykey", nil); + + XCTAssertEqual([[self compactedKeyValues] count], 0, + @"Key with last value of nil was not removed in compaction."); +} + +- (void)testKeyValueWithNilKeyAndValue { + FIRCLSUserLoggingRecordUserKeyValue(nil, nil); + + XCTAssertEqual([[self incrementalKeyValues] count], 0, @""); +} + +- (void)testKeyValueLog { + FIRCLSUserLoggingRecordUserKeyValue(@"mykey", @"some string value"); + + NSArray* keyValues = [self incrementalKeyValues]; + + XCTAssertEqual([keyValues count], 1, @""); + XCTAssertEqualObjects(keyValues[0][@"key"], @"6d796b6579", @""); + XCTAssertEqualObjects(keyValues[0][@"value"], @"736f6d6520737472696e672076616c7565", @""); +} + +- (void)testKeyValueLogSingleKeyCompaction { + for (NSUInteger i = 0; i < FIRCLSUserLoggingMaxKVEntries; ++i) { + FIRCLSUserLoggingRecordUserKeyValue( + @"mykey", [NSString stringWithFormat:@"some string value: %lu", (unsigned long)i]); + } + + // we now need to wait for compaction to complete + dispatch_sync(FIRCLSGetLoggingQueue(), ^{ + NSLog(@"queue emptied"); + }); + + NSArray* keyValues = [self incrementalKeyValues]; + NSArray* compactedKeyValues = [self compactedKeyValues]; + + XCTAssertEqual([keyValues count], 0, @""); + XCTAssertEqual([compactedKeyValues count], 1, @""); + XCTAssertEqualObjects(compactedKeyValues[0][@"key"], @"6d796b6579", @""); + + // the final value of this key should be "some string value: 63" + XCTAssertEqualObjects(compactedKeyValues[0][@"value"], + @"736f6d6520737472696e672076616c75653a203633", @""); +} + +- (void)testKeyValueLogMoreThanMaxKeys { + // we need to end up with max + 1 keys written + for (NSUInteger i = 0; i <= _clsContext.readonly->logging.userKVStorage.maxCount + 1; ++i) { + NSString* key = [NSString stringWithFormat:@"key%lu", (unsigned long)i]; + NSString* value = [NSString stringWithFormat:@"some string value: %lu", (unsigned long)i]; + + FIRCLSUserLoggingRecordUserKeyValue(key, value); + } + + // Do a full compaction here. This does two things. First, it makes sure + // we don't have any incremental keys. It also accounts for differences between + // the max and incremental values. + dispatch_sync(FIRCLSGetLoggingQueue(), ^{ + FIRCLSUserLoggingCompactKVEntries(&_clsContext.readonly->logging.userKVStorage); + }); + + NSArray* keyValues = [self incrementalKeyValues]; + NSArray* compactedKeyValues = [self compactedKeyValues]; + + XCTAssertEqual([keyValues count], 0, @""); + XCTAssertEqual([compactedKeyValues count], 64, @""); +} + +- (void)testUserLogNil { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnonnull" + FIRCLSLog(nil); +#pragma clang diagnostic pop + + XCTAssertEqual([[self logAContents] count], 0, @""); +} + +- (void)testLargeLogLine { + size_t strLength = 100 * 1024; // Attempt to write 100k of data + char* longLine = malloc(strLength + 1); + memset(longLine, 'a', strLength); + longLine[strLength] = '\0'; + NSString* longStr = [[NSString alloc] initWithBytesNoCopy:longLine + length:strLength + encoding:NSUTF8StringEncoding + freeWhenDone:YES]; + + FIRCLSLog(@"%@", longStr); + + NSArray* array = [self logAContents]; + NSString* message = array[0][@"log"][@"msg"]; + XCTAssertEqual(message.length, _clsContext.readonly->logging.logStorage.maxSize * 2, + "message: \"%@\"", message); +} + +- (void)testUserLog { + FIRCLSLog(@"some value"); + + NSArray* array = [self logAContents]; + + XCTAssertEqual([array count], 1, @""); + XCTAssertEqualObjects(array[0][@"log"][@"msg"], @"736f6d652076616c7565", @""); +} + +- (void)testUserLogRotation { + // tune this carefully, based on max file size + for (int i = 0; i < 969; ++i) { + FIRCLSLog(@"some value %d", i); + } + + NSArray* logA = [self logAContents]; + NSArray* logB = [self logBContents]; + + XCTAssertEqual([logA count], 968, @""); + XCTAssertEqual([logB count], 1, @""); +} + +- (void)testUserLogRotationBackToBeginning { + // careful tuning needs to be done to make sure there's exactly one entry + for (int i = 0; i < 1907; ++i) { + FIRCLSLog(@"some value %d", i); + } + + NSArray* logA = [self logAContents]; + NSArray* logB = [self logBContents]; + + XCTAssertEqual([logA count], 1, @""); + XCTAssertEqual([logB count], 938, @""); + + // We need to verify that things have rolled correctly. This means log A should now have the + // very last value, and log b should have the second-to-last. + XCTAssertEqualObjects(logA[0][@"log"][@"msg"], @"736f6d652076616c75652031393036", + @""); // "some value 1906" + XCTAssertEqualObjects(logB[937][@"log"][@"msg"], @"736f6d652076616c75652031393035", + @""); // "some value 1905" +} + +- (void)testLoggedError { + NSError* error = [NSError errorWithDomain:@"My Custom Domain" + code:-1 + userInfo:@{@"key1" : @"value", @"key2" : @"value2"}]; + + FIRCLSUserLoggingRecordError(error, @{@"additional" : @"key"}); + + NSArray* errors = [self errorAContents]; + + XCTAssertEqual([errors count], 1, @""); + + NSDictionary* errorDict = errors[0][@"error"]; + + XCTAssertNotNil(errorDict, @""); + + XCTAssert([errorDict[@"stacktrace"] count] > 5, @"should have at least a few frames"); + XCTAssertEqualObjects(errorDict[@"domain"], @"4d7920437573746f6d20446f6d61696e", @""); + XCTAssertEqual([errorDict[@"code"] integerValue], -1, @""); + + // this requires a sort to be non-flakey + NSArray* userInfoEntries = + [errorDict[@"info"] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { + return [obj1[0] compare:obj2[0]]; + }]; + + NSArray* entryOne = @[ @"6b657931", @"76616c7565" ]; + NSArray* entryTwo = @[ @"6b657932", @"76616c756532" ]; + + XCTAssertEqual([userInfoEntries count], 2, @""); + XCTAssertEqualObjects(userInfoEntries[0], entryOne, @""); + XCTAssertEqualObjects(userInfoEntries[1], entryTwo, @""); + + NSArray* additionalEntries = errorDict[@"extra_info"]; + entryOne = @[ @"6164646974696f6e616c", @"6b6579" ]; + + XCTAssertEqual([additionalEntries count], 1, @""); + XCTAssertEqualObjects(additionalEntries[0], entryOne, @""); +} + +- (void)testWritingMaximumNumberOfLoggedErrors { + NSError* error = [NSError errorWithDomain:@"My Custom Domain" + code:-1 + userInfo:@{@"key1" : @"value", @"key2" : @"value2"}]; + + for (size_t i = 0; i < _clsContext.readonly->logging.errorStorage.maxEntries; ++i) { + FIRCLSUserLoggingRecordError(error, nil); + } + + NSArray* errors = [self errorAContents]; + + XCTAssertEqual([errors count], 8, @""); + + // at this point, if we log one more, we should expect a roll over to the next file + + FIRCLSUserLoggingRecordError(error, nil); + + XCTAssertEqual([[self errorAContents] count], 8, @""); + XCTAssertEqual([[self errorBContents] count], 1, @""); + XCTAssertEqual(*_clsContext.readonly->logging.errorStorage.entryCount, 1); + + // and our next entry should continue into the B file + + FIRCLSUserLoggingRecordError(error, nil); + + XCTAssertEqual([[self errorAContents] count], 8, @""); + XCTAssertEqual([[self errorBContents] count], 2, @""); + XCTAssertEqual(*_clsContext.readonly->logging.errorStorage.entryCount, 2); +} + +- (void)testLoggedErrorWithNullsInAdditionalInfo { + NSError* error = [NSError errorWithDomain:@"Domain" code:-1 userInfo:nil]; + + FIRCLSUserLoggingRecordError(error, @{@"null-key" : [NSNull null]}); + + NSArray* errors = [self errorAContents]; + + XCTAssertEqual([errors count], 1, @""); + + NSDictionary* errorDict = errors[0][@"error"]; + + XCTAssertNotNil(errorDict, @""); + + XCTAssert([errorDict[@"stacktrace"] count] > 5, @"should have at least a few frames"); + XCTAssertEqualObjects(errorDict[@"domain"], @"446f6d61696e", @""); + XCTAssertEqual([errorDict[@"code"] integerValue], -1, @""); + + XCTAssertEqual([errorDict[@"info"] count], 0, @""); + + NSArray* additionalEntries = errorDict[@"extra_info"]; + NSArray* entryOne = @[ @"6e756c6c2d6b6579", @"3c6e756c6c3e" ]; + + XCTAssertEqual([additionalEntries count], 1, @""); + XCTAssertEqualObjects(additionalEntries[0], entryOne, @""); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.h b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.h new file mode 100644 index 000000000000..f2ee93121336 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.h @@ -0,0 +1,19 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FIRCLSMachOBinaryTests : XCTestCase + +@end diff --git a/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.m b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.m new file mode 100644 index 000000000000..0f7244e2c5f3 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOBinaryTests.m @@ -0,0 +1,51 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMachOBinaryTests.h" + +#import "FIRCLSMachOBinary.h" + +@implementation FIRCLSMachOBinaryTests + +- (NSString*)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSURL*)URLForResource:(NSString*)resource { + NSString* path; + + path = [[self resourcePath] stringByAppendingPathComponent:resource]; + + return [NSURL fileURLWithPath:path]; +} + +- (void)testInstanceIdentifierForSingleArchdSYM { + FIRCLSMachOBinary* binary; + + binary = [[FIRCLSMachOBinary alloc] initWithURL:[self URLForResource:@"x86_64-executable"]]; + + XCTAssertEqualObjects([binary instanceIdentifier], @"442eb836efe1f56bf8a65b2a0a78b2f8d3e792e7", + @""); +} + +- (void)testInstanceIdentifierForMultipleArchitectures { + FIRCLSMachOBinary* binary; + + binary = [[FIRCLSMachOBinary alloc] initWithURL:[self URLForResource:@"armv7-armv7s-executable"]]; + + XCTAssertEqualObjects([binary instanceIdentifier], @"80cc0ec0af8a0169831abcc73177eb2b57990bc0", + @""); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.h b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.h new file mode 100644 index 000000000000..30596bfd1424 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.h @@ -0,0 +1,19 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FIRCLSMachOTests : XCTestCase + +@end diff --git a/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.m b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.m new file mode 100644 index 000000000000..a80871548b4e --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSMachOTests.m @@ -0,0 +1,331 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMachOTests.h" + +#import "FIRCLSMachO.h" + +#import "FIRCLSMachOBinary.h" +#import "FIRCLSMachOSlice.h" +#import "FIRCLSdSYM.h" + +@implementation FIRCLSMachOTests + +- (NSString*)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSArray*)sortedArchitectures:(id)obj { + NSMutableArray* archs; + + archs = [NSMutableArray array]; + [obj enumerateUUIDs:^(NSString* uuid, NSString* architecture) { + [archs addObject:architecture]; + }]; + + // sort the array, so we always get back the results in the same order + [archs sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { + return [obj1 caseInsensitiveCompare:obj2]; + }]; + + return archs; +} + +- (void)testThinDSYM { + FIRCLSdSYM* dSYM; + NSString* path; + NSArray* archs; + + path = [[self resourcePath] stringByAppendingPathComponent:@"i386-simulator.dSYM"]; + dSYM = [FIRCLSdSYM dSYMWithURL:[NSURL fileURLWithPath:path]]; + archs = [self sortedArchitectures:dSYM]; + + XCTAssertEqual((NSUInteger)1, [archs count], @""); + XCTAssertEqualObjects(@"i386", [archs objectAtIndex:0], @""); +} + +- (void)testFatDSYM { + FIRCLSdSYM* dSYM; + NSString* path; + NSArray* archs; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7-armv7s.dSYM"]; + dSYM = [FIRCLSdSYM dSYMWithURL:[NSURL fileURLWithPath:path]]; + archs = [self sortedArchitectures:dSYM]; + + XCTAssertEqual((NSUInteger)2, [archs count], @""); + XCTAssertEqualObjects(@"armv7", [archs objectAtIndex:0], @""); + XCTAssertEqualObjects(@"armv7s", [archs objectAtIndex:1], @""); +} + +- (void)testFatExecutable { + FIRCLSMachOBinary* binary; + NSString* path; + NSArray* archs; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7-armv7s-executable"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + archs = [self sortedArchitectures:binary]; + + XCTAssertEqual((NSUInteger)2, [archs count], @""); + XCTAssertEqualObjects(@"armv7", [archs objectAtIndex:0], @""); + XCTAssertEqualObjects(@"armv7s", [archs objectAtIndex:1], @""); +} + +- (void)testArm64 { + FIRCLSMachOBinary* binary; + NSString* path; + NSArray* archs; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7-armv7s-arm64.dylib"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + archs = [self sortedArchitectures:binary]; + + XCTAssertEqual((NSUInteger)3, [archs count], @""); + XCTAssertEqualObjects(@"arm64", [archs objectAtIndex:0], @""); + XCTAssertEqualObjects(@"armv7", [archs objectAtIndex:1], @""); + XCTAssertEqualObjects(@"armv7s", [archs objectAtIndex:2], @""); +} + +- (void)testArmv7k { + FIRCLSMachOBinary* binary; + NSString* path; + NSArray* archs; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7k"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + archs = [self sortedArchitectures:binary]; + + XCTAssertEqual((NSUInteger)1, [archs count], @""); + XCTAssertEqualObjects(@"armv7k", [archs objectAtIndex:0], @""); +} + +- (void)testReadMinimumWatchOSSDKRequirements { + FIRCLSMachOBinary* binary; + FIRCLSMachOSlice* slice; + NSString* path; + FIRCLSMachOVersion version; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7k"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + slice = [binary sliceForArchitecture:@"armv7k"]; + + version = [slice minimumOSVersion]; + XCTAssertEqual((uint32_t)2, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); + + version = [slice linkedSDKVersion]; + XCTAssertEqual((uint32_t)2, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); +} + +- (void)testReadMinimumWatchOSSimulatorSDKRequirements { + FIRCLSMachOBinary* binary; + FIRCLSMachOSlice* slice; + NSString* path; + FIRCLSMachOVersion version; + + path = [[self resourcePath] stringByAppendingPathComponent:@"watchOS-simulator"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + slice = [binary sliceForArchitecture:@"i386"]; + + version = [slice minimumOSVersion]; + XCTAssertEqual((uint32_t)2, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); + + version = [slice linkedSDKVersion]; + XCTAssertEqual((uint32_t)2, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); +} + +- (void)testReadMinimumTVOSSDKRequirements { + FIRCLSMachOBinary* binary; + FIRCLSMachOSlice* slice; + NSString* path; + FIRCLSMachOVersion version; + + path = [[self resourcePath] stringByAppendingPathComponent:@"tvos-binary"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + slice = [binary sliceForArchitecture:@"arm64"]; + + version = [slice minimumOSVersion]; + XCTAssertEqual((uint32_t)8, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); + + version = [slice linkedSDKVersion]; + XCTAssertEqual((uint32_t)9, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); +} + +- (void)testReadMinimumTVOSSimulatorSDKRequirements { + FIRCLSMachOBinary* binary; + FIRCLSMachOSlice* slice; + NSString* path; + FIRCLSMachOVersion version; + + path = [[self resourcePath] stringByAppendingPathComponent:@"tvsimulator-binary"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + slice = [binary sliceForArchitecture:@"x86_64"]; + + version = [slice minimumOSVersion]; + XCTAssertEqual((uint32_t)8, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); + + version = [slice linkedSDKVersion]; + XCTAssertEqual((uint32_t)9, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); +} + +- (void)testLinkedDylibs { + FIRCLSMachOBinary* binary; + FIRCLSMachOSlice* slice; + NSString* path; + NSArray* dylibs; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7-armv7s-executable"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + slice = [binary sliceForArchitecture:@"armv7"]; + + XCTAssertNotNil(slice, @""); + + dylibs = [[slice linkedDylibs] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { + return [obj1 compare:obj2 options:NSCaseInsensitiveSearch]; + }]; + + XCTAssertEqual([dylibs count], (NSUInteger)7, @""); + XCTAssertEqualObjects([dylibs objectAtIndex:0], + @"/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", @""); + XCTAssertEqualObjects([dylibs objectAtIndex:1], + @"/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics", @""); + XCTAssertEqualObjects([dylibs objectAtIndex:2], + @"/System/Library/Frameworks/Foundation.framework/Foundation", @""); + XCTAssertEqualObjects([dylibs objectAtIndex:3], + @"/System/Library/Frameworks/UIKit.framework/UIKit", @""); + XCTAssertEqualObjects([dylibs objectAtIndex:4], @"/usr/lib/libobjc.A.dylib", @""); + XCTAssertEqualObjects([dylibs objectAtIndex:5], @"/usr/lib/libstdc++.6.dylib", @""); + XCTAssertEqualObjects([dylibs objectAtIndex:6], @"/usr/lib/libSystem.B.dylib", @""); +} + +- (void)testReadMinimumiOSSDKRequirements { + FIRCLSMachOBinary* binary; + FIRCLSMachOSlice* slice; + NSString* path; + FIRCLSMachOVersion version; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7-armv7s-executable"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + slice = [binary sliceForArchitecture:@"armv7"]; + + version = [slice minimumOSVersion]; + XCTAssertEqual((uint32_t)5, version.major, @""); + XCTAssertEqual((uint32_t)1, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); + + version = [slice linkedSDKVersion]; + XCTAssertEqual((uint32_t)6, version.major, @""); + XCTAssertEqual((uint32_t)0, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); +} + +- (void)testReadMinimumOSXSDKRequirements { + FIRCLSMachOBinary* binary; + FIRCLSMachOSlice* slice; + NSString* path; + FIRCLSMachOVersion version; + + path = [[self resourcePath] stringByAppendingPathComponent:@"x86_64-executable"]; + binary = [FIRCLSMachOBinary MachOBinaryWithPath:path]; + slice = [binary sliceForArchitecture:@"x86_64"]; + + version = [slice minimumOSVersion]; + XCTAssertEqual((uint32_t)10, version.major, @""); + XCTAssertEqual((uint32_t)7, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); + + version = [slice linkedSDKVersion]; + XCTAssertEqual((uint32_t)10, version.major, @""); + XCTAssertEqual((uint32_t)8, version.minor, @""); + XCTAssertEqual((uint32_t)0, version.bugfix, @""); +} + +- (void)testReadx86_64Section { + NSString* path = [[self resourcePath] stringByAppendingPathComponent:@"x86_64-executable"]; + struct FIRCLSMachOFile file; + + XCTAssert(FIRCLSMachOFileInitWithPath(&file, [path fileSystemRepresentation])); + + struct FIRCLSMachOSlice slice = FIRCLSMachOFileSliceWithArchitectureName(&file, "x86_64"); + + XCTAssert(FIRCLSMachOSliceIs64Bit(&slice)); + + FIRCLSMachOSection section; + XCTAssert(FIRCLSMachOSliceInitSectionByName(&slice, SEG_TEXT, "__eh_frame", §ion)); + XCTAssertEqual(section.addr, 0x10001c9e0); + XCTAssertEqual(section.offset, 117216); + XCTAssertEqual(section.size, 0x2618); + + const void* ptr = NULL; + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__eh_frame", &ptr)); + XCTAssert(ptr != NULL); +} + +- (void)testReadArmv7kSection { + NSString* path = [[self resourcePath] stringByAppendingPathComponent:@"armv7k"]; + struct FIRCLSMachOFile file; + + XCTAssert(FIRCLSMachOFileInitWithPath(&file, [path fileSystemRepresentation])); + + struct FIRCLSMachOSlice slice = FIRCLSMachOFileSliceWithArchitectureName(&file, "armv7k"); + + FIRCLSMachOSection section; + XCTAssert(FIRCLSMachOSliceInitSectionByName(&slice, SEG_TEXT, "__unwind_info", §ion)); + XCTAssertEqual(section.addr, 0x23c4c); + XCTAssertEqual(section.offset, 130124); + XCTAssertEqual(section.size, 0x000002d8); + + const void* ptr = NULL; + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__unwind_info", &ptr)); + XCTAssert(ptr != NULL); +} + +- (void)testReadArm64Section { + NSString* path = [[self resourcePath] stringByAppendingPathComponent:@"armv7-armv7s-arm64.dylib"]; + struct FIRCLSMachOFile file; + + XCTAssert(FIRCLSMachOFileInitWithPath(&file, [path fileSystemRepresentation])); + + struct FIRCLSMachOSlice slice = FIRCLSMachOFileSliceWithArchitectureName(&file, "arm64"); + + XCTAssert(FIRCLSMachOSliceIs64Bit(&slice)); + + FIRCLSMachOSection section; + XCTAssert(FIRCLSMachOSliceInitSectionByName(&slice, SEG_TEXT, "__unwind_info", §ion)); + XCTAssertEqual(section.addr, 0x1ffa9); + XCTAssertEqual(section.offset, 130985); + XCTAssertEqual(section.size, 0x48); + + const void* ptr = NULL; + XCTAssert(FIRCLSMachOSliceGetSectionByName(&slice, SEG_TEXT, "__unwind_info", &ptr)); + XCTAssert(ptr != NULL); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.h b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.h new file mode 100644 index 000000000000..816ef7a25363 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.h @@ -0,0 +1,19 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FIRCLSdSYMTests : XCTestCase + +@end diff --git a/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.m b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.m new file mode 100644 index 000000000000..fdd7f063d7c1 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/FIRCLSdSYMTests.m @@ -0,0 +1,54 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSdSYMTests.h" + +#import "FIRCLSdSYM.h" + +@implementation FIRCLSdSYMTests + +- (NSString*)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (void)testBundleIdAndExecutablePath { + FIRCLSdSYM* dSYM; + NSString* path; + + path = [[self resourcePath] stringByAppendingPathComponent:@"i386-simulator.dSYM"]; + dSYM = [FIRCLSdSYM dSYMWithURL:[NSURL fileURLWithPath:path]]; + + XCTAssertEqualObjects(@"com.crashlytics.ios.CrashTest", [dSYM bundleIdentifier], @""); + XCTAssertTrue([[dSYM executablePath] hasSuffix:@"CrashTest"], @""); +} + +- (void)testUUIDsInFatFile { + FIRCLSdSYM* dSYM; + NSString* path; + NSMutableDictionary* uuids; + + path = [[self resourcePath] stringByAppendingPathComponent:@"armv7-armv7s.dSYM"]; + dSYM = [FIRCLSdSYM dSYMWithURL:[NSURL fileURLWithPath:path]]; + + uuids = [NSMutableDictionary dictionary]; + [dSYM enumerateUUIDs:^(NSString* uuid, NSString* architecture) { + [uuids setObject:uuid forKey:architecture]; + }]; + + XCTAssertEqual((NSUInteger)2, [uuids count], @""); + XCTAssertEqualObjects([uuids objectForKey:@"armv7"], @"794523cb14ef3e6bb32a4ea39a7ac677", @""); + XCTAssertEqualObjects([uuids objectForKey:@"armv7s"], @"0d1450b08b5e35b8bf1e442b7be4666b", @""); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s-arm64.dylib b/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s-arm64.dylib new file mode 100755 index 0000000000000000000000000000000000000000..740b7ffe64181b4c50ed3f0a24186a234de15a09 GIT binary patch literal 495440 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�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 &uJF4bAOZ+(Zj58HCHR@GHH?X)6k&enxTB2`u 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 literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s-executable b/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s-executable new file mode 100755 index 0000000000000000000000000000000000000000..e4e87ba50a0622d71866f7dea1cb1f4ec554d8cf GIT binary patch literal 715024 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 z z#o93T5p-%B<;QMhlw(EanG2fJhKf+LC|o0&s^-G~`pLyY{ARv&VdSb{O>|d7dG}S} znrNfEO@}qBuswqXs9O-OKO#)dJW(5Nlvn6AEbh6GlMe<*&(?;oiZ;m`I1QPBMtP22 zt6563Q4ieGTWU@0C8p5&NxepEy4qfBFdyx~7I;w(2{r_*m2<^>@bSsPJiN&RC5Fjq zC)f^kUF4eJBysnjhyz-zCIhWMqGPqGSRWkBRk1#zW6c28TwvWk=)@am*ie&pIu+;2 zKQ$`bxaAW9wUKGy%^Ys0Njo#uJ~=Sv#gNOJ26I&W3v~Q;;CF;`ARYd}Y`n`3PlP1a zI9YG4pi$ccu?4bJKF%7sbbUiQt@c$AHrS-@GQaE-qPze zOF5k9R<-6d)O?lmgldLUYC3pLd4R^TQE4@3tu@MR+@|IRoZzFuV@H3Pj(#+d32L$D z%zJDC)&{O;hCnWQZx3gJ(qk&tiP32tjj}tX)jZzn%Xm-yoy4i5(R;s2qaa@$y{88< z&=!-|jEE=biQM1d>GnjXM+?vnOv~Zp14wtC7sxbm}&>NTDE3>;)?bme!7Sx>{Ed#7jX@O36!>6LTvWm$7 zrmEI8!rWVixwkHS zjd*S6H4!6vSUq42`wmybc2>i7{@XbhEGf$vYF0*D{~Q0NMCM|&-I9G^Zn&bxAQpdU zP!C*3%r&r4HuC~Bz3=%d{zALBEz^=FN8C!gtQ?#YEV=i80g^);wgel0L<>^H#Q%Ib(VU~W1ggtIXN zxutMF^B*z)SPt^sC$DUXWA&2 z-HcI1o@s?x9xMx;!VFj*aR*$gmc5r)*;cr}U|&9VgO|XgUVu1-FYegumMZ#%a}Hw> zJVaNA3)B|&m%>7pU>B<_QV5@s;*7+PjQ(=5$~SiIM@w@A&2LS)48USb~lHMfg$9o$lDU!j-{&gOs*j4QYG6^L2ke9<0xG_k}% zdp_QpHu>?k+^`@$`~{Oag{6*{CABVv%mFIWII_X6YJ=RG3Sz_U`b zxF`d{r(|$QLCxt}A~?f^@R;3_&40UzUWgv;cYn~2|~b%(I)#g&`bTGdIjij z5$fHd)1>bqC>yvR#b_eUbxYm7rIB>-E)9NA8rlC|qRr5q8!iSWLtUg9tvigQ~)-4nef5$kHkv#Yy(%5gpi`IR#_ zGEV!Hzi|0#l(qfe(}@7(a3BkcG~Qr0gI*Ifz6Cy)72e6_UdlH&BO{mc6%DWlSiy=y zXpvv&a7*iYi?N?1NO_+Zhs$E37MrVt?hB1dt%0?R>^O0WO#UWCVwr4M4w-{yXpckH z9vT6mM(DmiZh?hF6r>6m3~5;J?P(BBTpeE`Z{*OHL;PKb3A{7`gPmiD_Y#J3o|WcP z6mI1p_uR(i2GXEa&63$hd7^BcV(i6A9_tiphh`|Z)Y9uycA+(rwREhx%x;z;hw<+j zJzw)zEe`r4J?;N^Hm>> z9+MlvPLe@%w}A2$J#-$y6g8;1XjcD1lr8O{oe!Gp9*I#*AXB9}Q>FTjcm}Bc$pz90 z;lw($?`~!73xUiCX`dif=zW^S>BtROJ7`Tn8kUBZ)1$QREa{{NSq718CpYkbRcb!I_9q9uwXIqeWY(@s03Hjc}_A2E6vz@aHRq9a7 zL2K<2e-+mM=13+Y6HaIew1apNt&)B_Ogm`Q=SO3|gZ3;ygbCJm2W(O{PmEkHik*Roy)Bv+!h8{`l0F#D(&gpB zm`^t9Bf4=p8&Q)#H_)BP7rT+ahSd@Jw8(F0UyFWi#VXzyesg^WH0>QkI#|Y)*hJAz z>equj)=#lJBlf=x=kiU2iAnK7VAwp&b_0a4aL#2QiJ*C$-rP2vj(*~*7rZG`-<0t; zD~2`vyZ9af#atWKQ!ZSUv}Bm?8-#bQr{BKebk$l2;kVS^^HSE`$i-IMpf$WPWQ4TM zJY|HeeJ#OsmGF|JxZ^(g2`+O!c^&7FUpZuC95SdglK@GpLIi-cvP$~PkoSn8#=_TJ zk0$a3YaB7#I-_`;`&<1~1NO137JYS;Sz{>WbpJjm>?3V_sq@zPwsx}p%f95~%6|8tPj@e!HS$)dM znL75U3tY^=diNeaOQY6iNabdq{2|wdQb=))=t6roNU{}n*4B}Z_)2<5m9$|fPt3zU zb<)BWivPlGE->8!^7`Yjoj?92he&t4uCZn79R3&|k z^$c50G07@K?6*pKchC^e2gah#LaZ;Uq)!Kp;p(qkUpUpiR7sReV8r?&hp#WJhGJw^ zIYkGs92`6gZ-M=KMqNwPxs1XmxS)y4nB{n^UfIm07=C16VbCW};xzl@ccBwB^Z1ng zd3b_6HHl4O8l9<-sVU$^m9%Ye3Z#5$bTXu6GB~qoka%n1ynQrLY53+ROwxSv?0Uux zzr2B4lqOYQAVa{ke6WVBu_Wx$>YMfY*N>@B8I@Jib%R%_^?UBu>i?EYuU{@1Q-6|L z-#s`9^)20u`$U=iC!hQ>mm#0LUxz-^!1~Roo2Wt?2Pdl9JTd@X=CKaK(G47*>NuiK z)lA@9P8O`TH+_V*RhgXbHx7&-mn8y~PsVqF=Tz0X=Ho#R#7fQu8iOU4ysS zRq)A2C*cW^d7u0ekIW+`-v)|*G6&hDUVlY!roTM2++T*c+QxXvzGBQutKnI#?5dJl z2mGR+<@FK$*#GxqO@-`G^;ZjimFmB4#xKg|WAARlFPHvn$v_37gYO(EM}NBqeDVR! z%a9+d0(I~*{P4ypf3ylK-9qrk=y&i~^SqyBor~ED@Qyr|DrpkVY2+j3_}^`eOY@$w z&b&UF8_4g-3*`o(C+*I#Ba#cBo2=Oqad9JMZX3G`pwULO{geYO!p8XJmw4OXh~{)O z_dQ@+gbZ3=$OlRUHD5FQ`^gOd zDy;v5R=h#Yvna?$(qxH&TT!Mta;|bh#7+4q;8w^3r$vEq^h_8vOB!55oD)-0c zD^GJ?VlP0~<0t2%eb_+E?zEeT6+)GiNZFr%2ylHIZoVRN3*?h;=5VxrAls?s^j0DJ zpK|xpc*YTAU0sQ$a9H>z?**GH<}155GaevM%*3dHW~%e039}RP)2pPzeY8$Np1WAm z%|>LtvV>FCs9fMU(o=kuy?p{8ynGF;?p&)Y-%9u;l>+Vkbom)?8kKA(T80j?m=o$pbS?%xsBIJ<)LF-o%=3B&qy!rEGNfQt5cKG*1)(rJ2{?I{+t?D=V@N2 zHU-bIadn>KbyEBF(zrSr9$yNcr^eNJo8w6xi_o|_uUv+nwsCdd;&oQ0w6$qW9priP zIwTcBfN7i+X9wG$Z4_$~YVx`l%Z+s`07J{c=vG|X+WkBa!vxGs?(RY(4@D}#9Mfaw=nF{TELwJ$X^kpKVL}Qi-fnl1-|+cfz>>Acz zuN+5D1mhBQpOy7^V-K@s6oDYS`Ox}34PQG+n7h`SBXuhMH_o^EjEHm?BMaACku^w9 zHasB?9c~KNak|xi{**A!Mw0HV359k!HM-kSHMw| ziPNC}-j=EE59He#=1lQVXqe+)x_r@h*4!^5_DH7+DUxiEzMaSb-T7iH&Pr`+X<@>q zmj0BNQY6G6Elya~(x_UR5m>06HZe$dB+}LL$MkZ_i8V-fCDPRLT_`u#<%>J<*NVUQ z;jaOIxAF4LynGY>5@i%uG)VagiweD#&sg-v5p-a$$=vP03{i>5k#-W4IF}3TdzqQ<#PzeMaqe9p@i1WxKSWKoXolZVNA_B3YpaL zGIi76?3z5j%AuGWGV@ew1VlI9fn;hcRkN5KS7iy(mn<{KF*`>_&wn2|o#L-9Q-^Fk)v5V{th`hFc}g9!^|a$STU-noq4ky^9lS^q z;}n1LCG}_ypn5ldK@#N@A64tsOBTae`pMc;yT`sDd+!wQ<@F4_UTWKPQju_e@P%2e zyEdh5jUTk*O!(GaBn@+lH*$Q&aqZGvK=nTPE9sO|{07#ZcG_#)UN5n_cAWPh4%03S z)yz?K$SKx*2}YV7sNU2Onjf5Eetfa=8}5lLR{mM{Lxr%*<@Q$pU?Uxxg^wt3JlS*{BYaIR+*(1*Z0k zu`q2qOok5QKsyF}VKU*S}q@1z)p?bFjvSSGh|tV_wA<3}BzE{K*s7$}04y zV*M>iLpN&DT)bF$O`nVBaA_#GS{thmda=i*+b5!hR)eu~!m6~B252X(>g)-lm=-sL z>vQlMx^WABGpGmnUYNGRYpe1720LO>8{ig|;UpNw%GzoSv)!~~UV>|@ne}(nsr)5_~oPLgQIEUt>`uN2J=m;LGJ}C zS%8vktcV4}F)u6GgOY+VCCAWrYfbh^3mdhF&0vU@Vbv^{PI;a4;Yr+`CSFY*iG(j7 z84M8?pE%*Q&gZS(4L);>SgWd7)b(ji&X~TFPcoLz182$4p)p|Z@Hrjq^3R*_Q@@B9 z%me(KAdMSV?$mGe5VZ2PgvbK?a_GPI;1^}pQD23~u~vuw%Xw)IJN={Q-ybDU$vlhA z#iQrn9%Z;`#${BHucXPFP}6)WL+zbGZDmwlp&L5pOKm1PFn}5Of ze<$A<)Hie+j$j-6#;Cq2xXc@q`ljqMZ_ITF(A7b4yguV9!94FD9Lur8)nwR&c4bdY%>K!eSvSPb4ER^WH+v$kgQ zDI*&{#7U?`m|#9-;w89O4;H0umH8C2S+xFUvaGd}T#JmJe_>RROgvV_+DCgQFKO@O zCGDNOq`i}0)*g+|1N!(7FGtTetL-ulT{?agA;&nwZ!#i=@b9B$aRwy93d&ed%-G?D z-TbWWF7wGWwclp&hDwBQnop+lk^(9@*Y*SRNoL2*qFpT!n$0I|ypAc(G=Wz8W5>%_ zW9b&c=`}|DKLeC#y>o)U7WJJ?eV2)M3_o#N;~X1N7Jt?5ljAqMk>zVA`PkEtbCRN7 z%;&P;Mx2n~#N2uIuVf=A52638mUHvvIGieuq(5be8aw_V&>Wn^gL#*)mmY{|zJWH2 zP@Hgrw09^uFa3zmGwkLzvB7qN^@{Cvn4`|tG|Y{b@C3=Io)Ixa7hkxToVjVXw(GMs zdCXQH*{2E8Ekgz|UG@K|VeMBBmYdYqNG(-;#Ge^%)Pmp|!p5HV=)EH_eP}^$e zf<^VYjKL%|bc&pMXP9XQH9dnwO={Wb`LB=SY#cC;o-e#e>o1BHP)-`tKgT8dCqT-_ z>R;Oo^EmwzAmy5bj@Ng}DR}m?tH1v{F3OygDas3tkS-sDT&p;=Qzdxj|aGn7l=(!F1z0FDm zU!PID;%CuV$MccXiI+ok(#I^~w2x!4yaaO%#V967;^6ZU!(`mDbs`piHgY)nGpvX^ zL#Go@p+!1lXYLZDZ-3D#cA_=%W#3xOd@I7;8C@(d)G=+q*@@2Z3*wvcqMx}AiK#~fBA@WN&Z1{r zhhm`cFevPN3sinmbijc<&K%^GWrte)TaZubRWle*Bioj!r!$0hJf z>kx6UsAGaOiSv*~Vct0Ck96qH0joL+%}SS7qvr+WT^_++ZhFvkB0Zc1>62cYfHVJO z>x0OpvqKWCU0$9?r`^f+p4wmat~|s6DK@jG;Z{By*&;dca2|q%v<2)@(QEZWI!-hz zPw8z6fyMHVb*fh46vBKJ%iNjF!s510;M~Z6rK`UV@?U8pBD%2Z=_KJ4$y0GJ7=xSk z;uycC5129YTCqkKbu9M zlKI0)s`sW)eXMdU)!)_I*p$+SNfhFDp8bb}*`5VXwy8PvEMF7yrJi2!%GH zVr4gO>%&SkJ$iC|dPm0w+V%fEGVk%X%YM#h$6ws6=Z$al9|h*4389NJH(1v0X=L9X zYXbG?r64pbA9D$yd@sXiNAG55MGca{V3P*Fpq+$w)~8298`3-ea0j(xJLj`eJ0IZ| zVNL2r&o3Q;uIiZ5qK=lda7JL)nuUQk*YJ5DsfV9VyGH9S&v|>_J}op zpu-U>sz$4E_u|5vX+Ucxd)|&JI2;Dtkud` zP5MnIKck9`ucGZVT4<>y!d)Qa!iMXRD zg$dGwy=kyt$r3@jGhq?y<-BF!yWo!4qt12i$UA~>rY(rQywz6`m8&O6M|;^?x>j9* zv$66jw<1ehfYjD?y_>KLc4!(-poEdLty<8JXs$!X9mWdQluj0Cw(Q|vI{zWmltbT| zm65yOCy&Hu@MqVUg7yy$mGGv$KG|e+AQ#vSYP$jxq}{zH{j>XhHg)j4wg!7_O;%E%K@=1-p83AO*>i(eoQd zv&C0|a{+L636uw1hv;D;cAl+1$J|2kKhfjD$ey*o2#YCl*Cl?U%N=VmYfOvYx>q8< zz&dDxw4leXwy2dLrZ}3Z${jc_6g~5cXko{xwNy6`5y!kxVG#XW{RSu^>D%4Iq|YmF z9V35qFE+{F3RV6JRrxD~{4Ig}t$-!9<4$x<{>Tr}sbz?zV%@`LsU*fOcy;yPXE!uZjLWMWS9OAQCx_%xHo`kfUX%?(2Uq;r9Uu!D1>Wk>?ehAHM9lqv6DiY#k9pJ)&f%9UGJv9 zM#QEKD(}d;X?04VQMGf8RivfIyaw%2)z;|tHmOm(gCgPOisf2LQi?3;*txW9VbUL96$HjMo z$3nk?y>~tE%l$|9{TH;;`e(?~f5Eo3BS$>wj1&c3kv9{r*gM#@IkCnSSwu4cMp)QV z;%)deoV%z+D}!A(m3SAm97D|@N;7B%NU52zRx4vQ={KmVT(tI7!d&_A+Fwx%YkwIr zPEO7MzfRG8mnv(iy6?ga@OI>v(ESSO!6DN9WXb6HjepG+e~Dcq>$+b;_enFB)ZtcG zoFpUNcZo+arr5>0^{p|w|LYXpXDz1czAL=4?!O{$L7yw6MMI?f$&%6YSO1miKFvAB z&%70NbwqEax&_evf{+WGw5~o*`&g?hq&-8I*ZteM?ypvLAG=|gdtA`{o1puvzf|`t z@YMslHJo(6@bA!l;0;tr3x-UfpPsJAS0sK7-N(Klbf3;%knZQ9?4MBP-Eb6?7md^X zH@{T(-$ZUU>HaG?sh!k)RyunA;Kiiw7eUgyp!>g0(S3$DRreWW5!e0421)l*%SO*{ zyQt}Y663F-`%Avh&Q&wr|MmZ8bf4wZ{xn9n=~jfw+sisjpE0?YDxD^1J2H?cPmFGw zhg=LURrYaz6E~(tD{y|kUde}7NqOmpK)t*&7thG|&cj{Dbm}$-P=^NU<-kmqsY`co zu-kIzp5weI&KZkY__9QW6dov{-NFE^fh#0&ARB)-__I3lRvSFIXlc&?Zg$q+w+&Qu zlt+pIAHWQ`nV%@YZ8}|a26~M@Q^mOnEjPf&r5s_x=2%^?T-U-V#H|J$71GK97k20B zW$ms6+?@=%DscM07<;xv$&vwAI76EL*CJ>RD`^<0tgMiZ;uim+NWDxq7*daM4j3&{ zUVMc#3%B1@2R&kSxJvYd-C|V)`+>oF`8Igej8n+yirR1%klhWFkBE_@lKevh{%^&8 z9HK}9-5FC^$xcwyNu~-Z4JQn+Zud{*F}+85juz<0UIU$&u9r)8;0dQI*hxKm*s6Yq z!bT@%9oEkD_6q4tza1WEI-;?6cGt@vVAVr3)yvj;Jb_c-8Rt>Gauc#@DAOGEzJ@2X z;8nKs7V72e_?c|-`-%5yVk_>5UITB|fqVFj82iKhxKUo^V`sk|5mEM44Lkq-2xaHg zD>ci3862!vrehbGTEqDF+YwdNz8XdMw&$xoSS0@&_)T{-(s{iK-2YEF4AFYU$YI&- z^A%DnFwiMNiv91#T&g|wd3g)# zU%h-B^NV)Rk_GWyip@|K%|e_#HK5ne^&vLTM!%1^rhR{*0=x1_-g%WxI!)X2F6G_B zI!(J%Xxams8g!awbDF&R-2q-D%&h{g^wZTZaUiBBn%hmFY&GuVr(3ybwOkB2T7lnY z{HFaw`n{~rM5CQ z+%{$ZWO!Hy;in(KsyZB>xVHlL|6e0sgZo1=0&^*9tLlk*Yd`uq&^rnJ@I>jxemAV> zncl1LyBhlP3FkDO?ZSCr^zeh;Yr=Gbu3q^d7ZgCpDx`N&reWTzVy=YVO#tRD74w8> z1>h@y`DGPzB`|k#%;hTPa$r6LEYxnja)4uAEdOyWn_ViTXz$!`4c=Br`+Kj(m)9o4 zGF{c}Ra%#U3Rotu(sCo7RLgXX!(W3FBc~JZiZ=Bd0gL>l(9vzZWx!Gj3jCY`%qZwv z2`C8k@>rsxohh7)(^B-UfC}kmwbf$Y>IJXX>VR$!mtWEy@|pj9DScJznL2-r{3=i#=Ssa|74l zbWgqV6u0jMYP%JZ&^sIVQq5Iw{mADstMp_@q0ha_YK~>vA)j*7w-`-c`6|^Hg#Fed zgzVnHrSh4ZK%shXpjRntM1Aa#c$Ex4o>UpFo{J|{MlW24Csjr(`PcOFMBIoBZ`di; zD-PZ(2UdGILEL#9%8O>TJ34S@U<`5YgSbnu&4##sC8W0u((8&__L}!${Cj32g2JS? zR+TaKg^>#Bu^yUnjnR7f=oYjL-m=r{2Jp76hwc|K;hkoWG|RuaXRi7stqN&V&+Mor zGA)?aF&(!VQl$7*c)pcry9?14y7lB}e9nPcd$SMZJU$t>7*tuv~QJ*-FvKu6Wa`_)@tIvNcZndiQ&f+^Bm^rZ&WTWI>PRvMz*2)r7<&j zna5+c55(BHdzw+l-p^Yu9Z+wT)6V_ybMlljIW%olEM7qUcqFf-&;c5(|N z1iUGCA=b+;Eoc2Rw3p-Tegtf^eP|W9rHfRrAfocmX|Nwt(6EE!LngPm0>QOk;W+l__x>>ico&PSJCc} zr7x42I)re!lm>X3MeF4`oW64D;!s97ng97i^zk}wDd_ucn1ylMG44{2(#)*hLRg9U zr2!O>2L-7u$4z{xxnf^-4|2KGld@kv_8w%y!T7A*7x0WWH_9eed%SX`9XzsUoombX z$_YLrf)}@f60$b(fHot_AL}#XF>YfGhpt_Qzh8pcc}dG4bh!VF1&Hz&Zcr{-cXfT6s{EA9iE6Y zdJ=pl|0f5MGkwT|JjgtpAR(Uu<3CiTp6+G0HkC^i_)YKGtxe@p;ZRY8Zfq*Vsa{&6 zQ~drkPBSBh0&6ulPWx+FxTDFAJDM`pJDQfY(H%|Yl4EFs=!S&cGBg2e?Wz-A`6+Gg zltX;(^eQ{tY}|A4bxJzL$MwkFob{srs{Sj9SVMsRv)8h9QPZ%{5^oKmfjwR<}5;j5Q-Re`M-(vI5I8&Ls!^U?+#irk5%+_)2)i`?}=2ilC2E*=M?oO5)l%88KGJNO8D_8hH8{JeXFVp-0 z`8v%HkmoMITk-?sDU0v~Kfo)y7UKz;>4G+P*Wnr3ScK<`{JBtsPa&{!$`YRz&Zo!{ zzMhmH#_2O?s1F+IJ(v^9hOAHyKpo^AyUKfQ`>gO4${^hj4-`Q@3m`9>xQE3~2&8qC zOFIUpic`bWqVxs4a%tPZ)bR9(6*|Sfq);wx9H8&MmE-(B?ekfH<2sIm_G8UaSOCCG zi2_R1a=v2^sdU+DJssEM0T~n*;LjJ#&e(SpNS{Z4LQtbZR+Xe{0!)a zi8zZd??KWm@G~5s+zv@Q-fx1WnLCV-G$SOs7+QHC`jJEen2g8IGAG|UH+ z`m@Arob(}iti*0U{IC9uXDDNV-G^qCoL?|2h%xW9N=NwpQIsu3H~u)F-`f4j$nl?P z#i>KwKFx1ND3_GJKcBT>7MRtK{GYp-ui}*-wqj5gh! zX2wWk{SW#KQP_OGa$sI{xpWM9{Z7PFG&>*Wb9}S%=|7?^iVVq5E@6Ey5(|R`p`vh} z8hc`qo4n3k@ZjmbBFvV#u$O}L?`>Y$3X7?(@#LMloUY)O)+^89{+d_*kVhK4^6@g( z1~f&@aPZ1q>rkRvts~r@XjUA2&(JI1tgT*Tk*~0k8v=jA0ITK1zR_kco?*2dpesj> zFw$v-tY9{56I-`v_g$r~T1>D_R@kO_eFaha&Pus7w~xO3QjXkw%;K;>^z~TeG~(v6 z-*BG*5`cFUWuSLOh?isrT=;ss2|Ho5I-zJ&xs;Dv3JVbPCM(9G5#>^bdOslI5YSEm z7RRX8p;^0LzS)i5!<)nS_Yx$dLh3DoH=?!V;x2SAG1 zNVak*_R1}oA?O>Em|Jer_`K-bcvAhgCE&BVN|a}P*3NQiL$7wbI$JC30uQD)Xgt`;b%R-(V)g6DPOJ*(W&p8qYn2rb>VcdSN<*9B+D~hoEDsp7$Ze1#fFS-ulx$1d8Z>E zjY?;TzvFv-l`3rYGhTT=hX(D?D>mY@;GvVZ(P%b=PXS)Nl;jy0Sx;*9L zjLkbo9FW5Wz0JzQXpi)#S*fkZ6K0y}h^#=9;2k~JL(zPrej`pbZp2w;qwjjty(^G_ z9-$@+=f1w*#_V1-Zp4{{8*%WJE!+}@lgI5DH~~f4ME0r}$~r)Gr-w z#y1kM{_7zLLSK8xa+{-cYm5nf_x4~8EKA3YGqzAh@X&8q50G;RUzx2Ev-SICSiiL! z9Lps)`VEN<+Qi2&S5q!E*}&w8-5>|JRl@jT9P89OVvN`so(T&KThl||@$t%UaZ5RV zj-+{xaypjcJ>$h*Zb`M6G)V^JTRyOb$&rA#K^gAdqk9G*ADdAM+fat@2T}%zhL8MI zhR^pU_%@Eg_Z-J}n~v|PVVl&GNX22HE#vvxebGdE-Xx$H7+Qgv;>Nz-ri$Wr-?bs@N>g z1t)0)NdC*d#bklvW@T9aH_IEi=adnk8#>Fd7mk%I))=&Yz`CYElM?R`*@H5y|EC3O zkt;GiG9y}tb^B5A#|;Mm+&2tW!AAVQGT3N+19wN%EI@8`ZFm~)I-k+e=Bn>E8S0`l z)g8cH4Ga8xQ1izPd)}biL4Vv}edB)rFU|=$(*eV>@Q{1K>1vj@FK6`6LTfL>j=kE2 zbqW3n;#5S%z4FVL#o4Y5zFv(!EJ81O25A?rOgb}oHFn=E;YSl63X_qeTVG~{1;k_ zh4nJxhAW)hJMwSmthk>%_8M%>pzsF8SpP3whMQ&OAJH!6&qA>vm>G&Ca`F0_0GAol>)!YBlX)Oe~Rii{$tsmfX zVY57o&louG2|msRALn)bqTguD4&jSm#vF=WW1Ua8osncL7^E92rk!Y(wKaaTyo6Jh zg}f~I81SUiLuL2^pcS0fzV26sF91@6G#xW@oZI;_e624%o)z)RAL}JU1I;>R2~HVN z&@4a9eKMMpEue0^#~NTdH9-5p7V^nY*yGLe4nFtfL!0O{iq&t5l;Qq=c3MdDAw#idxrOU} zv)lv!hDNSgK2?h+_z}(W?4@{u=h!UI@!<&`db3=ExB}UuX1N4$1Z2 zXb%7Gj`|(>eVKbRV5_QOt17$7@J%_y-jUBvo-zE=T&9WatBPgPc6Gg8CT&%}dzj?^ z#(^Y^c7HL84wOl^4A6JvweKuK|5NH}_^JQJBmo2DS!-WhER(z`b^V+c=C8xnaayJi zkdLnU?Pa(DFdNZYmO-Yiqn`at`2G@QJLhC6Je?o3vlVKy{22GnkmZF{4{>#=@;1-4 zZB~xuqfF)MV+D93t}3xYJgHoL#f2wu75S5h)=<_~vmC|FBCUJsVFeFC_Q)1{#rp70 z@%zCYp`8(L)Die5`uk0+eG;+v5}zKN2mTL$|2^>9&&22My>{OmtbBgkRwi}z?~GiJ zk(kZ-^K$<;(AU|~t0ALTL;qrUe+}Mat<$C#WLLgw-b9;%wzu=Jbze! zlw8M4zK#+v{0}z1Wzxg__laZQV$I2C(K2KJ+ zm?`lU3F$yT?32L8XDj?a>^1SMnLB=#_1R1JP672(qLV>Av&9#16M2nz7oWxNz|43j zW=4GPJ%k)=vATU?xH>Wkt&pN(2Q65zK0R`UUWxCB_yCsI@0&u@b@BB zXm0`{Lle-SLwz31G;Yi^)uD;O|KPszQe`Qh(`~aRRYWERtHq8J zOO<2XHZ4`6-1;`luk!hPsnQ2ek;ZGOvV@Pd{Z>M_GD6LKJiI%C-?*=68IFv~h;1qju^=%6q>b8l8{*vlHEr$&HbsH;k z8%r}mDI%x~us)-_tTJQ(d>7stt;(Eea|g!s(`D#2w0o&?iq8Q%bx-S)-m#w6a>&$! z_a;59lem>WTbHKgkfxjdPCqNwyHqjiBShbJCTUu#H1HAn7Nn(Dpcdk(LKq$vZQ z0deWO&@pYEy9qV&e-A&9_oG=p!?ohO;2^Ex%A|(gojAM7qAN?}SGoQOfu%}K73(wA zrM+rM0KT|r2>bxDZ$6O)ThI1OFxT|5IK+$ij!GKr42vVKw85jcWu04RpC!%=)`eDM z?jir}vEIr`yb<6B_tK8Th4cS1GMAU^?4=m^h4ZhDXmz&r;yYC+`Q^w~UT0(PG+3Mq z=i?*HpPVjE$Bijv((2w?P%Ic`Kz_@R2{8lS;S9v*FPz6+WhyK?%k*esnd9-#mpO#V zxnf@TQe}^qac&kkSA2+h`DM8OKXo^lRuJq|3ELB1h8sMW;a)*UkT5LLF-(CyrZ1i3 zz{}V>27`Kkh)UmB4B09MyN+QhFwm}A7BFlbgMmDT%h6z0F}%;me^#Ux7-;V;6Bw3{ z!9c#z|%KpQa38iPSS$8nin;MNxKVY!ZB2DD7uUn`RwV{oV^IIz2p zao}7`-p%^1@NeiCT;6s^wQVXaZ&?cPb!m^AzBg_*qD_fkDiU~qltHg zhXCt}TsZF;#hA=w(pv}VrJaCMtp70+uWA1D#{U6CT_V6+E5dbm`&IP8j$ zH&upP^%zdd_ni)3vf$)W<-STyN?6~_sA-OrN>2`xjFm}gJ?sXS|2aDYxJHIyw{-~O zC)3GN>EYpNct12;i~kRx))c)KjXXOwRw`{9o{IM$4Nt-UKO8PZ3>8##7lK~eB`B5l z4x4bAq_36HM5n+@u_{e+0(UR~uK*su3m(5K%*HC4>F7go{Bhogl zXeWpo73hh9e<{uf`;dPwupiXzR)ef{zi;na}$I(D89M9lM0U`PS*53P^ zRBU^mdEPJYm-j>MI%l7KzpTC1+UsHm?@`&Et9?E|wBQ0=6Hqx<`(%KucMzWo<735s z0B-?+mR(%a%&FefU2C|-$j4*fFVH^_Y0Y_hP2}Jf3Y=;!a(wPWy8vT(j>95{IcIxC z4sK7tsosbj?PGF0C2|mMEo1F$7diM`In_Mmcw|hDpvXZt@e*>Z6*>4!JE8lKz~-55 zUJ|W2{zZGO{ugUB-vb<`(X7=I*W-!d4|M|HNnO8diX7fxf8(=`bhoLIhlS zHl&(!Apt-zka(aA^v@UZ@44C}=8u5nn{&0i0e84Fkioe27*8vWi?unSi}w;~RzcHX z^%Yn>GsNo2U^8%7Wc2ksqc)vgLVKP;9XB)~C^zqat$w~9En(;KHXCnKCin*A z!-!;`b8-Jqx3ey?q12WLm;^0fwUW3gtqHs1TjIN12Vm(4+K;)=IEU>GHkOV_*f}=W zL4K3<&e2?L&H!&aKR-B?U8ut2ZP7c}G3k+7yGQ{M+Bv;$f zU(0*|QhO7F&7U=$Jq`;b?`%;p!k)Y?E3*B;N!I8CfrdTal0ivBAaA-OMeD5#N3$5?T z;=2RiE9%YfZtMF{AMado(qt?%2#_eOlLs80WD+nN|-c3u67IRbgrwYcR}8eQ?t+%Mt<@;M0MqA zQ`s00CJQ>;ik&3#Phk0J6nKi~tQ4+3l0VLc&pxWbfqqKs?BU}W4_?D|E9DUG<|$>g zm!({3mbJ-Bah6%z&(*$UDVpmY7_HSPw*sT(!)Wcgz;`O(pE&<(b$2@NL9MYg15X$& zviUH&#%qmjg0337#$WBFvulB_ShXL92R>@w0n}c(t`m2nJELV-p=DA!v`_i@`e?g( zlP|5y)h_lzUljialN6ve{IpoZ#L-P?O&GI=z0%LDJ-SOqTiF_3Y~$^h+1{?zhXn0Z ztKTBd?^<@>L+jSLm#FubnD#Qw{u04Wv19fX%zhl3eFtVAb~FKdN`YrY8chja z22f8uadN#FO|O)M(IkHAKUw@#4%eouMJ?C2UO#5cI;CF-PbjtefHh{v#GKXYCe7&+ zJA`=5B##OWm2P@|53;-9ba&M1hZT%7cuO9{RG= zL$!Lkz;zOXjZ12bS6A}+$pFpNBQO`@7EAz+lB>0zou*D;tF8}C zjZAKPYt^<@=n0cctcyCO)6p$V&HyyIRn8}8rh)gA7nWC>?Ve?Qdr#ES3CeJCz=-v6DE}VC#quZfND7h*y-mii>oepjjwd)9@ORoeLepOeEG2p{E z0}re*&KKi}?a~j@`Pg3rzQAGJ!D2^gGm=SapX50V1AivIOs=+>)d`JgR_B9OosCwVOTVMenaLzqPj%L*8K`s7nenJIBa)6- zcO)HkR#hv(K4D7}t zb{shW!2hi}Z;PpuB*C%&S)H&u!1~!*WR7iUx;eI+zN1b#nY_JFonG9n=W2iLA^ta) z{7j5EQ0Ip|m>+>nUjq!2OMB+x{{Q-LCuY6lUdg-pWBPBD011WH!y2P;2A|36+dONo z3Bj`n+i6F7rT|iUApyEyl<5sm0mVl57~s0IG<$m#&`9%7@)NtpXcc>WO2ms>6@K4@ z-QRN+=%QTBapr1B=w29HJ6vOU>&#xSDd4@XF^WofJFWso%TFf47}xe(4VZjQ=qgyU z&42~mY)H}MYAbp;L|%%oj{2*ig90jb1KHbg1iawJdDR!h?c2_1Ctz%+WZFw3I&8Z* zlStM>hK?9%TEBB|b4e1kxN+ib;1+m5b&_YnB1s+i3cA}Hu%3GqMst|_|Nj)_)T@D( zyISu8oQ}8f&t_TD=KMAmqj<`jw6R+eM1Tb7f&i&Rvm3 zYyE8*tGiaQG9x9dosY8cP1dTomGxw8gSDj&8kUfIJ5JE5*3hgmS!%WE_)4=)pIcw& ziyHkHrAqX9{wfExoQ>;yR;t+|)l8Nuab4BAMvr4vDWH6XmHLR4I$xyD`;OG}Lo^O| z!FI)6(DuJD_}*oo?v-c__`s>dzkF9DeeH<=g$wI*v`3J(6MgMyxG>m=w4QIJJ=xGw ze;2Ivq^)Eja;!m)W|ZED(vKsD#B$UahM0M*txbH+YK(|Q<7~wkdO^XtB)Uh~-jW_9 zzf;a&DX5$r?byIlb!n&+5DC`H#T|W({$4#_OOTBgCDvnSlFghXtjYmFWtRXR6k}J; zM>%^2irL71F5p*=_SC=~>K&mHR`S0#Vvh@0Qlr0KEK1kUi+x|CA6bPs;Hx!yS0$c6 zv(y-y=HdzXJ@QV&6L7v7V-h4J2y>}10yp9bw`Vo_@B?_l?OBcC^5O}%XV5Qx{&aNp zD?YVGR|1H`3HAe33f`hFfxb_){rfF<0Gew1zt=hkw>@6~N9+dm|7rKEJvTlx6E|h= zHRizkUyZ*1KIFxj=M2t`@VloR$p0_Fh}{wX0oM6+vAW#@Qi08X1KUM}VHE+Zx*ind z^=&y?{J_%COtw301GhutPY&LUoP1YA`)`lTV&Bg9-=^LcS`xX5z4i6a9+U2i{@cQH zkc&LZPQ!>#g9lRV|Nif>)PL#!A@b5aUXIq)|HF`vJ-yq17c}cT1DsOK(fk7|)D?ii zvxhijS`nsobs~@hntw&Oxqd~c5i8L?#Hr{Sz0;f}BXto*0l1mD1^}7#M8R{p4r>6q zdfJ};>)1@cVXdKNEB^;#md*TFL;AZ7C=;_h75T3fYiLvdVs&xoTC^T?`$}FXR(=1i z>aEabgr|wFTSGN^<3e*zafe)?=*jyLSED^Y48 z*6T|DWSl-n`WC5^QF^UTdKuIc!2dq%+XB3?-H@a0W%Wvvo~o~?U&JuST0K*&lN@bF z-<7O&&7xms3bz=U9B2UW6kA05YxJ2Ge27@BhbLm{FX-Mo)jNT~(parPj?Q}XZAo9F zl%t)3<~~8#6|f?)Mllx4z$ZM#BNICW0;81y)6#USdm2E(E8GQYjpD2MPr;8%wcDIPj8(#b`@wgmVqXqbUoJG{T_bjDb1Tm(^+2!+C^Sj7b+~O zk1PWQzmZWEHO6d#iQxXhp9MT5M?2Izk>z`-Hy<=r7Se9VEj0M3t?u3NU9|_?&|}R6 zgp2f!!a z(HQz{vBK)HV+o7T(Sp6p)#Z>pr}nSx#mooHx23%_^PdX)dYJk8nwA=xdDw+()Lv`k zaIe~kiha2}QUlDCaDN)NxxH1;cg=w(#A>w~Q1R{yCe%14W}pgfAY4BO8UQXpicCO? z_4#H?O?;P9u{&5Ty_Yz~Ia+FOHChRa$Ve+m$P-f@lcCjy&yrRB@hFcVG4HuQCKb^V zIj}fKk}EmdmuIQGYQt?oh6y6AGzm4>s@rnvtJ^-Qrci@)(Lb@_2|K&GEd>0px~;7N{9@n+N#F(&KiP@3edsL7!6Y#aGf*3t z>HTM`Lp9+Qk@NDRxS$s3gZiLnRXeyoW*Pg)EHZ=6K5K;dH@XI>kQP7kyEcRCI|?E-OuvY z>eXU2b2Rw8V`HDp^764zz`w2!k=+6h?j7PGO@I^N43$l%E@p?#&jV+xjf(rs`FTOW zQW~jKm?8TAcg)c!{zm+ASS5%4Kj#DPj5f>rE;P%lgw_D((e1MCz_|7-m&~d*eqV%| zu;-lNL{N64`a^*JXY8QtesYqpUw#izZEV^k){D`;3QvGPq`gc&%&U!OZ$S*OGvdc_ zAIJCkZGa#&y3O!+h&0pzQNnf@uM6K*J!boU~>05+op#-LFo1@J?Lv$k6J-$?+MBM4EbcB@1 zn+TnNWm8qM`sfL8i>E*SD%HAEGVd110)-u306H2vg1&}ONxqQOq5C~MPMCLsl?~*j zD3y6{fc{gbFu!k1~HPOO^@d zpm+J3bFJCpoHLx}J&W9pYXQ5@@Rmz>P8QEpSG;)60Y8IMU^Vx^HYQR<@$bX``5ta3 zx<((E#MjNYW!)cbuhCCV<}1nMB9GMvtI-eroxDWHn|8))^zBnn3NXq4y*^luR?b!S~+ZkCsw`#<1{%AW7R{_-P|VA_V#KcM?i#X zV}}W^bVG1VNA*nP-BN3|W}G9Kk*(=WW;`1==A73+^*@HP4vCtpjlH6;xS@uZd4=5< zOS`kR56`ic5+N>rw)Vj}++w3OJij<448?4R@tS~}R0`H8o&WF=kR6l{P;1)R{WW=W zy+*8eoXg_GsnM?ySOv~5fj!meso8u6Afqa7nQ&JKirvL-9y|es(T=Ww!r;9lfZY?b z*Q)g+EBP9!Hu6^S6;Z7}Yr*zc1?Rs;e<>AT0cW^n7(g3KSBY#-Lq|y^j!w2#doCfy z3Q-zHqzp0eM+BP6&g=jw2eP%f=V*=67(F9w%T^oji9T^3i`l_6jK@{yh)1{_e#}k^ zJf+$=AjYHGctMOuwV{f<)yC&eJ|5LZyTB)LCUwAeV>iiwxqwNMO>W#accko2ruiSp z2&dq5AW4>NKjt6rBoR-ZzUci+ypO{>$*Iu$UzyB(YGj>11n9LSK#-W^$ZL!bMH>jm zNovd1ItScp1w0mdtd{FC+6JguZG2&^&>7askScl0shwzVM=s=}159@n8tbYZZQYNy z&`CxzA=H)--bu=f%iCsa>Hx`6$D?gaa4YHwfc}VSlY%xqf;Mr_h_U;t+93T7I#&o9 ze0zUoYb#^y7?^wCC-8RcF>(Hn!T^kT{%NcV8}zPELwhY*lT+Wv`Q(J8K1q9IYtRG` z^KbgA!TI|?wjuw2Y(w(@i#81Rb2wCO{6(Die+wt8jn{7-9htw?o5lJ2KjeMzf5=PY z-vs<13u}TbVQ@%6=Y%bQ*@f1@s2z@NV||i@ZJKP8G}k5aY(nMig3snSv5zZ_!2P_% zBp02so5MR;v^Yo-J$7y15P6kI43-j_-fhKh9IiC_1bz&QJ;4<0Sos8<=-JxVe!kAiji4AOw!+|#M$sxR%OOR( zVFaFTAj!iq9`eGO0*jrBHt#a=ghvK{K0@GC_SR|B3c$ecFBK zHQQTnh`j~83Y@lVO@X~a@?>Zibr6PiEg(uzV7b-CgJNHjT>B#Qxy3IrJyIDm-4a&o z7kzQCKkaL=!1+1klIoZ1a`_5H749UHCU_}>%l@igPap&hv2tqc{H`V(uj{4y>g?vn3tcerS@Z7w7#fa`*J8An3<&IT(E21 zc<#h=1)e{_vty;Ct-6>~;*{RoDnVV!;0M;=u8 z=;Mw-P)>Be;OK(Kt*{)B!^HtxxG4ZhkN`<&agTO1?mOBY&^XG2?4>8!Cv=OURn+2a zh4uk%H1nV>LmbLg7=fQ&6f;~v>z!m|lG<_ti5TyswxxljNZMwyqHfL+=O{Q}Jsp)?Hz`svMg(Z)I>)EWM~4-flQV@ z+nbK`KH&};MuMEV+i>kY_BJPNJ3m-{~A zdytQRwZ2@e-)g;B z(`WVPfknJO%u*95y3@uUVzy{vWHthBn)}N4OZz zXX_prTsjiF{+OYBnZkHQjQD(LVONQ#S?tPRVJ1q?U>t}6hR<|pn97sGkGN@lB9|%f>yt#US$>eo#y{QjipA+*g;6Yq8&DsOa zmR)>k7Xr_eQprD;(rU;3fCso`9^uaHXPUC|P7Ga@Q{ z7(CfPSWFXq5>*;UB&&yEAFP~D=N6^0A3=wGTxsmGz852(6ltl4=PjhWLaY+lf^KLk ziG$T?tor(NvLfB!3rZ}1!pHQ66;jW?!m|_JW%aYK2)mVj_e49FkRun2#k{!>2Ev+sHMzQFjvdiO%x zk&goC?FM*V0;JBH4$nk@*5tdJeIGmItTVwg%1C|9LO(yodU#zJX=C7tkX zTN!LBN$#rD-5brB@de>gJu zp$(Gv%8$#8=9p4GVWk{2&q}nE_aYS>1DfH{UcjD%Hg5=HgL`t073~GYQM9BB6zZ0~ z_!I4w`b&49c2Ma=SybwK#k~X3Mdtea6nj%CQs7OD=+XE{x&EhO-r{WS-JVK4xRAfm z{3+8(u6ShdmXUbuLKiqaq#c{BC7!9&=UVA(kvh;IwulOf(-!FpID%wvqFh(4a$(6p z9mP*}v{xBN#K=_{r^JavzOmCmH`0lh-$PmfBypXs<@Aswavnxik}FEHwP%I=K1p&X zKz_2hWV+z%KyoZ{y!W_l>ur+bVPP&IQe~`+LvL_G<_b#61M0uZAbZO+N06M+&Yp`8 zznL{Z;DA&ba3O@p@slB4R*YX0xMOlrg8I%^RmNY$8CYdZ75S?SU7S5hpuJ6NF&?es z9Lc|VVE+%80jM^v`RIW~K_1_J&H?+z<~|r1%pV~vf%elg?dAI8R_TReY^sb@ff=|} z4{!t6!}EKzUFXO z-ExkkxINk&&|Eee5_Qs(r`wlKtrkUM3u3^nvXhb#NuOck3^jA9_``)ao4Mj4$)t%046=|1IFPY z%n<8Nw27UYtR8k2I$14Hu4U(Dm2uYWy|KT9_nt5u2dkx%(c{&|TC0}dj;V##@ORge z&@x5fyS3s5TO<`W}bIJ?yNBUXfL# z@2*c_y_#h8%5C-PU9sAzS0q{Ff&D*Puhq195QAMl$MSJtI8*)DI`JpX{j<@ic#{kRzBJmokbk9Ow zN|iA|%uAK=s%U+cv33f+3fN5Wr~;Dw+2G)Nv;+MFG2?J!QEe=-xLPYjPSTW{kJ)&Z zSt&5}rLq5+HiJ3iG=ii2zPH*djFS6!YsmLe39NC_*pQyv@s-zs?@Z}suTOiu5f&@N zy8Av_E!k!q@MvH5SLrJPykA!ys?uLTZoV?fwh67reHRS%*RUP4??Mm$pT+-0{D<)W z0sbTSr|*05{|)}1!+%`MuVI^c-vtH#FNpXT@lW|*!v8S-58$85IfVaC{2vzYNAOSO zwBvse|3|^|bOr$p{TUcP2ecS)i#RzW;?ZpVWU~@;)>oyQI+j)XMQcATHs?c+2!85h zq^I-JwCCf|y5Tn-7Ayg|iTg%nO^(prs0TDOY5h#Zy7~eumDW|2{+zjM_2?$VVV}?r zqT5QG0LaN<=xcqGV1-iAjG^nooni(YlEZudi7Nd-omti*tE|JKtSbGJQa<9CX{-(M zR`V)kjAvs63U*UXbld5H{(nJ)!`p4Fjq}jPI;-4>Sl?CpRC8tOUs@yK6C86I1;Adc z%w(+0B#i8GluA;N9%%pPL)TA+)^a{1X6eq<1MB}Z8tJHs?BvsE)@QOj;eq`B z6%o>)zzVSXyxc1HrRiq5v&HPsH}v~?x$r;PfG2A=l6_#Z9T<;3f8KjVgftGY|9kTY zjzTgzFO(Z0j;lvI3E6Vq=g%dSfIjDibJ1t6+vCCQKY27)G#mO{v5I5j*Fh?Q_ueMi zysi_T15ORD=DbNKxF^49hdc)q?W2p+5bnA}sd+w(gV=Wq^yM>98ylOyOg8&q+Lq(< z77I}tdr8~Tgeo3wOE38>QE)=cI#FTd74eo6E$Go|`znk?F;>vdRvp3dn7gvR`NkXd zNGI^5+fV}Z8?_?rE1&2&bU8%(p!p5%7(rNAJd6y^}I}SDwDU4n;?^J&Mjq_gRkn%FTHNr!rBagfu`qrXFSjRJa zC9l-w2lbLJ#_@KfC^H7dZs1y(ap2b>J~>W%l>cK~pKdq-O8l3XY;&ELY;Tqs?+d6T z<1SoAU)Nt^IVffD1Z*pfrZjJC%sac=c}nd!qK>wUDQGdbleiye)Nf^Tg-yh|yF!&U z?`6UwJg}(riCAS=r5F)Oo)|e1mhvCa6+WaSZL*2bQZTnpV5t@6o-7+-xI;D#CnX$z4%+Xr(3yao*kzy{7lkr zy&!X+gQAsP0cyiZNP%u88Vh*JR``B&CntZc!2jdc?$oc{sT23QXU?8Eai9Cf^*2s@ z&OK}YEW(*-jm(D36Zd*c7LDUz1K$3u2Ob%${^)OR9NoRtpW|W-LCc(hp7&?eZ=4m9 z1K4dNPI)@%$wn1+hUiO~@duG7!cP1$!!1sA4>SrY^gv7vq~|d)T!np*VD;f=<|`L)~W{Cd6fNvRT) z7(7`06n=$&DxY=A@CX_+YU^XXL^?I861JZfpnpyWvj;`kAkyRBkB@BX*ZWgp%P#pm zv(-oZC`SkQQR)X#$yH{ox5jGmnIyDbE=pJTeU)**LwXb5aa|Sq>cHsemKl#(>F2`Z z;L`4l1Kfw0M_Vt_&m5EfM^^g6GfuSx>50-&Y!kyzVqKB-1gb+CljklgPvRMe>g~=r zSfRJp@mAP^KK&ldnuK#^VwBYu}p3m^s@1`DsW>b#w$Mum?*yI^CpHTdVO7JsQRvl?-bM1$oA__HFu zahz5Vz?pyCz}&!iWPZ^_f+BCZ)(kjRj{xqw0sj^-=?Opu{XN$08_zmWGL zOM6q$>N4|t>vBozSiiR}@MK)I_(8J_cyqHOAs1CsW{MW4PHxQ=8yav()dE`AB~`BFGb+cLm&l_A%^U1Tt@ zi%O*$e)Y9a0=_mLxZ0JcqtcD1qeFY3$?*2+==m>BM>R;}^({Uf?OA;~`o;Fs(e4*d zM?Zb_A8}TlQeH&(q4G`8mQyWf#J& z%1(q^lpP2+D^DZbs62&mz49c&pwf(RwekeQfbuxP<;r6Smnhp2E><2zSf^}5SgkZ6 ztWX*emMK3&=u;j+I9GWX;cR6q!kNlL2#b^l5l&TpiqNZUL0G8#1Yy4N0Kz=w#|V>^ z%?Mq}{RrL4CWId4K7`Bd8xbzC{|Mn?`v!z{_InXl+t(wku&+Z{W?zfYXKz3_*B(ST z+kOwinf5gZi|ltJoN8Z<&}(0Xu+Y8|VZOZ{VV*sJFxh?=LYI97Lbv@+gdY2HHRxZa z-WOWhvJAWC$B>(TAk-ZANvJchCFH38X{e(9!BBJkL!r+4ts%$CheH)B9|<+D{8^}T zWn;*(swq^lYFnsz)uW-#Rog?3)sKZLRzDtUUj0O+&2c&;Mcv#wxuw8l{;j7XM2#-m>MEHjEBEk;o zc=YY|7!VDIs$Qe409c+|0Q<#WfQ$@N&1O~<3ICalos zk4N3m4BGPw{F%P82KDF3_aMxdg9r=d283RDEyAhtI)p{?dW19OdlAl-Hz1rV{|KQ^ z-iWYFrd_!?e1Bw9o2=<0v}4ENKK^xaE->6jH!-^`cr&;ISQNn%n|9$c<(0MDS+4A^ zUx_muv9=|kRc~*RwSOLw3J$dVO1(YwYxR(NP(7@^tRi>bl8{4tdgQNP@sd8jOfZ7r zkT>~_|0>h3kvQC?l(zx0*t8Q!kq-zob*fZQYFrYWh981H{9&6-J2}L^7UumB6k@4y zR`6UFvooQtpSl>tu!ZUE@|DDK|qCYtW~noAU6 zHx9Rt@O2Aq%OICGl;lq~Bl+*3YTb8vh4=;;wsSrski_&yAxm>X9wN1Co{?WPdM1_W z=LEKv1xW^3HA{~_pon|GEbU0|oj5ar{=bd-ar2f>mjX}=KRril^Q=5r*)QA+v`+c>~F2&2Uy)5AF1RDyp@3AbA%OzTZhAMGwR9uDvta>J#1mf&U)&Ov9~zg^4) z#@2<<6UlBX)$Jm;O?&%NZYUGl+ogI`oV_;fb;OZfm{Pspifcz4*)c8E|HF!V332Yo zc;GExT5)?3$LcUXvEo`0mkjyGGTjGycU+u&DX!q%tWx8+z)kFI9l`@3TZd%HgK(3d zAXg%6jK{U{^iN{thQ+O-4H~P&*O0NgS0SBEdz1C>;KflKrmY?RS6Z@KGk0T_&t@DP z$5sveeYV1izqS{$37J?gn%GOUlS_@gqRm;_wzC`y;P^+-6{l|M=Jc2QW#z#5h`H__ z6y+QkQ_cfcIV-+ZjttvN92?IDHlEhSpFMa^63eJ79-Jvco4<3v4`tBAcq(o*4&Buiih&f4@IVE8(M}w{DDG^}i{` z8*tPt?L$Gu^U?LWWXQ1ckw}dhm6VuKNsbv6SeBtt(Pxe+eWO+Si{C08G6mhK;6O@~ zN&+%$y4b_?pA6eBGDf2~0G|YSa^i`P9UloFM#9HNBF(ag@{9I)`Wmsf$nJk;YpMRC z;AxR$ssh;@o0fV3x6#^#i}ujS;A-J3gd`*xUR;uU5*|w-vvcQV+6}O8bV#f;b!XJ$ zg6tOL#U@7M4=T*7giZSzxA-#P+s~{Tj(;2fXz-eR@1!lb~ARL9_$jYr)6Lf+hp;oaX87m=P*9{;9xR zebD^Jvm~cN`(ln*cZp%l9@bU-i8B2+Vz;HL*LL&z;;a+HhI5%tElRi3N|)7*_6M`H z+j?vV8(9nK?6Yb6thDu3TDjW>k8-emj8Pn=QT`D$$|z-$m-i0`p2My5xeMnHEI5B? z({nfjm-f&pUTT=OU}f!-5sHzuFW5iuemAiGLg4%}f$@WOc;jtg`(FUpF9W6z+TrkO zVENmDp0?mvT*v@EyMn(&4WwgK+Mhk3aw7^D2 z3#@0fK#x89_1@5;mRmt1Yyge$BhUyNK_lD;8etP?g!@4wYzB?+W6%f> zfJXQUXoM}G5q=69;X%*{4}nJ53L4>I&2v37X*Z~@0C-C4#X&1un($5h#ODe)0QVT*=YDKt5+Kn(I z5jC-wQ4{+aHSr>&CJr!a;xMBo+8H(RDx)TjF>2xs2^0dTgSYpCLTChq5CDY$>fl2k zD1>fM2pymhKplJm>Yyio5vYT{{M$htXhopiKpmXNXe|bH5CwHm2kKy`dkLrmsrU|1 z2g<^wpbi|M4%UM@NCtJV5!8VT)WK#@2kuu^puHaXE`)h<0AapdkFZc)iO?&rLO4}k zjj%|*8{tfusEOH(nwZO|2_I;Ob>X#f%Z_T{+u}dWbIFv+e3g22vyB{ZUeldgKE+rx*6@kt?hT+tI1kEQp(!T*x0YRoPxPC&&XeY z<9OI_m|R7|GoMg7o{?HWrx2G%N^EUXx3xT~W@^>_oVIxhwIc~5dl{Ji(r{KkXU3A!)pNk_{qj}eq61wCv0*Gxzn2%aHpHD0fH(MD2NrZ|E3MIB7W3KE*YQ8Kk6NXq!cT@s@_ zQ6tKfxc=kGuaKT$BgFsPCg?Zc|B`1e3@g4 zNeAN(`Ev+ zyA}7-vbKWVg*$_P%qr0hfvLygelrfxxR&3cgU@VAn#$VaEUq&6ZdQ`NMDG;*_wU~0 z(}qg)SHzgn-TBF&tgRU;)i=v%3+Nh(a7Zdf2*r7X=cOMY)TCPw_DSDI z*dxtF_=WU6gx%5{gr7<`BRnO|M);w06T&WO7Q*+W8xeL&GZDTm-GHz|nt|{QX*$AV zQW3&eC3ralXK)(A!?3FN5jciZ5xxk2KOcdUcn!k6(iDUMTL||^S0hxVs}Syxu0+@@ z6(Za&O-9%#O;V#jDo~I8C|}+3qlxP5A5BoB8?I1~ZOBu%Y{*q-Z^%)j_hzfd?)9i! z?#)tX-pyc&gc%`r&KRfpoRS|1cxJlVG9`$C4E_d*p|TI=H7O8AE@ z_Q-9m@ol&7P6#bg9iclQd$|Dy;IIY2WhVir zoebQzF!W>fO8C^cD)bZBV%ws6LqAoggdT)d`iEeLek&}`KMWbXM_}9VXRs^Ss1}8q zU=whgIwSO`dP8VC{MJ7P>qU>NvqDd(H-(zj*`X)Zn?p~jb3#w6-wW-4zmA>i_d~nX zTS7lqe-KhtU#JB>N?O&D&~CLfv_~xqJ)@R~o>l#!U#Rm!A+;hDRx3jhb$+N#tqSeM zNwxVXEUUcmest@${m(xC%nN&9lk)TTqw1UQNB6Yi-UBIoE#T!IhnJb-gxA3aAO4r% ze>VOp&e46oJn7GVU9--&lA;>WZStuFp*q#Ce`>{3ETw$ciW!^obt~RXdBBP>Q`WLF zcUbXe$_K5O*pz%l)S+He*X35z@uNv_9xSACLjP&wq+P1#U> z8|>4I8SM7yPvjvj?k{n3iF@=y)v;UIo!HhUk>!d^tq!#FmMxSZKG2o zG13ZA23wGH(=)YWJ(Q#DOo{Oa6K9H$6qYR_w`FRdL-Jm<3tYTp#_PDFlx+ABot@m3 z2;H@0Mk|xPgaQtX9UPc=$ic&#dQqYpiqT)&(VhTFBcI@B;2(6q4K@>j#Q-OOjnz=& zy$M)7`K(98f6dee;L9%?JxR527_wWR3G0H?>YknwW46_5&dtk&HA7jwp?e=nBpTo3 z$R&lFSHshMxM?*k{jLVr=xzmVe-btYr4xAqd!asMLh}pp>zl#X^Xt$0_y`gPra+SM z>GdT>H|Ca3icI)2kknEAydCXaqcKxUMe7`BWnvHKcl-54CCGzwFCEgsn7O#PfGa3{ z^Y%u<;Ghq4fm;+$ILNU@$gAAPBvn0L zJ8;g_VR%~X4JPx>#^+hFH=LN4rjjXLJfAaEQ8XSN2_$bm#-|Uv$HbN6QD5~rc*KUM zf)XP$jn5Z6FJoQXBje%AK-7%VvGQDsdZ$-sf^-iCDGJK~^1rE;(4ggeNK(!wF0Zz^`w1 zjgGt7pIxj!Iq1*Gcl77jfZ2=Rd_^rLc(|v%*!Y>aNg%5ZX|1l^=^@y5*X9qy&x!WK z;WW0UJG9A7CHf0uZKdMWCEw(PC+-%QWeV`b6yVi!Mx@E~^+{lb#l{3tb~3xAC{mLc z-8Ho%5w{eQRyaZ_-)$&1{-d6+l|*m@vPU2f5>y}$lK^=bN&ldcOT<*Zt^Bd%kC|;H z`c)fw-^Y;*4s^8Qp<`EKS#d~JU+*r_U1QS3c^&G+Qw}CsV{^LD?!f>rBUQ~nYTbHE z#@jjT&5k!yb3Rqwg|{=}+c@OY}QM?sVLr5M)qVh;}Q{i^Li*z0peAQLI5%m{S*5{}0rKq>Wsr)w+U( z<(J)TKf;!60bsu15yUZ?8WtAv5huyv_$lCN3B_eGBg3++=!3 zwBL!6=Jtg?vM6Zj<`gBmFEv+&-H%jg=EpaEqfb2uHLq?-%t4CmvQiuy>RLY<@P=@(10#h}SRkIk+JP1XdO?0L{+uhf7t@yh={Rrdb{RaOJ4jIYa4dQ7Y#&}F|= z7qr&4)PXKr2)b+$=(1Zumo3IQ_(RZTw*mLL9dy|e&}DakE?Ww^Y#HdX<)F*%1XNyu z6XGt=WdYD-^`OgEf-YMHx(wFOL8oPdPRjwEmJ2#94|LiUpwlLRPMZiiEgy7R0qC?z zpwlLUPAdeRb|vVvt3an+4LZ#WI&BK*v}-`8T?;yGD(JN9K&MRuopwFwv?9=H(?O@r z0G)ON=(L%j({2QvHVbsxO`y|egHF2{blM!yY2O2#HWzf-_d%!K0y^ynpwoPy(~3c- zm4Hqw1)Wv~I;|XZnjdu9JkV(spwlWrr_BeQRs}k(8g$zG(I9BE^)I|1-MDSvv(G*A z51`E&KYu^E{Z04`0BzPtblIEm<_eBaKs+mW-YT9Qc;10@QU~-n!HcJ7rTfXKs~a?% z3Q1{j3kwAm!|{w}*fq!zvfpGyCSkXO;kPMYD^70Z$Bt7RQvce??|>E_DOucf%izzF zMmp)Ga~R-}U=2YsaSL!R;p;X5oF%CRbQxeQtZ@JqjE7`9$#Luz_)d<5j-0(lPh+HG9n0bn!Kg{R@KNUDf3cR)?@16`iclBA6cOS6( z`^f)VbBPCdSdrCF@{=}R8#n`8S-(f-xJVLk4nIz@g5TG}aS-`ti2b#wQ(N()KfG}eu8 z^8g?I95gDG7<>Ouc>6|_SZw^)eZ24SC~?14q8)O^f3HL;Ih~aZ?E+TvC*pi(v>Qq; zVXN>)(vCadH)bwYRgf&2p2b1hHU;PGIFJkW^tgyj1?kjE{q&w$?$H$267LgPW> zX2Q-*R#?VcE?`JryUK9c$J@EZHpo)Lwt#|@&zA$qT2RN}*p|3IF4uiAEh{#DC|WdL zyXH(BlWC&1l7$_TzIBkLE!^iT5yy=2+6O(2Sowq@d;ov-riBr{7h!vVwV!H*^`J4b zz7AMvF}4lP^XP`uxJ5WH1x#z+m#LDwRns!;UK0g z72zNz7oV&k@U}c5WRFc45Grv)i?^cA+|Lr`_*eCOj>l_9;H7|5ft{dcXLrL&;ZLcb z^rKdiBtWroM2uRo@vkE1LDueK!zN_q#>1LEZWg?B`!MnqpoG@}jM5%*L-N9bQXTkL z1bz~aCs=R5ZN`-&1r`CuYftqQ8&gG28*4EqAIf#Wp?{7X~@r72j8awq)3H-VOC+!Wx`v|6TFtHrcUx{9?4bml6oJ4oNVwOQwE zq2i$Y^~iMCts>0UvTp@T6`M?(9%9^B&yrE{$%TB~id};ixwSXX@v)<`=rK#Ckl+B> zj^wvy@(9Vt(49{_WNRd?Aj;+3D9;mC9@yDvRa(gUOR=%)R^C#6>uZDdoUP5RrNfG( z=__MYW*+xXo4Cw8t<6W<0X1O7jVv&Y48A>#al`tIkJ=#3^k2+c3E!trg6{r&25JFs zijOn*aL7m5t=%Sg4+*fZ6|bgsk)^BzSjOP=l3TmxoIOnPosja3xM8t@=DFB-v6zog zJR5P!SBxk!^e()Da6=0u}VkVZNr}5N!Bh|>+eSE_u-skvn%@WXiOirx5ugY zh8!Fc(F#n#JY|Sh2I(QMw<)#Fa`2wBd{GzJZ~DuFTUda z<@DOfU=zE0HM#17YSR?l%>ufLac^lK2kd=h@U4-D@&RL{abfN^w({u6;4>_L#)&dR ziorsPjjPl6T)MTV#J#u+SkmF{d3u>hH_tdJ^E9MmO!hgQVK;2%rLwwqjzH>B3yCwI zyy}7Xi&`RMPU(+D32t~ZNDaH7W%f`vwRFSC9MMwl&4*g*V=bjJZW~j^udOm>u`=S- zJ5YwC4T-wR8!oSV!kBzJt$aBwpI!YvdY36q(^RIT1Wpy(hi>hKK5Ew_^lD`AzlVKC zr$SGBs%RsZ#ilk64BMccMrl4nnun3*VUdPIW=iwvFlp>inm-|pxSNo&_%#%zlryOq$)9y<}&zFxm>+7r@9P4wa^YpW*i@3G(^d$oOp_$<$=+=CF zNhoh*aL+KuXnaQ}dE;B0T@?2eYYCt}XV1-^LG!)rs3;y9I*dc_iTGg!$F^_Pt-N?AHZtZ;U z(XS@4aY|+wiyWq2SFm2w%3R~){UV&RSpSLW8z7^&-A`dRLP;T7Wn}k~#_%!huaUv| z!?b&Hhh_iuUR#R-YhSj|B=3Z-S-?`3dgIyq{;!MV#3_^iJQZhrISK58IK~jwtGN?5TEGfo21=xxnXA)XD7WRXj~#PtFUlw+d}qptUg@KYonDxGVt-(voj%SpNMf<1)U38cf_UVJ0_O@U#$OW zA1lMoB=%B?PhF;P+2z>%lE}`sI5x+(U8em)X)2NC zPVARES??2L)Lv+K(?})yA&P(~gj+mWty{4UKeO|hv-z;F}u6B;)jxbSPdDvO%+p6@NmvcQ9|1Tl=MO?cn4cnxK@luwR7yrmV%H{-IvuH@(}-2k zK16=3`3!zLM;dbcSmbaahl}O-#ZVgY*x8(aJI6TWxLf2%MGknvL>-R|(Mj^{w6qf6 zlww!nvgzhZSubeptdmV1^;kEJj1MET1|#zi zjcY_ZMo+Cde`jP8(dv4Unx9D2>d8a2bH2Nu4&+!ba*Uoei9^hL`FD;CteAD(FLH1h z8>-{$O9VB)yACC0EJx3ZQQBEhD`ng0Ukd^pR-@%|h zHr^!YRKkv+i3{1gGQC^kqbL)ftjxKEusgzxIfk27EF(^iERt+(Ib~@ZInF#z1_i$b z=aeK*w;`8fBfl~Dv#Dy9z)wv3qEyErxNYk6E^m&qL@8A%&xAa@TmBCrzZP0~^@dVB@hs8tw! zc$82_?IJ(gZss4Q*Q7`WtPGCwQq21!zp+P9YNVF{Ndl~=4DAr}DL}So&2@`a3|`O3 z;FBY?o=1HY>}-c7xqx;g2a?^I(%`M!%gggONcO7^nIuNm30rn}R)=p+(M_G>+exBcOrbaM(~D@UPf**NS#KgY%3JMZe}5 zrvI!A(2|T>0bW7u_t$SgNub>`v}rNl-?s8ctnU-pcaw%!(f3WFJ=FJc!k(F%?a;)R z{YF~eK0^a_C^MSunuraz&X~kNQ)Rz7aLJ+fMChC zcE2%0r1BfxVmxVt(rJ9Kzi3qE8IdWx7uS!2AV9WOhX+4pI#-G;;6R&4#CNfH zn-!lMd<*i3JkOh#sTOI>w{Dq#d-bves|M5}8qd~tc$mT+EY3B|S?$0$HA7o8Ko&4? z@<6ub^5E3VKEu2Pr!*A>oePeilGuT<5hC5+N+aHA%5G+fi2lvk?(@Wxz0yB|| z5%&(5U-I##Fy>2+^(BBW=`mkYtuLErlp1~akCrBhFN=a6e0ewK%lUp@4=l*y%d0V8 zzGPn#4wV`!tk{Iz3$(^k$cwc(cl-2-l^8Fqdh%I2U!VI^)W_bYvb&ADeDfrWwSTTDdube z({d$S!?^3t$8PPXly7E{r!}N*pxiP`58V^22-s(Th*A)K*c3%TF%9682y6}3w}Wp+ z&-3_)>5Woui$+0S&3af<2?acP$Nd|=Sn6yHUfw4@VT{Iw*-L1t%KOgr+5 z?AmAS#`xRme3pM7CG69Gw+U@0-nG~pH(XM%H*P@)N_n!+f;q#3Glrng3O#h6-g+M& zk>Nov;)VyGV0kuNilupvz}C!j;w&X>pw!qg6}cdBOSZ7DQ>V6E+j`AzJWKfMN(}n+ zDp4vXI;J}*Rf`j>xF_?gu3E|_jn`wo_;m9&E(6{SI5k8y<*ClDLS}^ybb_*~8 zn!9w^jD#onmW)>LbuMQDn)~$W^}K`(_%h4@o*9_Iyv2uy20t0*DRQk8Doc?+gM3E1 z!xslHh!m!MgbeKwmSXb^@)PL}Ul^P*1X#s4$JQ+#ZtSk6)? zGss#h)#A9oQ@mxRs6Oin!+svVUK;%6CI0oO^>r@366e5;KIr1B=`RP^EWQ%Yfb#y6 zXuoRZoq(@o6P5Bl7v&}Y%=+p&TdJSEkM{&8+7zd%fCE@~py1%p;J6E=)_&nDYO$5? z{F%ao1&8>lGBmgsDGzK!Ddw4^-(;oy>lw_KzDw*i(wWbnk$`cyICvVi!#9n|m1^aB zo8?+!9~UDqi{>U^TmkqPyyCL}PCH6Mhs2$$l0`&-64lt&p3u?}S{>Z*9C)e#@6_x$%-X zkD#M56<+}lAzLoIe*5(f;q}|EABAlR^2l3mlx5-xUcbwYX&yYm>vy@4{~(?cFP0Hr z^a)_-DZo(2GYQYeGd~`r4axk(b<2A)v^hP=%ySu?GejBB=t&0Ul^AqE(*ax%;Mvz8 zhG@~zn0&;L?b^{84`Rrd)o4sAVw|AFDIbztkOcZrtiHsS16JD>uJAP<(`?cAHVFX_1+e`hq=*9kqIPV}TR>ZM5eMW%*7Ehitsjot{eFLP z64@sKl|s59-Hts8&%{5Q9>Usjy&rWorfc4Fc5r*iK5=qax#1CKs2$e!NMD5P52b6F z=gJMzvmgj(54$iM$w|0bc$qXIl%nOBH#VY3ZA0qefnR;?Mj!ZkFvs;!Odt4MUkZBF zt6Q#WeZRjjY4UC<-=}YrQ3o*TY?PFZlBS;XhRcn10S7aJops(&TF|#7UoB8!%TvP6 z+(_w?&lQ9{$m7AY=UllyO+cTkpi`NJ_$ANdV2dVb?gu{zS>pAVioe0)^BXeqxFNY_@dnx=dP-E#{DaxOsI8my*zEx5@N;3Hk>Do{~^-b$8H)e`b%5~GG zQMu7!!dU&;Tltuj8x8@@%JqxFt9H5Zg@9(TLfTEZUOGGqrNL4WwA$2hyHi`!HND>j zc#*CR^piz)vd-=|j+(fP_Bp8E#9$h1@nerV$w%~jjOeL;vj3hENyaW#vvD^uxs9X;U4H2I zfHMfcY1-cYoCB5mk^6W`pZ-1|x`cCvQ>EB%&bM`GN{QhUy{G<`8}Z^cv|JxrjhxEX zvT}XkZafh@*Spu?3Gf`&M;d40F5TyMv`qJ7Kkk9t3akimkInGi*qyE|$Bd99Q#$U< zy`j_CAp~h}?JK%AU8_Zm3AJsJoYuIu+}&LBm@N9avClU%hyz{2ZtvcSdz^aHW2GY+#R z2Wj=&`bTM=N897DZs17@JbaSEb5Hj*Fpe4aQfmJwkG83u%Zw5i8?{`a`X&MION_$x_$ug&a{VcD4h)Bacs2(Ye~c$K2m8ew;Jg6Dq%+m6X0+fG zm8J*B?MZ#cwC7~P%XIj?Plsf*93=mwq}zoPrNgK9r+YAa_2_eRUn2SsU!?e&uO=|- zWt`fN$LX@Ak9=Yfm7lI{>T^M+8kWVvDQ$mdd{Qp|s=!JzWKAYlqO<_Brk{DD#8^>> z_Qi}icC7w;G2-dkq&|*S?Zj>2Vyy1{KAzeYb_14?jFCN}U@fO>v-?1+UoO`lEJg~f z`f`1Xm}h7twZ(xaZ9}>^tocb+`)q%=eJ-ngzZEr_yN}vuTA)pbt^U#WDMC`2+Pd$; zVkxtopKj9cXpTde-vKd~*due%O3Y=s9@&5=*gnouGh4>Dx_6UpW9%}VTKPC9-|K~@ z7{;`-mu`uN2NN$R3kzrE`T>DKl(SaTzuus#xTLxy?+ z3D}qM&)D}seh~YT?!*-ADhc~i?M-AJ3IJ7bpFSR#5w+s+-elw?={%eOy*zGf?>O+o z$wRkapC;CCy0%e#UEiCEcJq{LdQ-4Q$ci&zr-1*=+n`@}h+NR&6sta6s}uRFd(*7a zHFG|-67ltx-gMy9E^x_*2Y)%_VK%5~tgkyGr9_0BX1TFka8C)EVW&FFjgn-H0~>vp zfaT@Jr2os=yTC_P-TUHuCX-}dnaqR$Nr*Uv6eC6&5GkfeCzHuYVls(<3QB2S12Yhk zm;?lm#}mCd;oP?g}l#&ZbCPs z=l0uJ%@RC+63XluN31+*clt77#`@f-gS}k`Ij|;j9DE>8&oN2-_<=#hs0*10dJt;_ zd7O(`f___}91*x|jaYg#KMF~ZEaaUtV-K97rL*KUK3n4c-&f+!dr9Gkil9eU2lceo? zQ$E7`2Y2`@742>#uX+!o-E%%rF{oE!cf>+BS>{z96FNvCPDI#+1iTVw57K*zLh#w+ zgo|ke+zoVu-0*#7>^!9Rr!kq)IA+mv{%Q8HR~f43tFMitLj8s4YnJ@SQ5wg$lg1I# zOVc=3V;o(xtBy=z##ok{iHi*?;5R>!9f z3;m4p?-_7+I?)T_hzE$qv*ag76MMY$-BSI#=$C%?aME|*#dqUE8}_O7;yc>0M^vrb zz*j}k~^6}9bM(M@be?K&Ba!Y+wBGF!=ZhF3d(5rl;NfX30!RNue z+Mbi#-*FG#zfz7~!7d`tiUDJk+=z|^R{{R%rz>;XHD5}FGA?)-_o{FXNwpEp?x#5y z?fKN^CSEg@%n7+dwaSJSz-Vw2m;Cl=ZEpy1D+Tn_r%ns%#r$8xXUeB`30;u902*&h z={5GbaAuxlafSM!kg6{1|5I!ZMTlIE*rtFJbwCRF^g9N9>O!2=?Uy152KnGsT9cWSw$s7>-X(D(^=vh+5Jb#8Q0$EV|4&;v+h z!Y3M!i98w+y0wGmpGDR5x@13VA5jzFol?w&2mp>-@WUv31U{9i@eQa;cw~%RRvqwA z-irf>LlD1Hi!%PmcO5H~HG(S}!IfP;>j9_F+$}{letSUEBb1yJUN1kJk;`OY#M^i( z!;N*4cwPX$7rp+ZOMW%(Q$G@Rl~1M2OMHe`EatT=z)h67eiKIZ$9Os-@VG6VE@Ugo zHrVh2XQ;Ld%cMl6&zf-0Pq*I6^ZFd$IY(;+xyd7%Z_qeEx8}IyN7;_QOFo8Lu^-E< zc%QmjaJh8Y=p^5h&xHU-#0WI}cFA|?@d6}ctojJ;qHUrZV-(&nj4{MotWfV1J#@+S z@q}&kKk)r4V*PyjeRhP~xD_;%g74SG37^ssAu~td16Du&Ux;D$>9-e?;S2k|?yo6_)rlLZdVV*RWqTk0{bzj0b|&upWFDyIUJ3KbsAiAA zmU+Myx+Babe=Ui zqN~D=47bFKV2P8>Pz+1lj2cTuQjTOCN;~R!WZtpN!|BJa!u&in^`kR(_{q4>lwwOt z1;!fvo-j0_#T+YdVpcWRaV}<4yX5AJ+SD%i5V&1V`oqCNy4$5p{k)#fZSs6C5j@Z( zE0aFuXQG4=x8f9bpfot4N4XW$E`f`9gw=q5?a()h%hZ*^Vk7?#c(SmrEJq7N#lFH2 zG!4uHd8eI`)V{P{ODw$?>xg-WJZ3V{C4V?+WqOBZ`ybPBP;2cHNSt=}g1+pM1^ty3 z@Ini$x&&Ny+o>|OXqHjcOBxm(n9Mq{PRVJ&Z&<<}We#X_HeA^uxGu+)5@9h)h1aW6 z>hIL%xfM&y=y!V0B7a)%Qh#dSRlpnOd&daPL*QJKxji`%3uuzK3^?{slP?ccm_>dX z%s@4;g7B*zT;-Hx+oKIbLxnKzl>Wi$OeF4@6qkX|I5diM+J@U59GKTx=__$oMaUuhhM(YP%v4E(6G(i?ua3(ut7_-JDMkU%> zHNi{ZROp!;g8^-jubtj3ok-}<`-LBmBI~^H^iePKCxmY=x<5?6vnNQ4)AsQ$&dWX@ zzc}6~CJXI~-pty5x482G58{^3iUt9WHso zyu1j}J{bdq^|0vsthia*hIL;6-cb^{zJlyE2Q&xz+m8(M?e2yGHUZ<=U+PO!$IiIlWGavBH0mva0LJ}61DNA*0yIh^O2VXL; z|0eMEO~+T^me)Gm^12+HsJPquh^5yIO(P!|mjlU=Jz_fKlDCdo`yIIJEVDOtzzLa= zgSV73fil+7eS4e0(W^(W+SpZG6tW#ni4?(u+X?*gjLj3iCJB2cuoC6fm^+MIaU|x9 zdGOQVfq6w>6Lhsv-w4M@+y^E&enLOHY`9!~sa~6v?DO7JHb~m}!}>Gdj&u0vxjI;c zcEsvM#8*sbLn)Fo@lgk6`40WfQLK>^T7Q!74!GnGM&~E(B|j));C;#wVddGdszq*K zD0UP;@ow6uh;!d4+&KzG9Ku^`GInbPhWwJ|EQ{1_NDYJrEX$7_mQI$Wk4Jg>F6=a5$c7OlNkTq z-UWy}-YVKFSML=Zq+ESdmzX$T&N=re)l9sev|499)?dtuPszWaW*hd;`0C~Po$}{; zKDvwV0lARv?&3UN8cpzc?z1je)J}{CdMEHeaD4I)KQz6?ol8;YPUd+HIprZ_S6hjd zUFhNSnpj!bo%Q^g6B*+W16IO+A@2y>MyEE3QTa5bafDMwEerr0p!T8v#T)`_2E za>D-qg`gVTK({v1{qX{daSb9VQK! zLo|sj3OJ|aMErj)_D1-#xyY!(Prj@MKO^7c8t^ka_?c(Kbi{SYd^GEk++%YN&pnoX z*m4Z_igigoecSr1y^{QRcbO7%qGzyQwe>U)Tcc&T&-Gz}n@-s3<*Ig%V7anY=Q7%T+TR0h_7m5sy#nVw zN(J2ZS(K|wg>^Ugi1ans!%JWfuX^m$G(XKxIxOe3-hvA(A*Z}CKBp%u zLi)^1OUN!Pp_N#DvV>N{63T=n?EFoVvw}hN>PCNkG2uL&MGHn?2BWS@X$EM1a z;dWjE@tHbjYZtl=-PTT=&55XbL}-T%(4?isPWc4$O*l_^)VTOsTPv!6o?ibB)c>j| zVI$5MlHAQfSWV^{Jw|@m&-YMU8QCr?AcO>nx|2^H^ z3Cn+W-Q9^i`-wOCOsmfa&#S}?t(_vRp2l&ZPVbagOeO2|PI;;R`z7f3PPt$zq2vGk z{+W|{k!)Ky<gDE+}1}j&p7Giy{ zzg({R1W)8Q?7GQrcFqN7s{?ncjyUDRlesb4Np#A+lR3zKwt($2X2DCD6?0<$pE4R* zLvKwVa8n%ZXE=B4(QneSp!E~$(Gs&qT?0<&njhIeQm*8PI?9#aGEOtNjZL3{ zr}cGA=vYqd|Kr|ajDqYF8pX>KWXs^rDC}e+8$ZVJ0<-3cva@ID;}*S-cTJQlhXtLN zE8ThzRyFcf^Xj%dGQZ7;Cx!fVbS>S{)yZe?J^K&xl?cdkf=R*jC}hq;MR7mBHj&xpK!EJb~R&uCxf>6l90+x0Ne(LbB&X=J({l zPfVK8<)Ji4I9L}+5e=Z-30hSxx-$*(8tXqXH|bd_dp2((JLwsG$S7x@n1fw|tVj;? zJyR5wiD`?RhkV8?!E8inz2in-Ap^^m_mXgc{JxkEteyld>!a~3oZLyow z9_4O~e>RV!M}0}qFkybJ`Y(lu2kZhJ3He^G?AL9tdPH3LeJks8j*+}Cu7|}1sl)SS zTl;Li^J4bixv`AioS36G8+O;6819aaA(yWF-gvGauR^}6s5m!`_6jI6xLo;6`1L`z zLNf)_6oH=W5(rJj<<#|BT76&@eUAw=)?rh(gJgVQvQ+xqED(J9!2r_ei+ zjl_+l!d?ES>VFH5@^7J!JLSOme8fkf?2a_ZF{kVwpNCkFxe;6c!5vndD|KMrw>kN| z&qw~{-W^)b2B%yCKLF&vk|nfwkJ4bAP5yh-8S-Dzy_+4JW2XCtz^9r2@1xpX{7_v?~A|3AQ=9YRJ!E73*6Tn(-YZS}nZz4etaejUFubfa%s{rUQxw1e_u zxWFf+ZYOg0rO$}Lz&@v{iuoy5+?XHY-zjJzJ3?^{6j2WUKX~hbG33DtCpbXz{{O}N zTTaC9U(EJ_WirNXpReMZbIPHygcNr(DelI&NQ!S6`*Qgi7}MmZaR>2Z|JZ*=ZWkxD zJ5z4ElitkKE3%T_%CwdairAYX@n$k<4}La1<%3aeeB^tC_OAct zddi#nZ$AE4^xs}KAHULn?`OY%F`Aeken!BfJYNUQNYd}2Gb#mw?woQR`-0Z-yDYCE z#RD8Yhg*9P{o+;M6yKIBFAGdF>DH$~WOso6hCKasq9kr`ggvG4%xV!oK>E%@x-CL+ z^thuEcLTs%)=Pe+w7#@x1IFJwn#j>+N8Xym?zDFL-A;M5Rjc6FUiIw;j1C$sldB=q zVxDori5&fuvq+1-*Wx&6Uzlto^1VGWm~qB!@vCv6sd$va!w}j3P6$dR=`kZZ&cM6o&DsgIZrr;x=49fwEeWy&v~ zPRAY)WMoo)MURw?2&g$B>~TXnnPGEe;|sdAhxVb0z+Y)^qR9vfCt+k>EU6Xc1>l=^2| ziu%23v=S|0=Y#G9&g+GbMxwUlcrMPmt^1Tty&F&EMlXpp|2xM;kFsqMpC{;}>{RSE z!(JuOj%T1Tk5a6^^{O9d;VJWcB;p3VYJq4G{)-{n3s?~PQ%hDT2mE?I^T7XZdecy* z{B(RiRw@UQ6Q0z_To$pr5%=O&`LhQy<>PU!H_5pL==3f1MvH;+C{GIe*@C+nw&}fj zOvteXczQ_qD-*rBbyrqs4%$POe)#L)(?xGW@htRa4(p9C;$*!+ygYi7iQa6|dsC&i zX9>|MU+T?@dTnm(`dhF1u8>zAWnNNm(k|%D0D9v#u;pLI9B~q*UXS{DudJn0B_ml%D@%?Q{?>%@=t?+zf`$4CzUOp3A+zMF<6qiLj zVtqN@={$n&#LYvb2A!B=F=A@gMZV>{0=GLf;Ctr#C=Vk}sqY>{GqC-{UeNz!CcG}( zXJ&|P2f_}JeLo$f<>XhyGe!^ zah9LFn0DFVp!jg)`Nr*Vrbwo|f0DB1@cGdCVE@uSG=6CxhKn(yu=xHveeke8&{`kH zED*Omf32y1+IYQcyP(NL8??JZemf(}SH$v|+cC}|j1&KwKobtVja6T%4d?$u8}Cif zT+%q+5q$RiaS+ZvFL)i7Ycp|{#`(~oN7&C?H!}C(7Mu$0rg1ZLhk2)J)zK22f`peI z{uWRbNg(iQ{ZvDVva87Lp|!S5v_=u^w0E2{ zB*mStPscsBtkBlUl7H1sdNksOa*m@*C&*V}h{1+x;yvXa%}jYAd^5O_hTbmDl;=%6 zG+iPcJy#-8o&?f29~Qi=OpS!`CHS~ksS>&#%h=J2lco_+iDaQYd8heAdS9me@i^&? z>DUix8s?lEx|2QH$?S*v}uu%~gWiLm*t%-_W$CvL-tD6R&W+G{{d zzZyr5N$6U13XkF_QgqKmraY*>LtGq2m?=MwCt92#?$Bobk~H+vDPoJt)bTR(1N_Vm z4V~sFQ+{w9d7F@})h_Z;Mi{LhKs>@rUX%r`d6m_Ii$U*! zQ_xG9`kufJuM*Q&ER@gt!t)lhbwUqvp^HBp;C)L&?tSu1u!uPHC2O4GFG2O=Ws@Z~ zv%af?{9O2Iof!G=aI!U1{%njqa+%nZr?T%)Nee!Xk1U|LLC~Ruywh&Vm*F}2qcbMN zz(qjcoKF&M^OM$ezWU3b)rq)d*kj;6l99gEo@uh^prFSxHAmo;S6L;v5b+9(8+xe( z$@J(L#YC1X8ck&)N5AK!rUTzUNb`g{>fN=6!}?o5_t?3@$XqKA?PD(;F&PMBg%b~nexgpiWth2OU4p8qxTcO>Kvq7 z;49~@+;2$hI*hp`jK=y4AHi(%{Z*gQy4;I)KX2rup5NYeVxBBOkqJ1CiGIW*bL`-p12&661JFtaiEbu6PRme_k7Jtw(vRK$$A(Z5*7n z4UgVNRZ<%d>uns;+bBM-jaI#lBjvnzW$Kby+i>V@e3X(HN0r`2ooK@$e{!09P+S+o zdMF=tXye!JC&b$(}LC z9C8;cw*lpxN#)EaNBbe^F*ktMkpU%z%gWnYoxWz%KK0m03w9=bPl zr$475HTrHn#d7@yek+RQ`VBN_isAYVEC;W;w2AkcB6%zW4tYyF6Ei5icsI*WFFjB8 zn*sLM-Ge^?_Wlz8Nk;s2ni;OT%FN~3b1KDYV?XAlS6~9?>MpGFGIl;edQp#+%lOF| zkEu}3gd8@Vo7!(WclxEr2D$eQx4#K2q^#T@EJq)K3xqB9IPE1mWM_Q-iCU%F04!i{ zF6pVS+~-@^Bb{+0GvPP=m-g-SFX}TazO~vXllR_zCgnwblT@e4=0Iiyu6>wL+lcMYQ{T9vKK`gJ#r;eEZQf6&S2}-*|0tqWl5d+v zK5>x?m7iNliJ^oWB}#CAQRE3^yTB=Cr=9LiV|Z_8a}b$A9+e^^GCooMaH(h!a^Udy zbmn>f3FLHk8ZhG66!P4iEPSdEvs{Q-{?VBno+l$i{$(w4Sx`QUOqR*Qf!pk{GgpLL zQs0&MorgxFlpD?K&x|;FXx?v{`s?35|A1Bz|Cc1sUoQJy8U6+IJyp!3E)7# z%u|^sDpbl$Ntj|iU|3=84zL?nIDX9SxdQkxkK@PU=b&G1iHzZIbEFp5^VbBHnOW-P zFDAA5w)Ru5Y=`{%q!Vk1Ttx4tu=zGfAF=s;;V+WZfoY|=?AvoZ zks`mGHX<9avwPjiW$Luh=8)TI z(~JM-*6$gy*Gk?OE=wO6tWw*A%%c(EBuwwQv-O`@kbTe^x;|8;-T+Fa`961c1G2Nj zb5b;SxLO^=+7Yj|;LLJwSX$iUuU3!13ZNKP;%t^1lX*&6W8I@Jy7qJ6WT zeX~xrgIm)##P8@EC%(B<@QqC25Ybk#^W&EXlHj_#Kvsz zqiEfgur*gBr-`%I)gyryeuDG%xDyShrlX=Jy5sBmkudey|aUvp&Hhz&UUfyi5DkI4a0p=sc!Xm?pS`1#Lzdb3fgwNH!;wMT zc{gWE_F7e1hLv#;FU{!9j1FO+Ju})3p9%fV#or;UQ4Y959%j!u98iayge{3kzBK4v z2gJNVR*&0|&F0lcJN}xR9Po5x#(Em-8XeJ3&Nh95XZ0C?wtj-xJVDoGie_7sDQ{eb z`6qov`8*d8XuzXBRSgIfhPb!2fZ!*{JW^i|F9GGi7^27lc8;Yl9lXdt?ufCh1dAQA zXB@3H;-+InUvkUOA+N$S%MQv?kcOBg(lM8@=!`-{rA9F>raLP4365Q+tN~{sYlC9u zNau9O^H>e!BcaSZbpIXh`=L{svFq_RZ9GLp9hWI}`uMzAyp}RWUJMB1Bd^pN=-$ZR zfj#sbwufGY?>|Cz0MaNv9K#$oWWwA0>n21-;lI0^oQR6yYt7Fz(+wOQ)8rRlHe9U? zF#1A_9Vq|z=jiVT=c<*1`qPwH@6K~)vp=m?{vqkvdOWk@*^Z=VZ{eBrDb;YvC-m3! zNwu<(afrP>V}G^cV?062mU#|2|EScD@HeIZVCY{%)yfi4+qttbR>L_~V&oipjJrT8 zF+MlWegK!0J3)y8m++R5<;$;rX{?BewV!7p5jhY7pn!`@I!*Q;VA({uhcjrN` z6tN0lm7)K&oqQJ*-Uc`6jO1nEetnW)_Y8is;gkC3>Wz`~Gq?d4(V}sQV*qkTs;khV zrr+g{(LMGa^)B#P?O7IjC&`X!>|m(x2z;TH!~Q*XNxMBsXM_U*Q5OZ&`>XoKMg2k(53Y z^aRRYAR*#J0vD6U$RBpkAeY*F%qBMG6hs<*qVqzJs>OcOI368E&Nz(uU_)Ze(NQCO zuTP1YVSC{0yy6#UZ~DU6FM)4u8O04~>MLSARL@=5o7d(;?1|5!V^0qTlVNQM{O3FSI{GYU+$p4iz0pG&*xNl) z;h(3oH&w_KS=05%&J!yS;Zzjt@6yq$qC|6&eDLm@q2GFx`|$7P{z|N8x7>X<=hmAb zPYQ=OVJ-p~6~`GvK}&Cjte*bjZ+Naes^gN8Js-z&{_SQ^{w8GqzcFf9M3#8ZJ%|6p zqc-Z2$)m^9A{z_)_Knlap$l$~8h3cq4?SoP+!_8ZcMI;0&5&O>U4pkIxb1c`=<_v1 zMhm9ZWu^KYhOoe_nlsb)|N%rqctn~b4!^v{DYfLlNk7v2=w;{!use!gCj&=i}XcUN-h`hIZ2!Y3Oal zZM+T9`p9>pHIe#g0C{u~vs|K$yCxPGNJnpq(VMlWuRvQ@L~A2A<7@Nc-q8Jd)jb=L z4|^UcjdS*vKC^!*JOCNU|93e`S4S`JH|JHywnc)y+i=fs5cm8xMJprC(JGAkKE0jF zSk-_9?JPw**3(7!vM72zO8iWW*c|dGvcCFOzWVXYQ11GeNA>IV*igr1sADv~1n-ta z*F|dae(7>;-t3sS3}gWK;&1DKXEdj2`nwDWmh~VSFGL$2b+6uY7kXZZofIw$Guv4j*+NuReT}Z&vvgyY@tVeU2vA%ke{+0^|VAnesBE{_zBKZf&&qLEX4To z)B@D9 zAnHRc9`z=dw!ZV(+wrNqo?N{5MRWT-Ie9Vf87YP66l1rqt62RaEJC|@S>= zGCgwk-LSCT;FFRZmu$X%>~ZBi8~0dm?l&-~EU!Cmus$?ZZas?s&c=uGv|WdsNX7f~ z?1lJ{mAnRPBR5Ca_8YEQSAH#n)|IcpziYq)ytqxe3^zt!3qG);C)~TEe|t~3Kh(3m zzqBXR|IMEH!1suRkuZ)^8vEuz4pw?T=4}7eJd9>u)Pt|r0H0e8+IVvrHg!zR#rwI@ zZ$S#wp}-X7e!zx7Xer>qcK_R=0Zjy0}6MSh>Jd7D{?)SI!SN8 zg%&~`S__NNgEF;C=)UA><*kfNT3IVqI>ng^3eb)f^ZVAMg}qy-_h2#J*rFEn;AOPI zt(49E>-H?i{8pg7=|-)+Le`#1v`2nD-rkAHbXMmdfmK3=6nqV}rlY;sB>9y*%G34Q zyCrx-S+zj_Xph$BO??e7V{6mR#_CaaG~gR1*^AiouF2FM@?LDluJ7ITsj-*pcb_;@NxL7HblK|BWe_lL;0&2w-_Lm4>3QLBc4o1|;e zEkejBDnB`4g>^w1BHiVx?U$f;%;Kkg*;GVO(us`>WS!^wb_%=aDr?xIJnrE*k%GNr z#AS+8-~6;@2BQCQE(-U#nw-2;hU}kF!#vc`B5DAAm!TATmLh!Y8S<8i)EHSs8S*C7 zqy_t)zRW#PIfx0SoqymIY-iF* zwLSb=^$q>ohqs^~SOxCu%RrWA=$ew1?crNam@(H`$W@quEYb(O;o<9*e*#@FOJ))N zH9+qZ`bDi;BzlHB11eD`vuTUbGpgOAd>8-(T^?sM#Mv9f)6K;*=$$r1=%+_YST>ea zcmbUwDIymOd>UBE;qeT8x1Qxl(D(K;kO45GADOP%zCZ5jLdFd`ze@4Y8S>BYj`m6^ zCLkT2;tUyQ6qMtFUuCe^Te8y~IO9h+@z5YeGT1@kcZxFBQ1_x>3bh%tLgqat1O0m_+1yF07A4ghYnCkiFsaIP*=`c*3{&WxQbFMe{cR zgOc($)F9vXgM(v!cAL*8_AKvHOjj<$sr-ie^tn%Om0G1oKn@|cx+LY z1s%R3>9FAuBXEY!lRAfN$Y_Vt*FENbx`QP{wvXGzNe)_H%I&V`^Lc1J>V)Q_#rV^C zOPnW&46(>H?o~s~1>&GG5WP>4;8e%oJKvTeBY$84dTu;FcLwA~(wpQsdGLD{xzGE^ zJ(7u>8X0nj9=A_%?HTe8{Wrz6gYSzydhML5nBV*_pWnUP67&1uy013B7R;|LX@31< z+WcxZ?+^8}GWSBhk!_pePdSrgq3psGk&AfT$Xsxhk4EQ%qf{XNs$S4Tt$K^#*0t(7 z@olZ@?L;kP6)OiU=p%6b{ppR!?ZUAg|9Tc6i?-W82fis}N`M#CH{t}Y|6+6==+24A zP0GiSf%E@!z+1CobRz|_b3j9RY?My;L1&`(knTrD5ert2) z$O-(*@*mYGE4QM&@KDsMz1jE$$>mX2it|{t>ce7|Yt_H(#arNTt-1#p+a=^p^(fA7 zVob=JYDZ=cPuPZ?C5dvM4sHTw(>d(-r;7)zkxe**eFG$0(Q$L{dW#QALdzMI2SA#b)#OKUS*un5^}TC*d#B>lTTWnd(;gNTux6)EVtJ* zkSAj1TVSiuX{mPXSZ;*>CEs(&p?Nq7wD1x4(Mun(9JL=?9$Jd8rO`#=B#njxbQYl4 zQm#JQqG8}qW~Fd-73M)uxK(78g*M!q)kk;d%)yB3Fay z^uJyHfJgshcTU?+tySODdB&D3jOaX`(JlCeAtv?NkpUoaX5{bj3OjNV%+4$9@}8u4 zhYQcT*yYga9+kcbD`!aX zD7)-FuRl5ZZ{ksQ**T+sy!DIsPmN!!f8%jJHsY=``}bZv(ZBO~s9he8&zvu05oBYK zqP%}YVuxJdaO#7DbgrgWId&&T3Mm!$m#Zs$Sbav{H>Tn#G#6nH+sT1i%(wP&ntF#Ae z1x0wm>nbcg(y3d;E}|8_w~S#6B)Zja13eVMKF4`p@WCp-8M$|^L!_dm|6n-cy?Pk& zGJ>L#yFV;e@Yvh!DPZN!--WqJLzyX=uTw# z#%^hEIIcvu`1WnG;*bgB7DeVT- zgjK9n+|Xl4&eke_EC&QxS*w^g17b6?RLsnMe)1vvD0>d}3@P_mC03M0(2h_9tzFJ% zw*Z>pGk6JFE$Npu>O4fu+mXGW?%zy643RMYPDLd8_SELZY{+-P&v1mtdPWou#iCWEP@Gi-fcK+e1uM`IY+EQ zW6FR=iv3aS;@Rb=CLJ?q9eTd9N>F93(gMok>q+OT_@ar)4I(BH*GD&|sZU9Kdis}1pe@AXC zoxB)dUYPV|CSP_Yt!DBWP`hmU(tHngS)Gwf4)m}8<~;kO32lApJSWy)j7859NB9XHGqG?7brtmcJCal**aw42QP3^J{r4xY$6l-X!)sHMcenSRbCfzzgBtH zi?11toz!V;TF@A@6t*{mf3YeK>_%lUT~uUa=(Xbp0O+F7M|l1P$nFWswP24?{slw} zg1)v+P?iN7%S@OKK68`U7Z0dwb)9&`sP&;#??XhRbETk~#z`FT1)*zYADMTQcpc9N zNz~8jz5!gX1M$SP_P{i|*)Hecrh$3zS@HZmE@V0-n#bvXaDW3|4>V-j zY3#->BkeTewi(1`3<&vBrHl#AG{JDGN_nmcJp(tf<5Yp&4Op_vJ0@zC13Jc2P9vIK zWL3oty>!kRw2SQg=K49fHFjM+ZqVpIP)|3=QiQ)p$%G|9+>PIIbv;V|YJ9%PZFp$V zBeZnw9;Z1t^MPmQ^*I}T?$-N!wdk`)$$*9@8LO1Ndas`!=le2qkUKLIySjQfQ8Df@pgX8%yS2m)4}dG0 zfz_Rd$Ok&7Od}~*w7n5W%!PY%lH*Y+KcF4i|M=WE=`0PtJfwel(;|!sqeF&2_9f5J z!6Q(O`0}H%0NZ1tc50P-U3@MwW9vhi0|ST}SRLW9r<4uQF29L50XnxbhvkpR#gkXY zGNX2R>3BADQZ5s@zP3utRzQ72*k-lL5}^rj{~pg^<%a%3)L*N<&DQ7+-0EurABc@% zpB#5z;+_;}Hgs-R8jAbrwie=+2eHS@<^MtO7kdP44&iKoptxFPP)Lt}8bG!J(hzHv z6Y~JU%HjS@miGY`h%-_WN*lNwT)dFc3GVxbyfBT}m%&C1^;C`J|I26azr-PG004Vri7a<>(!#llu%WJVW)}!GKz@n3oBt zBSH=Z)X&8{^Ly$|bUqH8l>8---=l~lAPy%h?DjoyZgz5A)0@60&JqPw-{q*8VYyY* zM{&D|(2iP}AJWGBkk%9Mso_>Z!fgw1w0)RkU9BSPJmf>r5a-Zu>r(R-ora!WgSX(0 z0hP`YksJu99}DS;Ie@iJYZXxM6}lQCtB^g!jQg4{b}x)wzIW7tJb&D~NH^n2NgQ+! z-f5?i9I&lzIFD`~NU3*3Nn0kIs`v3zu$J91$RvRB;W9qPT6V`EX$X*IOrK%+$ZVFom|kp+E@x+-h)>LR`;A@B z8nuG!b4fsFk)ZwKiI&@qKauc+yquH)j-J@C`)`dV?yI6FaXd)}UK>K@9y(E!e!?by zblS%7SHp`QarUQHp|cl+l{|W1%P;Q%SHdp-d6H*RLRrRlGXxj8mQhrdvO)N5Z1TIO z1L|tQn?Ng~TtL-y=W696fi(+40X0oXReaNex*6WYh5i5<@ZlMo)2;AdGrUn`;pGXa zMY4WBf{RnP`J&<2+K?T^?FS$i#zxo%h+l+!b3#3nZ*`kwMKkvEoSeWU2gO219M z32z9uNV}$;P{x6VxJQ>_uu=wWvJYi41pXl|pRHp$Fb!TCMl}>~Ws_H&Ms8U|qr32& zpI|n`Y>5BInFz6B;O$tSg{NIQzL9?YfS}P@B_c2^pnf8#h+9-voEJ<`y-ofso>+4U z(R&`Oil!$dB;}mpO7+cl%n??sQoZ#yK#&rZY{e?o34zx(Svp;8SYUMFO-K6(GzrlaBXT-CQTakSnco^q*%g`9_22D}?0rkMh z^RJ^sG)`6~y}!7>+a^Drl(T>4-j_{|u^PBeeV?w61k}IOE0kvK901=2R zmp^<5YKf?kpPm8zvmAR1F{U@g8V1yrde0wbt4+~{4%S=JEUeH{a2F7CKMU~lohf_d zA+%bexBAHq=qb}D60N=tjG!5yon14=`2uTo8{+L=78n*#*Xy)Sc>$?3#W>D9fn$@8 zu`dhJU&`e|Yk)ZyEe6z8`j?6R^4&jE32wnGNj{}x!>xPv$YS*UJ-zRxdQEiq1@FV` zH6^qpBW7VEYOM>eF7{n}9kfz5zYx)P7u86z@-aMzTYXvnV|0kqnl>+9h!?$jom1EtX55kGjHWaBxz1;-zgc*=0;*Z` zl};k@dm}taTt%}!D%HQ1U?hyASeEnA-NV+bQavsBI&ezdpNDux;L7Br1w4gpD)Q%E zoTpr`)(Jh5^OQpH6uMWnm}S;?B6pY#aR@Fw*VO^g*IPQKZxUJw@KE#vbRe{nfbuIL zUGDSy!Ze?neMWu*@=K9l2K0|;g*15i_)aDy1pvtwgS@ z*Fwl81OHBke=)pr5@wpdr&wO8fa37M|KX?Md!Ap$<5pgDf8T}}_Jl94A7f4vnp}ZV0l34)}*!4u?5e-Uy-$MWbP4~Q9C?cHfA9eVMYrhGH*bP-vpWWBRXYDlbZV1(kq0lESyc9cs26vxMXbYFCu-He9Ns>1 zL!gHJ6Lx{K{A^a%6Fjf;YbR|uDKH1IVvax5s(CtZDR$v&&>-bTq%0fd8pbQn3yjak zoBdwOH)I`lqP;hT%rk;|Y>1nm*`D(W+Vhr>q24CHG~p8M#dHotxm%LkvuW+AkDm7? zSNGpxjx|hG_uBD2W|lnmbUH7E>HEZsq!{UrHu>{$^1gE!1DiqlMEh2m6j}qf6byaX z!54aigw_8LJI{0m+lH)rwA0MxZa{fn&7l$=&&O1$+}8jIV_(F^Ua9romw2p+Tn5aUK2f*YZ~0`CJX ze+9ESmAZ{62iu`WeL4u}@5a8^VE@mIeMwlEumJE*vobS;m5Ch-M6@JZne;11w=#LO z3y%k?VX+uBs!?#efO23CA4d(#k3`rXP#zO{KtMUH*+9x6VFQ6jRPb@&TR$N9IReTK zL=$Mc9Elwc;uE;F{t>#jQrmSQkB4-~hW!6FaA0mhQf3KAYdq2HPX6Q#JkhL7{^Vsm z(X34VN?y~1kPU49fo^a&M?xAc5<`XvD0jTY!B@*#!t!PB>lu8nx23&kv4!e(JTGWa?FP@{eIQ(VzJ^5AvL#sjG39$v1G9$@~Gx_a2-d?!&FN?8a3(`LhXknb58D z#^Ic(71n-@TCDel?&_w#)Ts51fIvkxYT9BzprRVpoePLz-%>&AHR`5TJi{!nI+Att zX^HflYY&mPcZuu*w~$vv3273%5bc>CNu>;^X#bI2Wl=KM-=)63Wr%JTogE{+)xv+05Ccv)Fye+?Qm`Bq@T;of>DGJ9kF<0~U8qpSLJm|q1s`mmZ- zITBwPrC6bWdY}XSAdas-+zAM{YL&a=tB?(x%H0{iDsokH9z2xxVeo%pldSB&3elo2 z^v#9!*&*`jaavva1f4{7f>uEv@fzh-vBEXV^9`t<(T7{Kxk{&1ifFRRzBu{B6STS% zv>LKdd=tl>m9XJ6B0GiMw-l6G{FQDUvLfeSjdED;$sr-{YShDmQm+6lByJsA(YF%6 z-yO;dHG-48Km97=2}rYU#N7Z^S(#cfKv{usH#wf+{I)zgm3%AEKZ{#|YLqubJ2*|H zQv@FqS;c%z$p2S_jC{Bi=m)2&bU%_5S_!`R4gJLEYS=bbd3=iNb2ZB6LUX85-`;{* zoz(-A(r+Y9wuI->;hEw<|5FKlu10x%17GtR^+6%!HSLsS8`p+&fd_k&Vi>fXfHmqC z@r~v&*S?8*b5GT%YwJ)q=~c>zPHjtt{2`A8MI~5~EzhJ&{2HY|U|5YRiMiAA$>Ls6 zwo?LmDVI!Xdi8^YHR^pDoheTVI;&CN6m+IVC4j3+;DP<%bS0Yi(K!@Q|0pzpH{n%- zA3^_R#;;@gFMhXuK)th!V=y~`IzZ7QSQFT?ko4@X9IO17NxSa9i0Jz%HOhy=Zmdzv zI^8c#MQzZR`1xHsXuEibxO-6ueoXLn#IZ!)1|_q+*$vn?6&gxQ!*AjL3#bbP4*V8& z^^fZVYFu!ho%KucYgqiE{dqGYb@E57@*$i&$VA*uI-~7}C!M;D{{hb8uh%(YR_NQk zH45dz;Zls^fQd8Q8o8zCR*{R{1*~Ynsc+4vwk7g|54j}Zd?4^djp7!%W{u*#95s;i zQx9lsq%6~P3}ubbF$&pjf7d|nt%mga-Sm4ys}Rldc4Q@}Zq?-G$Ty-l<80d1;AEx( z>_-V)xe9yJR@nb5F{-O#D}YriK$8n6S4Xb_7g`1Q(a9RcBe;K!`nbTxTXjie)wP2F zIL@?XIqFy*D}m>Z(P$;5=U+Sk`-GPjTdmzT)T={a2!2q$4~F z9bswYa_9&pkUVcs)F>}FF?vu!wc2lqX#~VHM3&(e@$dfbP1%` zW!N7rWVCi@q6no5V~g=?G3Mn#=9kzyT%+vq@E+DEQG?dQfVTe1I?+Rv(`k+F^d-JS zdLT|a{rj~?K>d+j{$k+X%h|lA1vuNe2wodEdU`41tsws=HsO>GX^HUF>3v-{u_?M{ zz|EeX(4VfI*c{!|zlg2&LdXKQ=aCv^i^O|htr{D&-cNb~ zL9VTVjIo4BBVB;G%AUx__X}cq_??IE?ZPwjOQHQ$tB3Rz()J&#)#*;u1^gFlF%(cA z75pU^YmoyAn~(T|d8q#{T3$ zMG7!uFNv~d|7{rM(DQ8WT6bv>5>#adk)lL zmDjUx9l|#T{y)AH`sC%%C$H!&hCX@A)0~S`s}GBQSVASb^yKtur`2QnWHC;o+xv@q zu7Eyy?bFrjNg?B_RZaHRC~p<;b*NDy0*_HnNG_aR{59pUz8PNNfbyW&E9LhZT<*6( z^EUS_1}9?sTj2H|vwVQ20;?P!Gh=+<`{+w5M*Pv(t=P%6VvQ+oktAV2slF2}gGNYC zpm}?HjC65RETCvH;M_ZIm0um(9NiMBQnY;}DYOME^=)1LZ{_lTjO7212dk9F1x79a z$61P#8#KeXCz9bq#+kkL%OgcSm-W{B|8SDAf5@aRf9Gg_gzk0~wC39b1A30i4{3kxp*J46ho4 z&o@66n3CRW?s-{gS=H(`Q7gqCX?HL35s-$#@gxT$Fd$YfJ#ykyl@bzI0*xZH6jWw7 zbp@n0EDbilnxCsiIZ#gX%Dryq`?;+0N@UM@flj>Le_`DpI0d(9^*6k9=I=sN}ls5e-_fhD*H#Pl~);01=nLZ zvCp^HX9rd+@>_5NV6|Gnc#uc=C&oiO>WSU^poP&1uRGuaxdPd?+~=y*_4SL$a$_x6 z{qIgYDR*{}B>$}2d?w#yJhV=^ZznWiEBa=Wj(zHr z+@^>-WGKozwNBaIU^-(a?G#+12>b!(EuK3bK7rHT*ee(*@^8koC8I^p{SeWY?j0`Q z4<{sReaNuZ#nA;W5yZ}L>G+%fq8Wd;3`>hj5I<);Y$ytxGWMHyu3j!p zAfw_$x6$lR>5X{H-%5={rdLbpMc154jnarbJD#72WUd%a9k|bIiskNjf2U!>XhRP6 ziB#!^X}2_ZMykzuaqvucZT@gtzck@tPt*JDIq<`3oZ-wGvth)1#$?_!y~ghODdEG@ z@I(CPDMUd?*H15%tY-|?lNG=JeJUbSeI*CH|NML7F++cQ$gn)kCq?h}{?AhuafXEG z;O@a{^^@fW;?oAHZ=cVw7(N;KJ+`Z^#ft17T^;o>_x&IRi`Iq|({L$-< zj#{N6zZcIBBc}h`)20U~MymVg)ymKfZ4A#S_Xd4M`xWxfQ~k&v!?s) zs0d#liVu3Nr>b$|M}fds{`^2({$(}v=@snhVn5}epz?R(Ip6=F{;$2D|96VGf@;On zklc@Y)(`66#u?8y>ix_1JN(j>SS=~#nVc7;WzJ!0uP(kEf0xG7{E}N*W`0rrWf7YJ zi|mh=;D-4GPVdJ|J>Vxy%X#si@wa@q4qukUO@5p#LQcL^zqBM}#0@wN&sP4_4KIpC z{%mSf#mA?Xuri-dnfxW;M}2NNMd}V2_PXTm%!R`hp%RoEpL+GDWBF3SB00s-kaxdX z8ZoSJP8)Xa`KfVYURIi%nf5@Qp>&T|TBZzN|5L*X!z#l!4|>nOkNX|Fe>p1Qq)nZ_ z47?#eefDpOKHoEFqEWl0VoC1oroO#9MQc4cmF6?JY2?PZf!_B>mqXS@7x`DK7@796r(OqvkutS(u{H|hYe8+ZsarhrQ-Y- z-Fu~?D~1g?Woil281D~NhEkRjWcAG%dHsxJzIEDUBO0V$-7%GO#$f)>Q>hbHMkc=aN zDQ$1fB5xBgG88RJF0)2|-ag}biS}H5Y(|}hQ`O44MSKp39`dzvO394xo!WD?dB*o9 zd~Z(r{u1O9`6 ze+772!2b+5$H?1#7I2Axe-79$;FEy23HTYn`vv?I;Fy4)0Q|Io9|!!Zfd41p4+VT2 z@FxO33fPsx+l>LfOu*j>w@E*Y55pXBqe-v;#;C=z`0{onScL07jB>@;99`F0`fS(ZX6@XtCa1r4D5b)Okry^Gb z;d24t1p>Yl@Nxm?1NI0w7jT_`=K=nZ83it)UZwvT2z_?t3jr|vZEmjWyFThs{co6V90sjPWlYpND ze4BuO1o$oiKL+?A0sj#24+MM+@c$C<0N{TSa1`)60)7PWUj^I?_+tTo4{)lD_w7Nz z*#f>F@L~bq2Y9uB?*UvT;BLS>1^kbI9}@5#fFBj`?STJTz+Hg#w zoq*@sd4EEH3j`blyhgx{fU5-j9l$#Uyan(-3V1W%9|-s+!2c%T4S@dwxT&R~vs3B_ zwgekGgHm&_p{1p*N$LzWbOf6#TRXcNTAPAWXRyl`Y}~!QrmZ|l?)ZEY<#HMHywmTqh7(5mpa zv^8{H@U*h^!e_OOJAzH;J-*Rb>GQXB_}b8k*3#Xb;nwY}Vm=;vxS^>d7;Kdq+jh4$ zcS_;bFdKuvgY~mvcUPM>3F!09;nwE1+e@XU-5nk1xi7dUjA_`7L83pwj%^K1!OG@v z+b+GDK)8_&xDl1N@NwT14&Gkg*4ow4*3v@bzMa)6?V0hICTM+ITi5x8cQxz`qW@*B z%{PTR!;LLLsiD2SCEV1|6>e+wg`558e`lz=VRvg&2tzGReqDNdxTWR10<>JU?euZy z%(BfF)OE3vyHMDkZ4DSk-qi5S^mSB^|pKn0(yF0xN9km@{AOY`7^X`rdJ5`EV{E}~y zXKJ?kH5^PD{e>0IUTA%Ad$1(kL7q)w`lGSZZ4K2wXoKeshZmuBW@-{T>+}=S{I^#7hDtnKi z24{I+*MZSDbp@M!4P6aXm?P_rtqprH$_9|ojOu0-N7DkeXDwUWxx2l+tpj!I)SrYB zo#>FpFOp|yCZW?(fI`4!82Tg_VqHU5sI&=;^}Gr047KfUY2MJVCz&b;C1;MKl$YaG z|DB?@vniyuL{Bg&tVZfw`GsA;8v8);UsgQaS#jI$25|jQLuW|BJOw+rMClB+Y?JP2 zYYj?xw5_dU*9M4~CJevyf(N$~Z(=O{OW!3I3wL7u_U@Cyo!5h_)@~~&DOQS~UTPwBQxv`DbyRE4WJ?#i~wzok9Y-~$(sUz4034vGiPdRX}3!<>IsUyr-CSV9Z zU($o`2xk7BnTyPrJCLcmt)W?J4c@N(zOfautyyYmyS+NNC)iTnfyn}Q@04hA>)JZQ z#F!IL+ZuP2Cw^@sQea4vc-90O@XzwRp`)W=AMmlVwK=#K;!BL=w%x(qSo7VTLfpsiKv3hwQyZfFd)NF8mrOXxYC zmvxEu@!dweXEMLCv#hBp*a=}4ZV7kot7r-C0#jwLX1rjPl}g)#twE4Vkd2wT%hd!% z6lEl=NjL;Iw#`P7rBW9Slw@jY>u!z^>)USctZd!Dd!1aM3DbcY!+X(fMv#*Bo%jOZ zZq(~cs=h1S)q<7iSQl&n1<%?5sEAMA`AvLBjIphQ%|EbgTf^>_u5wIEumc1|Li0Rs z+1y;)2qk0>m_?^XPpzcD@QEkn-qp4zs27qLLP$-7aOHJ%6?>b49HSekCR!^X3B3&L zZfU7&3scL!U`KEp{v*YYz4JCSb6LyRi9hs(_k^2+-hHpw*Ur$q&DA!9x`4=;B2P3CbG5hR^%C0XiCy zLa^DpkC<5Eb;aJWC|ucE*MY%p(;C~*)zJc7Q1r(Om3OE1!w;2;Fq@hSx6XJ~6YL7L zHP7-Q0LC7~Bwgh7MhKvCD59WunrlKO@nDv^X134k)V@3KU05`!y{>^opV9l7Utjoo zW(7cq@&tykuF@lpC$+#iO+lXJRkHr9zrL}x1L6Z3*BwDY0zh^47E-5aXVTo(fH5>| zhaLx9D{F2BixzVg*r4~QvNf<_W2gg!R>vg@uWCjKU%0cqp{prWwv9-LH8taXU_&xN z@dC+oL2X=EBCw&1_-gI$uG(#0LbVG!x4t0^^NBS`byT-)=Rfp;pdPVqfv7weabpp3i*>jN(s2!sfjyZTd)&@1a)+FaRxzE zY3$&9aeaH@T?5UkFW5p&a{fpk-q=cdKi7@6lNQq)W(3p#RtqdcRMesiZGDmX^j<)6I!$$Uf#qzccF@ON4dAqp;te-;;$cNA1V6J{ zIKM7yY2nk~N%o*viEUzJjheB1-o*O!X=XJCla>TRu~Y(s+ujvojZ!D7+0Rm`abH)k zQ`)tgiAXQ|LH(j4>{luOE};{UK3xiFAbOk_RynvR4I=R_ffQunC!`Sx8f~G%ov=fL z%^;@p#&h1V+Z%wsjcpAbjN!7Sf&tIe-#z3yKz((35rG=54IMCtN&ZobG$ht}np6g0 zO3(kM8AJeUkRC%_+SLxf2h&NwV>-#QqL~!63d;g|JPdZxTOn{0wNj(3vltz#*}uDM zcSlgt`pl3OvVe$z>u2756___tb_BXGm0U>lPM8MJMrkTB*-#!Y;^&~Qw**OUB^GYR zawZmOd$5bY+10RDAO(=WS%7-EHsLMkU?wu~6q+$QxL#Py&CQH5$brLkAD9442cn6_ z+Gy${w?s=N?kkeGf25LW$Lk;qgTxhR&Nc*t&83|UEf^}tFbV2*LwgV&1A%5_eg<2c zQ8yzd{!4qu>%EB<4SEJ_qK+;v7&VkY@u(vRCAgE}1ec1X5ELOymhemo&k8zE+%z$^ zjT`Iu`268u3oO!R<_cmy#fCSk{Mj-Hw`=3a!Phu%RgpRKDya!mUC0 zvhj0Tl7a#k$ooS~ljB(@V;f9hQWvn&irpJ>#)_uhRF2|&Hp?ew-{FKS|o zkUWjFXkr5Kn9*WQWlaSm+ihr)QOveBa${)a(Cp3H{FX}JNz64WsDM{39Av^SnF}V^ z4;WyO$s*8mClNHW-o0=Lb?mF$)v!HCU63@HQQg+Mo&IC1PRq~qkCwK!ox9s_ys^>; zUsSUf?$I*-hHzd3B_fN8z0hzOKc&(%VH@`CY9t1Tg>Tx)JU8@I{|GQmH0KleQ5|j# z2AH7&$=A`w%p^#OnbmG1PbJCsx-9RQG zf2zww^1O5bsbI6WweJQB1UHbuMm$A(a3jQI;#XNa8q!|XZb-n~>6G|gu?P54Ds6)Y zHVM>9(PLH>oCtL=KEg0v8`)YhW`ZGWWX?D-xp|1Ca#92@LFLWFajWNG&=hNPKC7WeP#|Ns4d`)yCY=bn4+^SSq)d+z<-sVhC{@xl7@TU7+x$RuCRW9MM&zFDU0DQU&}WWnM}N~W;M$sYLeUE*eQS%%Vv-?n zWb2^Tne+$3tl_IOUvM@d6*6TR$Qy$MLTwE*CHqNvP%f)crL7M{tf?%ZMy=^eP@06S z9e0D3W>q+5pF*#CT#K^|pdH#06OmOT=+~u*$`Z=eT&~_8mqwM|i75(89b=l$ft{gj z%ep-s%`sc8vQ^h7UJdLEQ+9Aiu8HHwaMI|RQcDSAA++|&?tB<-Z3N9)mfLXvX{$`r`iG6M z4VgktRvp-hia{3PB6X!wn#aq=HqYq#iyc)oK!kKg&HCDur0AwxJL9>`D#dcCm)YswDVF8+r-ZCLC%c|m5&*Ji zq&Yb~PV(wn-<$Wvhqk~j9$kYBU=Q=68?uD;EMMql7T;OGmKLOE*>GNM$SN-qDVDbg zl~xjrG=3Hvs?fRvVj1US=K0~7HuD=9fy?# zBZF-^pDDH?e8ZJzU(Hie=B09@?F_LwiCNiBUln9$O{(G1tZn-KI-yeZdFSO?rERdM zf222S>&zwE)W0(`ihT&J#+ir5WvI*%5^>w-*0l^32lHKaS?F%d*kC0;D@TTh^Mj5h zKfH~ty)prTMmcZ&+O&E zyL_i{F|6v(*zNKh9W}B*FgR77YKW(|(ond}i38(SNds~VTTKOaDOlEL#*w^I5z#4a z)jBou4D#bwrX_1n#NssIly*WQswPHN=^I(4dGkKHvOm6ovh3E#s67RD?7+4a%@GL8 zdN^pX9do*Et}exrIhL!1(m9s4l8Z&9 zRoc_zwf3}E+sR~zGaW^v(a6c{fa^t!JgFQK-=Q-j!yGIK<58fR-u#Gmq-40_1WH~z zPC1{?H5S4g6;lM#kgZoAea-`T8g@hh%O=}S$0LymN;Cz3am*@ z=5obUHM*(4xxuQ8H7mrf;Zj%gdma)UxBSR#DdzjJ7r2q%^s(KkaoOirLSx5EtA*v! z2S=AlugQ;avdT8+8Cyv33#fg^4LZw$Y%l zb(UOodV7#U@rSt6o|LxpMp`)qErm}jZM(lvvvqDbu&$q(!|a_bpsJe<^jw(N*;syOP(=TR+u^)D&0Pm58%r%s~)L zlV!D>j4w$U^nGw2TFReQbES1=GlS{vEPMK}8Vp;Eg`R!8f?IS}F)0&na#nA0W)cO{ zx#pY3vsuAn+6m)&5-ld2NVbCwd5(@GON872SzNYBimHoeK^a|W+F7v;By&T>k%44y zzCT|`auhBpsc1+d^EzWDi*Aw*IFu{O6r9X*cx+BGmF-P(?r*KXOmc=hF}=vD2_@& zy2{v`WD`f)GJ`JPHhD%;S`~Fv8T6q>D7r^6UE?#D8<>-9VJX*>#OgPIXMg`lk@Q?P zGCfK7m{KTkPXo|1GEgLy%y6=hD~=TBBz4FnljLAofivty<*3{Qi;~llYzw-k$qkm9 zyTW67nP*xVH_3s~WUePU+sL-l z=mt9*?ZMEbHA!M#mU7S-4u%G5(J-DgHV3CE9{??pnvvRCd#Y=E^KnoQsAuJhvr}q%kQK=N1b+b2S!Z=i1QSNTb6_ z@yt!NH#e`IGcaK0nKcwUZwB+pt@(WKvgEAdG_zyTiqqzq)ws8eW=+#zl5#djIVuiv9AZF*l^nlP|^$jk$cW#8i-eo3fvA6z5vG@zd1Mmd2hrJ+TEojY-E^ zd(s?%9cChzwJBY+CJbjuY&>-fds7T3ZrVl?moHBqAH^C)QD&->hT=EdsXi;7K3C3A z(iFB$%s96;b{uayUG3?XJL&SKOGVUv(|nFPi?M&Agwtv7olaXXv=};3*tc~fW)%&& ziz1j4qGu`&)9)OVYaJRe;T`cu2}U8(>A>34Urg^q3hN46GaTe}+np7TeMqZApuaruckqB`)N&ep{l2lNL{bcf>wC3m09aV3}MMxwN$XCE| zaWW@r>N%xtzB%qd@f>@|!MMM*E7L}jPDin%)1_$AX%|mAJuZrul8a!pHYMc0m6uwv zyoBr+SEjg1qxRaT`e2)81l>Blg{h04$+BZ7%U69}6BTTqvQ$=6%2*V~zGtjv@O{dH zz8z$T(ZBwz#C=%JZKb0zQAGQcjpz`YiSa0&eXor;0(;`>&*(#@)D7ZR-Pb($<4hQP zjLfa>!#*>TOXtfUUB>a&ucMf2!qhp9#a8nc9evi`Qa}sdMrRmIIL^-O?sfny7S(Q5 z4yp$4IUQMh>dcx+^que=OfkXq7^AU%QBnzfud0eOovw})m82YNP=Hj2tnNxy**`ze zraHZe>vpf%DQV0N3!VJVx#H)EQ&^R4N5Xc`&u;zCr3QafLb2%_Z13$hqwienxg z7}8FX$rq(8=>zr5)~)PVIwh)(PG|FE+}{b(ajG1kG_eyzVyvn+OEZ- zC_-V3m*$$qFdLVgoL;!VGTGZ7UbT)IPnZ1LI@hf0Xoa^PXPLocskXK2 ziDzBcUP6@lnmSs#)^W7DLTt);3EpS6b+oKIvu;L$cY9mM`nu(Eo-5m%nonQZ+SPSd zy)+|^b=_-P>z2iPMy*jgWK}{cTA@U3qxxB=S7u;!Ye#FB>Mq@VRwunBFwq?Q!d_k0ceQnP?>$^KZ&U*%!;sz4sB~4-MWxr7ZL8X>+%>hdbhW0c+PS55 zLtArex~-+PqZ`K7P($NFt!!W4+P#i;dFgT04yrcLcR7_URWCm!ZXr!A8(O=%+fr>E ztD~Indqj1@E9wocbcU`!E7tKrgAnX%AtU~Pmg-~QN;f`Oprl&6+M3#5S}Z<{2CX$s zT`gxeG1JJFw{NkG4<^b>$w$l|bp)pxlo#l>Khz{vbc>oC)NgD1y3Xp6sHL^N4H-Kt zy|%S^O;bl(im|)Qx}HL$Q}mhkbxq?cV|>6$_U_hHceGXbHW~G1IiSX=||VrH>WlVWhZi`+0snDE;--FaQ+BKJ9{}3Sc*YO zYxg;#R~v`VUW;{mQO93le)QliF0{BpbD1 zx}EJ__9EH5!NoUBr7}$rjBQf38gql3J;+fB>@m*iiH3oSwoKVOGD1sdbx4Mc^sq`I zM+3BadZ4(qvee-eXlSESmP+i}<{u5-6*V?uPpwK?*rdl`noY8xbk3k_}rcX=|+&5`EW(t)2y$y-LmUxNqNLDoet!FF*&TeJjlBI|-Vm zNM-vIdxQ2IuRUwxzF#$q7x&Fuyku$blI((o^RhiXy;~M-S-Nz~k_Elsif^{t~*SN4qY912$)KCM5u#qWzPpH(!+SA71voGr2A#~-a0`D|Cz zP04n5sE3_@7p+;{+Fe~3Gb>k3vMOd{s=KMXwK6WGyA+kW)Ck}A=>DJiC$qKLwrItY z74sLE3(SmJD`qUyp9b%>0@Y`LEkK>%!B~;p^%-!0`*RdD&H6>wjDflX_zt{F6 zeT10oRgxV)?j;fSztD)I)iM?&FgSQBm1FQwgSYc#5QTa`xJ&oS5eHQ z_7vc$Ga5SB#>UL=4h5FK#&x^ir7v~EhIg5v`or&vrmFR&cF1q^MK+0aq;$4uMne}{ z^3K|kvKtZIZI-0G+b<9GePp=gMg~PrXkZwzXIJc$y-GE@PoMVgeY<-vYJuI*Wy92O zzANQ90~n%89}*{zKR&7NF4@40lU3fjEc+H#0Qv6Kxj;4RyDw;sr?i%85APh z3AD3m^{S*j#_UJoImzUiI#!sR^`_prfF04fu3=!u$@cH!qS@ulNV$beFw>N$3k^pV z?zNd7)4E{6$*UGGUEJ8bXyKy9MNKX98do+qw>GvkFJ3agWx>KFOPX7P-IAe|PYZ`= zys%qaM(uekvac=Kv_=E$XPlJXp@ZZe*(o*0ehO~>AA6ORCG)n9y#JPJDu{V zQ2xmMg0rPFZqm5g$e(4iMs^!VLs6YIB9GmbmDOys>$;Kc0QS6HMI|_vKI+=~MIS>m zQmL@xDgJDqI}>lmgFvxIB3xzg{Ru-s+;?<3OhTvw%XI!^hMP^Lk!4YE=(puco#y%i zRS*UTolh@}>KYdR^|ej_sH^fxUTJ?@+r%ZK;arn8&8ys(kAC7Uxj9VCmqhNfA}3ZQ zuND`lt%?xbI&9l=u8%$520H&R$I`-77KT7y3Db<@bszuP6GQ0qL+0#~;=U>APM2zU zL>U3RT4BuDs@9nqZC`Uhq%b%qUu2uo-d-`6YM;wkz0FvRw>Iy%Bgm>>>>tc+ zD$k`1@}nHio5S>KTFz>3Nw;;duI^5^x2^1I>S}9E84WkvILYt!%57KInCU)0$AX`> zXA6Xc3FF;&a62m+80;03?B45A1vAVodHu@jtQDLB z?I$iy&$E5+mq7Mt4^3{47)Ts;rG~!~dMqOwm|BSI2+tSNnD{ zUQ4-3vcuwgyFFaQP=P%#wK|)wZ7S!c0@y#yVr1S3swXsEEku4Wx8 zyIPx0?_Af`(e3=sN;NmNw_DuSbSffrbrN$s{l$9Q^@PPR@vd9n)$Af%y&kijC5JqR zC6*JO&|W2h4HkjWQna7y-IDwJcgbGBiz`8bcBJuCvgsGK2z=R3&441MGor*o586em z*wrUS4A)*>|MBM=${L-b^>bo!z+PFL5 zIXd*2T`R(^zlt@vOc-L_O}+nwoLVlno&f zzwe9XmbL3L&B>v8s3+<1aqIgs@o`r$!&-T=8n_Jsc zsToIg6R8plU4zlwEf1}cCCTATKZf~OhL}jF`HLt_s%>@CN;+ZF%60t3wQ_yR0O^i( z>pCsc)Y8?|-VsnX$1J*TQQWgxU3p0D zr+rnkSS%C<^OcpH^dFt>tvyBtts%?l<3&`+omm~Z-!7ric!5g?howy<`Sv|KhXZv| z-Dz9CJV5ZMd{$?fp$&OjNexkM>q55CUUouf^FhqnO>VZ$7d9oi;K|z7ybRjuH}W2E z-cpm?e?BRYA^_n{Bgxa54I<`Md?GxY>YES+bGDs!60%O(F@qAd7=l62@oFjeWK_vwEsa z8axTcH9jb?nSQQRovoSV1jAfC!cTM2T3W{H6Yi|Pv;<*o9qj$@s)$i@DFN&>TEaD+ z%8lWgR!O9Vo0GRCPfgA|U%au#37oTx1+|Uul(XzKqw*(7$>Bvy21oU6=R+hAj-vqmu<(#`C5JI-i8T&z)&x;70(g7ehn2xaBt z^Rv?3S@w%FDa$T1U7=j&%xpg;vF6Jt?~(}F`YW?i?gd_*ag|2hFj=y5qVuPfA#65a zu3eRtyye*40w-xdWiLfOS{3y;c6yZ6SsRN8x_(AuTm;z3$ta()nz==+dyETnu(dt+nXSzuC$VkV0rOU#cQ8TJ8nvY@3UDvg3cz9^pT)wHwRfq?bJWga}@^=dn`m4Q# zjH-$@N~-b{Z7tZ`um@MHxO}RzK6Sa2Bsaua67`=uqd{&?USWN>=r>~$W^5^rHjKCK*g+Nv^N7u?Ccdx)I-fm=WuUth@v=R ze_BExu~+x;vW)tQoS_6}^@N-HW|_2x#L>f8VPz+-OPxHc&>LnMxOpy0Vv6A01gb^p#yVXVlC=I_ zNKcD19^*A5SK=_P+1}%lo%ToSSWNd1VMC)6@1lfuY(^^? zNN(ZlUedQCN5z0NXM%*4V|(`;$JSX!*lfAaKC5zAu64)m+{wL!VzpJen2(S6Upwpq zM3)-6T`+b6;+wp>+wHD)oeRA<+n}F@QVUew9qD|=U+2hI412!<%wNpWIsUdr7wulI z2&>0bt~hrcgt10Jw+|Z2&Nyyv$PQ!Q~$kYMR|IvNm7)>6kSh>CTt1%2e~Z8>qF^(|sY5CwuQ`+J7T?c6)xS zeqco_l`!S=#&7ovRSctOt24%F-spM5 zjs6D2I00Kge~ii=J1LjJuGoApi|+k$GjaI`oi_RFYji(a@H8bfu`B1z4SM4tl%!1}ZM5RvK&qr7%d!zYle{J3VfXj$2CkvV^#Zn<29IIY2HI^+F9U-Ght zN?>oLQU&=Nme8NJQ8jxz2wf>>6@AG&d=fNRXq}L#Y~oRho5D3ur!nGiHt+a~npabB zn@xG?SZWL1tT8m~eoqA>9p{IQw&Uiq(85wRzygI1AjJtS3 z!qcbWsmNYxoUgZQk@`v4I7_Lj+i^~+u{B)7=nsn7ca5aZj|DD3EfiB!Y z2JR)srB!yj#X=3$-d_%Of!zmn4vs3it3&7^%a@(FTZ_46i%i;$W^9%+Lo*zsoP|5x zEBv@zspPiz%qw6I=hN-aM8*#HBW8i(enr{2GSN>82Y&_U);dlI*Wv84zhJPz-V<9V z&_1wmo1QFsaWwW=GVR9oOtxek050dFlO2H05ze@b%enR8?nQ1mXx-S&i_hauZ*6Jo z)u{T=LI8PaX5Zo0@tSLws*Hc9`J!6UKnSZil(Gla|sOGW< zXv5W)jz1LR%?qh930gJk8U|52rU~ow2^ORcb(xm#>eA-9Fde&3C$?! zg&DN+M1ts&}kaj$bPNOz=kANq1;0vnrS zT(-nWu%Rroc41!;)`5q?S}blK?Q7K8Tmmy#x!T_owjI#Yh-(8zLzmZ*oyrkP^ip0a z4 zy);r}ekt92usn*#n*^4_T8i7#T1t0??QW~#?e9plmxS)#ePR^8GH++(&dB9*ZMj^X z+_-DIcGvZd#^(A=RrgxdXLKKWQlPr&*_#}8?=DGZT}GJ){~}d+;)&z4S9M|9zT_{e zxW7;~Pvn`PU84+?Zbz%%G8NqM{bnkwADZg6MHKjd`?C5Gv2IzbWc@Eu-kjQXAG(0+ zO@EOb)E!T9^?gocm|?h4=EwJ-(v?6i)A22CyK`+PvZC3ml>Hx8+`S2!9SQ#ujY|vF zm2R6T3VwO*Q-8?tyj2}yul#-v*jpB`@4BJKsxy0;Fe-9f{~|k-B~*gFjb{H-@v8W$ z6;@E2#($V)Io*DvX)CMVy;ct|FSxW+TCvC~NLJg!eZgtVbGZ{&p15-Nf>| z+eFsk4mWt8zF4DOu>_^ertEDuL7xw*qSn_ls+qi^X7x$CkVf0BDrYU0wvvJuu*w*m zHv(PK$*Bfka;l+lZdA~Dp`a_4#PqUQax}shxVMB+VW;`xI{QQIZEkb!1z}g%f1g-f zzMBH7PF!)FqqHF%SD?k$x}SaZt(h`CCTH3!l-d)0jiLIYga_4I^&-`~M4%CuS$A0g z(CL@4;#PfYWgVwShAQ0AiV?PncLPFg`FP8gj2TNrDy>jUE1fEX2O>~f1&{Ockz(Si z^(zt9rr;MFu2j{jQ&8#ktmd)X+24s!7@yv`JC>YloAoqT!?vNyHWybT#1KUqSDM|& zvjkU0v*I*!F8_DX3Kg|3JI9U{%fb>&OQx_wqTK?SRo9>XH2D-`5@wQ_Y^Ip~%>L#8 zGu0f(rrAN}U^CquVqRtrHHVp(n^%~_%@O96=2hlMbCh|t`73j@ImZ0yBbS)TQ%oX3 z9K#11#rKXe<6;DVoA5t<YG;_$=~iB~3Gl{hkSRN~c%ze*gPI3{sy;;$3Q#BqrkiPt1%CT1m$PrQ~C zr;whWga_;3&m>^7e~VV_KSe|yy#rr0&wiF;d|1W3KcJ)!0Hy+>=~0*vXLWqj@C*48 zZ?%8OQ#D;-1oBt9dK8z^Js42_rvpk`c{&JC9Lk&C;W-3E;YAm3h*RP9D8A~nef5r` zhdhP&6-U4om-4DKL<{wybd|os>WTS79R^x>i%)Tfx(WG~e|4IQJJ4#Sp*TbjaR**V z_KE#Np5+nB;kaBGLY_igal9dn-trGTa>w~nyoyIOr5E#scCHmZ)S<$JI6%jxrTUhf zh+n*_W2G0`G?o+Pp}L%st@sJyM01kM4r0mHx;a0zfFa6ND< za3^pd@IByB;3?oaV9L)E=1|~hU^cJ_SOK&H8-ZS62)Gcq7`Pm`4!9Y(1Goox0C*U9 z0{9(Zo}m1|k-$t~9&ie<2IvMh1O31*;38lTa5Zova651}a6j-M@Hp@c@B%RPNy-l- zfd*g+&;oP<=K$M)VPFin1h^8o9=H{_6Sxof9`Gpe6!07{<$9`qZx1TrWj8{^o zCnuRbz}3KYz?DG!w3DxmQQj`OWs-SsY#{*=mstXt_L0keg_==Y03rk1D6AL z0?&LE`qw6zp|6u3@F;LGWxG8ppXQ!d0AF}EVOE{z@^UwLr^oLFKhxv8sKfo@c10?4|@D$@M}EY8sQtjLw?Q!|FY+KGk8e%&E)4^ zPk+l(W%}FU3HiS);#XOb1anP9QySt`xde(^WlI zw}BtH&E??{@C6>9{OdA48~iFy?~Cy3BmAEt{6D}$xnB8989zC~vk`t7_#1LA4_^o0 z?eYDPlTas(5xx;T8(d2>%ei8f3*kUg7blodpyv7f%}z| z{aghdLVpf6~|G zUEu%h>+&IRLUandiY*{g(L# zJiEx44(P82KmR0S^5Cxp{|xvZ@I~Mwi;cMj{8aFFfjRI z>OwiY8n{jfkMjMTFIWG?u6&|bm+#pL%183%zeq=8%lAn?$it;eX%EUO`hLrd`Gd!& zFQjM?;iSC`j-zscj@2mheQ zp9TM<$EUX%bC<_Y0{G@Q(>?we_*ou* z9(=3Ek6LBSh{uYGXd{=?{T_-{Uu|G3MVrelPf>|8V?? zHpXg?9|gYL<89#Qc>Jy4pP&vUcMpNT+0zevgE5zRd=~i49v=Zu`}}+d{9B&>2>6p8 zUwXPR&wKnT@RvX5;=dPsk;e~grw&PXGji9s)|l=<@1RaR-Uxmeb*?r&1N=jQzRs9W zd;ALUdp*8ir!n94_$=_Bdwc-=j~;&)_^W;XuL0LH#e;Ck@Pm60?RO{arj3?@6 zPZKuzV#1uKzI85T|4%pnCpM4o7nA$YRo+wXH$+o<;rvY3YtNA01*A86`S>&r zA?%Ttj1RA{hXM1aPBNd^MO}Ze-1pXh$e2foQ+@1n;6L~H)8ME5m!r?R(wMa#-vqwP z<5z&+2rfP0S@51eq2H3X6Rt95$$^v1`@nAiZ-K6K&$`x_e;|J0U%k$l)zc=~y1VOd zjoConl!pU9Zp^Run`GO27WnNxtyb{E7@Z^s8SpTU|BkWiZ>LW(A0{o8Ty^;jw7j4U9`)}h{rf-sd)g_J%rQU%umsSfG*qX0ROj8k&Szih z{5SFr?R6&kPs;k^5jk&|) zH-H~C+0m!p41JQr8$V^t1qp|@fq$1c74|Cdg`VeW@K%p6|1|3fk6#L&^7td*?1`4adS^UPoW$Xp5DGDMjB zXmjv|=Tpz$X5Iv!Q6LZCKPIg;Me_PXEvYA&kAQ#sM`d|C>XEX%odkX$JgT4d;1~F^ zoDY5?bt`@Oi{Q^f7tcfBl0(VWbI9E5;rZ%tSq=}s)yd{}BHF>wR>AkN9c8{lp>2lt zb!d7dCsUvms`#ctdkeJNqOdQJ?mMbz2EO+}`(>1_@;Duk{4YLjl1T&Gfp-Iv|7&=E z9{4HnTVVQ%N#w zWRL47a{a)#I-UMwbPn?V0p$KH@ajG@i+G+PT=knA5^oylGVIK23#a-Yp zCw{fx(#M#)NLTVY0RCTI*6#v;+S8u}KLCD>aZNvE4uP)uY7_Xo!A0K<{+Op<1umJ; z7;z-+@CCxgZGAMfzptXrg!T<+e~8*E3GMq;G@`V!rno;(Jzu#3SpdEa{44NNV0shl zX5Mw?WS>B?>YySOle-R$Z zhMsRm_#+Yi`v`ye^fLcR;P?CZ-_1LQn{fXCP|U%uqcoHU$#9V4g~;&`a%-+|c@U2t z$p}j$b2@4Kl6W3Lj)P6*Y4Bh>d0up6OE!+_YmsT>PjY`0co;8cfxm!E|A}~(cP7l@ z{oU9<(v7_l{MC%VXKlbX2rixZ-ZK;C(;m;Al`v4aH2&5d7Q1fT4A4%?hC@Avo-8SI`OKMDLrkB@-=1LZx1be{$PH(&N|^d!vR zqW7(We#N$gnFg-B-EtmlSJDzbI+!r;gDx4mWjJAe4X(P%?M#>^@-KY)?u1zfF8<}< zK`yTWKc8}Gd^zUL3G+5^*?vv{4{~|$Tc~F*e@}u3xqJ~k$mL;U2@~XU7I=`$`Tr|X z(nG%k9`w+s!GG@SZTdynkG;ILGe%4I>?WU*Mvb>ipxq2@B%;lR_E~7}j%W?gz6|X{ z5p5o{d!fbiMJKdxSJ4(hdkorbQP@+UJp=6?XzDY{PdBs|pv8K{3TQ7oq%w^bXs?EL zUliXOXs@fH5v84frtw~cE+BoN-M_nep9@I8=m$Om$p2IR{Wbsoo_{~e`&YmVzKc|0=b~^{%PO|eP_`ROK^z8|g z_4EPoe+@bS_!*x55co>!LjCEucVO2CS3JwX-v}-p;O*d9aOnmg1(%HM2W+GshoQ%9 zdJeQVRnay>yA)civ-Lu|0$Qw7Zi99mv{+Xl8QU&OZ{?;*W+wG{3eW)*fj0pk0ImVP z0(=9|qxwG5V(gewk87@S^!xmK$%o79m>Kj_*)qRM*{a9nA;Ru~xB5{Vyc~ELeMkL$ z`o+;0`>upJYML9zZUR5~W!NQ=zwEo&j{#Smj)Ff!SdDd;g6|{`!aoXrHax;V2Y#?0 zD-!Q1k8j@x|7XvC*d+<`CeJ?$JbRD}yA=GzX|7$@f*%fDZTuPVH+cMrOB3e39v=m7 z^!Ov-YGakUpEjxPQ$x_MCC#|)V72Y^GTy&>Bep!ioIS}L0vrKoec8ZU^i}?SE^qZK z^%wQ0-JX7pe}B!tf5}_^lg@GPzw+;s{rgP+Rvy&uY8yRjyZe3H-TV>PhL7@=zuI~C z0j^G(-aEeCFC^^6SJ!U$0|{Hw#R(hc*5!M^eVo^T2fh4rm!Wr3U*ACn9s>W8$DjN_ z!u*TJ_q!rt9`pD~;6s0Mb9WA0ZK3=QQ}2I(=SR_42HDoT{P$1~R{(lc4_X)LQCaTs zWm$5K^WVr@^&p$i%m2&i#BCo-n6JIu$@3%N|K#z@K0dyFE>genaVd@PD9%HGV2}9@ zVMF~qdn3BUi%vgY{|V+V($#$Wxlgj^L0UfpfBx2l+3yu@p1tNa^a1GNIp(wUDd@6C zJ#u@(d>Hy4px^a*=6dMDZ}}4AAo%_};s0{N{PHl@zPEtC2fF0{8{k)gYmECDco@re zQMaFjeiUITq% z9TFy|o?mjO2ePx!ZR^Jcv46zI7OnOK1gBtPoq!I5nrmi_Zb$eQM% z^~gl%ZYNFT`avXVcrQ{eQ6Z@@4z*;T?76H;*`GdMexrXlStxb0xGBpcNy&tD&6&ZAV1A4%#YcqY;fP+HqIo>i0HJGCv0r z8Rk%6F3<$%QCVhN%(ZRzM_t>_{#)n&1n)3UZDyR5ZQ`rcO|@Kn6}g!Aca<`sXcbm= zg)_;Y(&DY@;)5+Ei!NdZ#|NO zqb+8P+Oq%e9DU>U?)@Nd>6!8K&+yfH)ZX!!A-;=m7|$Ezs*Q5IZx?-0bxT-rc0iMT zQqMN|wGE z$X1~Jr;Wh5Kn@rJWXI6{_XmONfiD2s_tyUSlfZMp%brfy{pIgs3)SAT_FT2sYWG-w zo3MMT+FM=^oDIAgxCXctxC8ha@O9w(z>k6F0qwU+&zt;v`T{TuSPh&BX#X`2Xzx{f zuG(wW9;^0NwWq4RRPCW^?^JuH+AGx_srE*-C#t|RXD^CCx04sp?z*gYhz#iZV;Jd)%fX*KM2k)u>Njktx;8dU)=mO3H zazGxq5O_au6L2r^eL(w(zXJ|?f%*YjfK9+I;3D8s;A-Fw;Jd)1z{%wKY2LpFPJfZT zNkICf>?5*^$Q~j)i0mKQi<9j``+wT^)867ijBV0&Ujxhsv2_tV&?JwNTs zeFczy`UhYtW62HDC0ga0q4^N~gwE)^5(|*=4AbYy@n6#%Q zn~!Ys+82;*UG{j{-nBn71JM4H*5_K&YyGZ0F6||04@rAR+9%TfkoJPK@1y-8?IZ2S z`d)ic+Jn;mm-f1}_oaQVEU*K3KX5&uJv7-5WGj$eKzm8rBhY?;_7Hvy{1G^43h@Bz zfh|A|*a=(=d=R(+_zLh4@EhPo;4tiq#{-LiR^Tik56H$Y+q!J(vOmcVIdgyXWxcRzS8$*&t9|5$#rggd2<63WPEv_}Y*5RK9ehVCcd}!T27m(dh_Cnb| zcK|nIANeNm6X2J?e*g!tCVT~;HKx{h z6ZkA3{o`AJbQR5Gn!hwhX>Pg`cm$B$Je;T0IZd6%)EUkA31>HB+MkQ-e5W3r@6@9+ zpgR88Xlb&t$uV)wB8e+Ijuf#TI;Oob(B4RZhU8@TYfjc1G{Mz-^CY? z=X-##&s6aZzh^w(t%N;qMNOW+etXO_dW8JhH2>BBl-r?=ce$4!Du zKb2ipI^>~1;L%%d(Sx6Or5npH3Csj$0}X)UR6H|0E}l4?{6*6{;30m+E1LKfhtfy_ zGXaH>zj(zH@*Bd+U(bC981rw8C$pW?x(_~T5_7+M5>1FxV3MfNA5|-R@Ub<+;RFxv=zJC^r1;65hu z--cWLN{`|j#T}RDy}0B4^@XbNPvegJ!*jT`|DZ?lO@ zI^3~5_u-EF!x-+k{V&2Dr++!_Fghy!58;mM=QiAN|M?bf*%9=J|GT*3__d!H=l^m1 zeRsC}|BgGZ5A*s;|4Fz{aM4@-2Hdgyoq;=U?+v))^7P@3^ZORuaeq1Ol*;s9-Bc;B zJ-FliO~oCj_Xfhp@pV_ZC#|b2zs_&P@tuM@4&RA8mj6{%{%PEC`Eciey8fIH5w_Jia6?4mqz`)mI`uFtpOALmc@x;Xqzjbk$L>GiAGhCk$X`5P z`~-LG|L?ft^nQ&yj_>!lDtB>3rT+C!-0^&KE$ttVpC7Gq|6P^5{QQ_o{?FnckLUk{JJ$Dp ziaVC4EwoQOAMU{&m+!;4M7Gb+cczs5Z$^6$XCDRSS8J1*~+amVxRL%8Qh z{0DWhe-ybFTyrS~!1vm*EXxK~B)S9Di~Ux_=`uLg0){jY%gGP`J}!!HCGNPsMsdgTF;*4+J-FlczYcfY zeqYBO>*o*Qj^*!XxL+HkKmCo^-y-+9xL*^w--bIL58sLVgvkFhxa0Wm!X4-5-*Cs} zA3g`$UljgW#_L!f-;Fzr80z1b;*R^%hj7Q^=~cMn`uJ3p|E;*=@$5d_@%Z_0RrqJC z{P#Pzs(iTP_;zisl!tfWj^qDhrZT@T;EvmO@|Mc_Istd=KM!|2U!Gj$J_UDNzpHV_ z^>qgBc>aAO?l}Go?l`|Axa0Bf#3B#V{pgv(2V=Uh<^}w z+}`Koj`RB_+{uXlBe=tO=gH;=Sr@~a|K;9`E($R^JC69)c-r0YUK#mc@9`tCLpJyb zXM@lFMmdgbSULyzOQb02tO{uqC5g0PG3|MSW>v=8BK-UlA#^ND@ri_26GpZV>5FVE%) zc(0zouU^{K^atz2ari&&dmcMq0&jKt`{F*Wk3E9R*@FeDpD?Ce?ESjoy#)Nq33#8t z?AuV8M{a}#mgcwITI+ao-rH}#{=zprk4H z0Iy(7JQ;W+&=0%=(DSax*h>dSf6AQ<|Hj@t@KNB4z;}S>fy20KXDM(7@KNAhKzM#c zKJ{FELpiU(FXZ!X@ApT~d*1}SPvAH8Hta*dY+wnn2G|Jbksk2EF%@Z9)h4@&?+gEN zVxC*zIr=`wBm2|HYQERRSyB^Q()2XK@{U_V`UUzL} z{7QT3XDL508(0FY0X72LfL*}Fz?DG!BynWYoc#epexLuGpOAwXJqr8xgn1Bn#D`7dFTLO?!d~LTUd?-Ljj+cahYk*O07`cz;iTi- z{Ljdz4|_N7^J|11Bg`$pmwece=c^xJugHgekoOfe!fu$s-U9G8K(-@75Y&uO-aSfMIBY% z0M`OaSL3nzV8f&I1t0bW-j~)0`=5kSUzl~G3#)pTY#jXHgoA>iI!gdp85E%AhRbG~t z<^{s``mkfXkLiaPJ!+#b5awIJzxc4{;D0c1@#Bo0KJ4ARo2tTYW^4?zVX(<4T)jtY zy)beI{$OjU6-Ij#FC~82vK7C=>`VNzg{%L>{2FiTJ-1L^$*$5+zSTaGjaq9d$VT~5 z+;RL9)sJlDp?)MYdM2tL+1_7D{-5*tkMpB4)O!wQ4pN^Hzw)E9CV_g7Z1>`gHjdn|g=y?c2p?RmRHEtYfoQe{c|9wC-}ktOYmyp*>1 z1!Y&>mEX|D^T6w^v40b_Mc`iqf35X4Wb-HZ)n;*9Ow`tD3yl{szuLRra~R{J=B=1N zS&td|@$es5#XoZb{$}{6d4BD`Xx?Z5UO*43^++~;GKVu@z>9!nL;1V#=kEP5Z-so6 zajg0|thqeSguNcg?UCp{wVszM8`o2omm(Y5vkJ0d^FbyiY73S97YnfCEksuXRCd)} z{}b;0IB&%_wMM^)$MCr9hogVhdS2=nuDqSm$eBc7C!oAZ4(|JR_g+N1NQNG$(JrCS z%3phqs*51|pyQrC=3V7F@Q3kv9HS>}hhOcYCzM?>d25}rYws|$OBfR*m-U{ox2XK6 zFG_yZ$Ll>qR{Se~7NFkq7Wl=d{Dl0s*JFnMZuqPFZ07|0 zAAmpfS+!L+uyF$ZYv4Z!f3=y~^&DU`P|L0d+1v!b;tloL3%*Srb)HYduXc^g+h2!Q zODHU5act||3vzR&OTI+8xxJ;2e76I@~QmnZNApG z-tqiCn=lRaG7tR_;t%o}@;{M09}9nw&%iI4uJ<&+uY9Zi^_J|P0@Qm>fj`Kn@+H|{ zQ;!*X(8t6Q@-tC;#bcfFqepUD?+Nk8@-tEVs(;CY9_3%pMDgoeeaS=UFOnU}Lp}Sm zzUh}d1pXio^=!;KtEas0YyNeXpjw_M%D>JQRLk>3@~`s7`Bzz0hI-|delB?qPfHvIMM=#Ro5xz@=xmniUr&(diR%9;YzE4^p1?nmJnO8N>RwOapD2EnH{>UjSM6Kx31{7uC+P!8 zKH(t(3Kg#4(@>ODGZro04sQ{AZk>+RL(Y+mRup`BDe_2f-w zb3*+De)WNRdo^!+ZDoH6{k`7)&GYbw_6_l?4E6SH)W4MfP+o;m{_FLx$=Gc|e^P|zZ?Eo-Wp(> zNIpLRe;5zG3srdDT{7fXD zi-|wfe~^2%LA^cd*TWy`Kkz5vueWD>D*U1T1Ham=-afLic>^nVhTg zug*EEE%b!8o~SH32OZi%{7FD{TkqKuwT1HC0L-h$3|;4{tJ|Uldc890y; z;PuYJNS2gu)oI{w2d{SqMzR#vK7qdz{(9$Mu7qD>mfAr4-M~hm-Z_J7;n&(+`BAwS z0ZV{-&yDb_9>p(ROY_(Yp#AaC>Nuk33HW~v=sB!`y$(QOm+@W&$Y+4}`GDkL5AP2G zYU3~Pz6(%a`Z4dv0p)Q=D>Q6Os`uHv=K`uz@dsY<$xn2p719Z5D1ODGIFv^{%AfLf z8R0$*==l=wdjQdY#`_O|e2&HTcs!u^T6wPp6lXv00-$`nkN1ZG<>gM^Ujy`eR|>0e z@|T~|2=Oa!#i8)ZhaQDhK9!Erc*R`K9s&xpg7+H$ah}h6H=wvb#`|-C_(hk$!s(Hp zcobG~%w$YB2@t-W_gevR-pTu3K<7q(%lnY|?i-2@-o1ci zxd7+`@8i7-xDWi(yuSo|!}F{BibLg97?o3bP+pX#@~M0%KT22SQG9Aw#ihQX{OehX zO|%_Q*qyxJ4#?+r-d_h4*YkR_r=WN&&RgO1h)UYp{)sX+_u{OivJA! zMuE-Uwexop_l|A?Udj3D>c@sJ5+10Pev$xJ;P?AF{;J25hB;#dT*i6p>PPXuLP1xv+M4)z4es!rdW2t@xF{^Dp8)BA}MP^0yy%*);;y{!jcp zat}fLi{_U(=^Kdj-_;SNJdDcNF*Dh5iAl z^d!N~!taYft?-KftlPND8mJe3`R&v%P%FIJ=h@FC%)sYs`>Xs3?gcvms1;uRKf5Gt*bKAzvc$^uZC$Nr zH+QYv{K}TDrhWL=+|{)C@TQ@I_kp!ubS;~cO+$wdO&L0T^KmOvD^o4qE!|B+hYlUR z`L9-{R&_NE9SM3vqNQuqSuI^_hK^2wZC+?OHy=ta2|3l$a-zlmS~kDh`)^Pf8@v2l zH+u5s*RI^BjH^OiDM_rNtQ(rTT2rl?uS&$}#(3-I!$Wb7Ez?`y7-#%so2kvm#x%;_ z+T{t9d)4L>%b}?uU+kBf{ZeUHZlKP|xUI)>%r+w%lwnt;OJlE=b6m2A4$bUZl~U3x z`A4&EzGZTA*Sr?$W=dCcY9(!VDbpIprXF67id>9MQ}jeolAcmm z9y@SKHF0cei8MB)gvMNB(@NyA$u#hW7Mh_o)iktmXe!AZsvb4LzvlI|d_yxHwj#Z5 z&davO97;Su^&`fBnfliSaz0nc{GE zOFmQRHDfErdv|4vL;1npY{86OUn6v?r;yDKnz2hJNTEBkr9Z1&HfQ_$&Dg=?6S1E8 z!Qn!_pAwm|izbcdIWsrdo8M{19(}R8ENff4o62<(Ww;zoB};X3GxxlFMY&Wqu zot_=d_BIuIw&ivxx~nIM&a$o_%#@fXN_*|duw)@MT*wV>HDgo9r|daw2G1YK7KhE) z#_?Po`Qcn&t|v206E$ZChn2~P>q=lps$*nei+BzlA5~`|-;*sC+XnmcW^7GO{~sCy?x#Cb}xMy2>fb6EvH)EHV zv)EMj%@jum$^T}83{d6i;Y@LRx|r?nOPjI#${|+tj`sJG!pN5N7KSN_+Vy4MS7~rr zogGAadRlk&WQSbCtKW5`x<&@u^ZB9X{J=ndaBaRf%aC&+J{2Q9BTb=@8AZrb{H~mlaj~}KtPo}jME&>#d{M5aj8CUM-;>b*cglD#-<^H#Z=4_r&*=&? zvu;drjwdQv7->i*)gJ-XwL-sS-0gpdZ-zDqQrCEb(8MiZ{}BSzk5oJ?D=M- zW0kty_%hJ*&Devb2x~ADvxSyyUuL9#7%?a(9XMOpbf4AP%GA${Q5K{}<59vEG@kA{ zQlTg}Zn%5W%sqFM{(W}OT_v0p(&^?^^h3JO;IJFVn)@@wVpp~=TgVPdjkt2s-6*fH zZf{=I)K4ePF#Y-b(u3aWOP1JUOu?Y7pr8y5_4{#pt;U5trZC0MwKnQih5UdYG4Ysc zJyvIj*AMn&Mz(GnE)~&DdyGn^aIj@+&u^9EQ0qu#HTiUAhPSOEH#tTYa+S+6q_^bN zyNhBy+_Uyu-^zrK^nMd2e6(Y-Gnazf0x0HWl}8GFKsk`#OosLzRbo2R+q*V9ye;1= z^6V0MYj(KJ)_700?A=hyJC%D=R$=GW^4ySNVq#(y!=eg?9hpLVW;8#-xNQncVlO+; z+sw)96ufdUr^!)AX28a@BBHJ9>nm#TH-#3ccEZS1DnFh1A$hN<=RH!~Cja)}za_hs zkrxr_vGmSBXL>4AyUWy(fo#D}yz1I^1SPhOCI8SJ(!<*dsEPQU6Z|L=v%H#vq0S2s(iwHXA1qnhl+{gA1cwAJJL=&A)?_*@~)h%&0UU)#Hi*=LUm!8 zOzdqmjPf#;fIL*l59fRG{o;2r(~>Rr6mo7>f$O4#rrvbVu1q@PI%zhY4b`J)E-o{a zD(jL26LWKOb76GI=4+30r&DX1<}1wQa<5A@4d(}PJxo?ZnL@T{us5|cGt@a;SeYr% z<7^(Ubc}1W1Np*eM88_}w4JfjJ^7(gMS5LCL!?v*^p)IJJ5F3b-cyry9+j1#H(KBI zgFBgS)2Z{?&r5e9Ppo8YCT_0bTSR~q^44*F>jw)_*xRkYGJ@KdE)3hu+~J75xgEva zLd9~YBcM^Zo_@D;_vLnt3>JI)dUImB#}Nmz13g3NY}>YrcwdP)kl&FF)cYN^th@AO za{Xd|z>Kx7i^P0EEh91 zwa$KDpO4E`Qi?Ktz9OHfBwKBWuuoNx5ybRXtGK06*+*>B&m>+MsZm=C`H>;2RLT^= ze^<{l-6!woYIvg^W`=FdFVyhenQ^^oY*L&mI;9P9(WJO+HjC+Ud>2=QalR^1e`ZV8 zw!kG7!ToYi`P@?xl75PMSWwVXEnHp^G!*~J3hHpq$>r6S+D`*o5x&kwKEy(4*jCE* z^3M8E<3>69`twfqZnmy6>#f$!x?GvOT@Esp9o!-39o{*Vvoq11!Rg(1%e^gM98M1* zL+PTQbnYpU5zt|}S+2*q`$ZV+`k|`R-C8_ls=x<;<31zJFvmn+~OXpyXv! zkt(ea-z$+Bltp;3L>NMRO9Pp_9}Cg)~^JFJTaS6=RP4l&Dlx13BY8Mo$!a!;V3X=}YGuKPTV zitZU;p(on?mPQ5iS%H7RISV}lHs9a#&fXF0e9${fv%S{%PCaX7iK!Je~3*9?-)QZv60d4x=i zO;NTSb0Hh%(u*RhGFOV?;@D%Ph@{$Pxx|wFfVW4E9Ru_UIw@VNu(ObJa(20VO0FxX zuz+U4;fIoLg0DtZ8Y!?UvAyAH$I#^racZ^e9L29Qv4hmN}K6a2V=lH_$7z5X&%U! z_asv5iNO5bq#pCF{hHfT=7~e>dd=MPnvRW4g{|iPg^bg=0(POFE;RcMY@;!=JsLl^ zQAy}FZ%e$<+??!BWamTB&tevre=+?VLY9a+yE9VzRkwfP8(X$T`F{8P)_hPPR&CzR;aFpPHO9 zU!SZ3^jp6dCbyXPPB~L@QC|3W=Tj`Nn4V;JunU2oPT7FXtk?W%ij3Ljiv7CH&l}d6 z4>h*qZ0eDHFWZZu(%jzI)=Rr$JIog3{!-%^!`+j817193ig}t}*fWzV zQ(}R+ZYOpeh5f^1OmG944Vdhx3Q_JSw%_wRd;I-iA|cAxp*(V>;>nuZrj(2=L{nXa zC#IN5{mjzU^oOTdYd|^M=COt;=CP}k$`v2c-^)I#_`CB%?b#jKe!td#-+nfq-gWPO zWa$Q*4QuG{U|1v%-YWX{`&pt4$PfoI!{)nW`%*Ukr3;pi zw7L8cvwzP>k>x;Ib4+fFgfwlwynm6(rar*`b${gWr*nq-89a#>%9rL^GqGl|k%HLY zJ#VYbVlpG7hewA*x^151l{x7<1b6Eiw44XkP#iTdQ%9KXVf*|6nX+jC_jeD_0uON* z+?p7*28VIpeV~o_ZHH*I8)DGUq8v!Wx%d#d%zF>g?NlwXMbeu3W= zpH;nok-whfp_tf2-9 z7l`_;oYt6PZs4!kud;ss^S~PQ`?-Uu-%m~N&u=B}N2l8=cwxGk>;^3-1=miqI5ZNt<6xD-TO)^ZkRg{>$_e;j;%}OT{$l)-w<;J=jKdQykUJbIg>!g4Bhy z`Orb7^-$V;_8`mr&j&^6UalHa4crn_FP<~Sd_zTce&2}w-izPUwo)$Ru!`sSWz6wm zI6hbQduN=v>+pN%|6%X_!|R&zxBqocqKXVb5EUF11ff9@CJ2p6O{JklW|XFSLTb`B z)25`9NeO}=MwrkTK~WT;K@b!{Q3OE|1Vs?UD8dxq``-J0H%sW`^E}u0x}HCt=dgBO zUFWsmd+oJjpM;xN*)&S^c6=JbKLTgE;@KC?FzTj4>rd3_z>fNiuOM)`6wKruKoRSZ*Fp! zdm{O8_sFKlxMiE?yYo{D!>!g;Z86b(lX|SXd&JsHm+sna#=4$u#<3hKm+cGO zt+Da5+>0ZzXhJz%Kez)qJ=#8zbM&Vo{V+tV;1%`bT*dgK0pIB)H!A&8Buc>U|KH1FFFA(sNJ6YmFi|rygbyoJqTdDOisRChE}QyO>K{yQI2O#?3hn$Huc}kK+c9 z{hs?E<=2Jl3D>H;>2v;iEH@bUWeQ682q$sHQyjkYQoyfp_`<6k-tZ14J#3t7*&@$9 zvqiWbtlol4lfF;ur5ugC@q;iDLAN~;~vHwaW#H?i#cQ5)mve|_kLIn zuWrE`OpoL1Il*bDRFN!;C*ifMibc|F9maBW*o#97lE*S1xd!&;l; zUfc>Z65Mz@npcX#%(u3}-4j-Ha1-`pO!_`XO9)4FA8Z+3ObloLiLC-_`BpAE21lnA z?yD``w_7H<^S=zL;md?*uzWgyJ0aJNae{3+uE_Uq6`n-spZ8%t-v25H)5qaG-*EWD zw;Z0|ALRVN;Z;8dIsf7C%{8nf+uXukhQf3HOWaMV;pxxd>b@Hj`?@+2As(#Z@P>m(Oq;+5bjz8N(}Bvl$90Y8d4>%_RKt0 zw_xVDe~vf?mv&EAQ-s-b+;t;@HEd!q@nG59G$Ma${P)JaZ3MQ|>p7WEZ{YBnn>hSo zG3Pe8k{guqg%LPMnlx+e7IQ<4i#j~T`3O^=8V?Iyzl}>Mz5BcX zyo7yrP}WD%!fo`)G|rr>+YYtV#)3}7fikE4Zd!0Qv^p)kkNVEGE{ZC^FU*%|htG_= ztG30KAC3^@UbHRGJuct&@R@EQzWNkjVFiAK!=Et3A)&i<+X~$Cy%XQw_9&-xEDkvK z8||LoR(q+Jw>=E)SxTnPbZ@}z221^x=5rRM)yA7W2Cd`onu1KKMREhnvj(JH&%lO~)q65? zHqP}1uaK`{h19n3+79E~+dKSvh3?-0<^O>5#vRkYcfbu+`*DrCpYi22pK#h=;8d0e zIuz~3?e!!57CY{3973#(Jux_qcK45TZCDN;eaW$J>*Mg!ONL>1&!u>-C3>n`HS&z$ z4A(=Z9v(#w6Zqkl`?y_r4^tz&T?p4V`0%5c#!t|}d?FOJBL z%^R18Hx9ZezNt?iICFLv?c&zQkxd@1Qk}~E&8z8ynxQ?l(-`;iP7~b=JL~so;V!`n zapx{L{&WxSlIUt5#^Y$1R~t);=V zKESk^Fs($_5)79I(`9`3!A{|}bswf0G-=_vyZe48UOjM+@0{qm2HeYb4&8@;<=(V& z;64MlFNj{<#wj%f!zICRSupGjhCLYKG7NsD!u|Y5JC{`O2WgJG0i|3s=-cylv2Sn1 zw{?#&@}gka8Vpwi!|q_XIvCbGN~bXxHe-nT4NLvvF2|JMMh*_({+W^J+8^C8GHLeI znR9dr`4TSlQ2c(acpb!*gTyP4*BeBydW=)54~B~|40ktsPQkCjRM(oph5RVw)yup> zyq2Lt?1@u6Z2kDto8grM|9*Z~moRsBnXB4$n!8}v@Yd5~yC%AR#z|OvjyT6H-8Hyg zlOJ43oZ}wcl}B%DSI4I?${LK4=&By)usRslV2FdJ68AcyUx^N8!y5T?S2ha8b@#6@ zRxO?2?89BUTiB5C$KCJ)Q85=+CUJqFYIiJ&AkHjz({4EIIGKkW?;_Yt_wa5r%5m8X zyC&OJtVBL;R#i;G^f(qI; zk}$0l*W%{zir+s*1s5{HlWAV%wabbhjKX2hz!j*LQ6)3y&X{sKj{@dQIeFfcneMs0 zumLQ<^Si#+^;_?|EbOc<801xF{U+XBh*w`T$XoJT?=8e@zG#rw`CIQFh__-fy|6Ls zXIVV#?Zep1@7xG=(sI|pcNgr%?`kc9Ncx`Wgo7L@9!P#Lc*q7?vuT-?^w#o)d$0dVAvQ8n}XpY3|;i_;7*OZ zXrJ*VQ%^5Bb|#iI?%c%P<@;d#2ZQl3bO|{14R&0d(nI?kHY+|a*Z}qkrb&DnBQyjf zGzP;aj)vPcukUlZ>%wjxhP5X4L^~2zL>i;n*=cDRNwK7)oaD6BSS&LwGdZg?mXQ|YASEd? zIVCYGB|R%6E3I&H(&W6f%)Dh0eA5+4Pw$G9mdEnbQu2qlZPXsANvK+{CsG}0iL8#) zL<);@>msWX8#c^d1@m`5#qspUXlp`gdtzE^v@x-)by#_AWOPfUI+~xeERvRyIX8K0M*UL7fJh!oYXR~PM!E{-mbu1H8PZdtD*vSe6Cq$Oc-v^X1|$=UOJ)~`v( zNLv-j%}865ux!}!NJd&(EG>Ucq%EN)np4`8m{vHc5TEw-S`wB=tCJS3UmIB&?N8{A zELtzNB-*oK-jc0bqAQ{tDK>h1ZWHEcO>}hO=tAVgGGa|EM{Q(Md$hDPe^G@0bw!p( zGV^1lZIQ*O&*t?TA}t%VMB5^(hh?-zS0uJXQaUzF%4&*aHDQXi(It_1d1s_*cs8i9+Bg%HnQ3L!k*v`ID2*6V1=cNNY%3kW)NSejPH!(;7^>NqD2YC z-I3&s^zMX|w8m)G==4R=RSD_K6IMqGOKY)AmT#JoR*!Wpw<(HwL+=mip*aWDbB6M8acnPKcPRNye@(jqOdjEjhb1-HMuUbGNC4+8FFVr zPHs9&IJ&Ss(iN?Vb`M*Vn4eu6X^bq1EZL|Vs{yyB(S>WUvd6Mh3uCFNIb2^;lTuSN z@LzT+4#V-I@9>`NUBbUJ$Ko9U{5Sp%$CKzU9)ryp|MlW8|9#m>c+M98ez!RMdt^NP zJMvV%{{+w6pBDamzpotL)qr>FZ-%?M_*;j+xMkM^548Wi%A8asUDYtPuU>iK98MTh^yOfPYjaqu<~c%ba5ZJ z8i^k|m}SR@T*(C(7{{4`k3X&5k!RD*0drap?>sQA`Iy#nr=f4yI+y za=Ja7!|SnvammbL+0yVr0`raOr{QG?d{mdyBAcItam+WSp8@Ae`Q)Me(Qw-3lZWzi z;e02bJd{5kPC73CvHawr{31Ao^2yV|tUrEiTs~J#=5jRVyjQ@-HSS#iUQ(G|{;j{_=y{J!^S_$8$VpoZnjyaTRdwdbkukc%6^! zgLg?_yO{KHXaM*lg;OI z?&cfQuYvP|e6snqo^MP)1x-ZO!^=cCzhv{5c|Q3dI5GU?=R}Vec+7F*9N=>Y^5Y@8 zO@N-TFz4=-Pd0yrH^0X8^T#;%o_w{zY)&v z^2tN_op6qkPd0yD`>sAX=gB7zN1o1g6Y z#`N3aJT9MX{<@Y|H=J+flg&@{;u|x5Kb%xl0PBZrzSUs?GK}e`j>YyUpFEVG4d*2J zWb-q<@)$FI98Q&dvia+p-zqrw%O{&}Fb8(tvB`XQU2 z<(1!n`CSC3Sw7i(`%PzjW5#cV^SXSp`B!TSN#B@$ADoeR zAtCFBY`(3N^o{Aean7A8pKQLBnZ7ao6gUm?$>t||;QzLkOTjp;YTIaNN{{0uL?G5wWr>g1En zx0r+D4?hyed-BQVuWNlvhx4s`viXHxd5l?}3OGA$8rBcl{K=kgOuqxppXHOyw{?=` zH>TeO=R)~p^DQQQWBS>D!g~Palg-cb%41A_KAiXDlg&@_d}I0za8fr5=a+20Z6hp? zG5vNpW95_0w=&Q-rayc<-fbtJZ2mH@JjV2w!?{;J+5DL28`JNB^B?(S^KBhtd5q~N zABF8<^KgF2=3AZ6H>RHnCrdur{4TFN#`K35I5$N;+5B|RHxA;%xys`I5Bx$nE98?c zzLkOHHxA-Y!1{0T!RD8G>6gK|Mn2j6G|xAtUjyfH`DF8v6>tGEjOjPR`A$CBd@BQeWBRM$Y_~;NKV%(-_%@Fp^!O!@KlS(*@XjM}4EYTD>)tZt;mh&PQ!)GcJW`wq zE)nN~tHj0Ng<|&KdB3;@{IZyRcJ_*wfY;wDoYpch=RM8=J|mGI57Axa@r_`f|IYKS z%k`q(cEdq2*D-P-xLV^f9Ji0Q^#+!gG3$Tvad=Or#wDBIj&aCbUdHsxj>m73e6sm9 z05W}J`m2jDzI-wrmZ!=)|23vxaRT1mC!cJ755^%gzA^pDld(O@C!1gG`Ns6S;cT>Z zSXX58TRh*Ge*KBKZYiH^{%X%RreA|=#s%`p=GS<>G5zEz`2CVkHXn;I-~wbA(=Ue8 zDW7b9vF97pUk2wh`DF8RJ>Qr9`rYZMaOyyMwt+@MHCpE-pZZG3#?Y{6{n{c__ae&U^C7L;3Y^Hr*~P z8+j`9?l@D8CHOLEDG*LmtYn zgLAQb@=$&YoEPMihw@j#**q4Ohdh+O2F`Kv$wT?EzoP!-lZW#2;JhWDJd}_3EVvDK z2+L0%%CCiUl6>+|elwg~9nq{IoLMi;+(r%Fl&!w0!bV zejLsW`DF8pUC7*@7;}Hp4yRr|*?jKH$n?q0aCRP!H& zpDkv8;P;8yCwQNjeSK$R$Htf|!Ifh6<9)A~eR;1Evybi_cM5&>)BP7Q``=zDW*^+0 zV)m`Q!Oo%2{Zez6mp)z0KBgZMv+wBth}nPi=-oq~{X$?1%XUG5ccvSUnY!%?l zeL`LWo-OVG-zn|~CyfrByr-gWinttny|@fo%b7Wqv{V*)O9%gq(r= zoxzMb>D8#4>gE4K`GuWP_mY?Yo$`B;zso@?&l}j@#W`$u8v5)f{g2?7 z3qNt?vk&x3z5K^K{>tNR4;vVFoX2N-e7DD+dyMw$&Zc{!#}O38&abaTeq3ccFmHg5 z0Q30y82|Wr2KvB2KF^6V!0q5_jmwznN@V_i@!w?r-i?QU#Npw%4J0e_OWb?6`UK`(- ze)3sZr{t5(Z}EI%`t5KIkxw>15kM}$z?lB>`Ira!WIC+>d@sInP@c1$JK4$uHb2Mn zjp>hv!+U<*j>zUO^L%6aN#|f&kxw>1&GU`vXTZ5iKH2;X&o`!D2G#3ulutIl)QfLSzv%C{ekz}AeyZmi(=Uhf zt$eciMV@a=e>t3C`QiMM&5wD$G5sDmTgfMzU+4M8^ed|{|MJP^TOAf4!JC+d;!`T$tNT0zpl@PaL$rXHlN!7nemMozhVLUj*?GCR`7kb=Nr@ShjXKR zviZfHZ%n`F-0*%a*Eh2H4W4gIzYorw48ACCO(Z&__LoGzzj%(8W!kMl(M9G8qgL0u&S$n=frue!jw3*?jOuhw(YB6#z1)Wz4cw)S^v@#wF9C&t$$a{RTMC%O{&(?D@v@`{8^qpKN}M zx9p7RFS#7Y730HsA)DXf#W$uu9~=4M^2z3BdcU*A^cP?0+-dU3=D+C0H@0PQGyFKd z=V$w)26%Vy;On22_0IhR`CJy{hrre0s4l5sfNi=h0CE8a#w=&%)y^%2&p2c{Tn@Hg z(Kn_)>7O{>kWV(h7~_!X8`E!r^MQP_`PrUtOurY-ck;9 z$wT?|aE_2qHh;2Leq)xu56-Fb$>wK!zA^obYjEF4KH2>Fo^MQl5u9t~lg;n()JES3{H!DviWNO zWctSR+ipbvlk&-QSf9Dx@-n8s=4RYGI6AB!viZv~4w>9^m4I+ag0-{z6NG5uaR zf0Iu(-{z6NG5z7UI(Mmj@=f4sl!Kq4#!ZL+t;QvrAJe#;mNBQ52WOLG!g(i~Z{-xqANt!>!bzN}>xI^3r=Dhsg@51MB;z5bA-GP7e8;yF1PYUaBG59R-;N`Uj<1;?% z)0p+YXffITBbm-?GnQu&g z5u8lV66Yq!Cz~JhjscA6XWoVL2l-_4)4ce`^z-4=$S0eR%{$-%WEj(L zfOCg@viYd8wZ1X^UN}$7C!23E2glF38}}vUlZWza;rt|@Je1!BXUpTl$Xi~<^jANP<68M-^J89o zWBMu2pq-U`viX?+asdX$^mCV^owIy09hSdzy#e2t{^A#~KFcSYpNDbCjBiZ87tYp2 z;qoGzza(kEH>Th47S?C^Wb;P@$c%4Hf5qDN|LjLq53?Tn&#O z`W)BxKOEPX^wZjppXXNOcff;}?|6*Q_^cme)@Kp?eI|$FlId`L z$VD>Wn0^DC6XcW4Z}NO&`q}T{I8Z*>e3p;Q@)*-^gLAQbvib7?WctQI{P&%^)#8I6 z0}r0}(cZL-Ic^#JElv#Qos6tt-q-az*al}W`DF7gCd+2b_671v!@vA|@9|bA z4dfr_@f45G^O*5%{l6Xg@gO43E2a$a0pP*MqOF`STeN=lJ5#C!3F~wZ3r>e-*A_$#-D$ z8$92begm8f<&({~@KAm&obBb4&CmDZ8#8_QG-htxWuz(=EWjm}RSj->PxRbkdRXJ>QuAN;uu}$>zsA-Z=91Nc)FMlmxb*sST4=)MloqPhgTE0!U!mBr9mNWM!tiu|YY<>pDC$pT!^h@EqD4%S8Hh@gun10jG zxDPI$OeY;_e00D!{=IePCyZ>!_PewODO)6a#o zpM0|UO`dN|zZ*`We6sl#vj7>!L3wad>91BEu=z~@GJRwE&DggtkWZ$=Wo_3A=o{1T z-!S49$|swj1R&Elrk{v^+$En(hw+ynnQu(L8P0Q79?$3cWWF)|ls`n=hw{mE7{A=} zjplutI_B@UFwIPmcfpnUVe=BIk`jp>)enJ%Af{&E1h z00U$C*(niMC!b7*^V{RaH>MxkBI1_FC!1g8`Ns5{;JhfGY`(2yERQk$4mh96C!23E z=^N88+%n=eoF3Lc+59rEJjV3f;A|(KZ2mIOH>N*-tBCufe6so7o^Skn`>rV%Hx8Gd zGVtJIkIAVK*QxmAZ@|@|zIIx8mt(-3cjMoi){&S5c68~N98-1%TS=}6s3<{Q(Wyj{fQ$S0d`+dktP(_gfG#1+UVo1X_D z(>JEy6N|Vr!)glg;n;euIqZSE7>cl}|Q*wiloL2AmlF@r5|Vb}K&lNATdX#l7PSW0tLO*N7WGGb|g~%2wl*&DhEo zhi~P1&*Lw^gUhxOF^`)S#wVW!9$YqSL&AD9X4&GI5%-wJC0p4ly|Nk8?}GE8e6snq zo^MRQbdQMZmrpi-@Ub8Be{bG5D<7zbH1ObgPscupD`-p4w6qc z-^yHo3}gCvaE_5rHowe^Z%n@#&Mf(4^I5-S#y6%vIxFHXmQOZ6%kz!t$KfoIPd0zF z=Nr>+fb*<;viUilZ%n@v&O7qS=BIeRG5sDmzsM(>Z|h6}GK}db?-g-r*!gkYBb#66 z#W$wk1Sd;A*?gNv#y6(l38z3l+5Aafd}I0TeU=Vke1^YcC5nEvQ}BJL~sWb<=9 z-ww^2u~qe|Z2hePjCd`$gPg z^2v1QuRt>2n11p85qGS7viUK9`Ns6CaI%Vbz6a|w+58qSzA^pL2SnVN^2z33>m5rN z$N42b{_oml7&jhfyM^Gv`}U4M;(ebLVR^_~gRAA+v>NemasdX$EL&Ml#LdvSWb;{H z<{Q(mgLAHYvibF%Z%jY^poqI#KH2<2&o`!D0q17l!4cOYpKN}u=Nkv* zhx3H|I?uOxEI$P?+u6TaF(F$4INt#{cB1`!inQMevStZUJnxw z#W9kmMSdAv9qMbRi&+hr^JUC(R>IFXJ)AGHmDA>(zA^pbhv9rdK6$MVAP2sfe#4lE zE0Ry9!{yxRmB*NV8Fnb8^2z4ok^Qytjp?r%i{mT#WbrypuJyeK$Ck_2;K9o!j`$~?5!NmF9Pr@f((X;ynB~mCN!ME%mu%(y%sYlR zwsq!n_*R~iDhId>%(6}LuBE4pkGPMKpN_!f#CZc{JKAHLuB|hyPh*y|2IIa8pK-|M zPx9u=n0^}&iV4m<_`yu8Q+-kGm+6KpG+qmY4G~VeEO5%w8r zS)Lj=r^qLpU+$IPn0`N;v*eS_x0r+D7fz12f66Bhymlt^`zX{G*`DF8xz4*qA-wdZrK6xmA8Jx@IlZWy< z;4GC-Hb2!Xk1@;B181dtviUL3H>N-Qq=@@kKH2;%&o`!@4QJ!OhxJJ|Kh5)v=}&@_ zE}v}vXwNsMUjyfl^2z3}@OCn$bBGWgfUjgS!`DF943tQ_O)9-_` zNmaPK$mW*=$c%4Hzj#{29W0+rhvi{1-Jt2(E(q&~Oy|GNZ|W)N3qwBH{B_N5E}XsO zlg+nzWO52?EPp-{nZ7aoSShYSEeL%w9s0J7 z(>JDH2&Y~?+5C0QZzY^N<&({~d1QQJ#;=F-tbDThsowdKG5sZ{;duMpu>556R{+S2 zZ%n@u2OpX8$#gisZ2&TTWBQ|K;+l+nG9CKsn%~KAs^pW+w|Oi;hVh=@N;r*H9^a1+ zl*fNpKs`3jN9B_(ekIC8W_)ADPx>4BX^~GhKjy_Zrk^;HLSeUi=RJd+vUn0_Ig zRQY7{*Hu52aQ2ctY(!&JzA^pL6}avspKQKu zBP@?G{rPYf$|sv|+X#JQ`b*$EAfIf0n^*tF^h?h`I}rI~^P2!<#y6%vd>*cu%O}&} z^2r5|=^N9}KQrPEs1BDenGXF$Nah>U?}hUx`DF9+Jl~jp)>#pEqI|OX>slX*;G8a> zY`(1nEWa`1SHSs)e6snrjOZKFZ-aA(e6snrjOZKF?}hV>e6sn?-uxQVZ^X{GTRz$R za?dxWpL90vtI8*vpXK?+^mE{BeSWyS$mSP&zHv|gh`DtE! zW5#cXbD(^(`RSf-Ouq-tU*wa`Pw{+X`fK3KmrowbPp*o%o8*&+^3&nGB%f@4Qo_LY zYs~Uwod@T_us#DuxjBDLUippbcfj9SKKWoUR@dNT)3W+3K!!2L?S+4d#wD8{!`Ni{ z#`KeL;B~8fG98x9Vh)a<0p~IKWb%CRD-g|_&4m?HN44xQ*+h2WLsZLmIn8FinCM}xlw$Aa2NA8@q;%;gp503ZJy3me0U zhuLlfcC=2KH2&pl4KY#=}8@sS=+_xKWz zIjuMc`1tGFU2trDYXc8n-hYzb~I`KBq@!d}I2H;k+TAY<`>P8`F!VdBjX#>uY|L4T{!RL zq5N7nqvex_@|)nCD4#r(-vXyvKH2>7-uxP~{O%I8&67_yzti)L>370eC7*15j^`WG zPp*Y?MOZ%p!{hR`IxK)=Og|ldmVC0sH)pVqUPoPAK6xmAJe)@PWb@-*`HfkgW;jpC zClBSPTpDqo$tMrxSHem8ht{9}f!_ruPd?e=pX`;NTn;COzx-V6@nVlxc+5Dq?SGAY z)&V~iR}Szw;KAE|?qz7phx~K|Ab$_84o6*EHoNx7WoOK~ZGc}`AC60A8Pbs!0m$@? z>F3m;ZIXO49s0#c<{Q&*gfmAz+5B$LH>N-T3bZ|wPi_DYo|j~ATw{(~3qSp;a9+qZ ztqjjMrr!c*Z~0{NIX~nA42X`XLPzX#62^2uv`0GVY=6Vp$;D&kI-Po~58Szdf&`lI2TC7*2mXwNsM zUkYcTeDWRO!Sg=S8<(8;PaK=AkH7PxZcA}8cvo-?-}7^b$A9*?fTMvB$r7%=mE* z@bT+&%WDVbaYyjrd2B`5EI zLfns77*309exc_Z({G2fn|!kQrJiq0KeG}03i)L7aoD}KJjV1};T$HPY(D3oT!4Ww z{haI2wp>2h{N=+3d}I2Fx1e2|e6snre`9=O`k8Rfv+{fX2(LWkMmXFCQ?cFMMMh>h z&YKwD)`6#yAIHD>*}HLo4+V1_n4LDz*G4|3bqDgf4v<%XIp6#+W;#;6m}NF*nY-X` zbzL|v+58sIH>O{AYsBp%pKN}v=Nr@SfHOfp+58xQ%<>r1?^}#}vhvAvSpGUB^Ns0O z-G<{p`Q)Me^$d0IZ%{4}pT#`Gt_c~3ss{P~`5Ouqw8!oR}$ zC!3$=`Ns59?!Y}(`DF8pJ>Qsq1)PcU$>!&JzA^n4I5Xvw&9^caAj6n`))KTakWV&0 zF*>lkjOmZQ3-|cslg;n&%41AF@ouyYlTS83$McQp=fdfiPc}c_^Ns1(z)8M7tbelk zS)Ol9zZK5z^2z2Gd%iLK)aHmABcE)3uIC%mFM@NDe6sl#vj7>!L3!YuZsqZOi%H*@ zem|Tm?`Gy&7bf2#`GKDTqU1u{vyverk~S-`jJmIzu5DQgYv^! zCBM=0b3Nafeixiy)& zkK+ybWb+HX_{Q|x;M^jgY<@q0%=pIiTUsOT-5bL4lj)=*nKRg5@(`YXlutIl+$)bU z3IC2&gQljniCeeh%BriocLV~)EVe!Ipc59P0d^MQP_`7tj( zIq@dv_?MsUJwDju6Fsi>_)d>s^!R&^H^vGc3!*!>hsR?*KEdO^fq4wmjANLK#2w(9 z#C_mL#K~Vo-5cU8@Ymu(@J2W5SO~n6xDL#E_`TzzL*T?!&Od_(9~ULI;W=XD^SFo{ zx#hRZt`OrhK9`*_m)#`z$HV8iWIE|c*#I(qWBRp^;Mh+-nGXGKB=e2wmpzK@LO$92 zI)M4c^w&Iww)FDJ=CAVN8`JMz775-B%JP%Vk9oc^efKzy6K)OXmu$Z6s|%1}Og{t8 zbopfSZT+WjOg|6Kx$?>8+qOpEn0_amR{3P}R|3fNjp;9W64#^Tlj*SjYXD^W#`H%& zh3lD%!}%rCq2G*TzA^n(aK_3fn{Rc(_{Q{;p2qLEe6smgC-jZ!XTX^!pKN|7fK1<* z{+efS{aiko4$Gh8mEV|t_Hwk9l}|Q5*Yl0(SHjuhwy=K4=5rckmdBWWBb*}nWb!*?viUJDzA^oka9ZV)&9|6?%;Bg{F2Qd?fJ&^ z%i;V{KH2<2&nK6`iQz9l|M0lYN3pl{&$9TMJ@(c%eQ)H$G^#3F2=04>gVvBqsAqhKN&!# zZ%n`Y`G|W#KABEB(r^HozA^ot6*ymzPo_h^IAOpyrk~$|<16`O^XEqgd}I3Uui*Ih zu5jMT=G(f&@)*-kdKK3*<&(|NMw!U;jp^sXIYmC%{94a9rr!bQ0{LX~8$I8cei?Qm zcgZK4kHx&UJjV1>U&AvR^2uxc^*mopzx^#ZcdLHLh#S;DfLwqndgYVNx0r+Dm%~{PKT7;fC!23|Lf@F>Sp;WW`DF74*UtfPVyGj2j`eu1 z#|<7o;qj*)C*Ly=C(C0_H_ib*M2O`D0g&k%)35Bt@tb@y9r`gOGJRwE4c)k(D4$G+zHQ6& zjp=v5d0al({8WrXrf*EY2hKtY&zA^pm_i-(KX;@ce^JAWGOuq=uLGsDwTNwtI zryNePeDY9!4V(+*lg-cZ%45v(w8ObmKH2;h&o`!D`2pJg$tS-H9=vWO!eboHi!sNY z{~?~6LojYfWI9}S>zem^I1A*H%}?^mX3Y3aaITY2Hh*35TjAU%pFEV`0q14;Wb-q; z@))x`{cygKPd0yDC3O>kP|lg%IL#V4v>{^^=D=cX=hwN$+`Mnwa42p}vlf^aQbI4oby2st2(&5fsDIN`eP@D_?NL&owXSAyRa=jLPGTo%SD1|K4>0iPgV1YRI+1viS@!7qsWz?(fD#&P5D zzFBb!_&9MY_+oKB_)+m>@Y~`l@McehaaMvSh=(8P+!^9@@U7ws@Y~`J@CHwY<92~_ z#Myts>vhHR!Pkl#z{|z$;9tbU$K%+mJ&dy)e73j;e6=|FD7=$aoC$tkJiGwQ<*9Jo zOmKm?5PXK^Pr&hEnD)7VNUhwqIg8>I`N!Iy~_fo~Tt19ytq57hcE zhH==(Q-Qes7HkV*_RVyjnEftYBTfe|73YDU6SM!LkHqZvXN`E#Vyu%dh0|gmJ$sAU z|4xyZee0YhX1_U&V)lvCB4&R#Z;08K&A-L$r)Hy$Fh2XB*;UN`WeyXw@0hrl{lZ); z?ztABN zkLzAB-v{-KnC~EZTg>+heJ|#_deT>h<>C8k4iod8GZkXKPv#0S-xYJKnD2pkLdcTkKIcZ18se0M~hnD2$SPuv84Tigu(S(^pK!LA??$*%%=aGLF6KK8p0fNYxK}IYy9j;}^F0Hp*e`HeDO2(M zns_w$L~#Z995J8kzf;U-_WQ(q9)APuM;M3C+V3RhbM#}xd`5n*n9sjoDCV>6O=3Q` z&ixVN@R{@%#eClU6EUA9Pv{OEJ|~_g<}={gVm{wpA?CB&3(YBuxYxye=K3o!pQqjk z`!!CN&rRwg@^VgPM6OXrHT36P_~%Qx@!3{zCvj?X#N~?F#;?d6@EkGQ=G`S`yStyvzZZ4#RTz`)<+8+V z3pYv3c5Y{g*@o>dG25p-Z9e#YG24}G+84%To3UfXY!5a=%(h-NVz%R2CT1J0*Tigp zHT>%^4%=28A!fU&6U1x>HBZboP7B3BTOBdm+x#eITbgbE9mZrknS3$Z!2Dgz_ASqe z*>M#!5T@;J6 zm*Y7aaV7XAG224?ByI(d`ZgSwZ5WEgY@cwxm~9X46|-HzhhpAmPx>w#m-o&05c8h+ zSTXN+PZ9H8_E}=yr@l?hd(cmdd4Kt1G4CC3{Cyao_l1uT^PcZiG4JjEUCev6SBZJ= z^=>imt3Gc&_;WGuhr0eSKJRsIE#`g9y~Mmnd6by<`%V(`{@qM5@6BB&=6$y%V%}5h z5c7UnznJ&JGJXiB%llk^67wF`Y%%XoHHdld>0UAKD?KabeWGqL?*Xk5^ZriCk70b? zyU7yszRWRV-gB8J=KYjg#JpG1Ddv5UJ~8icZ2q4xChuSD58f_{b8+zD%ufjKSrn1i z3-4K!kcWl$EGo(CqKgghUdEv^Os zRon=^TD%1Org#}R<)?7m4)A30N^qmN2mHD?`OK&r{&VQZz(_s_v5O?ydQT9dCTyA+%hrm$Gr>QZY#9w14lOuxd*(bxEEX`?gO7GUJYI- z?guXuuK|B3cFj?gH;kDG-d8*ve4IE5e6ctge7`sa{FXQs{F68hJTfVa83T_Mr-NsR zGr*ULGr{+Wv%s&2M}vP9XM;!lA&i*=K17@go+i!%UnbxDmWYyac?}mf>`lf%g_CKO1#Nifdnt zy7}T>@EzhMFGbyF;>HeacUy&VvR{t6xOmd5SWm=-ol(~%?gjrLHS}xWfG^H@GwL1{ zH-b0bI&>z#6?Id^U2kK#i_5yAZv7F8^A47gc>KFjS1V3>FY3M!XLd*3VcUd$+WXkg zi06ab#El-XSgYYgVC7#Lb^Z-O1t(@Y&)%aD$lr8n=tt$6uG2?*Lyd=KEoi zwhiO+{V?fbz8~gbG2ajKXEEOoQz1^qyId|8XMt}Q7lNM>mxH^-b>RPqo55Rd7f!bW zyqCBSJYJlPHvgxJv%u$y3&Gck%fa`Fo53%LJHVfa`@oUy!)Ya>jl?$MEbzYKLhuA} zIe5Cb4t$=t8N5*30lrVnHW)96*#_eyG23ALB4!(mtz#&|Huwz!XNdVuoBhOmCi)2Q zCOE%fzd|R7+3!!en0@+OEN1^fcZu2e?$cuSUHhh({oa0O`QX$Y5Fh)%PHg*sBx8H8 zL;V~ht_T0k80%84Ip7<`i@>eoMsTON3EV4g07plL@mFDgGJ?!=|3mRUMls)?pCjhG z?vEAoJ^3@qC|e)Ktx-PT8-IDWCmTd?aQ+3*U;_r$fSyh>3Y$j(Oim z+yx#g>Pum^I zIEJjpG0AAI&^#q7)JIWm@4FP25O^7(B3_hR-j zF?{E6y4|=Av9*|er|vCg-=_Iu_FFnd%;&yO74!M@v&4LU{Aw|uJ-?fbGIXO1Pb$Cj zd_4aq&Ogt&AH?jdbdz1e@~pbRxn0EUC-h)3`_Y&v=Ck1^lCl1*z&dl5<>%s>DjC!5 z!E~=vKKlf`N6h~FUK6vg!>`5c_cJjgECc(X+)B*;EB6w!FV3-I_TyPBW}lB2n2%$z z>&5Jc^louC{O82%1Mwqq2Y49vFI?x@SK}Vy81g5G*~jQl0 z3NicR`&7)n_SWAW)57vviRBd&cYqHeW8T@X$}wX0VK+m}{^l+;#|-%y+j-i(a%h}t`&Zj?ClF6{HglfWm7yWpHFUXA=l z@qBQrxEtIdPQ$sw$Kn=@I}E=QoK_z4cMz9>j}X^`r->IK&e`Hb@YQ6T*Hqw``5ti% z_$~2#a0J^tohtBd;%e}p#FgOF#Esx<#7*Fr#0}u}u|Hy*Mc{04J@_ z82pQP2{;@3EXG*|E)utZ&lR_VZxc6zSBTrd--z46DcC2n-kMN{`-*c>Cr67*!R6vU zIQ8P;sLy-Fb#Pu0uK<53&Vn->`(nmlj&U=^Mach?xC%U1ycm3yxD|1hic`TIWURww z$K(7{Jb5zO_>s8}#If{d_-&xmjr={ub;W2uFJ62c+A5IYuZCYP?gL*Sr{V;((Ng{z zn8q_*BE#Tq7 zJ6_HbkDr0|tKy#7ShvWit7e=#d?FtG3Fd3RFn{^SQ8!MUf%&ZjhrPb@a`ZSw{g0o!IfnAYv4St{Bq<+@!LSB?Ri`iBg1KdQ!kGF z74hZt!%4+&51o~8P9S64D&#K`4+pQ7lMm-${2tJ+11})M&x6yc{4(V4fMWtWd6?GG zWH>39_cO(fFW~%CPA8n##c5?Y_K>p@&Mr7^V4Qw96Uc~DjQoq0-;Dgnl;4AS-x|lw z^h=RHgA6|%{=>?zMSj9zp%cfnb`$4<$CBYs!m>D1`CV9ci^c75+U3Nte0!BY9?r&N zFfO*EJZvvpkx_=l7o(lFxW5+Hk;U`toSP|5%Ea$Sz}Oe5 zX?E@wkMHq#g~#7|oRAm94949m(SdbNhK*;Q1$e`3pR*@tl8o`A>TMrpNsr zZ*+K2o?yB=gdCJ@e=q-dk7s($c^)@-ywvlb_3}UT@_+Vt#Mpr{9O!Y8$CV)mWxL$t zB_1#L_%n~!J7OUIjvgQGacRgw{Ik9MdN2PDFaH^jzxJFB@&~3B3pt26+RH!2%byi8 zRx{@=^0>+4hdqAH<6e(992ZPCh_kE5xgiH-IKku7J*VE|2SN_k$u~Xz%yWM7@;5v( zm~P<5Jl@~q2_B!~@!1~#!{a+b#vLBq%LzFs|LdN!%5#49c%wfJlxGW%xAQpD;{!b& z7jhz}TkPe}_V|2{>pWiQ@tq!bgdD{D(Btnt=Vyafaf`<tT{^ww>UclS8Yw|V?v$ice(n8(j}&c|N<8jm+QdZ2DI zJs#unM32iouJ*XW}}e zkMX$J za-=$>E0FF)x(n%Xq$iM`L~2KR3h8O2XONa7J%_Xc=|!ZMkUEfFMtTM5HKa3<&O+J) zX-}jwq!~!Fkjjz%hE#zx7wL4Qc}Vk-&PF;1>F-EYNarG*k8~l@#YmSR{R8PrqDvEF22htLx zW~6(N?nPRP)Pi(B(gR4XNDm@Cg!C{{8`2|4k0L#Wv<&H0q)w#Qk={UBiS#DYTS#vs zbs@cj^e)nSNZm;9BYlAMA<`)MfwhD6jBz_UPyZ*?SnKLX(rNsNCzMth?IkL5YoX&halx5)goPrbQ#j+NOee8 zAl->{7t;S*U;gh|U%tok#wQo4YH-TNcXN==K)L|wZlqGA1xV*1?TcjNa6j@a((_0w zknTgW@BSx$_lIAPRPBxTNAL?sF*oYiIVH2_jG8gEqGD9utZ8#+l+3J{GiuK4X``l= zmzR}{8Z&$9oYF}pb1Fvt&&`2x+>EKyXYM)Ue_<*o&z)WtADHT%;lJ}rPM&+}9@EQ9 zXU!~`HD}=KJtpS;Y40gnvL>8-TFJDEIeW~UHG9U?vQblK&p3U5%o$2B%T3|m|Alf4 z%!6iO%=n3imY3(1l$D%1wW8$z>^u!B%PhCY3BS&Y#Y?7^mCc%V;{Vnh|2h_C^*70^VH*~SCmdD=a+L1Jn_GdeEjsXvSUi- zOh0wzq0=g+pI$PAo;N*y_{@ru*@sP?_SaKq&zd_kKEw!&AB-_}*6fo1(HNM-VI|XM z%_#XF6^QXCmCT+oeJ0k4-z&=*(`UwKo$>$6VkrG>P0lH)I6j!b?@jvj=_O~3nKiRw z_N=n9lG(qr95D8Azj6>|%7nv?95ZFi_(La7oRW^e{yMKOk2-wPq5oAFcif@J{AT1m zr-W6ZAnR~`U1o>r|GI?#$2Yq{#nG1c>)aUU0_)NESySWx+e`k}A#EG{b*@e5*qLR) zq=Lr!{&7M_(m2}dqaomDVnL4dx!tCkT*@qjkR*yj=Pn|t`>O5>Z z{~vqr0Uvdd{*P}8y;lJRB27?8C4rzKDWpgUF$t(xmd)-b$--uL-I5T`f~Z*V&HxsQ zdMLKDV(+J@=h@FLXGKL%0U_ojB4_!(pPBje&u%s(-1qza|KjVo>}TeAo_Xe(nP+C6 zdFGj7uS;4k_b~%Z$Wi5yC~cNETvsIp7F3t}8iK{%3aDaI57v}bET`o0pa>x4gjhLc zj!Lh#rMFd1$Q|-XD5ywsxFpmlR{o&gDxmb8ArptDv7(oZ^>DF-QAdM5 zJK0_%d8L2@jn@uE-p+}-P%a|HR#B3dSD0M)KRRD?9>l<6v#`Qo5~i6@yGN9Qo}yHb z4HN@yWyZA1^!OS|qZ@9s*9J&6O>k^@wgKqG z+XFxCY!IqOP@E+;W4n#xgMc|5W-MW9JeS{&w;mCar5l-PW4O_70>hCQA#pPQ6V zz7&wE@z3j&q9EitT=S(mU!XC^>6C(zBu*UUyX)O9DYtR46!1kOh^1x7?X3(r{86Ba zz17ssq;km_4g}GVQDJk+=htWD1cOptm8Y>y$QiLgf?NRo+^QooQBtGiRQY0qsR#$y zN=b6%Hs+y!wn2C9avEY0i!Sz-1<;1oQ9&v~0gn`2Zn;>TF2i!eZqLYwQWyubR}r+` z?XCAMlkBO{xGTUCltv$k$n8~2nLZ;*DOO0vGVS)oX&KJya!dt|phTUyJ{lkMrBJQU zW#S?;3KwP+GY@vB&);aTl{|haAaY5DF6_?&K4XSeSzbU&7+1ty)HW>D02-^2nPx?r zbz7XkqI+Fl@C-W zW4cO`cMgoWM!Hl#IP_qmc-iTdQ-TprDShUvH>gw3(4_%gC0ibVq% zbBCRenb=W-Jw9gV9G5E)ePS-HP{aqR3T;mhTSw9U*6JPBm5z zY{tk;k65KBn8qqXZJL#7T2^Lc{gahtsek;wUmb7i}e1T9HE=z6IgXg6dpaPexmGX{u1}a0jEUD~Q(;Urm&n zDcuT{!qgfCGOs{01;+|k5b)LI$yz2Vl5XHz&m)x$zIwBrMBmERdp{!#%o`=zjfE7n zk;#QtX}Vp6NGD~$NQiI4l3&3#Z3g5V(iYmjKwX_Lt+0S_2HbuqFng%Zucmvj5Dqvz z_8O0`%HdJd_3&vKX=;`pB`qUe%`#$TM9!KSIV)SuGL$tvRn0P#mC4o>ys`$Y%o!1} zvSu8-H zUJ({DjKj>VL&c71VxumOAz`sg&=uD{^ppaZDkXnM8 z2FXIM>bKG%)uak%tyJe&gabLZ&#NYr7?~6c+{}cD!@5W+t4)2y56t)pnx`@3b_Ux# z*t0;dr%nmqJTgU zXMi4e6`L{zdB*VJieNk>JzQhXn8eK$nJ;D zLUP%IuyI5hpaf#bGiz$h=^hu_#0C8jv{yCSy%?@-V)0`|d%)qXp{-3JIlG|09HHr3@u2=7e&Vrs!`}sKZl4B~%Jp9^Kpcy@;Qk8M1nY!9lt`&iH zm3&C0#Z*EY6OCaCZ5JQyBi)(Ys?+r0U|6NznLHm3PCJ7?%~GQ?S=5m23@+uROlPtv z)9eiX^y{R~<=-Zc*rKzXs?r;IF)k;qcdaP+Rzp%nf{MgH2O9r zMqukL!=WJS7yE}oAx0dt>WdLk9&DOMW7dioWU8RX)&%Watj5TGj6~H1W#`iE9BP`C zTIUdy*HxWEO~3x>9GV@V(mqu4z=**_6+`D29WN&G9p$)v_=h$u6?0bXb&rv)=wN1z zt{zcGSLSWQS?lq3;^|d*JCWN4H+P`6ag-L;SW9BZY8x^}r7Dd6okmYp(w#=K!-O=d zxx=(%t=wTkdWGC!a)(ABW-N0LZ$krjF69nTiy2iOkTD}LZ5uOm+kg=v%<7eIGgO3_ zEc-ElTPxd`OVgq2b#7ZU;J{+qL#PZ#nnZL3wpE0>Q)-*AxxcqXU34GK5}faw+Ad4( zcp6lDTczo@hq0H@7G33hr+w2$XOmTDkN@tOjrLvPx(#p2mWv>V$}sgBas&6=F0VsgxtB<+dp5wU-1t7&rXzV{PF_ zr#q^Sj$u9sS9N_X)FVTiDI28`3;nim%%wz{O=2l6R$Qx6&699!CAN)6rM2ZkYvGM| z2q+q-G~t2F{gB~$5b{-pt5ety=QJk^1ybYl)gTs#oQYJM`uniD>uHK1M?G>xp*vl$ zqSiTa6V8bMpeZ?OFp6NxX>cXUfe z!tHInYs>#YL&;n*w@SumKsqPv4#3-nYak3 zZb6-qlN0___!jil1W^q&K@_Ma5Ck|-6R4-K^*X|xXp-42s*ul)YZZvFV3**01vX_y ztaFKJ?O3k!)k|zJGv@iY($rL}(r_8xp-J`Q7CDJp8E$H$GFH)SjQK+tb%%hW)u{6w z&e{};UP3?S%9rDdWmmz&sxc#%N($7N3!nT3xaXJQGWns*Jf=z;>1*p8sca0#cKWcfxv)Cl^A zFc=R3Mc0+-t`Ke}pf~4vC`e8W7qKkXWm<3lC|45HQqYNxqex!7&?K+aKo^$S#S*$z zS|LfUS-8~@!X?hmsi9I9Rq(&Ej;dh({V65xssOybQwqqRo*b!zDe85`WM*)u)D#}A zCzw)NQBK~uSZndSzpPbQJQxzp!txU3UMtTrM04SZIc3GTR3qR25v%E}gYwJ-cx>JP|qWcjPPz^&V zUEJ#CnELz<-Urjlx0c09;uqvFQxuD17!ml5aWY+m@8F!Yfe;gGY5W=|cF^YAYH8Ec zbRB?~M?$t@Pg|8>xT?+_LVu?_R5>9QWGdvNj$^usm)d^3*eaIIRz21g%g)qQ4El$~ z8SMOlt{*{&0Y_IJDWsuc1T{!iTn*{_B88ljbAS<}y23mhE2PVC!%tCB78m@Cd1@Rj zp|p(1jq~WYvsEJ#-P%r@j?0nOC~4VQY%ZgVcGUk5`*fxh zq|9h?N|N6Z2vT3`ya`Mujau=MD<>%PgEpibo99UgYK%++RuBpv(URD8q++^_q*dYy zZMynAmt7E}5Oj1ySso|~2;a6a5|potrocGhF7f7c#c)o6E<*v_E;7-Urx_)(qqbhW z`8oIF1#&m!UntB1$uTNd_H9cLlnL@oj(3CLOSx|4sJ=ms0> zs(dVrsKk~5vxvZahhI@diXho~fPy%v7j(@)8ggt+5Q$g=UE{_eCC)2-)?I_Q9Gh2A zDxUz&C29?>rrP;^{xHVARKf3Mnz3a7TGU6*#iGodSsjoh%M6+3f(kQ|oX54BIiH9| z%9C;D(k)3ds+?U0%OPvZAP)*4ew$=NMMWSbtK-9>Amq7E=~!0NpOOj76y1!4zHeik zgGyNhShKA7rBc!v!TA)|#v~k^Pf*vSj)@hP?zTHkEi!u%rb9!vX1fGi@ zQ3VpZDH@2Prg%F?1JzV28dx~&cHt<7RoasENNo}g$0+e=uyXe^&Lmb!BUu~-)6|Of zymJ{7!{MG=H6_WDtD2OA6^G!X69FzT9b%NSLp)2&5+&OL z*P)BMrC|n)s`58!4i!)g07D>WQ@%O?)vRP((5G43G={VwvQVM|iCRR3QKfV!%f$|^ zFe}1UJQx8t1ZmcThkJ-?iz2%s^ou5m6n8NO)1in&Yvj_@PhSA4XDAZAN^((f#VU3Q zTMu60sFql09A&L+L{}jAoTEp_f{($gbF5N90~du-XufXIZB-7&oTu2!STT?VIyc+M zW(;9rRtr`jgki@_pu%MQF~exgXf*f@08wR;hnpca5_Z6P5rHDs=4zdIXCO-0M%Mbc zjf`d?<)|T+7|tCsSgIw74yq(j*K{Ky5N`5!-T*Y#jYnqFrWUbCcY(6BG)-VS?1vEv zG)oIdF@np|(zQvVg+vJBd~SErCz@Lg;emYtmr`pgDLq?Dl>=y)F|Y>MB18^6+`5F7 zA=-$3D}$?38%NZH`Yrt|4hoA1op>QG2ook{R7jfOOIYX$c(Zs3Sj5{3E?Y>4=?qwF zQlZ@<8BaiihJn%)hxN?IRG1L0j)TtE&N}j_APG*FHs29MbPQuE9~9YszBJ6Kd7-Va3<<^Z0WhX9y3DN}`{Um zDtK{_O}3JYlhbCg;t9c6GLLtzc6XI0L?y=?HY#;Sf>WkR#z;ubF(JuksHcRbFk78k zZW4?#*rS87Cx2?BKu!o-8k~V?%dZFrX+}f~E(q010bW~O zJs^F=J%_QvEPcE;gIA8C;3_IoBkw#!t_?||J(Ou(d=r9FD@_`WFd?PGJ;LN-#0V3g zXbTD&DhC~Ae0Qqemy2~$RV!EwsKZ@TQHrQ2|LS~AqSS@@fLutB%=tN<5V|zQB2se1 z+C!5z&UhLb7~1Yos#Q%NHa{ zI?*sC=F!t@EMBk$c{S4-kB*J!;`z2lG#bq3W|mpzLguBZ&$LQor70xm`rVO9^5ZT& zNvkwoWiXh_T~qZKl&DW(!R0Lk!O~4K5UC(?SD=yi-y3aGEc<5pi? zk}N;qEeyHgN85O~ho4-G7=c_z!8OYn@*pa6xWlF!%}|t!;zmW%HMDW3;MqLvHY!bt zMbdIz8VQeYhnT47Q-hHo_RC*dH)6#X5<~$~ienk25MHV-skDMt?v*}WA~m!wp_IKQ z3VRk&V9Xf!O|F%elin07jKke_axrq-(KUzV*mKbarK8h~-X<)U#G6ih$x{rIgh(Up zO{YKdrqP(E{U+fteN3{~W)ugB3^yG@x!OrZN1$)vZe{5yLlo#lQ>?8I_ZmP~mfSp= z@|CLdINzPzSek;wYD~+|p%m7^WtdH~COf=?f~qb8Xy?wDJ0mqGGc|pBern!~%p6(; z8Wj#gx!h`)KnH6q8@rQv~%WkebdE? zYwQ3ZWqt~YI+CTUD!E2z+6#xyVShd@lsWMN2d&k@EFPP&#TgjGW6BuT5JP<|sLEq> zkt5)Cki(3TD7)+c&tFD&z9XZGEM}4N=E4KeW9~B+ zq-iF@awNy=s%UV?3l~G5MhF5Io*ewyD-BU68NRt6n7%@+Q`0s_8Fxmy41$jc zg0mumF3xTg&9#7`4=hY1tVOm0}wA?bnfEk7Ah>YkF$rYXIq~ z?EN__B=$;`r9w_mooUd?bRV4_)ZlOU@{?$+u9e=xy)$#^RaH~B_j6B1n3e0@zHm?= z0}L|BpqDT;qK^b?Az+ItMY-pZ&hL3>iejUPS#P0CsY?rv==w=?FbigM&4e4Xve&$5 zf7Z+v49|$ta5Ew`+)UODtQ&47E8C)^nNdob$!>~h>MUA;x0Dc#UMjRk#0mm0FUrH% z!(JGsCZ&gQHN+x-wk1TyuTHEH_q=8LVt8q{vz%gTE!K zsW(nod;yq^{BZs^tuuJ%6PXoUZ{~O!9F4&OkE6ykgq%c|H3WB-!wN<9%hQY7K@Gtk zeJ6VsEhi%6&vL?39&cpihC?BrHz!o=bxF(l7%=K!g=PdCi?+0oUS{Nen~|ArV3Xgh zqm>xD2WF~LPC!I_!R` z8Fu_$qozAza>gvHxtFESV-q)1$rek?nA&%G7JFjRavV<2qBjOIj_engJW zo79vm`;w{|a6@N(#oz#{1&~)LQ9$@2Eeb$2rivgei|qPe6u5K99U@A;kOl@_6d+~6 z76m3K;f4$w#B2yhfpjnpQxP+~+%cn&R5X*a6o>-Mv>sda&Gpjuiy7s(jz_oYz6a21ZPHMJ{?Qb2pncaeg-uo zBVxTWG9pSNBQqi!(`QhX5d>rbW|T_bG6@G6^eOMA`IoS);zQXTkqw)>%N$;7ol*)+ zbC~Vq&m=E4+Z|S_>{Z2Jib7SsG0rQN1eK!h>6MaY8=B%1#in5;o0PGzvMCUJic>(U z=^nd$kxwm)UyL!p%8@F};B;h5Z^F?nZ>?n9b+jy@6@oq;j1? zPDO=%0$C(v&nUxX8_@&A%UKaJO#(Bh5t({2e=tv;J>*$H%~oU)k$_rv>Yo*2(|Wjj zs8S9$AFBl?HPH1zIeS(}zChSPE3(>cWzwi2>jLt(a+y`xugjf8fly4R2E-uV9d%(% zBL_K95O4;Z8?LUF0u?yk5?xEltaB{SV^3ki3c{>HWe#^h?z0LM7Gzy}&Dn;xd*RhFvaS3c{XW(ud6{u| zEorj1#)DxAJ9w%UPXbyYk<@gh&S>-a0;eA@y*VixJMjLk`K2Aqtj|}_yxBDd?bkoi|7m; zR940+K`*n?gvMfp(OHD(o$On$n^;ni9nLe=LR*;y6=WU9Fv42tzkiH|hk|i>;7x&- zV#`BX#5#q0xyagA4^xIP0otyiNKB0|pv%Y9 zg%~=Asn6D$-WZ=@N})Z3e)r2eytUGz%9@lBB_`XcCg@K=osei*!*32B&UdesLWExe zD^YPsV7?d~lrYu+@_k9AFzy%56dw;QK;A&X!|jJrVJeU+O<@tafrrAM+2#AE9jvv5 zE;JVpPt8bfN^?umxgamvl~nqeNuU7dig?jVOx-M(yJnS0-kMOYMK)i=3C|qNbQU0- zf<*?4I3vn}(Tm=e2RkLc8XW%A9PUXNE{l6Ji7)*KpoY+7 zz!i*+iP_)~S*$ex!d83o&9+iPq9*3(a$Zb!I6{NT!W`<#q=h0H7upmP*ur8qNLx#& z=9IR2ya61aO2j9&dQrX(ckfUOl6PTBN)ilE4!?voJa_TKgwc^|Y3qnu;fz^RX#@(Q zpu#6tEGR`WhCE1A&0`ay$|J3T$cuxbjEM2zMI<*Y5F*w~DGx}VJs_q8SJ8dc?wJKf9*;@F5>v1n)` zbeK0tMgyN$iQZsf-`q%MItG;JHEt6f?bwORT7+v+8<80VDXL0nVOPIBuBlp(95SW`Bu!?L zMiJ10M4ogzZyah0L+$knLzAZ%u~iNt!zwGJ$RJD=;wVcDCgX6|mdrq@@_DeHdL+_` z;#vS-1Tkk?>-MA=SKRs70yif89&uq2MO2zX*$t0bP6rRb1AZe*#8dU={%A*Z3brPnqVk|8mXjtk8YfIpVNRG|Xio>}ETf0@j$s`=ilbuo{bvy|RWFtaM z^jQU>F@l*;CLK#<4P&Ma$`<1!$~>#-WNl2jW=MY)}B$*PR#j@2pleSshVbwZc zu~QIWltP$#pI;1@2aLa2=$Zp%n?yFl)%QqE_w9MpZX2atSD( z?U~J-A#OHI#N-@e&SO||wuL|~8yiSSw}3_|=)#tzD1FUp(xo;4`BJqb>>~!HG#;S@+$b?{ghib69DXhA^7GcAQ zE|{dqI(GPGh$B^Rjpzw@?T~IM0HhwCY;-e20P~(m*fQIE*d>T+Inc9>Ky@#95UUt zr@P4RIO@Z9F};i@A9cj=M4qmpoa9}M&S~IWPR^w^x5#66NlodR%cQ0}UQA9H1~J&h z5SZQsp}{W4RmOmqO+6+s6QOniV;>WlbdZ?CF^12}4w2*zgEqz~rOJ63#%-C;Z{o}d z5~e^EY>0|6BwYD$0O|+^Q}a*8D5Xj<~Y>%DA|^h?+qPcILBdkNQ*@7;-z?bMnFClp=_~5!_AZ& z=JzE})e*q44Mjv4DL`*V)C3T{P+6BnKp^@I1A0q}2?Iss;w%i&^I~C$=vUH}BQJap zt(d0>VZH{j(9kjo?RP56v%;!(OAWNAK~x-Ep0UPeH)<3ZnTkF&i3p)av}+estN|8! zX|Py>aCbhYUwm|JgpTmh2Gs~Dvmih(hq2dRA~3+-n1t}zsec5RkOQ9g#Mdm`>8p|g z3#!X~4e;d_F>2bx!lfb)iU5+B8MVtxLw)5E1Z|X3sg!PAeU-Zqxg(+=zAlTMKbIR% zThWPyHHYkuOrhkZ+l;;dGam|03_1GEjv>?IYbc>dU|BNeUU>;^0Hc%KGG7ouNN`?4 z7f~XELOJKP0a8svkTriBfCwb4@x^Kb80#b%!deirmmh;7WrIq{y@aKy(sWWC^UBJU z(7DzW8CWUyjAeAancQ>n@FxDL?&wx@bLIFwIZk>-BMRw!cRj9Z6^7(>;Iy*cIc>$7q&+0|7k9?Mph;gB<8g9N#N?E7d% zj2b1U3J(2Is-eJCAdD$>B;5RK)L086(Ve?oal5nvDfX5H(1z7fO2*I)1w4}c>Vh>D zwm{A?NzD)G*%-s&5E>>TC3O_2{ES1q-8|DUYo|R z*G3w3l`yi?c{G#)59D47#X@gA$j!gNE7kKAm$m#A0>aruODdI)ggY*&$bAI=+3u!QeM1cuNeu^U*l}^~Z z%(h|W4pSGl?si-Nbc0Qq5$jxHT6>d$ z0@vfodC|C7*iG%dAizbV)ie}@?!@WxP$ca1=F;6sI z4$aW~>a?CeWsJo9`aI6bV}^x&9;YGg$KZiU*xUBZo16z4iTd0-pKtji+w#G$=JZZb zFc?8Nc-O1vQa~u=$SPMW-&({P#+7K+nK7xzQ3AVOJ*N(*og`zL=0s#P>jhoJSI@QW z0c)^qbywC-ylXeeFOkbD3Z6{nV>t&He2meumSQp~4^XR1Se7i0Dy@B#tutA!VPq-9 zy55Q=Z+KNsU2jD*wW0J=rK8|fkAlssu~D^BldlYSy%lX1Tug688^*Gg#!y;9gv-N9 zMSb~^uII`+L;(a9gj%qC0@}=`@sVK@HIMdLXQqnCT&p{41-64lf0rF#aCIJ3AfuKVk zdTa^LU#AjPWGOV)vd00`$5BAb_+E>eIoJ3Mi~gAt6o_G`r@WADkMwDJEUU*+_-as( zMZt-c6ndcIzwt(hZu_NdZ)gtYZoWCtFWp6(VED5LN7EfJkAd#%3XQg`3x{-j&esJSro%B53ruk{=;-Jgw5Y!p$=) zvq^URR7dtf$X8-c;s}8s&zLaU8EziN7)?`|Y+U-h!yh4@*@i@@V=uP!!uBLmz#hAa zr%yG-4c2EpQo`ac%8G@`){{#e+OBIc|ER>V$@9mpC=IRmu_mS+Iyif{+RNlbRC zt_XLEH$_*3JGd*cnOy4>VTjFxsM}o;?y&pK{(mjP9b5gWD!AQY>GT>}6VoPgFfV

NlDb_~v>9N9|7FIuPTY?1XOb&-jU17IGbj2iJSJ*9|R}-+y5I}`*fVI8Msq~(% zuv@x-qIw~9JnWXNN5s&N9IHsy9x|Y;Gx%*IjmnS#Oo~Fz=!!4Yq4+|^hJaN>YcGIC zmIbXwt`Yk%O&-Jg@5ThuL~vjcV!A@T;F=Zgp+txX!{?073H5>vq%Lj<4_89_N{eK6 zH_ali%>XGDI26T&g+KUzDZC2&^}E4v zK_M1WP0{`ljKm0J`7ntY$j%O9`B5bJU?GGN?g)OVRbdL=#Bcu~yoMXDjrOWW5fP>h zEFK%ejv%)+6d6VbjaV`CCc52Dk9WmZfB_{Y>JBxoirwz#o|)||&6-5}OZNq89Jmh3 zqC0ei1wEbi^ASs1Dx%g^KBlsK=-;R#?)31NUD{byGkQ#=ibq=P@_|ab`;--dc9q;N zvC5^zR03`vdP7jk+OEu9huHuM)dt{42r<*d-A-w@k922pE8o33JPfPUJCo;jHF1oh z?F|0-tiU=$XR@dv+ZkL^P%2y`jcG1X^iLa7lxcPbf8ydH4>Q=QTo<-qPWb@LYb+dLC(&;rg6q&}vb;mgEB(_*IvNqO(V#Lcc zH@cBQqKEn{(Q_`W-C?@*tA{>pP_THJ@UhnXPCF@4>dmJHbSL>nziDO@1 zfL|z&Mo%=HW)a8kphrjXAl84N5f{S|x)u@jjm$7xR@=9w@xEZJko;8>dIhdXT8?*q z+3mgLT4_19a1<`0ksZ-OY}oVo5o(ood;fRhWEuk4=cwT;lkGhCqA8-W4u&Em(j5{W zYS9F%4K0%w{T-!-4ox z8toOCjt*2FYkas!>^fPb&%#A~_@azq!6zLKN1kl+6`}@>F*+CUad=mDe(3^_G%0U#JBa=?I;0v_R~*&!V?zVS)&`ksA($d|nm+ zGzv9`r@_&P$W^hzN9YCG!r2(2F0FWJM=4+Rx|-`HbCo$jJNNoa7PcgvSV~0HDLj8` z^zAbgsY0^-ueoE%rN~>t$Pn&2dOM!NXPe59-NnSCSQd?>K1)tKvw(#3cDUZ?Wj3tQ zfk`s`AD`n4@X9ub8_8k>))@*Eo7bTr>rG9ELLo*R^Aa{jM0u&FSu$Wl5R*(5)Y!n= z*ohjfFfsBFBT>2UQW%|>>J}s2&Y`AEiJirsysPgV_Vl~&&Y{@>D(yox4-644Bht3_ zFp%#k$@bwN+OTB1u=W)cBeV(Za0QarJWgncBv0|R|H!&<}3iMCpC4JQMs^(>ilWb zBTshO+9*AV-4bhNMCQ|HMx5g_BClOC zG9uP1gWs62Vk09nA{)~qzttQ`fRWN8uY&$pydfQ-J4C9DcHyS)3Mxiy9XRT9N94d1 zTmbV)C7xZQXS(nyKS+kJAU$}AT-maRu_*!%;j$}S7({p|B@Ka?DE1v2t4bnS-F4xL zEOYo%#x)q&3_F*Flr5(B6!xN^z@kgiM7hM-Nxyl@q}e zil?W65pS9Y%H{#A5bTRC*TD&_J#VOUV|b1WM;#$I!uQq`yO_QLS3E0Us)uiuF_k^A z$|GDe{y3~w^BFM^AI{ z^0laDx##&zkKM?nk$F-Z42)U)MS?=80uL+J!SGM)5rQ_dx=5w&SJ4=BhCJdaH^3qu zPHBZEh!?&!Uvo>LU;)KMEE*Wsw(A_cZ_Q<%dgucA{P7MBD<`T|*QYBiD}7FlH>m5n zYBJ)e;rzuT!q{{BJF&GKkmvJM=NPDHWz05)>*>*DoodI4G2b za#Iye!h#B#G%BTX9qSG*TS$SunXpPk06zS!fv(e)Akv6Au(J@}qsmy(Wa$-miS{io zQAJ%iLk!#oM}Vs#tBf*qf5w?EQ|ZmR)Cws8Ep3KoEV1O$3Szm^rxPW6Y=LLPkB{Dj z!)cMl{836ehLk3)Ss6S%H^TIqs2L_s3P7rpnkG$YR!thCBY#U(;hGxEVj&#=)e7CL zA3>aDd5i~BmLeikPN}p!#B{d-k+-5OKjnUAuFusd&nQYF zThN$NF$(-XZ%|?xrKjZtYMeGZ`&%zgOXW9NAvG*WOuh!SNT;P4&1(^|l$YYn z`SS6sMULXaV9t|=Iy-sRaL*O1F;(xlVy33ZFG`l?o}ML?xT9svQ_tWHIqGXRBBOXw zPC4G(MH5gZa1w3h@S<=kPO}Y7rP9y>DxQ@X7lxyHEf~8w66KwB-uTIOD~E}a3Js-j z!0c?IWNYL|b?|tqSl5okmnFCuW|3>7$MP9&RmO}bd!)vW5Ta>_J+B;7g#xs%4r1Pn z5t@%SUTF?NX(}c!6gEq9vHflrzj6o|JbB&tOkgwB@ zhCGdiG~`%nNdt^BjD=hyWorgtL`czER{18asVzsVIhn4^3pD!iT5zS04-9>pyZ~aU z`BJqb>oJI_-*g0R!D2BE!`fL2Mf*_Kf#!M2ybiYsv& z3`?Dlf#uO)D&Hz1UIIfbFwJ)Z94^&Q+D=#bu=k;vSGHd;+LR-)ELzGTOE%oGTy9el z#sHO^p>Duhpf9fyt5Yb2I=_lTx{jo-hQAYXfGNi9V)$5CGE*Qcnk85I{OoyVU5;2K z%idSCx-_(geQ{cbvs&{Q9ab;)#p&6YF_lFvU*l?C$}>mO&zP>hpvj-ORKMjH>xeR4 zImE3Oak~?G5L@EqP}O+S6`L$-E&Q&l#l23l#YlGkj1Z2w@vN6P#i?^R=}t6vnxu4) z4Ed_U)pn=y7*>td(`^=T;w3b7WU#Bg${Qo>rCDddO#{Jj)UJ04m*73l9o8aU28|9c zd^??5M$E_ms;Sz*j2YC;Ou9OH7#JqU@Q4(xfZMKQELc`m6)mgrS>tZ*QP?BnuJ&>x zM~H>R*f6cwR9v%#<9oJL+YFh>WNpZL<&=)~ayD6I18>5s?vVaEo4Q z4XAf2X=f>VLbkQuQh1i>Yq6qp%mxl~ zxHPCAg{GA|O52=RVR8Kr(>u1He`jt^Tbj=gp)RU zo!kZlb^wWUKA0(B+|RRD6y?BUJg*?9D(LfI??@YKoEeB?EXonPT>8lk7~Cm?UIfgO zEgE?RFun0~o|M}N_Ya(2&qqucwzGPCR`Q^C&>h#euYAL)@ z9Kj&@;V9Yce80>WbT3!KY{N)bTEWa%Zl|*U=4qjYUZ*2mQyWs!6+aJgR9aer)2%!ipr|J=- zYLa~LC2UdhfkJ5ob1g8ZhEX~XfK|pGg=4l@6^naYn9wwKTNM_GvVB#PsMwrLM6{M% z6+scS37%|2T>6$-^BrE8ykIggRH3M{vJBlzJ~}ex!vrL`a_Es$c3^J6X1NQ!%#vW0 zPbN0gVNq$teD3vPEp(A-DMUFhve*O!I*F+&au&M_9x0c}LTjv7Wv_Kf%EP#`kY;Jv zBOi%q@Wf`-AUoMAW=JmMdpv$RY|caErch%E&QjsRz#OxfZ>*^{V$_+^<&kb6tlIWf zwn^zICrTzl%&CK0Suw_R0ir!Qn3p1#%sM0PcgJ^a_6PuOvX)s%zPNnuzRn76=fL zR{WTo#D|YrXYJ64*cBO5=>o5hWkBo%smRSplMq)Ufk*ttwj=7-z%ilrq> z?d4Jpx+U>w*C&%}h9PmGS6+`JV{v71**u(7BUXL^O2<6vg(E=#6C9hM$|bmKl2a-{ zfPZu?dmu!0usfGK>^NB@JHDh&>v9gZO4O8C@w)4S?hN`R1p;I?r6?lH!``5)+U2IN zI;l>1a+7_LkAdA;3s(la9g=g}G3ssKsBW%%p8>{ z2^}{8w^hW@0~apFg?wF_EgS6TAk)?8abaHO^0QZmy-s^IVsXHvY-ctGfG{qkIzP&1 zchL1o^~{UVW_MIECn!2@^+BRMSRu&pSg&#d)_}6lZ^VoWcrRJNFLFTZV0>w_5I&>C z(dY|9yHvzOdhnpr+cZ zwS-tYdNZ4P4MZ9o&3yV*8`K<`4Ox=_u5J8_h@P+!sjxT2NgL{%!VUSiJH9hGiO8 z_hP;55NldH=bo*Td0~&=XG>k!_K(aXmsdThh;v1SZ0Lj)R5&=VT^k*fZ-q}Qs8Z7_=dKm;EY%- zW0gdIWk_Y)A`}~=2=1|BV5gg#xE-AtV4k9L~ zVpcE|5i2fLfEL{!$l0RkUC|u;Q-=12TP6!S-i#s$cH4V%NT-76Js~f5P<)<&CdU@36g^IlIfk+g5tk}pY?st zW*fB=pNS%AD*ndXY(2dA+s$U{nQn`toL;*COX<0`c$Pqk58_`c{sGQbY3p`E($F|t zU;JkO;qi}T&1q$_+ZRk`-lLV|$&)wzAJSL8zIP{`|5M`)25E4?OtLGjnb}`}Mrn;>J|3e4zE@w0p8g{qpmX zFFoI5MDm=xWZR}+mV7aI!noy|QjeT>)a56iyeVb(sOkq!+E@OkpI1z~ZuYawMpVAG zJ#+Diqo4V5_6+FomYKO{O38Xt6v{GBd=jluW2*CN!{s+FgC;pX_S~uVD z+B!@@#z(BhMj#rKk>#7H&pk3IK%b2R8&;Pil^21>7yKXOk z@|f%WHw--^`1s&0FFl^TptNBB;_2UCIpwVHDqni0U(SRHTLb@Dm|0YQPW_m_#h?5B z==0t@?b;cSJzkPmcl7!ven0ik-*i9ux8euy*;IG+%kDuRe)Ztaeb=6_Vc39zOH+KK z|Gm2Avk7m!c>Rw{CXIHSa@p-0K3o0kPeuNBo^6;lw|Dm!Z<}-N+s(hN_nv=S#uxim zEOm{~ekp%g$T~&aU(49L->d!CgIOz9{^8N4^*5!hzTdNT z!j<3e|GVSHKEKUw2z>fn`7LozzPE4FSkGTBJ$wwC#>sK9n;m=L)-yN8G&AG>al-KLgKh3=$_5HYGrucTPKH`#;R|6+rU$VrL*-?{D%uaoH}Cp;S9_Ni%) zJo$(B%YBoIKl^I?*w$@56aOL2Ym1|}XnKQ?I--Od{`%m#p{cnEi*8YDUw(g@b=l4o$zVFNrPAXs5 z(7!D2^Rw^XlYPo1c{7GCojd*Yp|kDhes#{H`6oVp!tIZ}(CxtN#J;x;ivQ2I?=E`a zasQ%MGX8#&_&bj8-)WY;( zU+f-dAMShil<&5``NCHpE*?9y<)g=6pRsJjh}A747uJk>rJMJzLE+N|HhlhmPT>!( z{pF+H%p36XuRC|{?|1F#SCp^Za{ItY)xyJ{6 zw!QWIQE%6$J-G8<$6c|!X5kBqZcP97u18ozoO9aCp6as(UH#f4v$Jp9oHzaA_~va})}8)ndGnUPuiR2{?J>V*9Bc{C zUw!{6x7R*6Vc~T*`ETE!?AlQO>5!u~EYF>Y`uUpY{An=F1 zbC13Gv?uL9t{J!Op69BUVFsnC^F{olzX|v^6lwTl+lqgb)*b&a%i2aqpFIJ=VF!r6 zeOQXk)*B(oXoZ-ZSISa|X0p4i*5{RyU^|jLwA7uIG#@KI{2z=NPG2Y_B~8vgtuj4x zMovb4-V}z{AOBCdy^md0wCX3PtGhhuAN=f`bCC7;2`4SD^CV%NL6_-H9G8}yIxY!D z1|QkgPaL` zl@wQ0CV@su%G}a%N#klmA^)tDl!k_eWb#Fkk|7NO45r9SWwPK+146PZ<%AT0AgE&@ zH;op5(`b*>pim73!cvON0ZKynPPccO!%1E!(`smY9aLapp>hx_9pWWLP&pxm*ZqVP zCYjm24}R7M?K$vZ>Wc2YSey2X>k+?sMe2(9xVW@FslB>)JFb61{HSg=EdVe!uk3$i z>dM6NsVfuuY)*)ei;s^Rnc7dG5!VeERg6Hw!o==F;ult=4M`o;9Ur}i^kz+*RP1#o zr%g(oK#6^ZjOK}X*tH@=3-=&R!b=&reF@`G+VIq&1eY+RABQXV`9eu~IjLig=$AS( zH9c*5+RV(XjLgMH^h?Xqe5PJ>oi!7EwMa+h1FB*UJ;Ki@v*R z?;iW(7fxF9^z@2z-#pK`!qMP5`?enAAI<))Y}&9zr}?K{@S=Cy$(PPfY5wezQ8%CZ z%Kd*B@%z$)!v+@*>pAkCyFNZP{rl^jwdKQ3yz0t5SXW-VBjKL7^RMq#^Jf1`ubr{< z`(BUUSM$axu0OwY=G#x7>aEFKQJ;0|Wfys8UcLReVWoeVxP9@nr5A7e<2&o#A9chaoPaZdI=QWpp@$HK@zEpeL)-Au(T;P8){`7eb zxofhY*#E{CCHtN`zUZpkzdrh`UzaX@>W<-=OWyhB-hUTNdF9&|R)5#{+)_u)um_ue z{krz)D!ca|8$R84r1Q76(%tb1akjWE7u}b7(cP*2A@9)x;^KZ!Ohi{(l{$dFhtPMo z)CBxV9Zd=S6Ne`bz5JLXdi~|m5ldF@+5Kc|;pu-XuiWxj>R8GipEx3Q_==&&z2z>v zroPv2KQ8-Y@|@d$Dx7~|&$Cmr2w-etO6s)K<2Fy(e9Wqema4`q2Y6Bk zcGoDv#CY_1{SZKt#@Rkfw_W$Q%4^;|e&vkn^OI}ef8nLaUz>DQQPV$$Ojug*C+B<3 zZw=}G>Gl`5%^22_F(iA^v^SF%&iSfO!uumboN`PU*GiIyo2W$KU!aL?8^P;Ny*p#GvloN-%GEj z&G_5m#BY~<@vqAhP7dF+Y4U3)&$(R63xE3Btcm0QcGIZ`lHYviFKf>ZCZ|jc4}+R` z3Tk4DP!sV68U5GPL{{qb^h{`q)Ql{siHywD^weze`Cs9otr5R-&0l(rUGwpn!m{1n zzCXM1l4-lMZaKAN;hxnaulVfed7k|}?jDyK|Lus`2g-WAdtuI<>wkXx)#@82EF1LJ zmZx?edF%^guf6HqzPA>xKI6UNGcsO#alrgHhq~W>Wn^IgS^eL?(7vf$>)Fcq`1_p9?Sd3fE!Qz z_i@FON4@;pn~yxv|DR_c^}%Z=J~Hdx9|!cet?l!`(ZiEN@1M}`wP050d0cl)Wj*5KhL0hQ5HzhmWR;M5(F+Q2eCkDyj=Ja}%ouLE z;Gg94CWUID{c`#p z-FlsO#GFNg#)RH|Z1wo#3%9)QoABlCw;%I=K49(_$GrMO-SY4M^~e!N-1*4`<1$~J z`2If!e6Z}jTPBPj^wZ7vTphe<$xBC`(JN)`g9q}9nwQMHY1sY~C)FffnX&Yzek=d+ z+3qbVKUXY0!}Xjqqv5AnJ*F<&{n3D<`+xLgaO8qV{+V^*w#yd&^NtNqr04!;`}^nI zbivK#j~)5Uy4(qakNx|A(T~o*;cVy2^Hv;DcGs2ff3)+Lw|e!Mu{9h%I(22Y%}`;N zbM@8JdsEeK*Pi*eyA7iH-@DMj3Mnl;b$V)MS|Y&QF?0HjMPjFlf;C+?c6TN%e_8*dzZ{yH1D*$^okiXSV^=7 z>^q2={P?R|Q~6SmR-4FUi$x5^=*y$Oe|P^SeUBP=-aW||l)ioQj?A3ZrC+^u;nYz1 zfA0DBcP~!-K79QAUB?7+KHvP#Yq!*uKl9?x=e;uQ<;SuU{HwQpowntroO{=n-CFaH zD`r32Z`SwA3jUcrd|l|s8~>vpV>HL&gk5iK7RkLzr9}c_+?xEBE^lJT=?AL+K~?@A9!T@ z^WN)+-Qy^o1F zl7{|}IqvGOp8DGZji0?!Hsbgva-YpyGdVcc+vl{)Mt!?-<=6#&3T*>yq;Zj7;rIijJ+9;!|z9)sW?K z3F}ZoAkEkv|4n5#MbX%C!$(J5@TJZtfs9QoNX6oR^PJ7ISDhf> z;d#n8&zc>nPS4^ri*I4DZFL2l4z_O8EoghJNF7e(C(?qpZ)$IutAvEqA?o@v4jZ!H zBP}r>-|+G^KaM@)>(8FQV2$VQ$@K&7IpgA2=Jz72)-nlRDz3kSd8z%1_u_~j_r(Z4@yzF4#)i+*r{e0VHU+zo)<#T(lx39i@ z*&~<#vsZC;?ipvK7LQxC)#uHcbnb~i4UJp<@#OR0PF%J1_757meLXSpp8IR>`fX)n zx-{n6Q}(|1!&xb$+~QZ@XjMyoc|2>)-{8S6q4h*&Dl8 zztGY!@7{$)3yyu{;_SZ?SzU#ZMIVU{!@)_Iry>op0MQb--_`3Vy{LGYJ{?st_ zlsBIHc*)j=6Aym!^3$tlJ%9eLT`SL@J9K};^o8@bjJWloC+t_w`^I-{{UZPP6}@)P z{WYWCwy)kBQ~%ZRz2c^>8gTFSv%l%{LfI|r-`e}hr0omC)7N}iUv%@v)sxC>!y4|o zdQ|0eyu07WOe;tmjt>b&?SK`33N%IO9EXI=#oH}1iB>9C4nvpbV;B~0$md5 zl0cUPx+Ksgfi4MjNuWytT@v{Jl?2{A`2BC>Urg@7U8~@quEG{JfVBdQD zJCB2_@)L2kJCEe9(F$OqZH4@sZUo~JQ?2BI8?yzC?K^=FAL{Mz#j*Ozc(~o9p}{WI zQFL5>v&&GA6}#hX%cj|ED?X;0s{e_au>@S5=KjAT+bE0OBjRmume_2&dup+G8^{#J zon&^&m)&nO@bQEcZ>t6iPb_Sc2Gxb4C7Rk~Y)!oF#z8jQ*i)m?sBz-HA-f%k3v5-! zx;(u+-u4`re!4bZFH^Z9_zQW^#d9UaNaMW5c-tb}Fgwp3jRt>zomx1J(bV^k_s);E zO+_`{tJBlyDcTm~S)a~Fr?cDhb1HKbcF>qW^y8cQC;pP_J^dRZKNYK~X~yS>MFN)RpnJp@5wl(9@7<(Ok(YwN+hmx8tO3z zG;Rgl90LuyHZWXtS8cx{pL-*XouEPEey4#3l9W*|Xm~vc#%e|5sEgwOa8;Zcqm#Tp~5KOY?2Bc-u zGt$_3f4prca(4dN#D|84vs$Z&jWk}~8gEO2{(E_IG#W}ZEcs~O7H?}tLpDFa`@B-P z=7(AT>GjW!zsK9kCfRH|9*ah!3gMR2|BQ7>-5YP~EwZ)!LkxSCLwr!2D4B|p#tEP? zx(ymckFN_#ic9Cs%`cYc_-2&agnv8YZ3C}}XS!Bf_Bd$SRHBXim!TY9-WhMZN8^JL z`W|w`V#IYY-uBB#J{OJv_$4C}Y(JrA4gD^`_DOjhTdR~29sGAB?l;lD!6;}NU|!|P zmj6FuXM*h{Ekgo|t}>CHp>d=3*&Y}N~#y^@5SV2p8ixQ6|_(wePlzc3o;%q5+ zYz4l%DJAZzfFsbD!rnh=@CB9yQx+D_bBB^yI7>?4-#};eC7xAUJD}dC#zmo3pgfeN zA*d#Dny2Y#(kP!3jX!$Wt}x*6*CKj`hN?E1)19uPOCulkmfH($M%p4dCmAj0u0kfO zpB`r>QhVrd5I@Fw+;PcSG8V~Khtu<3r0C1xqE61$;+zR6RgNPe$Lrdvvnn=2tazujdPW+{@O5e@Lce5p7P1^Nemjt>b&?SK`33N%IO9EXI z=#oH}1iB>9C4nvpbV;B~0{@pKaO2mB1ONDC+?*9(CLVp!jvjBl@l|~4<}VWGtb-w> z@~dBd|9uo{cku7m*mkXW#8+_nR@=DeT5Rz>)^=~|wq|1UsP76}4-R^+B|fe(zo?}t z9>3zx&F{YH(*r}B2G{ngO=uce5Wnt?1Bp!&n+JY3v3bw896x@8t*K{0+y>jGiOuhQ z8+SBl#`S1QT$8YVV)Nc_d#vxdb;UEhyu#L726L)KEx#n-SHd6i3tO)oiC?{bMwy`# z@T>1H_*Fd{zxw}{-=nGfnjY&vJ762wGv8MGPyBu3K;P%yIMA~xZmn(I#OBvQKVd`f z+JVT8-#DmtV)OGzNo=yMkE`vrCT>Ho+Qd62Hb40-@zDH8!u`{}v-Nv=Yhi1yD6_D& z=TW>&@OA+&v#>R3D1IfL2i^t`!>?}V<5%Kv{OW!Iezo?*ubv0+>)YP=)%zfRebfiP z`urz9qp7g76^KTr>IFW3HRnyy)9B)F*D-#OAVZk462`fmhU$ zl#bHSPDEj1bN;u-LK-QXMj~f;HgX`>Noco|k(b4=rZKGEI;_boCz<8gbU8<{oMVt< z8&}lw;}lMj%9;m?eOc~g5>g@E($=17&$Yy%uMTe> z{(Di&og#gB^R>SfwcMqA^+eu1%GYJcyHELA@mpcb34Ttmu=Vy+@C)>M)!HDvJ25s$ zu7DSOj7KjYzhOf2+I>YW=c1Pr>^P*2L)zK*BfQ8+}m4}eO4CmY@$2RldM!W=(3{nJxWudWkR)x-(t2gnR!F@UMo+K8mR8YLqnbvp z8L{?=btBdjF8ZP9uUz})?it=ReErZ3m*>uaPL$`}qm@#Wc+G zZv4W?q*>_5+9A+sgQ3#~q5qEBLweITuCVn3F&ZW`58OjKbV74qR@M;wjvF_jx%(c> zGd9p+^UM;ZymFc%5(nov8iDYan0 znxhN)U;D;^={x$a?SnPwWUP)RKs&s?n>1?wjXj~~dP2{=xO*6C--~hg*WJT59I>%4 zTV3=(es{LMcyKq(4c#|(LrOQ&|GPFPEi385%y9WXzVI!?#Z1`RQyd$?ZqYW?K+6|-5mcX^^hyv2DtG3GRKcXP>>9(V=b%IFg z*3@l%cW}b{Sku;mR=NEPTJQ8g_Rt6gtsA{^d+Z4D_9$pwD&ZH_!v(FOYW%`_ctBJC zHT~B1T{mET-wo-ty)hmJ74$+&CGF^O4dy4TV27e_AJ|20(p!;o^R7Nk1J?Ht+Nuv) z>C*#AOq(S%jVOpmzx!-gcVMV8{$LlM(PSCFxoaRKOk-rV*vAyK+MM8t_2=7*@eBRA zcT=x5z1R03%C??OBWruy*&VbW+||3O_xkQMM&2rD{h$o6=(9zwwsY_c`lz7wuVSt# zXx%E${Vlg-bDDgNbi)`)#285cy~}s?-jD#D{^@~%R1(%pLw8^{m}8shEeJ1p2`TaD zzcdercJ*H02YmDWP(kZjF?I`EeiWmtp!H-igB7$+7i+}AmPwlZ5Y00*@)Ix)XdeX4 zzpKXvnqh3o>LOxHTlN zk+oAmd(^IDn~q&S1uZohy?a7)%XbB>kBikxLF-+D&fwa~n~p)tOv zNx+%NaJB>Ias{Ve!I`*e0&vCyht~Jse0S{n@xU3!aQ+IM(-fRs1!vr*qk)qIoTGvB zI&f%3JeJ|y3Y^IbPJabw?4~im84a8!MfS3acT0csM44@ka*B-U$ zNZ^bD4y~`(17{R)MzV7JzUJso==_yuq~t zHw^$zf8Y!NPAYKv1E(Lu=?NU#P4T|}!8ln4{WkRlP9Na(1wDx zENHz&!RfuJ7jSw4hgP`1V29WfIHZ3kz&Zf^av9EWmV%SGiD?SpBmn1S;KT!mH1dSz&A=HbaG=Q*z5FnsrYUQ#n=uZ?33{l@ z5b%X@fU)0*U(g*%O=HD4pqHAF;aMXS?3pkf6II|QSeZMIJj@oaMfODFH(_O*Q_nTzksQsopa3(7_@5IZz z>HE!4;K==EeDj`t7&~#Y3~o|zwEbp$^TB;%lzub5`5oZAtl%tFaJ2nqeDjX~kGpq| zkE%NNhxc5P%p{XAxsXhfNyrTh7$6{G%Aq<5li`+RB2sH9#UxNWp!EQ?mQqV2Qj1po z?McwHXM(=8$77LtNjV;mwO%5n7A*Ay>c>(lp3&ox+}Z3`cLt=%`+e40duI}{zyAID z`AGKcy)Mss*0Y}5de*a0$Do^X^(E9%%sPwBI*D{suD*#n2HljaPoR#W^8|FOStpTh z%GGC3$Do^XbLc6u8h&jj6+s|re$nsoCh=q5|F7tjuT2jv;v+%Nccj+`y%CbOel z-FZGs&NA^_uC7VwBcN^BekDAYt1aiV67XDuItK+@0d28aXEL4xsAH_paFXCu-K2jOX}BRsx=TQDj)?XGT8)tH0liqrcG82noXP{9-y8w&HP;R1AARfDI&ZHr#-F%u%GD0kG1g7Fx&?JA%{o!DPU5;LS9hS!#JXulo%oG>`~mGY zv(DuC+<-b0^SKyxj+u29nsp}6ryq4D=F^Khidko@&KS?+`J96~6Z2_Bose1QEwj$# z`E;Ys#JcGl#yY6|{Cr*>_COCdY}|)1pIHKK^da<)fZinZjx;${%%=nM`Tj83Q4?c% z5q+E%eFU_HCR~%pa&*|4FqZwObI`0aw$K>==qN zjOAtlLqKabbT_R|=!gMrk?<1)Ox-P@mH5#v?3#d|ktet7X+9_8Xh9UEntVjlQzZBHU50tBQ!{lp9i6%o5CP&NF zCBsz0i4sYo#6nggN$BF`>Ks-g6(zX$s9Y^!B@FLTx$0ph(olkIW9r4tN*I#0Ty>yC zw$N+u@8d&Ef5pn-&;-+e+W|2%CXhXUzN2 zDRo%jKaoGXpju=*%IxkYNXFhb{8+m&=Wl0m8Z!J`3&lxgsM85<2TRy-6n+0<< zRIcte%JT6F{5>J+aDQG>X`@~)p(j@BO<>*zxTy~V7u*MAQOec#@YS9$FC6zAzD&Tj zc4&oW=sx9Y8^eI~`tI(eQjEwVN_W5q)q+@WW@qxTOl_wc?HtX-NMLi7tJjNmsO-Jn zk}Rp#xJAH-->_XJsa$<(NaDRP$~rh?ypIBAD$Vg^?rmZJ$PJ4WTFBt$zzS`Pm_MKP zCCq~aI`Rqs3jVr|YEsoQ-Pn7AofU&;2LIb(#X4jgJgq6wB=DxbLBp21x4T|Hw2hCz z8t`ofo#H!Ae+jtn>$b5uA-I@w-SWAyrv5`?_57W&x+aa4s7z9A zaT*;TzoceeHlBBjbvr?e8H3C9_XJess+VEKz^NpUkG?-{%mrVU6K#*Z&;8T9hw8!TxQu@2FBh`{M|gj=gH_N!z@{ceq!jyWxiRG z&`&`B2MZMElwj3yqzbuOZF*MLPPp6LvgtH}e#lXYN%cl?;vhuPjo zLQdA}$wG$k#0>v4`Lm$`^z)X_^jl@CLVLO8>O1}1H_CB2!CR=GQ+0ey z_4++#KTnwQcqqa5I=P=iqMxS{`Z*x_p}D2DcZ#;5Ph@kPVBcEk`vf`h2T#Zv$$}3i z6F!)7SpOEe{naFJKhDnrT0l@Kt^ab>-*3<*;k;P1@6*S>Lwt!#B-%+SSJ(A(ZfwA! zoA`W5jFTX+EBPVxUfv%Fs_hNO!LyFXrD`jnu>zVJF&@%g9__vZHgbyn-vW+9%k|S@ zj(u7elSdc*#0dd|3x6}f5$7$_)^5U>p|@0o$hMJ6&_iuz*e$Qrq}tzW*KSLZQyxza z&kiI%k<_s;VDG#d+KVe@h5yeEKdsaQtEYcjI77BZ9UZnVXXjaXnaPKHmT}f9_{-ej zvemJi{ptIX_Ak?hzJmUs9nA@q15*Y4zqsH6wB%3axUAP-1GglpF~M`+>@)EB_jv9* zeP7ITkFgfGPqZ;^fA}HH%VXunY#V#q_4*TnlInF?L=4pHTPiq)>h<+AIqdcN{deOD z9@2V!#|}IpVt_PUXUA#y))s`E(YZ`#BTdhP(dYEo_i>LNtiL|mt4oQ}Y|<f zve2Gb|3qa{S-Co^FOkP#oKwnJP$nm#%mZSd2jdg`%Mv2J&DsZiWTJh{k24g|HVE1- zQ$IOhudg+~l)-x&b< z@I9R}^{w+|_yRIxys};&u<*W+7sLH9XP7jpMtqMv2j`-0!154m3V2|sWmk1RyYh2$IxoIr_yw#4WW9$;&i zMfAIrjk`>(IdAOEalV;U3Y)zey+Ri(Q>F70^A298y=jbFdkMUVkNb$=*8~9{x22;@ zb)7djbD5faUXnR)rg2S{(`D*A34L%F#z(V1o9Oqx?gss{HC#sq-^uRLCEGHsFCYDj zT`AI_sOQW;0WkU;dXtng_27B>_sR2yE?cHv9w8n_aX!yp@YyTWY2Y08i^IF^7tbF# z+Pz4=CcLm?LFaN^67(X4s)6B;1vaG6!mb4o;Gm7qNmhuhKsW4Y!Ewm*ToNr)9~r6F zo@_-aP&s^+I* zYH|K|{Dj}HTELfm;IuKh5VT&d17Iovzd#mS(4&tWxT=eP)TIvKr7ye0cm^m2y>dx%QO6SQ=p1Zk7tF$xa$Unfehc zxm??6Vzyo@Hp`{3{!R_&puc);aWlpM3buqCB{gym@OX4M8(*>kiDh>3NxnN>9l16< zOTPaD!a!9*tH){$3^-Yod6X8SVK2B)Cana0NC#+>JaV(%WF#@gRww(mmwZe<#%BQ%_WZyCx=P~xUc4wnNM zT5rOb&hQBPALY`O3V9|*(w0S+lWCd_;;E&3UEigtMRHq4?&tWC! zqGVjOLM11BAVJkFO6IVV_4+dwqm_E?6~R-pLYcs$rQC(_@-;d(lm=**YcGls+tBJR zvCb@^ER5czqyf@_A)=0%(Yamq+J*%9vPG|F@SVonCZHqwO*PBqu-Q8{l#0GMy{1OW z!{w2C>&kn}BlDuu(GSHeJoA~;Ea8k)hpR!+nJ2GSav8n<_h;kh_}nhnJ~rDX%Gn(I zMyyUZ;)7^UHV-whW``YU&!Lpbb-EEVpu+of` znYD{R19o6`DKK}nQWYu2Z%O?<#>g==i*cQrp;@45o1EM`e$EEj>xJyCR<4z=J9urx ziV+5etcw4c3h>Sf@XlXc@PL!@XrZ7!zV*NG|C~q-X1h$CH&mk(S6bx!(-yXqJ?-!Q z_a$XXWR5&LOq@?2JbiBLed+a@tE^JHU6M$4JknjKUoz*w8A=axi$A9fTB+6X%M|Pt z9Y0*A-aOB9a#?I(fryfT==;-V<7gjV4TgZ2oI8%Y9wjtm_fXz7tb3-qn@u4o;69493u1G)n= zjX|zILjEKj5OGgF&B8QmpXO$Ib^3)+M!mLI#5mMz4)Uf5oBn7Hc7hwAQLliX!XI<*D^q=g(gn9Q z4;rGU%L8a@1`EL<3$TObjpRaSBp)N;qiV2-{mu}-EAZQm@9E;Vcd#%r9lvQ+Q~4bH zrtfLuw+oRFwCA4_$&O|~_gq2xKJ@x#Kw^hpzX+PGBj(y~+n4sZ{n6AXk{&x7_qRji zZ7);pgZXkk=&tl6VimSxl;Gul-Pp6J*V=^Mm=!9-jIv!t%;>3sf-Z_Ba71ZOF$J^u z*1!xi_GX4WLn)z{wj}jc`9Cbr?-%|8?jQ8)ZQn;f&?xG)%fdhF*Ov$_9#nl7sQRu# zxgeas&$BO&#Y4d};{IcNDaKXPLvapeYR5pXoB_;E10Fb5_6|&!)0G_A6?r(`;HLc^ zUuC=Yczc#2sSkd}sh2#pd+U-e^|xCA7c_~0zEx;n?kl~zLvBY_}XXIG<-z7CgBSlfW=*4{s(-ArAla4EP{)o zAN+bi)Rb5}SA&$Pv$6O!c<4yu}J^cj{M+?Wf<}2QA+3?MkfNM$h=3XQsxI_yQYoSO)r1|xQ zwR}cE_f|gYtWYvmRZz7%DMpmrDHZ*&GKDFjgF80@NXP4vJdvw*>MRyVIf(bg}9{m-Ml@&84rPYCc$~3^O)Li z7OXcghgfl)ORqa&Uk?vgXRvxBCbui7}KE*F^M^1bUJF+5r4X>RthfU$0xp zM_#YFL?4JC2-&dC$dV#Y3CF_E`|Pq^U||m6og>EY*WcNO7O+bFx>d9l&|eW&AI%=8 z8_7kKL2$PL@|}Hj7Qq&^usAeFU?tvd?W0`}l64PtlTRRxL7m2+zCD%-sDE~e)`WC& z6Z+q)o)z#gf!p2#o`kqRDZ?eFg;P76 zkYpw3X&c%p>)Q;!>Rth#Pg{mryOPJgPJ2N_M_tK_oeGb=Gn(81dC@^oq?M_9Jv>ibS?PeWnaAF%g*yg z`@6*+0r_0(Hd7p2se0#mv2UR4-b}x5JD&o6h&>qP2>ZPu!R|&JHtU0Icx#6h)VAP^ z6}0xHIA5#OE>TKZ%&(mhH0Re22n+@EkFA_iEKD*@dZq<4>B%#rwh-xu5HPj=U7@l5o@yhqdJ=}J-frz^kj&pT8ch81jC z5}47kB~aQSmEFI3nMyl>C7pS{Ob0aBD-D;bACIK7)ifRBv;S3Cu=3Fuq&w4D{d$Jr zh0f6Qs0Ua~g}wV-A*E4jJE(HIU&|4`k3vv!rR+g}PEfJ~eAd~O0{==%SE>5YNVc4f zJ?aS#mn;7t!E@2lHng>48r(7$wufKe zB)E?h%8L56`-Sv^XRF-PS*kXSkbRH@IgS3<_;MmdQWSL5fkw_ zXrxj*;30`;!-_2)u|o&AD&|%!rF-iZLDHA1sUy=c;(+$1fFmvB*Yq2W*|L@qo=R0| z#IU9~W#z*6TdIx>TVgqAG4Eh5?2A%0cf_hx{9XGZlZ~ZR9YY*}752q6VP7~b`G~5@ zl-+3M$nZI63;fs9%$B&zW0gKck|jZ7NpE%6ntOE6BSS00eyvTw?AIKEll%2k*%$}t zX}P>yq1m|_G&KjfC{>l=IiT{Zqq9LRvw<0Tm~fjUaQkq)#B#%joYMT-RzY0>?J2=g zmb3K&8bV8V4ObF3R;ArWd7oK+=cMu!O5UD=OK9evsiim@GO*1 z>gBd9L8g7+*FG^Mn09IbpDV;7OzLeWt6ecXlda~GVXS50>!3Dz(MGioHAzF)-W99U zulER!;MaCu!*LhTUJ#zbvvKbmT$icOBe@R`m|pQnLXYtdPM9}1E8STWo=0lo)AkO&??NBi`;s= zgPrBqq{VoGo#odw;hBd|z8w(%Y%wB9eSzZef_(hR?{M+65!B z?AP8Z1$1N!KpUsn(Ngu6pBB~hD~PXl~u(NvUAMR|RY<}?rG zjq?-%ZQrEw{8SW0jyh2OeO6xTh2EmQAbMD)uiM6PdhESqKqxE*oCa2HCn5`DJVz^JswBC!qCd7TxSVGCgYsfDq#~t&J2>Sa&PxC z{X>CE>;;Hk{o4D>&_8$}q&w{hCe7)~qMbziTSwYge*6q23v`cgHyA1$cM;}dwJ7`zt+ zx3VBo2r(xinXT#1_wZA*ho6cbj))$vF?)EokD^v2^?xoU?nOdd{tk5a@3446SV|V0 z*eq4wOo$!0zq?7l*m^`iB% zp6?hVex#4{GV(ysd8Y?9@2&gNDQdZAvprJH;JA-s_f|yO!agl!^8;$HYdbd!#!Pv-i94-d>#}@4{aP{_ezI3;y0M z-ftK0@5En%jQolgH8-BbYHt)0i@vzSZtOMLd)<%_K6s9dQ=o*oX>z7AjqNu`YJ8k9 zHjUL^7K3Lvl!31q5sG4v)c$cRzGSekixOH-52v%%)0Oej-;P<#)=7G~P~R0{(F^MF zaS3%@tbPtWgsWQ&YJ0WTptd$fZL9R@8#%R=s5hU_Q6}Q;f85QYjyh~?zHGhpH={CJ zSUKc#Lu4LkN}R@430wSVjW z_WK{YF8thaiLWB^2Rb41)3Ji=k#-4`8f((jE;F8%D^ zEuA!_?Z>8+p2i@t4E9)Wj8{uH0vgYx8iVJ4__T0I}Q)*_inmr7Ylm$J(kQ9*G&xPg-*X*}OBaip5tqP~zz0qG`U&yo zHt=RE-}RyM`L<592=06(SwY-+4|HdeMh)7-kZ>f8eA@pm!p30q*P3}xjiQGArap$C{t*ZchbeZ7MMS@4W1dmQ)Ue(no;S+or@pOV$Pkaka z;@K}G@a*IW@oYDEcCz5vN$|^OqP>AhoVy>Kn>^@*(~fSpj3~VhH&z~E7}c9T!|6bi zcmI#z-G$C?-E_kb=6>s@AAIWv;kp0%pC=^jh3&9xO$Vo=li2AP7e56osV6QIC(o4s z68n4^;_B4Py354ZGv(i3p$zeODl_LZ;_{jDer0aR}NXGBq%^24lLt(s(+3_o#u>i4bBh~H<*-xuX9qFiF%bV`xhJpGxSmED-o zw}B7Zai;ceyG$!AQ@&BOXPwe7$pR|(@!x1oWy)WM?dhVu#vQdPFYCft55h3*!cfU< zwuUn0$}eb?}1kI`^z5i)^t|q^_cNC zhPOT9?F)j}O^>+3IoMsSlQyYNT0)(9pG~gQ zZq`XP>$uTRYGgv1qyyrTN%aQKZ8GaQ&3Xi%Goi1Y7bo|%%Brh{gDSf>(souc3 zd1k#7vmW)8lF-*jQ*e|3#D(q_6iM5*ec6{`% zi)35anVg-7@w~4aay$S{EL?G#>tRl(Gb1B|{&8kxJ3U1n$qu=STL{3P9O9`wX1psl zpYqMGL=8EH-KJA6IWCJA3u^e9u-r=2ct7^oO#Vc$kTuwSLAo{hlm)Akth$W2RZfXn zl-g;*0ldNLxD{`VdiRO_FvH4guk`;3yJBiP>aOzQG#KW~vDK>Z9kpXVs@Yz-@E<5s z@(+~B_`jA(gaR5jJ4Zz^Ek7~i_wA(FbWk=R*kOQ<_9QIO&BsT>S-yt! z5*2qCSu7Fmr8wzxEED~11Fl7zuvl3;%u21CHfi*vnM}s?&^gj}XcqW4T#SRg{-rbi zEg-*opExH-^9Jjk#*GmIR?(9bS%F`4{+~t%pC5jC%wNa0x&vQ~OS_U87$1FmoU|qT zLN1TTN8cRhZIjgHFp$1v(415mJd?`C#&aKzGb`QFwM=cd(Mg8~5W#Qh@@Xk73T)XW z=l?tL#lpU1T;YqAeVKlRFE;kYdxbCdYN@MWyVP}No75G>|Le9%(HpmeIzR~$sN()H zgZc@69*2!D>dkTb`n@qLTTet|KQ?L13Z7zt4}^G%H%{{U)iI6()aN7Rei$>lNUB6G zp4X)kniXUpGwF7sO`OyV|LVf{4X*bPkx1SZ&p!_km#D?9Y4n7c#2A0i-_gFiEy8=H zbB0X!uXLQ@+PD<)75F4e4OReZ;R&`e^=g!}8?%Gx6A3HWeun$uEpjn_cYoR*w4br^ z`Gc>7-bgd-XKdmP^6G)BwBKq!!}%83;GB|;ekSaZ@zGz6OE|m6Z4ur-`aAWx{!V?a zzf+&<@6;FdNAq)^IX{HU@zEgbmt*Mj^G9BC%rkT+EBpxmK5m!igCZP&jE}^QU0(3c zPuu_5ekz%b+Ya2&8|eo7sTA>MI=#8j{v-P-&dcqxi@lM8_ESz##uno%fh_*X^JT3} z>Xnp~N-O?N1tiAkGJ)SD_RYz@rQsWIpD=A;j?XAR|ARON#)Cu_IpTbsL?2}Dkmrl* zT}jA@6CBuW&4dK~_;17|C>mkl+=QO_#qDIWb|&@e~gP;44sgYM6*K?#&Tc@4JD zw@+Dv5-8oE(y42nVhf)A^qL?38Sy=Tj=OvQjPq`<_7&f3{~B=sAg9h48EH_~af7Sx2lgW5hAU9J7tZ0UZSp*X1gN`51j_e;+qnXT(Q z`B~+;$PDCU;4S2!h3+XWJYcqP+b}-|{;P17{6y?|#a5Xq&qj=SredvZLR{f<2lJlx z9O?#y&j7-MM*!uAdHdbi>zs!8vW$+lz;_T=>0^B$7vhPRBA(bClhm1) z56Vkp6D_@fmb%f>Ganw>|1`43v3MY~md09>_E{b!PXR@7o{d+bMOTmgF*K;3`?QsfuTX+7n-5!IBP(7BrF^5RN=e`Moj`SRcoBp=P*y3Il&IV01cn ze4vk$LH(53s}x$T{mvZK4xC2_uy$$|1P3^$Mb=KVdx!Zuh5bHY{!W(R;RT0JAxbCD z9_wN2q#mMX4}l>&q_6`vV={{~(LI#+Au=2&8boWC!R+r7!iXPK_~ zYf}%R?W(NJ_;+c}HM}1lwJWL3akpxjmIM5+NoaGmrdtfU!1)3OFSVE?FN|@GlS7Zz z>kxszh+{W|>wN#eZ2oJ-UrFdw8Ezi^Zv?U8bFd?UJe~yi40UXPylb3NFH1(hy!{%n_ESTv*a-yAd+r~wkv)lB zz$ed%j2-32uqyca3hKKAr4TO9B7&80xsqk?x*QKk8EUw9bMz?igsTb_*mg;yb17mI14!_7f$uw#|6kqm5hH z+qRh~y%+B-w@)o?*=W2qO4A!UAyT{X{kYwI@5T!1X=52AUD98I`X5{V3p!1uyw{9A zbury0B|*1wDgNs6NEvk1Bi0!>VE}F!OME9`FEdH5)v}v02U1zY70ujK7CA2Y7dXS% z?`ye=plz9BqrSB@5YoKJ2+n zgAL)^yd2(+pnihk7%|qs@t?$V7HkUQK*+#}eM6KDRY3j(^>@T~vJ<5(hW$pmTqDl= zKl^Dd^f?ctXb$u_ckFWL)lg8o>t;|IVg(n6(l4xcye_{MezoJ3&fh%xGBlEppwq>m zVZGPk3*-WOYuj^`1)+Oew}BtL2H&5f?UhNC&?A?A0GeW2F846H6DT29sjPlA@`|8@ zNBVF^3*N@eKJDw7UZB_DB>jTn#T{E_SFLes@i-{2PoqH?nu*uN66g{(9t( zP5R@#Vpkd1;4u!lim&?R$gi2LG(%n6hm&6Db>iLl=-lx%Mt_(ADeviDM{~Q*Z2Wb! zL&}DCGP@%;jB&QS4ycF<vhnaZy z4ZQPh`3)eSuC#BFE3d|C<@53qTcM6{Mz2rvG5>~vsh8lBty)lweEQIEV#Zhgc6>BC zmMj}9etP7AE&qw^M?J{iJGtE?v^%-I>5w|a*Nbt!0K4EZ-k$MxeDqG(M_h_cwAush zul9#LqXXp__UUi2^+6QP*9ZMgTpw0BXs!>dyb^Z1F9gqlxk}QpO1eKS{E_vvq*PV9 zPDx4yRt~;n=Y>`oUpZE}3N_hod@udA!k2Af_#^`xE(d z9@z4LR0SXX#9D-RNqED#XKJg+NzBggf7*ccSc3KF#d`F_?%Dk1&0`_xxb5Ko1z43h z6?rBu9q{4i4fK_UU7v%QSQBr_$HT`ueh)d|x$k$69ewn-SgDTx0ZsiDe6ABQ<>Aao zUf2_PBkt)wj$NLUt)9p#k_?FXk-k<NTRBTGeK}1E;qY_*S(YL&-4Srjk@hD4Dv^ zc*jf9Z$MSDYU7!>z2w1-zo#BH{w`vjJs}bPkiZ8#jNTIYfCm!c&B*T@+zx{SJJ9R!BoNvdH4}8Sw#+d=&GFov&{mnZyVFkiZ9cuZeuX zqpYv~ZR7~!1I23d2=Rf$cjKe8|HkCP(Qh6BAD9k4FulVAj5=E0qW!Oy zVw{Y)G9UPs-~%m;4`3G!^2h@|uoirvGi|{lm3-4m3}S zX}5%Gwe?v%qBt8llIg_mG}L--s8$OtztNVsB@OMify(_!LQl5pL9vVVMX!HA?q2jKhNIvR^AThU#(+J4K(?jQ{TLWpV z&F$#94tg*@;j|^-ZmHFmv~dWL5uvMCZ5i@lXRlVC(B!rTe=lm zt{XZ0teE@mL1dz5czkBi1urVUjl(7GEuqMsTD@`&S^)-Y^?BHVrrt3BgD!X?joYRu z-+K-l!7A-};G6P0(pkS^2gw@39u0c59t7-n!x?~?(eKXqWj zH%|JCzTJS+b%lDT&3f-7)Fb>Exr%(ck*laydkZp#Xo6!cDMEf6iojWkbE_7N`tSh! z`F!>V2y4c@4aMq{0~5IO>35ni?GW^qh`UEjm>x`kX)j=^6ZL%hqVI5=`}A4g=P>zn zMQ{avvl-1P{E)J}(+0>kA&)<0^dgHoA9S=HzwP)<`;PQ`?SPGDndLLLL?x`f2A0*| z%sG+%Yq9oxdas}&pZ?k%=o?hz)4RpW@afS_c!$hEwVF$0qQyILqXX7b2w#z}479if zPtdb!wZ5zIgd5Ik+?b6>GK)_<*h zEpm^fhHA*u%hn0Y_K$I@{j)HR@+f8cFT<+n>%R)WE3jTZ6qu%SVK^0u5uWM4R-w~( zwfehRfBBeWJfcsl?Y}HQIj-Zfu(k&U96;Pv6=MD8QL~x^afERy!u@UyIWw zXX7ViC%aoy=Kkt_tL#S6@Hft(AvfV>Z;px~G$51%X`jy0E`VyVQblVid5F zcaYC9xfkb$gv2aX^**1z-|X=bv&TNMy0b#p;$%>*{-ogV(^^a$41}j3GIK zW-s-ns!v?>=`Es_xrhAbeP}-IDy9#Df1BP!o^!BCi>(EOEa#w4_llEyK0P&n(ZCw_ z=@m72Vl;Yb37!~@mWW&UvSnmahE|*@*XnLDDmSdZX<_6_?#Pa&ce=ZfZ?GG_@dL<1 z*zUw$KnbYV3+na6lJ?mj#r*dzf@g(OZxy34eltn2+R;Z6*BY(Wj*9ioPrh4#+dX}h zo5Y5120t=5|J{8x>;|r4b$j2UXi{WuIJs*cG9i*z`4wotCFr{cUKq-lax}Jh|H6G4 z`=>oV8yOIb)m!?$B<|@VUw>yeum#LZPMq!QaCf>RE9*1l3`9WH;%vIR>p072;0~l? z|6>*Wa*N;zeG(Dp$10tF%7T^m*pHG(2>|$Oj)8-eI+6 z;FLNv0i24bGl0+yGRWU5#e(YiH7?A%D@yl6q(y;8jG#g;#`%9|X1LVcRj!eJ;vwmzReN63GlUL)uxGirk-w_9*EisVd!{cU* zTS_f8biNuV6rkT?FDXK21AO{ZVl~l?X0|R#DN<8WpQLE5ws;NN0L2s`qhM-6?C6g% z#wCJN(7kVv!pM}29PCk&%q)Xp3FJ#1uWbR<7OAn3#5l7r%As7O4khfdPtKuCZE!pr zxdxs#WTR$dtH-C6K);e)=@;5Fd|F&cMBw6^fCPKEK5fX5h}!$6L_8+AjZgde4^R#g zu~_zLQG z(;Um*m-T4oV?}DqNCmX?B4E{CR-~>QDVMLpiDPG|NL@QphNwXcWM?*`V0XaH@U>!u z@;!O*#f^MVMY#X3RL)aM1NL_5NuTzlAv?7WA@6+pJ!O2}vv8{=odEI#oE@0E;gT-mvQClf zzDRv{xKhr9*R5J$8hVzXYT`?j{XQj9gbaY(vuxPJ#@zo3dj}4=TAm-C*D)73@0J^N z9rKjPg&e)}ki)N5+f~BnuSnf4;{E4>Px?+a>PM&4NI?zg%4Yd>!|;2GF(Su6E84-T z^XV@LNnOz!3O-uWHG_1Uh`fA} zI0FwHnAp2sw44>12kep7Q$VvnOm{XFLw6vkGp-2rLANnV2~fZ0VhuBaO3__dHG*3XPZRp6*#xA2rhwq!{B>Y%IDIk zf3yKJBP=+dR_q6Cl;u)uHuL~(iJ=E*H7oFy^Z;$nDm+0C@M)gac*4rW{iIrNHJ-5= z^YDCGJm<>LDJ1@$BFyJ1Ipkf!txGuyPOf2v`msWN2c~sofL17Opc?d!9q4_|M;*`= zyrAw!hVnq4(?KtH3Jr^&E=cYwQrm~FmakUkM(O6fB6a7`)ylkx18a)T70{a7Iz;!y z6{&X&(Vk!u+E^mmpuJmr6l(@`=0s78t#V<#U|p;o;`+tyfm&^r;HkfjBTrRJt(Gj> zpc_AnkWIguc?OEqB|}$7(;^jNSJzDF8#EdPE12Rc_G1N8M8$zv)&AN0vi5tJz5)I} zv>-v>c&OVa^bMY&#|eGIA*W(Lhx836^bO=;gDg&o%FCBy&xiDkv`KnKD%MXm*8eRf z9Or&5umDfAHZ(;@Z5rv7^bD*I8(|hV_JPuppl7%NxeJu`_Mi=vX793s(yX8~C!z)j zqT|p#aMlkHSpbpCj0O06^7>eU9XnNCzaq|b?}i+EU#tlpZ9H+$DcP_`1pY}MkUDVF zM5F+>S~^-N+LY=(@db6cFM!9i!S)ifO4jQ?c1LQF+GN`NVa!!QIdBV&->2PUct^C< z^>_yxke~2@)yeMpOolv|Gng)C;FJ*2V+D5pi_{kfQ=g_d0isr%e^CoR)&N(3k77YgV_HA5O@oA3;T=+C2 z$2?Ic?PQnqWFbBcGm6=!ylZyMH0*!CXNiL6-^9npwdx}E#6Y@|34e;g=M^F2gZd|5 zLto?>(ta*1?mRg+JiQ}N$!5MM?zzc6m<1dh8pwmR%mTlZ)PHaHX%28qX5(qQOgg?iPEAK5d<0y=bzqu(7WW zeZm5+m5F_%?LIt%YqRYA|a9W>`y``00rP1c^T+i9%AUyLLS`uZo|$PStsOeDpEbja5x=) zZ{lLy8&QM|fW(X7hrsHTz;TjU8Iszy+PX4~p6P;@`l%*|;*HUb{nv-O zgZl1;7&q!c_Yzbb)VF|&`AlvVRP58*AR)-d2idaL!1JoF;ECyN4Zt(A619c5;7Md& zPg9WP#q^-1JeK@uQimPV`$l-|WI0%E&(P=5D-kP-I2O877Oxaj;0ev){qI|U$n{Z;oKHPC$L`bKL7xQg zJb7+-9(;`Ct(5Chdwtr=Lh{Z-3>&?jFaKHW`<1Y|6;J!L$3$(wj&;Rnd?7S+;#=TY zEE8QeatUQYq+hn+|U0LWVJ%TJB86=_y)G z#ILH6O^5C~w)SR#%kAn5>W{gNzF!i32X$HxoUXeCU7wBbV^)7~;Gv8QB3`E(Z(afy zJi9D;B{G1@a@1)f9tGJaA&h8kru)HRk!4$7+^e z#)@6y1)vS+8GRI+@6(P5PB~RZ5{*)- zbD)pycnjX(ReQ~R@6;aYsk}Y^7qoZBr1lPr_HHxVJ9yryeiA2-v;pHGvrW~;VVMe} zXHuJcMVn=2o4Y2#xXx_vz!$W4Y-8e>TSR*wwi#o-c~X0+W_!(F(B6(o?bV3(er~om zFR?xCWx&mGD1AYDm6O_Yi}u>g_L5n96sPr)c{btCQ({u33h)VgqvoB7-b9r2b&p;v zFA87Nu@Id2C^&IX&qC!u9da4RoV}cSuOaITd(L$CIK{je{v669vVvtNC7N8J4?tEE zjsHJo=*7B1pT7*h!HvA?ha#-jPUNKGas-ckz@R8I^FJj}Slb!v3Edu0q_%yvY1$HSG4I@=xn5ftuGXrQv$~TN18!ypFsR zl`9aBU8T%Lp7i-$?Vj2}o25Fsfb9V8u3HhA4hRpy)8mq z`bVGCiJH`EgMLuVGG)g)?Uq8p9GgqD-&gsbRL?n_%_tJ5G3cFDDs(Xi}Qo7+LH=4#YD;A~i#$KtEe$f3(x-oYp zvY>g9|BpPADP#*lLNPB9to8ju76!G2LSo>oDDYSVJTC3|^`O<7(Q(J1%{q;I*Rb;` zQyNi5!!TvHn0qp)Wf?TAH3-Pk5vK(m1DbS7hgYo`b^z1Ht$<#&n!^Ff920!rt6m;T ziKRz;+WY1kZ766$78j5a1VQaVp_4(Ikm)9M@}Ck!_TixRnkY##dwD1Wexr6zhP(`C zyQaa)4r+5+4cvhOhH??*Jq;%t_|4hOC*p2JOYaZSesB`$|yuMKbp2L6}+kfysD(fi~N7^y(9jeG-K$cS$rk( z+Zes-JCGH0@?5Jlym44Wulm1B@v=Exkk2<-9 z8q^*U+8H9gVD%7IoAftDJZ?}wmVdPKH0joi+1>PEp;0kI{ z>@1SqQwuJ52((AM*eBO2yW}5+@9EeT@kQOC8!+A*VEe?o{}}(|z*69U2>9=V*8Wkf zX5V#>E{5gvPP-TR|8_;L$4o2|_<3dU%NXmT=ry3xYq0)a!1rtM9k$NaUCLr+>wp&^ zccT~i|8`;Tifim&g60qIk2g!in}5O^AM_7Czh313-ziW23Y&8~pl2FN`{4IK_w{4* z>(;>?@>1n)xk)b;>-O%*PEhqiK)EowfN}T@g9{+{+SNLd`IF18+n;XI--0BjSqW-6 zf-?oRb+C;1O!Q%om*{)v{<|Ni=;&&>Brrd`EikWR4y@@HCG*?r=a$P1y7KDK}`ns3BPxMH$EgI(%rQYwE3ORUHEgf+(0=bO&KIjMaRtWe+pf>NpBJ|%^8|)${9XF z?q4OjFJo-Qk(uENx$9(;e$2;VZPKHH`v$dFggkH32cRj^d^PC}V!oR6Q}^HvZ+Vp&SbHvMkY%cy@AYSNB_7y19cC!V|mcPp0a zyX8Y4C+bgYK!X93$I61ok|ZdE2XzJPGm6XdA_Cxh(ALN*%S4~MFsGk18+bY+WWX*{ z)B3o7vZl2LG_~jZ6Pnh${iJCb)U*cFwDup=vtH{9Ijd;`EPd@NVqfd+(Wp?!Ajw`(R#n@e< z%$@yn!Er8)9vS2Ms8nH&xdw6AO87Eqfd`>O62FB9*#G= zAHUe_mS$(k*}YBrULVKYLSQcc5ZCg(>dSqJyTN2Z@RKKePq-P`Kbw)0&>f~0R+%l# z0Y9c&Ql>%6P$sp&a*r_hCby8mT5y>yT#XiJS1lba?3mO7X$)6_!Npp5Tg?B$NEKS3 zy|*;9aPy=VNH@At3#qIH*=%7hTA&C(Ct6rMsReev;|ild#uwnhIDfVf_CuDrzvjjL ze~GwcCp)maj(HGRoXG2XLi$B4|KO$3PsYf%N*Lhq(k<;c!GW8Xyy_ZwOJWkAvqJTi z^L%a}j-QYoKwVGd(rD5+=41h<-fB=U?F1CU{)Z%P4SsTJyI0-NNB%`mBoAwFe;;&o zrBEF^?}?B$1zsldDN@YuJm`|sPc`W~OAIREW3!{AJyNJXb)IO4Z>4$p&z7`$_(xex-P#^Nd z5l%ryz2pe|WhM45wGB2dplK|R@Q2A&Z$D2Bj=vBsIT z>FgCJ?its~!KnzU&Bx!QebNd@AfuY}-Bu1$F8l^`{}IJL7h?aPc4ys`f2k`KJP9X) z<(1@3=}75J4k!1z4)ux6XDYR{Wx@MT81516kuS3l_CNX43vqiKN=F}TThW$-h~hW!uVo{$G#$

j}9O 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

&?p@$WpeFe^oV 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� zi-!i?)D@mG;~k5hkzq$1Icj%v_v*~XZ5;bV7qenz|xR#XZ%n1{!qT#cI zs_+S6VUV6O49AR=ht$aprHf;(|D#)&==7S_hWNw?o_ykj9c@-gc)sSglw4T*p?(%N zhMHMT$?Yg@vns_Rx+fITNK#79A(@7nMZG5fJF!6~lPYTKqO)qw!&|xfSYtAo)fm>| z8TH{qOuVt{?wFPJfaTtrxz}h7bK~{3Em`00b&hkX_CzXT zt<89{Gc>5>iAiCarX629q;_|f!hc)X+K3r6x8Ox!L;bYyoT>0NgED3o`$ACVCE~KM zwIv>#RfV^r&Gpk-rJ1dkydn-!C8ZX-1=r%(YO1PQ@%Tt( z?#A$5;8j&MHOKgTZ5MLHnrGDDb|ic>xeM9CTI{AoF+9*fyv7+-Epu_mnALOGNOX36 zE!Rt8KklW^_1H}baHMXGS5>7{O>_=U#XLk;RmH=5m#V7i%{Y+tJhxs(!YfJK{AF8J zy$se<-DU~l4!Ge$?m-m3#l?l9+f{b2il^Z{YV+Kx`dK)Q?@^##U5sA%ncHV$G=52} znNKCL4*5Qf_mho{?zLC1ir=f4yH&PcWJ>Hp*>{PC*o9-ltcvTY~T0|pN zEqKV$-4046?YGP$HO}b`5v-F4jt?zW)8Xa~oO?B|%-wI7W|*11S94A5ciyRM zm*(45fL)sNZq2P%bI5X{Njrt^QaN@l^xiCO@-)3K3Y?6-H_N;)O1d}7=Ur;-%_4eX z_eLr0Qf6-!(PHk6@}*uU?aflAM&27`-J7M`?egq#A$DcXU7QzszEa$s((Uq0_WBa+ zvr_L_N%vB*!lzVOt_O8Wvh(ro%-Qnp$})#n`~Q<^PWHSB1;3GNzJXA6|Kc< zx%!r#3zKeReL8|>h;gwiMa<+b}eh>j?s%pRK3{v zwc+(D{GOJ0*YfY)Zkc$T)%#`dWwCnJGLPuVcho%}%(Hu4AIEnwU+N)z7c*zqGdG~@ zc@k^bds@=_T-nWD9#r+vf3L+$9;EkL$UP3^9h&zzmK~M%I8f>Vd5^>GUVvWb%G|=U z9D(<4#Vjz_Bum&wC%N>UF_D#JiNNwjAVvhJ=yPt-u1z@*Kd;X|2cUghS+!^i zS6eqT7&1r8TjD5I)N6De(dJfz&w7#7EiA=5-Vw<&R zp@x&fs3C)q8J4p-dU0!gGrqQQN1*gFhE6PO&WjJadT^SfO;L0y&|{p| z#+i+=OB#C$V+Hi8O`rOpPSeVo{2{G?$sf{6mHZ*KD9Lnwa}=9i6>W%P+rkXBP+{i> zZpFrHW`rLox&La#7hfj~PfHjz!b_N5KPMVVQNolICp`#0p-+v}I zY5j~#Yi5iZ;mYOyi|sAAF}iU2o(li1_{jt7E{*{IH_vKl!+0k%k4h!%0D{o14m4?>vHC}2Hnvt`r6T4e- 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 v?FiJ4K1?FiJ4K%pAq;U?_^6^ literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s.dSYM/Contents/Info.plist b/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s.dSYM/Contents/Info.plist new file mode 100644 index 000000000000..261003f0102f --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.com.crashlytics.ios.CrashTest + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + + diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s.dSYM/Contents/Resources/DWARF/CrashTest b/Crashlytics/UnitTests/FIRCLSMachO/data/armv7-armv7s.dSYM/Contents/Resources/DWARF/CrashTest new file mode 100644 index 0000000000000000000000000000000000000000..005df889c59f492aef7bca24443fe2d63c2989b3 GIT binary patch literal 1055283 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≦jAw0?y9#i}kauW`Z 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%0AKte54A?fI5a#$VGJpWa8t@mSGp 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 literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/i386-simulator.dSYM/Contents/Info.plist b/Crashlytics/UnitTests/FIRCLSMachO/data/i386-simulator.dSYM/Contents/Info.plist new file mode 100644 index 000000000000..261003f0102f --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSMachO/data/i386-simulator.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.com.crashlytics.ios.CrashTest + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + + diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/i386-simulator.dSYM/Contents/Resources/DWARF/CrashTest b/Crashlytics/UnitTests/FIRCLSMachO/data/i386-simulator.dSYM/Contents/Resources/DWARF/CrashTest new file mode 100644 index 0000000000000000000000000000000000000000..d55b8dd177bc83629904463334731d39dbf2aa65 GIT binary patch literal 549022 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Ⓢfl$`1tC4MZHpjCg{l7XJN-&9xd{e^6OOU$<7 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 D0v{z& literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/tvos-binary b/Crashlytics/UnitTests/FIRCLSMachO/data/tvos-binary new file mode 100755 index 0000000000000000000000000000000000000000..723ddc8160a9a08c3daa926a27dbff388f4d1487 GIT binary patch literal 849792 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

f?+;4BHubD${I0uUVO`4g9XrsWlH`U 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%0A~=DCPPDp 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 eV56DlV5ZWte8ewa|f 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ν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 literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/tvsimulator-binary b/Crashlytics/UnitTests/FIRCLSMachO/data/tvsimulator-binary new file mode 100755 index 0000000000000000000000000000000000000000..3f35ea459bc07ee1850276029afcf40c60fb6864 GIT binary patch literal 184068 zcmeF4d3=;b^8XWH6qT5$jCWRa&58#~)KL&d$VzmgiLwIfsu58@SpgLi!6PdeqKuE@ z;(Dz2;;sk#Rad-G7macRJP;2QPw;+XQ1L=UWq$8Z_47P43Fz)$zrVznndhmls;;iC zuCA``=XqXS_u2YQ3knK57Zen9;{Q1Rr-}*+nhJVwRZy@4|EKtW`0&9MM^v6zdF(NQ zw*Oby{&u5x;xmUzh7TWFdBV{4C`Lb}1DD_)*$QI(zePYYe0bfc$#psUj{H{dNMk5| z`BjIb`z|?j-Au{99X@Ga{_M%A4;e#E#@8}Pg4YsYU)FGsHX{D19uQ!sqE z@jHF&h=~)$u%moG^(Zv`{V^caeg40n;V1d(&Oc{E`HuUo-RJl3M);jQeqzpGI`V5C=J-wD&GFNHKEHffbv=Ce8K<8< zeAMLAN1anQyl%v49r>juJAPLLgu3r2Q$Ek(!|TUS8Z&<6@G;{@pKbixkB?Uaej@{+ zbpOlzMx8l)^aPoT{p%=Sp9Ux2qJW9+HTHk*pT@1v031GiP{q)SJgg~>Pr-};#=ZRu z?lo@3cWVcQe*DSl5wX*S|Y{*9U~U@4zqWDxn1Y#*aOH?8J@n zn;G!y8t~Ko|G@8@31`=xy)k~X0)7Jne!B0#FDP+8fqY}ejW}bJhFZt=`W@uc{V$I* z=SRa%?#OR-z%O;Qt6%s3gM1T5jh!%RG}BQ>etkZ7{c-AMj-T%H`7uN{)*q%naqP(N z`tKaSus?L4&##^GxXHJdjq#fq@H;gaAG+_rZ)5UJtY@0s7{7w=oqUr+LAd`P_>DPl zgl63h^*1@-mkK&n_Z|3!H3jt6zavM~jR@}BkKg7WoO}a=@vHk^<`=QrD8GVEoeHG7 z=FsT4|7CusP0U3t8@9K(i{sbFYIA?``32n+mFD8S>Z+rUsvJ}`G$<-@dNG{@Q04* zR4{v-i}wZxH2b3y{Xd@jnfz*={JDPvhj$`&-SFR*fO_zMH~!zRe&U4v#*R5{zmeyU z9m&1^?Zp3*W9gd{CjaRVeMVn3@U!as?kQifA24UQ8Y!C<>=oT}!M~og*W@pC_u*gF zBl%T^$OYLQ<`7jE7VJ0V{E2m=#_d-<=ClbTCY-VxPia;CJ}h_2V(RF=vm@W10iz`1Z-?Tks)w$QkMgJ!vHD zTd^|yNOL{r%>rM6+2XHeCn?o9zenx7;#~$7{1^Ir zbM)`O?C57l^fUMu&=015KdQf_(w8QvEtP&Pm9AOj-ytH2*iyODioBXdR=mW&Tt!~& zgSTMsC8hR1lub;d0D zH-4(U*g&JJpHrP)m`Xq6x4z<7$BaI)mrA{wImY%GIM4Q50*nuW-^Kd%Drc*vxm;J4 zFCLU$qV}{@zG}iz@JxOIx@hrd1F3kRuwu&lg%!n*JcH5)*UlSl|Mo53Wt#Nh^q=2v zUh@98B~X_`)j_%b331ZH=uG`jAA89r;TEn>rN2Yd{s75oT|2rR|Hf4%<;`gnmuDYd zvMP^uiQn1LmekHuw?_Yh{_WjT`J==QIQUavE-3Ke=E>TM4t`S-$Ni;+AkcLB2kTSU zS1$K209D%PAN*d)Z)JJ&p!72yxSkM^ta7Q}nSylXkMzY-SolM^ZK+)4`o3Yg-<5lh z;>P*CYv)ObjV=;#={B1&*nlpT!pR>P)lZIEgaAiE_OfO1n;#D0D7151Om83yr19JHooG z_@5M`Pb$gApMZ*bPO3PiwzaAq_xF}V>Lm_w+`Sz4krDShml*dm+HtSU<6fJ`z3s(7 zcG-ui@?uxRavSNTdxD#NMdEi3ICzOlSHbV7z&b~zAHheBYkI4G59Hg;q5L*LiN8Nw z>TB_zjL_=#vzER=K~;JM8gAh#(rrcdRf;1GS3(Asf8F|QR%|9YHf@V!+Cv6EK^C#V zkN=d-PHV0&^0(%$_>tyR=H!CHRC>7?PM*QoC`fsw*S#)1B?lm*|M(Kb_YxCdP^Xn0 zXwt60|Ct;u{-##{LNFF%Elx_w@dad6IBqX-gT_WCKH&@%X9KdO;%YjaN zOAfi>(Lylmb_Vl88NLksWl$=nGvjf+glh!I#usogX!_b;QUSAfpQ`kCRp}p7>DROI zo2({gH80WpoK>2QPcm4GKg88;Rh%VQ(_6(&4?Ab~HGTq`Yo6zap7`HN4>uiSi)?8Mnzt9Nxl6N?+hr>1C@#6EwgR1&k zRj~)8_Vl3LyV3;<;h9Qz*}dYi{gA4>89q!_bE?wItJCj^f!8n_#*Te;deown7dv*D zXeyV&@$cqD8W#E0RDzXNmS<^VwKuA{c-o_`nHM>MK0-CfddkU?3qcbjts7eGrf8B_ zdi}RRlr6B5frhmVU5utcZaAI*bfnk6-;wDq{p7g42R~a#l!2vKYpAxUG_NMJ{7)pUILZuOJV~CQ1wrR>Ma2?NW{d`86MZ)3{534F ziJqzSb5-eYF$?6r6mqNs4LWyf7cDhSYl@rZIlX*izAbSr64L!|Y>A7D4>YP4e`gxt z99eaG+|ueyuPj|wU0m5lKV;*38CE6X7!t>I<0b#?xE%wxZ2bEZRe6iQ>{+pS8a)iK zT4LLqJ9a()yjg*IzMu6xGdT9wTtzJ44O?21_EA|j{%^7J8tC@YyScRKu-a>A#vOZ! z_ZF$J^l}PNRdxC+gT4aPZr9oE^X^vHrDqzZn@^on?3q(&c4fO50gX-E|h9@brza{&HEW+h)|VZw)t)nK#Cxj6q^!E>&FW+aC?Zp$bSsQ&E=XT$Cc z`QC`#wXUFbaMJvz^^)8w|kFN`sCfWuTGELy#&jhsf(_Jy3HEJ^b|@NwzN9^eYJ;y zc(t>u(r*OX!Ycg}!~-v{aXrKRT+b zH!vpuQa`5B!{*bKjH=fcN+~a9oS1`*8)C)3%OL3Js zZdW)Wb!(YPGzjIV$D;W3&bxb+^NSyWAHF-i4z(|>W~qc2*4+%(iN~9?-z+eW7F^;@ zaA_x6LBp(Ue6YKkosA#vt`=qE{oU2lY^CoKl1w+ezU-WB<+t#Z8wxmsEx6(ZoY&A_MKg<7|Yu(Bf!0kf6(3{EMhuehod@ zjOR?D#UE*KIo>V9)_!H47k^!JxAj`+hMqR>OYs%UMxC>YdQ5LOcVhM`67|8;Z z`x^;k9ty&m^fw?7Bo#NM&5{%M!I2TkP)x2G64khXsn>D7%bYWuS?RrAlV&;I;@?H7 zT#{zhryzn~eGV*OMMh@h%& z8@S$NT$xAwNic3Z1=*&EwU=!Dg9Hy0 zy9+fGGO;86D4lnuX{B;VnfS+qf8|Wqw#@p-s!*1sg|;z$rP6N(MbA=%?!rjL9JZI- z-f7}o#%6%`55v=9@(RZyfL|W59&7OLa;(ob5<(m7Vwp80T2Fq`!RkAK+Fnb6{q0Bp z^|PkP{vPFM7ZR*Pdy$&MoJ+QBr@_)ea->YmOT>iam2Cnr5Osy9tuwC*oi+8xXJ<^H$^CGYVu`nkQ(_}^TPK@(5(pVt>$2@5ooHYM=(we?s#2=1d!4W-Fr#mdnvnwh5%oRp8 zz6S$W5{(l3m^(MoEuv_V)_9Gx$Hj4V%4FT3U+gm`E*iB5mL_aWsxu!de_#423rI7p##u)HyHUc8=#5y#TV>HVMtUniQY&%Xpx}RK`@286@zrpIDh+G5ZW4p-db)k+zYZUFLAU@ zEr}!G7*x|ElB1L4%f#m?o>iY&y9%8Y0J8BNprRhjP~P=K&b2UQc*#Mof{z}PQj;Ga zr3x&*cnVBs;pe((#AYd%^K1dFa@rcR@Uy5F3*SrVUNY&}y@o{ud?rPF76U}k9SPFP z7n3PBX{jsdd^e|!g>~5c^bhp&P3E15l}@CD)W!j%HV$y1<-h=!D1DT$ye^vtxkGek z#7Bq3r5g};&JhpXIPsn#@ya7R*1Qmiq@?B#ti>DD{Jg*l@&361aXLr51gy(LT9`e_ z{q*h~TQNK2b^Hdrk^wK}v#rHfgt&WefV)*xZ+tvh<%?@u|L-wp4y-#)0#w`jVg!gE z8{k|TfrIKY1* z!0#R4!U$0A0GCIA9u6=f0u&3-x%5;3U9~o4k&~sL zg0x({Y~M?4JBOc4{Ivpp(zQ!jkN*c;H+fwLSEdr;;Ob0S1OB|Gxbh>5X=j0hb6JFA zYG!a<#ck*blDj*`3my&G9OKwf*<-+%8YWom?y^va+qJS#TQLcQ`N!rO<~nwjlr*yZ zL&SXv(FdF+!HJ4Xtm1HW@G(tu1N&5pqksp3+fn}EhxCW+g8)JY+PACs5?lSFUNYi!AD3tutQs%Nu+%|?el>rYcU;0L+`j&Neucx@eJXk~! z%QCGVmAPp5LVr(Fq-F^JJd*cx#xc;@l)4OqlS1N|kn&?X(En}LLXi>$D_-J$^lse> zc8fniEJXF4KgTXR#0af#Ka{gTThwFe+rqxa8^C~DS$uqR@t&2M0=Slll( z!IDoZM(`4UqsGU&t2q5;Hr_hOr1clTSObK1d=YG7Jpf2+Dov-)f>zzHVP*Z+$mT|c zZ7o)VW3tQ7 z7gpY<%KWn)blUV16`*50mly+@D9eG%`wvJ0-B)KS@3XM5I{h&tq9S`-34`fG@Kv+h zVn*Q|cNbFL#XVBq5hb-QHJ)m0;r6^9k8er~YFl@uekn^>teLyP&2*>mD)#yBB{YHM z3jZeXTrX*De1nr()_0Lzvcbs)@0kw-HV1X%s@^F4b~w~{2UY7V3O4p+iK*>PKlP)T zc0w_amw4@dwGkU@0=>Fly4e2eO^Zctqrs2N7rlrdC!moB4?$4`=Or!?jnYm+uE|5DxP}qHITV0j6_-@bLD(*xbtSO}b!Gt` z+lMl*=Ar4`I-{(=SiRaUvf7DMwd0#Nt+YS?pqM{hGhcdGDm}23gZpDBFbb<-CHtZ0 zHVfM5C05K<^AbHMGmByzD1x5?*xkz&rx*GQesFu!Z_N&E^IlNMP!D1+8qtX9S(&II zi}*usPa{ep{gQ!!E)=%X{_6B<8ju&hTLY+a6#N)%7+|*SDu_apSU#`-H!h!>?Hl&ziMRJYD>^X0Z;ay!hFOs&Me8`@*qObTXjY*5(Kh9}?h9ia@XM{<~DAyX?aLH-%M={dXy--yhpPm9mP3T{bO*{+f{fp8@^FswE=4 z7N|chFuRc^fHIb&p<>eCgS7}z#K7ZazP(0(i{sINLym(bhh-Wnglvvd@Lf#4q7P{x z)f6LNF%F^^v^IHQok8qI%<_rcftQ$muL?DcZ#Am!#Q?ts2)}%|<0dvI8vKV z5{tMA+y{bOcW)@*9D@^1lTK4DC*;YNClnLVl}T0VLV^qIT8?0YafFLS&3hU`<#Kn# zjw$Lx#ufUC4b)GXVUmfB8z6=ly$*6UCa--O!>`{8`KNIO>)y4k{yic}UMN7Oe!1TV zx!c~+$kIYsQ%K^BdnoftSN4ZmJGY-Oe$b7sll?@OjveUubv=oJ-3*@Sot?YCGD6J_ z9DP_1t2;nZU<`+%5q4cOr=_wP!D$C+dWlqYk$yN$$mKG#o*K3$>z7;23b=@7Xw%|m zwW$KJ`uv|6NH%`3acuFoQPX524J&bfdjidKv5K3RGA(kLb+_r@VpySrIsSnVw%w~X zwql9`r0PMP&;i+?q2UHtMe8Z^_eOzVZJ&LXL7 z{A$n%NQ;5kg;Fh&Sau&aAAvuV@3@=FiTCCVKkg%$F&!*n)r-%C~;Rp00hhCkYTL2(v z_RYqqUL)(A40!9ttkq5%dM^R+FCE=qY#;#}?Z!8)FzBP+{43}Joy)OAaF zbH&f!T)e%e?YTbE>%P)jmwq=JA9M&!&Cajs`^|(!0e?qpB0(qtzdY}9+ zAi|ub^;@T=&X+mmR*v)h+h8k`OL>3p$tb!6Tz7l1ZqEvC^9^#j28b8yLy_B#(~i}V zy0fz*X8Os^6=QM!VV0~ju`{J=2It$P70c@p4g9yBwpl%u4*PVC+Wm8VijH)Mu6Wud zCSKUDKhvRoXXSNh|CI=K)t$jOvvETGzKMfT&)URnTD1`Umem@Z66V}ntY>bt#-B1z=WzcW($(cbPvSn+C`r$4DquP5Jgkd{HkP1{ow z5iY&(8`+8%KY}V)?^0YbeIbcX*TtYv{Q;Cg4c4A_2)XnD(6X4oo+LgL6l1^%t0@`Nk^yW%z1Q}_K zxmLPl8hTBu8l7yz8W&XeyH}l3e94UzMph~PLieimM!wg}#%Cr_OfZJ%$)@2}g?Wc; z+*6?!8*4w#Amt=vWjSk{=U+to%@UQ^#Li9zU(rVK1x zSi6byV@Rie7pM9zsxJlOnmmjGVc_51hDqCIHY@yepg_ttkO#19x8R!uN;n`CkRr*; z6gx>~E2!H$kR+3QuY%j1xz$vNU`Hz8$N1Bl&%DIT>J~Z8F|KGk zV4oX|y{vWF_^}SWhsidKn^4XQyUxp=w=Vvt%snwHkGi`dap;etwgq8RbQI5)A+kT_ z^3M;DP1u~>0-~D7d1%Vaff)QggDXd&`9BB$o9d(|yhK%0t=rat@2&84s4gg=4eZZ_ ziHwd%*`}^qD^F_2ZmLCTM=un4jCQJe-AOwzC+!Ya`~T>EQvVF4QSZM?h65|rKtlL# zvj3m+^eDj12=Ytk<@+UZ&`g-;f4qzUslHv!4T-&COhVT z$}xHCHe*iTz~Gsg5%YP#&B_EnGKYV+;bR+NrN5z4qOG96>0B>yce&UEGmrIpJ0J2I z`iOi;p!*r>mv*{myu&6>>rFR7hxe@!*qbXtf{#=tcCy6;I-`4tU6mm5boHf^QM&Mw z!!@~jiGsgJEqrgLwGiOdLe@0NUZg+%05VU!A#%ccawxR6tBEB2M-9h0X51cxW^xQI<@RT2gB>r{eq5b z@#p*20eRyJLOmCce{b9K9uCC-n$ ztv2fTUj4-w!qHBEyG($xwfjc)@Dk+C>s_rft-j6cJ!Wv_yk7y?;H+#Df5wtbyl@lY zD)3n1jW>mMt^NF1H9_2l(``?n+jvE+w`}FPPQrjA)iaPOjHf#rbV2RGF7} z82$?B^jOI2?A#nm4?Zm<_SN89?ezw!1oU82o@fZba3|IEtd4At4cBG|gXL(ph{&$e z*t3J&fgIP|91NG_dU-O=1>P9S(Mufh=_UuyN}2Ue-$&c$pVjvR^$JiqC`>Rd&*Soy zlLfPT?F(g+Jp*|@XCJ3J{iXlpP1Ki(oy*kj8j{6G+DX(YlIS5PQCTF>O=@&UiPr4x zB;tTh>_(d#zon@}7$j>a%tk{?>1A%sEl7^jdrsjE|!hEbCw>Yze4!-nyt^ zWM$1+u553&Q&%a_uj27NFZS79;sddrg8$@tvFqgnROX5y_B6G+jE3|TjAP*c0xlPu ziT$9-)lRug4V|q~US=2;Rxl=RQ9V)*$+)cj{Q%E*hFXz{HN&FX>%oBZzq>(vTl^}k zSJBr2YEC9TmL(l3b1N(vWws{0Iyfv0{tiw~Sa4vfCjGhGmY2wyQQ0g>vkH-+#v4Z~ z@K%h!7XJgQO)*=&vroYl+vshgKnGw?wlSPa-=g(LKz2_+mWgc{HGbMHK?9BPXg z04RFfxZqLNrlk~T<9!0c?hv+>1>lavv9EdtLhNAZO^cv~S)(x{1%lxJOZ@$qSuA!I?4kIzNvzuhiF0AhNu;iFs2d`o zn@)zxsxDnliO%E6w&qHG?n<4&m9NDMYz5W7$SzNfhG%Ly<2cWwc?$zpka=p+xKqQD6kgX3oK!t108W^kJ%zJq}aioUlV zUlG7p07rw2(eHn!h6B$Xc8F%bNnn{5(RN|tMRDf&H3)(saYMxY!rVy0mZutb7b4vN zI`UYEv`4^?!Er3pNdD%>@41gQKZpnq;a;0En?xivbEkO-XYMlgPh9JCfJ~zSNTvx9D0UK{yk^9Q z1SrQuDDlYwsDA`18U?7fbwmINw|b5N>b81nC?Q_kBm#&Qz(?}6wi&dy19XWnc65NZ zB8<%(;N=Lg_8Q}{I0AekK0P;7KmI7`+b&$_zf8F*TQR33wH6ARVdt9~KXKFBK zW|PSSm}W}*Ov7P=g((a08zQR)ecX;(|`~u^;pmni1i{uaT|D0#J zTHNAWzE6tED?1zVlnm7niZv3cIbf7Fu->{V`ZEUncgF=2uSLXJYqpRZVo2iQQ{gU1`eI zRztkMYVb-Mc4f#l*H&ad5D&K;9V0gA>#xE{oCHSTWDktQJe)Eomf1h>a2`omP` z{V8pA;N)qJ{6b0t%if1lH^q%Nl5mT-d%%;?VGgFJ>hcojngPVMuFs7E|1aU_Fg@G3 zj`Ft@b{zo8;gIMA&L=^Qj~lka(Jpy4x-{uCyNGY?A`16YmnlBF6ByhY*LIq45b*El z^T#zba~#ivqZ@4x%*e^b0%=}0evUY@&akTBb^`a6IOfK+ohKYh!7Q;OLd|2hgRyfi zko8-{(wPMdt7gtW8{5i7Rq0Ku(!;yfq$e@7N;?CU%yL|upls_=)pA4$ybJj4>V9>A zNU9_5`;CzGX!Az)sC(e;eg8f?ReG8@NO#D7pY%B4zX@Si8fDfB6hTmFz5c z24PPYE$$4$_FSPJ&LE70D_vVGfX*O1#JxL%ptCz1VnbM++=(UB{B)&sePc$*4Xevv z_KQUBB?jYB=wSB$B^BpZXX-w7KR?;{-hxGkd-9JaFsp7$p;=&fN+FeQSWb0IW~cYrJ3nD^O2|Gu&?C4=q*fgjo-z@D7xReD0))$ft}PMd@mD#sWgTZ2uBjCZ!`q?-?e>|-C zwTkR<3wOpWH~`W9e3?Dg=OqhmQcV0FsaR5cu%l}RV*Q5)eyMXQBKM;3@hy?TA`N5? zRuMOV;ueJ4h}=Er0qImD)e5__8k>oCu~Y@tX^WE6MCKjc1Mh#KRPXiQiXdw%BD}Fy zePGDp(n<~C6vW{@YSQ1L(Uc?6ta^uM+!r$I2dp=ZYQD;qJ*$X7E3tlEJkpg@xV+36>vTkzNoX-0+Hhv9oWV-sdh=qO zi*3Q}izV9jZ>BB`V~ABG_r_}sW~aQ#J#CIgh6dhE08no#c=bt5T^a|yC80%nLFNfo z==IFJ2=1oKTq80Kvy9CD(Euy_b^JPgAKo*SKB8x;Yehcu-xoM$4!#ZrIBBw!Z=dAd6~ho@p7R} zU)a`Jv66gZPXL3aTMo3n!_&DmJ4?(7-(H)W2(M#BS}kc}SZ5Webzl-d;S&K(|$r#H>Y-YpdV{DM-MDLg$Derj9uM6gP3^tUQOIKlh znAjHZ4tpW}HMSyy+5})=Q0}Mq#_dYDFL(cCTo?6dRh&Ded?z$+E!y8~h5^kE?U&hj z0|hiG3^%f6bpT8}v9U)lD$;BRsH4u+4C0k`vZnBW_a7Wn9_--sRq_Di#Ifdg1Ao2A zG-py?Vi8tjc1oRkOA(DIa`mdQ+FjG>Xdn#+*~t8TvNMoo4CFmCJe$AexR_w8IqhiXVinj-p7n2sDa}3!j-gE~ z4=qFHDMRQTDlo_*#F7e@A~P^A^fH4<{STiF`yXJ?|3BaHZ*2YZNKQxSiH^W0pkdH_=idS=)G!pVYc+2d z4BJlBt|nRB=oM9%o%B~&@G;WR=ItPI2sUwUAKlu-Ss2{f#A*F~susX4m9r%xQzZda zeQ;Wpsd9cWRlfhd<|S>>#XfVFOQBhA&GHi8Tp~T(x|P$z1yciCjEyu%<&>66CMF$z zC5EId6C+!L$|`4Y+0%I!WR^kN%Lhu~>C zoQbJN^I%U&;5G1cF5!=6z*9q$X}xKRYGyB|VRkV88G!kZU#Tsa+79bM%=IB50MnY3 zd+ro9@re=vj>6e&IGx=^S;#=M8Aua*y4mcnssra^1CK76mWQettfv#@+zx2N0<>IT zX>1})7xaxfdQl#Ze@NXpT|HI35JrBVUmOn7<;8+;WRRX-AdOg%{k$84cR`a7Z<|L)|W~RK@Fx3_A%O%gy6vw(Bh2saSC=2ouyIEWCMbae#5!=T6{0 zPT=z|js#u@J2!JbPlW3f+l-nQMt6&7XtVq|=e?lgaV`dSO>@N@wSZ>Z>~&a=BfXvV zw9}oSXeN%oAO;$h;ZuO}dRJI&3(?0ch{f_&;b$sm(PDc}{!2JIZOlZ9DaM5JNoa@H zJDtxhYbo<`W<{ZT&Sb$S^?dHnzewu&qU}JbhUJ3vu{CvMBk-6(HbQ`obWrtKw~!uMO~cmE)@TDp1A+#kb-G`^#?OzV&?2Kg`k6(>QbUC)><0^N+$e5)L8=wEwD#XSGD zg>e77e_eE;I(no2wV#Ue{p-yJSmEEuucf0gSF4RwKh*hjXLhXC0 z_VoNf$W$m~OXVUMi71J%G+g0!aMD;OD|V51daVs3cMGn0QIGkZv#nnFowKM~124X6 zGZ<``=43SR;4yx>iZwXTK^fM(o>ks?ZeGJwY=84X_=Gc`rZaGF6mB@NxoNNUuK`+a z7MQw99w(Ka+nZfvJWVxJE-kv$HZD&VmvmE4O5Hj0W?k*sG~4~mbU!orK??(loG1WJlsP@nT>dHFbCN*kSjZK(Z@igFLhNKTIb6hPDTjf`A!Ms*G@JT z*K>Wecc4!nF3^VJW9)L%U9O7)7D{7G{I=aSEtA%zje&6Ct)c%Q_(zyog~KYJI{u9v1rsy&;| zaX+WJpTQ>AT#3g#=p-?ndWj}6%3Nz0naol!g4P5XH?5S5r`>19-XwOe%hV3{+=YW> ztYN_sT(R~aXN5`wPvH7!Z=aPkX*buTov1O0oSp~AhRJs{>88o*qfaTaaq;RVQnWpp zaYLlwKu*%o`I&( z_iNDig`Pfvh0|OG_t8T(bLgjBZfBm~A5QIjEXhvyBHpbbW13Z#TK`IPfs+l5kK?yd6w#*^Guvcc6g9)w^**d?lDgsa5hu-!{iddb5a zMgJVdXLX@iPo0+&iwO{-Z@U=LmX2uC9MPPJXq_VptC~Mwb1~+18f#yyzT(2BaDRtbS`}zK>h)V`vA8$E(~Bdo3j(YohWs@o{j%s zXW5zFpgn^tROMb5fyK-)O_D-i=B#A0>p&tzK;{QWLqWgTY?0e?{&Yf6Er~RHkecTr zz1WVL^3r-OW8z>j&NQs_KLiurN{EqJ8%C?g+H9I=njm9MtnVZ{(tduIP!?{AHnr|| zI~t4wkl?>g{9C$owi#Bo@)B?@uyj3_YnMhTu}w7V)bvsqzf#AJK^NJzrJt?BdXm>bMP1ZC;sQ7>%x{&ox%mw71n1 z8)@r7y@BQc1hJJ(idX2`8?cG$m49Bu3h-W71SdV9eH~lCGG+k8fdt-RG^|~}uSG?O z7I;~{g8?4*@^+% zCSKyi@fK5fiI>h61pzK;=pZM2Xvl=;hIXW~HXbcVoNKiNXUF}s)v*fzZyn-(st&`{ zzRc1wUg@X&$ldF_j@vxjXohgeVAS=w6X^@HpX4kkgHE1GHLjC?P+73>wm#D5)5GEO zXIGaS=kDDml-eNjV&|K2h7QiwV|pRjX##7=R6*SSEZcrS0^&jKh#AHQ7+LskElz^$ z2tX%6-XEWHX0j~hZ_)NmatvN#DB8w^Us&&&#<^UL2ib-axz<`OzwV%%ldf8Aj?8P{ zt$?E}tJ>%C@uB~6ubr9-k}0HiC7gzsGc&Jk(p=Re^`EKXfCPQvKDEGJUrj1%kb zW&ZnP|7s*j&*NhP+dN4SKzY``Gyv7@QPHx=CIH(uKux_ zGruBxd`a8kUgfKeYYXdQjcdEqzlZs}t?|qIcx;Tq;R-m&N1y4$C|^SZ%sCxjf(Y4o z9pw)e0^~VBE~jtweF$Ex-mEel6Ik&`0J7qp;cM#CCR1{>tNkf6-b4uuO$#l4>sg@| z?xxH&UShojJRFp*KbQls_1q-jVjJ%A{e)X}kJFHXNu2F?@cw&9#O89b_ljN@R%DPj zsL+c&1~)A$|(UHkEU3=kXNos)H7solE=Y;r5f##JZa z&Qs}OGu`&dZYCQpeOZd!N7(UZHyTG?*_Z3Ay+K^r@+Z?ob-I2AiY&w1)6na{49f4K zTw^g^JB9KhSHAC`TsiMG1vAe*xRi8kG*wXhESFm+`~8r{2PyA;6-w)nW+wKy4Oi`! zVeMw!6ilZc9(GTZ8C#|!Y@f~HVJ@S_>$kAcM2XrV3Tos0V;~^UyNM`Mw5M`C-nf}K zd6x`6r+dTz4t;J zRkpnc*>?B#Cx3SdLhiw(9XS7j&_Z>SiSiTZ;`_C3c!1Y#6DY-Jw|GCfdC0`8XGs_F zQZh(bY_{w_5E-X1hvi}j?bqE;k;M?|E9`5lGa*%zF+luMuc?$XBl40ffp{;LSnD+( z?({xXylSZIbmIb5^yEnJ?&oL`@zxnm1WtrMyx|MMwhv>PmNIeUx`mS-~-B{*dA68tr?Cl;RJC-`^rVKJBoVx1cPFlT<+D+t zct=EH(=F@16!&u?;#-HL2L`h_^c2+es+rIDpB0o#)K)$9tc$5&~8mR9I7Cm;fC#3CBojOuPu%9 zie2!cif6f~PLFHG^3S*Cmj0e5AqD4P;c5%=WcF)>I?qZ zaTa&f<$CT>SL+;zsqei})&mc~)I8`PAVXJ2@pD9FC4pe+% zLsh*~?LL>a4diOSm-wTQl!w-_X*Ne(7pmlVN*F~a#DXfUti^w5gi|TcjRmCb$QtIr zmsa7>@{X5f%WnH}Lvv?^#H$Ryadw`#42*EKtw&?&0gTWLn#C)Yjs4)JX?F43mlPsOA zo#prUJYVUSLURqv&0@<|i#~C0*j{yOfRgU!e3pgwGUYQtuIc+peKE88%}h2mg}ZO^U}0Mc zL$kIMhWZv8ijUU@i^RO-OcWIAR|at16w5_llY{sTJBU zWsJOdR{%=Y*HMwdwSKE3+1c-g3c`SM(dX%(!M_?^#uc5;Bi`okU5yFK1146a@ zd`b=KTzVCN{Oo&qP@9-f)pJa6{*tX(m+dZ|cC{c)i+R3?ix!u+ZaJ)k8}itPb=5DZ z{MW3{(Ry%8cW!E)JUn>Rg#M@j*0?rX_xn`lu&#W{7R27E#`Pr^m5*+mJCfb3g7fzn zoEJ4JGT zAE3(BH`i^8sV$dH+z(ax8X#Q|0LTiztM(|}HL{{6idjh@XHjalTSXr{@MDYD!tKN zDw{qmo;C$06~)h2WlrI%!C9|!@gm|y@31cVecn5)Yw@D$!qp7;W*nPFc13nr39kb0 zUXg97?EA@tC2hZF!e~yuu8=f{yXiVi5o23tmjVUoKQ28(j%NWgNZvLSwf1fw?T{AFkoV^(6PUM3zzC z-Ai?;NFUwROLgU^TPl<4(YE8%@6B9}+@Ne{eOBuLMr=tXBV@0N|Hz>*{d)&^L%LXm zdwhv^RF_oY8+ApMeZQ&54BEZ0B0Yb?+mwats%+W8$Ziffz19t;%a7P%_wdE}I=R9u zgTeoRJ9z8g;{S}lt?J1nUbkDO;IAy*2{7!}91(-LN}J$=)QO1OzsjYz*BrJ5n>hX8 zqIdnmw7%Hi;drj-neDxSJ===>lHhhTZ(#3K=gw8>O>)j9b42ihWbcTsslq_;#*0e| zimwe)qTVrGiyv7~{K!jBx0a-yUfCnH*&^3G@0e~IF9_26DKFOjW1<(m<>p{c#CK&T z_nVKCkebxBOEHH#myqypQUUw;!smC!ND--8tJ4^dtLNF@Ihm@w zME{{yDG)GBF=eE zant>-8LysX&8Rod@m;JLy>_u?ER+0ehlKL8I9Ndt94!tu59CK<-+f^6OJiR0a>sFR zIEL##$Abp^#x-Elx?BV9wh&v(f}QdkU>n2aPDpSz%z|;SDsXR0xL7)JDaUEYNhPEl z%c(^DW#2`fQ#SzPn~ixu-i(B`NC+1qC;PN95%pmP(Z`Rk0?n}xi>Vg)u3@XRGGUS< zq}2i>m0N&B0du(iAZXTW_K$$0Whia_&c;`~Z?d&E;hhj>%891)5r|GT4^U{69{gMU z>BqWe@O~Q=hlwr~jibm7Ilcn`kv(TrJZ%q{qV~7MH226^cTs05mzFQKlxvMi(BkhI zve$la)*D1?Z?o(yHMJM4nq=sNyYYR#ysxjMsaAaAIbX-Wr*mT*4U! zWBuX3Cy5d-Sp&kH{(S+3-Z#Pf?Tu+zcD0pN&aSrZP0WH&hY)cDctuMr>J;J)Vr#2W zX5Z3A?lfRH7p=d|%7K(E!S+b3%&{hA<7XI!HVm`zAzY)*Z2U+A>TF2QTu-(x8Jy=9 z>=iNZGqUNPZ9os)*D7$-0bXK>8};{nYdnME7bunmdWnmVr2*#M^bI<%?Ddr@QL+yS z_{*2i!^y{)kT%^CQ?0_pKS0(ykgaWIm2! z5@8R!%C)Wgz(`K7wspY8uC%uG>fnlqllQ~nIQ<)^D6UCtrn*e^=*V7FUQ8wJeCA+H zhP>aL;mp4O3JKNXzi^D1lTG|D7O3XLLJ%jPD3Gv&%5x|y& zu)4%p&Bv^NJRV{AP90bQ>1ZqC>!gV(u(gpBcn3#sv;J!gj=rnvj)U~~sz8|%FLs2< z5uAnnjqy=$+IKuN@m&!?7GnF@1x`S-nC&5J+rq4D)dgB_p1xw(2 z=kGcV-3^w-NE`=w(P`)+5NOK1hLNwKi@|jo8X;@S#Q*VizJ^XUR?^U$8ZA6`{f9_H zgRD#%It8}>T|;Xj4K!3{as(Rsu_m~hM!TeVEyIIQ?fZpG=Y!p$8DN36dy~QHh4_#9oc0><@ zci6~GtQ%~)IV_*UdSE#Y4@Df_HF!r3a~y|V^Eu3K$6-Rm;UU8on;;Z3q7v;*bIqY88#SQ3#O_u6Wa6jYE>mGu?J07RD>E+!@If8S@&vVZ`_>&-G?<47(YVb(;^^ASO48C4Fo!o4oC<4SQ6J zE5YTfDGA&XoHnM>YGPH54RW6UUM`oX2dSD}$-!aCYf;IaR+6lAZ8#KhaZ-;`Y=bQ^ z_b6)88FjfUc>koDEn?8jI+5y0TJ~Tj%YCb**HoikW@tJGu!ERdd;#u{v?9bMob~6N z$J`F9o{rT=?Tc-0>kB_~mSuZzlt4K5l82w=DXU~;{rgq zoNQc0PJ6v+vXYnjN>hQgynqKl^h2?hY<$-15}?JOc7!$eT)VBgzNK;|$|FaEEm4pu znxUUGiJ44M)7y4A8)aVLs8OMolG?O#x(L>AJPu3p=6Zns3&^0~EA)b4FZQL}x_4mb z>U4kp&pHOgM7zQev@pDst!NR&p4;rg;DtPc+lO&^Nw+@1clNx}2}fJE_%)wfbhX9d z*0VZw8GrOONzeNCaQ)Knu?B-|>E+$2! zSd$SJcAwJpdQ$#7|Mw<^qM_0X2(58>56N>_g2*Osk0rOnQL2ZtjXyN5->Lpcu{!Sy zCG#gD0|#Vi#c!{6Cbpn5XiZ|kk=As)zFzSbU$jgGJm}-TLzgXk3P9t>>l@eaUf%~U zy=l$K%ok$bALd7;yX`$UB*(WILOBt^W>G%8e(0;akk=r=XtnhVkE@uqf zHQyti`{~{8c#iYf0dC@dzzz9smBamch9ABfRo)&cvXR`|>eILA1>yAm-ypIFQsjM- z-^&N^y#>Yw?$ZkxqUe!>q(^%R=zslYMr<1!Vf{P9sX6C4cZCJRgy#nyl;`vk51I48 z_$@r|WHpfdxWy;eDVvXPW3nZ7m-%kwy`^SyiWd;f675R);ep|u_ukUgaLaw)B;{oU z2p@$~RsOMu8HwIq>YlR+Ur@S}32$rUk>D`vU?vED*by=qJ!c~utP;6KQt-Wz#H%*k zqCL`B^(%&;fy~I}iJaoVWen$w@3)bfp_MR|@16oyFXd@~(9j(SLJtJDXdlD8#ej zj6ui7TV?JE)b2dd)$#rDeE$M&F4l-|1xIZ={ZtWxiq>OVwXM5FII$PZ*7D+?hdKft z>;Q;A13+x=%(1->P;KjTIl!fksMs4?9DU8L===?UVN7$jN-UJ|NqQ zgYm!nEzm=i@UiS3X3625hM8LRH_Zm0UYp|T+toE<^v%|Y=UDItwckDIh3OKh7w(f5c%$0Pn%(LJ}_h#THiDi89|6_Q=g zFb%ujzoWmT()y-&8i_Tu7`xd_xMq4)x;iGUjztPWnuniPX~PsvUtZD0AXRx66+t|x zNR$4p6w6VNr;ya{-6SBM(hkvK?C3DGo&jS}M-2Q(ACo~Zk~kW^LE3jvSy029{j3I( z?V|6#0X@s7&dHducvvqg^S|iF+qDiKr+B`u7b4zZ4Cd;+W7+uITW@1UVvi+Jw? z;I>nFoW1Z&@`Cr(MgI4PsDjdq zte&|NNU^M|oeOPv@Yf}WiQA<+`#Z({PPe~0IA;fUC+9N3xqvq~VafLSPt`gK=)RJ> z%^(DKeLmA19LvLpB@46qbNpIVmB={X_xXD^3SWGdAD2+_694B0=+_jnfaykSqN3qY z*_^^Eu*GjMu38OFGLoVKhwG9kSjQCDn#sTB&%eh75mgb*VUA{%BnaPP5FpRF+ad29 zA#dxDS8N1%uYmIxeN~yHX|(}V^zw$t_~CCfZ`!f`XB^sd4o$<*OI(V_%Qf)kh~;lE z0~1cKrgmp`Fls$j(-*42@{_g&!(z9^9~F@ecU4T!lSIqmY<%=$*Xnj>2U8xKA^nlji0bW4=R7fBDmmzKBbvei5 zY%rx})b^Qqui)Xz*^YoUKw_@y&Q!V=!q7BwZpL5JE-E44#_Ve|al7q|4UCutn)?KF zVu&$^Bsd!-=Rqo!P3J1Fwny=_8xacI+Q-JHwq16EAk3>}%mbIsgaajMBSd7e?pqL!MK? zrGnPZouKC2mywQYrs_%Hn%P+GHLmtRx|1B04CcV7+M@w#N9;QrL%h(etbfQN*qRBb z<2mXz2U(+nf-bp&cPMbJ$>RAQD@1X;vWJ6A5r6Bj58Aip32*~--E5pWAUcYuF>!gH z(8{ef7q_eSjvUqKpxWGC-wX=1*N39952wtU^eTNWM*ALVdHjez~VnJjAi-bT% z&~^VKhQsc;HR&G8oWkxjxVk^D>tnNFLwS3BHG(R7mwl13@EoiV?d5(n8Be~U?elF= zz3Ou`h;9{RZ!9||x{Y;Xj%k<9?bi|Tm0Wmq5|1hT`;LI+9RV+P1T5(Yc%eO@bMheo z{+I*Ra1JM=xRAWzg6KM-7q0LR5`vffi@W6&y5k&Rd;~bz0cs+^Q4Vlm1USS24u}AI zI>6=;V0!^NmzD#_UqKZDHYGMD?_hb7tuI29Yq+Xyef0n+GRePa)sjg}#(Vm^g5CD6 z@blMLXQIEy=BW`hRN1IxzZ(h)o;;)r6xT3vG)yyMW{<4tZEndES^PYCtq>*#2xA?> z6p*e5;f>osSlk%|l8(mVC_`|Is&wT{aGLG_=XEi0Ps+9UdpI2Tc2rJZWReyC2hMMV zvw6U$v*BooM{+t@@o&mYRsN|tY|el0Z$@6NgJG0E5YjUrn;i43TuDfLd$Qt@u$+pl z{GV2?fls`c+zbn6{6ElJN*p%hv94h8+|x4-cM`ZD?XJKp9V_LB<=v$en(Jq1>Dh_g zG@#5MGlRuJ?nChK8NRmi-$ftx_H>q(Z$C-%lGYTR<{*V z6x*93ZuLoWh_8hhD0k9Yc;Ykh2#rC2O%VWZcP2=Y4uj~G-5Q;RpG9}|rMSi$fK@I< zw?}ao>eju!RdIkOqI0DoFR`N`uq6SU?|<&+T7};~Ky}84yezv>W?wLV_-JS4ATHl{@oiovc z#^t$YM~NLJG_SR@37+SE#0-V3*jK;U4d+z9ds3}`hdL^$Lm89GWQ)W}Sn~>QDfSv?O{Rq9BNhQh|=vF*1F{2zJ+vqqY8JbDoJSf|bdTyJ%MO)Arqun)}L&}z?g4xh~t)Kmxwk~ zG~`7?au~RV>a?wDG5kG^kt~}g`rqv%LY|J{8w#cGE>j&V*s3Ju+p8;x@}=p@DbDcd zxZrpkU}}S2J(P(pG&-g=-VbkPoVZ=y-WxWZ`tJXa*qGH`?kb}bn0R8d9o6+v-Rr2v z8`ZU%yaI|7ppduW**++4brdt{kSVexKzBRPEQbA}n)FZb+RE`dgc%XLrlOh|6?2&0 zLLp)%L=YwZxAv-lJGH$_NH5y@$y z(-e_=z{k2d{(-3~aRoovLN0xD?J}Hg2y$?;-`fg7W#S}b#Jq+8f201nLnQri_@{ZwL{kqd9 zZEEFhF%!q}%QB=&FNPnt7BIWRiEM{yM(yxK5yxsyh@KO*BZ^6h;`D}{%s}B5qX+qI zJqd-i_}2uNxQ1tV9Pf4SCQzjYbJJy zIZz$;8>eLX46B8mN@ZA7C1`kGMJc+}BDgm_gq2>8lk3R1xN8^w@Tnl5u6HAr+1&4DttEkzBXK| z?ET=0j0R8oX+7%~|B{(nGr|i!^*ax&-qulVr-uY|WFOjbDn!}%GoUM0sXsI%Zb{?Cn{ z=zWYm8AeGcr0~Xhy?F$o_v4#df35I;OI^IOv5$LZEv#Uraj_FP+Fiwmefy|$A8g{v zF?kn4v07)Yg7er>HgkWra+pacO z&QJuytI4k@852ZmSfMsu0O7JZmGYb#;w3**fAPNl-^r5V+fBznyk31wX#97JzttY9 ziC1!1;6|4D8=~XtFw49Pi1_5`sdTWmAR_B5*}UY4dFK z2DIJcx0QuW8)mh|mN1EiO?&_8uxSG~+BCd;167T(Opn9$TPBxY2&dUTTPC z(wqI0f*N(Id)&<6*)%V99lqDAxn_E|&M7Z;6*p)P`{>5`jW1B!*$+Flc|{FY7Jg%< z*U?tsQfA6>kIpN$?pr~Q`;P#59^5Zh-F(-4cd^$ChPy%yQAK+qdo_xe{Q4m&RH+W< z#>_I6wr~k`cYvIPv~{PB({#)^Q`Ipvorq{Atio{`o-ChidCKIneI(5PWA9DiW4@xk z@jF>m?OW{22(c$72$5Q{2!aq2OKma9Ok^sViJ1vP?X)yid#l{LW~eG z9_ec|(EJd+h+`m#k8^rCgqN~gk(A3NG<-d*pLMB?q2BA%ZxaD5RSxM7fgOQ0507eUF$^4yF7= z!$i;z8V&`k?B8%WE`fMmkzarw>6-tBV1sJcd}QK;2acy=;ZGL&%)Nhcj=;i5V0kis z;!{Kqf~JWKOF_scvd6RHCviIhesgn8s{`njzDUN6;8JcCd*pK_a>xn(g#El$8;cb+ zkCIv{c&#q#z;}>AE%jVbY2MsgWf1Vrm1>H69^9<@O0(DE54?HlUMFH*4)&xG%I5sZ z58b>;$S`>KB2~&Y=TPF(tkN5xy@`Is!UsXKkUB9xLzU6NE#JM6S#*B5AX@fk8&{!E zibBWoLf!oW71xH-AZPm?B;J4o$YO5l6>a;3SS0(<2AkuNGZ39Gb8dCzoFQ_yeQ3_J zP&YE?v#y*yMb0`8&6(h)HrAE1lE@iYR8AKg@3^Tgj+}yxe#i;ttM=D%wI7MmH(y|} z3!>oa8wlCW4Pvf<0p`(1i`|8Si_AM!_ijuk52Ec!mBaLi&rx?2Imp+n&k4Y+NGcr~?y|Da-92-u zHZ_Da&@|G-r1rTRaRhKK!GT-e=U1Z6T2B+J@jIEdTm@i-E9j|}@Ld}nx>a`Yky~BM zHrv~kTyXlE)HVDNK@Me<4cphXY#b&D5fk)8UC@=?(wCBx;<#E=6}ezRqHeVxNQy*~ zFNrwC$&dJ_ri+NOjrI~9n^(|^+u(gv<(@)BU>Ps$h$Q0AI%3V|TTn6tlt>~zs;P*W z6HHW=*7@+T$4qPu5gGLHGthb%$+*|RyI>-+3lVF~8(I3&A#?$LH=YNjD~ZCyLJxXa z{JyquhlSHY{?-ZfllM&8duI^y9!#?MY0#(E5xI0G4#!6GLw1o|=SS2++tBX>#b@J! zYSV7ntkP{L$gg#GEwLSy<8zGo>IEgjcSGp5#bsbrQ@$W!96h0>RC*}{=3-e5# z(X7(1VeboR+Hnf;5u1ox#9nS;(Ckp2RfzXQqV$wt{&dPkd#~g>iqDB@(RmB2{2p|k zm9PA`>2LD5>1O~^n`!doIZyIBle$bRkvc+(7UQ;I#AKwyml#kU4N17at7%}7GYEcs zLU$T_&TRD*&c7j@+{MhGR^``f0|D#qk|+L?9FVi}HWGLwtdQ@H-;1l+US@ptBq!SNUBX8gdk1!5zLqcfj?^H|XA# zuS2dD@9Mh6wh7jm-(t(CCh`us8j+xGvDsw0Ay@ay7*>YF?*kVcK`Nq`6bu}`nfthO z!NKmRYE^5KTOp4~`3fk9lyApGNvus)mI*zDjJ^{$N~EXXU4hWtTur^nXGn*uN>PtE z3ylKKaLMARcYy*+A$y0AUaEF{|Ccn+tRNHjG9OSe`2Gyf3jyXCb6sV=>0Ktol-%Sz zQ9`U|3G{oTs9l!OQk1{}FdDSD<{`aTPgW6p^=;)GE+r90a0RU_;cn&k$RPCVA2obh zc?c-c%1f&}TKOf?p_LOp=Hen+d6?%_t(@&DbBA}CvX%2i3FlzUWy8>4UL_>DN}%5b z_29iMVXlBmp41VkwRrMTqCXL*ttRfzGSbCG~+9jv~g_i+9jDFyo* z5L5UUfJigp{yR^KZg<~^^y%x%L2CR3PUb@FappG~0MAQN2E5O3f4?S>-o19j8~Or@ zc?100mjSIJam^BCA)Y| z@*jnf5_-Y4+@=(#x7ntTx`>bd2@5b0h46JUcn+9^b0>=oG2ecGAodVP*D|>xw5+TM7!kuK+sf^qAag#m@!MX6#*fgm6uG+$s$_~KqEW3U&862C0QfTZ?TFf_XOH&BxI{cPYDOfnApU9>YS@fGlPtzdIkLbhc zT7g7VQvvNC*U0Ev*1A8VY+B$D6p>MOaG;ro&+fTaoGNI}-x~8Ct%2-Z38nE8$|V+n zxKfM>kxxX0WmhHru$FcH?J+u>CibC2VqgZVvPl@~ZT!_eukg#(3-c^;V!MD!v zUBaL{%LK95PY(GFaW2BAKv`d^H)zqTy#0Zh2+KCY<~Dfe>(cKf$Sru&C*V#08vdZ* zxAI&<@Ie7Mhy{D`Ce=Nuxr^S~%x9Y;iC-P2=KPH@`3wk>BlbY}1Du(ejIww;;N*&i z6;$USI&=Cn>00t+f1;*gy&WH{#P{E*QTgqw@S|8#cBaHzW{J6VDf4=z~S{LkuLnOEI6E z!7VN=io>W<`90{9psuYHOebl7UmcIZ{3(7CKsYu=Z9;4hs3^r1L*g9H3wcE1_p*|4 zI3iJs=)iYQD-*kDqK|FsZV+N8) z&YUHd38514)&J1Jyn31w2oc~BbbR1hYOq=t#qaW|8ybPPV7bAR!b@@AGLE37xXaus z&@ZB;H^Pz_)rf*o2F19x!b|+p9&`YMFQxFxb2pYP7Z-^^jxNB(Ha=6KsU8hEN{>!* zo!=3?Vg)ntyMU8`5ZkIaH@6qdh@y$mtJxry>_4X&#b9bdE6x;PSAha7JX3(xXbP4h z;Pgoa3U)qh1#dtM9hnqAH&6j}K(=rkyX>^hU1!Q_0 zcD(}Eydl`-`>CzKn}UxdxmIq#Ah}o%L~_A~Nhk#3J1$ysr3a2nfs>d+j?)X!9!O&M zO2iu4S|1PgU_+g58V;p8!2yWVAVj^T=vo?;KtHL8PilevztRWzd!iYDwO>bKJ1g)Q z=|V2YQ!8*ezNh5apEn2RKT1)v_LCf=Yxyxo`6>RZuaf}79lVGL7(2j6PQ}ly($5U{ zitLf!B|723o*w!9*M>*K)MAXlR=k0%S%!E-|d9&#!2H}8+2*P)h*ZNAE`+-jSTi_^Gh?OE*E z*QDRzs!(K!EHbCujJ*wEqg639cR9~bJCowq;-27A^KHS*k`TlE3FtpEzL?H=Ez-32Tpk}_96j+nzd$=7r!Oh)&&W@ZbN8`xbj;wpqZAU(aPXJ<9 zA{kfq%8oRn;WjHUk=ufDNa0@=01rDdl`_JPr1HXwvLhB=bgeW5yl7Gc-WmXq|EL|Q z#H%mDj?5>v7iCA*EFyv*Zb!nF@-+YDcBBEA`A|C&0%D;h8gQEbYwgI9SN@$HNke+@ zv9Jf^VMn$Kn@x6P1d{(7JK|ra2s=`l>J)aQBBI_>^iVruBC(wnI2{U8*pa77aXEI` zk)1D7a}E}~QjEf)?8q{t;C5sYCH*&cq_`C5 z{jcoE=|JKIKQ8jwLS+;l+m6h4WoaZV$3t@#wj+ah{=#-722?$c9jRET{zu!9E7iw}O+GPBQBX-u!&U)GK&$t#5ca^E8olSB@|&6Dd@K4&F;71Z z5&Aw+CuFh7EM4;h2Lp_>vc?v!8dE3GtT3BL!5fxGvDWB(xyBq7OVn; zkOs=M@E)m+yI1_==%3uw@vm$>2&&05&^gl+_>{;-aH4=pgH+v{OVwco3(6oc9-8Nq z0DpYfG@=Bk5u7G9%=e<)lZ{4&d}6-a@)_g-TI)>|Ni2{%KTBP&e3M|Ndc}58e#BZX zLi>=*BH?@^Dco6ayf3D!qxA}85f3D%rb^Q4*e{ST@_xN)Qe{SW^?fm%x zf9~SXkN9&Bf9~T?`q1`+kWcvY5Pu%w&!hbL8GoMO&y)Olia)>N&olh_4S$~F&kOu{ zkv}i-=MVgOnLi8o^C$kK?~y+Uxz3+A`STWk{?4Db`SUJ+-s8`|`SU)1GIZO65I_D5 z;Ll?GS)4yh@MkIhEW@AW__G3kR^rdfc%qYL)%x-!XshH0AqNo7$t2*_%a{RXR-@QC zinXBFNs4u(*ddCIpx8$gn@+JU6nl$eYbdslVssue^LvWDOtB{*dRJeh7?!Nr)hQH< zp%_i`GY3-4O0h8%qc5jt&Z5{rimj#?o$JipPqEGvJ43N{6uU#Q78I+CaeB28#d=Vz zHpQG2t3+d{G1IDwq`CB=TG*iDLEqF8At)2nAF)|6tOQ7o2XA5&}) z#Xg{zg<=~iHi=?yQ|uLry-u+m6q`q};}n}gv0o@Qfnxr!Pgk83t46VBDAtH#^!v=2 zttr-zVx1}0gJQ`Pi=~*6V)P5wnUg6NMzIwXt531b6su0LeH1H4vEvjgMzISN`x}c^ znb#aERzR_`@D;9JpjcgsouXK4iXEZY0E+FQn1fnOH~VsBB5{Gh9g z5F2GNkM3kK^{^RD%w#e3F{hg?qs)osY@0o=ztL{BScfx5rqOOTC3ou19A;-Hb6W23 zC}y9%ZhOu7^8@hYZ2YV2cnScY4RKt^R6t)?t< zuN3>H5mk7vggReoo? zG24fV!UYzcsE>KL#o;vD`#Q|_o;D|M8;L-&+3AGP6qW>)p|j222jc29d**VG40SS( zvZR|+Y$ME8FRn&`rp`u7R*LP>WyIUBB2_Y5j-Ec`4h9!!AMAFfm=Tw(SPF&(opn8(LWPQ_D$E!JE!>1S>? zElzI#Q}S|r=uR&pC1j48!G)LvfzTEDnh5m^@~2bO#N+GUBMZD7?a{ zN;BJC0I(?oD#ejvBN4Zy+dvw)1RZPw%uSNr>@-@eKxLVY4l^_6k~oOCK*f>g#m3sK zW|nDmWHJl_vt2aOWOk(6E!_EFCUV?5c>u!F$Baou3a33c-N{lV$KbjpQw>~S<~X5r zScWCb96tuu*%9O9Ld|U4>BD#;W6{aN?UvD=*WC=Yk_J_kWd=?)+-gA|I5T_ansd!j zITowcY>G46rG+xW^iw}r`b8$W*-4Mq|OF?cD%*r!EZEMi9li{ z*%5RcdCnk@J35INmRZ!3F-};E94Is7P*s>&j?LjrmPu9Hr8P2}JUt95u&YKXQ4CGa z<(=e7yXZgSuA5O&AU21zVKS$mtFi>J0YzuJ7=Q+t?VL1E3VM<=C`2VH7ixoh7GSrK z2M_<*-MPH+K0SUd@C8Vi_Dpd2BEVFgE zGn3hk7KfQ!)NCUp*a#Dv?&{xI-vTgyB99dVKG!O17L`%^$Qg)&UdhOHVBRQd>}x<+X@TYLgflZX&k3a>2#mtu&CMn~U?y-Mnj|^;I%ph%)Df@+wwyec zMmbz`b4sW%lJF>pWh|7I-3*4qikeNNE`4 z_DGp!v=2AiQ_!EuR4Z>0jbdICf8&ErLO6MZ7KuG*Bw&&!$*G>mRB9XJPhMOqrx=vN zX@U;T%Hne0w{JoxHr#CGyeouIx~va8Nn<+L*(+TLC6s2b3@N9h(MBb*@U38zAQ1xK z=@0n~K~k}!U>;Iz(EZ$mm>mfjJmQ+JMuB{YT*$sW{u6oV3w$)RISq+mN) zhFhG-+?l-Rq7uYd9U#k{0(^5<>Y0Ieq6JoBtQiR)r^1dvfj~JaEu1U|Ju{k2Y7~K} zP8J84lqYQ(kr|t7$ug;T5+_lzYNcFn;Y>%%P&c{-5eIxb@(w(m18|BgCDNG8V|rzX zY6V9z;Y_j77{@}5;)o&(JSL~Yq2AGOuCKgQZKBa?ggla|Am=R2Zb>JGTZYrPBwe1A z1)m^_Wq6>x4WxVU!W~eYg(HP=M5{w)8U?^`xaEQdHZ>E$eKtJDgI&nR$#E(=>3@EtOPgjEO|jLW)B!CqQ4ronomz`BTxo zQVLnB7h_yDp(r|7s?oig_Arbxlc0!VC_|isn1ChULWi zkS!M-Wf${1N=)!{V|u1J$%cixJe7t|o6z4;4C>LCWp;v2r91Z+RCczQvrG;!g_f~ErX-rB$_lXPMs6JZs5~qWWvgK$>lI5p%;ANDvtowe z_9GXE)6JVjv%v(D#g;AX6mel7TrZLlI|iUzs<@-7TpKkAz%b%xCySlW6!M}h)=su; z8bjcf(IL$yLo#g-uQ1Xz-z0_`O>P>5>2r)=l7n$%r!X2wG~sBw9dO~Y*=$*&wUAXF zA)BlmYB|Ui1O^d~05v}r*+?p~ZKKR05n9M|2^glt0_^ap8Y&;N6vzQL6E5aCMhLd$ zz^N@fVX!#djAQArHBPe&5JPheEGA;ri@eBe40;c=1-9JigzK4>OJ-e807u&`PAu$E zMx)b~4P}x=D;jPFQS&72k`=BMY8uY&0&N+zCL`xHvUKlap!2YP;)GqJ>Lj~FCIZMj zeEB;zFJ8JEkXIss&%vcD<|Y8z+=MwwUkIKYw3v?OVR0O@4DuexDWTj_Jh|VkdL|8h zrs8Ocw6Cgf0pXph-m@*k$@d{?>Y40WAGunzZZC?8%}eA7L3L3{O-ks|Uf#D9k{98Y zSNId2iBie!q*UC^@Jv?pV1sfLV^E2agEv~4tt9vk=z@5-hB?xI&tp_-fnr9)!`<|D

?K*jz{Iv}ArnQnXytk=iAox*9(JG#%RiwM{ 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

mE-yv&KNvgC^{THeD7 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 Cmgf5a literal 0 HcmV?d00001 diff --git a/FirebaseCore/CHANGELOG.md b/FirebaseCore/CHANGELOG.md index 06e9a330cbe9..a21a8a304006 100644 --- a/FirebaseCore/CHANGELOG.md +++ b/FirebaseCore/CHANGELOG.md @@ -1,7 +1,7 @@ # Unreleased [changed] Directory structure reorganization without functional changes. -# v6.4.0 -- M61 +# v6.5.0 -- M61 - [added] Updated the binary distributions to include arm64e slices. See https://developer.apple.com/documentation/security/preparing_your_app_to_work_with_pointer_authentication. Support for the open source libraries is now included in the zip and Carthage diff --git a/FirebaseCrashlytics.podspec b/FirebaseCrashlytics.podspec new file mode 100644 index 000000000000..c7f0c7922715 --- /dev/null +++ b/FirebaseCrashlytics.podspec @@ -0,0 +1,82 @@ +Pod::Spec.new do |s| + s.name = 'FirebaseCrashlytics' + s.version = '4.0.0-beta.1' + s.summary = 'Best and lightest-weight crash reporting for mobile, desktop and tvOS.' + s.description = 'Firebase Crashlytics helps you track, prioritize, and fix stability issues that erode app quality.' + s.homepage = 'https://firebase.google.com/' + s.license = { :type => 'Apache', :file => 'LICENSE' } + s.authors = 'Google, Inc.' + s.source = { + :git => 'https://github.com/FirebasePrivate/firebase-ios-sdk.git', + :tag => 'Crashlytics-' + s.version.to_s + } + + s.ios.deployment_target = '8.0' + s.osx.deployment_target = '10.11' + s.tvos.deployment_target = '10.0' + + s.cocoapods_version = '>= 1.4.0' + s.static_framework = true + s.prefix_header_file = false + + s.source_files = 'Crashlytics/Crashlytics/**/*.{c,h,m,mm}', + 'Crashlytics/Shared/**/*.{c,h,m,mm}', + 'Crashlytics/third_party/**/*.{c,h,m,mm}' + + s.public_header_files = [ + 'Crashlytics/Crashlytics/Public/*.h' + ] + + s.preserve_paths = [ + 'Crashlytics/README.md', + 'run', + 'upload-symbols', + ] + + # Ensure the run script and upload-symbols are callable via + # ${PODS_ROOT}/FirebaseCrashlytics/ + s.prepare_command = <<-PREPARE_COMMAND_END + mv ./Crashlytics/run ./run + mv ./Crashlytics/upload-symbols ./upload-symbols + PREPARE_COMMAND_END + + s.dependency 'FirebaseCore', '~> 6.3', '>= 6.3.2' + s.dependency 'FirebaseInstanceID', '~> 4.1' + s.dependency 'FirebaseAnalyticsInterop', '~> 1.2' + s.dependency 'PromisesObjC', '~> 1.2' + + s.libraries = 'c++', 'z' + s.frameworks = 'Security', 'SystemConfiguration' + + s.ios.pod_target_xcconfig = { + 'GCC_C_LANGUAGE_STANDARD' => 'c99', + 'GCC_PREPROCESSOR_DEFINITIONS' => + 'DISPLAY_VERSION=' + s.version.to_s + ' ' + + 'CLS_SDK_NAME="Crashlytics iOS SDK" ', + 'OTHER_LD_FLAGS' => '$(inherited) -sectcreate __TEXT __info_plist' + } + + s.osx.pod_target_xcconfig = { + 'GCC_C_LANGUAGE_STANDARD' => 'c99', + 'GCC_PREPROCESSOR_DEFINITIONS' => + 'DISPLAY_VERSION=' + s.version.to_s + ' ' + + 'CLS_SDK_NAME="Crashlytics Mac SDK" ', + 'OTHER_LD_FLAGS' => '$(inherited) -sectcreate __TEXT __info_plist' + } + + s.tvos.pod_target_xcconfig = { + 'GCC_C_LANGUAGE_STANDARD' => 'c99', + 'GCC_PREPROCESSOR_DEFINITIONS' => + 'DISPLAY_VERSION=' + s.version.to_s + ' ' + + 'CLS_SDK_NAME="Crashlytics tvOS SDK" ', + 'OTHER_LD_FLAGS' => '$(inherited) -sectcreate __TEXT __info_plist' + } + + s.test_spec 'unit' do |unit_tests| + unit_tests.source_files = 'Crashlytics/UnitTests/*.[mh]', + 'Crashlytics/UnitTests/*/*.[mh]' + unit_tests.resources = 'Crashlytics/UnitTests/Data/*', + 'Crashlytics/UnitTests/*.clsrecord', + 'Crashlytics/UnitTests/FIRCLSMachO/data/*' + end +end diff --git a/ZipBuilder/Sources/ZipBuilder/FirebasePods.swift b/ZipBuilder/Sources/ZipBuilder/FirebasePods.swift index 08505579faf9..700e326f524d 100644 --- a/ZipBuilder/Sources/ZipBuilder/FirebasePods.swift +++ b/ZipBuilder/Sources/ZipBuilder/FirebasePods.swift @@ -24,6 +24,7 @@ enum FirebasePods: String, CaseIterable { case analytics = "FirebaseAnalytics" case auth = "FirebaseAuth" case core = "FirebaseCore" + case crashlytics = "FirebaseCrashlytics" case database = "FirebaseDatabase" case dynamicLinks = "FirebaseDynamicLinks" case firebase = "Firebase" diff --git a/ZipBuilder/Sources/ZipBuilder/ZipBuilder.swift b/ZipBuilder/Sources/ZipBuilder/ZipBuilder.swift index 8b32a0cc8518..524ab07421e4 100644 --- a/ZipBuilder/Sources/ZipBuilder/ZipBuilder.swift +++ b/ZipBuilder/Sources/ZipBuilder/ZipBuilder.swift @@ -285,6 +285,23 @@ struct ZipBuilder { // Update the README. readmeDeps += dependencyString(for: pod.key, in: productDir, frameworks: podFrameworks) + + // Special case for Crashlytics: + // Copy additional tools to avoid users from downloading another artifact to upload symbols. + let crashlyticsPodName = FirebasePods.crashlytics.rawValue + if pod.key == crashlyticsPodName { + + for file in ["upload-symbols", "run"] { + let source = pod.value.installedLocation.appendingPathComponent(file) + let target = zipDir.appendingPathComponent(crashlyticsPodName).appendingPathComponent(file) + + do { + try FileManager.default.copyItem(at: source, to: target) + } catch { + fatalError("Error copying Crashlytics tools from \(source) to \(target): \(error)") + } + } + } } catch { fatalError("Could not copy frameworks from \(pod) into the zip file: \(error)") }

5f2GkC<`bv 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 pAlJxv9RN|!?qaxr11tG^vHJTWrXJ>Qj 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%0D|OKW)1_C8JD*lL}p_lT#6^f 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 literal 0 HcmV?d00001 diff --git a/Crashlytics/UnitTests/FIRCLSMachO/data/x86_64-executable b/Crashlytics/UnitTests/FIRCLSMachO/data/x86_64-executable new file mode 100755 index 0000000000000000000000000000000000000000..993f396b27581b09cf7c7797bbd944c9570b88b9 GIT binary patch literal 238568 zcmeFa3v^Y*6*nG`tFd}bP_M-Ynp&*XRz=%mu^LU3=#3^7TccPXpon5cMTCkEG!bHR zdwMIjjio9YwOU%Wjn&uyjRr&$t*!AoN|wT1Nb}l)E`ZqeD<{2)6Y5O>}dn=Eu3fgPXD@L zU_AGihZ`A_Cr>?p_N+6{Il}=J^7sC&hHs0c0WhBX8;DQ*O`UPd`R9|tLVUweQDUe= z+w;eG?r#Wutncg#XAZ3Iv41gqhnE@_#&drI@l8GVobzLaDdexE%kYhJXc%{_=AwZO^`z`Tq=dveH zo;mB>Gr-s6AD=P{-EAm*V;y`E@NI~%$&=5SG5P!p&p!3s8Ixzuo;3j9SjV4JlOo1* z@v*<|5z<09dGZ^d{CO%=MKi-B!`b<6Mu{s;Ij<(zpL+=XP{GC5-#;j?l57Ix%jvTK3*5eptJQp9v$idq8?DNkU9N*d> z7`{$dDaP~0$=u4~+0|F=L5zj%U=Py5TC}4!SHoDd|@LnUVtwoCDe|; z^XFjL9TeZO#$UT*q!aOtz<1gyvrlpO^X=c<;|$+S*B*=);LEFWsDH42gW?M&8@`E7 z=@{QIzKFF!@l~8^__`eu#y8x)Q%}zw*b3XX_;kZp;T$o>H_TtuH3sEx;(1Pf&i*mJ zVg61%KlaiF+Lz8*hHq4k)N}cBWTIU7LFb-*_POVT35E6Tb@<9c0E8RD7yHRI)!#d^ zYC`oft{}W>(H`eGK%Bqes}`r7&*g2`qN4h71OVK0bn5Ai!;31mWP<&cTs6E1K4(#D z^YEfc7{rK;b)K?#c+r)J7Z-0*)OW4<%M)Fhe*h2vDiGfaFbyt!uwde*n-oPt$pP33 z&t>={D|^p5f7aeJ&OCMR(=MEG8shxzh(Gdi)%_D5pVF|;IXB)jE@fXqmE5B&I@Hy03?-;m}k?viYlMkH4KPeY~ z(Kd)}5dWd)PCfUO!BHy<a_C*t61gUg8-^srsvWd7NGgB-cY-<#bX%_PAVS;_y@HA zS8hfZ*>gj5!0wS}&K?Z^p{xq>fcIo+%zzU%RN|nz#7)k!O4@ze~NN4_$ z&Q$gGr%orBUj^JKE9=(|tE}%ER#kFOclFd21#GQZAhxz4TU;apThqzb)QGM5 zt04TSeRE{)MDqJ`N@rV$MD6_SSaLkCkCOE35X|XKXP&}iZ}0?GqM$ZF7wStzq$Fw> zAvj+6peTO%)x_l|zVi=Od|r>CL@=itDEoWXm5i+F#ecPZXwO-Kt?FJ^Qp&_qBtoI5 zkR&zCPkngc@S=J&Rmp;Hvz|&!{tJl@jwlYJFCd!sM--=hO4j?D>e7|YJRE%4c&~6O zFL^Y)*+)$6YJNPeOPB1?S#sP%Xvy2hNeb=YwKbioTLSt=@53ah*Mnd=JF~yPA7SHk zg#D>`00+;FF12bstF{&?S?05f0sremN*(j+I{5^Ek#($a9dqj-kJ37TjI8U0xI5FC z=D8@0M@Xx#9w8)G*Tj}UxG zahA)>YcgJ%f=fjqbw873an#tEMmA%~0==Kg&TEAbtX=EsgGnf{hA(dJ#a~f+Ss4TT zPeG%83MHoNM7%55+=zZJhiEf(H=U6}mn`5um~?jDLeQlKr+sAy zFB~%@>4hXc8hFvdRW0~0xxR&wlULxmmVG@-4GaRHK#C&kN+v=5N7j-}{MDjm&~G#9 zIre_^s}GAqFoT4H3~qW;IyOASS7 z1sDv%STSRLXpTWF5L-p229m9%Eu+0Em1(PM1y(4Q?|l=bnTmwc+IEv>OWH3^XSN)Z z_R|P!#uVeBln#*B{__>qvv44;@nNX9guzZDglzEugDu%sK(;X0 zFrVy7!ERO=DOj$4O=#+@$<~(EWb3-Cmzz=y$_W&ssp=)5f`-!%sD%nAkDcXE;;UTxIcHud6?Ipru*Z2m&%WV-%r;^UJ1ei7w94sL6_FJMe7i|K+Y+m z3slQq)tA;w2V9nV?pUjfEsyH51#-s@}yqWsuOI~BkV@lgb?+fvk+k~ z!bLKUaLm6%mb3Hf)61Yn`c=1w7PQ7s-n=u_C31%{@`GwHkuk?;$Zm!H1wRNTE0aA2 z!&gma#RR{RPr(DVRAss+bfo%I8F>*^Ef`Pm=lw_oyZmMWFCuWmycRMBr+#H+{W>`H ztA|yV-1B&P>dFGAetYazMwJdiuxva^z^R{)=iukSvW6(oL_3gNHn|A{KXto^!#Tyw ztkK-1H5}Zj(!TfFXjWc+a7o0qK|LXlplS)2TSCmAKjXOMLNRwEf@KGYm*iV`4*pXU zGUpSW^U+FnsV7=D|Cj>%hgNfgb!5{yK4YlyQ=dxjU~T-=z9G+SZq7e?g5yCU-+0^z z)lJK0kO;)_p2p_XZYux@|6f7*?@-4YKat*vQkc_SgMmI%)rsy8{jO^bJ~@)WG;^s3 z2m(dZ(C!_q0uUR#Tp86RHMC)m2tIMN_;K+zK?-GGXv%Qd%pL|<01xy1ap6>os z2M2hYF}_ilcVn1mF8)Q8NNWC zBP$QK(7%}&RvMO$Ll`-ZK+`RaNk=Bwz5h4<%cEs)^BX>Hw9l zYAsp7{oAmHoxlbIUe_Lc6|h508ajzyQzHXxF#YzEyGzEd2=+lf6Tsw&u+y5e zOC5$gX6{Lo8Sgek0msUeqB6j|m>F_(3+G2%--#Q2f3-vTEa9Wu!$$85PG)f}Dv8`L zM_Jtu7dbgfX)6IW8Q{x*#b{&2f~!x3^c&vnq?ke$B6H;JB_dA;s}EP5-f=XaV3bXT7-ymT^xH^nBPH7|L#-F)MBwIh{UL!+~1xDOqqHAuZ!5x%XVn z@Mb#}CK^X)yJ)4N6ijkg0(W64#LD-fTjI|It^7!WB&N;lpuVYGv^0VXUO4 zhg&(cZ!n3o#)f&l#1~bxYMu@qGT5Q3)AyjCk}fG1;L#=S*Z| z)e>rG3;x3lW3<%|!brZj3v14ihP}4@aN)ot7lQC>5x~2kM^FpNwL!?%BLbx zRzH`hrscu+jqb0B&ezhCBfWo2`Xl-saUG``XAYnilGcp0#+HLfnr#)4Zh^vt+}82O+1Zq_G1VU*YA9p%>sMKb128b$zfuHBw2Mf?TmJa;e2| z(f2b34^1(tE7)Dp)C@v6+gODbu4{^HV+-iQi>zx3HUsPswh{I33Jym;55ZBhZ=+pa z)uu(Ah^3ugRt+B37xHS2}xAOSM*USn2Bf zVt;kFcei1YvlnINEvU)71OK-s^IDDn)tby0%>AZf?sppJep4~`JB{<|6Go*oCvxs5 z@4P01mju$Kn#_k2GL199nyu{AWSXe}=oyXlS|?-{(>+BrOLwp)ldV7yym1H{n<7pv zmq$jofh#o0+ZojYtCsX{u&}s6$xk5~K z#*&@?VjhUp9~nDLa_l^>3?X?yKCeckBaAJ-Swi9@(n)V~$L}pll8}C`V%zQm^gFuT zpTtOKMo5z<8E2oV29FwU$Yv&(!L*B%z-<}1JzV9zpApi}GRbkfSB&_}G2#)1_!ft_ zZb5{#Y5`D=BFgs;mH_rQluU9cpHqeeuu2{}1(3XxZinxEe+ZPNM0um3e63VmGRdKA zicy{yqdeJAZWf}fkGZUeN!G*;+!hn{VTRf_)J$@y_l!|*7o*<9P~T2)teR*Z9%0w$ zLIRV7rm=_wUOh(WynESQy_Vi=bYBUe*_@mIvSzB~`3w>D`~_$|_5 zLDw)Ey5}t%tD+&O6+_S>$gU+=KpZ;)=@4uBtAvZ|`;>dMrr(KpAL88zgLLFlVOG_n z_1^ToI|C{K8-{U^k@ZF9;XcW~Am+YdGtPr~Why6M;@h`(Jnhv41M? z9%OLe)j3KG54XGpsnF0={S|s2ay&+Xnrw1k1*t6<_@hTi0HYI5X=*Yrr8D-1E%PFr zC=NI^na80-)A2-aX^QNh-kBoWJW&90nh=%ORO391JN5@t)-C%W<3C7T@KWsc>6Og& z6F;LX;Cs!M8C?KiRhHX=4g)&LBMjpS%6$~|cW-UY z*BB)Nn5tm4-uDh7kl#E`b;6?I%3%F?vL!^r4AIsxq6)#8m++_nZ2}`)>%Jsh<}V1> z?GY|6KH7UlAKMGcy9k=;C=)tJL?b!mZbK~=HFlV(m-Q=y(J`*QfD4k*n|7`&d*%69k>}<|HpZ_04y9rfEn!a>b{lO~ z+4}?n!MX8`Z-)k%?@Y%`pb68;iv0lilr)7|Uw1cTi`W8Yfc(*~G4UQs|}( z*~9`)t89fBT6GvmtOL&1OOAUBscPqJBFz!eloAs6B6+JD+itW9-)!5dDf zCFgGC!!}o|nliy8wDGAXa|bm7ed883H^MutmDOyRXHbNgj1(zYy#6yb*W$GZYBFsB zf=u>bigffMco!Y;Nrdcb-4-@?TDZ6!VNK?iRs_Mm`$>zzRb4w;_sg4+v#wyrC^%hISD;82-GqmJGDxQTt$?$}lH+g_ZlY0Ho_qXf33Aj8R=`RGH+c z9uQ-gU>NFR3=}`=w}=?FHVl^;1|~TSAAVbcBX>ViQEHhv+Aqdg$6409$YN^*_s3Zi zEX!|Zs|A0EGrpCVaaEL&Wh1A3E*Fn7kYIL{nOw{v-*2Wqr2VY{^U0=2;7q@9Aqi9q z)O(w$ewInDBI6<)vdNeQvomyQV-ALiL%JGgBhCQ>=+hF7X3S9AiHh+>6ZIV%G<-Up z+yc=-RR$ARiiwUUk)uWDQ_%4($}X{*qpa_3A(*bPh7|!FqpXuAgO+tMNg3NG2GPx)@2PA(=}gTN{$g3<;CM_TQIv zaGZE&sI*j|o5h~X%RSn1BQ5C2%RRtyog&D*Nv|GXb0@qN%MBt7VM4`7>z*Ky<)3zP-9%e7fX-T3%?Kgk1n-s4+HQo z)3R0UwW1JTzO7FuNGLg!eWd0HC0_4lM)Sc32Fu zo<9H0(t9I%+8J{=(W5e5!QaOXE3$<$zY0vu9UCl13Q(2C`zadUT#FSj4U@;*GOVb2 zSv{!pSCd`Lz6zU^_}e8Y71k$H7c^D9jYh%p|mFO=j^#1QOf?e7=|oY;c_A8M?gUd%L)(L;6=f=qT>MH-6{1S!x& zZ{e5&bM>(XHt%`i=?d2Gg-k#3s-^zJQvGI@51zNYhm_Yw#Gps6yQKPH5@vNv#8n}` zgVewq$IKeP(OA?93s%&7(JUO1@VFk2G^|*9CQpdTaqzRO3M^?Q+a%LfgL&Z(#Q|qM zsYB(Rasc-#48T{FgZ&~HZx@3Z2bd8C6O2->23(|G-A_?;1;e8ulYi|= znRpK&y0lbn3=@b2qJ_VRS6%Vy}%T3myip{+MW`F3hFx!nVxa*q~n5(+* zu~!&KsX!2SMN1d62=uX&C6g%W`a_~xucy2pvW@&Kv+twyYqE{3S9RuP4C?JF`(X|3 ze_Jaec&Beo@wXdUtV004vNFxL3%aodK~CEw7jdBRy;D9x2_W*D2>^~3AqZao2Jv`r zekLxMQopOu%m!4S8wvC%5mF|}b8Z5wS}JzJmqAvnKg)1W~r zz!_WYg$u03)b$C+7JDq6t?f)_Q|(^?zgZ89gRlUJpSEz8kh~TFN{+rCC95+Z!8CkD z)JG2&^$zP=FF{P~UFpn=aJuEr*g7iPkUl2DEITaQwpf5!*`-YLdMVRL=bJYMh@z`f z-EpuDex3AP>tcBIQ;*9PW$)F*mDMwWl{$fyN?=G|OaVeUdsv?Xgvk39 zQTvTd3T+76I-Q{n=@z5ThHQNUAn6+_nR=QyZWAf!q>q&o97B{1tEe(3xEI=a>!;MG zC8kdtExBMaK##hiM-_ZInf2BH6nb>X_0prM2vCRQ#dAVEdPZaE=w%;~dI!0-RT65H z>5<7?>jKoHGGtJHC?1Hxq~U}!QtE^y5;hL>M;bDJEKvK2nIhy>S~V$Pwo5S0a=)+K zq^}@nM(~FCqW(}NgYO918$l$#Qxjya40bj&Td2I;Jor}KT~$4%KTkUSv0CxfaGU8r z-w<1^O@F92)F0}Ns)l_oVnKS-zB}pK4BAg)5!5-(pD<% zok4uQtaGR=Y)DfU_7ZG_GAsA$b%2zzFj>m72S+;J`^JaL33eyShE+>US;GB)T-{uT zBoxMAntWdafcNxzmZ4t=iB+x5)V&!5Uqh0g_@@EfD}XK^8IM}VUzNe(?dUR4ZFW@e zR4xZ<^_{D=&cwdsT`Y)4gDVB$%|_Jfm|30n%cor{4*KLNarG3vH>~T2%0tJP)2oVB z8c&B9Pr*S%7_Qq6^nc~bhW?@!Fh9rt1v+z@>30wGe@Sga{%=ID(Er^H{;!3-a`Wq)Y~C?Aa?R}etXy$yx;0>>c-Tme%|Zh2{*lVVTbnG-%|<9 zi-VVUh0nUB>f)LWhXA07PJO)x=~^DJ<-R3cMlM?OAv{s1 z7@w?_&IGMx2z{^PKNh`_Q9FLrO9Kvn>RCcIe5Q7B>tmVbNgC#~1Q(q>YQ<1Ik?Fp& zgHwQOL+_46i$|b*?^uc_-0HLuGn(MTUBoB6M=mAc91`{)i_dVXX5(;kh4|EbHR5w2 z_>}j6xjnLjrNA`=p9|R$Nz17vb|i7p2L(f`TUoqne4Yor;0rLiHkU}@_>f# zol7j3j9C6|R;MPw94i>_ILi;Vu#y#45&&M6%lXgFM8un{sn?;YO2gHeGa}nW%v|2 z9ah|`a4`8WfqFlA3!wDoY^86*N2h{X5+^i|Hg8J|?(pG&{jKxgoSEi%qbxdcI2LgX z(w=4SH*%o(TG!iD3~WqCd1@yT$5;@Z-$~JAWD{r6bY_#^x6vTgEK^kwe0LqZAIj^zwk&c=x7^z zuTs4mg%6N8A+S$wsa_6NR%&!y>Lx37R#d7x_;^Qh_i&uIcVXTi!#rpq%)^z^Q7WIe>J7>a=l0*)0S|6VfP0_W%4U-yYseTl z-sb9Zq8xJy-g7#AVzMjUujcd&rlT%o-Oz?KHDkpZ45{&i3q)!?uh?89md zzFsJ3)Z`q1V8UrpGOax`pxX<&^$1z7CWHa(NY7HU!I6d5M3Uy17J6l+#x%@qYjHfF zl;=rL)Yc)0h_0`s2L(b0{MYdGxU;oCVUeIz? zAvikDc|6J~WzKh$V*@lc8)UwX>E42vGYTsZV#)?%677vtRbp8lKY}`F5+ZW9C;^m7uCbef=IQQg>vi;<%srt z;AcR2Z-_E|A0^8lk;4wnTMu)|b;%?A12@Ct+w7GYElgmc^YcA~v_G6fSy|dY1R~HV zcStzO9Rd+xl!KNOQ*Qm+0d>PFb{x3SdFx5&NI^P2-}0Z20g3*+@#kAyM}#2q&$j$d zn4ny_XIln2uW0A_hZ?_L){w06>#)}-pN$#6wqtek#xHrYls%e=_PSy)dp+-M7R$5O zT7N3I59L^b5slf^gTWo*J1H0Os!h`JUK>O+TKV}mr6HhjIID(oDADDYyemA|p z)MEjlZA^6s=3tDdbe%yNiORc3{@@)vQdHQxk*UJTvDGqBJUYR|PIQL;)Qd>NT+zJz z(`i$)iH8Z7P2MH&I`nF#PHAT5wA9d~0il z_@YV#X;u+7fuu`Cnxjk5EF#{s{~|57%}6VhmmtG-q(;kF;e5BOKE^c<>ILJDMq=y-z{E02fJiX}p@Dw-6FlY*J*e&@YS4L|8)F+kcLor=F_MhCO9=*^-yhtcKAxJRZIa$S zFY|F@?9mmZlxL4zqwYwPpH1%c83I4`mfSLj*EMQyaHtB?Z^eZ|Z(u#&HR^Hl=X5-P z7Hwkgepd58?;vn~JMPLt1@`O;;f(Cr1scL-&#vnuH0;>}rFa<9o=IQYb4Rz%kSzNq zdKlHt`x^TMnt2wG(eBV|fnp!bmqA+PNgxBADe=OI_9omFOr9;boVzsiru7OcefWAc zRJht$;kqM*+ZG6iP&jBZ_8PNVS?wCxz7dbnyp;VK)V&i(%Kty5a2J-4@f?M7_kna$ z5be1~<2uvrp>3qI;LhuR`Z~&I;`91yURY+H*RL}Rh$q>p{!|Zuoq5VRre9l6Lm41L z8=_dS50U@njQ&E17t-UFcAV&feWqq2T!N|KS>#X`$|M)PNM@Z)#T+m;rsjzb{Q}zE z9ugd}6)`~ZRTT3>B5znlX>s%p_g@~%H)0YYXTg4Q@_c|{A1CMESq_a{dE}zh9EMO1 zZ?Oai=6!G73#73zeRyS(kZ@;*n`ebwtN!=*zWQC zM+}l}3Q|8;FxuV&jb4x9*ax~ojBqpkOW?ApCi6ZFX+1C0urVzip7hc}iaX$iS8S6w z=#&|6XpzM4$qnw=5<19E2f>2=EyX;VD$!&BM@Im{@S*`M0l*msFfIb%fERQaKq~;` zhv8gg2!I{mH&|{va>rWn|2$8MU;roY8Z5UHxz||k{ZtN}sf1>5V-|DdH>xOco@Pyie92&Ag!HWLLq4<$JD+w zCS<{}M8uhx{5X!U876zF}+iXeqVQGj!%NgWm^) z^|{1XR?8B67eTe=&}=L?xffo_?mzk>1keSeOw78l2^Z(Vpk1#)s4l4XzXcKW)%shb zfb}nq1!&bdtu;8%;Mca+_$RgF?e&t{3>MyMTWT|p(MgtG;6xH$T)baQIvnv5M-i=@ zMR@c#(U-B^(l=Po4gO}Ju#$;y8VB6|MvlA%4rGaebV6I%pb*8P{?vDb3gfa?#d5Ew zk-p`g51xy;F%*DvKU5^=oN#6iOo{iYIK*tl_m1c#vm0ZlcL>>TnAgLKmn_&5*Jh>% zJ)Ay*0QeQ?8|Nm`Dc$P!a4y3=^gY!}*V8uP$LKTFOZn=Qzv^Yr+JpAmudZIkUddne z@@Qm7iGNowk4APx->qIAeuR(sKCWIq)=Cwvt1a2%ejFEQq4Sd+eLRAithY6SbrZ0I zlTY(_ynAw6a@DvgNeQgVp|Km|Wm)sKbl7=unJ@Qa+U8VH6+mpT?;P znLCbw;L;iGu)}tKt`X5=8E>Js2BLN&ZyAdOEE|jKn!2=0Og72I7 zm;63$w(tG&8Ky?tx6v=MtwaO2iiHs_W}P6yMMP3hB)&I|rTi?D)NNM=XDCCMyA5-- zVMbp>t7OF_7OF-WvV}zUEkicekTJ<2+aW^cZ6ho;`fg&$=*P9Ffj90cvd&>QSTlnB zB=$4Pud9o71y3+l2S0fD!|SzVcL4kz6;Vc)Wx&NqgS+55%OM#Sd+47Lnahn#7sn0X zn-~^rq5ED4>f*T&;s~N_Gl#VMhcBufXc!aaG^H7<+MN(h4$GdBL2$L46;me zLVHyi!hD!9*hLtcn&xgXSl9^l#P>(TceCMRlEc>=;q(3|L|wt<2KzgUhVq&b15S%_ z*dc=NTMi|O3VWA5Nq*E|B&97C4Fn?m0=NaZ9B{`G$PBVPR8$KpENgf&D^G*{YtjQbfNfr$yxoZr# zW0ccF+{KndNutu8_XO)NNxnUd>}#pvPjcew*f(|(0Gi$oE@71(OHm8MArw00ELEuv z2%&dRCzYFo%X|HCNrXwR2AP=15fKqiJIe1OEbb|DuvjS4lkFbo`BJxinha=zJ9%&m zP7x1W#Rd-($-~aZ!&KveNsfm^%)^5;>OLzf9`-gK(h(2#)K;Mc@-PJiu;fM_ln5R; z$ zeFC;E_`eV-@97@Nq1fTgtPC!UdH8O`gZDeasq!4xOx}YlU0_6t5CnS~ky%EBNv@*X z#zg)}8)=vK9ug5*56}$}S!+brbEk7RHgKRtlSYI|j>w;sp%$HKL|Op%!lN5o6OPu%Bg;BXUGcWD6t0PCWO2CBohH!DpYUCWjgkZMcWX(I&4dLp8aT_7unT zoo<$hP`qJ2+b7oAdKDD(Q6&zdo26D!?v4*GG9K>xhbqb>SJ6{q9(Ij+fPR+ygw1r= zCVKV{duro;dFvlJeN>5q=%#ZX+R4NFxF{Y%JivHhlH=h8Wk?R!%M?ov5P11!#zU)v z^|SWWwq!6Kln5S%uoK*SAIvfy{_=Opfk}>s<6|CnFdjgk>r3VH37hFy6!BnBZ3`nF zCPjTGt3>cX?>@JWI*+W0JiPs}se<}lVXjsMBNzT!(aKDzDrSVOcyYFxu zoTz7JlEZK<0io}mE@gvHJoqKK?wmz1l@xR4EWsDx_~-aFC* zY!7}iXeF3dD7=^B)NA6@C*srvaq0tc>N#=hUn~_puRAy{PM#72SB9y&UNC1y>Eu7r z%^@LxP$rm@+y0jo@@)S0N!BNWD|8g$pPuTy$F%$b=0tCyT zar|8d9Yu4OzeM*DD*!Iq8%0woYl;^iB0#jRf0l@F(hON|t$|z1+rLx6+;#oJ{m$c1 z-#)PMca2;*Rrbq&Bp-I*{*s$CAaWT#d6YnM_Lp1{=GptqE9Gx$ee1ezaIE$J^{D<3 z>st+PVt4>p;KeUrnrpi+uF&?cyMFipeHFmS) zTOXigxtPQ0B&3uqIE||j?P6Fw!~1SnQOZX-O*o*eNh7AO?PMXNDIf4HQLL?nfp0NC zYcb6!)4Ud;LuK~Ihcz@MMCpYh%C!NMB2TDYa0J=PCbrRt%ZXI;BB9+97lLCUv`dE) zDkbma^=f`w)LSiEqovZxU65?}dZe*Qh@0yb$X$bX9Opwv$J$G!kZMqV$Eo@{> zW?Nhvb98Y{<``agc62EpO4HHJ(s<`8_H{HY_!fAC6g8@;m9;#87XG>VcUQ1A0em-S zM*nJ?g3|q|8)#5`lRl=zgt0T_`*))?)Lzz>C6{|7m!k=TDwwww>G>Vq#@i$W!LR=d zw5CQe*f;0My?BC*kNzNn)T0tO7<<+rupR! za-ehfTMfQH{CL6PdmjhX;fV1lpk8Km)~mR)WQw|i*WUxlc9}65G8v$qS#oxV41xW zO`eJ8;HO|ra&p3=IT8a6TG@bgjE`p&tlv@|*~H82?%Cur_4+&$d6Zo5921Fm<-c^s z0owukQ@1iA^wIbpwn4N%+uK}NoO~O#z2wqJ$l1gpM*bTNYS7|oHOSP87FcZ=3IM(hJ)#^}B5*yw@#zDwOz(#@9S*ZnKliK%9y^WW#UZwtQo z)1D@nVGfOJ`h|R>8uP`0O`n>)6AycdjL7knA)mIXj69rUc3;5 zAv4=)iz>mz>(IPAB5#15!O{|{xE%SYBA&H5t`%Vq;_Z|f!cK&Ju4o0Y@R!EPQ7AIh zgogi`2PrEvx|&V_* z9(~Hf7F{?X38^oP!EiF3)k`;6$39>mFeW`J*H&ZFBa|B&-YpXz4>F+`bpuAp0-QR? z88YldI z)aSeNOW!KehLa@O)~l+j^=tTbuW)ebam@-Vv*sAAUspRCcW0{gM{-?n(56L2~(vHa>cQC=H}+;~?uRDJ4L zpAYDE?mq&@g9^QhltXwG5f*wCo$^+rfjip20r^eI0Ujv7*E=P@-cuw$2#)f@h)}zv zKzO{?AG-DRh=a^oZo0l9?(3<_we@oD_MZUUDXoY z!9srOR5GWb8-1h$pxoGWpy?Tf_0e+W2bT(*@~cI|df%{O!5K(K2_rZz)X30N1ElpT61o|8 z$eyS}KK90t9TFYAD;P;8&>`V#z4$VaW>dS%Tkv`&Gd8aWs}>!2tX|3`Q~s(|JwEY` zC-!uv{@cNc!bxCb9yY$b1dg!r<*6EM9jWzqsLAX!rq=%k&meu-`1Tq#60vT6}YbR^82|Bzk8Ji^Ct4nR-4A!9kt8@Fw?`r;}EoSvpt*)w8 zFo>H6?k1y{hRvmK!L5z%Q(5{n6J06nk??Jo6Yg)PSmV!+xXm}0lT7%fjKTH;w~&NB zB>?lA;jy9cq9DvXL87iV?H^YLwOODkjGRsawv;r=ztV9w?1~jRR-|1|KqaYB^KAMMg!Y(;QdIKl?8X_7RdL{ z^E>KNx&OKIyD&e0zsXgE8+5-(!<$po0~5!dNZGJW*AHBeVSk4XMe8vuWT4k-2=c8eLg zqg+5&thrYK*JbFVr{(>2@(H)jAc(wQ^2AQ{=U2glU)2H(0yEbaU4Skm`=__i>Jj`( zkXllToJFEEXHn!cVy5Ks(`i$3D#o3I1BB%L4oVL`jg!V!pbEy3M(8Or1#I^y&_Ys) z?rDM7;4R1HwoMjtUQIp_K4hKCh zyE^{>>#d0fSq3+;b{m$k1`SChx8nHZdp{xH8ZEnn%l-v)8YZzaeVB@BLWglC`GGMO zpvYhE4vTaKH7w$L)v7%PO=4OZ?59+{rnt|_^#N!>RIWYP*2-;f<=S1j&t4%mmHUa6 zW1H1PvnRgVO5CJs6hD^^d~!*IM}lP6js44(Gy3G|NZ7=!HGRe!X1@syTb| zbuFsqtiNs==RHxF_Xc|z%h}rO#~NU?Hd}NTbFlaD>tr$S{lPf&Z44sVQs^V}y?_3N zpoyy|A>g6|r0$(^4XIwRA(*(~hn+Y~lPNv_DqCuN#Ls-^asxi*y)7!6p`W zWvIBwOLwPyy-gCpPjmx7Wu~(dcQIeGT8x)*DPjSYb+GlWJ5@Z_9)1qJ`XT9UxiR#P z{$J^p4N331mj|yOrG!6DwJ0I)HLf!FTVlFZlJ;x%Ely{SLPxCGw-gVhd>Dm?QPKSf z+%Ff3+S=q6Awan;;os?NjQogD8elaC0fF9X90UY8{TDqU#Nj%x`I>dm7j8wZ?Lp6M zmVR@fPu_H=sS7tybAJNvueh@h)ysQHQfR1?HR^<^goX+;J6yY|ZSPO*qb%qiiD;#0+f;tbhqc2Jpz zgVRHx!R*Uh?6+YvSyQjpY$Rv#vKQineOak4E_S*El4DAacSB*`IdPs} znD_lS?}Ea-{o=f-g?T%~c}ErIeMXaHHu8YNyw!2u?uB^|#(6huRVAnHe~9z0EX@0P zm}jrF0CvlZK2XCZH+fOdPlrdsL7VU2dB6C zuMoO^HQ7Dymluq^tbStB(d;Z$_3%ypss3f#RoEJ@0OxvWgiM#bO zUdN76@(PQU8JJ^S0Zuw^={3upS;=#5Day^3$`s z@fWyww~N#7Wqv2(KzgB(kYAil9BDE6l8PHt{2i z$v4d=F0mLrPL$iqVl5Ucv)Cew?Ln_5+6nIMC{gqEFz4UcF}#pq8NJoS<>U2=xkb|E znTTQ2@N@)Zb&7@Ve%S0p%apd!DclyUAQE_M&u zBKOd|9y+gW!)x8cErENuqt88P&k$icdXO?9)Ak4gY(?gdof^EQK+vDs<zl|q1-uAi7_h=xUoS`E<>L&R9nIuOw_#xA#2|H2S$W{BEdhOfKq!4Z21IO-&#GX^4B z7$d3{B28M}&>Vq2hBk4Z9|MgsYG+z&t^33O(pte&6bPG~#;iZ}vp=zo)Oro_{i4>J z718%LyUmekp35rymN;x?rTLJWIJpPiB;R{Nu$Z|uwo(D-3f4P`Oosc&G_9K)BPot3 zCEEET!CnbP~Sp>UQ zV!1t{42fZ0Okr26@XbacZW6wFWs|H0J)q|Hyx^yX`Z7apJNDGt=f$XZjZk}nLzDc# zip>=X=%(y?P#%|gTT=%$<2NE8tu>7jP@==caI&*+!w0A*o(rvpv!O?dl=rinNd|SPs^19x_`YzN zKIHQ^BI3{cO;mIG2*J)Oqt<#!vmA-%5(9GP|0DQnuBR@KVW#B4JQc(II)<4L5nISE ze`gFdD*{UHZFOCL6YI*}Dpv+$H3fI6ig?fcPJ&~S>z>nMTwjZEy+XTz@3lv`xpY$!}S-##UzJo`xw`=nrBD|U%r(Lg=64=g|aX=+S<(Ji^;e{AG;G+F)CSPP~wHAh27h#MiU%tyR$ggAMhvD_q4&uOy+uLGF|A7mzl|&&Kmw%h`e932)3rhHT+FXVOC7x9iuSQ zD4?CDvz_d81x@BeYqlvweVn1LG1N?Qs(nz5`pXe&PjE1qWmc?8Bw%JRiY4O$uhEG% zk$kKUMWZ^NRwMX_lwnWf@SZTUs(vG^)a@*rqcRiK9i=k!>j-rm;vDIzzw(#Kv9*ZofjHHuB5+;$NnZv=~A<6SJbO=AkLYr&M7kvviA z_N1|SG zZw&M;19Ah&oiWTcG0d0qV6rjHk7JmRqsnR^nH~cj9RVd@lj-pObRAiyVQZJr8`EqK zPer_6SaUGRHOEddu0)LM8pAa;!qsWGDu`>%-_*3{7%nC`Ts_KA(=L@?ElGVZVqT8# zZ86ZVBB0bhLgwvju)!5E(76$ix8MdfqZ8+;G0YDl7#aTq72OgW0KE%U1D##lH-`Ue z9(?LOIm}vPtd8M_$MEk8fVGiUJQBliAHzTXaHInF=fnRthF^27s=)cqO$OiTkRBHU zt%`x>+1Kkh*YFX4U*$Xa#JIDq>*HjQ}MU3u!zwR zbx;0LR#POemFJ8N2DtYtB3ZG~B*&8EFNN9b{f%nLBuDb1nB)O5$*~bh9`rB&4U6IH zfvy-1Lh7k)lmec*nx4mw(&Gb1+8L>Uv;#C=-k@cB+jXCOLNg-4#jTc6C}w;5YQ( zx%Z8?r1|AvGIokxF+XchZAB3~GxOL{I@sAn>t*h9@(aPs`cJ^iT#@uT7D+Tra=c8A zc`1u|`BYwF#LJ~Dmg!jQis7uBp4tKh14X0sLeZ=j#vVE zdqFO>^n{!}sHiwQ(l~2z7%;)tQ`;g11KUXH;Eb;{;9#jY@&3HVg(wg#T_u5i)-1M| zO%n61Miw!HgUgk$;t&_+!pd6<#(jUk@@y1Y-D%1wQ&l{1dpwh1hzAFnB*kT zt_(>){)n>+`RqLXOG=?*k}C#xTu*Hi6%5olr5D(R(1NE?COE{{`3do&E)Fkx!`EYW z-r#_3?A)j6LnNKFu~XrS;V8SF+Qus&JNZMZ(!tJVxzcf+a~#S9cdd|g*8f86Fv&^h z8f8d2C&cWGi`elxSVX;G<5hAjNmdxiMkC22M{@U=WS}8lhPp$Og-8O2iEKxiD~2Ie zPi>gL%fJu&>Maqx_j*r>7G-AhF&LSHtfg-br#Uy!< zk(_TNndC_B7L$BUL%bxgMMP4g_ym#dD00R8tUa}@|Co3N>VVRR(1Eom6a48uN#MPO zk^qw&J69`15;!hq=Mv3Aq6TSWF`RvL#qc2`J+<{IAUpX!j?%%-u%es}>r}EAWr8we zXPU9YB*)HXF+1HFQ8F z&K6F^GgnG9Ome(jtPD-6W{3ez#rKKX+Am_u`z1?n?08XZdeTnn+Zpu}j5?DX^-nv< zmZ-li7hBZt(%3Jdv@4ZuE!TT7_3uX1 z=Wqx=Qc(@zO+=RISmKbu9ne!-i-Lj5qVz&#DK!x-LYd&*zp8=88j|G5JbXOfGcDur#ixwk8DyDx}0h6&ht6)}ughv~hSfk>V@3 z4k--&_?W}5i?|x`ZH?68Q0oiQY;U4i+DMmUoKc@k>Q5|}d`1~{COP>mQ-dl{4G6EBt$ z9bSki6*IYM%;euRluJata-t(9S12kbcQz&`Ib;~P_0%>|!9Yz@I+z@u%j8&NGL14p zW|<`U4_{0&$w_jiG9<}UL|>BpTFm4D5tCjMOK+?xaP3$@>RTA~iAJ4Cj`}+6hIXdl z6}k7KzC`YYMAV_wNJO_PDiMABQ?=uGhYXW=J++NfFi=EFFYJuYa*sus;B@ig-A25A zmPwAu+L+0MVkS3W3QjCYJZJOmfush^g-wQ}2_D zAnKpWWft{ABI+Aq(jE08Qh(qts{5CWI+Gmr+m)fZFBTou{nVKHWfAo`w3c%fl@_%% zNsHEhWXSMsRz00B^*+if-l7!e$3T9v*(?15+t7& zlp5*zQ;LeiZH&V{hs@8~Q(JGyVZoF_>4m1isZbA@y!0N4@&2EPNhUclPE&>)Cix-e z!+$mAtP`?Zz+$)tCt}B*+Bze4CPHCiCq?OCXD}bWo$S2RCU(AU>@dl(^OQ2g&adS| zNKn6$J0A(^Bt<2tH?9z8tr2JT)V3tzEZ?vzeTdd3YoBfiY*FYUmbc zAIZ&*INK)XY@%_tDB{eX+7^bK#Uv-NTbO~nauNl1 z<IV)9|Vu-a35<1TZ|j#1qjGix!FwA(l zs3@2Tf@@eBCOm*$sc2*ibOk$+k#a-3qW(X_>R-n9?;cA}UFi}R?7}kH@~2;C;0-6< z-3)IU&%vl1yx6asoJse+;lN^HTrk@RGUF%m>)G42uXnDZS~Y%P0a?LvZ&hEAy^9=r z%b3JZF*12&aDh^_O}8{c z;f^nSNFn(Q{OhC8^W8TUwia%FmI?guvrPE30#4}STf5lhR@ILGu)hf3c)(GPmf)d3 zs}7&dR~=eh9qv-9>TrpicNxAj<%w|nxc5iG>y#!|_i7ggm#ct;b)*VNSgpd!^J3T- zz7mbeoy<+?%nC5x32vKs)mx~KV63#ZH5hLU%`=98T|(V8X6WDYsKrpP#(gm~I%23E z2W9v|EqMD*R!uzpMP_hfR74e!mt z9pm%Y;A=TJsfF$GB?~SGaA-t&)AIv-ETXErWI<(KawARx&(BFg=NI*Zn?*V_i=LIojnvk%p#%t>^e31)hb1I^b==7~^flRAsKzzfvtbhKOU&8C9QwGK#$sfE?BNzG zve@>DaVNMthRClj8mMkOO_a%{(H?1t=#YA$T1!9Ex5V%=D(sGM+t}Lr@Hz!=Us&eHYc|$tC9DC;3HS9O4PL=xO}(;v0&~U6d?%cbY*{P zCk>};jnpYxrsST9#Od-%yboj;uy2Wof^rqrzI1>bY9LRBAS4;=U?ALz2aqxYxibVI z!@&o)lL2>$M+^q&O)AFxH>Ztf8zm{+y!tnu^P$yA4fZ}A2(M8-nYFRjmC^3x^PehFEW= zK?au?-Tg_|_fB=Gr$=O{T>Yspi4&>A8Ct-M)L~MLmdaA8sMa=icDQzkcu@J>V~B5F zpo#_SZ;b>vEJEkK<_yTQaqcVf=2-`?$8u4dCckz;&_CivMEkV&BpT(qWfS*7KVfKDr`zSu(|e{QHc^ROn6Etqlyk6}-Yh->0!QsA)d~{A7m<1Q9zP57F;xKul!jJf`3MQ- zH5TB185zL;uykio{O=g)Jp9)d;=g7v{4>FSgW>AtE(ggR z=UVSL8E>>+GY2*`pndgg50=fHkTw3+5d58uhx?e=?0)Lt?HKbq6)S&?qQOT4gh~^6 zAg1Gu``QHIy)=^$5UaLbZ-nmO)IvT`z?~vHop{KXhHCEyDFT~`M1$FcW)5nMkTG3Q-& zu9NRZ-N;>agBm%2sPN|-MF6J2Gd*0#q zcb5*!5yA?rFG2*P|L|{;59^ftfmPvGvseXQ&!|rcVv&eTp4VJYhP=PbR{a8B(ZqDN zpzrj+`O0~V(X}dy3bQ#zwVJB!yHTfv$Y$#bZ0OtPQE!x?hQ_elYbQ@cLo#Ub>IB@5BU0g{h%RJV#3t-_s*Hp8c}iiLvJpyrYQdGVfp+Y`x~@Tm)K+r<%;_bSBHG zJq~VjQjbqDa`x`NFNF_FaV>&pyOr43u0V@H!G+gSA~cj_tv@xIeL_?9)a6=L;GAAJ zJb_;s`*2mpu6=c1B+9rGL|&~pF8?uF0PnuY3^$4>;E{Pg;iJhI)W~k|@inAw_aH=6 z#!&_lmGO+Zwc3bSS|IM~^ETRW4DyeQb?@UDBFz;GqeM{zR~eqlp}*#g0VLRwXy_7inh>Qa@`737qvz9XrcjudDt=Qf%v zlk={cOGIlYPy7fum|4E`8_32_j425L5&K`(PF_a&@V=z@`;vRgOoqk>cmDY0f6%;T z;Cjh$vB(iId8I&d)=OSv2iKx<^5Vk0hr>KuOL>=)v9*-G=`4k{l+9VU_&sE14mLU2{_3~&0 zMiigIi(X)5N0*`|)%RAoL5MWo$M^1bKq@Z&xE8P9@lm@^=-REz&tR*hZrhT7iU;`e>d=)ef{R1_@_?>!W(4-Z zS0U;>BTreYNiU*v?b8W|6=kdjx@JyA37fjZU`x^SR1e>~8GJ_;fW%o&+5h4_=37=8@@ zUatTn@?H<(%c#e30}&zFNGE|>>O?vDvT}$fYhyNk1hLqPdJY%j zb!-e&J0#F1G0->w$yO91dP$48s`PtS>2keih(soGOJk@X!%_|4seHUiW^-w2ESbvF zawKzMywrN3TWa0E#;=Y#5XahxEG6UZp-F?T(xqf}jJa4yUO8Gu1;pova$i-Oe@q<| z;^`RT7~mLC6QTKY4D=lmvg_gtiTx~w+J0y#&98j1G=FHQiWt{4K*>TE(%UJ9sU{4K zZz0Tjx%?Q8x~e)k03g(e!3k0)Oq|wdwR1q1sw}ZJ2`)eJK7HI~jsI$~`fJ}MM_5~r zb~prWjtsY?j;T4cI5_?nBrkbg9#Zv_FVQCWUT`X~69E_l8w zP2VOs&}fH17sfy*$3S1s2bvHA?H>cJTNu`&4%obsQzVk$xhOfgrOKhrjiLW)S|o=4 ze7eaG4Bck%K#`oG`rs=mzW115wIK;PwJ^S(g2eaz9b>KNka;Czn88%HxEj_gUFqp`C99N}Y* zrV}vU?NP|l6mryZB_-;;Iz=2Y$t@xML>U~Clj)eFJLI=VGP;$;a9}3l$e!9JDuFUu zi>H_)rN{d_3OPyxIM~WK`hju8B*)Qzf3C(SNB77>l#F)F=V)8wsKOOjaLFW zqBkFNq;zmZmyn&sJgCy_dcil2Ll9gd!rqF>k`a>}M^j^t#>5<5B_BVM(d8_b=@{#Z z`B{5vD^tQiJyQB0dSp|K#!=+xjjUR2Z{vtbj-$tvp;r3^d$7I<==F2JhGcXOZGy?@6-{HJR(s?m z$*9j2!!}Yq4fup&*!y)RZfF_t@MiFBm^ccQ2_xNjnPN~3C?H&0fOQMVMqoN4VjRc0NSEZNXt0RBW+Df`$(l1 zT6(ch+Sm9-G#Y)VQ0-%}wu;qiwALOT(V|wxYkuGFTKimPGBb(&ynp>pKAE#GYp=ET z+H0@9_uBiMGtc43f3a{w!BnJZudEY5m7|+idnc$I_LAxY36aAnrOG5DhaHkpy&e7O zahX@sYWlxrZ0gtD+-^5_o#tW?BI$%IL#%5Ex?wk$WS(95jQjBwfwb*{A^UA7$Sg_r zrlts87;g@b*mgQBvlw_juSazQcyAx$$%2P?6US=tJ1i`YRd>Jbhnl_5ajgCT37-8n zlMi-g3CUW@t1SF_UyO)Lh=i4m7=OYTZMwV-?mvnzTpAsFd$&-D$Tv` zBkEf5MG{NfZ~KxY`kNL}X)rSz(SF|n-B9^@bWsq;7)v62Dj8L z1tmWy%1HXQfc3WS`0`G?3%lt;iY_S+6$1q}ah_uGE=HN&)SfZoe%m<@}2XoU-3`m5cB`MR<`SL^p@KCvCrNqM|uX z(JU2P4Gn$RI)NF<{4uh&;W;ROzCnY`cRCHzG*36GUVJQT4X5?~aW$(6RO$O|yI3}5 z&(!R<^$|g`pj8IR;y=7k`u;kJm2Y58GVixd76^Z2At4~vk?yxm6FyMD?6c)La z{`=1n{@F}*Y^KqKPUc^!JWi9k7XR%%ih<9@;%HKFxyYx7GjZ7om-$;jowU~OO$7B% zC03oSo00Dqk|88da!7K_w7%iy9OLA0PH3&MbKK289~wbE!BOQozl-w^s1*1Aq;9F5 zRSj;zT#7G!|Bou_wP)`mVFdesOWD0}xf_F+2xQ&=s|X~qQ)2ImIimy*2lKqN^ZxXe zGHI3fr!TA5M)tfvebq(?mU7szP7b6LZaM)R$mo>tmnpn8n?TM<6|?_U0{R0EeZCl6 zzjgbONCd}l68@Lw3q9*NmfyI$gxjkX_W9_Nl(Kk#1%-@rmshe3ipL+Z9{(!o`rjfN zenbFW=RPJ0DrZB~@Wb(E6&w0qIuLm6;!n`|yqli-#g~5m&$~R@d-8PA3fnR6KSLTB zyK>Ltyxl-myjC_$G4$?@FWe2&j6)emutdT?OREKm42)nG@n~}F?#%tiBGwNdFn-SZ z=LS|!_UqQ$sk^Ob+|+hWMT73O9(I!(oaA2X7jE)%+JzGfcUxU<>i6B$o88n24vM{2 zlby`&&!drNvnR?(CNehig}&vFWlo}?{T(o#EPhLx$`&B+IKaXW2UQOY7C*(zg#R=1 zq`F$oF~c2T`RjVhifjPGkBLFgMrAq=S_l0r3M64M?LOe@;075aLXYGUj_Y179^!9Y$?kA%vrLQ@$SzI7B3f^;7<2g?iA$}-TBH~Qo|n0j+?=5 z*7K@|@>m&uwxLgLY!8hg?6<@c#XZ#O4IiV*ke7aD5Jy90_1CiqH~X0={W?!V(&)kB zl5r|1XZd1pk=XM+Rx6oH=v&A2)dGQdC7j8fT%aOYgrLCMuk4(M2Frs1BoO|&<2jQ- zRA456^8$%gfN0165rL$9m_|t|!5) z#LVujKF0%ua!!_PH7QQ6?dU34?D<(!h7gOVLvVZor{@!R^1(l{8zx@_$8Id#~W|wst>L zRQ*^G0_>F()7ryp-WGs^T>c~>hmAXpivn0b`LdARDVV)vw+j)`dLjVXt&(CZnasx$ z{%-VbAU}EkUagCb+}yi(hiF7bSQh*HZFB1+<*&S)>MFE>i9ISv?UDo0{D$c#JR04( z9wbp-e5fd0NzFML|MMKp!E;n&7j_dfL)F_ELKIGVjAYwk+;;|K2C}f9IsBoM9w*uj z=Cx8O|E;JC@(jTuo1naj8R^>u3=aF9H$ui6cGJGO=eIT-EV1p~y$Hy~c@<5;$=}?A z63(bmFp6C=;jfy5n||(9dx_m!iu9<1IbwGK$tC=k%eb<~I!mJYM{$@<_yd}XCXuy3 z_Cd!!via%_#0ImD@7C4=ML9WjX8qE|3pc4VVO_V`oP)B^G+6hcY?iOtbz>B@K2Y2U z^8s2t(C*G`Yesh3TS)t68rqC>#uNO1h!cW14zh%y~4=FDN6U7xOJ4=;hE0NFdu|h$_OHW0aLPp{;mgr}r z)+4ocGjMfsFas{=Q&AVe-YmQZ-#0C)-4C*l5{eRlvE56q&+v4^?ynF`F5-jJzC!Tf`) zMDdf1Io&L6et3_7`rn;R7|i%Ml>yn@2b}v>1F=0n+(Zmn=7-+%CB0x1BIR5WT>!o~ z8Xq~D-qDLLyI5xPT!s3t6J|y-S1c1opab@K{7p9<4JyvrKleH5fNaZ4uTE`2K0E#3 zQOv*(Iz0UDxWIPkx#iOFU2=`KO*Krz?=>G)!=if=vUS3g3@8+110P-ND#w`LoGChIK*NmG~4PlcLyyA zpzfk!!J!uIyJKZuibE_DkcvYrB?{CxPJraln$?3R;YAP38MZ5FI`wU`?}!_L6Yl(H zY0wk?=Y;<~*7~$Ur@MuI=M-YMF4!f@9Py#w8DQn1pLiN)1`+7no3=U-1-}(E{v!o2 zgWGBGdYGy)VBQ*xvb_K0OUPD|Nydrsiew1s87|_Bl>I(}a{;5TR!^v%Q=24DnOZ+p zymu&GpNscDT)h8~Rf|+f;9#QLv{;wmXAQSlizO-lhgzi{1*PuRB}}CZjI>`Bdnxbk z-Ac6X8=d1WmE{iFt=5q)A1fS)f?LJ7`~OEf9gR1e7d$R4(SEEyufe3!!eO5w|Pw>AN=U!ka(WKaiP)IXPr zx(HF=AjGq^Se=kiA&zqjh={^cNcOGEW{E(#k^a^yTbBeV-~tu9K#!*ao$Uf0n(1Kr znFCaCoiq%eYxDn87Af2V^Z#C8p+L3Wcm@K8Own=OjV5;7B7KWKcH1b4MS{@3jm7lT zrjf)9my*w=)ag=MW>Yfz>A8swkl3qj(xOw87?TXKKT3wQ=(pH`^_48+9AY@zktlzo zl49uFZ;IjVuM+CnCpT<1*6!3Q>xW5EYYv;Ju-2M(2kp;AfwfE-`6)4)Gf%2oL6?zZ zTt;q_S+(pjl9485q~BpgLp{AVBVzjuFOmpeXxSZJ)+#UE}ZYRc+BOd3uJiRMMSGwG-vW$=}ccm~f zqGo6#rN6I~+MlJAm}F}Id&!X6CtXV89ZJ#*j+Lm?e&AxMeUrgpJ6d{{N`kjTNJ@H# zFiNu|}f8Q;qUe=kTPVo`A!XttFBI zo<@6H#PC!>p88ruPDdzDOfqu%v1C9_8+P}ii+lI3J&eRUtmP$<5-eHRiVe0A?(<6C`oHh(2) zOii+xN|b+9)QJvooT%@xtb4R@sy}^-Q=WSP`cc;dbO-2Z5hRtrB>mO-0&XDA$Df}9 z?0&0ZSbla0E@{#C#oD?2d~u}wgi`r=Q#2zZKTlpaoP17p`MEBQpKoj7;pOuTm+P*4 zmSyK>RvJI%`{v?LU5ANq#}>5AR>=4jwTU{r;{y;H(wW*v&8U?u@e4cWLCFKjb?Y%v z9sdG?9G2remRRtlXei!2l<;pCdzf`yWV^0^0lWv^<~j!hykNq*Mi{~DNM0;reU+pq zarlF)VVnDaD~rb(K{#4U-1aEJb%Sw(RltUkdTBD`w^`P_9I$T?B#W-wS5J}qVDsgy1k{% z>N@&=fs$l5}i^ehwS)Xx2lY38& zH8J1!zC#g-Ex^7nE?Yhh_bQS$8l%Env=0BlgJdFN- zNI5G0qDuxeb6{@a^v|RjdcYB*GD9A+r2$_%->@nmnMR4R(~8 zNJx(h+2ch8d>T+-w*_E5fMdx1Z&Hk-?*B>^agdkiY&aR%Ypo)stoy$TZ_T#36mN?o zzs&o;Ckwp}*7Bw4TAkxqUbM^J|4s4FU{aXdb28*1AkLh5nTLRm)|gKo0&-m-pE1dV z!b3o|uO)CF)-iI?A&hSekM~6JZQ*07XSkS)ZwqsJ$cxeUgAd^C-EzGNC&?qh2TC>5 z$LQn12k!9XJ{5eR(Ubdp@PUJ#+*g7Roao7YJ@^3L>M0jdy;J!hGlLK08<@)b$rT_!I?`LFJmw(Eu>HeDpCI}v=FOQd-9b_8c?>Q)3F)YL5q-mbyT2nIE{9>HrR zsKz&$-_6N~c}y>vFY_bwD3klGUwny~*4N%z%CGMRJIVYWu13t0gUS3o8k1>t@A0NG zEXBz`McR)dyQH(&o;m+7gl!t8o$|R_vrH>RiJJIbQ*blKLf|JakwoJ;7%Mx7z%I@e zIGkv_5tR)*IG7G$;6hZMi-LoR!x^GG_UrwweR}skJBe(02uYk;-OR`Lb7h^xfPCJS zfo)q&mV6qRDR*r)DRRghuj={=;&=wD4Y#WJjuzYoi+@uFQQ>^UR7woa13tTu)#BSb z2KR>8>h#7?AcMv0h=d1%^x(~})Py9uNYJ{Kz=`}PWZLP!O7liYsLm$Tv30Qc-3!QS z?LM%3w@hc{=@mo^cF4L!oFeTuesQ!|g+g2wFY6tkf-bG}#bR4HJy}Xd|F)Ej`uEae z;8oH{ve$o-AxJKCk(6kKejo-0>nu48hJu_?aIR5=JC%^AH!JFOirTY~iMXf-WFaG! z5I7k8d0K3>+Axrys#zDhWq#?DDL7N>G;JE2f_17R;X=jmp;}R3SVXSysR!I}Y<&Xp zy}Cr|ZJjIiW-(LmKT1aaXB6{x=8srKzRj|-P(jO;bEr|@=n>+jlEVmWxwkmal&44h zy*7SrxrIVpg#Ne#RPd}|@}DHI^mJ+`hWki5GdH_YC8Td#%8Fu|MJXJuHGG}2(T{+b z8XmfqRTm=7E|J-yX#PD$ltWs!LQz)`^{)hj|3`|NNd|S7i~4v6wZfrg*J!ajgakU0 zwrt2P^A}maQ5y>8YMmENq5Rphr6lZE4C8HmU$`Ds*c8hzQ*0!tAhN z#9&N8mIN6 zF3dm*%;PT1To-1yt*iK&;V%UuzxjMp@qbfW)cQ749sOq`ss4XTX4sDYk8*H|7!QgM zQXIAOjB3OmwJuc(OGv?Pu=mB3_%EDj(ne&r^8}Gl`lk3v9X>V+VKF|3&JmQxdOv=( zC`(kOFLH+Z_A=G3-4bC%>~fW2oof1&-@#h&IT3;XZ)X!ZtR)^6!|o}Yutg~Ne@FGU zA7_DQFS8v~uusUG&#BPEG6$CabEk@`$sxTRq)SNpjjLEW z{~RUFB-2IqOGbXN-MKo@MK%j9|L@Kc@r-Z)yG;;@#7k2dJkw#&|CCA`R)7-=>uM<@ zePpx?bg$hk(vQw}VZ`66>b=c|k$!Z73v<6LwxxMDIK7zML~Q;#g|&X{0@b>heyA43Xw!NZW~>7vn)AN+9pwv;D~yDp`E?54Z`$~; z3WSX{f4d8Gb}Ga84K_{p`^Q>W_!k*+#>LuV{o%xx*WoIk#;?Y0%QKK@Koex9@ zg`J&TC95M15-tCRM8#J)M>(?}+QNpC;Ofzbuqdl>?zjnANxJKoc9=V?%<z>O+ zRv&yxn3LzVVAf!@wn>J_>ROk%V^f*?7nc_aVeZ$&fHxbM>e)|n_2{EjX=0N^*E{WS zwq7~wCub)qXCdW`Nv0J?xt#50pVe)QxUk~r)p%v6*I`FPJ>8NpR92FnK~| zI$SRtl`BU~G90}i8N$)_$&QS|sT_TLhH$jm;YdS0>urv_nl6c8CtcIGYLl%cJI%_@ zuZS0uIG3F|mz}XLJ5R}k+!0Vj*=cjw(NIs5&5r$$Ds4H`ThcQq(RSr%DLHz2fe7d% z<%mf}Ko3ZU2-c2%N_T#nfH{1O%Q{^RK)t3?iT8tSQYm`m+@lAb}IOy3KTxiV$$ zW}?P)-evAIm${cXF;eF4lifj!0$h1DWd!b6bf4Px?B{X{e{fX3nc+l9)lu3}@rW*(l{K zpqw$uaQ4602f!SlALjiRoFu8(nuHZcY$2DkkH-sVMGj{g>KS8mmZor$o9=ovP-C;YG6!)k$Od zl`4~rNS>Aq5y@5#{VI~MOZENJC<9VG1bic=dWckSRH_dWh5hkb89PEQ)$uOXf6Cn3 zX^4Fi6&2|aCi*PHHwHEd^$f@@ZS0W53@XyC^4L$#2Ih)9&QQ*nWaP0&GDIGmWqKe( z?!r{g&T~0?wuIv8+h;IfRFhE8Ub%4?N$pvZo}p*;Ds%lPX3bLOHWM|<8`Kzb&vKc2 zRVE9rNCr<4=9pxd`+;PLNS3+GouA5Fk;_~UF~s|}7z}uQ ziG+GK%PmcRB{72)8N+@a?_7^ER*7;JR?e7YI6KPaY_AOZBDNi}q!Sf6OIR7XitN|M zT1%=wuMv6t^JI|+lMK~wNQTH`zDxBSm+IXt@(HYnrBvHUb-Gf$L8&syQ2o41^*I^8 zrLOnNQo>OY@uTPr^c-QLugPG*1VKVQOXW6HMI=4DiY!7g>pPc;NS-@MM8YJ)+)a`p zBAMYbr|TStxqRVO^!J;@5bvuq7~r{-P)|T^X(}R#*;S+hWvq`b70zZVXG}7jz03@p z-M~c6b9N(TKeG<|T}6S+&wKq^rm3>$^pnq-R?X^2w>QmKlV-}+R}}rub6&R>QMs^u z!VaDPYBTJ}2V5RT(S6oLsSx+?{MC{RcjCf*Rh>s=HtL17ea*HrcLSp8h^@kze5z+$%r%*WYHSgv9D@M4#*(dWz+28!?XW8~C`vA;p~|1QdHpbl#V+T62k(2y6MZar--({+lfnBAd7{|Cec2QJ8_u*}%H?zNv0SAeachlwaPwn1BK`fB=f%@`U>Z5GQXdT%s5V>B=i5Q!R-j%qCwd|6>ntq zmO#q>=OHl>@#6ZvP{M}}mqN6|ZFC^Sb= z^5Y804I|`Tt+9Z{It9|%G+ix~;ejLWGI0x1pV!ehN>;`1n$BYSI6Zo{oIk<%agx!i8PWf+91T{a=BGB0I70R%c3;E zSP@WfbEp@0D0TQ_#euxsrGBn2pvOmHN}Hbjn6+NU48cgahe{9t{>B zFBJWA1=%MM`lke)INzTXcd4^Guv^wJ;t#)4MGqF6(7@L7GbtIV&YdpMMQ;1_xd1o0 z0AFwc?r;GXy8y>HWZFn(jSE!j02RFbd1>?qK4nXd`+4Y?i=cZ}l@#&+K+LiCFzneb zu7k1=(e_td?KUp#51KvU4=Sbc*DInr;5IX$mn1{#{v!vGf1sG$h;BY40QpC1dmN=z zvVOr-TRY}|j#UudTtOUhM>iKaC=33sye${Z)DCtwl-j}-huK{Xu+DYLYBd20fLzV4v*3mhc0Rg3l6J+_NR)%vPiW`SE~ivn4Vl3Sqi^j|mDZo>&IdWj;OE-eca zfDd@c$$mY-aHi&7%iM%{Hy+-9BdPhNTHPx}W_zrUF7`CukEIVtz@hP;m0Z71tAySujrUu( z%=cxkEuG~_X{J5aPbIfN<>|kx5S5V*SVTT&r@w=fPU8F#jn!+{a?v zOsP|%{c2H)Kaxd)Y>&4ePZF4CKWd$w3N+vX)w)1OrUE_Y0!?s%Uc5-;Vw3xo3pC0F zx<3`@8!piE1rAT&Nd>BRf$nvI+8v;Rb47J!p*~Jv#VOGxuxRCBoQx%~Ds<9p7qRJP zUa=teUquuN?`GbI7uuC9=o7mtRDUQgP@#INLzPo7*EKYOgArEOK3p`^Hr1U<)yJm3 zQ;_>#K2E4I$*A1dT&kD2R3|!A`S5G`4i<~|9d;bc8XEfIMzVsPj6($Ucp_|$ID>=* zv*=hZP>$v+M@%vt{j1E8Lyu^k$l-fj6zeV`IXXc(8gMw$kmtpX7V7BAXusiTRGN&s zRYv>B(U*m=zyDZ~5t9r@%Uq7W;Br*taOCe~5%jB(>O-$m-Ak(ZO7&8u$|OVe;02Bx z?h-Sva**|)=tH4Hb!7U`uT=X<^)^B7|I;y2S0)*%t6i$+yHrnisCICxra+?N2fBqA z;(fga1HRNCAKQHrv5GdsI#>_oQpW+`j#KVO++l40%{$q*;i_r!RLNWLypa>q&4 zCQ)JTwWEc(?FIuLLX(hZi!xP9wldq}r?T~yTVc@KEy%VODs$f>YM4rc8aDAFm${E< zeRXT%eVMU4%snenVXjV@+iWo4&BGFMcPs6;p_)#$p4r(Yw-(t}FP6}d+(%=CIVKs& z-6nwF zNMd#sDIsScOc%~7lrtt7&R&uX;p|5o?^SHwGWmBn`>sSqZ13a?XX6~sG}KdMbCx!2 zOFEdNKg&CSn&D~;nY&h*`w>xN*mjw#c9}cUW$uJj=023Ut}u6{GUs!c(@@W0+i{+@ z@gwPAj$XJ7%pIcd{GoG2az`q2Ofr(&DH$TUW|?q^!CWoeIFei9GI#%Ik(^~P4Bfa) zQ@8;FW>>iVWbSlju9>Lu6t>IUu`YAJmsx-?_lzv19Oix_QIXuK%G^GOISsjcmtKY2 zYdA}{NdsmOBxkow6S4halyKJXa<)n`L~PSs&c5Vu=D(dqKEZ&0SgH1s>WNDAN~Ovq z(^wx&B|Ad(ewhu3Jbo<;3(CWPibHi|Hpx)!Ce`l?a{u3skh(I-Q0;W7&UUF@=unjj z;E!1hpKdb6GVE5S8lvq4%&r$($t=!S|6Y>u z{tt=D&epFb2`k^~ZtF^g`jvsY6j7KYzM<4RC=ZJnjyr;4WY1v|2S zK2cI-M+F-^8J-{9aB%x**0?Vqy{4yvH@r($ZpCM^;q7-3c6r7e=Ou(C3NJ$rj_%TW z|8jEHM^ObD?Rfwof!<>%MqDCOeaci`q=stBOXpBiye`Uq!`WE-jb~kJK@;iQ+T>o; zxmn}#um`R7dJ|t{@(sK^;KF<@H`ct!PKsf|=>s%;*(`+E7>zB}Sdqq>G&T-5Y~ZCT z#oj!XQ+yO7-4F-p~km zUsusKvP_}xmAtX?MLSldSL5u0yyF7Jo%SYh@zf|FpD} zJdML_pcHWM%K_d>oK2<*N)-5j7*qjP+z#*nfv*){d;D-F2wlt!#2>OQW`0~Md*F|z zS~soDSgib_wE(p(|(T#`bE= z(%3%6QW|Q1YBLT5dNK6K#RjurK#3i^`XB1R7ZhP(69xYik@TCG`6 zo8GrI>3zpiz2CJ6ck6Q#MC9jx%z}HYV>n0q_J*|1=wl{|IJ2T&wf#@CLE~J z5~&6gd$X5wYL@VyYT$nXctrPpsN%i@(F1TcWG?$TE&I2R6gZ+~Z#89?GMbbcKoa?V zQDQEbtcvh|r3@St!yPN4$m&GoMRHuqI$EjRWQe|h2GPo+k>GpEJIcz-lIq`Jfc`8| zd4(*1qJ}mesH6_`noNWP7d%wh2^7GX-}OD-IQ)Db@YXj0RrtVOeY;2DrY8uL%-;^N z?LrWcHuk&TMvSwz&I(|RcU?pp^(hRzuM$dVUMcg`QHF|ak!CD@K|x^7h-I*t`p?m? z9<(UU6{}Dvy)jMUg0HeM6aLEt2RWHS9`?c6jnq!2V*3k8W^(y|k#XSUd_{apI}v+3 z^xi=4k*p#vHPg=F7Do5G!arAeW{XV#cHEOCdhZ&i_iaVETbFfrP;Cfe4}^t^3a zKzo@%62{ZOg(9<1_la+hRmN1#{RQD*@wKE{PGJ{z zZo)c=jeScS(mq+6l%FCxkbfuHPWrdv#&$W3mm;uT4(Ywi()+dnzAOQ&HC;ZS|Fa(@ z3NF}+8%A>E;;73$0zCm0x=MLRWh9B-?LVki8SC@w_gJoPuau(~l5jxOZ!i?peTVpu zM!~1ZV8VYVO0cRwjmW*=9NaO~n{vHUJlW0Se*|A=qIeC9`yZ6v_F`aaq9;){XxfHc*H-CSZX{%_--SnBvD zlUcX8@!$OYWMPeUo-JKN{5PK$GOqvTL4oq0sMM`)M4_IJXXbXMt7pc#T|wh- zFv;=C++>q6hmALpAAKJZ-j|L66*h33%%b&C)o(JC}{D=?1!9;KW3i<#UHa*j4^-CC*GUs7GPu0@nEM)-1Y0r4*K27@d97_v;EZxx|p*{OHi z87ALOB@UDCIKOPTCV_XIXKg0F-r!k_J1Vr4w|Hl_3Y>)y>(v;GAl9!jDS(%_N-Y1j z+aRbtojVcJ&Q=QP9fSH=8$OrnkNNEiK&JFh@yFc5cq^5QGm|zhZt|D(m=TUSE#1q1AeU$;tc*<@IO(VnMrFTYwJLNp9AA*LvIs zi;ETX6}kEUixz-N3pb~L;d>0YgZf(Btkbnx_bTvLU0}uS0JjnN-EqK$bGL-T6Ssnf z)nX>yOiwdktCeOP(khm^%%?x5f}$GYkD(TU^D`a}lVTT@1N7^q4a)!ePf{~a;Lsn_ z1U5$Ik68*x{>nxEZ1%jNLJb)1Cp5GL>;ZdIj(M^lluYc!*5%jYG7^_+7?s+b(cL_QzNB zU^e^(d$s(wZj;|{;=Q<|W3m{kvsq-Q-cx5S$Rfzws(Dht_y9hkKZe**U;orbUCAd3 zmWZTM_GNc}NmM2f@J;DQ{?AL95&CAvh;kGqdAC+7m6r^M*Gg2r%M8A6e_3e<6zJ~;=mLrA zD?bwcrzMp>3m*}lq?rtReKYTECchktZU(&d&Iy@(GoztIW`<~EA1f>nJJ&Gru77dj z-;2_)9;R`wRkjkEcL(!u(qG$8Z^g3|1lELD28;g_^78s-9$SJ!sY3=wV8K!F3Wb~S z|CclbIpIpnnl3!}4=@!62#_Sh$-~y?k#XQX_+Nm*a9Hy<#L)G8T4tMR(l2~5z=KqcLN*1*6mMH$K^g;btu&!x~=Sz+) zsVb)mds&55g4DlUtH2~vg+sRc{Q4C^=Wu08yN}T1KTNG|O@d)Ye`QH-(j%Fe* zdYOjvK_&CQsJsdKMDaMrlK!#0>C~_v4ACU?>bxz!lvt6lh6+T$}Wf76T3d>3~Hq(rxCXZ!`|6I-3$_zZ}B6`zTCj|O7 z8)%$-LkJEH>%Aft61jR!CF^AmX=a$)rgc_RY2=_zH6xsV}1k0ta3;j$LX-sBVw zVmWKp@OYLmt_%32f%6wxY#0p4_(Tp@=lX>ltj_fdIYssta>iMoWA&2xmry3jf^L>m zM~A!(_HiiIden5V_}h|W_mQ2i2!89iLb;;_6pBlE+q?E%<6WD$7-^r-yVfsFm|sbv zNq-q`93Iw+%*Q6%^xoB^_ianbAr{rT7{qsR*n@GNU=wcW7|4Zy>Ig*d+K0+J+EkKI zu6&hhgfRdM1fVY<<)B?s6o@JehJrUY5jd%+V|6QGOuQLa>O z$tf&O@7iN1uHLoKOXM)syC!54T~Y{cWE6sT?Ht_1yT$;#Ys9SHwe!eqqE9NB=pu{i zT_Xf!f(HjwzfIldlA=?i5&}^shyPASxH2>45`9{(VDdkZlk|Uyw|M6`EwD%SVQ4&% z)&?9XxRy8bT%i4aZ2OJbn~}d%@~hWl$&Y`$Ej%uJ?P!^C!eJ+w0c#`yj#|l4LiYOM zauX2n7w;-!wz%9FvaT*5m{ii+JC`Cay?3g%Xzy&3{INU6fhm-`YpurbDw6nE`Th+w z&TJOiUwRp9K0~PQ>!e0nI!UtO?M+1cc|_S{M4bj?qM1CzVHU%W#tv)jkj8u>1oP?y zJQrf&Jm6d2}~U}%sZR#3tA2NK7Ct=pu(uj}UnGUp&?bM=GZ zj%S?GpSQ0-EiV|#-)!aYd=G#BINIS4j0i)Zb}^`(DNuaI_i1DZPu9JJPWbQnD{u7M zqLL3=KVqu;_i8@CqC7DFu8K z$#`OWzrxS6;or0Ve1srARg@Ztf1>dF6mW_Q_)7)+*haig0q<47e-1dTZdAa(+JN;6 zxI+OScK{*AF;`b!Te)QMfjSgn_jMn)-*|9QF#b_xqPi$vy}lD3^HTs4OjegbU-nf` z9jr=(*JC=i6|(gOfsE>@@1VlS3zP&#$!9Y5CMv4p)w`$m*T&zjj6ag7-d&j-eI#AoiP0Nm z!c-BPLp!xTc8PF+k6$HD$_tEIyc3O79sdya_I9iuFHKxD5a=9?jfe7DPaNs#ytw3Nf&Szs|k%eX#`64yQO7RsS==|4I zE_P+@QsBl@F#dKh4*Y|$d=Tj7Mv2$@De}YKy z9gBvl<^ro@AQ*p+MIO>3wR!Ib6IJ*c=f;5#(J98f1697RD$z6=T45z{G!Do{CKxd?aweqk-i7yqgZbdL&VGJcgH!?5l}?oLajBXOq`B ztPjS=6hR%Bn!!?z3&!7ptWbH1tBs;Lk&L7M5CuQ15RBvNiElqhEyZUgt%;`UU~Fbh z9A7Q{xF-I;GQ_C#zK0?#jmA4QkeHPs8#G==KS}%=K(C%s8~;~Ld;m<2^Ry-^wbxom zB(y9vn=mtbA>9;A&j{EAm)71}Ms4bkJxoJ@<9L955iJrNQp9~lE1)bUbPd?1+j+ZsrEZZh`zn84tFlZ(Pl^w7O}drczTf8g^7 znjW_ZMS*7?Zl=dAK0pg#vd`4)@oqMHdX*-YdlHlWLc|7(kJc>0V}12`-r{=}558#7 z9i!Q!aI^b&(*NgYSn?0}1tS)3iGmk-^Oo$^?4RLgN}BlyZQx*S;{4zR&&NuE;OkQI zg~8&RGyq+&?qY)_{ns!hk-rc(D2eJJ4I|8xGjbav>7M`~*p$;&+oJHV{xeILzwoSN zj6ufW8K08h6Xo~Q@;gp`KPSH@$?qxhTOz;X<@a>?{i6I%kl(Z9ccT1GmftDzJ57G4 z%kO#eTPnZ&itOMS7s>C%@>?OlGv&8RerL;XKz=Wk-x~RyBfoX>J70e5<@a*=T_nF( z$?rAtd#(H~mEUFZ+lXJhM5i`}QE$QE8RfWdX@ZD-2VQ|?}LtMQaxSOFQLqBKeM+|Le=st$N%@73cJ8&yQ?=kdMhVTHD?*JFNO`KmGXk};t zLyZhIF?1C}H#0=1chmP7n#~Zc#(|3%+RxB5hF)WcPVuHO=)MO|Vdx7CoygEd3?0Kz zJwrZ*u4m{SjM7ctVCW!2I~aP2p@$jT&(Huvk2CZ(L%SI|9_H%6E`~}O;_gS&B@F$9 zp?ZeyU}zab-(+YNLz@}mO!~l03~ga3#?YM%UB?i|gab<%dWxaT89KmF4MOeVmT)K< z_BDn>EiI7--kpkk=9syq@^X??rRUnLd~tdXe<=#hz4Wfl~**!nyOH0MJN_7 z^Ti@7RVO?U!=(_bYK9JF&t~yJb7LxHlo^snz=f?%89+0n z5_l$9Um31!h(RFf9A(X8LCB)YwDz=o7J~*~A398;-e#J$eHa zbtPNABRVtG?lHcAsBGA*R5nOV(fGC%Fv4N9HgKFH@1f`I_S`{ygjmVJ}o#p zZ@ZYpGEhSUN6?QN&2Z&g4PFi5`iRO%ut-VY%1B2vToqY^5=)#Swv0F=qH+Qmjor`^ zt_?-6FIyIBxSm>#>a(7Z;M}&*sty$<>c`$A$$?OGK~o4rYZ=C;aHxG&q$L8OhGR2< zVMRNPeWN4^a7}o17z0Hn(l$X~L#S0X^|J5{rY25Ot)l_Jf%c#rR)CL5 zak<3jG%usL%a(yd)}^gI+!ksNv(KN7`z_%S{9M$hlTj%7Pgq zQbr*am9ONjCh~R|s@37yXx9ZC+a(P^(O5fb7mJ#F;ILCfeHL^qBc$Ln8Pr!!T*@#z zX>VTE0aJ#d7QL}?<_%@BNLtoPXmK;fRWzqi3$^bnbG%mHAqw7R;!MKP2juc4zI10UJ-h1%OgXw{gRVMd`< znAmwlO}>GcZg`09LL+Z-62?l3msu zTN!FIn$`xTn}wAS08K{;w(1zufYfkmS}Za%rEHmRMSG~NsktF4e6E!t`Vx~=7io`` zEpKUVYm-`qR)_5znWRbWI@;Tz)uwQnZy5)dsEl)li(G?cJ60!9^4W$2st}Vd$+=(} zEf_C|LWY7e?K@caG&Q$0g8ba&Vpn}$7|5fgu`H4yr&(5()oa@@1J@zbTTaJ*=?9Q& zJpnLQcC2hga}1?|_SMCl({qO_(Tu?Xi0jaII6H4O<;zl-hxVo9qCf`PXdQcn7HNl( zG&8m|R9K3HmqpO8u4o5st_Fsp!sKQJ?Bj|B;b@eTm^CtOMT#@y(Nbs}udLFGgQGBFr@B?`kv1&eB5ho3N%icA zs7MfetxYW%YG??z#iShgSy?9Pk^!z2(-D|#ET~sD12^nhILcD!5tWoa)`w;SsQkfO zpp{FhG-nB@fLAw!Y6?($WDUE0<_2nRtZZzYuMjkL2&Pu3kqbT=;aos$S7Q%mgV}XuO3jrSIIu}0grg7xgf0!L zMW~mlC4@K4^m3O1@Jt$}a|Glsd#v%*4z;ugvUKpo7QAB#j<>YK$LQ@ZV3BE&ov zMA}?9s)?v8CACIP;pP=hvAN69gflZ3o7fF)VXf{0Ovf;84%d3E;kB`Pr%-Ju)_~Pl zWTgn-%tfIAiY%2AZ7a7dNL8=O7J6 z#RNbxQ_7MH`WbY<9g+odS#nqighlk3in)0W>Ut=PLEj+;Sge_x?$c}uH$(HQTg9lQ z{d@RK%Lgagh6>YeH?#Omlt& z&KHPdJ}ppvgiGm^87H)Hjai1mi^5rdV{;TkVl*{TSC6W?!B$Lfo1OXZf`$-QIh+mJ zD>F_!YeAMB&G?DTf+5%D3?pp6Ply5TO!i#QiGX}*Th~yG_P#K zszqEx&_Hey==``6&K;Rkp?Oe!4;VF=3xl9rlFlEA2^Ud2rdS)BWmy<%_pVzjTN|-T z<+{jr8lqhtw*u0aBQ9%avqOO%qK3)Nki|I%Oq1Tw5?xXgS{8=8b1hb-;g&`gSAPR) z2LBl2v(PV>Vci?XT&l5b1wEf-%eW*DwX`*bblHdUusrONT;_of323L+RRA+&bx6NY zRM*Pj4!w(RJb1;>ziodB>e7G#j74g&yqVb^4qdMcW~9)7=?VoA%ske>Icod0gzC)j zjZku3acW0*z$;teJLcvX2%zpQDRq}5$MXSR#j#ik;@Ht*Gta!C8jCD(ZnmzVWMsi- z9HWj~!EPN{ZAN6{C|ZW)JN!{_Zng)p9VN?jF9G4(>(wdq!DwJr!Eqw$!}eV>Hqzkf zV|)R$4`PES1eO){!<)7;v~~geCRXe+0}tAMq=rZ<;ayj)7*(i}*h8XV=ZD({m=(we zDGQJqE|nw!9W|Gwdsur>6Glg40x&EJuCe%`Tsc5))s680c_HR+tbo*X0_~!i0tvQvdRcHWjdC*B4G#$4v*jxcEn0}ozNhx zqn2l48gVAgZC`-__eSYX9{S5881dV+WJ9DKXl8!^Rq8 z;tndVumw=&;%cuvYc^3J?2BU}DiQ!!*pEd=Z`H{fx($ZVMl$XTyUPd-+72r8*3k7L zd-ezqT{V`}5l`%~*qtPdSt#tRX$%j7%vxcEqi^opM=gWSN_az2`<)#kxooixL`xD9qRO z=sc~m?W6+{JYqb`0wr{-ZTvYhL0iD>un?T1_WX=fXr~$M#3k_h;>19x{d#FkQbOy> z+{BAmw4&K=0dEea?~S{XhnYqJRYVHTsH9`HByPKB+04Q=l_7|otL8SC*ASQ%p00S|Oq5?p=DF?dItXqw$skl7c&{Mm7o+ew@vv|z3Pe8z9W z{gu_S*#eVn+YP6ITW%0zuu#Ua|C;W3LH&b$zi?X>N7fxj!VwaBLkL4tq8DIb3!uAg)%bb|Y zk0@6g)m)};DHC>`!#50_j$gq6-JXRn3*U$Vl6zRRrt`VuzzI97-rD)0#^#P_*$w6{ z_7ICMor5^52~jI_37H|3!E5b=%|Z_IYD1w6EkOOi0kBr;LnBb)Yyeyq)$gS>DtPij#x0m=db*+#hd%pB=rOYF2y02<9Q~M}8wcVFni)L#s!9Vx>MhI1TZpN$bLIv?d|ozW_u*i7BP(GwY5-oS+*E+4x+on@He z8GAk*IK0P=P5Yn*cJ0Y8+(DRSV)TuoHbNY8H^*VPvO~HahZLy{C-T?R>YzPr?d)ik zM9giX(sS!0X4$zSjLsEmarX}}Ov^zB4EEfwhrkUEw1Vj>cHh@%1L)#_fevOI!BbbZ zuoWOG$Kk|CnU)Ocx;G_PSHy4{!KkEUfC*C!Ok~eAIK5;P9!@V=NGNJEjGC)T|KL20meN0cuk3CFo8`?KLoYdcg{knX7n8Rykh6rbDQWnwV?(ev2X4K zFM1A+T1=9~`#GtECa=tP9!PBiR|L8rK3Nkcp;NDP56sk8jK2sN(L2rQPa00U78j47 zIA`MJ-lH;5EL|A*>Kh~vCdElQn?i7prnu~vtieF+J#_lX>#zPRRz4E}NI^+pY_gXq z+9sKxOEMp8S*%;otLaR^8caqI&!)6AaYl5|x%2}9i+xvP4Y<6-8CaG7#dNhbdrx4f zGi_F|4pTz-_*-PnBeNCn83T8vIk^phlVAW_CPi`F2J)6R}r@@Z{#!wvHG! z-NU}sQ>RtTn9@+16{?c9R(HSwUuknEDU#jcaCu|nx`}hLVG%!EwoEwYvSq1r&g*xM2qR3~M> zz{N>>hn|Ir2ZnVSm`W}xxmq18B~rV^zSZYa=POF*O+D}0hH2A%#>Tlwvf4Ls(*S(V z0$H7mpZG)rkX>~p?2zOQL8CaQ1UZpfdqvBV7$4h zKAEAgsreqq*icYUrtP^S&o+M(=c6jB)o4N0>`BJFrzhJ~J@5@!TgV2$&@ygThH@Ah zhn8TX1M4Vr$((RU*f$fiXCG`)`wb;Co7-{H1=IS;?UB{Zk;$0hwBN8y5-*9A)JICN ze@zdKJq}D>CO)IdO`(-=6T&W<>X~68E!$*ztb@8?d{=~SK-ZA1HeY>HxWp4L@j7sP zvt$M0P!~Hrgs7w%TGC~z?5&ja{)UN0n%`|?J;)t;qvsGO`%o4l=ulU?gJ#KUKri-9 zn>=Om6yMaz{>fAE%kWChaqEA6vC!14k_rBjAbnENGktPrPGxI^2dzqKdDwCi zM3gEfCYRGD~T?p4#%$PWf!_SZ#@&%wAIamguY>Lkky;G0a@TmxtP$x%y1WTa8i9hUIET zA`RH~lxL`zV@G5U!pYWWur%NMD3G^=dRDVQ&c__Hy;aw$SqhB+1S|G*G;-_@dL4l{ zhwxX2!!>msc={@H4(4M^mef}-s>iJ+IOnqJs$jhjrUw1d9%32IytweqS)gku1Uwx$ zdqIQQ?sPg4VPd99IkCHkqFfhuS~_MDe9R50#$?i$V$LvlIZOROi+OheNx@qsVV#==%y0(` z7Qmten}Z%dwwOp^5xJhm%3Qo2I}T|`)jyj7gGWpryf&bx34PiG>bUgHs&tkmZk^n; zC9@o3%lde%XBuD3R9_Yxcv5wmr>sD(r_C+6AdKj{KX+16t&0alidc~Bo(u%3)`Rw3$5K8S?m^%tf{Ms)s znX}+3EYQl=**RLM4CN~@cSa!uD=>4em_EggA0yHyFJEm_ z!K~K|peALWhglQk)Y~0c1(k9{?!i%mi4B3{oZ4Uq7?%JlFBY<684Kx5pQuN|LJF06 z(`{jc3dGYeeTvUc%SnsORyl_-#%sxjX{Cl|E?Vr^5IoEzIin6l#RnC~XXV~BsSzOI z<@rHS6&yndxDdmMj%F2fbIVtW4F~0s#&DqG+!nHKmAy}yQE5_j&h~AM_f@dhWEwBV z`x<=SWt`E_)zhU-kdt$v$BvWJkLIiJOXnLN(Y)!UzKZikNEN{I{O2{ChbEXNJr(`a zw<<;V?HHQbV@)9=b_~T`?vNcDRSZL$eaxS_3*%yht%^#m zMR&5(hA>1DX;`#`t?rphcr`VRe}Frd0Bt#Ef$QhyA%2+Qi#Uk;YtjW$|Y(@ z*RC?pD_zXa4ALoNSBWjvv<#Fppa8Ed)Q|y@o%V?ku}WG!BasZH=Pba3WmI1W7By#t zQ;6}o$_-V27L!ynC(5mE-c~{%M@P|S%gAI3+G*1XpR-kmGUpi_Q*~czE0dN5;aGN- z!IlGr*3NE6Y$51r6KaNM^iC!12+W18INvkwUpt(&6@!7^>Fq^+nsR39`ln8=!Gp&-ol|#wo zVFl9{OcBwup)_-JM=Zottm%zwxCJ``@X0D}i&MrqpB)=gWejpozYx%z9R<*mZyJuA z>E;s$SH!pqp#FM#S}K4uUG)gr)04%(v)MdddqfC4oy!C7;Y2W(N#i)}>47x7iwT=H zop2TB+4D^u*|~y{-R1Im^VUtDa_uV9Yt&pC;EVz>NLgbAK6hFsWTwx1J0@p!=gK4s zV=T?ljA`D%s?p3LOl!dPkHV}JTA_R$D(~PLzjl1%_#4JIu0uz{Y|yjZ&?TnK5-Vk6 z&P*7ytgTIM*43rS7mru!l9D+(Mi{Ze9?nu+MeaB^hWbAY%upAI5^?SEATwK(;p}z_p12gY3JVjm1mBq_}+JU9hfn0QdRv2r@c4h!=JtJ$J%9e z4{H4Ain``kr|y~X@q_2e_2djiamc&&^mU*Pji(FIFi2fd`eZ-#K(_x+ltYx501n*H`u-UjPWJe{(Sg8 zsLyv2{_zG!-$eZL;vMh&;+6NrqWrv2-YC4AIWKSERG+U3iTr=@MwZkt-qYnf&Uc1y zyN@B?krnva_i10=As}8~;v3cf1z+C4nLgjZIlfVKXu*nFUw+$MpYPCoUtaeTpRaoz z@_&N#U;6U4fa_)C<7*jh?;yV@&)0oIUS7r7dA|Rhmv_Xe z3-aj>ost>>Kg;xJ_ENQ2fjN1SK6s`bB#B<0k_n^<-&ImaC=99 z??kl0Ap^HE2Y(j@FGaCHW*BnRAA02eTDL;A5PH=KPA+@kgSY7RQ&wcEfY zVH4!apy#yD<8D=a+2$>$1BUjw+rZ)TTY6={NBg|fz~vhEUIyIu5x~(tZyf;~?emrq zz;T|i*}%<4-;gUqJvITZ`!o;(B3e)&W@6zuo zzWf~gy$raL? z)XS9t-|4UoWA0XbfgE&e05_#a;eM0@E(W;Xdlc^LIpFR9TuHCOotuNd-GD1KaBN4p zGSuTB;3^DUE_=f7ZrJ$#U3)UY(BWDk6FG+}Q8>4O}kyu;29>xIhkkFC%YY1o+tR_KyG``T3iPrLkf)`3?B{bYM~_i6q9GYi~Az_2|hJg9JI!Z#|HjW5G^a|hx1 z-9KE-qtoC`l8=QCS9$rs0^lGn8SymUGl_^JVX-5Uy@YutzduGhfv z0}yiA^)*rQ&w7@;t@s`>>FNC2_1tUVZq5OBkoewFd`oh`ortztGy*uz<+d2Ov02)e z{L!zn`CX-Za*q1m3b^&}E8MrU@RzNEv1$Q7@MoxF2P~ zHyl6vO!;i{)@fc%e_nQJ!Ffs`ObOzUYgEv#Zr5<)0xQlYYQ4jYTxJ$CYWz!?phy7x|DStKUCYRmbCOTaC z!^K*kuNwGl^;!C9g?lgu9P4w~z%}H6yB&EIpHY0TjW&R3e6xP{Vek#t4%#x(-hjeo^G6Vl zd~G*yQ*+>B``Gw?kOgiyz9$5gpY>VF+kCG#aM|pIEziRSZo_8`!hchq6(QwoJo>I& zHXakT`3fvkxVFOVaFpkkRSNe_1Lm}|2Os4*rd{Dy=YXTWFEwzv_Ss$rTxnGCEgEYO zW~c|(Wo?@jF59|)xOQCMspYfH3v78EHgGp*so!vP&i|UyIXX*uo6fiqz_DH4GyLSj z$9DOPf%B*9!|aW+S4#b3yZpn@9vhm1Uon2US z?gX^Q8TjIKcoUcU11{gdot6WR^S+NaEB$afoT(S_ao%^~2HP$-pg3ukWQp+virmpJ?b$0?%^U?U@1oe!!2tMdcYw zhfiyN%9Vbqg$aev)t>ZI%`|ZK^eU76xCn5kj{sjI;Kq&s?pDBkZ0eKEKgN384Y&^s zT&{XN2RLg4_(qTR`Tjlvd=mlpM+0}YwvO9>Jo;M?xO`LJZ2G}^dTY9dq}6MdQbq`-$d$in&iP_i5&Sk-5({ z_d0XG>i=u+UEt%Ys{Qdvn$nbK5DMiX4)0>2O^aX!l%#1(3vC*kQp%%DCYfn6G|3Dz zlQu<>;a#4N3KAZAM?t7ufv7x+A`B0)3Q9ncs(=w+_3DKniWLO^Yn}C7GyCj0XEN=z z{Pp+AX;0RC_gdfm-uvux&ffb#Mj(43`ynrayc+WJkU7XZA@7BJ7;+=zbC54W{tj{k z@-4`k^CdmILQaM}2=YkCV<8(LPlj9yc{XGhWD@d|ke5OBpCAU8wKI#b*SAvZxzq0W%Yu^)0HBCe{nPX+*6{a5KB(ll z^P%-z5RL2T2Mq@TJE9zxS><+!k9!z)D$DsFB>xv8-;T7(hrcGx+>cxCpMv{kmizTS z_V>VD%YnRfj^}*bU-R*2*Nk_34u$)ltoWP(cRSpx;C|eL?)v)>+@qHJvvB{c<^CGn z?R+@uLh;vjU*+R|y^s4tKJKr;-L4PS7fHCb`++|0$NIRR?BgExabM%(ew~l|ppW|x zecb=x;~u!!JH31PxYzr*e;D;91bLl>zXh!FCzd{ddZGIHzzN74qsx4>Qdr(udb`#;Wd57K*WcJG6` zUO(I5ev8$PGjId&a;VJG%UMk`2{cVwhNblE?zBzEO|DdFQ0qk|WlA9{-XIbuf zxF;<4VYq)1?rY#bFYw~D1?gm2i+sKsc6K|^e0~x6yV=NR_MnPAF%He2mUrFxy4k{Y z{}jEpj~wc!){}a~ll5cc{9*==jq|16{5y{Gxve~XmBjBNZEq;L5xC!Fx$j7mK)4Cn zYve7nWR{{1vTpX0g33U?{o!{4#u1NTQQ z_q*V3hxwny%FyW9NbZ_BwC(!{Bb`<1)C~|AmkLg?#K-+(KJI7uxS!|ae!Y+TJwEPF`?!xo zJ2?)r-;&z@t%v&yklIha4tyBu*%BZ5INax<9(6ztLcRp4;T(eeKO0iRv!%xGR@gmj z+5cbfr}aKrpF8XGW-VuKlV0Qg#Jy5a6aN%BJW=jXlxIus@A#efjTl$!ec#|T8F$1Xrczk>DBYaeclry^KgF@{_Fi)ex}&}5bj!!8)yPP`}4)ig|Fl6 z!DGe!xpm^M{tVFs7qj&o6UF^^uvdTD8pQqHE5-gS#530OOR`xc?RL z(RgNQfiH(Ug!HO=V7a)T0)Ny!3-=Y4d+>Czx1UoD!rgwZH4OJ8{OLvf>(3B>{tNCG zz`X_TL5eG1*XwZ~bua90gdN|n^0;sc^p8USHABz$?G4aB2mKS4z7G1$&_848Cqw@Z z^#5z=gV0a z>E%C{uO5?k5zOs{-QPmJ)q0g(A?~d6YL`DoyX=QQ>aU;VaQI#OH5W@djz>C!v;dgH zu-hf?QNr$@MZW0$c%n_*KLYnceBr*pavy~I63cxE?q^%>BXGB$!_AKEY@&0Re;9|RcS@Z*pVnJg zDSr7DxKHA(cB4toH|}%nd`rY6J$Am;pCj%^B7OQiG6(k{`NeVT-^P5<__yuu&WAw@ zQxML<@#pYjc6qH5cfWk9Lp}xH=MG1FE&a>k@N+{upMtdU0f%AdQ%hXjJFIx+;cnNX zwuIQvhP}SmOq?t3YvGaSn9PWSOgdA8(o z<@~eDbtozEwaY0>6Dm1uJ_c|)0Dm<6wmmDaR~-I?8{Pd)4&m%HAntly9D(}@KIt6x z3D+;bPVw=_Oq2PW^J{lH?feQ}DEVTygSv~v{i>TJ9Xg)P!TrDBuJt`|nb_Y2cdhS1 zxIY4S?U(B>7yIwRUHkD2+`ox@y%F`TVV&52-*Rt*`yFuCcxK?f3;h3*`g67T^Nba4 z?iz7_$#PFzEAA!lYv69zvw9l9ahcigYlc4ue=uIs^zvd;whz+D*TF%wcYR;;fYsh} z(EktOX)h?D}UX}W5OZ9IJ(yPx~vNTbf z!{KuZPLtb-aMq9Fzj8Pn9xvPNEPI25@eeW}^?@mvO zJ=Z0+*#Q05pttLF9{O+l=r=oZ9-d_4*!wxDm;a9M=eSQi0{zBfv|}l? zKwt$h+wh_DPX$Sz;MJe@S^ak40Czi4zDjN{+@8OBspONsM`%I6WB0QoH%r*|bH3~s z#Qi7eH?%*^KPm2ZI_sYj_aKGMOPaQz-^t!0@i@=u*J?>02unI{f&MB>Ukm-+KKeT7 zpM?Gy!Y(?8`G;|6eQncv3OTIU zu;rg){k!D5X3JRrF8T5A*uV2wX>9(5)YNs?NIBW>bI0aiNWR$bo5$u~NWSQJMEkq3 z`4^HCWAiU0AI9ciNIs0szmWc7Yv*I|vu8fGcK*ff)_qpn)Y0#=__>vRpA~#s?t|?6 ztjv(O+xJ;@&x*S}uE_mF-0gXtiRZ=Lp4T}7cY7XG%TLALp8qxocYD6v&1*z9{9iuXX>>2K^Jzf6&q|hyEwf+s{*5pda?pQxu&0k9GXRIJ6u$ zqWrWR^GAA@C*ObYJ^4Qnjy_M!{zBYY=XGEHDC$f0C~tp_C^*C zc^llBJb;sb>!IOq*^2NvEj4<-{D72O-AfYw^H%-WaQdlx&5yDBHp!2% z`!;vI7@IdQEo5xoywnT(zHn^byyT1h9ARwUytJFKdGnGFWAo;vog9`IIW})z>cuau zaqHxdlpl}txYg^vt>tAI2ix~;gTE4Y`@XH^6>+!k+v-Nd-M()dhP!>=*7myC+xKmG zxZC$_!9R<=ec#sbhPap9x4kLuK}t8z_ggp0eOm_lpZ}NCGyA?R3;hW6_Is}Z=*Q)R zZ@;(dhkkeH?fbq2^oRK9DGAPfAKw$1ht`7(%3te2|8d^+!SB8wU7zZGjW1WSW&xe-B9$%7hH2;D%g8lOE!^poaKK_dD z#lIX*EuD7$4I&&n|MI&^_y=3@YTHfRzle6O@BedfKgzNnf&14i`}#WZ=cAT=2JU&w zJ`eXGrGeYkdX!JA@~!vSgV3*l-tLb!K;P-3=XZJ>&fS9&&kc|pAvZz(!NNpwp34mK z5984CYWtYGUQ9XBjkCah<$khH`!s@b{nYw(3DT+Upl)|b7aM2k0TiF+q2VlVaL3QI zF@I|~`(a&`?)yOB&2`$-=~le+qxkEW{*{(LW*oeJbG*3UxDV;q`Z|JmZG`*rcn(>& zr^NTya9;rT7PxQ3y0j&5&%ixMVQ`%Ds8@dl|7_Ul{0XjCZ1+#po87-&EC+6%tTzu$ z@A5`>Ipi(88JN?{MQO)>$S3}FlO+7}tbCo1{qxMYn7{qX=QEZ+CdcbH$Jg^ZiFn!l zQr%t>-;(Pj+=JvF=i_FSL)VwZK5Ui4F!X-UsW(A?F8E1{KLY(Hptt7%ZGrx3AAJD( z5Z(s8Js#Q!{@u{q{nrrmkND^*3!JgSdj4S?T0UE>@}1x0u3t*=E9bknp`5+0-UUzMq|dJ3 zBXGCtclKzp4^rHCyk3j?b1?GFu77pVPxsMJhW;ba+x2e>^z)#%>t8+er~BxG(0BXj zDG8qAbsF?N=e$qBX?mspBu=g@K3ac{K)SC&{rLgXt@*VQdTkFH<^^!K_YqM$byt6; z!CvdB`ZFKypGNrVu6F9K{iN>Kwc&gzA6>7n`^@Qn1@A(y_dB}p+gC3Z-h+_OKyHHk z9psykx_(3VnLFST;Wt1ogw*v*y04(_BdGhVy$riQK>ihS9Oh&13V9Hu?w@ueuTA1-(w_z6-yBy{>1Uc$vg^AIL)?KM46T$de&gK*k{Nhx{(&i;%BC{t5DJ$cdLr zczPc&4fuG-7^Ln8aW`-tatQJzNZqGlJobIq337MHLm+2C&Vf7y@=VAGWE}Dm$Xg)q zhI|B4_odMNCSHg8M2!FUfcyaDQIH>joCmoKvJ>(G$g3g02&wyB=>5gZaDM}GBGwBX z3i%PpIgn>Sc0ua;qKkk(4S6S|?w9d1-~jdsI~1}RvJEl?c^>2gkh%}SoX<;40} z-+=Bfa1Qjk4qexsA9#cCbUm=HBfbspk3s$%QrC%2!Fth;L+X0l5O5cyu9xly*7e1= z1OGSVcOZWN`7-4HK>i(4*U=q=^=EC6mqLCXQrB1Nx=dY%sq5B$3%fTVb={?|pU`z? zx}Htfsl~C5WIwFGI0AAS=yg5ctH8R>^zXnrKjeLwCvrIC z49Mdl=R+=s?1VfIQuk506gY=<2KPWd4EX}&8<5p_Ub#2qRLEl>^?Bw};3#AQ@+!!$ zLcR+5XUJXfyeSAd19C2;u3J6}xF7OLNPQlr&$;yZmChfUo|Afh5@Z-M1$hPJ7a%9# z`N0}UeSR|ld@H2h=hxysa4O_n$Q3HDm+*fK{0ih>AOp9Geiuj`?_CZ28OWO;Z-aaQ z@&(B1+r*yPkbi@$`ig{iJmexs9T)cle*yBV zkat6V6Y^2WjgUWw{1fC`kh|P2;puor$1gfg(s9u(u)7EH8ORYx9p~u&_KI~Me8rbv zEa55EeeV_P_X8B`KK+WD(QhhVYGK`vU-ge8Ull)U#aH_W`}+v`eF^>Ug!28QewRYO zE1}=jn+&_5QT)sJ?Binl*MR+Gg7~hEtyetYv(Jg@RZfOo zVif=CD%^izKK7T$kK*6veJgw3uo2-?&%*qLmQnl*R`@=B9m36x;@@C}@0T|r+>ufI+i1P- zwDUvpWV|PBSW&({^pEl$QT?l{)UHv&>l!88z-+M_9>uPu!uJh>@UQ;t^68y#Jr~#X z*>V8kW=8RE#OJxX?Ozt*4#7YDK9_B`*?N9GAK$yM?PkF)=%ZKrp$eZ9w^V318P99| z;-%pZz%D;Z{Dv(%{a%^+qjCzK%ksNPKKQvPANsy`K%l(Ppx+7Le#i`D8)OUQI>;_a z^(P0s9&!+J1LP)4j>gMbe6^nf_j<@#khPF`$c>OgkQ#m$a00R)G6T5|G7G8U=785j zZh#zw%s{Gt>c57k{;B`AUU}-zCipi1nS<2uYklR;`6H!r9DS?&e@eB9N)e68ER?0u5{ z{QKSR>fa_GclB=z^!I;5{CN)Y70A~h{{gw{H^pv$$Z3%CAUhy0gS->+A;_OXYW!5* zv|9ZA2jmg`g1@j<0KNDWuzz7Ggrakj$uW}1&1 zE&C5!{%x}K8jda1zq(W0<+*W!SYCIB#FO_TG!NDPXuarp?y`BP{+O?dp7#Vd57nOx zy&wNn==V3t^jrDKQS<}Qzu$*{KlFa-+X%h={#3*N)hPb|6MBBPZyw68xl{6o=Tw-7 z>JNwBFa2|%-`6D5Z{>%e_e=j*px?`f{}A+k<@YS~di_yvH2j~B!hdZPea(NDuRr^Y zqMtU3zG)Qw8t5l#!XPz$7ebHbQm|6}70~;Y|FzKXQeest<=+DR;Xe8&pg+V%{|D&( z>hB=-#q%rw??FG=$NypI{p#P_(EHWj$#<78-=m=Si{BjRclC*1EA)Q(za09VeE1RQ z{p$Z(=>5v?a_A56@&9({{qpB==>7Vq=b`tD|F1^z|6S<)`k(RlNcj}LgN}4){oD_F zo)=;ss{bzZy!V@VsQ#%@^v{l>e*t>G@_i9{-uulwH2gn7UuP=mx9Z=4-mib#0rP16 z%J)#{{n9^m6#a}*^dBBY|ItzOP0;(LZz1%4{ogX^clOD@4(R>zHx0dC{mnq{S3fU@ z-miRbfZnhFnEG|8-+ukqJm~%WUk1Hj`{;(=FaK6U|8bxE+X(&MKKfzk_wmuc1-&)B zzF5DZ_q#sSVI1z4{vh;z_4_dB{l*`2px@6Y{%z3v)vq4t{jN`!LGRZ;UpET>F6iy{ zF@y{L&_=00w*Q)(di)5UERR;Qke|l5Q0-I}>`#R~i^ZQJ^g!Zsq9263*x08UCSzhO2gY(> zECECk*FWU~G6t>Q3J3-Q?e<^WGDRE9(4^YQqB00^JBXcMNrX=c5 zmtT_|Ys!kEUG37@Y_N>7>@??B+tG$+$I@hpWR`X0@UQ$Ny%d z&QJwp6RJ7&iFz{B##l>jgIuUay8of3p4GJEBuiV=%w-?Rf3k4?HY}NIw&k{4sv9#q z)t)-%)cSQ*iQuWEJhicPe%s`xL~zMgp3Ly#*zT>fsnqM(QZ$5zYsiUvo!Zv9iP|Mp z_I`iccAI@R^QSn3DT%tw>65vk$v>(yTyJK#I=%4j4WXvSrO9w_YGpjxbM%}Ak!Wu^ zmR=k9cyd;@A+&h*$xWfAg^jJPp+m^9u{YKePRHWCfy~C+s!H{L$@VYKw=ldm-j`k!?hSWFlYz`g84{VY$>0m>Z*Ies(kLv7Mq=Tm zv7T6O=e)k&4oOf;shyKAVd%@mb-}z?cbdX2@nOM&9*T1yQ(LN87VSvKDXOem)znBn zbT5iWqVwX(HQ{6=MQOPIT}cGz4Ow_ZdTuxsUC_(HmeaG<;=Xiwvx32b1-*&BbYpL4 zcl4C#S|N$s-2ODx4a;#!I1=kiS&pq;qm+)8c)UB1S^soNeQ9o;-ParGro7I+qh)VrdUNZ-c*iQLb=9SsMSbaT zdv~-koleHu`_j=!EB)y0ELYo_TbtwQ*veRk(;}KEZ@B7h{D*(=&3!%XY?G9wJba7P!#Jy(-ICPxJ?B5S)Nz}}$WNS~-SFVO59e#<-<$o8 z^Ov)>X`a(5hI`XeJDa-0snn9_N{VD}2UVX9yW~%woSn=qt1&@ko_*IS8ON;~wRKJ` zGCSH4?};{2ey)z16`7m7ZM!6zigot-+0KjirV9YU$cU6fM+=?rBu9;%g{Xi{hoJu?lx~^t@O! z*%D57QBU%eM&aw!CT=WzoiodmuA}cJ)sW|2bo*LB6X^ zFPFdA$7)VA)sc)PoC}5jWv{vQq$G8?)B#b0_V9_ciLO{jiYiY!+V2GIAAel2%EjL? zSr&_~p&Iv1^(i;hT$*8Wy1DSy``9jyA?pSYBd>*DowQH%5#VSBub4iOT7DH=C zGTz-SUX46eh~$=;rCzp1JNlB*rIa)CV$p8uOE>TCVU!N1`%<&R+{6D-y(=|a$`=u; z0)0JHO$I%#GmgQM_!@~>W`_r<>+tZV7@2|B3)N&KQ(q_LOewmElBue)mWnQLG(aTIfG8HmI~nB!End0O@OHg8 zw#4b~VnM;j!Di(KOCV#(O)P=t{}zEd_P7x34FfbP9z>H-*9(r+f;lB^jr9(9It)*A)~x#w5qA z?dU{&Cfg6#Dvk*aoJf@`sHmvSFxEps1k7S*(X{aNfa1yi8aHGuP@Fcs~+o4irB$i6VQ%)gnaVzw%5bck{o3p(oB=NlW@0p4NrqO^EoO-BuDSAsV$KaAS&pz}N4T3t*i78QFxnq; zGAvU=U}bll?hi?|j!{pvr$f?`1?-`b4yy-%DWe$X7*f`E^duOruhHS44*eGKz@IdO zqM4HnuUXoaj7D3+$+TSjNx4Ck-1PX)lk3k;t~e{v19m#5shL?ak{UtZPMt4@Jys%irF{FYk~{&RJ!Gc;I`j`leH_V;Tzhb5bg&hqi`;xwDC!ZONrte+Xb zAn=RvO9OXJm=jKQIb&PvN_t`K!obE_^Xm26iAw_SObk>P;&SCUE!@EKH8p`Pchl@X zj`-Kcc|`nmMEt*NtcXA39r5pbNBnt;_&0V~8hF+>;+IpzZ*)ccj}-B*?r22(@tQ)! zuO43$$lWuM3TUJAcZB{1YH)43Z2UrMOIF7GtyafTKb+{~<YHI@PzESY@=^ZR@Z??U?c!GNSY4P?BFK<6b-VTztHGxge-^@4p z_j>2=kn?wo^EY=d2OVzbq3pLOL<1L7MRFqh)C8`=fxk|m5-@CjNjB@%<~6Z-n`}nN zhO+xU{+oCHZg&1=?`M|{&fj7BOJVWTyZO;>y0ka}Jysj$Qqj`LDC(4xvyv$$s zGQW$=2g#gL>-^1ZaHviTG<^N?L><(>K!o+)M&BzKJxfMIWJFEK`I~!?e{XdDjyQh@ zzQrzi=kI3cZ}!_9vOJxl+i2(R#fZVJJMs-}G!l4zN6MA*w$G^Tg%porwjIYK+P8Ns z4jCWZ$sU=0mu%NPq_%hLRJ47h#P%t&9VA=IHRo^UJN$dS^LNPkyT$pNd)P_0^LK>) za%bZ1ET)Ab+7aHib7?0tjjp^siS8(mGUkW*xm+@E=gu|sP{+x>$Jxt{z_)f@9mtdG zrr)ybu=97b^LK>)$}xOmLwzDRRNa!V8XA|a8m=Cy%2qct1nV?VKH-sm_yZOEip39IDCHj8r8WvQ;hgKas6!t8c5XZwcmi$W~>?<*SGv3=Zwk z(2%K0WNWfjM6F8XtMk=^HHjRB6Rgix=l7{=8LXyDh!6hTLBUQt-6w-vDs!UZ|Tdq2{L#}GDDmX~@QN#2z zzn>}wC*;Vap@l~GRTPDhi6b1tJ#*y5|8nCSf(`X86iqT3{Ln~MUBe*#q$p0Os2#xE zO!e?VLllP#CQh7qU-eK;(llMZ~}r1!PoRsEOhNjpxObSV8hvoNiiFRKwc_2Bh9 zCZ0xk<+!TAQ+IyZnNQ36j!vUL!Jy20y_WDH24?*sbn5(A#?AD{#1VGHaUDrByk{&t zOxP>@mY{@xGWo^fD`u}b`~;nRFy`=0%<<0$MaOYrzGC|6@Ja0)jF}%4==jI{VR9f5 z_&oh#zG8Oc@LTu?9W0n{V&>N$B)ad>Z{{nepTcJ{9gH2mg9I}_1O6NIoB4{_p2PpP zVb6TUw4FyF2ptRB9>9fT7XFNdAF?oq7vVoRUM0O*o`=vT&nBKl*sDAn4wkfih4h>r z#m^DGL_H_TL2>$q5GD&wpNTnt>JAm#D{I6*#ca>~ES-EP-^9$%fqw`1ik08SKMcN! znIE8r#Nui26)S&;$#gJw;_o2A%pU^(uiz_IejWdyL-{6V{xCH-*6m4yT+UC$?8fPD zppy^A9DV}>Iv6uQc!d1^5crB&UkSer{0R7pFCu&i2ZTfY3mTZ?V`7d^2L3$-{}e0# zP>Zklf5~3`Vv}8H!H$V%SeX4QSD()y`v`l4<6OdC^?4BS{T1ms{}r?UoPQbc8FP9~ z%;~NFpydBvw4Q_cirJp|3I0I`3+9`c`MIg0I}?1xY|s24oqRB6evknjjG3PY|1$6u zv%V7kF!tj9QyN>iu`2n;49JdVhlYB7d_?npWe~>P`tm6^5Q-6Tj zjrnyJ-^5P&)eHZZ;OBvrpC>=~V9ep?8PLI)`I#B=yP6ijbNGr`&*3-F$p>TRH!z@s zu@gS{M}VIPR=#5hd*++i;m;JOrOF3ZeugM~FlK&+0UeB)-*B}2{sj1nS_V{^9PR=-Cf`-R(_D$H6O}1G4qE`5Zxy56)Qh$m7j^3-*%$#C(r^!&VR+qcLFxT zH?hNS5dKG$53KwKEBz*Bey&OQA@CI|-%M{aIhvUH`31uNFYpyBzm4L~2V>^9F`$Dn z^L1U?>)w2~cv_OyZPqFeF414CAn8P1BS^NruuUPpbHR1td z=9`%L`NhKT0$;K6TdeXoG4tz|2>&tg6)Qhz@lDM9`lZ4@fEEC9`V}jG#7e)3nIFWu zz4O3Vtb8-So5|6{%+G@VIq(%L-^_33o0$2!Ztx!P6)Qh$#oxrtZ^Jsmjo>R*ev8F7 zG4pjD;%~rLtb8*(j=zbSuj?1z0bjB5&G49SV&-SD{&AmOQGbDzpRnR@V&(_1?r{$I zij|+W_$GG32fs(d2UdQY#WykYb=~Dn;44;sy~Q^%^MhD-`7`hpE8h&SnH){bd|kIW zkroI$*Dv^|d^0@eo0$27us;QS#g+1h!M_-M#maB7(r;o8zy1tqzuy91vGRi!-^9#s z0l&IV(yv(g$6Nis;+bTxesK`XEqsxMAF}Y@Ej)d9w|`L!-(cZqEW9H-yhof$OoJ_jX`i-}@+V0(#D`2>-$HBIzRvNba$R8y`j3 z>wX}+Ldr8odgpostmTn~pNzRanwZNoc((9=0KVb^pMTK7!r>d3`GXCUvZ`UA@DB+UvZ`U z5%9kTzT!&xbz#ZBAA_%0`7Ks^G%@F28&x{C-2%Si115RjPc@J&AI#zMXkb7GWA-lx z|9Xkf<*AtUTpvC}Cm)QNuXup$gRH>uu!T2Uc%Qx8_VX=#o`t_=VGiGHe=m`qqFy+5 zqYWrbd>CP`_BV|5exCH4Ud8M`r#Ay18FP9~%=y(8mAv>4_==UEu=pls{t);tfv;Hk zb=G*!#LOS=l<;dNBmTh3H~R~YzloWj=o0>s;44->eg4%s7&BjSGua14<@`O@!UGm& ze!22`itMQ<3dc)?y~-;QllacxN7Ad9{pa$^!w1G3UlVhB>(3GXIp8Z+zF9uZH!<^b z;9m;9V&$K}Kj>h=e8qQ@eUKG6p0@C-7G}PgU;ERBFJ}Iy_4%a8e>_5k!UI{q|3y!~u&G7C1`YQ6zjL%Jky}}<#O5Rk{238!tVh)eP z&(nP|9~!=io&3K*bO(Z;1y(-YRyc?96(3LbLFia4voPD6>9g~n%@4)f5 zwy=N9=lJCipV|*d`V_OC)8`n&p7Ynl%pU>&IPeuK|4{y6@J(#S-|lZ#lYeIXFC*+# zKEVqmEw3Sb#Tx#I1Yam06Lb9QE)xE3K}o-2IS>Cg$+#FPHE?4ZdRKw~!xvFlN4q znV$jw_Mn8XSowM4@uB>@g9J0bVV(SbG$?$<$|q;%P`-(o-v<6>QgHeeSIWv-Dw9(_=?${%WsHIJ{U9K#LQ1z zE4tMO3STkXGe1EmAB>rAV&)Hnf8Bw?SIqXzZ{Z(wuwcH4nO~n3-Qa=3SIqXzALJi& zuwcH4o$x;+x~C3A_`qz>{4D>Vg9Y{VEKnG*y>wa0g z9wdCltY>~boqRB6zKNMX{5jDb4!+_>!k0Kq`J?^?;imqXnEeY}C;nXm{}d}*#mXNo{2}nq0$;K68z>L?V9fDvU_b}sY4oS=Ci$HLUoq=B|4*co55~+_d@b1r zS%KqD3;)2vf3fg>hr9Vr7UuBG_7)|5L<1vvvxPSh_G)h}NZ+(6Qa*~=e@z@+- z@4#2A{67f2kbcF7QoMrDv1qpNCoH_d!f#vn=nuO6>$UKgE&QT|_n+$KFSGDxEc~p6 zcRkY0Utr;@E&P~;Ils*M_$KMi`Z(h#H*O}(^|9j~_k4-q(^4K!ke>T*#abS1R(YD3 z%QG`1{I|eYto$s>jBzvlF){P&o)vy@nuM>oz#k_b6!->ae(op2KN)<*%BSc#hw@F# z{KWIZzZ!hS%FkGQ6ElAV{3pOyto$~MZ(`=R{8YjZOqcX4u9QCr{)fR=to$JVpo2v- z{V_3zKlFm=&IMmF+jD;sH1gZw8<_bcKNtSJ;44->4KJL7G4mC_PWC}jIe+)9cjJ>R ze7=RhZs9*zn8P#M$NOiv+rvT&w-fg2ud~09^gT;@ZXb%-f6kvlC-%ksH8JN;!;7N( zJNSx~AGG);W_}y^`^=Q^6)XQ%i?8@NvRA*@q|L(2H}mHr(wqIqH!b`WVXyqDdr8uF z!qE~x#Tvik`3D^=xcp6QhHv*@5%SNB&*g-@!f$z5{2oUyO1OL!b9h`nZAN|N@J-D5 zJNPT%p9sEU<>$x`J{U7U$AAvT%x`%`ey`H-fmzSt=Xaq$bTDSViJ4zFBD$NwSFHRY zhh5~GnEAut{~CP7%FkGQ6EnZ;IsAq3^E^+CZ5rgE8k{-4^-%4)}^$&-?~D`C!ca1_pF6W_}C!2Yf`rSIm0mpF}4gjG3>viR^={ zz|m=8wm0*~zCZso*+-O2@~ecs@+XJ*?SGuaPci$?@jH`$(7}S^XJRva`+59HOIR8w{{6WfDwoQSrSov|QeJlPF*#{9f7T>k-|5}*+D_35@6Wrx>3}LVG z3f4$`ZzcU9je|J_tA0WjwLP~1uOK~Xt>FR?J&oAI;z z=dX~x8NY`Jd&O^X4~gHA4H7@a>_5kklI0wXIesQC7yj}FclhTL_6mOl;s2WSoIi>= zJPtodCm)PC{2&857*C@=b$d$ucWD&9V%9UiflfXcGrxfW9gLaZ0{)4O!dJ|C=GW87 z2V>@&nE4s-yBdYBnC+Qwwh!i;nE6BCUk|=wKVz~33GX0{1^B0k}TqTK$FB* zG5gQ)&CtmQV~%fz0UeB;^zJ3;T?T#~u<{$&m=5JPIH<^Pf&HhzSFHRG?kfc4E54KL zgYb*R^A@g|y^PT*eDfx2+>AAm40JHuO zIx}?g!MK_JWEjxFnE4~H|2FuFS`u>g3x9+#r*FnX*SY$;dl0`TNYCk0 ztns5FbPmRxJ`;2LHh}*#@D*3ee-!)?@D*3e{{i^5bfdxXSFHSF_y-*p+os5X8z(n;U59MV&yjqy}&my^RwX30$;K6Cs}+GGyf~#N5EIC z`~xk%iJAW-_$lxeD?e)SP0akMt0nz+g0EQlW_+8;(ZtMe0RQLUD^~u2R`@1nei;1U zgRfZm@3Z(OW_}9%gQ-<;{ZXuZGrnH&UkCnD@D(fH43GIH=J55q>{;*?E5F@}zloWz z-*dkoe8tK?iht0-g2Oj4^YuIML*Og^J>g3nru<<(w}&+Upo0bbXJYnGzb8Nb z*`E2M<)?m!et+;4D<6-C3gMfW!`JWE&jMeu@<$6_zkA;TzT!&xzgsKqp&NX~%0HCy zfDgu;ex#KODOUcO zPU?&4H!-LGKJbqOU$OGd_QUZvG4sC%{$lVID}Ns=e8nlU4?@S{GQx*ZVuu&V`oLR( zr<^SK3E%|q?-=hF2n>WoA7~Yv2R?xD`)Rxx5&egNM}Rqg5&nZ?5$Sg&+!B<$>IBXM z-v~Sm`~%?ngT($#VBNoG+EVdP_rEz4Sog2#2iE;)z5uNI%RC9J`^EegSoeP!f2#N& zJVL@h2DlBl6yjNOYQ{L{YYK|&P^5n_FX3a>wY2gfOY?mbAWaKj?V(?ei;t~ z>;4yi0M6Ho|2v;1{_B1eM+58r5@#!(DfX8F>;4Z90PB7ZuK?@*47)EE|8>8GCdCcn zUkq6HL-;DN?r-omuR!#Bd{LuAbQ-F1S*CJqDueAzT*I!)@tm~=n0M_+U-v`$9 zO|L2cT#4TSVdQ60@JE4lJt`~V1Sl53XOam`Yude5q z4Xo=kqQJV|;*-F-e&PmTT@Udvu&!_Twc4+f_yjs6JY9cq6tJ!*SO~1^1I_`~`Tmyy z>-_yMss1zK|BsaaIl;dH*7@@9s6F(1Q$2Iif1TJL1FZA8W57DUdcEQs#QssW9}xU= zV4ctWCa}&&-ivNDI6R$Sd-?RYfptF4OTaq6X5Ur9*ZDGM0PFmhTY+^x%kO}7e#hS32!D%& zKMPprU#tMu`3~!Vb^gJ3zq{p>e@_5J21V11uh6NmqJ-!~1o z4)4F(fc5>`6~OvF?S5c=KlYmPCrSE_Oo;#bJ}ClRx0mRz2G;jI8-Vrw#wK8WU-72u zX9#~kx-M{i*7pg=0_*epE?|8geuiLAvg6c=|l|6kvTm zyGAjdw|)^=pPxPrtj`l)0oLb(e+Sm*Sv#gAJbga3FR(suIs#aqADs%U&x7cTUrv1W z`OeM2`n={TV153w30R+}?3ot6J|CG2tj{|x1lH#lcL3}2h)03-`NAe(eLnCSu-@;2|It0jEBf1Jm-hMt$) zF7@qn#yimYfZ&ykCjA)kvmjG`8z8|=@P3}*B3tR{M zfqwCCGVoczLEz5hlczYcgA@MPf6 z00)7e1)c)D>jlEE2VMX?3;1f_2H?kl=L5e9+yZ=LM*Le2+y>kRJOJDU{4{U^c>IOJ z?+2a-oB_TPcpdN)z**&AB>Vy3M&KN98hAbM7l8+XHv(?}-U7T4_~?tp{~_RWfj0qv z1$Y?v7r>i=cfCaTBftxQw*X%S9B7yFegwD{_%+}<;P+oD{!IpM1`YyW3_Jz+Tfp_e zuM^(&{l({96D||1&%5}(Y1a?X^DXSBH49kx-)aTc{kM97b^om^fa~zS?>69i;D>-) zfL{Pk0RI^{3%ujy6rW)6{bB>KzF#~KcnJ3Q6W;B>KwuN_!@$G9Pcq(*-tVlC{N4=Q zf12R&>qNilOu-)l?xzK?RRP*>1b8FxTHwjcMSlzM<}(C;7kK^Yf`12G3q0`(32zp{ zn+d!e`WE0Vz^i}1Go$E*#tZp>HRD42H@b85`HcCCjf5&jsUL*z6^LH z^6Pfs0i^da;Q7EW15ZJIRbM6HC2)OvKkx>`w~6uoRNiPGYk&jjA9JwpLj0cu&LKX( z2M!>-eXo}Aa=^2JM}Rwl8xa1rz;(#qZvzh@|A&F=fhSxe{nFf@#P2V_3E(|H zE#b8wzfJ(25C6{u9!7jGWlZgF1nuoJjH~LX<;eZnSD@bv{oRf}Q24&Uy}amEt9YS>S6et|;cr^_`xbuL!f#l3 z$Im$ND}?_+!Q(VOAGYu*7G7cDh=r4a3;the>2I|3U$O9Gmi>$fh4kHR=^wK2 zk1YHv3)kG}#IHuD{TThO0i;WI7VW8sX2KWE{uS@=7G3+ef;g@0t>p9(IN$Ey~uz1dw}`&xL4 zg-@_>i-jW&ZYYFzuBE@&!q-{&HVZ#4xRBnbEW8_C>G!2`KRWlP^Zj%lKxdH7RdjaK z*+XY9opCx7bf)M`(|IAC7twh!otMygDV>+oc?F$U(s>n~SJQbmogq5g=#0=ArL&XH zbLiyng(T_x6rC5)nW6I5IZ0^z}s*0sh+Lw4U;|?R~NC2pH1@%!#)5b-JD8%aN(0dgIBS zaQF27S;vNs{Sbvt{>K9$=c|^L#HjcQxYYEe@x)QiX9K4Pnilex+4aMX+cU;iNb$f? zXS$t&k*M?a(G{hda3Z1KWju|({y8t!8%uR94AXZ^yXXVb$CYQ$N7ySM(5FJ_d)oTZ z%+tcDCJJ#?G~(sC+m^lyAMWVlTHt)!v#BfG+v)H^uJ63N6B`hv>r0=mqJV*Z`qQPG zM&DD_*p|0j8B3)Q7 zkInLziKn-8htu>W-5#g?FK%5vEdht=MVr<+r>J^H{j^!rQjt~DTi4Q;czdQVjI}4j z$+gqxCF$F;YvRdOsp<3h^Nh~dkf*Iw*Xi?}@6e{EH@BV?jrT;;$+gqEq?K5SbT=VO zNgbA1QPFBFqt#TJ)M6IV$9$K@r9OBYM(8`e{5f82AeKKp@xD}aPJB(TkA6+8Hxk#7 z=sT6Mm9Y*d**^CAc}I77`Srggb+V*B_+%h`wAiQ`B`w&UNbg4MX;W-;Zng25=HlXi|&4 zBnyHa;ojL%`g~`UzU}O)kY!946*{xxwV@<#^et@qer{}abldAxNffkNl_-Mz-EitZ z5F{nHq;i#Tyz7^rS+R7xT4fu$}9uXOQUPy>!7f zPR~+|A8LT7t=4KuqSirAQ+L3&U%p$#QW?N5e_#*?TKzbo3=@NY_mj zw4A?ewKUF2Jg$9hOElU|Jx}AB@Y>^wU-soj6$%}Dv@^2wOiM+cgxb5~9jmCxtd6gW zvX33{#9I0mJby46I(Cgj>8ti}Tj3veYE3v%NWhXfjo>H+OJbc}>80_7(Us|vgnW3$ zzsR$a1Z^LmLo+#Bwv*pSdl$sadM8lNvY1)#OPb|dfHUhq;uF%08UCahGi5mDS?QdM zOgJ5_pp!|*J3G58F-&#EY4p_{4X2{~k?)jL{SSSpOpPgFxT}RfGZIVn#8N4b;6A*S zq)I~!7l+||zqcfsigorjI@jv*y;_k+V^|qAR6y(IKJ7Tl(!TD$`Us?}DLyW^db_GG-9KeBG$a(YMBx*Ao?DqLUKj%qyUoM;of{7?1C|L!I66_HehaZ$~>FpZMmc z%sl!d6%7pK&T2M|{5z9;tD17gh0-{Ru57iP$Az9jVqEB@3-axT#F=A2$nj zR5SY?-#_vg^qS97{BA8uYY^S}dikvPQeHZ~ooeD-a{~72WxZJFCakA!Wh{$*rI*pP zP_f`jdLVCtmSKhFMsZfiFiN&UhLZ*-8@HkZSQ>8cj!N5KkV^GMPomBsu_V6cJ!tr) z;o+f0iK6h(!qt#V&D^cnLm!JYMk1|!?W_6j0}Z*83#9~^=iXT6wb*$dQV$-0^5`$Zr!cq&5aw@23=vBP@Ea=6PN$>mxsZ7?oEv#IH zvNS_0@BJ_WK?CYZ&@F=VLgu|_K2~VBWG-+!2V-ummEP^@Q)ZTtRcw|vW?c5{NEj`} zxp>-oBa&P546l&;+ydOu(QA(7>^!|IT6$e?EQU|zD*C}iUD88ap3rkUhv4)lsYypBu7&WlnJX#e$IG#b9fIpLT+7d!Yg0ksbrRoJ^TGU|a>C-116TbD-r)AM4{ z?#R@I;r3{E0dC(iDglxT^jJRHzj!5w!W}TZp`n0u_-@C_d3`vS?`4Xw;EhO&x}Q>8ctLM#&3BK6 z&TNmN(9C1)fQx$f!>Vn03~UBV<rlHhgdbcpTX>mwe)<-Jmp3=*o8K%A-_IvU{mpAS@rn(y7_U$}9 z!sGr#A~MAl5$Q0K(H_d;#_n#H&biJ>Qn~4D&o~!)StlS242wYr(@q!6O75HG!KyPf zaW2iVUK+*H+tlNnisJ5Rm}AZFG5qZb_qWm|-PL6{496$jOl`y9+MOQEm@vYnb~B$V zwG)Czgf&Hofzeesu_O8dq}k60$q|3Pk%u1PI}<=kbA`gy>te}}qL{jJZJnd<)8JUe zuZxYCm$fVwQCYJ}y>pUW+1Qn?A@YzpHJzK9^Bi)HKJ{jo;$z16{7+>hlRVfa~r zmw2L=R7;=0VQ7te%NrLjPCj;2dwKM|FqSI!px>8lynEVKFX$DxGsN+E2jUy_=&vVy zsZ=Hy9hWpiUk;^|>s?_?zE#Wx5qi>0leVJCZRB^*_<(Qyxhhp2a%X&Lyd@bwhla_s z`{)^VZ{^ffUwg5R^Di2Kdc2|X%`TeHmTX)dPKV`sv32og@-}8RQx_*Y=^fO0&Ww$1 z$nTDLl9IZ$8MZP`ZHVeLLuoHvi4QbQx;t`Q+`0GK8eYtq5Iwg) z5vDn*^uT}XxXwEPzA$VJEh+C1=Eaj+%Un$z3DIZ-)E#Y#clY)59v9onz`LS69cS@M zdcr$@R^GUHE%ULP7NX&4if*MElgaSflD^KD72_-5ws4%>^X%Gu z!=jhp^se9GR5C_CH65cj&(0%98lTgvbgJs}ow-%)#daR4l>~>I9NRr8Pcn+}!l10g z&U(9BqAxy9@U9;=0ai^58(UjLhlD(GXsi2Ty7etwXr~r_ZO@GM4p5#M79udE@JsG~ zV>%dcZg`C;tfhVQ_KZ8_c=@n#`6z2N%0;9+*FC^5Z(DjnDQ{o-Wu57>6mvpK^su6=G^% z;&evA_I z7N%o0T1h%azQrhB=z|@fAo!`dn&^$8l?F4i{LsYTCxgg_75GGex7XB8a?PD2F9Ji9Xl~k9$ zs`p?NmvGIeCrz|&z-gNvhSYf!GY7WP=!?cvjI0b5t?3$E$X4%Ae2G4xN_XIT;8To+ z=7!yA_*!U(P-;NajP027WyV;K!)^LK8%p|zi^lD1Fv`HvpXa{f_}i5qX8Q8HJCxDP zwZO`iL9Ip_Oi5{v# zZhF5~_hPua7cYzQ9g7FUJ16}Oi#>ve&9qQ5*52+jDD<@Nj(0jsrAu0tpLML)=k1^; zfmWN-W;y=-k|&AZWAcD?D`|;vDn(nPM2a-N_DPj2xV<;6w-}te4Hw)Cb+3tbjwx(u zVMo@S6KuXQG43Y*JvX0O!aE!3{6o)F&7=LWQcGxFCvWiK?y8EJw9+)1%_XTbR^exB zlx9K{>q*&MwQY@#&e;XX$IJFUTArFtEnc}W+S{4#;+wl^w45L9rL=P_#NNAM+nM3( zj}_grzS*{0l^)tq%t@i_g;Z%SC~F~YfUu2BCqMZ@QOL6G+&GKjpj8$eXvCjbE4K$m zbb{2Qr1?>S$N1eaD=or;zk%tk@xEk7w28J;icSwFJ9sIr%A=01pEhH9$}yN8fYQo> zt!?Q`8?1bLm`b)bF1?TfMY?=?l5aC%IoWB07~nqnM(7>qLGuLX_|oI zrY`EEsZQPU79vD9W)k~QSmvI&d@)0u6LX#t(q>x-mSzgjenKw$RgBAoY4~A;Oxu6i z9+?3zPSTZtf{CWfq}L=Mfd;SAR7!qw)E02o_jW{=g_AMPEi(%ZtJPsw=0d}bCg4=3 zSZ_ynUnDv`<@CqXY1g?Vb?tNkFbb1MT9tg9XY+0<9y(|9iW2v5A3ge&9SBNvQZ*aP zSQzXjv~5kYcUicbzVziCU&EuVGLDq9PI2^UGrV|jXGyR|>{_VZw#1#y0<>8;Icb~p zr8u{Hh2HN;h?4S}F7bZd^3wajG#cq=iDgY3I=~uPC8TYU@bK922# zwpE+KxmF^Ej^=Si>6Ub3JE4v3gjQG*WxhfG_t^=}xl&0tTimOIA0?0N&D5FX=U|c- z+i7nmXFTDV`*dA%?WN>cI`h4qnU$F8QW$QzUQ?8sxu2$c=(pQ$I>mU89%Z%gh;2dT zy{C**i>-}1{sXs5k<4=MM^d`Y$yRR3Q7i$cDtk^Ra%zO5c0H>#_PE&Y+etXlqco79h^sXW4k)oHOjt!-TGDkPB$Y}jaMT5|GW6!NS+fJO5T6?%6TV6 zg=LD|9Tg|g6#4`2SIB-WcQ4^*<$9G|HWu4sWwsNb(*u_-s~IKPek^yg{j5rp?PnP; zPD~tI`iL$1JPOOqrqxt^x5Ls$rwg)IsBMp>aXiW>%;hPwFwCjF#&bZAY|$ZychfD; zb=Tzbwx#vCyuDdmTEkULA)?0`v_+<>H>64OD{7yc$Ch> zcb=~GPSD@Z)wMXa0MmeIx@#eDSKBxA|JpgHPUs%90t?abzFd1T-0j%Q!Z+Q82|R^h zE1sukW?#`8et_{GJmt+vR53N9%$71{0gO%fanBqw=kFL3cVt41*90e%@b59M5t4$vp~8J#Tuf^HUQvX^Upm z{0B`5a=wCEoZn8vN1fU6-hIbZrh2*};r<*TZ+TdlRDl^(MRTvW*khmAq1mJII;r^N zjFzhXOFyw=)g7<5SO3p_gu||@&T}&JMO^8J2Rtdb{j0#*{St_p!ZvR@Z%3r~s^mXr z|6r@i6`#O!7g6aprrTv#R6BEho-k89$M(Mr6+3U=Y@&w?ylFsT09?}Tmtz(;2G~Zv zK5*d250!^Jw*O`CHstsJdH+kh>G{07_z&Bz&rX%`WUute`q=JI{uOVOjC1Y&R3_64 zS8QufnKBgaJ*dN{&cw4HF(M|G+q`3l9S7gXPSeKLygL&SIlo;4V`mTE!dtGAF278M z{tMT<+r{Yd{A_Hsv1_%ly?AAmB`x$E#p`38{2;~4{XgKVpgu9*w&kJQ#`-@mM-4SE zZ%lS}1VpYzS zsi8HU(ZhgmDa@NtACpQ_?+l)N)9q-zQ*2K~D2;qSt;$ z_I1mhUV0XX?<>Lc$~I+kS$VbaQiD-jxj)5S{e5<#Ny<5I*-1^z!%ZA=+?;a!+N+jc*JQSmWRZmxlb_?j}qjxf0 z(J(Ey4}_w(;Vl|t8~B@hhSJPiKb$my^YQX zx5`*@rRHGf(2MG&UCC&)g;L?%gRm=q@Ut;Zi~8Fs@Ay%eI?fAsL<@?dV^6Gmt>v7I z%E}e`;6glE(5YXv4?)yfmdk!D;1?{kl>lc8FV%IqrPPJ4;H+4@a-~6S;T=2LUvR$^S-p`%2_b=}i(PE>Xs@ksYc$#5h_3(HG* zq)2qdI#PUpPlKNly;trUGh9pTrD7B-N~wXfg@%=j=2j>r3{`6Lrae2Q)p&bSCg)1# zCzOO`Hm@eiuaauq+}iAX!={9}*x3T6)VZ)}N~x+iJG?|!>?TT7#aWf5D)(+vrFv&a z23jgqqM=Kmerm>B=N{e^Yp;EIc593QprJ6n99t5YCxacig1Wv!R`k#{g0!7Wc;?05 zY`<=IS8-aZl5%tFM<3nL0x`~Scb>XEvGdifHFBv`F-nSEx#eby%H)Tf`7zEKZ5o~k zpdko#t|8jKg|6GSYb2IR#8W($;hwFxgJ#)8PwI}hhr1oJ%bmt<9jnwi)HILmX>8J) zmiFDm8^kP$uB1JOX#XD~a)|Wl-cT~lq0$yU#HKyVSA|xFW7KDxE}eaJfhDKN+U^ML z4%JB??20BsE9t5eqVZ1gIT)EZ1FC3GB28P;@FrMpr`2iMbcj9|Ond(XFtLT6g6m#T zGSj8AxKWX>g1-x@9vJq;jg5+4(Zm?(M-BVdzC@I^=b}8IF(G{}I1pOd9p|1tM%E$n zP(~_>WYiG|t!irIal|6p#g9g8YbaZYPmUfJ +#import + +#import "FABMockApplicationIdentifierModel.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSMockFileManager.h" +#import "FIRCLSMockSettings.h" +#import "FIRCLSPackageReportOperation.h" +#import "FIRCLSSettings.h" + +NSString *const TestOrgID = @"TestOrgID"; + +@interface FIRCLSPackageReportsOperationTests : XCTestCase + +@property(nonatomic, strong) FIRCLSFileManager *fileManager; +@property(nonatomic, strong) FIRCLSMockSettings *settings; + +@property(nonatomic, copy) NSString *packagedPath; +@property(nonatomic, copy) NSString *reportPath; + +@end + +@implementation FIRCLSPackageReportsOperationTests + +- (void)setUp { + [super setUp]; + + FABMockApplicationIdentifierModel *appIDModel = [[FABMockApplicationIdentifierModel alloc] init]; + self.settings = [[FIRCLSMockSettings alloc] initWithFileManager:self.fileManager + appIDModel:appIDModel]; + + FIRCLSMockFileManager *manager = [[FIRCLSMockFileManager alloc] init]; + [manager setPathNamespace:@"com.crashlytics.unittests"]; + + self.fileManager = manager; + + assert([manager createReportDirectories]); +} + +- (void)tearDown { + NSFileManager *fileManager = [NSFileManager defaultManager]; + + [fileManager removeItemAtPath:self.packagedPath error:nil]; + [fileManager removeItemAtPath:self.reportPath error:nil]; + + [super tearDown]; +} + +- (void)testBasicPackaging { + // Mock the Organization ID because we will not package reports without one + self.settings.orgID = TestOrgID; + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *reportPath = + [NSTemporaryDirectory() stringByAppendingPathComponent:@"execution_identifier"]; + FIRCLSInternalReport *report = + [[FIRCLSInternalReport alloc] initWithPath:reportPath + executionIdentifier:@"execution_identifier"]; + + assert(report.identifier); + + // create the directory path + assert([self.fileManager createDirectoryAtPath:[report path]]); + + // put some test files in it + XCTAssertTrue([fileManager createFileAtPath:[report pathForContentFile:@"file1.txt"] + contents:[@"contents" dataUsingEncoding:NSUTF8StringEncoding] + attributes:nil], + @""); + XCTAssertTrue([fileManager createFileAtPath:[report pathForContentFile:@"file2.txt"] + contents:[@"contents" dataUsingEncoding:NSUTF8StringEncoding] + attributes:nil], + @""); + + // and now generate a valid metadata file and put that in place too + NSData *metadataData = + [@"{\"identity\":{\"api_key\":\"my_key\",\"session_id\":\"my_session_id\"}}\n" + dataUsingEncoding:NSUTF8StringEncoding]; + + XCTAssertTrue([fileManager createFileAtPath:[report metadataPath] + contents:metadataData + attributes:nil], + @""); + + // Now, actually run the operation + FIRCLSPackageReportOperation *packageOperation = + [[FIRCLSPackageReportOperation alloc] initWithReport:report + fileManager:self.fileManager + settings:self.settings]; + + [packageOperation start]; + + self.packagedPath = [packageOperation finalPath]; + self.reportPath = [report path]; + + // And verify the results + XCTAssertNotNil(self.packagedPath, @"Packaging should succeed"); + + XCTAssertTrue([fileManager fileExistsAtPath:self.reportPath], + @"The original report directory should not be removed"); + XCTAssertTrue([fileManager fileExistsAtPath:self.packagedPath], + @"The multipart mime structure should be present"); +} + +- (void)testPackagingNoOrgID { + // Mock the Organization ID because we will not package reports without one + self.settings.orgID = nil; + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *reportPath = + [NSTemporaryDirectory() stringByAppendingPathComponent:@"execution_identifier"]; + FIRCLSInternalReport *report = + [[FIRCLSInternalReport alloc] initWithPath:reportPath + executionIdentifier:@"execution_identifier"]; + + // Now, actually run the operation + FIRCLSPackageReportOperation *packageOperation = + [[FIRCLSPackageReportOperation alloc] initWithReport:report + fileManager:self.fileManager + settings:self.settings]; + + [packageOperation start]; + + self.packagedPath = [packageOperation finalPath]; + self.reportPath = [report path]; + + // And verify the results + XCTAssertNil(self.packagedPath, @"Packaging should fail"); + + XCTAssertFalse([fileManager fileExistsAtPath:self.reportPath], + @"The original report directory should be removed"); + XCTAssertFalse([fileManager fileExistsAtPath:self.packagedPath], + @"The multipart mime structure should be present"); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSProcessReportOperationTests.m b/Crashlytics/UnitTests/FIRCLSProcessReportOperationTests.m new file mode 100644 index 000000000000..5ed30dbc27a5 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSProcessReportOperationTests.m @@ -0,0 +1,108 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSProcessReportOperation.h" + +#import +#import + +#import "FIRCLSFile.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSMockSymbolResolver.h" +#import "FIRCLSStackFrame.h" + +@interface FIRCLSProcessReportOperationTests : XCTestCase + +@end + +@implementation FIRCLSProcessReportOperationTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the + // class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the + // class. + [super tearDown]; +} + +- (NSString *)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSString *)pathForResource:(NSString *)name { + return [[self resourcePath] stringByAppendingPathComponent:name]; +} + +- (FIRCLSInternalReport *)createReportAndPath { + NSString *reportPath = + [NSTemporaryDirectory() stringByAppendingPathComponent:@"execution_identifier"]; + FIRCLSInternalReport *report = + [[FIRCLSInternalReport alloc] initWithPath:reportPath + executionIdentifier:@"execution_identifier"]; + + // create the directory path + assert([[NSFileManager defaultManager] createDirectoryAtPath:[report path] + withIntermediateDirectories:YES + attributes:nil + error:nil]); + return report; +} + +#if TARGET_OS_IPHONE +#else +- (void)testExceptionSymbolication { + // Setup a resolver that will work for the contents of the file + FIRCLSMockSymbolResolver *resolver = [[FIRCLSMockSymbolResolver alloc] init]; + + FIRCLSStackFrame *frame = nil; + + frame = [FIRCLSStackFrame stackFrameWithSymbol:@"testSymbolA"]; + [frame setLibrary:@"libA"]; + [frame setOffset:10]; + + [resolver addMockFrame:frame atAddress:4321599284]; + + // create a report and symbolicate + FIRCLSInternalReport *report = [self createReportAndPath]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + + // put an exception in place + XCTAssertTrue([fileManager copyItemAtPath:[self pathForResource:CLSReportExceptionFile] + toPath:[report pathForContentFile:CLSReportExceptionFile] + error:nil], + @""); + + FIRCLSProcessReportOperation *operation = + [[FIRCLSProcessReportOperation alloc] initWithReport:report resolver:resolver]; + + [operation start]; + + // Read the symbolicated output and verify + NSArray *sections = FIRCLSFileReadSections( + [[report pathForContentFile:@"exception.clsrecord.symbolicated"] fileSystemRepresentation], + false, nil); + + XCTAssertEqual([sections count], 1, @""); + XCTAssertEqualObjects(sections[0][@"threads"][0][0][@"library"], @"libA", @""); + XCTAssertEqualObjects(sections[0][@"threads"][0][0][@"offset"], @(10), @""); + XCTAssertEqualObjects(sections[0][@"threads"][0][0][@"symbol"], @"testSymbolA", @""); +} +#endif + +@end diff --git a/Crashlytics/UnitTests/FIRCLSReportManagerTests.m b/Crashlytics/UnitTests/FIRCLSReportManagerTests.m new file mode 100644 index 000000000000..87661460d288 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSReportManagerTests.m @@ -0,0 +1,570 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import + +#import "FBLPromises.h" + +#include "FIRAEvent+Internal.h" +#include "FIRCLSContext.h" +#import "FIRCLSDataCollectionArbiter.h" +#include "FIRCLSDefines.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSSettings.h" + +#import "FABMockApplicationIdentifierModel.h" +#import "FIRAppFake.h" +#import "FIRCLSMockFileManager.h" +#import "FIRCLSMockReportManager.h" +#import "FIRCLSMockReportUploader.h" +#import "FIRMockInstanceID.h" + +#define TEST_API_KEY (@"DB5C8FA65C0D43419120FB96CFDBDE0C") +#define TEST_GOOGLE_APP_ID (@"1:632950151350:ios:d5b0d08d4f00f4b1") +#define TEST_INSTALL_ID (@"DC352568-33A7-4830-A9D8-20EA708F1905") +#define TEST_API_ENDPOINT (@"http://test.com") +#define TEST_BUNDLE_ID (@"com.crashlytics.test") +#define TEST_ANALYTICS_JSON \ + (@"{\"name\":\"some_name\",\"nested\":{\"object\":\"with_stuff\"},\"price\":100}") + +@interface FIRCLSReportManagerTests : XCTestCase + +@property(nonatomic, strong) FIRCLSMockFileManager *fileManager; +@property(nonatomic, strong) FIRCLSMockReportManager *reportManager; +@property(nonatomic, strong) FIRCLSDataCollectionArbiter *dataArbiter; + +@end + +@implementation FIRCLSReportManagerTests + +- (void)setUp { + [super setUp]; + + FIRSetLoggerLevel(FIRLoggerLevelMax); + + FIRCLSContextBaseInit(); + + id fakeApp = [[FIRAppFake alloc] init]; + self.dataArbiter = [[FIRCLSDataCollectionArbiter alloc] initWithApp:fakeApp withAppInfo:@{}]; + + self.fileManager = [[FIRCLSMockFileManager alloc] init]; + [self.fileManager setPathNamespace:TEST_BUNDLE_ID]; + + // Delete cached settings + [self.fileManager removeItemAtPath:_fileManager.settingsFilePath]; + + FIRMockInstanceID *iid = [[FIRMockInstanceID alloc] initWithIID:@"test_token"]; + + FABMockApplicationIdentifierModel *appIDModel = [[FABMockApplicationIdentifierModel alloc] init]; + appIDModel.bundleID = TEST_BUNDLE_ID; + + self.reportManager = [[FIRCLSMockReportManager alloc] initWithFileManager:self.fileManager + instanceID:iid + analytics:nil + googleAppID:TEST_GOOGLE_APP_ID + dataArbiter:self.dataArbiter + appIDModel:appIDModel]; + self.reportManager.bundleIdentifier = TEST_BUNDLE_ID; +} + +- (void)tearDown { + self.reportManager = nil; + + if ([[NSFileManager defaultManager] fileExistsAtPath:[self.fileManager rootPath]]) { + assert([self.fileManager removeItemAtPath:[self.fileManager rootPath]]); + } + + FIRCLSContextBaseDeinit(); + + [super tearDown]; +} + +#pragma mark - Path Helpers +- (NSString *)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSArray *)contentsOfActivePath { + return [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.fileManager.activePath + error:nil]; +} + +- (NSArray *)contentsOfPreparedPath { + return [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.fileManager.preparedPath + error:nil]; +} + +- (NSArray *)contentsOfProcessingPath { + return [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.fileManager.processingPath + error:nil]; +} + +#pragma mark - Report Helpers +- (FIRCLSInternalReport *)createActiveReport { + NSString *reportPath = + [self.fileManager.activePath stringByAppendingPathComponent:@"my_session_id"]; + FIRCLSInternalReport *report = [[FIRCLSInternalReport alloc] initWithPath:reportPath + executionIdentifier:@"my_session_id"]; + + if (![self.fileManager createDirectoryAtPath:report.path]) { + return nil; + } + + if (![self createMetadata: + @"{\"identity\":{\"api_key\":\"my_key\",\"session_id\":\"my_session_id\"}}\n" + forReport:report]) { + return nil; + } + + return report; +} + +- (BOOL)createFileWithContents:(NSString *)contents atPath:(NSString *)path { + NSLog(@"path: %@", path); + return [self.fileManager.underlyingFileManager + createFileAtPath:path + contents:[contents dataUsingEncoding:NSUTF8StringEncoding] + attributes:nil]; +} + +- (BOOL)createMetadata:(NSString *)value forReport:(FIRCLSInternalReport *)report { + return [self createFileWithContents:value atPath:[report metadataPath]]; +} + +#pragma mark - Property Helpers +- (NSArray *)prepareAndSubmitReportArray { + return self.reportManager.uploader.prepareAndSubmitReportArray; +} + +- (NSArray *)uploadReportArray { + return self.reportManager.uploader.uploadReportArray; +} + +- (NSString *)installID { + return TEST_INSTALL_ID; +} + +- (nonnull NSString *)bundleIdentifier { + return TEST_BUNDLE_ID; +} + +- (nonnull NSString *)googleAppID { + return TEST_GOOGLE_APP_ID; +} + +#pragma mark - File/Directory Handling +- (void)testCreatesNewReportOnStart { + FBLPromise *promise = [self->_reportManager startWithProfilingMark:0]; + + XCTestExpectation *expectation = + [[XCTestExpectation alloc] initWithDescription:@"waiting on promise"]; + [promise then:^id _Nullable(NSNumber *_Nullable value) { + XCTAssertTrue([value boolValue]); + XCTAssertEqual([[self contentsOfActivePath] count], 1); + [expectation fulfill]; + return value; + }]; + + [self waitForExpectations:@[ expectation ] timeout:1.0]; +} + +- (void)waitForPromise:(FBLPromise *)promise { + __block NSNumber *value = nil; + __block NSError *error = nil; + + XCTestExpectation *expectation = + [[XCTestExpectation alloc] initWithDescription:@"waiting on promise"]; + [[promise then:^id _Nullable(NSNumber *_Nullable innerValue) { + value = innerValue; + [expectation fulfill]; + return nil; + }] catch:^(NSError *_Nonnull innerError) { + error = innerError; + [expectation fulfill]; + }]; + + [self waitForExpectations:@[ expectation ] timeout:1.0]; + XCTAssertNil(error); + XCTAssertTrue([value boolValue]); +} + +- (void)startReportManager { + [self waitForPromise:[self startReportManagerWithDataCollectionEnabled:YES]]; +} + +- (FBLPromise *)startReportManagerWithDataCollectionEnabled:(BOOL)enabled { + [self.dataArbiter setCrashlyticsCollectionEnabled:enabled]; + return [self.reportManager startWithProfilingMark:0]; +} + +- (void)processReports:(BOOL)send andExpectReports:(BOOL)reportsExpected { + XCTestExpectation *processReportsComplete = + [[XCTestExpectation alloc] initWithDescription:@"processReports: complete"]; + __block BOOL reportsAvailable = NO; + [[[self.reportManager checkForUnsentReports] then:^id _Nullable(NSNumber *_Nullable value) { + reportsAvailable = [value boolValue]; + if (!reportsAvailable) { + return nil; + } + if (send) { + return [self->_reportManager sendUnsentReports]; + } else { + return [self->_reportManager deleteUnsentReports]; + } + }] then:^id _Nullable(id _Nullable ignored) { + [processReportsComplete fulfill]; + return nil; + }]; + [self waitForExpectations:@[ processReportsComplete ] timeout:1.0]; + if (reportsExpected) { + XCTAssertTrue(reportsAvailable, "should have unsent reports"); + } else { + XCTAssertFalse(reportsAvailable, "should not have unsent reports"); + } +} + +- (void)processReports:(BOOL)send { + [self processReports:send andExpectReports:YES]; +} + +- (void)testExistingUnimportantReportOnStart { + // create a report and put it in place + [self createActiveReport]; + + // Report should get deleted, and nothing else specials should happen. + [self startReportManager]; + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + XCTAssertEqual([self.uploadReportArray count], 0); +} + +- (void)testExistingUnimportantReportOnStartWithDataCollectionDisabled { + // create a report and put it in place + [self createActiveReport]; + + // Report should get deleted, and nothing else specials should happen. + FBLPromise *promise = [self startReportManagerWithDataCollectionEnabled:NO]; + // It should not be necessary to call processReports, since there are no reports. + [self waitForPromise:promise]; + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + XCTAssertEqual([self.uploadReportArray count], 0); +} + +- (void)testExistingReportOnStart { + // create a report and put it in place + FIRCLSInternalReport *report = [self createActiveReport]; + + // create a signal file so it is considering worth reporting + XCTAssertTrue([self createFileWithContents:@"signal" + atPath:[report pathForContentFile:CLSReportSignalFile]]); + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + [self startReportManager]; + + // verify that processReports won't get called. + [self processReports:YES andExpectReports:NO]; + + XCTAssertEqual([[self contentsOfActivePath] count], 1, @"should contain only the current report"); + + // should call report manager once for that report + XCTAssertEqual([self.prepareAndSubmitReportArray count], 1); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"process"], @(YES)); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"urgent"], @(NO)); +} + +- (void)testExistingReportOnStartWithDataCollectionDisabledThenEnabled { + // create a report and put it in place + FIRCLSInternalReport *report = [self createActiveReport]; + + // create a signal file so it is considering worth reporting + XCTAssertTrue([self createFileWithContents:@"signal" + atPath:[report pathForContentFile:CLSReportSignalFile]]); + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + FBLPromise *promise = [self startReportManagerWithDataCollectionEnabled:NO]; + + XCTAssertEqual([[self contentsOfActivePath] count], 2, + @"should contain the current and old reports"); + + // should call report manager once for that report + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + + // We can turn data collection on instead of calling processReports. + [self.dataArbiter setCrashlyticsCollectionEnabled:YES]; + [self waitForPromise:promise]; + + XCTAssertEqual([[self contentsOfActivePath] count], 1, @"should contain only the current report"); + + // should call report manager once for that report + XCTAssertEqual([self.prepareAndSubmitReportArray count], 1); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"process"], @(YES)); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"urgent"], @(NO)); +} + +- (void)testExistingReportOnStartWithDataCollectionDisabledAndSend { + // create a report and put it in place + FIRCLSInternalReport *report = [self createActiveReport]; + + // create a signal file so it is considering worth reporting + XCTAssertTrue([self createFileWithContents:@"signal" + atPath:[report pathForContentFile:CLSReportSignalFile]]); + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + [self startReportManagerWithDataCollectionEnabled:NO]; + + XCTAssertEqual([[self contentsOfActivePath] count], 2, + @"should contain the current and old reports"); + + // should call report manager once for that report + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + + [self processReports:YES]; + + XCTAssertEqual([[self contentsOfActivePath] count], 1, @"should contain only the current report"); + + // should call report manager once for that report + XCTAssertEqual([self.prepareAndSubmitReportArray count], 1); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"process"], @(YES)); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"urgent"], @(NO)); + + // Calling processReports again should not call the callback. + // Technically, the behavior is unspecified. + [self processReports:YES andExpectReports:NO]; +} + +- (void)testExistingReportOnStartWithDataCollectionDisabledAndDelete { + // create a report and put it in place + FIRCLSInternalReport *report = [self createActiveReport]; + + // create a signal file so it is considering worth reporting + XCTAssertTrue([self createFileWithContents:@"signal" + atPath:[report pathForContentFile:CLSReportSignalFile]]); + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + [self startReportManagerWithDataCollectionEnabled:NO]; + + XCTAssertEqual([[self contentsOfActivePath] count], 2, + @"should contain the current and old reports"); + + // should call report manager once for that report + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + + [self processReports:NO]; + + XCTAssertEqual([[self contentsOfActivePath] count], 1, @"should contain only the current report"); + + // Should not call report manager for that report. + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); +} + +- (void)testExistingUrgentReportOnStart { + // create a report and put it in place + FIRCLSInternalReport *report = [self createActiveReport]; + + // create a signal file so it is considering worth reporting + XCTAssertTrue([self createFileWithContents:@"signal" + atPath:[report pathForContentFile:CLSReportSignalFile]]); + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + // Put the launch marker in place + [self.reportManager createLaunchFailureMarker]; + + // should call back to the delegate on start + [self startReportManager]; + XCTAssertEqual([[self contentsOfActivePath] count], 1, @"should contain only the current report"); + + // should call report manager once for that report + XCTAssertEqual([self.prepareAndSubmitReportArray count], 1); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"process"], @(YES)); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"urgent"], @(YES)); +} + +- (void)testExistingUrgentReportOnStartWithDataCollectionDisabled { + // create a report and put it in place + FIRCLSInternalReport *report = [self createActiveReport]; + + // create a signal file so it is considering worth reporting + XCTAssertTrue([self createFileWithContents:@"signal" + atPath:[report pathForContentFile:CLSReportSignalFile]]); + + XCTAssertEqual([[self contentsOfActivePath] count], 1); + + // Put the launch marker in place + [self.reportManager createLaunchFailureMarker]; + + // Should wait for processReports: to be called. + [self startReportManagerWithDataCollectionEnabled:NO]; + + XCTAssertEqual([[self contentsOfActivePath] count], 2, @"the report hasn't been sent"); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + + [self processReports:YES]; + + XCTAssertEqual([[self contentsOfActivePath] count], 1, @"should contain only current report"); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 1); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"process"], @(YES)); + + // If data collection is disabled, you can never send the report urgently / blocking + // startup because you need to call a method after startup to send the report + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"urgent"], @(NO)); +} + +- (void)testFilesLeftInProcessing { + // put report in processing + FIRCLSInternalReport *report = [self createActiveReport]; + XCTAssert([_fileManager createDirectoryAtPath:_fileManager.processingPath]); + XCTAssert([_fileManager moveItemAtPath:[report path] toDirectory:_fileManager.processingPath]); + + [self startReportManager]; + + // we should not process reports left over in processing + XCTAssertEqual([[self contentsOfProcessingPath] count], 0, @"Processing should be cleared"); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 1); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"process"], @(NO)); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"urgent"], @(NO)); +} + +- (void)testFilesLeftInProcessingWithDataCollectionDisabled { + // Put report in processing. + FIRCLSInternalReport *report = [self createActiveReport]; + XCTAssert([_fileManager createDirectoryAtPath:_fileManager.processingPath]); + XCTAssert([_fileManager moveItemAtPath:[report path] toDirectory:_fileManager.processingPath]); + + [self startReportManagerWithDataCollectionEnabled:NO]; + + // Nothing should have happened yet. + XCTAssertEqual([[self contentsOfProcessingPath] count], 1, + @"Processing should still have the report"); + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + + [self processReports:YES]; + + // We should not process reports left over in processing. + XCTAssertEqual([[self contentsOfProcessingPath] count], 0, @"Processing should be cleared"); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 1); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"process"], @(NO)); + XCTAssertEqualObjects(self.prepareAndSubmitReportArray[0][@"urgent"], @(NO)); +} + +- (void)testFilesLeftInPrepared { + // Drop a phony multipart-mime file in here, with non-zero contents. + XCTAssert([_fileManager createDirectoryAtPath:_fileManager.preparedPath]); + NSString *path = [_fileManager.preparedPath stringByAppendingPathComponent:@"phony-report"]; + path = [path stringByAppendingPathExtension:@".multipart-mime"]; + + XCTAssertTrue([[_fileManager underlyingFileManager] + createFileAtPath:path + contents:[@"contents" dataUsingEncoding:NSUTF8StringEncoding] + attributes:nil]); + + [self startReportManager]; + + // We should not process reports left over in prepared. + XCTAssertEqual([[self contentsOfPreparedPath] count], 0, @"Prepared should be cleared"); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + XCTAssertEqual([self.uploadReportArray count], 1); + XCTAssertEqualObjects(self.uploadReportArray[0][@"path"], path); +} + +- (void)testFilesLeftInPreparedWithDataCollectionDisabled { + // drop a phony multipart-mime file in here, with non-zero contents + XCTAssert([_fileManager createDirectoryAtPath:_fileManager.preparedPath]); + NSString *path = [_fileManager.preparedPath stringByAppendingPathComponent:@"phony-report"]; + path = [path stringByAppendingPathExtension:@".multipart-mime"]; + + XCTAssertTrue([[_fileManager underlyingFileManager] + createFileAtPath:path + contents:[@"contents" dataUsingEncoding:NSUTF8StringEncoding] + attributes:nil]); + + [self startReportManagerWithDataCollectionEnabled:NO]; + + // Nothing should have happened yet. + XCTAssertEqual([[self contentsOfPreparedPath] count], 1, + @"Prepared should still have the report"); + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + + [self processReports:YES]; + + // we should not process reports left over in processing + XCTAssertEqual([[self contentsOfPreparedPath] count], 0, @"Prepared should be cleared"); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + XCTAssertEqual([self.uploadReportArray count], 1); + XCTAssertEqualObjects(self.uploadReportArray[0][@"path"], path); +} + +- (void)testSuccessfulSubmission { + // drop a phony multipart-mime file in here, with non-zero contents + XCTAssert([_fileManager createDirectoryAtPath:_fileManager.preparedPath]); + NSString *path = [_fileManager.preparedPath stringByAppendingPathComponent:@"phony-report"]; + path = [path stringByAppendingPathExtension:@".multipart-mime"]; + + XCTAssertTrue([[_fileManager underlyingFileManager] + createFileAtPath:path + contents:[@"contents" dataUsingEncoding:NSUTF8StringEncoding] + attributes:nil]); + + [self startReportManager]; + + // we should not process reports left over in processing + XCTAssertEqual([[self contentsOfProcessingPath] count], 0, @"Processing should be cleared"); + + XCTAssertEqual([self.prepareAndSubmitReportArray count], 0); + XCTAssertEqual([self.uploadReportArray count], 1); + XCTAssertEqualObjects(self.uploadReportArray[0][@"path"], path); + + // fake out the delegate callbacks + [self.reportManager.operationQueue addOperationWithBlock:^{ + [self.reportManager didCompletePackageSubmission:path dataCollectionToken:nil error:nil]; + }]; + + [self.reportManager.operationQueue addOperationWithBlock:^{ + [self.reportManager didCompleteAllSubmissions]; + }]; + + [self.reportManager.operationQueue waitUntilAllOperationsAreFinished]; + + // not 100% sure what to verify here +} + +- (void)testLogInvalidJSONAnalyticsEvents { + NSDictionary *eventAsDict = @{ + @"price" : @(NAN), + @"count" : @(INFINITY), + }; + + NSString *json = FIRCLSFIRAEventDictionaryToJSON(eventAsDict); + XCTAssertEqualObjects(json, nil); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSReportTests.m b/Crashlytics/UnitTests/FIRCLSReportTests.m new file mode 100644 index 000000000000..7d891f531132 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSReportTests.m @@ -0,0 +1,130 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FIRCLSContext.h" +#import "FIRCLSFile.h" +#import "FIRCLSGlobals.h" +#import "FIRCLSInternalReport.h" +#import "FIRCLSReport.h" +#import "FIRCLSReport_Private.h" + +@interface CLSReportTests : XCTestCase + +@end + +@implementation CLSReportTests + +- (void)setUp { + [super setUp]; + + FIRCLSContextBaseInit(); + + // these values must be set for the internals of logging to work + _clsContext.readonly->logging.userKVStorage.maxCount = 16; + _clsContext.readonly->logging.userKVStorage.maxIncrementalCount = 16; + _clsContext.readonly->logging.internalKVStorage.maxCount = 32; + _clsContext.readonly->logging.internalKVStorage.maxIncrementalCount = 16; + + _clsContext.readonly->initialized = true; +} + +- (void)tearDown { + FIRCLSContextBaseDeinit(); + + [super tearDown]; +} + +- (NSString *)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSString *)pathForResource:(NSString *)name { + return [[self resourcePath] stringByAppendingPathComponent:name]; +} + +- (FIRCLSInternalReport *)createTempCopyOfInternalReportWithName:(NSString *)name { + NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:name]; + + // make sure to remove anything that was there previously + [[NSFileManager defaultManager] removeItemAtPath:tempPath error:nil]; + + NSString *resourcePath = [self pathForResource:name]; + + [[NSFileManager defaultManager] copyItemAtPath:resourcePath toPath:tempPath error:nil]; + + return [[FIRCLSInternalReport alloc] initWithPath:tempPath]; +} + +- (FIRCLSReport *)createTempCopyOfReportWithName:(NSString *)name { + FIRCLSInternalReport *internalReport = [self createTempCopyOfInternalReportWithName:name]; + + return [[FIRCLSReport alloc] initWithInternalReport:internalReport]; +} + +#pragma mark - Public Getter Methods +- (void)testPropertiesFromMetadatFile { + FIRCLSReport *report = [self createTempCopyOfReportWithName:@"metadata_only_report"]; + + XCTAssertEqualObjects(@"772929a7f21f4ad293bb644668f257cd", report.identifier); + XCTAssertEqualObjects(@"3", report.bundleVersion); + XCTAssertEqualObjects(@"1.0", report.bundleShortVersionString); + XCTAssertEqualObjects([NSDate dateWithTimeIntervalSince1970:1423944888], report.dateCreated); + XCTAssertEqualObjects(@"14C109", report.OSBuildVersion); + XCTAssertEqualObjects(@"10.10.2", report.OSVersion); +} + +#pragma mark - Public Setter Methods +- (void)testSetUserProperties { + FIRCLSReport *report = [self createTempCopyOfReportWithName:@"metadata_only_report"]; + + [report setUserIdentifier:@"12345-6"]; + + NSArray *entries = FIRCLSFileReadSections( + [[report.internalReport pathForContentFile:CLSReportInternalIncrementalKVFile] + fileSystemRepresentation], + false, nil); + + XCTAssertEqual([entries count], 1, @""); + + XCTAssertEqualObjects(entries[0][@"kv"][@"key"], + FIRCLSFileHexEncodeString([FIRCLSUserIdentifierKey UTF8String]), @""); + XCTAssertEqualObjects(entries[0][@"kv"][@"value"], FIRCLSFileHexEncodeString("12345-6"), @""); +} + +- (void)testSetKeyValuesWhenNoneWerePresent { + FIRCLSReport *report = [self createTempCopyOfReportWithName:@"metadata_only_report"]; + + [report setObjectValue:@"hello" forKey:@"mykey"]; + [report setObjectValue:@"goodbye" forKey:@"anotherkey"]; + + NSArray *entries = FIRCLSFileReadSections( + [[report.internalReport pathForContentFile:CLSReportUserIncrementalKVFile] + fileSystemRepresentation], + false, nil); + + XCTAssertEqual([entries count], 2, @""); + + // mykey = "..." + XCTAssertEqualObjects(entries[0][@"kv"][@"key"], FIRCLSFileHexEncodeString("mykey"), @""); + XCTAssertEqualObjects(entries[0][@"kv"][@"value"], FIRCLSFileHexEncodeString("hello"), @""); + + // anotherkey = "..." + XCTAssertEqualObjects(entries[1][@"kv"][@"key"], FIRCLSFileHexEncodeString("anotherkey"), @""); + XCTAssertEqualObjects(entries[1][@"kv"][@"value"], FIRCLSFileHexEncodeString("goodbye"), @""); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSReportUploaderTests.m b/Crashlytics/UnitTests/FIRCLSReportUploaderTests.m new file mode 100644 index 000000000000..ef1a5a141e61 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSReportUploaderTests.m @@ -0,0 +1,97 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import "FIRCLSReportUploader_Private.h" + +#import "FABMockApplicationIdentifierModel.h" +#import "FIRCLSApplication.h" +#include "FIRCLSConstants.h" +#include "FIRCLSDefines.h" +#include "FIRCLSFileManager.h" +#include "FIRCLSMockSettings.h" +#include "FIRCLSSettings.h" + +NSString *const TestEndpoint = @"https://reports.crashlytics.com"; + +@interface FIRCLSReportUploaderTests + : XCTestCase + +@property(nonatomic, strong) FIRCLSReportUploader *uploader; +@property(nonatomic, strong) FIRCLSFileManager *fileManager; +@property(nonatomic, strong) NSOperationQueue *queue; +@property(nonatomic, strong) NSURL *url; + +@end + +@implementation FIRCLSReportUploaderTests + +- (void)setUp { + [super setUp]; + + self.queue = [NSOperationQueue new]; + + self.fileManager = [[FIRCLSFileManager alloc] init]; + self.uploader = [[FIRCLSReportUploader alloc] initWithQueue:self.queue + delegate:self + dataSource:self + client:nil + fileManager:nil + analytics:nil]; + + // glue together a string that will work for both platforms + NSString *urlString = + [NSString stringWithFormat:@"%@/sdk-api/v1/platforms/%@/apps/%@/reports", TestEndpoint, + FIRCLSApplicationGetPlatform(), self.bundleIdentifier]; + self.url = [NSURL URLWithString:urlString]; +} + +- (void)tearDown { + self.uploader = nil; + + [super tearDown]; +} + +- (void)testURLGeneration { + XCTAssertEqualObjects([self.uploader reportURL], _url); +} + +#pragma mark - FIRCLSReportUploaderDelegate + +- (void)didCompletePackageSubmission:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)token + error:(NSError *)error { +} + +- (NSString *)bundleIdentifier { + return @"com.test.TestApp"; +} + +- (NSString *)googleAppID { + return @"someGoogleAppId"; +} + +- (FIRCLSSettings *)settings { + FABMockApplicationIdentifierModel *appIDModel = [[FABMockApplicationIdentifierModel alloc] init]; + FIRCLSMockSettings *settings = [[FIRCLSMockSettings alloc] initWithFileManager:self.fileManager + appIDModel:appIDModel]; + settings.fetchedBundleID = self.bundleIdentifier; + return settings; +} + +- (void)didCompleteAllSubmissions { +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSSettingsTests.m b/Crashlytics/UnitTests/FIRCLSSettingsTests.m new file mode 100644 index 000000000000..0ceb06dd91bf --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSSettingsTests.m @@ -0,0 +1,418 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSettings.h" + +#import +#import + +#import "FBLPromises.h" + +#import "FABMockApplicationIdentifierModel.h" +#import "FIRCLSFileManager.h" +#import "FIRCLSMockFileManager.h" + +const NSString *FIRCLSTestSettingsActivated = + @"{\"settings_version\":3,\"cache_duration\":60,\"features\":{\"collect_logged_exceptions\":" + @"true,\"collect_reports\":true},\"app\":{\"status\":\"activated\",\"update_required\":false}," + @"\"fabric\":{\"org_id\":\"010101000000111111111111\",\"bundle_id\":\"com.lets.test." + @"crashlytics\"}}"; + +const NSString *FIRCLSTestSettingsInverse = + @"{\"settings_version\":3,\"cache_duration\":12345,\"features\":{\"collect_logged_exceptions\":" + @"false,\"collect_reports\":false},\"app\":{\"status\":\"new\",\"update_required\":true}," + @"\"fabric\":{\"org_id\":\"01e101a0000011b113115111\",\"bundle_id\":\"im.from.the.server\"}," + @"\"session\":{\"log_buffer_size\":128000,\"max_chained_exception_depth\":32,\"max_complete_" + @"sessions_count\":4,\"max_custom_exception_events\":1000,\"max_custom_key_value_pairs\":2000," + @"\"identifier_mask\":255}}"; + +const NSString *FIRCLSTestSettingsCorrupted = @"{{{{ non_key: non\"value {}"; + +NSString *FIRCLSDefaultMockBuildInstanceID = @"12345abcdef"; +NSString *FIRCLSDifferentMockBuildInstanceID = @"98765zyxwv"; + +NSString *const TestGoogleAppID = @"1:test:google:app:id"; +NSString *const TestChangedGoogleAppID = @"2:changed:google:app:id"; + +@interface FIRCLSSettingsTests : XCTestCase + +@property(nonatomic, retain) FIRCLSMockFileManager *fileManager; +@property(nonatomic, retain) FABMockApplicationIdentifierModel *appIDModel; + +@property(nonatomic, retain) FIRCLSSettings *settings; + +@end + +@implementation FIRCLSSettingsTests + +- (void)setUp { + [super setUp]; + + _fileManager = [[FIRCLSMockFileManager alloc] init]; + + // Delete the cache + [_fileManager removeItemAtPath:_fileManager.settingsFilePath]; + [_fileManager removeItemAtPath:_fileManager.settingsCacheKeyPath]; + + _appIDModel = [[FABMockApplicationIdentifierModel alloc] init]; + _appIDModel.buildInstanceID = FIRCLSDefaultMockBuildInstanceID; + + _settings = [[FIRCLSSettings alloc] initWithFileManager:_fileManager appIDModel:_appIDModel]; +} + +- (void)testDefaultSettings { + XCTAssertEqual(self.settings.isCacheExpired, YES); + + // Default to an hour + XCTAssertEqual(self.settings.cacheDurationSeconds, 60 * 60); + + XCTAssertEqualObjects(self.settings.orgID, nil); + XCTAssertEqualObjects(self.settings.fetchedBundleID, nil); + + XCTAssertFalse(self.settings.appNeedsOnboarding); + XCTAssertFalse(self.settings.appUpdateRequired); + + XCTAssertTrue(self.settings.crashReportingEnabled); + XCTAssertTrue(self.settings.errorReportingEnabled); + XCTAssertTrue(self.settings.customExceptionsEnabled); + + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); + XCTAssertEqual(self.settings.logBufferSize, 64 * 1000); + XCTAssertEqual(self.settings.maxCustomExceptions, 8); + XCTAssertEqual(self.settings.maxCustomKeys, 64); +} + +- (BOOL)writeSettings:(const NSString *)settings error:(NSError **)error { + return [self writeSettings:settings error:error isCacheKey:NO]; +} + +- (BOOL)writeSettings:(const NSString *)settings + error:(NSError **)error + isCacheKey:(BOOL)isCacheKey { + NSString *path = _fileManager.settingsFilePath; + + if (isCacheKey) { + path = _fileManager.settingsCacheKeyPath; + } + + // Create the directory. + [[NSFileManager defaultManager] createDirectoryAtPath:path.stringByDeletingLastPathComponent + withIntermediateDirectories:YES + attributes:nil + error:error]; + if (*error != nil) { + return NO; + } + + // Create the file. + [settings writeToFile:path atomically:NO encoding:NSUTF8StringEncoding error:error]; + return YES; +} + +- (void)cacheSettingsWithGoogleAppID:(NSString *)googleAppID + currentTimestamp:(NSTimeInterval)currentTimestamp + expectedRemoveCount:(NSInteger)expectedRemoveCount { + self.fileManager.removeExpectation = [[XCTestExpectation alloc] + initWithDescription:@"FIRCLSMockFileManager.removeExpectation.cache"]; + self.fileManager.removeCount = 0; + self.fileManager.expectedRemoveCount = expectedRemoveCount; + + [self.settings cacheSettingsWithGoogleAppID:googleAppID currentTimestamp:currentTimestamp]; + + [self waitForExpectations:@[ self.fileManager.removeExpectation ] timeout:1]; +} + +- (void)reloadFromCacheWithGoogleAppID:(NSString *)googleAppID + currentTimestamp:(NSTimeInterval)currentTimestamp + expectedRemoveCount:(NSInteger)expectedRemoveCount { + self.fileManager.removeExpectation = [[XCTestExpectation alloc] + initWithDescription:@"FIRCLSMockFileManager.removeExpectation.reload"]; + self.fileManager.removeCount = 0; + self.fileManager.expectedRemoveCount = expectedRemoveCount; + + [self.settings reloadFromCacheWithGoogleAppID:googleAppID currentTimestamp:currentTimestamp]; + + [self waitForExpectations:@[ self.fileManager.removeExpectation ] timeout:1]; +} + +- (void)testActivatedSettingsCached { + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsActivated error:&error]; + XCTAssertNil(error, "%@", error); + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + XCTAssertEqual(self.settings.isCacheExpired, NO); + XCTAssertEqual(self.settings.cacheDurationSeconds, 60); + + XCTAssertEqualObjects(self.settings.orgID, @"010101000000111111111111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"com.lets.test.crashlytics"); + + XCTAssertFalse(self.settings.appNeedsOnboarding); + XCTAssertFalse(self.settings.appUpdateRequired); + + XCTAssertTrue(self.settings.crashReportingEnabled); + XCTAssertTrue(self.settings.errorReportingEnabled); + XCTAssertTrue(self.settings.customExceptionsEnabled); + + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); + XCTAssertEqual(self.settings.logBufferSize, 64 * 1000); + XCTAssertEqual(self.settings.maxCustomExceptions, 8); + XCTAssertEqual(self.settings.maxCustomKeys, 64); +} + +- (void)testInverseDefaultSettingsCached { + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsInverse error:&error]; + XCTAssertNil(error, "%@", error); + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + XCTAssertEqual(self.settings.isCacheExpired, NO); + XCTAssertEqual(self.settings.cacheDurationSeconds, 12345); + + XCTAssertEqualObjects(self.settings.orgID, @"01e101a0000011b113115111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"im.from.the.server"); + + XCTAssertTrue(self.settings.appNeedsOnboarding); + XCTAssertTrue(self.settings.appUpdateRequired); + + XCTAssertFalse(self.settings.crashReportingEnabled); + XCTAssertFalse(self.settings.errorReportingEnabled); + XCTAssertFalse(self.settings.customExceptionsEnabled); + + XCTAssertEqual(self.settings.errorLogBufferSize, 128000); + XCTAssertEqual(self.settings.logBufferSize, 128000); + XCTAssertEqual(self.settings.maxCustomExceptions, 1000); + XCTAssertEqual(self.settings.maxCustomKeys, 2000); +} + +- (void)testCacheExpiredFromTTL { + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsActivated error:&error]; + XCTAssertNil(error, "%@", error); + + // 1 delete for clearing the cache key, plus 2 for the deletes from reloading and clearing the + // cache and cache key + self.fileManager.expectedRemoveCount = 3; + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + // Go forward in time by 2x the cache duration + NSTimeInterval futureTimestamp = currentTimestamp + (2 * self.settings.cacheDurationSeconds); + [self.settings reloadFromCacheWithGoogleAppID:TestGoogleAppID currentTimestamp:futureTimestamp]; + + XCTAssertEqual(self.settings.isCacheExpired, YES); + + // Since the TTL just expired, do not clear settings + XCTAssertEqualObjects(self.settings.orgID, @"010101000000111111111111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"com.lets.test.crashlytics"); + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); + + // Pretend we fetched settings again, but they had different values + [self writeSettings:FIRCLSTestSettingsInverse error:&error]; + XCTAssertNil(error, "%@", error); + + // Cache the settings + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + // We should have the updated values that were fetched, and should not be expired + XCTAssertEqual(self.settings.isCacheExpired, NO); + XCTAssertEqualObjects(self.settings.orgID, @"01e101a0000011b113115111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"im.from.the.server"); + XCTAssertEqual(self.settings.errorLogBufferSize, 128000); +} + +- (void)testCacheExpiredFromBuildInstanceID { + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsActivated error:&error]; + XCTAssertNil(error, "%@", error); + + // 1 delete for clearing the cache key, plus 2 for the deletes from reloading and clearing the + // cache and cache key + self.fileManager.expectedRemoveCount = 3; + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + // Change the Build Instance ID + self.appIDModel.buildInstanceID = FIRCLSDifferentMockBuildInstanceID; + + [self.settings reloadFromCacheWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + XCTAssertEqual(self.settings.isCacheExpired, YES); + + // Since the TTL just expired, do not clear settings + XCTAssertEqualObjects(self.settings.orgID, @"010101000000111111111111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"com.lets.test.crashlytics"); + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); + + // Pretend we fetched settings again, but they had different values + [self writeSettings:FIRCLSTestSettingsInverse error:&error]; + XCTAssertNil(error, "%@", error); + + // Cache the settings + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + // We should have the updated values that were fetched, and should not be expired + XCTAssertEqual(self.settings.isCacheExpired, NO); + XCTAssertEqualObjects(self.settings.orgID, @"01e101a0000011b113115111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"im.from.the.server"); + XCTAssertEqual(self.settings.errorLogBufferSize, 128000); +} + +- (void)testGoogleAppIDChanged { + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsInverse error:&error]; + XCTAssertNil(error, "%@", error); + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + // Different Google App ID + [self reloadFromCacheWithGoogleAppID:TestChangedGoogleAppID + currentTimestamp:currentTimestamp + expectedRemoveCount:2]; + + XCTAssertEqual(self.settings.isCacheExpired, YES); + + // Clear the settings because they were for a different Google App ID + XCTAssertEqualObjects(self.settings.orgID, nil); + XCTAssertEqualObjects(self.settings.fetchedBundleID, nil); + + // Pretend we fetched settings again, but they had different values + [self writeSettings:FIRCLSTestSettingsActivated error:&error]; + XCTAssertNil(error, "%@", error); + + // Cache the settings with the new Google App ID + [self.settings cacheSettingsWithGoogleAppID:TestChangedGoogleAppID + currentTimestamp:currentTimestamp]; + + // Should have new values and not expired + XCTAssertEqual(self.settings.isCacheExpired, NO); + XCTAssertEqualObjects(self.settings.orgID, @"010101000000111111111111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"com.lets.test.crashlytics"); + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); +} + +// This is a weird case where we got settings, but never created a cache key for it. We are treating +// this as if the cache was invalid and re-fetching in this case. +- (void)testActivatedSettingsMissingCacheKey { + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsActivated error:&error]; + XCTAssertNil(error, "%@", error); + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + + // We only expect 1 removal because the cache key doesn't exist, + // and deleteCachedSettings deletes the cache and the cache key + [self reloadFromCacheWithGoogleAppID:TestGoogleAppID + currentTimestamp:currentTimestamp + expectedRemoveCount:1]; + + XCTAssertEqual(self.settings.isCacheExpired, YES); + XCTAssertEqual(self.settings.cacheDurationSeconds, 3600); + + XCTAssertEqualObjects(self.settings.orgID, nil); + XCTAssertEqualObjects(self.settings.fetchedBundleID, nil); + + XCTAssertFalse(self.settings.appNeedsOnboarding); + XCTAssertFalse(self.settings.appUpdateRequired); + + XCTAssertTrue(self.settings.crashReportingEnabled); + XCTAssertTrue(self.settings.errorReportingEnabled); + XCTAssertTrue(self.settings.customExceptionsEnabled); + + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); + XCTAssertEqual(self.settings.logBufferSize, 64 * 1000); + XCTAssertEqual(self.settings.maxCustomExceptions, 8); + XCTAssertEqual(self.settings.maxCustomKeys, 64); +} + +// These tests are partially to make sure the SDK doesn't crash when it +// has corrupted settings. +- (void)testCorruptCache { + // First write and load a good settings file + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsInverse error:&error]; + XCTAssertNil(error, "%@", error); + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + // Should have "Inverse" values + XCTAssertEqual(self.settings.isCacheExpired, NO); + XCTAssertEqual(self.settings.cacheDurationSeconds, 12345); + XCTAssertEqualObjects(self.settings.orgID, @"01e101a0000011b113115111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"im.from.the.server"); + XCTAssertTrue(self.settings.appNeedsOnboarding); + XCTAssertEqual(self.settings.errorLogBufferSize, 128000); + + // Then write a corrupted one and cache + reload it + [self writeSettings:FIRCLSTestSettingsCorrupted error:&error]; + XCTAssertNil(error, "%@", error); + + // Cache them, and reload. Since it's corrupted we should delete it all + [self cacheSettingsWithGoogleAppID:TestGoogleAppID + currentTimestamp:currentTimestamp + expectedRemoveCount:2]; + + // Should have default values because we deleted the cache and settingsDictionary + XCTAssertEqual(self.settings.isCacheExpired, YES); + XCTAssertEqual(self.settings.cacheDurationSeconds, 3600); + XCTAssertEqualObjects(self.settings.orgID, nil); + XCTAssertEqualObjects(self.settings.fetchedBundleID, nil); + XCTAssertFalse(self.settings.appNeedsOnboarding); + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); +} + +- (void)testCorruptCacheKey { + // First write and load a good settings file + NSError *error = nil; + [self writeSettings:FIRCLSTestSettingsInverse error:&error]; + XCTAssertNil(error, "%@", error); + + NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; + [self.settings cacheSettingsWithGoogleAppID:TestGoogleAppID currentTimestamp:currentTimestamp]; + + // Should have "Inverse" values + XCTAssertEqual(self.settings.isCacheExpired, NO); + XCTAssertEqual(self.settings.cacheDurationSeconds, 12345); + XCTAssertEqualObjects(self.settings.orgID, @"01e101a0000011b113115111"); + XCTAssertEqualObjects(self.settings.fetchedBundleID, @"im.from.the.server"); + XCTAssertTrue(self.settings.appNeedsOnboarding); + XCTAssertEqual(self.settings.errorLogBufferSize, 128000); + + // Then pretend we wrote a corrupted cache key and just reload it + [self writeSettings:FIRCLSTestSettingsCorrupted error:&error isCacheKey:YES]; + XCTAssertNil(error, "%@", error); + + // Since settings themselves are corrupted, delete it all + [self reloadFromCacheWithGoogleAppID:TestGoogleAppID + currentTimestamp:currentTimestamp + expectedRemoveCount:2]; + + // Should have default values because we deleted the cache and settingsDictionary + XCTAssertEqual(self.settings.isCacheExpired, YES); + XCTAssertEqual(self.settings.cacheDurationSeconds, 3600); + XCTAssertEqualObjects(self.settings.orgID, nil); + XCTAssertEqualObjects(self.settings.fetchedBundleID, nil); + XCTAssertFalse(self.settings.appNeedsOnboarding); + XCTAssertEqual(self.settings.errorLogBufferSize, 64 * 1000); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSSymbolResolverTests.m b/Crashlytics/UnitTests/FIRCLSSymbolResolverTests.m new file mode 100644 index 000000000000..159b513a321e --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSSymbolResolverTests.m @@ -0,0 +1,65 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSymbolResolver.h" + +#import + +@interface FIRCLSSymbolResolverTests : XCTestCase + +@end + +@implementation FIRCLSSymbolResolverTests + +- (void)setUp { + [super setUp]; +} + +- (void)tearDown { + [super tearDown]; +} + +- (NSString*)resourcePath { + return [[NSBundle bundleForClass:[self class]] resourcePath]; +} + +- (NSString*)pathForResource:(NSString*)name { + return [[self resourcePath] stringByAppendingPathComponent:name]; +} + +- (void)testLoadingBinaryImagesWithInvalidFile { + FIRCLSSymbolResolver* resolver = [[FIRCLSSymbolResolver alloc] init]; + + XCTAssertFalse([resolver loadBinaryImagesFromFile:nil]); + XCTAssertFalse([resolver loadBinaryImagesFromFile:@""]); +} + +- (void)testLoadingBinaryImagesWithNullBaseValue { + FIRCLSSymbolResolver* resolver = [[FIRCLSSymbolResolver alloc] init]; + + NSString* binaryImagePath = + [self pathForResource:@"binary_images_with_null_base_entry.clsrecord"]; + + XCTAssert([resolver loadBinaryImagesFromFile:binaryImagePath]); +} + +- (void)testLoadingBinaryImagesWithMissingBaseValue { + FIRCLSSymbolResolver* resolver = [[FIRCLSSymbolResolver alloc] init]; + + NSString* binaryImagePath = [self pathForResource:@"binary_images_missing_base_entry.clsrecord"]; + + XCTAssert([resolver loadBinaryImagesFromFile:binaryImagePath]); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSSymbolicationOperationTests.m b/Crashlytics/UnitTests/FIRCLSSymbolicationOperationTests.m new file mode 100644 index 000000000000..9a893336a17b --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSSymbolicationOperationTests.m @@ -0,0 +1,74 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSymbolicationOperation.h" + +#import +#import + +#import "FIRCLSMockSymbolResolver.h" +#import "FIRCLSStackFrame.h" + +@interface FIRCLSSymbolicationOperationTests : XCTestCase + +@end + +@implementation FIRCLSSymbolicationOperationTests + +- (void)setUp { + [super setUp]; +} + +- (void)tearDown { + [super tearDown]; +} + +- (void)testOperation { + FIRCLSMockSymbolResolver* resolver = [[FIRCLSMockSymbolResolver alloc] init]; + + FIRCLSStackFrame* frame = nil; + + frame = [FIRCLSStackFrame stackFrameWithSymbol:@"testSymbolA"]; + [frame setLibrary:@"libA"]; + [frame setOffset:10]; + + [resolver addMockFrame:frame atAddress:100]; + + frame = [FIRCLSStackFrame stackFrameWithSymbol:@"testSymbolB"]; + [frame setLibrary:@"libB"]; + [frame setOffset:20]; + + [resolver addMockFrame:frame atAddress:200]; + + NSMutableArray* frameArray = [[NSMutableArray alloc] init]; + [frameArray addObject:[FIRCLSStackFrame stackFrameWithAddress:100]]; + [frameArray addObject:[FIRCLSStackFrame stackFrameWithAddress:200]]; + + FIRCLSSymbolicationOperation* op = [[FIRCLSSymbolicationOperation alloc] init]; + + [op setSymbolResolver:resolver]; + [op setThreadArray:@[ frameArray ]]; + + [op start]; + + XCTAssertEqual([frameArray count], 2, @""); + XCTAssertEqualObjects([frameArray[0] symbol], @"testSymbolA", @""); + XCTAssertEqualObjects([frameArray[0] library], @"libA", @""); + XCTAssertEqual([((FIRCLSStackFrame*)frameArray[0]) offset], 10, @""); + XCTAssertEqualObjects([frameArray[1] symbol], @"testSymbolB", @""); + XCTAssertEqualObjects([frameArray[1] library], @"libB", @""); + XCTAssertEqual([((FIRCLSStackFrame*)frameArray[1]) offset], 20, @""); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSURLSessionTests.m b/Crashlytics/UnitTests/FIRCLSURLSessionTests.m new file mode 100644 index 000000000000..0d0f7e33854f --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSURLSessionTests.m @@ -0,0 +1,39 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FIRCLSURLSessionTests : XCTestCase + +@end + +@implementation FIRCLSURLSessionTests + +- (void)setUp { + [super setUp]; + + // Set-up code here. +} + +- (void)tearDown { + // Tear-down code here. + + [super tearDown]; +} + +- (void)testExample { + // XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m b/Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m new file mode 100644 index 000000000000..5d48882accdf --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m @@ -0,0 +1,274 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import "FIRCLSUserDefaults_private.h" + +@interface FIRCLSUserDefaultsTests : XCTestCase { + FIRCLSUserDefaults* _userDefaults; + + NSString* _testKey1; + NSString* _testKey2; + NSString* _testKey3; + NSString* _testKey4; + NSString* _testString1; + NSString* _testString2; + NSString* _testString3; + BOOL _testBool; + NSInteger _testInteger; +} + +@end + +@implementation FIRCLSUserDefaultsTests + +- (void)setUp { + _userDefaults = [FIRCLSUserDefaults standardUserDefaults]; + [_userDefaults removeAllObjects]; // we need to clear out anything stored by other unit tests. + [_userDefaults synchronize]; + + _testKey1 = @"testKey1"; + _testString1 = @"test1"; + _testKey2 = @"testKey2"; + _testString2 = @"test2"; + _testKey3 = @"testKey3"; + _testString3 = @"test3"; + _testKey4 = @"testKey4"; + _testBool = YES; + _testInteger = 10; + [super setUp]; +} + +- (void)tearDown { + [_userDefaults removeAllObjects]; + [super tearDown]; +} + +#pragma mark - dictionary representation tests + +- (void)testDictionaryRepresentation { + [_userDefaults removeAllObjects]; + + NSDictionary* expectedTestDict = + [NSDictionary dictionaryWithObjectsAndKeys:_testString1, _testKey1, _testString2, _testKey2, + _testString3, _testKey3, nil]; + + [_userDefaults setObject:_testString1 forKey:_testKey1]; + [_userDefaults setObject:_testString2 forKey:_testKey2]; + [_userDefaults setObject:_testString3 forKey:_testKey3]; + + NSDictionary* testDict = [_userDefaults dictionaryRepresentation]; + NSLog(@"%@", testDict); + + NSLog(@"foooo"); + + XCTAssertEqualObjects(testDict, expectedTestDict, @""); +} + +#pragma mark - remove tests + +- (void)testRemoveObjectForKey { + [_userDefaults setObject:_testString1 forKey:_testKey1]; + + [_userDefaults removeObjectForKey:_testKey1]; + XCTAssertNil([_userDefaults objectForKey:_testKey1], @""); +} + +- (void)testRemoveAllObjects { + [_userDefaults setObject:_testString1 forKey:_testKey1]; + [_userDefaults setObject:_testString2 forKey:_testKey2]; + [_userDefaults setObject:_testString3 forKey:_testKey3]; + + [_userDefaults removeAllObjects]; + + XCTAssertNil([_userDefaults objectForKey:_testKey1], @""); + XCTAssertNil([_userDefaults objectForKey:_testKey2], @""); + XCTAssertNil([_userDefaults objectForKey:_testKey3], @""); +} + +#pragma mark - set/fetch object tests + +- (void)testSaveObject { + [_userDefaults setObject:_testString1 forKey:_testKey1]; + XCTAssertEqualObjects([_userDefaults objectForKey:_testKey1], _testString1, @""); +} + +- (void)testSaveBool { + [_userDefaults setObject:_testString1 forKey:_testKey1]; + XCTAssertEqualObjects([_userDefaults stringForKey:_testKey1], _testString1, @""); +} + +- (void)testSaveString { + [_userDefaults setBool:_testBool forKey:_testKey1]; + XCTAssertEqual([_userDefaults boolForKey:_testKey1], _testBool, @""); +} + +- (void)testSaveInteger { + [_userDefaults setInteger:_testInteger forKey:_testKey1]; + XCTAssertEqual([_userDefaults integerForKey:_testKey1], _testInteger, @""); +} + +#pragma mark - unset/wrong type object tests + +- (void)testLoadObjectUnset { + XCTAssertNil([_userDefaults objectForKey:_testKey1], @""); +} + +- (void)testLoadStringUnset { + XCTAssertNil([_userDefaults stringForKey:_testKey1], @""); +} + +- (void)testLoadStringWrongType { + [_userDefaults setObject:[NSNumber numberWithInt:100] forKey:_testKey1]; + XCTAssertNotNil([_userDefaults objectForKey:_testKey1], @""); + XCTAssertNil([_userDefaults stringForKey:_testKey1], @""); +} + +- (void)testLoadBoolUnset { + XCTAssertFalse([_userDefaults boolForKey:_testKey1], @""); +} + +- (void)testLoadBoolWrongType { + [_userDefaults setObject:_testString1 forKey:_testKey1]; + XCTAssertNotNil([_userDefaults objectForKey:_testKey1], @""); + XCTAssertFalse([_userDefaults boolForKey:_testKey1], @""); +} + +- (void)testLoadIntegerUnset { + XCTAssertEqual([_userDefaults integerForKey:_testKey1], 0, @""); +} + +- (void)testLoadIntegerWrongType { + [_userDefaults setObject:_testString1 forKey:_testKey1]; + XCTAssertNotNil([_userDefaults objectForKey:_testKey1], @""); + XCTAssertEqual([_userDefaults integerForKey:_testKey1], 0, @""); +} + +#pragma mark - NSUserDefaults migration + +- (void)testMigrateFromNSUserDefaults { + [[NSUserDefaults standardUserDefaults] setObject:_testString1 forKey:_testKey1]; + [[NSUserDefaults standardUserDefaults] setObject:_testString2 forKey:_testKey2]; + [[NSUserDefaults standardUserDefaults] setBool:_testBool forKey:_testKey3]; + + [[FIRCLSUserDefaults standardUserDefaults] + migrateFromNSUserDefaults:@[ _testKey1, _testKey2, _testKey3 ]]; + + XCTAssertEqualObjects([_userDefaults objectForKey:_testKey1], _testString1, @""); + XCTAssertEqualObjects([_userDefaults stringForKey:_testKey2], _testString2, @""); + XCTAssertEqual([_userDefaults boolForKey:_testKey3], _testBool, @""); +} + +- (void)testObjectForKeyByMigratingFromNSUserDefaultsWhenKeyExistsInNSUserDefaults { + [[NSUserDefaults standardUserDefaults] setObject:_testString1 forKey:_testKey1]; + + // Read object and migrate to FIRCLSUserDefaults + id readObject = [[FIRCLSUserDefaults standardUserDefaults] + objectForKeyByMigratingFromNSUserDefaults:_testKey1]; + XCTAssertEqualObjects(readObject, _testString1); + XCTAssertNil([[NSUserDefaults standardUserDefaults] objectForKey:_testKey1]); + XCTAssertEqualObjects(_testString1, + [[FIRCLSUserDefaults standardUserDefaults] objectForKey:_testKey1]); +} + +- (void)testObjectForKeyByMigratingFromNSUserDefaultsWhenKeyExistsInFIRCLSUserDefaults { + [[FIRCLSUserDefaults standardUserDefaults] setObject:_testString1 forKey:_testKey1]; + id readObject = [[FIRCLSUserDefaults standardUserDefaults] + objectForKeyByMigratingFromNSUserDefaults:_testKey1]; + XCTAssertEqualObjects(readObject, _testString1); +} + +- (void)testObjectForKeyByMigratingFromNSUserDefaultsWhenKeyDoesNotExist { + XCTAssertNil([[NSUserDefaults standardUserDefaults] objectForKey:_testKey1]); + XCTAssertEqualObjects([[NSUserDefaults standardUserDefaults] objectForKey:_testKey1], + [[FIRCLSUserDefaults standardUserDefaults] + objectForKeyByMigratingFromNSUserDefaults:_testKey1]); +} + +#pragma mark - Serialization tests +- (void)testSynchronize { + [_userDefaults setBool:_testBool forKey:_testKey1]; + [_userDefaults setInteger:_testInteger forKey:_testKey4]; + [_userDefaults setObject:_testString2 forKey:_testKey2]; + [_userDefaults setObject:_testString3 forKey:_testKey3]; + [_userDefaults synchronize]; + + // Tests a private method of FIRCLSUserDefaults to verify we can serialize to and from the disk + NSDictionary* readValue = [_userDefaults loadDefaults]; + XCTAssertEqual([(NSNumber*)[readValue objectForKey:_testKey1] boolValue], _testBool, @""); + XCTAssertEqual([[readValue objectForKey:_testKey4] integerValue], _testInteger, @""); + XCTAssertEqualObjects([readValue objectForKey:_testKey2], _testString2, @""); + XCTAssertEqualObjects([readValue objectForKey:_testKey3], _testString3, @""); +} + +- (void)testSynchronizeOnlyWritesOnChanges { + // test using the private synchronizeWroteToDisk method + + [_userDefaults setBool:_testBool forKey:_testKey1]; + [_userDefaults synchronize]; + XCTAssert([_userDefaults synchronizeWroteToDisk]); + + // synchronize without changes shouldn't do anything + [_userDefaults synchronize]; + XCTAssertFalse([_userDefaults synchronizeWroteToDisk]); + + // add a new key + [_userDefaults setObject:_testString2 forKey:_testKey2]; + [_userDefaults synchronize]; + XCTAssert([_userDefaults synchronizeWroteToDisk]); + + // change an existing key + [_userDefaults setObject:_testString3 forKey:_testKey2]; + [_userDefaults synchronize]; + XCTAssert([_userDefaults synchronizeWroteToDisk]); + + // set an existing key to the same value + [_userDefaults setObject:[_testString3 copy] forKey:_testKey2]; + [_userDefaults synchronize]; + XCTAssertFalse([_userDefaults synchronizeWroteToDisk]); + + // remove a key + [_userDefaults removeObjectForKey:_testKey2]; + [_userDefaults synchronize]; + XCTAssert([_userDefaults synchronizeWroteToDisk]); + + // remove everything + [_userDefaults removeAllObjects]; + [_userDefaults synchronize]; + XCTAssert([_userDefaults synchronizeWroteToDisk]); +} + +#pragma mark - Directory URL tests +- (void)testGetDirectoryUrl { +// For the simulator, on tvOS and watchOS can't write to disk +#if TARGET_OS_SIMULATOR && TARGET_OS_IPHONE + NSURL* baseURL = [NSURL URLWithString:@"/my/base/dir"]; + NSString* bundleId = @"com.my.bundle.id"; + NSURL* generatedURL = [_userDefaults generateDirectoryURLForBaseURL:baseURL + hostAppBundleIdentifier:bundleId]; + XCTAssertEqualObjects(generatedURL, [NSURL URLWithString:@"/my/base/dir/com.crashlytics"]); + +// For non-simulator, the only supported scenario is on a mac. +#elif !TARGET_OS_SIMULATOR && !TARGET_OS_EMBEDDED + NSURL* baseURL = [NSURL URLWithString:@"/my/base/dir"]; + NSString* bundleId = @"com.my.bundle.id"; + NSURL* generatedURL = [_userDefaults generateDirectoryURLForBaseURL:baseURL + hostAppBundleIdentifier:bundleId]; + XCTAssertEqualObjects(generatedURL, + [NSURL URLWithString:@"/my/base/dir/com.my.bundle.id/com.crashlytics"]); +#endif +} + +@end diff --git a/Crashlytics/UnitTests/FIRCLSUtilityTests.m b/Crashlytics/UnitTests/FIRCLSUtilityTests.m new file mode 100644 index 000000000000..0cbebbd14bf6 --- /dev/null +++ b/Crashlytics/UnitTests/FIRCLSUtilityTests.m @@ -0,0 +1,80 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FIRCLSUtility.h" + +#import +#import + +#include "FIRCLSByteUtility.h" + +@interface FIRCLSUtilityTests : XCTestCase + +@end + +@implementation FIRCLSUtilityTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the + // class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the + // class. + [super tearDown]; +} + +- (void)testHexFromByte { + char output[2] = {0, 0}; + + FIRCLSHexFromByte('A', output); + + XCTAssertEqual(output[0], '4', @""); + XCTAssertEqual(output[1], '1', @""); +} + +- (void)testHexFromByteForNotPrintableCharacter { + char output[2] = {0, 0}; + + FIRCLSHexFromByte(0xd0, output); + + XCTAssertEqual(output[0], 'd', @""); + XCTAssertEqual(output[1], '0', @""); +} + +- (void)testHexToString { + const uint8_t bytes[8] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; + + char string[(sizeof(bytes) * 2) + 1]; + + FIRCLSSafeHexToString(bytes, 8, string); + + string[(sizeof(bytes) * 2)] = 0; + + XCTAssertEqualObjects([NSString stringWithUTF8String:string], @"6162636465666768", @""); +} + +- (void)testHexToStringWithNonPrintableCharacters { + const uint8_t bytes[4] = {0x52, 0xd0, 0x4e, 0x1f}; + + char string[(sizeof(bytes) * 2) + 1]; + + FIRCLSSafeHexToString(bytes, 4, string); + + XCTAssertEqualObjects([NSString stringWithUTF8String:string], @"52d04e1f", @""); +} + +@end diff --git a/Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.h b/Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.h new file mode 100644 index 000000000000..3b9d8f13adce --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.h @@ -0,0 +1,31 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSApplicationIdentifierModel.h" + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FABMockApplicationIdentifierModel : FIRCLSApplicationIdentifierModel + +// Allows us to set this value in FIRCLSSettingsTests +@property(nonatomic, copy) NSString* buildInstanceID; + +// Allows us to set this value in FIRCLSReportManagerTests +@property(nonatomic, copy) NSString* bundleID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.m b/Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.m new file mode 100644 index 000000000000..a3f5c6583030 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FABMockApplicationIdentifierModel.m @@ -0,0 +1,26 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FABMockApplicationIdentifierModel.h" + +@implementation FABMockApplicationIdentifierModel + +// Don't call the custom methods that compute this value, so we can +// set it in FIRCLSSettingsTests +@synthesize buildInstanceID; + +// Set in FIRCLSReportManagerTests +@synthesize bundleID; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRAppFake.h b/Crashlytics/UnitTests/Mocks/FIRAppFake.h new file mode 100644 index 000000000000..de6488a821b6 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRAppFake.h @@ -0,0 +1,21 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FIRAppFake : NSObject + +@property(nonatomic, assign, readwrite) BOOL isDefaultCollectionEnabled; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRAppFake.m b/Crashlytics/UnitTests/Mocks/FIRAppFake.m new file mode 100644 index 000000000000..ac2a1778b7d2 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRAppFake.m @@ -0,0 +1,35 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRAppFake.h" + +@implementation FIRAppFake : NSObject + +- (instancetype)init { + return [self initWithDefaultDataCollectionEnabled:YES]; +} + +- (instancetype)initWithDefaultDataCollectionEnabled:(BOOL)isEnabled { + self = [super init]; + if (self) { + _isDefaultCollectionEnabled = isEnabled; + } + return self; +} + +- (BOOL)isDataCollectionDefaultEnabled { + return self.isDefaultCollectionEnabled; +} + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.h b/Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.h new file mode 100644 index 000000000000..4b921ec5173b --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.h @@ -0,0 +1,38 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSFileManager.h" + +#import + +@interface FIRCLSMockFileManager : FIRCLSFileManager + +@property(nonatomic, copy) NSString *pathNamespace; + +// Number of calls to removeItemAtPath are expected for the unit test +@property(nonatomic) NSInteger expectedRemoveCount; + +// Incremented when a remove happens with removeItemAtPath +@property(nonatomic) NSInteger removeCount; + +// Will be fulfilled when the expected number of removes have happened +// using removeItemAtPath +// +// Users should initialize this in their test. +@property(nonatomic, strong) XCTestExpectation *removeExpectation; + +// Overriding the method for testing Settings +- (BOOL)removeItemAtPath:(NSString *)path; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.m b/Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.m new file mode 100644 index 000000000000..855f500e8392 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockFileManager.m @@ -0,0 +1,47 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMockFileManager.h" + +@implementation FIRCLSMockFileManager + +@synthesize pathNamespace; + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + // Should be set by the tests when needed + _removeExpectation = nil; + + return self; +} + +- (BOOL)removeItemAtPath:(NSString *)path { + [super removeItemAtPath:path]; + + self.removeCount += 1; + + // If we set up the expectation, and we went over the expected count or removes, fulfill the + // expectation + if (self.removeExpectation && self.removeCount >= self.expectedRemoveCount) { + [self.removeExpectation fulfill]; + } + + return YES; +} + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.h b/Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.h new file mode 100644 index 000000000000..311313462436 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.h @@ -0,0 +1,19 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSNetworkClient.h" + +@interface FIRCLSMockNetworkClient : FIRCLSNetworkClient + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.m b/Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.m new file mode 100644 index 000000000000..3ec10b6381b9 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockNetworkClient.m @@ -0,0 +1,30 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMockNetworkClient.h" + +@implementation FIRCLSMockNetworkClient + +- (void)startUploadRequest:(NSURLRequest *)request + filePath:(NSString *)path + immediately:(BOOL)immediate { + NSLog(@"intercepted request"); +} + +- (void)attemptToReconnectBackgroundSessionWithCompletionBlock:(void (^)(void))completionBlock { + // all this synchronously for easier testing + completionBlock(); +} + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.h b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.h new file mode 100644 index 000000000000..6b9f3c3d1eb6 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.h @@ -0,0 +1,45 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSReportManager.h" +#import "FIRCLSReportManager_Private.h" + +NS_ASSUME_NONNULL_BEGIN + +@class FIRCLSApplicationIdentifierModel; +@class FIRCLSMockReportUploader; + +@interface FIRCLSMockReportManager : FIRCLSReportManager + +- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager + instanceID:(FIRInstanceID *)instanceID + analytics:(nullable id)analytics + googleAppID:(NSString *)googleAppID + dataArbiter:(FIRCLSDataCollectionArbiter *)dataArbiter + appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager + instanceID:(FIRInstanceID *)instanceID + analytics:(nullable id)analytics + googleAppID:(NSString *)googleAppID + dataArbiter:(FIRCLSDataCollectionArbiter *)dataArbiter NS_UNAVAILABLE; + +@property(nonatomic, copy) NSString *bundleIdentifier; + +@property(nonatomic, readonly) FIRCLSMockReportUploader *uploader; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m new file mode 100644 index 000000000000..2044ecbad551 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m @@ -0,0 +1,89 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMockReportManager.h" + +#import "FIRCLSApplicationIdentifierModel.h" +#import "FIRCLSContext.h" +#import "FIRCLSMockNetworkClient.h" +#import "FIRCLSMockReportUploader.h" + +@interface FIRCLSMockReportManager () { + FIRCLSMockReportUploader *_uploader; +} + +// Made this a property so we can override this with mocked values +@property(nonatomic, strong) FIRCLSApplicationIdentifierModel *appIDModel; + +@end + +@implementation FIRCLSMockReportManager + +// these have to be synthesized, to override the pre-existing method +@synthesize bundleIdentifier; + +- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager + instanceID:(FIRInstanceID *)instanceID + analytics:(id)analytics + googleAppID:(nonnull NSString *)googleAppID + dataArbiter:(FIRCLSDataCollectionArbiter *)dataArbiter + appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel { + self = [super initWithFileManager:fileManager + instanceID:instanceID + analytics:analytics + googleAppID:googleAppID + dataArbiter:dataArbiter]; + if (!self) { + return nil; + } + + _appIDModel = appIDModel; + + _uploader = [[FIRCLSMockReportUploader alloc] initWithQueue:self.operationQueue + delegate:self + dataSource:self + client:self.networkClient + fileManager:fileManager + analytics:analytics]; + + return self; +} + +- (FIRCLSNetworkClient *)clientWithOperationQueue:(NSOperationQueue *)queue { + return [[FIRCLSMockNetworkClient alloc] initWithQueue:queue + fileManager:self.fileManager + delegate:(id)self]; +} + +- (FIRCLSReportUploader *)uploader { + return _uploader; +} + +- (BOOL)startCrashReporterWithProfilingMark:(FIRCLSProfileMark)mark + report:(FIRCLSInternalReport *)report { + NSLog(@"Crash Reporting system disabled for testing"); + + return YES; +} + +- (BOOL)installCrashReportingHandlers:(FIRCLSContextInitData *)initData { + return YES; + // This actually installs crash handlers, there is no need to do that during testing. +} + +- (void)crashReportingSetupCompleted { + // This stuff does operations on the main thread, which we don't want during tests. +} + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.h b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.h new file mode 100644 index 000000000000..4af1c8fe648b --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.h @@ -0,0 +1,22 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSReportUploader.h" + +@interface FIRCLSMockReportUploader : FIRCLSReportUploader + +@property(nonatomic, readonly) NSArray *prepareAndSubmitReportArray; +@property(nonatomic, readonly) NSArray *uploadReportArray; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.m b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.m new file mode 100644 index 000000000000..d14f89b9126b --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportUploader.m @@ -0,0 +1,75 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMockReportUploader.h" + +#import "FIRCLSFileManager.h" +#import "FIRCLSInternalReport.h" + +@interface FIRCLSMockReportUploader () { + NSMutableArray *_prepareAndSubmitReportArray; + NSMutableArray *_uploadReportArray; +} + +@end + +@implementation FIRCLSMockReportUploader + +- (instancetype)initWithQueue:(NSOperationQueue *)queue + delegate:(id)delegate + dataSource:(id)dataSource + client:(FIRCLSNetworkClient *)client + fileManager:(FIRCLSFileManager *)fileManager + analytics:(id)analytics { + self = [super initWithQueue:queue + delegate:delegate + dataSource:dataSource + client:client + fileManager:fileManager + analytics:analytics]; + if (!self) { + return nil; + } + + _prepareAndSubmitReportArray = [[NSMutableArray alloc] init]; + _uploadReportArray = [[NSMutableArray alloc] init]; + + return self; +} + +- (BOOL)prepareAndSubmitReport:(FIRCLSInternalReport *)report + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent + withProcessing:(BOOL)shouldProcess { + [_prepareAndSubmitReportArray + addObject:@{@"report" : report, @"urgent" : @(urgent), @"process" : @(shouldProcess)}]; + + // report should be from active/processing here. We just need to "move" it. + [self.fileManager removeItemAtPath:report.path]; + + return YES; +} + +- (BOOL)uploadPackagedReportAtPath:(NSString *)path + dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken + asUrgent:(BOOL)urgent { + [_uploadReportArray addObject:@{@"path" : path, @"urgent" : @(urgent)}]; + + // After upload, the file should be removed. + [self.fileManager removeItemAtPath:path]; + + return YES; +} + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.h b/Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.h new file mode 100644 index 000000000000..94e2c426f7e2 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.h @@ -0,0 +1,22 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSettings.h" + +@interface FIRCLSMockSettings : FIRCLSSettings + +@property(nonatomic, copy) NSString* orgID; +@property(nonatomic, copy) NSString* fetchedBundleID; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.m b/Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.m new file mode 100644 index 000000000000..8cab5dfc7b58 --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockSettings.m @@ -0,0 +1,24 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMockSettings.h" + +@implementation FIRCLSMockSettings + +// Synthesizing so we can override these values with setters and getters +// and bypass the normal functionality +@synthesize orgID; +@synthesize fetchedBundleID; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.h b/Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.h new file mode 100644 index 000000000000..2612803b217a --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.h @@ -0,0 +1,21 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSSymbolResolver.h" + +@interface FIRCLSMockSymbolResolver : FIRCLSSymbolResolver + +- (void)addMockFrame:(FIRCLSStackFrame *)frame atAddress:(uint64_t)address; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.m b/Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.m new file mode 100644 index 000000000000..1173f890cb3b --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockSymbolResolver.m @@ -0,0 +1,61 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRCLSMockSymbolResolver.h" + +#import "FIRCLSStackFrame.h" + +@interface FIRCLSMockSymbolResolver () { + NSMutableDictionary *_frames; +} + +@end + +@implementation FIRCLSMockSymbolResolver + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + _frames = [[NSMutableDictionary alloc] init]; + + return self; +} + +- (void)addMockFrame:(FIRCLSStackFrame *)frame atAddress:(uint64_t)address { + [_frames setObject:frame forKey:@(address)]; +} + +- (BOOL)updateStackFrame:(FIRCLSStackFrame *)frame { + FIRCLSStackFrame *matchedFrame = [_frames objectForKey:@([frame address])]; + + if (!matchedFrame) { + return NO; + } + + [frame setSymbol:[matchedFrame symbol]]; + [frame setLibrary:[matchedFrame library]]; + [frame setOffset:[matchedFrame offset]]; + + return YES; +} + +- (BOOL)loadBinaryImagesFromFile:(NSString *)path { + // the mock doesn't need this + return YES; +} + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRMockInstanceID.h b/Crashlytics/UnitTests/Mocks/FIRMockInstanceID.h new file mode 100644 index 000000000000..df0cffde8fef --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRMockInstanceID.h @@ -0,0 +1,22 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FIRMockInstanceID : FIRInstanceID + +- (instancetype)initWithIID:(NSString *)token; +- (instancetype)initWithError:(NSError *)error; + +@end diff --git a/Crashlytics/UnitTests/Mocks/FIRMockInstanceID.m b/Crashlytics/UnitTests/Mocks/FIRMockInstanceID.m new file mode 100644 index 000000000000..da68b60ff0ef --- /dev/null +++ b/Crashlytics/UnitTests/Mocks/FIRMockInstanceID.m @@ -0,0 +1,59 @@ +// Copyright 2019 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FIRMockInstanceID.h" + +#import + +#import + +@interface FIRMockInstanceID () + +@property(nonatomic, copy) NSString *instanceID; + +@property(nonatomic, strong) NSError *error; + +@end + +@implementation FIRMockInstanceID + +- (instancetype)initWithIID:(NSString *)token { + self = [super initPrivately]; + if (!self) { + return self; + } + + _instanceID = [token copy]; + _error = nil; + + return self; +} + +- (instancetype)initWithError:(NSError *)error { + self = [super initPrivately]; + if (!self) { + return self; + } + + _instanceID = nil; + _error = error; + + return self; +} + +- (void)getIDWithHandler:(FIRInstanceIDHandler)handler { + handler(_instanceID, _error); +} + +@end diff --git a/Crashlytics/UnitTests/binary_images_missing_base_entry.clsrecord b/Crashlytics/UnitTests/binary_images_missing_base_entry.clsrecord new file mode 100644 index 000000000000..ada7f0538939 --- /dev/null +++ b/Crashlytics/UnitTests/binary_images_missing_base_entry.clsrecord @@ -0,0 +1,6 @@ +{"load":{"path":"/Users/mmassicotte/Library/Developer/CoreSimulator/Devices/5FC72D9A-2048-482A-9A79-2CA9F1FC18FB/data/Containers/Bundle/Application/788D77C9-161A-4021-9774-7E3C9393AD45/CrashTest-iOS.app/CrashTest-iOS","uuid":"e07d35c9f99a3a82a3638faf8775eccc","base":4389027840,"size":598016}} +{"load":{"path":"/Applications/Xcode 6.2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.2.sdk/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib","bundle_id":null,"build_version":null,"display_version":null,"uuid":"7f81304e1e243c9c928a1cae4217e116","base":4390633472,"size":24576}} +{"load":{"path":"/Applications/Xcode 6.2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/AdSupport.framework/AdSupport","bundle_id":null,"build_version":null,"display_version":null,"uuid":"be521a1e2d003fa8a1e84deb6c3ebfe5","base":4390678528,"size":4096}} +{"load":{"path":"/Applications/Xcode 6.2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libz.1.dylib","uuid":"7cca2d44f20a35a59b7cb026a188f4f5","base":4390699008,"size":77824}} +{"load":{"path":"/Applications/Xcode 6.2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics","bundle_id":null,"build_version":null,"display_version":null,"uuid":"9a455d304f0735be8a03253c5b17aecd","base":4390797312,"size":1884160}} +{"load":{"path":"/Applications/Xcode 6.2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/UIKit.framework/UIKit","bundle_id":null,"build_version":null,"display_version":null,"uuid":"cdd3270b77223f4f933368746205a9cf","size":11964416}} diff --git a/Crashlytics/run b/Crashlytics/run new file mode 100755 index 000000000000..9316eeaf7621 --- /dev/null +++ b/Crashlytics/run @@ -0,0 +1,76 @@ +#!/bin/sh + +# Copyright 2019 Google +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# run +# +# This script is meant to be run as a Run Script in the "Build Phases" section +# of your Xcode project. It sends debug symbols to symbolicate stacktraces, +# sends build events to track versions, and onboards apps for Crashlytics. +# +# This script calls upload-symbols twice: +# +# 1) First it calls upload-symbols synchronously in "validation" mode. If the +# script finds issues with the build environment, it will report errors to Xcode. +# In validation mode it exits before doing any time consuming work. +# +# 2) Then it calls upload-symbols in the background to actually send the build +# event and upload symbols. It does this in the background so that it doesn't +# slow down your builds. If an error happens here, you won't see it in Xcode. +# +# You can find the output for the background execution in Console.app, by +# searching for "upload-symbols". +# +# If you want verbose output, you can pass the --debug flag to this script +# + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# If the first argument is specified without a dash, treat it as the Fabric API +# Key and add it as an argument. +if [ -z "$1" ] || [[ $1 == -* ]]; then + API_KEY_ARG="" +else + API_KEY_ARG="-a $1"; shift +fi + +# Build up the arguments list, passing through any flags added after the +# API Key +ARGUMENTS="$API_KEY_ARG $@" +VALIDATE_ARGUMENTS="$ARGUMENTS --build-phase --validate" +UPLOAD_ARGUMENTS="$ARGUMENTS --build-phase" + +# Quote the path to handle folders with special characters +COMMAND_PATH="\"$DIR/upload-symbols\" " + +# Ensure params are as expected, run in sync mode to validate, +# and cause a build error if validation fails +eval $COMMAND_PATH$VALIDATE_ARGUMENTS +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, convert and upload cSYMs in the background to prevent +# build delays +# +# Note: Validation is performed again at this step before upload +# +# Note: Output can still be found in Console.app, by searching for +# "upload-symbols" +# +eval $COMMAND_PATH$UPLOAD_ARGUMENTS > /dev/null 2>&1 & diff --git a/Crashlytics/third_party/libunwind/LICENSE b/Crashlytics/third_party/libunwind/LICENSE new file mode 100644 index 000000000000..c9b44cb8aaeb --- /dev/null +++ b/Crashlytics/third_party/libunwind/LICENSE @@ -0,0 +1,18 @@ +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Crashlytics/third_party/libunwind/dwarf.h b/Crashlytics/third_party/libunwind/dwarf.h new file mode 100644 index 000000000000..9c81868a0368 --- /dev/null +++ b/Crashlytics/third_party/libunwind/dwarf.h @@ -0,0 +1,256 @@ +/* libunwind - a platform-independent unwind library + Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. + Contributed by David Mosberger-Tang + +This file is part of libunwind. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#pragma once + +// +#define DWARF_EXTENDED_LENGTH_FLAG (0xffffffff) +#define DWARF_CIE_ID_CIE_FLAG (0) + +// Exception Handling Pointer Encoding constants +#define DW_EH_PE_VALUE_MASK (0x0F) +#define DW_EH_PE_RELATIVE_OFFSET_MASK (0x70) + +// Register Definitions +#define DW_EN_MAX_REGISTER_NUMBER (120) + +enum { + DW_EH_PE_ptr = 0x00, + DW_EH_PE_uleb128 = 0x01, + DW_EH_PE_udata2 = 0x02, + DW_EH_PE_udata4 = 0x03, + DW_EH_PE_udata8 = 0x04, + DW_EH_PE_signed = 0x08, + DW_EH_PE_sleb128 = 0x09, + DW_EH_PE_sdata2 = 0x0A, + DW_EH_PE_sdata4 = 0x0B, + DW_EH_PE_sdata8 = 0x0C, + + DW_EH_PE_absptr = 0x00, + DW_EH_PE_pcrel = 0x10, + DW_EH_PE_textrel = 0x20, + DW_EH_PE_datarel = 0x30, + DW_EH_PE_funcrel = 0x40, + DW_EH_PE_aligned = 0x50, + DW_EH_PE_indirect = 0x80, + DW_EH_PE_omit = 0xFF +}; + +// Unwind Instructions + +#define DW_CFA_OPCODE_MASK (0xC0) +#define DW_CFA_OPERAND_MASK (0x3F) + +enum { + DW_CFA_nop = 0x0, + DW_CFA_set_loc = 0x1, + DW_CFA_advance_loc1 = 0x2, + DW_CFA_advance_loc2 = 0x3, + DW_CFA_advance_loc4 = 0x4, + DW_CFA_offset_extended = 0x5, + DW_CFA_restore_extended = 0x6, + DW_CFA_undefined = 0x7, + DW_CFA_same_value = 0x8, + DW_CFA_register = 0x9, + DW_CFA_remember_state = 0xA, + DW_CFA_restore_state = 0xB, + DW_CFA_def_cfa = 0xC, + DW_CFA_def_cfa_register = 0xD, + DW_CFA_def_cfa_offset = 0xE, + DW_CFA_def_cfa_expression = 0xF, + DW_CFA_expression = 0x10, + DW_CFA_offset_extended_sf = 0x11, + DW_CFA_def_cfa_sf = 0x12, + DW_CFA_def_cfa_offset_sf = 0x13, + DW_CFA_val_offset = 0x14, + DW_CFA_val_offset_sf = 0x15, + DW_CFA_val_expression = 0x16, + + // opcode is in high 2 bits, operand in is lower 6 bits + DW_CFA_advance_loc = 0x40, // operand is delta + DW_CFA_offset = 0x80, // operand is register + DW_CFA_restore = 0xC0, // operand is register + + // GNU extensions + DW_CFA_GNU_window_save = 0x2D, + DW_CFA_GNU_args_size = 0x2E, + DW_CFA_GNU_negative_offset_extended = 0x2F +}; + +// Expression Instructions +enum { + DW_OP_addr = 0x03, + DW_OP_deref = 0x06, + DW_OP_const1u = 0x08, + DW_OP_const1s = 0x09, + DW_OP_const2u = 0x0A, + DW_OP_const2s = 0x0B, + DW_OP_const4u = 0x0C, + DW_OP_const4s = 0x0D, + DW_OP_const8u = 0x0E, + DW_OP_const8s = 0x0F, + DW_OP_constu = 0x10, + DW_OP_consts = 0x11, + DW_OP_dup = 0x12, + DW_OP_drop = 0x13, + DW_OP_over = 0x14, + DW_OP_pick = 0x15, + DW_OP_swap = 0x16, + DW_OP_rot = 0x17, + DW_OP_xderef = 0x18, + DW_OP_abs = 0x19, + DW_OP_and = 0x1A, + DW_OP_div = 0x1B, + DW_OP_minus = 0x1C, + DW_OP_mod = 0x1D, + DW_OP_mul = 0x1E, + DW_OP_neg = 0x1F, + DW_OP_not = 0x20, + DW_OP_or = 0x21, + DW_OP_plus = 0x22, + DW_OP_plus_uconst = 0x23, + DW_OP_shl = 0x24, + DW_OP_shr = 0x25, + DW_OP_shra = 0x26, + DW_OP_xor = 0x27, + DW_OP_skip = 0x2F, + DW_OP_bra = 0x28, + DW_OP_eq = 0x29, + DW_OP_ge = 0x2A, + DW_OP_gt = 0x2B, + DW_OP_le = 0x2C, + DW_OP_lt = 0x2D, + DW_OP_ne = 0x2E, + DW_OP_lit0 = 0x30, + DW_OP_lit1 = 0x31, + DW_OP_lit2 = 0x32, + DW_OP_lit3 = 0x33, + DW_OP_lit4 = 0x34, + DW_OP_lit5 = 0x35, + DW_OP_lit6 = 0x36, + DW_OP_lit7 = 0x37, + DW_OP_lit8 = 0x38, + DW_OP_lit9 = 0x39, + DW_OP_lit10 = 0x3A, + DW_OP_lit11 = 0x3B, + DW_OP_lit12 = 0x3C, + DW_OP_lit13 = 0x3D, + DW_OP_lit14 = 0x3E, + DW_OP_lit15 = 0x3F, + DW_OP_lit16 = 0x40, + DW_OP_lit17 = 0x41, + DW_OP_lit18 = 0x42, + DW_OP_lit19 = 0x43, + DW_OP_lit20 = 0x44, + DW_OP_lit21 = 0x45, + DW_OP_lit22 = 0x46, + DW_OP_lit23 = 0x47, + DW_OP_lit24 = 0x48, + DW_OP_lit25 = 0x49, + DW_OP_lit26 = 0x4A, + DW_OP_lit27 = 0x4B, + DW_OP_lit28 = 0x4C, + DW_OP_lit29 = 0x4D, + DW_OP_lit30 = 0x4E, + DW_OP_lit31 = 0x4F, + DW_OP_reg0 = 0x50, + DW_OP_reg1 = 0x51, + DW_OP_reg2 = 0x52, + DW_OP_reg3 = 0x53, + DW_OP_reg4 = 0x54, + DW_OP_reg5 = 0x55, + DW_OP_reg6 = 0x56, + DW_OP_reg7 = 0x57, + DW_OP_reg8 = 0x58, + DW_OP_reg9 = 0x59, + DW_OP_reg10 = 0x5A, + DW_OP_reg11 = 0x5B, + DW_OP_reg12 = 0x5C, + DW_OP_reg13 = 0x5D, + DW_OP_reg14 = 0x5E, + DW_OP_reg15 = 0x5F, + DW_OP_reg16 = 0x60, + DW_OP_reg17 = 0x61, + DW_OP_reg18 = 0x62, + DW_OP_reg19 = 0x63, + DW_OP_reg20 = 0x64, + DW_OP_reg21 = 0x65, + DW_OP_reg22 = 0x66, + DW_OP_reg23 = 0x67, + DW_OP_reg24 = 0x68, + DW_OP_reg25 = 0x69, + DW_OP_reg26 = 0x6A, + DW_OP_reg27 = 0x6B, + DW_OP_reg28 = 0x6C, + DW_OP_reg29 = 0x6D, + DW_OP_reg30 = 0x6E, + DW_OP_reg31 = 0x6F, + DW_OP_breg0 = 0x70, + DW_OP_breg1 = 0x71, + DW_OP_breg2 = 0x72, + DW_OP_breg3 = 0x73, + DW_OP_breg4 = 0x74, + DW_OP_breg5 = 0x75, + DW_OP_breg6 = 0x76, + DW_OP_breg7 = 0x77, + DW_OP_breg8 = 0x78, + DW_OP_breg9 = 0x79, + DW_OP_breg10 = 0x7A, + DW_OP_breg11 = 0x7B, + DW_OP_breg12 = 0x7C, + DW_OP_breg13 = 0x7D, + DW_OP_breg14 = 0x7E, + DW_OP_breg15 = 0x7F, + DW_OP_breg16 = 0x80, + DW_OP_breg17 = 0x81, + DW_OP_breg18 = 0x82, + DW_OP_breg19 = 0x83, + DW_OP_breg20 = 0x84, + DW_OP_breg21 = 0x85, + DW_OP_breg22 = 0x86, + DW_OP_breg23 = 0x87, + DW_OP_breg24 = 0x88, + DW_OP_breg25 = 0x89, + DW_OP_breg26 = 0x8A, + DW_OP_breg27 = 0x8B, + DW_OP_breg28 = 0x8C, + DW_OP_breg29 = 0x8D, + DW_OP_breg30 = 0x8E, + DW_OP_breg31 = 0x8F, + DW_OP_regx = 0x90, + DW_OP_fbreg = 0x91, + DW_OP_bregx = 0x92, + DW_OP_piece = 0x93, + DW_OP_deref_size = 0x94, + DW_OP_xderef_size = 0x95, + DW_OP_nop = 0x96, + DW_OP_push_object_addres = 0x97, + DW_OP_call2 = 0x98, + DW_OP_call4 = 0x99, + DW_OP_call_ref = 0x9A, + DW_OP_lo_user = 0xE0, + DW_OP_APPLE_uninit = 0xF0, + DW_OP_hi_user = 0xFF +}; diff --git a/Crashlytics/upload-symbols b/Crashlytics/upload-symbols new file mode 100755 index 0000000000000000000000000000000000000000..f76a77c1888e120e4525d9943340e4c4d42a04c7 GIT binary patch literal 506752 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